@datalayer/core 1.0.24 → 1.1.41

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 (364) hide show
  1. package/README.md +35 -24
  2. package/lib/api/constants.d.ts +3 -0
  3. package/lib/api/constants.js +3 -0
  4. package/lib/api/index.d.ts +0 -8
  5. package/lib/api/index.js +0 -8
  6. package/lib/cli-login.js +167 -0
  7. package/lib/client/base.d.ts +0 -3
  8. package/lib/client/base.js +0 -2
  9. package/lib/client/index.d.ts +10 -98
  10. package/lib/client/index.js +12 -21
  11. package/lib/components/avatars/UserAvatar.d.ts +16 -0
  12. package/lib/components/avatars/UserAvatar.js +47 -0
  13. package/lib/components/avatars/index.d.ts +1 -0
  14. package/lib/components/avatars/index.js +1 -0
  15. package/lib/components/billing/BillableAccountSelect.js +4 -0
  16. package/lib/components/billing/index.js +4 -0
  17. package/lib/components/checkout/StripeCheckout.js +48 -2
  18. package/lib/components/context/index.d.ts +0 -1
  19. package/lib/components/context/index.js +0 -1
  20. package/lib/components/display/DisplayHandle.d.ts +12 -0
  21. package/lib/components/display/DisplayHandle.js +11 -0
  22. package/lib/components/display/LiveRelativeTime.d.ts +1 -10
  23. package/lib/components/display/LiveRelativeTime.js +5 -16
  24. package/lib/components/display/index.d.ts +1 -0
  25. package/lib/components/display/index.js +1 -0
  26. package/lib/components/flashes/index.d.ts +0 -1
  27. package/lib/components/flashes/index.js +0 -1
  28. package/lib/components/index.d.ts +2 -0
  29. package/lib/components/index.js +2 -0
  30. package/lib/components/principal/Principal.d.ts +7 -0
  31. package/lib/components/principal/Principal.js +153 -16
  32. package/lib/components/principal/PrincipalAvatar.d.ts +1 -1
  33. package/lib/components/principal/PrincipalAvatar.js +4 -28
  34. package/lib/components/principal/PrincipalBadge.js +4 -4
  35. package/lib/components/principal/PrincipalDetailsOverlay.d.ts +4 -2
  36. package/lib/components/principal/PrincipalDetailsOverlay.js +27 -7
  37. package/lib/components/principal/PrincipalSwitcherMenu.js +76 -39
  38. package/lib/components/progress/index.d.ts +0 -1
  39. package/lib/components/progress/index.js +0 -1
  40. package/lib/components/sharing/ShareAccessComponent.d.ts +3 -2
  41. package/lib/components/sharing/ShareAccessComponent.js +180 -133
  42. package/lib/components/sharing/SharingEditor.js +4 -0
  43. package/lib/components/snippets/index.d.ts +1 -1
  44. package/lib/components/snippets/index.js +1 -1
  45. package/lib/components/students/StudentResultCircle.d.ts +21 -0
  46. package/lib/components/students/StudentResultCircle.js +59 -0
  47. package/lib/components/students/index.d.ts +1 -1
  48. package/lib/components/students/index.js +1 -1
  49. package/lib/components/time/LiveRelativeTime.d.ts +14 -0
  50. package/lib/components/time/LiveRelativeTime.js +43 -0
  51. package/lib/components/time/index.d.ts +1 -0
  52. package/lib/components/time/index.js +9 -0
  53. package/lib/components/timeline/Timeline.d.ts +20 -0
  54. package/lib/components/timeline/Timeline.js +90 -0
  55. package/lib/components/timeline/index.d.ts +1 -0
  56. package/lib/components/timeline/index.js +9 -0
  57. package/lib/components/tokens/index.d.ts +1 -1
  58. package/lib/components/tokens/index.js +1 -1
  59. package/lib/components/toolbars/index.d.ts +1 -3
  60. package/lib/components/toolbars/index.js +1 -3
  61. package/lib/hooks/cacheConverters.d.ts +21 -0
  62. package/lib/hooks/cacheConverters.js +110 -0
  63. package/lib/hooks/index.d.ts +0 -2
  64. package/lib/hooks/index.js +0 -2
  65. package/lib/hooks/useCache.d.ts +65 -36
  66. package/lib/hooks/useCache.js +424 -65
  67. package/lib/hooks/useDatalayer.js +3 -1
  68. package/lib/hooks/useIAM.js +1 -3
  69. package/lib/hooks/useLocationHandles.d.ts +3 -1
  70. package/lib/hooks/useLocationHandles.js +2 -1
  71. package/lib/hooks/usePrincipalStore.d.ts +2 -2
  72. package/lib/hooks/usePrincipalStore.js +97 -14
  73. package/lib/hooks/useProjectStore.d.ts +1 -1
  74. package/lib/hooks/useSelectedPrincipal.js +1 -1
  75. package/lib/hooks/useUser.js +19 -2
  76. package/lib/index.d.ts +1 -6
  77. package/lib/index.js +1 -13
  78. package/lib/main.js +3 -3
  79. package/lib/mocks/index.js +1 -1
  80. package/lib/mocks/models/index.d.ts +0 -1
  81. package/lib/mocks/models/index.js +0 -1
  82. package/lib/models/Datasource.d.ts +2 -2
  83. package/lib/models/IAM.d.ts +1 -1
  84. package/lib/models/IAMToken.d.ts +1 -1
  85. package/lib/models/School.d.ts +12 -3
  86. package/lib/models/Secret.d.ts +2 -2
  87. package/lib/models/Student.d.ts +13 -3
  88. package/lib/models/Usage.d.ts +11 -1
  89. package/lib/models/UserDTO.d.ts +2 -2
  90. package/lib/models/index.d.ts +0 -30
  91. package/lib/models/index.js +0 -30
  92. package/lib/routes/index.d.ts +1 -0
  93. package/lib/routes/index.js +1 -0
  94. package/lib/routes/publicPaths.d.ts +23 -0
  95. package/lib/routes/publicPaths.js +74 -0
  96. package/lib/state/State.d.ts +0 -12
  97. package/lib/state/State.js +0 -12
  98. package/lib/state/substates/CoreState.js +1 -1
  99. package/lib/state/substates/LayoutState.d.ts +12 -1
  100. package/lib/state/substates/index.d.ts +0 -7
  101. package/lib/state/substates/index.js +0 -7
  102. package/lib/utils/Date.d.ts +7 -0
  103. package/lib/utils/Date.js +43 -10
  104. package/lib/utils/Handles.js +3 -1
  105. package/lib/utils/index.d.ts +1 -1
  106. package/lib/utils/index.js +1 -1
  107. package/lib/views/api-keys/APIKeyEdit.d.ts +8 -0
  108. package/lib/views/{iam-tokens/IAMTokenEdit.js → api-keys/APIKeyEdit.js} +31 -31
  109. package/lib/views/api-keys/APIKeyNew.d.ts +8 -0
  110. package/lib/views/api-keys/APIKeyNew.js +143 -0
  111. package/lib/views/api-keys/APIKeys.d.ts +12 -0
  112. package/lib/views/api-keys/APIKeys.js +128 -0
  113. package/lib/views/api-keys/APIKeysStandalone.d.ts +2 -0
  114. package/lib/views/api-keys/APIKeysStandalone.js +117 -0
  115. package/lib/views/api-keys/index.d.ts +3 -0
  116. package/lib/{mocks/jupyter → views/api-keys}/index.js +3 -1
  117. package/lib/views/datasources/DatasourceDetail.d.ts +1 -1
  118. package/lib/views/datasources/DatasourceNew.d.ts +1 -1
  119. package/lib/views/datasources/Datasources.d.ts +1 -1
  120. package/lib/views/datasources/Datasources.js +12 -3
  121. package/lib/views/iam/SignInSimple.d.ts +37 -1
  122. package/lib/views/iam/SignInSimple.js +110 -12
  123. package/package.json +5 -3
  124. package/lib/App.css +0 -47
  125. package/lib/App.d.ts +0 -3
  126. package/lib/App.js +0 -21
  127. package/lib/api/runtimes/checkpoints.d.ts +0 -122
  128. package/lib/api/runtimes/checkpoints.js +0 -118
  129. package/lib/api/runtimes/environments.d.ts +0 -9
  130. package/lib/api/runtimes/environments.js +0 -29
  131. package/lib/api/runtimes/healthz.d.ts +0 -15
  132. package/lib/api/runtimes/healthz.js +0 -44
  133. package/lib/api/runtimes/index.d.ts +0 -12
  134. package/lib/api/runtimes/index.js +0 -16
  135. package/lib/api/runtimes/runtimes.d.ts +0 -138
  136. package/lib/api/runtimes/runtimes.js +0 -230
  137. package/lib/api/runtimes/snapshots.d.ts +0 -38
  138. package/lib/api/runtimes/snapshots.js +0 -82
  139. package/lib/api/spacer/documents.d.ts +0 -12
  140. package/lib/api/spacer/documents.js +0 -43
  141. package/lib/api/spacer/healthz.d.ts +0 -15
  142. package/lib/api/spacer/healthz.js +0 -44
  143. package/lib/api/spacer/index.d.ts +0 -15
  144. package/lib/api/spacer/index.js +0 -19
  145. package/lib/api/spacer/items.d.ts +0 -25
  146. package/lib/api/spacer/items.js +0 -55
  147. package/lib/api/spacer/lexicals.d.ts +0 -34
  148. package/lib/api/spacer/lexicals.js +0 -89
  149. package/lib/api/spacer/notebooks.d.ts +0 -34
  150. package/lib/api/spacer/notebooks.js +0 -89
  151. package/lib/api/spacer/spaces.d.ts +0 -84
  152. package/lib/api/spacer/spaces.js +0 -170
  153. package/lib/api/spacer/users.d.ts +0 -9
  154. package/lib/api/spacer/users.js +0 -29
  155. package/lib/client/mixins/RuntimesMixin.d.ts +0 -93
  156. package/lib/client/mixins/RuntimesMixin.js +0 -229
  157. package/lib/client/mixins/SpacerMixin.d.ts +0 -210
  158. package/lib/client/mixins/SpacerMixin.js +0 -615
  159. package/lib/client/utils/spacerUtils.d.ts +0 -18
  160. package/lib/client/utils/spacerUtils.js +0 -32
  161. package/lib/collaboration/DatalayerCollaboration.d.ts +0 -13
  162. package/lib/collaboration/DatalayerCollaboration.js +0 -28
  163. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +0 -60
  164. package/lib/collaboration/DatalayerCollaborationProvider.js +0 -163
  165. package/lib/collaboration/index.d.ts +0 -2
  166. package/lib/collaboration/index.js +0 -6
  167. package/lib/components/context/SpaceSelect.d.ts +0 -2
  168. package/lib/components/context/SpaceSelect.js +0 -42
  169. package/lib/components/flashes/FlashDisclaimer.d.ts +0 -2
  170. package/lib/components/flashes/FlashDisclaimer.js +0 -17
  171. package/lib/components/icons/ArtifactIcon.d.ts +0 -10
  172. package/lib/components/icons/ArtifactIcon.js +0 -58
  173. package/lib/components/icons/index.d.ts +0 -1
  174. package/lib/components/icons/index.js +0 -5
  175. package/lib/components/nbgrader/NbGradesDetails.d.ts +0 -5
  176. package/lib/components/nbgrader/NbGradesDetails.js +0 -14
  177. package/lib/components/nbgrader/index.d.ts +0 -1
  178. package/lib/components/nbgrader/index.js +0 -5
  179. package/lib/components/progress/CreditsIndicator.d.ts +0 -33
  180. package/lib/components/progress/CreditsIndicator.js +0 -23
  181. package/lib/components/runtimes/RuntimeCellVariables.d.ts +0 -39
  182. package/lib/components/runtimes/RuntimeCellVariables.js +0 -172
  183. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +0 -37
  184. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +0 -101
  185. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +0 -57
  186. package/lib/components/runtimes/RuntimeLauncherDialog.js +0 -275
  187. package/lib/components/runtimes/RuntimePickerBase.d.ts +0 -69
  188. package/lib/components/runtimes/RuntimePickerBase.js +0 -122
  189. package/lib/components/runtimes/RuntimePickerCell.d.ts +0 -34
  190. package/lib/components/runtimes/RuntimePickerCell.js +0 -104
  191. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +0 -42
  192. package/lib/components/runtimes/RuntimePickerNotebook.js +0 -232
  193. package/lib/components/runtimes/RuntimeReservationControl.d.ts +0 -47
  194. package/lib/components/runtimes/RuntimeReservationControl.js +0 -42
  195. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +0 -38
  196. package/lib/components/runtimes/RuntimeSimplePicker.js +0 -155
  197. package/lib/components/runtimes/RuntimeTransfer.d.ts +0 -16
  198. package/lib/components/runtimes/RuntimeTransfer.js +0 -5
  199. package/lib/components/runtimes/RuntimeUtils.d.ts +0 -17
  200. package/lib/components/runtimes/RuntimeUtils.js +0 -178
  201. package/lib/components/runtimes/RuntimeVariables.d.ts +0 -38
  202. package/lib/components/runtimes/RuntimeVariables.js +0 -75
  203. package/lib/components/runtimes/index.d.ts +0 -11
  204. package/lib/components/runtimes/index.js +0 -15
  205. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +0 -33
  206. package/lib/components/snapshots/SandboxSnapshotMenu.js +0 -169
  207. package/lib/components/snapshots/index.d.ts +0 -1
  208. package/lib/components/snapshots/index.js +0 -5
  209. package/lib/components/snippets/SnippetDialog.d.ts +0 -42
  210. package/lib/components/snippets/SnippetDialog.js +0 -42
  211. package/lib/components/students/StudentItemStatus.d.ts +0 -7
  212. package/lib/components/students/StudentItemStatus.js +0 -66
  213. package/lib/components/tokens/SpaceVariantToken.d.ts +0 -5
  214. package/lib/components/tokens/SpaceVariantToken.js +0 -23
  215. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +0 -4
  216. package/lib/components/toolbars/AssignmentEditorToolbar.js +0 -18
  217. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +0 -2
  218. package/lib/components/toolbars/DocumentEditorToolbar.js +0 -12
  219. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +0 -29
  220. package/lib/components/toolbars/NotebookEditorToolbar.js +0 -30
  221. package/lib/examples/CellExample.d.ts +0 -6
  222. package/lib/examples/CellExample.js +0 -20
  223. package/lib/examples/NotebookExample.d.ts +0 -6
  224. package/lib/examples/NotebookExample.js +0 -19
  225. package/lib/examples/lexical-theme.css +0 -436
  226. package/lib/examples/notebooks/IPyWidgetsExample.ipynb.json +0 -101
  227. package/lib/examples/notebooks/IPyWidgetsExampleWithState.ipynb.json +0 -112
  228. package/lib/examples/notebooks/Lite.ipynb.json +0 -128
  229. package/lib/examples/notebooks/Matplotlib.ipynb.json +0 -137
  230. package/lib/examples/notebooks/NotebookExample1.ipynb.json +0 -126
  231. package/lib/examples/notebooks/NotebookExample2.ipynb.json +0 -48
  232. package/lib/examples/notebooks/NotebookOutputs.ipynb.json +0 -49
  233. package/lib/examples/notebooks/NotebookToCExample.ipynb.json +0 -102
  234. package/lib/examples/notebooks/PyGWalker.ipynb.json +0 -55
  235. package/lib/hooks/useCellOutputshot.d.ts +0 -4
  236. package/lib/hooks/useCellOutputshot.js +0 -25
  237. package/lib/hooks/useProjects.d.ts +0 -628
  238. package/lib/hooks/useProjects.js +0 -190
  239. package/lib/hooks/useRuntimes.d.ts +0 -5
  240. package/lib/hooks/useRuntimes.js +0 -34
  241. package/lib/mocks/models/CourseMock.d.ts +0 -6
  242. package/lib/mocks/models/CourseMock.js +0 -29
  243. package/lib/mocks/models/SpaceMock.d.ts +0 -6
  244. package/lib/mocks/models/SpaceMock.js +0 -25
  245. package/lib/models/Assignment.d.ts +0 -7
  246. package/lib/models/Assignment.js +0 -5
  247. package/lib/models/Cell.d.ts +0 -8
  248. package/lib/models/Cell.js +0 -5
  249. package/lib/models/CodeBlock.d.ts +0 -10
  250. package/lib/models/CodeBlock.js +0 -5
  251. package/lib/models/CodeSandboxSnapshot.d.ts +0 -92
  252. package/lib/models/CodeSandboxSnapshot.js +0 -13
  253. package/lib/models/CodeSandboxSnapshotDTO.d.ts +0 -173
  254. package/lib/models/CodeSandboxSnapshotDTO.js +0 -139
  255. package/lib/models/CodefeedBlocks.d.ts +0 -7
  256. package/lib/models/CodefeedBlocks.js +0 -5
  257. package/lib/models/Content.d.ts +0 -5
  258. package/lib/models/Content.js +0 -5
  259. package/lib/models/Course.d.ts +0 -17
  260. package/lib/models/Course.js +0 -5
  261. package/lib/models/Dataset.d.ts +0 -16
  262. package/lib/models/Dataset.js +0 -5
  263. package/lib/models/Document.d.ts +0 -8
  264. package/lib/models/Document.js +0 -5
  265. package/lib/models/Environment.d.ts +0 -86
  266. package/lib/models/Environment.js +0 -5
  267. package/lib/models/EnvironmentDTO.d.ts +0 -125
  268. package/lib/models/EnvironmentDTO.js +0 -88
  269. package/lib/models/Exercise.d.ts +0 -16
  270. package/lib/models/Exercise.js +0 -5
  271. package/lib/models/Item.d.ts +0 -20
  272. package/lib/models/Item.js +0 -5
  273. package/lib/models/ItemDTO.d.ts +0 -74
  274. package/lib/models/ItemDTO.js +0 -186
  275. package/lib/models/ItemType.d.ts +0 -2
  276. package/lib/models/ItemType.js +0 -5
  277. package/lib/models/Lesson.d.ts +0 -5
  278. package/lib/models/Lesson.js +0 -5
  279. package/lib/models/LexicalDTO.d.ts +0 -155
  280. package/lib/models/LexicalDTO.js +0 -157
  281. package/lib/models/Library.d.ts +0 -10
  282. package/lib/models/Library.js +0 -5
  283. package/lib/models/Notebook.d.ts +0 -11
  284. package/lib/models/Notebook.js +0 -5
  285. package/lib/models/NotebookDTO.d.ts +0 -96
  286. package/lib/models/NotebookDTO.js +0 -153
  287. package/lib/models/Page.d.ts +0 -41
  288. package/lib/models/Page.js +0 -25
  289. package/lib/models/PageTag.d.ts +0 -19
  290. package/lib/models/PageTag.js +0 -94
  291. package/lib/models/ProjectDTO.d.ts +0 -89
  292. package/lib/models/ProjectDTO.js +0 -131
  293. package/lib/models/Runtime.d.ts +0 -123
  294. package/lib/models/Runtime.js +0 -18
  295. package/lib/models/RuntimeDTO.d.ts +0 -191
  296. package/lib/models/RuntimeDTO.js +0 -204
  297. package/lib/models/Space.d.ts +0 -35
  298. package/lib/models/Space.js +0 -66
  299. package/lib/models/SpaceDTO.d.ts +0 -334
  300. package/lib/models/SpaceDTO.js +0 -244
  301. package/lib/models/SpaceItem.d.ts +0 -10
  302. package/lib/models/SpaceItem.js +0 -5
  303. package/lib/models/SpaceMember.d.ts +0 -6
  304. package/lib/models/SpaceMember.js +0 -5
  305. package/lib/models/StudentItem.d.ts +0 -21
  306. package/lib/models/StudentItem.js +0 -5
  307. package/lib/services/DatalayerServiceManager.d.ts +0 -22
  308. package/lib/services/DatalayerServiceManager.js +0 -69
  309. package/lib/services/index.d.ts +0 -4
  310. package/lib/services/index.js +0 -7
  311. package/lib/services/reconnectToRuntime.d.ts +0 -32
  312. package/lib/services/reconnectToRuntime.js +0 -59
  313. package/lib/state/substates/CellState.d.ts +0 -12
  314. package/lib/state/substates/CellState.js +0 -22
  315. package/lib/state/substates/DocumentState.d.ts +0 -10
  316. package/lib/state/substates/DocumentState.js +0 -14
  317. package/lib/state/substates/GradeState.d.ts +0 -10
  318. package/lib/state/substates/GradeState.js +0 -14
  319. package/lib/state/substates/JupyterLabState.d.ts +0 -16
  320. package/lib/state/substates/JupyterLabState.js +0 -17
  321. package/lib/state/substates/NbformatState.d.ts +0 -13
  322. package/lib/state/substates/NbformatState.js +0 -16
  323. package/lib/state/substates/RuntimesState.d.ts +0 -79
  324. package/lib/state/substates/RuntimesState.js +0 -180
  325. package/lib/state/substates/SpaceState.d.ts +0 -11
  326. package/lib/state/substates/SpaceState.js +0 -16
  327. package/lib/stateful/index.d.ts +0 -2
  328. package/lib/stateful/index.js +0 -6
  329. package/lib/stateful/jupyter/exec/Python.d.ts +0 -5
  330. package/lib/stateful/jupyter/exec/Python.js +0 -100
  331. package/lib/stateful/jupyter/exec/Snippets.d.ts +0 -105
  332. package/lib/stateful/jupyter/exec/Snippets.js +0 -101
  333. package/lib/stateful/jupyter/exec/index.d.ts +0 -2
  334. package/lib/stateful/jupyter/exec/index.js +0 -6
  335. package/lib/stateful/jupyter/index.d.ts +0 -2
  336. package/lib/stateful/jupyter/index.js +0 -6
  337. package/lib/stateful/jupyter/kernelsHandler.d.ts +0 -8
  338. package/lib/stateful/jupyter/kernelsHandler.js +0 -39
  339. package/lib/stateful/runtimes/actions.d.ts +0 -102
  340. package/lib/stateful/runtimes/actions.js +0 -249
  341. package/lib/stateful/runtimes/apis.d.ts +0 -273
  342. package/lib/stateful/runtimes/apis.js +0 -5
  343. package/lib/stateful/runtimes/index.d.ts +0 -5
  344. package/lib/stateful/runtimes/index.js +0 -9
  345. package/lib/stateful/runtimes/settings.d.ts +0 -15
  346. package/lib/stateful/runtimes/settings.js +0 -31
  347. package/lib/stateful/runtimes/snapshots.d.ts +0 -25
  348. package/lib/stateful/runtimes/snapshots.js +0 -150
  349. package/lib/stateful/runtimes/utils.d.ts +0 -7
  350. package/lib/stateful/runtimes/utils.js +0 -14
  351. package/lib/utils/Cells.d.ts +0 -2
  352. package/lib/utils/Cells.js +0 -28
  353. package/lib/views/iam-tokens/IAMTokenEdit.d.ts +0 -6
  354. package/lib/views/iam-tokens/IAMTokenNew.d.ts +0 -8
  355. package/lib/views/iam-tokens/IAMTokenNew.js +0 -118
  356. package/lib/views/iam-tokens/IAMTokens.d.ts +0 -12
  357. package/lib/views/iam-tokens/IAMTokens.js +0 -87
  358. package/lib/views/iam-tokens/Tokens.d.ts +0 -2
  359. package/lib/views/iam-tokens/Tokens.js +0 -85
  360. package/lib/views/iam-tokens/index.d.ts +0 -3
  361. package/lib/views/iam-tokens/index.js +0 -7
  362. /package/lib/{mocks/jupyter/index.d.ts → cli-login.d.ts} +0 -0
  363. /package/lib/utils/{logger.d.ts → Logger.d.ts} +0 -0
  364. /package/lib/utils/{logger.js → Logger.js} +0 -0
@@ -10,29 +10,122 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
10
10
  * `{ handle, password }`, then calls `onSignIn(token, handle)` on
11
11
  * success so the caller can persist credentials as needed.
12
12
  *
13
- * @module views/signin
13
+ * @module views/iam
14
14
  */
15
15
  import { useState, useCallback, useRef, useMemo, useEffect, } from 'react';
16
+ import { PageConfig, URLExt } from '@jupyterlab/coreutils';
16
17
  import { Box, Button, FormControl, Heading, Text, Textarea, TextInput, } from '@primer/react';
17
18
  import { EyeIcon, EyeClosedIcon, KeyIcon, LinkExternalIcon, TelescopeIcon, } from '@primer/octicons-react';
18
- import { coreStore } from '../../state/index.js';
19
+ import { GithubMarkIcon, LinkedInGreyIcon } from '@datalayer/icons-react';
20
+ import { isInsideJupyterLab } from '../../utils/Jupyter.js';
21
+ const GoogleIcon = () => (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", preserveAspectRatio: "xMidYMid", viewBox: "0 0 256 262", height: "16px", fill: "currentColor", "aria-hidden": "true", children: [_jsx("path", { fill: "currentColor", d: "M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027" }), _jsx("path", { fill: "currentColor", d: "M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1" }), _jsx("path", { fill: "currentColor", d: "M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782" }), _jsx("path", { fill: "currentColor", d: "M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251" })] }));
22
+ const OAUTH2_PROVIDERS = {
23
+ github: {
24
+ name: 'github',
25
+ oauth2CallbackServerRoute: 'jupyter_iam/oauth2/callback',
26
+ oauth2CallbackUIRoute: '/iam/oauth2/github/callback',
27
+ },
28
+ google: {
29
+ name: 'google',
30
+ oauth2CallbackServerRoute: 'jupyter_iam/oauth2/callback',
31
+ oauth2CallbackUIRoute: '/iam/oauth2/google/callback',
32
+ },
33
+ linkedin: {
34
+ name: 'linkedin',
35
+ oauth2CallbackServerRoute: 'jupyter_iam/oauth2/callback',
36
+ oauth2CallbackUIRoute: '/iam/oauth2/linkedin/callback',
37
+ },
38
+ };
39
+ const getIAMRunUrlFromDocumentConfig = () => {
40
+ if (typeof document === 'undefined') {
41
+ return '';
42
+ }
43
+ const configScript = document.getElementById('datalayer-config-data');
44
+ if (!configScript?.textContent) {
45
+ return '';
46
+ }
47
+ try {
48
+ const config = JSON.parse(configScript.textContent);
49
+ return String(config?.iamRunUrl || '').replace(/\/$/, '');
50
+ }
51
+ catch {
52
+ return '';
53
+ }
54
+ };
19
55
  // ── Component ────────────────────────────────────────────────────────
20
- export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp, title = 'Datalayer OTEL', description = 'Sign in to access the observability dashboard.', leadingIcon = _jsx(TelescopeIcon, { size: 24 }), }) => {
56
+ export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp, name, title = 'Datalayer OTEL', description = 'Sign in to access the observability dashboard.', icon, leadingIcon = _jsx(TelescopeIcon, { size: 24 }), github = false, google = false, linkedin = false, apiKey = false, signUp = true, socialSignInNavigationTarget, }) => {
57
+ const headingText = name ?? title;
58
+ const headingIcon = icon ?? leadingIcon;
21
59
  const loginUrl = useMemo(() => {
22
60
  if (loginUrlProp)
23
61
  return loginUrlProp;
24
- const iamRunUrl = coreStore.getState().configuration?.iamRunUrl;
62
+ const iamRunUrl = getIAMRunUrlFromDocumentConfig();
25
63
  return iamRunUrl ? `${iamRunUrl}/api/iam/v1/login` : '/api/iam/v1/login';
26
64
  }, [loginUrlProp]);
27
65
  const [handle, setHandle] = useState('');
28
66
  const [password, setPassword] = useState('');
29
67
  const [showPassword, setShowPassword] = useState(false);
30
68
  const [loading, setLoading] = useState(false);
69
+ const [socialLoading, setSocialLoading] = useState(false);
31
70
  const [error, setError] = useState(null);
32
71
  // API Key dialog state
33
72
  const [showApiKeyDialog, setShowApiKeyDialog] = useState(false);
34
- const [apiKey, setApiKey] = useState('');
73
+ const [apiKeyValue, setApiKeyValue] = useState('');
35
74
  const apiKeyRef = useRef(null);
75
+ const buildCallbackURI = useCallback((providerSpec) => {
76
+ if (isInsideJupyterLab()) {
77
+ return URLExt.join(PageConfig.getBaseUrl(), providerSpec.oauth2CallbackServerRoute);
78
+ }
79
+ return `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}${providerSpec.oauth2CallbackUIRoute}`;
80
+ }, []);
81
+ const currentRelativeRoute = useMemo(() => {
82
+ if (typeof window === 'undefined') {
83
+ return '/';
84
+ }
85
+ const route = `${window.location.pathname}${window.location.search}${window.location.hash}`;
86
+ return route.startsWith('/') ? route : '/';
87
+ }, []);
88
+ const startOAuthSignIn = useCallback(async (providerSpec) => {
89
+ setError(null);
90
+ setSocialLoading(true);
91
+ try {
92
+ const iamRunUrl = getIAMRunUrlFromDocumentConfig();
93
+ const params = new URLSearchParams({
94
+ provider: providerSpec.name,
95
+ callback_uri: buildCallbackURI(providerSpec),
96
+ });
97
+ const explicitNavigationTarget = socialSignInNavigationTarget === undefined
98
+ ? undefined
99
+ : String(socialSignInNavigationTarget || '').trim();
100
+ const callbackNavigationTarget = explicitNavigationTarget === undefined
101
+ ? currentRelativeRoute && currentRelativeRoute !== '/'
102
+ ? currentRelativeRoute
103
+ : undefined
104
+ : explicitNavigationTarget &&
105
+ explicitNavigationTarget.startsWith('/') &&
106
+ !explicitNavigationTarget.startsWith('//')
107
+ ? explicitNavigationTarget
108
+ : undefined;
109
+ if (callbackNavigationTarget) {
110
+ params.set('post_auth_redirect', callbackNavigationTarget);
111
+ }
112
+ const endpointBase = iamRunUrl || '';
113
+ const endpoint = `${endpointBase}/api/iam/v1/oauth2/authz/url?${params.toString()}`;
114
+ const response = await fetch(endpoint);
115
+ const payload = await response.json();
116
+ const authorizationURL = payload?.autorization_url;
117
+ if (!response.ok || !authorizationURL) {
118
+ throw new Error(payload?.message || 'Unable to start social sign-in.');
119
+ }
120
+ window.location.assign(authorizationURL);
121
+ }
122
+ catch (err) {
123
+ setError(err instanceof Error ? err.message : 'Unable to start social sign-in.');
124
+ }
125
+ finally {
126
+ setSocialLoading(false);
127
+ }
128
+ }, [buildCallbackURI, currentRelativeRoute, socialSignInNavigationTarget]);
36
129
  useEffect(() => {
37
130
  if (showApiKeyDialog) {
38
131
  apiKeyRef.current?.focus();
@@ -40,14 +133,14 @@ export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp,
40
133
  }, [showApiKeyDialog]);
41
134
  const closeApiKeyDialog = useCallback(() => {
42
135
  setShowApiKeyDialog(false);
43
- setApiKey('');
136
+ setApiKeyValue('');
44
137
  }, []);
45
138
  const handleApiKeyAuthenticate = useCallback(() => {
46
- if (!apiKey.trim() || !onApiKeySignIn)
139
+ if (!apiKeyValue.trim() || !onApiKeySignIn)
47
140
  return;
48
- onApiKeySignIn(apiKey.trim());
141
+ onApiKeySignIn(apiKeyValue.trim());
49
142
  closeApiKeyDialog();
50
- }, [apiKey, onApiKeySignIn, closeApiKeyDialog]);
143
+ }, [apiKeyValue, onApiKeySignIn, closeApiKeyDialog]);
51
144
  const handleSignUp = useCallback(() => {
52
145
  window.open('https://datalayer.ai/signup', '_blank', 'noopener,noreferrer');
53
146
  }, []);
@@ -104,7 +197,12 @@ export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp,
104
197
  gap: 2,
105
198
  mb: 4,
106
199
  justifyContent: 'center',
107
- }, children: [leadingIcon, _jsx(Heading, { sx: { fontSize: 3 }, children: title })] }), _jsx(Text, { as: "p", sx: { fontSize: 1, color: 'fg.muted', mb: 3, textAlign: 'center' }, children: description }), _jsxs(FormControl, { required: true, sx: { mb: 3 }, children: [_jsx(FormControl.Label, { children: "Username" }), _jsx(TextInput, { autoFocus: true, block: true, placeholder: "Your username", value: handle, onChange: e => setHandle(e.target.value), onKeyDown: handleKeyDown })] }), _jsxs(FormControl, { required: true, sx: { mb: 3 }, children: [_jsx(FormControl.Label, { children: "Password" }), _jsx(TextInput, { block: true, placeholder: "Your password", type: showPassword ? 'text' : 'password', value: password, onChange: e => setPassword(e.target.value), onKeyDown: handleKeyDown, trailingAction: _jsx(TextInput.Action, { onClick: () => setShowPassword(!showPassword), icon: showPassword ? EyeClosedIcon : EyeIcon, "aria-label": showPassword ? 'Hide password' : 'Show password', sx: { color: 'var(--fgColor-muted)' } }) })] }), error && (_jsx(Text, { sx: { color: 'danger.fg', fontSize: 1, mb: 3, display: 'block' }, children: error })), _jsx(Button, { variant: "primary", block: true, disabled: loading || !handle || !password, onClick: submit, children: loading ? 'Signing in…' : 'Sign in' }), _jsx(Box, { sx: { mt: 2, display: 'flex', justifyContent: 'center' }, children: _jsx(Button, { size: "small", variant: "invisible", leadingVisual: LinkExternalIcon, onClick: handleSignUp, children: "Sign Up" }) }), onApiKeySignIn && (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: {
200
+ }, children: [headingIcon, _jsx(Heading, { sx: { fontSize: 3 }, children: headingText })] }), _jsx(Text, { as: "p", sx: { fontSize: 1, color: 'fg.muted', mb: 3, textAlign: 'center' }, children: description }), _jsxs(FormControl, { required: true, sx: { mb: 3 }, children: [_jsx(FormControl.Label, { children: "Username" }), _jsx(TextInput, { autoFocus: true, block: true, placeholder: "Your username", value: handle, onChange: e => setHandle(e.target.value), onKeyDown: handleKeyDown })] }), _jsxs(FormControl, { required: true, sx: { mb: 3 }, children: [_jsx(FormControl.Label, { children: "Password" }), _jsx(TextInput, { block: true, placeholder: "Your password", type: showPassword ? 'text' : 'password', value: password, onChange: e => setPassword(e.target.value), onKeyDown: handleKeyDown, trailingAction: _jsx(TextInput.Action, { onClick: () => setShowPassword(!showPassword), icon: showPassword ? EyeClosedIcon : EyeIcon, "aria-label": showPassword ? 'Hide password' : 'Show password', sx: { color: 'var(--fgColor-muted)' } }) })] }), error && (_jsx(Text, { sx: { color: 'danger.fg', fontSize: 1, mb: 3, display: 'block' }, children: error })), _jsx(Button, { variant: "primary", block: true, disabled: loading || !handle || !password, onClick: submit, children: loading ? 'Signing in…' : 'Sign in' }), (github || google || linkedin) && (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: {
201
+ display: 'flex',
202
+ alignItems: 'center',
203
+ gap: 2,
204
+ my: 3,
205
+ }, children: [_jsx(Box, { sx: { flex: 1, height: '1px', bg: 'border.default' } }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "or" }), _jsx(Box, { sx: { flex: 1, height: '1px', bg: 'border.default' } })] }), github && (_jsx(Button, { block: true, leadingVisual: GithubMarkIcon, disabled: socialLoading, onClick: () => startOAuthSignIn(OAUTH2_PROVIDERS.github), sx: { mb: 2 }, children: "Sign in with GitHub" })), google && (_jsx(Button, { block: true, leadingVisual: GoogleIcon, disabled: socialLoading, onClick: () => startOAuthSignIn(OAUTH2_PROVIDERS.google), sx: { mb: linkedin ? 2 : 0 }, children: "Sign in with Google" })), linkedin && (_jsx(Button, { block: true, leadingVisual: LinkedInGreyIcon, disabled: socialLoading, onClick: () => startOAuthSignIn(OAUTH2_PROVIDERS.linkedin), children: "Sign in with LinkedIn" }))] })), signUp && (_jsx(Box, { sx: { mt: 2, display: 'flex', justifyContent: 'center' }, children: _jsx(Button, { size: "small", variant: "invisible", leadingVisual: LinkExternalIcon, onClick: handleSignUp, children: "Sign Up" }) })), apiKey && onApiKeySignIn && (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: {
108
206
  display: 'flex',
109
207
  alignItems: 'center',
110
208
  gap: 2,
@@ -134,11 +232,11 @@ export const SignInSimple = ({ onSignIn, onApiKeySignIn, loginUrl: loginUrlProp,
134
232
  bg: 'canvas.overlay',
135
233
  color: 'fg.default',
136
234
  boxShadow: 'shadow.large',
137
- }, children: [_jsx(Heading, { id: "signin-api-key-title", sx: { fontSize: 2, mb: 2 }, children: "Enter your API Key" }), _jsxs(FormControl, { required: true, children: [_jsx(FormControl.Label, { children: "API Key" }), _jsx(Textarea, { block: true, required: true, autoFocus: true, placeholder: "Paste your API key here", value: apiKey, onInput: (e) => setApiKey(e.target.value), ref: apiKeyRef })] }), _jsxs(Box, { sx: {
235
+ }, children: [_jsx(Heading, { id: "signin-api-key-title", sx: { fontSize: 2, mb: 2 }, children: "Enter your API Key" }), _jsxs(FormControl, { required: true, children: [_jsx(FormControl.Label, { children: "API Key" }), _jsx(Textarea, { block: true, required: true, autoFocus: true, placeholder: "Paste your API key here", value: apiKeyValue, onInput: (e) => setApiKeyValue(e.target.value), ref: apiKeyRef })] }), _jsxs(Box, { sx: {
138
236
  mt: 3,
139
237
  display: 'flex',
140
238
  justifyContent: 'flex-end',
141
239
  gap: 2,
142
- }, children: [_jsx(Button, { type: "button", onClick: closeApiKeyDialog, children: "Cancel" }), _jsx(Button, { type: "submit", variant: "primary", disabled: !apiKey.trim(), children: "Authenticate" })] })] }) }))] }))] }) }));
240
+ }, children: [_jsx(Button, { type: "button", onClick: closeApiKeyDialog, children: "Cancel" }), _jsx(Button, { type: "submit", variant: "primary", disabled: !apiKeyValue.trim(), children: "Authenticate" })] })] }) }))] }))] }) }));
143
241
  };
144
242
  export default SignInSimple;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/core",
3
- "version": "1.0.24",
3
+ "version": "1.1.41",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -51,8 +51,9 @@
51
51
  "clean:lib": "rimraf lib tsconfig.tsbuildinfo",
52
52
  "clean:dist": "rimraf dist",
53
53
  "clean:cache": "rimraf node_modules/.vite",
54
- "build": "npm run clean && gulp resources-to-lib && tsc -b && vite build",
54
+ "build": "npm run clean && gulp resources-to-lib && tsc -b && vite build && vite build --config vite.cli-login.config.ts",
55
55
  "build:lib": "npm run clean:lib && gulp resources-to-lib && tsc -b && node scripts/fix-esm-imports.cjs",
56
+ "build:cli-login": "vite build --config vite.cli-login.config.ts",
56
57
  "build:types": "npm run clean:lib && tsc -b",
57
58
  "build:nextjs": "npm run build --workspace=nextjj-example",
58
59
  "build:examples": "npm run build:nextjs",
@@ -89,7 +90,7 @@
89
90
  "watch:lib:src": "tsc -b -w",
90
91
  "type-check:watch": "tsc -b -w --noEmit",
91
92
  "examples": "run-p jupyter:start examples:vite",
92
- "examples:vite": "VITE_DATALAYER_RUN_URL=http://localhost:8888 vite --config vite.examples.config.ts",
93
+ "examples:vite": "VITE_DATALAYER_URL=http://localhost:8888 vite --config vite.examples.config.ts",
93
94
  "examples:nextjs": "npm run dev --workspace=nextjj-example",
94
95
  "jupyter:start": "./dev/sh/start-jupyter-server.sh",
95
96
  "prepare": "husky || true",
@@ -102,6 +103,7 @@
102
103
  "rebuild:fresh": "npm run create:patches && npm install && npm run build && npm run clean:cache"
103
104
  },
104
105
  "dependencies": {
106
+ "@datalayer/design": "^1.0.0",
105
107
  "@datalayer/icons-react": "^1.0.7",
106
108
  "@datalayer/jupyter-lexical": "^1.0.16",
107
109
  "@datalayer/jupyter-react": "^2.0.7",
package/lib/App.css DELETED
@@ -1,47 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
-
6
- #root {
7
- max-width: 1280px;
8
- margin: 0 auto;
9
- padding: 2rem;
10
- /* text-align: center; */
11
- }
12
-
13
- .logo {
14
- height: 6em;
15
- padding: 1.5em;
16
- will-change: filter;
17
- transition: filter 300ms;
18
- }
19
- .logo:hover {
20
- filter: drop-shadow(0 0 2em #646cffaa);
21
- }
22
- .logo.react:hover {
23
- filter: drop-shadow(0 0 2em #61dafbaa);
24
- }
25
-
26
- @keyframes logo-spin {
27
- from {
28
- transform: rotate(0deg);
29
- }
30
- to {
31
- transform: rotate(360deg);
32
- }
33
- }
34
-
35
- @media (prefers-reduced-motion: no-preference) {
36
- a:nth-of-type(2) .logo {
37
- animation: logo-spin infinite 20s linear;
38
- }
39
- }
40
-
41
- .card {
42
- padding: 2em;
43
- }
44
-
45
- .read-the-docs {
46
- color: #888;
47
- }
package/lib/App.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import './App.css';
2
- export declare function App(): import("react/jsx-runtime").JSX.Element;
3
- export default App;
package/lib/App.js DELETED
@@ -1,21 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2023-2025 Datalayer, Inc.
4
- * Distributed under the terms of the Modified BSD License.
5
- */
6
- import { useState } from 'react';
7
- import reactLogo from './assets/react.svg';
8
- import { useJupyter, JupyterReactTheme } from '@datalayer/jupyter-react';
9
- import { CellExample } from './examples/CellExample.js';
10
- import { NotebookExample } from './examples/NotebookExample.js';
11
- import './App.css';
12
- export function App() {
13
- const { serviceManager } = useJupyter({
14
- jupyterServerUrl: 'https://oss.datalayer.run/api/jupyter-server',
15
- jupyterServerToken: '60c1661cc408f978c309d04157af55c9588ff9557c9380e4fb50785750703da6',
16
- startDefaultKernel: true,
17
- });
18
- const [count, setCount] = useState(0);
19
- return (_jsxs("div", { className: "App", children: [_jsx(_Fragment, { children: _jsxs(JupyterReactTheme, { children: [serviceManager && _jsx(CellExample, { serviceManager: serviceManager }), serviceManager && (_jsx(NotebookExample, { serviceManager: serviceManager }))] }) }), _jsxs("div", { children: [_jsx("a", { href: "https://reactjs.org", target: "_blank", rel: "noreferrer", children: _jsx("img", { src: reactLogo, className: "logo react", alt: "React logo" }) }), _jsx("a", { href: "https://vitejs.dev", target: "_blank", rel: "noreferrer", children: _jsx("img", { src: "/vite.svg", className: "logo", alt: "Vite logo" }) })] }), _jsx("h1", { children: "React + Vite" }), _jsx("h2", { children: "On CodeSandbox!" }), _jsxs("div", { className: "card", children: [_jsxs("button", { onClick: () => setCount(count => count + 1), children: ["count is ", count] }), _jsxs("p", { children: ["Edit ", _jsx("code", { children: "src/App.tsx" }), " and save to test HMR."] }), _jsx("p", { children: "Tip: you can use the inspector button next to address bar to click on components in the preview and open the code in the editor!" })] }), _jsx("p", { className: "read-the-docs", children: "Click on the Vite and React logos to learn more" })] }));
20
- }
21
- export default App;
@@ -1,122 +0,0 @@
1
- /**
2
- * A single runtime checkpoint record.
3
- */
4
- export interface RuntimeCheckpointData {
5
- /** Unique identifier (ULID) */
6
- id: string;
7
- /** Human-readable name */
8
- name: string;
9
- /** Checkpoint description */
10
- description: string;
11
- /** Runtime that was checkpointed */
12
- runtime_uid: string;
13
- /** Agent spec identifier (e.g. "mocks/monitor-sales-kpis") */
14
- agent_spec_id: string;
15
- /** Full agent spec payload */
16
- agentspec: Record<string, any>;
17
- /** Additional metadata */
18
- metadata: Record<string, any>;
19
- /** Checkpoint mode: criu (full) or light (history-only) */
20
- checkpoint_mode?: 'criu' | 'light';
21
- /** Lightweight checkpoint message history */
22
- messages?: string[];
23
- /** Status: requested | created | failed | deleted */
24
- status: string;
25
- /** Human-readable details about the current status (e.g. error message) */
26
- status_message?: string;
27
- /** ISO 8601 timestamp */
28
- updated_at: string;
29
- }
30
- /**
31
- * Request payload for creating a checkpoint.
32
- */
33
- export interface CreateRuntimeCheckpointRequest {
34
- /** Runtime UID of the runtime that was checkpointed */
35
- runtime_uid: string;
36
- /** Human-readable name */
37
- name?: string;
38
- /** Checkpoint description */
39
- description?: string;
40
- /** Agent spec identifier */
41
- agentspec_id?: string;
42
- /** Full agent spec payload to persist */
43
- agentspec?: Record<string, any>;
44
- /** Additional metadata */
45
- metadata?: Record<string, any>;
46
- }
47
- /**
48
- * Response for listing checkpoints.
49
- */
50
- export interface ListRuntimeCheckpointsResponse {
51
- success: boolean;
52
- message: string;
53
- checkpoints: RuntimeCheckpointData[];
54
- }
55
- /**
56
- * Response for getting a single checkpoint.
57
- */
58
- export interface GetRuntimeCheckpointResponse {
59
- success: boolean;
60
- message: string;
61
- checkpoint: RuntimeCheckpointData;
62
- }
63
- /**
64
- * Response for creating a checkpoint.
65
- */
66
- export interface CreateRuntimeCheckpointResponse {
67
- success: boolean;
68
- message: string;
69
- checkpoint: RuntimeCheckpointData;
70
- }
71
- /**
72
- * List runtime checkpoints for a specific runtime.
73
- * @param token - Authentication token
74
- * @param baseUrl - Base URL for the runtimes API
75
- * @param runtimeUid - Runtime UID to list checkpoints for
76
- * @returns Promise resolving to list of checkpoints
77
- */
78
- export declare const listCheckpoints: (token: string, baseUrl?: string, runtimeUid?: string) => Promise<ListRuntimeCheckpointsResponse>;
79
- /**
80
- * Get a single runtime checkpoint by ID.
81
- * @param token - Authentication token
82
- * @param runtimeUid - The runtime UID
83
- * @param checkpointId - The checkpoint ID (ULID)
84
- * @param baseUrl - Base URL for the runtimes API
85
- * @returns Promise resolving to checkpoint details
86
- */
87
- export declare const getCheckpoint: (token: string, runtimeUid: string, checkpointId: string, baseUrl?: string) => Promise<GetRuntimeCheckpointResponse>;
88
- /**
89
- * Create a checkpoint record (after a CRIU checkpoint has been taken).
90
- * @param token - Authentication token
91
- * @param data - Checkpoint creation payload (runtime_uid, agentspec, etc.)
92
- * @param baseUrl - Base URL for the runtimes API
93
- * @returns Promise resolving to the created checkpoint
94
- */
95
- export declare const createCheckpoint: (token: string, data: CreateRuntimeCheckpointRequest, baseUrl?: string) => Promise<CreateRuntimeCheckpointResponse>;
96
- /**
97
- * Poll a checkpoint until it reaches one of the target statuses.
98
- *
99
- * Useful for waiting until an async pause (status "paused")
100
- * completes before proceeding. Checkpoint status stays "paused"
101
- * during resume — only the agent runtime status transitions.
102
- *
103
- * @param token - Authentication token
104
- * @param runtimeUid - The runtime UID that owns the checkpoint
105
- * @param checkpointId - The checkpoint ID (ULID) to poll
106
- * @param targetStatuses - Set of statuses that signal completion (e.g. ["paused", "failed"])
107
- * @param baseUrl - Base URL for the runtimes API
108
- * @param intervalMs - Polling interval in milliseconds (default: 2000)
109
- * @param timeoutMs - Maximum wait time in milliseconds (default: 600000 = 10 min)
110
- * @returns Promise resolving to the checkpoint data once a target status is reached
111
- * @throws {Error} If polling times out or the request fails
112
- */
113
- export declare const waitForCheckpointStatus: (token: string, runtimeUid: string, checkpointId: string, targetStatuses: string[], baseUrl?: string, intervalMs?: number, timeoutMs?: number) => Promise<RuntimeCheckpointData>;
114
- /**
115
- * Delete a runtime checkpoint.
116
- * @param token - Authentication token
117
- * @param runtimeUid - The runtime UID that owns the checkpoint
118
- * @param checkpointId - The checkpoint ID (ULID) to delete
119
- * @param baseUrl - Base URL for the runtimes API
120
- * @returns Promise resolving when deletion is complete
121
- */
122
- export declare const deleteCheckpoint: (token: string, runtimeUid: string, checkpointId: string, baseUrl?: string) => Promise<void>;
@@ -1,118 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
- /**
6
- * Runtime checkpoints API functions for the Datalayer platform.
7
- *
8
- * Provides functions for managing CRIU full-pod checkpoints.
9
- * These are distinct from code sandbox snapshots (Jupyter sandbox snapshots).
10
- *
11
- * @module api/runtimes/checkpoints
12
- */
13
- import { requestDatalayerAPI } from '../DatalayerApi.js';
14
- import { API_BASE_PATHS, DEFAULT_SERVICE_URLS } from '../constants.js';
15
- import { validateToken, validateRequiredString } from '../utils/validation.js';
16
- // ─── API Functions ─────────────────────────────────────────────────────────
17
- /**
18
- * List runtime checkpoints for a specific runtime.
19
- * @param token - Authentication token
20
- * @param baseUrl - Base URL for the runtimes API
21
- * @param runtimeUid - Runtime UID to list checkpoints for
22
- * @returns Promise resolving to list of checkpoints
23
- */
24
- export const listCheckpoints = async (token, baseUrl = DEFAULT_SERVICE_URLS.RUNTIMES, runtimeUid) => {
25
- validateToken(token);
26
- if (!runtimeUid) {
27
- throw new Error('runtimeUid is required to list checkpoints');
28
- }
29
- return requestDatalayerAPI({
30
- url: `${baseUrl}${API_BASE_PATHS.RUNTIMES}/runtime-checkpoints/${encodeURIComponent(runtimeUid)}`,
31
- method: 'GET',
32
- token,
33
- });
34
- };
35
- /**
36
- * Get a single runtime checkpoint by ID.
37
- * @param token - Authentication token
38
- * @param runtimeUid - The runtime UID
39
- * @param checkpointId - The checkpoint ID (ULID)
40
- * @param baseUrl - Base URL for the runtimes API
41
- * @returns Promise resolving to checkpoint details
42
- */
43
- export const getCheckpoint = async (token, runtimeUid, checkpointId, baseUrl = DEFAULT_SERVICE_URLS.RUNTIMES) => {
44
- validateToken(token);
45
- validateRequiredString(runtimeUid, 'Runtime UID');
46
- validateRequiredString(checkpointId, 'Checkpoint ID');
47
- return requestDatalayerAPI({
48
- url: `${baseUrl}${API_BASE_PATHS.RUNTIMES}/runtime-checkpoints/${encodeURIComponent(runtimeUid)}/${checkpointId}`,
49
- method: 'GET',
50
- token,
51
- });
52
- };
53
- /**
54
- * Create a checkpoint record (after a CRIU checkpoint has been taken).
55
- * @param token - Authentication token
56
- * @param data - Checkpoint creation payload (runtime_uid, agentspec, etc.)
57
- * @param baseUrl - Base URL for the runtimes API
58
- * @returns Promise resolving to the created checkpoint
59
- */
60
- export const createCheckpoint = async (token, data, baseUrl = DEFAULT_SERVICE_URLS.RUNTIMES) => {
61
- validateToken(token);
62
- return requestDatalayerAPI({
63
- url: `${baseUrl}${API_BASE_PATHS.RUNTIMES}/runtime-checkpoints`,
64
- method: 'POST',
65
- token,
66
- body: data,
67
- });
68
- };
69
- /**
70
- * Poll a checkpoint until it reaches one of the target statuses.
71
- *
72
- * Useful for waiting until an async pause (status "paused")
73
- * completes before proceeding. Checkpoint status stays "paused"
74
- * during resume — only the agent runtime status transitions.
75
- *
76
- * @param token - Authentication token
77
- * @param runtimeUid - The runtime UID that owns the checkpoint
78
- * @param checkpointId - The checkpoint ID (ULID) to poll
79
- * @param targetStatuses - Set of statuses that signal completion (e.g. ["paused", "failed"])
80
- * @param baseUrl - Base URL for the runtimes API
81
- * @param intervalMs - Polling interval in milliseconds (default: 2000)
82
- * @param timeoutMs - Maximum wait time in milliseconds (default: 600000 = 10 min)
83
- * @returns Promise resolving to the checkpoint data once a target status is reached
84
- * @throws {Error} If polling times out or the request fails
85
- */
86
- export const waitForCheckpointStatus = async (token, runtimeUid, checkpointId, targetStatuses, baseUrl = DEFAULT_SERVICE_URLS.RUNTIMES, intervalMs = 2000, timeoutMs = 600_000) => {
87
- validateToken(token);
88
- validateRequiredString(runtimeUid, 'Runtime UID');
89
- validateRequiredString(checkpointId, 'Checkpoint ID');
90
- const deadline = Date.now() + timeoutMs;
91
- while (Date.now() < deadline) {
92
- const resp = await getCheckpoint(token, runtimeUid, checkpointId, baseUrl);
93
- if (targetStatuses.includes(resp.checkpoint.status)) {
94
- return resp.checkpoint;
95
- }
96
- // Wait before next poll
97
- await new Promise(resolve => setTimeout(resolve, intervalMs));
98
- }
99
- throw new Error(`Checkpoint ${checkpointId} did not reach status [${targetStatuses.join(', ')}] within ${timeoutMs / 1000}s`);
100
- };
101
- /**
102
- * Delete a runtime checkpoint.
103
- * @param token - Authentication token
104
- * @param runtimeUid - The runtime UID that owns the checkpoint
105
- * @param checkpointId - The checkpoint ID (ULID) to delete
106
- * @param baseUrl - Base URL for the runtimes API
107
- * @returns Promise resolving when deletion is complete
108
- */
109
- export const deleteCheckpoint = async (token, runtimeUid, checkpointId, baseUrl = DEFAULT_SERVICE_URLS.RUNTIMES) => {
110
- validateToken(token);
111
- validateRequiredString(runtimeUid, 'Runtime UID');
112
- validateRequiredString(checkpointId, 'Checkpoint ID');
113
- return requestDatalayerAPI({
114
- url: `${baseUrl}${API_BASE_PATHS.RUNTIMES}/runtime-checkpoints/${encodeURIComponent(runtimeUid)}/${checkpointId}`,
115
- method: 'DELETE',
116
- token,
117
- });
118
- };
@@ -1,9 +0,0 @@
1
- import { ListEnvironmentsResponse } from '../../models/EnvironmentDTO';
2
- /**
3
- * List all available computing environments.
4
- * @param token - Authentication token
5
- * @param baseUrl - Base URL for the API (defaults to production Runtimes URL)
6
- * @returns Promise resolving to list of available environments
7
- * @throws {Error} If authentication token is missing or invalid
8
- */
9
- export declare const listEnvironments: (token: string, baseUrl?: string) => Promise<ListEnvironmentsResponse>;
@@ -1,29 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
- /**
6
- * Computing environments API functions for the Datalayer platform.
7
- *
8
- * Provides functions for managing computing environment configurations.
9
- *
10
- * @module api/runtimes/environments
11
- */
12
- import { requestDatalayerAPI } from '../DatalayerApi.js';
13
- import { API_BASE_PATHS, DEFAULT_SERVICE_URLS } from '../constants.js';
14
- import { validateToken } from '../utils/validation.js';
15
- /**
16
- * List all available computing environments.
17
- * @param token - Authentication token
18
- * @param baseUrl - Base URL for the API (defaults to production Runtimes URL)
19
- * @returns Promise resolving to list of available environments
20
- * @throws {Error} If authentication token is missing or invalid
21
- */
22
- export const listEnvironments = async (token, baseUrl = DEFAULT_SERVICE_URLS.RUNTIMES) => {
23
- validateToken(token);
24
- return requestDatalayerAPI({
25
- url: `${baseUrl}${API_BASE_PATHS.RUNTIMES}/environments`,
26
- method: 'GET',
27
- token,
28
- });
29
- };
@@ -1,15 +0,0 @@
1
- import type { HealthzPingResponse } from '../../models/Common';
2
- /**
3
- * Health check ping endpoint for Runtimes service
4
- * @param baseUrl - Base URL for the API (defaults to production Runtimes URL)
5
- * @returns Health check response
6
- * @throws {Error} If the health check fails
7
- *
8
- * @remarks
9
- * This endpoint provides a basic health check for the Runtimes service.
10
- * It returns the current status of the service.
11
- *
12
- * Expected status codes:
13
- * - 200: Service is healthy
14
- */
15
- export declare const ping: (baseUrl?: string) => Promise<HealthzPingResponse>;
@@ -1,44 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
- /**
6
- * Health check API functions for the Datalayer Runtimes service.
7
- *
8
- * Provides functions for checking the health status of the Runtimes service.
9
- *
10
- * @module api/runtimes/healthz
11
- */
12
- import { requestDatalayerAPI } from '../DatalayerApi.js';
13
- import { API_BASE_PATHS, DEFAULT_SERVICE_URLS } from '../constants.js';
14
- /**
15
- * Health check ping endpoint for Runtimes service
16
- * @param baseUrl - Base URL for the API (defaults to production Runtimes URL)
17
- * @returns Health check response
18
- * @throws {Error} If the health check fails
19
- *
20
- * @remarks
21
- * This endpoint provides a basic health check for the Runtimes service.
22
- * It returns the current status of the service.
23
- *
24
- * Expected status codes:
25
- * - 200: Service is healthy
26
- */
27
- export const ping = async (baseUrl = DEFAULT_SERVICE_URLS.RUNTIMES) => {
28
- try {
29
- const response = await requestDatalayerAPI({
30
- url: `${baseUrl}${API_BASE_PATHS.RUNTIMES}/ping`,
31
- method: 'GET',
32
- });
33
- return response;
34
- }
35
- catch (error) {
36
- // Check if it's a response error with status code information
37
- if (error.response) {
38
- const status = error.response.status;
39
- throw new Error(`Health check failed: Service unhealthy (status ${status}) - ${error.message}`);
40
- }
41
- // Re-throw other errors (network errors, etc.)
42
- throw new Error(`Health check failed: ${error.message}`);
43
- }
44
- };
@@ -1,12 +0,0 @@
1
- /**
2
- * Runtimes API exports.
3
- *
4
- * Provides organized access to runtime management functionality.
5
- *
6
- * @module api/runtimes
7
- */
8
- export * as environments from './environments';
9
- export * as healthz from './healthz';
10
- export * as runtimes from './runtimes';
11
- export * as snapshots from './snapshots';
12
- export * as checkpoints from './checkpoints';