@betterportal/config-manager 10.6.21 → 10.6.23

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 (19) hide show
  1. package/README.md +2 -0
  2. package/lib/.bsb/clients/service-betterportal-config-manager.d.ts +1 -1
  3. package/lib/.bsb/clients/service-betterportal-config-manager.js +1 -1
  4. package/lib/bp-contracts/org.betterportal.config-manager.json +1 -1
  5. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts +12 -12
  6. package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts.map +1 -1
  7. package/lib/plugins/service-betterportal-config-manager/adminApi.js +3 -11
  8. package/lib/plugins/service-betterportal-config-manager/adminApi.js.map +1 -1
  9. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.d.ts.map +1 -1
  10. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.js +3 -9
  11. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.js.map +1 -1
  12. package/lib/plugins/service-betterportal-config-manager/previewApi.d.ts.map +1 -1
  13. package/lib/plugins/service-betterportal-config-manager/previewApi.js +83 -62
  14. package/lib/plugins/service-betterportal-config-manager/previewApi.js.map +1 -1
  15. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.d.ts +1 -1
  16. package/lib/plugins/service-betterportal-config-manager/tenantManagement.d.ts +4 -4
  17. package/lib/schemas/service-betterportal-config-manager.json +1 -1
  18. package/lib/schemas/service-betterportal-config-manager.plugin.json +1 -1
  19. package/package.json +7 -7
package/README.md CHANGED
@@ -7,3 +7,5 @@ PostgreSQL presence updates use a separate activity table (created on startup),
7
7
  Identical preview deployment POST retries replay the original response, including credentials, for 15 minutes. Only the latest request per deployment is retained, encrypted with the control-plane identity; preserve that identity across replicas and restarts. GET never returns the replay record. Expired replay records are removed by maintenance. An identical POST within this window is a retry, not a fresh production-config sync.
8
8
 
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
+
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.
@@ -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 10.6.21
4
+ * @version 10.6.23
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 10.6.21
4
+ * @version 10.6.23
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": "10.6.21",
7
+ "version": "10.6.23",
8
8
  "category": "service",
9
9
  "deploymentModes": [
10
10
  "self-hosted"
@@ -4022,7 +4022,7 @@ export declare const registry: {
4022
4022
  hostnames: string[];
4023
4023
  seo: {
4024
4024
  visibility: "auto" | "public" | "private";
4025
- serviceFailure: "known-routes" | "omit-service" | "error";
4025
+ serviceFailure: "error" | "known-routes" | "omit-service";
4026
4026
  serviceCache: "none" | "1h" | "24h" | "7d";
4027
4027
  canonicalOrigin?: string | undefined;
4028
4028
  };
@@ -4091,7 +4091,7 @@ export declare const registry: {
4091
4091
  hostnames: string[];
4092
4092
  seo: {
4093
4093
  visibility: "auto" | "public" | "private";
4094
- serviceFailure: "known-routes" | "omit-service" | "error";
4094
+ serviceFailure: "error" | "known-routes" | "omit-service";
4095
4095
  serviceCache: "none" | "1h" | "24h" | "7d";
4096
4096
  canonicalOrigin?: string | undefined;
4097
4097
  };
@@ -4230,7 +4230,7 @@ export declare const registry: {
4230
4230
  hostnames: string[];
4231
4231
  seo: {
4232
4232
  visibility: "auto" | "public" | "private";
4233
- serviceFailure: "known-routes" | "omit-service" | "error";
4233
+ serviceFailure: "error" | "known-routes" | "omit-service";
4234
4234
  serviceCache: "none" | "1h" | "24h" | "7d";
4235
4235
  canonicalOrigin?: string | undefined;
4236
4236
  };
@@ -4299,7 +4299,7 @@ export declare const registry: {
4299
4299
  hostnames: string[];
4300
4300
  seo: {
4301
4301
  visibility: "auto" | "public" | "private";
4302
- serviceFailure: "known-routes" | "omit-service" | "error";
4302
+ serviceFailure: "error" | "known-routes" | "omit-service";
4303
4303
  serviceCache: "none" | "1h" | "24h" | "7d";
4304
4304
  canonicalOrigin?: string | undefined;
4305
4305
  };
@@ -4445,7 +4445,7 @@ export declare const registry: {
4445
4445
  hostnames: string[];
4446
4446
  seo: {
4447
4447
  visibility: "auto" | "public" | "private";
4448
- serviceFailure: "known-routes" | "omit-service" | "error";
4448
+ serviceFailure: "error" | "known-routes" | "omit-service";
4449
4449
  serviceCache: "none" | "1h" | "24h" | "7d";
4450
4450
  canonicalOrigin?: string | undefined;
4451
4451
  };
@@ -4514,7 +4514,7 @@ export declare const registry: {
4514
4514
  hostnames: string[];
4515
4515
  seo: {
4516
4516
  visibility: "auto" | "public" | "private";
4517
- serviceFailure: "known-routes" | "omit-service" | "error";
4517
+ serviceFailure: "error" | "known-routes" | "omit-service";
4518
4518
  serviceCache: "none" | "1h" | "24h" | "7d";
4519
4519
  canonicalOrigin?: string | undefined;
4520
4520
  };
@@ -4650,7 +4650,7 @@ export declare const registry: {
4650
4650
  hostnames: string[];
4651
4651
  seo: {
4652
4652
  visibility: "auto" | "public" | "private";
4653
- serviceFailure: "known-routes" | "omit-service" | "error";
4653
+ serviceFailure: "error" | "known-routes" | "omit-service";
4654
4654
  serviceCache: "none" | "1h" | "24h" | "7d";
4655
4655
  canonicalOrigin?: string | undefined;
4656
4656
  };
@@ -4719,7 +4719,7 @@ export declare const registry: {
4719
4719
  hostnames: string[];
4720
4720
  seo: {
4721
4721
  visibility: "auto" | "public" | "private";
4722
- serviceFailure: "known-routes" | "omit-service" | "error";
4722
+ serviceFailure: "error" | "known-routes" | "omit-service";
4723
4723
  serviceCache: "none" | "1h" | "24h" | "7d";
4724
4724
  canonicalOrigin?: string | undefined;
4725
4725
  };
@@ -4786,7 +4786,7 @@ export declare const registry: {
4786
4786
  hostnames: string[];
4787
4787
  seo: {
4788
4788
  visibility: "auto" | "public" | "private";
4789
- serviceFailure: "known-routes" | "omit-service" | "error";
4789
+ serviceFailure: "error" | "known-routes" | "omit-service";
4790
4790
  serviceCache: "none" | "1h" | "24h" | "7d";
4791
4791
  canonicalOrigin?: string | undefined;
4792
4792
  };
@@ -4850,7 +4850,7 @@ export declare const registry: {
4850
4850
  hostnames: string[];
4851
4851
  seo: {
4852
4852
  visibility: "auto" | "public" | "private";
4853
- serviceFailure: "known-routes" | "omit-service" | "error";
4853
+ serviceFailure: "error" | "known-routes" | "omit-service";
4854
4854
  serviceCache: "none" | "1h" | "24h" | "7d";
4855
4855
  canonicalOrigin?: string | undefined;
4856
4856
  };
@@ -4914,7 +4914,7 @@ export declare const registry: {
4914
4914
  hostnames: string[];
4915
4915
  seo: {
4916
4916
  visibility: "auto" | "public" | "private";
4917
- serviceFailure: "known-routes" | "omit-service" | "error";
4917
+ serviceFailure: "error" | "known-routes" | "omit-service";
4918
4918
  serviceCache: "none" | "1h" | "24h" | "7d";
4919
4919
  canonicalOrigin?: string | undefined;
4920
4920
  };
@@ -4978,7 +4978,7 @@ export declare const registry: {
4978
4978
  hostnames: string[];
4979
4979
  seo: {
4980
4980
  visibility: "auto" | "public" | "private";
4981
- serviceFailure: "known-routes" | "omit-service" | "error";
4981
+ serviceFailure: "error" | "known-routes" | "omit-service";
4982
4982
  serviceCache: "none" | "1h" | "24h" | "7d";
4983
4983
  canonicalOrigin?: string | undefined;
4984
4984
  };
@@ -1 +1 @@
1
- {"version":3,"file":"adminApi.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-config-manager/adminApi.ts"],"names":[],"mappings":"AAAA,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;AAoJzD,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,kBAAkB,EAAE,MAAM,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkEpF;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,GAAG,MAAM,CA4CpG;AA4VD,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,CAwEA;AAkPD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAiiDN;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,CA0aT"}
1
+ {"version":3,"file":"adminApi.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-config-manager/adminApi.ts"],"names":[],"mappings":"AAAA,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;AAoJzD,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,kBAAkB,EAAE,MAAM,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkEpF;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,GAAG,MAAM,CA4CpG;AA4VD,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,CAwEA;AAkPD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAiiDN;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,CAkaT"}
@@ -2718,19 +2718,11 @@ export function renderConfigClientShell(d) {
2718
2718
  const text = await response.text().catch(() => "");
2719
2719
  throw new Error(label + " returned " + (contentType || "non-JSON") + " HTTP " + response.status + (text ? ": " + text.slice(0, 160) : ""));
2720
2720
  };
2721
- const bpHeaders = () => {
2722
- try {
2723
- const stored = JSON.parse(localStorage.getItem("bp.headers") || "{}");
2724
- const auth = Object.entries(stored).find(([name]) => name.toLowerCase() === "authorization")?.[1];
2725
- return auth && typeof auth.value === "string" ? { Authorization: auth.value } : {};
2726
- } catch {
2727
- return {};
2728
- }
2729
- };
2730
2721
  const requestTicket = async () => {
2731
- const response = await fetch(cfg.ticketUrl, {
2722
+ if (!window.BetterPortalAuth) throw new Error("Authentication runtime is unavailable. Reload this page.");
2723
+ const response = await window.BetterPortalAuth.fetch(cfg.ticketUrl, {
2732
2724
  method: "POST",
2733
- headers: { ...bpHeaders(), "Content-Type": "application/json", Accept: "application/json" },
2725
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
2734
2726
  body: JSON.stringify({
2735
2727
  hostname: cfg.hostname,
2736
2728
  tenantId: cfg.tenantId,