@undefineds.co/xpod 0.4.11 → 0.4.13
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/config/components-ignore.json +5 -1
- package/config/notifications.json +68 -0
- package/config/xpod.base.json +9 -11
- package/dist/acceptance/QleverSemanticConformance.js +7 -0
- package/dist/ai/service/AiCredentialSecret.d.ts +30 -0
- package/dist/ai/service/AiCredentialSecret.js +120 -0
- package/dist/ai/service/CredentialReaderImpl.d.ts +18 -0
- package/dist/ai/service/CredentialReaderImpl.js +81 -5
- package/dist/ai/service/CredentialReaderImpl.jsonld +42 -2
- package/dist/ai/service/EmbeddingModelPolicy.d.ts +79 -0
- package/dist/ai/service/EmbeddingModelPolicy.js +134 -0
- package/dist/ai/service/EmbeddingProviderError.js +6 -0
- package/dist/ai/service/EmbeddingServiceImpl.d.ts +13 -1
- package/dist/ai/service/EmbeddingServiceImpl.js +18 -5
- package/dist/ai/service/EmbeddingServiceImpl.jsonld +35 -0
- package/dist/ai/service/index.d.ts +2 -0
- package/dist/ai/service/index.js +2 -0
- package/dist/api/ai-gateway/connect/index.d.ts +20 -2
- package/dist/api/ai-gateway/connect/index.js +162 -16
- package/dist/api/ai-gateway/credentials/AiCredentialSecretDecoder.d.ts +12 -0
- package/dist/api/ai-gateway/credentials/AiCredentialSecretDecoder.js +30 -0
- package/dist/api/ai-gateway/errors.d.ts +1 -1
- package/dist/api/ai-gateway/models/GatewayEmbeddingModelCatalog.d.ts +11 -0
- package/dist/api/ai-gateway/models/GatewayEmbeddingModelCatalog.js +31 -0
- package/dist/api/ai-gateway/models/PodModelSelectionRepository.js +7 -3
- package/dist/api/ai-gateway/models/ProviderCustomModelsService.d.ts +18 -0
- package/dist/api/ai-gateway/models/ProviderCustomModelsService.js +23 -0
- package/dist/api/ai-gateway/models/ProviderModelDiscoveryAdapters.d.ts +3 -1
- package/dist/api/ai-gateway/models/ProviderModelDiscoveryAdapters.js +2 -45
- package/dist/api/ai-gateway/models/ProviderModelSelectionService.d.ts +10 -0
- package/dist/api/ai-gateway/models/ProviderModelSelectionService.js +57 -20
- package/dist/api/ai-gateway/models/ProviderModelType.d.ts +28 -0
- package/dist/api/ai-gateway/models/ProviderModelType.js +34 -0
- package/dist/api/ai-gateway/models/ProviderModelsAdapter.d.ts +10 -0
- package/dist/api/ai-gateway/models/ProviderModelsAdapter.js +3 -4
- package/dist/api/ai-gateway/models/index.d.ts +1 -0
- package/dist/api/ai-gateway/models/index.js +3 -1
- package/dist/api/ai-gateway/providers/CustomRuntimeAdapter.d.ts +7 -0
- package/dist/api/ai-gateway/providers/CustomRuntimeAdapter.js +9 -2
- package/dist/api/ai-gateway/providers/ModelsDevCatalog.d.ts +7 -1
- package/dist/api/ai-gateway/providers/ModelsDevCatalog.js +4 -10
- package/dist/api/ai-gateway/providers/OfferingAuthorization.d.ts +6 -1
- package/dist/api/ai-gateway/providers/OfferingAuthorization.js +0 -3
- package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +107 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.js +246 -23
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +5 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +5 -1
- package/dist/api/ai-gateway/quota/SubscriptionQuotaAdapters.d.ts +12 -4
- package/dist/api/ai-gateway/quota/SubscriptionQuotaAdapters.js +11 -11
- package/dist/api/ai-gateway/routing/ModelRouter.d.ts +14 -0
- package/dist/api/ai-gateway/routing/ModelRouter.js +43 -4
- package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.d.ts +9 -1
- package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.js +3 -27
- package/dist/api/chatkit/pod-store.d.ts +31 -0
- package/dist/api/chatkit/pod-store.js +132 -8
- package/dist/api/container/common.js +24 -4
- package/dist/api/container/routes.js +17 -2
- package/dist/api/container/types.d.ts +3 -1
- package/dist/api/handlers/AdminHandler.d.ts +13 -0
- package/dist/api/handlers/AdminHandler.js +47 -18
- package/dist/api/handlers/AiConfigHandler.d.ts +6 -0
- package/dist/api/handlers/AiConfigHandler.js +28 -0
- package/dist/api/handlers/AiGatewayManagementHandler.js +36 -0
- package/dist/api/runs/RdfRunContextRetriever.d.ts +14 -0
- package/dist/api/runs/RdfRunContextRetriever.js +41 -5
- package/dist/api/runtime.js +2 -1
- package/dist/api/service/AiClientConfigurationService.d.ts +1 -1
- package/dist/api/service/AiClientConfigurationService.js +1 -1
- package/dist/cli/commands/secret.d.ts +1 -0
- package/dist/cli/commands/secret.js +25 -7
- package/dist/components/components.jsonld +3 -1
- package/dist/components/context.jsonld +53 -1
- package/dist/http/SubgraphSparqlHttpHandler.d.ts +59 -2
- package/dist/http/SubgraphSparqlHttpHandler.js +145 -13
- package/dist/http/SubgraphSparqlHttpHandler.jsonld +37 -0
- package/dist/identity/drizzle/EdgeNodeRepository.d.ts +0 -12
- package/dist/identity/drizzle/EdgeNodeRepository.js +5 -13
- package/dist/index.d.ts +2 -1
- package/dist/index.js +7 -3
- package/dist/logging/log-file.d.ts +17 -0
- package/dist/logging/log-file.js +69 -0
- package/dist/main.js +2 -1
- package/dist/notifications/NotificationChannelSweeper.d.ts +50 -0
- package/dist/notifications/NotificationChannelSweeper.js +131 -0
- package/dist/notifications/NotificationChannelSweeper.jsonld +136 -0
- package/dist/notifications/ReclaimingWebSocket2023Storer.d.ts +25 -0
- package/dist/notifications/ReclaimingWebSocket2023Storer.js +56 -0
- package/dist/notifications/ReclaimingWebSocket2023Storer.jsonld +77 -0
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.js +2 -0
- package/dist/runtime/Proxy.d.ts +37 -0
- package/dist/runtime/Proxy.js +88 -16
- package/dist/runtime/bootstrap.js +2 -1
- package/dist/runtime/upgrade/BunNativeUpgradeRelay.d.ts +116 -0
- package/dist/runtime/upgrade/BunNativeUpgradeRelay.js +423 -0
- package/dist/runtime/upgrade/UpgradeHandshake.d.ts +63 -0
- package/dist/runtime/upgrade/UpgradeHandshake.js +199 -0
- package/dist/runtime/upgrade/WebSocketFrames.d.ts +67 -0
- package/dist/runtime/upgrade/WebSocketFrames.js +224 -0
- package/dist/storage/rdf/PostgresRdfEngine.js +10 -4
- package/dist/storage/rdf/RdfAccessScope.js +15 -1
- package/dist/storage/rdf/RdfEngineRdfJsSource.js +10 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.js +9 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.d.ts +12 -3
- package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.js +27 -10
- package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.d.ts +7 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.js +15 -13
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.js +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsList.js +10 -6
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.d.ts +15 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.js +29 -3
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMainHeader.js +18 -3
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.d.ts +17 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.js +94 -22
- package/node_modules/@undefineds.co/ai-connections/dist/AiCopyButton.d.ts +35 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiCopyButton.js +45 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.js +71 -11
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialRow.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialRow.js +9 -7
- package/node_modules/@undefineds.co/ai-connections/dist/AiCustomProviderDialog.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiEndpointList.d.ts +23 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiEndpointList.js +24 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeyRow.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.d.ts +14 -5
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.js +35 -38
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.d.ts +21 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.js +51 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiInfoTooltip.d.ts +15 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiInfoTooltip.js +16 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiModelCatalog.d.ts +175 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiModelCatalog.js +133 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiOfferingDetails.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiOfferingDetails.js +2 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.js +13 -64
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderHeader.d.ts +21 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderHeader.js +12 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiQuotaCard.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiRowAction.d.ts +15 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiRowAction.js +12 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.js +2 -1
- package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.d.ts +39 -6
- package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.js +57 -11
- package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.d.ts +46 -0
- package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.js +231 -0
- package/node_modules/@undefineds.co/ai-connections/dist/collections.d.ts +119 -0
- package/node_modules/@undefineds.co/ai-connections/dist/collections.js +173 -0
- package/node_modules/@undefineds.co/ai-connections/dist/controller.d.ts +71 -5
- package/node_modules/@undefineds.co/ai-connections/dist/controller.js +288 -18
- package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.d.ts +6 -1
- package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.js +8 -3
- package/node_modules/@undefineds.co/ai-connections/dist/display-wording.d.ts +20 -0
- package/node_modules/@undefineds.co/ai-connections/dist/display-wording.js +73 -0
- package/node_modules/@undefineds.co/ai-connections/dist/error-wording.d.ts +24 -0
- package/node_modules/@undefineds.co/ai-connections/dist/error-wording.js +253 -0
- package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.js +20 -0
- package/node_modules/@undefineds.co/ai-connections/dist/index.d.ts +8 -1
- package/node_modules/@undefineds.co/ai-connections/dist/index.js +8 -1
- package/node_modules/@undefineds.co/ai-connections/dist/manifest.js +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.d.ts +15 -1
- package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.js +17 -0
- package/node_modules/@undefineds.co/ai-connections/dist/offering-label.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.d.ts +6 -1
- package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.js +5 -0
- package/node_modules/@undefineds.co/ai-connections/dist/service-access.js +2 -27
- package/node_modules/@undefineds.co/ai-connections/dist/useAiConnectDialog.d.ts +1 -1
- package/node_modules/@undefineds.co/ai-connections/package.json +2 -24
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/ai-connections-client.d.ts +12 -3
- package/node_modules/@undefineds.co/ai-connections-core/dist/ai-connections-client.js +21 -0
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/normalize.d.ts +17 -7
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/normalize.js +48 -216
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/request.js +3 -3
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/types.d.ts +31 -2
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/base-adapter.d.ts +1 -3
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/base-adapter.js +3 -7
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.cjs +9 -7
- package/node_modules/@undefineds.co/ai-connections-core/dist/credential-storage.d.ts +59 -0
- package/node_modules/@undefineds.co/ai-connections-core/dist/credential-storage.js +131 -0
- package/node_modules/@undefineds.co/ai-connections-core/dist/endpoint-urls.d.ts +15 -0
- package/node_modules/@undefineds.co/ai-connections-core/dist/endpoint-urls.js +20 -0
- package/node_modules/@undefineds.co/ai-connections-core/dist/index.d.ts +9 -0
- package/node_modules/@undefineds.co/ai-connections-core/dist/index.js +9 -0
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/provider-catalog.cjs +68 -24
- package/node_modules/@undefineds.co/ai-connections-core/dist/provider-catalog.d.ts +84 -0
- package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/provider-catalog.js +121 -22
- package/node_modules/@undefineds.co/ai-connections-core/package.json +61 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +1 -1
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +2 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +150 -0
- package/node_modules/@undefineds.co/extension-sdk/package.json +2 -1
- package/node_modules/@undefineds.co/models/README.md +1 -1
- package/node_modules/@undefineds.co/models/dist/ai-config/index.d.ts +3 -3
- package/node_modules/@undefineds.co/models/dist/ai-gateway.schema.d.ts +5 -0
- package/node_modules/@undefineds.co/models/dist/ai-gateway.schema.js +9 -0
- package/node_modules/@undefineds.co/models/dist/ai-runtime.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/approval.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/audit.presentation.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/capture.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/chat-project.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/chat.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/control-request.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/conversation-share.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/credential.schema.d.ts +12 -0
- package/node_modules/@undefineds.co/models/dist/credential.schema.js +15 -1
- package/node_modules/@undefineds.co/models/dist/discovery/index.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/discovery/providers.json +248 -7
- package/node_modules/@undefineds.co/models/dist/discovery/types.d.ts +31 -0
- package/node_modules/@undefineds.co/models/dist/extension/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/favorite/index.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/fixtures/contracts-chat-contact.d.ts +5 -5
- package/node_modules/@undefineds.co/models/dist/import/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/index.d.ts +73 -73
- package/node_modules/@undefineds.co/models/dist/index.js +1 -1
- package/node_modules/@undefineds.co/models/dist/input-request.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/knowledge/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/message.repository.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/namespaces.js +5 -0
- package/node_modules/@undefineds.co/models/dist/pod-storage-descriptor.d.ts +4815 -26
- package/node_modules/@undefineds.co/models/dist/pod-storage-descriptor.js +482 -132
- package/node_modules/@undefineds.co/models/dist/schema.d.ts +4 -0
- package/node_modules/@undefineds.co/models/dist/session/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/settings/index.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/sidecar/persistence-mapping.d.ts +5 -5
- package/node_modules/@undefineds.co/models/dist/thread.repository.d.ts +2 -2
- package/node_modules/@undefineds.co/models/dist/types/message-block.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/vocab/_namespaces.d.ts +1 -1
- package/node_modules/@undefineds.co/models/dist/vocab/index.d.ts +10 -10
- package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.d.ts +1 -0
- package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.js +1 -0
- package/node_modules/@undefineds.co/models/package.json +4 -2
- package/node_modules/@undefineds.co/pod-collections/README.md +71 -0
- package/node_modules/@undefineds.co/pod-collections/dist/diff.d.ts +85 -0
- package/node_modules/@undefineds.co/pod-collections/dist/diff.js +166 -0
- package/node_modules/@undefineds.co/pod-collections/dist/feed.d.ts +17 -0
- package/node_modules/@undefineds.co/pod-collections/dist/feed.js +27 -0
- package/node_modules/@undefineds.co/pod-collections/dist/index.cjs +1042 -0
- package/node_modules/@undefineds.co/pod-collections/dist/index.d.ts +37 -0
- package/node_modules/@undefineds.co/pod-collections/dist/index.js +89 -0
- package/node_modules/@undefineds.co/pod-collections/dist/layout.d.ts +75 -0
- package/node_modules/@undefineds.co/pod-collections/dist/layout.js +173 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mapping.d.ts +78 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mapping.js +287 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mutations.d.ts +83 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mutations.js +273 -0
- package/node_modules/@undefineds.co/pod-collections/dist/react.d.ts +21 -0
- package/node_modules/@undefineds.co/pod-collections/dist/react.js +22 -0
- package/node_modules/@undefineds.co/pod-collections/dist/read.d.ts +65 -0
- package/node_modules/@undefineds.co/pod-collections/dist/read.js +31 -0
- package/node_modules/@undefineds.co/pod-collections/dist/sync.d.ts +66 -0
- package/node_modules/@undefineds.co/pod-collections/dist/sync.js +260 -0
- package/node_modules/@undefineds.co/pod-collections/dist/types.d.ts +155 -0
- package/node_modules/@undefineds.co/pod-collections/dist/types.js +9 -0
- package/node_modules/@undefineds.co/pod-collections/package.json +42 -0
- package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +4 -2
- package/node_modules/@undefineds.co/shared-ui/dist/index.js +4 -2
- package/node_modules/@undefineds.co/shared-ui/dist/login/LoginModal.d.ts +4 -1
- package/node_modules/@undefineds.co/shared-ui/dist/login/LoginModal.js +12 -6
- package/node_modules/@undefineds.co/shared-ui/dist/login/LoginView.d.ts +1 -1
- package/node_modules/@undefineds.co/shared-ui/dist/login/host-types.d.ts +7 -1
- package/node_modules/@undefineds.co/shared-ui/dist/login/login-branding.d.ts +6 -0
- package/node_modules/@undefineds.co/shared-ui/dist/login/login-branding.js +18 -0
- package/node_modules/@undefineds.co/shared-ui/dist/user-facing-errors.d.ts +14 -2
- package/node_modules/@undefineds.co/shared-ui/dist/user-facing-errors.js +26 -17
- package/node_modules/@undefineds.co/solid-sdk/dist/login-store.d.ts +3 -3
- package/node_modules/@undefineds.co/solid-sdk/dist/login-store.js +3 -3
- package/package.json +17 -7
- package/static/app/assets/main.css +1 -1
- package/static/auth-callback/assets/AiConfigContext-DlFyEWy9.js +1 -0
- package/static/auth-callback/assets/AiConfigPage-CkYk-SFW.js +1 -0
- package/static/auth-callback/assets/DocumentProcessingPanel-CqIr3JqN.js +1 -0
- package/static/auth-callback/assets/IndexLifecyclePanel-C1GKV3Vx.js +1 -0
- package/static/auth-callback/assets/{IndexSubjectPanel-BbUqop4b.js → IndexSubjectPanel-ro9lC6XW.js} +1 -1
- package/static/auth-callback/assets/ModelAssignmentsPanel-DxNdyKRJ.js +1 -0
- package/static/auth-callback/assets/ModelsPage-BVtWSPBU.js +11 -0
- package/static/auth-callback/assets/{NetworkPage-Vp2PrMxs.js → NetworkPage-cEvxRMAl.js} +2 -2
- package/static/auth-callback/assets/{PaneListHeader-DY7baSFl.js → PaneListHeader-ByKw8ada.js} +1 -1
- package/static/auth-callback/assets/SearchIndexingPanel-CulBKcYT.js +1 -0
- package/static/auth-callback/assets/{StatusSubjectPanel-ArIS-TxT.js → StatusSubjectPanel-VOcfrt8o.js} +1 -1
- package/static/{settings/assets/StatusWorkspace-CoMFRXoV.js → auth-callback/assets/StatusWorkspace-Jsz6hAdE.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsPage-BDvT1NUz.js → SystemSettingsPage-BFNvGAle.js} +1 -1
- package/static/{dashboard/assets/SystemSettingsSubjectPanel-WaE8mTQi.js → auth-callback/assets/SystemSettingsSubjectPanel-DFRdrSfK.js} +5 -5
- package/static/auth-callback/assets/XpodAiConnectionsPodStore-C6KpvHVg.js +3 -0
- package/static/auth-callback/assets/{activity-D1Dsfa_0.js → activity-DnTlb9iM.js} +1 -1
- package/static/auth-callback/assets/ai-connections-C6yaE6WQ.js +1 -0
- package/static/auth-callback/assets/auth-callback-Cx9D_1qj.css +1 -0
- package/static/auth-callback/assets/{auth-callback-Cmf4hXVZ.js → auth-callback-D2UkK5Xj.js} +6 -6
- package/static/auth-callback/assets/{badge-CZsHq3Ih.js → badge-D7IJuuTM.js} +1 -1
- package/static/auth-callback/assets/collection-runtime-wT1n4GS2.js +1 -0
- package/static/auth-callback/assets/dialog-DickLu5z.js +1 -0
- package/static/auth-callback/assets/{download-DU9ntlHw.js → download-kn8WnRu3.js} +1 -1
- package/static/auth-callback/assets/{external-link-BfzaaZDx.js → external-link-B6B8jfSn.js} +1 -1
- package/static/auth-callback/assets/index-Cu0EguPo.js +4 -0
- package/static/auth-callback/assets/index-DHF97YLP.js +41 -0
- package/static/auth-callback/assets/index-Dz83EEHD.js +1 -0
- package/static/auth-callback/assets/{index-browser-BNFqqC74.js → index-browser-CSghinyi.js} +1 -1
- package/static/auth-callback/assets/{key-round-BwP3DBWo.js → key-round-ChkOx3E1.js} +1 -1
- package/static/auth-callback/assets/layout-DB3pMyTl.js +1 -0
- package/static/auth-callback/assets/pod-collections-host-KnnGFZHL.js +8 -0
- package/static/auth-callback/assets/{rotate-ccw-VMwnmyab.js → rotate-ccw-B3hE-nyd.js} +1 -1
- package/static/auth-callback/assets/{skeleton-CoD55rBT.js → skeleton-kEqR7tpI.js} +1 -1
- package/static/auth-callback/assets/{waypoints-DRo_1Ca7.js → waypoints-D6Jo-SZa.js} +1 -1
- package/static/auth-callback/assets/{workspace-layout--mcXl3My.js → workspace-layout-BHwT_cHd.js} +1 -1
- package/static/auth-callback/auth-callback.html +2 -2
- package/static/dashboard/assets/AiConfigContext-BfC3v-x2.js +1 -0
- package/static/dashboard/assets/AiConfigPage-QNS3u7Ff.js +1 -0
- package/static/dashboard/assets/DocumentProcessingPanel-Dr4XLeT4.js +1 -0
- package/static/dashboard/assets/IndexLifecyclePanel-KtM_gpeO.js +1 -0
- package/static/dashboard/assets/{IndexSubjectPanel-B2cXwl8X.js → IndexSubjectPanel-DLaiKdLc.js} +1 -1
- package/static/dashboard/assets/ModelAssignmentsPanel-Bk7TvQRq.js +1 -0
- package/static/dashboard/assets/ModelsPage-Cci3vlos.js +11 -0
- package/static/dashboard/assets/{NetworkPage-DV2V0qWO.js → NetworkPage-Ot4G2dX5.js} +2 -2
- package/static/dashboard/assets/{PaneListHeader-D0c1yCFH.js → PaneListHeader-qHME_s08.js} +1 -1
- package/static/dashboard/assets/SearchIndexingPanel-HZPKj8H9.js +1 -0
- package/static/dashboard/assets/{StatusSubjectPanel-oPSECj7i.js → StatusSubjectPanel-ij7IpI8d.js} +1 -1
- package/static/dashboard/assets/{StatusWorkspace-PdovQPKa.js → StatusWorkspace-Cp02JcaN.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsPage-CtNDklkx.js → SystemSettingsPage-BSeuvb8X.js} +1 -1
- package/static/{settings/assets/SystemSettingsSubjectPanel-DExjDo_v.js → dashboard/assets/SystemSettingsSubjectPanel-CP4_luGS.js} +5 -5
- package/static/dashboard/assets/XpodAiConnectionsPodStore-urO6zaHL.js +18 -0
- package/static/dashboard/assets/{activity-B9ylSoyr.js → activity-DxjgQNvr.js} +1 -1
- package/static/dashboard/assets/ai-connections-CXp5gd1J.js +1 -0
- package/static/dashboard/assets/{badge-BNbFbpIb.js → badge-53qCrRbl.js} +1 -1
- package/static/dashboard/assets/collection-runtime-BPAmHG46.js +1 -0
- package/static/dashboard/assets/{dashboard-CD-FFVRD.js → dashboard-BcT2ByXw.js} +4 -4
- package/static/dashboard/assets/dashboard-Cx9D_1qj.css +1 -0
- package/static/dashboard/assets/dialog-B28YtNhS.js +1 -0
- package/static/dashboard/assets/{download-nOP38LtW.js → download-DkLNceJ4.js} +1 -1
- package/static/dashboard/assets/{external-link-Bh2ewN9E.js → external-link-D3TXnlo3.js} +1 -1
- package/static/dashboard/assets/index-CFIenkeK.js +41 -0
- package/static/dashboard/assets/index-CIiBu9mr.js +1 -0
- package/static/dashboard/assets/index-Gp3cLolR.js +4 -0
- package/static/dashboard/assets/{key-round-bGmguBLv.js → key-round-B5ccp6nx.js} +1 -1
- package/static/dashboard/assets/layout-DB3pMyTl.js +1 -0
- package/static/dashboard/assets/pod-collections-host-KnnGFZHL.js +8 -0
- package/static/dashboard/assets/{rotate-ccw-D2x__ODW.js → rotate-ccw-DUpfkNnk.js} +1 -1
- package/static/dashboard/assets/{skeleton-VOqft8WS.js → skeleton-BRe19fO0.js} +1 -1
- package/static/dashboard/assets/{waypoints-fgRqm4oH.js → waypoints-BKDMxEvu.js} +1 -1
- package/static/dashboard/assets/{workspace-layout-DV4dgeHX.js → workspace-layout-ZTF7C16h.js} +1 -1
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/AiConfigContext-DsyWgu2i.js +1 -0
- package/static/settings/assets/AiConfigPage-CSCBckKo.js +1 -0
- package/static/settings/assets/DocumentProcessingPanel-w9yQDbBe.js +1 -0
- package/static/settings/assets/IndexLifecyclePanel-CUUXI8mP.js +1 -0
- package/static/settings/assets/{IndexSubjectPanel-BgbI9c-a.js → IndexSubjectPanel-BypAU5TJ.js} +1 -1
- package/static/settings/assets/ModelAssignmentsPanel-BetgXw1G.js +1 -0
- package/static/settings/assets/ModelsPage-DZpTlTZ3.js +11 -0
- package/static/settings/assets/{NetworkPage-C8OA9Mtp.js → NetworkPage-BVkasFGM.js} +2 -2
- package/static/settings/assets/{PaneListHeader-COvlPJWj.js → PaneListHeader-BGOqGec4.js} +1 -1
- package/static/settings/assets/SearchIndexingPanel-DYAbpZ_9.js +1 -0
- package/static/settings/assets/{StatusSubjectPanel-BuLml7qn.js → StatusSubjectPanel-CFgzeQ8Q.js} +1 -1
- package/static/settings/assets/StatusWorkspace-4Z6g4Jvv.js +1 -0
- package/static/settings/assets/{SystemSettingsPage-DlzmaWV-.js → SystemSettingsPage-C1tlrgvI.js} +1 -1
- package/static/{auth-callback/assets/SystemSettingsSubjectPanel-CDqRuC4t.js → settings/assets/SystemSettingsSubjectPanel-CcURI-1L.js} +5 -5
- package/static/settings/assets/XpodAiConnectionsPodStore-owBQc5nY.js +3 -0
- package/static/settings/assets/{activity-TLerXgMs.js → activity-CtBc9cNy.js} +1 -1
- package/static/settings/assets/ai-connections-C6yaE6WQ.js +1 -0
- package/static/settings/assets/{badge-Bcs8iWrH.js → badge--r-FDIhU.js} +1 -1
- package/static/settings/assets/collection-runtime-CnhPmwAM.js +1 -0
- package/static/settings/assets/dialog-B7ZRsjN7.js +1 -0
- package/static/settings/assets/{download-Ct3QmHPt.js → download-DgQ1F8QR.js} +1 -1
- package/static/settings/assets/{external-link-C8KiHbss.js → external-link-Bz7NckNO.js} +1 -1
- package/static/settings/assets/index-BdXwm8nh.js +4 -0
- package/static/settings/assets/index-CkGda_Pg.js +41 -0
- package/static/settings/assets/index-Vv-8Vslg.js +1 -0
- package/static/settings/assets/{index-browser-CazX1pc2.js → index-browser-Dq7omlpY.js} +1 -1
- package/static/settings/assets/{key-round-B19YD1GA.js → key-round-CvuhloKV.js} +1 -1
- package/static/settings/assets/layout-DB3pMyTl.js +1 -0
- package/static/settings/assets/pod-collections-host-KnnGFZHL.js +8 -0
- package/static/settings/assets/{rotate-ccw-AQm2kMgU.js → rotate-ccw-DgFKDaz7.js} +1 -1
- package/static/settings/assets/{settings-C-VBtt9r.js → settings-BvqY7K96.js} +5 -5
- package/static/settings/assets/settings-Cx9D_1qj.css +1 -0
- package/static/settings/assets/{skeleton-DyZ1OBYf.js → skeleton-D3OeFDF6.js} +1 -1
- package/static/settings/assets/{waypoints-CC3wq-SU.js → waypoints-C4WbspTb.js} +1 -1
- package/static/settings/assets/{workspace-layout-BxXNKgf9.js → workspace-layout-B9H1Tqrk.js} +1 -1
- package/static/settings/settings.html +2 -2
- package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.js +0 -13
- package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.d.ts +0 -9
- package/static/auth-callback/assets/AiConfigContext-DqWRSm7n.js +0 -1
- package/static/auth-callback/assets/AiConfigPage-C5YYyvzl.js +0 -1
- package/static/auth-callback/assets/DocumentProcessingPanel-DZCiacBz.js +0 -1
- package/static/auth-callback/assets/IndexLifecyclePanel-CCLeOljB.js +0 -1
- package/static/auth-callback/assets/ModelAssignmentsPanel-jUUTDKuh.js +0 -1
- package/static/auth-callback/assets/ModelsPage-B08zdtff.js +0 -10
- package/static/auth-callback/assets/SearchIndexingPanel-D4YRg1-8.js +0 -1
- package/static/auth-callback/assets/StatusWorkspace-Cp5LQ9Yx.js +0 -1
- package/static/auth-callback/assets/ai-connections-CHNTKemd.js +0 -1
- package/static/auth-callback/assets/auth-callback-DWMMiFjh.css +0 -1
- package/static/auth-callback/assets/index-DSNnLUbU.js +0 -4
- package/static/auth-callback/assets/index-FHhHoKgp.js +0 -41
- package/static/dashboard/assets/AiConfigContext-BpPDKSzI.js +0 -1
- package/static/dashboard/assets/AiConfigPage-wsqEZDIX.js +0 -1
- package/static/dashboard/assets/DocumentProcessingPanel-CDSy3juc.js +0 -1
- package/static/dashboard/assets/IndexLifecyclePanel-CVd6vQCX.js +0 -1
- package/static/dashboard/assets/ModelAssignmentsPanel-BeBZhnQd.js +0 -1
- package/static/dashboard/assets/ModelsPage-B6McSCJw.js +0 -25
- package/static/dashboard/assets/SearchIndexingPanel-CGs0OZ12.js +0 -1
- package/static/dashboard/assets/ai-connections-CHNTKemd.js +0 -1
- package/static/dashboard/assets/dashboard-DWMMiFjh.css +0 -1
- package/static/dashboard/assets/index-PgS-Bt7X.js +0 -41
- package/static/dashboard/assets/index-QN2QgEwr.js +0 -4
- package/static/settings/assets/AiConfigContext-zKQYdfai.js +0 -1
- package/static/settings/assets/AiConfigPage-Bs1EE3Ei.js +0 -1
- package/static/settings/assets/DocumentProcessingPanel-CSFfdOXS.js +0 -1
- package/static/settings/assets/IndexLifecyclePanel-BR9Su49B.js +0 -1
- package/static/settings/assets/ModelAssignmentsPanel-C0BE7nbk.js +0 -1
- package/static/settings/assets/ModelsPage-CU-YQ8_7.js +0 -10
- package/static/settings/assets/SearchIndexingPanel-Bdd46mIV.js +0 -1
- package/static/settings/assets/ai-connections-CHNTKemd.js +0 -1
- package/static/settings/assets/index-1Q2cRjZd.js +0 -41
- package/static/settings/assets/index-DBO_Vq0P.js +0 -4
- package/static/settings/assets/settings-DWMMiFjh.css +0 -1
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/request.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/types.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/codex.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/codex.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/json-env-adapter.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/json-env-adapter.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/pi.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/pi.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/transaction.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/transaction.js +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/types.d.ts +0 -0
- /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/types.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HttpHandler } from '@solid/community-server';
|
|
2
2
|
import type { HttpHandlerInput, HttpRequest, HttpResponse } from '@solid/community-server';
|
|
3
|
-
import type { CredentialsExtractor, PermissionReader, Authorizer } from '@solid/community-server';
|
|
3
|
+
import type { ActivityEmitter, CredentialsExtractor, PermissionReader, Authorizer } from '@solid/community-server';
|
|
4
4
|
import { SubgraphQueryEngine } from '../storage/sparql/SubgraphQueryEngine';
|
|
5
5
|
import { MixDataAccessor } from '../storage/accessors/MixDataAccessor';
|
|
6
6
|
interface SubgraphSparqlHttpHandlerOptions {
|
|
@@ -41,9 +41,10 @@ export declare class SubgraphSparqlHttpHandler extends HttpHandler {
|
|
|
41
41
|
private readonly usageRepo?;
|
|
42
42
|
private readonly defaultBandwidthLimit?;
|
|
43
43
|
private readonly updateAuthority?;
|
|
44
|
+
private readonly emitter?;
|
|
44
45
|
private readonly generator;
|
|
45
46
|
private static readonly XSD_STRING;
|
|
46
|
-
constructor(queryEngine: SubgraphQueryEngine, credentialsExtractor: CredentialsExtractor, permissionReader: PermissionReader, authorizer: Authorizer, options?: SubgraphSparqlHttpHandlerOptions, updateAuthority?: MixDataAccessor);
|
|
47
|
+
constructor(queryEngine: SubgraphQueryEngine, credentialsExtractor: CredentialsExtractor, permissionReader: PermissionReader, authorizer: Authorizer, options?: SubgraphSparqlHttpHandlerOptions, updateAuthority?: MixDataAccessor, emitter?: ActivityEmitter);
|
|
47
48
|
canHandle({ request }: HttpHandlerInput): Promise<void>;
|
|
48
49
|
handle({ request, response }: HttpHandlerInput): Promise<void>;
|
|
49
50
|
/**
|
|
@@ -60,6 +61,55 @@ export declare class SubgraphSparqlHttpHandler extends HttpHandler {
|
|
|
60
61
|
private executeAsk;
|
|
61
62
|
private executeConstruct;
|
|
62
63
|
private executeUpdate;
|
|
64
|
+
/**
|
|
65
|
+
* Turns the write targets of an update access plan into the activities that should be emitted.
|
|
66
|
+
*
|
|
67
|
+
* Only documents actually written by the update (the plan's `writeTargets`) are considered:
|
|
68
|
+
* one activity per document, never per quad and never for an untouched resource.
|
|
69
|
+
*/
|
|
70
|
+
private resolvePendingActivities;
|
|
71
|
+
/**
|
|
72
|
+
* Maps the SPARQL update operation applied to one document to the ActivityStream term the
|
|
73
|
+
* CSS notification generators understand (`MonitoringStore` only forwards `as:Add|Create|Delete|Remove|Update`).
|
|
74
|
+
*
|
|
75
|
+
* Mapping (the closest faithful term for each operation):
|
|
76
|
+
* - `CREATE [SILENT] GRAPH` -> `as:Create` when the document did not exist yet;
|
|
77
|
+
* a `CREATE` on an existing graph is a silent no-op -> nothing.
|
|
78
|
+
* - `INSERT DATA` / `INSERT … WHERE` / `LOAD` /
|
|
79
|
+
* `ADD` / `COPY` target -> `as:Create` when the document did not exist yet, else `as:Update`
|
|
80
|
+
* (same `exists ? Update : Create` rule CSS uses for PUT).
|
|
81
|
+
* - `DELETE DATA` / `DELETE WHERE` /
|
|
82
|
+
* `INSERT … DELETE … WHERE` -> `as:Update` (partial removal; the document itself survives).
|
|
83
|
+
* - `CLEAR GRAPH` / `DROP GRAPH` / `MOVE` source -> `as:Update`: every triple is gone, but
|
|
84
|
+
`MixDataAccessor.executeSparqlUpdate` rewrites the graph into an *empty* document instead of
|
|
85
|
+
removing the resource, so a re-read returns 200-empty rather than 404. That observable result
|
|
86
|
+
equals a `DELETE DATA` which removes every triple, which maps to `Update`. `as:Delete` is
|
|
87
|
+
therefore deliberately unused: it becomes correct only once an accessor actually removes the
|
|
88
|
+
document (a re-read would then be 404).
|
|
89
|
+
* - delete-only update on a missing document -> nothing (SPARQL no-op).
|
|
90
|
+
* - `as:Add` / `as:Remove` are deliberately not used: those describe container membership changes
|
|
91
|
+
* (`DataAccessorBasedStore.addContainerActivity`), and the sidecar writes document graphs only.
|
|
92
|
+
*/
|
|
93
|
+
private resolveActivity;
|
|
94
|
+
/**
|
|
95
|
+
* Checks whether the document already exists before the update is applied.
|
|
96
|
+
*
|
|
97
|
+
* Uses the same accessor that performs the write, so the answer describes the storage the
|
|
98
|
+
* activity is about. Returns `undefined` when the answer cannot be determined; callers then
|
|
99
|
+
* fall back to the conservative `Update`/`Delete` terms instead of `Create`.
|
|
100
|
+
*/
|
|
101
|
+
private documentExistedBefore;
|
|
102
|
+
/**
|
|
103
|
+
* Emits the resolved activities on the injected {@link ActivityEmitter}.
|
|
104
|
+
*
|
|
105
|
+
* Mirrors `MonitoringStore.emitChanged`
|
|
106
|
+
* (node_modules/@solid/community-server/dist/storage/MonitoringStore.js:36-45): for every changed resource
|
|
107
|
+
* one `changed` event plus the ActivityStream-typed event, with the same metadata shape
|
|
108
|
+
* `DataAccessorBasedStore.addActivityMetadata` produces (an `urn:npm:solid:community-server:activity:` quad).
|
|
109
|
+
* `ListeningActivityHandler` (dist/server/notifications/ListeningActivityHandler.js:25) subscribes to `changed`
|
|
110
|
+
* and derives the notification state by re-reading the store, so no ETag has to be carried here.
|
|
111
|
+
*/
|
|
112
|
+
private emitActivities;
|
|
63
113
|
private sendPayload;
|
|
64
114
|
private streamWithLimit;
|
|
65
115
|
private resolveUsageContext;
|
|
@@ -79,6 +129,13 @@ export declare class SubgraphSparqlHttpHandler extends HttpHandler {
|
|
|
79
129
|
private inspectPatterns;
|
|
80
130
|
private assertGraphInScope;
|
|
81
131
|
private assertGraphTermInScope;
|
|
132
|
+
/**
|
|
133
|
+
* Registers a graph as written by the update and records which kind of change applies to it.
|
|
134
|
+
*
|
|
135
|
+
* Several operations can target the same graph in one request; the flags are accumulated so the graph
|
|
136
|
+
* still yields at most one activity. This is also the only place write targets are created, which keeps
|
|
137
|
+
* notification coverage tied to the same plan that drives authorization.
|
|
138
|
+
*/
|
|
82
139
|
private addWriteTarget;
|
|
83
140
|
private readLoadDocument;
|
|
84
141
|
private rewriteLoadUpdate;
|
|
@@ -19,7 +19,7 @@ const ALLOWED_METHODS = ['GET', 'POST', 'OPTIONS'];
|
|
|
19
19
|
const MODEL_COLLECTION_SUFFIX = '/settings/providers/-/sparql';
|
|
20
20
|
const SETTINGS_COLLECTION_SUFFIX = '/settings/-/sparql';
|
|
21
21
|
class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
22
|
-
constructor(queryEngine, credentialsExtractor, permissionReader, authorizer, options = {}, updateAuthority) {
|
|
22
|
+
constructor(queryEngine, credentialsExtractor, permissionReader, authorizer, options = {}, updateAuthority, emitter) {
|
|
23
23
|
super();
|
|
24
24
|
this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
|
|
25
25
|
this.generator = new sparqljs_1.Generator();
|
|
@@ -30,6 +30,7 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
30
30
|
this.sidecarPath = options.sidecarPath ?? '/-/sparql';
|
|
31
31
|
this.defaultBandwidthLimit = this.normalizeLimit(options.defaultAccountBandwidthLimitBps);
|
|
32
32
|
this.updateAuthority = updateAuthority;
|
|
33
|
+
this.emitter = emitter;
|
|
33
34
|
// Identity DB is used for pod lookup (to resolve accountId/podId from URL)
|
|
34
35
|
if (options.identityDbUrl) {
|
|
35
36
|
const db = (0, db_1.getIdentityDatabase)(options.identityDbUrl);
|
|
@@ -335,6 +336,13 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
335
336
|
: this.rewriteDefaultGraphUpdates(parsed, queryRequest.baseUrl);
|
|
336
337
|
this.logger.verbose(`[SubgraphSPARQL] Rewritten Query: ${rewritten}`);
|
|
337
338
|
const skippedSilentAuthorityLoad = Boolean(this.updateAuthority && loadDocumentPlan?.silent && !nativeOptions?.loadDocument);
|
|
339
|
+
// A LOAD that resolved to an empty document rewrites to `INSERT DATA { GRAPH <g> { } }`,
|
|
340
|
+
// which cannot create or change anything, so it must not notify either.
|
|
341
|
+
const emptyAuthorityLoad = Boolean(this.updateAuthority && loadDocumentPlan && nativeOptions?.loadDocument?.body.trim().length === 0);
|
|
342
|
+
const emitActivities = Boolean(this.emitter) && !emptyAuthorityLoad;
|
|
343
|
+
// Existence has to be captured before the write because the activity term depends on it
|
|
344
|
+
// (`Create` for a document the update brings into existence, `Update` otherwise).
|
|
345
|
+
const pendingActivities = emitActivities ? await this.resolvePendingActivities(accessPlan) : [];
|
|
338
346
|
if (!skippedSilentAuthorityLoad) {
|
|
339
347
|
if (this.updateAuthority) {
|
|
340
348
|
await this.updateAuthority.executeSparqlUpdate(rewritten, queryRequest.baseUrl, readAccessScope);
|
|
@@ -342,12 +350,115 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
342
350
|
else {
|
|
343
351
|
await this.engine.queryVoid(rewritten, queryRequest.baseUrl, readAccessScope, nativeOptions);
|
|
344
352
|
}
|
|
353
|
+
// Only a successful write notifies; a throwing write skips this line entirely.
|
|
354
|
+
this.emitActivities(pendingActivities);
|
|
345
355
|
}
|
|
346
356
|
await this.refreshUsage(queryRequest.baseUrl);
|
|
347
357
|
response.statusCode = 204;
|
|
348
358
|
response.setHeader('Cache-Control', 'no-store');
|
|
349
359
|
response.end();
|
|
350
360
|
}
|
|
361
|
+
/**
|
|
362
|
+
* Turns the write targets of an update access plan into the activities that should be emitted.
|
|
363
|
+
*
|
|
364
|
+
* Only documents actually written by the update (the plan's `writeTargets`) are considered:
|
|
365
|
+
* one activity per document, never per quad and never for an untouched resource.
|
|
366
|
+
*/
|
|
367
|
+
async resolvePendingActivities(plan) {
|
|
368
|
+
const pending = [];
|
|
369
|
+
for (const [graph, effect] of plan.targetEffects) {
|
|
370
|
+
const documentUrl = this.resourceUrlForGraphValue(graph);
|
|
371
|
+
const existedBefore = await this.documentExistedBefore(documentUrl);
|
|
372
|
+
const activity = this.resolveActivity(effect, existedBefore);
|
|
373
|
+
if (activity) {
|
|
374
|
+
pending.push({ identifier: { path: documentUrl }, activity });
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return pending;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Maps the SPARQL update operation applied to one document to the ActivityStream term the
|
|
381
|
+
* CSS notification generators understand (`MonitoringStore` only forwards `as:Add|Create|Delete|Remove|Update`).
|
|
382
|
+
*
|
|
383
|
+
* Mapping (the closest faithful term for each operation):
|
|
384
|
+
* - `CREATE [SILENT] GRAPH` -> `as:Create` when the document did not exist yet;
|
|
385
|
+
* a `CREATE` on an existing graph is a silent no-op -> nothing.
|
|
386
|
+
* - `INSERT DATA` / `INSERT … WHERE` / `LOAD` /
|
|
387
|
+
* `ADD` / `COPY` target -> `as:Create` when the document did not exist yet, else `as:Update`
|
|
388
|
+
* (same `exists ? Update : Create` rule CSS uses for PUT).
|
|
389
|
+
* - `DELETE DATA` / `DELETE WHERE` /
|
|
390
|
+
* `INSERT … DELETE … WHERE` -> `as:Update` (partial removal; the document itself survives).
|
|
391
|
+
* - `CLEAR GRAPH` / `DROP GRAPH` / `MOVE` source -> `as:Update`: every triple is gone, but
|
|
392
|
+
`MixDataAccessor.executeSparqlUpdate` rewrites the graph into an *empty* document instead of
|
|
393
|
+
removing the resource, so a re-read returns 200-empty rather than 404. That observable result
|
|
394
|
+
equals a `DELETE DATA` which removes every triple, which maps to `Update`. `as:Delete` is
|
|
395
|
+
therefore deliberately unused: it becomes correct only once an accessor actually removes the
|
|
396
|
+
document (a re-read would then be 404).
|
|
397
|
+
* - delete-only update on a missing document -> nothing (SPARQL no-op).
|
|
398
|
+
* - `as:Add` / `as:Remove` are deliberately not used: those describe container membership changes
|
|
399
|
+
* (`DataAccessorBasedStore.addContainerActivity`), and the sidecar writes document graphs only.
|
|
400
|
+
*/
|
|
401
|
+
resolveActivity(effect, existedBefore) {
|
|
402
|
+
if (effect.createdGraph) {
|
|
403
|
+
return existedBefore === true ? undefined : community_server_2.AS.terms.Create;
|
|
404
|
+
}
|
|
405
|
+
if (!effect.addedData && existedBefore === false) {
|
|
406
|
+
// DELETE/CLEAR/DROP against a document that does not exist changes nothing.
|
|
407
|
+
return undefined;
|
|
408
|
+
}
|
|
409
|
+
if (!effect.addedData && effect.removedAllData) {
|
|
410
|
+
// CLEAR/DROP/MOVE-source: the document survives as an empty document, so this is an update.
|
|
411
|
+
return community_server_2.AS.terms.Update;
|
|
412
|
+
}
|
|
413
|
+
if (existedBefore === false) {
|
|
414
|
+
return community_server_2.AS.terms.Create;
|
|
415
|
+
}
|
|
416
|
+
return community_server_2.AS.terms.Update;
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Checks whether the document already exists before the update is applied.
|
|
420
|
+
*
|
|
421
|
+
* Uses the same accessor that performs the write, so the answer describes the storage the
|
|
422
|
+
* activity is about. Returns `undefined` when the answer cannot be determined; callers then
|
|
423
|
+
* fall back to the conservative `Update`/`Delete` terms instead of `Create`.
|
|
424
|
+
*/
|
|
425
|
+
async documentExistedBefore(documentUrl) {
|
|
426
|
+
if (!this.updateAuthority) {
|
|
427
|
+
return undefined;
|
|
428
|
+
}
|
|
429
|
+
try {
|
|
430
|
+
await this.updateAuthority.getMetadata({ path: documentUrl });
|
|
431
|
+
return true;
|
|
432
|
+
}
|
|
433
|
+
catch (error) {
|
|
434
|
+
if (community_server_2.NotFoundHttpError.isInstance(error)) {
|
|
435
|
+
return false;
|
|
436
|
+
}
|
|
437
|
+
this.logger.debug(`Could not determine pre-update existence of ${documentUrl}: ${error instanceof Error ? error.message : String(error)}`);
|
|
438
|
+
return undefined;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Emits the resolved activities on the injected {@link ActivityEmitter}.
|
|
443
|
+
*
|
|
444
|
+
* Mirrors `MonitoringStore.emitChanged`
|
|
445
|
+
* (node_modules/@solid/community-server/dist/storage/MonitoringStore.js:36-45): for every changed resource
|
|
446
|
+
* one `changed` event plus the ActivityStream-typed event, with the same metadata shape
|
|
447
|
+
* `DataAccessorBasedStore.addActivityMetadata` produces (an `urn:npm:solid:community-server:activity:` quad).
|
|
448
|
+
* `ListeningActivityHandler` (dist/server/notifications/ListeningActivityHandler.js:25) subscribes to `changed`
|
|
449
|
+
* and derives the notification state by re-reading the store, so no ETag has to be carried here.
|
|
450
|
+
*/
|
|
451
|
+
emitActivities(activities) {
|
|
452
|
+
if (!this.emitter || activities.length === 0) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
for (const { identifier, activity } of activities) {
|
|
456
|
+
const metadata = new community_server_2.RepresentationMetadata(identifier, { [community_server_2.SOLID_AS.activity]: activity });
|
|
457
|
+
this.emitter.emit('changed', identifier, activity, metadata);
|
|
458
|
+
this.emitter.emit(activity.value, identifier, metadata);
|
|
459
|
+
this.logger.debug(`[SubgraphSPARQL] Emitted ${activity.value} activity for ${identifier.path}`);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
351
462
|
async sendPayload(response, payload, contentType, context, statusCode = 200) {
|
|
352
463
|
const buffer = typeof payload === 'string' ? Buffer.from(payload, 'utf8') : payload;
|
|
353
464
|
const limit = context ? await this.resolveBandwidthLimit(context) : undefined;
|
|
@@ -514,6 +625,7 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
514
625
|
needsReadScope: false,
|
|
515
626
|
readTargets: new Set(),
|
|
516
627
|
writeTargets: new Map(),
|
|
628
|
+
targetEffects: new Map(),
|
|
517
629
|
loadDocuments: [],
|
|
518
630
|
clearGraphs: [],
|
|
519
631
|
graphCopies: [],
|
|
@@ -533,7 +645,7 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
533
645
|
? this.assertGraphTermInScope(operation.destination, basePath)
|
|
534
646
|
: basePath;
|
|
535
647
|
plan.readTargets.add(sourceUri);
|
|
536
|
-
this.addWriteTarget(plan, targetGraph ?? basePath, [policy_engine_1.PERMISSIONS.Append]);
|
|
648
|
+
this.addWriteTarget(plan, targetGraph ?? basePath, [policy_engine_1.PERMISSIONS.Append], { addedData: true });
|
|
537
649
|
plan.loadDocuments.push({
|
|
538
650
|
sourceUri,
|
|
539
651
|
targetGraph: targetGraph ?? basePath,
|
|
@@ -548,7 +660,7 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
548
660
|
plan.hasDelete = true;
|
|
549
661
|
plan.needsReadScope = true;
|
|
550
662
|
const graph = this.assertGraphInScope(operation.graph, basePath) ?? basePath;
|
|
551
|
-
this.addWriteTarget(plan, graph, [policy_engine_1.PERMISSIONS.Delete]);
|
|
663
|
+
this.addWriteTarget(plan, graph, [policy_engine_1.PERMISSIONS.Delete], { removedAllData: true });
|
|
552
664
|
plan.clearGraphs.push(graph);
|
|
553
665
|
continue;
|
|
554
666
|
}
|
|
@@ -561,17 +673,23 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
561
673
|
plan.hasInsert = true;
|
|
562
674
|
plan.needsReadScope = true;
|
|
563
675
|
plan.readTargets.add(sourceGraph);
|
|
676
|
+
// A self copy/add/move is reduced by `rewriteGraphCopyUpdate` to `CREATE SILENT GRAPH <targetGraph>`,
|
|
677
|
+
// so such a target is only (possibly) created and never cleared or re-filled.
|
|
678
|
+
const selfCopy = sourceGraph === targetGraph;
|
|
679
|
+
const targetEffect = selfCopy
|
|
680
|
+
? { createdGraph: true }
|
|
681
|
+
: { removedAllData: true, addedData: true };
|
|
564
682
|
if (operation.type === 'add') {
|
|
565
|
-
this.addWriteTarget(plan, targetGraph, [policy_engine_1.PERMISSIONS.Append]);
|
|
683
|
+
this.addWriteTarget(plan, targetGraph, [policy_engine_1.PERMISSIONS.Append], selfCopy ? targetEffect : { addedData: true });
|
|
566
684
|
}
|
|
567
685
|
else if (operation.type === 'copy') {
|
|
568
686
|
plan.hasDelete = true;
|
|
569
|
-
this.addWriteTarget(plan, targetGraph, [policy_engine_1.PERMISSIONS.Delete, policy_engine_1.PERMISSIONS.Append]);
|
|
687
|
+
this.addWriteTarget(plan, targetGraph, [policy_engine_1.PERMISSIONS.Delete, policy_engine_1.PERMISSIONS.Append], targetEffect);
|
|
570
688
|
}
|
|
571
689
|
else {
|
|
572
690
|
plan.hasDelete = true;
|
|
573
|
-
this.addWriteTarget(plan, targetGraph, [policy_engine_1.PERMISSIONS.Delete, policy_engine_1.PERMISSIONS.Append]);
|
|
574
|
-
this.addWriteTarget(plan, sourceGraph, [policy_engine_1.PERMISSIONS.Delete]);
|
|
691
|
+
this.addWriteTarget(plan, targetGraph, [policy_engine_1.PERMISSIONS.Delete, policy_engine_1.PERMISSIONS.Append], targetEffect);
|
|
692
|
+
this.addWriteTarget(plan, sourceGraph, [policy_engine_1.PERMISSIONS.Delete], selfCopy ? {} : { removedAllData: true });
|
|
575
693
|
}
|
|
576
694
|
plan.graphCopies.push({ operation: operation.type, sourceGraph, targetGraph });
|
|
577
695
|
continue;
|
|
@@ -579,7 +697,7 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
579
697
|
if (this.isCreateGraphOperation(operation)) {
|
|
580
698
|
plan.hasInsert = true;
|
|
581
699
|
const graph = this.assertGraphInScope(operation.graph, basePath) ?? basePath;
|
|
582
|
-
this.addWriteTarget(plan, graph, [policy_engine_1.PERMISSIONS.Append]);
|
|
700
|
+
this.addWriteTarget(plan, graph, [policy_engine_1.PERMISSIONS.Append], { createdGraph: true });
|
|
583
701
|
continue;
|
|
584
702
|
}
|
|
585
703
|
if (!this.isInsertDeleteOperation(operation)) {
|
|
@@ -600,7 +718,7 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
600
718
|
this.assertGraphInScope(operation.graph, basePath);
|
|
601
719
|
}
|
|
602
720
|
if (operation.updateType === 'insert' || operation.updateType === 'insertdelete') {
|
|
603
|
-
this.inspectQuads(operation.insert ?? [], basePath, defaultGraph, plan, [policy_engine_1.PERMISSIONS.Append]);
|
|
721
|
+
this.inspectQuads(operation.insert ?? [], basePath, defaultGraph, plan, [policy_engine_1.PERMISSIONS.Append], { addedData: true });
|
|
604
722
|
}
|
|
605
723
|
if (operation.updateType === 'delete' || operation.updateType === 'insertdelete' || operation.updateType === 'deletewhere') {
|
|
606
724
|
this.inspectQuads(operation.delete ?? [], basePath, defaultGraph, plan, [policy_engine_1.PERMISSIONS.Delete]);
|
|
@@ -622,16 +740,16 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
622
740
|
}
|
|
623
741
|
return plan;
|
|
624
742
|
}
|
|
625
|
-
inspectQuads(quads, basePath, defaultGraph, plan, modes) {
|
|
743
|
+
inspectQuads(quads, basePath, defaultGraph, plan, modes, effect = {}) {
|
|
626
744
|
for (const quad of quads) {
|
|
627
745
|
if (quad.type === 'graph') {
|
|
628
746
|
const graph = this.assertGraphTermInScope(quad.name, basePath);
|
|
629
747
|
if (graph) {
|
|
630
|
-
this.addWriteTarget(plan, graph, modes);
|
|
748
|
+
this.addWriteTarget(plan, graph, modes, effect);
|
|
631
749
|
}
|
|
632
750
|
}
|
|
633
751
|
else {
|
|
634
|
-
this.addWriteTarget(plan, defaultGraph, modes);
|
|
752
|
+
this.addWriteTarget(plan, defaultGraph, modes, effect);
|
|
635
753
|
}
|
|
636
754
|
}
|
|
637
755
|
}
|
|
@@ -681,12 +799,26 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
|
|
|
681
799
|
}
|
|
682
800
|
throw new community_server_2.BadRequestHttpError('Unsupported graph target in SPARQL update.');
|
|
683
801
|
}
|
|
684
|
-
|
|
802
|
+
/**
|
|
803
|
+
* Registers a graph as written by the update and records which kind of change applies to it.
|
|
804
|
+
*
|
|
805
|
+
* Several operations can target the same graph in one request; the flags are accumulated so the graph
|
|
806
|
+
* still yields at most one activity. This is also the only place write targets are created, which keeps
|
|
807
|
+
* notification coverage tied to the same plan that drives authorization.
|
|
808
|
+
*/
|
|
809
|
+
addWriteTarget(plan, graph, modes, effect = {}) {
|
|
685
810
|
const existing = plan.writeTargets.get(graph) ?? new Set();
|
|
686
811
|
for (const mode of modes) {
|
|
687
812
|
existing.add(mode);
|
|
688
813
|
}
|
|
689
814
|
plan.writeTargets.set(graph, existing);
|
|
815
|
+
const merged = plan.targetEffects.get(graph) ?? { addedData: false, removedAllData: false, createdGraph: false };
|
|
816
|
+
for (const key of Object.keys(effect)) {
|
|
817
|
+
if (effect[key]) {
|
|
818
|
+
merged[key] = true;
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
plan.targetEffects.set(graph, merged);
|
|
690
822
|
}
|
|
691
823
|
async readLoadDocument(plan, basePath, accessScope) {
|
|
692
824
|
const quads = await this.engine.constructGraph(plan.sourceUri, basePath, accessScope);
|
|
@@ -25,6 +25,20 @@
|
|
|
25
25
|
]
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler_emitter",
|
|
30
|
+
"range": {
|
|
31
|
+
"@type": "ParameterRangeUnion",
|
|
32
|
+
"parameterRangeElements": [
|
|
33
|
+
{
|
|
34
|
+
"@type": "ParameterRangeWildcard"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"@type": "ParameterRangeUndefined"
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
28
42
|
{
|
|
29
43
|
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler_queryEngine",
|
|
30
44
|
"range": "undefineds:dist/storage/sparql/SubgraphQueryEngine.jsonld#SubgraphQueryEngine"
|
|
@@ -162,6 +176,10 @@
|
|
|
162
176
|
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_updateAuthority",
|
|
163
177
|
"memberFieldName": "updateAuthority"
|
|
164
178
|
},
|
|
179
|
+
{
|
|
180
|
+
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_emitter",
|
|
181
|
+
"memberFieldName": "emitter"
|
|
182
|
+
},
|
|
165
183
|
{
|
|
166
184
|
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_generator",
|
|
167
185
|
"memberFieldName": "generator"
|
|
@@ -214,6 +232,22 @@
|
|
|
214
232
|
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_executeUpdate",
|
|
215
233
|
"memberFieldName": "executeUpdate"
|
|
216
234
|
},
|
|
235
|
+
{
|
|
236
|
+
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_resolvePendingActivities",
|
|
237
|
+
"memberFieldName": "resolvePendingActivities"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_resolveActivity",
|
|
241
|
+
"memberFieldName": "resolveActivity"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_documentExistedBefore",
|
|
245
|
+
"memberFieldName": "documentExistedBefore"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_emitActivities",
|
|
249
|
+
"memberFieldName": "emitActivities"
|
|
250
|
+
},
|
|
217
251
|
{
|
|
218
252
|
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_sendPayload",
|
|
219
253
|
"memberFieldName": "sendPayload"
|
|
@@ -459,6 +493,9 @@
|
|
|
459
493
|
},
|
|
460
494
|
{
|
|
461
495
|
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler_updateAuthority"
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
"@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler_emitter"
|
|
462
499
|
}
|
|
463
500
|
]
|
|
464
501
|
}
|
|
@@ -153,18 +153,6 @@ export declare class EdgeNodeRepository {
|
|
|
153
153
|
* Remove a center node from the cluster.
|
|
154
154
|
*/
|
|
155
155
|
removeCenterNode(nodeId: string): Promise<boolean>;
|
|
156
|
-
/**
|
|
157
|
-
* List nodes owned by a specific account
|
|
158
|
-
*/
|
|
159
|
-
listNodesByAccount(accountId: string): Promise<Array<{
|
|
160
|
-
nodeId: string;
|
|
161
|
-
displayName?: string;
|
|
162
|
-
capabilities: Record<string, unknown> | null;
|
|
163
|
-
stringCapabilities: string[] | null;
|
|
164
|
-
accessMode: string | null;
|
|
165
|
-
lastSeen: Date | null;
|
|
166
|
-
connectivityStatus: string | null;
|
|
167
|
-
}>>;
|
|
168
156
|
/**
|
|
169
157
|
* Delete a node
|
|
170
158
|
*/
|
|
@@ -39,7 +39,7 @@ class EdgeNodeRepository {
|
|
|
39
39
|
createdAt: createdAt?.toISOString(),
|
|
40
40
|
updatedAt: updatedAt?.toISOString(),
|
|
41
41
|
lastSeen: lastSeen?.toISOString(),
|
|
42
|
-
metadata:
|
|
42
|
+
metadata: parseJsonRecord(row.metadata),
|
|
43
43
|
};
|
|
44
44
|
});
|
|
45
45
|
}
|
|
@@ -77,7 +77,7 @@ class EdgeNodeRepository {
|
|
|
77
77
|
displayName: row.display_name == null ? undefined : String(row.display_name),
|
|
78
78
|
tokenHash: String(row.token_hash ?? ''),
|
|
79
79
|
nodeType: (['center', 'edge', 'sp'].includes(row.node_type) ? row.node_type : 'edge'),
|
|
80
|
-
metadata:
|
|
80
|
+
metadata: parseJsonRecord(row.metadata),
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
async updateNodeHeartbeat(nodeId, metadata, timestamp) {
|
|
@@ -166,7 +166,7 @@ class EdgeNodeRepository {
|
|
|
166
166
|
const row = result.rows[0];
|
|
167
167
|
return {
|
|
168
168
|
nodeId: String(row.id),
|
|
169
|
-
metadata:
|
|
169
|
+
metadata: parseJsonRecord(row.metadata),
|
|
170
170
|
lastSeen: (0, db_1.fromDbTimestamp)(row.last_seen),
|
|
171
171
|
};
|
|
172
172
|
}
|
|
@@ -327,7 +327,7 @@ class EdgeNodeRepository {
|
|
|
327
327
|
await this.ready;
|
|
328
328
|
const token = (0, node_crypto_1.randomBytes)(32).toString('base64url');
|
|
329
329
|
const tokenHash = (0, node_crypto_1.createHash)('sha256').update(token).digest('hex');
|
|
330
|
-
const now =
|
|
330
|
+
const now = (0, db_1.toDbTimestamp)(this.db, new Date());
|
|
331
331
|
// Use upsert pattern: INSERT ... ON CONFLICT UPDATE
|
|
332
332
|
await (0, db_1.executeStatement)(this.db, (0, drizzle_orm_1.sql) `
|
|
333
333
|
INSERT INTO cluster_node (
|
|
@@ -352,7 +352,7 @@ class EdgeNodeRepository {
|
|
|
352
352
|
*/
|
|
353
353
|
async updateCenterNodeHeartbeat(nodeId, internalIp, internalPort, timestamp) {
|
|
354
354
|
await this.ready;
|
|
355
|
-
const ts =
|
|
355
|
+
const ts = (0, db_1.toDbTimestamp)(this.db, timestamp);
|
|
356
356
|
await (0, db_1.executeStatement)(this.db, (0, drizzle_orm_1.sql) `
|
|
357
357
|
UPDATE cluster_node
|
|
358
358
|
SET internal_ip = ${internalIp},
|
|
@@ -457,14 +457,6 @@ class EdgeNodeRepository {
|
|
|
457
457
|
return true;
|
|
458
458
|
}
|
|
459
459
|
// ============ Account-based Node Methods ============
|
|
460
|
-
/**
|
|
461
|
-
* List nodes owned by a specific account
|
|
462
|
-
*/
|
|
463
|
-
async listNodesByAccount(accountId) {
|
|
464
|
-
await this.ready;
|
|
465
|
-
void accountId;
|
|
466
|
-
return [];
|
|
467
|
-
}
|
|
468
460
|
/**
|
|
469
461
|
* Delete a node
|
|
470
462
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { SolidRdfDataAccessor } from './storage/accessors/SolidRdfDataAccessor';
|
|
|
5
5
|
import { MixDataAccessor } from './storage/accessors/MixDataAccessor';
|
|
6
6
|
export type { LocalRdfAuthorityJournal, LocalRdfIndexAccessor, } from './storage/accessors/MixDataAccessor';
|
|
7
7
|
import { ConfigurableLoggerFactory } from './logging/ConfigurableLoggerFactory';
|
|
8
|
+
import { LOG_FILE_PATTERN, resolveCurrentLogFile, resolveLogFilePattern } from './logging/log-file';
|
|
8
9
|
import { SubgraphQueryEngine } from './storage/sparql/SubgraphQueryEngine';
|
|
9
10
|
export type { SparqlEngine } from './storage/sparql/SubgraphQueryEngine';
|
|
10
11
|
export type { RdfEngineLike, RdfEngineStorageStats, RdfDerivedIndexRefreshResult, RdfIndexStats, RdfIndexSpaceObject, RdfIndexMetrics, RdfIndexPutOptions, RdfPatternQuery, RdfQuadIndexOptions, RdfQuadIndexScanResult, RdfTextIndexLike, RdfTextIndexOptions, RdfTextIndexSyncLike, RdfVectorIndexLike, RdfVectorIndexOptions, RdfVectorIndexSyncLike, RdfShadowBackfillOptions, RdfShadowBackfillResult, RdfShadowDiff, RdfShadowScanResult, RdfSourceInput, RdfSourceScope, } from './storage/rdf/types';
|
|
@@ -124,6 +125,6 @@ export type { OwnedWebIdEntry, PodOwnershipResolver, PodOwnershipTarget, CssPodO
|
|
|
124
125
|
export type { TunnelProvider, TunnelConfig, TunnelSetupOptions, TunnelStatus, } from './tunnel/TunnelProvider';
|
|
125
126
|
export type { SubdomainRegistration, ConnectivityResult, SubdomainServiceOptions, } from './subdomain/SubdomainService';
|
|
126
127
|
export { AppStaticAssetHandler } from './http/AppStaticAssetHandler';
|
|
127
|
-
export { RepresentationPartialConvertingStore, MinioDataAccessor, SolidRdfDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, SparqlUpdateResourceStore, SubgraphQueryEngine, SubgraphSparqlHttpHandler, InternalPodDataHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, DeviceNotificationHub, DeviceNotificationResourceListener, DeviceNotificationWebSocketServer, DeviceNotificationTicketHandler, registerDeviceNotificationRuntime, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, LoginMethodGuardStorage, ValidatingIdentityProviderHttpHandler, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, BaseKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, EdgeNodeAgent, EdgeNodeAgentInitializer, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, RdfTermDictionary, RdfQuadIndex, Rdf3xIndex, RdfTextIndex, RdfVectorIndex, PostgresRdfTextIndex, PostgresRdfVectorIndex, SolidRdfEngine, LocalQleverNativeSparqlClient, QleverSparqlEngine, RdfQuerySparqlEngine, PostgresRdfEngine, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, NgrokTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, RememberedClientGrantStore, RememberedConsentHandler, RememberedClientPromptFactory, SessionBoundIdentityProviderFactory, ScopedPickWebIdHandler, ConfiguredLoopbackDPoPWebIdExtractor, AccountStorageBindingsHandler, CssPodOwnershipResolver, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionPodStore, ProvisionCodeCodec, LocalPodProvisioningService, SqliteSolidFsSyncJournal, RootedSolidFsSyncJournal, LocalRdfAuthorityRecoveryInitializer, ObservableResourceStore, RdfSearchReconciliationIntentSink, };
|
|
128
|
+
export { RepresentationPartialConvertingStore, MinioDataAccessor, SolidRdfDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, resolveLogFilePattern, resolveCurrentLogFile, LOG_FILE_PATTERN, SparqlUpdateResourceStore, SubgraphQueryEngine, SubgraphSparqlHttpHandler, InternalPodDataHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, DeviceNotificationHub, DeviceNotificationResourceListener, DeviceNotificationWebSocketServer, DeviceNotificationTicketHandler, registerDeviceNotificationRuntime, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, LoginMethodGuardStorage, ValidatingIdentityProviderHttpHandler, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, BaseKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, EdgeNodeAgent, EdgeNodeAgentInitializer, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, RdfTermDictionary, RdfQuadIndex, Rdf3xIndex, RdfTextIndex, RdfVectorIndex, PostgresRdfTextIndex, PostgresRdfVectorIndex, SolidRdfEngine, LocalQleverNativeSparqlClient, QleverSparqlEngine, RdfQuerySparqlEngine, PostgresRdfEngine, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, NgrokTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, RememberedClientGrantStore, RememberedConsentHandler, RememberedClientPromptFactory, SessionBoundIdentityProviderFactory, ScopedPickWebIdHandler, ConfiguredLoopbackDPoPWebIdExtractor, AccountStorageBindingsHandler, CssPodOwnershipResolver, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionPodStore, ProvisionCodeCodec, LocalPodProvisioningService, SqliteSolidFsSyncJournal, RootedSolidFsSyncJournal, LocalRdfAuthorityRecoveryInitializer, ObservableResourceStore, RdfSearchReconciliationIntentSink, };
|
|
128
129
|
export type { ResourceChangeEvent, ResourceChangeListener, ResourceChangeRecorder, } from './storage/ObservableResourceStore';
|
|
129
130
|
export { RdfHandlebarsTemplateEngine } from './util/templates/RdfHandlebarsTemplateEngine';
|
package/dist/index.js
CHANGED
|
@@ -14,9 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
18
|
-
exports.
|
|
19
|
-
exports.RdfHandlebarsTemplateEngine = exports.RdfSearchReconciliationIntentSink = exports.ObservableResourceStore = exports.LocalRdfAuthorityRecoveryInitializer = exports.RootedSolidFsSyncJournal = exports.SqliteSolidFsSyncJournal = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodStore = exports.ProvisionPodCreator = void 0;
|
|
17
|
+
exports.EdgeNodeAgentInitializer = exports.EdgeNodeAgent = exports.EdgeNodeHealthProbeService = exports.FrpTunnelManager = exports.NoopEdgeNodeTunnelManager = exports.SimpleEdgeNodeTunnelManager = exports.Dns01CertificateProvisioner = exports.EdgeNodeDnsCoordinator = exports.TencentDnsProvider = exports.PerAccountQuotaStrategy = exports.NoopEntitlementProvider = exports.HttpEntitlementProvider = exports.NoopQuotaService = exports.DrizzleQuotaService = exports.BaseKeyValueStorage = exports.SqliteKeyValueStorage = exports.RedisKeyValueStorage = exports.PostgresKeyValueStorage = exports.ValidatingIdentityProviderHttpHandler = exports.LoginMethodGuardStorage = exports.DrizzleIndexedStorage = exports.ReservedSuffixIdentifierGenerator = exports.registerDeviceNotificationRuntime = exports.DeviceNotificationTicketHandler = exports.DeviceNotificationWebSocketServer = exports.DeviceNotificationResourceListener = exports.DeviceNotificationHub = exports.TerminalHttpHandler = exports.EdgeNodeCertificateHttpHandler = exports.TracingHandler = exports.RouterHttpRoute = exports.RouterHttpHandler = exports.EdgeNodeProxyHttpHandler = exports.EdgeNodeDirectDebugHttpHandler = exports.ClusterWebSocketConfigurator = exports.ClusterIngressRouter = exports.QuotaAdminHttpHandler = exports.InternalPodDataHttpHandler = exports.SubgraphSparqlHttpHandler = exports.SubgraphQueryEngine = exports.SparqlUpdateResourceStore = exports.LOG_FILE_PATTERN = exports.resolveCurrentLogFile = exports.resolveLogFilePattern = exports.ConfigurableLoggerFactory = exports.MixDataAccessor = exports.SolidRdfDataAccessor = exports.MinioDataAccessor = exports.RepresentationPartialConvertingStore = exports.AppStaticAssetHandler = void 0;
|
|
18
|
+
exports.ConfiguredLoopbackDPoPWebIdExtractor = exports.ScopedPickWebIdHandler = exports.SessionBoundIdentityProviderFactory = exports.RememberedClientPromptFactory = exports.RememberedConsentHandler = exports.RememberedClientGrantStore = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.NgrokTunnelProvider = exports.LocalTunnelProvider = exports.CloudflareTunnelProvider = exports.CredentialReaderImpl = exports.CredentialReader = exports.EmbeddingServiceImpl = exports.EmbeddingService = exports.ProviderRegistryImpl = exports.ProviderRegistry = exports.VectorHttpHandler = exports.PostgresVectorStore = exports.SqliteVectorStore = exports.VectorStore = exports.PostgresRdfEngine = exports.RdfQuerySparqlEngine = exports.QleverSparqlEngine = exports.LocalQleverNativeSparqlClient = exports.SolidRdfEngine = exports.PostgresRdfVectorIndex = exports.PostgresRdfTextIndex = exports.RdfVectorIndex = exports.RdfTextIndex = exports.Rdf3xIndex = exports.RdfQuadIndex = exports.RdfTermDictionary = exports.PgQuintStore = exports.SqliteQuintStore = exports.QuintStore = exports.ReactAppViewHandler = exports.PodRoutingHttpHandler = exports.CenterNodeRegistrationService = exports.UsageTrackingStore = exports.ClusterIdentifierStrategy = exports.EdgeNodeModeDetector = exports.AcmeCertificateManager = exports.EdgeNodeCertificateService = void 0;
|
|
19
|
+
exports.RdfHandlebarsTemplateEngine = exports.RdfSearchReconciliationIntentSink = exports.ObservableResourceStore = exports.LocalRdfAuthorityRecoveryInitializer = exports.RootedSolidFsSyncJournal = exports.SqliteSolidFsSyncJournal = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodStore = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.CssPodOwnershipResolver = exports.AccountStorageBindingsHandler = void 0;
|
|
20
20
|
require("./runtime/configure-drizzle-solid");
|
|
21
21
|
const RepresentationPartialConvertingStore_1 = require("./storage/RepresentationPartialConvertingStore");
|
|
22
22
|
Object.defineProperty(exports, "RepresentationPartialConvertingStore", { enumerable: true, get: function () { return RepresentationPartialConvertingStore_1.RepresentationPartialConvertingStore; } });
|
|
@@ -28,6 +28,10 @@ const MixDataAccessor_1 = require("./storage/accessors/MixDataAccessor");
|
|
|
28
28
|
Object.defineProperty(exports, "MixDataAccessor", { enumerable: true, get: function () { return MixDataAccessor_1.MixDataAccessor; } });
|
|
29
29
|
const ConfigurableLoggerFactory_1 = require("./logging/ConfigurableLoggerFactory");
|
|
30
30
|
Object.defineProperty(exports, "ConfigurableLoggerFactory", { enumerable: true, get: function () { return ConfigurableLoggerFactory_1.ConfigurableLoggerFactory; } });
|
|
31
|
+
const log_file_1 = require("./logging/log-file");
|
|
32
|
+
Object.defineProperty(exports, "LOG_FILE_PATTERN", { enumerable: true, get: function () { return log_file_1.LOG_FILE_PATTERN; } });
|
|
33
|
+
Object.defineProperty(exports, "resolveCurrentLogFile", { enumerable: true, get: function () { return log_file_1.resolveCurrentLogFile; } });
|
|
34
|
+
Object.defineProperty(exports, "resolveLogFilePattern", { enumerable: true, get: function () { return log_file_1.resolveLogFilePattern; } });
|
|
31
35
|
const SubgraphQueryEngine_1 = require("./storage/sparql/SubgraphQueryEngine");
|
|
32
36
|
Object.defineProperty(exports, "SubgraphQueryEngine", { enumerable: true, get: function () { return SubgraphQueryEngine_1.SubgraphQueryEngine; } });
|
|
33
37
|
__exportStar(require("./document"), exports);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Directory, relative to the runtime working directory. */
|
|
2
|
+
export declare const LOG_DIRECTORY = "logs";
|
|
3
|
+
/** File name template; the rotating transport substitutes `%DATE%`. */
|
|
4
|
+
export declare const LOG_FILE_NAME_PATTERN = "xpod-%DATE%.log";
|
|
5
|
+
/** Both segments, for callers that join them onto a working directory themselves. */
|
|
6
|
+
export declare const LOG_FILE_PATTERN = "logs/xpod-%DATE%.log";
|
|
7
|
+
/** Absolute path template handed to the logging transport. */
|
|
8
|
+
export declare function resolveLogFilePattern(cwd?: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* The log file currently being appended to, or `null` when the runtime has not
|
|
11
|
+
* written one yet.
|
|
12
|
+
*
|
|
13
|
+
* Daily rotation produces one file per date and size rotation keeps older
|
|
14
|
+
* segments as `.log.N` next to it, so the live file is identified by
|
|
15
|
+
* modification time rather than by name.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveCurrentLogFile(cwd?: string): string | null;
|