@betterportal/config-manager 10.1.46 → 10.1.48

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 (25) 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 +91 -1
  4. package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts.map +1 -1
  5. package/lib/plugins/service-betterportal-config-manager/adminApi.js +15 -2
  6. package/lib/plugins/service-betterportal-config-manager/adminApi.js.map +1 -1
  7. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_renderer.bootstrap5/GET.d.ts.map +1 -1
  8. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_renderer.bootstrap5/GET.js +37 -2
  9. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_renderer.bootstrap5/GET.js.map +1 -1
  10. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/route.impl.d.ts +85 -0
  11. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/route.impl.d.ts.map +1 -1
  12. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/route.impl.js +73 -1
  13. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/route.impl.js.map +1 -1
  14. package/lib/plugins/service-betterportal-config-manager/setupTokens.js +12 -14
  15. package/lib/plugins/service-betterportal-config-manager/setupTokens.js.map +1 -1
  16. package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts.map +1 -1
  17. package/lib/plugins/service-betterportal-config-manager/storage/core.js +18 -0
  18. package/lib/plugins/service-betterportal-config-manager/storage/core.js.map +1 -1
  19. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts +1 -0
  20. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts.map +1 -1
  21. package/lib/plugins/service-betterportal-config-manager/syncApi.js +31 -31
  22. package/lib/plugins/service-betterportal-config-manager/syncApi.js.map +1 -1
  23. package/lib/schemas/service-betterportal-config-manager.json +1 -1
  24. package/lib/schemas/service-betterportal-config-manager.plugin.json +1 -1
  25. 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 10.1.46
4
+ * @version 10.1.48
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.1.46
4
+ * @version 10.1.48
5
5
  */
6
6
  import { ServiceClient, bsb, createBroadcastEvent, createEventSchemas } from "@bsb/base";
7
7
  const _platformConfigChangedSchema = bsb.object({
@@ -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.1.46",
7
+ "version": "10.1.48",
8
8
  "category": "service",
9
9
  "deploymentModes": [
10
10
  "self-hosted"
@@ -2592,6 +2592,95 @@
2592
2592
  ]
2593
2593
  }
2594
2594
  },
2595
+ "authRedirects": {
2596
+ "kind": "optional",
2597
+ "inner": {
2598
+ "kind": "object",
2599
+ "properties": {
2600
+ "afterLogin": {
2601
+ "kind": "optional",
2602
+ "inner": {
2603
+ "kind": "object",
2604
+ "properties": {
2605
+ "serviceId": {
2606
+ "kind": "string",
2607
+ "minLength": 1
2608
+ },
2609
+ "viewId": {
2610
+ "kind": "string",
2611
+ "minLength": 1
2612
+ }
2613
+ },
2614
+ "required": [
2615
+ "serviceId",
2616
+ "viewId"
2617
+ ],
2618
+ "unknownKeys": "strip"
2619
+ }
2620
+ },
2621
+ "afterLogout": {
2622
+ "kind": "optional",
2623
+ "inner": {
2624
+ "kind": "object",
2625
+ "properties": {
2626
+ "serviceId": {
2627
+ "kind": "string",
2628
+ "minLength": 1
2629
+ },
2630
+ "viewId": {
2631
+ "kind": "string",
2632
+ "minLength": 1
2633
+ }
2634
+ },
2635
+ "required": [
2636
+ "serviceId",
2637
+ "viewId"
2638
+ ],
2639
+ "unknownKeys": "strip"
2640
+ }
2641
+ }
2642
+ },
2643
+ "required": [],
2644
+ "unknownKeys": "strip"
2645
+ }
2646
+ },
2647
+ "pageViews": {
2648
+ "kind": "array",
2649
+ "items": {
2650
+ "kind": "object",
2651
+ "properties": {
2652
+ "serviceId": {
2653
+ "kind": "string",
2654
+ "minLength": 1
2655
+ },
2656
+ "serviceTitle": {
2657
+ "kind": "string",
2658
+ "minLength": 1
2659
+ },
2660
+ "viewId": {
2661
+ "kind": "string",
2662
+ "minLength": 1
2663
+ },
2664
+ "title": {
2665
+ "kind": "string",
2666
+ "minLength": 1
2667
+ },
2668
+ "path": {
2669
+ "kind": "string",
2670
+ "minLength": 1
2671
+ }
2672
+ },
2673
+ "required": [
2674
+ "serviceId",
2675
+ "serviceTitle",
2676
+ "viewId",
2677
+ "title",
2678
+ "path"
2679
+ ],
2680
+ "unknownKeys": "strip"
2681
+ },
2682
+ "default": []
2683
+ },
2595
2684
  "routeCount": {
2596
2685
  "kind": "int",
2597
2686
  "min": 0
@@ -2603,6 +2692,7 @@
2603
2692
  "slug",
2604
2693
  "title",
2605
2694
  "hostnames",
2695
+ "pageViews",
2606
2696
  "routeCount"
2607
2697
  ],
2608
2698
  "unknownKeys": "strip"
@@ -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;AAYjC,OAAO,KAAK,EAAuE,kBAAkB,EAAE,eAAe,EAA0C,MAAM,yBAAyB,CAAC;AAChM,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0LzD,iBAAS,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEpF;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,GAAG,MAAM,CA2CpG;AA8SD,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,CAmEA;AAiPD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,IAAI,CA48CN"}
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;AAYjC,OAAO,KAAK,EAAuE,kBAAkB,EAAE,eAAe,EAA0C,MAAM,yBAAyB,CAAC;AAChM,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0LzD,iBAAS,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEpF;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,GAAG,MAAM,CA2CpG;AA8SD,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;AAiPD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAm9CN"}
@@ -559,8 +559,16 @@ export function purgeServiceReferences(config, tenantId, serviceId) {
559
559
  delete app.auth;
560
560
  summary.authCleared += 1;
561
561
  }
562
- else if (app.auth?.roles) {
563
- for (const role of app.auth.roles) {
562
+ else if (app.auth) {
563
+ if (app.auth.redirects) {
564
+ if (app.auth.redirects.afterLogin?.serviceId === serviceId)
565
+ delete app.auth.redirects.afterLogin;
566
+ if (app.auth.redirects.afterLogout?.serviceId === serviceId)
567
+ delete app.auth.redirects.afterLogout;
568
+ if (Object.keys(app.auth.redirects).length === 0)
569
+ delete app.auth.redirects;
570
+ }
571
+ for (const role of app.auth.roles ?? []) {
564
572
  const before = role.permissions.length;
565
573
  role.permissions = role.permissions.filter((grant) => grant.serviceId !== serviceId);
566
574
  summary.roleGrantsRemoved += before - role.permissions.length;
@@ -1924,6 +1932,11 @@ export function registerAdminApiRoutes(app, store, cpState) {
1924
1932
  const message = `Cannot delete route "${route.title ?? route.path}" because ${menuReferenceCount} menu item${menuReferenceCount === 1 ? "" : "s"} reference it. Remove the menu reference first.`;
1925
1933
  return wantsHtmx(event) ? htmxAlert(message, "warning") : jsonResponse({ error: message }, 409);
1926
1934
  }
1935
+ const redirectReference = Object.entries(appDef.auth?.redirects ?? {}).find(([, target]) => target?.serviceId === route.serviceId && target.viewId === route.viewId);
1936
+ if (redirectReference) {
1937
+ const message = `Cannot delete route "${route.title ?? route.path}" because the app uses it for auth ${redirectReference[0]} navigation.`;
1938
+ return wantsHtmx(event) ? htmxAlert(message, "warning") : jsonResponse({ error: message }, 409);
1939
+ }
1927
1940
  appDef.routes = appDef.routes.filter((r) => r.id !== routeId);
1928
1941
  await store.saveConfig(config);
1929
1942
  if (wantsHtmx(event))