@betterportal/config-manager 10.4.0 → 10.6.0

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 (93) 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 +2169 -2
  4. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts +1426 -0
  5. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts.map +1 -1
  6. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.js +35 -0
  7. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.js.map +1 -1
  8. package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts.map +1 -1
  9. package/lib/plugins/service-betterportal-config-manager/adminApi.js +15 -2
  10. package/lib/plugins/service-betterportal-config-manager/adminApi.js.map +1 -1
  11. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.d.ts +8 -0
  12. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.d.ts.map +1 -0
  13. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.js +10 -0
  14. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.js.map +1 -0
  15. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.d.ts +18 -0
  16. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.d.ts.map +1 -0
  17. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.js +15 -0
  18. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.js.map +1 -0
  19. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.d.ts +8 -0
  20. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.d.ts.map +1 -0
  21. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.js +10 -0
  22. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.js.map +1 -0
  23. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.d.ts +8 -0
  24. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.d.ts.map +1 -0
  25. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.js +10 -0
  26. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.js.map +1 -0
  27. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.d.ts +2 -0
  28. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.d.ts.map +1 -0
  29. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.js +2 -0
  30. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.js.map +1 -0
  31. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.d.ts +4 -0
  32. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.d.ts.map +1 -0
  33. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.js +172 -0
  34. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.js.map +1 -0
  35. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.d.ts +2 -0
  36. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.d.ts.map +1 -0
  37. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.js +2 -0
  38. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.js.map +1 -0
  39. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.d.ts +2 -0
  40. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.d.ts.map +1 -0
  41. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.js +2 -0
  42. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.js.map +1 -0
  43. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.d.ts +2 -0
  44. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.d.ts.map +1 -0
  45. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.js +2 -0
  46. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.js.map +1 -0
  47. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/GET.d.ts +4 -0
  48. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/GET.d.ts.map +1 -1
  49. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/GET.js +3 -1
  50. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/GET.js.map +1 -1
  51. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_renderer.bootstrap5/GET.js +1 -1
  52. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_renderer.bootstrap5/GET.js.map +1 -1
  53. package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.d.ts.map +1 -1
  54. package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.js +12 -15
  55. package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.js.map +1 -1
  56. package/lib/plugins/service-betterportal-config-manager/index.d.ts +3 -0
  57. package/lib/plugins/service-betterportal-config-manager/index.d.ts.map +1 -1
  58. package/lib/plugins/service-betterportal-config-manager/index.js +67 -18
  59. package/lib/plugins/service-betterportal-config-manager/index.js.map +1 -1
  60. package/lib/plugins/service-betterportal-config-manager/previewApi.d.ts +7 -0
  61. package/lib/plugins/service-betterportal-config-manager/previewApi.d.ts.map +1 -0
  62. package/lib/plugins/service-betterportal-config-manager/previewApi.js +112 -0
  63. package/lib/plugins/service-betterportal-config-manager/previewApi.js.map +1 -0
  64. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.d.ts +419 -0
  65. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.d.ts.map +1 -0
  66. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.js +398 -0
  67. package/lib/plugins/service-betterportal-config-manager/previewEnvironmentManagement.js.map +1 -0
  68. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.d.ts +62 -0
  69. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.d.ts.map +1 -0
  70. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.js +763 -0
  71. package/lib/plugins/service-betterportal-config-manager/previewEnvironments.js.map +1 -0
  72. package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts +6 -2
  73. package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts.map +1 -1
  74. package/lib/plugins/service-betterportal-config-manager/storage/core.js +12 -2
  75. package/lib/plugins/service-betterportal-config-manager/storage/core.js.map +1 -1
  76. package/lib/plugins/service-betterportal-config-manager/storage/file.d.ts +3 -1
  77. package/lib/plugins/service-betterportal-config-manager/storage/file.d.ts.map +1 -1
  78. package/lib/plugins/service-betterportal-config-manager/storage/file.js +3 -2
  79. package/lib/plugins/service-betterportal-config-manager/storage/file.js.map +1 -1
  80. package/lib/plugins/service-betterportal-config-manager/storage/postgres.d.ts +3 -1
  81. package/lib/plugins/service-betterportal-config-manager/storage/postgres.d.ts.map +1 -1
  82. package/lib/plugins/service-betterportal-config-manager/storage/postgres.js +3 -2
  83. package/lib/plugins/service-betterportal-config-manager/storage/postgres.js.map +1 -1
  84. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts +4 -1
  85. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts.map +1 -1
  86. package/lib/plugins/service-betterportal-config-manager/syncApi.js +58 -4
  87. package/lib/plugins/service-betterportal-config-manager/syncApi.js.map +1 -1
  88. package/lib/plugins/service-betterportal-config-manager/tenantManagement.d.ts.map +1 -1
  89. package/lib/plugins/service-betterportal-config-manager/tenantManagement.js +12 -1
  90. package/lib/plugins/service-betterportal-config-manager/tenantManagement.js.map +1 -1
  91. package/lib/schemas/service-betterportal-config-manager.json +1 -1
  92. package/lib/schemas/service-betterportal-config-manager.plugin.json +1 -1
  93. package/package.json +6 -6
@@ -0,0 +1,8 @@
1
+ import type { ApiAuthRequirement } from "@betterportal/framework";
2
+ export declare const operationId = "admin.preview-environments.delete";
3
+ export declare const title = "Delete preview resources";
4
+ export declare const description = "Delete a preview deployment or group.";
5
+ export declare const auth: ApiAuthRequirement;
6
+ export { cacheHints, demoScenarios, ResponseSchema } from "../../previewEnvironmentManagement.js";
7
+ export { handleDelete as default } from "../../previewEnvironmentManagement.js";
8
+ //# sourceMappingURL=DELETE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DELETE.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,eAAO,MAAM,WAAW,sCAAsC,CAAC;AAC/D,eAAO,MAAM,KAAK,6BAA6B,CAAC;AAChD,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export const operationId = "admin.preview-environments.delete";
2
+ export const title = "Delete preview resources";
3
+ export const description = "Delete a preview deployment or group.";
4
+ export const auth = {
5
+ required: true,
6
+ permissions: [{ serviceId: "org.betterportal.config-manager", viewId: "preview-environments.index", permissions: ["delete"] }]
7
+ };
8
+ export { cacheHints, demoScenarios, ResponseSchema } from "../../previewEnvironmentManagement.js";
9
+ export { handleDelete as default } from "../../previewEnvironmentManagement.js";
10
+ //# sourceMappingURL=DELETE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DELETE.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/DELETE.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAC/D,MAAM,CAAC,MAAM,KAAK,GAAG,0BAA0B,CAAC;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG,uCAAuC,CAAC;AACnE,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,iCAAiC,EAAE,MAAM,EAAE,4BAA4B,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC/H,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ApiAuthRequirement } from "@betterportal/framework";
2
+ export declare const operationId = "admin.preview-environments.view";
3
+ export declare const title = "View preview environments";
4
+ export declare const description = "List preview groups and their disposable deployments.";
5
+ export declare const dependencies: readonly [{
6
+ readonly operationId: "admin.preview-environments.create";
7
+ readonly method: "POST";
8
+ }, {
9
+ readonly operationId: "admin.preview-environments.update";
10
+ readonly method: "PUT";
11
+ }, {
12
+ readonly operationId: "admin.preview-environments.delete";
13
+ readonly method: "DELETE";
14
+ }];
15
+ export declare const auth: ApiAuthRequirement;
16
+ export { cacheHints, demoScenarios, ResponseSchema } from "../../previewEnvironmentManagement.js";
17
+ export { handleGet as default } from "../../previewEnvironmentManagement.js";
18
+ //# sourceMappingURL=GET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,eAAO,MAAM,WAAW,oCAAoC,CAAC;AAC7D,eAAO,MAAM,KAAK,8BAA8B,CAAC;AACjD,eAAO,MAAM,WAAW,0DAA0D,CAAC;AACnF,eAAO,MAAM,YAAY;;;;;;;;;EAIf,CAAC;AACX,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const operationId = "admin.preview-environments.view";
2
+ export const title = "View preview environments";
3
+ export const description = "List preview groups and their disposable deployments.";
4
+ export const dependencies = [
5
+ { operationId: "admin.preview-environments.create", method: "POST" },
6
+ { operationId: "admin.preview-environments.update", method: "PUT" },
7
+ { operationId: "admin.preview-environments.delete", method: "DELETE" }
8
+ ];
9
+ export const auth = {
10
+ required: true,
11
+ permissions: [{ serviceId: "org.betterportal.config-manager", viewId: "preview-environments.index", permissions: ["read"] }]
12
+ };
13
+ export { cacheHints, demoScenarios, ResponseSchema } from "../../previewEnvironmentManagement.js";
14
+ export { handleGet as default } from "../../previewEnvironmentManagement.js";
15
+ //# sourceMappingURL=GET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/GET.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,iCAAiC,CAAC;AAC7D,MAAM,CAAC,MAAM,KAAK,GAAG,2BAA2B,CAAC;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,uDAAuD,CAAC;AACnF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,EAAE,WAAW,EAAE,mCAAmC,EAAE,MAAM,EAAE,MAAM,EAAE;IACpE,EAAE,WAAW,EAAE,mCAAmC,EAAE,MAAM,EAAE,KAAK,EAAE;IACnE,EAAE,WAAW,EAAE,mCAAmC,EAAE,MAAM,EAAE,QAAQ,EAAE;CAC9D,CAAC;AACX,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,iCAAiC,EAAE,MAAM,EAAE,4BAA4B,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;CAC7H,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ApiAuthRequirement } from "@betterportal/framework";
2
+ export declare const operationId = "admin.preview-environments.create";
3
+ export declare const title = "Create preview resources";
4
+ export declare const description = "Create preview groups, rotate group credentials, or create a preview deployment.";
5
+ export declare const auth: ApiAuthRequirement;
6
+ export { cacheHints, demoScenarios, ResponseSchema } from "../../previewEnvironmentManagement.js";
7
+ export { handlePost as default } from "../../previewEnvironmentManagement.js";
8
+ //# sourceMappingURL=POST.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"POST.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,eAAO,MAAM,WAAW,sCAAsC,CAAC;AAC/D,eAAO,MAAM,KAAK,6BAA6B,CAAC;AAChD,eAAO,MAAM,WAAW,qFAAqF,CAAC;AAC9G,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export const operationId = "admin.preview-environments.create";
2
+ export const title = "Create preview resources";
3
+ export const description = "Create preview groups, rotate group credentials, or create a preview deployment.";
4
+ export const auth = {
5
+ required: true,
6
+ permissions: [{ serviceId: "org.betterportal.config-manager", viewId: "preview-environments.index", permissions: ["create"] }]
7
+ };
8
+ export { cacheHints, demoScenarios, ResponseSchema } from "../../previewEnvironmentManagement.js";
9
+ export { handlePost as default } from "../../previewEnvironmentManagement.js";
10
+ //# sourceMappingURL=POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"POST.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/POST.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAC/D,MAAM,CAAC,MAAM,KAAK,GAAG,0BAA0B,CAAC;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG,kFAAkF,CAAC;AAC9G,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,iCAAiC,EAAE,MAAM,EAAE,4BAA4B,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC/H,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ApiAuthRequirement } from "@betterportal/framework";
2
+ export declare const operationId = "admin.preview-environments.update";
3
+ export declare const title = "Update preview resources";
4
+ export declare const description = "Update a preview group or deployment expiry.";
5
+ export declare const auth: ApiAuthRequirement;
6
+ export { cacheHints, demoScenarios, ResponseSchema } from "../../previewEnvironmentManagement.js";
7
+ export { handlePut as default } from "../../previewEnvironmentManagement.js";
8
+ //# sourceMappingURL=PUT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PUT.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,eAAO,MAAM,WAAW,sCAAsC,CAAC;AAC/D,eAAO,MAAM,KAAK,6BAA6B,CAAC;AAChD,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAC1E,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export const operationId = "admin.preview-environments.update";
2
+ export const title = "Update preview resources";
3
+ export const description = "Update a preview group or deployment expiry.";
4
+ export const auth = {
5
+ required: true,
6
+ permissions: [{ serviceId: "org.betterportal.config-manager", viewId: "preview-environments.index", permissions: ["update"] }]
7
+ };
8
+ export { cacheHints, demoScenarios, ResponseSchema } from "../../previewEnvironmentManagement.js";
9
+ export { handlePut as default } from "../../previewEnvironmentManagement.js";
10
+ //# sourceMappingURL=PUT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PUT.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/PUT.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAC/D,MAAM,CAAC,MAAM,KAAK,GAAG,0BAA0B,CAAC;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG,8CAA8C,CAAC;AAC1E,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,iCAAiC,EAAE,MAAM,EAAE,4BAA4B,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC/H,CAAC;AACF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { render } from "./GET.js";
2
+ //# sourceMappingURL=DELETE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DELETE.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { render } from "./GET.js";
2
+ //# sourceMappingURL=DELETE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DELETE.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/DELETE.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { HtmlRenderable } from "@betterportal/framework";
2
+ import type { ResponseData } from "../../../previewEnvironmentManagement.js";
3
+ export declare function render(data: ResponseData): HtmlRenderable;
4
+ //# sourceMappingURL=GET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAgP7E,wBAAgB,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAgKzD"}
@@ -0,0 +1,172 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "jsx-htmx/jsx-runtime";
2
+ /** @jsxImportSource jsx-htmx */
3
+ import { js } from "jsx-htmx";
4
+ function pageScript() {
5
+ return js(`(() => {
6
+ const tenant = document.getElementById("bp-preview-source-tenant");
7
+ const app = document.getElementById("bp-preview-source-app");
8
+ const services = document.getElementById("bp-preview-service-ids");
9
+ const syncApps = () => {
10
+ if (!tenant || !app) return;
11
+ [...app.options].forEach((option) => {
12
+ option.hidden = !!option.value && option.dataset.tenantId !== tenant.value;
13
+ });
14
+ if (app.selectedOptions[0]?.hidden) app.value = "";
15
+ };
16
+ const syncServices = () => {
17
+ const option = app?.selectedOptions[0];
18
+ if (!services || !option?.value) return;
19
+ services.value = option.dataset.requiredServices || option.dataset.services || "";
20
+ };
21
+ tenant?.addEventListener("change", syncApps);
22
+ app?.addEventListener("change", syncServices);
23
+ syncApps();
24
+
25
+ document.querySelectorAll("[data-bp-copy-target]").forEach((button) => {
26
+ button.addEventListener("click", async () => {
27
+ const target = document.getElementById(button.dataset.bpCopyTarget);
28
+ if (!target) return;
29
+ await navigator.clipboard.writeText(target.value || target.textContent || "");
30
+ const original = button.textContent;
31
+ button.textContent = "Copied";
32
+ setTimeout(() => { button.textContent = original; }, 1500);
33
+ });
34
+ });
35
+
36
+ const decode64 = (value) => {
37
+ const base64 = value.replace(/-/g, "+").replace(/_/g, "/") + "===".slice((value.length + 3) % 4);
38
+ return Uint8Array.from(atob(base64), (char) => char.charCodeAt(0));
39
+ };
40
+ const encode64 = (value) => btoa(String.fromCharCode(...new Uint8Array(value)))
41
+ .replace(/\\+/g, "-").replace(/\\//g, "_").replace(/=+$/, "");
42
+ const importPreviewKey = async (value) => {
43
+ if (!value.startsWith("bp_pck_")) throw new Error("Config key must start with bp_pck_");
44
+ const bytes = decode64(value.slice(7));
45
+ if (bytes.length !== 32) throw new Error("Config key must contain 32 bytes");
46
+ return crypto.subtle.importKey("raw", bytes, "AES-GCM", false, ["encrypt", "decrypt"]);
47
+ };
48
+ const aad = (scope, key) => new TextEncoder().encode("betterportal.preview-config.v1\\n" + scope + "\\n" + key);
49
+ const encryptValue = async (cryptoKey, scope, path, value) => {
50
+ const iv = crypto.getRandomValues(new Uint8Array(12));
51
+ const encrypted = await crypto.subtle.encrypt({ name: "AES-GCM", iv, additionalData: aad(scope, path), tagLength: 128 }, cryptoKey, new TextEncoder().encode(value));
52
+ return "encrypted:bp-aes256gcm-v1:" + encode64(iv) + ":" + encode64(encrypted);
53
+ };
54
+ const decryptValue = async (cryptoKey, scope, path, value) => {
55
+ const prefix = "encrypted:bp-aes256gcm-v1:";
56
+ if (!value.startsWith(prefix)) throw new Error("Unsupported encrypted config envelope");
57
+ const [iv, encrypted] = value.slice(prefix.length).split(":");
58
+ const clear = await crypto.subtle.decrypt({ name: "AES-GCM", iv: decode64(iv), additionalData: aad(scope, path), tagLength: 128 }, cryptoKey, decode64(encrypted));
59
+ return new TextDecoder().decode(clear);
60
+ };
61
+
62
+ document.querySelectorAll("[data-bp-preview-config-form]").forEach((form) => {
63
+ const keyInput = form.querySelector("[data-bp-preview-key]");
64
+ const status = form.querySelector("[data-bp-preview-config-status]");
65
+ const existing = {};
66
+ form.querySelectorAll("[data-bp-existing-config]").forEach((node) => {
67
+ existing[node.dataset.serviceId] = {
68
+ tenant: JSON.parse(node.dataset.tenant || "{}"),
69
+ app: JSON.parse(node.dataset.app || "{}")
70
+ };
71
+ });
72
+ form.querySelector("[data-bp-generate-key]")?.addEventListener("click", () => {
73
+ keyInput.value = "bp_pck_" + encode64(crypto.getRandomValues(new Uint8Array(32)));
74
+ keyInput.dispatchEvent(new Event("input"));
75
+ });
76
+ form.querySelector("[data-bp-decrypt-config]")?.addEventListener("click", async () => {
77
+ try {
78
+ const cryptoKey = await importPreviewKey(keyInput.value.trim());
79
+ for (const input of form.querySelectorAll("[data-bp-config-field][data-secret=true]")) {
80
+ const encrypted = existing[input.dataset.serviceId]?.[input.dataset.scope]?.[input.dataset.key];
81
+ if (encrypted) input.value = await decryptValue(cryptoKey, input.dataset.scope, input.dataset.key, encrypted);
82
+ }
83
+ status.textContent = "Secrets decrypted in this browser only.";
84
+ status.className = "alert alert-success py-2";
85
+ } catch (error) {
86
+ status.textContent = error.message || String(error);
87
+ status.className = "alert alert-danger py-2";
88
+ }
89
+ });
90
+ form.addEventListener("submit", async (event) => {
91
+ event.preventDefault();
92
+ event.stopImmediatePropagation();
93
+ try {
94
+ const values = structuredClone(existing);
95
+ const clearedSecrets = new Set([...form.querySelectorAll("[data-bp-clear-secret]:checked")].map((input) =>
96
+ input.dataset.serviceId + "\\n" + input.dataset.scope + "\\n" + input.dataset.key
97
+ ));
98
+ let cryptoKey;
99
+ for (const input of form.querySelectorAll("[data-bp-config-field]")) {
100
+ const service = values[input.dataset.serviceId] ||= { tenant: {}, app: {} };
101
+ const scope = service[input.dataset.scope] ||= {};
102
+ const value = input.value.trim();
103
+ if (!value) {
104
+ const secretKey = input.dataset.serviceId + "\\n" + input.dataset.scope + "\\n" + input.dataset.key;
105
+ if (input.dataset.secret === "true" && scope[input.dataset.key] && !clearedSecrets.has(secretKey)) continue;
106
+ if (input.required && !(input.dataset.secret === "true" && scope[input.dataset.key])) throw new Error(input.dataset.title + " is required");
107
+ if (!input.required || clearedSecrets.has(secretKey)) delete scope[input.dataset.key];
108
+ continue;
109
+ }
110
+ if (input.dataset.secret === "true") {
111
+ cryptoKey ||= await importPreviewKey(keyInput.value.trim());
112
+ scope[input.dataset.key] = await encryptValue(cryptoKey, input.dataset.scope, input.dataset.key, value);
113
+ } else {
114
+ scope[input.dataset.key] = value;
115
+ }
116
+ }
117
+ status.textContent = "Saving encrypted config...";
118
+ status.className = "alert alert-info py-2";
119
+ await window.htmx.ajax("POST", form.dataset.path, {
120
+ source: form,
121
+ target: "#bp-main",
122
+ swap: "innerHTML",
123
+ values: { action: "save-config", groupId: form.dataset.groupId, configs: JSON.stringify(values) }
124
+ });
125
+ } catch (error) {
126
+ status.textContent = error.message || String(error);
127
+ status.className = "alert alert-danger py-2";
128
+ }
129
+ }, true);
130
+ });
131
+ })()`);
132
+ }
133
+ function oidcFields(prefix, oidc) {
134
+ return (_jsxs("details", { class: "border rounded p-3 mb-3", children: [_jsx("summary", { class: "fw-semibold", children: "OIDC restrictions (recommended for CI)" }), _jsxs("div", { class: "mt-3", children: [_jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: `${prefix}-oidc-issuer`, children: "Issuer" }), _jsx("input", { id: `${prefix}-oidc-issuer`, class: "form-control font-monospace", type: "url", name: "oidcIssuer", value: oidc?.issuer ?? "", placeholder: "https://token.actions.githubusercontent.com" })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: `${prefix}-oidc-audience`, children: "Audience" }), _jsx("input", { id: `${prefix}-oidc-audience`, class: "form-control font-monospace", name: "oidcAudience", value: oidc?.audience ?? "" })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: `${prefix}-oidc-jwks`, children: "JWKS URL" }), _jsx("input", { id: `${prefix}-oidc-jwks`, class: "form-control font-monospace", type: "url", name: "oidcJwksUri", value: oidc?.jwksUri ?? "", placeholder: "https://token.actions.githubusercontent.com/.well-known/jwks" })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: `${prefix}-oidc-subject`, children: "Subject prefix" }), _jsx("input", { id: `${prefix}-oidc-subject`, class: "form-control font-monospace", name: "oidcSubjectPrefix", value: oidc?.subjectPrefix ?? "", placeholder: "repo:org/repository:" })] }), _jsxs("div", { children: [_jsx("label", { class: "form-label", for: `${prefix}-oidc-claims`, children: "Required claims (JSON string values)" }), _jsx("textarea", { id: `${prefix}-oidc-claims`, class: "form-control font-monospace", name: "oidcRequiredClaims", rows: 3, children: oidc?.requiredClaimsJson ?? "{}" })] })] })] }));
135
+ }
136
+ function expiryInput(current, includeDefault = false, label = "Expiry") {
137
+ return _jsx("input", { class: "form-control", name: "expiresInDays", inputmode: "numeric", maxlength: "5", pattern: "(?:never|[1-9][0-9]{0,3})", value: current === undefined ? includeDefault ? "" : "never" : String(current), placeholder: includeDefault ? "Group default" : "30 or never", "aria-label": label, required: !includeDefault });
138
+ }
139
+ function credentials(data) {
140
+ if (!data.issuedApiKey && data.issuedCredentials.length === 0)
141
+ return null;
142
+ return (_jsxs("div", { class: "alert alert-warning", role: "status", children: [_jsx("h3", { class: "h6", children: "Copy these credentials now" }), _jsx("p", { class: "small mb-3", children: "They are shown once and cannot be recovered." }), data.issuedApiKey ? (_jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: "bp-issued-group-key", children: "Preview group API key" }), _jsxs("div", { class: "input-group", children: [_jsx("input", { id: "bp-issued-group-key", class: "form-control font-monospace", value: data.issuedApiKey, readonly: true }), _jsx("button", { class: "btn btn-outline-dark", type: "button", "data-bp-copy-target": "bp-issued-group-key", children: "Copy" })] })] })) : null, data.issuedCredentials.map((credential, index) => {
143
+ const id = `bp-issued-service-${index}`;
144
+ return (_jsxs("div", { class: "mb-3", children: [_jsx("div", { class: "fw-semibold", children: credential.serviceId }), _jsx("textarea", { id: id, class: "form-control font-monospace small", rows: 2, readonly: true, children: `BP_CONTROL_PLANE_URL=${credential.controlPlaneUrl}\nBP_SERVICE_API_KEY=${credential.apiKey}` }), _jsx("button", { class: "btn btn-sm btn-outline-dark mt-2", type: "button", "data-bp-copy-target": id, children: "Copy environment" })] }));
145
+ })] }));
146
+ }
147
+ function configEditor(group, path) {
148
+ const hasFields = group.services.some((service) => service.fields.length > 0);
149
+ const existing = (service, scope) => {
150
+ try {
151
+ return JSON.parse(scope === "tenant" ? service.encryptedTenantConfig : service.encryptedAppConfig);
152
+ }
153
+ catch {
154
+ return {};
155
+ }
156
+ };
157
+ const fieldControl = (service, field) => {
158
+ const current = existing(service, field.scope)[field.key];
159
+ if (!field.secret && field.control === "select" && field.options.length > 0) {
160
+ return _jsxs("select", { class: "form-select", "data-bp-config-field": "", "data-service-id": service.serviceId, "data-scope": field.scope, "data-key": field.key, "data-title": field.title, "data-secret": "false", required: field.required, children: [!field.required ? _jsx("option", { value: "", children: "Not set" }) : null, field.options.map((option) => _jsx("option", { value: option.value, selected: current === option.value, children: option.label }))] });
161
+ }
162
+ return _jsx("input", { class: "form-control", type: field.secret ? "password" : field.control === "email" || field.control === "url" ? field.control : "text", maxlength: "255", value: field.secret ? "" : current ?? "", autocomplete: field.secret ? "new-password" : "off", "data-bp-config-field": "", "data-service-id": service.serviceId, "data-scope": field.scope, "data-key": field.key, "data-title": field.title, "data-secret": field.secret ? "true" : "false", required: field.required && !field.secret });
163
+ };
164
+ return (_jsxs("details", { class: "border rounded p-3 mt-3", children: [_jsx("summary", { class: "fw-semibold", children: "Encrypted service configuration" }), !hasFields ? _jsx("div", { class: "alert alert-secondary mt-3 mb-0", children: "No synced service config schemas are available for this group." }) : (_jsxs("form", { class: "mt-3", "data-bp-preview-config-form": "", "data-group-id": group.id, "data-path": path, children: [_jsxs("div", { class: "alert alert-warning small", children: ["Use preview-only values. The key and decrypted secrets stay in this browser; BetterPortal stores only ", _jsx("code", { children: "encrypted:" }), " envelopes."] }), _jsx("label", { class: "form-label", for: `bp-preview-key-${group.id}`, children: "Preview config key" }), _jsxs("div", { class: "input-group mb-2", children: [_jsx("input", { id: `bp-preview-key-${group.id}`, class: "form-control font-monospace", type: "password", autocomplete: "off", "data-bp-preview-key": "" }), _jsx("button", { class: "btn btn-outline-secondary", type: "button", "data-bp-generate-key": "", children: "Generate" }), _jsx("button", { class: "btn btn-outline-secondary", type: "button", "data-bp-copy-target": `bp-preview-key-${group.id}`, children: "Copy" })] }), _jsxs("div", { class: "form-text mb-3", children: ["Set this exact value as ", _jsx("code", { children: "BP_PREVIEW_CONFIG_KEY" }), " on every configured preview service. Keep it outside BetterPortal."] }), _jsx("button", { class: "btn btn-sm btn-outline-secondary mb-3", type: "button", "data-bp-decrypt-config": "", children: "Decrypt stored secrets" }), group.services.map((service) => (_jsxs("fieldset", { class: "border rounded p-3 mb-3", children: [_jsx("legend", { class: "float-none w-auto px-2 fs-6", children: service.title }), _jsx("span", { hidden: true, "data-bp-existing-config": "", "data-service-id": service.serviceId, "data-tenant": service.encryptedTenantConfig, "data-app": service.encryptedAppConfig }), ["tenant", "app"].map((scope) => {
165
+ const fields = service.fields.filter((field) => field.scope === scope);
166
+ return fields.length === 0 ? null : _jsxs("div", { class: "mb-3", children: [_jsxs("div", { class: "text-uppercase text-secondary small fw-semibold mb-2", children: [scope, " config"] }), _jsx("div", { class: "row g-3", children: fields.map((field) => _jsxs("div", { class: "col-12 col-lg-6", children: [_jsxs("label", { class: "form-label", children: [field.title, field.required ? " *" : ""] }), fieldControl(service, field), _jsxs("div", { class: "form-text", children: [field.description, field.secret ? " Blank keeps the stored value." : ""] }), field.secret && !field.required ? _jsxs("div", { class: "form-check mt-1", children: [_jsx("input", { class: "form-check-input", type: "checkbox", "data-bp-clear-secret": "", "data-service-id": service.serviceId, "data-scope": field.scope, "data-key": field.key, id: `bp-clear-${group.id}-${service.serviceId}-${field.scope}-${field.key}` }), _jsx("label", { class: "form-check-label small", for: `bp-clear-${group.id}-${service.serviceId}-${field.scope}-${field.key}`, children: "Clear stored value" })] }) : null] })) })] });
167
+ })] }))), _jsx("div", { class: "alert alert-secondary py-2", "data-bp-preview-config-status": "", role: "status", children: "Key is never submitted." }), _jsx("button", { class: "btn btn-primary", type: "submit", children: "Encrypt and save config" })] }))] }));
168
+ }
169
+ export function render(data) {
170
+ return (_jsxs("div", { class: "container-fluid px-0", children: [_jsxs("div", { class: "d-flex flex-wrap justify-content-between align-items-start gap-3 mb-4", children: [_jsxs("div", { children: [_jsx("h2", { class: "mb-1", children: data.title }), _jsx("p", { class: "text-secondary mb-0", children: "Clone an existing tenant/app configuration while CI owns where each service runs." })] }), _jsx("button", { class: "btn btn-primary", "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-create-preview-group", children: "Create group" })] }), data.notice ? _jsx("div", { class: "alert alert-success", role: "status", children: data.notice }) : null, data.error ? _jsx("div", { class: "alert alert-danger", role: "alert", children: data.error }) : null, credentials(data), _jsxs("div", { class: "alert alert-info d-flex gap-2 align-items-start", children: [_jsx("span", { "aria-hidden": "true", children: "i" }), _jsxs("div", { children: [_jsx("strong", { children: "Pull setup only." }), " Services receive credentials from CI, publish their manifest on first sync, and rebuild preview routes/menu automatically."] })] }), data.groups.length === 0 ? (_jsx("div", { class: "card border-0 shadow-sm", children: _jsx("div", { class: "card-body py-5 text-center text-secondary", children: "No preview groups configured." }) })) : data.groups.map((group) => (_jsx("section", { class: "card border-0 shadow-sm mb-4", "aria-labelledby": `bp-group-${group.id}`, children: _jsxs("div", { class: "card-body", children: [_jsxs("div", { class: "d-flex flex-wrap justify-content-between align-items-start gap-3 mb-3", children: [_jsxs("div", { children: [_jsx("h3", { class: "h5 mb-1", id: `bp-group-${group.id}`, children: group.name }), _jsx("div", { class: "small text-secondary", children: group.sourceLabel }), _jsx("code", { class: "small", children: group.id })] }), _jsxs("div", { class: "d-flex flex-wrap gap-2", children: [_jsx("button", { class: "btn btn-sm btn-outline-primary", "data-bs-toggle": "collapse", "data-bs-target": `#bp-new-${group.id}`, children: "New preview" }), _jsx("button", { class: "btn btn-sm btn-outline-secondary", "data-bs-toggle": "collapse", "data-bs-target": `#bp-settings-${group.id}`, children: "Settings" }), _jsx("button", { class: "btn btn-sm btn-outline-danger", "hx-delete": `${data.previewPath}?entity=group&id=${encodeURIComponent(group.id)}`, "hx-confirm": `Delete ${group.name} and all of its previews?`, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: "Delete" })] })] }), _jsxs("div", { class: "row g-3 mb-3", children: [_jsxs("div", { class: "col-12 col-xl-7", children: [_jsx("div", { class: "small text-secondary mb-1", children: "CI endpoint" }), _jsxs("code", { class: "d-block text-break", children: ["POST ", data.deploymentApiBase, "/", group.id, "/deployments/<key>"] })] }), _jsxs("div", { class: "col-12 col-xl-5", children: [_jsx("div", { class: "small text-secondary mb-1", children: "Managed services" }), _jsx("div", { class: "d-flex flex-wrap gap-1", children: group.services.map((service) => _jsx("span", { class: "badge text-bg-secondary", children: service.serviceId })) })] })] }), _jsx("div", { class: "collapse mb-4", id: `bp-new-${group.id}`, children: _jsxs("div", { class: "border rounded p-3 bg-body-tertiary", children: [_jsx("h4", { class: "h6", children: "Create preview manually" }), _jsxs("form", { "hx-post": data.previewPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "action", value: "create-deployment" }), _jsx("input", { type: "hidden", name: "groupId", value: group.id }), _jsxs("div", { class: "row g-3", children: [_jsxs("div", { class: "col-12 col-md-4", children: [_jsx("label", { class: "form-label", children: "Key" }), _jsx("input", { class: "form-control font-monospace", name: "key", maxlength: "255", pattern: "[A-Za-z0-9][A-Za-z0-9._:-]*", required: true })] }), _jsxs("div", { class: "col-12 col-md-4", children: [_jsx("label", { class: "form-label", children: "Name" }), _jsx("input", { class: "form-control", name: "name" })] }), _jsxs("div", { class: "col-12 col-md-4", children: [_jsx("label", { class: "form-label", children: "Expiry" }), expiryInput(undefined, true)] }), _jsxs("div", { class: "col-12", children: [_jsx("label", { class: "form-label", children: "App hostname or origin" }), _jsx("input", { class: "form-control font-monospace", name: "hostname", placeholder: "pr-123.preview.example.com", required: true })] }), group.services.map((service) => (_jsxs("div", { class: "col-12 col-lg-6", children: [_jsxs("label", { class: "form-label", children: [service.title, " URL"] }), _jsx("input", { class: "form-control font-monospace", type: "url", name: `service.${service.serviceId}`, placeholder: "https://service-pr-123.example.com", required: true }), _jsx("div", { class: "form-text font-monospace", children: service.serviceId })] })))] }), _jsx("button", { class: "btn btn-primary mt-3", type: "submit", children: "Create preview" })] })] }) }), _jsx("div", { class: "collapse mb-4", id: `bp-settings-${group.id}`, children: _jsxs("div", { class: "border rounded p-3", children: [_jsxs("form", { "hx-put": data.previewPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "action", value: "update-group" }), _jsx("input", { type: "hidden", name: "groupId", value: group.id }), _jsxs("div", { class: "row g-3 mb-3", children: [_jsxs("div", { class: "col-12 col-md-8", children: [_jsx("label", { class: "form-label", children: "Group name" }), _jsx("input", { class: "form-control", name: "name", value: group.name, required: true })] }), _jsxs("div", { class: "col-12 col-md-4", children: [_jsx("label", { class: "form-label", children: "Maximum/default expiry" }), expiryInput(group.expiresInDays)] })] }), oidcFields(`bp-group-${group.id}`, group.oidc), _jsx("button", { class: "btn btn-primary", type: "submit", children: "Save settings" })] }), _jsx("hr", {}), _jsxs("form", { "hx-post": data.previewPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "action", value: "rotate-key" }), _jsx("input", { type: "hidden", name: "groupId", value: group.id }), _jsx("button", { class: "btn btn-outline-warning", type: "submit", "hx-confirm": "Rotate this group API key? Existing CI credentials will stop working.", children: "Rotate API key" })] }), configEditor(group, data.previewPath)] }) }), group.deployments.length === 0 ? _jsx("div", { class: "text-secondary small", children: "No active previews." }) : (_jsx("div", { class: "table-responsive", children: _jsxs("table", { class: "table table-sm align-middle mb-0", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Preview" }), _jsx("th", { children: "App" }), _jsx("th", { children: "Services" }), _jsx("th", { children: "Expiry" }), _jsx("th", {})] }) }), _jsx("tbody", { children: group.deployments.map((deployment) => (_jsxs("tr", { children: [_jsxs("td", { children: [_jsx("div", { class: "fw-semibold", children: deployment.name }), _jsx("code", { class: "small", children: deployment.key }), _jsx("div", { children: _jsx("span", { class: `badge ${deployment.ready ? "text-bg-success" : "text-bg-warning"}`, children: deployment.ready ? "Synced" : "Waiting for sync" }) })] }), _jsx("td", { children: _jsx("a", { href: deployment.hostname.startsWith("http") ? deployment.hostname : `https://${deployment.hostname}`, target: "_blank", rel: "noreferrer", children: deployment.hostname }) }), _jsx("td", { children: deployment.services.map((service) => _jsxs("div", { class: "small", children: [_jsx("span", { class: `badge ${service.ready ? "text-bg-success" : "text-bg-warning"}`, children: service.ready ? "Synced" : "Waiting" }), " ", _jsx("span", { class: "font-monospace", children: service.serviceId })] })) }), _jsxs("td", { children: [_jsxs("form", { class: "d-flex gap-2", "hx-put": data.previewPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "action", value: "update-expiry" }), _jsx("input", { type: "hidden", name: "deploymentId", value: deployment.id }), expiryInput(deployment.expiresInDays, false, `Expiry for ${deployment.name}`), _jsx("button", { class: "btn btn-sm btn-outline-secondary", type: "submit", children: "Save" })] }), _jsx("div", { class: "small text-secondary mt-1", children: deployment.expiresAt ? new Date(deployment.expiresAt).toLocaleString() : "Never expires" })] }), _jsx("td", { children: _jsx("button", { class: "btn btn-sm btn-outline-danger", "hx-delete": `${data.previewPath}?entity=deployment&id=${encodeURIComponent(deployment.id)}`, "hx-confirm": `Delete preview ${deployment.name}?`, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: "Delete" }) })] }))) })] }) }))] }) }))), _jsxs("aside", { class: "offcanvas offcanvas-end", tabindex: -1, id: "bp-create-preview-group", "aria-labelledby": "bp-create-preview-group-title", children: [_jsxs("div", { class: "offcanvas-header", children: [_jsx("h3", { class: "offcanvas-title h5", id: "bp-create-preview-group-title", children: "Create preview group" }), _jsx("button", { type: "button", class: "btn-close", "data-bs-dismiss": "offcanvas", "aria-label": "Close" })] }), _jsx("div", { class: "offcanvas-body", children: _jsxs("form", { "hx-post": data.previewPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "action", value: "create-group" }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: "bp-preview-group-name", children: "Name" }), _jsx("input", { id: "bp-preview-group-name", class: "form-control", name: "name", maxlength: "120", required: true })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: "bp-preview-source-tenant", children: "Source tenant" }), _jsxs("select", { id: "bp-preview-source-tenant", class: "form-select", name: "sourceTenantId", required: true, children: [_jsx("option", { value: "", children: "Select tenant" }), data.sourceTenants.map((tenant) => _jsx("option", { value: tenant.id, children: tenant.title }))] })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: "bp-preview-source-app", children: "Source app" }), _jsxs("select", { id: "bp-preview-source-app", class: "form-select", name: "sourceAppId", required: true, children: [_jsx("option", { value: "", children: "Select app" }), data.sourceApps.map((app) => _jsx("option", { value: app.id, "data-tenant-id": app.tenantId, "data-services": app.serviceIds.join(","), "data-required-services": app.requiredServiceIds.join(","), children: app.title }))] })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", for: "bp-preview-service-ids", children: "Service plugin IDs" }), _jsx("textarea", { id: "bp-preview-service-ids", class: "form-control font-monospace", name: "serviceIds", rows: 4, required: true }), _jsx("div", { class: "form-text", children: "Required source services are filled automatically. Add more tenant services if CI will deploy them." })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Maximum/default expiry" }), expiryInput(30)] }), oidcFields("bp-new-group"), _jsx("button", { class: "btn btn-primary w-100", type: "submit", children: "Create group" })] }) })] }), _jsx("script", { children: pageScript() })] }));
171
+ }
172
+ //# sourceMappingURL=GET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/GET.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { render } from "./GET.js";
2
+ //# sourceMappingURL=POST.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"POST.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { render } from "./GET.js";
2
+ //# sourceMappingURL=POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"POST.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/POST.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { render } from "./GET.js";
2
+ //# sourceMappingURL=PUT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PUT.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { render } from "./GET.js";
2
+ //# sourceMappingURL=PUT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PUT.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/_renderer.bootstrap5/PUT.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { title, description } from "../../previewEnvironmentManagement.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { title, description } from "../../previewEnvironmentManagement.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/preview-environments/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC"}
@@ -13,6 +13,8 @@ export declare const ResponseSchema: av.ObjectSchema<{
13
13
  description: av.OptionalSchema<av.StringSchema>;
14
14
  createdAt: av.StringSchema;
15
15
  lastSeenAt: av.OptionalSchema<av.StringSchema>;
16
+ lastSyncAt: av.OptionalSchema<av.StringSchema>;
17
+ syncedVersion: av.OptionalSchema<av.StringSchema>;
16
18
  enabled: av.BoolSchema;
17
19
  scope: av.StringSchema;
18
20
  tenantId: av.OptionalSchema<av.StringSchema>;
@@ -108,6 +110,8 @@ declare const _default: import("@betterportal/framework").RouteHandler<Record<st
108
110
  title?: string | undefined;
109
111
  description?: string | undefined;
110
112
  lastSeenAt?: string | undefined;
113
+ lastSyncAt?: string | undefined;
114
+ syncedVersion?: string | undefined;
111
115
  tenantId?: string | undefined;
112
116
  customUiPath?: string | undefined;
113
117
  }[];
@@ -1 +1 @@
1
- {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/services/GET.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAsFjC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAazB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,qBAAqB,CAAC;AACxC,eAAO,MAAM,WAAW,yCAAyC,CAAC;AAElE,eAAO,MAAM,IAAI,EAAE,kBAKlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAA4D,CAAC;AAEtF,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,YAAY,CAAC,EAMrD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,wBAME"}
1
+ {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/services/GET.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAwFjC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAazB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,qBAAqB,CAAC;AACxC,eAAO,MAAM,WAAW,yCAAyC,CAAC;AAElE,eAAO,MAAM,IAAI,EAAE,kBAKlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAA4D,CAAC;AAEtF,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,YAAY,CAAC,EAMrD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,wBAME"}
@@ -9,7 +9,9 @@ const RegisteredServiceItemSchema = av.object({
9
9
  title: av.optional(av.string()).describe("Human-readable service title from the manifest or registration."),
10
10
  description: av.optional(av.string()).describe("Human-readable service description from the manifest."),
11
11
  createdAt: av.string().describe("ISO timestamp when the service registration was created."),
12
- lastSeenAt: av.optional(av.string()).describe("ISO timestamp when the service last checked in or synced."),
12
+ lastSeenAt: av.optional(av.string()).describe("ISO timestamp when the service last authenticated with config-manager."),
13
+ lastSyncAt: av.optional(av.string()).describe("ISO timestamp when config-manager last delivered configuration to the service."),
14
+ syncedVersion: av.optional(av.string()).describe("Latest service manifest version received by config-manager."),
13
15
  enabled: av.bool().describe("Whether this service registration is active."),
14
16
  scope: av.string().minLength(1).describe("Registration scope: tenant, shared, platform, or shell."),
15
17
  tenantId: av.optional(av.string()).describe("Owning tenant id for tenant-scoped service registrations."),
@@ -1 +1 @@
1
- {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/services/GET.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EACL,aAAa,EAId,MAAM,yBAAyB,CAAC;AAEjC,MAAM,2BAA2B,GAAG,EAAE,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC3E,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IAC5G,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC5F,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC5G,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,iEAAiE,CAAC;IAC3G,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IACvG,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAC3F,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IAC1G,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC3E,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACnG,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IACxG,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0EAA0E,CAAC;IACvH,gBAAgB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAC/G,mBAAmB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gFAAgF,CAAC;IACxI,sBAAsB,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,oFAAoF,CAAC;IAC/I,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,+DAA+D,CAAC;CACjH,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC9D,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACrE,cAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CAC9G,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC9D,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAChE,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACjE,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACzE,CAAC,CAAC;AAEH,MAAM,8BAA8B,GAAG,EAAE,CAAC,MAAM,CAAC;IAC/C,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5B,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/B,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IACrC,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IAC/B,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IAClC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAG,EAAE,CAAC,MAAM,CAAC;IAC9C,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAClC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5C,eAAe,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,WAAW,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACrC,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAG,EAAE,CAAC,MAAM,CAAC;IAC7C,eAAe,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,kBAAkB,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,iBAAiB,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,YAAY,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC;IACpC,eAAe,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,kBAAkB,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,iBAAiB,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACnC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/B,UAAU,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,WAAW,CAAU,CAAC;IACjD,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAU,CAAC;IACrF,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChD,eAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACtD,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnD,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC/D,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAChF,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACnH,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAC3G,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACtH,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAChH,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,+DAA+D,CAAC;IACnI,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACvI,wBAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACrI,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACrG,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0EAA0E,CAAC;IACnJ,YAAY,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAChG,cAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oEAAoE,CAAC;CACxH,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,KAAK,GAAG,kBAAkB,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,sCAAsC,CAAC;AAElE,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE;QACX,EAAE,SAAS,EAAE,iCAAiC,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE;KAClG;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;AAEtF,MAAM,CAAC,MAAM,aAAa,GAAiC;IACzD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,uBAAuB,EAAE;KAChN;CACF,CAAC;AAEF,eAAe,aAAa,CAC1B,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,CAAC,GAAG,EAAE,EAAE;IACN,IAAI,GAAG,CAAC,aAAa;QAAE,OAAO,GAAG,CAAC,aAA6B,CAAC;IAChE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,wBAAwB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAC/M,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/services/GET.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ function renderServiceCard(service, data, tenantById) {
46
46
  return (_jsx("div", { class: "col-12 col-lg-6", children: _jsx("div", { class: "card border-0 shadow-sm h-100", children: _jsxs("div", { class: "card-body", children: [_jsxs("div", { class: "d-flex justify-content-between align-items-start mb-2", children: [_jsxs("div", { children: [_jsx("h5", { class: "mb-0", children: title }), _jsx("div", { class: "small text-secondary font-monospace", children: service.id })] }), _jsx("span", { class: `badge ${service.scope === "platform" ? "text-bg-info" :
47
47
  service.scope === "shell" ? "text-bg-warning" :
48
48
  service.scope === "shared" ? "text-bg-success" :
49
- "text-bg-primary"}`, children: service.scope })] }), service.tenantId ? _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Tenant:" }), " ", tenant?.title ?? service.tenantId] }) : "", service.scope === "shell" && apps.length > 0 ? _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Apps:" }), " ", apps.map((app) => app.title).join(", ")] }) : "", _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "URL:" }), " ", _jsx("span", { class: "font-monospace", children: service.hostname })] }), service.serviceId ? _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Plugin:" }), " ", _jsx("span", { class: "font-monospace", children: service.serviceId })] }) : "", service.capabilities.length > 0 ? (_jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Capabilities:" }), " ", service.capabilities.map((capability) => _jsx("span", { class: "badge text-bg-light border me-1", children: capability }))] })) : "", _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Status:" }), " ", _jsx("span", { class: `badge ${service.enabled ? "text-bg-success" : "text-bg-secondary"}`, children: service.enabled ? "active" : "disabled" })] }), _jsxs("div", { class: "small mb-2", children: [_jsx("strong", { children: "Created:" }), " ", service.createdAt, service.lastSeenAt ? ` - Last seen: ${service.lastSeenAt}` : ""] }), _jsxs("div", { class: "d-flex gap-2 flex-wrap align-items-center", children: [service.scope !== "shared" ? (_jsxs(_Fragment, { children: [_jsx("button", { class: "btn btn-sm btn-outline-secondary", type: "button", "data-bp-change-hostname": "", "data-bp-service-id": service.id, "data-bp-service-url": normalizeUrl(service.hostname), "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-change-hostname-panel", children: "Change URL" }), service.serviceId ? (_jsx("button", { class: "btn btn-sm btn-outline-warning", type: "button", hidden: true, "data-bp-reconfigure-service": "", "data-bp-service-id": service.id, "data-bp-service-plugin-id": service.serviceId, "data-bp-service-url": normalizeUrl(service.hostname), "data-bp-tenant-id": service.tenantId ?? "", children: "Reset / reconfigure" })) : ""] })) : "", apps.length > 0 && service.hasConfigurableOptions ? (_jsxs("div", { class: "btn-group btn-group-sm", children: [_jsx("button", { class: "btn btn-outline-primary dropdown-toggle", type: "button", "data-bs-toggle": "dropdown", children: "Configure" }), _jsxs("ul", { class: "dropdown-menu", children: [_jsx("li", { children: _jsx("button", { type: "button", class: "dropdown-item", ...configureAttrs(service, undefined, `${title} - Tenant defaults`, adminApiBase), children: "Tenant defaults" }) }), apps.map((app) => (_jsx("li", { children: _jsx("button", { type: "button", class: "dropdown-item", ...configureAttrs(service, app.id, `${title} - ${app.title}`, adminApiBase), children: app.title }) })))] })] })) : (configureButton(service, undefined, title, adminApiBase)), service.scope === "shared" && service.tenantId ? (_jsx("button", { class: "btn btn-sm btn-outline-secondary", "hx-delete": `${data.adminApiBase}/shared-services/${encodeURIComponent(service.serviceId ?? service.id)}/activations?tenantId=${encodeURIComponent(service.tenantId)}`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "data-bp-error-modal": "", "hx-confirm": "Deactivate this shared service?", children: "Deactivate" })) : service.tenantId ? (_jsxs(_Fragment, { children: [service.serviceId && service.serviceId !== "org.betterportal.config-manager" ? (_jsx("button", { class: "btn btn-sm btn-outline-success", "hx-post": `${data.adminApiBase}/tenants/${encodeURIComponent(service.tenantId)}/services/${encodeURIComponent(service.id)}/migrate-to-shared`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "hx-confirm": "Convert this tenant service to a shared service and rewrite app references?", children: "Convert to shared" })) : "", _jsx("button", { class: "btn btn-sm btn-outline-danger", "hx-delete": `${data.adminApiBase}/tenants/${encodeURIComponent(service.tenantId)}/services/${encodeURIComponent(service.id)}`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "data-bp-error-modal": "", "hx-confirm": "Remove this service registration?", children: "Remove" })] })) : ""] })] }) }) }));
49
+ "text-bg-primary"}`, children: service.scope })] }), service.tenantId ? _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Tenant:" }), " ", tenant?.title ?? service.tenantId] }) : "", service.scope === "shell" && apps.length > 0 ? _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Apps:" }), " ", apps.map((app) => app.title).join(", ")] }) : "", _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "URL:" }), " ", _jsx("span", { class: "font-monospace", children: service.hostname })] }), service.serviceId ? _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Plugin:" }), " ", _jsx("span", { class: "font-monospace", children: service.serviceId })] }) : "", service.capabilities.length > 0 ? (_jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Capabilities:" }), " ", service.capabilities.map((capability) => _jsx("span", { class: "badge text-bg-light border me-1", children: capability }))] })) : "", _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Status:" }), " ", _jsx("span", { class: `badge ${service.enabled ? "text-bg-success" : "text-bg-secondary"}`, children: service.enabled ? "active" : "disabled" })] }), _jsxs("div", { class: "small mb-2", children: [_jsx("strong", { children: "Created:" }), " ", service.createdAt, service.lastSeenAt ? ` - Last seen: ${service.lastSeenAt}` : "", service.lastSyncAt ? ` - Last sync: ${service.lastSyncAt}` : "", service.syncedVersion ? ` - Synced version: ${service.syncedVersion}` : ""] }), _jsxs("div", { class: "d-flex gap-2 flex-wrap align-items-center", children: [service.scope !== "shared" ? (_jsxs(_Fragment, { children: [_jsx("button", { class: "btn btn-sm btn-outline-secondary", type: "button", "data-bp-change-hostname": "", "data-bp-service-id": service.id, "data-bp-service-url": normalizeUrl(service.hostname), "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-change-hostname-panel", children: "Change URL" }), service.serviceId ? (_jsx("button", { class: "btn btn-sm btn-outline-warning", type: "button", hidden: true, "data-bp-reconfigure-service": "", "data-bp-service-id": service.id, "data-bp-service-plugin-id": service.serviceId, "data-bp-service-url": normalizeUrl(service.hostname), "data-bp-tenant-id": service.tenantId ?? "", children: "Reset / reconfigure" })) : ""] })) : "", apps.length > 0 && service.hasConfigurableOptions ? (_jsxs("div", { class: "btn-group btn-group-sm", children: [_jsx("button", { class: "btn btn-outline-primary dropdown-toggle", type: "button", "data-bs-toggle": "dropdown", children: "Configure" }), _jsxs("ul", { class: "dropdown-menu", children: [_jsx("li", { children: _jsx("button", { type: "button", class: "dropdown-item", ...configureAttrs(service, undefined, `${title} - Tenant defaults`, adminApiBase), children: "Tenant defaults" }) }), apps.map((app) => (_jsx("li", { children: _jsx("button", { type: "button", class: "dropdown-item", ...configureAttrs(service, app.id, `${title} - ${app.title}`, adminApiBase), children: app.title }) })))] })] })) : (configureButton(service, undefined, title, adminApiBase)), service.scope === "shared" && service.tenantId ? (_jsx("button", { class: "btn btn-sm btn-outline-secondary", "hx-delete": `${data.adminApiBase}/shared-services/${encodeURIComponent(service.serviceId ?? service.id)}/activations?tenantId=${encodeURIComponent(service.tenantId)}`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "data-bp-error-modal": "", "hx-confirm": "Deactivate this shared service?", children: "Deactivate" })) : service.tenantId ? (_jsxs(_Fragment, { children: [service.serviceId && service.serviceId !== "org.betterportal.config-manager" ? (_jsx("button", { class: "btn btn-sm btn-outline-success", "hx-post": `${data.adminApiBase}/tenants/${encodeURIComponent(service.tenantId)}/services/${encodeURIComponent(service.id)}/migrate-to-shared`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "hx-confirm": "Convert this tenant service to a shared service and rewrite app references?", children: "Convert to shared" })) : "", _jsx("button", { class: "btn btn-sm btn-outline-danger", "hx-delete": `${data.adminApiBase}/tenants/${encodeURIComponent(service.tenantId)}/services/${encodeURIComponent(service.id)}`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "data-bp-error-modal": "", "hx-confirm": "Remove this service registration?", children: "Remove" })] })) : ""] })] }) }) }));
50
50
  }
51
51
  function normalizeUrl(value) {
52
52
  return value.replace(/\/+$/, "");