@betterportal/config-manager 0.0.1

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 (154) hide show
  1. package/README.md +3 -0
  2. package/bsb-plugin.json +23 -0
  3. package/bsb-tests.json +14 -0
  4. package/lib/.bsb/clients/service-betterportal-config-manager.d.ts +37 -0
  5. package/lib/.bsb/clients/service-betterportal-config-manager.d.ts.map +1 -0
  6. package/lib/.bsb/clients/service-betterportal-config-manager.js +40 -0
  7. package/lib/.bsb/clients/service-betterportal-config-manager.js.map +1 -0
  8. package/lib/index.d.ts +2 -0
  9. package/lib/index.d.ts.map +1 -0
  10. package/lib/index.js +2 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts +3 -0
  13. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts.map +1 -0
  14. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.js +235 -0
  15. package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.js.map +1 -0
  16. package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts +4 -0
  17. package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts.map +1 -0
  18. package/lib/plugins/service-betterportal-config-manager/adminApi.js +2319 -0
  19. package/lib/plugins/service-betterportal-config-manager/adminApi.js.map +1 -0
  20. package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.d.ts +21 -0
  21. package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.d.ts.map +1 -0
  22. package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.js +269 -0
  23. package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.js.map +1 -0
  24. package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.d.ts +19 -0
  25. package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.d.ts.map +1 -0
  26. package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.js +329 -0
  27. package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.js.map +1 -0
  28. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_theme.bootstrap1/index.d.ts +4 -0
  29. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_theme.bootstrap1/index.d.ts.map +1 -0
  30. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_theme.bootstrap1/index.js +38 -0
  31. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_theme.bootstrap1/index.js.map +1 -0
  32. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/index.d.ts +96 -0
  33. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/index.d.ts.map +1 -0
  34. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/index.js +78 -0
  35. package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/index.js.map +1 -0
  36. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.bootstrap1/index.d.ts +4 -0
  37. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.bootstrap1/index.d.ts.map +1 -0
  38. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.bootstrap1/index.js +62 -0
  39. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.bootstrap1/index.js.map +1 -0
  40. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.embedded.d.ts +5 -0
  41. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.embedded.d.ts.map +1 -0
  42. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.embedded.js +5 -0
  43. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.embedded.js.map +1 -0
  44. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/index.d.ts +43 -0
  45. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/index.d.ts.map +1 -0
  46. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/index.js +68 -0
  47. package/lib/plugins/service-betterportal-config-manager/bp-routes/config/index.js.map +1 -0
  48. package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/_theme.bootstrap1/index.d.ts +5 -0
  49. package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/_theme.bootstrap1/index.d.ts.map +1 -0
  50. package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/_theme.bootstrap1/index.js +11 -0
  51. package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/_theme.bootstrap1/index.js.map +1 -0
  52. package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/index.d.ts +32 -0
  53. package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/index.d.ts.map +1 -0
  54. package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/index.js +32 -0
  55. package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/index.js.map +1 -0
  56. package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/_theme.bootstrap1/index.d.ts +4 -0
  57. package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/_theme.bootstrap1/index.d.ts.map +1 -0
  58. package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/_theme.bootstrap1/index.js +170 -0
  59. package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/_theme.bootstrap1/index.js.map +1 -0
  60. package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/index.d.ts +60 -0
  61. package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/index.d.ts.map +1 -0
  62. package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/index.js +48 -0
  63. package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/index.js.map +1 -0
  64. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/_theme.bootstrap1/index.d.ts +4 -0
  65. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/_theme.bootstrap1/index.d.ts.map +1 -0
  66. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/_theme.bootstrap1/index.js +28 -0
  67. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/_theme.bootstrap1/index.js.map +1 -0
  68. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/index.d.ts +48 -0
  69. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/index.d.ts.map +1 -0
  70. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/index.js +40 -0
  71. package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/index.js.map +1 -0
  72. package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/_theme.bootstrap1/index.d.ts +5 -0
  73. package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/_theme.bootstrap1/index.d.ts.map +1 -0
  74. package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/_theme.bootstrap1/index.js +194 -0
  75. package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/_theme.bootstrap1/index.js.map +1 -0
  76. package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/index.d.ts +80 -0
  77. package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/index.d.ts.map +1 -0
  78. package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/index.js +59 -0
  79. package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/index.js.map +1 -0
  80. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.d.ts +5 -0
  81. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.d.ts.map +1 -0
  82. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.js +167 -0
  83. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.js.map +1 -0
  84. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/index.d.ts +128 -0
  85. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/index.d.ts.map +1 -0
  86. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/index.js +89 -0
  87. package/lib/plugins/service-betterportal-config-manager/bp-routes/services/index.js.map +1 -0
  88. package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.d.ts +5 -0
  89. package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.d.ts.map +1 -0
  90. package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.js +8 -0
  91. package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.js.map +1 -0
  92. package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/index.d.ts +89 -0
  93. package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/index.d.ts.map +1 -0
  94. package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/index.js +93 -0
  95. package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/index.js.map +1 -0
  96. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.d.ts +4 -0
  97. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.d.ts.map +1 -0
  98. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.js +61 -0
  99. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.js.map +1 -0
  100. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/index.d.ts +180 -0
  101. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/index.d.ts.map +1 -0
  102. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/index.js +405 -0
  103. package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/index.js.map +1 -0
  104. package/lib/plugins/service-betterportal-config-manager/cpBootstrap.d.ts +26 -0
  105. package/lib/plugins/service-betterportal-config-manager/cpBootstrap.d.ts.map +1 -0
  106. package/lib/plugins/service-betterportal-config-manager/cpBootstrap.js +58 -0
  107. package/lib/plugins/service-betterportal-config-manager/cpBootstrap.js.map +1 -0
  108. package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.d.ts +3 -0
  109. package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.d.ts.map +1 -0
  110. package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.js +365 -0
  111. package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.js.map +1 -0
  112. package/lib/plugins/service-betterportal-config-manager/index.d.ts +143 -0
  113. package/lib/plugins/service-betterportal-config-manager/index.d.ts.map +1 -0
  114. package/lib/plugins/service-betterportal-config-manager/index.js +696 -0
  115. package/lib/plugins/service-betterportal-config-manager/index.js.map +1 -0
  116. package/lib/plugins/service-betterportal-config-manager/menuEditor.d.ts +3 -0
  117. package/lib/plugins/service-betterportal-config-manager/menuEditor.d.ts.map +1 -0
  118. package/lib/plugins/service-betterportal-config-manager/menuEditor.js +823 -0
  119. package/lib/plugins/service-betterportal-config-manager/menuEditor.js.map +1 -0
  120. package/lib/plugins/service-betterportal-config-manager/routeContext.d.ts +10 -0
  121. package/lib/plugins/service-betterportal-config-manager/routeContext.d.ts.map +1 -0
  122. package/lib/plugins/service-betterportal-config-manager/routeContext.js +11 -0
  123. package/lib/plugins/service-betterportal-config-manager/routeContext.js.map +1 -0
  124. package/lib/plugins/service-betterportal-config-manager/setupTokens.d.ts +18 -0
  125. package/lib/plugins/service-betterportal-config-manager/setupTokens.d.ts.map +1 -0
  126. package/lib/plugins/service-betterportal-config-manager/setupTokens.js +245 -0
  127. package/lib/plugins/service-betterportal-config-manager/setupTokens.js.map +1 -0
  128. package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts +41 -0
  129. package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts.map +1 -0
  130. package/lib/plugins/service-betterportal-config-manager/storage/core.js +396 -0
  131. package/lib/plugins/service-betterportal-config-manager/storage/core.js.map +1 -0
  132. package/lib/plugins/service-betterportal-config-manager/storage/file.d.ts +10 -0
  133. package/lib/plugins/service-betterportal-config-manager/storage/file.d.ts.map +1 -0
  134. package/lib/plugins/service-betterportal-config-manager/storage/file.js +30 -0
  135. package/lib/plugins/service-betterportal-config-manager/storage/file.js.map +1 -0
  136. package/lib/plugins/service-betterportal-config-manager/storage/index.d.ts +36 -0
  137. package/lib/plugins/service-betterportal-config-manager/storage/index.d.ts.map +1 -0
  138. package/lib/plugins/service-betterportal-config-manager/storage/index.js +52 -0
  139. package/lib/plugins/service-betterportal-config-manager/storage/index.js.map +1 -0
  140. package/lib/plugins/service-betterportal-config-manager/storage/postgres.d.ts +15 -0
  141. package/lib/plugins/service-betterportal-config-manager/storage/postgres.d.ts.map +1 -0
  142. package/lib/plugins/service-betterportal-config-manager/storage/postgres.js +60 -0
  143. package/lib/plugins/service-betterportal-config-manager/storage/postgres.js.map +1 -0
  144. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts +44 -0
  145. package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts.map +1 -0
  146. package/lib/plugins/service-betterportal-config-manager/syncApi.js +280 -0
  147. package/lib/plugins/service-betterportal-config-manager/syncApi.js.map +1 -0
  148. package/lib/plugins/service-betterportal-config-manager/webhooks.d.ts +6 -0
  149. package/lib/plugins/service-betterportal-config-manager/webhooks.d.ts.map +1 -0
  150. package/lib/plugins/service-betterportal-config-manager/webhooks.js +372 -0
  151. package/lib/plugins/service-betterportal-config-manager/webhooks.js.map +1 -0
  152. package/lib/schemas/service-betterportal-config-manager.json +157 -0
  153. package/lib/schemas/service-betterportal-config-manager.plugin.json +135 -0
  154. package/package.json +69 -0
@@ -0,0 +1,93 @@
1
+ import * as av from "anyvali";
2
+ import { createHandler } from "@betterportal/framework";
3
+ const TenantSchema = av.object({
4
+ id: av.string().minLength(1),
5
+ title: av.string().minLength(1)
6
+ }, { unknownKeys: "strip" });
7
+ const AppSchema = av.object({
8
+ id: av.string().minLength(1),
9
+ tenantId: av.string().minLength(1),
10
+ title: av.string().minLength(1),
11
+ hostnames: av.array(av.string()).default([])
12
+ }, { unknownKeys: "strip" });
13
+ const SharedServiceSchema = av.object({
14
+ id: av.string().minLength(1),
15
+ serviceId: av.optional(av.string().minLength(1)),
16
+ title: av.string().minLength(1),
17
+ description: av.optional(av.string()),
18
+ baseUrl: av.string().minLength(1),
19
+ category: av.optional(av.string()),
20
+ tags: av.array(av.string()).default([]),
21
+ enabled: av.bool().default(true),
22
+ active: av.bool().default(false)
23
+ }, { unknownKeys: "strip" });
24
+ const EndpointSchema = av.object({
25
+ current: av.string().minLength(1),
26
+ services: av.string().minLength(1),
27
+ activateService: av.string().minLength(1),
28
+ routes: av.string().minLength(1),
29
+ fragments: av.string().minLength(1),
30
+ theme: av.string().minLength(1),
31
+ webhooks: av.string().minLength(1),
32
+ webhookEvents: av.string().minLength(1)
33
+ }, { unknownKeys: "strip" });
34
+ export const ResponseSchema = av.object({
35
+ title: av.string().minLength(1),
36
+ tenant: TenantSchema,
37
+ app: AppSchema,
38
+ idsVisible: av.bool().default(true),
39
+ managementDiscoveryUrl: av.string().minLength(1),
40
+ automationCatalogUrl: av.string().minLength(1),
41
+ endpoints: EndpointSchema,
42
+ sharedServices: av.array(SharedServiceSchema).default([]),
43
+ routeCount: av.int().min(0),
44
+ fragmentCount: av.int().min(0)
45
+ }, { unknownKeys: "strip" });
46
+ export const title = "App Settings";
47
+ export const description = "Manage the current BetterPortal app through the user management API.";
48
+ export const auth = {
49
+ required: true,
50
+ permissions: [
51
+ { serviceId: "service.betterportal.config-manager", viewId: "settings.index", permissions: ["read", "update"] }
52
+ ]
53
+ };
54
+ export const dependencies = [
55
+ "services.index",
56
+ "routes.index",
57
+ "fragments.index",
58
+ "config.index"
59
+ ];
60
+ export const cacheHints = { ttlSeconds: 0, varyBy: ["accept", "origin", "referer"] };
61
+ export const demoScenarios = [
62
+ {
63
+ id: "default",
64
+ title: "Default",
65
+ response: {
66
+ title: "App Settings",
67
+ tenant: { id: "tenant-id", title: "Tenant" },
68
+ app: { id: "app-id", tenantId: "tenant-id", title: "App", hostnames: [] },
69
+ idsVisible: true,
70
+ managementDiscoveryUrl: "/.well-known/bp/management",
71
+ automationCatalogUrl: "/.well-known/bp/automation/catalog",
72
+ endpoints: {
73
+ current: "/.well-known/bp/manage/current",
74
+ services: "/.well-known/bp/manage/services",
75
+ activateService: "/.well-known/bp/manage/services/activate",
76
+ routes: "/.well-known/bp/manage/routes",
77
+ fragments: "/.well-known/bp/manage/fragments",
78
+ theme: "/.well-known/bp/manage/theme",
79
+ webhooks: "/.well-known/bp/manage/webhooks/targets",
80
+ webhookEvents: "/.well-known/bp/manage/webhooks/events"
81
+ },
82
+ sharedServices: [],
83
+ routeCount: 0,
84
+ fragmentCount: 0
85
+ }
86
+ }
87
+ ];
88
+ export const handleGet = createHandler({ response: ResponseSchema }, (ctx) => {
89
+ if (ctx.responseModel)
90
+ return ctx.responseModel;
91
+ return demoScenarios[0].response;
92
+ });
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/settings/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { HtmlRenderable } from "@betterportal/framework";
2
+ import type { ResponseData } from "../index.js";
3
+ export declare function render(data: ResponseData): HtmlRenderable;
4
+ //# 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/tenants/_theme.bootstrap1/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsDhD,wBAAgB,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CA4PzD"}
@@ -0,0 +1,61 @@
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 tenantsScript(apiBase, serviceUrl) {
5
+ return js(`(() => {
6
+ const apiBase = ${JSON.stringify(apiBase)};
7
+ const serviceUrl = ${JSON.stringify(serviceUrl)};
8
+
9
+ const filterTenantScopedOptions = (form, tenantId) => {
10
+ form.querySelectorAll("select[data-bp-tenant-scoped]").forEach((select) => {
11
+ select.querySelectorAll("option[data-bp-tenant-id]").forEach((option) => {
12
+ option.hidden = option.getAttribute("data-bp-tenant-id") !== tenantId;
13
+ });
14
+ });
15
+ };
16
+
17
+ const addAppForm = document.getElementById("bp-add-app-form");
18
+ const addTenantSelect = addAppForm?.querySelector("[name=tenantId]");
19
+ addTenantSelect?.addEventListener("change", () => {
20
+ filterTenantScopedOptions(addAppForm, addTenantSelect.value);
21
+ });
22
+
23
+ document.querySelectorAll("[data-bp-edit-tenant]").forEach((btn) => {
24
+ btn.addEventListener("click", () => {
25
+ const data = JSON.parse(btn.dataset.bpEditTenant);
26
+ const form = document.getElementById("bp-edit-tenant-form");
27
+ if (!form) return;
28
+ form.querySelector("[name=tenantId]").value = data.id;
29
+ form.querySelector("[name=title]").value = data.title;
30
+ form.querySelector("[name=slug]").value = data.slug;
31
+ form.querySelector("[name=active]").checked = data.active;
32
+ if (window.htmx) window.htmx.process(form);
33
+ });
34
+ });
35
+
36
+ document.querySelectorAll("[data-bp-edit-app]").forEach((btn) => {
37
+ btn.addEventListener("click", () => {
38
+ const data = JSON.parse(btn.dataset.bpEditApp);
39
+ const form = document.getElementById("bp-edit-app-form");
40
+ if (!form) return;
41
+ form.querySelector("[name=appId]").value = data.id;
42
+ form.querySelector("[name=title]").value = data.title;
43
+ form.querySelector("[name=slug]").value = data.slug;
44
+ form.querySelector("[name=hostnames]").value = data.hostnames.join(", ");
45
+ filterTenantScopedOptions(form, data.tenantId);
46
+ const shellSelect = form.querySelector("[name=shellServiceId]");
47
+ shellSelect.value = data.shellServiceId || "";
48
+ const authSelect = form.querySelector("[name=authServiceId]");
49
+ authSelect.value = data.authServiceId || "";
50
+ if (window.htmx) window.htmx.process(form);
51
+ });
52
+ });
53
+ })()`);
54
+ }
55
+ export function render(data) {
56
+ const serviceUrl = data.serviceBaseUrl ?? "";
57
+ const apiBase = serviceUrl + data.adminApiBase;
58
+ const tenantsPath = `${serviceUrl}/tenants`;
59
+ return (_jsxs("div", { class: "container-fluid px-0", children: [_jsx("h2", { class: "mb-4", children: data.title }), _jsxs("div", { class: "d-flex justify-content-between align-items-center mb-3", children: [_jsx("h4", { class: "mb-0", children: "Tenants" }), _jsx("button", { class: "btn btn-sm btn-primary", "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-add-tenant-panel", children: "+ Add Tenant" })] }), data.tenants.length === 0 ? (_jsx("div", { class: "alert alert-secondary mb-4", children: "No tenants configured" })) : (_jsx("div", { class: "table-responsive mb-4", children: _jsxs("table", { class: "table table-sm table-hover align-middle", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "ID" }), _jsx("th", { children: "Slug" }), _jsx("th", { children: "Title" }), _jsx("th", { children: "Services" }), _jsx("th", { children: "Status" }), _jsx("th", {})] }) }), _jsx("tbody", { children: data.tenants.map((t) => (_jsxs("tr", { children: [_jsx("td", { class: "fw-semibold font-monospace small", children: t.id }), _jsx("td", { children: t.slug }), _jsx("td", { children: t.title }), _jsx("td", { children: _jsx("span", { class: "badge text-bg-secondary", children: t.serviceCount }) }), _jsx("td", { children: _jsx("span", { class: `badge ${t.active ? "text-bg-success" : "text-bg-secondary"}`, children: t.active ? "active" : "inactive" }) }), _jsx("td", { children: _jsxs("div", { class: "btn-group btn-group-sm", children: [_jsx("button", { class: "btn btn-outline-primary", "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-edit-tenant-panel", "data-bp-edit-tenant": JSON.stringify(t), children: "Edit" }), _jsx("button", { class: "btn btn-outline-danger", "hx-delete": `${tenantsPath}?entity=tenant&id=${encodeURIComponent(t.id)}`, "hx-confirm": `Delete tenant ${t.id} and all its apps?`, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: "x" })] }) })] }))) })] }) })), _jsxs("div", { class: "d-flex justify-content-between align-items-center mb-3", children: [_jsx("h4", { class: "mb-0", children: "Apps" }), _jsx("button", { class: "btn btn-sm btn-primary", "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-add-app-panel", children: "+ Add App" })] }), data.apps.length === 0 ? (_jsx("div", { class: "alert alert-secondary", children: "No apps configured" })) : (_jsx("div", { class: "row g-3 mb-4", children: data.apps.map((app) => (_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: app.title }), _jsx("div", { class: "small text-secondary font-monospace", children: app.id })] }), _jsxs("div", { class: "d-flex gap-1", children: [_jsx("span", { class: "badge text-bg-secondary", children: app.shellServiceId ? "shell" : "no shell" }), _jsx("span", { class: "badge text-bg-secondary", children: app.authServiceId ? "auth" : "no auth" })] })] }), _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Tenant:" }), " ", app.tenantId] }), _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Hostnames:" }), " ", app.hostnames.join(", ")] }), _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Shell:" }), " ", _jsx("span", { class: "font-monospace", children: app.shellServiceId ?? "not selected" })] }), _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Auth:" }), " ", _jsx("span", { class: "font-monospace", children: app.authServiceId ?? "not selected" })] }), _jsxs("div", { class: "small mb-2", children: [_jsx("strong", { children: "Routes:" }), " ", app.routeCount] }), _jsxs("div", { class: "btn-group btn-group-sm", children: [_jsx("button", { class: "btn btn-outline-primary", "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-edit-app-panel", "data-bp-edit-app": JSON.stringify(app), children: "Edit" }), _jsx("button", { class: "btn btn-outline-danger", "hx-delete": `${tenantsPath}?entity=app&id=${encodeURIComponent(app.id)}`, "hx-confirm": `Delete app ${app.id}?`, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: "Delete" })] })] }) }) }))) })), _jsxs("div", { class: "offcanvas offcanvas-end", tabindex: -1, id: "bp-add-tenant-panel", children: [_jsxs("div", { class: "offcanvas-header", children: [_jsx("h5", { class: "offcanvas-title", children: "Add Tenant" }), _jsx("button", { type: "button", class: "btn-close", "data-bs-dismiss": "offcanvas" })] }), _jsx("div", { class: "offcanvas-body", children: _jsxs("form", { id: "bp-add-tenant-form", "hx-post": tenantsPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "entity", value: "tenant" }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Tenant Name" }), _jsx("input", { type: "text", class: "form-control", name: "title", placeholder: "My Organization", required: true }), _jsx("div", { class: "form-text", children: "ID is generated automatically." })] }), _jsx("div", { class: "alert alert-danger d-none", id: "bp-tenant-error" }), _jsx("button", { type: "submit", class: "btn btn-primary w-100", children: "Create Tenant" })] }) })] }), _jsxs("div", { class: "offcanvas offcanvas-end", tabindex: -1, id: "bp-edit-tenant-panel", children: [_jsxs("div", { class: "offcanvas-header", children: [_jsx("h5", { class: "offcanvas-title", children: "Edit Tenant" }), _jsx("button", { type: "button", class: "btn-close", "data-bs-dismiss": "offcanvas" })] }), _jsx("div", { class: "offcanvas-body", children: _jsxs("form", { id: "bp-edit-tenant-form", "hx-put": tenantsPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "entity", value: "tenant" }), _jsx("input", { type: "hidden", name: "tenantId" }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Title" }), _jsx("input", { type: "text", class: "form-control", name: "title", required: true })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Slug" }), _jsx("input", { type: "text", class: "form-control font-monospace", name: "slug", required: true })] }), _jsxs("div", { class: "form-check form-switch mb-3", children: [_jsx("input", { type: "hidden", name: "active", value: "false" }), _jsx("input", { class: "form-check-input", type: "checkbox", name: "active", value: "true", id: "bp-tenant-active" }), _jsx("label", { class: "form-check-label", for: "bp-tenant-active", children: "Active" })] }), _jsx("div", { class: "alert alert-danger d-none", id: "bp-edit-tenant-error" }), _jsx("button", { type: "submit", class: "btn btn-primary w-100", children: "Save" })] }) })] }), _jsxs("div", { class: "offcanvas offcanvas-end", tabindex: -1, id: "bp-add-app-panel", children: [_jsxs("div", { class: "offcanvas-header", children: [_jsx("h5", { class: "offcanvas-title", children: "Add App" }), _jsx("button", { type: "button", class: "btn-close", "data-bs-dismiss": "offcanvas" })] }), _jsx("div", { class: "offcanvas-body", children: _jsxs("form", { id: "bp-add-app-form", "hx-post": tenantsPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "entity", value: "app" }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Tenant" }), _jsxs("select", { class: "form-select", name: "tenantId", required: true, children: [_jsx("option", { value: "", children: "Select tenant..." }), data.tenants.map((t) => (_jsx("option", { value: t.id, children: t.title })))] })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "App Name" }), _jsx("input", { type: "text", class: "form-control", name: "title", placeholder: "Web App", required: true })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Hostname" }), _jsx("input", { type: "text", class: "form-control", name: "hostname", placeholder: "localhost:3100", required: true })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Shell service" }), _jsxs("select", { class: "form-select", name: "shellServiceId", "data-bp-tenant-scoped": "", children: [_jsx("option", { value: "", children: "No shell selected" }), data.shellServices.map((service) => (_jsx("option", { value: service.id, "data-bp-tenant-id": service.tenantId, children: service.title })))] })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Auth provider" }), _jsxs("select", { class: "form-select", name: "authServiceId", "data-bp-tenant-scoped": "", children: [_jsx("option", { value: "", children: "No auth provider" }), data.authServices.map((service) => (_jsx("option", { value: service.id, "data-bp-tenant-id": service.tenantId, children: service.title })))] })] }), _jsx("div", { class: "alert alert-danger d-none", id: "bp-app-error" }), _jsx("button", { type: "submit", class: "btn btn-primary w-100", children: "Create App" })] }) })] }), _jsxs("div", { class: "offcanvas offcanvas-end", tabindex: -1, id: "bp-edit-app-panel", children: [_jsxs("div", { class: "offcanvas-header", children: [_jsx("h5", { class: "offcanvas-title", children: "Edit App" }), _jsx("button", { type: "button", class: "btn-close", "data-bs-dismiss": "offcanvas" })] }), _jsx("div", { class: "offcanvas-body", children: _jsxs("form", { id: "bp-edit-app-form", "hx-put": tenantsPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "entity", value: "app" }), _jsx("input", { type: "hidden", name: "appId" }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Title" }), _jsx("input", { type: "text", class: "form-control", name: "title", required: true })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Slug" }), _jsx("input", { type: "text", class: "form-control font-monospace", name: "slug", required: true })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Hostnames (comma-separated)" }), _jsx("input", { type: "text", class: "form-control", name: "hostnames", placeholder: "localhost:3100, example.com", required: true })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Shell service" }), _jsxs("select", { class: "form-select", name: "shellServiceId", "data-bp-tenant-scoped": "", children: [_jsx("option", { value: "", children: "No shell selected" }), data.shellServices.map((service) => (_jsx("option", { value: service.id, "data-bp-tenant-id": service.tenantId, children: service.title })))] }), _jsx("div", { class: "form-text", children: "Only theme-capable services registered for this app's tenant should be selected." })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Auth provider" }), _jsxs("select", { class: "form-select", name: "authServiceId", "data-bp-tenant-scoped": "", children: [_jsx("option", { value: "", children: "No auth provider" }), data.authServices.map((service) => (_jsx("option", { value: service.id, "data-bp-tenant-id": service.tenantId, children: service.title })))] }), _jsx("div", { class: "form-text", children: "Only auth-capable services registered for this app's tenant should be selected." })] }), _jsx("div", { class: "alert alert-danger d-none", id: "bp-edit-app-error" }), _jsx("button", { type: "submit", class: "btn btn-primary w-100", children: "Save" })] }) })] }), _jsx("script", { children: tenantsScript(apiBase, serviceUrl) })] }));
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import * as av from "anyvali";
2
+ import type { Infer } from "anyvali";
3
+ import { type DemoScenario, type ApiAuthRequirement, type CacheHints } from "@betterportal/framework";
4
+ export declare const ResponseSchema: av.ObjectSchema<{
5
+ title: av.StringSchema;
6
+ tenants: av.ArraySchema<av.ObjectSchema<{
7
+ id: av.StringSchema;
8
+ slug: av.StringSchema;
9
+ title: av.StringSchema;
10
+ active: av.BoolSchema;
11
+ serviceCount: av.IntSchema;
12
+ }>>;
13
+ apps: av.ArraySchema<av.ObjectSchema<{
14
+ id: av.StringSchema;
15
+ tenantId: av.StringSchema;
16
+ slug: av.StringSchema;
17
+ title: av.StringSchema;
18
+ hostnames: av.ArraySchema<av.StringSchema>;
19
+ shellServiceId: av.OptionalSchema<av.StringSchema>;
20
+ authServiceId: av.OptionalSchema<av.StringSchema>;
21
+ routeCount: av.IntSchema;
22
+ }>>;
23
+ shellServices: av.ArraySchema<av.ObjectSchema<{
24
+ id: av.StringSchema;
25
+ tenantId: av.StringSchema;
26
+ title: av.StringSchema;
27
+ serviceId: av.OptionalSchema<av.StringSchema>;
28
+ }>>;
29
+ authServices: av.ArraySchema<av.ObjectSchema<{
30
+ id: av.StringSchema;
31
+ tenantId: av.StringSchema;
32
+ title: av.StringSchema;
33
+ serviceId: av.OptionalSchema<av.StringSchema>;
34
+ }>>;
35
+ adminApiBase: av.StringSchema;
36
+ serviceBaseUrl: av.OptionalSchema<av.StringSchema>;
37
+ }>;
38
+ export type ResponseData = Infer<typeof ResponseSchema>;
39
+ export declare const title = "Tenants & Apps";
40
+ export declare const description = "Manage tenants and applications.";
41
+ export declare const auth: ApiAuthRequirement;
42
+ export declare const cacheHints: CacheHints;
43
+ export declare const demoScenarios: DemoScenario<ResponseData>[];
44
+ export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
45
+ title: string;
46
+ tenants: {
47
+ id: string;
48
+ slug: string;
49
+ title: string;
50
+ active: boolean;
51
+ serviceCount: number;
52
+ }[];
53
+ apps: {
54
+ id: string;
55
+ tenantId: string;
56
+ slug: string;
57
+ title: string;
58
+ hostnames: string[];
59
+ routeCount: number;
60
+ shellServiceId?: string | undefined;
61
+ authServiceId?: string | undefined;
62
+ }[];
63
+ shellServices: {
64
+ id: string;
65
+ tenantId: string;
66
+ title: string;
67
+ serviceId?: string | undefined;
68
+ }[];
69
+ authServices: {
70
+ id: string;
71
+ tenantId: string;
72
+ title: string;
73
+ serviceId?: string | undefined;
74
+ }[];
75
+ adminApiBase: string;
76
+ serviceBaseUrl?: string | undefined;
77
+ }, unknown, Record<string, unknown>>;
78
+ export declare const handlePost: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
79
+ title: string;
80
+ tenants: {
81
+ id: string;
82
+ slug: string;
83
+ title: string;
84
+ active: boolean;
85
+ serviceCount: number;
86
+ }[];
87
+ apps: {
88
+ id: string;
89
+ tenantId: string;
90
+ slug: string;
91
+ title: string;
92
+ hostnames: string[];
93
+ routeCount: number;
94
+ shellServiceId?: string | undefined;
95
+ authServiceId?: string | undefined;
96
+ }[];
97
+ shellServices: {
98
+ id: string;
99
+ tenantId: string;
100
+ title: string;
101
+ serviceId?: string | undefined;
102
+ }[];
103
+ authServices: {
104
+ id: string;
105
+ tenantId: string;
106
+ title: string;
107
+ serviceId?: string | undefined;
108
+ }[];
109
+ adminApiBase: string;
110
+ serviceBaseUrl?: string | undefined;
111
+ }, unknown, Record<string, unknown>>;
112
+ export declare const handlePut: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
113
+ title: string;
114
+ tenants: {
115
+ id: string;
116
+ slug: string;
117
+ title: string;
118
+ active: boolean;
119
+ serviceCount: number;
120
+ }[];
121
+ apps: {
122
+ id: string;
123
+ tenantId: string;
124
+ slug: string;
125
+ title: string;
126
+ hostnames: string[];
127
+ routeCount: number;
128
+ shellServiceId?: string | undefined;
129
+ authServiceId?: string | undefined;
130
+ }[];
131
+ shellServices: {
132
+ id: string;
133
+ tenantId: string;
134
+ title: string;
135
+ serviceId?: string | undefined;
136
+ }[];
137
+ authServices: {
138
+ id: string;
139
+ tenantId: string;
140
+ title: string;
141
+ serviceId?: string | undefined;
142
+ }[];
143
+ adminApiBase: string;
144
+ serviceBaseUrl?: string | undefined;
145
+ }, unknown, Record<string, unknown>>;
146
+ export declare const handleDelete: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
147
+ title: string;
148
+ tenants: {
149
+ id: string;
150
+ slug: string;
151
+ title: string;
152
+ active: boolean;
153
+ serviceCount: number;
154
+ }[];
155
+ apps: {
156
+ id: string;
157
+ tenantId: string;
158
+ slug: string;
159
+ title: string;
160
+ hostnames: string[];
161
+ routeCount: number;
162
+ shellServiceId?: string | undefined;
163
+ authServiceId?: string | undefined;
164
+ }[];
165
+ shellServices: {
166
+ id: string;
167
+ tenantId: string;
168
+ title: string;
169
+ serviceId?: string | undefined;
170
+ }[];
171
+ authServices: {
172
+ id: string;
173
+ tenantId: string;
174
+ title: string;
175
+ serviceId?: string | undefined;
176
+ }[];
177
+ adminApiBase: string;
178
+ serviceBaseUrl?: string | undefined;
179
+ }, unknown, Record<string, unknown>>;
180
+ //# 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/tenants/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAEvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AA+BjC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,mBAAmB,CAAC;AACtC,eAAO,MAAM,WAAW,qCAAqC,CAAC;AAE9D,eAAO,MAAM,IAAI,EAAE,kBAKlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAA4D,CAAC;AAEtF,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,YAAY,CAAC,EAErD,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAGrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAWtB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAWrB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAYxB,CAAC"}