@betterportal/config-manager 11.0.0 → 11.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/lib/.bsb/clients/service-betterportal-config-manager.d.ts +1 -1
- package/lib/.bsb/clients/service-betterportal-config-manager.js +1 -1
- package/lib/bp-contracts/org.betterportal.config-manager.json +1 -1
- package/lib/plugins/service-betterportal-config-manager/accessControl.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/accessControl.js +39 -6
- package/lib/plugins/service-betterportal-config-manager/accessControl.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts +25 -2
- package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/adminApi.js +36 -21
- package/lib/plugins/service-betterportal-config-manager/adminApi.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/appQueries.d.ts +9 -3
- package/lib/plugins/service-betterportal-config-manager/appQueries.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.js +5 -3
- package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.js +7 -2
- package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_renderer.bootstrap5/GET.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_renderer.bootstrap5/GET.js +5 -2
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_renderer.bootstrap5/GET.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_renderer.bootstrap5/GET.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_renderer.bootstrap5/GET.js +11 -4
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_renderer.bootstrap5/GET.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/previewApi.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/previewApi.js +4 -2
- package/lib/plugins/service-betterportal-config-manager/previewApi.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/previewEnvironments.d.ts +2 -2
- package/lib/plugins/service-betterportal-config-manager/previewEnvironments.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/previewEnvironments.js +63 -10
- package/lib/plugins/service-betterportal-config-manager/previewEnvironments.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/publicJsonBody.d.ts +4 -0
- package/lib/plugins/service-betterportal-config-manager/publicJsonBody.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/publicJsonBody.js +39 -0
- package/lib/plugins/service-betterportal-config-manager/publicJsonBody.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/setupTokens.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/setupTokens.js +35 -8
- package/lib/plugins/service-betterportal-config-manager/setupTokens.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/storage/appData.d.ts +3 -1
- package/lib/plugins/service-betterportal-config-manager/storage/appData.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/syncApi.js +13 -6
- package/lib/plugins/service-betterportal-config-manager/syncApi.js.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/webhooks.d.ts +7 -1
- package/lib/plugins/service-betterportal-config-manager/webhooks.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-config-manager/webhooks.js +100 -10
- package/lib/plugins/service-betterportal-config-manager/webhooks.js.map +1 -1
- package/lib/schemas/service-betterportal-config-manager.json +1 -1
- package/lib/schemas/service-betterportal-config-manager.plugin.json +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -9,3 +9,7 @@ Identical preview deployment POST retries replay the original response, includin
|
|
|
9
9
|
Config streams revalidate credentials on updates, coalesce concurrent changes and omit unchanged payloads. Webhook delivery remains at-least-once: receivers must deduplicate by `x-bp-webhook-id`. Each attempt has a 10-second request deadline and is leased immediately before delivery.
|
|
10
10
|
|
|
11
11
|
Preview API writes retry revision conflicts up to five total attempts, reloading configuration and rechecking authorization and credential replay each time. Continued contention returns HTTP 503 with `Retry-After: 1`; callers may retry the same request. This also covers preview deletion and expiry cleanup during GET.
|
|
12
|
+
|
|
13
|
+
Preview route refreshes consolidate equivalent generated API mounts for the same service, view and URL pattern. For example, separate GET, PUT and DELETE mounts copied from the source app become one generated API mount with all current API operations, preserving the first mount ID and compatible request and presentation settings. Distinct valid aliases and service-path variants survive; aliases retain their selected operations. Conflicting request settings or paths owned by unrelated routes still return HTTP 409. Repeating a successful refresh leaves the routes unchanged; deleting staging is unnecessary. See [preview deployment operations](../../../../docs/operations/preview-environments.md) for an example.
|
|
14
|
+
|
|
15
|
+
Preview reconciliation also owns API mounts during normal service manifest sync. Generic source-app normalization does not rewrite preview aliases or strip their query strings, fixed parameters or path variants before reconciliation.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-generated BSB virtual client for service-betterportal-config-manager
|
|
3
3
|
* DO NOT EDIT - Regenerated on every build
|
|
4
|
-
* @version 11.0.
|
|
4
|
+
* @version 11.0.2
|
|
5
5
|
*/
|
|
6
6
|
import { ServiceClient, BSBService } from "@bsb/base";
|
|
7
7
|
import type { Observable, BSBServiceClientDefinition, EventInputType } from "@bsb/base";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-generated BSB virtual client for service-betterportal-config-manager
|
|
3
3
|
* DO NOT EDIT - Regenerated on every build
|
|
4
|
-
* @version 11.0.
|
|
4
|
+
* @version 11.0.2
|
|
5
5
|
*/
|
|
6
6
|
import { ServiceClient, importPortableSchema, createFireAndForgetEvent, createBroadcastEvent, createEventSchemas } from "@bsb/base";
|
|
7
7
|
const _webhookDeliveryAvailableSchema = importPortableSchema(JSON.parse("{\"anyvaliVersion\":\"1.0\",\"schemaVersion\":\"1.1\",\"root\":{\"kind\":\"object\",\"properties\":{},\"required\":[],\"unknownKeys\":\"strip\"},\"definitions\":{},\"extensions\":{}}"));
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"pluginId": "org.betterportal.config-manager",
|
|
5
5
|
"title": "BetterPortal Config Manager",
|
|
6
6
|
"description": "Admin-facing BetterPortal service for discovering and managing service config surfaces.",
|
|
7
|
-
"version": "11.0.
|
|
7
|
+
"version": "11.0.2",
|
|
8
8
|
"category": "service",
|
|
9
9
|
"deploymentModes": [
|
|
10
10
|
"self-hosted"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-config-manager/accessControl.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"accessControl.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-config-manager/accessControl.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAwJzD,wFAAwF;AACxF,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAiEtI"}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
|
-
import { createStaticJwksVerifier, eventHeaders, jsonResponse, resolveEmbeddedRequestContext } from "@betterportal/framework";
|
|
1
|
+
import { createStaticJwksVerifier, checkBoundedRequestBody, eventHeaders, jsonResponse, readBoundedJsonBody, resolveEmbeddedRequestContext } from "@betterportal/framework";
|
|
2
2
|
import { verifyBootstrapAdminToken } from "./bootstrapAccess.js";
|
|
3
3
|
const ADMIN = "/.well-known/bp/admin";
|
|
4
4
|
const MANAGE = "/.well-known/bp/manage";
|
|
5
5
|
const CONFIG_MANAGER_ID = "org.betterportal.config-manager";
|
|
6
|
+
const MAX_RAW_BODY_BYTES = 1024 * 1024;
|
|
7
|
+
const MAX_RAW_MULTIPART_BYTES = 25 * 1024 * 1024 + 128 * 1024;
|
|
6
8
|
function bearer(event) {
|
|
7
9
|
return /^Bearer\s+(\S+)$/i.exec(event.req.headers.get("authorization") ?? "")?.[1];
|
|
8
10
|
}
|
|
11
|
+
async function guardRawBody(event) {
|
|
12
|
+
if (!event.req.body)
|
|
13
|
+
return undefined;
|
|
14
|
+
const multipart = (event.req.headers.get("content-type") ?? "").toLowerCase().startsWith("multipart/form-data");
|
|
15
|
+
const result = await checkBoundedRequestBody(event.req.clone(), multipart ? MAX_RAW_MULTIPART_BYTES : MAX_RAW_BODY_BYTES);
|
|
16
|
+
if (result)
|
|
17
|
+
void event.req.body.cancel().catch(() => undefined);
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
9
20
|
function inTree(path, root) {
|
|
10
21
|
return path === root || path.startsWith(`${root}/`);
|
|
11
22
|
}
|
|
@@ -18,7 +29,12 @@ function bootstrapRoute(path, method, appId) {
|
|
|
18
29
|
|| path === `${ADMIN}/apps/${encodeURIComponent(appId)}/auth/roles`);
|
|
19
30
|
}
|
|
20
31
|
async function allowedBootstrapRequest(config, app, path, event) {
|
|
21
|
-
const
|
|
32
|
+
const parsed = await readBoundedJsonBody(event.req.clone(), 128 * 1024);
|
|
33
|
+
if (parsed instanceof Response) {
|
|
34
|
+
void event.req.body?.cancel().catch(() => undefined);
|
|
35
|
+
return parsed;
|
|
36
|
+
}
|
|
37
|
+
const body = parsed;
|
|
22
38
|
if (!body || typeof body !== "object" || Array.isArray(body))
|
|
23
39
|
return false;
|
|
24
40
|
if (path !== `${ADMIN}/services/begin-install`)
|
|
@@ -91,7 +107,12 @@ async function permissionForAdmin(path, method, event, config) {
|
|
|
91
107
|
return { viewId: "services.index", action: suffix.endsWith("/purge") ? "delete" : suffix.endsWith("/migrate-to-shared") ? "update" : action };
|
|
92
108
|
}
|
|
93
109
|
if (suffix === "services/begin-install" && method === "POST") {
|
|
94
|
-
const
|
|
110
|
+
const parsed = await readBoundedJsonBody(event.req.clone(), 128 * 1024);
|
|
111
|
+
if (parsed instanceof Response) {
|
|
112
|
+
void event.req.body?.cancel().catch(() => undefined);
|
|
113
|
+
return parsed;
|
|
114
|
+
}
|
|
115
|
+
const body = parsed;
|
|
95
116
|
const existingInstance = typeof body?.instanceId === "string" && (config.platformServices.some(service => service.id === body.instanceId)
|
|
96
117
|
|| config.tenants.some(tenant => tenant.services.some(service => service.id === body.instanceId)));
|
|
97
118
|
const registeredShared = typeof body?.sharedServiceId === "string" && config.sharedServiceCatalog.some(service => service.id === body.sharedServiceId && !!service.apiKeyHash);
|
|
@@ -107,7 +128,12 @@ async function permissionForAdmin(path, method, event, config) {
|
|
|
107
128
|
if (suffix === "wizard/cleanup-provisional-service" && method === "POST")
|
|
108
129
|
return { viewId: "services.index", action: "delete" };
|
|
109
130
|
if (suffix === "config-ticket" && method === "POST") {
|
|
110
|
-
const
|
|
131
|
+
const parsed = await readBoundedJsonBody(event.req.clone(), 128 * 1024);
|
|
132
|
+
if (parsed instanceof Response) {
|
|
133
|
+
void event.req.body?.cancel().catch(() => undefined);
|
|
134
|
+
return parsed;
|
|
135
|
+
}
|
|
136
|
+
const body = parsed;
|
|
111
137
|
return { viewId: "services.index", action: Array.isArray(body?.actions) && body.actions.includes("config.write") ? "update" : "read" };
|
|
112
138
|
}
|
|
113
139
|
return undefined;
|
|
@@ -157,8 +183,10 @@ export function registerRawManagementAccessControl(app, store, cpState) {
|
|
|
157
183
|
try {
|
|
158
184
|
const scope = await verifyBootstrapAdminToken(cpState, token);
|
|
159
185
|
if (scope.tenantId === target.tenantId && scope.appId === target.id) {
|
|
160
|
-
|
|
161
|
-
|
|
186
|
+
const allowed = await allowedBootstrapRequest(config, target, path, event);
|
|
187
|
+
if (allowed instanceof Response)
|
|
188
|
+
return allowed;
|
|
189
|
+
return allowed ? undefined : jsonResponse({ error: "Bootstrap operation is outside its setup scope" }, 403);
|
|
162
190
|
}
|
|
163
191
|
}
|
|
164
192
|
catch { /* A normal management user token may still authorize this request. */ }
|
|
@@ -181,12 +209,17 @@ export function registerRawManagementAccessControl(app, store, cpState) {
|
|
|
181
209
|
if (claims.tenantId !== target.tenantId || claims.appId !== target.id || claims.tokenType !== "access") {
|
|
182
210
|
return jsonResponse({ error: "Management token scope mismatch" }, 401);
|
|
183
211
|
}
|
|
212
|
+
const bodyError = await guardRawBody(event);
|
|
213
|
+
if (bodyError)
|
|
214
|
+
return bodyError;
|
|
184
215
|
const root = target.id === config.configManagement.managementAppId
|
|
185
216
|
&& target.tenantId === config.configManagement.adminTenantId && claims.roles.includes("*");
|
|
186
217
|
if (admin) {
|
|
187
218
|
if (root)
|
|
188
219
|
return;
|
|
189
220
|
const policy = await permissionForAdmin(path, method, event, config);
|
|
221
|
+
if (policy instanceof Response)
|
|
222
|
+
return policy;
|
|
190
223
|
return policy && hasPermission(config, target, claims.roles, policy.viewId, policy.action)
|
|
191
224
|
? undefined : jsonResponse({ error: "Platform management permission required" }, 403);
|
|
192
225
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessControl.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-config-manager/accessControl.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accessControl.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-config-manager/accessControl.ts"],"names":[],"mappings":"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"}
|
|
@@ -111,11 +111,13 @@ declare function automationServiceCatalog(config: AppEditorData, appDef: BetterP
|
|
|
111
111
|
}[];
|
|
112
112
|
role: string | undefined;
|
|
113
113
|
chrome: {
|
|
114
|
-
[x: string]: string | number | boolean;
|
|
114
|
+
[x: string]: string | number | boolean | string[];
|
|
115
115
|
hideMenu?: boolean | undefined;
|
|
116
116
|
hideHeader?: boolean | undefined;
|
|
117
117
|
hideFooter?: boolean | undefined;
|
|
118
118
|
fullScreen?: boolean | undefined;
|
|
119
|
+
title?: string | undefined;
|
|
120
|
+
parents?: string[] | undefined;
|
|
119
121
|
} | undefined;
|
|
120
122
|
dependencies: {
|
|
121
123
|
operationId: string;
|
|
@@ -248,11 +250,13 @@ declare function automationServiceCatalog(config: AppEditorData, appDef: BetterP
|
|
|
248
250
|
}[];
|
|
249
251
|
role: string | undefined;
|
|
250
252
|
chrome: {
|
|
251
|
-
[x: string]: string | number | boolean;
|
|
253
|
+
[x: string]: string | number | boolean | string[];
|
|
252
254
|
hideMenu?: boolean | undefined;
|
|
253
255
|
hideHeader?: boolean | undefined;
|
|
254
256
|
hideFooter?: boolean | undefined;
|
|
255
257
|
fullScreen?: boolean | undefined;
|
|
258
|
+
title?: string | undefined;
|
|
259
|
+
parents?: string[] | undefined;
|
|
256
260
|
} | undefined;
|
|
257
261
|
dependencies: {
|
|
258
262
|
operationId: string;
|
|
@@ -307,6 +311,25 @@ export declare function purgeServiceReferences(config: BetterPortalConfig, tenan
|
|
|
307
311
|
webhooksRemoved: number;
|
|
308
312
|
};
|
|
309
313
|
export declare function registerAdminApiRoutes(app: BetterPortalH3App, store: PlatformConfigStore, cpState: CpBootstrapState, database?: AppDatabase): void;
|
|
314
|
+
export declare function renderWizardStep2(d: {
|
|
315
|
+
tenantId: string;
|
|
316
|
+
hostname: string;
|
|
317
|
+
pluginId: string;
|
|
318
|
+
version: string;
|
|
319
|
+
viewCount: number;
|
|
320
|
+
title: string;
|
|
321
|
+
schema: string;
|
|
322
|
+
adminApiBase: string;
|
|
323
|
+
}): string;
|
|
324
|
+
export declare function renderWizardStep3(d: {
|
|
325
|
+
apiKey: string;
|
|
326
|
+
deploymentMode: string;
|
|
327
|
+
title: string;
|
|
328
|
+
tenantId?: string;
|
|
329
|
+
serviceInstanceId?: string;
|
|
330
|
+
serviceUrl?: string;
|
|
331
|
+
adminApiBase?: string;
|
|
332
|
+
}): string;
|
|
310
333
|
export declare function renderConfigClientShell(d: {
|
|
311
334
|
hostname: string;
|
|
312
335
|
tenantId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adminApi.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-config-manager/adminApi.ts"],"names":[],"mappings":"AACA,OAAO,EAA2C,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhH,OAAO,KAAK,EACV,iBAAiB,EAEjB,mBAAmB,EACnB,SAAS,EACV,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"adminApi.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-config-manager/adminApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { eventObservability } from "@betterportal/framework";
|
|
|
2
2
|
import { editAppRows, readApp, readRequestConfig } from "./appQueries.js";
|
|
3
3
|
import { isMenuRouteExcluded } from "./routeMounts.js";
|
|
4
4
|
import * as av from "anyvali";
|
|
5
|
-
import { AppAuthRoleSchema, eventHeaders, htmlResponse, jsonResponse, resolveEmbeddedRequestContext, signServiceConfigTicket, uuidv7, BetterPortalMenuItemSchema, BetterPortalThemeConfigSchema } from "@betterportal/framework";
|
|
5
|
+
import { AppAuthRoleSchema, eventHeaders, htmlResponse, jsonResponse, readBoundedJsonBody, resolveEmbeddedRequestContext, signServiceConfigTicket, uuidv7, BetterPortalMenuItemSchema, BetterPortalThemeConfigSchema } from "@betterportal/framework";
|
|
6
6
|
import { generateApiKey, hashApiKey } from "./storage/index.js";
|
|
7
7
|
import { getManifestCache } from "./syncApi.js";
|
|
8
8
|
import { apiRoutePath, appRoutePatternKey, isApiRoute, pageRoutePath } from "./routeMounts.js";
|
|
@@ -44,6 +44,9 @@ async function readFormBodyWithArrays(event) {
|
|
|
44
44
|
function escapeHtml(s) {
|
|
45
45
|
return s.replace(/[&<>"']/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]));
|
|
46
46
|
}
|
|
47
|
+
function inlineScriptJson(value) {
|
|
48
|
+
return JSON.stringify(value ?? null).replace(/</g, "\\u003c");
|
|
49
|
+
}
|
|
47
50
|
async function readJsonBody(event) {
|
|
48
51
|
const parsed = await event.req.json().catch(() => null);
|
|
49
52
|
return (parsed && typeof parsed === "object" && !Array.isArray(parsed))
|
|
@@ -1777,13 +1780,16 @@ export function registerAdminApiRoutes(app, store, cpState, database) {
|
|
|
1777
1780
|
const appId = getParam(event, "appId");
|
|
1778
1781
|
if (!appId)
|
|
1779
1782
|
return jsonResponse({ error: "appId required" }, 400);
|
|
1780
|
-
const body = await readJsonBody(event);
|
|
1781
|
-
const roles = Array.isArray(body.roles) ? body.roles : undefined;
|
|
1782
|
-
if (!roles)
|
|
1783
|
-
return jsonResponse({ error: "roles array required" }, 400);
|
|
1784
1783
|
const identity = await readServiceIdentity(event);
|
|
1785
1784
|
if (identity instanceof Response)
|
|
1786
1785
|
return identity;
|
|
1786
|
+
const parsedBody = await readBoundedJsonBody(event.req, 1024 * 1024);
|
|
1787
|
+
if (parsedBody instanceof Response)
|
|
1788
|
+
return parsedBody;
|
|
1789
|
+
const body = parsedBody && typeof parsedBody === "object" && !Array.isArray(parsedBody) ? parsedBody : {};
|
|
1790
|
+
const roles = Array.isArray(body.roles) ? body.roles : undefined;
|
|
1791
|
+
if (!roles)
|
|
1792
|
+
return jsonResponse({ error: "roles array required" }, 400);
|
|
1787
1793
|
return editApp(store, appId, async (config) => {
|
|
1788
1794
|
const appDef = config.apps.find(app => app.id === appId);
|
|
1789
1795
|
if (!appDef)
|
|
@@ -1802,13 +1808,16 @@ export function registerAdminApiRoutes(app, store, cpState, database) {
|
|
|
1802
1808
|
}, database, event);
|
|
1803
1809
|
});
|
|
1804
1810
|
app.put(`${API_BASE}/services/self-mutation`, async (event) => {
|
|
1805
|
-
const parsed = SelfMutationRequestSchema.safeParse(await readJsonBody(event));
|
|
1806
|
-
if (!parsed.success)
|
|
1807
|
-
return jsonResponse({ error: "Invalid self-mutation request", issues: parsed.issues }, 400);
|
|
1808
|
-
const { tenantId, appId, type, mutation } = parsed.data;
|
|
1809
1811
|
const identity = await readServiceIdentity(event);
|
|
1810
1812
|
if (identity instanceof Response)
|
|
1811
1813
|
return identity;
|
|
1814
|
+
const body = await readBoundedJsonBody(event.req, 1024 * 1024);
|
|
1815
|
+
if (body instanceof Response)
|
|
1816
|
+
return body;
|
|
1817
|
+
const parsed = SelfMutationRequestSchema.safeParse(body);
|
|
1818
|
+
if (!parsed.success)
|
|
1819
|
+
return jsonResponse({ error: "Invalid self-mutation request", issues: parsed.issues }, 400);
|
|
1820
|
+
const { tenantId, appId, type, mutation } = parsed.data;
|
|
1812
1821
|
if (type === "theme") {
|
|
1813
1822
|
const { config, appDef } = await getAppOr404(appId);
|
|
1814
1823
|
if (!appDef || appDef.tenantId !== tenantId)
|
|
@@ -2613,7 +2622,7 @@ function renderWizardStep1(config, error, prefill, adminApiBase = API_BASE) {
|
|
|
2613
2622
|
</script>
|
|
2614
2623
|
</div>`;
|
|
2615
2624
|
}
|
|
2616
|
-
function renderWizardStep2(d) {
|
|
2625
|
+
export function renderWizardStep2(d) {
|
|
2617
2626
|
return `<div id="bp-wizard-step">
|
|
2618
2627
|
<div class="mb-3 text-secondary small">Step 2 of 3</div>
|
|
2619
2628
|
<div class="alert alert-success mb-3">
|
|
@@ -2668,7 +2677,7 @@ function renderWizardStep2(d) {
|
|
|
2668
2677
|
back.addEventListener("click", async (event) => {
|
|
2669
2678
|
event.preventDefault();
|
|
2670
2679
|
event.stopImmediatePropagation();
|
|
2671
|
-
const url = ${
|
|
2680
|
+
const url = ${inlineScriptJson(d.adminApiBase)} + "/wizard/step1?tenantId=" + encodeURIComponent(${inlineScriptJson(d.tenantId)}) + "&hostname=" + encodeURIComponent(${inlineScriptJson(d.hostname)});
|
|
2672
2681
|
const response = await fetch(url, { headers: { Accept: "text/html" } });
|
|
2673
2682
|
const html = await response.text();
|
|
2674
2683
|
if (step) step.outerHTML = html;
|
|
@@ -2678,7 +2687,7 @@ function renderWizardStep2(d) {
|
|
|
2678
2687
|
</script>
|
|
2679
2688
|
</div>`;
|
|
2680
2689
|
}
|
|
2681
|
-
function renderWizardStep3(d) {
|
|
2690
|
+
export function renderWizardStep3(d) {
|
|
2682
2691
|
if (d.tenantId && d.serviceInstanceId && d.serviceUrl) {
|
|
2683
2692
|
return `<div id="bp-wizard-step">
|
|
2684
2693
|
<div class="mb-3 text-secondary small">Step 3 of 3</div>
|
|
@@ -2694,7 +2703,13 @@ function renderWizardStep3(d) {
|
|
|
2694
2703
|
const setStatus = (kind, heading, message) => {
|
|
2695
2704
|
if (!status) return;
|
|
2696
2705
|
status.className = "alert alert-" + kind;
|
|
2697
|
-
|
|
2706
|
+
const title = document.createElement("h6");
|
|
2707
|
+
title.className = "alert-heading";
|
|
2708
|
+
title.textContent = heading;
|
|
2709
|
+
const detail = document.createElement("p");
|
|
2710
|
+
detail.className = "mb-0 small";
|
|
2711
|
+
detail.textContent = message;
|
|
2712
|
+
status.replaceChildren(title, detail);
|
|
2698
2713
|
};
|
|
2699
2714
|
const postJson = async (url, body) => {
|
|
2700
2715
|
const response = await fetch(url, {
|
|
@@ -2708,12 +2723,12 @@ function renderWizardStep3(d) {
|
|
|
2708
2723
|
};
|
|
2709
2724
|
(async () => {
|
|
2710
2725
|
try {
|
|
2711
|
-
const install = await postJson(${
|
|
2712
|
-
serviceUrl: ${
|
|
2713
|
-
tenantId: ${
|
|
2714
|
-
instanceId: ${
|
|
2726
|
+
const install = await postJson(${inlineScriptJson((d.adminApiBase ?? API_BASE).replace(/\/+$/, ""))} + "/services/begin-install", {
|
|
2727
|
+
serviceUrl: ${inlineScriptJson(d.serviceUrl)},
|
|
2728
|
+
tenantId: ${inlineScriptJson(d.tenantId)},
|
|
2729
|
+
instanceId: ${inlineScriptJson(d.serviceInstanceId)}
|
|
2715
2730
|
});
|
|
2716
|
-
await postJson(${
|
|
2731
|
+
await postJson(${inlineScriptJson(d.serviceUrl)} + "/.well-known/bp/install", {
|
|
2717
2732
|
setupToken: install.setupToken,
|
|
2718
2733
|
cpUrl: install.cpUrl
|
|
2719
2734
|
});
|
|
@@ -2721,9 +2736,9 @@ function renderWizardStep3(d) {
|
|
|
2721
2736
|
if (done) done.disabled = false;
|
|
2722
2737
|
} catch (error) {
|
|
2723
2738
|
try {
|
|
2724
|
-
await postJson(${
|
|
2725
|
-
tenantId: ${
|
|
2726
|
-
serviceInstanceId: ${
|
|
2739
|
+
await postJson(${inlineScriptJson((d.adminApiBase ?? API_BASE).replace(/\/+$/, ""))} + "/wizard/cleanup-provisional-service", {
|
|
2740
|
+
tenantId: ${inlineScriptJson(d.tenantId)},
|
|
2741
|
+
serviceInstanceId: ${inlineScriptJson(d.serviceInstanceId)}
|
|
2727
2742
|
});
|
|
2728
2743
|
} catch { /* cleanup best effort */ }
|
|
2729
2744
|
setStatus("danger", "Install Failed", error instanceof Error ? error.message : String(error));
|