@datalayer/core 1.1.60 → 1.2.10
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 +41 -18
- package/lib/api/DatalayerApi.d.ts +42 -1
- package/lib/api/DatalayerApi.js +90 -3
- package/lib/api/constants.d.ts +19 -1
- package/lib/api/constants.js +19 -1
- package/lib/api/contents/attachments.d.ts +9 -0
- package/lib/api/contents/attachments.js +39 -0
- package/lib/api/contents/bridges.d.ts +22 -0
- package/lib/api/contents/bridges.js +79 -0
- package/lib/api/contents/capabilities.d.ts +11 -0
- package/lib/api/contents/capabilities.js +21 -0
- package/lib/api/contents/cloudStorage.d.ts +31 -0
- package/lib/api/contents/cloudStorage.js +89 -0
- package/lib/api/contents/dataservers.d.ts +37 -0
- package/lib/api/contents/dataservers.js +121 -0
- package/lib/api/contents/datasets.d.ts +63 -0
- package/lib/api/contents/datasets.js +82 -0
- package/lib/api/contents/datasources.d.ts +70 -0
- package/lib/api/contents/datasources.js +149 -0
- package/lib/api/contents/generated.d.ts +1070 -0
- package/lib/api/contents/index.d.ts +16 -0
- package/lib/api/contents/index.js +20 -0
- package/lib/api/contents/mcp.d.ts +46 -0
- package/lib/api/contents/mcp.js +157 -0
- package/lib/api/contents/objects.d.ts +31 -0
- package/lib/api/contents/objects.js +88 -0
- package/lib/api/contents/operations.d.ts +3 -0
- package/lib/api/contents/operations.js +19 -0
- package/lib/api/contents/runtimeMounts.d.ts +40 -0
- package/lib/api/contents/runtimeMounts.js +59 -0
- package/lib/api/contents/sandboxUid.d.ts +21 -0
- package/lib/api/contents/sandboxUid.js +27 -0
- package/lib/api/contents/sources.d.ts +19 -0
- package/lib/api/contents/sources.js +119 -0
- package/lib/api/contents/sync.d.ts +18 -0
- package/lib/api/contents/sync.js +69 -0
- package/lib/api/contents/transfers.d.ts +38 -0
- package/lib/api/contents/transfers.js +123 -0
- package/lib/api/evals/client.d.ts +402 -0
- package/lib/api/evals/client.js +359 -0
- package/lib/api/evals/index.d.ts +10 -0
- package/lib/api/evals/index.js +18 -0
- package/lib/api/evals/request.d.ts +43 -0
- package/lib/api/evals/request.js +67 -0
- package/lib/api/evals/status.d.ts +27 -0
- package/lib/api/evals/status.js +122 -0
- package/lib/api/evals/types.d.ts +1335 -0
- package/lib/api/evals/types.js +5 -0
- package/lib/api/iam/connectedAgents.d.ts +68 -0
- package/lib/api/iam/connectedAgents.js +87 -0
- package/lib/api/iam/identityProviders.d.ts +76 -0
- package/lib/api/iam/identityProviders.js +187 -0
- package/lib/api/iam/index.d.ts +3 -1
- package/lib/api/iam/index.js +3 -1
- package/lib/api/iam/mcpAlertRules.d.ts +51 -0
- package/lib/api/iam/mcpAlertRules.js +198 -0
- package/lib/api/iam/mcpAuditSettings.d.ts +46 -0
- package/lib/api/iam/mcpAuditSettings.js +120 -0
- package/lib/api/iam/mcpPolicy.d.ts +181 -0
- package/lib/api/iam/mcpPolicy.js +168 -0
- package/lib/api/iam/organizationTeams.d.ts +13 -0
- package/lib/api/iam/organizationTeams.js +43 -0
- package/lib/api/iam/profile.d.ts +17 -1
- package/lib/api/iam/profile.js +27 -0
- package/lib/api/iam/scimTokens.d.ts +79 -0
- package/lib/api/iam/scimTokens.js +141 -0
- package/lib/api/iam/secrets.js +9 -21
- package/lib/api/iam/serviceAgents.d.ts +68 -0
- package/lib/api/iam/serviceAgents.js +119 -0
- package/lib/api/iam/trials.d.ts +38 -0
- package/lib/api/iam/trials.js +66 -0
- package/lib/api/index.d.ts +8 -1
- package/lib/api/index.js +7 -1
- package/lib/api/mcp/activity.d.ts +37 -0
- package/lib/api/mcp/activity.js +26 -0
- package/lib/api/mcp/alerts.d.ts +25 -0
- package/lib/api/mcp/alerts.js +51 -0
- package/lib/api/mcp/audit.d.ts +29 -0
- package/lib/api/mcp/audit.js +55 -0
- package/lib/api/mcp/bindings.d.ts +18 -0
- package/lib/api/mcp/bindings.js +42 -0
- package/lib/api/mcp/forwarding.d.ts +25 -0
- package/lib/api/mcp/forwarding.js +46 -0
- package/lib/api/mcp/gateway.d.ts +16 -0
- package/lib/api/mcp/gateway.js +70 -0
- package/lib/api/mcp/generated.d.ts +22 -0
- package/lib/api/mcp/generated.js +213 -0
- package/lib/api/mcp/index.d.ts +17 -0
- package/lib/api/mcp/index.js +25 -0
- package/lib/api/mcp/observability.d.ts +141 -0
- package/lib/api/mcp/observability.js +267 -0
- package/lib/api/mcp/operations.d.ts +83 -0
- package/lib/api/mcp/operations.js +50 -0
- package/lib/api/mcp/organizations.d.ts +102 -0
- package/lib/api/mcp/organizations.js +46 -0
- package/lib/api/mcp/policy.d.ts +9 -0
- package/lib/api/mcp/policy.js +23 -0
- package/lib/api/mcp/tasks.d.ts +49 -0
- package/lib/api/mcp/tasks.js +147 -0
- package/lib/api/orchestration/client.d.ts +53 -0
- package/lib/api/orchestration/client.js +105 -0
- package/lib/api/orchestration/events.d.ts +88 -0
- package/lib/api/orchestration/events.js +245 -0
- package/lib/api/orchestration/generated.d.ts +693 -0
- package/lib/api/orchestration/generated.js +687 -0
- package/lib/api/orchestration/index.d.ts +30 -0
- package/lib/api/orchestration/index.js +34 -0
- package/lib/api/orchestration/lifecycle.d.ts +39 -0
- package/lib/api/orchestration/lifecycle.js +57 -0
- package/lib/api/orchestration/measures.d.ts +55 -0
- package/lib/api/orchestration/measures.js +99 -0
- package/lib/api/otel/dashboards.d.ts +56 -0
- package/lib/api/otel/dashboards.js +50 -0
- package/lib/api/otel/index.d.ts +1 -0
- package/lib/api/otel/index.js +1 -0
- package/lib/api/otel/metrics.d.ts +16 -0
- package/lib/api/otel/metrics.js +15 -0
- package/lib/api/scheduler/client.d.ts +32 -0
- package/lib/api/scheduler/client.js +42 -0
- package/lib/api/scheduler/index.d.ts +8 -0
- package/lib/api/scheduler/index.js +16 -0
- package/lib/api/scheduler/request.d.ts +28 -0
- package/lib/api/scheduler/request.js +50 -0
- package/lib/api/scheduler/types.d.ts +88 -0
- package/lib/api/scheduler/types.js +5 -0
- package/lib/api/spacer/comments.d.ts +97 -0
- package/lib/api/spacer/comments.js +45 -0
- package/lib/api/spacer/index.d.ts +9 -0
- package/lib/api/spacer/index.js +17 -0
- package/lib/api/spacer/notebooks.d.ts +33 -0
- package/lib/api/spacer/notebooks.js +39 -0
- package/lib/api/spacer/request.d.ts +25 -0
- package/lib/api/spacer/request.js +46 -0
- package/lib/api/spacer/spaces.d.ts +68 -0
- package/lib/api/spacer/spaces.js +45 -0
- package/lib/api/utils/validation.d.ts +4 -4
- package/lib/api/utils/validation.js +10 -7
- package/lib/client/auth/index.js +0 -5
- package/lib/client/auth/storage.js +0 -5
- package/lib/client/auth/strategies.js +0 -5
- package/lib/client/base.d.ts +6 -0
- package/lib/client/base.js +8 -0
- package/lib/client/constants.d.ts +1 -0
- package/lib/client/constants.js +1 -0
- package/lib/client/index.d.ts +0 -10
- package/lib/client/index.js +2 -2
- package/lib/client/mixins/ContentsMixin.d.ts +71 -0
- package/lib/client/mixins/ContentsMixin.js +157 -0
- package/lib/client/mixins/IAMMixin.d.ts +0 -31
- package/lib/client/mixins/IAMMixin.js +0 -58
- package/lib/components/animation/AnimatedText.d.ts +2 -44
- package/lib/components/animation/AnimatedText.js +6 -126
- package/lib/components/anonymous/AnonymousKeyExpired.d.ts +56 -0
- package/lib/components/anonymous/AnonymousKeyExpired.js +96 -0
- package/lib/components/anonymous/AnonymousKeyTimer.d.ts +63 -0
- package/lib/components/anonymous/AnonymousKeyTimer.js +140 -0
- package/lib/components/anonymous/index.d.ts +7 -0
- package/lib/components/anonymous/index.js +15 -0
- package/lib/components/auth/SigInAPIKey.d.ts +1 -0
- package/lib/components/auth/SigInAPIKey.js +0 -6
- package/lib/components/auth/SignIn.d.ts +1 -0
- package/lib/components/auth/SignIn.js +0 -4
- package/lib/components/auth/SignIn.stories.d.ts +2 -2
- package/lib/components/avatars/BoringAvatar.d.ts +1 -1
- package/lib/components/avatars/BoringAvatar.stories.d.ts +1 -1
- package/lib/components/avatars/DLAvatar.d.ts +1 -1
- package/lib/components/avatars/DLAvatar.js +0 -4
- package/lib/components/avatars/UserAvatar.d.ts +16 -1
- package/lib/components/avatars/UserAvatar.js +15 -13
- package/lib/components/avatars/UserProfileAvatar.d.ts +1 -1
- package/lib/components/banners/NoAutomationBanner.d.ts +1 -1
- package/lib/components/billing/BillingEntitySelect.d.ts +16 -0
- package/lib/components/billing/BillingEntitySelect.js +49 -27
- package/lib/components/billing/eligibility.d.ts +22 -0
- package/lib/components/billing/eligibility.js +27 -0
- package/lib/components/billing/index.d.ts +1 -0
- package/lib/components/billing/index.js +1 -4
- package/lib/components/buttons/DownloadCSVButton.d.ts +1 -1
- package/lib/components/buttons/DownloadJsonButton.d.ts +1 -1
- package/lib/components/buttons/LongActionButton.d.ts +1 -0
- package/lib/components/buttons/LongActionButton.js +0 -4
- package/lib/components/buttons/UploadButton.d.ts +1 -0
- package/lib/components/buttons/UploadButton.js +0 -4
- package/lib/components/checkout/StripeCheckout.d.ts +1 -1
- package/lib/components/collaboration/LiveEditorCollaborators.d.ts +36 -0
- package/lib/components/collaboration/LiveEditorCollaborators.js +88 -53
- package/lib/components/collaboration/index.js +0 -4
- package/lib/components/confetti/ConfettiSuccess.d.ts +1 -1
- package/lib/components/contents/ContentSourceCard.d.ts +8 -0
- package/lib/components/contents/ContentSourceCard.js +23 -0
- package/lib/components/contents/HomeFolderObjectsBrowser.d.ts +10 -0
- package/lib/components/contents/HomeFolderObjectsBrowser.js +148 -0
- package/lib/components/contents/index.d.ts +2 -0
- package/lib/components/contents/index.js +6 -0
- package/lib/components/context/OrganizationSelect.d.ts +1 -1
- package/lib/components/display/AvatarSkeleton.d.ts +1 -1
- package/lib/components/display/BusyDots.d.ts +1 -1
- package/lib/components/display/CenteredSpinner.d.ts +1 -1
- package/lib/components/display/CodePreview.d.ts +1 -1
- package/lib/components/display/DatalayerBox.d.ts +7 -3
- package/lib/components/display/DatalayerBox.js +7 -7
- package/lib/components/display/HorizontalCenter.d.ts +1 -1
- package/lib/components/display/JupyterDialog.d.ts +1 -0
- package/lib/components/display/JupyterDialog.js +1 -7
- package/lib/components/display/Markdown.d.ts +1 -0
- package/lib/components/display/NavLink.js +3 -2
- package/lib/components/display/NotebookSkeleton.d.ts +1 -1
- package/lib/components/display/Placeholder.d.ts +1 -1
- package/lib/components/display/ToTopBranded.d.ts +1 -1
- package/lib/components/echarts/EChartsReact.d.ts +1 -1
- package/lib/components/flashes/FlashClosable.d.ts +1 -0
- package/lib/components/flashes/FlashClosable.js +0 -4
- package/lib/components/flashes/FlashGuest.d.ts +1 -1
- package/lib/components/flashes/FlashSurveys.d.ts +1 -1
- package/lib/components/flashes/FlashUnauthorized.d.ts +1 -0
- package/lib/components/flashes/FlashUnauthorized.js +0 -6
- package/lib/components/flashes/surveys/Survey2025_1.d.ts +1 -1
- package/lib/components/iam/ExternalTokenSilentLogin.d.ts +1 -1
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +2 -0
- package/lib/components/labels/StatusLabels.d.ts +2 -9
- package/lib/components/labels/StatusLabels.js +2 -26
- package/lib/components/labels/VisibilityLabel.d.ts +1 -1
- package/lib/components/landings/StepBlock.d.ts +1 -1
- package/lib/components/mcp/ClientBadge.d.ts +41 -0
- package/lib/components/mcp/ClientBadge.js +33 -0
- package/lib/components/mcp/McpErrorBlankslate.d.ts +21 -0
- package/lib/components/mcp/McpErrorBlankslate.js +17 -0
- package/lib/components/mcp/ScopeList.d.ts +28 -0
- package/lib/components/mcp/ScopeList.js +14 -0
- package/lib/components/mcp/index.d.ts +10 -0
- package/lib/components/mcp/index.js +18 -0
- package/lib/components/navbar/NavigationVisbilityObserver.d.ts +2 -1
- package/lib/components/navbar/SubdomainNavBar.d.ts +10 -5
- package/lib/components/navbar/SubdomainNavBar.js +2 -1
- package/lib/components/notebooks/JupyterNotebook.d.ts +1 -1
- package/lib/components/notebooks/JupyterNotebookToolbar.d.ts +1 -1
- package/lib/components/principal/PrincipalAppearance.d.ts +22 -42
- package/lib/components/principal/PrincipalAppearance.js +232 -182
- package/lib/components/principal/PrincipalAvatar.d.ts +9 -1
- package/lib/components/principal/PrincipalAvatar.js +18 -10
- package/lib/components/principal/PrincipalBadge.d.ts +1 -1
- package/lib/components/principal/PrincipalBanner.d.ts +1 -1
- package/lib/components/principal/PrincipalDetailsOverlay.d.ts +38 -1
- package/lib/components/principal/PrincipalDetailsOverlay.js +64 -33
- package/lib/components/principal/PrincipalHoverCard.d.ts +31 -0
- package/lib/components/principal/PrincipalHoverCard.js +52 -0
- package/lib/components/principal/PrincipalSwitcherMenu.d.ts +1 -0
- package/lib/components/principal/PrincipalSwitcherMenu.js +5 -14
- package/lib/components/principal/index.d.ts +2 -1
- package/lib/components/principal/index.js +2 -1
- package/lib/components/progress/ConsumptionBar.d.ts +1 -0
- package/lib/components/progress/ConsumptionBar.js +0 -4
- package/lib/components/progress/ProgressRing.d.ts +1 -0
- package/lib/components/progress/SpinnerBar.d.ts +1 -1
- package/lib/components/progress/Timer.d.ts +1 -0
- package/lib/components/progress/Timer.js +0 -4
- package/lib/components/screencapture/Screencapture.js +46 -3
- package/lib/components/screencapture/ScreencaptureButton.d.ts +1 -1
- package/lib/components/sharing/ShareAccessComponent.d.ts +58 -3
- package/lib/components/sharing/ShareAccessComponent.js +143 -98
- package/lib/components/sharing/SharingEditor.d.ts +21 -0
- package/lib/components/sharing/SharingEditor.js +9 -28
- package/lib/components/sharing/index.d.ts +1 -0
- package/lib/components/sharing/index.js +1 -0
- package/lib/components/sharing/sandboxSharing.d.ts +26 -0
- package/lib/components/sharing/sandboxSharing.js +41 -0
- package/lib/components/spaces/SpaceDetailsOverlay.d.ts +39 -0
- package/lib/components/spaces/SpaceDetailsOverlay.js +80 -0
- package/lib/components/spaces/SpaceDisplay.d.ts +38 -0
- package/lib/components/spaces/SpaceDisplay.js +92 -0
- package/lib/components/spaces/index.d.ts +4 -0
- package/lib/components/spaces/index.js +7 -0
- package/lib/components/spaces/spaceDisplayModel.d.ts +93 -0
- package/lib/components/spaces/spaceDisplayModel.js +170 -0
- package/lib/components/sparklines/Sparklines.js +3 -4
- package/lib/components/sparklines/index.js +0 -4
- package/lib/components/storage/ContentsBrowser.d.ts +25 -1
- package/lib/components/storage/ContentsBrowser.js +145 -52
- package/lib/components/storage/ContentsBrowserMock.d.ts +3 -0
- package/lib/components/storage/ContentsBrowserMock.js +75 -0
- package/lib/components/storage/ContentsItems.d.ts +2 -1
- package/lib/components/storage/ContentsItems.js +0 -4
- package/lib/components/storage/ContentsTable.d.ts +50 -0
- package/lib/components/storage/ContentsTable.js +134 -0
- package/lib/components/storage/HomeFolderDrive.d.ts +71 -0
- package/lib/components/storage/HomeFolderDrive.js +248 -0
- package/lib/components/storage/index.d.ts +2 -0
- package/lib/components/storage/index.js +2 -0
- package/lib/components/students/StudentItemStatus.d.ts +1 -1
- package/lib/components/students/StudentResultCircle.d.ts +1 -1
- package/lib/components/subnav/SubNav.d.ts +5 -5
- package/lib/components/subnav/SubNav.js +11 -9
- package/lib/components/tables/DataTable.d.ts +1 -1
- package/lib/components/text-reveal/TextRevealAnimation.d.ts +2 -2
- package/lib/components/text-reveal/useTextRevealAnimationLines.d.ts +1 -1
- package/lib/components/time/LiveRelativeTime.d.ts +1 -0
- package/lib/components/time/LiveRelativeTime.js +0 -8
- package/lib/components/time/index.js +0 -4
- package/lib/components/timeline/Timeline.d.ts +1 -1
- package/lib/components/timeline/index.js +0 -4
- package/lib/components/users/PeerIndicator.d.ts +1 -0
- package/lib/components/users/PeerIndicator.js +0 -4
- package/lib/config/Configuration.d.ts +15 -17
- package/lib/config/Configuration.js +7 -0
- package/lib/hooks/cacheConverters.d.ts +0 -7
- package/lib/hooks/cacheConverters.js +0 -25
- package/lib/hooks/index.d.ts +3 -0
- package/lib/hooks/index.js +3 -0
- package/lib/hooks/layouts/LayoutBackdrop.d.ts +1 -1
- package/lib/hooks/layouts/LayoutScreencapture.d.ts +1 -1
- package/lib/hooks/useBackdrop.d.ts +1 -1
- package/lib/hooks/useBackdropJupyterLab.d.ts +3 -2
- package/lib/hooks/useBackdropJupyterLab.js +0 -4
- package/lib/hooks/useBillingEntityStore.js +3 -0
- package/lib/hooks/useCache.d.ts +478 -130
- package/lib/hooks/useCache.js +1580 -676
- package/lib/hooks/useContainsFocus.d.ts +1 -1
- package/lib/hooks/useContents.d.ts +334 -0
- package/lib/hooks/useContents.js +1033 -0
- package/lib/hooks/useFocusTrap.d.ts +4 -4
- package/lib/hooks/useFocusTrap.js +1 -1
- package/lib/hooks/useMcp.d.ts +315 -0
- package/lib/hooks/useMcp.js +891 -0
- package/lib/hooks/useMobile.js +0 -5
- package/lib/hooks/useNavigate.d.ts +41 -3
- package/lib/hooks/useNavigate.js +106 -52
- package/lib/hooks/usePrincipalCacheStore.js +3 -0
- package/lib/hooks/usePrincipalStore.js +3 -0
- package/lib/hooks/useProjectStore.d.ts +3 -3
- package/lib/hooks/useProjectStore.js +4 -4
- package/lib/hooks/useRef.d.ts +1 -1
- package/lib/hooks/useRef.js +3 -0
- package/lib/hooks/useScreencapture.d.ts +2 -1
- package/lib/hooks/useScreencapture.js +0 -4
- package/lib/hooks/useSpaceCacheStore.d.ts +50 -0
- package/lib/hooks/useSpaceCacheStore.js +85 -0
- package/lib/hooks/useToast.js +0 -4
- package/lib/hooks/useVisibilityObserver.d.ts +1 -1
- package/lib/index.d.ts +4 -1
- package/lib/index.js +3 -1
- package/lib/mocks/components/FlashMock.d.ts +1 -1
- package/lib/mocks/views/ActionMenuMock.d.ts +1 -1
- package/lib/mocks/views/ChartMock.d.ts +1 -1
- package/lib/mocks/views/DashboardMock.d.ts +1 -1
- package/lib/mocks/views/FormMock.d.ts +1 -1
- package/lib/mocks/views/TableMock.d.ts +1 -1
- package/lib/mocks/views/WipMock.d.ts +1 -1
- package/lib/models/Credits.d.ts +16 -0
- package/lib/models/Credits.js +22 -0
- package/lib/models/CreditsDTO.d.ts +6 -5
- package/lib/models/CreditsDTO.js +7 -5
- package/lib/models/McpAuditEvent.d.ts +52 -0
- package/lib/models/McpAuditEvent.js +5 -0
- package/lib/models/McpBinding.d.ts +57 -0
- package/lib/models/McpBinding.js +5 -0
- package/lib/models/McpPolicy.d.ts +77 -0
- package/lib/models/McpPolicy.js +5 -0
- package/lib/models/McpTask.d.ts +94 -0
- package/lib/models/McpTask.js +7 -0
- package/lib/models/Organization.d.ts +69 -0
- package/lib/models/Organization.js +96 -0
- package/lib/models/Secret.d.ts +1 -2
- package/lib/models/Secret.js +2 -18
- package/lib/models/StartedBy.d.ts +91 -0
- package/lib/models/StartedBy.js +117 -0
- package/lib/models/Team.d.ts +2 -0
- package/lib/models/Team.js +2 -0
- package/lib/models/User.d.ts +4 -0
- package/lib/models/User.js +3 -0
- package/lib/models/UserDTO.js +4 -2
- package/lib/models/UserSettings.d.ts +13 -0
- package/lib/models/UserSettings.js +9 -0
- package/lib/models/contents/__fixtures__/solr-codec.json +57 -0
- package/lib/models/contents/__fixtures__/v1-contracts.json +194 -0
- package/lib/models/contents/fieldCase.d.ts +8 -0
- package/lib/models/contents/fieldCase.js +37 -0
- package/lib/models/contents/index.d.ts +2 -0
- package/lib/models/contents/index.js +6 -0
- package/lib/models/contents/permissions.d.ts +16 -0
- package/lib/models/contents/permissions.js +34 -0
- package/lib/models/index.d.ts +5 -1
- package/lib/models/index.js +5 -1
- package/lib/navigation/components.js +2 -3
- package/lib/routes/publicPaths.js +4 -0
- package/lib/state/index.d.ts +1 -0
- package/lib/state/index.js +1 -0
- package/lib/state/sessionEnd.d.ts +55 -0
- package/lib/state/sessionEnd.js +162 -0
- package/lib/state/substates/CoreState.d.ts +15 -7
- package/lib/state/substates/CoreState.js +21 -17
- package/lib/state/substates/IAMState.d.ts +1 -1
- package/lib/state/substates/IAMState.js +12 -5
- package/lib/state/substates/LayoutState.js +12 -0
- package/lib/state/substates/ProfileState.d.ts +1 -0
- package/lib/state/substates/ProfileState.js +1 -4
- package/lib/state/substates/index.d.ts +0 -1
- package/lib/state/substates/index.js +0 -1
- package/lib/utils/Jwt.d.ts +26 -0
- package/lib/utils/Jwt.js +37 -0
- package/lib/utils/Lazy.d.ts +20 -0
- package/lib/utils/Lazy.js +32 -6
- package/lib/utils/Screencapture.js +3 -0
- package/lib/utils/WithSuspense.d.ts +11 -1
- package/lib/utils/WithSuspense.js +11 -1
- package/lib/views/api-keys/APIKeyEdit.d.ts +1 -1
- package/lib/views/api-keys/APIKeyNew.d.ts +1 -1
- package/lib/views/api-keys/APIKeys.d.ts +1 -1
- package/lib/views/api-keys/APIKeys.js +30 -4
- package/lib/views/api-keys/APIKeysStandalone.d.ts +5 -1
- package/lib/views/api-keys/APIKeysStandalone.js +2 -2
- package/lib/views/datasources/DatasourceDetail.d.ts +12 -5
- package/lib/views/datasources/DatasourceDetail.js +80 -110
- package/lib/views/datasources/DatasourceNew.d.ts +14 -8
- package/lib/views/datasources/DatasourceNew.js +129 -118
- package/lib/views/datasources/Datasources.d.ts +39 -7
- package/lib/views/datasources/Datasources.js +95 -40
- package/lib/views/datasources/DatasourcesMock.d.ts +3 -0
- package/lib/views/datasources/DatasourcesMock.js +57 -0
- package/lib/views/iam/SignInSimple.d.ts +12 -0
- package/lib/views/iam/SignInSimple.js +4 -4
- package/lib/views/index.d.ts +1 -0
- package/lib/views/index.js +1 -0
- package/lib/views/mcp/AdmittedClients.d.ts +44 -0
- package/lib/views/mcp/AdmittedClients.js +59 -0
- package/lib/views/mcp/AlertDestinations.d.ts +34 -0
- package/lib/views/mcp/AlertDestinations.js +75 -0
- package/lib/views/mcp/AlertRules.d.ts +32 -0
- package/lib/views/mcp/AlertRules.js +245 -0
- package/lib/views/mcp/ApprovalQueue.d.ts +66 -0
- package/lib/views/mcp/ApprovalQueue.js +95 -0
- package/lib/views/mcp/AuditLog.d.ts +42 -0
- package/lib/views/mcp/AuditLog.js +144 -0
- package/lib/views/mcp/ConnectedAgents.d.ts +34 -0
- package/lib/views/mcp/ConnectedAgents.js +135 -0
- package/lib/views/mcp/EnterpriseConsole.d.ts +74 -0
- package/lib/views/mcp/EnterpriseConsole.js +195 -0
- package/lib/views/mcp/IdentityProviders.d.ts +33 -0
- package/lib/views/mcp/IdentityProviders.js +299 -0
- package/lib/views/mcp/McpDashboard.d.ts +50 -0
- package/lib/views/mcp/McpDashboard.js +430 -0
- package/lib/views/mcp/McpHome.d.ts +92 -0
- package/lib/views/mcp/McpHome.js +153 -0
- package/lib/views/mcp/McpObservability.d.ts +79 -0
- package/lib/views/mcp/McpObservability.js +236 -0
- package/lib/views/mcp/NotebookRuns.d.ts +39 -0
- package/lib/views/mcp/NotebookRuns.js +44 -0
- package/lib/views/mcp/OrganizationPolicy.d.ts +45 -0
- package/lib/views/mcp/OrganizationPolicy.js +108 -0
- package/lib/views/mcp/OrganizationUsage.d.ts +69 -0
- package/lib/views/mcp/OrganizationUsage.js +113 -0
- package/lib/views/mcp/PersonalPolicy.d.ts +54 -0
- package/lib/views/mcp/PersonalPolicy.js +126 -0
- package/lib/views/mcp/Policies.d.ts +53 -0
- package/lib/views/mcp/Policies.js +210 -0
- package/lib/views/mcp/PolicyForm.d.ts +83 -0
- package/lib/views/mcp/PolicyForm.js +113 -0
- package/lib/views/mcp/PolicyHistory.d.ts +58 -0
- package/lib/views/mcp/PolicyHistory.js +75 -0
- package/lib/views/mcp/RunDetail.d.ts +87 -0
- package/lib/views/mcp/RunDetail.js +186 -0
- package/lib/views/mcp/ScimProvisioning.d.ts +54 -0
- package/lib/views/mcp/ScimProvisioning.js +173 -0
- package/lib/views/mcp/ServiceAgents.d.ts +46 -0
- package/lib/views/mcp/ServiceAgents.js +194 -0
- package/lib/views/mcp/TeamPolicies.d.ts +33 -0
- package/lib/views/mcp/TeamPolicies.js +159 -0
- package/lib/views/mcp/ToolAccess.d.ts +60 -0
- package/lib/views/mcp/ToolAccess.js +101 -0
- package/lib/views/mcp/TraceTimeline.d.ts +81 -0
- package/lib/views/mcp/TraceTimeline.js +132 -0
- package/lib/views/mcp/format.d.ts +25 -0
- package/lib/views/mcp/format.js +77 -0
- package/lib/views/mcp/index.d.ts +34 -0
- package/lib/views/mcp/index.js +42 -0
- package/lib/views/mcp/types.d.ts +66 -0
- package/lib/views/mcp/types.js +5 -0
- package/lib/views/otel/simpleAuthStore.js +3 -0
- package/lib/views/secrets/SecretEdit.d.ts +5 -1
- package/lib/views/secrets/SecretEdit.js +5 -4
- package/lib/views/secrets/SecretNew.d.ts +11 -1
- package/lib/views/secrets/SecretNew.js +7 -3
- package/lib/views/secrets/Secrets.d.ts +12 -1
- package/lib/views/secrets/Secrets.js +2 -2
- package/package.json +269 -260
- package/scripts/generate-contents-types.py +169 -0
- package/scripts/generate-mcp-types.py +233 -0
- package/scripts/generate-orchestration-types.py +920 -0
- package/lib/api/iam/datasources.d.ts +0 -86
- package/lib/api/iam/datasources.js +0 -185
- package/lib/components/toolbars/index.d.ts +0 -1
- package/lib/models/Datasource.d.ts +0 -181
- package/lib/models/Datasource.js +0 -154
- package/lib/state/substates/DatasourceState.d.ts +0 -11
- package/lib/state/substates/DatasourceState.js +0 -16
- /package/lib/{components/toolbars/index.js → api/contents/generated.js} +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
* Distributed under the terms of the Modified BSD License.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* An organization's service agents: agents that are principals rather than
|
|
11
|
+
* a person's proxy.
|
|
12
|
+
*
|
|
13
|
+
* A connected agent is a grant — somebody's authority, narrowed to one
|
|
14
|
+
* client, dying with their account. A service agent is the other kind: it
|
|
15
|
+
* belongs to the organization, holds its own key, spends under its own name
|
|
16
|
+
* and outlives whoever set it up. An organization whose nightly pipeline
|
|
17
|
+
* runs on an engineer's grant loses the pipeline when the engineer leaves,
|
|
18
|
+
* and its spend shows against somebody who was asleep.
|
|
19
|
+
*
|
|
20
|
+
* **The key exists in one response and no other.** IAM stores a hash of it,
|
|
21
|
+
* so no later read can return it — `create` and `rotate` carry it and
|
|
22
|
+
* `list` never does. Anything rendering it must say so in the same breath,
|
|
23
|
+
* because somebody who does not know stores nothing and rotates an hour
|
|
24
|
+
* later.
|
|
25
|
+
*
|
|
26
|
+
* @module api/iam/serviceAgents
|
|
27
|
+
*/
|
|
28
|
+
import { requestDatalayerAPI } from '../DatalayerApi.js';
|
|
29
|
+
import { API_BASE_PATHS, DEFAULT_SERVICE_URLS } from '../constants.js';
|
|
30
|
+
/**
|
|
31
|
+
* What a service agent may be granted.
|
|
32
|
+
*
|
|
33
|
+
* A subset of the OAuth scopes, and deliberately not all of them: the ones
|
|
34
|
+
* about a *person* — reading their profile, acting as them — mean nothing
|
|
35
|
+
* for a principal that is not one, and IAM refuses them. Offering one would
|
|
36
|
+
* invite somebody to grant something that silently does nothing.
|
|
37
|
+
*/
|
|
38
|
+
export const SERVICE_AGENT_SCOPES = [
|
|
39
|
+
'runtimes:read',
|
|
40
|
+
'runtimes:write',
|
|
41
|
+
'data:read',
|
|
42
|
+
'sandboxes:manage',
|
|
43
|
+
];
|
|
44
|
+
const fromWire = (agent) => ({
|
|
45
|
+
uid: agent.uid,
|
|
46
|
+
name: agent.name ?? '',
|
|
47
|
+
description: agent.description ?? '',
|
|
48
|
+
teamUid: agent.team_uid ?? '',
|
|
49
|
+
scopes: agent.scopes ?? '',
|
|
50
|
+
revoked: Boolean(agent.revoked),
|
|
51
|
+
createdBy: agent.created_by ?? '',
|
|
52
|
+
createdAt: agent.created_at ?? null,
|
|
53
|
+
keyRotatedAt: agent.key_rotated_at ?? null,
|
|
54
|
+
});
|
|
55
|
+
const withKey = (agent) => ({
|
|
56
|
+
...fromWire(agent),
|
|
57
|
+
key: agent.key ?? '',
|
|
58
|
+
});
|
|
59
|
+
const agentsUrl = (baseUrl, orgUid, suffix = '') => `${baseUrl}${API_BASE_PATHS.IAM}/organizations/${encodeURIComponent(orgUid)}` +
|
|
60
|
+
`/mcp-service-agents${suffix}`;
|
|
61
|
+
/**
|
|
62
|
+
* One organization's service agents, revoked ones included.
|
|
63
|
+
*
|
|
64
|
+
* Included because hiding them makes a revoked agent invisible to whoever
|
|
65
|
+
* is deciding whether it is still needed, while its audit rows still name
|
|
66
|
+
* it. Any member of the organization may read this; only owners may write.
|
|
67
|
+
*/
|
|
68
|
+
export const listServiceAgents = async (token, orgUid, baseUrl = DEFAULT_SERVICE_URLS.IAM) => {
|
|
69
|
+
const response = await requestDatalayerAPI({
|
|
70
|
+
url: agentsUrl(baseUrl, orgUid),
|
|
71
|
+
method: 'GET',
|
|
72
|
+
token,
|
|
73
|
+
});
|
|
74
|
+
return (response.agents ?? []).map(fromWire);
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Create one. **The key is in this answer and in no other.**
|
|
78
|
+
*
|
|
79
|
+
* Scopes are sent as the array the caller holds; IAM joins and validates
|
|
80
|
+
* them, and refuses one that is not grantable to a principal that is not a
|
|
81
|
+
* person.
|
|
82
|
+
*/
|
|
83
|
+
export const createServiceAgent = async (token, orgUid, agent, baseUrl = DEFAULT_SERVICE_URLS.IAM) => {
|
|
84
|
+
const response = await requestDatalayerAPI({
|
|
85
|
+
url: agentsUrl(baseUrl, orgUid),
|
|
86
|
+
method: 'POST',
|
|
87
|
+
token,
|
|
88
|
+
body: {
|
|
89
|
+
name: agent.name,
|
|
90
|
+
scopes: agent.scopes,
|
|
91
|
+
description: agent.description ?? '',
|
|
92
|
+
team_uid: agent.teamUid ?? '',
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
return withKey(response.agent ?? { uid: '' });
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Replace the agent's key. The old one stops working with this call.
|
|
99
|
+
*
|
|
100
|
+
* No grace period, which is the point of rotating: a leaked key that still
|
|
101
|
+
* works for an hour is a leaked key that still works.
|
|
102
|
+
*/
|
|
103
|
+
export const rotateServiceAgentKey = async (token, orgUid, agentUid, baseUrl = DEFAULT_SERVICE_URLS.IAM) => {
|
|
104
|
+
const response = await requestDatalayerAPI({
|
|
105
|
+
url: agentsUrl(baseUrl, orgUid, `/${encodeURIComponent(agentUid)}/rotate`),
|
|
106
|
+
method: 'POST',
|
|
107
|
+
token,
|
|
108
|
+
});
|
|
109
|
+
return withKey(response.agent ?? { uid: agentUid });
|
|
110
|
+
};
|
|
111
|
+
/** Stop the agent, keeping it readable for its audit. */
|
|
112
|
+
export const revokeServiceAgent = async (token, orgUid, agentUid, baseUrl = DEFAULT_SERVICE_URLS.IAM) => {
|
|
113
|
+
const response = await requestDatalayerAPI({
|
|
114
|
+
url: agentsUrl(baseUrl, orgUid, `/${encodeURIComponent(agentUid)}/revoke`),
|
|
115
|
+
method: 'POST',
|
|
116
|
+
token,
|
|
117
|
+
});
|
|
118
|
+
return fromWire(response.agent ?? { uid: agentUid });
|
|
119
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Where a claim carries the trial's own key. */
|
|
2
|
+
export declare const TRIAL_TOKEN_HEADER = "X-Datalayer-Trial-Token";
|
|
3
|
+
/** What a visitor may try here, if anything. */
|
|
4
|
+
export interface TrialOffer {
|
|
5
|
+
offered: boolean;
|
|
6
|
+
/** The one benchmark a trial may run. */
|
|
7
|
+
evalsetId: string;
|
|
8
|
+
/** The credits it may spend. */
|
|
9
|
+
credits: number;
|
|
10
|
+
/** How long it lives, in seconds. */
|
|
11
|
+
ttlSeconds: number;
|
|
12
|
+
}
|
|
13
|
+
export interface Trial {
|
|
14
|
+
id: string;
|
|
15
|
+
/** The uid the trial's work is owned by, which is the trial's own. */
|
|
16
|
+
ownerUid: string;
|
|
17
|
+
state: 'open' | 'claimed' | 'expired';
|
|
18
|
+
evalsetId: string;
|
|
19
|
+
creditsLimit: number | null;
|
|
20
|
+
creditsSpent: number;
|
|
21
|
+
expiresAt: string | null;
|
|
22
|
+
claimedByUid: string;
|
|
23
|
+
claimedAt: string | null;
|
|
24
|
+
}
|
|
25
|
+
/** A trial and the key that acts as it. The key is answered once. */
|
|
26
|
+
export interface IssuedTrial {
|
|
27
|
+
trial: Trial;
|
|
28
|
+
token: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Whether this deployment lets a visitor try a benchmark, and which one.
|
|
32
|
+
* Unauthenticated: it is what a public page asks before it offers the run.
|
|
33
|
+
*/
|
|
34
|
+
export declare const getTrialOffer: (baseUrl?: string) => Promise<TrialOffer>;
|
|
35
|
+
/** Take a trial. Unauthenticated, rate limited, and refused where none are offered. */
|
|
36
|
+
export declare const createTrial: (baseUrl?: string) => Promise<IssuedTrial>;
|
|
37
|
+
/** The trial a key acts as: what it has left, and how long it has. */
|
|
38
|
+
export declare const getCurrentTrial: (trialToken: string, baseUrl?: string) => Promise<Trial>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
* Distributed under the terms of the Modified BSD License.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The anonymous trial: running the public benchmark before signing up
|
|
11
|
+
* (BENCHMARK.md, B2-14).
|
|
12
|
+
*
|
|
13
|
+
* A visitor with no account asks for a trial and gets a principal of its
|
|
14
|
+
* own with one benchmark it may run, a few credits and a short expiry. The
|
|
15
|
+
* work they make is owned by that principal, so when they sign up it is
|
|
16
|
+
* given to them rather than lost — `claimTrial` in the evals client moves
|
|
17
|
+
* it, and the trial's own key has to be presented alongside their new one.
|
|
18
|
+
*
|
|
19
|
+
* A deployment that has not named a public benchmark offers no trials, and
|
|
20
|
+
* `getTrialOffer` says so: a page asks before it shows the button.
|
|
21
|
+
*
|
|
22
|
+
* @module api/iam/trials
|
|
23
|
+
*/
|
|
24
|
+
import { requestDatalayerAPI } from '../DatalayerApi.js';
|
|
25
|
+
import { API_BASE_PATHS, DEFAULT_SERVICE_URLS } from '../constants.js';
|
|
26
|
+
/** Where a claim carries the trial's own key. */
|
|
27
|
+
export const TRIAL_TOKEN_HEADER = 'X-Datalayer-Trial-Token';
|
|
28
|
+
const trialsUrl = (baseUrl, suffix = '') => `${baseUrl}${API_BASE_PATHS.IAM}/trials${suffix}`;
|
|
29
|
+
const asTrial = (wire) => ({
|
|
30
|
+
id: wire.id,
|
|
31
|
+
ownerUid: wire.owner_uid ?? wire.id,
|
|
32
|
+
state: wire.state ?? 'open',
|
|
33
|
+
evalsetId: wire.evalset_id ?? '',
|
|
34
|
+
creditsLimit: wire.credits_limit ?? null,
|
|
35
|
+
creditsSpent: wire.credits_spent ?? 0,
|
|
36
|
+
expiresAt: wire.expires_at ?? null,
|
|
37
|
+
claimedByUid: wire.claimed_by_uid ?? '',
|
|
38
|
+
claimedAt: wire.claimed_at ?? null,
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Whether this deployment lets a visitor try a benchmark, and which one.
|
|
42
|
+
* Unauthenticated: it is what a public page asks before it offers the run.
|
|
43
|
+
*/
|
|
44
|
+
export const getTrialOffer = async (baseUrl = DEFAULT_SERVICE_URLS.IAM) => {
|
|
45
|
+
const response = await requestDatalayerAPI({ url: trialsUrl(baseUrl, '/offer'), method: 'GET' });
|
|
46
|
+
return {
|
|
47
|
+
offered: !!response.offered,
|
|
48
|
+
evalsetId: response.evalset_id ?? '',
|
|
49
|
+
credits: response.credits ?? 0,
|
|
50
|
+
ttlSeconds: response.ttl_seconds ?? 0,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
/** Take a trial. Unauthenticated, rate limited, and refused where none are offered. */
|
|
54
|
+
export const createTrial = async (baseUrl = DEFAULT_SERVICE_URLS.IAM) => {
|
|
55
|
+
const response = await requestDatalayerAPI({ url: trialsUrl(baseUrl), method: 'POST' });
|
|
56
|
+
return { trial: asTrial(response.trial), token: response.token };
|
|
57
|
+
};
|
|
58
|
+
/** The trial a key acts as: what it has left, and how long it has. */
|
|
59
|
+
export const getCurrentTrial = async (trialToken, baseUrl = DEFAULT_SERVICE_URLS.IAM) => {
|
|
60
|
+
const response = await requestDatalayerAPI({
|
|
61
|
+
url: trialsUrl(baseUrl, '/me'),
|
|
62
|
+
method: 'GET',
|
|
63
|
+
token: trialToken,
|
|
64
|
+
});
|
|
65
|
+
return asTrial(response.trial);
|
|
66
|
+
};
|
package/lib/api/index.d.ts
CHANGED
|
@@ -6,8 +6,15 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module @datalayer/core/api
|
|
8
8
|
*/
|
|
9
|
-
export { requestDatalayerAPI, RunResponseError, NetworkError, } from './DatalayerApi';
|
|
9
|
+
export { requestDatalayerAPI, requestDatalayerAPIWithResponse, RunResponseError, NetworkError, TokenExpiredError, } from './DatalayerApi';
|
|
10
10
|
export type { IRequestDatalayerAPIOptions } from './DatalayerApi';
|
|
11
|
+
export type { IDatalayerAPIResponse } from './DatalayerApi';
|
|
11
12
|
export * as iam from './iam';
|
|
13
|
+
export * as contents from './contents';
|
|
14
|
+
export * as evals from './evals';
|
|
15
|
+
export * as mcp from './mcp';
|
|
16
|
+
export * as orchestration from './orchestration';
|
|
12
17
|
export * as otel from './otel';
|
|
18
|
+
export * as scheduler from './scheduler';
|
|
19
|
+
export * as spacer from './spacer';
|
|
13
20
|
export * from '../api/DatalayerApi';
|
package/lib/api/index.js
CHANGED
|
@@ -11,8 +11,14 @@
|
|
|
11
11
|
* @module @datalayer/core/api
|
|
12
12
|
*/
|
|
13
13
|
// Base client exports
|
|
14
|
-
export { requestDatalayerAPI, RunResponseError, NetworkError, } from './DatalayerApi.js';
|
|
14
|
+
export { requestDatalayerAPI, requestDatalayerAPIWithResponse, RunResponseError, NetworkError, TokenExpiredError, } from './DatalayerApi.js';
|
|
15
15
|
// Domain-organized API exports
|
|
16
16
|
export * as iam from './iam/index.js';
|
|
17
|
+
export * as contents from './contents/index.js';
|
|
18
|
+
export * as evals from './evals/index.js';
|
|
19
|
+
export * as mcp from './mcp/index.js';
|
|
20
|
+
export * as orchestration from './orchestration/index.js';
|
|
17
21
|
export * as otel from './otel/index.js';
|
|
22
|
+
export * as scheduler from './scheduler/index.js';
|
|
23
|
+
export * as spacer from './spacer/index.js';
|
|
18
24
|
export * from '../api/DatalayerApi.js';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { McpAuditEvent } from '../../models/McpAuditEvent';
|
|
2
|
+
import type { McpBinding } from '../../models/McpBinding';
|
|
3
|
+
import type { McpTask } from '../../models/McpTask';
|
|
4
|
+
/** A connected client, as the dashboard shows it, with its last call. */
|
|
5
|
+
export interface McpActiveClient {
|
|
6
|
+
clientId: string;
|
|
7
|
+
clientName?: string | null;
|
|
8
|
+
/** The IAM grant behind the connection, what **Disconnect** revokes. */
|
|
9
|
+
grantUid?: string | null;
|
|
10
|
+
scopes?: string[];
|
|
11
|
+
connectedAt?: string | null;
|
|
12
|
+
lastCall?: McpAuditEvent | null;
|
|
13
|
+
}
|
|
14
|
+
/** Today's counts for the caller, or for the organization. */
|
|
15
|
+
export interface McpActivityCounts {
|
|
16
|
+
calls: number;
|
|
17
|
+
refusals: number;
|
|
18
|
+
tasks: number;
|
|
19
|
+
/** Credits spent by agents today. */
|
|
20
|
+
credits: number;
|
|
21
|
+
}
|
|
22
|
+
export interface McpActivity {
|
|
23
|
+
/** The moment the answer was assembled; the cache is five seconds. */
|
|
24
|
+
at: string;
|
|
25
|
+
orgUid?: string | null;
|
|
26
|
+
clients: McpActiveClient[];
|
|
27
|
+
sandboxes: McpBinding[];
|
|
28
|
+
tasks: McpTask[];
|
|
29
|
+
calls: McpAuditEvent[];
|
|
30
|
+
today: McpActivityCounts;
|
|
31
|
+
}
|
|
32
|
+
export interface McpActivityFilters {
|
|
33
|
+
/** An owner's view of an organization. */
|
|
34
|
+
org?: string;
|
|
35
|
+
team?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare const getMcpActivity: (token: string, filters?: McpActivityFilters, baseUrl?: string) => Promise<McpActivity>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
* Distributed under the terms of the Modified BSD License.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* "What is going on" for the caller, in one answer: the connected clients
|
|
11
|
+
* joined with their last call, the bound sandboxes with their state, the
|
|
12
|
+
* tasks in `working`/`input_required`, the last calls and today's counts.
|
|
13
|
+
*
|
|
14
|
+
* Read from `mcp-gateway`, `mcp-tasks` and `mcp-audit` with bounded
|
|
15
|
+
* queries, cached for five seconds per caller. An owner adds `?org=`.
|
|
16
|
+
*
|
|
17
|
+
* @module api/mcp/activity
|
|
18
|
+
*/
|
|
19
|
+
import { requestDatalayerAPI } from '../DatalayerApi.js';
|
|
20
|
+
import { DEFAULT_SERVICE_URLS } from '../constants.js';
|
|
21
|
+
import { fromWire, mcpUrl } from './gateway.js';
|
|
22
|
+
export const getMcpActivity = async (token, filters = {}, baseUrl = DEFAULT_SERVICE_URLS.JUPYTER_MCP_SERVER) => fromWire(await requestDatalayerAPI({
|
|
23
|
+
url: mcpUrl(baseUrl, '/activity', { ...filters }),
|
|
24
|
+
method: 'GET',
|
|
25
|
+
token,
|
|
26
|
+
}));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface McpAlertRuleTrial {
|
|
2
|
+
/** Whether anything could answer the condition at all. */
|
|
3
|
+
readable: boolean;
|
|
4
|
+
/** The reading, when there was one. */
|
|
5
|
+
value?: number;
|
|
6
|
+
/** Whether the rule would fire on it. */
|
|
7
|
+
wouldFire: boolean;
|
|
8
|
+
/** Why it could not be read, or what the reader had to add. */
|
|
9
|
+
detail: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* What this rule would see now.
|
|
13
|
+
*
|
|
14
|
+
* The organization is the caller's own, whatever is sent — testing another
|
|
15
|
+
* organization's numbers is reading their numbers, and the gateway refuses
|
|
16
|
+
* to do it rather than trusting the body.
|
|
17
|
+
*/
|
|
18
|
+
export declare const testAlertRule: (token: string, rule: {
|
|
19
|
+
condition: string;
|
|
20
|
+
operator: string;
|
|
21
|
+
threshold: number;
|
|
22
|
+
windowSeconds: number;
|
|
23
|
+
scopeKind?: string;
|
|
24
|
+
scopeUid?: string;
|
|
25
|
+
}, mcpServerUrl?: string) => Promise<McpAlertRuleTrial>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
* Distributed under the terms of the Modified BSD License.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Trying a rule before trusting it.
|
|
11
|
+
*
|
|
12
|
+
* The gateway answers what a rule would see *right now*, recording nothing
|
|
13
|
+
* and telling nobody. The question worth asking is not what the number is
|
|
14
|
+
* but whether the condition can be **read at all**: a rule on something
|
|
15
|
+
* nothing reads never fires, and never firing is exactly what a
|
|
16
|
+
* correctly-quiet rule looks like — so writing one and waiting teaches
|
|
17
|
+
* nothing, for as long as somebody is willing to wait.
|
|
18
|
+
*
|
|
19
|
+
* @module api/mcp/alerts
|
|
20
|
+
*/
|
|
21
|
+
import { requestDatalayerAPI } from '../DatalayerApi.js';
|
|
22
|
+
import { DEFAULT_SERVICE_URLS } from '../constants.js';
|
|
23
|
+
import { mcpUrl } from './gateway.js';
|
|
24
|
+
/**
|
|
25
|
+
* What this rule would see now.
|
|
26
|
+
*
|
|
27
|
+
* The organization is the caller's own, whatever is sent — testing another
|
|
28
|
+
* organization's numbers is reading their numbers, and the gateway refuses
|
|
29
|
+
* to do it rather than trusting the body.
|
|
30
|
+
*/
|
|
31
|
+
export const testAlertRule = async (token, rule, mcpServerUrl = DEFAULT_SERVICE_URLS.JUPYTER_MCP_SERVER) => {
|
|
32
|
+
const response = await requestDatalayerAPI({
|
|
33
|
+
url: mcpUrl(mcpServerUrl, '/alerts/test'),
|
|
34
|
+
method: 'POST',
|
|
35
|
+
token,
|
|
36
|
+
body: {
|
|
37
|
+
condition: rule.condition,
|
|
38
|
+
operator: rule.operator,
|
|
39
|
+
threshold: rule.threshold,
|
|
40
|
+
window_seconds: rule.windowSeconds,
|
|
41
|
+
scope_kind: rule.scopeKind ?? 'organization',
|
|
42
|
+
scope_uid: rule.scopeUid ?? '',
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
readable: Boolean(response.readable),
|
|
47
|
+
value: response.value,
|
|
48
|
+
wouldFire: Boolean(response.would_fire),
|
|
49
|
+
detail: response.detail ?? '',
|
|
50
|
+
};
|
|
51
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { McpAuditDecision, McpAuditEventList, McpAuditExportFormat, McpAuditOutcome } from '../../models/McpAuditEvent';
|
|
2
|
+
export type { McpAuditDecision, McpAuditEvent, McpAuditEventList, McpAuditExportFormat, McpAuditOutcome, McpClientInfo, } from '../../models/McpAuditEvent';
|
|
3
|
+
export interface McpAuditFilters {
|
|
4
|
+
org?: string;
|
|
5
|
+
team?: string;
|
|
6
|
+
/** The `client_id` of the agent, or a service agent's uid. */
|
|
7
|
+
agent?: string;
|
|
8
|
+
user?: string;
|
|
9
|
+
tool?: string;
|
|
10
|
+
method?: string;
|
|
11
|
+
decision?: McpAuditDecision;
|
|
12
|
+
outcome?: McpAuditOutcome;
|
|
13
|
+
/** ISO 8601, UTC. */
|
|
14
|
+
since?: string;
|
|
15
|
+
until?: string;
|
|
16
|
+
taskId?: string;
|
|
17
|
+
traceId?: string;
|
|
18
|
+
cursor?: string;
|
|
19
|
+
limit?: number;
|
|
20
|
+
}
|
|
21
|
+
/** One page of audit rows, newest first. */
|
|
22
|
+
export declare const listAuditEvents: (token: string, filters?: McpAuditFilters, baseUrl?: string) => Promise<McpAuditEventList>;
|
|
23
|
+
/**
|
|
24
|
+
* The rows matching the filters, whole, as one JSONL or CSV document.
|
|
25
|
+
*
|
|
26
|
+
* The cursor of the filters is ignored: an export is everything the filters
|
|
27
|
+
* select, which is what a SIEM or a spreadsheet wants.
|
|
28
|
+
*/
|
|
29
|
+
export declare const exportAuditEvents: (token: string, filters?: Omit<McpAuditFilters, "cursor" | "limit">, format?: McpAuditExportFormat, baseUrl?: string) => Promise<string>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
* Distributed under the terms of the Modified BSD License.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The audit log of the Jupyter MCP Server, for `organization_security_auditor`s
|
|
11
|
+
* and owners: cursor-paged, exportable as JSONL or CSV.
|
|
12
|
+
*
|
|
13
|
+
* @module api/mcp/audit
|
|
14
|
+
*/
|
|
15
|
+
import { requestDatalayerAPI } from '../DatalayerApi.js';
|
|
16
|
+
import { DEFAULT_SERVICE_URLS } from '../constants.js';
|
|
17
|
+
import { fromWire, mcpUrl } from './gateway.js';
|
|
18
|
+
const auditQuery = (filters) => ({
|
|
19
|
+
org: filters.org,
|
|
20
|
+
team: filters.team,
|
|
21
|
+
agent: filters.agent,
|
|
22
|
+
user: filters.user,
|
|
23
|
+
tool: filters.tool,
|
|
24
|
+
method: filters.method,
|
|
25
|
+
decision: filters.decision,
|
|
26
|
+
outcome: filters.outcome,
|
|
27
|
+
since: filters.since,
|
|
28
|
+
until: filters.until,
|
|
29
|
+
task_id: filters.taskId,
|
|
30
|
+
trace_id: filters.traceId,
|
|
31
|
+
cursor: filters.cursor,
|
|
32
|
+
limit: filters.limit,
|
|
33
|
+
});
|
|
34
|
+
/** One page of audit rows, newest first. */
|
|
35
|
+
export const listAuditEvents = async (token, filters = {}, baseUrl = DEFAULT_SERVICE_URLS.JUPYTER_MCP_SERVER) => fromWire(await requestDatalayerAPI({
|
|
36
|
+
url: mcpUrl(baseUrl, '/audit', auditQuery(filters)),
|
|
37
|
+
method: 'GET',
|
|
38
|
+
token,
|
|
39
|
+
}));
|
|
40
|
+
/**
|
|
41
|
+
* The rows matching the filters, whole, as one JSONL or CSV document.
|
|
42
|
+
*
|
|
43
|
+
* The cursor of the filters is ignored: an export is everything the filters
|
|
44
|
+
* select, which is what a SIEM or a spreadsheet wants.
|
|
45
|
+
*/
|
|
46
|
+
export const exportAuditEvents = async (token, filters = {}, format = 'jsonl', baseUrl = DEFAULT_SERVICE_URLS.JUPYTER_MCP_SERVER) => {
|
|
47
|
+
const data = await requestDatalayerAPI({
|
|
48
|
+
url: mcpUrl(baseUrl, '/audit', { ...auditQuery(filters), export: format }),
|
|
49
|
+
method: 'GET',
|
|
50
|
+
token,
|
|
51
|
+
headers: { Accept: format === 'csv' ? 'text/csv' : 'application/x-ndjson' },
|
|
52
|
+
responseType: 'text',
|
|
53
|
+
});
|
|
54
|
+
return typeof data === 'string' ? data : JSON.stringify(data);
|
|
55
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { McpBinding, McpBindingKind, McpBindingList, McpBindingState } from '../../models/McpBinding';
|
|
2
|
+
export type { McpBinding, McpBindingKind, McpBindingList, McpBindingOnLost, McpBindingState, } from '../../models/McpBinding';
|
|
3
|
+
export interface McpBindingListFilters {
|
|
4
|
+
kind?: McpBindingKind;
|
|
5
|
+
state?: McpBindingState;
|
|
6
|
+
/** The `client_id` of the agent holding the handle. */
|
|
7
|
+
agent?: string;
|
|
8
|
+
org?: string;
|
|
9
|
+
cursor?: string;
|
|
10
|
+
limit?: number;
|
|
11
|
+
}
|
|
12
|
+
/** Every handle the caller holds, optionally of one kind. */
|
|
13
|
+
export declare const listBindings: (token: string, filters?: McpBindingListFilters, baseUrl?: string) => Promise<McpBindingList>;
|
|
14
|
+
/**
|
|
15
|
+
* Release a handle. For a sandbox binding this terminates the runtime; a
|
|
16
|
+
* notebook or toolset binding is simply forgotten.
|
|
17
|
+
*/
|
|
18
|
+
export declare const terminateBinding: (token: string, bindingUid: string, baseUrl?: string) => Promise<McpBinding>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
* Distributed under the terms of the Modified BSD License.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The caller's handles: notebooks, toolsets and the sandbox bindings that
|
|
11
|
+
* are their sessions.
|
|
12
|
+
*
|
|
13
|
+
* `DELETE /bindings/{uid}` on a sandbox binding terminates the runtime
|
|
14
|
+
* through Runtimes and ends the tasks running on it `SANDBOX_LOST`.
|
|
15
|
+
*
|
|
16
|
+
* @module api/mcp/bindings
|
|
17
|
+
*/
|
|
18
|
+
import { requestDatalayerAPI } from '../DatalayerApi.js';
|
|
19
|
+
import { DEFAULT_SERVICE_URLS } from '../constants.js';
|
|
20
|
+
import { fromWire, mcpUrl } from './gateway.js';
|
|
21
|
+
/** Every handle the caller holds, optionally of one kind. */
|
|
22
|
+
export const listBindings = async (token, filters = {}, baseUrl = DEFAULT_SERVICE_URLS.JUPYTER_MCP_SERVER) => fromWire(await requestDatalayerAPI({
|
|
23
|
+
url: mcpUrl(baseUrl, '/bindings', {
|
|
24
|
+
kind: filters.kind,
|
|
25
|
+
state: filters.state,
|
|
26
|
+
agent: filters.agent,
|
|
27
|
+
org: filters.org,
|
|
28
|
+
cursor: filters.cursor,
|
|
29
|
+
limit: filters.limit,
|
|
30
|
+
}),
|
|
31
|
+
method: 'GET',
|
|
32
|
+
token,
|
|
33
|
+
}));
|
|
34
|
+
/**
|
|
35
|
+
* Release a handle. For a sandbox binding this terminates the runtime; a
|
|
36
|
+
* notebook or toolset binding is simply forgotten.
|
|
37
|
+
*/
|
|
38
|
+
export const terminateBinding = async (token, bindingUid, baseUrl = DEFAULT_SERVICE_URLS.JUPYTER_MCP_SERVER) => fromWire(await requestDatalayerAPI({
|
|
39
|
+
url: mcpUrl(baseUrl, `/bindings/${encodeURIComponent(bindingUid)}`),
|
|
40
|
+
method: 'DELETE',
|
|
41
|
+
token,
|
|
42
|
+
}));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface McpForwardingState {
|
|
2
|
+
orgUid: string;
|
|
3
|
+
/** When a batch was last accepted by the destination. */
|
|
4
|
+
lastDeliveredAt?: string | null;
|
|
5
|
+
/** What the destination last said, when it refused. */
|
|
6
|
+
lastError?: string | null;
|
|
7
|
+
lastErrorAt?: string | null;
|
|
8
|
+
delivered: number;
|
|
9
|
+
failed: number;
|
|
10
|
+
/** Whether the last attempt succeeded. */
|
|
11
|
+
healthy: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface McpForwarding {
|
|
14
|
+
/**
|
|
15
|
+
* Whether anything has ever been delivered or attempted.
|
|
16
|
+
*
|
|
17
|
+
* Kept apart from `healthy` because "never attempted" and "working" read
|
|
18
|
+
* the same in a counter — and for an organization that configured a
|
|
19
|
+
* destination, the first is the worse state and the one that looks most
|
|
20
|
+
* like fine.
|
|
21
|
+
*/
|
|
22
|
+
configured: boolean;
|
|
23
|
+
state: McpForwardingState | null;
|
|
24
|
+
}
|
|
25
|
+
export declare const getMcpForwarding: (token: string, org?: string, mcpServerUrl?: string) => Promise<McpForwarding>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023-2025 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
* Distributed under the terms of the Modified BSD License.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Whether an organization's audit is reaching its own system of record.
|
|
11
|
+
*
|
|
12
|
+
* Forwarding never fails the call it describes — an audit row that could not
|
|
13
|
+
* be shipped is still a row, and holding up somebody's tool call because
|
|
14
|
+
* their SIEM is down would be the worse trade. Which means a failure is
|
|
15
|
+
* **invisible unless something reports it**, and a silently dropped record
|
|
16
|
+
* looks exactly like nothing having happened.
|
|
17
|
+
*
|
|
18
|
+
* This is that something.
|
|
19
|
+
*
|
|
20
|
+
* @module api/mcp/forwarding
|
|
21
|
+
*/
|
|
22
|
+
import { requestDatalayerAPI } from '../DatalayerApi.js';
|
|
23
|
+
import { DEFAULT_SERVICE_URLS } from '../constants.js';
|
|
24
|
+
import { mcpUrl } from './gateway.js';
|
|
25
|
+
export const getMcpForwarding = async (token, org = '', mcpServerUrl = DEFAULT_SERVICE_URLS.JUPYTER_MCP_SERVER) => {
|
|
26
|
+
const response = await requestDatalayerAPI({
|
|
27
|
+
url: mcpUrl(mcpServerUrl, '/audit/forwarding', org ? { org } : {}),
|
|
28
|
+
method: 'GET',
|
|
29
|
+
token,
|
|
30
|
+
});
|
|
31
|
+
const wire = response.state;
|
|
32
|
+
return {
|
|
33
|
+
configured: Boolean(response.configured),
|
|
34
|
+
state: wire
|
|
35
|
+
? {
|
|
36
|
+
orgUid: wire.org_uid ?? '',
|
|
37
|
+
lastDeliveredAt: wire.last_delivered_at ?? null,
|
|
38
|
+
lastError: wire.last_error ?? null,
|
|
39
|
+
lastErrorAt: wire.last_error_at ?? null,
|
|
40
|
+
delivered: wire.delivered ?? 0,
|
|
41
|
+
failed: wire.failed ?? 0,
|
|
42
|
+
healthy: Boolean(wire.healthy),
|
|
43
|
+
}
|
|
44
|
+
: null,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** The host and scheme of the gateway, without the `/mcp` resource path. */
|
|
2
|
+
export declare const mcpGatewayOrigin: (mcpServerUrl?: string) => string;
|
|
3
|
+
export type McpQuery = Record<string, string | number | boolean | undefined | null>;
|
|
4
|
+
/** A REST route of the gateway, with its query string. */
|
|
5
|
+
export declare const mcpUrl: (mcpServerUrl: string, suffix: string, query?: McpQuery) => string;
|
|
6
|
+
/** A route outside the versioned API: `/api/mcp/version`, `/api/mcp/healthz`. */
|
|
7
|
+
export declare const mcpServiceUrl: (mcpServerUrl: string, suffix: string) => string;
|
|
8
|
+
/**
|
|
9
|
+
* A wire document as a model: snake case to camel case through the envelope,
|
|
10
|
+
* the preserved fields carried as they came.
|
|
11
|
+
*/
|
|
12
|
+
export declare const fromWire: <T>(value: unknown) => T;
|
|
13
|
+
/** A request body as the gateway reads it. */
|
|
14
|
+
export declare const toWire: (value: unknown) => unknown;
|
|
15
|
+
/** For the few answers with no tool-owned field, the Contents converter as is. */
|
|
16
|
+
export declare const fromWireStrict: <T>(value: unknown) => T;
|