@gen3/workspaces 0.12.56 → 0.12.58

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 (130) hide show
  1. package/dist/dts/api/hatcheryApiHandler.d.ts.map +1 -1
  2. package/dist/dts/api/hatcheryApiHandler.js +3 -0
  3. package/dist/dts/api/hatcheryApiHandler.js.map +1 -1
  4. package/dist/dts/api/kernelApiHandler.d.ts.map +1 -1
  5. package/dist/dts/api/kernelApiHandler.js +0 -2
  6. package/dist/dts/api/kernelApiHandler.js.map +1 -1
  7. package/dist/dts/api/workspaceAssetsApi.d.ts +17 -0
  8. package/dist/dts/api/workspaceAssetsApi.d.ts.map +1 -1
  9. package/dist/dts/api/workspaceAssetsApi.js +115 -123
  10. package/dist/dts/api/workspaceAssetsApi.js.map +1 -1
  11. package/dist/dts/auth/auth.js +1 -1
  12. package/dist/dts/auth/auth.js.map +1 -1
  13. package/dist/dts/components/AutoFitIframe.d.ts +1 -1
  14. package/dist/dts/components/AutoFitIframe.d.ts.map +1 -1
  15. package/dist/dts/components/CodingAssistantPanel/CodingAssistantPanel.d.ts +2 -1
  16. package/dist/dts/components/CodingAssistantPanel/CodingAssistantPanel.d.ts.map +1 -1
  17. package/dist/dts/components/CodingAssistantPanel/CodingAssistantPanel.js +0 -1
  18. package/dist/dts/components/CodingAssistantPanel/CodingAssistantPanel.js.map +1 -1
  19. package/dist/dts/components/CodingAssistantPanel/CodingAssistantPanel.stories.d.ts +1 -1
  20. package/dist/dts/components/CodingAssistantPanel/MessageBubble.d.ts +3 -2
  21. package/dist/dts/components/CodingAssistantPanel/MessageBubble.d.ts.map +1 -1
  22. package/dist/dts/components/CodingAssistantPanel/MessageBubble.js +3 -3
  23. package/dist/dts/components/CodingAssistantPanel/MessageBubble.js.map +1 -1
  24. package/dist/dts/components/CodingAssistantPanel/MessageBubble.stories.d.ts +1 -1
  25. package/dist/dts/components/CompactDictionaryPanel/CompactDictionaryPanel.d.ts +2 -1
  26. package/dist/dts/components/CompactDictionaryPanel/CompactDictionaryPanel.d.ts.map +1 -1
  27. package/dist/dts/components/CompactDictionaryPanel/CompactDictionaryPanel.js.map +1 -1
  28. package/dist/dts/components/CompactDictionaryPanel/CompactDictionaryPanel.stories.d.ts +1 -1
  29. package/dist/dts/components/CompactDictionaryPanel/FieldLinkCountBadge.d.ts +2 -1
  30. package/dist/dts/components/CompactDictionaryPanel/FieldLinkCountBadge.d.ts.map +1 -1
  31. package/dist/dts/components/DataToolsPanel.d.ts +2 -1
  32. package/dist/dts/components/DataToolsPanel.d.ts.map +1 -1
  33. package/dist/dts/components/DataToolsPanel.stories.d.ts +1 -1
  34. package/dist/dts/components/DataToolsRail.d.ts +2 -1
  35. package/dist/dts/components/DataToolsRail.d.ts.map +1 -1
  36. package/dist/dts/components/DataToolsRail.stories.d.ts +1 -1
  37. package/dist/dts/components/HorizontalAccordian.d.ts +2 -1
  38. package/dist/dts/components/HorizontalAccordian.d.ts.map +1 -1
  39. package/dist/dts/components/InfrastructureRightPanel.d.ts +2 -1
  40. package/dist/dts/components/InfrastructureRightPanel.d.ts.map +1 -1
  41. package/dist/dts/components/InfrastructureRightPanel.stories.d.ts +1 -1
  42. package/dist/dts/components/KernelLifecyclePanel/ActiveKernelInfoPanel.d.ts +2 -1
  43. package/dist/dts/components/KernelLifecyclePanel/ActiveKernelInfoPanel.d.ts.map +1 -1
  44. package/dist/dts/components/KernelLifecyclePanel/ActiveKernelInfoPanel.js +2 -2
  45. package/dist/dts/components/KernelLifecyclePanel/ActiveKernelInfoPanel.js.map +1 -1
  46. package/dist/dts/components/KernelLifecyclePanel/ActiveKernelsPanel.d.ts +2 -1
  47. package/dist/dts/components/KernelLifecyclePanel/ActiveKernelsPanel.d.ts.map +1 -1
  48. package/dist/dts/components/KernelLifecyclePanel/ActiveKernelsPanel.js +12 -4
  49. package/dist/dts/components/KernelLifecyclePanel/ActiveKernelsPanel.js.map +1 -1
  50. package/dist/dts/components/KernelLifecyclePanel/ConnectionStatusBadge.d.ts +2 -1
  51. package/dist/dts/components/KernelLifecyclePanel/ConnectionStatusBadge.d.ts.map +1 -1
  52. package/dist/dts/components/KernelLifecyclePanel/ConnectionStatusBadge.js +1 -1
  53. package/dist/dts/components/KernelLifecyclePanel/ConnectionStatusBadge.js.map +1 -1
  54. package/dist/dts/components/KernelLifecyclePanel/ConnectionStatusBadge.stories.d.ts +1 -1
  55. package/dist/dts/components/KernelLifecyclePanel/GatewayConnectionPanel.d.ts +2 -1
  56. package/dist/dts/components/KernelLifecyclePanel/GatewayConnectionPanel.d.ts.map +1 -1
  57. package/dist/dts/components/KernelLifecyclePanel/GatewayConnectionPanel.js +5 -1
  58. package/dist/dts/components/KernelLifecyclePanel/GatewayConnectionPanel.js.map +1 -1
  59. package/dist/dts/components/KernelLifecyclePanel/KernelLifecyclePanel.d.ts +2 -1
  60. package/dist/dts/components/KernelLifecyclePanel/KernelLifecyclePanel.d.ts.map +1 -1
  61. package/dist/dts/components/KernelLifecyclePanel/KernelLifecyclePanel.js +2 -2
  62. package/dist/dts/components/KernelLifecyclePanel/KernelLifecyclePanel.js.map +1 -1
  63. package/dist/dts/components/KernelLifecyclePanel/KernelLifecyclePanel.stories.d.ts +1 -1
  64. package/dist/dts/components/KernelLifecyclePanel/KernelSelector.d.ts +2 -1
  65. package/dist/dts/components/KernelLifecyclePanel/KernelSelector.d.ts.map +1 -1
  66. package/dist/dts/components/KernelLifecyclePanel/KernelSelector.js +1 -1
  67. package/dist/dts/components/KernelLifecyclePanel/KernelSelector.js.map +1 -1
  68. package/dist/dts/components/MicroContainerPanel.stories.d.ts +3 -4
  69. package/dist/dts/components/MicroContainerPanel.stories.d.ts.map +1 -1
  70. package/dist/dts/components/MicroContainerReduxPanel.d.ts +2 -1
  71. package/dist/dts/components/MicroContainerReduxPanel.d.ts.map +1 -1
  72. package/dist/dts/components/MicroContainerReduxPanel.js +1 -1
  73. package/dist/dts/components/MicroContainerReduxPanel.js.map +1 -1
  74. package/dist/dts/components/TierSelectorLanding.d.ts +2 -1
  75. package/dist/dts/components/TierSelectorLanding.d.ts.map +1 -1
  76. package/dist/dts/components/TierSelectorLanding.stories.d.ts +1 -1
  77. package/dist/dts/components/UpgradeActionsPanel.d.ts +2 -1
  78. package/dist/dts/components/UpgradeActionsPanel.d.ts.map +1 -1
  79. package/dist/dts/components/UpgradeActionsPanel.stories.d.ts +1 -1
  80. package/dist/dts/components/WorkspaceTierCard.d.ts +2 -1
  81. package/dist/dts/components/WorkspaceTierCard.d.ts.map +1 -1
  82. package/dist/dts/components/WorkspaceTierCard.stories.d.ts +1 -1
  83. package/dist/dts/core/hatcheryApi.js +1 -1
  84. package/dist/dts/core/hatcheryApi.js.map +1 -1
  85. package/dist/dts/providers/JEGWorkspaceProvider.d.ts +2 -2
  86. package/dist/dts/providers/JEGWorkspaceProvider.d.ts.map +1 -1
  87. package/dist/dts/providers/MicroContainerReduxProvider.d.ts +2 -2
  88. package/dist/dts/providers/MicroContainerReduxProvider.d.ts.map +1 -1
  89. package/dist/dts/providers/WorkspacesGatewayProvider.d.ts +1 -1
  90. package/dist/dts/providers/WorkspacesGatewayProvider.d.ts.map +1 -1
  91. package/dist/dts/providers/useMicroContainerRedux.d.ts.map +1 -1
  92. package/dist/dts/providers/useMicroContainerRedux.js +4 -1
  93. package/dist/dts/providers/useMicroContainerRedux.js.map +1 -1
  94. package/dist/dts/server/kernelLifecycleProxy.js +2 -2
  95. package/dist/dts/server/kernelLifecycleProxy.js.map +1 -1
  96. package/dist/dts/server/withJupyterWorkspaces.js +1 -1
  97. package/dist/dts/server/withJupyterWorkspaces.js.map +1 -1
  98. package/dist/dts/server/workspaceAssetsHandler.d.ts +20 -1
  99. package/dist/dts/server/workspaceAssetsHandler.d.ts.map +1 -1
  100. package/dist/dts/server/workspaceAssetsHandler.js +71 -20
  101. package/dist/dts/server/workspaceAssetsHandler.js.map +1 -1
  102. package/dist/dts/workspace/WorkspaceCenter.d.ts +2 -1
  103. package/dist/dts/workspace/WorkspaceCenter.d.ts.map +1 -1
  104. package/dist/dts/workspace/WorkspaceLayout/SettingsPanel.d.ts +2 -1
  105. package/dist/dts/workspace/WorkspaceLayout/SettingsPanel.d.ts.map +1 -1
  106. package/dist/dts/workspace/WorkspaceLayout/ToolsPanel.d.ts +2 -1
  107. package/dist/dts/workspace/WorkspaceLayout/ToolsPanel.d.ts.map +1 -1
  108. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.d.ts +2 -2
  109. package/dist/dts/workspace/WorkspaceLayout/WorkspaceLayout.d.ts.map +1 -1
  110. package/dist/dts/workspace/tiers/FreeWorkspace.d.ts +2 -1
  111. package/dist/dts/workspace/tiers/FreeWorkspace.d.ts.map +1 -1
  112. package/dist/dts/workspace/tiers/FreeWorkspace.js.map +1 -1
  113. package/dist/index/cjs/index.js +41 -34
  114. package/dist/index/cjs/index.js.map +1 -1
  115. package/dist/index/esm/index.js +41 -34
  116. package/dist/index/esm/index.js.map +1 -1
  117. package/dist/jupyterlite-builds/free-private/requirements.txt +1 -1
  118. package/dist/jupyterlite-builds/remote-private/requirements.txt +1 -1
  119. package/dist/server/cjs/server.js +140 -131
  120. package/dist/server/cjs/server.js.map +1 -1
  121. package/dist/server/esm/server.js +140 -131
  122. package/dist/server/esm/server.js.map +1 -1
  123. package/dist/server.d.ts +38 -0
  124. package/jupyterlite-builds/free-private/requirements.txt +1 -1
  125. package/jupyterlite-builds/remote-private/requirements.txt +1 -1
  126. package/package.json +7 -6
  127. package/dist/dts/hooks/useMicroContainer.d.ts +0 -1
  128. package/dist/dts/hooks/useMicroContainer.d.ts.map +0 -1
  129. package/dist/dts/hooks/useMicroContainer.js +0 -319
  130. package/dist/dts/hooks/useMicroContainer.js.map +0 -1
package/dist/server.d.ts CHANGED
@@ -15,6 +15,10 @@ declare const GEN3_HATCHERY_API: string;
15
15
  * export default createWorkspaceAssetsHandler({
16
16
  * gatewayBaseUrl: '/api/workspace/gateway/',
17
17
  * });
18
+ *
19
+ * `workspaceAssetsApi` (this package's default wiring) builds its options from
20
+ * `<GEN3_FRONTEND_CONFIGURATION_ROOT>/<GEN3_COMMONS_NAME>/workspaceAssets.json`,
21
+ * so per-commons branding and gateway routing need no code changes.
18
22
  */
19
23
 
20
24
  interface WorkspaceAssetsHandlerOptions {
@@ -31,6 +35,22 @@ interface WorkspaceAssetsHandlerOptions {
31
35
  appName?: string;
32
36
  /** Favicon URL injected into JupyterLite config data (opt-in branding). */
33
37
  faviconUrl?: string;
38
+ /**
39
+ * `<title>` override for served JupyterLite HTML. Defaults to `appName` when
40
+ * omitted; set it when the window title should differ from the config-data
41
+ * `appName` JupyterLite reports internally.
42
+ */
43
+ pageTitle?: string;
44
+ /**
45
+ * Origin-relative path used to build the absolute `remoteKernelsBaseUrl`
46
+ * injected into the remote tier (e.g. `/lw-workspace/proxy/jeg-proxy`).
47
+ * The origin is resolved per-request from forwarding headers so JupyterLite
48
+ * does not resolve kernel endpoints relative to the assets route.
49
+ * Omitted → `remoteKernelsBaseUrl` is not injected.
50
+ */
51
+ remoteKernelsPath?: string;
52
+ /** Override for the remote tier's `fullThemesUrl` (default: `/workspace-api/workspace-assets/remote/build/themes`). */
53
+ fullThemesUrl?: string;
34
54
  }
35
55
  declare function createWorkspaceAssetsHandler(options?: WorkspaceAssetsHandlerOptions): (req: NextApiRequest, res: NextApiResponse) => void;
36
56
 
@@ -161,6 +181,24 @@ interface KernelLifecycleProxyConfig {
161
181
  }
162
182
  declare function createKernelProxyHandler(config: KernelLifecycleProxyConfig): (req: NextApiRequest, res: NextApiResponse) => Promise<void>;
163
183
 
184
+ /**
185
+ * Next.js API route for JupyterLite static assets.
186
+ *
187
+ * The handler options are read from a per-commons JSON file:
188
+ *
189
+ * <GEN3_FRONTEND_CONFIGURATION_ROOT>/<GEN3_COMMONS_NAME>/workspaceAssets.json
190
+ *
191
+ * matching the convention used by the rest of the framework's server-side
192
+ * configuration (see `FilesystemContent` / `GEN3_FRONTEND_CONFIGURATION_ROOT`).
193
+ * The file is optional — DEFAULT_OPTIONS below is used when it is absent or
194
+ * unreadable, so a bad config never takes down the whole assets route.
195
+ *
196
+ * The upstream handler is built lazily on first request rather than at import
197
+ * time: `createWorkspaceAssetsHandler` recursively walks both tier asset trees
198
+ * when constructed, and this module is imported transitively by
199
+ * `next.config.js` (via `@gen3/workspaces/server`) where that I/O is wasted.
200
+ */
201
+
164
202
  declare function handler$3(req: NextApiRequest, res: NextApiResponse): void;
165
203
 
166
204
  declare function handler$2(req: NextApiRequest, res: NextApiResponse): Promise<void>;
@@ -1,3 +1,3 @@
1
- jupyterlite-core>=0.8.0
1
+ jupyterlite-core>=0.8.1
2
2
  jupyterlab>=4.6.0
3
3
  jupyterlite-pyodide-kernel
@@ -1,4 +1,4 @@
1
- jupyterlite-core>=0.8.0
1
+ jupyterlite-core>=0.8.1
2
2
  jupyterlab>=4.6.0
3
3
  jupyterlite-pyodide-kernel
4
4
  jupyterlite-remote-server>=0.2.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gen3/workspaces",
3
- "version": "0.12.56",
3
+ "version": "0.12.58",
4
4
  "description": "Workspaces for Gen3",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -18,7 +18,8 @@
18
18
  "gen3-validate-jupyterlite": "dist/jupyterlite-builds/scripts/validate-jupyterlite-assets.sh"
19
19
  },
20
20
  "scripts": {
21
- "lint": "eslint .",
21
+ "lint": "oxlint",
22
+ "lint:fix": "oxlint --fix",
22
23
  "compile": "tsc",
23
24
  "types": "tsc --emitDeclarationOnly",
24
25
  "clean": "rm -rf dist",
@@ -51,8 +52,8 @@
51
52
  "./jupyterlite-builds/*": "./dist/jupyterlite-builds/*"
52
53
  },
53
54
  "dependencies": {
54
- "@gen3/core": "^0.12.56",
55
- "@gen3/frontend": "^0.12.56",
55
+ "@gen3/core": "^0.12.58",
56
+ "@gen3/frontend": "^0.12.58",
56
57
  "camelcase-keys": "^10.0.2"
57
58
  },
58
59
  "peerDependencies": {
@@ -63,10 +64,10 @@
63
64
  "@mantine/modals": "^9.4.0",
64
65
  "@mantine/notifications": "^9.4.0",
65
66
  "mantine-react-table-open": "^9.0.3",
66
- "next": "^16.2.11",
67
+ "next": "^16.2.12",
67
68
  "react": "^19.2.4",
68
69
  "react-dom": "^19.2.4",
69
70
  "tailwindcss": "^3.4.18"
70
71
  },
71
- "gitHead": "006fdae8d3f10100a656a8a8fb6946b64761ee0f"
72
+ "gitHead": "7d7c8129ce4e70700c32680db750c9daa5268dd9"
72
73
  }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=useMicroContainer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMicroContainer.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMicroContainer.ts"],"names":[],"mappings":""}
@@ -1,319 +0,0 @@
1
- "use strict";
2
- // import { useCallback, useEffect, useRef, useState } from 'react';
3
- // import { useDeepCompareEffect } from 'use-deep-compare';
4
- //
5
- // /* ------------------------------------------------------------------ */
6
- // /* Types */
7
- // /* ------------------------------------------------------------------ */
8
- //
9
- // export type MicroContainerStatus =
10
- // | 'unknown'
11
- // | 'not-running'
12
- // | 'launching'
13
- // | 'running'
14
- // | 'terminating'
15
- // | 'error';
16
- //
17
- // export type UseMicroContainerReturn = {
18
- // /** Current lifecycle status of the micro container pod. */
19
- // status: MicroContainerStatus;
20
- // /** The Hatchery container hash/id matching the identifierTag (used for launch/terminate). */
21
- // containerHash: string | null;
22
- // /** Error message from the last operation, if any. */
23
- // lastError: string | null;
24
- // /** Launch the micro container. No-op if already launching or running. */
25
- // launch: () => Promise<void>;
26
- // /** Terminate the micro container. */
27
- // terminate: () => Promise<void>;
28
- // };
29
- //
30
- // /* ------------------------------------------------------------------ */
31
- // /* Poll intervals (ms) */
32
- // /* ------------------------------------------------------------------ */
33
- //
34
- // const POLL_INTERVALS = {
35
- // 'not-running': 0, // stopped — no traffic
36
- // launching: 5_000, // fast — user is waiting
37
- // running: 30_000, // slow — just drift-check
38
- // terminating: 5_000, // fast — waiting for pod deletion
39
- // error: 0, // stopped on confirmed failure
40
- // unknown: 10_000, // initial probe
41
- // } as const;
42
- //
43
- // /* ------------------------------------------------------------------ */
44
- // /* Hook */
45
- // /* ------------------------------------------------------------------ */
46
- //
47
- // /**
48
- // * Manages the lifecycle of a Hatchery-hosted micro container.
49
- // *
50
- // * The identifierTag is read from NEXT_PUBLIC_MICRO_CONTAINER_TAG by default;
51
- // * override via the identifierTag prop for testing.
52
- // *
53
- // * Adaptive polling:
54
- // * not-running → 0 ms (no polling — zero traffic when idle)
55
- // * launching → 5 s (fast detection of pod Running)
56
- // * running → 30 s (drift-check only)
57
- // *
58
- // * Visibility-change handler fires an immediate status check whenever
59
- // * the tab becomes visible (covers tab-sleep / laptop-wake drops).
60
- // */
61
- // export function useMicroContainer({
62
- // identifierTag,
63
- // hatcheryBaseUrl = '/api/workspace/hatchery',
64
- // jwt,
65
- // enabled = true,
66
- // }: {
67
- // identifierTag?: string;
68
- // /** Base URL of the Hatchery proxy API route. Default: /api/workspace/hatchery */
69
- // hatcheryBaseUrl?: string;
70
- // jwt?: string;
71
- // /** When false, the hook is a no-op and returns 'not-running'. */
72
- // enabled?: boolean;
73
- // }): UseMicroContainerReturn {
74
- // const tag =
75
- // identifierTag ?? (process.env.NEXT_PUBLIC_MICRO_CONTAINER_TAG || '');
76
- //
77
- // const [status, setStatus] = useState<MicroContainerStatus>('unknown');
78
- // const [containerHash, setContainerHash] = useState<string | null>(null);
79
- // const [lastError, setLastError] = useState<string | null>(null);
80
- //
81
- // // Track current status in a ref so poll callbacks don't close over stale values
82
- // const statusRef = useRef<MicroContainerStatus>('unknown');
83
- // const mountedRef = useRef(true);
84
- // const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
85
- // // Abort controllers for in-flight fetchOptions / fetchStatus requests.
86
- // const optionsAbortRef = useRef<AbortController | null>(null);
87
- // const statusAbortRef = useRef<AbortController | null>(null);
88
- //
89
- // const updateStatus = useCallback((s: MicroContainerStatus) => {
90
- // statusRef.current = s;
91
- // if (mountedRef.current) setStatus(s);
92
- // }, []);
93
- //
94
- // /* ── Fetch /options once to resolve containerHash ── */
95
- // const fetchOptions = useCallback(async (): Promise<string | null> => {
96
- // if (!tag) return null;
97
- // optionsAbortRef.current?.abort();
98
- // const controller = new AbortController();
99
- // optionsAbortRef.current = controller;
100
- // try {
101
- // const res = await fetch(`${hatcheryBaseUrl}/options`, {
102
- // signal: controller.signal,
103
- // credentials: 'include',
104
- // headers: jwt ? { Authorization: `Bearer ${jwt}` } : {},
105
- // });
106
- // if (!res.ok) return null;
107
- // // Hatchery /options returns an array of container specs
108
- // const options = (await res.json()) as Array<{
109
- // name?: string;
110
- // hash?: string;
111
- // id?: string;
112
- // }>;
113
- // const match = options.find((o) => o.name?.includes(tag));
114
- // return match?.hash ?? match?.id ?? null;
115
- // } catch (err) {
116
- // if ((err as { name?: string }).name === 'AbortError') return null;
117
- // return null;
118
- // }
119
- // }, [hatcheryBaseUrl, jwt, tag]);
120
- //
121
- // /* ── Poll /status ── */
122
- // const fetchStatus = useCallback(async (): Promise<void> => {
123
- // if (!mountedRef.current) return;
124
- // statusAbortRef.current?.abort();
125
- // const controller = new AbortController();
126
- // statusAbortRef.current = controller;
127
- //
128
- // const hash = containerHash;
129
- // const query = hash ? `?id=${encodeURIComponent(hash)}` : '';
130
- // try {
131
- // const res = await fetch(`${hatcheryBaseUrl}/status${query}`, {
132
- // signal: controller.signal,
133
- // credentials: 'include',
134
- // headers: jwt ? { Authorization: `Bearer ${jwt}` } : {},
135
- // });
136
- // if (!mountedRef.current) return;
137
- // if (!res.ok) {
138
- // // 404 = no pod = not-running
139
- // if (res.status === 404) {
140
- // updateStatus('not-running');
141
- // return;
142
- // }
143
- // throw new Error(`Status ${res.status}`);
144
- // }
145
- // const data = (await res.json()) as { status?: string };
146
- // const raw = (data.status || '').toLowerCase();
147
- //
148
- // // While terminating, stay in that state until backend confirms gone
149
- // if (statusRef.current === 'terminating') {
150
- // if (raw === 'not-running' || raw === 'stopped' || raw === '') {
151
- // updateStatus('not-running');
152
- // }
153
- // // else keep polling — pod still shutting down
154
- // return;
155
- // }
156
- //
157
- // if (raw === 'running') {
158
- // updateStatus('running');
159
- // setLastError(null);
160
- // } else if (
161
- // raw === 'launching' ||
162
- // raw === 'pending' ||
163
- // raw === 'starting'
164
- // ) {
165
- // updateStatus('launching');
166
- // } else if (
167
- // raw === 'not-running' ||
168
- // raw === 'stopped' ||
169
- // raw === 'terminated' ||
170
- // raw === ''
171
- // ) {
172
- // updateStatus('not-running');
173
- // } else if (raw === 'terminating' || raw === 'stopping') {
174
- // // Pod is still shutting down — transition or stay in terminating, keep polling.
175
- // updateStatus('terminating');
176
- // } else {
177
- // // Unknown state — treat as launching if we just launched, else not-running.
178
- // if (statusRef.current === 'launching') {
179
- // updateStatus('launching');
180
- // } else {
181
- // updateStatus('not-running');
182
- // }
183
- // }
184
- // } catch (err) {
185
- // if ((err as { name?: string }).name === 'AbortError') return;
186
- // if (!mountedRef.current) return;
187
- // const msg = err instanceof Error ? err.message : String(err);
188
- // setLastError(msg);
189
- // // Don't immediately go to error — could be a transient network issue
190
- // if (statusRef.current !== 'launching') {
191
- // updateStatus('not-running');
192
- // }
193
- // }
194
- // }, [hatcheryBaseUrl, jwt, containerHash, updateStatus]);
195
- //
196
- // /* ── Manage poll interval based on status ── */
197
- // const schedulePoll = useCallback(() => {
198
- // if (intervalRef.current) {
199
- // clearInterval(intervalRef.current);
200
- // intervalRef.current = null;
201
- // }
202
- // const ms = POLL_INTERVALS[statusRef.current];
203
- // if (ms > 0) {
204
- // intervalRef.current = setInterval(() => {
205
- // void fetchStatus();
206
- // }, ms);
207
- // }
208
- // }, [fetchStatus]);
209
- //
210
- // /* ── Initial options fetch + status check on mount ── */
211
- // useDeepCompareEffect(() => {
212
- // if (!enabled) return;
213
- // mountedRef.current = true;
214
- //
215
- // void (async () => {
216
- // const hash = await fetchOptions();
217
- // if (mountedRef.current && hash && !containerHash) {
218
- // setContainerHash(hash);
219
- // }
220
- // await fetchStatus();
221
- // schedulePoll();
222
- // })();
223
- //
224
- // return () => {
225
- // mountedRef.current = false;
226
- // optionsAbortRef.current?.abort();
227
- // statusAbortRef.current?.abort();
228
- // if (intervalRef.current) clearInterval(intervalRef.current);
229
- // };
230
- // }, [containerHash, enabled, fetchOptions, fetchStatus, schedulePoll]);
231
- //
232
- // /* ── Reschedule poll when status changes ── */
233
- // useEffect(() => {
234
- // if (!enabled) return;
235
- // schedulePoll();
236
- // return () => {
237
- // if (intervalRef.current) clearInterval(intervalRef.current);
238
- // };
239
- // }, [enabled, status, schedulePoll]);
240
- //
241
- // /* ── Visibility-change handler: immediate status check on tab-wake ── */
242
- // useEffect(() => {
243
- // if (!enabled) return;
244
- // const handler = () => {
245
- // if (document.visibilityState === 'visible') {
246
- // void fetchStatus();
247
- // }
248
- // };
249
- // document.addEventListener('visibilitychange', handler);
250
- // return () => document.removeEventListener('visibilitychange', handler);
251
- // }, [enabled, fetchStatus]);
252
- //
253
- // /* ── Actions ── */
254
- //
255
- // const launch = useCallback(async (): Promise<void> => {
256
- // if (
257
- // !enabled ||
258
- // statusRef.current === 'launching' ||
259
- // statusRef.current === 'running'
260
- // )
261
- // return;
262
- // setLastError(null);
263
- // updateStatus('launching');
264
- //
265
- // try {
266
- // const hash = containerHash || (await fetchOptions());
267
- // if (hash && !containerHash) setContainerHash(hash);
268
- //
269
- // const query = hash ? `?id=${encodeURIComponent(hash)}` : '';
270
- // const res = await fetch(`${hatcheryBaseUrl}/launch${query}`, {
271
- // method: 'POST',
272
- // credentials: 'include',
273
- // headers: jwt ? { Authorization: `Bearer ${jwt}` } : {},
274
- // });
275
- // if (!res.ok) {
276
- // throw new Error(`Launch failed: ${res.status} ${res.statusText}`);
277
- // }
278
- // // Status will resolve to 'running' on the next poll
279
- // } catch (err) {
280
- // const msg = err instanceof Error ? err.message : String(err);
281
- // setLastError(msg);
282
- // updateStatus('error');
283
- // }
284
- // }, [
285
- // enabled,
286
- // updateStatus,
287
- // containerHash,
288
- // fetchOptions,
289
- // hatcheryBaseUrl,
290
- // jwt,
291
- // ]);
292
- //
293
- // const terminate = useCallback(async (): Promise<void> => {
294
- // setLastError(null);
295
- // updateStatus('terminating');
296
- //
297
- // try {
298
- // const hash = containerHash;
299
- // const query = hash ? `?id=${encodeURIComponent(hash)}` : '';
300
- // const res = await fetch(`${hatcheryBaseUrl}/terminate${query}`, {
301
- // method: 'POST',
302
- // credentials: 'include',
303
- // headers: jwt ? { Authorization: `Bearer ${jwt}` } : {},
304
- // });
305
- // if (!res.ok && res.status !== 404) {
306
- // throw new Error(`Terminate failed: ${res.status} ${res.statusText}`);
307
- // }
308
- // // Kick off an immediate status poll rather than waiting the full 5s interval.
309
- // void fetchStatus();
310
- // } catch (err) {
311
- // const msg = err instanceof Error ? err.message : String(err);
312
- // setLastError(msg);
313
- // updateStatus('not-running');
314
- // }
315
- // }, [updateStatus, containerHash, hatcheryBaseUrl, jwt, fetchStatus]);
316
- //
317
- // return { status, containerHash, lastError, launch, terminate };
318
- // }
319
- //# sourceMappingURL=useMicroContainer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMicroContainer.js","sourceRoot":"","sources":["../../../src/hooks/useMicroContainer.ts"],"names":[],"mappings":"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"}