@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,163 @@
1
+ export interface TenantContextData {
2
+ audience: 'tenant';
3
+ accountId: string;
4
+ tenantId: string;
5
+ memberId: string;
6
+ moduleKeys: readonly string[];
7
+ permissionKeys: readonly string[];
8
+ authorizationRevision: string;
9
+ }
10
+ export interface PlatformContextData {
11
+ audience: 'platform';
12
+ accountId: string;
13
+ operatorId: string;
14
+ permissionKeys: readonly string[];
15
+ authorizationRevision: string;
16
+ }
17
+ interface AuthState {
18
+ accessToken: string | null;
19
+ generation: number;
20
+ status: 'anonymous' | 'authenticated' | 'refreshing';
21
+ }
22
+ export declare const useTenantAuth: import("pinia").StoreDefinition<"peanut-admin-tenant-auth", AuthState, {}, {
23
+ replaceAccessToken(this: AuthState, token: string): void;
24
+ markRefreshing(this: AuthState): void;
25
+ clear(this: AuthState): void;
26
+ }>;
27
+ export declare const usePlatformAuth: import("pinia").StoreDefinition<"peanut-admin-platform-auth", AuthState, {}, {
28
+ replaceAccessToken(this: AuthState, token: string): void;
29
+ markRefreshing(this: AuthState): void;
30
+ clear(this: AuthState): void;
31
+ }>;
32
+ interface TenantContextState {
33
+ value: TenantContextData | null;
34
+ generation: number;
35
+ }
36
+ export declare const useTenantContext: import("pinia").StoreDefinition<"peanut-admin-tenant-context", TenantContextState, {
37
+ accountId: (state: {
38
+ value: {
39
+ audience: "tenant";
40
+ accountId: string;
41
+ tenantId: string;
42
+ memberId: string;
43
+ moduleKeys: readonly string[];
44
+ permissionKeys: readonly string[];
45
+ authorizationRevision: string;
46
+ } | null;
47
+ generation: number;
48
+ } & import("pinia").PiniaCustomStateProperties<TenantContextState>) => string | null;
49
+ tenantId: (state: {
50
+ value: {
51
+ audience: "tenant";
52
+ accountId: string;
53
+ tenantId: string;
54
+ memberId: string;
55
+ moduleKeys: readonly string[];
56
+ permissionKeys: readonly string[];
57
+ authorizationRevision: string;
58
+ } | null;
59
+ generation: number;
60
+ } & import("pinia").PiniaCustomStateProperties<TenantContextState>) => string | null;
61
+ memberId: (state: {
62
+ value: {
63
+ audience: "tenant";
64
+ accountId: string;
65
+ tenantId: string;
66
+ memberId: string;
67
+ moduleKeys: readonly string[];
68
+ permissionKeys: readonly string[];
69
+ authorizationRevision: string;
70
+ } | null;
71
+ generation: number;
72
+ } & import("pinia").PiniaCustomStateProperties<TenantContextState>) => string | null;
73
+ authorizationRevision: (state: {
74
+ value: {
75
+ audience: "tenant";
76
+ accountId: string;
77
+ tenantId: string;
78
+ memberId: string;
79
+ moduleKeys: readonly string[];
80
+ permissionKeys: readonly string[];
81
+ authorizationRevision: string;
82
+ } | null;
83
+ generation: number;
84
+ } & import("pinia").PiniaCustomStateProperties<TenantContextState>) => string | null;
85
+ moduleSet: (state: {
86
+ value: {
87
+ audience: "tenant";
88
+ accountId: string;
89
+ tenantId: string;
90
+ memberId: string;
91
+ moduleKeys: readonly string[];
92
+ permissionKeys: readonly string[];
93
+ authorizationRevision: string;
94
+ } | null;
95
+ generation: number;
96
+ } & import("pinia").PiniaCustomStateProperties<TenantContextState>) => Set<string>;
97
+ permissionSet: (state: {
98
+ value: {
99
+ audience: "tenant";
100
+ accountId: string;
101
+ tenantId: string;
102
+ memberId: string;
103
+ moduleKeys: readonly string[];
104
+ permissionKeys: readonly string[];
105
+ authorizationRevision: string;
106
+ } | null;
107
+ generation: number;
108
+ } & import("pinia").PiniaCustomStateProperties<TenantContextState>) => Set<string>;
109
+ }, {
110
+ replace(context: TenantContextData): void;
111
+ clear(): void;
112
+ }>;
113
+ interface PlatformContextState {
114
+ value: PlatformContextData | null;
115
+ generation: number;
116
+ }
117
+ export declare const usePlatformContext: import("pinia").StoreDefinition<"peanut-admin-platform-context", PlatformContextState, {
118
+ accountId: (state: {
119
+ value: {
120
+ audience: "platform";
121
+ accountId: string;
122
+ operatorId: string;
123
+ permissionKeys: readonly string[];
124
+ authorizationRevision: string;
125
+ } | null;
126
+ generation: number;
127
+ } & import("pinia").PiniaCustomStateProperties<PlatformContextState>) => string | null;
128
+ operatorId: (state: {
129
+ value: {
130
+ audience: "platform";
131
+ accountId: string;
132
+ operatorId: string;
133
+ permissionKeys: readonly string[];
134
+ authorizationRevision: string;
135
+ } | null;
136
+ generation: number;
137
+ } & import("pinia").PiniaCustomStateProperties<PlatformContextState>) => string | null;
138
+ authorizationRevision: (state: {
139
+ value: {
140
+ audience: "platform";
141
+ accountId: string;
142
+ operatorId: string;
143
+ permissionKeys: readonly string[];
144
+ authorizationRevision: string;
145
+ } | null;
146
+ generation: number;
147
+ } & import("pinia").PiniaCustomStateProperties<PlatformContextState>) => string | null;
148
+ permissionSet: (state: {
149
+ value: {
150
+ audience: "platform";
151
+ accountId: string;
152
+ operatorId: string;
153
+ permissionKeys: readonly string[];
154
+ authorizationRevision: string;
155
+ } | null;
156
+ generation: number;
157
+ } & import("pinia").PiniaCustomStateProperties<PlatformContextState>) => Set<string>;
158
+ }, {
159
+ replace(context: PlatformContextData): void;
160
+ clear(): void;
161
+ }>;
162
+ export {};
163
+ //# sourceMappingURL=stores.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../src/auth/stores.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { defineStore } from 'pinia';
2
+ const authState = () => ({
3
+ accessToken: null,
4
+ generation: 0,
5
+ status: 'anonymous',
6
+ });
7
+ const authActions = {
8
+ replaceAccessToken(token) {
9
+ if (token === '') {
10
+ throw new Error('AUTH_ACCESS_TOKEN_EMPTY');
11
+ }
12
+ this.accessToken = token;
13
+ this.status = 'authenticated';
14
+ },
15
+ markRefreshing() {
16
+ this.status = 'refreshing';
17
+ },
18
+ clear() {
19
+ this.accessToken = null;
20
+ this.status = 'anonymous';
21
+ this.generation += 1;
22
+ },
23
+ };
24
+ export const useTenantAuth = defineStore('peanut-admin-tenant-auth', {
25
+ state: authState,
26
+ actions: authActions,
27
+ });
28
+ export const usePlatformAuth = defineStore('peanut-admin-platform-auth', {
29
+ state: authState,
30
+ actions: authActions,
31
+ });
32
+ export const useTenantContext = defineStore('peanut-admin-tenant-context', {
33
+ state: () => ({ value: null, generation: 0 }),
34
+ getters: {
35
+ accountId: (state) => state.value?.accountId ?? null,
36
+ tenantId: (state) => state.value?.tenantId ?? null,
37
+ memberId: (state) => state.value?.memberId ?? null,
38
+ authorizationRevision: (state) => state.value?.authorizationRevision ?? null,
39
+ moduleSet: (state) => new Set(state.value?.moduleKeys ?? []),
40
+ permissionSet: (state) => new Set(state.value?.permissionKeys ?? []),
41
+ },
42
+ actions: {
43
+ replace(context) {
44
+ if (context.audience !== 'tenant') {
45
+ throw new Error('CONTEXT_AUDIENCE_MISMATCH');
46
+ }
47
+ this.value = {
48
+ ...context,
49
+ moduleKeys: [...context.moduleKeys],
50
+ permissionKeys: [...context.permissionKeys],
51
+ };
52
+ this.generation += 1;
53
+ },
54
+ clear() {
55
+ this.value = null;
56
+ this.generation += 1;
57
+ },
58
+ },
59
+ });
60
+ export const usePlatformContext = defineStore('peanut-admin-platform-context', {
61
+ state: () => ({ value: null, generation: 0 }),
62
+ getters: {
63
+ accountId: (state) => state.value?.accountId ?? null,
64
+ operatorId: (state) => state.value?.operatorId ?? null,
65
+ authorizationRevision: (state) => state.value?.authorizationRevision ?? null,
66
+ permissionSet: (state) => new Set(state.value?.permissionKeys ?? []),
67
+ },
68
+ actions: {
69
+ replace(context) {
70
+ if (context.audience !== 'platform') {
71
+ throw new Error('CONTEXT_AUDIENCE_MISMATCH');
72
+ }
73
+ this.value = { ...context, permissionKeys: [...context.permissionKeys] };
74
+ this.generation += 1;
75
+ },
76
+ clear() {
77
+ this.value = null;
78
+ this.generation += 1;
79
+ },
80
+ },
81
+ });
82
+ //# sourceMappingURL=stores.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stores.js","sourceRoot":"","sources":["../../src/auth/stores.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AA0BpC,MAAM,SAAS,GAAG,GAAc,EAAE,CAAC,CAAC;IAClC,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,WAAW;CACpB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG;IAClB,kBAAkB,CAAkB,KAAa;QAC/C,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;IAChC,CAAC;IACD,cAAc;QACZ,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;IAC7B,CAAC;IACD,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IACvB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC,0BAA0B,EAAE;IACnE,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,WAAW;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC,4BAA4B,EAAE;IACvE,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,WAAW;CACrB,CAAC,CAAC;AAOH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC,6BAA6B,EAAE;IACzE,KAAK,EAAE,GAAuB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACjE,OAAO,EAAE;QACP,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI;QACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI;QAClD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI;QAClD,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC/B,KAAK,CAAC,KAAK,EAAE,qBAAqB,IAAI,IAAI;QAC5C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,CAAC;QAC5D,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,IAAI,EAAE,CAAC;KACrE;IACD,OAAO,EAAE;QACP,OAAO,CAAC,OAA0B;YAChC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,KAAK,GAAG;gBACX,GAAG,OAAO;gBACV,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;gBACnC,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;aAC5C,CAAC;YACF,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,KAAK;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACvB,CAAC;KACF;CACF,CAAC,CAAC;AAOH,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,+BAA+B,EAAE;IAC7E,KAAK,EAAE,GAAyB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACnE,OAAO,EAAE;QACP,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI;QACpD,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI;QACtD,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC/B,KAAK,CAAC,KAAK,EAAE,qBAAqB,IAAI,IAAI;QAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,IAAI,EAAE,CAAC;KACrE;IACD,OAAO,EAAE;QACP,OAAO,CAAC,OAA4B;YAClC,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,KAAK;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QACvB,CAAC;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ export interface TenantChoice {
2
+ tenant_id: number;
3
+ tenant_code: string;
4
+ tenant_name: string;
5
+ member_id: number;
6
+ member_display_name: string;
7
+ }
8
+ export interface TenantSelection {
9
+ state: 'tenant_selection_required';
10
+ challenge_token: string;
11
+ expires_at: string;
12
+ tenants: TenantChoice[];
13
+ }
14
+ export interface TenantAuthentication {
15
+ state: 'authenticated';
16
+ access_token: string;
17
+ token_type: 'Bearer';
18
+ expires_in: number;
19
+ context: {
20
+ tenant_id: string;
21
+ account_id: string;
22
+ tenant_member_id: string;
23
+ };
24
+ }
25
+ export type TenantSessionOutcome = TenantSelection | TenantAuthentication;
26
+ export declare const isMultiTenantDeployment: (value: unknown) => boolean;
27
+ export declare const isTenantAccessToken: (token: string | null) => boolean;
28
+ //# sourceMappingURL=tenant-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-session.d.ts","sourceRoot":"","sources":["../../src/auth/tenant-session.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,2BAA2B,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,eAAe,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,oBAAoB,CAAC;AAE1E,eAAO,MAAM,uBAAuB,GAAI,OAAO,OAAO,KAAG,OAC/B,CAAC;AAE3B,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,GAAG,IAAI,KAAG,OACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const isMultiTenantDeployment = (value) => value === 'multi-tenant';
2
+ export const isTenantAccessToken = (token) => token?.startsWith('pa_tat_') === true;
3
+ //# sourceMappingURL=tenant-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-session.js","sourceRoot":"","sources":["../../src/auth/tenant-session.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAc,EAAW,EAAE,CACjE,KAAK,KAAK,cAAc,CAAC;AAE3B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAoB,EAAW,EAAE,CACnE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type Ref } from 'vue';
2
+ export type AsyncActionResult<TData> = {
3
+ readonly status: 'completed';
4
+ readonly data: TData;
5
+ } | {
6
+ readonly status: 'cancelled';
7
+ } | {
8
+ readonly status: 'failed';
9
+ readonly error: string;
10
+ } | {
11
+ readonly status: 'busy';
12
+ };
13
+ export interface AsyncActionState {
14
+ readonly loading: Ref<boolean>;
15
+ readonly error: Ref<string | null>;
16
+ run: <TData>(action: (context: {
17
+ readonly signal: AbortSignal;
18
+ }) => Promise<TData>) => Promise<AsyncActionResult<TData>>;
19
+ cancel: () => void;
20
+ }
21
+ /** Single-flight form/action state with cancellation and late-result guards. */
22
+ export declare const useAsyncAction: (errorMessage: (error: unknown) => string) => AsyncActionState;
23
+ //# sourceMappingURL=useAsyncAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncAction.d.ts","sourceRoot":"","sources":["../../src/data/useAsyncAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAIpD,MAAM,MAAM,iBAAiB,CAAC,KAAK,IAC/B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,GAAG,EAAE,CAAC,KAAK,EACT,MAAM,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,KAAK,CAAC,KAClE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,gFAAgF;AAChF,eAAO,MAAM,cAAc,GACzB,cAAc,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,KACvC,gBAuCF,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { onScopeDispose, ref } from 'vue';
2
+ import { createTenantLifecycle } from '../lifecycle/tenant.js';
3
+ /** Single-flight form/action state with cancellation and late-result guards. */
4
+ export const useAsyncAction = (errorMessage) => {
5
+ const loading = ref(false);
6
+ const error = ref(null);
7
+ const lifecycle = createTenantLifecycle();
8
+ const cancel = () => {
9
+ lifecycle.invalidate();
10
+ loading.value = false;
11
+ error.value = null;
12
+ };
13
+ const run = async (action) => {
14
+ if (loading.value)
15
+ return { status: 'busy' };
16
+ lifecycle.invalidate();
17
+ const ticket = lifecycle.capture();
18
+ loading.value = true;
19
+ error.value = null;
20
+ try {
21
+ const data = await action({ signal: ticket.signal });
22
+ return ticket.isCurrent()
23
+ ? { status: 'completed', data }
24
+ : { status: 'cancelled' };
25
+ }
26
+ catch (cause) {
27
+ if (!ticket.isCurrent())
28
+ return { status: 'cancelled' };
29
+ const message = errorMessage(cause);
30
+ error.value = message;
31
+ return { status: 'failed', error: message };
32
+ }
33
+ finally {
34
+ if (ticket.isCurrent())
35
+ loading.value = false;
36
+ }
37
+ };
38
+ onScopeDispose(cancel);
39
+ return { loading, error, run, cancel };
40
+ };
41
+ //# sourceMappingURL=useAsyncAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncAction.js","sourceRoot":"","sources":["../../src/data/useAsyncAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,GAAG,EAAY,MAAM,KAAK,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAiB/D,gFAAgF;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,YAAwC,EACtB,EAAE;IACpB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAgB,IAAI,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAE1C,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,SAAS,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QACtB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,KAAK,EACf,MAAqE,EAClC,EAAE;QACrC,IAAI,OAAO,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAE7C,SAAS,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC,SAAS,EAAE;gBACvB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE;gBAC/B,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gBAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACpC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;YACtB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC9C,CAAC;gBAAS,CAAC;YACT,IAAI,MAAM,CAAC,SAAS,EAAE;gBAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAChD,CAAC;IACH,CAAC,CAAC;IAEF,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type Ref, type ShallowRef } from 'vue';
2
+ export interface AsyncListQuery<TFilters extends Record<string, unknown>> {
3
+ readonly filters: Readonly<TFilters>;
4
+ readonly page: number;
5
+ readonly pageSize: number;
6
+ readonly signal: AbortSignal;
7
+ }
8
+ export interface AsyncListPage<TItem> {
9
+ readonly items: readonly TItem[];
10
+ readonly total: number;
11
+ readonly page: number;
12
+ readonly pageSize: number;
13
+ }
14
+ export interface AsyncListPagination {
15
+ page: number;
16
+ pageSize: number;
17
+ total: number;
18
+ }
19
+ export interface AsyncListOptions<TItem, TFilters extends Record<string, unknown>> {
20
+ readonly initialFilters: TFilters;
21
+ readonly initialPageSize: number;
22
+ readonly load: (query: AsyncListQuery<TFilters>) => Promise<AsyncListPage<TItem>>;
23
+ readonly errorMessage: (error: unknown) => string;
24
+ }
25
+ export interface AsyncListState<TItem, TFilters extends Record<string, unknown>> {
26
+ readonly items: ShallowRef<readonly TItem[]>;
27
+ readonly filters: Ref<TFilters>;
28
+ readonly pagination: AsyncListPagination;
29
+ readonly loading: Ref<boolean>;
30
+ readonly error: Ref<string | null>;
31
+ load: (page?: number) => Promise<boolean>;
32
+ reload: () => Promise<boolean>;
33
+ resetFilters: () => void;
34
+ clear: () => void;
35
+ dispose: () => void;
36
+ }
37
+ /**
38
+ * Request-scoped list state for ordinary Vue pages. Each load invalidates the
39
+ * previous generation, so an aborted or late response cannot overwrite data
40
+ * loaded for a newer filter, account, or Tenant context.
41
+ */
42
+ export declare const useAsyncList: <TItem, TFilters extends Record<string, unknown>>(options: AsyncListOptions<TItem, TFilters>) => AsyncListState<TItem, TFilters>;
43
+ //# sourceMappingURL=useAsyncList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncList.d.ts","sourceRoot":"","sources":["../../src/data/useAsyncList.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,GAAG,EACR,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AAIb,MAAM,WAAW,cAAc,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa,CAAC,KAAK;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB,CAC/B,KAAK,EACL,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAExC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,CACb,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,KAC5B,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACnD;AAED,MAAM,WAAW,cAAc,CAC7B,KAAK,EACL,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAExC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,EAAE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1E,SAAS,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,KACzC,cAAc,CAAC,KAAK,EAAE,QAAQ,CA4EhC,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { onScopeDispose, reactive, ref, shallowRef, } from 'vue';
2
+ import { createTenantLifecycle } from '../lifecycle/tenant.js';
3
+ const positiveInteger = (value, fallback) => Number.isInteger(value) && value > 0 ? value : fallback;
4
+ const nonNegativeInteger = (value) => Number.isInteger(value) && value >= 0 ? value : 0;
5
+ /**
6
+ * Request-scoped list state for ordinary Vue pages. Each load invalidates the
7
+ * previous generation, so an aborted or late response cannot overwrite data
8
+ * loaded for a newer filter, account, or Tenant context.
9
+ */
10
+ export const useAsyncList = (options) => {
11
+ const initialFilters = { ...options.initialFilters };
12
+ const initialPageSize = positiveInteger(options.initialPageSize, 20);
13
+ const items = shallowRef([]);
14
+ const filters = ref({ ...initialFilters });
15
+ const pagination = reactive({
16
+ page: 1,
17
+ pageSize: initialPageSize,
18
+ total: 0,
19
+ });
20
+ const loading = ref(false);
21
+ const error = ref(null);
22
+ const lifecycle = createTenantLifecycle();
23
+ const load = async (page = pagination.page) => {
24
+ lifecycle.invalidate();
25
+ const ticket = lifecycle.capture();
26
+ loading.value = true;
27
+ error.value = null;
28
+ try {
29
+ const result = await options.load({
30
+ filters: { ...filters.value },
31
+ page: positiveInteger(page, 1),
32
+ pageSize: pagination.pageSize,
33
+ signal: ticket.signal,
34
+ });
35
+ if (!ticket.isCurrent())
36
+ return false;
37
+ items.value = [...result.items];
38
+ pagination.page = positiveInteger(result.page, positiveInteger(page, 1));
39
+ pagination.pageSize = positiveInteger(result.pageSize, pagination.pageSize);
40
+ pagination.total = nonNegativeInteger(result.total);
41
+ return true;
42
+ }
43
+ catch (cause) {
44
+ if (!ticket.isCurrent())
45
+ return false;
46
+ error.value = options.errorMessage(cause);
47
+ return false;
48
+ }
49
+ finally {
50
+ if (ticket.isCurrent())
51
+ loading.value = false;
52
+ }
53
+ };
54
+ const clear = () => {
55
+ lifecycle.invalidate();
56
+ items.value = [];
57
+ pagination.page = 1;
58
+ pagination.total = 0;
59
+ loading.value = false;
60
+ error.value = null;
61
+ };
62
+ const dispose = () => {
63
+ lifecycle.invalidate();
64
+ loading.value = false;
65
+ };
66
+ onScopeDispose(dispose);
67
+ return {
68
+ items,
69
+ filters,
70
+ pagination,
71
+ loading,
72
+ error,
73
+ load,
74
+ reload: () => load(pagination.page),
75
+ resetFilters: () => {
76
+ filters.value = { ...initialFilters };
77
+ },
78
+ clear,
79
+ dispose,
80
+ };
81
+ };
82
+ //# sourceMappingURL=useAsyncList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncList.js","sourceRoot":"","sources":["../../src/data/useAsyncList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export declare const PEANUT_ADMIN_VUE_PACKAGE: "@peanut-admin/vue";
2
+ export declare const PEANUT_ADMIN_VUE_VERSION: "4.0.0-rc.0";
3
+ export type { ApiAudience } from './api/audience.js';
4
+ export { createBrowserRefreshCoordinator, createMemoryRefreshCoordinator, } from './api/refresh.js';
5
+ export type { RefreshAttempt, RefreshCoordinator } from './api/refresh.js';
6
+ export { isProblemCode, parseProblemDetails } from './api/problem.js';
7
+ export type { ProblemDetails, ProblemFieldError } from './api/problem.js';
8
+ export { hasAllPermissions, hasPermission } from './access/access.js';
9
+ export { useAccess } from './access/useAccess.js';
10
+ export type { AccessHints } from './access/useAccess.js';
11
+ export { evaluateRequiredPermissions, permissionEvaluatorSlot, PERMISSION_EVALUATOR_OVERRIDE_KEY, } from './access/permission-policy.js';
12
+ export type { PermissionEvaluator } from './access/permission-policy.js';
13
+ export { usePlatformAuth, usePlatformContext, useTenantAuth, useTenantContext, } from './auth/stores.js';
14
+ export type { PlatformContextData, TenantContextData } from './auth/stores.js';
15
+ export { isMultiTenantDeployment, isTenantAccessToken, } from './auth/tenant-session.js';
16
+ export type { TenantAuthentication, TenantChoice, TenantSelection, TenantSessionOutcome, } from './auth/tenant-session.js';
17
+ export { disposeTenantState, registerTenantDisposer, } from './lifecycle/tenant.js';
18
+ export { createTenantLifecycle } from './lifecycle/tenant.js';
19
+ export type { TenantDisposer, TenantLifecycle, TenantLifecycleTicket, } from './lifecycle/tenant.js';
20
+ export { useAsyncAction } from './data/useAsyncAction.js';
21
+ export type { AsyncActionResult, AsyncActionState, } from './data/useAsyncAction.js';
22
+ export { useAsyncList } from './data/useAsyncList.js';
23
+ export type { AsyncListOptions, AsyncListPage, AsyncListPagination, AsyncListQuery, AsyncListState, } from './data/useAsyncList.js';
24
+ export { createMenuRouteRegistry, defineAdminModule, } from './module/contribution.js';
25
+ export { collectPluginContributions, routesForTenantModules, } from './module/plugin-contribution-policy.js';
26
+ export { enabledTenantModulesFromRoutes } from './module/tenant-modules.js';
27
+ export type { AdminModuleContribution, AdminModuleLocaleContribution, AdminModuleRoute, AdminModuleShellSlotContribution, AdminModuleShellSlotName, AdminModuleStoreContribution, AdminRouteAccess, MenuRouteRegistry, } from './module/contribution.js';
28
+ export type { PluginFrontendContribution, PluginFrontendRoute, } from './module/plugin-contribution-policy.js';
29
+ export type { TenantModuleRoute } from './module/tenant-modules.js';
30
+ export { defineAdminHostConfig } from './runtime/config.js';
31
+ export type { AdminAudienceHostConfig, AdminHostConfig, } from './runtime/config.js';
32
+ export { mapAdminRuntimeError } from './runtime/errors.js';
33
+ export type { AdminRuntimeErrorKind, AdminRuntimeErrorState, } from './runtime/errors.js';
34
+ export { runAdminRouteGuard } from './runtime/guard.js';
35
+ export type { AdminRouteGuardDependencies, AdminRouteGuardInput, AdminRouteGuardResult, } from './runtime/guard.js';
36
+ export { createAdminNavigationRegistry } from './runtime/navigation.js';
37
+ export type { AdminNavigationMenuInput, AdminNavigationRegistry, AdminNavigationRegistryInput, AdminNavigationRoute, } from './runtime/navigation.js';
38
+ export { createAdminOverrideRegistry, defineAdminOverrideSlot, } from './runtime/overrides.js';
39
+ export type { AdminOverride, AdminOverrideKind, AdminOverrideRegistry, AdminOverrideRegistryInput, AdminOverrideResolution, AdminOverrideResolutionMetadata, AdminOverrideSlot, AdminOverrideSource, } from './runtime/overrides.js';
40
+ export { useOperationTargets } from './targets/store.js';
41
+ export type { OperationTargetScope, TargetCardinality, TargetCandidate, TypedTarget, TypedTargetSet, } from './targets/store.js';
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,EAAG,mBAA4B,CAAC;AACrE,eAAO,MAAM,wBAAwB,EAAG,YAAqB,CAAC;AAE9D,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,iCAAiC,GAClC,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,cAAc,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,gBAAgB,EAChB,gCAAgC,EAChC,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EACV,uBAAuB,EACvB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EACV,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EACV,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,+BAA+B,EAC/B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ export const PEANUT_ADMIN_VUE_PACKAGE = '@peanut-admin/vue';
2
+ export const PEANUT_ADMIN_VUE_VERSION = '4.0.0-rc.0';
3
+ export { createBrowserRefreshCoordinator, createMemoryRefreshCoordinator, } from './api/refresh.js';
4
+ export { isProblemCode, parseProblemDetails } from './api/problem.js';
5
+ export { hasAllPermissions, hasPermission } from './access/access.js';
6
+ export { useAccess } from './access/useAccess.js';
7
+ export { evaluateRequiredPermissions, permissionEvaluatorSlot, PERMISSION_EVALUATOR_OVERRIDE_KEY, } from './access/permission-policy.js';
8
+ export { usePlatformAuth, usePlatformContext, useTenantAuth, useTenantContext, } from './auth/stores.js';
9
+ export { isMultiTenantDeployment, isTenantAccessToken, } from './auth/tenant-session.js';
10
+ export { disposeTenantState, registerTenantDisposer, } from './lifecycle/tenant.js';
11
+ export { createTenantLifecycle } from './lifecycle/tenant.js';
12
+ export { useAsyncAction } from './data/useAsyncAction.js';
13
+ export { useAsyncList } from './data/useAsyncList.js';
14
+ export { createMenuRouteRegistry, defineAdminModule, } from './module/contribution.js';
15
+ export { collectPluginContributions, routesForTenantModules, } from './module/plugin-contribution-policy.js';
16
+ export { enabledTenantModulesFromRoutes } from './module/tenant-modules.js';
17
+ export { defineAdminHostConfig } from './runtime/config.js';
18
+ export { mapAdminRuntimeError } from './runtime/errors.js';
19
+ export { runAdminRouteGuard } from './runtime/guard.js';
20
+ export { createAdminNavigationRegistry } from './runtime/navigation.js';
21
+ export { createAdminOverrideRegistry, defineAdminOverrideSlot, } from './runtime/overrides.js';
22
+ export { useOperationTargets } from './targets/store.js';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,mBAA4B,CAAC;AACrE,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAqB,CAAC;AAG9D,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,iCAAiC,GAClC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAM9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQtD,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAgB5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAK3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAOxE,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAWhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export type TenantDisposer = () => void | Promise<void>;
2
+ export interface TenantLifecycleTicket {
3
+ generation: number;
4
+ signal: AbortSignal;
5
+ isCurrent: () => boolean;
6
+ }
7
+ export interface TenantLifecycle {
8
+ current: () => number;
9
+ capture: () => TenantLifecycleTicket;
10
+ invalidate: () => number;
11
+ }
12
+ export declare const registerTenantDisposer: (key: string, disposer: TenantDisposer) => (() => void);
13
+ export declare const disposeTenantState: () => Promise<void>;
14
+ export declare const createTenantLifecycle: () => TenantLifecycle;
15
+ //# sourceMappingURL=tenant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../src/lifecycle/tenant.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,qBAAqB,CAAC;IACrC,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAID,eAAO,MAAM,sBAAsB,GACjC,KAAK,MAAM,EACX,UAAU,cAAc,KACvB,CAAC,MAAM,IAAI,CAWb,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,IAAI,CASvD,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAO,eAsBxC,CAAC"}