@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.
- package/README.md +35 -24
- package/lib/api/constants.d.ts +3 -0
- package/lib/api/constants.js +3 -0
- package/lib/api/index.d.ts +0 -8
- package/lib/api/index.js +0 -8
- package/lib/cli-login.js +167 -0
- package/lib/client/base.d.ts +0 -3
- package/lib/client/base.js +0 -2
- package/lib/client/index.d.ts +10 -98
- package/lib/client/index.js +12 -21
- package/lib/components/avatars/UserAvatar.d.ts +16 -0
- package/lib/components/avatars/UserAvatar.js +47 -0
- package/lib/components/avatars/index.d.ts +1 -0
- package/lib/components/avatars/index.js +1 -0
- package/lib/components/billing/BillableAccountSelect.js +4 -0
- package/lib/components/billing/index.js +4 -0
- package/lib/components/checkout/StripeCheckout.js +48 -2
- package/lib/components/context/index.d.ts +0 -1
- package/lib/components/context/index.js +0 -1
- package/lib/components/display/DisplayHandle.d.ts +12 -0
- package/lib/components/display/DisplayHandle.js +11 -0
- package/lib/components/display/LiveRelativeTime.d.ts +1 -10
- package/lib/components/display/LiveRelativeTime.js +5 -16
- package/lib/components/display/index.d.ts +1 -0
- package/lib/components/display/index.js +1 -0
- package/lib/components/flashes/index.d.ts +0 -1
- package/lib/components/flashes/index.js +0 -1
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +2 -0
- package/lib/components/principal/Principal.d.ts +7 -0
- package/lib/components/principal/Principal.js +153 -16
- package/lib/components/principal/PrincipalAvatar.d.ts +1 -1
- package/lib/components/principal/PrincipalAvatar.js +4 -28
- package/lib/components/principal/PrincipalBadge.js +4 -4
- package/lib/components/principal/PrincipalDetailsOverlay.d.ts +4 -2
- package/lib/components/principal/PrincipalDetailsOverlay.js +27 -7
- package/lib/components/principal/PrincipalSwitcherMenu.js +76 -39
- package/lib/components/progress/index.d.ts +0 -1
- package/lib/components/progress/index.js +0 -1
- package/lib/components/sharing/ShareAccessComponent.d.ts +3 -2
- package/lib/components/sharing/ShareAccessComponent.js +180 -133
- package/lib/components/sharing/SharingEditor.js +4 -0
- package/lib/components/snippets/index.d.ts +1 -1
- package/lib/components/snippets/index.js +1 -1
- package/lib/components/students/StudentResultCircle.d.ts +21 -0
- package/lib/components/students/StudentResultCircle.js +59 -0
- package/lib/components/students/index.d.ts +1 -1
- package/lib/components/students/index.js +1 -1
- package/lib/components/time/LiveRelativeTime.d.ts +14 -0
- package/lib/components/time/LiveRelativeTime.js +43 -0
- package/lib/components/time/index.d.ts +1 -0
- package/lib/components/time/index.js +9 -0
- package/lib/components/timeline/Timeline.d.ts +20 -0
- package/lib/components/timeline/Timeline.js +90 -0
- package/lib/components/timeline/index.d.ts +1 -0
- package/lib/components/timeline/index.js +9 -0
- package/lib/components/tokens/index.d.ts +1 -1
- package/lib/components/tokens/index.js +1 -1
- package/lib/components/toolbars/index.d.ts +1 -3
- package/lib/components/toolbars/index.js +1 -3
- package/lib/hooks/cacheConverters.d.ts +21 -0
- package/lib/hooks/cacheConverters.js +110 -0
- package/lib/hooks/index.d.ts +0 -2
- package/lib/hooks/index.js +0 -2
- package/lib/hooks/useCache.d.ts +65 -36
- package/lib/hooks/useCache.js +424 -65
- package/lib/hooks/useDatalayer.js +3 -1
- package/lib/hooks/useIAM.js +1 -3
- package/lib/hooks/useLocationHandles.d.ts +3 -1
- package/lib/hooks/useLocationHandles.js +2 -1
- package/lib/hooks/usePrincipalStore.d.ts +2 -2
- package/lib/hooks/usePrincipalStore.js +97 -14
- package/lib/hooks/useProjectStore.d.ts +1 -1
- package/lib/hooks/useSelectedPrincipal.js +1 -1
- package/lib/hooks/useUser.js +19 -2
- package/lib/index.d.ts +1 -6
- package/lib/index.js +1 -13
- package/lib/main.js +3 -3
- package/lib/mocks/index.js +1 -1
- package/lib/mocks/models/index.d.ts +0 -1
- package/lib/mocks/models/index.js +0 -1
- package/lib/models/Datasource.d.ts +2 -2
- package/lib/models/IAM.d.ts +1 -1
- package/lib/models/IAMToken.d.ts +1 -1
- package/lib/models/School.d.ts +12 -3
- package/lib/models/Secret.d.ts +2 -2
- package/lib/models/Student.d.ts +13 -3
- package/lib/models/Usage.d.ts +11 -1
- package/lib/models/UserDTO.d.ts +2 -2
- package/lib/models/index.d.ts +0 -30
- package/lib/models/index.js +0 -30
- package/lib/routes/index.d.ts +1 -0
- package/lib/routes/index.js +1 -0
- package/lib/routes/publicPaths.d.ts +23 -0
- package/lib/routes/publicPaths.js +74 -0
- package/lib/state/State.d.ts +0 -12
- package/lib/state/State.js +0 -12
- package/lib/state/substates/CoreState.js +1 -1
- package/lib/state/substates/LayoutState.d.ts +12 -1
- package/lib/state/substates/index.d.ts +0 -7
- package/lib/state/substates/index.js +0 -7
- package/lib/utils/Date.d.ts +7 -0
- package/lib/utils/Date.js +43 -10
- package/lib/utils/Handles.js +3 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +1 -1
- package/lib/views/api-keys/APIKeyEdit.d.ts +8 -0
- package/lib/views/{iam-tokens/IAMTokenEdit.js → api-keys/APIKeyEdit.js} +31 -31
- package/lib/views/api-keys/APIKeyNew.d.ts +8 -0
- package/lib/views/api-keys/APIKeyNew.js +143 -0
- package/lib/views/api-keys/APIKeys.d.ts +12 -0
- package/lib/views/api-keys/APIKeys.js +128 -0
- package/lib/views/api-keys/APIKeysStandalone.d.ts +2 -0
- package/lib/views/api-keys/APIKeysStandalone.js +117 -0
- package/lib/views/api-keys/index.d.ts +3 -0
- package/lib/{mocks/jupyter → views/api-keys}/index.js +3 -1
- package/lib/views/datasources/DatasourceDetail.d.ts +1 -1
- package/lib/views/datasources/DatasourceNew.d.ts +1 -1
- package/lib/views/datasources/Datasources.d.ts +1 -1
- package/lib/views/datasources/Datasources.js +12 -3
- package/lib/views/iam/SignInSimple.d.ts +37 -1
- package/lib/views/iam/SignInSimple.js +110 -12
- package/package.json +5 -3
- package/lib/App.css +0 -47
- package/lib/App.d.ts +0 -3
- package/lib/App.js +0 -21
- package/lib/api/runtimes/checkpoints.d.ts +0 -122
- package/lib/api/runtimes/checkpoints.js +0 -118
- package/lib/api/runtimes/environments.d.ts +0 -9
- package/lib/api/runtimes/environments.js +0 -29
- package/lib/api/runtimes/healthz.d.ts +0 -15
- package/lib/api/runtimes/healthz.js +0 -44
- package/lib/api/runtimes/index.d.ts +0 -12
- package/lib/api/runtimes/index.js +0 -16
- package/lib/api/runtimes/runtimes.d.ts +0 -138
- package/lib/api/runtimes/runtimes.js +0 -230
- package/lib/api/runtimes/snapshots.d.ts +0 -38
- package/lib/api/runtimes/snapshots.js +0 -82
- package/lib/api/spacer/documents.d.ts +0 -12
- package/lib/api/spacer/documents.js +0 -43
- package/lib/api/spacer/healthz.d.ts +0 -15
- package/lib/api/spacer/healthz.js +0 -44
- package/lib/api/spacer/index.d.ts +0 -15
- package/lib/api/spacer/index.js +0 -19
- package/lib/api/spacer/items.d.ts +0 -25
- package/lib/api/spacer/items.js +0 -55
- package/lib/api/spacer/lexicals.d.ts +0 -34
- package/lib/api/spacer/lexicals.js +0 -89
- package/lib/api/spacer/notebooks.d.ts +0 -34
- package/lib/api/spacer/notebooks.js +0 -89
- package/lib/api/spacer/spaces.d.ts +0 -84
- package/lib/api/spacer/spaces.js +0 -170
- package/lib/api/spacer/users.d.ts +0 -9
- package/lib/api/spacer/users.js +0 -29
- package/lib/client/mixins/RuntimesMixin.d.ts +0 -93
- package/lib/client/mixins/RuntimesMixin.js +0 -229
- package/lib/client/mixins/SpacerMixin.d.ts +0 -210
- package/lib/client/mixins/SpacerMixin.js +0 -615
- package/lib/client/utils/spacerUtils.d.ts +0 -18
- package/lib/client/utils/spacerUtils.js +0 -32
- package/lib/collaboration/DatalayerCollaboration.d.ts +0 -13
- package/lib/collaboration/DatalayerCollaboration.js +0 -28
- package/lib/collaboration/DatalayerCollaborationProvider.d.ts +0 -60
- package/lib/collaboration/DatalayerCollaborationProvider.js +0 -163
- package/lib/collaboration/index.d.ts +0 -2
- package/lib/collaboration/index.js +0 -6
- package/lib/components/context/SpaceSelect.d.ts +0 -2
- package/lib/components/context/SpaceSelect.js +0 -42
- package/lib/components/flashes/FlashDisclaimer.d.ts +0 -2
- package/lib/components/flashes/FlashDisclaimer.js +0 -17
- package/lib/components/icons/ArtifactIcon.d.ts +0 -10
- package/lib/components/icons/ArtifactIcon.js +0 -58
- package/lib/components/icons/index.d.ts +0 -1
- package/lib/components/icons/index.js +0 -5
- package/lib/components/nbgrader/NbGradesDetails.d.ts +0 -5
- package/lib/components/nbgrader/NbGradesDetails.js +0 -14
- package/lib/components/nbgrader/index.d.ts +0 -1
- package/lib/components/nbgrader/index.js +0 -5
- package/lib/components/progress/CreditsIndicator.d.ts +0 -33
- package/lib/components/progress/CreditsIndicator.js +0 -23
- package/lib/components/runtimes/RuntimeCellVariables.d.ts +0 -39
- package/lib/components/runtimes/RuntimeCellVariables.js +0 -172
- package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +0 -37
- package/lib/components/runtimes/RuntimeCellVariablesDialog.js +0 -101
- package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +0 -57
- package/lib/components/runtimes/RuntimeLauncherDialog.js +0 -275
- package/lib/components/runtimes/RuntimePickerBase.d.ts +0 -69
- package/lib/components/runtimes/RuntimePickerBase.js +0 -122
- package/lib/components/runtimes/RuntimePickerCell.d.ts +0 -34
- package/lib/components/runtimes/RuntimePickerCell.js +0 -104
- package/lib/components/runtimes/RuntimePickerNotebook.d.ts +0 -42
- package/lib/components/runtimes/RuntimePickerNotebook.js +0 -232
- package/lib/components/runtimes/RuntimeReservationControl.d.ts +0 -47
- package/lib/components/runtimes/RuntimeReservationControl.js +0 -42
- package/lib/components/runtimes/RuntimeSimplePicker.d.ts +0 -38
- package/lib/components/runtimes/RuntimeSimplePicker.js +0 -155
- package/lib/components/runtimes/RuntimeTransfer.d.ts +0 -16
- package/lib/components/runtimes/RuntimeTransfer.js +0 -5
- package/lib/components/runtimes/RuntimeUtils.d.ts +0 -17
- package/lib/components/runtimes/RuntimeUtils.js +0 -178
- package/lib/components/runtimes/RuntimeVariables.d.ts +0 -38
- package/lib/components/runtimes/RuntimeVariables.js +0 -75
- package/lib/components/runtimes/index.d.ts +0 -11
- package/lib/components/runtimes/index.js +0 -15
- package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +0 -33
- package/lib/components/snapshots/SandboxSnapshotMenu.js +0 -169
- package/lib/components/snapshots/index.d.ts +0 -1
- package/lib/components/snapshots/index.js +0 -5
- package/lib/components/snippets/SnippetDialog.d.ts +0 -42
- package/lib/components/snippets/SnippetDialog.js +0 -42
- package/lib/components/students/StudentItemStatus.d.ts +0 -7
- package/lib/components/students/StudentItemStatus.js +0 -66
- package/lib/components/tokens/SpaceVariantToken.d.ts +0 -5
- package/lib/components/tokens/SpaceVariantToken.js +0 -23
- package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +0 -4
- package/lib/components/toolbars/AssignmentEditorToolbar.js +0 -18
- package/lib/components/toolbars/DocumentEditorToolbar.d.ts +0 -2
- package/lib/components/toolbars/DocumentEditorToolbar.js +0 -12
- package/lib/components/toolbars/NotebookEditorToolbar.d.ts +0 -29
- package/lib/components/toolbars/NotebookEditorToolbar.js +0 -30
- package/lib/examples/CellExample.d.ts +0 -6
- package/lib/examples/CellExample.js +0 -20
- package/lib/examples/NotebookExample.d.ts +0 -6
- package/lib/examples/NotebookExample.js +0 -19
- package/lib/examples/lexical-theme.css +0 -436
- package/lib/examples/notebooks/IPyWidgetsExample.ipynb.json +0 -101
- package/lib/examples/notebooks/IPyWidgetsExampleWithState.ipynb.json +0 -112
- package/lib/examples/notebooks/Lite.ipynb.json +0 -128
- package/lib/examples/notebooks/Matplotlib.ipynb.json +0 -137
- package/lib/examples/notebooks/NotebookExample1.ipynb.json +0 -126
- package/lib/examples/notebooks/NotebookExample2.ipynb.json +0 -48
- package/lib/examples/notebooks/NotebookOutputs.ipynb.json +0 -49
- package/lib/examples/notebooks/NotebookToCExample.ipynb.json +0 -102
- package/lib/examples/notebooks/PyGWalker.ipynb.json +0 -55
- package/lib/hooks/useCellOutputshot.d.ts +0 -4
- package/lib/hooks/useCellOutputshot.js +0 -25
- package/lib/hooks/useProjects.d.ts +0 -628
- package/lib/hooks/useProjects.js +0 -190
- package/lib/hooks/useRuntimes.d.ts +0 -5
- package/lib/hooks/useRuntimes.js +0 -34
- package/lib/mocks/models/CourseMock.d.ts +0 -6
- package/lib/mocks/models/CourseMock.js +0 -29
- package/lib/mocks/models/SpaceMock.d.ts +0 -6
- package/lib/mocks/models/SpaceMock.js +0 -25
- package/lib/models/Assignment.d.ts +0 -7
- package/lib/models/Assignment.js +0 -5
- package/lib/models/Cell.d.ts +0 -8
- package/lib/models/Cell.js +0 -5
- package/lib/models/CodeBlock.d.ts +0 -10
- package/lib/models/CodeBlock.js +0 -5
- package/lib/models/CodeSandboxSnapshot.d.ts +0 -92
- package/lib/models/CodeSandboxSnapshot.js +0 -13
- package/lib/models/CodeSandboxSnapshotDTO.d.ts +0 -173
- package/lib/models/CodeSandboxSnapshotDTO.js +0 -139
- package/lib/models/CodefeedBlocks.d.ts +0 -7
- package/lib/models/CodefeedBlocks.js +0 -5
- package/lib/models/Content.d.ts +0 -5
- package/lib/models/Content.js +0 -5
- package/lib/models/Course.d.ts +0 -17
- package/lib/models/Course.js +0 -5
- package/lib/models/Dataset.d.ts +0 -16
- package/lib/models/Dataset.js +0 -5
- package/lib/models/Document.d.ts +0 -8
- package/lib/models/Document.js +0 -5
- package/lib/models/Environment.d.ts +0 -86
- package/lib/models/Environment.js +0 -5
- package/lib/models/EnvironmentDTO.d.ts +0 -125
- package/lib/models/EnvironmentDTO.js +0 -88
- package/lib/models/Exercise.d.ts +0 -16
- package/lib/models/Exercise.js +0 -5
- package/lib/models/Item.d.ts +0 -20
- package/lib/models/Item.js +0 -5
- package/lib/models/ItemDTO.d.ts +0 -74
- package/lib/models/ItemDTO.js +0 -186
- package/lib/models/ItemType.d.ts +0 -2
- package/lib/models/ItemType.js +0 -5
- package/lib/models/Lesson.d.ts +0 -5
- package/lib/models/Lesson.js +0 -5
- package/lib/models/LexicalDTO.d.ts +0 -155
- package/lib/models/LexicalDTO.js +0 -157
- package/lib/models/Library.d.ts +0 -10
- package/lib/models/Library.js +0 -5
- package/lib/models/Notebook.d.ts +0 -11
- package/lib/models/Notebook.js +0 -5
- package/lib/models/NotebookDTO.d.ts +0 -96
- package/lib/models/NotebookDTO.js +0 -153
- package/lib/models/Page.d.ts +0 -41
- package/lib/models/Page.js +0 -25
- package/lib/models/PageTag.d.ts +0 -19
- package/lib/models/PageTag.js +0 -94
- package/lib/models/ProjectDTO.d.ts +0 -89
- package/lib/models/ProjectDTO.js +0 -131
- package/lib/models/Runtime.d.ts +0 -123
- package/lib/models/Runtime.js +0 -18
- package/lib/models/RuntimeDTO.d.ts +0 -191
- package/lib/models/RuntimeDTO.js +0 -204
- package/lib/models/Space.d.ts +0 -35
- package/lib/models/Space.js +0 -66
- package/lib/models/SpaceDTO.d.ts +0 -334
- package/lib/models/SpaceDTO.js +0 -244
- package/lib/models/SpaceItem.d.ts +0 -10
- package/lib/models/SpaceItem.js +0 -5
- package/lib/models/SpaceMember.d.ts +0 -6
- package/lib/models/SpaceMember.js +0 -5
- package/lib/models/StudentItem.d.ts +0 -21
- package/lib/models/StudentItem.js +0 -5
- package/lib/services/DatalayerServiceManager.d.ts +0 -22
- package/lib/services/DatalayerServiceManager.js +0 -69
- package/lib/services/index.d.ts +0 -4
- package/lib/services/index.js +0 -7
- package/lib/services/reconnectToRuntime.d.ts +0 -32
- package/lib/services/reconnectToRuntime.js +0 -59
- package/lib/state/substates/CellState.d.ts +0 -12
- package/lib/state/substates/CellState.js +0 -22
- package/lib/state/substates/DocumentState.d.ts +0 -10
- package/lib/state/substates/DocumentState.js +0 -14
- package/lib/state/substates/GradeState.d.ts +0 -10
- package/lib/state/substates/GradeState.js +0 -14
- package/lib/state/substates/JupyterLabState.d.ts +0 -16
- package/lib/state/substates/JupyterLabState.js +0 -17
- package/lib/state/substates/NbformatState.d.ts +0 -13
- package/lib/state/substates/NbformatState.js +0 -16
- package/lib/state/substates/RuntimesState.d.ts +0 -79
- package/lib/state/substates/RuntimesState.js +0 -180
- package/lib/state/substates/SpaceState.d.ts +0 -11
- package/lib/state/substates/SpaceState.js +0 -16
- package/lib/stateful/index.d.ts +0 -2
- package/lib/stateful/index.js +0 -6
- package/lib/stateful/jupyter/exec/Python.d.ts +0 -5
- package/lib/stateful/jupyter/exec/Python.js +0 -100
- package/lib/stateful/jupyter/exec/Snippets.d.ts +0 -105
- package/lib/stateful/jupyter/exec/Snippets.js +0 -101
- package/lib/stateful/jupyter/exec/index.d.ts +0 -2
- package/lib/stateful/jupyter/exec/index.js +0 -6
- package/lib/stateful/jupyter/index.d.ts +0 -2
- package/lib/stateful/jupyter/index.js +0 -6
- package/lib/stateful/jupyter/kernelsHandler.d.ts +0 -8
- package/lib/stateful/jupyter/kernelsHandler.js +0 -39
- package/lib/stateful/runtimes/actions.d.ts +0 -102
- package/lib/stateful/runtimes/actions.js +0 -249
- package/lib/stateful/runtimes/apis.d.ts +0 -273
- package/lib/stateful/runtimes/apis.js +0 -5
- package/lib/stateful/runtimes/index.d.ts +0 -5
- package/lib/stateful/runtimes/index.js +0 -9
- package/lib/stateful/runtimes/settings.d.ts +0 -15
- package/lib/stateful/runtimes/settings.js +0 -31
- package/lib/stateful/runtimes/snapshots.d.ts +0 -25
- package/lib/stateful/runtimes/snapshots.js +0 -150
- package/lib/stateful/runtimes/utils.d.ts +0 -7
- package/lib/stateful/runtimes/utils.js +0 -14
- package/lib/utils/Cells.d.ts +0 -2
- package/lib/utils/Cells.js +0 -28
- package/lib/views/iam-tokens/IAMTokenEdit.d.ts +0 -6
- package/lib/views/iam-tokens/IAMTokenNew.d.ts +0 -8
- package/lib/views/iam-tokens/IAMTokenNew.js +0 -118
- package/lib/views/iam-tokens/IAMTokens.d.ts +0 -12
- package/lib/views/iam-tokens/IAMTokens.js +0 -87
- package/lib/views/iam-tokens/Tokens.d.ts +0 -2
- package/lib/views/iam-tokens/Tokens.js +0 -85
- package/lib/views/iam-tokens/index.d.ts +0 -3
- package/lib/views/iam-tokens/index.js +0 -7
- /package/lib/{mocks/jupyter/index.d.ts → cli-login.d.ts} +0 -0
- /package/lib/utils/{logger.d.ts → Logger.d.ts} +0 -0
- /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/
|
|
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 {
|
|
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 =
|
|
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 [
|
|
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
|
-
|
|
136
|
+
setApiKeyValue('');
|
|
44
137
|
}, []);
|
|
45
138
|
const handleApiKeyAuthenticate = useCallback(() => {
|
|
46
|
-
if (!
|
|
139
|
+
if (!apiKeyValue.trim() || !onApiKeySignIn)
|
|
47
140
|
return;
|
|
48
|
-
onApiKeySignIn(
|
|
141
|
+
onApiKeySignIn(apiKeyValue.trim());
|
|
49
142
|
closeApiKeyDialog();
|
|
50
|
-
}, [
|
|
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: [
|
|
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:
|
|
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: !
|
|
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.
|
|
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": "
|
|
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
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';
|