@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.
- package/README.md +11 -134
- package/lib/api/index.d.ts +0 -9
- package/lib/api/index.js +0 -9
- package/lib/cli-login.js +167 -0
- package/lib/client/auth/AuthenticationManager.d.ts +3 -3
- package/lib/client/auth/AuthenticationManager.js +13 -13
- package/lib/client/auth/strategies.d.ts +2 -2
- package/lib/client/auth/strategies.js +6 -6
- package/lib/client/base.d.ts +9 -12
- package/lib/client/base.js +17 -19
- package/lib/client/index.d.ts +10 -98
- package/lib/client/index.js +12 -21
- package/lib/client/mixins/IAMMixin.js +26 -26
- package/lib/components/auth/Login.js +2 -2
- 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/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.js +4 -0
- 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 +0 -1
- package/lib/components/index.js +0 -1
- 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 +79 -42
- 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 +194 -147
- 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.js +4 -0
- package/lib/components/time/index.js +4 -0
- package/lib/components/timeline/index.js +4 -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/config/Configuration.d.ts +13 -13
- package/lib/config/Configuration.js +5 -5
- 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 +64 -35
- package/lib/hooks/useCache.js +661 -306
- package/lib/hooks/useDatalayer.js +3 -1
- package/lib/hooks/useIAM.js +2 -4
- 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/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/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/UserSettings.d.ts +1 -1
- package/lib/models/UserSettings.js +1 -1
- package/lib/models/index.d.ts +0 -30
- package/lib/models/index.js +0 -30
- package/lib/otel/client/OtelClient.d.ts +2 -2
- package/lib/otel/client/OtelClient.js +2 -2
- package/lib/otel/hooks/index.js +5 -5
- package/lib/otel/types.d.ts +1 -1
- package/lib/otel/views/OtelLive.js +1 -1
- 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 +13 -13
- package/lib/state/substates/IAMState.d.ts +1 -1
- package/lib/state/substates/IAMState.js +14 -14
- package/lib/state/substates/LayoutState.d.ts +12 -1
- package/lib/state/substates/SurveysState.d.ts +1 -1
- package/lib/state/substates/SurveysState.js +10 -10
- package/lib/state/substates/index.d.ts +0 -7
- package/lib/state/substates/index.js +0 -7
- package/lib/utils/Handles.js +3 -1
- package/lib/utils/index.d.ts +0 -1
- package/lib/utils/index.js +0 -1
- package/lib/views/api-keys/APIKeys.js +12 -3
- 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 +111 -13
- 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/scheduler/index.d.ts +0 -6
- package/lib/api/scheduler/index.js +0 -10
- package/lib/api/scheduler/schedules.d.ts +0 -85
- package/lib/api/scheduler/schedules.js +0 -78
- 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/scheduler/ScheduleMenu.d.ts +0 -54
- package/lib/components/scheduler/ScheduleMenu.js +0 -154
- package/lib/components/scheduler/index.d.ts +0 -1
- package/lib/components/scheduler/index.js +0 -5
- 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/jupyter/index.js +0 -5
- 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/{mocks/jupyter/index.d.ts → cli-login.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/sponsors/datalayer)
|
|
4
4
|
|
|
5
|
-
# ☰
|
|
5
|
+
# ☰ Datalayer Core
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<strong>Python and Typescript libraries for Datalayer</strong>
|
|
@@ -25,12 +25,10 @@ This package serves as the base foundation used by many other Datalayer packages
|
|
|
25
25
|
## Key Features
|
|
26
26
|
|
|
27
27
|
- **🔐 Simple Authentication**: Easy token-based authentication with environment variable support
|
|
28
|
-
- **⚡ Runtime Management**: Create and manage scalable compute runtimes (CPU/GPU) for code execution
|
|
29
|
-
- **📸 Snapshot Management**: Create and manage compute snapshots of your runtimes for reproducible environments
|
|
30
28
|
- **🔒 Secrets Management**: Securely handle sensitive data and credentials in your workflows
|
|
31
29
|
- **🐍 Python Client**: Programmatic access to Datalayer platform with context managers and clean resource management
|
|
32
30
|
- **🌐 TypeScript/React Client**: React components and services for building Jupyter-based applications
|
|
33
|
-
- **💻 Command Line Interface**: CLI tools for
|
|
31
|
+
- **💻 Command Line Interface**: CLI tools for account and platform operations
|
|
34
32
|
- **🔧 Base Classes**: Core application classes and configuration inherited by other Datalayer projects
|
|
35
33
|
- **📓 Jupyter Integration**: ServiceManager and collaboration providers for notebook experiences
|
|
36
34
|
- **🧭 Universal Navigation**: Smart navigation hooks that auto-detect and work with React Router, Next.js, or native browser
|
|
@@ -85,148 +83,27 @@ from datalayer_core import DatalayerClient
|
|
|
85
83
|
client = DatalayerClient()
|
|
86
84
|
|
|
87
85
|
# Or pass token directly
|
|
88
|
-
client = DatalayerClient(
|
|
86
|
+
client = DatalayerClient(api_key="your-api-key-here")
|
|
89
87
|
|
|
90
88
|
if client.authenticate():
|
|
91
89
|
print("Successfully authenticated!")
|
|
92
90
|
```
|
|
93
91
|
|
|
94
|
-
### 2.
|
|
92
|
+
### 2. Runtime, Snapshots, and Evals
|
|
95
93
|
|
|
96
|
-
|
|
94
|
+
Runtime execution, snapshot workflows, and evals CLI are now documented and maintained in:
|
|
97
95
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
client = DatalayerClient()
|
|
102
|
-
|
|
103
|
-
# Execute code in a managed runtime
|
|
104
|
-
with client.create_runtime() as runtime:
|
|
105
|
-
response = runtime.execute("print('Hello from Datalayer!')")
|
|
106
|
-
print(response.stdout)
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### 3. Using the CLI
|
|
110
|
-
|
|
111
|
-
The CLI provides command-line access to Datalayer platform features:
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
# List available runtimes
|
|
115
|
-
datalayer runtime list
|
|
116
|
-
|
|
117
|
-
# Create a new runtime
|
|
118
|
-
datalayer runtime create ai-env --given-name my-runtime-123
|
|
119
|
-
|
|
120
|
-
# Execute a script in a runtime
|
|
121
|
-
datalayer runtime exec my-script.py --agent <agent-id>
|
|
122
|
-
|
|
123
|
-
# Create a snapshot from a runtime but do not terminate the runtime
|
|
124
|
-
datalayer snapshots create <pod-name> my-snapshot 'AI work!' False
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### 4. Subscription and Credits CLI
|
|
128
|
-
|
|
129
|
-
Use these commands to inspect billing and manage credits distribution.
|
|
130
|
-
|
|
131
|
-
```bash
|
|
132
|
-
# End-user billing view
|
|
133
|
-
datalayer subscriptions show
|
|
134
|
-
datalayer subscriptions available
|
|
135
|
-
datalayer subscriptions move
|
|
136
|
-
datalayer subscriptions topups
|
|
137
|
-
datalayer subscriptions dry-run
|
|
138
|
-
|
|
139
|
-
# Organization and team credits visibility
|
|
140
|
-
datalayer usage org-overview --organization-uid <org_uid>
|
|
141
|
-
datalayer usage team-overview --team-uid <team_uid>
|
|
142
|
-
|
|
143
|
-
# Monitoring-driven credit management
|
|
144
|
-
datalayer usage org-monitor --organization-uid <org_uid> --window-hours 24
|
|
145
|
-
datalayer usage team-monitor --team-uid <team_uid> --window-hours 24
|
|
146
|
-
|
|
147
|
-
# Credits transfer operations (owners/admins)
|
|
148
|
-
datalayer usage org-allocate-team --organization-uid <org_uid> --team-uid <team_uid> --amount 50
|
|
149
|
-
datalayer usage org-revoke-team --organization-uid <org_uid> --team-uid <team_uid> --amount 20
|
|
150
|
-
datalayer usage team-allocate-member --team-uid <team_uid> --member-uid <member_uid> --amount 15
|
|
151
|
-
datalayer usage team-revoke-member --team-uid <team_uid> --member-uid <member_uid> --amount 5
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### 5. Evals CLI (Multi-Agentspec)
|
|
155
|
-
|
|
156
|
-
Use comma-separated agentspec ids to create one experiment per agentspec variant:
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
# Creates one experiment per agentspec in the list
|
|
160
|
-
datalayer evals experiments create my-exp \
|
|
161
|
-
--evalset-id <evalset_id> \
|
|
162
|
-
--agent-spec-ids example-evals,example-evals-nocodemode,example-custom
|
|
163
|
-
```
|
|
96
|
+
- [agent-runtimes README](https://github.com/datalayer/agent-runtimes/blob/main/README.md)
|
|
97
|
+
- [agent-runtimes CLI docs](https://agent-runtimes.datalayer.tech/cli)
|
|
164
98
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
datalayer evals report <evalset_id> --run-limit 50 --export
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
How to interpret grouped comparisons in the report:
|
|
172
|
-
|
|
173
|
-
- `Within-Agentspec Pairwise Latest-Pass Deltas`: compares experiments using the same agentspec id.
|
|
174
|
-
- `Cross-Agentspec Pairwise Latest-Pass Deltas`: compares experiments using different agentspec ids.
|
|
175
|
-
- Pairwise sections compute all combinations for the selected experiments, not just two agentspecs.
|
|
99
|
+
Use `agent-runtimes` for runtime workloads (`RuntimeClient`, `@datalayer`, snapshots, and evals), and use `datalayer-core` for account/platform operations (authentication, secrets, API keys, usage, profile).
|
|
176
100
|
|
|
177
101
|
## Examples
|
|
178
102
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
For comprehensive Python usage examples, see the [`examples/`](https://github.com/datalayer/core/tree/main/examples) directory which includes:
|
|
182
|
-
|
|
183
|
-
- **FastAPI + scikit-learn**: Web application with ML models
|
|
184
|
-
- **Streamlit + scikit-learn**: Interactive data science apps
|
|
185
|
-
- **PyTorch GPU workloads**: High-performance computing examples
|
|
186
|
-
- **Decorator patterns**: Remote function execution with `@datalayer`
|
|
187
|
-
- **And more**: Complete examples with documentation and setup instructions
|
|
188
|
-
|
|
189
|
-
### TypeScript/React Examples
|
|
190
|
-
|
|
191
|
-
Run the interactive examples locally:
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
# Install dependencies
|
|
195
|
-
npm install
|
|
196
|
-
|
|
197
|
-
# Set your Datalayer API token in .env
|
|
198
|
-
echo "VITE_DATALAYER_API_KEY=your-token-here" > .env
|
|
199
|
-
|
|
200
|
-
# Start the examples server
|
|
201
|
-
npm run examples
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
Available at http://localhost:3000/:
|
|
205
|
-
|
|
206
|
-
- **DatalayerNotebookExample**: Full integration with Datalayer services and collaboration
|
|
207
|
-
- **NotebookExample**: Basic Jupyter notebook in React
|
|
208
|
-
- **CellExample**: Individual code cell execution
|
|
209
|
-
- **ReactRouterAdvancedExample**: Comprehensive navigation demo with React Router integration
|
|
210
|
-
- **ReactRouterNavigationExample**: Basic navigation with route parameters
|
|
211
|
-
- **NativeNavigationExample**: Browser-native navigation fallback
|
|
212
|
-
|
|
213
|
-
### Next.js Application Example
|
|
214
|
-
|
|
215
|
-
A complete Next.js application demonstrating platform integration:
|
|
216
|
-
|
|
217
|
-
```bash
|
|
218
|
-
cd examples/nextjj
|
|
219
|
-
npm install
|
|
220
|
-
npm run dev
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
Features:
|
|
103
|
+
Examples have moved to Agent Runtimes:
|
|
224
104
|
|
|
225
|
-
-
|
|
226
|
-
-
|
|
227
|
-
- Select compute environments for execution
|
|
228
|
-
- Interactive notebook viewer with real-time outputs
|
|
229
|
-
- Clean, responsive UI with GitHub Primer components
|
|
105
|
+
- [Agent Runtimes examples README](https://github.com/datalayer/agent-runtimes/blob/main/examples/README.md)
|
|
106
|
+
- [Agent Runtimes examples directory](https://github.com/datalayer/agent-runtimes/tree/main/examples)
|
|
230
107
|
|
|
231
108
|
## Platform Integration
|
|
232
109
|
|
package/lib/api/index.d.ts
CHANGED
|
@@ -10,13 +10,4 @@ export { requestDatalayerAPI, RunResponseError, NetworkError, } from './Datalaye
|
|
|
10
10
|
export type { IRequestDatalayerAPIOptions } from './DatalayerApi';
|
|
11
11
|
export * as iam from './iam';
|
|
12
12
|
export * as otel from './otel';
|
|
13
|
-
export * as runtimes from './runtimes';
|
|
14
|
-
export * as scheduler from './scheduler';
|
|
15
|
-
export * as spacer from './spacer';
|
|
16
|
-
/**
|
|
17
|
-
* @deprecated Please import directly from '@datalayer/core/stateful' instead.
|
|
18
|
-
* This module provides backward compatibility for the moved apiv1 modules.
|
|
19
|
-
*/
|
|
20
|
-
export * from '../stateful/jupyter';
|
|
21
|
-
export * from '../stateful/runtimes';
|
|
22
13
|
export * from '../api/DatalayerApi';
|
package/lib/api/index.js
CHANGED
|
@@ -15,13 +15,4 @@ export { requestDatalayerAPI, RunResponseError, NetworkError, } from './Datalaye
|
|
|
15
15
|
// Domain-organized API exports
|
|
16
16
|
export * as iam from './iam/index.js';
|
|
17
17
|
export * as otel from './otel/index.js';
|
|
18
|
-
export * as runtimes from './runtimes/index.js';
|
|
19
|
-
export * as scheduler from './scheduler/index.js';
|
|
20
|
-
export * as spacer from './spacer/index.js';
|
|
21
|
-
/**
|
|
22
|
-
* @deprecated Please import directly from '@datalayer/core/stateful' instead.
|
|
23
|
-
* This module provides backward compatibility for the moved apiv1 modules.
|
|
24
|
-
*/
|
|
25
|
-
export * from '../stateful/jupyter/index.js';
|
|
26
|
-
export * from '../stateful/runtimes/index.js';
|
|
27
18
|
export * from '../api/DatalayerApi.js';
|
package/lib/cli-login.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } 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 { useCallback, useEffect, useState } from 'react';
|
|
7
|
+
import { createRoot } from 'react-dom/client';
|
|
8
|
+
import { Box, Button, Spinner, Text } from '@primer/react';
|
|
9
|
+
import { ShieldLockIcon } from '@primer/octicons-react';
|
|
10
|
+
import { DatalayerThemeProvider, themeConfigs, createThemeStore, } from '@datalayer/primer-addons';
|
|
11
|
+
import { SvgLinesLogo, SvgUsecasesHero } from '@datalayer/design';
|
|
12
|
+
import { AppearanceControlsWithStore } from '@datalayer/primer-addons/lib/components/appearance';
|
|
13
|
+
import { ConfettiSuccess } from './components/confetti/index.js';
|
|
14
|
+
import { formatFriendlyHandle } from './utils/Handles.js';
|
|
15
|
+
import { SignInSimple } from './views/iam/SignInSimple.js';
|
|
16
|
+
const DATALAYER_IAM_USER_KEY = '@datalayer/iam:user';
|
|
17
|
+
const DATALAYER_IAM_TOKEN_KEY = '@datalayer/iam:token';
|
|
18
|
+
const useCliThemeStore = createThemeStore('datalayer-core-cli-theme-v2', {
|
|
19
|
+
colorMode: 'dark',
|
|
20
|
+
theme: 'matrix',
|
|
21
|
+
});
|
|
22
|
+
const readStoredAuth = () => {
|
|
23
|
+
const token = window.localStorage.getItem(DATALAYER_IAM_TOKEN_KEY) || '';
|
|
24
|
+
const rawUser = window.localStorage.getItem(DATALAYER_IAM_USER_KEY) || '';
|
|
25
|
+
if (!token || !rawUser) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const user = JSON.parse(rawUser);
|
|
30
|
+
const userHandle = String(user?.handle || user?.handle_s || '').trim();
|
|
31
|
+
if (!userHandle) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return { token, userHandle };
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
function SignInCLIApp() {
|
|
41
|
+
const [state, setState] = useState('checking');
|
|
42
|
+
const [message, setMessage] = useState('');
|
|
43
|
+
const [closeHelp, setCloseHelp] = useState('');
|
|
44
|
+
const { colorMode, theme: themeVariant } = useCliThemeStore();
|
|
45
|
+
const cfg = themeConfigs[themeVariant];
|
|
46
|
+
const handleCloseWindow = useCallback(() => {
|
|
47
|
+
setCloseHelp('');
|
|
48
|
+
// Browsers allow window.close() only for windows/tabs opened by script.
|
|
49
|
+
window.close();
|
|
50
|
+
setTimeout(() => {
|
|
51
|
+
if (!document.hidden) {
|
|
52
|
+
try {
|
|
53
|
+
// Some browsers require a same-tab self-target before closing.
|
|
54
|
+
window.open('', '_self');
|
|
55
|
+
window.close();
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Ignore and show manual-close help below.
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!document.hidden) {
|
|
62
|
+
setCloseHelp('Authentication is complete. Your browser blocked auto-close for this tab, so you can safely close it manually.');
|
|
63
|
+
}
|
|
64
|
+
}, 150);
|
|
65
|
+
}, []);
|
|
66
|
+
const finalizeCliAuthentication = useCallback(async () => {
|
|
67
|
+
const auth = readStoredAuth();
|
|
68
|
+
if (!auth) {
|
|
69
|
+
setState('signin');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const response = await fetch('/', {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: { 'Content-Type': 'application/json' },
|
|
75
|
+
body: JSON.stringify({
|
|
76
|
+
user_handle: auth.userHandle,
|
|
77
|
+
token: auth.token,
|
|
78
|
+
}),
|
|
79
|
+
});
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
const text = await response.text();
|
|
82
|
+
throw new Error(text || 'Failed to finalize CLI authentication.');
|
|
83
|
+
}
|
|
84
|
+
setMessage(`Successfully logged in as ${formatFriendlyHandle(auth.userHandle)}.`);
|
|
85
|
+
setState('success');
|
|
86
|
+
}, []);
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
finalizeCliAuthentication().catch((error) => {
|
|
89
|
+
setMessage(error instanceof Error ? error.message : 'Authentication failed.');
|
|
90
|
+
setState('signin');
|
|
91
|
+
});
|
|
92
|
+
}, [finalizeCliAuthentication]);
|
|
93
|
+
const renderLayout = (content) => (_jsx(DatalayerThemeProvider, { colorMode: colorMode, theme: cfg.primerTheme, themeStyles: cfg.themeStyles, children: _jsxs(Box, { sx: {
|
|
94
|
+
minHeight: '100vh',
|
|
95
|
+
bg: 'canvas.default',
|
|
96
|
+
color: 'fg.default',
|
|
97
|
+
position: 'relative',
|
|
98
|
+
}, children: [_jsx(Box, { sx: {
|
|
99
|
+
position: 'fixed',
|
|
100
|
+
top: 0,
|
|
101
|
+
right: 0,
|
|
102
|
+
zIndex: 20,
|
|
103
|
+
p: 3,
|
|
104
|
+
display: 'flex',
|
|
105
|
+
justifyContent: 'flex-end',
|
|
106
|
+
}, children: _jsx(AppearanceControlsWithStore, { useStore: useCliThemeStore }) }), content] }) }));
|
|
107
|
+
if (state === 'checking') {
|
|
108
|
+
return renderLayout(_jsx(Box, { sx: {
|
|
109
|
+
display: 'flex',
|
|
110
|
+
alignItems: 'center',
|
|
111
|
+
justifyContent: 'center',
|
|
112
|
+
minHeight: '100vh',
|
|
113
|
+
}, children: _jsx(Spinner, {}) }));
|
|
114
|
+
}
|
|
115
|
+
if (state === 'success') {
|
|
116
|
+
return renderLayout(_jsxs(Box, { sx: {
|
|
117
|
+
minHeight: '100vh',
|
|
118
|
+
display: 'flex',
|
|
119
|
+
alignItems: 'center',
|
|
120
|
+
justifyContent: 'center',
|
|
121
|
+
px: 3,
|
|
122
|
+
position: 'relative',
|
|
123
|
+
overflow: 'hidden',
|
|
124
|
+
}, children: [_jsx(Box, { sx: {
|
|
125
|
+
position: 'absolute',
|
|
126
|
+
inset: 0,
|
|
127
|
+
opacity: 0.45,
|
|
128
|
+
pointerEvents: 'none',
|
|
129
|
+
}, children: _jsx(SvgUsecasesHero, {}) }), _jsx(Box, { sx: {
|
|
130
|
+
position: 'absolute',
|
|
131
|
+
inset: 0,
|
|
132
|
+
pointerEvents: 'none',
|
|
133
|
+
zIndex: 2,
|
|
134
|
+
}, children: _jsx(ConfettiSuccess, {}) }), _jsxs(Box, { sx: {
|
|
135
|
+
position: 'relative',
|
|
136
|
+
zIndex: 3,
|
|
137
|
+
textAlign: 'center',
|
|
138
|
+
maxWidth: 560,
|
|
139
|
+
p: 4,
|
|
140
|
+
borderRadius: 2,
|
|
141
|
+
border: '1px solid',
|
|
142
|
+
borderColor: 'border.default',
|
|
143
|
+
bg: 'canvas.default',
|
|
144
|
+
}, children: [_jsx(Box, { sx: { display: 'flex', justifyContent: 'center', mb: 3 }, children: _jsx(Box, { sx: { width: 210 }, children: _jsx(SvgLinesLogo, { height: 32 }) }) }), _jsx(Text, { as: "h2", sx: { display: 'block', fontSize: 3, fontWeight: 600, mb: 2 }, children: message || 'Successfully logged in.' }), _jsx(Text, { as: "p", sx: { color: 'fg.muted', mb: 3 }, children: "You can close this window." }), closeHelp && (_jsx(Text, { as: "p", sx: { color: 'fg.accent', mb: 3 }, children: closeHelp })), _jsx(Box, { sx: { display: 'flex', justifyContent: 'center' }, children: _jsx(Button, { onClick: handleCloseWindow, children: "Close this window" }) })] })] }));
|
|
145
|
+
}
|
|
146
|
+
return renderLayout(_jsx(SignInSimple, { name: "Datalayer CLI", description: "Sign in to continue in your CLI session.", icon: _jsx(ShieldLockIcon, { size: 24 }), github: true, google: true, linkedin: true, signUp: true, apiKey: false, socialSignInNavigationTarget: null, onSignIn: async (token, handle) => {
|
|
147
|
+
window.localStorage.setItem(DATALAYER_IAM_TOKEN_KEY, token);
|
|
148
|
+
window.localStorage.setItem(DATALAYER_IAM_USER_KEY, JSON.stringify({
|
|
149
|
+
handle,
|
|
150
|
+
displayName: handle,
|
|
151
|
+
uid: '',
|
|
152
|
+
firstName: '',
|
|
153
|
+
lastName: '',
|
|
154
|
+
email: '',
|
|
155
|
+
}));
|
|
156
|
+
try {
|
|
157
|
+
await finalizeCliAuthentication();
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
setMessage(error instanceof Error ? error.message : 'Authentication failed.');
|
|
161
|
+
}
|
|
162
|
+
} }));
|
|
163
|
+
}
|
|
164
|
+
const rootElement = document.getElementById('root');
|
|
165
|
+
if (rootElement) {
|
|
166
|
+
createRoot(rootElement).render(_jsx(SignInCLIApp, {}));
|
|
167
|
+
}
|
|
@@ -10,15 +10,15 @@ import { UserDTO } from '../../models/UserDTO';
|
|
|
10
10
|
export declare class AuthenticationManager {
|
|
11
11
|
private strategies;
|
|
12
12
|
private storage;
|
|
13
|
-
private
|
|
13
|
+
private iamUrl;
|
|
14
14
|
private currentUser?;
|
|
15
15
|
private currentToken?;
|
|
16
16
|
/**
|
|
17
17
|
* Create an AuthenticationManager instance
|
|
18
|
-
* @param
|
|
18
|
+
* @param iamUrl - IAM service URL (e.g., "https://prod1.datalayer.run")
|
|
19
19
|
* @param storage - Token storage backend (optional, defaults to auto-detected)
|
|
20
20
|
*/
|
|
21
|
-
constructor(
|
|
21
|
+
constructor(iamUrl: string, storage?: TokenStorage);
|
|
22
22
|
/**
|
|
23
23
|
* Login using various authentication methods
|
|
24
24
|
* Automatically selects the appropriate strategy based on options
|
|
@@ -15,25 +15,25 @@ import { NodeStorage, BrowserStorage } from './storage.js';
|
|
|
15
15
|
export class AuthenticationManager {
|
|
16
16
|
strategies;
|
|
17
17
|
storage;
|
|
18
|
-
|
|
18
|
+
iamUrl;
|
|
19
19
|
currentUser;
|
|
20
20
|
currentToken;
|
|
21
21
|
/**
|
|
22
22
|
* Create an AuthenticationManager instance
|
|
23
|
-
* @param
|
|
23
|
+
* @param iamUrl - IAM service URL (e.g., "https://prod1.datalayer.run")
|
|
24
24
|
* @param storage - Token storage backend (optional, defaults to auto-detected)
|
|
25
25
|
*/
|
|
26
|
-
constructor(
|
|
27
|
-
this.
|
|
28
|
-
// Extract
|
|
29
|
-
const
|
|
30
|
-
// CRITICAL: Pass
|
|
26
|
+
constructor(iamUrl, storage) {
|
|
27
|
+
this.iamUrl = iamUrl;
|
|
28
|
+
// Extract datalayer_url (remove /api/iam/v1 if present)
|
|
29
|
+
const datalayerUrl = iamUrl.replace('/api/iam/v1', '');
|
|
30
|
+
// CRITICAL: Pass datalayerUrl to storage for keyring compatibility
|
|
31
31
|
if (!storage) {
|
|
32
32
|
if (typeof window !== 'undefined') {
|
|
33
33
|
this.storage = new BrowserStorage();
|
|
34
34
|
}
|
|
35
35
|
else {
|
|
36
|
-
this.storage = new NodeStorage(
|
|
36
|
+
this.storage = new NodeStorage(datalayerUrl); // Pass datalayerUrl as serviceUrl
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
else {
|
|
@@ -41,10 +41,10 @@ export class AuthenticationManager {
|
|
|
41
41
|
}
|
|
42
42
|
// Initialize strategies
|
|
43
43
|
this.strategies = [
|
|
44
|
-
new TokenAuthStrategy(this.
|
|
45
|
-
new CredentialsAuthStrategy(this.
|
|
46
|
-
new StorageAuthStrategy(this.
|
|
47
|
-
new BrowserOAuthStrategy(this.
|
|
44
|
+
new TokenAuthStrategy(this.iamUrl, this.storage),
|
|
45
|
+
new CredentialsAuthStrategy(this.iamUrl, this.storage),
|
|
46
|
+
new StorageAuthStrategy(this.iamUrl, this.storage),
|
|
47
|
+
new BrowserOAuthStrategy(this.iamUrl, this.storage),
|
|
48
48
|
];
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
@@ -98,7 +98,7 @@ export class AuthenticationManager {
|
|
|
98
98
|
async logout() {
|
|
99
99
|
if (this.currentToken) {
|
|
100
100
|
try {
|
|
101
|
-
await authentication.logout(this.currentToken, this.
|
|
101
|
+
await authentication.logout(this.currentToken, this.iamUrl);
|
|
102
102
|
}
|
|
103
103
|
catch (error) {
|
|
104
104
|
console.error('Error during logout API call:', error);
|
|
@@ -4,9 +4,9 @@ import { UserDTO } from '../../models/UserDTO';
|
|
|
4
4
|
* Base authentication strategy with common functionality
|
|
5
5
|
*/
|
|
6
6
|
declare abstract class BaseAuthStrategy implements AuthStrategy {
|
|
7
|
-
protected
|
|
7
|
+
protected iamUrl: string;
|
|
8
8
|
protected storage?: TokenStorage | undefined;
|
|
9
|
-
constructor(
|
|
9
|
+
constructor(iamUrl: string, storage?: TokenStorage | undefined);
|
|
10
10
|
abstract authenticate(options: AuthOptions): Promise<AuthResult>;
|
|
11
11
|
abstract canHandle(options: AuthOptions): boolean;
|
|
12
12
|
/**
|
|
@@ -17,17 +17,17 @@ import { UserDTO } from '../../models/UserDTO.js';
|
|
|
17
17
|
* Base authentication strategy with common functionality
|
|
18
18
|
*/
|
|
19
19
|
class BaseAuthStrategy {
|
|
20
|
-
|
|
20
|
+
iamUrl;
|
|
21
21
|
storage;
|
|
22
|
-
constructor(
|
|
23
|
-
this.
|
|
22
|
+
constructor(iamUrl, storage) {
|
|
23
|
+
this.iamUrl = iamUrl;
|
|
24
24
|
this.storage = storage;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Validate a token by calling whoami
|
|
28
28
|
*/
|
|
29
29
|
async validateToken(token) {
|
|
30
|
-
const response = await profile.whoami(token, this.
|
|
30
|
+
const response = await profile.whoami(token, this.iamUrl);
|
|
31
31
|
if (!response || !response.profile) {
|
|
32
32
|
throw new Error('Invalid response from profile API');
|
|
33
33
|
}
|
|
@@ -82,7 +82,7 @@ export class CredentialsAuthStrategy extends BaseAuthStrategy {
|
|
|
82
82
|
throw new Error('Handle and password are required for credentials authentication');
|
|
83
83
|
}
|
|
84
84
|
// Call the login API
|
|
85
|
-
const response = await authentication.login({ handle: options.handle, password: options.password }, this.
|
|
85
|
+
const response = await authentication.login({ handle: options.handle, password: options.password }, this.iamUrl);
|
|
86
86
|
if (!response || !response.success || !response.token) {
|
|
87
87
|
throw new Error(response?.message || 'Login failed');
|
|
88
88
|
}
|
|
@@ -158,7 +158,7 @@ export class BrowserOAuthStrategy extends BaseAuthStrategy {
|
|
|
158
158
|
const callbackUri = options.callbackUri || `${window.location.origin}/auth/callback`;
|
|
159
159
|
try {
|
|
160
160
|
// Step 1: Get OAuth authorization URL
|
|
161
|
-
const authzResponse = await getOAuth2AuthzUrl(provider, callbackUri, this.
|
|
161
|
+
const authzResponse = await getOAuth2AuthzUrl(provider, callbackUri, this.iamUrl, options.nonce);
|
|
162
162
|
// Step 2: Open OAuth URL in popup or redirect
|
|
163
163
|
if (options.usePopup !== false) {
|
|
164
164
|
// Use popup window
|
package/lib/client/base.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { EnvironmentDTO } from '../models/EnvironmentDTO';
|
|
2
1
|
import { AuthenticationManager } from './auth';
|
|
3
2
|
import type { TokenStorage } from './auth/types';
|
|
4
3
|
/** Handlers for Client method lifecycle events. */
|
|
@@ -15,11 +14,11 @@ export interface DatalayerClientConfig {
|
|
|
15
14
|
/** Authentication token for API requests */
|
|
16
15
|
token?: string;
|
|
17
16
|
/** URL for the IAM service */
|
|
18
|
-
|
|
17
|
+
iamUrl?: string;
|
|
19
18
|
/** URL for the Runtimes service */
|
|
20
|
-
|
|
19
|
+
runtimesUrl?: string;
|
|
21
20
|
/** URL for the Spacer service */
|
|
22
|
-
|
|
21
|
+
spacerUrl?: string;
|
|
23
22
|
/** Custom token storage backend (optional, defaults to auto-detected) */
|
|
24
23
|
storage?: TokenStorage;
|
|
25
24
|
/** Handlers for intercepting Client method calls */
|
|
@@ -28,15 +27,13 @@ export interface DatalayerClientConfig {
|
|
|
28
27
|
/** Base Client class providing core configuration and token management. */
|
|
29
28
|
export declare class DatalayerClientBase {
|
|
30
29
|
/** URL for IAM service */
|
|
31
|
-
readonly
|
|
30
|
+
readonly iamUrl: string;
|
|
32
31
|
/** URL for Runtimes service */
|
|
33
|
-
readonly
|
|
32
|
+
readonly runtimesUrl: string;
|
|
34
33
|
/** URL for Spacer service */
|
|
35
|
-
readonly
|
|
34
|
+
readonly spacerUrl: string;
|
|
36
35
|
/** Authentication token */
|
|
37
36
|
token?: string;
|
|
38
|
-
/** Environments */
|
|
39
|
-
readonly environments: EnvironmentDTO[];
|
|
40
37
|
/** Method lifecycle handlers */
|
|
41
38
|
readonly handlers?: ClientHandlers;
|
|
42
39
|
/** Authentication manager */
|
|
@@ -52,11 +49,11 @@ export declare class DatalayerClientBase {
|
|
|
52
49
|
*/
|
|
53
50
|
getConfig(): DatalayerClientConfig;
|
|
54
51
|
/** Get the IAM service URL. */
|
|
55
|
-
|
|
52
|
+
getIamUrl(): string;
|
|
56
53
|
/** Get the Runtimes service URL. */
|
|
57
|
-
|
|
54
|
+
getRuntimesUrl(): string;
|
|
58
55
|
/** Get the Spacer service URL. */
|
|
59
|
-
|
|
56
|
+
getSpacerUrl(): string;
|
|
60
57
|
/** Get the current authentication token. */
|
|
61
58
|
getToken(): string | undefined;
|
|
62
59
|
/**
|
package/lib/client/base.js
CHANGED
|
@@ -11,15 +11,13 @@ import { AuthenticationManager } from './auth/index.js';
|
|
|
11
11
|
/** Base Client class providing core configuration and token management. */
|
|
12
12
|
export class DatalayerClientBase {
|
|
13
13
|
/** URL for IAM service */
|
|
14
|
-
|
|
14
|
+
iamUrl;
|
|
15
15
|
/** URL for Runtimes service */
|
|
16
|
-
|
|
16
|
+
runtimesUrl;
|
|
17
17
|
/** URL for Spacer service */
|
|
18
|
-
|
|
18
|
+
spacerUrl;
|
|
19
19
|
/** Authentication token */
|
|
20
20
|
token;
|
|
21
|
-
/** Environments */
|
|
22
|
-
environments = [];
|
|
23
21
|
/** Method lifecycle handlers */
|
|
24
22
|
handlers;
|
|
25
23
|
/** Authentication manager */
|
|
@@ -29,14 +27,14 @@ export class DatalayerClientBase {
|
|
|
29
27
|
* @param config - Client configuration options
|
|
30
28
|
*/
|
|
31
29
|
constructor(config) {
|
|
32
|
-
this.
|
|
33
|
-
this.
|
|
34
|
-
config.
|
|
35
|
-
this.
|
|
30
|
+
this.iamUrl = config.iamUrl || DEFAULT_SERVICE_URLS.IAM;
|
|
31
|
+
this.runtimesUrl =
|
|
32
|
+
config.runtimesUrl || DEFAULT_SERVICE_URLS.RUNTIMES;
|
|
33
|
+
this.spacerUrl = config.spacerUrl || DEFAULT_SERVICE_URLS.SPACER;
|
|
36
34
|
this.token = config.token;
|
|
37
35
|
this.handlers = config.handlers;
|
|
38
36
|
// Initialize authentication manager with custom storage if provided
|
|
39
|
-
this.auth = new AuthenticationManager(this.
|
|
37
|
+
this.auth = new AuthenticationManager(this.iamUrl, config.storage);
|
|
40
38
|
// If a token was provided, store it in the auth manager
|
|
41
39
|
if (this.token) {
|
|
42
40
|
this.auth.storeToken(this.token);
|
|
@@ -48,23 +46,23 @@ export class DatalayerClientBase {
|
|
|
48
46
|
*/
|
|
49
47
|
getConfig() {
|
|
50
48
|
return {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
iamUrl: this.iamUrl,
|
|
50
|
+
runtimesUrl: this.runtimesUrl,
|
|
51
|
+
spacerUrl: this.spacerUrl,
|
|
54
52
|
token: this.token,
|
|
55
53
|
};
|
|
56
54
|
}
|
|
57
55
|
/** Get the IAM service URL. */
|
|
58
|
-
|
|
59
|
-
return this.
|
|
56
|
+
getIamUrl() {
|
|
57
|
+
return this.iamUrl;
|
|
60
58
|
}
|
|
61
59
|
/** Get the Runtimes service URL. */
|
|
62
|
-
|
|
63
|
-
return this.
|
|
60
|
+
getRuntimesUrl() {
|
|
61
|
+
return this.runtimesUrl;
|
|
64
62
|
}
|
|
65
63
|
/** Get the Spacer service URL. */
|
|
66
|
-
|
|
67
|
-
return this.
|
|
64
|
+
getSpacerUrl() {
|
|
65
|
+
return this.spacerUrl;
|
|
68
66
|
}
|
|
69
67
|
/** Get the current authentication token. */
|
|
70
68
|
getToken() {
|