@elevasis/ui 1.3.0 → 1.3.2

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 (279) hide show
  1. package/dist/CoreAuthKitInner-3J4RVQO6.js +43 -0
  2. package/dist/api/index.d.ts +7 -31
  3. package/dist/api/index.js +3 -2
  4. package/dist/auth/context.d.ts +23 -5
  5. package/dist/auth/guards/AdminGuard.d.ts +32 -0
  6. package/dist/auth/guards/AdminGuard.d.ts.map +1 -0
  7. package/dist/auth/guards/ProtectedRoute.d.ts +60 -0
  8. package/dist/auth/guards/ProtectedRoute.d.ts.map +1 -0
  9. package/dist/auth/guards/__tests__/AdminGuard.test.d.ts +12 -0
  10. package/dist/auth/guards/__tests__/AdminGuard.test.d.ts.map +1 -0
  11. package/dist/auth/guards/__tests__/ProtectedRoute.test.d.ts +14 -0
  12. package/dist/auth/guards/__tests__/ProtectedRoute.test.d.ts.map +1 -0
  13. package/dist/auth/index.d.ts +14 -171
  14. package/dist/auth/index.d.ts.map +1 -0
  15. package/dist/auth/index.js +5 -6
  16. package/dist/{chunk-FDCVFCOQ.js → chunk-2JBWPFHF.js} +23 -20
  17. package/dist/{chunk-BZTA7IIL.js → chunk-6IX5JZEH.js} +358 -4
  18. package/dist/chunk-FWZJH3TL.js +13 -0
  19. package/dist/chunk-GIFAF5ZS.js +313 -0
  20. package/dist/chunk-JGJSZ3UE.js +47 -0
  21. package/dist/chunk-JQLT6HBI.js +850 -0
  22. package/dist/{chunk-4KAG5U7A.js → chunk-L2CM2CUA.js} +0 -2
  23. package/dist/chunk-LFYO3MDC.js +58 -0
  24. package/dist/{chunk-OLD3NQLI.js → chunk-LTQAAIGE.js} +13 -17
  25. package/dist/{chunk-QQOLC46E.js → chunk-NEK6JKPW.js} +1 -1
  26. package/dist/{chunk-SITSZUFW.js → chunk-PVVQTENF.js} +1 -1
  27. package/dist/{chunk-FLJXZ7YC.js → chunk-SFF5MJEI.js} +2 -4
  28. package/dist/{chunk-EZMRFWZQ.js → chunk-U34YGJQB.js} +2 -94
  29. package/dist/{chunk-BWCC6ZJC.js → chunk-XLV6LYN2.js} +15 -60
  30. package/dist/components/index.d.ts +1 -1353
  31. package/dist/components/index.js +1 -20
  32. package/dist/components/navigation/index.d.ts +2 -32
  33. package/dist/components/navigation/index.js +1 -29
  34. package/dist/execution/index.d.ts +63 -231
  35. package/dist/execution/index.js +1 -4
  36. package/dist/graph/index.css +0 -1
  37. package/dist/graph/index.d.ts +4 -203
  38. package/dist/graph/index.js +1 -1
  39. package/dist/hooks/command-queue/index.d.ts +7 -0
  40. package/dist/hooks/command-queue/index.d.ts.map +1 -0
  41. package/dist/hooks/command-queue/useCommandQueue.d.ts +33 -0
  42. package/dist/hooks/command-queue/useCommandQueue.d.ts.map +1 -0
  43. package/dist/hooks/command-queue/useCommandQueueTotals.d.ts +17 -0
  44. package/dist/hooks/command-queue/useCommandQueueTotals.d.ts.map +1 -0
  45. package/dist/hooks/command-queue/useDeleteTask.d.ts +5 -0
  46. package/dist/hooks/command-queue/useDeleteTask.d.ts.map +1 -0
  47. package/dist/hooks/command-queue/usePatchTask.d.ts +6 -0
  48. package/dist/hooks/command-queue/usePatchTask.d.ts.map +1 -0
  49. package/dist/hooks/command-queue/useSubmitAction.d.ts +29 -0
  50. package/dist/hooks/command-queue/useSubmitAction.d.ts.map +1 -0
  51. package/dist/hooks/executions/index.d.ts +16 -0
  52. package/dist/hooks/executions/index.d.ts.map +1 -0
  53. package/dist/hooks/executions/useBulkDeleteExecutions.d.ts +15 -0
  54. package/dist/hooks/executions/useBulkDeleteExecutions.d.ts.map +1 -0
  55. package/dist/hooks/executions/useCancelExecution.d.ts +20 -0
  56. package/dist/hooks/executions/useCancelExecution.d.ts.map +1 -0
  57. package/dist/hooks/executions/useDeleteExecution.d.ts +13 -0
  58. package/dist/hooks/executions/useDeleteExecution.d.ts.map +1 -0
  59. package/dist/hooks/executions/useExecuteAsync.d.ts +21 -0
  60. package/dist/hooks/executions/useExecuteAsync.d.ts.map +1 -0
  61. package/dist/hooks/executions/useExecution.d.ts +10 -0
  62. package/dist/hooks/executions/useExecution.d.ts.map +1 -0
  63. package/dist/hooks/executions/useExecutions.d.ts +16 -0
  64. package/dist/hooks/executions/useExecutions.d.ts.map +1 -0
  65. package/dist/hooks/executions/useResourceDefinition.d.ts +9 -0
  66. package/dist/hooks/executions/useResourceDefinition.d.ts.map +1 -0
  67. package/dist/hooks/executions/useResources.d.ts +15 -0
  68. package/dist/hooks/executions/useResources.d.ts.map +1 -0
  69. package/dist/hooks/executions/useRetryExecution.d.ts +16 -0
  70. package/dist/hooks/executions/useRetryExecution.d.ts.map +1 -0
  71. package/dist/hooks/feature-access/createUseFeatureAccess.d.ts +44 -0
  72. package/dist/hooks/feature-access/createUseFeatureAccess.d.ts.map +1 -0
  73. package/dist/hooks/feature-access/index.d.ts +2 -0
  74. package/dist/hooks/feature-access/index.d.ts.map +1 -0
  75. package/dist/hooks/index.d.ts +11 -1927
  76. package/dist/hooks/index.d.ts.map +1 -0
  77. package/dist/hooks/index.js +5 -4
  78. package/dist/hooks/monitoring/index.d.ts +9 -0
  79. package/dist/hooks/monitoring/index.d.ts.map +1 -0
  80. package/dist/hooks/monitoring/useActivities.d.ts +52 -0
  81. package/dist/hooks/monitoring/useActivities.d.ts.map +1 -0
  82. package/dist/hooks/monitoring/useCostSummary.d.ts +7 -0
  83. package/dist/hooks/monitoring/useCostSummary.d.ts.map +1 -0
  84. package/dist/hooks/monitoring/useExecutionHealth.d.ts +10 -0
  85. package/dist/hooks/monitoring/useExecutionHealth.d.ts.map +1 -0
  86. package/dist/hooks/monitoring/useExecutionLogs.d.ts +56 -0
  87. package/dist/hooks/monitoring/useExecutionLogs.d.ts.map +1 -0
  88. package/dist/hooks/monitoring/useNotifications.d.ts +11 -0
  89. package/dist/hooks/monitoring/useNotifications.d.ts.map +1 -0
  90. package/dist/hooks/notifications/index.d.ts +8 -0
  91. package/dist/hooks/notifications/index.d.ts.map +1 -0
  92. package/dist/hooks/notifications/useMarkAllAsRead.d.ts +2 -0
  93. package/dist/hooks/notifications/useMarkAllAsRead.d.ts.map +1 -0
  94. package/dist/hooks/notifications/useMarkAsRead.d.ts +2 -0
  95. package/dist/hooks/notifications/useMarkAsRead.d.ts.map +1 -0
  96. package/dist/hooks/notifications/useNotificationCount.d.ts +8 -0
  97. package/dist/hooks/notifications/useNotificationCount.d.ts.map +1 -0
  98. package/dist/hooks/observability/index.d.ts +19 -0
  99. package/dist/hooks/observability/index.d.ts.map +1 -0
  100. package/dist/hooks/observability/useBusinessImpact.d.ts +9 -0
  101. package/dist/hooks/observability/useBusinessImpact.d.ts.map +1 -0
  102. package/dist/hooks/observability/useCostBreakdown.d.ts +10 -0
  103. package/dist/hooks/observability/useCostBreakdown.d.ts.map +1 -0
  104. package/dist/hooks/observability/useCostByModel.d.ts +3 -0
  105. package/dist/hooks/observability/useCostByModel.d.ts.map +1 -0
  106. package/dist/hooks/observability/useCostTrends.d.ts +3 -0
  107. package/dist/hooks/observability/useCostTrends.d.ts.map +1 -0
  108. package/dist/hooks/observability/useDashboardMetrics.d.ts +3 -0
  109. package/dist/hooks/observability/useDashboardMetrics.d.ts.map +1 -0
  110. package/dist/hooks/observability/useErrorAnalysis.d.ts +7 -0
  111. package/dist/hooks/observability/useErrorAnalysis.d.ts.map +1 -0
  112. package/dist/hooks/observability/useErrorDetails.d.ts +20 -0
  113. package/dist/hooks/observability/useErrorDetails.d.ts.map +1 -0
  114. package/dist/hooks/observability/useErrorDistribution.d.ts +12 -0
  115. package/dist/hooks/observability/useErrorDistribution.d.ts.map +1 -0
  116. package/dist/hooks/observability/useErrorTrends.d.ts +12 -0
  117. package/dist/hooks/observability/useErrorTrends.d.ts.map +1 -0
  118. package/dist/hooks/observability/useResolveError.d.ts +17 -0
  119. package/dist/hooks/observability/useResolveError.d.ts.map +1 -0
  120. package/dist/hooks/observability/useTopFailingResources.d.ts +13 -0
  121. package/dist/hooks/observability/useTopFailingResources.d.ts.map +1 -0
  122. package/dist/hooks/published.d.ts +19 -1652
  123. package/dist/hooks/published.d.ts.map +1 -0
  124. package/dist/hooks/published.js +369 -3
  125. package/dist/hooks/scheduling/index.d.ts +5 -0
  126. package/dist/hooks/scheduling/index.d.ts.map +1 -0
  127. package/dist/hooks/scheduling/useSchedules.d.ts +185 -0
  128. package/dist/hooks/scheduling/useSchedules.d.ts.map +1 -0
  129. package/dist/hooks/sessions/index.d.ts +8 -0
  130. package/dist/hooks/sessions/index.d.ts.map +1 -0
  131. package/dist/hooks/sessions/useSessionExecutions.d.ts +13 -0
  132. package/dist/hooks/sessions/useSessionExecutions.d.ts.map +1 -0
  133. package/dist/hooks/sessions/useSessionMessages.d.ts +7 -0
  134. package/dist/hooks/sessions/useSessionMessages.d.ts.map +1 -0
  135. package/dist/hooks/sessions/useSessions.d.ts +26 -0
  136. package/dist/hooks/sessions/useSessions.d.ts.map +1 -0
  137. package/dist/index.css +0 -118
  138. package/dist/index.d.ts +15 -7624
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +1125 -30
  141. package/dist/initialization/InitializationProvider.d.ts +48 -0
  142. package/dist/initialization/InitializationProvider.d.ts.map +1 -0
  143. package/dist/initialization/hooks/useAppInitialization.d.ts +32 -0
  144. package/dist/initialization/hooks/useAppInitialization.d.ts.map +1 -0
  145. package/dist/initialization/index.d.ts +22 -2361
  146. package/dist/initialization/index.d.ts.map +1 -0
  147. package/dist/initialization/index.js +4 -4
  148. package/dist/organization/context/OrganizationProvider.d.ts +20 -0
  149. package/dist/organization/context/OrganizationProvider.d.ts.map +1 -0
  150. package/dist/organization/hooks/useOrgInitialization.d.ts +56 -0
  151. package/dist/organization/hooks/useOrgInitialization.d.ts.map +1 -0
  152. package/dist/organization/index.d.ts +21 -283
  153. package/dist/organization/index.d.ts.map +1 -0
  154. package/dist/organization/index.js +4 -4
  155. package/dist/profile/context/ProfileProvider.d.ts +27 -0
  156. package/dist/profile/context/ProfileProvider.d.ts.map +1 -0
  157. package/dist/profile/hooks/useUserProfile.d.ts +31 -0
  158. package/dist/profile/hooks/useUserProfile.d.ts.map +1 -0
  159. package/dist/profile/index.d.ts +14 -2290
  160. package/dist/profile/index.d.ts.map +1 -0
  161. package/dist/profile/index.js +1 -1
  162. package/dist/provider/CoreAuthKitInner.d.ts +12 -0
  163. package/dist/provider/CoreAuthKitInner.d.ts.map +1 -0
  164. package/dist/provider/ElevasisCoreProvider.d.ts +39 -0
  165. package/dist/provider/ElevasisCoreProvider.d.ts.map +1 -0
  166. package/dist/provider/ElevasisServiceContext.d.ts +31 -0
  167. package/dist/provider/ElevasisServiceContext.d.ts.map +1 -0
  168. package/dist/provider/__tests__/CoreAuthKitInner.test.d.ts +2 -0
  169. package/dist/provider/__tests__/CoreAuthKitInner.test.d.ts.map +1 -0
  170. package/dist/provider/__tests__/ElevasisCoreProvider.test.d.ts +2 -0
  171. package/dist/provider/__tests__/ElevasisCoreProvider.test.d.ts.map +1 -0
  172. package/dist/provider/index.d.ts +7 -384
  173. package/dist/provider/index.d.ts.map +1 -0
  174. package/dist/provider/index.js +8 -9
  175. package/dist/provider/published.d.ts +9 -275
  176. package/dist/provider/published.d.ts.map +1 -0
  177. package/dist/provider/published.js +7 -8
  178. package/dist/provider/types.d.ts +190 -0
  179. package/dist/provider/types.d.ts.map +1 -0
  180. package/dist/sdk-barrel.d.ts +20 -0
  181. package/dist/sdk-barrel.d.ts.map +1 -0
  182. package/dist/supabase/index.d.ts +0 -255
  183. package/dist/supabase/index.js +2 -47
  184. package/dist/theme/cssVariables.d.ts +12 -0
  185. package/dist/theme/cssVariables.d.ts.map +1 -0
  186. package/dist/theme/index.d.ts +4 -0
  187. package/dist/theme/index.d.ts.map +1 -0
  188. package/dist/theme/presets/__tests__/getPreset.test.d.ts +2 -0
  189. package/dist/theme/presets/__tests__/getPreset.test.d.ts.map +1 -0
  190. package/dist/theme/presets/abyss.d.ts +3 -0
  191. package/dist/theme/presets/abyss.d.ts.map +1 -0
  192. package/dist/theme/presets/abyss.js +54 -0
  193. package/dist/theme/presets/aurora.d.ts +8 -0
  194. package/dist/theme/presets/aurora.d.ts.map +1 -0
  195. package/dist/theme/presets/aurora.js +59 -0
  196. package/dist/theme/presets/canopy.d.ts +3 -0
  197. package/dist/theme/presets/canopy.d.ts.map +1 -0
  198. package/dist/theme/presets/canopy.js +58 -0
  199. package/dist/theme/presets/cyber-flux.d.ts +8 -0
  200. package/dist/theme/presets/cyber-flux.d.ts.map +1 -0
  201. package/dist/theme/presets/cyber-strike.d.ts +9 -0
  202. package/dist/theme/presets/cyber-strike.d.ts.map +1 -0
  203. package/dist/theme/presets/cyber-void.d.ts +8 -0
  204. package/dist/theme/presets/cyber-void.d.ts.map +1 -0
  205. package/dist/theme/presets/cyber-volt.d.ts +8 -0
  206. package/dist/theme/presets/cyber-volt.d.ts.map +1 -0
  207. package/dist/theme/presets/default.d.ts +4 -0
  208. package/dist/theme/presets/default.d.ts.map +1 -0
  209. package/dist/theme/presets/ember.d.ts +8 -0
  210. package/dist/theme/presets/ember.d.ts.map +1 -0
  211. package/dist/theme/presets/ember.js +63 -0
  212. package/dist/theme/presets/honey.d.ts +3 -0
  213. package/dist/theme/presets/honey.d.ts.map +1 -0
  214. package/dist/theme/presets/honey.js +62 -0
  215. package/dist/theme/presets/index.d.ts +6 -0
  216. package/dist/theme/presets/index.d.ts.map +1 -0
  217. package/dist/theme/presets/midnight.d.ts +8 -0
  218. package/dist/theme/presets/midnight.d.ts.map +1 -0
  219. package/dist/theme/presets/midnight.js +68 -0
  220. package/dist/theme/presets/obsidian.d.ts +3 -0
  221. package/dist/theme/presets/obsidian.d.ts.map +1 -0
  222. package/dist/theme/presets/obsidian.js +56 -0
  223. package/dist/theme/presets/regal.d.ts +8 -0
  224. package/dist/theme/presets/regal.d.ts.map +1 -0
  225. package/dist/theme/presets/rose-gold.d.ts +8 -0
  226. package/dist/theme/presets/rose-gold.d.ts.map +1 -0
  227. package/dist/theme/presets/slate.d.ts +3 -0
  228. package/dist/theme/presets/slate.d.ts.map +1 -0
  229. package/dist/theme/presets/slate.js +56 -0
  230. package/dist/theme/presets/tactical.d.ts +8 -0
  231. package/dist/theme/presets/tactical.d.ts.map +1 -0
  232. package/dist/theme/presets/types.d.ts +26 -0
  233. package/dist/theme/presets/types.d.ts.map +1 -0
  234. package/dist/theme/presets/types.js +1 -0
  235. package/dist/utils/index.d.ts +1 -22
  236. package/dist/utils/index.js +1 -1
  237. package/package.json +67 -51
  238. package/dist/CoreAuthKitInner-KM72EYJS.js +0 -19
  239. package/dist/api/hooks/useApiClient.d.ts +0 -54
  240. package/dist/api/hooks/useApiClient.d.ts.map +0 -1
  241. package/dist/api/hooks/useApiClient.js +0 -185
  242. package/dist/chunk-3KMDHCAR.js +0 -52
  243. package/dist/chunk-6BJOYF6E.js +0 -8
  244. package/dist/chunk-BLO4SISK.js +0 -113
  245. package/dist/chunk-HUWJXLLF.js +0 -681
  246. package/dist/chunk-JVAZHVNV.js +0 -110
  247. package/dist/chunk-JYSYHVLU.js +0 -379
  248. package/dist/chunk-NE36BUGQ.js +0 -146
  249. package/dist/chunk-NIAVTSMB.js +0 -21
  250. package/dist/chunk-O3PY6B6E.js +0 -749
  251. package/dist/chunk-OXVOHOP3.js +0 -661
  252. package/dist/chunk-PCBXNHKY.js +0 -1460
  253. package/dist/chunk-PSLKGOBZ.js +0 -58
  254. package/dist/chunk-QSVZP2NU.js +0 -214
  255. package/dist/chunk-RJCA5672.js +0 -1664
  256. package/dist/chunk-TMFCNFLW.js +0 -107
  257. package/dist/chunk-TN3PU2WK.js +0 -748
  258. package/dist/chunk-W7ZBF5AA.js +0 -1
  259. package/dist/chunk-YZ6GTZXL.js +0 -48
  260. package/dist/components/command-queue/index.css +0 -53
  261. package/dist/components/command-queue/index.d.ts +0 -204
  262. package/dist/components/command-queue/index.js +0 -12
  263. package/dist/components/forms/index.d.ts +0 -56
  264. package/dist/components/forms/index.js +0 -2
  265. package/dist/components/index.css +0 -443
  266. package/dist/components/monitoring/index.d.ts +0 -66
  267. package/dist/components/monitoring/index.js +0 -2
  268. package/dist/components/notifications/index.d.ts +0 -52
  269. package/dist/components/notifications/index.js +0 -5
  270. package/dist/components/resource-definition/index.css +0 -388
  271. package/dist/components/resource-definition/index.d.ts +0 -301
  272. package/dist/components/resource-definition/index.js +0 -3
  273. package/dist/display/index.css +0 -53
  274. package/dist/display/index.d.ts +0 -606
  275. package/dist/display/index.js +0 -7
  276. package/dist/execution/index.css +0 -388
  277. package/dist/provider/index.css +0 -61
  278. /package/dist/{chunk-Q47SPRY7.js → chunk-BUZONXAW.js} +0 -0
  279. /package/dist/{chunk-NXHL23JW.js → chunk-XXDDMASA.js} +0 -0
@@ -1,7 +1,10 @@
1
- import { UuidSchema, ResourceTypeSchema, NonEmptyStringSchema, OriginResourceTypeSchema } from './chunk-BLO4SISK.js';
1
+ import { useSupabase } from './chunk-JGJSZ3UE.js';
2
+ import { useNotificationAdapter } from './chunk-TIRMFDM4.js';
3
+ import { useStableAccessToken } from './chunk-FWZJH3TL.js';
2
4
  import { useElevasisServices } from './chunk-KA7LO7U5.js';
3
5
  import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
4
6
  import { z } from 'zod';
7
+ import { useCallback, useState, useEffect, useMemo, useId, useRef } from 'react';
5
8
 
6
9
  // src/hooks/executions/queryKeys.ts
7
10
  var executionsKeys = {
@@ -150,10 +153,35 @@ function useBulkDeleteExecutions() {
150
153
  }
151
154
  });
152
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
153
181
  var SessionIdParamSchema = z.object({
154
182
  sessionId: UuidSchema
155
183
  }).strict();
156
- z.object({
184
+ var ExecutionIdParamsSchema = z.object({
157
185
  sessionId: UuidSchema,
158
186
  executionId: UuidSchema
159
187
  }).strict();
@@ -184,7 +212,7 @@ z.object({
184
212
  resourceId: z.string().optional(),
185
213
  limit: z.coerce.number().int().min(1).max(100).default(20)
186
214
  }).strict();
187
- z.object({
215
+ var WebSocketSessionTurnSchema = z.object({
188
216
  type: z.literal("session:turn"),
189
217
  input: z.unknown().refine(
190
218
  (val) => {
@@ -413,6 +441,38 @@ function useExecutionLogs(params = {}) {
413
441
  // Real-time data - always refetch on mount/org switch
414
442
  });
415
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
+ }
416
476
  var RelativeScheduleItemSchema = z.object({
417
477
  offset: z.string().regex(/^[+-]\d+[dhm]$/, "Invalid offset format. Use +3d, -2h, +30m, etc."),
418
478
  payload: z.record(z.string(), z.unknown()),
@@ -658,6 +718,92 @@ function useExecutionHealth({ timeRange }) {
658
718
  // 30s monitoring stale time
659
719
  });
660
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
+ }
770
+ function useErrorNotification() {
771
+ const adapter = useNotificationAdapter();
772
+ return useCallback(
773
+ (error) => {
774
+ adapter.apiError(error);
775
+ },
776
+ [adapter]
777
+ );
778
+ }
779
+ function useSuccessNotification() {
780
+ const adapter = useNotificationAdapter();
781
+ return useCallback((title, message) => adapter.success(title, message), [adapter]);
782
+ }
783
+ function useWarningNotification() {
784
+ const adapter = useNotificationAdapter();
785
+ return useCallback((title, message) => adapter.warning(title, message), [adapter]);
786
+ }
787
+ function useBatchDelete(tableName, invalidateQueryKeys) {
788
+ const supabase = useSupabase();
789
+ const queryClient = useQueryClient();
790
+ const adapter = useNotificationAdapter();
791
+ return useMutation({
792
+ mutationFn: async (ids) => {
793
+ if (ids.length === 0) return;
794
+ const { error } = await supabase.from(tableName).delete().in("id", ids);
795
+ if (error) throw error;
796
+ },
797
+ onSuccess: () => {
798
+ for (const key of invalidateQueryKeys) {
799
+ queryClient.invalidateQueries({ queryKey: key });
800
+ }
801
+ },
802
+ onError: (err) => {
803
+ adapter.apiError(err);
804
+ }
805
+ });
806
+ }
661
807
 
662
808
  // src/hooks/observability/queryKeys.ts
663
809
  var observabilityKeys = {
@@ -1063,5 +1209,213 @@ function useDeleteSchedule() {
1063
1209
  }
1064
1210
  });
1065
1211
  }
1212
+ function usePaginationState(pageSize, resetDeps, total) {
1213
+ const [page, setPage] = useState(1);
1214
+ useEffect(() => {
1215
+ if (resetDeps) {
1216
+ setPage(1);
1217
+ }
1218
+ }, resetDeps ?? []);
1219
+ useEffect(() => {
1220
+ if (total === void 0) return;
1221
+ const lastPage = Math.max(1, Math.ceil(total / pageSize));
1222
+ if (page > lastPage) {
1223
+ setPage(lastPage);
1224
+ }
1225
+ }, [total, pageSize]);
1226
+ return useMemo(
1227
+ () => ({
1228
+ page,
1229
+ setPage,
1230
+ offset: (page - 1) * pageSize,
1231
+ totalPages: (total2) => Math.ceil(total2 / pageSize)
1232
+ }),
1233
+ [page, pageSize]
1234
+ );
1235
+ }
1236
+ function useTableSelection(items, allItems) {
1237
+ const [selectedIds, setSelectedIds] = useState(/* @__PURE__ */ new Set());
1238
+ const pageIds = useMemo(() => new Set(items.map((i) => i.id)), [items]);
1239
+ useEffect(() => {
1240
+ setSelectedIds((prev) => {
1241
+ const validIds = allItems ? new Set(allItems.map((i) => i.id)) : pageIds;
1242
+ const next = new Set([...prev].filter((id) => validIds.has(id)));
1243
+ return next.size === prev.size ? prev : next;
1244
+ });
1245
+ }, [allItems, pageIds]);
1246
+ const toggle = useCallback((id) => {
1247
+ setSelectedIds((prev) => {
1248
+ const next = new Set(prev);
1249
+ if (next.has(id)) next.delete(id);
1250
+ else next.add(id);
1251
+ return next;
1252
+ });
1253
+ }, []);
1254
+ const togglePage = useCallback(() => {
1255
+ setSelectedIds((prev) => {
1256
+ const allPageSelected = items.every((i) => prev.has(i.id));
1257
+ const next = new Set(prev);
1258
+ if (allPageSelected) {
1259
+ for (const item of items) next.delete(item.id);
1260
+ } else {
1261
+ for (const item of items) next.add(item.id);
1262
+ }
1263
+ return next;
1264
+ });
1265
+ }, [items]);
1266
+ const clear = useCallback(() => setSelectedIds(/* @__PURE__ */ new Set()), []);
1267
+ const isPageAllSelected = items.length > 0 && items.every((i) => selectedIds.has(i.id));
1268
+ const isPagePartiallySelected = !isPageAllSelected && items.some((i) => selectedIds.has(i.id));
1269
+ return {
1270
+ selectedIds,
1271
+ toggle,
1272
+ togglePage,
1273
+ clear,
1274
+ isPageAllSelected,
1275
+ isPagePartiallySelected,
1276
+ selectedCount: selectedIds.size,
1277
+ isSelected: (id) => selectedIds.has(id)
1278
+ };
1279
+ }
1280
+ function useTableSort(defaultColumn, defaultDirection = "desc") {
1281
+ const [sort, setSort] = useState({ column: defaultColumn, direction: defaultDirection });
1282
+ const toggleSort = useCallback((column) => {
1283
+ setSort((prev) => {
1284
+ if (prev.column === column) {
1285
+ return { column, direction: prev.direction === "asc" ? "desc" : "asc" };
1286
+ }
1287
+ return { column, direction: "desc" };
1288
+ });
1289
+ }, []);
1290
+ return { sort, toggleSort };
1291
+ }
1292
+ function sortData(data, sort, accessors) {
1293
+ const accessor = accessors[sort.column];
1294
+ if (!accessor) return data;
1295
+ return [...data].sort((a, b) => {
1296
+ const aVal = accessor(a);
1297
+ const bVal = accessor(b);
1298
+ if (aVal == null && bVal == null) return 0;
1299
+ if (aVal == null) return 1;
1300
+ if (bVal == null) return -1;
1301
+ let comparison = 0;
1302
+ if (typeof aVal === "string" && typeof bVal === "string") {
1303
+ comparison = aVal.localeCompare(bVal);
1304
+ } else if (typeof aVal === "number" && typeof bVal === "number") {
1305
+ comparison = aVal - bVal;
1306
+ } else {
1307
+ comparison = String(aVal).localeCompare(String(bVal));
1308
+ }
1309
+ return sort.direction === "asc" ? comparison : -comparison;
1310
+ });
1311
+ }
1312
+ function useSortedData(data, defaultColumn, accessors, defaultDirection = "desc") {
1313
+ const { sort, toggleSort } = useTableSort(defaultColumn, defaultDirection);
1314
+ const sorted = useMemo(() => sortData(data, sort, accessors), [data, sort, accessors]);
1315
+ return { sorted, sort, toggleSort };
1316
+ }
1317
+ function createUseFeatureAccess({
1318
+ useInitialization,
1319
+ useOrganization,
1320
+ optInFeatures = []
1321
+ }) {
1322
+ return function useFeatureAccess() {
1323
+ const { profile, organizationReady } = useInitialization();
1324
+ const { currentMembership } = useOrganization();
1325
+ const { orgConfig, membershipConfig } = useMemo(() => {
1326
+ const organizationConfig = currentMembership?.organization?.config;
1327
+ const memberConfig = currentMembership?.config;
1328
+ return { orgConfig: organizationConfig, membershipConfig: memberConfig };
1329
+ }, [currentMembership]);
1330
+ const userConfig = profile?.config;
1331
+ const checkFeature = useCallback(
1332
+ (featureKey) => {
1333
+ const key = featureKey;
1334
+ const orgValue = orgConfig?.features?.[key];
1335
+ if (!profile?.is_platform_admin) {
1336
+ const membershipValue = membershipConfig?.features?.[key];
1337
+ if (membershipValue === false) return { allowed: false, restrictedBy: "membership" };
1338
+ if (membershipValue === true) return { allowed: true, restrictedBy: null };
1339
+ }
1340
+ if (optInFeatures.includes(featureKey)) {
1341
+ return orgValue === true ? { allowed: true, restrictedBy: null } : { allowed: false, restrictedBy: "org" };
1342
+ }
1343
+ return orgValue === false ? { allowed: false, restrictedBy: "org" } : { allowed: true, restrictedBy: null };
1344
+ },
1345
+ [profile?.is_platform_admin, membershipConfig, orgConfig]
1346
+ );
1347
+ const hasFeature = useCallback((featureKey) => checkFeature(featureKey).allowed, [checkFeature]);
1348
+ return {
1349
+ orgConfig,
1350
+ membershipConfig,
1351
+ userConfig,
1352
+ hasFeature,
1353
+ checkFeature,
1354
+ isReady: organizationReady
1355
+ };
1356
+ };
1357
+ }
1358
+ function useSSEConnection({
1359
+ manager,
1360
+ connectionKey,
1361
+ url,
1362
+ enabled = true,
1363
+ headers,
1364
+ onmessage,
1365
+ onopen,
1366
+ onerror,
1367
+ onclose
1368
+ }) {
1369
+ const [connected, setConnected] = useState(false);
1370
+ const [error, setError] = useState(null);
1371
+ const getAccessToken = useStableAccessToken();
1372
+ const subscriberId = useId();
1373
+ const onmessageRef = useRef(onmessage);
1374
+ const onopenRef = useRef(onopen);
1375
+ const onerrorRef = useRef(onerror);
1376
+ const oncloseRef = useRef(onclose);
1377
+ const headersRef = useRef(headers);
1378
+ onmessageRef.current = onmessage;
1379
+ onopenRef.current = onopen;
1380
+ onerrorRef.current = onerror;
1381
+ oncloseRef.current = onclose;
1382
+ headersRef.current = headers;
1383
+ useEffect(() => {
1384
+ if (!enabled) return;
1385
+ const unsubscribe = manager.subscribe(connectionKey, subscriberId, {
1386
+ url,
1387
+ getToken: getAccessToken,
1388
+ headers: headersRef.current ?? {},
1389
+ onopen(response) {
1390
+ if (response.ok) {
1391
+ setConnected(true);
1392
+ setError(null);
1393
+ }
1394
+ const customError = onopenRef.current?.(response);
1395
+ if (customError) setError(customError);
1396
+ },
1397
+ onmessage(event) {
1398
+ if (!event.data || event.data.trim() === "") return;
1399
+ onmessageRef.current(event.data);
1400
+ },
1401
+ onerror(err) {
1402
+ const msg = err instanceof Error ? err.message : "Unknown error";
1403
+ setConnected(false);
1404
+ setError(msg);
1405
+ onerrorRef.current?.(err instanceof Error ? err : new Error(msg));
1406
+ },
1407
+ onclose() {
1408
+ setConnected(false);
1409
+ oncloseRef.current?.();
1410
+ }
1411
+ });
1412
+ return () => {
1413
+ unsubscribe();
1414
+ setConnected(false);
1415
+ setError(null);
1416
+ };
1417
+ }, [enabled, connectionKey, url, subscriberId, getAccessToken, manager]);
1418
+ return { connected, error };
1419
+ }
1066
1420
 
1067
- export { OperationsService, executionsKeys, observabilityKeys, scheduleKeys, useActivities, useActivityTrend, useBulkDeleteExecutions, useBusinessImpact, useCancelExecution, useCancelSchedule, useCostBreakdown, useCostByModel, useCostSummary, useCostTrends, useCreateSchedule, useDashboardMetrics, useDeleteExecution, useDeleteSchedule, useErrorAnalysis, useErrorDetail, useErrorDetails, useErrorDistribution, useErrorTrends, useExecuteAsync, useExecution, useExecutionHealth, useExecutionLogs, useExecutions, useGetExecutionHistory, useGetSchedule, useListSchedules, usePauseSchedule, useResolveAllErrors, useResolveError, useResolveErrorsByExecution, useResourceDefinition, useResources, useResumeSchedule, useRetryExecution, useTopFailingResources, useUnresolveError, useUpdateAnchor, useUpdateSchedule };
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 };
@@ -0,0 +1,13 @@
1
+ import { useAuthContext } from './chunk-7PLEQFHO.js';
2
+ import { useRef, useCallback } from 'react';
3
+
4
+ function useStableAccessToken() {
5
+ const { getAccessToken } = useAuthContext();
6
+ const getAccessTokenRef = useRef(getAccessToken);
7
+ getAccessTokenRef.current = getAccessToken;
8
+ return useCallback(() => {
9
+ return getAccessTokenRef.current();
10
+ }, []);
11
+ }
12
+
13
+ export { useStableAccessToken };