@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.
- package/README.md +3 -0
- package/bsb-plugin.json +23 -0
- package/bsb-tests.json +14 -0
- package/lib/.bsb/clients/service-betterportal-config-manager.d.ts +37 -0
- package/lib/.bsb/clients/service-betterportal-config-manager.d.ts.map +1 -0
- package/lib/.bsb/clients/service-betterportal-config-manager.js +40 -0
- package/lib/.bsb/clients/service-betterportal-config-manager.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts +3 -0
- package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.js +235 -0
- package/lib/plugins/service-betterportal-config-manager/.bp-generated/registry.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts +4 -0
- package/lib/plugins/service-betterportal-config-manager/adminApi.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/adminApi.js +2319 -0
- package/lib/plugins/service-betterportal-config-manager/adminApi.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.d.ts +21 -0
- package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.js +269 -0
- package/lib/plugins/service-betterportal-config-manager/bootstrapEndpoint.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.d.ts +19 -0
- package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.js +329 -0
- package/lib/plugins/service-betterportal-config-manager/bootstrapWizardHtml.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_theme.bootstrap1/index.d.ts +4 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_theme.bootstrap1/index.js +38 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/index.d.ts +96 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/index.js +78 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/auth/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.bootstrap1/index.d.ts +4 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.bootstrap1/index.js +62 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.embedded.d.ts +5 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.embedded.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.embedded.js +5 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/_theme.embedded.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/index.d.ts +43 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/index.js +68 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/config/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/_theme.bootstrap1/index.js +11 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/index.d.ts +32 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/index.js +32 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/fragments/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/_theme.bootstrap1/index.d.ts +4 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/_theme.bootstrap1/index.js +170 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/index.d.ts +60 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/index.js +48 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/menu/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/_theme.bootstrap1/index.d.ts +4 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/_theme.bootstrap1/index.js +28 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/index.d.ts +48 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/index.js +40 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/preview/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/_theme.bootstrap1/index.js +194 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/index.d.ts +80 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/index.js +59 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/routes/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.js +167 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/index.d.ts +128 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/index.js +89 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/services/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.js +8 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/index.d.ts +89 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/index.js +93 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/settings/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.d.ts +4 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.js +61 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/index.d.ts +180 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/index.js +405 -0
- package/lib/plugins/service-betterportal-config-manager/bp-routes/tenants/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/cpBootstrap.d.ts +26 -0
- package/lib/plugins/service-betterportal-config-manager/cpBootstrap.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/cpBootstrap.js +58 -0
- package/lib/plugins/service-betterportal-config-manager/cpBootstrap.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.d.ts +3 -0
- package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.js +365 -0
- package/lib/plugins/service-betterportal-config-manager/fragmentsEditor.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/index.d.ts +143 -0
- package/lib/plugins/service-betterportal-config-manager/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/index.js +696 -0
- package/lib/plugins/service-betterportal-config-manager/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/menuEditor.d.ts +3 -0
- package/lib/plugins/service-betterportal-config-manager/menuEditor.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/menuEditor.js +823 -0
- package/lib/plugins/service-betterportal-config-manager/menuEditor.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/routeContext.d.ts +10 -0
- package/lib/plugins/service-betterportal-config-manager/routeContext.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/routeContext.js +11 -0
- package/lib/plugins/service-betterportal-config-manager/routeContext.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/setupTokens.d.ts +18 -0
- package/lib/plugins/service-betterportal-config-manager/setupTokens.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/setupTokens.js +245 -0
- package/lib/plugins/service-betterportal-config-manager/setupTokens.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts +41 -0
- package/lib/plugins/service-betterportal-config-manager/storage/core.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/storage/core.js +396 -0
- package/lib/plugins/service-betterportal-config-manager/storage/core.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/storage/file.d.ts +10 -0
- package/lib/plugins/service-betterportal-config-manager/storage/file.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/storage/file.js +30 -0
- package/lib/plugins/service-betterportal-config-manager/storage/file.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/storage/index.d.ts +36 -0
- package/lib/plugins/service-betterportal-config-manager/storage/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/storage/index.js +52 -0
- package/lib/plugins/service-betterportal-config-manager/storage/index.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/storage/postgres.d.ts +15 -0
- package/lib/plugins/service-betterportal-config-manager/storage/postgres.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/storage/postgres.js +60 -0
- package/lib/plugins/service-betterportal-config-manager/storage/postgres.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts +44 -0
- package/lib/plugins/service-betterportal-config-manager/syncApi.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/syncApi.js +280 -0
- package/lib/plugins/service-betterportal-config-manager/syncApi.js.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/webhooks.d.ts +6 -0
- package/lib/plugins/service-betterportal-config-manager/webhooks.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-config-manager/webhooks.js +372 -0
- package/lib/plugins/service-betterportal-config-manager/webhooks.js.map +1 -0
- package/lib/schemas/service-betterportal-config-manager.json +157 -0
- package/lib/schemas/service-betterportal-config-manager.plugin.json +135 -0
- package/package.json +69 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "jsx-htmx/jsx-runtime";
|
|
2
|
+
function configureAttrs(service, appId, serviceTitle, adminApiBase) {
|
|
3
|
+
const qs = new URLSearchParams({
|
|
4
|
+
serviceInstanceId: service.id,
|
|
5
|
+
hostname: service.hostname,
|
|
6
|
+
tenantId: service.tenantId ?? "",
|
|
7
|
+
title: serviceTitle,
|
|
8
|
+
adminApiBase,
|
|
9
|
+
...(appId ? { appId } : {})
|
|
10
|
+
}).toString();
|
|
11
|
+
if (service.supportsCustomUi && service.customUiPath && appId) {
|
|
12
|
+
const target = `${service.hostname.replace(/\/+$/, "")}${service.customUiPath}?tenantId=${encodeURIComponent(service.tenantId ?? "")}&appId=${encodeURIComponent(appId)}&adminApiBase=${encodeURIComponent(adminApiBase)}`;
|
|
13
|
+
const push = `${service.pushBase}?tenantId=${encodeURIComponent(service.tenantId ?? "")}&appId=${encodeURIComponent(appId)}`;
|
|
14
|
+
return {
|
|
15
|
+
"hx-get": target,
|
|
16
|
+
"hx-target": "#bp-main",
|
|
17
|
+
"hx-swap": "innerHTML",
|
|
18
|
+
"hx-push-url": push
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
"hx-get": `/.well-known/bp/admin/configure?${qs}`,
|
|
23
|
+
"hx-target": "#bp-config-edit-form",
|
|
24
|
+
"hx-swap": "innerHTML",
|
|
25
|
+
"hx-on::before-request": "document.getElementById('bp-config-edit-form').innerHTML='<div class=\"text-center py-4 text-secondary\">Loading...</div>'",
|
|
26
|
+
"onclick": "document.getElementById('bp-config-edit-form').innerHTML='<div class=\"text-center py-4 text-secondary\">Loading...</div>'",
|
|
27
|
+
"data-bs-toggle": "offcanvas",
|
|
28
|
+
"data-bs-target": "#bp-config-edit-panel"
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function configureButton(service, appId, serviceTitle, adminApiBase, label = "Configure", className = "btn btn-sm btn-outline-primary", disabledReason) {
|
|
32
|
+
const reason = disabledReason ?? (!service.hasConfigurableOptions ? "No configurable options" : undefined);
|
|
33
|
+
if (reason)
|
|
34
|
+
return (_jsx("span", { title: reason, children: _jsx("button", { class: className, type: "button", disabled: true, "aria-disabled": "true", children: label }) }));
|
|
35
|
+
return (_jsx("button", { class: className, type: "button", ...configureAttrs(service, appId, serviceTitle, adminApiBase), children: label }));
|
|
36
|
+
}
|
|
37
|
+
function renderServiceCard(service, data, tenantById) {
|
|
38
|
+
const title = service.title ?? service.serviceId ?? service.hostname;
|
|
39
|
+
const adminApiBase = `${(data.serviceBaseUrl ?? "").replace(/\/+$/, "")}${data.adminApiBase}`;
|
|
40
|
+
const apps = service.tenantId
|
|
41
|
+
? (data.tenantApps[service.tenantId] ?? [])
|
|
42
|
+
: [];
|
|
43
|
+
const tenant = service.tenantId ? tenantById.get(service.tenantId) : undefined;
|
|
44
|
+
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" :
|
|
45
|
+
service.scope === "theme" ? "text-bg-warning" :
|
|
46
|
+
service.scope === "shared" ? "text-bg-success" :
|
|
47
|
+
"text-bg-primary"}`, children: service.scope })] }), service.tenantId ? _jsxs("div", { class: "small mb-1", children: [_jsx("strong", { children: "Tenant:" }), " ", tenant?.title ?? service.tenantId] }) : "", service.capabilities.includes("theme") && 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: [apps.length > 1 ? (_jsx("div", { class: "btn-group btn-group-sm", children: service.hasConfigurableOptions ? (_jsxs(_Fragment, { children: [_jsx("button", { class: "btn btn-outline-primary dropdown-toggle", type: "button", "data-bs-toggle": "dropdown", children: "Configure" }), _jsx("ul", { class: "dropdown-menu", children: 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, "Configure", "btn btn-outline-primary") })) : (configureButton(service, apps[0]?.id, 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", "hx-confirm": "Deactivate this shared service?", children: "Deactivate" })) : service.tenantId ? (_jsxs(_Fragment, { children: [service.serviceId && service.serviceId !== "service.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": `/.well-known/bp/admin/tenants/${service.tenantId}/services/${service.id}`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "hx-confirm": "Remove this service registration?", children: "Remove" })] })) : ""] })] }) }) }));
|
|
48
|
+
}
|
|
49
|
+
function normalizeUrl(value) {
|
|
50
|
+
return value.replace(/\/+$/, "");
|
|
51
|
+
}
|
|
52
|
+
function renderCatalogCard(item, data, selectedTenantId) {
|
|
53
|
+
const title = item.title ?? item.id;
|
|
54
|
+
const selectedActivation = data.sharedServiceActivations.find((activation) => activation.tenantId === selectedTenantId
|
|
55
|
+
&& activation.sharedServiceId === item.id
|
|
56
|
+
&& activation.enabled
|
|
57
|
+
&& !activation.appId);
|
|
58
|
+
return (_jsx("div", { class: "col-12 col-lg-6 bp-catalog-card", "data-bp-catalog-id": item.id, "data-bp-catalog-url": normalizeUrl(item.baseUrl), 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 gap-3", children: [_jsxs("div", { children: [_jsx("h5", { class: "mb-1", children: title }), _jsx("div", { class: "small text-secondary font-monospace", children: item.id })] }), _jsx("span", { class: `badge ${selectedActivation ? "text-bg-success" : item.enabled ? "text-bg-light border" : "text-bg-secondary"}`, children: selectedActivation ? "active" : item.installed ? "shared" : item.enabled ? "awaiting install" : "disabled" })] }), _jsxs("div", { class: "small mt-2", children: [_jsx("strong", { children: "URL:" }), " ", _jsx("span", { class: "font-monospace", children: item.baseUrl })] }), item.category ? _jsxs("div", { class: "small", children: [_jsx("strong", { children: "Category:" }), " ", item.category] }) : "", item.tags.length > 0 ? (_jsxs("div", { class: "small mb-3", children: [_jsx("strong", { children: "Tags:" }), " ", item.tags.map((tag) => _jsx("span", { class: "badge text-bg-light border me-1", children: tag }))] })) : _jsx("div", { class: "mb-3" }), _jsxs("div", { class: "d-flex gap-2 flex-wrap", children: [!item.installed ? (_jsx("button", { class: "btn btn-sm btn-outline-primary", type: "button", "data-bp-install-shared": item.id, "data-bp-install-url": normalizeUrl(item.baseUrl), children: "Install" })) : "", selectedActivation ? (_jsx("button", { class: "btn btn-sm btn-outline-secondary", type: "button", "hx-delete": `${data.adminApiBase}/shared-services/${encodeURIComponent(item.id)}/activations?tenantId=${encodeURIComponent(selectedTenantId)}`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "hx-confirm": "Deactivate this shared service for the selected tenant?", children: "Deactivate" })) : (_jsx("button", { class: "btn btn-sm btn-outline-primary", type: "button", "hx-post": `${data.adminApiBase}/shared-services/${encodeURIComponent(item.id)}/activations`, "hx-vals": `{"tenantId":"${selectedTenantId}"}`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", disabled: !item.enabled || !item.installed || !selectedTenantId ? true : undefined, children: "Activate" })), _jsx("button", { class: "btn btn-sm btn-outline-danger", type: "button", "hx-delete": `${data.adminApiBase}/shared-services/${encodeURIComponent(item.id)}`, "hx-target": "#bp-services-alerts", "hx-swap": "innerHTML", "hx-confirm": "Delete this shared service definition?", children: "Delete" })] })] }) }) }));
|
|
59
|
+
}
|
|
60
|
+
export function render(data) {
|
|
61
|
+
const tenantById = new Map(data.tenants.map((tenant) => [tenant.id, tenant]));
|
|
62
|
+
const selectedTenantId = data.selectedTenantId ?? data.tenants[0]?.id ?? "";
|
|
63
|
+
const selectedTenant = data.tenants.find((tenant) => tenant.id === selectedTenantId);
|
|
64
|
+
const selectedTenantServices = data.services.filter((service) => service.tenantId === selectedTenantId);
|
|
65
|
+
const unassignedServices = data.services.filter((service) => !service.tenantId);
|
|
66
|
+
const hasPendingManifests = data.services.some((service) => service.enabled && !service.configManifestKnown);
|
|
67
|
+
const selectedServicesPath = selectedTenantId ? `/services?tenantId=${encodeURIComponent(selectedTenantId)}` : "/services";
|
|
68
|
+
const adminApiBase = data.adminApiBase;
|
|
69
|
+
const serviceBaseUrl = data.serviceBaseUrl ?? "";
|
|
70
|
+
return (_jsxs("div", { class: "container-fluid px-0", children: [_jsxs("div", { class: "d-flex justify-content-between align-items-center mb-4 gap-3", children: [_jsxs("div", { children: [_jsx("h2", { class: "mb-1", children: data.title }), _jsx("p", { class: "text-secondary mb-0", children: "Register and manage service instances per tenant" })] }), _jsxs("div", { class: "d-flex gap-2 align-items-center", children: [_jsx("select", { class: "form-select", id: "bp-services-tenant-filter", name: "tenantId", "aria-label": "Tenant", "hx-get": "/services", "hx-trigger": "change", "hx-target": "#bp-main", "hx-swap": "innerHTML", "hx-push-url": selectedServicesPath, children: data.tenants.map((tenant) => (_jsx("option", { value: tenant.id, selected: tenant.id === selectedTenantId, children: tenant.title }))) }), _jsx("button", { class: "btn btn-primary text-nowrap", id: "bp-register-service-btn", "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-add-service-panel", "hx-get": selectedTenantId ? `/.well-known/bp/admin/wizard/step1?tenantId=${encodeURIComponent(selectedTenantId)}` : "/.well-known/bp/admin/wizard/step1", "hx-target": "#bp-wizard-step", "hx-swap": "outerHTML", children: "+ Register Service" }), _jsx("button", { class: "btn btn-outline-primary text-nowrap", type: "button", "data-bs-toggle": "offcanvas", "data-bs-target": "#bp-shared-service-panel", children: "+ Shared Service" })] })] }), _jsx("div", { id: "bp-services-alerts" }), data.sharedServiceCatalog.length > 0 ? (_jsxs("section", { class: "mb-4", children: [_jsx("div", { class: "d-flex justify-content-between align-items-center border-bottom pb-2 mb-3", children: _jsxs("div", { children: [_jsx("h3", { class: "h5 mb-0", children: "Shared Services" }), _jsx("div", { class: "small text-secondary", children: "Platform-managed services that can be activated for tenants" })] }) }), _jsx("div", { class: "row g-3", children: data.sharedServiceCatalog.map((item) => renderCatalogCard(item, data, selectedTenantId)) })] })) : "", hasPendingManifests ? (_jsxs("div", { class: "alert alert-secondary d-flex justify-content-between align-items-center gap-3", children: [_jsx("span", { children: "Some service manifests are still pending sync." }), _jsx("button", { class: "btn btn-sm btn-outline-secondary", type: "button", "hx-get": selectedServicesPath, "hx-target": "#bp-main", "hx-swap": "innerHTML", children: "Refresh" })] })) : "", !selectedTenant ? (_jsx("div", { class: "alert alert-secondary", children: "No tenant selected" })) : (_jsxs("div", { class: "mb-4", children: [_jsxs("section", { class: "bp-services-tenant", "data-bp-tenant-id": selectedTenant.id, children: [_jsxs("div", { class: "d-flex justify-content-between align-items-center border-bottom pb-2 mb-3", children: [_jsxs("div", { children: [_jsx("h3", { class: "h5 mb-0", children: selectedTenant.title }), _jsx("div", { class: "small text-secondary font-monospace", children: selectedTenant.id })] }), _jsxs("span", { class: "badge text-bg-secondary", children: [selectedTenantServices.length, " services"] })] }), selectedTenantServices.length === 0 ? (_jsx("div", { class: "alert alert-secondary", children: "No services registered for this tenant" })) : (_jsx("div", { class: "row g-3", children: selectedTenantServices.map((service) => renderServiceCard(service, data, tenantById)) }))] }), unassignedServices.length > 0 ? (_jsxs("section", { class: "mt-4", children: [_jsxs("div", { class: "d-flex justify-content-between align-items-center border-bottom pb-2 mb-3", children: [_jsxs("div", { children: [_jsx("h3", { class: "h5 mb-0", children: "Platform services" }), _jsx("div", { class: "small text-secondary", children: "Shared or unscoped registrations" })] }), _jsxs("span", { class: "badge text-bg-secondary", children: [unassignedServices.length, " services"] })] }), _jsx("div", { class: "row g-3", children: unassignedServices.map((service) => renderServiceCard(service, data, tenantById)) })] })) : ""] })), _jsxs("div", { class: "offcanvas offcanvas-end", tabindex: -1, id: "bp-add-service-panel", children: [_jsxs("div", { class: "offcanvas-header", children: [_jsx("h5", { class: "offcanvas-title", children: "Register Service" }), _jsx("button", { type: "button", class: "btn-close", "data-bs-dismiss": "offcanvas", "aria-label": "Close" })] }), _jsx("div", { class: "offcanvas-body", children: _jsx("div", { id: "bp-wizard-step", children: _jsx("div", { class: "text-center py-4 text-secondary", children: "Loading..." }) }) })] }), _jsxs("div", { class: "offcanvas offcanvas-end", tabindex: -1, id: "bp-config-edit-panel", style: "width:480px;max-width:90vw;", children: [_jsxs("div", { class: "offcanvas-header", children: [_jsx("h5", { class: "offcanvas-title", children: "Configure Service" }), _jsx("button", { type: "button", class: "btn-close", "data-bs-dismiss": "offcanvas", "aria-label": "Close" })] }), _jsx("div", { class: "offcanvas-body", children: _jsx("div", { id: "bp-config-edit-form", children: _jsx("div", { class: "text-center py-4 text-secondary", children: "Loading..." }) }) })] }), _jsxs("div", { class: "offcanvas offcanvas-end", tabindex: -1, id: "bp-shared-service-panel", style: "width:480px;max-width:90vw;", children: [_jsxs("div", { class: "offcanvas-header", children: [_jsx("h5", { class: "offcanvas-title", children: "Shared Service" }), _jsx("button", { type: "button", class: "btn-close", "data-bs-dismiss": "offcanvas", "aria-label": "Close" })] }), _jsxs("div", { class: "offcanvas-body", children: [_jsxs("form", { id: "bp-shared-service-form", "data-admin-api-base": adminApiBase, "data-service-base-url": serviceBaseUrl, children: [_jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Base URL" }), _jsx("input", { class: "form-control", type: "url", name: "baseUrl", placeholder: "http://localhost:3200", required: true })] }), _jsxs("div", { class: "mb-3", children: [_jsx("label", { class: "form-label", children: "Owner" }), _jsxs("select", { class: "form-select", name: "owner", children: [_jsx("option", { value: "bp", children: "BP" }), _jsx("option", { value: "3p", children: "Third party" })] })] }), _jsx("div", { class: "alert alert-secondary small", id: "bp-shared-service-preview", children: "Manifest details are loaded from the service before it is added." }), _jsx("button", { type: "submit", class: "btn btn-primary w-100", children: "Add Shared Service" })] }), _jsx("script", { children: `
|
|
71
|
+
(() => {
|
|
72
|
+
const form = document.getElementById("bp-shared-service-form");
|
|
73
|
+
const alerts = document.getElementById("bp-services-alerts");
|
|
74
|
+
const preview = document.getElementById("bp-shared-service-preview");
|
|
75
|
+
const serviceBaseUrl = ${JSON.stringify(serviceBaseUrl)}.replace(/\\/+$/, "");
|
|
76
|
+
const adminApiBase = serviceBaseUrl + ${JSON.stringify(adminApiBase)};
|
|
77
|
+
const escapeHtml = (value) => String(value).replace(/[&<>"']/g, (ch) => ({
|
|
78
|
+
"&": "&", "<": "<", ">": ">", '"': """, "'": "'"
|
|
79
|
+
})[ch]);
|
|
80
|
+
const setAlert = (kind, message) => {
|
|
81
|
+
if (!alerts) return;
|
|
82
|
+
alerts.innerHTML = '<div class="alert alert-' + kind + '">' + escapeHtml(message) + '</div>';
|
|
83
|
+
};
|
|
84
|
+
const postJson = async (url, body) => {
|
|
85
|
+
const response = await fetch(url, {
|
|
86
|
+
method: "POST",
|
|
87
|
+
headers: { "Content-Type": "application/json", Accept: "application/json" },
|
|
88
|
+
body: JSON.stringify(body)
|
|
89
|
+
});
|
|
90
|
+
const data = await response.json().catch(() => ({}));
|
|
91
|
+
if (!response.ok) throw new Error(data.error || ("HTTP " + response.status));
|
|
92
|
+
return data;
|
|
93
|
+
};
|
|
94
|
+
const installShared = async (id, baseUrl) => {
|
|
95
|
+
setAlert("secondary", "Installing shared service...");
|
|
96
|
+
const install = await postJson(adminApiBase + "/services/begin-install", {
|
|
97
|
+
serviceUrl: baseUrl,
|
|
98
|
+
sharedServiceId: id
|
|
99
|
+
});
|
|
100
|
+
await postJson(baseUrl + "/.well-known/bp/install", {
|
|
101
|
+
setupToken: install.setupToken,
|
|
102
|
+
cpUrl: install.cpUrl
|
|
103
|
+
});
|
|
104
|
+
setAlert("success", "Shared service installed. Waiting for sync...");
|
|
105
|
+
if (window.htmx) {
|
|
106
|
+
window.htmx.ajax("GET", (serviceBaseUrl || "") + "/services", { target: "#bp-main", swap: "innerHTML" });
|
|
107
|
+
} else {
|
|
108
|
+
window.location.reload();
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
document.addEventListener("click", async (event) => {
|
|
112
|
+
const button = event.target?.closest?.("[data-bp-install-shared]");
|
|
113
|
+
if (!button) return;
|
|
114
|
+
event.preventDefault();
|
|
115
|
+
try {
|
|
116
|
+
await installShared(button.dataset.bpInstallShared, button.dataset.bpInstallUrl);
|
|
117
|
+
} catch (error) {
|
|
118
|
+
setAlert("danger", error instanceof Error ? error.message : String(error));
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
const loadManifest = async (baseUrl) => {
|
|
122
|
+
const response = await fetch(baseUrl + "/.well-known/bp/manifest", {
|
|
123
|
+
method: "GET",
|
|
124
|
+
headers: { Accept: "application/json" },
|
|
125
|
+
cache: "no-store"
|
|
126
|
+
});
|
|
127
|
+
const manifest = await response.json().catch(() => null);
|
|
128
|
+
if (!response.ok || !manifest || typeof manifest.pluginId !== "string" || typeof manifest.title !== "string") {
|
|
129
|
+
throw new Error("Could not load a valid BetterPortal manifest");
|
|
130
|
+
}
|
|
131
|
+
return manifest;
|
|
132
|
+
};
|
|
133
|
+
form?.addEventListener("submit", async (event) => {
|
|
134
|
+
event.preventDefault();
|
|
135
|
+
const fd = new FormData(form);
|
|
136
|
+
const baseUrl = String(fd.get("baseUrl") || "").trim().replace(/\\/+$/, "");
|
|
137
|
+
if (!baseUrl) {
|
|
138
|
+
setAlert("danger", "Base URL is required");
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
setAlert("secondary", "Loading service manifest...");
|
|
143
|
+
const manifest = await loadManifest(baseUrl);
|
|
144
|
+
if (preview) {
|
|
145
|
+
const capabilities = Array.isArray(manifest.capabilities) ? manifest.capabilities.join(", ") : "";
|
|
146
|
+
preview.className = "alert alert-info small";
|
|
147
|
+
preview.innerHTML = '<div><strong>' + escapeHtml(manifest.title) + '</strong></div>' +
|
|
148
|
+
'<div class="font-monospace">' + escapeHtml(manifest.pluginId) + '</div>' +
|
|
149
|
+
(capabilities ? '<div>' + escapeHtml(capabilities) + '</div>' : "");
|
|
150
|
+
}
|
|
151
|
+
setAlert("secondary", "Creating shared service...");
|
|
152
|
+
const createBody = {
|
|
153
|
+
baseUrl,
|
|
154
|
+
owner: String(fd.get("owner") || "bp"),
|
|
155
|
+
enabled: true,
|
|
156
|
+
manifest
|
|
157
|
+
};
|
|
158
|
+
const created = await postJson(adminApiBase + "/shared-services", createBody);
|
|
159
|
+
await installShared(created.id || manifest.pluginId, baseUrl);
|
|
160
|
+
} catch (error) {
|
|
161
|
+
setAlert("danger", error instanceof Error ? error.message : String(error));
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
})();
|
|
165
|
+
` })] })] })] }));
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/services/_theme.bootstrap1/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
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
|
+
services: av.ArraySchema<av.ObjectSchema<{
|
|
7
|
+
id: av.StringSchema;
|
|
8
|
+
hostname: av.StringSchema;
|
|
9
|
+
serviceId: av.OptionalSchema<av.StringSchema>;
|
|
10
|
+
capabilities: av.ArraySchema<av.StringSchema>;
|
|
11
|
+
title: av.OptionalSchema<av.StringSchema>;
|
|
12
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
13
|
+
createdAt: av.StringSchema;
|
|
14
|
+
lastSeenAt: av.OptionalSchema<av.StringSchema>;
|
|
15
|
+
enabled: av.BoolSchema;
|
|
16
|
+
scope: av.StringSchema;
|
|
17
|
+
themeId: av.OptionalSchema<av.StringSchema>;
|
|
18
|
+
tenantId: av.OptionalSchema<av.StringSchema>;
|
|
19
|
+
pushBase: av.StringSchema;
|
|
20
|
+
supportsCustomUi: av.BoolSchema;
|
|
21
|
+
configManifestKnown: av.BoolSchema;
|
|
22
|
+
hasConfigurableOptions: av.BoolSchema;
|
|
23
|
+
customUiPath: av.OptionalSchema<av.StringSchema>;
|
|
24
|
+
}>>;
|
|
25
|
+
tenants: av.ArraySchema<av.ObjectSchema<{
|
|
26
|
+
id: av.StringSchema;
|
|
27
|
+
title: av.StringSchema;
|
|
28
|
+
}>>;
|
|
29
|
+
selectedTenantId: av.OptionalSchema<av.StringSchema>;
|
|
30
|
+
sharedServiceCatalog: av.ArraySchema<av.ObjectSchema<{
|
|
31
|
+
id: av.StringSchema;
|
|
32
|
+
serviceId: av.OptionalSchema<av.StringSchema>;
|
|
33
|
+
title: av.StringSchema;
|
|
34
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
35
|
+
baseUrl: av.StringSchema;
|
|
36
|
+
owner: av.OptionalSchema<av.StringSchema>;
|
|
37
|
+
category: av.OptionalSchema<av.StringSchema>;
|
|
38
|
+
tags: av.ArraySchema<av.StringSchema>;
|
|
39
|
+
installed: av.BoolSchema;
|
|
40
|
+
enabled: av.BoolSchema;
|
|
41
|
+
}>>;
|
|
42
|
+
sharedServiceActivations: av.ArraySchema<av.ObjectSchema<{
|
|
43
|
+
id: av.StringSchema;
|
|
44
|
+
tenantId: av.StringSchema;
|
|
45
|
+
appId: av.OptionalSchema<av.StringSchema>;
|
|
46
|
+
sharedServiceId: av.StringSchema;
|
|
47
|
+
activatedAt: av.StringSchema;
|
|
48
|
+
enabled: av.BoolSchema;
|
|
49
|
+
}>>;
|
|
50
|
+
apps: av.ArraySchema<av.ObjectSchema<{
|
|
51
|
+
id: av.StringSchema;
|
|
52
|
+
tenantId: av.StringSchema;
|
|
53
|
+
title: av.StringSchema;
|
|
54
|
+
}>>;
|
|
55
|
+
tenantApps: av.RecordSchema<av.ArraySchema<av.ObjectSchema<{
|
|
56
|
+
id: av.StringSchema;
|
|
57
|
+
title: av.StringSchema;
|
|
58
|
+
shellServiceId: av.OptionalSchema<av.StringSchema>;
|
|
59
|
+
}>>>;
|
|
60
|
+
adminApiBase: av.StringSchema;
|
|
61
|
+
serviceBaseUrl: av.OptionalSchema<av.StringSchema>;
|
|
62
|
+
}>;
|
|
63
|
+
export type ResponseData = Infer<typeof ResponseSchema>;
|
|
64
|
+
export declare const title = "Service Registry";
|
|
65
|
+
export declare const description = "Manage registered service instances.";
|
|
66
|
+
export declare const auth: ApiAuthRequirement;
|
|
67
|
+
export declare const cacheHints: CacheHints;
|
|
68
|
+
export declare const demoScenarios: DemoScenario<ResponseData>[];
|
|
69
|
+
export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
|
|
70
|
+
title: string;
|
|
71
|
+
services: {
|
|
72
|
+
id: string;
|
|
73
|
+
hostname: string;
|
|
74
|
+
capabilities: string[];
|
|
75
|
+
createdAt: string;
|
|
76
|
+
enabled: boolean;
|
|
77
|
+
scope: string;
|
|
78
|
+
pushBase: string;
|
|
79
|
+
supportsCustomUi: boolean;
|
|
80
|
+
configManifestKnown: boolean;
|
|
81
|
+
hasConfigurableOptions: boolean;
|
|
82
|
+
serviceId?: string | undefined;
|
|
83
|
+
title?: string | undefined;
|
|
84
|
+
description?: string | undefined;
|
|
85
|
+
lastSeenAt?: string | undefined;
|
|
86
|
+
themeId?: string | undefined;
|
|
87
|
+
tenantId?: string | undefined;
|
|
88
|
+
customUiPath?: string | undefined;
|
|
89
|
+
}[];
|
|
90
|
+
tenants: {
|
|
91
|
+
id: string;
|
|
92
|
+
title: string;
|
|
93
|
+
}[];
|
|
94
|
+
sharedServiceCatalog: {
|
|
95
|
+
id: string;
|
|
96
|
+
title: string;
|
|
97
|
+
baseUrl: string;
|
|
98
|
+
tags: string[];
|
|
99
|
+
installed: boolean;
|
|
100
|
+
enabled: boolean;
|
|
101
|
+
serviceId?: string | undefined;
|
|
102
|
+
description?: string | undefined;
|
|
103
|
+
owner?: string | undefined;
|
|
104
|
+
category?: string | undefined;
|
|
105
|
+
}[];
|
|
106
|
+
sharedServiceActivations: {
|
|
107
|
+
id: string;
|
|
108
|
+
tenantId: string;
|
|
109
|
+
sharedServiceId: string;
|
|
110
|
+
activatedAt: string;
|
|
111
|
+
enabled: boolean;
|
|
112
|
+
appId?: string | undefined;
|
|
113
|
+
}[];
|
|
114
|
+
apps: {
|
|
115
|
+
id: string;
|
|
116
|
+
tenantId: string;
|
|
117
|
+
title: string;
|
|
118
|
+
}[];
|
|
119
|
+
tenantApps: Record<string, {
|
|
120
|
+
id: string;
|
|
121
|
+
title: string;
|
|
122
|
+
shellServiceId?: string | undefined;
|
|
123
|
+
}[]>;
|
|
124
|
+
adminApiBase: string;
|
|
125
|
+
selectedTenantId?: string | undefined;
|
|
126
|
+
serviceBaseUrl?: string | undefined;
|
|
127
|
+
}, unknown, Record<string, unknown>>;
|
|
128
|
+
//# 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/services/index.ts"],"names":[],"mappings":"AAAA,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;AA6DjC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWC,CAAC;AAC7B,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,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAMrB,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import { createHandler } from "@betterportal/framework";
|
|
3
|
+
const RegisteredServiceItemSchema = av.object({
|
|
4
|
+
id: av.string().minLength(1).describe("Stable UUIDv7 service instance id."),
|
|
5
|
+
hostname: av.string().format("url").describe("Service origin used by the browser for direct HTMX requests."),
|
|
6
|
+
serviceId: av.optional(av.string()).describe("Service plugin id from the service manifest."),
|
|
7
|
+
capabilities: av.array(av.string()).default([]).describe("Capabilities advertised by the service manifest."),
|
|
8
|
+
title: av.optional(av.string()).describe("Human-readable service title from the manifest or registration."),
|
|
9
|
+
description: av.optional(av.string()).describe("Human-readable service description from the manifest."),
|
|
10
|
+
createdAt: av.string().describe("ISO timestamp when the service registration was created."),
|
|
11
|
+
lastSeenAt: av.optional(av.string()).describe("ISO timestamp when the service last checked in or synced."),
|
|
12
|
+
enabled: av.bool().describe("Whether this service registration is active."),
|
|
13
|
+
scope: av.string().minLength(1).describe("Registration scope: tenant, shared, platform, or theme."),
|
|
14
|
+
themeId: av.optional(av.string().minLength(1)).describe("Theme renderer id when the service provides a theme."),
|
|
15
|
+
tenantId: av.optional(av.string()).describe("Owning tenant id for tenant-scoped service registrations."),
|
|
16
|
+
pushBase: av.string().minLength(1).describe("Browser-visible route base used when pushing URLs for custom service UI."),
|
|
17
|
+
supportsCustomUi: av.bool().default(false).describe("True when the service exposes a custom configuration UI."),
|
|
18
|
+
configManifestKnown: av.bool().default(false).describe("True once config-manager has received this service instance manifest via sync."),
|
|
19
|
+
hasConfigurableOptions: av.bool().default(false).describe("True when the service has configurable schema fields or a custom configuration UI."),
|
|
20
|
+
customUiPath: av.optional(av.string()).describe("Service-side path for custom configuration UI, when provided.")
|
|
21
|
+
}, { unknownKeys: "strip" });
|
|
22
|
+
const AppByTenantSchema = av.object({
|
|
23
|
+
id: av.string().minLength(1).describe("Stable UUIDv7 app id."),
|
|
24
|
+
title: av.string().minLength(1).describe("Human-readable app title."),
|
|
25
|
+
shellServiceId: av.optional(av.string().minLength(1)).describe("Shell service instance selected by the app.")
|
|
26
|
+
}, { unknownKeys: "strip" });
|
|
27
|
+
const AppSummarySchema = av.object({
|
|
28
|
+
id: av.string().minLength(1).describe("Stable UUIDv7 app id."),
|
|
29
|
+
tenantId: av.string().minLength(1).describe("Owning tenant id."),
|
|
30
|
+
title: av.string().minLength(1).describe("Human-readable app title.")
|
|
31
|
+
}, { unknownKeys: "strip" });
|
|
32
|
+
const TenantSummarySchema = av.object({
|
|
33
|
+
id: av.string().minLength(1).describe("Stable UUIDv7 tenant id."),
|
|
34
|
+
title: av.string().minLength(1).describe("Human-readable tenant title.")
|
|
35
|
+
}, { unknownKeys: "strip" });
|
|
36
|
+
const SharedServiceCatalogItemSchema = av.object({
|
|
37
|
+
id: av.string().minLength(1),
|
|
38
|
+
serviceId: av.optional(av.string().minLength(1)),
|
|
39
|
+
title: av.string().minLength(1),
|
|
40
|
+
description: av.optional(av.string()),
|
|
41
|
+
baseUrl: av.string().minLength(1),
|
|
42
|
+
owner: av.optional(av.string()),
|
|
43
|
+
category: av.optional(av.string()),
|
|
44
|
+
tags: av.array(av.string()).default([]),
|
|
45
|
+
installed: av.bool().default(false),
|
|
46
|
+
enabled: av.bool().default(true)
|
|
47
|
+
}, { unknownKeys: "strip" });
|
|
48
|
+
const SharedServiceActivationSchema = av.object({
|
|
49
|
+
id: av.string().minLength(1),
|
|
50
|
+
tenantId: av.string().minLength(1),
|
|
51
|
+
appId: av.optional(av.string().minLength(1)),
|
|
52
|
+
sharedServiceId: av.string().minLength(1),
|
|
53
|
+
activatedAt: av.string().minLength(1),
|
|
54
|
+
enabled: av.bool().default(true)
|
|
55
|
+
}, { unknownKeys: "strip" });
|
|
56
|
+
export const ResponseSchema = av.object({
|
|
57
|
+
title: av.string().minLength(1).describe("View title for the service registry."),
|
|
58
|
+
services: av.array(RegisteredServiceItemSchema).describe("Registered service instances visible to the admin view."),
|
|
59
|
+
tenants: av.array(TenantSummarySchema).describe("Tenants available for grouping and service registration."),
|
|
60
|
+
selectedTenantId: av.optional(av.string().minLength(1)).describe("Tenant currently selected in the service registry."),
|
|
61
|
+
sharedServiceCatalog: av.array(SharedServiceCatalogItemSchema).default([]).describe("Shared service definitions from platform config."),
|
|
62
|
+
sharedServiceActivations: av.array(SharedServiceActivationSchema).default([]).describe("Tenant/app activations for shared services."),
|
|
63
|
+
apps: av.array(AppSummarySchema).default([]).describe("Apps available in the current admin context."),
|
|
64
|
+
tenantApps: av.record(av.array(AppByTenantSchema)).default({}).describe("Apps keyed by tenant id for configuring tenant or theme-scoped services."),
|
|
65
|
+
adminApiBase: av.string().minLength(1).describe("Base path for config-manager admin API calls."),
|
|
66
|
+
serviceBaseUrl: av.optional(av.string()).describe("Config-manager service origin for browser-mediated admin requests.")
|
|
67
|
+
}, { unknownKeys: "strip" });
|
|
68
|
+
export const title = "Service Registry";
|
|
69
|
+
export const description = "Manage registered service instances.";
|
|
70
|
+
export const auth = {
|
|
71
|
+
required: true,
|
|
72
|
+
permissions: [
|
|
73
|
+
{ serviceId: "service.betterportal.config-manager", viewId: "services.index", permissions: ["read"] }
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
export const cacheHints = { ttlSeconds: 0, varyBy: ["accept", "origin"] };
|
|
77
|
+
export const demoScenarios = [
|
|
78
|
+
{
|
|
79
|
+
id: "default",
|
|
80
|
+
title: "Default",
|
|
81
|
+
response: { title: "Service Registry", services: [], tenants: [], sharedServiceCatalog: [], sharedServiceActivations: [], apps: [], tenantApps: {}, adminApiBase: "/.well-known/bp/admin" }
|
|
82
|
+
}
|
|
83
|
+
];
|
|
84
|
+
export const handleGet = createHandler({ response: ResponseSchema }, (ctx) => {
|
|
85
|
+
if (ctx.responseModel)
|
|
86
|
+
return ctx.responseModel;
|
|
87
|
+
return { title: "Service Registry", services: [], tenants: [], sharedServiceCatalog: [], sharedServiceActivations: [], apps: [], tenantApps: {}, adminApiBase: "/.well-known/bp/admin" };
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-config-manager/bp-routes/services/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAUhD,wBAAgB,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CA4FzD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "jsx-htmx/jsx-runtime";
|
|
2
|
+
function serviceBadge(tags) {
|
|
3
|
+
return tags.length > 0 ? (_jsx("div", { class: "d-flex gap-1 flex-wrap", children: tags.map((tag) => _jsx("span", { class: "badge text-bg-light border", children: tag })) })) : "";
|
|
4
|
+
}
|
|
5
|
+
export function render(data) {
|
|
6
|
+
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("div", { class: "text-uppercase small text-secondary fw-semibold", children: "User Management" }), _jsx("h2", { class: "mb-2", children: data.title }), _jsxs("p", { class: "text-secondary mb-0", children: [data.tenant.title, " / ", data.app.title] })] }), _jsxs("div", { class: "d-flex gap-2 flex-wrap", children: [_jsx("a", { class: "btn btn-sm btn-outline-secondary", href: data.managementDiscoveryUrl, target: "_blank", rel: "noreferrer", children: "Management API" }), _jsx("a", { class: "btn btn-sm btn-outline-secondary", href: data.automationCatalogUrl, target: "_blank", rel: "noreferrer", children: "Automation Catalog" })] })] }), _jsx("div", { id: "bp-settings-alerts", class: "mb-3" }), _jsxs("div", { class: "row g-3 mb-4", children: [_jsx("div", { class: "col-12 col-xl-6", children: _jsx("section", { class: "card border-0 shadow-sm h-100", children: _jsxs("div", { class: "card-body", children: [_jsx("h5", { class: "mb-3", children: "Current App" }), _jsxs("dl", { class: "row small mb-0", children: [_jsx("dt", { class: "col-sm-3", children: "Tenant ID" }), _jsx("dd", { class: "col-sm-9 font-monospace", children: data.tenant.id }), _jsx("dt", { class: "col-sm-3", children: "App ID" }), _jsx("dd", { class: "col-sm-9 font-monospace", children: data.app.id }), _jsx("dt", { class: "col-sm-3", children: "Hostnames" }), _jsx("dd", { class: "col-sm-9", children: data.app.hostnames.length ? data.app.hostnames.join(", ") : "None" })] })] }) }) }), _jsx("div", { class: "col-12 col-xl-6", children: _jsx("section", { class: "card border-0 shadow-sm h-100", children: _jsxs("div", { class: "card-body", children: [_jsx("h5", { class: "mb-3", children: "Endpoints" }), _jsxs("div", { class: "list-group list-group-flush small", children: [_jsx("a", { class: "list-group-item list-group-item-action px-0", href: data.endpoints.services, target: "_blank", rel: "noreferrer", children: "Services" }), _jsxs("a", { class: "list-group-item list-group-item-action px-0", href: data.endpoints.routes, target: "_blank", rel: "noreferrer", children: ["Routes (", data.routeCount, ")"] }), _jsxs("a", { class: "list-group-item list-group-item-action px-0", href: data.endpoints.fragments, target: "_blank", rel: "noreferrer", children: ["Fragments (", data.fragmentCount, ")"] }), _jsx("a", { class: "list-group-item list-group-item-action px-0", href: data.endpoints.theme, target: "_blank", rel: "noreferrer", children: "Theme" }), _jsx("a", { class: "list-group-item list-group-item-action px-0", href: data.endpoints.webhooks, target: "_blank", rel: "noreferrer", children: "Webhooks" })] })] }) }) })] }), _jsxs("section", { children: [_jsxs("div", { class: "d-flex justify-content-between align-items-center mb-3", children: [_jsx("h5", { class: "mb-0", children: "Shared Services" }), _jsx("span", { class: "badge text-bg-secondary", children: data.sharedServices.length })] }), _jsx("div", { class: "row g-3", children: data.sharedServices.map((service) => (_jsx("div", { class: "col-12 col-xl-6", children: _jsx("article", { 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 gap-3 mb-2", children: [_jsxs("div", { children: [_jsx("h6", { class: "mb-1", children: service.title }), _jsx("div", { class: "small text-secondary font-monospace", children: service.id })] }), _jsx("span", { class: `badge ${service.active ? "text-bg-success" : service.enabled ? "text-bg-light border" : "text-bg-secondary"}`, children: service.active ? "active" : service.enabled ? "available" : "disabled" })] }), service.description ? _jsx("p", { class: "small text-secondary mb-2", children: service.description }) : "", _jsxs("div", { class: "small mb-2", children: [_jsx("strong", { children: "URL:" }), " ", _jsx("span", { class: "font-monospace", children: service.baseUrl })] }), service.category ? _jsxs("div", { class: "small mb-2", children: [_jsx("strong", { children: "Category:" }), " ", service.category] }) : "", _jsx("div", { class: "mb-3", children: serviceBadge(service.tags) }), !service.active && service.enabled ? (_jsxs("form", { "hx-post": data.endpoints.activateService, "hx-target": "#bp-settings-alerts", "hx-swap": "innerHTML", children: [_jsx("input", { type: "hidden", name: "sharedServiceId", value: service.id }), _jsx("button", { class: "btn btn-sm btn-primary", type: "submit", children: "Activate" })] })) : ""] }) }) }))) })] })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-config-manager/bp-routes/settings/_theme.bootstrap1/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as av from "anyvali";
|
|
2
|
+
import type { Infer } from "anyvali";
|
|
3
|
+
import { type ApiAuthRequirement, type CacheHints, type DemoScenario } from "@betterportal/framework";
|
|
4
|
+
export declare const ResponseSchema: av.ObjectSchema<{
|
|
5
|
+
title: av.StringSchema;
|
|
6
|
+
tenant: av.ObjectSchema<{
|
|
7
|
+
id: av.StringSchema;
|
|
8
|
+
title: av.StringSchema;
|
|
9
|
+
}>;
|
|
10
|
+
app: av.ObjectSchema<{
|
|
11
|
+
id: av.StringSchema;
|
|
12
|
+
tenantId: av.StringSchema;
|
|
13
|
+
title: av.StringSchema;
|
|
14
|
+
hostnames: av.ArraySchema<av.StringSchema>;
|
|
15
|
+
}>;
|
|
16
|
+
idsVisible: av.BoolSchema;
|
|
17
|
+
managementDiscoveryUrl: av.StringSchema;
|
|
18
|
+
automationCatalogUrl: av.StringSchema;
|
|
19
|
+
endpoints: av.ObjectSchema<{
|
|
20
|
+
current: av.StringSchema;
|
|
21
|
+
services: av.StringSchema;
|
|
22
|
+
activateService: av.StringSchema;
|
|
23
|
+
routes: av.StringSchema;
|
|
24
|
+
fragments: av.StringSchema;
|
|
25
|
+
theme: av.StringSchema;
|
|
26
|
+
webhooks: av.StringSchema;
|
|
27
|
+
webhookEvents: av.StringSchema;
|
|
28
|
+
}>;
|
|
29
|
+
sharedServices: av.ArraySchema<av.ObjectSchema<{
|
|
30
|
+
id: av.StringSchema;
|
|
31
|
+
serviceId: av.OptionalSchema<av.StringSchema>;
|
|
32
|
+
title: av.StringSchema;
|
|
33
|
+
description: av.OptionalSchema<av.StringSchema>;
|
|
34
|
+
baseUrl: av.StringSchema;
|
|
35
|
+
category: av.OptionalSchema<av.StringSchema>;
|
|
36
|
+
tags: av.ArraySchema<av.StringSchema>;
|
|
37
|
+
enabled: av.BoolSchema;
|
|
38
|
+
active: av.BoolSchema;
|
|
39
|
+
}>>;
|
|
40
|
+
routeCount: av.IntSchema;
|
|
41
|
+
fragmentCount: av.IntSchema;
|
|
42
|
+
}>;
|
|
43
|
+
export type ResponseData = Infer<typeof ResponseSchema>;
|
|
44
|
+
export declare const title = "App Settings";
|
|
45
|
+
export declare const description = "Manage the current BetterPortal app through the user management API.";
|
|
46
|
+
export declare const auth: ApiAuthRequirement;
|
|
47
|
+
export declare const dependencies: string[];
|
|
48
|
+
export declare const cacheHints: CacheHints;
|
|
49
|
+
export declare const demoScenarios: DemoScenario<ResponseData>[];
|
|
50
|
+
export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
|
|
51
|
+
title: string;
|
|
52
|
+
tenant: {
|
|
53
|
+
id: string;
|
|
54
|
+
title: string;
|
|
55
|
+
};
|
|
56
|
+
app: {
|
|
57
|
+
id: string;
|
|
58
|
+
tenantId: string;
|
|
59
|
+
title: string;
|
|
60
|
+
hostnames: string[];
|
|
61
|
+
};
|
|
62
|
+
idsVisible: boolean;
|
|
63
|
+
managementDiscoveryUrl: string;
|
|
64
|
+
automationCatalogUrl: string;
|
|
65
|
+
endpoints: {
|
|
66
|
+
current: string;
|
|
67
|
+
services: string;
|
|
68
|
+
activateService: string;
|
|
69
|
+
routes: string;
|
|
70
|
+
fragments: string;
|
|
71
|
+
theme: string;
|
|
72
|
+
webhooks: string;
|
|
73
|
+
webhookEvents: string;
|
|
74
|
+
};
|
|
75
|
+
sharedServices: {
|
|
76
|
+
id: string;
|
|
77
|
+
title: string;
|
|
78
|
+
baseUrl: string;
|
|
79
|
+
tags: string[];
|
|
80
|
+
enabled: boolean;
|
|
81
|
+
active: boolean;
|
|
82
|
+
serviceId?: string | undefined;
|
|
83
|
+
description?: string | undefined;
|
|
84
|
+
category?: string | undefined;
|
|
85
|
+
}[];
|
|
86
|
+
routeCount: number;
|
|
87
|
+
fragmentCount: number;
|
|
88
|
+
}, unknown, Record<string, unknown>>;
|
|
89
|
+
//# 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/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAqCjC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,iBAAiB,CAAC;AACpC,eAAO,MAAM,WAAW,yEAAyE,CAAC;AAElG,eAAO,MAAM,IAAI,EAAE,kBAKlB,CAAC;AAEF,eAAO,MAAM,YAAY,UAKxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAAuE,CAAC;AAEjG,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,YAAY,CAAC,EA0BrD,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAMrB,CAAC"}
|