@betterportal/config-manager 11.0.1 → 11.0.3

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.
Files changed (49) hide show
  1. package/lib/.bsb/clients/service-betterportal-config-manager.d.ts +1 -1
  2. package/lib/.bsb/clients/service-betterportal-config-manager.js +1 -1
  3. package/lib/bp-contracts/org.betterportal.config-manager.json +1 -1
  4. package/lib/plugins/service-betterportal-config-manager/accessControl.d.ts.map +1 -1
  5. package/lib/plugins/service-betterportal-config-manager/accessControl.js +39 -6
  6. package/lib/plugins/service-betterportal-config-manager/accessControl.js.map +1 -1
  7. package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts +25 -2
  8. package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts.map +1 -1
  9. package/lib/plugins/service-betterportal-config-manager/adminApi.js +36 -21
  10. package/lib/plugins/service-betterportal-config-manager/adminApi.js.map +1 -1
  11. package/lib/plugins/service-betterportal-config-manager/appQueries.d.ts +9 -3
  12. package/lib/plugins/service-betterportal-config-manager/appQueries.d.ts.map +1 -1
  13. package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.d.ts.map +1 -1
  14. package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.js +5 -3
  15. package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.js.map +1 -1
  16. package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.d.ts.map +1 -1
  17. package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.js +7 -2
  18. package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.js.map +1 -1
  19. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_renderer.bootstrap5/GET.d.ts.map +1 -1
  20. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_renderer.bootstrap5/GET.js +5 -2
  21. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_renderer.bootstrap5/GET.js.map +1 -1
  22. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_renderer.bootstrap5/GET.d.ts.map +1 -1
  23. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_renderer.bootstrap5/GET.js +11 -4
  24. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_renderer.bootstrap5/GET.js.map +1 -1
  25. package/lib/plugins/service-betterportal-config-manager/previewApi.d.ts.map +1 -1
  26. package/lib/plugins/service-betterportal-config-manager/previewApi.js +4 -2
  27. package/lib/plugins/service-betterportal-config-manager/previewApi.js.map +1 -1
  28. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.d.ts +2 -2
  29. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.d.ts.map +1 -1
  30. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.js.map +1 -1
  31. package/lib/plugins/service-betterportal-config-manager/publicJsonBody.d.ts +4 -0
  32. package/lib/plugins/service-betterportal-config-manager/publicJsonBody.d.ts.map +1 -0
  33. package/lib/plugins/service-betterportal-config-manager/publicJsonBody.js +39 -0
  34. package/lib/plugins/service-betterportal-config-manager/publicJsonBody.js.map +1 -0
  35. package/lib/plugins/service-betterportal-config-manager/setupTokens.d.ts.map +1 -1
  36. package/lib/plugins/service-betterportal-config-manager/setupTokens.js +35 -8
  37. package/lib/plugins/service-betterportal-config-manager/setupTokens.js.map +1 -1
  38. package/lib/plugins/service-betterportal-config-manager/storage/appData.d.ts +3 -1
  39. package/lib/plugins/service-betterportal-config-manager/storage/appData.d.ts.map +1 -1
  40. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts.map +1 -1
  41. package/lib/plugins/service-betterportal-config-manager/syncApi.js +5 -2
  42. package/lib/plugins/service-betterportal-config-manager/syncApi.js.map +1 -1
  43. package/lib/plugins/service-betterportal-config-manager/webhooks.d.ts +7 -1
  44. package/lib/plugins/service-betterportal-config-manager/webhooks.d.ts.map +1 -1
  45. package/lib/plugins/service-betterportal-config-manager/webhooks.js +100 -10
  46. package/lib/plugins/service-betterportal-config-manager/webhooks.js.map +1 -1
  47. package/lib/schemas/service-betterportal-config-manager.json +1 -1
  48. package/lib/schemas/service-betterportal-config-manager.plugin.json +1 -1
  49. package/package.json +3 -3
@@ -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.1
4
+ * @version 11.0.3
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.1
4
+ * @version 11.0.3
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.1",
7
+ "version": "11.0.3",
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,EAQL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA+HzD,wFAAwF;AACxF,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CA6DtI"}
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 body = await event.req.clone().json().catch(() => null);
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 body = await event.req.clone().json().catch(() => null);
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 body = await event.req.clone().json().catch(() => null);
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
- return await allowedBootstrapRequest(config, target, path, event)
161
- ? undefined : jsonResponse({ error: "Bootstrap operation is outside its setup scope" }, 403);
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;AAcjC,OAAO,KAAK,EAAuE,kBAAkB,EAAE,eAAe,EAAgE,MAAM,yBAAyB,CAAC;AACtN,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAkLzD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACvC,MAAM,GAAG,SAAS,CAepB;AAwGD,iBAAS,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkE/E;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,GAAG,MAAM,CA4CpG;AA8RD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAiDtH;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IACvG,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB,CA2FA;AAkPD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE,WAAW,GACrB,IAAI,CAyjDN;AAwPD,wBAAgB,uBAAuB,CAAC,CAAC,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD,GAAG,MAAM,CAwaT"}
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) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }[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 = ${JSON.stringify(d.adminApiBase)} + "/wizard/step1?tenantId=" + encodeURIComponent(${JSON.stringify(d.tenantId)}) + "&hostname=" + encodeURIComponent(${JSON.stringify(d.hostname)});
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
- status.innerHTML = '<h6 class="alert-heading">' + heading + '</h6><p class="mb-0 small">' + message + '</p>';
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(${JSON.stringify((d.adminApiBase ?? API_BASE).replace(/\/+$/, ""))} + "/services/begin-install", {
2712
- serviceUrl: ${JSON.stringify(d.serviceUrl)},
2713
- tenantId: ${JSON.stringify(d.tenantId)},
2714
- instanceId: ${JSON.stringify(d.serviceInstanceId)}
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(${JSON.stringify(d.serviceUrl)} + "/.well-known/bp/install", {
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(${JSON.stringify((d.adminApiBase ?? API_BASE).replace(/\/+$/, ""))} + "/wizard/cleanup-provisional-service", {
2725
- tenantId: ${JSON.stringify(d.tenantId)},
2726
- serviceInstanceId: ${JSON.stringify(d.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));