@peanut-admin/vue 4.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/LICENSE +202 -0
  2. package/dist/access/access.d.ts +3 -0
  3. package/dist/access/access.d.ts.map +1 -0
  4. package/dist/access/access.js +3 -0
  5. package/dist/access/access.js.map +1 -0
  6. package/dist/access/permission-policy.d.ts +11 -0
  7. package/dist/access/permission-policy.d.ts.map +1 -0
  8. package/dist/access/permission-policy.js +22 -0
  9. package/dist/access/permission-policy.js.map +1 -0
  10. package/dist/access/useAccess.d.ts +8 -0
  11. package/dist/access/useAccess.d.ts.map +1 -0
  12. package/dist/access/useAccess.js +11 -0
  13. package/dist/access/useAccess.js.map +1 -0
  14. package/dist/api/audience.d.ts +2 -0
  15. package/dist/api/audience.d.ts.map +1 -0
  16. package/dist/api/audience.js +2 -0
  17. package/dist/api/audience.js.map +1 -0
  18. package/dist/api/problem.d.ts +18 -0
  19. package/dist/api/problem.d.ts.map +1 -0
  20. package/dist/api/problem.js +40 -0
  21. package/dist/api/problem.js.map +1 -0
  22. package/dist/api/refresh.d.ts +12 -0
  23. package/dist/api/refresh.d.ts.map +1 -0
  24. package/dist/api/refresh.js +108 -0
  25. package/dist/api/refresh.js.map +1 -0
  26. package/dist/auth/stores.d.ts +163 -0
  27. package/dist/auth/stores.d.ts.map +1 -0
  28. package/dist/auth/stores.js +82 -0
  29. package/dist/auth/stores.js.map +1 -0
  30. package/dist/auth/tenant-session.d.ts +28 -0
  31. package/dist/auth/tenant-session.d.ts.map +1 -0
  32. package/dist/auth/tenant-session.js +3 -0
  33. package/dist/auth/tenant-session.js.map +1 -0
  34. package/dist/data/useAsyncAction.d.ts +23 -0
  35. package/dist/data/useAsyncAction.d.ts.map +1 -0
  36. package/dist/data/useAsyncAction.js +41 -0
  37. package/dist/data/useAsyncAction.js.map +1 -0
  38. package/dist/data/useAsyncList.d.ts +43 -0
  39. package/dist/data/useAsyncList.d.ts.map +1 -0
  40. package/dist/data/useAsyncList.js +82 -0
  41. package/dist/data/useAsyncList.js.map +1 -0
  42. package/dist/index.d.ts +42 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +23 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/lifecycle/tenant.d.ts +15 -0
  47. package/dist/lifecycle/tenant.d.ts.map +1 -0
  48. package/dist/lifecycle/tenant.js +42 -0
  49. package/dist/lifecycle/tenant.js.map +1 -0
  50. package/dist/module/contribution.d.ts +45 -0
  51. package/dist/module/contribution.d.ts.map +1 -0
  52. package/dist/module/contribution.js +76 -0
  53. package/dist/module/contribution.js.map +1 -0
  54. package/dist/module/plugin-contribution-policy.d.ts +25 -0
  55. package/dist/module/plugin-contribution-policy.d.ts.map +1 -0
  56. package/dist/module/plugin-contribution-policy.js +21 -0
  57. package/dist/module/plugin-contribution-policy.js.map +1 -0
  58. package/dist/module/tenant-modules.d.ts +13 -0
  59. package/dist/module/tenant-modules.d.ts.map +1 -0
  60. package/dist/module/tenant-modules.js +9 -0
  61. package/dist/module/tenant-modules.js.map +1 -0
  62. package/dist/runtime/config.d.ts +11 -0
  63. package/dist/runtime/config.d.ts.map +1 -0
  64. package/dist/runtime/config.js +40 -0
  65. package/dist/runtime/config.js.map +1 -0
  66. package/dist/runtime/errors.d.ts +11 -0
  67. package/dist/runtime/errors.d.ts.map +1 -0
  68. package/dist/runtime/errors.js +59 -0
  69. package/dist/runtime/errors.js.map +1 -0
  70. package/dist/runtime/guard.d.ts +24 -0
  71. package/dist/runtime/guard.d.ts.map +1 -0
  72. package/dist/runtime/guard.js +16 -0
  73. package/dist/runtime/guard.js.map +1 -0
  74. package/dist/runtime/navigation.d.ts +28 -0
  75. package/dist/runtime/navigation.d.ts.map +1 -0
  76. package/dist/runtime/navigation.js +72 -0
  77. package/dist/runtime/navigation.js.map +1 -0
  78. package/dist/runtime/overrides.d.ts +40 -0
  79. package/dist/runtime/overrides.d.ts.map +1 -0
  80. package/dist/runtime/overrides.js +138 -0
  81. package/dist/runtime/overrides.js.map +1 -0
  82. package/dist/targets/store.d.ts +45 -0
  83. package/dist/targets/store.d.ts.map +1 -0
  84. package/dist/targets/store.js +106 -0
  85. package/dist/targets/store.js.map +1 -0
  86. package/package.json +35 -0
@@ -0,0 +1,42 @@
1
+ const tenantDisposers = new Map();
2
+ export const registerTenantDisposer = (key, disposer) => {
3
+ if (key === '' || tenantDisposers.has(key)) {
4
+ throw new Error(`TENANT_DISPOSER_DUPLICATE: ${key}`);
5
+ }
6
+ tenantDisposers.set(key, disposer);
7
+ return () => {
8
+ if (tenantDisposers.get(key) === disposer) {
9
+ tenantDisposers.delete(key);
10
+ }
11
+ };
12
+ };
13
+ export const disposeTenantState = async () => {
14
+ const disposers = [...tenantDisposers.values()];
15
+ const results = await Promise.allSettled(disposers.map(async (disposer) => disposer()));
16
+ const failure = results.find((result) => result.status === 'rejected');
17
+ if (failure !== undefined)
18
+ throw failure.reason;
19
+ };
20
+ export const createTenantLifecycle = () => {
21
+ let generation = 0;
22
+ let controller = new AbortController();
23
+ return {
24
+ current: () => generation,
25
+ capture: () => {
26
+ const capturedGeneration = generation;
27
+ const signal = controller.signal;
28
+ return {
29
+ generation: capturedGeneration,
30
+ signal,
31
+ isCurrent: () => capturedGeneration === generation && !signal.aborted,
32
+ };
33
+ },
34
+ invalidate: () => {
35
+ controller.abort();
36
+ controller = new AbortController();
37
+ generation += 1;
38
+ return generation;
39
+ },
40
+ };
41
+ };
42
+ //# sourceMappingURL=tenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../src/lifecycle/tenant.ts"],"names":[],"mappings":"AAcA,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;AAE1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,GAAW,EACX,QAAwB,EACV,EAAE;IAChB,IAAI,GAAG,KAAK,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEnC,OAAO,GAAG,EAAE;QACV,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1C,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAmB,EAAE;IAC1D,MAAM,SAAS,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAC9C,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,MAAM,EAAmC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAC1E,CAAC;IACF,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,OAAO,CAAC,MAAM,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAoB,EAAE;IACzD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEvC,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU;QACzB,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,kBAAkB,GAAG,UAAU,CAAC;YACtC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YACjC,OAAO;gBACL,UAAU,EAAE,kBAAkB;gBAC9B,MAAM;gBACN,SAAS,EAAE,GAAG,EAAE,CAAC,kBAAkB,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO;aACtE,CAAC;QACJ,CAAC;QACD,UAAU,EAAE,GAAG,EAAE;YACf,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACnC,UAAU,IAAI,CAAC,CAAC;YAChB,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { Component } from 'vue';
2
+ export interface AdminRouteAccess {
3
+ moduleKey: string;
4
+ permissionKeys: readonly string[];
5
+ }
6
+ export interface AdminModuleRoute {
7
+ name: string;
8
+ path: string;
9
+ component: () => Promise<{
10
+ default: Component;
11
+ }>;
12
+ access: AdminRouteAccess;
13
+ }
14
+ export interface AdminModuleStoreContribution {
15
+ key: string;
16
+ dispose: () => void | Promise<void>;
17
+ }
18
+ export interface AdminModuleLocaleContribution {
19
+ locale: string;
20
+ load: () => Promise<Readonly<Record<string, string>>>;
21
+ }
22
+ export type AdminModuleShellSlotName = 'header-context' | 'header-actions' | 'sidebar-footer' | 'page-tools';
23
+ export interface AdminModuleShellSlotContribution {
24
+ name: AdminModuleShellSlotName;
25
+ component: () => Promise<{
26
+ default: Component;
27
+ }>;
28
+ access?: AdminRouteAccess;
29
+ }
30
+ export interface AdminModuleContribution {
31
+ key: string;
32
+ routes: readonly AdminModuleRoute[];
33
+ disposeOnTenantChange: boolean;
34
+ stores?: readonly AdminModuleStoreContribution[];
35
+ locales?: readonly AdminModuleLocaleContribution[];
36
+ shellSlots?: readonly AdminModuleShellSlotContribution[];
37
+ }
38
+ export declare const defineAdminModule: <T extends AdminModuleContribution>(contribution: T) => T;
39
+ export interface MenuRouteRegistry {
40
+ resolve: (routeName: string) => AdminModuleRoute | null;
41
+ diagnostics: () => readonly string[];
42
+ routes: () => readonly AdminModuleRoute[];
43
+ }
44
+ export declare const createMenuRouteRegistry: (contributions: readonly AdminModuleContribution[]) => MenuRouteRegistry;
45
+ //# sourceMappingURL=contribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution.d.ts","sourceRoot":"","sources":["../../src/module/contribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IACjD,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,wBAAwB,GAChC,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,CAAC;AAEjB,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,SAAS,4BAA4B,EAAE,CAAC;IACjD,OAAO,CAAC,EAAE,SAAS,6BAA6B,EAAE,CAAC;IACnD,UAAU,CAAC,EAAE,SAAS,gCAAgC,EAAE,CAAC;CAC1D;AAMD,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,uBAAuB,EACjE,cAAc,CAAC,KACd,CAsDF,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,gBAAgB,GAAG,IAAI,CAAC;IACxD,WAAW,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACrC,MAAM,EAAE,MAAM,SAAS,gBAAgB,EAAE,CAAC;CAC3C;AAED,eAAO,MAAM,uBAAuB,GAClC,eAAe,SAAS,uBAAuB,EAAE,KAChD,iBA2BF,CAAC"}
@@ -0,0 +1,76 @@
1
+ const moduleKeyPattern = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*(?:\.[a-z][a-z0-9]*(?:-[a-z0-9]+)*)*$/;
2
+ const routeNamePattern = /^[a-z][a-z0-9]*(?:[.-][a-z][a-z0-9]*)+$/;
3
+ export const defineAdminModule = (contribution) => {
4
+ if (!moduleKeyPattern.test(contribution.key)) {
5
+ throw new Error(`ADMIN_MODULE_KEY_INVALID: ${contribution.key}`);
6
+ }
7
+ const names = new Set();
8
+ const paths = new Set();
9
+ for (const route of contribution.routes) {
10
+ if (!routeNamePattern.test(route.name) || names.has(route.name)) {
11
+ throw new Error(`ADMIN_MODULE_ROUTE_NAME_INVALID: ${route.name}`);
12
+ }
13
+ if (!route.path.startsWith('/app/') || paths.has(route.path)) {
14
+ throw new Error(`ADMIN_MODULE_ROUTE_PATH_INVALID: ${route.path}`);
15
+ }
16
+ if (route.access.moduleKey !== contribution.key ||
17
+ route.access.permissionKeys.length === 0) {
18
+ throw new Error(`ADMIN_MODULE_ROUTE_ACCESS_INVALID: ${route.name}`);
19
+ }
20
+ names.add(route.name);
21
+ paths.add(route.path);
22
+ }
23
+ const storeKeys = new Set();
24
+ for (const store of contribution.stores ?? []) {
25
+ if (!store.key.startsWith(`${contribution.key}.`) ||
26
+ storeKeys.has(store.key)) {
27
+ throw new Error(`ADMIN_MODULE_STORE_INVALID: ${store.key}`);
28
+ }
29
+ storeKeys.add(store.key);
30
+ }
31
+ const locales = new Set();
32
+ for (const locale of contribution.locales ?? []) {
33
+ if (!/^[a-z]{2}(?:-[A-Z]{2})?$/.test(locale.locale) ||
34
+ locales.has(locale.locale)) {
35
+ throw new Error(`ADMIN_MODULE_LOCALE_INVALID: ${locale.locale}`);
36
+ }
37
+ locales.add(locale.locale);
38
+ }
39
+ const slots = new Set();
40
+ for (const slot of contribution.shellSlots ?? []) {
41
+ if (slots.has(slot.name) ||
42
+ (slot.access !== undefined && slot.access.moduleKey !== contribution.key)) {
43
+ throw new Error(`ADMIN_MODULE_SHELL_SLOT_INVALID: ${slot.name}`);
44
+ }
45
+ slots.add(slot.name);
46
+ }
47
+ return contribution;
48
+ };
49
+ export const createMenuRouteRegistry = (contributions) => {
50
+ const routeMap = new Map();
51
+ const paths = new Set();
52
+ for (const rawContribution of contributions) {
53
+ const contribution = defineAdminModule(rawContribution);
54
+ for (const route of contribution.routes) {
55
+ if (routeMap.has(route.name) || paths.has(route.path)) {
56
+ throw new Error(`ADMIN_ROUTE_REGISTRY_CONFLICT: ${route.name}`);
57
+ }
58
+ routeMap.set(route.name, route);
59
+ paths.add(route.path);
60
+ }
61
+ }
62
+ const unknownRoutes = new Set();
63
+ return {
64
+ resolve(routeName) {
65
+ const route = routeMap.get(routeName);
66
+ if (route === undefined) {
67
+ unknownRoutes.add(routeName);
68
+ return null;
69
+ }
70
+ return route;
71
+ },
72
+ diagnostics: () => [...unknownRoutes],
73
+ routes: () => [...routeMap.values()],
74
+ };
75
+ };
76
+ //# sourceMappingURL=contribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution.js","sourceRoot":"","sources":["../../src/module/contribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { PermissionEvaluator } from '../access/permission-policy.js';
2
+ /**
3
+ * Minimal router contract shared by host applications without coupling to a
4
+ * particular Vue Router major version.
5
+ */
6
+ export interface PluginFrontendRoute {
7
+ path: string;
8
+ name?: unknown;
9
+ component?: unknown;
10
+ meta?: {
11
+ requiredPermissions?: string | string[];
12
+ [key: string]: unknown;
13
+ };
14
+ children?: PluginFrontendRoute[];
15
+ }
16
+ export interface PluginFrontendContribution<T extends PluginFrontendRoute = PluginFrontendRoute> {
17
+ moduleKey: string;
18
+ routes: T[];
19
+ }
20
+ export declare const collectPluginContributions: (modules: Record<string, {
21
+ default?: PluginFrontendContribution;
22
+ }>) => PluginFrontendContribution[];
23
+ /** Deployment presence alone never exposes a Tenant Module route. */
24
+ export declare const routesForTenantModules: <T extends PluginFrontendRoute>(contributions: PluginFrontendContribution<T>[], enabledModules: readonly string[], grantedPermissions: readonly string[], evaluator: PermissionEvaluator) => T[];
25
+ //# sourceMappingURL=plugin-contribution-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-contribution-policy.d.ts","sourceRoot":"","sources":["../../src/module/plugin-contribution-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAG1E;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE;QACL,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B,CACzC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB;IAEnD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,EAAE,CAAC;CACb;AAED,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,0BAA0B,CAAA;CAAE,CAAC,KAChE,0BAA0B,EASxB,CAAC;AAEN,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,mBAAmB,EAClE,eAAe,0BAA0B,CAAC,CAAC,CAAC,EAAE,EAC9C,gBAAgB,SAAS,MAAM,EAAE,EACjC,oBAAoB,SAAS,MAAM,EAAE,EACrC,WAAW,mBAAmB,KAC7B,CAAC,EAYH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { evaluateRequiredPermissions } from '../access/permission-policy.js';
2
+ export const collectPluginContributions = (modules) => Object.keys(modules)
3
+ .sort()
4
+ .map((path) => modules[path]?.default)
5
+ .filter((contribution) => typeof contribution?.moduleKey === 'string' &&
6
+ contribution.moduleKey.length > 0 &&
7
+ Array.isArray(contribution.routes));
8
+ /** Deployment presence alone never exposes a Tenant Module route. */
9
+ export const routesForTenantModules = (contributions, enabledModules, grantedPermissions, evaluator) => {
10
+ const enabled = new Set(enabledModules);
11
+ return contributions.flatMap((contribution) => {
12
+ if (!enabled.has(contribution.moduleKey))
13
+ return [];
14
+ return contribution.routes.filter((route) => {
15
+ const required = route.meta?.requiredPermissions;
16
+ return ((typeof required === 'string' || Array.isArray(required)) &&
17
+ evaluateRequiredPermissions(required, grantedPermissions, evaluator));
18
+ });
19
+ });
20
+ };
21
+ //# sourceMappingURL=plugin-contribution-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-contribution-policy.js","sourceRoot":"","sources":["../../src/module/plugin-contribution-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAwB7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAiE,EACnC,EAAE,CAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;KACjB,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;KACrC,MAAM,CACL,CAAC,YAAY,EAA8C,EAAE,CAC3D,OAAO,YAAY,EAAE,SAAS,KAAK,QAAQ;IAC3C,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;IACjC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CACrC,CAAC;AAEN,qEAAqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,aAA8C,EAC9C,cAAiC,EACjC,kBAAqC,EACrC,SAA8B,EACzB,EAAE;IACP,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC;QACpD,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC;YACjD,OAAO,CACL,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACzD,2BAA2B,CAAC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,CAAC,CACrE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** Minimal route shape needed to derive Tenant module availability. */
2
+ export interface TenantModuleRoute {
3
+ meta?: {
4
+ tenantModuleKey?: unknown;
5
+ };
6
+ children?: readonly TenantModuleRoute[];
7
+ }
8
+ /**
9
+ * Derive the distinct Tenant module keys exposed by a server-authorized route
10
+ * tree. The host owns fetching and route-to-component resolution.
11
+ */
12
+ export declare const enabledTenantModulesFromRoutes: (routes: readonly TenantModuleRoute[]) => string[];
13
+ //# sourceMappingURL=tenant-modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-modules.d.ts","sourceRoot":"","sources":["../../src/module/tenant-modules.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE;QACL,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACzC;AAED;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GACzC,QAAQ,SAAS,iBAAiB,EAAE,KACnC,MAAM,EAQN,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Derive the distinct Tenant module keys exposed by a server-authorized route
3
+ * tree. The host owns fetching and route-to-component resolution.
4
+ */
5
+ export const enabledTenantModulesFromRoutes = (routes) => Array.from(new Set(routes
6
+ .flatMap((route) => [route, ...(route.children ?? [])])
7
+ .map((route) => route.meta?.tenantModuleKey)
8
+ .filter((key) => typeof key === 'string')));
9
+ //# sourceMappingURL=tenant-modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-modules.js","sourceRoot":"","sources":["../../src/module/tenant-modules.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,MAAoC,EAC1B,EAAE,CACZ,KAAK,CAAC,IAAI,CACR,IAAI,GAAG,CACL,MAAM;KACH,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;KACtD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC;KAC3C,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAC3D,CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface AdminAudienceHostConfig {
2
+ baseUrl: string;
3
+ allowedOrigin: string;
4
+ clientKey: string;
5
+ }
6
+ export interface AdminHostConfig {
7
+ tenant: AdminAudienceHostConfig;
8
+ platform: AdminAudienceHostConfig;
9
+ }
10
+ export declare const defineAdminHostConfig: (config: AdminHostConfig) => AdminHostConfig;
11
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,uBAAuB,CAAC;IAChC,QAAQ,EAAE,uBAAuB,CAAC;CACnC;AA8CD,eAAO,MAAM,qBAAqB,GAChC,QAAQ,eAAe,KACtB,eAGD,CAAC"}
@@ -0,0 +1,40 @@
1
+ const clientKeyPattern = /^[a-z][a-z0-9-]{0,63}$/;
2
+ const parseAuthority = (value) => {
3
+ let url;
4
+ try {
5
+ url = new URL(value);
6
+ }
7
+ catch {
8
+ throw new Error('ADMIN_HOST_ORIGIN_INVALID');
9
+ }
10
+ if (!['http:', 'https:'].includes(url.protocol) ||
11
+ url.origin === 'null' ||
12
+ url.username !== '' ||
13
+ url.password !== '' ||
14
+ url.pathname !== '/' ||
15
+ url.search !== '' ||
16
+ url.hash !== '') {
17
+ throw new Error('ADMIN_HOST_ORIGIN_INVALID');
18
+ }
19
+ return url;
20
+ };
21
+ const defineAudienceConfig = (config) => {
22
+ const baseUrl = parseAuthority(config.baseUrl);
23
+ const allowedOrigin = parseAuthority(config.allowedOrigin);
24
+ if (baseUrl.origin !== allowedOrigin.origin) {
25
+ throw new Error('ADMIN_HOST_ORIGIN_MISMATCH');
26
+ }
27
+ if (!clientKeyPattern.test(config.clientKey)) {
28
+ throw new Error('ADMIN_HOST_CLIENT_KEY_INVALID');
29
+ }
30
+ return {
31
+ baseUrl: baseUrl.origin,
32
+ allowedOrigin: allowedOrigin.origin,
33
+ clientKey: config.clientKey,
34
+ };
35
+ };
36
+ export const defineAdminHostConfig = (config) => ({
37
+ tenant: defineAudienceConfig(config.tenant),
38
+ platform: defineAudienceConfig(config.platform),
39
+ });
40
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"AAWA,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,MAAM,cAAc,GAAG,CAAC,KAAa,EAAO,EAAE;IAC5C,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,IACE,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3C,GAAG,CAAC,MAAM,KAAK,MAAM;QACrB,GAAG,CAAC,QAAQ,KAAK,EAAE;QACnB,GAAG,CAAC,QAAQ,KAAK,EAAE;QACnB,GAAG,CAAC,QAAQ,KAAK,GAAG;QACpB,GAAG,CAAC,MAAM,KAAK,EAAE;QACjB,GAAG,CAAC,IAAI,KAAK,EAAE,EACf,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,MAA+B,EACN,EAAE;IAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,aAAa,EAAE,aAAa,CAAC,MAAM;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,MAAuB,EACN,EAAE,CAAC,CAAC;IACrB,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC;CAChD,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ApiAudience } from '../api/audience.js';
2
+ export type AdminRuntimeErrorKind = 'login' | 'forbidden' | 'not-found' | 'conflict' | 'rate-limited' | 'unavailable' | 'configuration';
3
+ export interface AdminRuntimeErrorState {
4
+ kind: AdminRuntimeErrorKind;
5
+ audience: ApiAudience;
6
+ code: string;
7
+ requestId: string | null;
8
+ retryAfter: string | null;
9
+ }
10
+ export declare const mapAdminRuntimeError: (error: unknown, audience: ApiAudience) => AdminRuntimeErrorState;
11
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,MAAM,qBAAqB,GAC7B,OAAO,GACP,WAAW,GACX,WAAW,GACX,UAAU,GACV,cAAc,GACd,aAAa,GACb,eAAe,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAmCD,eAAO,MAAM,oBAAoB,GAC/B,OAAO,OAAO,EACd,UAAU,WAAW,KACpB,sBAkCF,CAAC"}
@@ -0,0 +1,59 @@
1
+ const isRecord = (value) => typeof value === 'object' && value !== null;
2
+ const problemSource = (value) => {
3
+ if (!isRecord(value) || !isRecord(value.problem))
4
+ return null;
5
+ const problem = value.problem;
6
+ if (typeof problem.status !== 'number' ||
7
+ typeof problem.code !== 'string' ||
8
+ typeof problem.request_id !== 'string')
9
+ return null;
10
+ return {
11
+ problem: problem,
12
+ retryAfter: typeof value.retryAfter === 'string' ? value.retryAfter : null,
13
+ };
14
+ };
15
+ const kindForStatus = (status) => {
16
+ if (status === 401)
17
+ return 'login';
18
+ if (status === 403)
19
+ return 'forbidden';
20
+ if (status === 404)
21
+ return 'not-found';
22
+ if (status === 409 || status === 412)
23
+ return 'conflict';
24
+ if (status === 429)
25
+ return 'rate-limited';
26
+ return 'unavailable';
27
+ };
28
+ export const mapAdminRuntimeError = (error, audience) => {
29
+ const source = problemSource(error);
30
+ if (source !== null) {
31
+ return {
32
+ kind: kindForStatus(source.problem.status),
33
+ audience,
34
+ code: source.problem.code,
35
+ requestId: source.problem.request_id,
36
+ retryAfter: source.retryAfter ?? null,
37
+ };
38
+ }
39
+ const code = error instanceof Error ? error.message : 'CLIENT_BOOT_FAILED';
40
+ if (code === 'API_ORIGIN_INVALID' ||
41
+ code === 'API_ORIGIN_MISMATCH' ||
42
+ code.startsWith('API_AUDIENCE_MISMATCH')) {
43
+ return {
44
+ kind: 'configuration',
45
+ audience,
46
+ code,
47
+ requestId: null,
48
+ retryAfter: null,
49
+ };
50
+ }
51
+ return {
52
+ kind: 'unavailable',
53
+ audience,
54
+ code: code === '' ? 'CLIENT_BOOT_FAILED' : code,
55
+ requestId: null,
56
+ retryAfter: null,
57
+ };
58
+ };
59
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAyBA,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AAE9C,MAAM,aAAa,GAAG,CAAC,KAAc,EAA6B,EAAE;IAClE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IACE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;QAClC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAChC,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;QAEtC,OAAO,IAAI,CAAC;IAEd,OAAO;QACL,OAAO,EAAE,OAAoC;QAC7C,UAAU,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;KAC3E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAc,EAAyB,EAAE;IAC9D,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC;IACnC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,WAAW,CAAC;IACvC,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,WAAW,CAAC;IACvC,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC;IACxD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,cAAc,CAAC;IAC1C,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAc,EACd,QAAqB,EACG,EAAE;IAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1C,QAAQ;YACR,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;YACzB,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU;YACpC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;SACtC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAC3E,IACE,IAAI,KAAK,oBAAoB;QAC7B,IAAI,KAAK,qBAAqB;QAC9B,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,EACxC,CAAC;QACD,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,QAAQ;YACR,IAAI;YACJ,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,QAAQ;QACR,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI;QAC/C,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ApiAudience } from '../api/audience.js';
2
+ export interface AdminRouteGuardInput {
3
+ audience: ApiAudience;
4
+ moduleKey?: string;
5
+ permissionKeys?: readonly string[];
6
+ }
7
+ export interface AdminRouteGuardDependencies {
8
+ enterAudience: (audience: ApiAudience) => Promise<void>;
9
+ ensureContext: (audience: ApiAudience) => Promise<void>;
10
+ loadNavigation: (audience: ApiAudience) => Promise<void>;
11
+ hasModule: (moduleKey: string) => boolean;
12
+ hasPermissions: (permissionKeys: readonly string[]) => boolean;
13
+ }
14
+ export type AdminRouteGuardResult = {
15
+ status: 'allowed';
16
+ } | {
17
+ status: 'module-unavailable';
18
+ code: 'MODULE_TENANT_DISABLED';
19
+ } | {
20
+ status: 'forbidden';
21
+ code: 'AUTHZ_FUNCTIONAL_DENIED';
22
+ };
23
+ export declare const runAdminRouteGuard: (route: AdminRouteGuardInput, dependencies: AdminRouteGuardDependencies) => Promise<AdminRouteGuardResult>;
24
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/runtime/guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,aAAa,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,cAAc,EAAE,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC;CAChE;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,IAAI,EAAE,wBAAwB,CAAA;CAAE,GAChE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAE7D,eAAO,MAAM,kBAAkB,GAC7B,OAAO,oBAAoB,EAC3B,cAAc,2BAA2B,KACxC,OAAO,CAAC,qBAAqB,CAoB/B,CAAC"}
@@ -0,0 +1,16 @@
1
+ export const runAdminRouteGuard = async (route, dependencies) => {
2
+ await dependencies.enterAudience(route.audience);
3
+ await dependencies.ensureContext(route.audience);
4
+ await dependencies.loadNavigation(route.audience);
5
+ if (route.moduleKey !== undefined &&
6
+ !dependencies.hasModule(route.moduleKey)) {
7
+ return { status: 'module-unavailable', code: 'MODULE_TENANT_DISABLED' };
8
+ }
9
+ if (route.permissionKeys !== undefined &&
10
+ route.permissionKeys.length > 0 &&
11
+ !dependencies.hasPermissions(route.permissionKeys)) {
12
+ return { status: 'forbidden', code: 'AUTHZ_FUNCTIONAL_DENIED' };
13
+ }
14
+ return { status: 'allowed' };
15
+ };
16
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/runtime/guard.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,KAA2B,EAC3B,YAAyC,EACT,EAAE;IAClC,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAElD,IACE,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EACxC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IAC1E,CAAC;IACD,IACE,KAAK,CAAC,cAAc,KAAK,SAAS;QAClC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QAC/B,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,EAClD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { ApiAudience } from '../api/audience.js';
2
+ import type { AdminModuleContribution } from '../module/contribution.js';
3
+ export interface AdminNavigationRoute {
4
+ name: string;
5
+ path: string;
6
+ audience: ApiAudience;
7
+ permission?: string;
8
+ permissionKeys?: readonly string[];
9
+ moduleKey?: string;
10
+ }
11
+ export interface AdminNavigationMenuInput {
12
+ route_name?: unknown;
13
+ route_path?: unknown;
14
+ component?: unknown;
15
+ }
16
+ export interface AdminNavigationRegistry {
17
+ resolveMenu: (menu: AdminNavigationMenuInput) => AdminNavigationRoute | null;
18
+ diagnostics: () => readonly string[];
19
+ clearDiagnostics: () => void;
20
+ routes: () => readonly AdminNavigationRoute[];
21
+ disposeTenantState: () => Promise<void>;
22
+ }
23
+ export interface AdminNavigationRegistryInput {
24
+ routes: readonly AdminNavigationRoute[];
25
+ modules: readonly AdminModuleContribution[];
26
+ }
27
+ export declare const createAdminNavigationRegistry: (input: AdminNavigationRegistryInput) => AdminNavigationRegistry;
28
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/runtime/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,oBAAoB,GAAG,IAAI,CAAC;IAC7E,WAAW,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACrC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,SAAS,oBAAoB,EAAE,CAAC;IAC9C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACxC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC7C;AAuBD,eAAO,MAAM,6BAA6B,GACxC,OAAO,4BAA4B,KAClC,uBA8DF,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { defineAdminModule } from '../module/contribution.js';
2
+ const throwRegistryConflict = (name) => {
3
+ throw new Error(`ADMIN_ROUTE_REGISTRY_CONFLICT: ${name}`);
4
+ };
5
+ const matchesAudience = (route) => route.audience === 'tenant'
6
+ ? route.path === '/app' || route.path.startsWith('/app/')
7
+ : route.path === '/platform' || route.path.startsWith('/platform/');
8
+ const runDisposers = async (disposers) => {
9
+ const results = await Promise.allSettled(disposers.map(async (dispose) => dispose()));
10
+ const failure = results.find((result) => result.status === 'rejected');
11
+ if (failure !== undefined)
12
+ throw failure.reason;
13
+ };
14
+ export const createAdminNavigationRegistry = (input) => {
15
+ const routeMap = new Map();
16
+ const paths = new Set();
17
+ const moduleKeys = new Set();
18
+ const tenantDisposers = [];
19
+ const registerRoute = (route) => {
20
+ if (route.name === '' ||
21
+ !matchesAudience(route) ||
22
+ routeMap.has(route.name) ||
23
+ paths.has(route.path)) {
24
+ throwRegistryConflict(route.name);
25
+ }
26
+ routeMap.set(route.name, {
27
+ ...route,
28
+ ...(route.permissionKeys === undefined
29
+ ? {}
30
+ : { permissionKeys: [...route.permissionKeys] }),
31
+ });
32
+ paths.add(route.path);
33
+ };
34
+ for (const route of input.routes)
35
+ registerRoute(route);
36
+ for (const rawModule of input.modules) {
37
+ const module = defineAdminModule(rawModule);
38
+ if (moduleKeys.has(module.key))
39
+ throwRegistryConflict(module.key);
40
+ moduleKeys.add(module.key);
41
+ for (const route of module.routes) {
42
+ registerRoute({
43
+ name: route.name,
44
+ path: route.path,
45
+ audience: 'tenant',
46
+ moduleKey: module.key,
47
+ permissionKeys: route.access.permissionKeys,
48
+ });
49
+ }
50
+ if (module.disposeOnTenantChange) {
51
+ tenantDisposers.push(...(module.stores ?? []).map((store) => store.dispose));
52
+ }
53
+ }
54
+ const unknownRoutes = new Set();
55
+ return {
56
+ resolveMenu(menu) {
57
+ if (typeof menu.route_name !== 'string')
58
+ return null;
59
+ const route = routeMap.get(menu.route_name);
60
+ if (route === undefined) {
61
+ unknownRoutes.add(menu.route_name);
62
+ return null;
63
+ }
64
+ return route;
65
+ },
66
+ diagnostics: () => [...unknownRoutes],
67
+ clearDiagnostics: () => unknownRoutes.clear(),
68
+ routes: () => [...routeMap.values()],
69
+ disposeTenantState: () => runDisposers(tenantDisposers),
70
+ };
71
+ };
72
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/runtime/navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export type AdminOverrideKind = 'service' | 'component' | 'page' | 'route';
2
+ export type AdminOverrideSource = 'default' | 'application';
3
+ export interface AdminOverrideSlot<Value = unknown> {
4
+ readonly key: string;
5
+ readonly kind: AdminOverrideKind;
6
+ readonly contractVersion: string;
7
+ readonly defaultValue: Value;
8
+ readonly validate?: (value: unknown) => value is Value;
9
+ }
10
+ export interface AdminOverride<Value = unknown> {
11
+ readonly key: string;
12
+ readonly kind: AdminOverrideKind;
13
+ readonly contractVersion: string;
14
+ readonly value: Value;
15
+ }
16
+ export interface AdminOverrideResolution<Value = unknown> {
17
+ readonly key: string;
18
+ readonly kind: AdminOverrideKind;
19
+ readonly contractVersion: string;
20
+ readonly value: Value;
21
+ readonly source: AdminOverrideSource;
22
+ }
23
+ export type AdminOverrideResolutionMetadata = Omit<AdminOverrideResolution, 'value'>;
24
+ export interface AdminOverrideRegistryInput<Slots extends readonly AdminOverrideSlot[] = readonly AdminOverrideSlot[]> {
25
+ readonly slots: Slots;
26
+ readonly overrides?: readonly AdminOverride[];
27
+ }
28
+ type SlotValue<Slots extends readonly AdminOverrideSlot[], Key extends string> = Extract<Slots[number], {
29
+ readonly key: Key;
30
+ }> extends infer Slot ? Slot extends AdminOverrideSlot<infer Value> ? Value : unknown : unknown;
31
+ type SlotKey<Slots extends readonly AdminOverrideSlot[]> = Slots[number]['key'] & string;
32
+ export interface AdminOverrideRegistry<Slots extends readonly AdminOverrideSlot[] = readonly AdminOverrideSlot[]> {
33
+ resolve<Key extends SlotKey<Slots>>(key: Key): AdminOverrideResolution<SlotValue<Slots, Key>>;
34
+ get<Key extends SlotKey<Slots>>(key: Key): SlotValue<Slots, Key>;
35
+ diagnostics(): readonly AdminOverrideResolutionMetadata[];
36
+ }
37
+ export declare const defineAdminOverrideSlot: <Value, Slot extends AdminOverrideSlot<Value>>(slot: Slot) => Slot;
38
+ export declare const createAdminOverrideRegistry: <Slots extends readonly AdminOverrideSlot[]>(input: AdminOverrideRegistryInput<Slots>) => AdminOverrideRegistry<Slots>;
39
+ export {};
40
+ //# sourceMappingURL=overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/runtime/overrides.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3E,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,aAAa,CAAC;AAE5D,MAAM,WAAW,iBAAiB,CAAC,KAAK,GAAG,OAAO;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC;CACxD;AAED,MAAM,WAAW,aAAa,CAAC,KAAK,GAAG,OAAO;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB,CAAC,KAAK,GAAG,OAAO;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,MAAM,+BAA+B,GAAG,IAAI,CAChD,uBAAuB,EACvB,OAAO,CACR,CAAC;AAEF,MAAM,WAAW,0BAA0B,CACzC,KAAK,SAAS,SAAS,iBAAiB,EAAE,GAAG,SAAS,iBAAiB,EAAE;IAEzE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AAED,KAAK,SAAS,CACZ,KAAK,SAAS,SAAS,iBAAiB,EAAE,EAC1C,GAAG,SAAS,MAAM,IAChB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC,SAAS,MAAM,IAAI,GAChE,IAAI,SAAS,iBAAiB,CAAC,MAAM,KAAK,CAAC,GACzC,KAAK,GACL,OAAO,GACT,OAAO,CAAC;AAEZ,KAAK,OAAO,CAAC,KAAK,SAAS,SAAS,iBAAiB,EAAE,IACrD,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,qBAAqB,CACpC,KAAK,SAAS,SAAS,iBAAiB,EAAE,GAAG,SAAS,iBAAiB,EAAE;IAEzE,OAAO,CAAC,GAAG,SAAS,OAAO,CAAC,KAAK,CAAC,EAChC,GAAG,EAAE,GAAG,GACP,uBAAuB,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,GAAG,CAAC,GAAG,SAAS,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjE,WAAW,IAAI,SAAS,+BAA+B,EAAE,CAAC;CAC3D;AA6ED,eAAO,MAAM,uBAAuB,GAClC,KAAK,EACL,IAAI,SAAS,iBAAiB,CAAC,KAAK,CAAC,EAErC,MAAM,IAAI,KACT,IAAY,CAAC;AAEhB,eAAO,MAAM,2BAA2B,GACtC,KAAK,SAAS,SAAS,iBAAiB,EAAE,EAE1C,OAAO,0BAA0B,CAAC,KAAK,CAAC,KACvC,qBAAqB,CAAC,KAAK,CAqH7B,CAAC"}