@datatechsolutions/ui 2.11.81 → 2.11.83

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 (57) hide show
  1. package/dist/astrlabe/contracts.d.mts +5 -0
  2. package/dist/astrlabe/contracts.d.ts +5 -0
  3. package/dist/astrlabe/index.d.mts +59 -82
  4. package/dist/astrlabe/index.d.ts +59 -82
  5. package/dist/astrlabe/index.js +179 -4777
  6. package/dist/astrlabe/index.js.map +1 -1
  7. package/dist/astrlabe/index.mjs +3 -4740
  8. package/dist/astrlabe/index.mjs.map +1 -1
  9. package/dist/astrlabe/workflow-canvas.d.mts +69 -5
  10. package/dist/astrlabe/workflow-canvas.d.ts +69 -5
  11. package/dist/chunk-6PBTB5ZX.js +165 -0
  12. package/dist/chunk-6PBTB5ZX.js.map +1 -0
  13. package/dist/chunk-HZ4LOVHM.js +46 -0
  14. package/dist/chunk-HZ4LOVHM.js.map +1 -0
  15. package/dist/chunk-JFWZHROG.js +4996 -0
  16. package/dist/chunk-JFWZHROG.js.map +1 -0
  17. package/dist/chunk-UHHPBREK.mjs +135 -0
  18. package/dist/chunk-UHHPBREK.mjs.map +1 -0
  19. package/dist/chunk-UVGMKHWH.mjs +4951 -0
  20. package/dist/chunk-UVGMKHWH.mjs.map +1 -0
  21. package/dist/chunk-ZJPNP2YW.mjs +44 -0
  22. package/dist/chunk-ZJPNP2YW.mjs.map +1 -0
  23. package/dist/{workflow-canvas-NSxfr5dy.d.ts → index-AioB90qq.d.mts} +2 -67
  24. package/dist/{workflow-canvas-D4928AfA.d.mts → index-D5ai0cGZ.d.ts} +2 -67
  25. package/dist/platform/index.d.mts +41 -0
  26. package/dist/platform/index.d.ts +41 -0
  27. package/dist/platform/index.js +237 -0
  28. package/dist/platform/index.js.map +1 -0
  29. package/dist/platform/index.mjs +109 -0
  30. package/dist/platform/index.mjs.map +1 -0
  31. package/dist/platform/pages/index.d.mts +272 -0
  32. package/dist/platform/pages/index.d.ts +272 -0
  33. package/dist/platform/pages/index.js +1793 -0
  34. package/dist/platform/pages/index.js.map +1 -0
  35. package/dist/platform/pages/index.mjs +1777 -0
  36. package/dist/platform/pages/index.mjs.map +1 -0
  37. package/dist/platform/rbac.d.mts +41 -0
  38. package/dist/platform/rbac.d.ts +41 -0
  39. package/dist/platform/rbac.js +13 -0
  40. package/dist/platform/rbac.js.map +1 -0
  41. package/dist/platform/rbac.mjs +4 -0
  42. package/dist/platform/rbac.mjs.map +1 -0
  43. package/dist/platform/utils/index.d.mts +32 -0
  44. package/dist/platform/utils/index.d.ts +32 -0
  45. package/dist/platform/utils/index.js +131 -0
  46. package/dist/platform/utils/index.js.map +1 -0
  47. package/dist/platform/utils/index.mjs +119 -0
  48. package/dist/platform/utils/index.mjs.map +1 -0
  49. package/dist/platform/windsock-admin-client.d.mts +57 -0
  50. package/dist/platform/windsock-admin-client.d.ts +57 -0
  51. package/dist/platform/windsock-admin-client.js +125 -0
  52. package/dist/platform/windsock-admin-client.js.map +1 -0
  53. package/dist/platform/windsock-admin-client.mjs +4 -0
  54. package/dist/platform/windsock-admin-client.mjs.map +1 -0
  55. package/dist/rule-form-F5jBOeqk.d.mts +79 -0
  56. package/dist/rule-form-F5jBOeqk.d.ts +79 -0
  57. package/package.json +27 -1
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ // src/platform/rbac.ts
3
+ function matchPermission(pattern, target) {
4
+ if (pattern === "*") return true;
5
+ if (pattern === target) return true;
6
+ const patternParts = pattern.split(":");
7
+ const targetParts = target.split(":");
8
+ for (let i = 0; i < patternParts.length; i++) {
9
+ if (patternParts[i] === "*") return true;
10
+ if (patternParts[i] !== targetParts[i]) return false;
11
+ }
12
+ return patternParts.length === targetParts.length;
13
+ }
14
+ function createPlatformRbac(opts) {
15
+ const ROLE_DEFINITIONS = opts.roles;
16
+ const MODULE_PERMISSIONS = opts.modulePermissions ?? {};
17
+ const PERMISSION_CLAIMS_MAP = opts.permissionClaimsMap;
18
+ const knownRoles = Object.keys(ROLE_DEFINITIONS);
19
+ const fallbackRole = opts.defaultRole ?? knownRoles[0];
20
+ function normalizePlatformRole(input) {
21
+ if (typeof input === "string" && input in ROLE_DEFINITIONS) {
22
+ return input;
23
+ }
24
+ return fallbackRole;
25
+ }
26
+ function can(user, permission) {
27
+ if (!user) return false;
28
+ const userClaims = user.permissions ?? [];
29
+ const requiredClaims = PERMISSION_CLAIMS_MAP[permission] ?? [];
30
+ return requiredClaims.some(
31
+ (claim) => userClaims.some((userClaim) => matchPermission(userClaim, claim))
32
+ );
33
+ }
34
+ return {
35
+ ROLE_DEFINITIONS,
36
+ MODULE_PERMISSIONS,
37
+ normalizePlatformRole,
38
+ can
39
+ };
40
+ }
41
+
42
+ export { createPlatformRbac };
43
+ //# sourceMappingURL=chunk-ZJPNP2YW.mjs.map
44
+ //# sourceMappingURL=chunk-ZJPNP2YW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/rbac.ts"],"names":[],"mappings":";AAiDA,SAAS,eAAA,CAAgB,SAAiB,MAAA,EAAyB;AACjE,EAAA,IAAI,OAAA,KAAY,KAAK,OAAO,IAAA;AAC5B,EAAA,IAAI,OAAA,KAAY,QAAQ,OAAO,IAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,IAAA,IAAI,YAAA,CAAa,CAAC,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AACpC,IAAA,IAAI,aAAa,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,GAAG,OAAO,KAAA;AAAA,EACjD;AACA,EAAA,OAAO,YAAA,CAAa,WAAW,WAAA,CAAY,MAAA;AAC7C;AAEO,SAAS,mBAGd,IAAA,EAAuF;AACvF,EAAA,MAAM,mBAAmB,IAAA,CAAK,KAAA;AAC9B,EAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,iBAAA,IAAsB,EAAC;AACvD,EAAA,MAAM,wBAAwB,IAAA,CAAK,mBAAA;AAInC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,gBAAgB,CAAA;AAC/C,EAAA,MAAM,YAAA,GAAsB,IAAA,CAAK,WAAA,IAAgB,UAAA,CAAW,CAAC,CAAA;AAE7D,EAAA,SAAS,sBAAsB,KAAA,EAAuB;AACpD,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAa,KAAA,IAAmB,gBAAA,EAAkB;AACrE,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,SAAS,GAAA,CAAI,MAAuB,UAAA,EAAkC;AACpE,IAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,IAAA,MAAM,UAAA,GAAc,IAAA,CAAK,WAAA,IAAe,EAAC;AAEzC,IAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,UAAU,CAAA,IAAK,EAAC;AAC7D,IAAA,OAAO,cAAA,CAAe,IAAA;AAAA,MAAK,CAAC,UAC1B,UAAA,CAAW,IAAA,CAAK,CAAC,SAAA,KAAc,eAAA,CAAgB,SAAA,EAAW,KAAK,CAAC;AAAA,KAClE;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF;AACF","file":"chunk-ZJPNP2YW.mjs","sourcesContent":["import type { AuthUser } from '@datatechsolutions/windsock/client'\n\n/**\n * Generic role-based access factory shared across platform apps (astrlabe,\n * kori-erp, etc). Each app instantiates this with its own role + permission\n * unions and seed-claim mapping. The factory closes over the config and\n * exports `ROLE_DEFINITIONS`, `MODULE_PERMISSIONS`, `normalizePlatformRole`,\n * and `can()` — the same surface the per-app file used to expose.\n *\n * The factory deliberately does not hardcode any specific role enum here —\n * astrlabe, kori-erp, and future apps each pick their own union (admin,\n * manager, analyst, viewer, …) and pass the role definitions in.\n */\n\nexport type PlatformRoleDefinition<TRole extends string> = {\n id: TRole\n label: string\n description: string\n}\n\nexport type CreatePlatformRbacOptions<\n TRole extends string,\n TPermission extends string,\n> = {\n /** Definitions for every role the app supports (id/label/description). */\n roles: Record<TRole, PlatformRoleDefinition<TRole>>\n /**\n * Maps each app-level permission to one or more JWT permission claim\n * strings. `can()` returns true when ANY of the listed claims (using\n * wildcard matching) is present in the user's JWT permissions.\n */\n permissionClaimsMap: Record<TPermission, readonly string[]>\n /** Optional map from navigation/module IDs to required permissions. */\n modulePermissions?: Record<string, TPermission>\n /** Role to fall back to when an unknown role string comes in. */\n defaultRole?: TRole\n}\n\nexport type PlatformRbac<TRole extends string, TPermission extends string> = {\n ROLE_DEFINITIONS: Record<TRole, PlatformRoleDefinition<TRole>>\n MODULE_PERMISSIONS: Record<string, TPermission>\n normalizePlatformRole: (input: unknown) => TRole\n can: (user: AuthUser | null, permission: TPermission) => boolean\n}\n\n/**\n * Match a permission string against a pattern (supports wildcards).\n * Same logic as windsock's usePermissionChecker.\n */\nfunction matchPermission(pattern: string, target: string): boolean {\n if (pattern === '*') return true\n if (pattern === target) return true\n const patternParts = pattern.split(':')\n const targetParts = target.split(':')\n for (let i = 0; i < patternParts.length; i++) {\n if (patternParts[i] === '*') return true\n if (patternParts[i] !== targetParts[i]) return false\n }\n return patternParts.length === targetParts.length\n}\n\nexport function createPlatformRbac<\n TRole extends string,\n TPermission extends string,\n>(opts: CreatePlatformRbacOptions<TRole, TPermission>): PlatformRbac<TRole, TPermission> {\n const ROLE_DEFINITIONS = opts.roles\n const MODULE_PERMISSIONS = opts.modulePermissions ?? ({} as Record<string, TPermission>)\n const PERMISSION_CLAIMS_MAP = opts.permissionClaimsMap\n\n // Pick the fallback role: explicit `defaultRole` first, then the first\n // entry in the roles map. We assume there's at least one role.\n const knownRoles = Object.keys(ROLE_DEFINITIONS) as TRole[]\n const fallbackRole: TRole = opts.defaultRole ?? (knownRoles[0] as TRole)\n\n function normalizePlatformRole(input: unknown): TRole {\n if (typeof input === 'string' && (input as TRole) in ROLE_DEFINITIONS) {\n return input as TRole\n }\n return fallbackRole\n }\n\n function can(user: AuthUser | null, permission: TPermission): boolean {\n if (!user) return false\n const userClaims = (user.permissions ?? []) as string[]\n\n const requiredClaims = PERMISSION_CLAIMS_MAP[permission] ?? []\n return requiredClaims.some((claim) =>\n userClaims.some((userClaim) => matchPermission(userClaim, claim))\n )\n }\n\n return {\n ROLE_DEFINITIONS,\n MODULE_PERMISSIONS,\n normalizePlatformRole,\n can,\n }\n}\n"]}
@@ -1,7 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ComponentProps } from 'react';
3
- import { NodeTypes } from '@xyflow/react';
4
- import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig, AgentModel, AgentTool, WorkflowGraph, LogicNodeConfig } from './astrlabe/contracts.js';
1
+ import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig } from './astrlabe/contracts.mjs';
5
2
 
6
3
  type WorkflowCardDisplayMode = 'detailed' | 'compact';
7
4
  type WorkflowEntityDefinition = {
@@ -208,66 +205,4 @@ type GroupNodeData = {
208
205
  onRemoveFromCanvas?: (nodeId: string) => void;
209
206
  };
210
207
 
211
- type AgentModalRenderProps = {
212
- agent: AgentWithPrompts | null;
213
- models: AgentModel[];
214
- open: boolean;
215
- isCreateMode: boolean;
216
- onClose: () => void;
217
- onSaved: () => void;
218
- };
219
- type LogicNodeModalRenderProps = {
220
- nodeId: string | null;
221
- nodeLabel: string;
222
- config: LogicNodeConfig | null;
223
- open: boolean;
224
- onClose: () => void;
225
- onSave: (nodeId: string, updatedConfig: LogicNodeConfig) => void;
226
- entities: WorkflowEntityDefinition[];
227
- };
228
- type WorkflowCanvasProps = {
229
- agents: AgentWithPrompts[];
230
- models: AgentModel[];
231
- tools?: WorkflowTool[];
232
- agentTools?: AgentTool[];
233
- rules?: AgentRule[];
234
- entities?: WorkflowEntityDefinition[];
235
- datasources?: Array<{
236
- id: string;
237
- name: string;
238
- dialect: string;
239
- }>;
240
- onLoadTables?: (datasourceId: string) => Promise<string[]>;
241
- onLoadSchema?: (datasourceId: string, table: string) => Promise<Array<{
242
- name: string;
243
- type: string;
244
- nullable?: boolean;
245
- }>>;
246
- initialGraph?: WorkflowGraph | null;
247
- onGraphChange?: (graph: WorkflowGraph) => void;
248
- onEditTool?: (tool: WorkflowTool) => void;
249
- onToggleTool?: (tool: WorkflowTool) => void;
250
- onEditRule?: (rule: AgentRule) => void;
251
- onToggleRule?: (rule: AgentRule) => void;
252
- onCancelCreateAgent?: () => void;
253
- onAgentSaved?: () => void;
254
- isCreatingAgent?: boolean;
255
- /** Custom node type components — merged with built-in edge types */
256
- nodeTypes?: NodeTypes;
257
- /** Optional: render the AgentModal externally (frontend provides the component) */
258
- renderAgentModal?: (props: AgentModalRenderProps) => React.ReactNode;
259
- /** Optional: render a custom LogicNodeModal; defaults to internal modal */
260
- renderLogicNodeModal?: (props: LogicNodeModalRenderProps) => React.ReactNode;
261
- };
262
- declare function WorkflowCanvas(props: WorkflowCanvasProps): react_jsx_runtime.JSX.Element;
263
-
264
- type BuilderCanvasProps = ComponentProps<typeof WorkflowCanvas>;
265
- type WorkspaceProps = {
266
- locale?: string;
267
- messages?: Record<string, unknown>;
268
- className?: string;
269
- workflowId?: string;
270
- } & Partial<BuilderCanvasProps>;
271
- declare function Workspace({ locale, messages, className, workflowId, ...canvasProps }: WorkspaceProps): react_jsx_runtime.JSX.Element;
272
-
273
- export { type AgentWithPrompts as A, type CodeNodeData as C, type DocumentExtractorNodeData as D, type EntityNodeData as E, type GroupNodeData as G, type HttpRequestNodeData as H, type IfElseNodeData as I, type KnowledgeBaseNodeData as K, type ListOperatorNodeData as L, type ModelProviderNodeData as M, type NoteNodeData as N, type ParameterExtractorNodeData as P, type QuestionClassifierNodeData as Q, type RuleNodeData as R, type StartNodeData as S, type ToolCanvasData as T, type VariableAssignerNodeData as V, type WorkflowEntityDefinition as W, type AgentNodeData as a, type EndNodeData as b, type TemplateTransformNodeData as c, type IterationNodeData as d, type AnswerNodeData as e, type VariableAggregatorNodeData as f, type IterationStartNodeData as g, type WorkspaceProps as h, type AgentNodeTool as i, Workspace as j };
208
+ export type { AgentWithPrompts as A, CodeNodeData as C, DocumentExtractorNodeData as D, EntityNodeData as E, GroupNodeData as G, HttpRequestNodeData as H, IfElseNodeData as I, KnowledgeBaseNodeData as K, ListOperatorNodeData as L, ModelProviderNodeData as M, NoteNodeData as N, ParameterExtractorNodeData as P, QuestionClassifierNodeData as Q, RuleNodeData as R, StartNodeData as S, ToolCanvasData as T, VariableAssignerNodeData as V, WorkflowEntityDefinition as W, AgentNodeData as a, EndNodeData as b, TemplateTransformNodeData as c, IterationNodeData as d, AnswerNodeData as e, VariableAggregatorNodeData as f, IterationStartNodeData as g, AgentNodeTool as h };
@@ -1,7 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ComponentProps } from 'react';
3
- import { NodeTypes } from '@xyflow/react';
4
- import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig, AgentModel, AgentTool, WorkflowGraph, LogicNodeConfig } from './astrlabe/contracts.mjs';
1
+ import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig } from './astrlabe/contracts.js';
5
2
 
6
3
  type WorkflowCardDisplayMode = 'detailed' | 'compact';
7
4
  type WorkflowEntityDefinition = {
@@ -208,66 +205,4 @@ type GroupNodeData = {
208
205
  onRemoveFromCanvas?: (nodeId: string) => void;
209
206
  };
210
207
 
211
- type AgentModalRenderProps = {
212
- agent: AgentWithPrompts | null;
213
- models: AgentModel[];
214
- open: boolean;
215
- isCreateMode: boolean;
216
- onClose: () => void;
217
- onSaved: () => void;
218
- };
219
- type LogicNodeModalRenderProps = {
220
- nodeId: string | null;
221
- nodeLabel: string;
222
- config: LogicNodeConfig | null;
223
- open: boolean;
224
- onClose: () => void;
225
- onSave: (nodeId: string, updatedConfig: LogicNodeConfig) => void;
226
- entities: WorkflowEntityDefinition[];
227
- };
228
- type WorkflowCanvasProps = {
229
- agents: AgentWithPrompts[];
230
- models: AgentModel[];
231
- tools?: WorkflowTool[];
232
- agentTools?: AgentTool[];
233
- rules?: AgentRule[];
234
- entities?: WorkflowEntityDefinition[];
235
- datasources?: Array<{
236
- id: string;
237
- name: string;
238
- dialect: string;
239
- }>;
240
- onLoadTables?: (datasourceId: string) => Promise<string[]>;
241
- onLoadSchema?: (datasourceId: string, table: string) => Promise<Array<{
242
- name: string;
243
- type: string;
244
- nullable?: boolean;
245
- }>>;
246
- initialGraph?: WorkflowGraph | null;
247
- onGraphChange?: (graph: WorkflowGraph) => void;
248
- onEditTool?: (tool: WorkflowTool) => void;
249
- onToggleTool?: (tool: WorkflowTool) => void;
250
- onEditRule?: (rule: AgentRule) => void;
251
- onToggleRule?: (rule: AgentRule) => void;
252
- onCancelCreateAgent?: () => void;
253
- onAgentSaved?: () => void;
254
- isCreatingAgent?: boolean;
255
- /** Custom node type components — merged with built-in edge types */
256
- nodeTypes?: NodeTypes;
257
- /** Optional: render the AgentModal externally (frontend provides the component) */
258
- renderAgentModal?: (props: AgentModalRenderProps) => React.ReactNode;
259
- /** Optional: render a custom LogicNodeModal; defaults to internal modal */
260
- renderLogicNodeModal?: (props: LogicNodeModalRenderProps) => React.ReactNode;
261
- };
262
- declare function WorkflowCanvas(props: WorkflowCanvasProps): react_jsx_runtime.JSX.Element;
263
-
264
- type BuilderCanvasProps = ComponentProps<typeof WorkflowCanvas>;
265
- type WorkspaceProps = {
266
- locale?: string;
267
- messages?: Record<string, unknown>;
268
- className?: string;
269
- workflowId?: string;
270
- } & Partial<BuilderCanvasProps>;
271
- declare function Workspace({ locale, messages, className, workflowId, ...canvasProps }: WorkspaceProps): react_jsx_runtime.JSX.Element;
272
-
273
- export { type AgentWithPrompts as A, type CodeNodeData as C, type DocumentExtractorNodeData as D, type EntityNodeData as E, type GroupNodeData as G, type HttpRequestNodeData as H, type IfElseNodeData as I, type KnowledgeBaseNodeData as K, type ListOperatorNodeData as L, type ModelProviderNodeData as M, type NoteNodeData as N, type ParameterExtractorNodeData as P, type QuestionClassifierNodeData as Q, type RuleNodeData as R, type StartNodeData as S, type ToolCanvasData as T, type VariableAssignerNodeData as V, type WorkflowEntityDefinition as W, type AgentNodeData as a, type EndNodeData as b, type TemplateTransformNodeData as c, type IterationNodeData as d, type AnswerNodeData as e, type VariableAggregatorNodeData as f, type IterationStartNodeData as g, type WorkspaceProps as h, type AgentNodeTool as i, Workspace as j };
208
+ export type { AgentWithPrompts as A, CodeNodeData as C, DocumentExtractorNodeData as D, EntityNodeData as E, GroupNodeData as G, HttpRequestNodeData as H, IfElseNodeData as I, KnowledgeBaseNodeData as K, ListOperatorNodeData as L, ModelProviderNodeData as M, NoteNodeData as N, ParameterExtractorNodeData as P, QuestionClassifierNodeData as Q, RuleNodeData as R, StartNodeData as S, ToolCanvasData as T, VariableAssignerNodeData as V, WorkflowEntityDefinition as W, AgentNodeData as a, EndNodeData as b, TemplateTransformNodeData as c, IterationNodeData as d, AnswerNodeData as e, VariableAggregatorNodeData as f, IterationStartNodeData as g, AgentNodeTool as h };
@@ -0,0 +1,41 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { SessionSwitcherProps, ManagedUser, Organization } from '@datatechsolutions/shared-domain/common';
3
+ import { ReactNode } from 'react';
4
+ import { AuthUser } from '@datatechsolutions/windsock/client';
5
+ export { CreatePlatformRbacOptions, PlatformRbac, PlatformRoleDefinition, createPlatformRbac } from './rbac.mjs';
6
+ export { CreateSecretInput, SecretDetail, SecretSummary, UpdateSecretInput, addOrganizationDomain, addOrganizationMember, createOrganization, createOrganizationInvitation, createPermission, createSecret, createUser, deleteOrganization, deletePermission, deleteUser, disableSecret, getSecret, getUserPermissions, listOrganizationDomains, listOrganizationInvitations, listOrganizationMembers, listOrganizations, listPermissions, listSecrets, listUsers, removeOrganizationMember, resetUserPassword, rotateSecret, setUserPermissions, setWindsockAdminClient, updateOrganization, updatePermission, updateUser, verifyOrganizationDomain } from './windsock-admin-client.mjs';
7
+ import { AdminUserSummary, AuthOrganization } from '@datatechsolutions/shared-domain';
8
+
9
+ declare function SessionSwitcher({ organizations, users, organizationId, userEmail, onOrganizationChange, onUserChange, }: SessionSwitcherProps): react_jsx_runtime.JSX.Element;
10
+
11
+ type PlatformState = {
12
+ currentOrganizationId: string;
13
+ actor: AuthUser | null;
14
+ };
15
+ type PlatformStateProviderProps = {
16
+ children: ReactNode;
17
+ /**
18
+ * Function that converts a JWT role claim to the app's canonical role
19
+ * union (the same `normalizePlatformRole` produced by
20
+ * `createPlatformRbac()` in this app). Lifted out as a prop because
21
+ * each consuming app uses its own role enum.
22
+ */
23
+ normalizeRole: (input: unknown) => string;
24
+ };
25
+ declare function PlatformStateProvider({ children, normalizeRole }: PlatformStateProviderProps): react_jsx_runtime.JSX.Element;
26
+ declare function usePlatformState(): PlatformState;
27
+
28
+ /** Maps a windsock AuthOrganization to the app-level Organization shape used by UI pages. */
29
+ declare function mapAuthOrg(raw: AuthOrganization): Organization;
30
+ /**
31
+ * Maps a windsock AdminUserSummary to the app-level ManagedUser shape.
32
+ * Takes `normalizeRole` as a parameter so each consuming app can plug in
33
+ * the role normalizer produced by its own `createPlatformRbac()` call —
34
+ * we deliberately don't hardcode an app-specific role enum here.
35
+ */
36
+ declare function mapAdminUser(row: AdminUserSummary, normalizeRole: (input: unknown) => string): ManagedUser;
37
+ /** Maps an app-level UserRole to a windsock AuthOrganizationRole. */
38
+ declare const ORG_ROLE_MAP: Record<string, 'owner' | 'admin' | 'member' | 'viewer'>;
39
+ declare function mapRoleToOrgRole(role: string): 'owner' | 'admin' | 'member' | 'viewer';
40
+
41
+ export { ORG_ROLE_MAP, PlatformStateProvider, type PlatformStateProviderProps, SessionSwitcher, mapAdminUser, mapAuthOrg, mapRoleToOrgRole, usePlatformState };
@@ -0,0 +1,41 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { SessionSwitcherProps, ManagedUser, Organization } from '@datatechsolutions/shared-domain/common';
3
+ import { ReactNode } from 'react';
4
+ import { AuthUser } from '@datatechsolutions/windsock/client';
5
+ export { CreatePlatformRbacOptions, PlatformRbac, PlatformRoleDefinition, createPlatformRbac } from './rbac.js';
6
+ export { CreateSecretInput, SecretDetail, SecretSummary, UpdateSecretInput, addOrganizationDomain, addOrganizationMember, createOrganization, createOrganizationInvitation, createPermission, createSecret, createUser, deleteOrganization, deletePermission, deleteUser, disableSecret, getSecret, getUserPermissions, listOrganizationDomains, listOrganizationInvitations, listOrganizationMembers, listOrganizations, listPermissions, listSecrets, listUsers, removeOrganizationMember, resetUserPassword, rotateSecret, setUserPermissions, setWindsockAdminClient, updateOrganization, updatePermission, updateUser, verifyOrganizationDomain } from './windsock-admin-client.js';
7
+ import { AdminUserSummary, AuthOrganization } from '@datatechsolutions/shared-domain';
8
+
9
+ declare function SessionSwitcher({ organizations, users, organizationId, userEmail, onOrganizationChange, onUserChange, }: SessionSwitcherProps): react_jsx_runtime.JSX.Element;
10
+
11
+ type PlatformState = {
12
+ currentOrganizationId: string;
13
+ actor: AuthUser | null;
14
+ };
15
+ type PlatformStateProviderProps = {
16
+ children: ReactNode;
17
+ /**
18
+ * Function that converts a JWT role claim to the app's canonical role
19
+ * union (the same `normalizePlatformRole` produced by
20
+ * `createPlatformRbac()` in this app). Lifted out as a prop because
21
+ * each consuming app uses its own role enum.
22
+ */
23
+ normalizeRole: (input: unknown) => string;
24
+ };
25
+ declare function PlatformStateProvider({ children, normalizeRole }: PlatformStateProviderProps): react_jsx_runtime.JSX.Element;
26
+ declare function usePlatformState(): PlatformState;
27
+
28
+ /** Maps a windsock AuthOrganization to the app-level Organization shape used by UI pages. */
29
+ declare function mapAuthOrg(raw: AuthOrganization): Organization;
30
+ /**
31
+ * Maps a windsock AdminUserSummary to the app-level ManagedUser shape.
32
+ * Takes `normalizeRole` as a parameter so each consuming app can plug in
33
+ * the role normalizer produced by its own `createPlatformRbac()` call —
34
+ * we deliberately don't hardcode an app-specific role enum here.
35
+ */
36
+ declare function mapAdminUser(row: AdminUserSummary, normalizeRole: (input: unknown) => string): ManagedUser;
37
+ /** Maps an app-level UserRole to a windsock AuthOrganizationRole. */
38
+ declare const ORG_ROLE_MAP: Record<string, 'owner' | 'admin' | 'member' | 'viewer'>;
39
+ declare function mapRoleToOrgRole(role: string): 'owner' | 'admin' | 'member' | 'viewer';
40
+
41
+ export { ORG_ROLE_MAP, PlatformStateProvider, type PlatformStateProviderProps, SessionSwitcher, mapAdminUser, mapAuthOrg, mapRoleToOrgRole, usePlatformState };
@@ -0,0 +1,237 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkHZ4LOVHM_js = require('../chunk-HZ4LOVHM.js');
5
+ var chunk6PBTB5ZX_js = require('../chunk-6PBTB5ZX.js');
6
+ var chunkTUEYBNWL_js = require('../chunk-TUEYBNWL.js');
7
+ var chunkYXN2K77G_js = require('../chunk-YXN2K77G.js');
8
+ require('../chunk-S7KHTUHA.js');
9
+ require('../chunk-UZ3CMNUJ.js');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+ var react = require('react');
12
+ var client = require('@datatechsolutions/windsock/client');
13
+
14
+ function SessionSwitcher({
15
+ organizations,
16
+ users,
17
+ organizationId,
18
+ userEmail,
19
+ onOrganizationChange,
20
+ onUserChange
21
+ }) {
22
+ const tSession = chunkYXN2K77G_js.useTranslations("platform.session");
23
+ const tCommon = chunkYXN2K77G_js.useTranslations("common");
24
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "session-switcher", children: [
25
+ /* @__PURE__ */ jsxRuntime.jsx(
26
+ chunkTUEYBNWL_js.Select,
27
+ {
28
+ value: organizationId,
29
+ "aria-label": tSession("organization"),
30
+ onChange: (event) => {
31
+ onOrganizationChange(event.target.value);
32
+ },
33
+ options: organizations,
34
+ placeholder: tSession("organization")
35
+ }
36
+ ),
37
+ /* @__PURE__ */ jsxRuntime.jsx(
38
+ chunkTUEYBNWL_js.Select,
39
+ {
40
+ value: userEmail,
41
+ "aria-label": tSession("user"),
42
+ onChange: (event) => {
43
+ onUserChange(event.target.value);
44
+ },
45
+ options: users,
46
+ placeholder: tSession("user")
47
+ }
48
+ ),
49
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTUEYBNWL_js.Button, { outline: true, onClick: () => globalThis.location.reload(), children: tCommon("refresh") })
50
+ ] });
51
+ }
52
+ var PlatformStateContext = react.createContext(null);
53
+ function PlatformStateProvider({ children, normalizeRole }) {
54
+ const { user } = client.useAuth();
55
+ const state = react.useMemo(() => {
56
+ const organizationId = user?.organizationId ?? "";
57
+ const actor = user ? {
58
+ ...user,
59
+ role: normalizeRole(user.role),
60
+ organizationId
61
+ } : null;
62
+ return {
63
+ currentOrganizationId: organizationId,
64
+ actor
65
+ };
66
+ }, [user, normalizeRole]);
67
+ return /* @__PURE__ */ jsxRuntime.jsx(PlatformStateContext.Provider, { value: state, children });
68
+ }
69
+ function usePlatformState() {
70
+ const context = react.useContext(PlatformStateContext);
71
+ if (!context) throw new Error("usePlatformState must be used inside PlatformStateProvider");
72
+ return context;
73
+ }
74
+
75
+ // src/platform/windsock-mappers.ts
76
+ function mapAuthOrg(raw) {
77
+ return {
78
+ id: raw.id,
79
+ name: raw.displayName ?? raw.name,
80
+ currency: "BRL",
81
+ country: "BR"
82
+ };
83
+ }
84
+ function mapAdminUser(row, normalizeRole) {
85
+ return {
86
+ id: row.id,
87
+ email: row.email,
88
+ name: row.name ?? row.email,
89
+ role: normalizeRole(row.role),
90
+ active: row.status === "active"
91
+ };
92
+ }
93
+ var ORG_ROLE_MAP = {
94
+ owner: "owner",
95
+ admin: "admin",
96
+ manager: "admin",
97
+ analyst: "member",
98
+ operator: "member",
99
+ viewer: "viewer",
100
+ finance: "member",
101
+ sales: "member",
102
+ support: "member",
103
+ member: "member"
104
+ };
105
+ function mapRoleToOrgRole(role) {
106
+ return ORG_ROLE_MAP[role] ?? "member";
107
+ }
108
+
109
+ Object.defineProperty(exports, "createPlatformRbac", {
110
+ enumerable: true,
111
+ get: function () { return chunkHZ4LOVHM_js.createPlatformRbac; }
112
+ });
113
+ Object.defineProperty(exports, "addOrganizationDomain", {
114
+ enumerable: true,
115
+ get: function () { return chunk6PBTB5ZX_js.addOrganizationDomain; }
116
+ });
117
+ Object.defineProperty(exports, "addOrganizationMember", {
118
+ enumerable: true,
119
+ get: function () { return chunk6PBTB5ZX_js.addOrganizationMember; }
120
+ });
121
+ Object.defineProperty(exports, "createOrganization", {
122
+ enumerable: true,
123
+ get: function () { return chunk6PBTB5ZX_js.createOrganization; }
124
+ });
125
+ Object.defineProperty(exports, "createOrganizationInvitation", {
126
+ enumerable: true,
127
+ get: function () { return chunk6PBTB5ZX_js.createOrganizationInvitation; }
128
+ });
129
+ Object.defineProperty(exports, "createPermission", {
130
+ enumerable: true,
131
+ get: function () { return chunk6PBTB5ZX_js.createPermission; }
132
+ });
133
+ Object.defineProperty(exports, "createSecret", {
134
+ enumerable: true,
135
+ get: function () { return chunk6PBTB5ZX_js.createSecret; }
136
+ });
137
+ Object.defineProperty(exports, "createUser", {
138
+ enumerable: true,
139
+ get: function () { return chunk6PBTB5ZX_js.createUser; }
140
+ });
141
+ Object.defineProperty(exports, "deleteOrganization", {
142
+ enumerable: true,
143
+ get: function () { return chunk6PBTB5ZX_js.deleteOrganization; }
144
+ });
145
+ Object.defineProperty(exports, "deletePermission", {
146
+ enumerable: true,
147
+ get: function () { return chunk6PBTB5ZX_js.deletePermission; }
148
+ });
149
+ Object.defineProperty(exports, "deleteUser", {
150
+ enumerable: true,
151
+ get: function () { return chunk6PBTB5ZX_js.deleteUser; }
152
+ });
153
+ Object.defineProperty(exports, "disableSecret", {
154
+ enumerable: true,
155
+ get: function () { return chunk6PBTB5ZX_js.disableSecret; }
156
+ });
157
+ Object.defineProperty(exports, "getSecret", {
158
+ enumerable: true,
159
+ get: function () { return chunk6PBTB5ZX_js.getSecret; }
160
+ });
161
+ Object.defineProperty(exports, "getUserPermissions", {
162
+ enumerable: true,
163
+ get: function () { return chunk6PBTB5ZX_js.getUserPermissions; }
164
+ });
165
+ Object.defineProperty(exports, "listOrganizationDomains", {
166
+ enumerable: true,
167
+ get: function () { return chunk6PBTB5ZX_js.listOrganizationDomains; }
168
+ });
169
+ Object.defineProperty(exports, "listOrganizationInvitations", {
170
+ enumerable: true,
171
+ get: function () { return chunk6PBTB5ZX_js.listOrganizationInvitations; }
172
+ });
173
+ Object.defineProperty(exports, "listOrganizationMembers", {
174
+ enumerable: true,
175
+ get: function () { return chunk6PBTB5ZX_js.listOrganizationMembers; }
176
+ });
177
+ Object.defineProperty(exports, "listOrganizations", {
178
+ enumerable: true,
179
+ get: function () { return chunk6PBTB5ZX_js.listOrganizations; }
180
+ });
181
+ Object.defineProperty(exports, "listPermissions", {
182
+ enumerable: true,
183
+ get: function () { return chunk6PBTB5ZX_js.listPermissions; }
184
+ });
185
+ Object.defineProperty(exports, "listSecrets", {
186
+ enumerable: true,
187
+ get: function () { return chunk6PBTB5ZX_js.listSecrets; }
188
+ });
189
+ Object.defineProperty(exports, "listUsers", {
190
+ enumerable: true,
191
+ get: function () { return chunk6PBTB5ZX_js.listUsers; }
192
+ });
193
+ Object.defineProperty(exports, "removeOrganizationMember", {
194
+ enumerable: true,
195
+ get: function () { return chunk6PBTB5ZX_js.removeOrganizationMember; }
196
+ });
197
+ Object.defineProperty(exports, "resetUserPassword", {
198
+ enumerable: true,
199
+ get: function () { return chunk6PBTB5ZX_js.resetUserPassword; }
200
+ });
201
+ Object.defineProperty(exports, "rotateSecret", {
202
+ enumerable: true,
203
+ get: function () { return chunk6PBTB5ZX_js.rotateSecret; }
204
+ });
205
+ Object.defineProperty(exports, "setUserPermissions", {
206
+ enumerable: true,
207
+ get: function () { return chunk6PBTB5ZX_js.setUserPermissions; }
208
+ });
209
+ Object.defineProperty(exports, "setWindsockAdminClient", {
210
+ enumerable: true,
211
+ get: function () { return chunk6PBTB5ZX_js.setWindsockAdminClient; }
212
+ });
213
+ Object.defineProperty(exports, "updateOrganization", {
214
+ enumerable: true,
215
+ get: function () { return chunk6PBTB5ZX_js.updateOrganization; }
216
+ });
217
+ Object.defineProperty(exports, "updatePermission", {
218
+ enumerable: true,
219
+ get: function () { return chunk6PBTB5ZX_js.updatePermission; }
220
+ });
221
+ Object.defineProperty(exports, "updateUser", {
222
+ enumerable: true,
223
+ get: function () { return chunk6PBTB5ZX_js.updateUser; }
224
+ });
225
+ Object.defineProperty(exports, "verifyOrganizationDomain", {
226
+ enumerable: true,
227
+ get: function () { return chunk6PBTB5ZX_js.verifyOrganizationDomain; }
228
+ });
229
+ exports.ORG_ROLE_MAP = ORG_ROLE_MAP;
230
+ exports.PlatformStateProvider = PlatformStateProvider;
231
+ exports.SessionSwitcher = SessionSwitcher;
232
+ exports.mapAdminUser = mapAdminUser;
233
+ exports.mapAuthOrg = mapAuthOrg;
234
+ exports.mapRoleToOrgRole = mapRoleToOrgRole;
235
+ exports.usePlatformState = usePlatformState;
236
+ //# sourceMappingURL=index.js.map
237
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/platform/session-switcher.tsx","../../src/platform/platform-state-provider.tsx","../../src/platform/windsock-mappers.ts"],"names":["useTranslations","jsxs","jsx","Select","Button","createContext","useAuth","useMemo","useContext"],"mappings":"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","file":"index.js","sourcesContent":["import { Select, Button } from '@ui/index'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { SessionSwitcherProps } from '@datatechsolutions/shared-domain/common'\n\nexport function SessionSwitcher({\n organizations,\n users,\n organizationId,\n userEmail,\n onOrganizationChange,\n onUserChange,\n}: SessionSwitcherProps) {\n const tSession = useTranslations('platform.session')\n const tCommon = useTranslations('common')\n\n return (\n <div className=\"session-switcher\">\n <Select\n value={organizationId}\n aria-label={tSession('organization')}\n onChange={(event) => {\n onOrganizationChange(event.target.value)\n }}\n options={organizations}\n placeholder={tSession('organization')}\n />\n <Select\n value={userEmail}\n aria-label={tSession('user')}\n onChange={(event) => {\n onUserChange(event.target.value)\n }}\n options={users}\n placeholder={tSession('user')}\n />\n <Button outline onClick={() => globalThis.location.reload()}>\n {tCommon('refresh')}\n </Button>\n </div>\n )\n}\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useAuth, type AuthUser } from '@datatechsolutions/windsock/client'\n\ntype PlatformState = {\n currentOrganizationId: string\n actor: AuthUser | null\n}\n\nconst PlatformStateContext = createContext<PlatformState | null>(null)\n\nexport type PlatformStateProviderProps = {\n children: ReactNode\n /**\n * Function that converts a JWT role claim to the app's canonical role\n * union (the same `normalizePlatformRole` produced by\n * `createPlatformRbac()` in this app). Lifted out as a prop because\n * each consuming app uses its own role enum.\n */\n normalizeRole: (input: unknown) => string\n}\n\nexport function PlatformStateProvider({ children, normalizeRole }: PlatformStateProviderProps) {\n const { user } = useAuth()\n\n const state = useMemo<PlatformState>(() => {\n const organizationId = user?.organizationId ?? ''\n\n const actor: AuthUser | null = user\n ? {\n ...user,\n role: normalizeRole(user.role),\n organizationId,\n }\n : null\n\n return {\n currentOrganizationId: organizationId,\n actor,\n }\n }, [user, normalizeRole])\n\n return (\n <PlatformStateContext.Provider value={state}>\n {children}\n </PlatformStateContext.Provider>\n )\n}\n\nexport function usePlatformState() {\n const context = useContext(PlatformStateContext)\n if (!context) throw new Error('usePlatformState must be used inside PlatformStateProvider')\n return context\n}\n","import type {\n AdminUserSummary,\n AuthOrganization,\n} from '@datatechsolutions/shared-domain'\nimport type { ManagedUser, Organization, UserRole } from '@datatechsolutions/shared-domain/common'\n\n/** Maps a windsock AuthOrganization to the app-level Organization shape used by UI pages. */\nexport function mapAuthOrg(raw: AuthOrganization): Organization {\n return {\n id: raw.id,\n name: raw.displayName ?? raw.name,\n currency: 'BRL',\n country: 'BR',\n } as Organization\n}\n\n/**\n * Maps a windsock AdminUserSummary to the app-level ManagedUser shape.\n * Takes `normalizeRole` as a parameter so each consuming app can plug in\n * the role normalizer produced by its own `createPlatformRbac()` call —\n * we deliberately don't hardcode an app-specific role enum here.\n */\nexport function mapAdminUser(\n row: AdminUserSummary,\n normalizeRole: (input: unknown) => string,\n): ManagedUser {\n return {\n id: row.id,\n email: row.email,\n name: row.name ?? row.email,\n role: normalizeRole(row.role) as UserRole,\n active: row.status === 'active',\n }\n}\n\n/** Maps an app-level UserRole to a windsock AuthOrganizationRole. */\nexport const ORG_ROLE_MAP: Record<string, 'owner' | 'admin' | 'member' | 'viewer'> = {\n owner: 'owner',\n admin: 'admin',\n manager: 'admin',\n analyst: 'member',\n operator: 'member',\n viewer: 'viewer',\n finance: 'member',\n sales: 'member',\n support: 'member',\n member: 'member',\n}\n\nexport function mapRoleToOrgRole(role: string): 'owner' | 'admin' | 'member' | 'viewer' {\n return ORG_ROLE_MAP[role] ?? 'member'\n}\n"]}
@@ -0,0 +1,109 @@
1
+ "use client";
2
+ export { createPlatformRbac } from '../chunk-ZJPNP2YW.mjs';
3
+ export { addOrganizationDomain, addOrganizationMember, createOrganization, createOrganizationInvitation, createPermission, createSecret, createUser, deleteOrganization, deletePermission, deleteUser, disableSecret, getSecret, getUserPermissions, listOrganizationDomains, listOrganizationInvitations, listOrganizationMembers, listOrganizations, listPermissions, listSecrets, listUsers, removeOrganizationMember, resetUserPassword, rotateSecret, setUserPermissions, setWindsockAdminClient, updateOrganization, updatePermission, updateUser, verifyOrganizationDomain } from '../chunk-UHHPBREK.mjs';
4
+ import { Select, Button } from '../chunk-LLFU42KC.mjs';
5
+ import { useTranslations } from '../chunk-7VJ7CMMT.mjs';
6
+ import '../chunk-QWG2FMUN.mjs';
7
+ import '../chunk-D2JF6C3E.mjs';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+ import { createContext, useMemo, useContext } from 'react';
10
+ import { useAuth } from '@datatechsolutions/windsock/client';
11
+
12
+ function SessionSwitcher({
13
+ organizations,
14
+ users,
15
+ organizationId,
16
+ userEmail,
17
+ onOrganizationChange,
18
+ onUserChange
19
+ }) {
20
+ const tSession = useTranslations("platform.session");
21
+ const tCommon = useTranslations("common");
22
+ return /* @__PURE__ */ jsxs("div", { className: "session-switcher", children: [
23
+ /* @__PURE__ */ jsx(
24
+ Select,
25
+ {
26
+ value: organizationId,
27
+ "aria-label": tSession("organization"),
28
+ onChange: (event) => {
29
+ onOrganizationChange(event.target.value);
30
+ },
31
+ options: organizations,
32
+ placeholder: tSession("organization")
33
+ }
34
+ ),
35
+ /* @__PURE__ */ jsx(
36
+ Select,
37
+ {
38
+ value: userEmail,
39
+ "aria-label": tSession("user"),
40
+ onChange: (event) => {
41
+ onUserChange(event.target.value);
42
+ },
43
+ options: users,
44
+ placeholder: tSession("user")
45
+ }
46
+ ),
47
+ /* @__PURE__ */ jsx(Button, { outline: true, onClick: () => globalThis.location.reload(), children: tCommon("refresh") })
48
+ ] });
49
+ }
50
+ var PlatformStateContext = createContext(null);
51
+ function PlatformStateProvider({ children, normalizeRole }) {
52
+ const { user } = useAuth();
53
+ const state = useMemo(() => {
54
+ const organizationId = user?.organizationId ?? "";
55
+ const actor = user ? {
56
+ ...user,
57
+ role: normalizeRole(user.role),
58
+ organizationId
59
+ } : null;
60
+ return {
61
+ currentOrganizationId: organizationId,
62
+ actor
63
+ };
64
+ }, [user, normalizeRole]);
65
+ return /* @__PURE__ */ jsx(PlatformStateContext.Provider, { value: state, children });
66
+ }
67
+ function usePlatformState() {
68
+ const context = useContext(PlatformStateContext);
69
+ if (!context) throw new Error("usePlatformState must be used inside PlatformStateProvider");
70
+ return context;
71
+ }
72
+
73
+ // src/platform/windsock-mappers.ts
74
+ function mapAuthOrg(raw) {
75
+ return {
76
+ id: raw.id,
77
+ name: raw.displayName ?? raw.name,
78
+ currency: "BRL",
79
+ country: "BR"
80
+ };
81
+ }
82
+ function mapAdminUser(row, normalizeRole) {
83
+ return {
84
+ id: row.id,
85
+ email: row.email,
86
+ name: row.name ?? row.email,
87
+ role: normalizeRole(row.role),
88
+ active: row.status === "active"
89
+ };
90
+ }
91
+ var ORG_ROLE_MAP = {
92
+ owner: "owner",
93
+ admin: "admin",
94
+ manager: "admin",
95
+ analyst: "member",
96
+ operator: "member",
97
+ viewer: "viewer",
98
+ finance: "member",
99
+ sales: "member",
100
+ support: "member",
101
+ member: "member"
102
+ };
103
+ function mapRoleToOrgRole(role) {
104
+ return ORG_ROLE_MAP[role] ?? "member";
105
+ }
106
+
107
+ export { ORG_ROLE_MAP, PlatformStateProvider, SessionSwitcher, mapAdminUser, mapAuthOrg, mapRoleToOrgRole, usePlatformState };
108
+ //# sourceMappingURL=index.mjs.map
109
+ //# sourceMappingURL=index.mjs.map