Initial commit: site monorepo with API, web, and infra.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
/**
|
||||
* Orchestrator boot adapter: JWT, enterprise scope, API base for copied WESP static UI.
|
||||
*/
|
||||
(function (global) {
|
||||
const cfg = global.__WESP_ORCH__ || {};
|
||||
const API_BASE = cfg.apiBase || "/api/v1";
|
||||
|
||||
const AUTH_MAP = {
|
||||
"/api/auth/change_credentials": "/api/v1/users/me/password",
|
||||
};
|
||||
|
||||
const WESP_API_PREFIXES = [
|
||||
"/api/admin/",
|
||||
"/api/notifications",
|
||||
"/api/updates/",
|
||||
"/api/sync/",
|
||||
"/api/feed_dispensers",
|
||||
"/api/components",
|
||||
"/api/recipes",
|
||||
"/api/reports",
|
||||
"/api/analytics/",
|
||||
"/api/feed-quality/",
|
||||
"/api/periods",
|
||||
"/api/auth/",
|
||||
];
|
||||
|
||||
function readToken() {
|
||||
return (global.__WESP_ORCH__ && global.__WESP_ORCH__.accessToken) || "";
|
||||
}
|
||||
|
||||
function readEnterpriseId() {
|
||||
return (global.__WESP_ORCH__ && global.__WESP_ORCH__.enterpriseId) || "";
|
||||
}
|
||||
|
||||
function isExternalUrl(url) {
|
||||
return /^https?:\/\//i.test(url);
|
||||
}
|
||||
|
||||
function patchUrl(url) {
|
||||
if (typeof url !== "string" || isExternalUrl(url)) return url;
|
||||
for (const [from, to] of Object.entries(AUTH_MAP)) {
|
||||
if (url === from || url.startsWith(from + "?")) {
|
||||
return to + url.slice(from.length);
|
||||
}
|
||||
}
|
||||
if (url.startsWith("/api/v1/sync/")) {
|
||||
return url;
|
||||
}
|
||||
for (let i = 0; i < WESP_API_PREFIXES.length; i++) {
|
||||
if (url.startsWith(WESP_API_PREFIXES[i])) {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
if (url.startsWith("/api/") && !url.startsWith("/api/v1/")) {
|
||||
return API_BASE + url.slice(4);
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
function withAuth(url, init) {
|
||||
if (isExternalUrl(url)) {
|
||||
return init || {};
|
||||
}
|
||||
const token = readToken();
|
||||
const enterpriseId = readEnterpriseId();
|
||||
const headers = new Headers((init && init.headers) || {});
|
||||
if (token && !headers.has("Authorization")) {
|
||||
headers.set("Authorization", "Bearer " + token);
|
||||
}
|
||||
if (enterpriseId && !headers.has("X-Enterprise-Id")) {
|
||||
headers.set("X-Enterprise-Id", enterpriseId);
|
||||
}
|
||||
return Object.assign({}, init || {}, { headers });
|
||||
}
|
||||
|
||||
function appendEnterpriseQuery(url) {
|
||||
if (isExternalUrl(url)) return url;
|
||||
const enterpriseId = readEnterpriseId();
|
||||
if (!enterpriseId || url.indexOf("enterprise_id=") >= 0) {
|
||||
return url;
|
||||
}
|
||||
const sep = url.indexOf("?") >= 0 ? "&" : "?";
|
||||
return url + sep + "enterprise_id=" + encodeURIComponent(enterpriseId);
|
||||
}
|
||||
|
||||
const nativeFetch = global.fetch.bind(global);
|
||||
global.fetch = function (input, init) {
|
||||
if (typeof input === "string") {
|
||||
const patched = appendEnterpriseQuery(patchUrl(input));
|
||||
return nativeFetch(patched, withAuth(patched, init));
|
||||
}
|
||||
return nativeFetch(input, withAuth("", init));
|
||||
};
|
||||
|
||||
global.WespOrchestratorBoot = {
|
||||
apiBase: API_BASE,
|
||||
get enterpriseId() {
|
||||
return readEnterpriseId();
|
||||
},
|
||||
};
|
||||
})(window);
|
||||
Reference in New Issue
Block a user