@datalayer/core 1.0.25 → 1.1.43

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 (359) hide show
  1. package/README.md +11 -134
  2. package/lib/api/index.d.ts +0 -9
  3. package/lib/api/index.js +0 -9
  4. package/lib/cli-login.js +167 -0
  5. package/lib/client/auth/AuthenticationManager.d.ts +3 -3
  6. package/lib/client/auth/AuthenticationManager.js +13 -13
  7. package/lib/client/auth/strategies.d.ts +2 -2
  8. package/lib/client/auth/strategies.js +6 -6
  9. package/lib/client/base.d.ts +9 -12
  10. package/lib/client/base.js +17 -19
  11. package/lib/client/index.d.ts +10 -98
  12. package/lib/client/index.js +12 -21
  13. package/lib/client/mixins/IAMMixin.js +26 -26
  14. package/lib/components/auth/Login.js +2 -2
  15. package/lib/components/avatars/UserAvatar.d.ts +16 -0
  16. package/lib/components/avatars/UserAvatar.js +47 -0
  17. package/lib/components/avatars/index.d.ts +1 -0
  18. package/lib/components/avatars/index.js +1 -0
  19. package/lib/components/billing/BillableAccountSelect.js +4 -0
  20. package/lib/components/billing/index.js +4 -0
  21. package/lib/components/context/index.d.ts +0 -1
  22. package/lib/components/context/index.js +0 -1
  23. package/lib/components/display/DisplayHandle.d.ts +12 -0
  24. package/lib/components/display/DisplayHandle.js +11 -0
  25. package/lib/components/display/LiveRelativeTime.js +4 -0
  26. package/lib/components/display/index.d.ts +1 -0
  27. package/lib/components/display/index.js +1 -0
  28. package/lib/components/flashes/index.d.ts +0 -1
  29. package/lib/components/flashes/index.js +0 -1
  30. package/lib/components/index.d.ts +0 -1
  31. package/lib/components/index.js +0 -1
  32. package/lib/components/principal/Principal.d.ts +7 -0
  33. package/lib/components/principal/Principal.js +153 -16
  34. package/lib/components/principal/PrincipalAvatar.d.ts +1 -1
  35. package/lib/components/principal/PrincipalAvatar.js +4 -28
  36. package/lib/components/principal/PrincipalBadge.js +4 -4
  37. package/lib/components/principal/PrincipalDetailsOverlay.d.ts +4 -2
  38. package/lib/components/principal/PrincipalDetailsOverlay.js +27 -7
  39. package/lib/components/principal/PrincipalSwitcherMenu.js +79 -42
  40. package/lib/components/progress/index.d.ts +0 -1
  41. package/lib/components/progress/index.js +0 -1
  42. package/lib/components/sharing/ShareAccessComponent.d.ts +3 -2
  43. package/lib/components/sharing/ShareAccessComponent.js +194 -147
  44. package/lib/components/sharing/SharingEditor.js +4 -0
  45. package/lib/components/snippets/index.d.ts +1 -1
  46. package/lib/components/snippets/index.js +1 -1
  47. package/lib/components/students/StudentResultCircle.d.ts +21 -0
  48. package/lib/components/students/StudentResultCircle.js +59 -0
  49. package/lib/components/students/index.d.ts +1 -1
  50. package/lib/components/students/index.js +1 -1
  51. package/lib/components/time/LiveRelativeTime.js +4 -0
  52. package/lib/components/time/index.js +4 -0
  53. package/lib/components/timeline/index.js +4 -0
  54. package/lib/components/tokens/index.d.ts +1 -1
  55. package/lib/components/tokens/index.js +1 -1
  56. package/lib/components/toolbars/index.d.ts +1 -3
  57. package/lib/components/toolbars/index.js +1 -3
  58. package/lib/config/Configuration.d.ts +13 -13
  59. package/lib/config/Configuration.js +5 -5
  60. package/lib/hooks/cacheConverters.d.ts +21 -0
  61. package/lib/hooks/cacheConverters.js +110 -0
  62. package/lib/hooks/index.d.ts +0 -2
  63. package/lib/hooks/index.js +0 -2
  64. package/lib/hooks/useCache.d.ts +64 -35
  65. package/lib/hooks/useCache.js +661 -306
  66. package/lib/hooks/useDatalayer.js +3 -1
  67. package/lib/hooks/useIAM.js +2 -4
  68. package/lib/hooks/useLocationHandles.d.ts +3 -1
  69. package/lib/hooks/useLocationHandles.js +2 -1
  70. package/lib/hooks/usePrincipalStore.d.ts +2 -2
  71. package/lib/hooks/usePrincipalStore.js +97 -14
  72. package/lib/hooks/useSelectedPrincipal.js +1 -1
  73. package/lib/hooks/useUser.js +19 -2
  74. package/lib/index.d.ts +1 -6
  75. package/lib/index.js +1 -13
  76. package/lib/main.js +3 -3
  77. package/lib/mocks/index.js +1 -1
  78. package/lib/mocks/models/index.d.ts +0 -1
  79. package/lib/mocks/models/index.js +0 -1
  80. package/lib/models/Datasource.d.ts +2 -2
  81. package/lib/models/IAM.d.ts +1 -1
  82. package/lib/models/School.d.ts +12 -3
  83. package/lib/models/Secret.d.ts +2 -2
  84. package/lib/models/Student.d.ts +13 -3
  85. package/lib/models/Usage.d.ts +11 -1
  86. package/lib/models/UserDTO.d.ts +2 -2
  87. package/lib/models/UserSettings.d.ts +1 -1
  88. package/lib/models/UserSettings.js +1 -1
  89. package/lib/models/index.d.ts +0 -30
  90. package/lib/models/index.js +0 -30
  91. package/lib/otel/client/OtelClient.d.ts +2 -2
  92. package/lib/otel/client/OtelClient.js +2 -2
  93. package/lib/otel/hooks/index.js +5 -5
  94. package/lib/otel/types.d.ts +1 -1
  95. package/lib/otel/views/OtelLive.js +1 -1
  96. package/lib/routes/index.d.ts +1 -0
  97. package/lib/routes/index.js +1 -0
  98. package/lib/routes/publicPaths.d.ts +23 -0
  99. package/lib/routes/publicPaths.js +74 -0
  100. package/lib/state/State.d.ts +0 -12
  101. package/lib/state/State.js +0 -12
  102. package/lib/state/substates/CoreState.js +13 -13
  103. package/lib/state/substates/IAMState.d.ts +1 -1
  104. package/lib/state/substates/IAMState.js +14 -14
  105. package/lib/state/substates/LayoutState.d.ts +12 -1
  106. package/lib/state/substates/SurveysState.d.ts +1 -1
  107. package/lib/state/substates/SurveysState.js +10 -10
  108. package/lib/state/substates/index.d.ts +0 -7
  109. package/lib/state/substates/index.js +0 -7
  110. package/lib/utils/Handles.js +3 -1
  111. package/lib/utils/index.d.ts +0 -1
  112. package/lib/utils/index.js +0 -1
  113. package/lib/views/api-keys/APIKeys.js +12 -3
  114. package/lib/views/datasources/DatasourceDetail.d.ts +1 -1
  115. package/lib/views/datasources/DatasourceNew.d.ts +1 -1
  116. package/lib/views/datasources/Datasources.d.ts +1 -1
  117. package/lib/views/datasources/Datasources.js +12 -3
  118. package/lib/views/iam/SignInSimple.d.ts +37 -1
  119. package/lib/views/iam/SignInSimple.js +111 -13
  120. package/package.json +5 -3
  121. package/lib/App.css +0 -47
  122. package/lib/App.d.ts +0 -3
  123. package/lib/App.js +0 -21
  124. package/lib/api/runtimes/checkpoints.d.ts +0 -122
  125. package/lib/api/runtimes/checkpoints.js +0 -118
  126. package/lib/api/runtimes/environments.d.ts +0 -9
  127. package/lib/api/runtimes/environments.js +0 -29
  128. package/lib/api/runtimes/healthz.d.ts +0 -15
  129. package/lib/api/runtimes/healthz.js +0 -44
  130. package/lib/api/runtimes/index.d.ts +0 -12
  131. package/lib/api/runtimes/index.js +0 -16
  132. package/lib/api/runtimes/runtimes.d.ts +0 -138
  133. package/lib/api/runtimes/runtimes.js +0 -230
  134. package/lib/api/runtimes/snapshots.d.ts +0 -38
  135. package/lib/api/runtimes/snapshots.js +0 -82
  136. package/lib/api/scheduler/index.d.ts +0 -6
  137. package/lib/api/scheduler/index.js +0 -10
  138. package/lib/api/scheduler/schedules.d.ts +0 -85
  139. package/lib/api/scheduler/schedules.js +0 -78
  140. package/lib/api/spacer/documents.d.ts +0 -12
  141. package/lib/api/spacer/documents.js +0 -43
  142. package/lib/api/spacer/healthz.d.ts +0 -15
  143. package/lib/api/spacer/healthz.js +0 -44
  144. package/lib/api/spacer/index.d.ts +0 -15
  145. package/lib/api/spacer/index.js +0 -19
  146. package/lib/api/spacer/items.d.ts +0 -25
  147. package/lib/api/spacer/items.js +0 -55
  148. package/lib/api/spacer/lexicals.d.ts +0 -34
  149. package/lib/api/spacer/lexicals.js +0 -89
  150. package/lib/api/spacer/notebooks.d.ts +0 -34
  151. package/lib/api/spacer/notebooks.js +0 -89
  152. package/lib/api/spacer/spaces.d.ts +0 -84
  153. package/lib/api/spacer/spaces.js +0 -170
  154. package/lib/api/spacer/users.d.ts +0 -9
  155. package/lib/api/spacer/users.js +0 -29
  156. package/lib/client/mixins/RuntimesMixin.d.ts +0 -93
  157. package/lib/client/mixins/RuntimesMixin.js +0 -229
  158. package/lib/client/mixins/SpacerMixin.d.ts +0 -210
  159. package/lib/client/mixins/SpacerMixin.js +0 -615
  160. package/lib/client/utils/spacerUtils.d.ts +0 -18
  161. package/lib/client/utils/spacerUtils.js +0 -32
  162. package/lib/collaboration/DatalayerCollaboration.d.ts +0 -13
  163. package/lib/collaboration/DatalayerCollaboration.js +0 -28
  164. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +0 -60
  165. package/lib/collaboration/DatalayerCollaborationProvider.js +0 -163
  166. package/lib/collaboration/index.d.ts +0 -2
  167. package/lib/collaboration/index.js +0 -6
  168. package/lib/components/context/SpaceSelect.d.ts +0 -2
  169. package/lib/components/context/SpaceSelect.js +0 -42
  170. package/lib/components/flashes/FlashDisclaimer.d.ts +0 -2
  171. package/lib/components/flashes/FlashDisclaimer.js +0 -17
  172. package/lib/components/icons/ArtifactIcon.d.ts +0 -10
  173. package/lib/components/icons/ArtifactIcon.js +0 -58
  174. package/lib/components/icons/index.d.ts +0 -1
  175. package/lib/components/icons/index.js +0 -5
  176. package/lib/components/nbgrader/NbGradesDetails.d.ts +0 -5
  177. package/lib/components/nbgrader/NbGradesDetails.js +0 -14
  178. package/lib/components/nbgrader/index.d.ts +0 -1
  179. package/lib/components/nbgrader/index.js +0 -5
  180. package/lib/components/progress/CreditsIndicator.d.ts +0 -33
  181. package/lib/components/progress/CreditsIndicator.js +0 -23
  182. package/lib/components/runtimes/RuntimeCellVariables.d.ts +0 -39
  183. package/lib/components/runtimes/RuntimeCellVariables.js +0 -172
  184. package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +0 -37
  185. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +0 -101
  186. package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +0 -57
  187. package/lib/components/runtimes/RuntimeLauncherDialog.js +0 -275
  188. package/lib/components/runtimes/RuntimePickerBase.d.ts +0 -69
  189. package/lib/components/runtimes/RuntimePickerBase.js +0 -122
  190. package/lib/components/runtimes/RuntimePickerCell.d.ts +0 -34
  191. package/lib/components/runtimes/RuntimePickerCell.js +0 -104
  192. package/lib/components/runtimes/RuntimePickerNotebook.d.ts +0 -42
  193. package/lib/components/runtimes/RuntimePickerNotebook.js +0 -232
  194. package/lib/components/runtimes/RuntimeReservationControl.d.ts +0 -47
  195. package/lib/components/runtimes/RuntimeReservationControl.js +0 -42
  196. package/lib/components/runtimes/RuntimeSimplePicker.d.ts +0 -38
  197. package/lib/components/runtimes/RuntimeSimplePicker.js +0 -155
  198. package/lib/components/runtimes/RuntimeTransfer.d.ts +0 -16
  199. package/lib/components/runtimes/RuntimeTransfer.js +0 -5
  200. package/lib/components/runtimes/RuntimeUtils.d.ts +0 -17
  201. package/lib/components/runtimes/RuntimeUtils.js +0 -178
  202. package/lib/components/runtimes/RuntimeVariables.d.ts +0 -38
  203. package/lib/components/runtimes/RuntimeVariables.js +0 -75
  204. package/lib/components/runtimes/index.d.ts +0 -11
  205. package/lib/components/runtimes/index.js +0 -15
  206. package/lib/components/scheduler/ScheduleMenu.d.ts +0 -54
  207. package/lib/components/scheduler/ScheduleMenu.js +0 -154
  208. package/lib/components/scheduler/index.d.ts +0 -1
  209. package/lib/components/scheduler/index.js +0 -5
  210. package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +0 -33
  211. package/lib/components/snapshots/SandboxSnapshotMenu.js +0 -169
  212. package/lib/components/snapshots/index.d.ts +0 -1
  213. package/lib/components/snapshots/index.js +0 -5
  214. package/lib/components/snippets/SnippetDialog.d.ts +0 -42
  215. package/lib/components/snippets/SnippetDialog.js +0 -42
  216. package/lib/components/students/StudentItemStatus.d.ts +0 -7
  217. package/lib/components/students/StudentItemStatus.js +0 -66
  218. package/lib/components/tokens/SpaceVariantToken.d.ts +0 -5
  219. package/lib/components/tokens/SpaceVariantToken.js +0 -23
  220. package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +0 -4
  221. package/lib/components/toolbars/AssignmentEditorToolbar.js +0 -18
  222. package/lib/components/toolbars/DocumentEditorToolbar.d.ts +0 -2
  223. package/lib/components/toolbars/DocumentEditorToolbar.js +0 -12
  224. package/lib/components/toolbars/NotebookEditorToolbar.d.ts +0 -29
  225. package/lib/components/toolbars/NotebookEditorToolbar.js +0 -30
  226. package/lib/examples/CellExample.d.ts +0 -6
  227. package/lib/examples/CellExample.js +0 -20
  228. package/lib/examples/NotebookExample.d.ts +0 -6
  229. package/lib/examples/NotebookExample.js +0 -19
  230. package/lib/examples/lexical-theme.css +0 -436
  231. package/lib/examples/notebooks/IPyWidgetsExample.ipynb.json +0 -101
  232. package/lib/examples/notebooks/IPyWidgetsExampleWithState.ipynb.json +0 -112
  233. package/lib/examples/notebooks/Lite.ipynb.json +0 -128
  234. package/lib/examples/notebooks/Matplotlib.ipynb.json +0 -137
  235. package/lib/examples/notebooks/NotebookExample1.ipynb.json +0 -126
  236. package/lib/examples/notebooks/NotebookExample2.ipynb.json +0 -48
  237. package/lib/examples/notebooks/NotebookOutputs.ipynb.json +0 -49
  238. package/lib/examples/notebooks/NotebookToCExample.ipynb.json +0 -102
  239. package/lib/examples/notebooks/PyGWalker.ipynb.json +0 -55
  240. package/lib/hooks/useCellOutputshot.d.ts +0 -4
  241. package/lib/hooks/useCellOutputshot.js +0 -25
  242. package/lib/hooks/useProjects.d.ts +0 -628
  243. package/lib/hooks/useProjects.js +0 -190
  244. package/lib/hooks/useRuntimes.d.ts +0 -5
  245. package/lib/hooks/useRuntimes.js +0 -34
  246. package/lib/mocks/jupyter/index.js +0 -5
  247. package/lib/mocks/models/CourseMock.d.ts +0 -6
  248. package/lib/mocks/models/CourseMock.js +0 -29
  249. package/lib/mocks/models/SpaceMock.d.ts +0 -6
  250. package/lib/mocks/models/SpaceMock.js +0 -25
  251. package/lib/models/Assignment.d.ts +0 -7
  252. package/lib/models/Assignment.js +0 -5
  253. package/lib/models/Cell.d.ts +0 -8
  254. package/lib/models/Cell.js +0 -5
  255. package/lib/models/CodeBlock.d.ts +0 -10
  256. package/lib/models/CodeBlock.js +0 -5
  257. package/lib/models/CodeSandboxSnapshot.d.ts +0 -92
  258. package/lib/models/CodeSandboxSnapshot.js +0 -13
  259. package/lib/models/CodeSandboxSnapshotDTO.d.ts +0 -173
  260. package/lib/models/CodeSandboxSnapshotDTO.js +0 -139
  261. package/lib/models/CodefeedBlocks.d.ts +0 -7
  262. package/lib/models/CodefeedBlocks.js +0 -5
  263. package/lib/models/Content.d.ts +0 -5
  264. package/lib/models/Content.js +0 -5
  265. package/lib/models/Course.d.ts +0 -17
  266. package/lib/models/Course.js +0 -5
  267. package/lib/models/Dataset.d.ts +0 -16
  268. package/lib/models/Dataset.js +0 -5
  269. package/lib/models/Document.d.ts +0 -8
  270. package/lib/models/Document.js +0 -5
  271. package/lib/models/Environment.d.ts +0 -86
  272. package/lib/models/Environment.js +0 -5
  273. package/lib/models/EnvironmentDTO.d.ts +0 -125
  274. package/lib/models/EnvironmentDTO.js +0 -88
  275. package/lib/models/Exercise.d.ts +0 -16
  276. package/lib/models/Exercise.js +0 -5
  277. package/lib/models/Item.d.ts +0 -20
  278. package/lib/models/Item.js +0 -5
  279. package/lib/models/ItemDTO.d.ts +0 -74
  280. package/lib/models/ItemDTO.js +0 -186
  281. package/lib/models/ItemType.d.ts +0 -2
  282. package/lib/models/ItemType.js +0 -5
  283. package/lib/models/Lesson.d.ts +0 -5
  284. package/lib/models/Lesson.js +0 -5
  285. package/lib/models/LexicalDTO.d.ts +0 -155
  286. package/lib/models/LexicalDTO.js +0 -157
  287. package/lib/models/Library.d.ts +0 -10
  288. package/lib/models/Library.js +0 -5
  289. package/lib/models/Notebook.d.ts +0 -11
  290. package/lib/models/Notebook.js +0 -5
  291. package/lib/models/NotebookDTO.d.ts +0 -96
  292. package/lib/models/NotebookDTO.js +0 -153
  293. package/lib/models/Page.d.ts +0 -41
  294. package/lib/models/Page.js +0 -25
  295. package/lib/models/PageTag.d.ts +0 -19
  296. package/lib/models/PageTag.js +0 -94
  297. package/lib/models/ProjectDTO.d.ts +0 -89
  298. package/lib/models/ProjectDTO.js +0 -131
  299. package/lib/models/Runtime.d.ts +0 -123
  300. package/lib/models/Runtime.js +0 -18
  301. package/lib/models/RuntimeDTO.d.ts +0 -191
  302. package/lib/models/RuntimeDTO.js +0 -204
  303. package/lib/models/Space.d.ts +0 -35
  304. package/lib/models/Space.js +0 -66
  305. package/lib/models/SpaceDTO.d.ts +0 -334
  306. package/lib/models/SpaceDTO.js +0 -244
  307. package/lib/models/SpaceItem.d.ts +0 -10
  308. package/lib/models/SpaceItem.js +0 -5
  309. package/lib/models/SpaceMember.d.ts +0 -6
  310. package/lib/models/SpaceMember.js +0 -5
  311. package/lib/models/StudentItem.d.ts +0 -21
  312. package/lib/models/StudentItem.js +0 -5
  313. package/lib/services/DatalayerServiceManager.d.ts +0 -22
  314. package/lib/services/DatalayerServiceManager.js +0 -69
  315. package/lib/services/index.d.ts +0 -4
  316. package/lib/services/index.js +0 -7
  317. package/lib/services/reconnectToRuntime.d.ts +0 -32
  318. package/lib/services/reconnectToRuntime.js +0 -59
  319. package/lib/state/substates/CellState.d.ts +0 -12
  320. package/lib/state/substates/CellState.js +0 -22
  321. package/lib/state/substates/DocumentState.d.ts +0 -10
  322. package/lib/state/substates/DocumentState.js +0 -14
  323. package/lib/state/substates/GradeState.d.ts +0 -10
  324. package/lib/state/substates/GradeState.js +0 -14
  325. package/lib/state/substates/JupyterLabState.d.ts +0 -16
  326. package/lib/state/substates/JupyterLabState.js +0 -17
  327. package/lib/state/substates/NbformatState.d.ts +0 -13
  328. package/lib/state/substates/NbformatState.js +0 -16
  329. package/lib/state/substates/RuntimesState.d.ts +0 -79
  330. package/lib/state/substates/RuntimesState.js +0 -180
  331. package/lib/state/substates/SpaceState.d.ts +0 -11
  332. package/lib/state/substates/SpaceState.js +0 -16
  333. package/lib/stateful/index.d.ts +0 -2
  334. package/lib/stateful/index.js +0 -6
  335. package/lib/stateful/jupyter/exec/Python.d.ts +0 -5
  336. package/lib/stateful/jupyter/exec/Python.js +0 -100
  337. package/lib/stateful/jupyter/exec/Snippets.d.ts +0 -105
  338. package/lib/stateful/jupyter/exec/Snippets.js +0 -101
  339. package/lib/stateful/jupyter/exec/index.d.ts +0 -2
  340. package/lib/stateful/jupyter/exec/index.js +0 -6
  341. package/lib/stateful/jupyter/index.d.ts +0 -2
  342. package/lib/stateful/jupyter/index.js +0 -6
  343. package/lib/stateful/jupyter/kernelsHandler.d.ts +0 -8
  344. package/lib/stateful/jupyter/kernelsHandler.js +0 -39
  345. package/lib/stateful/runtimes/actions.d.ts +0 -102
  346. package/lib/stateful/runtimes/actions.js +0 -249
  347. package/lib/stateful/runtimes/apis.d.ts +0 -273
  348. package/lib/stateful/runtimes/apis.js +0 -5
  349. package/lib/stateful/runtimes/index.d.ts +0 -5
  350. package/lib/stateful/runtimes/index.js +0 -9
  351. package/lib/stateful/runtimes/settings.d.ts +0 -15
  352. package/lib/stateful/runtimes/settings.js +0 -31
  353. package/lib/stateful/runtimes/snapshots.d.ts +0 -25
  354. package/lib/stateful/runtimes/snapshots.js +0 -150
  355. package/lib/stateful/runtimes/utils.d.ts +0 -7
  356. package/lib/stateful/runtimes/utils.js +0 -14
  357. package/lib/utils/Cells.d.ts +0 -2
  358. package/lib/utils/Cells.js +0 -28
  359. /package/lib/{mocks/jupyter/index.d.ts → cli-login.d.ts} +0 -0
@@ -1,615 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
- /**
6
- * Spacer mixin for managing workspaces, notebooks, and content.
7
- * @module client/mixins/SpacerMixin
8
- */
9
- import * as spaces from '../../api/spacer/spaces.js';
10
- import * as notebooks from '../../api/spacer/notebooks.js';
11
- import * as users from '../../api/spacer/users.js';
12
- import * as lexicals from '../../api/spacer/lexicals.js';
13
- import * as documents from '../../api/spacer/documents.js';
14
- import * as items from '../../api/spacer/items.js';
15
- import { NotebookDTO } from '../../models/NotebookDTO.js';
16
- import { LexicalDTO } from '../../models/LexicalDTO.js';
17
- import { SpaceDTO } from '../../models/SpaceDTO.js';
18
- import { ProjectDTO } from '../../models/ProjectDTO.js';
19
- import { HealthCheck } from '../../models/HealthCheck.js';
20
- import { convertSpaceItemsToModels } from '../utils/spacerUtils.js';
21
- import { generateHandle } from '../utils/slugify.js';
22
- /** Spacer mixin providing workspace and content management. */
23
- export function SpacerMixin(Base) {
24
- return class extends Base {
25
- // ========================================================================
26
- // User
27
- // ========================================================================
28
- /**
29
- * Get all workspaces for the authenticated user.
30
- * @returns Array of Space instances
31
- */
32
- async getMySpaces() {
33
- const token = this.getToken();
34
- const spacerRunUrl = this.getSpacerRunUrl();
35
- const response = await users.getMySpaces(token, spacerRunUrl);
36
- return response.spaces.map(s => new SpaceDTO(s, this));
37
- }
38
- // ========================================================================
39
- // Spaces
40
- // ========================================================================
41
- /**
42
- * Create a new workspace.
43
- * @param name - Space name
44
- * @param description - Space description
45
- * @param variant - Space variant type
46
- * @param spaceHandle - Unique handle for the space
47
- * @param organizationId - Organization ID
48
- * @param seedSpaceId - Seed space ID for initialization
49
- * @param isPublic - Whether the space is public
50
- * @returns Created Space instance
51
- */
52
- async createSpace(name, description, variant, spaceHandle, organizationId, seedSpaceId, isPublic) {
53
- const token = this.getToken();
54
- const spacerRunUrl = this.getSpacerRunUrl();
55
- const data = {
56
- name,
57
- description,
58
- variant,
59
- spaceHandle,
60
- organizationId,
61
- seedSpaceId,
62
- public: isPublic,
63
- };
64
- const response = await spaces.createSpace(token, data, spacerRunUrl);
65
- if (!response.space) {
66
- throw new Error('Failed to create space: no space returned');
67
- }
68
- return new SpaceDTO(response.space, this);
69
- }
70
- // ========================================================================
71
- // Notebooks
72
- // ========================================================================
73
- /**
74
- * Create a new notebook.
75
- * @param spaceId - ID of the space to create the notebook in
76
- * @param name - Name of the notebook
77
- * @param description - Description of the notebook
78
- * @param file - Optional file for notebook content
79
- * @returns Created Notebook instance
80
- */
81
- async createNotebook(spaceId, name, description, file) {
82
- // Get the Space model instance
83
- const spaces = await this.getMySpaces();
84
- const spaceModel = spaces.find((s) => s.uid === spaceId);
85
- if (!spaceModel) {
86
- throw new Error(`Space with ID '${spaceId}' not found`);
87
- }
88
- // Use the Space model's createNotebook method
89
- return await spaceModel.createNotebook({
90
- name,
91
- description,
92
- file,
93
- });
94
- }
95
- /**
96
- * Get a notebook by ID.
97
- * @param id - Notebook ID
98
- * @returns Notebook instance
99
- */
100
- async getNotebook(id) {
101
- const spacerRunUrl = this.getSpacerRunUrl();
102
- const token = this.getToken();
103
- const response = await notebooks.getNotebook(token, id, spacerRunUrl);
104
- if (!response.notebook) {
105
- throw new Error(`Notebook with ID '${id}' not found`);
106
- }
107
- return new NotebookDTO(response.notebook, this);
108
- }
109
- /**
110
- * Update a notebook.
111
- * @param id - Notebook ID
112
- * @param name - Optional new name for the notebook
113
- * @param description - Optional new description for the notebook
114
- * @returns Updated Notebook instance
115
- */
116
- async updateNotebook(id, name, description) {
117
- const spacerRunUrl = this.getSpacerRunUrl();
118
- const token = this.getToken();
119
- const data = {};
120
- if (name !== undefined)
121
- data.name = name;
122
- if (description !== undefined)
123
- data.description = description;
124
- const response = await notebooks.updateNotebook(token, id, data, spacerRunUrl);
125
- if (!response.notebook) {
126
- throw new Error('Failed to update notebook: no notebook returned');
127
- }
128
- return new NotebookDTO(response.notebook, this);
129
- }
130
- // ========================================================================
131
- // Lexicals
132
- // ========================================================================
133
- /**
134
- * Create a new lexical document.
135
- * @param spaceId - ID of the space to create the lexical document in
136
- * @param name - Name of the lexical document
137
- * @param description - Description of the lexical document
138
- * @param file - Optional file for document content
139
- * @returns Created Lexical instance
140
- */
141
- async createLexical(spaceId, name, description, file) {
142
- // Get the Space model instance
143
- const spaces = await this.getMySpaces();
144
- const spaceModel = spaces.find((s) => s.uid === spaceId);
145
- if (!spaceModel) {
146
- throw new Error(`Space with ID '${spaceId}' not found`);
147
- }
148
- // Use the Space model's createLexical method
149
- return await spaceModel.createLexical({
150
- name,
151
- description,
152
- file,
153
- });
154
- }
155
- /**
156
- * Get a lexical document by ID.
157
- * @param id - Document ID
158
- * @returns Lexical instance
159
- */
160
- async getLexical(id) {
161
- const spacerRunUrl = this.getSpacerRunUrl();
162
- const token = this.getToken();
163
- const response = await lexicals.getLexical(token, id, spacerRunUrl);
164
- if (!response.document) {
165
- throw new Error(`Lexical document with ID '${id}' not found`);
166
- }
167
- return new LexicalDTO(response.document, this);
168
- }
169
- /**
170
- * Update a lexical document.
171
- * @param id - Document ID
172
- * @param name - Optional new name for the lexical document
173
- * @param description - Optional new description for the lexical document
174
- * @returns Updated Lexical instance
175
- */
176
- async updateLexical(id, name, description) {
177
- const spacerRunUrl = this.getSpacerRunUrl();
178
- const token = this.getToken();
179
- const data = {};
180
- if (name !== undefined)
181
- data.name = name;
182
- if (description !== undefined)
183
- data.description = description;
184
- const response = await lexicals.updateLexical(token, id, data, spacerRunUrl);
185
- return new LexicalDTO(response.document, this);
186
- }
187
- // ========================================================================
188
- // Items
189
- // ========================================================================
190
- /**
191
- * Get the items of a space as model instances.
192
- * @param spaceId - Space ID
193
- * @returns Array of Notebook and Lexical model instances
194
- */
195
- async getSpaceItems(spaceId) {
196
- const spacerRunUrl = this.getSpacerRunUrl();
197
- const token = this.getToken();
198
- const response = await items.getSpaceItems(token, spaceId, spacerRunUrl);
199
- // Use shared utility function to convert items to model instances
200
- return convertSpaceItemsToModels(response.items, this);
201
- }
202
- /**
203
- * Get a single item from a space.
204
- * @param itemId - Item ID to retrieve
205
- * @returns Notebook or Lexical model instance
206
- * @throws Error if item not found
207
- */
208
- async getSpaceItem(itemId) {
209
- const spacerRunUrl = this.getSpacerRunUrl();
210
- const token = this.getToken();
211
- const response = await items.getItem(token, itemId, spacerRunUrl);
212
- if (!response.success || !response.item) {
213
- throw new Error(`Space item '${itemId}' not found`);
214
- }
215
- // Determine item type and create appropriate model
216
- const item = response.item;
217
- if (item.type_s === 'notebook' || item.notebook_name_s !== undefined) {
218
- return new NotebookDTO(item, this);
219
- }
220
- else if (item.type_s === 'lexical' ||
221
- item.document_name_s !== undefined) {
222
- return new LexicalDTO(item, this);
223
- }
224
- else {
225
- throw new Error(`Unknown item type for item '${itemId}'`);
226
- }
227
- }
228
- /**
229
- * Delete an item from a space.
230
- * @param itemId - Item ID to delete
231
- * @throws Error if deletion fails
232
- */
233
- async deleteSpaceItem(itemId) {
234
- const spacerRunUrl = this.getSpacerRunUrl();
235
- const token = this.getToken();
236
- // First, check if the item exists
237
- try {
238
- const getResponse = await items.getItem(token, itemId, spacerRunUrl);
239
- if (!getResponse.success || !getResponse.item) {
240
- throw new Error(`Space item '${itemId}' not found`);
241
- }
242
- }
243
- catch (error) {
244
- // If getItem throws (e.g., 404), wrap in descriptive error
245
- if (error.message?.includes('404') ||
246
- error.message?.includes('not found')) {
247
- throw new Error(`Failed to delete space item '${itemId}': Item not found`);
248
- }
249
- throw new Error(`Failed to delete space item '${itemId}': ${error.message}`);
250
- }
251
- // Item exists, proceed with deletion
252
- const response = await items.deleteItem(token, itemId, spacerRunUrl);
253
- if (!response.success) {
254
- throw new Error(`Failed to delete space item '${itemId}': ${response.message}`);
255
- }
256
- // Success - return void
257
- }
258
- // ========================================================================
259
- // Content Loading with CDN Support
260
- // ========================================================================
261
- async getContent(itemId) {
262
- const spacerRunUrl = this.getSpacerRunUrl();
263
- const token = this.getToken();
264
- // First, get the item to check for CDN URL
265
- const response = await items.getItem(token, itemId, spacerRunUrl);
266
- if (!response.success || !response.item) {
267
- throw new Error(`Space item '${itemId}' not found`);
268
- }
269
- const item = response.item;
270
- const cdnUrl = item.cdn_url_s;
271
- if (cdnUrl) {
272
- // Load content from CDN
273
- const cdnResponse = await fetch(cdnUrl);
274
- if (!cdnResponse.ok) {
275
- throw new Error(`Failed to load content from CDN: ${cdnResponse.statusText}`);
276
- }
277
- return await cdnResponse.json();
278
- }
279
- // No CDN URL, return content from item
280
- return item.content;
281
- }
282
- // ========================================================================
283
- // Service Health Checks
284
- // ========================================================================
285
- /**
286
- * Check the health status of the Spacer service.
287
- * Performs a lightweight check to verify service accessibility.
288
- *
289
- * @returns Health check result with status and response time
290
- */
291
- async checkSpacerHealth() {
292
- const startTime = Date.now();
293
- const errors = [];
294
- let status = 'unknown';
295
- let healthy = false;
296
- try {
297
- // Test basic connectivity by getting user spaces (lightweight operation)
298
- const spaces = await this.getMySpaces();
299
- const responseTime = Date.now() - startTime;
300
- if (Array.isArray(spaces)) {
301
- healthy = true;
302
- status = 'operational';
303
- }
304
- else {
305
- status = 'degraded';
306
- errors.push('Unexpected response format from spaces endpoint');
307
- }
308
- return new HealthCheck({
309
- healthy,
310
- status,
311
- responseTime,
312
- errors,
313
- timestamp: new Date(),
314
- }, this);
315
- }
316
- catch (error) {
317
- const responseTime = Date.now() - startTime;
318
- status = 'down';
319
- errors.push(`Service unreachable: ${error}`);
320
- return new HealthCheck({
321
- healthy: false,
322
- status,
323
- responseTime,
324
- errors,
325
- timestamp: new Date(),
326
- }, this);
327
- }
328
- }
329
- /**
330
- * Get collaboration session ID for a document
331
- */
332
- async getCollaborationSessionId(documentId) {
333
- const token = this.getToken();
334
- const spacerRunUrl = this.getSpacerRunUrl();
335
- const response = await documents.getCollaborationSessionId(token, documentId, spacerRunUrl);
336
- if (!response.success || !response.sessionId) {
337
- throw new Error(`Failed to get collaboration session ID for document '${documentId}': ${response.error || 'Unknown error'}`);
338
- }
339
- return response.sessionId;
340
- }
341
- // ========================================================================
342
- // Additional Space Operations
343
- // ========================================================================
344
- /**
345
- * Get a space by UID.
346
- * @param uid - Space UID
347
- * @returns Space instance
348
- */
349
- async getSpace(uid) {
350
- const token = this.getToken();
351
- const spacerRunUrl = this.getSpacerRunUrl();
352
- const response = await spaces.getSpace(token, uid, spacerRunUrl);
353
- if (!response.space) {
354
- throw new Error(`Space with UID '${uid}' not found`);
355
- }
356
- return new SpaceDTO(response.space, this);
357
- }
358
- /**
359
- * Update a space (owner updating their own space).
360
- * @param uid - Space UID
361
- * @param data - Update data (supports arbitrary Solr fields)
362
- * @returns Updated Space instance
363
- */
364
- async updateSpace(uid, data) {
365
- const token = this.getToken();
366
- const spacerRunUrl = this.getSpacerRunUrl();
367
- const response = await spaces.updateSpace(token, uid, data, spacerRunUrl);
368
- if (!response.space) {
369
- throw new Error(`Failed to update space '${uid}'`);
370
- }
371
- return new SpaceDTO(response.space, this);
372
- }
373
- /**
374
- * Update a user-specific space (e.g., org admin context).
375
- * @param uid - Space UID
376
- * @param userId - User ID
377
- * @param data - Update data (supports arbitrary Solr fields)
378
- * @returns Updated Space instance
379
- */
380
- async updateUserSpace(uid, userId, data) {
381
- const token = this.getToken();
382
- const spacerRunUrl = this.getSpacerRunUrl();
383
- const response = await spaces.updateUserSpace(token, uid, userId, data, spacerRunUrl);
384
- if (!response.space) {
385
- throw new Error(`Failed to update space '${uid}' for user '${userId}'`);
386
- }
387
- return new SpaceDTO(response.space, this);
388
- }
389
- /**
390
- * Delete a space and all its contents.
391
- * @param uid - Space UID
392
- */
393
- async deleteSpace(uid) {
394
- const token = this.getToken();
395
- const spacerRunUrl = this.getSpacerRunUrl();
396
- await spaces.deleteSpace(token, uid, spacerRunUrl);
397
- }
398
- /**
399
- * Make a space public.
400
- * @param uid - Space UID
401
- * @returns Updated Space instance
402
- */
403
- async makeSpacePublic(uid) {
404
- const token = this.getToken();
405
- const spacerRunUrl = this.getSpacerRunUrl();
406
- const response = await spaces.makeSpacePublic(token, uid, spacerRunUrl);
407
- if (!response.space) {
408
- throw new Error(`Failed to make space '${uid}' public`);
409
- }
410
- return new SpaceDTO(response.space, this);
411
- }
412
- /**
413
- * Make a space private.
414
- * @param uid - Space UID
415
- * @returns Updated Space instance
416
- */
417
- async makeSpacePrivate(uid) {
418
- const token = this.getToken();
419
- const spacerRunUrl = this.getSpacerRunUrl();
420
- const response = await spaces.makeSpacePrivate(token, uid, spacerRunUrl);
421
- if (!response.space) {
422
- throw new Error(`Failed to make space '${uid}' private`);
423
- }
424
- return new SpaceDTO(response.space, this);
425
- }
426
- /**
427
- * Export a space and its contents.
428
- * @param uid - Space UID
429
- * @returns Export data
430
- */
431
- async exportSpace(uid) {
432
- const token = this.getToken();
433
- const spacerRunUrl = this.getSpacerRunUrl();
434
- return spaces.exportSpace(token, uid, spacerRunUrl);
435
- }
436
- /**
437
- * Clone a notebook.
438
- * @param id - Notebook ID to clone
439
- * @returns Cloned Notebook instance
440
- */
441
- async cloneNotebook(id) {
442
- const token = this.getToken();
443
- const spacerRunUrl = this.getSpacerRunUrl();
444
- const response = await notebooks.cloneNotebook(token, id, spacerRunUrl);
445
- if (!response.notebook) {
446
- throw new Error(`Failed to clone notebook '${id}'`);
447
- }
448
- return new NotebookDTO(response.notebook, this);
449
- }
450
- /**
451
- * Clone a lexical document.
452
- * @param id - Document ID to clone
453
- * @returns Cloned Lexical instance
454
- */
455
- async cloneLexical(id) {
456
- const token = this.getToken();
457
- const spacerRunUrl = this.getSpacerRunUrl();
458
- const response = await lexicals.cloneLexical(token, id, spacerRunUrl);
459
- if (!response.document) {
460
- throw new Error(`Failed to clone lexical document '${id}'`);
461
- }
462
- return new LexicalDTO(response.document, this);
463
- }
464
- // ========================================================================
465
- // Projects
466
- // ========================================================================
467
- /**
468
- * Get all projects for the authenticated user.
469
- * Projects are spaces with variant='project'.
470
- * @returns Array of Project instances
471
- */
472
- async getProjects() {
473
- // Use getMySpaces and filter by variant, because the
474
- // /spaces/types/project endpoint returns empty results.
475
- const allSpaces = await this.getMySpaces();
476
- const isProjectSpace = (space) => {
477
- const raw = space.rawData();
478
- const variant = raw?.variant_s ?? space.variant;
479
- if (variant !== 'project') {
480
- return false;
481
- }
482
- const items = Array.isArray(raw?.items)
483
- ? raw.items
484
- : raw?.items && typeof raw.items === 'object'
485
- ? [raw.items]
486
- : [];
487
- if (items.length === 0) {
488
- return true;
489
- }
490
- const hasNotebook = items.some((item) => (item?.type_s ?? item?.type) === 'notebook');
491
- const hasDocument = items.some((item) => {
492
- const type = item?.type_s ?? item?.type;
493
- return type === 'document' || type === 'lexical';
494
- });
495
- return hasNotebook && hasDocument;
496
- };
497
- return allSpaces
498
- .filter(s => isProjectSpace(s))
499
- .map(s => new ProjectDTO(s.rawData()));
500
- }
501
- /**
502
- * Get a project by UID.
503
- * @param uid - Project UID
504
- * @returns Project instance
505
- */
506
- async getProject(uid) {
507
- const token = this.getToken();
508
- const spacerRunUrl = this.getSpacerRunUrl();
509
- const response = await spaces.getSpace(token, uid, spacerRunUrl);
510
- if (!response.space) {
511
- throw new Error(`Project with UID '${uid}' not found`);
512
- }
513
- return new ProjectDTO(response.space);
514
- }
515
- /**
516
- * Create a new project.
517
- * @param name - Project name
518
- * @param description - Project description
519
- * @returns Created Project instance
520
- */
521
- async createProject(name, description) {
522
- const token = this.getToken();
523
- const spacerRunUrl = this.getSpacerRunUrl();
524
- const spaceHandle = generateHandle(name);
525
- const data = {
526
- name,
527
- description: description || '',
528
- variant: 'project',
529
- spaceHandle,
530
- organizationId: '',
531
- seedSpaceId: '',
532
- public: false,
533
- };
534
- const response = await spaces.createSpace(token, data, spacerRunUrl);
535
- if (!response.space) {
536
- throw new Error('Failed to create project: no project returned');
537
- }
538
- return new ProjectDTO(response.space);
539
- }
540
- /**
541
- * Update a project.
542
- * @param uid - Project UID
543
- * @param data - Update data (supports arbitrary Solr fields)
544
- * @returns Updated Project instance
545
- */
546
- async updateProject(uid, data) {
547
- const token = this.getToken();
548
- const spacerRunUrl = this.getSpacerRunUrl();
549
- // Resolve userId from: IAM mixin cache > AuthenticationManager cache > whoami()
550
- let resolvedUserId;
551
- const iamUser = this.currentUserCache;
552
- if (iamUser) {
553
- resolvedUserId = iamUser.uid ?? iamUser.id;
554
- }
555
- if (!resolvedUserId) {
556
- const authUser = this.auth?.getCurrentUser?.();
557
- if (authUser) {
558
- resolvedUserId = authUser.uid ?? authUser.id;
559
- }
560
- }
561
- if (!resolvedUserId) {
562
- try {
563
- const user = await this.whoami();
564
- resolvedUserId = user?.uid ?? user?.id;
565
- }
566
- catch (_e) {
567
- // whoami() not available — no user context
568
- }
569
- }
570
- if (!resolvedUserId) {
571
- throw new Error('Cannot update project: no authenticated user');
572
- }
573
- const response = await spaces.updateUserSpace(token, uid, resolvedUserId, data, spacerRunUrl);
574
- if (response.space) {
575
- return new ProjectDTO(response.space);
576
- }
577
- // Backend returns space: null on success for user-scoped updates.
578
- // Re-fetch the project to return fresh data.
579
- const freshResponse = await spaces.getSpace(token, uid, spacerRunUrl);
580
- if (!freshResponse.space) {
581
- throw new Error(`Failed to update project '${uid}'`);
582
- }
583
- return new ProjectDTO(freshResponse.space);
584
- }
585
- /**
586
- * Rename a project.
587
- * @param uid - Project UID
588
- * @param newName - New project name
589
- * @param description - Project description to preserve.
590
- * @param userId - Authenticated user ID for user-scoped update.
591
- * @returns Updated Project instance
592
- */
593
- async renameProject(uid, newName, description) {
594
- const data = { name: newName };
595
- if (description !== undefined) {
596
- data.description = description;
597
- }
598
- return this.updateProject(uid, data);
599
- }
600
- /**
601
- * Get default items (notebook UID and document UID) for a project.
602
- * @param uid - Project UID
603
- * @returns Default notebook and document UIDs
604
- */
605
- async getProjectDefaultItems(uid) {
606
- const token = this.getToken();
607
- const spacerRunUrl = this.getSpacerRunUrl();
608
- const response = await spaces.getSpaceDefaultItems(token, uid, spacerRunUrl);
609
- return {
610
- defaultNotebookUid: response.default_notebook_uid,
611
- defaultDocumentUid: response.default_document_uid,
612
- };
613
- }
614
- };
615
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * Utility functions for Spacer-related operations to avoid code duplication.
3
- * @module client/utils/spacerUtils
4
- */
5
- import type { GetSpaceItemsResponse } from '../../models/SpaceDTO';
6
- import type { DatalayerClient } from '../index';
7
- import { NotebookDTO } from '../../models/NotebookDTO';
8
- import { LexicalDTO } from '../../models/LexicalDTO';
9
- /**
10
- * Convert raw space items from API response to model instances.
11
- * This utility function is shared between Space.getItems() and SpacerMixin.getSpaceItems()
12
- * to avoid code duplication.
13
- *
14
- * @param response - Raw API response containing space items
15
- * @param client - Client instance to pass to model constructors
16
- * @returns Array of Notebook and Lexical model instances
17
- */
18
- export declare function convertSpaceItemsToModels(items: GetSpaceItemsResponse['items'], client: DatalayerClient): (NotebookDTO | LexicalDTO)[];
@@ -1,32 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
- import { NotebookDTO } from '../../models/NotebookDTO.js';
6
- import { LexicalDTO } from '../../models/LexicalDTO.js';
7
- import { ItemTypes } from '../constants.js';
8
- /**
9
- * Convert raw space items from API response to model instances.
10
- * This utility function is shared between Space.getItems() and SpacerMixin.getSpaceItems()
11
- * to avoid code duplication.
12
- *
13
- * @param response - Raw API response containing space items
14
- * @param client - Client instance to pass to model constructors
15
- * @returns Array of Notebook and Lexical model instances
16
- */
17
- export function convertSpaceItemsToModels(items, client) {
18
- const modelItems = [];
19
- for (const item of items) {
20
- // Check various possible type fields
21
- const itemType = item.type_s;
22
- // Only include notebooks and lexicals
23
- if (itemType === ItemTypes.NOTEBOOK) {
24
- modelItems.push(new NotebookDTO(item, client));
25
- }
26
- else if (itemType === ItemTypes.LEXICAL) {
27
- modelItems.push(new LexicalDTO(item, client));
28
- }
29
- // Skip everything else (exercises, cells, etc.)
30
- }
31
- return modelItems;
32
- }
@@ -1,13 +0,0 @@
1
- export type IFetchSessionId = {
2
- url: string;
3
- token?: string;
4
- /**
5
- * Custom fetch function to use instead of global fetch.
6
- * Useful for proxying requests in environments with CORS restrictions (e.g., VS Code webviews).
7
- */
8
- fetchFn?: typeof fetch;
9
- };
10
- /**
11
- * Fetch the session ID of a collaborative documents from Datalayer.
12
- */
13
- export declare function requestDatalayerCollaborationSessionId({ url, token, fetchFn, }: IFetchSessionId): Promise<string>;