@elevasis/ui 1.3.1 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.js +1 -1
- package/dist/auth/guards/AdminGuard.d.ts +32 -0
- package/dist/auth/guards/AdminGuard.d.ts.map +1 -0
- package/dist/auth/guards/ProtectedRoute.d.ts +60 -0
- package/dist/auth/guards/ProtectedRoute.d.ts.map +1 -0
- package/dist/auth/guards/__tests__/AdminGuard.test.d.ts +12 -0
- package/dist/auth/guards/__tests__/AdminGuard.test.d.ts.map +1 -0
- package/dist/auth/guards/__tests__/ProtectedRoute.test.d.ts +14 -0
- package/dist/auth/guards/__tests__/ProtectedRoute.test.d.ts.map +1 -0
- package/dist/auth/index.d.ts +14 -174
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +1 -1
- package/dist/{chunk-A3MCANC6.js → chunk-6IX5JZEH.js} +110 -50
- package/dist/chunk-GIFAF5ZS.js +313 -0
- package/dist/chunk-JQLT6HBI.js +850 -0
- package/dist/chunk-LFYO3MDC.js +58 -0
- package/dist/{chunk-72HOBFMP.js → chunk-LTQAAIGE.js} +3 -3
- package/dist/{chunk-JBFFCZI4.js → chunk-U34YGJQB.js} +1 -93
- package/dist/components/index.d.ts +1 -1353
- package/dist/components/index.js +1 -20
- package/dist/components/navigation/index.d.ts +2 -32
- package/dist/components/navigation/index.js +1 -29
- package/dist/execution/index.d.ts +63 -231
- package/dist/execution/index.js +1 -4
- package/dist/graph/index.css +0 -1
- package/dist/graph/index.d.ts +4 -203
- package/dist/graph/index.js +1 -1
- package/dist/hooks/command-queue/index.d.ts +7 -0
- package/dist/hooks/command-queue/index.d.ts.map +1 -0
- package/dist/hooks/command-queue/useCommandQueue.d.ts +33 -0
- package/dist/hooks/command-queue/useCommandQueue.d.ts.map +1 -0
- package/dist/hooks/command-queue/useCommandQueueTotals.d.ts +17 -0
- package/dist/hooks/command-queue/useCommandQueueTotals.d.ts.map +1 -0
- package/dist/hooks/command-queue/useDeleteTask.d.ts +5 -0
- package/dist/hooks/command-queue/useDeleteTask.d.ts.map +1 -0
- package/dist/hooks/command-queue/usePatchTask.d.ts +6 -0
- package/dist/hooks/command-queue/usePatchTask.d.ts.map +1 -0
- package/dist/hooks/command-queue/useSubmitAction.d.ts +29 -0
- package/dist/hooks/command-queue/useSubmitAction.d.ts.map +1 -0
- package/dist/hooks/executions/index.d.ts +16 -0
- package/dist/hooks/executions/index.d.ts.map +1 -0
- package/dist/hooks/executions/useBulkDeleteExecutions.d.ts +15 -0
- package/dist/hooks/executions/useBulkDeleteExecutions.d.ts.map +1 -0
- package/dist/hooks/executions/useCancelExecution.d.ts +20 -0
- package/dist/hooks/executions/useCancelExecution.d.ts.map +1 -0
- package/dist/hooks/executions/useDeleteExecution.d.ts +13 -0
- package/dist/hooks/executions/useDeleteExecution.d.ts.map +1 -0
- package/dist/hooks/executions/useExecuteAsync.d.ts +21 -0
- package/dist/hooks/executions/useExecuteAsync.d.ts.map +1 -0
- package/dist/hooks/executions/useExecution.d.ts +10 -0
- package/dist/hooks/executions/useExecution.d.ts.map +1 -0
- package/dist/hooks/executions/useExecutions.d.ts +16 -0
- package/dist/hooks/executions/useExecutions.d.ts.map +1 -0
- package/dist/hooks/executions/useResourceDefinition.d.ts +9 -0
- package/dist/hooks/executions/useResourceDefinition.d.ts.map +1 -0
- package/dist/hooks/executions/useResources.d.ts +15 -0
- package/dist/hooks/executions/useResources.d.ts.map +1 -0
- package/dist/hooks/executions/useRetryExecution.d.ts +16 -0
- package/dist/hooks/executions/useRetryExecution.d.ts.map +1 -0
- package/dist/hooks/feature-access/createUseFeatureAccess.d.ts +44 -0
- package/dist/hooks/feature-access/createUseFeatureAccess.d.ts.map +1 -0
- package/dist/hooks/feature-access/index.d.ts +2 -0
- package/dist/hooks/feature-access/index.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +11 -4554
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +2 -4
- package/dist/hooks/monitoring/index.d.ts +9 -0
- package/dist/hooks/monitoring/index.d.ts.map +1 -0
- package/dist/hooks/monitoring/useActivities.d.ts +52 -0
- package/dist/hooks/monitoring/useActivities.d.ts.map +1 -0
- package/dist/hooks/monitoring/useCostSummary.d.ts +7 -0
- package/dist/hooks/monitoring/useCostSummary.d.ts.map +1 -0
- package/dist/hooks/monitoring/useExecutionHealth.d.ts +10 -0
- package/dist/hooks/monitoring/useExecutionHealth.d.ts.map +1 -0
- package/dist/hooks/monitoring/useExecutionLogs.d.ts +56 -0
- package/dist/hooks/monitoring/useExecutionLogs.d.ts.map +1 -0
- package/dist/hooks/monitoring/useNotifications.d.ts +11 -0
- package/dist/hooks/monitoring/useNotifications.d.ts.map +1 -0
- package/dist/hooks/notifications/index.d.ts +8 -0
- package/dist/hooks/notifications/index.d.ts.map +1 -0
- package/dist/hooks/notifications/useMarkAllAsRead.d.ts +2 -0
- package/dist/hooks/notifications/useMarkAllAsRead.d.ts.map +1 -0
- package/dist/hooks/notifications/useMarkAsRead.d.ts +2 -0
- package/dist/hooks/notifications/useMarkAsRead.d.ts.map +1 -0
- package/dist/hooks/notifications/useNotificationCount.d.ts +8 -0
- package/dist/hooks/notifications/useNotificationCount.d.ts.map +1 -0
- package/dist/hooks/observability/index.d.ts +19 -0
- package/dist/hooks/observability/index.d.ts.map +1 -0
- package/dist/hooks/observability/useBusinessImpact.d.ts +9 -0
- package/dist/hooks/observability/useBusinessImpact.d.ts.map +1 -0
- package/dist/hooks/observability/useCostBreakdown.d.ts +10 -0
- package/dist/hooks/observability/useCostBreakdown.d.ts.map +1 -0
- package/dist/hooks/observability/useCostByModel.d.ts +3 -0
- package/dist/hooks/observability/useCostByModel.d.ts.map +1 -0
- package/dist/hooks/observability/useCostTrends.d.ts +3 -0
- package/dist/hooks/observability/useCostTrends.d.ts.map +1 -0
- package/dist/hooks/observability/useDashboardMetrics.d.ts +3 -0
- package/dist/hooks/observability/useDashboardMetrics.d.ts.map +1 -0
- package/dist/hooks/observability/useErrorAnalysis.d.ts +7 -0
- package/dist/hooks/observability/useErrorAnalysis.d.ts.map +1 -0
- package/dist/hooks/observability/useErrorDetails.d.ts +20 -0
- package/dist/hooks/observability/useErrorDetails.d.ts.map +1 -0
- package/dist/hooks/observability/useErrorDistribution.d.ts +12 -0
- package/dist/hooks/observability/useErrorDistribution.d.ts.map +1 -0
- package/dist/hooks/observability/useErrorTrends.d.ts +12 -0
- package/dist/hooks/observability/useErrorTrends.d.ts.map +1 -0
- package/dist/hooks/observability/useResolveError.d.ts +17 -0
- package/dist/hooks/observability/useResolveError.d.ts.map +1 -0
- package/dist/hooks/observability/useTopFailingResources.d.ts +13 -0
- package/dist/hooks/observability/useTopFailingResources.d.ts.map +1 -0
- package/dist/hooks/published.d.ts +19 -4279
- package/dist/hooks/published.d.ts.map +1 -0
- package/dist/hooks/published.js +367 -4
- package/dist/hooks/scheduling/index.d.ts +5 -0
- package/dist/hooks/scheduling/index.d.ts.map +1 -0
- package/dist/hooks/scheduling/useSchedules.d.ts +185 -0
- package/dist/hooks/scheduling/useSchedules.d.ts.map +1 -0
- package/dist/hooks/sessions/index.d.ts +8 -0
- package/dist/hooks/sessions/index.d.ts.map +1 -0
- package/dist/hooks/sessions/useSessionExecutions.d.ts +13 -0
- package/dist/hooks/sessions/useSessionExecutions.d.ts.map +1 -0
- package/dist/hooks/sessions/useSessionMessages.d.ts +7 -0
- package/dist/hooks/sessions/useSessionMessages.d.ts.map +1 -0
- package/dist/hooks/sessions/useSessions.d.ts +26 -0
- package/dist/hooks/sessions/useSessions.d.ts.map +1 -0
- package/dist/index.css +0 -118
- package/dist/index.d.ts +15 -7889
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1119 -24
- package/dist/initialization/InitializationProvider.d.ts +48 -0
- package/dist/initialization/InitializationProvider.d.ts.map +1 -0
- package/dist/initialization/hooks/useAppInitialization.d.ts +32 -0
- package/dist/initialization/hooks/useAppInitialization.d.ts.map +1 -0
- package/dist/initialization/index.d.ts +22 -2361
- package/dist/initialization/index.d.ts.map +1 -0
- package/dist/initialization/index.js +1 -1
- package/dist/organization/context/OrganizationProvider.d.ts +20 -0
- package/dist/organization/context/OrganizationProvider.d.ts.map +1 -0
- package/dist/organization/hooks/useOrgInitialization.d.ts +56 -0
- package/dist/organization/hooks/useOrgInitialization.d.ts.map +1 -0
- package/dist/organization/index.d.ts +21 -283
- package/dist/organization/index.d.ts.map +1 -0
- package/dist/organization/index.js +3 -3
- package/dist/profile/context/ProfileProvider.d.ts +27 -0
- package/dist/profile/context/ProfileProvider.d.ts.map +1 -0
- package/dist/profile/hooks/useUserProfile.d.ts +31 -0
- package/dist/profile/hooks/useUserProfile.d.ts.map +1 -0
- package/dist/profile/index.d.ts +14 -2290
- package/dist/profile/index.d.ts.map +1 -0
- package/dist/provider/CoreAuthKitInner.d.ts +12 -0
- package/dist/provider/CoreAuthKitInner.d.ts.map +1 -0
- package/dist/provider/ElevasisCoreProvider.d.ts +39 -0
- package/dist/provider/ElevasisCoreProvider.d.ts.map +1 -0
- package/dist/provider/ElevasisServiceContext.d.ts +31 -0
- package/dist/provider/ElevasisServiceContext.d.ts.map +1 -0
- package/dist/provider/__tests__/CoreAuthKitInner.test.d.ts +2 -0
- package/dist/provider/__tests__/CoreAuthKitInner.test.d.ts.map +1 -0
- package/dist/provider/__tests__/ElevasisCoreProvider.test.d.ts +2 -0
- package/dist/provider/__tests__/ElevasisCoreProvider.test.d.ts.map +1 -0
- package/dist/provider/index.d.ts +7 -372
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +3 -12
- package/dist/provider/published.d.ts +9 -263
- package/dist/provider/published.d.ts.map +1 -0
- package/dist/provider/published.js +5 -5
- package/dist/provider/types.d.ts +143 -0
- package/dist/provider/types.d.ts.map +1 -0
- package/dist/provider/types.js +1 -0
- package/dist/sdk-barrel.d.ts +20 -0
- package/dist/sdk-barrel.d.ts.map +1 -0
- package/dist/supabase/index.d.ts +0 -255
- package/dist/theme/cssVariables.d.ts +12 -0
- package/dist/theme/cssVariables.d.ts.map +1 -0
- package/dist/theme/cssVariables.js +93 -0
- package/dist/theme/index.d.ts +4 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +1 -0
- package/dist/theme/presets/__tests__/getPreset.test.d.ts +2 -0
- package/dist/theme/presets/__tests__/getPreset.test.d.ts.map +1 -0
- package/dist/theme/presets/abyss.d.ts +3 -0
- package/dist/theme/presets/abyss.d.ts.map +1 -0
- package/dist/theme/presets/abyss.js +54 -0
- package/dist/theme/presets/aurora.d.ts +8 -0
- package/dist/theme/presets/aurora.d.ts.map +1 -0
- package/dist/theme/presets/aurora.js +59 -0
- package/dist/theme/presets/canopy.d.ts +3 -0
- package/dist/theme/presets/canopy.d.ts.map +1 -0
- package/dist/theme/presets/canopy.js +58 -0
- package/dist/theme/presets/cyber-flux.d.ts +8 -0
- package/dist/theme/presets/cyber-flux.d.ts.map +1 -0
- package/dist/theme/presets/cyber-flux.js +66 -0
- package/dist/theme/presets/cyber-strike.d.ts +9 -0
- package/dist/theme/presets/cyber-strike.d.ts.map +1 -0
- package/dist/theme/presets/cyber-strike.js +62 -0
- package/dist/theme/presets/cyber-void.d.ts +8 -0
- package/dist/theme/presets/cyber-void.d.ts.map +1 -0
- package/dist/theme/presets/cyber-void.js +62 -0
- package/dist/theme/presets/cyber-volt.d.ts +8 -0
- package/dist/theme/presets/cyber-volt.d.ts.map +1 -0
- package/dist/theme/presets/cyber-volt.js +66 -0
- package/dist/theme/presets/default.d.ts +4 -0
- package/dist/theme/presets/default.d.ts.map +1 -0
- package/dist/theme/presets/ember.d.ts +8 -0
- package/dist/theme/presets/ember.d.ts.map +1 -0
- package/dist/theme/presets/ember.js +63 -0
- package/dist/theme/presets/honey.d.ts +3 -0
- package/dist/theme/presets/honey.d.ts.map +1 -0
- package/dist/theme/presets/honey.js +62 -0
- package/dist/theme/presets/index.d.ts +6 -0
- package/dist/theme/presets/index.d.ts.map +1 -0
- package/dist/theme/presets/index.js +39 -0
- package/dist/theme/presets/midnight.d.ts +8 -0
- package/dist/theme/presets/midnight.d.ts.map +1 -0
- package/dist/theme/presets/midnight.js +68 -0
- package/dist/theme/presets/obsidian.d.ts +3 -0
- package/dist/theme/presets/obsidian.d.ts.map +1 -0
- package/dist/theme/presets/obsidian.js +56 -0
- package/dist/theme/presets/regal.d.ts +8 -0
- package/dist/theme/presets/regal.d.ts.map +1 -0
- package/dist/theme/presets/regal.js +63 -0
- package/dist/theme/presets/rose-gold.d.ts +8 -0
- package/dist/theme/presets/rose-gold.d.ts.map +1 -0
- package/dist/theme/presets/rose-gold.js +63 -0
- package/dist/theme/presets/slate.d.ts +3 -0
- package/dist/theme/presets/slate.d.ts.map +1 -0
- package/dist/theme/presets/slate.js +56 -0
- package/dist/theme/presets/tactical.d.ts +8 -0
- package/dist/theme/presets/tactical.d.ts.map +1 -0
- package/dist/theme/presets/tactical.js +57 -0
- package/dist/theme/presets/types.d.ts +26 -0
- package/dist/theme/presets/types.d.ts.map +1 -0
- package/dist/theme/presets/types.js +1 -0
- package/dist/utils/index.d.ts +1 -22
- package/dist/utils/index.js +1 -1
- package/package.json +4 -52
- package/dist/chunk-3KMDHCAR.js +0 -52
- package/dist/chunk-6BJOYF6E.js +0 -8
- package/dist/chunk-BLO4SISK.js +0 -113
- package/dist/chunk-HUWJXLLF.js +0 -681
- package/dist/chunk-JVAZHVNV.js +0 -110
- package/dist/chunk-JYSYHVLU.js +0 -379
- package/dist/chunk-NE36BUGQ.js +0 -146
- package/dist/chunk-O3PY6B6E.js +0 -749
- package/dist/chunk-OXVOHOP3.js +0 -661
- package/dist/chunk-PSLKGOBZ.js +0 -58
- package/dist/chunk-RJCA5672.js +0 -1664
- package/dist/chunk-TMFCNFLW.js +0 -107
- package/dist/chunk-TN3PU2WK.js +0 -748
- package/dist/chunk-TZPAA4RC.js +0 -1461
- package/dist/chunk-W7ZBF5AA.js +0 -1
- package/dist/chunk-YZ6GTZXL.js +0 -48
- package/dist/components/command-queue/index.css +0 -53
- package/dist/components/command-queue/index.d.ts +0 -204
- package/dist/components/command-queue/index.js +0 -12
- package/dist/components/forms/index.d.ts +0 -56
- package/dist/components/forms/index.js +0 -2
- package/dist/components/index.css +0 -443
- package/dist/components/monitoring/index.d.ts +0 -66
- package/dist/components/monitoring/index.js +0 -2
- package/dist/components/notifications/index.d.ts +0 -52
- package/dist/components/notifications/index.js +0 -5
- package/dist/components/resource-definition/index.css +0 -388
- package/dist/components/resource-definition/index.d.ts +0 -301
- package/dist/components/resource-definition/index.js +0 -3
- package/dist/display/index.css +0 -53
- package/dist/display/index.d.ts +0 -606
- package/dist/display/index.js +0 -7
- package/dist/execution/index.css +0 -388
- package/dist/provider/index.css +0 -61
- package/dist/{chunk-TYV5NJV2.js → chunk-BUZONXAW.js} +0 -0
- package/dist/{chunk-UMXDDEAG.js → chunk-SFF5MJEI.js} +1 -1
- /package/dist/{chunk-NXHL23JW.js → chunk-XXDDMASA.js} +0 -0
package/dist/api/index.js
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface AdminGuardProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* Path to redirect non-admin users to.
|
|
6
|
+
* @default '/'
|
|
7
|
+
*/
|
|
8
|
+
redirectTo?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Rendered while user readiness is being determined.
|
|
11
|
+
* When not provided, nothing is rendered during initialization.
|
|
12
|
+
*/
|
|
13
|
+
fallback?: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Headless route guard for platform admin pages.
|
|
17
|
+
*
|
|
18
|
+
* Reads `profile.is_platform_admin` from the nearest InitializationProvider.
|
|
19
|
+
* Non-admin users are redirected to `redirectTo` (default: '/').
|
|
20
|
+
*
|
|
21
|
+
* Must be nested inside a ProtectedRoute (or equivalent) so that
|
|
22
|
+
* `userReady` is guaranteed to be true when this guard runs.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* <ProtectedRoute>
|
|
26
|
+
* <AdminGuard fallback={<AppShellLoader />}>
|
|
27
|
+
* <AdminDashboard />
|
|
28
|
+
* </AdminGuard>
|
|
29
|
+
* </ProtectedRoute>
|
|
30
|
+
*/
|
|
31
|
+
export declare function AdminGuard({ children, redirectTo, fallback }: AdminGuardProps): import("react/jsx-runtime").JSX.Element | null;
|
|
32
|
+
//# sourceMappingURL=AdminGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminGuard.d.ts","sourceRoot":"","sources":["../../../src/auth/guards/AdminGuard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,SAAS,CAAA;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAgB,EAAE,QAAe,EAAE,EAAE,eAAe,kDA0B1F"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { InitializationError } from '../../initialization/hooks/useAppInitialization';
|
|
3
|
+
export interface ProtectedRouteProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
/**
|
|
6
|
+
* Path to redirect to when user is unauthenticated and the auth adapter
|
|
7
|
+
* does not provide a `signIn` function.
|
|
8
|
+
* @default '/login'
|
|
9
|
+
*/
|
|
10
|
+
redirectTo?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Rendered while initialization is in progress.
|
|
13
|
+
* When not provided, nothing is rendered during initialization.
|
|
14
|
+
*/
|
|
15
|
+
fallback?: ReactNode;
|
|
16
|
+
/**
|
|
17
|
+
* Rendered when initialization fails with a non-organization error.
|
|
18
|
+
* Receives the error and a retry callback.
|
|
19
|
+
* When not provided, the error is silently swallowed (children not rendered).
|
|
20
|
+
*/
|
|
21
|
+
errorFallback?: (error: InitializationError, retry: () => void) => ReactNode;
|
|
22
|
+
/**
|
|
23
|
+
* When true (default), waits for both user AND organization to be ready
|
|
24
|
+
* before rendering children. When false, only waits for user readiness.
|
|
25
|
+
* @default true
|
|
26
|
+
*/
|
|
27
|
+
waitForOrganization?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Headless route guard for authenticated pages.
|
|
31
|
+
*
|
|
32
|
+
* Reads initialization state from the nearest InitializationProvider.
|
|
33
|
+
*
|
|
34
|
+
* When `canRecover()` returns true (refresh token exists), unauthenticated users
|
|
35
|
+
* are sent directly to WorkOS AuthKit via `signIn()`. WorkOS checks its
|
|
36
|
+
* server-side session and either signs the user in immediately (page-reload case)
|
|
37
|
+
* or shows a login form (logged-out case). Explicit logout destroys the
|
|
38
|
+
* server-side session, so the next auto-signIn correctly presents a login form
|
|
39
|
+
* rather than looping.
|
|
40
|
+
*
|
|
41
|
+
* When `canRecover()` returns false, falls back to navigating to `redirectTo`
|
|
42
|
+
* (default: '/login') with a `returnTo` search param.
|
|
43
|
+
*
|
|
44
|
+
* Organization-layer errors are allowed through -- routes like /invitations
|
|
45
|
+
* must be accessible even when the user has no org membership.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // With custom fallback (your Mantine loader):
|
|
49
|
+
* <ProtectedRoute fallback={<AppShellLoader />}>
|
|
50
|
+
* <DashboardPage />
|
|
51
|
+
* </ProtectedRoute>
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* // Wait only for user, not org (e.g. /invitations route):
|
|
55
|
+
* <ProtectedRoute waitForOrganization={false}>
|
|
56
|
+
* <InvitationsPage />
|
|
57
|
+
* </ProtectedRoute>
|
|
58
|
+
*/
|
|
59
|
+
export declare function ProtectedRoute({ children, redirectTo, fallback, errorFallback, waitForOrganization }: ProtectedRouteProps): import("react/jsx-runtime").JSX.Element | null;
|
|
60
|
+
//# sourceMappingURL=ProtectedRoute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtectedRoute.d.ts","sourceRoot":"","sources":["../../../src/auth/guards/ProtectedRoute.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AAE1F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAA;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,SAAS,CAAA;IAC5E;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,UAAqB,EACrB,QAAe,EACf,aAAa,EACb,mBAA0B,EAC3B,EAAE,mBAAmB,kDAyDrB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdminGuard Tests (shared @repo/ui guard)
|
|
3
|
+
*
|
|
4
|
+
* Tests role-based access control for platform admin pages:
|
|
5
|
+
* - Shows fallback while user is not ready
|
|
6
|
+
* - Renders children for platform admin users
|
|
7
|
+
* - Redirects non-admin users to redirectTo (default: '/')
|
|
8
|
+
* - Handles missing profile gracefully
|
|
9
|
+
* - Supports custom redirectTo
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=AdminGuard.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminGuard.test.d.ts","sourceRoot":"","sources":["../../../../src/auth/guards/__tests__/AdminGuard.test.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProtectedRoute Tests (shared @repo/ui guard)
|
|
3
|
+
*
|
|
4
|
+
* Tests headless authentication guard behavior:
|
|
5
|
+
* - Shows fallback while initializing
|
|
6
|
+
* - Redirects unauthenticated users to login with returnTo
|
|
7
|
+
* - Renders children when user is ready
|
|
8
|
+
* - Renders children when org error (allows /invitations route pattern)
|
|
9
|
+
* - Shows errorFallback for non-organization errors
|
|
10
|
+
* - Waits for org readiness when waitForOrganization=true (default)
|
|
11
|
+
* - Renders after user ready when waitForOrganization=false
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=ProtectedRoute.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtectedRoute.test.d.ts","sourceRoot":"","sources":["../../../../src/auth/guards/__tests__/ProtectedRoute.test.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,176 +1,16 @@
|
|
|
1
|
-
import * as react from 'react';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
3
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
interface AuthContextValue {
|
|
6
|
-
user: {
|
|
7
|
-
id: string;
|
|
8
|
-
} | null;
|
|
9
|
-
isLoading: boolean;
|
|
10
|
-
getAccessToken: () => Promise<string>;
|
|
11
|
-
organizationId?: string | null;
|
|
12
|
-
/**
|
|
13
|
-
* Trigger WorkOS AuthKit's sign-in flow (redirect to WorkOS hosted auth page).
|
|
14
|
-
* Used by ProtectedRoute for auto-recovery when `canRecover()` returns true.
|
|
15
|
-
*/
|
|
16
|
-
signIn: (options?: {
|
|
17
|
-
state?: {
|
|
18
|
-
returnTo?: string;
|
|
19
|
-
};
|
|
20
|
-
}) => void;
|
|
21
|
-
/**
|
|
22
|
-
* Returns true when a previous session can be recovered (refresh token
|
|
23
|
-
* exists in storage). ProtectedRoute calls `signIn()` only when this returns
|
|
24
|
-
* true; otherwise it navigates to the login page.
|
|
25
|
-
*
|
|
26
|
-
* Explicit logout clears the stored token, so canRecover() returns false
|
|
27
|
-
* and the user sees the login page as expected.
|
|
28
|
-
*/
|
|
29
|
-
canRecover: () => boolean;
|
|
30
|
-
}
|
|
31
|
-
declare function useAuthContext(): AuthContextValue;
|
|
32
|
-
declare function AuthProvider({ value, children }: {
|
|
33
|
-
value: AuthContextValue;
|
|
34
|
-
children: ReactNode;
|
|
35
|
-
}): react.FunctionComponentElement<react.ProviderProps<AuthContextValue | null>>;
|
|
36
|
-
|
|
37
1
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* useEffect(() => {
|
|
48
|
-
* fetchEventSourceWithTokenRefresh({
|
|
49
|
-
* getToken: getAccessToken,
|
|
50
|
-
* // ...
|
|
51
|
-
* })
|
|
52
|
-
* }, [getAccessToken]) // Won't re-run on every render
|
|
53
|
-
* ```
|
|
54
|
-
*/
|
|
55
|
-
declare function useStableAccessToken(): () => Promise<string>;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Checks WorkOS session validity when window/tab regains focus
|
|
59
|
-
*
|
|
60
|
-
* When window or tab becomes visible after inactivity, validates session
|
|
61
|
-
* by attempting to get access token. If session expired (WorkOS inactivity
|
|
62
|
-
* timeout exceeded), signs out user and redirects to login.
|
|
63
|
-
*
|
|
64
|
-
* How it works:
|
|
65
|
-
* 1. Window/tab regains focus after inactivity
|
|
66
|
-
* 2. Cancel all pending queries to prevent 401 error cascade
|
|
67
|
-
* 3. Attempt to get access token from WorkOS
|
|
68
|
-
* 4. If successful: Resume queries with fresh token
|
|
69
|
-
* 5. If failed (session expired): Sign out and redirect to login
|
|
70
|
-
*
|
|
71
|
-
* @example
|
|
72
|
-
* // In __root.tsx
|
|
73
|
-
* export function RootLayoutComponent() {
|
|
74
|
-
* useSessionCheck()
|
|
75
|
-
* return <YourApp />
|
|
76
|
-
* }
|
|
77
|
-
*/
|
|
78
|
-
declare function useSessionCheck(): void;
|
|
79
|
-
|
|
80
|
-
interface InitializationError {
|
|
81
|
-
layer: 'auth' | 'profile' | 'organization';
|
|
82
|
-
message: string;
|
|
83
|
-
originalError?: Error;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
interface ProtectedRouteProps {
|
|
87
|
-
children: ReactNode;
|
|
88
|
-
/**
|
|
89
|
-
* Path to redirect to when user is unauthenticated and the auth adapter
|
|
90
|
-
* does not provide a `signIn` function.
|
|
91
|
-
* @default '/login'
|
|
92
|
-
*/
|
|
93
|
-
redirectTo?: string;
|
|
94
|
-
/**
|
|
95
|
-
* Rendered while initialization is in progress.
|
|
96
|
-
* When not provided, nothing is rendered during initialization.
|
|
97
|
-
*/
|
|
98
|
-
fallback?: ReactNode;
|
|
99
|
-
/**
|
|
100
|
-
* Rendered when initialization fails with a non-organization error.
|
|
101
|
-
* Receives the error and a retry callback.
|
|
102
|
-
* When not provided, the error is silently swallowed (children not rendered).
|
|
103
|
-
*/
|
|
104
|
-
errorFallback?: (error: InitializationError, retry: () => void) => ReactNode;
|
|
105
|
-
/**
|
|
106
|
-
* When true (default), waits for both user AND organization to be ready
|
|
107
|
-
* before rendering children. When false, only waits for user readiness.
|
|
108
|
-
* @default true
|
|
109
|
-
*/
|
|
110
|
-
waitForOrganization?: boolean;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Headless route guard for authenticated pages.
|
|
114
|
-
*
|
|
115
|
-
* Reads initialization state from the nearest InitializationProvider.
|
|
116
|
-
*
|
|
117
|
-
* When `canRecover()` returns true (refresh token exists), unauthenticated users
|
|
118
|
-
* are sent directly to WorkOS AuthKit via `signIn()`. WorkOS checks its
|
|
119
|
-
* server-side session and either signs the user in immediately (page-reload case)
|
|
120
|
-
* or shows a login form (logged-out case). Explicit logout destroys the
|
|
121
|
-
* server-side session, so the next auto-signIn correctly presents a login form
|
|
122
|
-
* rather than looping.
|
|
123
|
-
*
|
|
124
|
-
* When `canRecover()` returns false, falls back to navigating to `redirectTo`
|
|
125
|
-
* (default: '/login') with a `returnTo` search param.
|
|
126
|
-
*
|
|
127
|
-
* Organization-layer errors are allowed through -- routes like /invitations
|
|
128
|
-
* must be accessible even when the user has no org membership.
|
|
129
|
-
*
|
|
130
|
-
* @example
|
|
131
|
-
* // With custom fallback (your Mantine loader):
|
|
132
|
-
* <ProtectedRoute fallback={<AppShellLoader />}>
|
|
133
|
-
* <DashboardPage />
|
|
134
|
-
* </ProtectedRoute>
|
|
135
|
-
*
|
|
136
|
-
* @example
|
|
137
|
-
* // Wait only for user, not org (e.g. /invitations route):
|
|
138
|
-
* <ProtectedRoute waitForOrganization={false}>
|
|
139
|
-
* <InvitationsPage />
|
|
140
|
-
* </ProtectedRoute>
|
|
141
|
-
*/
|
|
142
|
-
declare function ProtectedRoute({ children, redirectTo, fallback, errorFallback, waitForOrganization }: ProtectedRouteProps): react_jsx_runtime.JSX.Element | null;
|
|
143
|
-
|
|
144
|
-
interface AdminGuardProps {
|
|
145
|
-
children: ReactNode;
|
|
146
|
-
/**
|
|
147
|
-
* Path to redirect non-admin users to.
|
|
148
|
-
* @default '/'
|
|
149
|
-
*/
|
|
150
|
-
redirectTo?: string;
|
|
151
|
-
/**
|
|
152
|
-
* Rendered while user readiness is being determined.
|
|
153
|
-
* When not provided, nothing is rendered during initialization.
|
|
154
|
-
*/
|
|
155
|
-
fallback?: ReactNode;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Headless route guard for platform admin pages.
|
|
159
|
-
*
|
|
160
|
-
* Reads `profile.is_platform_admin` from the nearest InitializationProvider.
|
|
161
|
-
* Non-admin users are redirected to `redirectTo` (default: '/').
|
|
162
|
-
*
|
|
163
|
-
* Must be nested inside a ProtectedRoute (or equivalent) so that
|
|
164
|
-
* `userReady` is guaranteed to be true when this guard runs.
|
|
165
|
-
*
|
|
166
|
-
* @example
|
|
167
|
-
* <ProtectedRoute>
|
|
168
|
-
* <AdminGuard fallback={<AppShellLoader />}>
|
|
169
|
-
* <AdminDashboard />
|
|
170
|
-
* </AdminGuard>
|
|
171
|
-
* </ProtectedRoute>
|
|
2
|
+
* Auth module - Pure authentication concerns
|
|
3
|
+
*
|
|
4
|
+
* Exports:
|
|
5
|
+
* - AuthContextValue: Interface for auth state (user, isLoading, getAccessToken, organizationId, signIn, canRecover)
|
|
6
|
+
* - AuthProvider: React context provider for AuthContextValue
|
|
7
|
+
* - useAuthContext: Hook to consume AuthContextValue from context
|
|
8
|
+
* - useStableAccessToken: Stable reference to getAccessToken for SSE connections
|
|
9
|
+
* - useSessionCheck: Validates session on tab refocus
|
|
172
10
|
*/
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
export
|
|
176
|
-
export
|
|
11
|
+
export { AuthProvider, useAuthContext, type AuthContextValue } from './context';
|
|
12
|
+
export * from './hooks/useStableAccessToken';
|
|
13
|
+
export * from './hooks/useSessionCheck';
|
|
14
|
+
export { ProtectedRoute, type ProtectedRouteProps } from './guards/ProtectedRoute';
|
|
15
|
+
export { AdminGuard, type AdminGuardProps } from './guards/AdminGuard';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC/E,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/auth/index.js
CHANGED
|
@@ -2,6 +2,6 @@ export { AdminGuard, ProtectedRoute, useSessionCheck as useRefocusSessionCheck,
|
|
|
2
2
|
export { useStableAccessToken } from '../chunk-FWZJH3TL.js';
|
|
3
3
|
import '../chunk-NEK6JKPW.js';
|
|
4
4
|
import '../chunk-L2CM2CUA.js';
|
|
5
|
-
import '../chunk-DD3CCMCZ.js';
|
|
6
5
|
import '../chunk-KA7LO7U5.js';
|
|
6
|
+
import '../chunk-DD3CCMCZ.js';
|
|
7
7
|
export { AuthProvider, useAuthContext } from '../chunk-7PLEQFHO.js';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { useSupabase } from './chunk-JGJSZ3UE.js';
|
|
2
|
-
import { UuidSchema, ResourceTypeSchema, NonEmptyStringSchema, OriginResourceTypeSchema } from './chunk-BLO4SISK.js';
|
|
3
2
|
import { useNotificationAdapter } from './chunk-TIRMFDM4.js';
|
|
4
3
|
import { useStableAccessToken } from './chunk-FWZJH3TL.js';
|
|
5
4
|
import { useElevasisServices } from './chunk-KA7LO7U5.js';
|
|
@@ -154,10 +153,35 @@ function useBulkDeleteExecutions() {
|
|
|
154
153
|
}
|
|
155
154
|
});
|
|
156
155
|
}
|
|
156
|
+
var UuidSchema = z.string().uuid();
|
|
157
|
+
var NonEmptyStringSchema = z.string().trim().min(1).max(1e3);
|
|
158
|
+
var ResourceTypeSchema = z.enum(["agent", "workflow"]);
|
|
159
|
+
var OriginResourceTypeSchema = z.enum(["agent", "workflow", "scheduler", "api"]);
|
|
160
|
+
z.string().trim().toLowerCase().min(1, "Credential name required").max(100, "Credential name too long (max 100 chars)").regex(
|
|
161
|
+
/^[a-z0-9]+(-[a-z0-9]+)+$/,
|
|
162
|
+
"Credential name must be lowercase letters, numbers, and hyphens in format: service-environment (e.g., gmail-prod, attio-dev)"
|
|
163
|
+
);
|
|
164
|
+
z.enum(["google-sheets", "dropbox"]);
|
|
165
|
+
z.string().min(10, "Authorization code too short").max(1e3, "Authorization code too long");
|
|
166
|
+
z.string().min(10, "State parameter too short").max(2048, "State parameter too long");
|
|
167
|
+
z.string().trim().transform((str) => str.replace(/[<>'"]/g, ""));
|
|
168
|
+
z.string().email();
|
|
169
|
+
z.string().url();
|
|
170
|
+
z.object({
|
|
171
|
+
limit: z.coerce.number().int().min(1).max(100).default(20),
|
|
172
|
+
offset: z.coerce.number().int().min(0).default(0)
|
|
173
|
+
});
|
|
174
|
+
z.string().datetime();
|
|
175
|
+
z.object({
|
|
176
|
+
startDate: z.string().datetime(),
|
|
177
|
+
endDate: z.string().datetime()
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// ../core/src/operations/sessions/api-schemas.ts
|
|
157
181
|
var SessionIdParamSchema = z.object({
|
|
158
182
|
sessionId: UuidSchema
|
|
159
183
|
}).strict();
|
|
160
|
-
z.object({
|
|
184
|
+
var ExecutionIdParamsSchema = z.object({
|
|
161
185
|
sessionId: UuidSchema,
|
|
162
186
|
executionId: UuidSchema
|
|
163
187
|
}).strict();
|
|
@@ -188,7 +212,7 @@ z.object({
|
|
|
188
212
|
resourceId: z.string().optional(),
|
|
189
213
|
limit: z.coerce.number().int().min(1).max(100).default(20)
|
|
190
214
|
}).strict();
|
|
191
|
-
z.object({
|
|
215
|
+
var WebSocketSessionTurnSchema = z.object({
|
|
192
216
|
type: z.literal("session:turn"),
|
|
193
217
|
input: z.unknown().refine(
|
|
194
218
|
(val) => {
|
|
@@ -417,6 +441,38 @@ function useExecutionLogs(params = {}) {
|
|
|
417
441
|
// Real-time data - always refetch on mount/org switch
|
|
418
442
|
});
|
|
419
443
|
}
|
|
444
|
+
var NotificationCategorySchema = z.enum(["info", "queue", "alert", "error", "system"]);
|
|
445
|
+
var GetNotificationsQuerySchema = z.object({
|
|
446
|
+
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
447
|
+
offset: z.coerce.number().int().min(0).default(0)
|
|
448
|
+
});
|
|
449
|
+
var MarkAsReadParamsSchema = z.object({
|
|
450
|
+
id: UuidSchema
|
|
451
|
+
});
|
|
452
|
+
z.object({
|
|
453
|
+
userId: UuidSchema,
|
|
454
|
+
organizationId: UuidSchema,
|
|
455
|
+
category: NotificationCategorySchema,
|
|
456
|
+
title: z.string().trim().min(1).max(200),
|
|
457
|
+
message: z.string().trim().min(1).max(1e3),
|
|
458
|
+
actionUrl: z.string().url().optional()
|
|
459
|
+
}).strict();
|
|
460
|
+
|
|
461
|
+
// src/hooks/monitoring/useNotifications.ts
|
|
462
|
+
function useNotifications({ limit = 20, offset = 0 } = {}) {
|
|
463
|
+
const { apiRequest, isReady, organizationId } = useElevasisServices();
|
|
464
|
+
return useQuery({
|
|
465
|
+
queryKey: ["notifications", organizationId, { limit, offset }],
|
|
466
|
+
queryFn: async () => {
|
|
467
|
+
const params = GetNotificationsQuerySchema.parse({ limit, offset });
|
|
468
|
+
const response = await apiRequest(
|
|
469
|
+
`/notifications?limit=${params.limit}&offset=${params.offset}`
|
|
470
|
+
);
|
|
471
|
+
return response;
|
|
472
|
+
},
|
|
473
|
+
enabled: isReady
|
|
474
|
+
});
|
|
475
|
+
}
|
|
420
476
|
var RelativeScheduleItemSchema = z.object({
|
|
421
477
|
offset: z.string().regex(/^[+-]\d+[dhm]$/, "Invalid offset format. Use +3d, -2h, +30m, etc."),
|
|
422
478
|
payload: z.record(z.string(), z.unknown()),
|
|
@@ -662,6 +718,55 @@ function useExecutionHealth({ timeRange }) {
|
|
|
662
718
|
// 30s monitoring stale time
|
|
663
719
|
});
|
|
664
720
|
}
|
|
721
|
+
function useMarkAsRead() {
|
|
722
|
+
const queryClient = useQueryClient();
|
|
723
|
+
const { apiRequest } = useElevasisServices();
|
|
724
|
+
const notify = useNotificationAdapter();
|
|
725
|
+
return useMutation({
|
|
726
|
+
mutationFn: async (notificationId) => {
|
|
727
|
+
MarkAsReadParamsSchema.parse({ id: notificationId });
|
|
728
|
+
await apiRequest(`/notifications/${notificationId}/read`, {
|
|
729
|
+
method: "PATCH"
|
|
730
|
+
});
|
|
731
|
+
},
|
|
732
|
+
onSuccess: () => {
|
|
733
|
+
queryClient.invalidateQueries({ queryKey: ["notifications"] });
|
|
734
|
+
},
|
|
735
|
+
onError: (error) => {
|
|
736
|
+
notify.apiError(error);
|
|
737
|
+
}
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
function useMarkAllAsRead() {
|
|
741
|
+
const queryClient = useQueryClient();
|
|
742
|
+
const { apiRequest } = useElevasisServices();
|
|
743
|
+
const notify = useNotificationAdapter();
|
|
744
|
+
return useMutation({
|
|
745
|
+
mutationFn: async () => {
|
|
746
|
+
await apiRequest("/notifications/mark-all-read", {
|
|
747
|
+
method: "PATCH"
|
|
748
|
+
});
|
|
749
|
+
},
|
|
750
|
+
onSuccess: () => {
|
|
751
|
+
queryClient.invalidateQueries({ queryKey: ["notifications"] });
|
|
752
|
+
},
|
|
753
|
+
onError: (error) => {
|
|
754
|
+
notify.apiError(error);
|
|
755
|
+
}
|
|
756
|
+
});
|
|
757
|
+
}
|
|
758
|
+
function useNotificationCount() {
|
|
759
|
+
const { apiRequest, isReady, organizationId } = useElevasisServices();
|
|
760
|
+
return useQuery({
|
|
761
|
+
queryKey: ["notifications", "unread-count", organizationId],
|
|
762
|
+
queryFn: async () => {
|
|
763
|
+
const response = await apiRequest("/notifications/unread-count");
|
|
764
|
+
return response.count;
|
|
765
|
+
},
|
|
766
|
+
enabled: isReady,
|
|
767
|
+
staleTime: 3e4
|
|
768
|
+
});
|
|
769
|
+
}
|
|
665
770
|
function useErrorNotification() {
|
|
666
771
|
const adapter = useNotificationAdapter();
|
|
667
772
|
return useCallback(
|
|
@@ -1212,8 +1317,7 @@ function useSortedData(data, defaultColumn, accessors, defaultDirection = "desc"
|
|
|
1212
1317
|
function createUseFeatureAccess({
|
|
1213
1318
|
useInitialization,
|
|
1214
1319
|
useOrganization,
|
|
1215
|
-
optInFeatures = []
|
|
1216
|
-
getCoursesByGroup = () => []
|
|
1320
|
+
optInFeatures = []
|
|
1217
1321
|
}) {
|
|
1218
1322
|
return function useFeatureAccess() {
|
|
1219
1323
|
const { profile, organizationReady } = useInitialization();
|
|
@@ -1241,56 +1345,12 @@ function createUseFeatureAccess({
|
|
|
1241
1345
|
[profile?.is_platform_admin, membershipConfig, orgConfig]
|
|
1242
1346
|
);
|
|
1243
1347
|
const hasFeature = useCallback((featureKey) => checkFeature(featureKey).allowed, [checkFeature]);
|
|
1244
|
-
const hasTrainingAccess = useCallback(() => {
|
|
1245
|
-
if (profile?.is_platform_admin) return true;
|
|
1246
|
-
return userConfig?.training?.enabled ?? true;
|
|
1247
|
-
}, [profile?.is_platform_admin, userConfig?.training?.enabled]);
|
|
1248
|
-
const getAllowedCourses = useCallback(() => {
|
|
1249
|
-
if (userConfig?.training?.allowed_courses?.length) {
|
|
1250
|
-
return userConfig.training.allowed_courses;
|
|
1251
|
-
}
|
|
1252
|
-
return null;
|
|
1253
|
-
}, [userConfig?.training?.allowed_courses]);
|
|
1254
|
-
const getResolvedCourseAccess = useCallback(() => {
|
|
1255
|
-
if (profile?.is_platform_admin) return null;
|
|
1256
|
-
const orgGroups = orgConfig?.training?.allowed_course_groups ?? [];
|
|
1257
|
-
const userGroups = userConfig?.training?.allowed_course_groups ?? [];
|
|
1258
|
-
const userCourses = userConfig?.training?.allowed_courses ?? [];
|
|
1259
|
-
if (!orgGroups.length && !userGroups.length && !userCourses.length) return null;
|
|
1260
|
-
const foundationCourses = getCoursesByGroup("foundation");
|
|
1261
|
-
const orgCourseSlugs = orgGroups.flatMap(getCoursesByGroup);
|
|
1262
|
-
const userGroupCourseSlugs = userGroups.flatMap(getCoursesByGroup);
|
|
1263
|
-
return [.../* @__PURE__ */ new Set([...foundationCourses, ...orgCourseSlugs, ...userGroupCourseSlugs, ...userCourses])];
|
|
1264
|
-
}, [
|
|
1265
|
-
profile?.is_platform_admin,
|
|
1266
|
-
orgConfig?.training?.allowed_course_groups,
|
|
1267
|
-
userConfig?.training?.allowed_course_groups,
|
|
1268
|
-
userConfig?.training?.allowed_courses
|
|
1269
|
-
]);
|
|
1270
|
-
const hasAccessToCourse = useCallback(
|
|
1271
|
-
(courseSlug) => {
|
|
1272
|
-
const resolved = getResolvedCourseAccess();
|
|
1273
|
-
if (resolved === null) return true;
|
|
1274
|
-
return resolved.includes(courseSlug);
|
|
1275
|
-
},
|
|
1276
|
-
[getResolvedCourseAccess]
|
|
1277
|
-
);
|
|
1278
|
-
const getEnabledGroups = useCallback(() => {
|
|
1279
|
-
const orgGroups = orgConfig?.training?.allowed_course_groups ?? [];
|
|
1280
|
-
const userGroups = userConfig?.training?.allowed_course_groups ?? [];
|
|
1281
|
-
return [.../* @__PURE__ */ new Set(["foundation", ...orgGroups, ...userGroups])];
|
|
1282
|
-
}, [orgConfig?.training?.allowed_course_groups, userConfig?.training?.allowed_course_groups]);
|
|
1283
1348
|
return {
|
|
1284
1349
|
orgConfig,
|
|
1285
1350
|
membershipConfig,
|
|
1286
1351
|
userConfig,
|
|
1287
1352
|
hasFeature,
|
|
1288
1353
|
checkFeature,
|
|
1289
|
-
hasTrainingAccess,
|
|
1290
|
-
getAllowedCourses,
|
|
1291
|
-
getResolvedCourseAccess,
|
|
1292
|
-
hasAccessToCourse,
|
|
1293
|
-
getEnabledGroups,
|
|
1294
1354
|
isReady: organizationReady
|
|
1295
1355
|
};
|
|
1296
1356
|
};
|
|
@@ -1358,4 +1418,4 @@ function useSSEConnection({
|
|
|
1358
1418
|
return { connected, error };
|
|
1359
1419
|
}
|
|
1360
1420
|
|
|
1361
|
-
export { OperationsService, createUseFeatureAccess, executionsKeys, observabilityKeys, scheduleKeys, sortData, useActivities, useActivityTrend, useBatchDelete, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateSchedule, useDashboardMetrics, useDeleteExecution, useDeleteSchedule, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useErrorTrends, useExecuteAsync, useExecution, useExecutionHealth, useExecutionLogs, useExecutions, useGetExecutionHistory, useGetSchedule, useListSchedules, usePaginationState, usePauseSchedule, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResources, useResumeSchedule, useRetryExecution, useSSEConnection, useSortedData, useSuccessNotification, useTableSelection, useTableSort, useTopFailingResources, useUnresolveError, useUpdateAnchor, useUpdateSchedule, useWarningNotification };
|
|
1421
|
+
export { ExecutionIdParamsSchema, OperationsService, SessionIdParamSchema, WebSocketSessionTurnSchema, createUseFeatureAccess, executionsKeys, observabilityKeys, scheduleKeys, sortData, useActivities, useActivityTrend, useBatchDelete, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateSchedule, useDashboardMetrics, useDeleteExecution, useDeleteSchedule, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorNotification, useErrorTrends, useExecuteAsync, useExecution, useExecutionHealth, useExecutionLogs, useExecutions, useGetExecutionHistory, useGetSchedule, useListSchedules, useMarkAllAsRead, useMarkAsRead, useNotificationCount, useNotifications, usePaginationState, usePauseSchedule, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResources, useResumeSchedule, useRetryExecution, useSSEConnection, useSortedData, useSuccessNotification, useTableSelection, useTableSort, useTopFailingResources, useUnresolveError, useUpdateAnchor, useUpdateSchedule, useWarningNotification };
|