@opengeni/react 0.57.0 → 2.2.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.md +36 -11
  2. package/dist/artifacts-spreadsheet.js +1 -1
  3. package/dist/artifacts.js +1 -1
  4. package/dist/browser-viewer-GXUICIAG.js +14 -0
  5. package/dist/{chunk-R3AZOAB5.js → chunk-4MDLEHXL.js} +9 -115
  6. package/dist/chunk-4MDLEHXL.js.map +1 -0
  7. package/dist/{chunk-Y7OEDUJ5.js → chunk-5RZN3DD5.js} +1014 -420
  8. package/dist/chunk-5RZN3DD5.js.map +1 -0
  9. package/dist/chunk-5YK2ZDIG.js +116 -0
  10. package/dist/chunk-5YK2ZDIG.js.map +1 -0
  11. package/dist/chunk-H5YGYNXS.js +329 -0
  12. package/dist/chunk-H5YGYNXS.js.map +1 -0
  13. package/dist/{chunk-7WCLAEFV.js → chunk-ICA6R6TW.js} +2 -2
  14. package/dist/{chunk-7WCLAEFV.js.map → chunk-ICA6R6TW.js.map} +1 -1
  15. package/dist/{chunk-IGC6A2ZI.js → chunk-JOAVA2TW.js} +589 -217
  16. package/dist/chunk-JOAVA2TW.js.map +1 -0
  17. package/dist/{chunk-5UQPNLIO.js → chunk-LTCHJ4MS.js} +9 -9
  18. package/dist/chunk-LTCHJ4MS.js.map +1 -0
  19. package/dist/{chunk-C5ZPSSS5.js → chunk-NEXLLTP4.js} +2 -1
  20. package/dist/{chunk-C5ZPSSS5.js.map → chunk-NEXLLTP4.js.map} +1 -1
  21. package/dist/chunk-QGBJ6GHG.js +2300 -0
  22. package/dist/chunk-QGBJ6GHG.js.map +1 -0
  23. package/dist/{chunk-B6WPZSTT.js → chunk-UOLJWT5Y.js} +78 -16
  24. package/dist/chunk-UOLJWT5Y.js.map +1 -0
  25. package/dist/{chunk-MKPIAGVL.js → chunk-W6NFJXSA.js} +8 -19
  26. package/dist/chunk-W6NFJXSA.js.map +1 -0
  27. package/dist/{chunk-XBZWOM2K.js → chunk-X4A66EWZ.js} +8 -3
  28. package/dist/chunk-X4A66EWZ.js.map +1 -0
  29. package/dist/chunk-X4JAFD5R.js +3907 -0
  30. package/dist/chunk-X4JAFD5R.js.map +1 -0
  31. package/dist/{chunk-6KLX2RH5.js → chunk-XSA2QAKP.js} +334 -19
  32. package/dist/chunk-XSA2QAKP.js.map +1 -0
  33. package/dist/{chunk-HA46CYQK.js → chunk-XXWH2JLC.js} +792 -206
  34. package/dist/chunk-XXWH2JLC.js.map +1 -0
  35. package/dist/client.d.ts +2 -2
  36. package/dist/components/browser-viewer.d.ts +7 -1
  37. package/dist/components/computer-viewer.d.ts +4 -1
  38. package/dist/components/enrollment-consent.d.ts +6 -3
  39. package/dist/components/file-browser.d.ts +7 -1
  40. package/dist/components/human-input-form.d.ts +1 -1
  41. package/dist/components/human-input-surface.d.ts +1 -1
  42. package/dist/components/machine-card.d.ts +4 -1
  43. package/dist/components/machines/machine-detail.d.ts +4 -1
  44. package/dist/components/machines/machine-operation-policy.d.ts +11 -0
  45. package/dist/components/machines-dashboard.d.ts +3 -1
  46. package/dist/components/markdown.d.ts +20 -1
  47. package/dist/components/message-timeline.d.ts +1 -1
  48. package/dist/components/model-policy-picker.d.ts +2 -0
  49. package/dist/components/pierre-file.d.ts +1 -1
  50. package/dist/components/sandbox-files.d.ts +8 -2
  51. package/dist/components/sandbox-workspace.d.ts +33 -3
  52. package/dist/components/session-chrome.d.ts +15 -3
  53. package/dist/components/workspace-dock.d.ts +6 -2
  54. package/dist/composer.js +5 -5
  55. package/dist/computer-viewer-ZOP4Q7A7.js +16 -0
  56. package/dist/computer-viewer-ZOP4Q7A7.js.map +1 -0
  57. package/dist/hooks/channel-cache.d.ts +23 -0
  58. package/dist/hooks/shared-machines-list.d.ts +14 -0
  59. package/dist/hooks/use-attached-browsers.d.ts +2 -1
  60. package/dist/hooks/use-channels.d.ts +1 -0
  61. package/dist/hooks/use-composer.d.ts +37 -9
  62. package/dist/hooks/use-machine-chip.d.ts +3 -3
  63. package/dist/hooks/use-machines.d.ts +19 -1
  64. package/dist/hooks/use-sandbox-files.d.ts +1 -0
  65. package/dist/hooks/use-session-background-commands.d.ts +14 -0
  66. package/dist/hooks/use-turn-queue.d.ts +12 -0
  67. package/dist/hooks/use-workspace-sessions.d.ts +1 -0
  68. package/dist/index.d.ts +7 -5
  69. package/dist/index.js +1096 -623
  70. package/dist/index.js.map +1 -1
  71. package/dist/interaction.js +29 -181
  72. package/dist/interaction.js.map +1 -1
  73. package/dist/lib/interaction-errors.d.ts +3 -0
  74. package/dist/machines.d.ts +4 -2
  75. package/dist/machines.js +10 -2
  76. package/dist/model-policy.d.ts +1 -1
  77. package/dist/model-policy.js +1 -1
  78. package/dist/platform-activity-row-BJHUHXAT.js +169 -0
  79. package/dist/platform-activity-row-BJHUHXAT.js.map +1 -0
  80. package/dist/{queue-surface-implementation-2KVJTYXH.js → queue-surface-implementation-BSKUWHRI.js} +76 -16
  81. package/dist/queue-surface-implementation-BSKUWHRI.js.map +1 -0
  82. package/dist/realtime/realtime-control.d.ts +10 -3
  83. package/dist/realtime.js +138 -29
  84. package/dist/realtime.js.map +1 -1
  85. package/dist/session-ui.d.ts +1 -1
  86. package/dist/session-ui.js +6 -2
  87. package/dist/session.d.ts +2 -2
  88. package/dist/session.js +4 -4
  89. package/dist/timeline/index.d.ts +1 -1
  90. package/dist/timeline/platform-activity-row.d.ts +15 -0
  91. package/dist/timeline/screenshot-lightbox.d.ts +1 -1
  92. package/dist/timeline/shared.d.ts +4 -2
  93. package/dist/timeline/types.d.ts +48 -5
  94. package/dist/types/machines.d.ts +2 -2
  95. package/package.json +3 -3
  96. package/src/client.ts +12 -1
  97. package/src/components/artifacts/editable-spreadsheet.tsx +1 -1
  98. package/src/components/browser-viewer.tsx +361 -58
  99. package/src/components/chat-composer.tsx +1 -1
  100. package/src/components/composer.tsx +6 -6
  101. package/src/components/computer-viewer.tsx +368 -115
  102. package/src/components/enrollment-consent.tsx +64 -6
  103. package/src/components/file-browser.tsx +117 -2
  104. package/src/components/human-input-form.tsx +91 -55
  105. package/src/components/human-input-surface.tsx +1 -1
  106. package/src/components/machine-card.tsx +111 -0
  107. package/src/components/machine-input-display.ts +15 -0
  108. package/src/components/machines/machine-detail.tsx +47 -0
  109. package/src/components/machines/machine-operation-policy.tsx +179 -0
  110. package/src/components/machines-dashboard.tsx +6 -0
  111. package/src/components/markdown.tsx +174 -20
  112. package/src/components/message-timeline.tsx +162 -17
  113. package/src/components/model-policy-picker.tsx +9 -17
  114. package/src/components/pierre-file.tsx +1 -1
  115. package/src/components/queue-surface-implementation.tsx +82 -16
  116. package/src/components/sandbox-files.tsx +135 -19
  117. package/src/components/sandbox-workspace.tsx +204 -92
  118. package/src/components/session-chrome.tsx +415 -208
  119. package/src/components/session-status.tsx +1 -1
  120. package/src/components/user-message-body.tsx +168 -48
  121. package/src/components/workspace-dock.tsx +141 -175
  122. package/src/hooks/channel-cache.ts +104 -0
  123. package/src/hooks/shared-machines-list.ts +239 -0
  124. package/src/hooks/use-attached-browsers.ts +5 -1
  125. package/src/hooks/use-browser-frame-stream.ts +6 -1
  126. package/src/hooks/use-browser-session.ts +6 -4
  127. package/src/hooks/use-browser-sessions.ts +7 -1
  128. package/src/hooks/use-channels.ts +32 -10
  129. package/src/hooks/use-composer.ts +760 -291
  130. package/src/hooks/use-computer-frame-stream.ts +14 -9
  131. package/src/hooks/use-computer-session.ts +16 -14
  132. package/src/hooks/use-computer-sessions.ts +8 -1
  133. package/src/hooks/use-last-started-turn-policy.ts +1 -1
  134. package/src/hooks/use-machine-chip.ts +23 -6
  135. package/src/hooks/use-machines.ts +104 -6
  136. package/src/hooks/use-sandbox-files.ts +195 -140
  137. package/src/hooks/use-sandbox-git.ts +58 -29
  138. package/src/hooks/use-session-background-commands.ts +56 -0
  139. package/src/hooks/use-session-capabilities.ts +18 -0
  140. package/src/hooks/use-turn-queue.ts +111 -12
  141. package/src/hooks/use-workspace-sessions.ts +5 -1
  142. package/src/index.ts +26 -4
  143. package/src/lib/interaction-errors.ts +18 -0
  144. package/src/machines.ts +9 -1
  145. package/src/model-policy.ts +10 -2
  146. package/src/realtime/realtime-control.tsx +200 -37
  147. package/src/session-context.ts +1 -0
  148. package/src/session-ui.ts +6 -1
  149. package/src/session.ts +9 -1
  150. package/src/timeline/activity-rail.tsx +20 -75
  151. package/src/timeline/index.ts +4 -0
  152. package/src/timeline/platform-activity-row.tsx +201 -0
  153. package/src/timeline/projection.ts +476 -23
  154. package/src/timeline/screenshot-lightbox.tsx +48 -14
  155. package/src/timeline/shared.tsx +8 -2
  156. package/src/timeline/tool-renderers.tsx +104 -6
  157. package/src/timeline/turn-summary.tsx +6 -1
  158. package/src/timeline/types.ts +75 -2
  159. package/src/types/machines.ts +10 -0
  160. package/styles/compiled.css +115 -104
  161. package/dist/chunk-5UQPNLIO.js.map +0 -1
  162. package/dist/chunk-6KLX2RH5.js.map +0 -1
  163. package/dist/chunk-B6WPZSTT.js.map +0 -1
  164. package/dist/chunk-HA46CYQK.js.map +0 -1
  165. package/dist/chunk-IGC6A2ZI.js.map +0 -1
  166. package/dist/chunk-LLOLUHVG.js +0 -5937
  167. package/dist/chunk-LLOLUHVG.js.map +0 -1
  168. package/dist/chunk-MKPIAGVL.js.map +0 -1
  169. package/dist/chunk-R3AZOAB5.js.map +0 -1
  170. package/dist/chunk-XBZWOM2K.js.map +0 -1
  171. package/dist/chunk-Y7OEDUJ5.js.map +0 -1
  172. package/dist/interactive-workbench-viewers-TOHBXJEE.js +0 -15
  173. package/dist/queue-surface-implementation-2KVJTYXH.js.map +0 -1
  174. /package/dist/{interactive-workbench-viewers-TOHBXJEE.js.map → browser-viewer-GXUICIAG.js.map} +0 -0
@@ -1,26 +1,32 @@
1
1
  import {
2
2
  BrowserViewer,
3
- ComputerViewer,
4
3
  useAttachedBrowsers,
5
4
  useBrowserDownloads,
6
5
  useBrowserFrameStream,
7
6
  useBrowserIdentities,
8
7
  useBrowserSession,
9
8
  useBrowserSessions,
9
+ useSiteAuthConnections
10
+ } from "./chunk-X4JAFD5R.js";
11
+ import {
12
+ ComputerViewer,
10
13
  useComputerFrameStream,
11
14
  useComputerSession,
12
- useComputerSessions,
15
+ useComputerSessions
16
+ } from "./chunk-QGBJ6GHG.js";
17
+ import {
13
18
  useInteractionInterventions,
14
19
  useInteractionInvalidation
15
- } from "./chunk-LLOLUHVG.js";
16
- import "./chunk-R3AZOAB5.js";
20
+ } from "./chunk-H5YGYNXS.js";
21
+ import "./chunk-4MDLEHXL.js";
22
+ import "./chunk-5YK2ZDIG.js";
17
23
  import "./chunk-KZ73RL76.js";
18
24
  import {
19
25
  useEmbeddedBrowserInteraction,
20
26
  useEmbeddedComputerInteraction,
21
27
  useEmbeddedInteraction,
22
28
  useEmbeddedInterventions
23
- } from "./chunk-C5ZPSSS5.js";
29
+ } from "./chunk-NEXLLTP4.js";
24
30
  import "./chunk-LAKLF4PA.js";
25
31
  import "./chunk-22KP6LR5.js";
26
32
  import "./chunk-JVYQRRC4.js";
@@ -181,13 +187,15 @@ function asError(cause) {
181
187
  return cause instanceof Error ? cause : new Error(String(cause));
182
188
  }
183
189
 
184
- // src/hooks/use-site-auth-connections.ts
190
+ // src/hooks/use-auth-runs.ts
185
191
  import { useCallback as useCallback2, useEffect as useEffect2, useRef as useRef2, useState as useState2 } from "react";
186
- function useSiteAuthConnections(options = {}) {
192
+ function useAuthRuns(options = {}) {
187
193
  const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } = useEmbeddedBrowserInteraction(options);
188
194
  const enabled = options.enabled ?? true;
189
- const includeArchived = options.includeArchived ?? false;
190
- const key = `${workspaceId}:${includeArchived ? "all" : "active"}`;
195
+ const browserSessionId = options.browserSessionId ?? null;
196
+ const siteAuthConnectionId = options.siteAuthConnectionId ?? null;
197
+ const includeSettled = options.includeSettled ?? false;
198
+ const key = `${workspaceId}:${browserSessionId ?? "*"}:${siteAuthConnectionId ?? "*"}:${includeSettled}`;
191
199
  const [state, setState] = useState2(() => emptyState2(key, enabled));
192
200
  const [mutationCount, setMutationCount] = useState2(0);
193
201
  const requestRef = useRef2({
@@ -214,15 +222,16 @@ function useSiteAuthConnections(options = {}) {
214
222
  error: foreground || current.key !== key ? null : current.error
215
223
  }));
216
224
  try {
217
- const response = await client.listSiteAuthConnections(workspaceId, {
218
- includeArchived,
225
+ const response = await client.listAuthRuns(workspaceId, {
226
+ ...browserSessionId ? { browserSessionId } : {},
227
+ ...siteAuthConnectionId ? { siteAuthConnectionId } : {},
228
+ includeSettled,
219
229
  signal: controller.signal
220
230
  });
221
231
  if (!mountedRef.current || requestRef.current.id !== id) return;
222
232
  setState({
223
233
  key,
224
- revision: response.revision,
225
- connections: sortConnections(response.connections),
234
+ runs: sortRuns(response.runs),
226
235
  loading: false,
227
236
  refreshing: false,
228
237
  error: null
@@ -240,7 +249,7 @@ function useSiteAuthConnections(options = {}) {
240
249
  if (requestRef.current.id === id) requestRef.current = { id, controller: null };
241
250
  }
242
251
  },
243
- [client, enabled, includeArchived, key, workspaceId]
252
+ [browserSessionId, client, enabled, includeSettled, key, siteAuthConnectionId, workspaceId]
244
253
  );
245
254
  const refresh = useCallback2(async () => await load(false), [load]);
246
255
  useEffect2(() => {
@@ -262,7 +271,6 @@ function useSiteAuthConnections(options = {}) {
262
271
  enabled,
263
272
  event: workspaceInteractionEvent,
264
273
  connectionState: workspaceInteractionConnectionState,
265
- knownRevision: visible.revision,
266
274
  refresh
267
275
  });
268
276
  const mutate = useCallback2(async (operation) => {
@@ -274,166 +282,6 @@ function useSiteAuthConnections(options = {}) {
274
282
  }
275
283
  }, []);
276
284
  const merge = useCallback2(
277
- (connection) => {
278
- setState((current) => {
279
- if (current.key !== key) return current;
280
- const connections = current.connections.filter(
281
- (candidate) => candidate.id !== connection.id
282
- );
283
- if (includeArchived || connection.status !== "archived") connections.push(connection);
284
- return { ...current, connections: sortConnections(connections), error: null };
285
- });
286
- },
287
- [includeArchived, key]
288
- );
289
- const create = useCallback2(
290
- async (request) => await mutate(async () => {
291
- const response = await client.createSiteAuthConnection(workspaceId, {
292
- ...request,
293
- operationId: request.operationId ?? crypto.randomUUID()
294
- });
295
- merge(response.connection);
296
- return response;
297
- }),
298
- [client, merge, mutate, workspaceId]
299
- );
300
- const update = useCallback2(
301
- async (connectionId, request) => await mutate(async () => {
302
- const response = await client.updateSiteAuthConnection(workspaceId, connectionId, {
303
- ...request,
304
- operationId: request.operationId ?? crypto.randomUUID()
305
- });
306
- merge(response.connection);
307
- return response;
308
- }),
309
- [client, merge, mutate, workspaceId]
310
- );
311
- return {
312
- revision: visible.revision,
313
- connections: visible.connections,
314
- loading: visible.loading,
315
- refreshing: visible.refreshing,
316
- mutating: mutationCount > 0,
317
- error: visible.error,
318
- refresh,
319
- create,
320
- update
321
- };
322
- }
323
- function emptyState2(key, loading) {
324
- return {
325
- key,
326
- revision: 0,
327
- connections: [],
328
- loading,
329
- refreshing: false,
330
- error: null
331
- };
332
- }
333
- function sortConnections(connections) {
334
- return [...connections].sort(
335
- (left, right) => Number(left.status === "archived") - Number(right.status === "archived") || left.name.localeCompare(right.name) || left.accountLabel.localeCompare(right.accountLabel)
336
- );
337
- }
338
- function asError2(cause) {
339
- return cause instanceof Error ? cause : new Error(String(cause));
340
- }
341
-
342
- // src/hooks/use-auth-runs.ts
343
- import { useCallback as useCallback3, useEffect as useEffect3, useRef as useRef3, useState as useState3 } from "react";
344
- function useAuthRuns(options = {}) {
345
- const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } = useEmbeddedBrowserInteraction(options);
346
- const enabled = options.enabled ?? true;
347
- const browserSessionId = options.browserSessionId ?? null;
348
- const siteAuthConnectionId = options.siteAuthConnectionId ?? null;
349
- const includeSettled = options.includeSettled ?? false;
350
- const key = `${workspaceId}:${browserSessionId ?? "*"}:${siteAuthConnectionId ?? "*"}:${includeSettled}`;
351
- const [state, setState] = useState3(() => emptyState3(key, enabled));
352
- const [mutationCount, setMutationCount] = useState3(0);
353
- const requestRef = useRef3({
354
- id: 0,
355
- controller: null
356
- });
357
- const mountedRef = useRef3(true);
358
- const visible = state.key === key ? state : emptyState3(key, enabled);
359
- const cancelLoad = useCallback3(() => {
360
- requestRef.current.controller?.abort();
361
- requestRef.current = { id: requestRef.current.id + 1, controller: null };
362
- }, []);
363
- const load = useCallback3(
364
- async (foreground) => {
365
- if (!enabled) return;
366
- const id = requestRef.current.id + 1;
367
- requestRef.current.controller?.abort();
368
- const controller = new AbortController();
369
- requestRef.current = { id, controller };
370
- setState((current) => ({
371
- ...current.key === key ? current : emptyState3(key, true),
372
- loading: foreground,
373
- refreshing: !foreground,
374
- error: foreground || current.key !== key ? null : current.error
375
- }));
376
- try {
377
- const response = await client.listAuthRuns(workspaceId, {
378
- ...browserSessionId ? { browserSessionId } : {},
379
- ...siteAuthConnectionId ? { siteAuthConnectionId } : {},
380
- includeSettled,
381
- signal: controller.signal
382
- });
383
- if (!mountedRef.current || requestRef.current.id !== id) return;
384
- setState({
385
- key,
386
- runs: sortRuns(response.runs),
387
- loading: false,
388
- refreshing: false,
389
- error: null
390
- });
391
- } catch (cause) {
392
- if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)
393
- return;
394
- setState((current) => ({
395
- ...current.key === key ? current : emptyState3(key, true),
396
- loading: false,
397
- refreshing: false,
398
- error: asError3(cause)
399
- }));
400
- } finally {
401
- if (requestRef.current.id === id) requestRef.current = { id, controller: null };
402
- }
403
- },
404
- [browserSessionId, client, enabled, includeSettled, key, siteAuthConnectionId, workspaceId]
405
- );
406
- const refresh = useCallback3(async () => await load(false), [load]);
407
- useEffect3(() => {
408
- mountedRef.current = true;
409
- if (!enabled) {
410
- cancelLoad();
411
- setState(emptyState3(key, false));
412
- return;
413
- }
414
- void load(true);
415
- return () => {
416
- mountedRef.current = false;
417
- cancelLoad();
418
- };
419
- }, [cancelLoad, enabled, key, load]);
420
- useInteractionInvalidation({
421
- workspaceId,
422
- key,
423
- enabled,
424
- event: workspaceInteractionEvent,
425
- connectionState: workspaceInteractionConnectionState,
426
- refresh
427
- });
428
- const mutate = useCallback3(async (operation) => {
429
- setMutationCount((count) => count + 1);
430
- try {
431
- return await operation();
432
- } finally {
433
- if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));
434
- }
435
- }, []);
436
- const merge = useCallback3(
437
285
  (run) => {
438
286
  setState((current) => {
439
287
  if (current.key !== key) return current;
@@ -445,7 +293,7 @@ function useAuthRuns(options = {}) {
445
293
  },
446
294
  [browserSessionId, includeSettled, key, siteAuthConnectionId]
447
295
  );
448
- const start = useCallback3(
296
+ const start = useCallback2(
449
297
  async (scopeBrowserSessionId, request) => await mutate(async () => {
450
298
  const response = await client.startBrowserAuthRun(workspaceId, scopeBrowserSessionId, {
451
299
  ...request,
@@ -456,7 +304,7 @@ function useAuthRuns(options = {}) {
456
304
  }),
457
305
  [client, merge, mutate, workspaceId]
458
306
  );
459
- const report = useCallback3(
307
+ const report = useCallback2(
460
308
  async (scopeBrowserSessionId, authRunId, request) => await mutate(async () => {
461
309
  const response = await client.reportBrowserAuthRun(
462
310
  workspaceId,
@@ -469,7 +317,7 @@ function useAuthRuns(options = {}) {
469
317
  }),
470
318
  [client, merge, mutate, workspaceId]
471
319
  );
472
- const protectedFill = useCallback3(
320
+ const protectedFill = useCallback2(
473
321
  async (scopeBrowserSessionId, authRunId, request) => await mutate(async () => {
474
322
  const response = await client.protectedBrowserAuthFill(
475
323
  workspaceId,
@@ -482,7 +330,7 @@ function useAuthRuns(options = {}) {
482
330
  }),
483
331
  [client, merge, mutate, workspaceId]
484
332
  );
485
- const verify = useCallback3(
333
+ const verify = useCallback2(
486
334
  async (scopeBrowserSessionId, authRunId, request) => await mutate(async () => {
487
335
  const response = await client.verifyBrowserAuthRun(
488
336
  workspaceId,
@@ -508,7 +356,7 @@ function useAuthRuns(options = {}) {
508
356
  verify
509
357
  };
510
358
  }
511
- function emptyState3(key, loading) {
359
+ function emptyState2(key, loading) {
512
360
  return {
513
361
  key,
514
362
  runs: [],
@@ -523,7 +371,7 @@ function sortRuns(runs) {
523
371
  function isSettled(run) {
524
372
  return run.state === "verified" || run.state === "failed" || run.state === "cancelled";
525
373
  }
526
- function asError3(cause) {
374
+ function asError2(cause) {
527
375
  return cause instanceof Error ? cause : new Error(String(cause));
528
376
  }
529
377
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/use-network-routes.ts","../src/hooks/use-site-auth-connections.ts","../src/hooks/use-auth-runs.ts"],"sourcesContent":["import type {\n CreateNetworkRouteRequest,\n NetworkRoute,\n NetworkRouteMutationResponse,\n UpdateNetworkRouteRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseNetworkRoutesOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n includeArchived?: boolean | undefined;\n};\n\nexport type UseNetworkRoutesResult = {\n revision: number;\n routes: NetworkRoute[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n create: (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n update: (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n};\n\n/** Workspace network-route registry. Route mutations never expose brokered credentials. */\nexport function useNetworkRoutes(options: UseNetworkRoutesOptions = {}): UseNetworkRoutesResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const includeArchived = options.includeArchived ?? false;\n const key = `${workspaceId}:${includeArchived ? \"all\" : \"active\"}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listNetworkRoutes(workspaceId, {\n includeArchived,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n revision: response.revision,\n routes: sortRoutes(response.routes),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [client, enabled, includeArchived, key, workspaceId],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n const refresh = useCallback(async () => await load(false), [load]);\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n knownRevision: visible.revision,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (route: NetworkRoute) => {\n setState((current) => {\n if (current.key !== key) return current;\n const routes = current.routes.filter((candidate) => candidate.id !== route.id);\n if (includeArchived || route.status !== \"archived\") routes.push(route);\n return { ...current, routes: sortRoutes(routes), error: null };\n });\n },\n [includeArchived, key],\n );\n\n const create = useCallback(\n async (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.createNetworkRoute(workspaceId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const update = useCallback(\n async (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.updateNetworkRoute(workspaceId, networkRouteId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n revision: visible.revision,\n routes: visible.routes,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n create,\n update,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n revision: 0,\n routes: [] as NetworkRoute[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRoutes(routes: readonly NetworkRoute[]): NetworkRoute[] {\n return [...routes].sort(\n (left, right) =>\n Number(left.status === \"archived\") - Number(right.status === \"archived\") ||\n left.name.localeCompare(right.name),\n );\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type NetworkRoutesClient = EmbeddedBrowserInteractionClientLike;\n","import type {\n CreateSiteAuthConnectionRequest,\n SiteAuthConnection,\n SiteAuthConnectionMutationResponse,\n UpdateSiteAuthConnectionRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseSiteAuthConnectionsOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n includeArchived?: boolean | undefined;\n};\n\nexport type UseSiteAuthConnectionsResult = {\n revision: number;\n connections: SiteAuthConnection[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n create: (\n request: Omit<CreateSiteAuthConnectionRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<SiteAuthConnectionMutationResponse>;\n update: (\n connectionId: string,\n request: Omit<UpdateSiteAuthConnectionRequest, \"operationId\"> & {\n operationId?: string;\n },\n ) => Promise<SiteAuthConnectionMutationResponse>;\n};\n\n/** Secret-free workspace login recipes and their verified health. */\nexport function useSiteAuthConnections(\n options: UseSiteAuthConnectionsOptions = {},\n): UseSiteAuthConnectionsResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const includeArchived = options.includeArchived ?? false;\n const key = `${workspaceId}:${includeArchived ? \"all\" : \"active\"}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listSiteAuthConnections(workspaceId, {\n includeArchived,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n revision: response.revision,\n connections: sortConnections(response.connections),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [client, enabled, includeArchived, key, workspaceId],\n );\n\n const refresh = useCallback(async () => await load(false), [load]);\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n knownRevision: visible.revision,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (connection: SiteAuthConnection) => {\n setState((current) => {\n if (current.key !== key) return current;\n const connections = current.connections.filter(\n (candidate) => candidate.id !== connection.id,\n );\n if (includeArchived || connection.status !== \"archived\") connections.push(connection);\n return { ...current, connections: sortConnections(connections), error: null };\n });\n },\n [includeArchived, key],\n );\n\n const create = useCallback(\n async (\n request: Omit<CreateSiteAuthConnectionRequest, \"operationId\"> & {\n operationId?: string;\n },\n ): Promise<SiteAuthConnectionMutationResponse> =>\n await mutate(async () => {\n const response = await client.createSiteAuthConnection(workspaceId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.connection);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const update = useCallback(\n async (\n connectionId: string,\n request: Omit<UpdateSiteAuthConnectionRequest, \"operationId\"> & {\n operationId?: string;\n },\n ): Promise<SiteAuthConnectionMutationResponse> =>\n await mutate(async () => {\n const response = await client.updateSiteAuthConnection(workspaceId, connectionId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.connection);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n revision: visible.revision,\n connections: visible.connections,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n create,\n update,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n revision: 0,\n connections: [] as SiteAuthConnection[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortConnections(connections: readonly SiteAuthConnection[]): SiteAuthConnection[] {\n return [...connections].sort(\n (left, right) =>\n Number(left.status === \"archived\") - Number(right.status === \"archived\") ||\n left.name.localeCompare(right.name) ||\n left.accountLabel.localeCompare(right.accountLabel),\n );\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type SiteAuthConnectionsClient = EmbeddedBrowserInteractionClientLike;\n","import type {\n AuthRun,\n AuthRunMutationResponse,\n ProtectedAuthFillRequest,\n ProtectedAuthFillResponse,\n ReportAuthRunRequest,\n StartAuthRunRequest,\n VerifyAuthRunRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseAuthRunsOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n browserSessionId?: string | null | undefined;\n siteAuthConnectionId?: string | null | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type UseAuthRunsResult = {\n runs: AuthRun[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n start: (\n browserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n report: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n protectedFill: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<ProtectedAuthFillResponse>;\n verify: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n};\n\n/** Live authentication state machines tied to exact browser document generations. */\nexport function useAuthRuns(options: UseAuthRunsOptions = {}): UseAuthRunsResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const browserSessionId = options.browserSessionId ?? null;\n const siteAuthConnectionId = options.siteAuthConnectionId ?? null;\n const includeSettled = options.includeSettled ?? false;\n const key = `${workspaceId}:${browserSessionId ?? \"*\"}:${siteAuthConnectionId ?? \"*\"}:${includeSettled}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listAuthRuns(workspaceId, {\n ...(browserSessionId ? { browserSessionId } : {}),\n ...(siteAuthConnectionId ? { siteAuthConnectionId } : {}),\n includeSettled,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n runs: sortRuns(response.runs),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [browserSessionId, client, enabled, includeSettled, key, siteAuthConnectionId, workspaceId],\n );\n\n const refresh = useCallback(async () => await load(false), [load]);\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (run: AuthRun) => {\n setState((current) => {\n if (current.key !== key) return current;\n const runs = current.runs.filter((candidate) => candidate.id !== run.id);\n const matches =\n (!browserSessionId || run.browserSessionId === browserSessionId) &&\n (!siteAuthConnectionId || run.siteAuthConnectionId === siteAuthConnectionId);\n if (matches && (includeSettled || !isSettled(run))) runs.push(run);\n return { ...current, runs: sortRuns(runs), error: null };\n });\n },\n [browserSessionId, includeSettled, key, siteAuthConnectionId],\n );\n\n const start = useCallback(\n async (\n scopeBrowserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.startBrowserAuthRun(workspaceId, scopeBrowserSessionId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const report = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.reportBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const protectedFill = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ): Promise<ProtectedAuthFillResponse> =>\n await mutate(async () => {\n const response = await client.protectedBrowserAuthFill(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const verify = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.verifyBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n runs: visible.runs,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n start,\n report,\n protectedFill,\n verify,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n runs: [] as AuthRun[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRuns(runs: readonly AuthRun[]): AuthRun[] {\n return [...runs].sort((left, right) => Date.parse(right.updatedAt) - Date.parse(left.updatedAt));\n}\n\nfunction isSettled(run: AuthRun): boolean {\n return run.state === \"verified\" || run.state === \"failed\" || run.state === \"cancelled\";\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type AuthRunsClient = EmbeddedBrowserInteractionClientLike;\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","useState","emptyState","useRef","useCallback","asError","useEffect","useCallback","useEffect","useRef","useState","useState","emptyState","useRef","useCallback","asError","useEffect"]}
1
+ {"version":3,"sources":["../src/hooks/use-network-routes.ts","../src/hooks/use-auth-runs.ts"],"sourcesContent":["import type {\n CreateNetworkRouteRequest,\n NetworkRoute,\n NetworkRouteMutationResponse,\n UpdateNetworkRouteRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseNetworkRoutesOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n includeArchived?: boolean | undefined;\n};\n\nexport type UseNetworkRoutesResult = {\n revision: number;\n routes: NetworkRoute[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n create: (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n update: (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<NetworkRouteMutationResponse>;\n};\n\n/** Workspace network-route registry. Route mutations never expose brokered credentials. */\nexport function useNetworkRoutes(options: UseNetworkRoutesOptions = {}): UseNetworkRoutesResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const includeArchived = options.includeArchived ?? false;\n const key = `${workspaceId}:${includeArchived ? \"all\" : \"active\"}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listNetworkRoutes(workspaceId, {\n includeArchived,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n revision: response.revision,\n routes: sortRoutes(response.routes),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [client, enabled, includeArchived, key, workspaceId],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n const refresh = useCallback(async () => await load(false), [load]);\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n knownRevision: visible.revision,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (route: NetworkRoute) => {\n setState((current) => {\n if (current.key !== key) return current;\n const routes = current.routes.filter((candidate) => candidate.id !== route.id);\n if (includeArchived || route.status !== \"archived\") routes.push(route);\n return { ...current, routes: sortRoutes(routes), error: null };\n });\n },\n [includeArchived, key],\n );\n\n const create = useCallback(\n async (\n request: Omit<CreateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.createNetworkRoute(workspaceId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const update = useCallback(\n async (\n networkRouteId: string,\n request: Omit<UpdateNetworkRouteRequest, \"operationId\"> & { operationId?: string },\n ): Promise<NetworkRouteMutationResponse> =>\n await mutate(async () => {\n const response = await client.updateNetworkRoute(workspaceId, networkRouteId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.route);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n revision: visible.revision,\n routes: visible.routes,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n create,\n update,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n revision: 0,\n routes: [] as NetworkRoute[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRoutes(routes: readonly NetworkRoute[]): NetworkRoute[] {\n return [...routes].sort(\n (left, right) =>\n Number(left.status === \"archived\") - Number(right.status === \"archived\") ||\n left.name.localeCompare(right.name),\n );\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type NetworkRoutesClient = EmbeddedBrowserInteractionClientLike;\n","import type {\n AuthRun,\n AuthRunMutationResponse,\n ProtectedAuthFillRequest,\n ProtectedAuthFillResponse,\n ReportAuthRunRequest,\n StartAuthRunRequest,\n VerifyAuthRunRequest,\n} from \"@opengeni/sdk/interaction\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { EmbeddedBrowserInteractionClientLike } from \"../client\";\nimport {\n type EmbeddedBrowserInteractionClientOverride,\n useEmbeddedBrowserInteraction,\n} from \"../session-context\";\nimport { useInteractionInvalidation } from \"./use-interaction-invalidation\";\n\nexport type UseAuthRunsOptions = EmbeddedBrowserInteractionClientOverride & {\n enabled?: boolean | undefined;\n browserSessionId?: string | null | undefined;\n siteAuthConnectionId?: string | null | undefined;\n includeSettled?: boolean | undefined;\n};\n\nexport type UseAuthRunsResult = {\n runs: AuthRun[];\n loading: boolean;\n refreshing: boolean;\n mutating: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n start: (\n browserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n report: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n protectedFill: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<ProtectedAuthFillResponse>;\n verify: (\n browserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ) => Promise<AuthRunMutationResponse>;\n};\n\n/** Live authentication state machines tied to exact browser document generations. */\nexport function useAuthRuns(options: UseAuthRunsOptions = {}): UseAuthRunsResult {\n const { client, workspaceId, workspaceInteractionEvent, workspaceInteractionConnectionState } =\n useEmbeddedBrowserInteraction(options);\n const enabled = options.enabled ?? true;\n const browserSessionId = options.browserSessionId ?? null;\n const siteAuthConnectionId = options.siteAuthConnectionId ?? null;\n const includeSettled = options.includeSettled ?? false;\n const key = `${workspaceId}:${browserSessionId ?? \"*\"}:${siteAuthConnectionId ?? \"*\"}:${includeSettled}`;\n const [state, setState] = useState(() => emptyState(key, enabled));\n const [mutationCount, setMutationCount] = useState(0);\n const requestRef = useRef<{ id: number; controller: AbortController | null }>({\n id: 0,\n controller: null,\n });\n const mountedRef = useRef(true);\n const visible = state.key === key ? state : emptyState(key, enabled);\n\n const cancelLoad = useCallback(() => {\n requestRef.current.controller?.abort();\n requestRef.current = { id: requestRef.current.id + 1, controller: null };\n }, []);\n\n const load = useCallback(\n async (foreground: boolean): Promise<void> => {\n if (!enabled) return;\n const id = requestRef.current.id + 1;\n requestRef.current.controller?.abort();\n const controller = new AbortController();\n requestRef.current = { id, controller };\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: foreground,\n refreshing: !foreground,\n error: foreground || current.key !== key ? null : current.error,\n }));\n try {\n const response = await client.listAuthRuns(workspaceId, {\n ...(browserSessionId ? { browserSessionId } : {}),\n ...(siteAuthConnectionId ? { siteAuthConnectionId } : {}),\n includeSettled,\n signal: controller.signal,\n });\n if (!mountedRef.current || requestRef.current.id !== id) return;\n setState({\n key,\n runs: sortRuns(response.runs),\n loading: false,\n refreshing: false,\n error: null,\n });\n } catch (cause) {\n if (controller.signal.aborted || !mountedRef.current || requestRef.current.id !== id)\n return;\n setState((current) => ({\n ...(current.key === key ? current : emptyState(key, true)),\n loading: false,\n refreshing: false,\n error: asError(cause),\n }));\n } finally {\n if (requestRef.current.id === id) requestRef.current = { id, controller: null };\n }\n },\n [browserSessionId, client, enabled, includeSettled, key, siteAuthConnectionId, workspaceId],\n );\n\n const refresh = useCallback(async () => await load(false), [load]);\n\n useEffect(() => {\n mountedRef.current = true;\n if (!enabled) {\n cancelLoad();\n setState(emptyState(key, false));\n return;\n }\n void load(true);\n return () => {\n mountedRef.current = false;\n cancelLoad();\n };\n }, [cancelLoad, enabled, key, load]);\n\n useInteractionInvalidation({\n workspaceId,\n key,\n enabled,\n event: workspaceInteractionEvent,\n connectionState: workspaceInteractionConnectionState,\n refresh,\n });\n\n const mutate = useCallback(async <T>(operation: () => Promise<T>): Promise<T> => {\n setMutationCount((count) => count + 1);\n try {\n return await operation();\n } finally {\n if (mountedRef.current) setMutationCount((count) => Math.max(0, count - 1));\n }\n }, []);\n\n const merge = useCallback(\n (run: AuthRun) => {\n setState((current) => {\n if (current.key !== key) return current;\n const runs = current.runs.filter((candidate) => candidate.id !== run.id);\n const matches =\n (!browserSessionId || run.browserSessionId === browserSessionId) &&\n (!siteAuthConnectionId || run.siteAuthConnectionId === siteAuthConnectionId);\n if (matches && (includeSettled || !isSettled(run))) runs.push(run);\n return { ...current, runs: sortRuns(runs), error: null };\n });\n },\n [browserSessionId, includeSettled, key, siteAuthConnectionId],\n );\n\n const start = useCallback(\n async (\n scopeBrowserSessionId: string,\n request: Omit<StartAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.startBrowserAuthRun(workspaceId, scopeBrowserSessionId, {\n ...request,\n operationId: request.operationId ?? crypto.randomUUID(),\n });\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const report = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ReportAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.reportBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const protectedFill = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<ProtectedAuthFillRequest, \"operationId\"> & { operationId?: string },\n ): Promise<ProtectedAuthFillResponse> =>\n await mutate(async () => {\n const response = await client.protectedBrowserAuthFill(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n const verify = useCallback(\n async (\n scopeBrowserSessionId: string,\n authRunId: string,\n request: Omit<VerifyAuthRunRequest, \"operationId\"> & { operationId?: string },\n ): Promise<AuthRunMutationResponse> =>\n await mutate(async () => {\n const response = await client.verifyBrowserAuthRun(\n workspaceId,\n scopeBrowserSessionId,\n authRunId,\n { ...request, operationId: request.operationId ?? crypto.randomUUID() },\n );\n merge(response.run);\n return response;\n }),\n [client, merge, mutate, workspaceId],\n );\n\n return {\n runs: visible.runs,\n loading: visible.loading,\n refreshing: visible.refreshing,\n mutating: mutationCount > 0,\n error: visible.error,\n refresh,\n start,\n report,\n protectedFill,\n verify,\n };\n}\n\nfunction emptyState(key: string, loading: boolean) {\n return {\n key,\n runs: [] as AuthRun[],\n loading,\n refreshing: false,\n error: null as Error | null,\n };\n}\n\nfunction sortRuns(runs: readonly AuthRun[]): AuthRun[] {\n return [...runs].sort((left, right) => Date.parse(right.updatedAt) - Date.parse(left.updatedAt));\n}\n\nfunction isSettled(run: AuthRun): boolean {\n return run.state === \"verified\" || run.state === \"failed\" || run.state === \"cancelled\";\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nexport type AuthRunsClient = EmbeddedBrowserInteractionClientLike;\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","useState","emptyState","useRef","useCallback","asError","useEffect"]}
@@ -0,0 +1,3 @@
1
+ import { OpenGeniApiError } from "@opengeni/sdk";
2
+ export declare function isNonRetryableInteractionError(error: unknown): error is OpenGeniApiError;
3
+ export declare function isSourcePlacementChangedError(error: unknown, resource: "browser_session" | "computer_session"): error is OpenGeniApiError;
@@ -1,4 +1,4 @@
1
- export type { ConnectionStatus, MachineKind, MachineMetricsSeriesResponse, MachineState, MachineView, MachinesResponse, MetricSample, } from "./types/machines.js";
1
+ export type { ConnectionStatus, MachineKind, MachineOperationPolicy, MachineMetricsSeriesResponse, MachineState, MachineView, MachinesResponse, MetricSample, } from "./types/machines.js";
2
2
  export { connectionStatusForState } from "./types/machines.js";
3
3
  export { ConnectionDot, ConnectionStatusPill, MachineStatusPill, CONNECTION_STATUS_META, MACHINE_STATE_BADGE_META, } from "./components/machine-status-pill.js";
4
4
  export type { ConnectionDotProps, ConnectionStatusMeta, ConnectionStatusPillProps, MachineStateBadgeMeta, MachineStatusPillProps, } from "./components/machine-status-pill.js";
@@ -16,6 +16,8 @@ export { MetricHistoryChart } from "./components/machines/metric-history-chart.j
16
16
  export type { MetricHistoryChartProps, SeriesPoint, } from "./components/machines/metric-history-chart.js";
17
17
  export { MachineDetail } from "./components/machines/machine-detail.js";
18
18
  export type { MachineDetailProps } from "./components/machines/machine-detail.js";
19
+ export { MachineOperationPolicyEditor } from "./components/machines/machine-operation-policy.js";
20
+ export type { MachineOperationPolicyEditorProps } from "./components/machines/machine-operation-policy.js";
19
21
  export { METRICS, METRIC_WINDOWS, WINDOW_LABEL, pointsFor } from "./components/machines/series.js";
20
22
  export type { MetricDef, MetricKey, MetricWindow } from "./components/machines/series.js";
21
23
  export { MachinesDashboard } from "./components/machines-dashboard.js";
@@ -26,5 +28,5 @@ export { EnrollmentDeviceFlow } from "./components/enrollment-device-flow.js";
26
28
  export type { DeviceFlowPhase, EnrollmentDeviceFlowProps, } from "./components/enrollment-device-flow.js";
27
29
  export { EnrollmentConsent } from "./components/enrollment-consent.js";
28
30
  export type { EnrollmentConsentMachine, EnrollmentConsentPhase, EnrollmentConsentProps, } from "./components/enrollment-consent.js";
29
- export { useMachines } from "./hooks/use-machines.js";
31
+ export { useMachines, MACHINES_COMPOSER_POLL_MS, MACHINES_DASHBOARD_POLL_MS, MACHINES_SESSION_POLL_MS, } from "./hooks/use-machines.js";
30
32
  export type { MachinesClientLike, UseMachinesOptions, UseMachinesResult, } from "./hooks/use-machines.js";
package/dist/machines.js CHANGED
@@ -5,6 +5,9 @@ import {
5
5
  EnrollmentConsent,
6
6
  EnrollmentDeviceFlow,
7
7
  HEALTH_TOKEN,
8
+ MACHINES_COMPOSER_POLL_MS,
9
+ MACHINES_DASHBOARD_POLL_MS,
10
+ MACHINES_SESSION_POLL_MS,
8
11
  MACHINE_STATE_BADGE_META,
9
12
  METRICS,
10
13
  METRIC_WINDOWS,
@@ -13,6 +16,7 @@ import {
13
16
  MachineDockBar,
14
17
  MachineHealthPill,
15
18
  MachineMetrics,
19
+ MachineOperationPolicyEditor,
16
20
  MachineStatusPill,
17
21
  MachinesDashboard,
18
22
  MetricHistoryChart,
@@ -24,9 +28,9 @@ import {
24
28
  healthPulses,
25
29
  pointsFor,
26
30
  useMachines
27
- } from "./chunk-HA46CYQK.js";
31
+ } from "./chunk-XXWH2JLC.js";
28
32
  import "./chunk-KZ73RL76.js";
29
- import "./chunk-C5ZPSSS5.js";
33
+ import "./chunk-NEXLLTP4.js";
30
34
  import "./chunk-LAKLF4PA.js";
31
35
  import "./chunk-22KP6LR5.js";
32
36
  export {
@@ -36,6 +40,9 @@ export {
36
40
  EnrollmentConsent,
37
41
  EnrollmentDeviceFlow,
38
42
  HEALTH_TOKEN,
43
+ MACHINES_COMPOSER_POLL_MS,
44
+ MACHINES_DASHBOARD_POLL_MS,
45
+ MACHINES_SESSION_POLL_MS,
39
46
  MACHINE_STATE_BADGE_META,
40
47
  METRICS,
41
48
  METRIC_WINDOWS,
@@ -44,6 +51,7 @@ export {
44
51
  MachineDockBar,
45
52
  MachineHealthPill,
46
53
  MachineMetrics,
54
+ MachineOperationPolicyEditor,
47
55
  MachineStatusPill,
48
56
  MachinesDashboard,
49
57
  MetricHistoryChart,
@@ -1,5 +1,5 @@
1
1
  import type { ClientModel, ReasoningEffort, WorkspaceModelCatalogModel } from "@opengeni/sdk";
2
- export type PickerBillingClass = "opengeni_credits" | "codex_subscription" | "supergrok_subscription" | "byok";
2
+ export type PickerBillingClass = "opengeni_credits" | "external" | "codex_subscription" | "supergrok_subscription" | "byok";
3
3
  export type PickerModelRow<TCatalog extends ClientModel = WorkspaceModelCatalogModel> = {
4
4
  id: string;
5
5
  label: string;
@@ -15,7 +15,7 @@ import {
15
15
  projectPickerRows,
16
16
  runnableLatencyModesForModel,
17
17
  sortPickerRows
18
- } from "./chunk-XBZWOM2K.js";
18
+ } from "./chunk-X4A66EWZ.js";
19
19
  export {
20
20
  advancedSourceSummary,
21
21
  availabilityReasonLabel,