@undefineds.co/xpod 0.1.7 → 0.2.0
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 +164 -3
- package/config/cli.json +9 -71
- package/config/cloud.json +34 -7
- package/config/local.json +6 -2
- package/config/resolver.json +11 -49
- package/config/runtime-open.json +22 -0
- package/config/xpod.base.json +32 -0
- package/config/xpod.cluster.json +2 -44
- package/config/xpod.json +5 -2
- package/dist/agents/AgentExecutorFactory.js +1 -1
- package/dist/agents/AgentExecutorFactory.js.map +1 -1
- package/dist/agents/AgentManager.js +1 -1
- package/dist/agents/AgentManager.js.map +1 -1
- package/dist/agents/config/agent-meta-schema.d.ts +7 -7
- package/dist/agents/config/agent-meta-schema.js +1 -1
- package/dist/agents/config/agent-meta-schema.js.map +1 -1
- package/dist/agents/config/resolve.js +1 -1
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/agents/schema/agent-config.d.ts +18 -18
- package/dist/agents/schema/agent-config.js +1 -1
- package/dist/agents/schema/agent-config.js.map +1 -1
- package/dist/agents/schema/tables.d.ts +8 -8
- package/dist/agents/schema/tables.js +1 -1
- package/dist/agents/schema/tables.js.map +1 -1
- package/dist/ai/schema/config.d.ts +7 -7
- package/dist/ai/schema/config.js +1 -1
- package/dist/ai/schema/config.js.map +1 -1
- package/dist/ai/schema/model.d.ts +13 -13
- package/dist/ai/schema/model.js +1 -1
- package/dist/ai/schema/model.js.map +1 -1
- package/dist/ai/schema/provider.d.ts +7 -7
- package/dist/ai/schema/provider.js +1 -1
- package/dist/ai/schema/provider.js.map +1 -1
- package/dist/ai/schema/vector-store.d.ts +17 -17
- package/dist/ai/schema/vector-store.js +1 -1
- package/dist/ai/schema/vector-store.js.map +1 -1
- package/dist/ai/service/CredentialReaderImpl.js +1 -1
- package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
- package/dist/ai/service/DefaultAiConfigService.js.map +1 -1
- package/dist/api/ApiServer.d.ts +3 -1
- package/dist/api/ApiServer.js +14 -1
- package/dist/api/ApiServer.js.map +1 -1
- package/dist/api/auth/AuthContext.d.ts +12 -1
- package/dist/api/auth/AuthContext.js +18 -1
- package/dist/api/auth/AuthContext.js.map +1 -1
- package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +0 -1
- package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
- package/dist/api/auth/ServiceTokenAuthenticator.d.ts +18 -0
- package/dist/api/auth/ServiceTokenAuthenticator.js +50 -0
- package/dist/api/auth/ServiceTokenAuthenticator.js.map +1 -0
- package/dist/api/auth/index.d.ts +1 -0
- package/dist/api/auth/index.js +1 -0
- package/dist/api/auth/index.js.map +1 -1
- package/dist/api/chatkit/ai-provider.d.ts +0 -10
- package/dist/api/chatkit/ai-provider.js +11 -120
- package/dist/api/chatkit/ai-provider.js.map +1 -1
- package/dist/api/chatkit/default-agent.js +11 -8
- package/dist/api/chatkit/default-agent.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +6 -0
- package/dist/api/chatkit/pod-store.js +103 -36
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/schema.d.ts +32 -26
- package/dist/api/chatkit/schema.js +16 -8
- package/dist/api/chatkit/schema.js.map +1 -1
- package/dist/api/container/business-token.d.ts +9 -0
- package/dist/api/container/business-token.js +32 -0
- package/dist/api/container/business-token.js.map +1 -0
- package/dist/api/container/cloud.js +36 -12
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/common.js +13 -5
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/index.js +94 -14
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +2 -1
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +81 -9
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +8 -6
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/AdminHandler.js +9 -9
- package/dist/api/handlers/AdminHandler.js.map +1 -1
- package/dist/api/handlers/ApiKeyHandler.js +0 -6
- package/dist/api/handlers/ApiKeyHandler.js.map +1 -1
- package/dist/api/handlers/EdgeNodeSignalHandler.d.ts +17 -0
- package/dist/api/handlers/EdgeNodeSignalHandler.js +171 -0
- package/dist/api/handlers/EdgeNodeSignalHandler.js.map +1 -0
- package/dist/api/handlers/PodManagementHandler.d.ts +5 -4
- package/dist/api/handlers/PodManagementHandler.js +11 -10
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/ProvisionHandler.d.ts +42 -0
- package/dist/api/handlers/ProvisionHandler.js +161 -0
- package/dist/api/handlers/ProvisionHandler.js.map +1 -0
- package/dist/api/handlers/QuotaHandler.d.ts +7 -7
- package/dist/api/handlers/QuotaHandler.js +143 -73
- package/dist/api/handlers/QuotaHandler.js.map +1 -1
- package/dist/api/handlers/SubdomainClientHandler.js +2 -2
- package/dist/api/handlers/SubdomainClientHandler.js.map +1 -1
- package/dist/api/handlers/SubdomainHandler.js +13 -8
- package/dist/api/handlers/SubdomainHandler.js.map +1 -1
- package/dist/api/handlers/UsageHandler.d.ts +14 -0
- package/dist/api/handlers/UsageHandler.js +123 -0
- package/dist/api/handlers/UsageHandler.js.map +1 -0
- package/dist/api/handlers/index.d.ts +3 -1
- package/dist/api/handlers/index.js +3 -1
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/main.js +18 -0
- package/dist/api/main.js.map +1 -1
- package/dist/api/middleware/OpenAuthMiddleware.d.ts +12 -0
- package/dist/api/middleware/OpenAuthMiddleware.js +27 -0
- package/dist/api/middleware/OpenAuthMiddleware.js.map +1 -0
- package/dist/api/runtime.d.ts +15 -0
- package/dist/api/runtime.js +125 -0
- package/dist/api/runtime.js.map +1 -0
- package/dist/api/service/VectorStoreService.js +1 -1
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/service/VercelChatService.d.ts +16 -7
- package/dist/api/service/VercelChatService.js +98 -178
- package/dist/api/service/VercelChatService.js.map +1 -1
- package/dist/api/store/DrizzleClientCredentialsStore.d.ts +6 -11
- package/dist/api/store/DrizzleClientCredentialsStore.js +9 -39
- package/dist/api/store/DrizzleClientCredentialsStore.js.map +1 -1
- package/dist/authorization/AuthModeSelector.d.ts +10 -0
- package/dist/authorization/AuthModeSelector.js +27 -0
- package/dist/authorization/AuthModeSelector.js.map +1 -0
- package/dist/authorization/AuthModeSelector.jsonld +81 -0
- package/dist/cli/commands/account.d.ts +6 -0
- package/dist/cli/commands/account.js +119 -0
- package/dist/cli/commands/account.js.map +1 -0
- package/dist/cli/commands/auth.js +20 -29
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/backup.d.ts +15 -0
- package/dist/cli/commands/backup.js +286 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/config.d.ts +34 -3
- package/dist/cli/commands/config.js +195 -258
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.js +94 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/pod.d.ts +6 -0
- package/dist/cli/commands/pod.js +124 -0
- package/dist/cli/commands/pod.js.map +1 -0
- package/dist/cli/commands/start.js +28 -5
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lib/credentials-store.d.ts +17 -0
- package/dist/cli/lib/credentials-store.js +73 -0
- package/dist/cli/lib/credentials-store.js.map +1 -0
- package/dist/cli/lib/css-account.d.ts +17 -0
- package/dist/cli/lib/css-account.js +56 -0
- package/dist/cli/lib/css-account.js.map +1 -1
- package/dist/cli/lib/pod-thread-store.d.ts +57 -0
- package/dist/cli/lib/pod-thread-store.js +310 -0
- package/dist/cli/lib/pod-thread-store.js.map +1 -0
- package/dist/cli/lib/solid-auth.d.ts +20 -0
- package/dist/cli/lib/solid-auth.js +70 -0
- package/dist/cli/lib/solid-auth.js.map +1 -0
- package/dist/components/components.jsonld +5 -8
- package/dist/components/context.jsonld +114 -244
- package/dist/credential/schema/tables.d.ts +14 -14
- package/dist/credential/schema/tables.js +1 -1
- package/dist/credential/schema/tables.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.js +2 -2
- package/dist/edge/EdgeNodeAgent.js.map +1 -1
- package/dist/edge/EdgeNodeDnsCoordinator.d.ts +1 -7
- package/dist/edge/EdgeNodeDnsCoordinator.js +31 -41
- package/dist/edge/EdgeNodeDnsCoordinator.js.map +1 -1
- package/dist/edge/EdgeNodeDnsCoordinator.jsonld +1 -27
- package/dist/edge/EdgeNodeModeDetector.d.ts +1 -1
- package/dist/edge/EdgeNodeModeDetector.js +9 -11
- package/dist/edge/EdgeNodeModeDetector.js.map +1 -1
- package/dist/http/ClusterIngressRouter.js +3 -3
- package/dist/http/ClusterIngressRouter.js.map +1 -1
- package/dist/http/ClusterWebSocketConfigurator.js +2 -2
- package/dist/http/ClusterWebSocketConfigurator.js.map +1 -1
- package/dist/http/PodRoutingHttpHandler.js +2 -2
- package/dist/http/PodRoutingHttpHandler.js.map +1 -1
- package/dist/http/cluster/PodMigrationHttpHandler.d.ts +1 -1
- package/dist/http/cluster/PodMigrationHttpHandler.js +1 -1
- package/dist/http/cluster/PodMigrationHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/EdgeNodeRepository.d.ts +37 -4
- package/dist/identity/drizzle/EdgeNodeRepository.js +120 -128
- package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
- package/dist/identity/drizzle/ServiceTokenRepository.d.ts +52 -0
- package/dist/identity/drizzle/ServiceTokenRepository.js +142 -0
- package/dist/identity/drizzle/ServiceTokenRepository.js.map +1 -0
- package/dist/identity/drizzle/db.d.ts +9 -0
- package/dist/identity/drizzle/db.js +235 -3
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +5 -0
- package/dist/identity/drizzle/schema.pg.js +49 -20
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +332 -57
- package/dist/identity/drizzle/schema.sqlite.js +48 -18
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +6 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/index.d.ts +6 -9
- package/dist/index.js +12 -14
- package/dist/index.js.map +1 -1
- package/dist/main.js +25 -8
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionCodeCodec.d.ts +39 -0
- package/dist/provision/ProvisionCodeCodec.js +65 -0
- package/dist/provision/ProvisionCodeCodec.js.map +1 -0
- package/dist/provision/ProvisionCodeCodec.jsonld +47 -0
- package/dist/provision/ProvisionPodCreator.d.ts +20 -0
- package/dist/provision/ProvisionPodCreator.js +84 -0
- package/dist/provision/ProvisionPodCreator.js.map +1 -0
- package/dist/provision/ProvisionPodCreator.jsonld +118 -0
- package/dist/quota/DrizzleQuotaService.d.ts +17 -3
- package/dist/quota/DrizzleQuotaService.js +108 -8
- package/dist/quota/DrizzleQuotaService.js.map +1 -1
- package/dist/quota/DrizzleQuotaService.jsonld +33 -22
- package/dist/quota/NoopQuotaService.d.ts +7 -1
- package/dist/quota/NoopQuotaService.js +12 -0
- package/dist/quota/NoopQuotaService.js.map +1 -1
- package/dist/quota/NoopQuotaService.jsonld +24 -0
- package/dist/quota/QuotaService.d.ts +17 -0
- package/dist/quota/QuotaService.js +5 -0
- package/dist/quota/QuotaService.js.map +1 -1
- package/dist/quota/QuotaService.jsonld +50 -0
- package/dist/runtime/Proxy.d.ts +22 -4
- package/dist/runtime/Proxy.js +154 -35
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/XpodRuntime.d.ts +49 -0
- package/dist/runtime/XpodRuntime.js +374 -0
- package/dist/runtime/XpodRuntime.js.map +1 -0
- package/dist/runtime/env-utils.d.ts +2 -0
- package/dist/runtime/env-utils.js +55 -0
- package/dist/runtime/env-utils.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.js +8 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/socket-fetch.d.ts +1 -0
- package/dist/runtime/socket-fetch.js +72 -0
- package/dist/runtime/socket-fetch.js.map +1 -0
- package/dist/runtime/socket-http.d.ts +1 -0
- package/dist/runtime/socket-http.js +142 -0
- package/dist/runtime/socket-http.js.map +1 -0
- package/dist/runtime/socket-utils.d.ts +2 -0
- package/dist/runtime/socket-utils.js +34 -0
- package/dist/runtime/socket-utils.js.map +1 -0
- package/dist/service/{EdgeNodeHeartbeatService.d.ts → EdgeNodeSignalClient.d.ts} +3 -3
- package/dist/service/{EdgeNodeHeartbeatService.js → EdgeNodeSignalClient.js} +4 -4
- package/dist/service/EdgeNodeSignalClient.js.map +1 -0
- package/dist/service/PodMigrationService.d.ts +1 -2
- package/dist/service/PodMigrationService.js +1 -2
- package/dist/service/PodMigrationService.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.js +1 -1
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/accessors/MinioDataAccessor.d.ts +6 -0
- package/dist/storage/accessors/MinioDataAccessor.js +10 -0
- package/dist/storage/accessors/MinioDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MinioDataAccessor.jsonld +4 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +2 -1
- package/dist/storage/accessors/MixDataAccessor.js +12 -1
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +19 -0
- package/dist/storage/locking/UrlAwareRedisLocker.d.ts +18 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js +60 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -0
- package/dist/storage/locking/UrlAwareRedisLocker.jsonld +123 -0
- package/dist/storage/quota/UsageRepository.d.ts +41 -8
- package/dist/storage/quota/UsageRepository.js +252 -50
- package/dist/storage/quota/UsageRepository.js.map +1 -1
- package/dist/storage/sparql/ComunicaQuintEngine.d.ts +9 -0
- package/dist/storage/sparql/ComunicaQuintEngine.js +50 -9
- package/dist/storage/sparql/ComunicaQuintEngine.js.map +1 -1
- package/dist/storage/sparql/QueryOptimizer.js +13 -1
- package/dist/storage/sparql/QueryOptimizer.js.map +1 -1
- package/dist/storage/sparql/QuintQuerySource.d.ts +14 -0
- package/dist/storage/sparql/QuintQuerySource.js +152 -1
- package/dist/storage/sparql/QuintQuerySource.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -0
- package/dist/storage/sparql/SubgraphQueryEngine.js +6 -2
- package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.jsonld +4 -0
- package/dist/subdomain/SubdomainClient.d.ts +3 -3
- package/dist/subdomain/SubdomainClient.js +1 -1
- package/dist/subdomain/SubdomainClient.js.map +1 -1
- package/dist/subdomain/SubdomainService.d.ts +15 -16
- package/dist/subdomain/SubdomainService.js +80 -54
- package/dist/subdomain/SubdomainService.js.map +1 -1
- package/dist/subdomain/SubdomainService.jsonld +22 -26
- package/dist/supervisor/Supervisor.d.ts +7 -2
- package/dist/supervisor/Supervisor.js +33 -1
- package/dist/supervisor/Supervisor.js.map +1 -1
- package/dist/task/DrizzleTaskQueue.d.ts +1 -1
- package/dist/task/DrizzleTaskQueue.js +1 -1
- package/dist/task/DrizzleTaskQueue.js.map +1 -1
- package/dist/task/schema.d.ts +10 -10
- package/dist/task/schema.js +1 -1
- package/dist/task/schema.js.map +1 -1
- package/dist/test-utils/index.d.ts +4 -0
- package/dist/test-utils/index.js +8 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/no-auth-xpod.d.ts +11 -0
- package/dist/test-utils/no-auth-xpod.js +25 -0
- package/dist/test-utils/no-auth-xpod.js.map +1 -0
- package/dist/test-utils/seed-pod.d.ts +5 -0
- package/dist/test-utils/seed-pod.js +61 -0
- package/dist/test-utils/seed-pod.js.map +1 -0
- package/package.json +38 -10
- package/templates/identity/account/create-pod.html.ejs +110 -0
- package/templates/main.html.ejs +10 -0
- package/dist/api/handlers/DevHandler.d.ts +0 -18
- package/dist/api/handlers/DevHandler.js +0 -276
- package/dist/api/handlers/DevHandler.js.map +0 -1
- package/dist/api/handlers/SignalHandler.d.ts +0 -13
- package/dist/api/handlers/SignalHandler.js +0 -122
- package/dist/api/handlers/SignalHandler.js.map +0 -1
- package/dist/gateway/Proxy.d.ts +0 -24
- package/dist/gateway/Proxy.js +0 -209
- package/dist/gateway/Proxy.js.map +0 -1
- package/dist/gateway/Supervisor.d.ts +0 -2
- package/dist/gateway/Supervisor.js +0 -7
- package/dist/gateway/Supervisor.js.map +0 -1
- package/dist/gateway/port-finder.d.ts +0 -4
- package/dist/gateway/port-finder.js +0 -15
- package/dist/gateway/port-finder.js.map +0 -1
- package/dist/gateway/types.d.ts +0 -1
- package/dist/gateway/types.js +0 -3
- package/dist/gateway/types.js.map +0 -1
- package/dist/http/SignalInterceptHttpHandler.d.ts +0 -24
- package/dist/http/SignalInterceptHttpHandler.js +0 -47
- package/dist/http/SignalInterceptHttpHandler.js.map +0 -1
- package/dist/http/SignalInterceptHttpHandler.jsonld +0 -103
- package/dist/http/admin/EdgeNodeSignalHttpHandler.d.ts +0 -71
- package/dist/http/admin/EdgeNodeSignalHttpHandler.js +0 -674
- package/dist/http/admin/EdgeNodeSignalHttpHandler.js.map +0 -1
- package/dist/http/admin/EdgeNodeSignalHttpHandler.jsonld +0 -406
- package/dist/http/cluster/PodMigrationHttpHandler.jsonld +0 -169
- package/dist/quota/DefaultQuotaService.d.ts +0 -16
- package/dist/quota/DefaultQuotaService.js +0 -37
- package/dist/quota/DefaultQuotaService.js.map +0 -1
- package/dist/quota/DefaultQuotaService.jsonld +0 -85
- package/dist/service/EdgeNodeHeartbeatService.js.map +0 -1
- package/dist/service/PodMigrationService.jsonld +0 -76
- package/dist/storage/MigratableDataAccessor.d.ts +0 -63
- package/dist/storage/MigratableDataAccessor.js +0 -11
- package/dist/storage/MigratableDataAccessor.js.map +0 -1
- package/dist/storage/MigratableDataAccessor.jsonld +0 -60
- package/dist/storage/accessors/TieredMinioDataAccessor.d.ts +0 -150
- package/dist/storage/accessors/TieredMinioDataAccessor.js +0 -582
- package/dist/storage/accessors/TieredMinioDataAccessor.js.map +0 -1
- package/dist/storage/accessors/TieredMinioDataAccessor.jsonld +0 -333
- package/static/app/assets/index.css +0 -1
- package/static/app/assets/main.js +0 -11
package/README.md
CHANGED
|
@@ -12,13 +12,31 @@ This is achieved through **Pods** (Personal Online Data stores)—portable web c
|
|
|
12
12
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
|
15
|
-
Ensure you have [Node.js](https://nodejs.org/) and [Yarn](https://yarnpkg.com/) installed:
|
|
15
|
+
Ensure you have [Node.js 22.x LTS](https://nodejs.org/) and [Yarn](https://yarnpkg.com/) installed:
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
yarn install
|
|
19
19
|
yarn build
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
> **Node runtime note**
|
|
23
|
+
> Xpod currently targets Node 22 (`>=22 <23`). `.nvmrc` only declares the version; it does not force non-interactive runners to switch automatically.
|
|
24
|
+
> AI/Codex runtimes, IDE background tasks, CI shells, or tmux panes may still start with the wrong `node` on `PATH`.
|
|
25
|
+
>
|
|
26
|
+
> Before running installs, local startup, or integration tests, run:
|
|
27
|
+
>
|
|
28
|
+
> ```bash
|
|
29
|
+
> nvm use
|
|
30
|
+
> yarn check:abi
|
|
31
|
+
> ```
|
|
32
|
+
>
|
|
33
|
+
> If you hit `better-sqlite3` / `NODE_MODULE_VERSION` errors, reinstall native dependencies under the same Node major:
|
|
34
|
+
>
|
|
35
|
+
> ```bash
|
|
36
|
+
> nvm use
|
|
37
|
+
> yarn install --force --ignore-engines
|
|
38
|
+
> ```
|
|
39
|
+
|
|
22
40
|
|
|
23
41
|
## Single-File Build & Local npm Release
|
|
24
42
|
|
|
@@ -66,6 +84,102 @@ Visit [http://localhost:3000/](http://localhost:3000/) after startup.
|
|
|
66
84
|
|
|
67
85
|
See [docs/deployment-modes.md](docs/deployment-modes.md) for detailed profile comparison and cloud-edge coordination.
|
|
68
86
|
|
|
87
|
+
## Library Mode for Tests
|
|
88
|
+
|
|
89
|
+
If you want to start the full Xpod stack inside your test process, you can import it as a library instead of spawning the CLI.
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import { startXpodRuntime } from '@undefineds.co/xpod/runtime';
|
|
93
|
+
|
|
94
|
+
const runtime = await startXpodRuntime({
|
|
95
|
+
mode: 'local',
|
|
96
|
+
open: true,
|
|
97
|
+
transport: 'socket',
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const res = await runtime.fetch('/service/status');
|
|
101
|
+
console.log(await res.json());
|
|
102
|
+
|
|
103
|
+
await runtime.stop();
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
For the lightest test setup, use the test helper export:
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
import { startNoAuthXpod } from '@undefineds.co/xpod/test-utils';
|
|
110
|
+
|
|
111
|
+
const xpod = await startNoAuthXpod();
|
|
112
|
+
console.log(xpod.baseUrl);
|
|
113
|
+
await xpod.stop();
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Notes:
|
|
117
|
+
- In socket mode, the logical base URL is `http://localhost/`, but real traffic goes through a Unix socket.
|
|
118
|
+
- This mode is ideal for CI and integration tests that should avoid external port conflicts.
|
|
119
|
+
- Docker/full integration tests should still use real service startup.
|
|
120
|
+
|
|
121
|
+
### Using Xpod from a downstream project
|
|
122
|
+
|
|
123
|
+
Install Xpod as a dev dependency in your test project:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
yarn add -D @undefineds.co/xpod
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Important for downstream CI / agent runners:
|
|
130
|
+
- Run the parent toolchain with Node 22 as well. If Codex, IDE tasks, or other AI runtimes are launched under Node 23, they may ignore your directory-level `nvm` hook and still load the wrong native ABI.
|
|
131
|
+
- The package ships `yarn check:abi`; use it before startup when debugging local environment issues.
|
|
132
|
+
|
|
133
|
+
Recommended entry points:
|
|
134
|
+
- `@undefineds.co/xpod` — CSS/components main entry
|
|
135
|
+
- `@undefineds.co/xpod/runtime` — in-process runtime API (`startXpodRuntime`)
|
|
136
|
+
- `@undefineds.co/xpod/test-utils` — lightest no-auth helper (`startNoAuthXpod`)
|
|
137
|
+
|
|
138
|
+
A minimal `vitest` example in a downstream repo:
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
142
|
+
import { startNoAuthXpod } from '@undefineds.co/xpod/test-utils';
|
|
143
|
+
|
|
144
|
+
let xpod: Awaited<ReturnType<typeof startNoAuthXpod>>;
|
|
145
|
+
|
|
146
|
+
afterAll(async() => {
|
|
147
|
+
await xpod?.stop();
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
beforeAll(async() => {
|
|
151
|
+
xpod = await startNoAuthXpod();
|
|
152
|
+
}, 60_000);
|
|
153
|
+
|
|
154
|
+
describe('xpod integration', () => {
|
|
155
|
+
it('starts in-process', async() => {
|
|
156
|
+
const response = await fetch(new URL('/service/status', xpod.baseUrl));
|
|
157
|
+
expect(response.ok).toBe(true);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
If you need more control in a downstream repo, use `startXpodRuntime` directly:
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
import { startXpodRuntime } from '@undefineds.co/xpod/runtime';
|
|
166
|
+
|
|
167
|
+
const runtime = await startXpodRuntime({
|
|
168
|
+
mode: 'local',
|
|
169
|
+
open: true,
|
|
170
|
+
transport: 'socket',
|
|
171
|
+
runtimeRoot: './.test-data/xpod-runtime',
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// use runtime.baseUrl / runtime.fetch / runtime.sockets here
|
|
175
|
+
await runtime.stop();
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Typical downstream use cases:
|
|
179
|
+
- Use `startNoAuthXpod()` for CI-friendly integration tests that only need an open local stack.
|
|
180
|
+
- Use `startXpodRuntime()` when you need auth mode, custom storage paths, or explicit runtime options.
|
|
181
|
+
- Keep Docker/cluster tests on real services; use library mode for local/lite test paths.
|
|
182
|
+
|
|
69
183
|
## Single-File Packaging
|
|
70
184
|
|
|
71
185
|
Build a self-extracting single-file launcher:
|
|
@@ -132,6 +246,45 @@ Xpod introduces a robust distributed architecture on top of standard Solid proto
|
|
|
132
246
|
- **Control Plane (The Cloud)**: The Xpod Server acts as a coordinator, providing DNS, TLS certificates, and Tunneling services. It ensures your Agent is discoverable and reachable from the global internet.
|
|
133
247
|
- **Data Plane (The Edge)**: Your Local Xpod holds the actual data and runs the Agents. It connects to the Cloud for reachability but executes Skills locally, ensuring data never leaves your physical control.
|
|
134
248
|
|
|
249
|
+
### 7. Dual-Process Architecture (CSS + API Server)
|
|
250
|
+
|
|
251
|
+
Xpod runs as two cooperating processes behind a single gateway:
|
|
252
|
+
|
|
253
|
+
| Process | Port | Responsibility |
|
|
254
|
+
|---------|------|----------------|
|
|
255
|
+
| **CSS** (Solid Server) | 3000 | LDP resource access, OIDC auth, SPARQL, WebSocket notifications |
|
|
256
|
+
| **API Server** | 3001 | Node management, heartbeat/DNS sync, quota, API Keys, AI chat |
|
|
257
|
+
|
|
258
|
+
- **CSS** handles everything related to the Solid protocol — it's the kernel of the Pod file system.
|
|
259
|
+
- **API Server** handles management APIs that don't belong in the Solid request chain.
|
|
260
|
+
- Both share the same PostgreSQL database (server mode) or SQLite (local mode).
|
|
261
|
+
|
|
262
|
+
**Auth methods**: Solid Token (DPoP/Bearer), API Key (`sk-*`), Node Token (`XpodNode nodeId:token`).
|
|
263
|
+
|
|
264
|
+
**API Server routes**:
|
|
265
|
+
|
|
266
|
+
| Route | Description | Mode |
|
|
267
|
+
|-------|-------------|------|
|
|
268
|
+
| `POST /v1/signal` | Edge node heartbeat → health check → DNS sync | Shared |
|
|
269
|
+
| `/v1/nodes/*` | Node CRUD | Shared |
|
|
270
|
+
| `/v1/keys/*` | API Key management | Shared |
|
|
271
|
+
| `/v1/chat/completions` | OpenAI-compatible chat (SSE streaming) | Shared |
|
|
272
|
+
| `/v1/responses` | OpenAI Responses API | Shared |
|
|
273
|
+
| `/v1/messages` | Anthropic/OpenAI Threads compatible | Shared |
|
|
274
|
+
| `/v1/models` | List available models | Shared |
|
|
275
|
+
| `POST /v1/chatkit` | ChatKit protocol endpoint (streaming) | Shared |
|
|
276
|
+
| `/v1/chatkit/threads/*` | ChatKit REST API (threads CRUD, items) | Shared |
|
|
277
|
+
| `/v1/subdomains/*` | Subdomain allocation | Cloud |
|
|
278
|
+
| `/v1/ddns/*` | Dynamic DNS management | Cloud |
|
|
279
|
+
| `/v1/webid-profile/*` | WebID Profile hosting | Cloud |
|
|
280
|
+
| `/provision/nodes` | SP registration | Cloud |
|
|
281
|
+
| `/provision/pods` | Pod creation (SP callback) | Local |
|
|
282
|
+
| `/admin/*` | Local config & restart | Local |
|
|
283
|
+
|
|
284
|
+
Key components:
|
|
285
|
+
- `EdgeNodeSignalHandler` (API Server) — receives heartbeats, triggers health checks and DNS synchronization
|
|
286
|
+
- `EdgeNodeSignalClient` (local/edge) — sends periodic heartbeats with system metrics, network info, and tunnel status
|
|
287
|
+
|
|
135
288
|
## Privacy & Compliance (GDPR)
|
|
136
289
|
|
|
137
290
|
Xpod is designed for the post-GDPR world, where **Data Sovereignty** is paramount.
|
|
@@ -149,18 +302,26 @@ Xpod is designed for the post-GDPR world, where **Data Sovereignty** is paramoun
|
|
|
149
302
|
- [x] Sidecar API: SPARQL (`/-/sparql`)
|
|
150
303
|
- [x] Sidecar API: Vector (`/-/vector`)
|
|
151
304
|
- [x] Cloud-Edge Cluster Architecture
|
|
152
|
-
- [
|
|
153
|
-
- [
|
|
305
|
+
- [x] API Server (dual-process architecture, separated from CSS)
|
|
306
|
+
- [x] Multi-Auth: Solid Token / API Key / Node Token
|
|
307
|
+
- [x] Edge Node Heartbeat + Health Check + DNS Sync
|
|
308
|
+
- [x] SP Provision & Pod Management
|
|
309
|
+
- [x] AI API: Chat Completions, Responses, Messages, Models (OpenAI-compatible, SSE streaming)
|
|
310
|
+
- [x] ChatKit API (conversation management)
|
|
311
|
+
- [x] Subdomain & DDNS Management
|
|
154
312
|
- [ ] Sidecar API: Terminal (`/-/terminal`)
|
|
313
|
+
- [ ] Rate Limiting
|
|
155
314
|
- [ ] Attribute-Based Access Control (ABAC)
|
|
156
315
|
- [ ] Feature Store (Federated Learning)
|
|
157
316
|
|
|
158
317
|
## Documentation
|
|
159
318
|
|
|
160
319
|
- [docs/COMPONENTS.md](docs/COMPONENTS.md) - Components.js reference and configuration patterns
|
|
320
|
+
- [docs/api-service-design.md](docs/api-service-design.md) - API Server architecture, routes, and auth design
|
|
161
321
|
- [docs/deployment-modes.md](docs/deployment-modes.md) - Deployment profiles (local, cloud)
|
|
162
322
|
- [docs/admin-guide.md](docs/admin-guide.md) - Admin initialization, roles, and reserved names
|
|
163
323
|
- [docs/edge-cluster-architecture.md](docs/edge-cluster-architecture.md) - Cloud-edge coordination and routing
|
|
324
|
+
- [docs/edge-node-deployment-modes.md](docs/edge-node-deployment-modes.md) - Edge node deployment scenarios
|
|
164
325
|
- [docs/sidecar-api.md](docs/sidecar-api.md) - Sidecar API pattern (`/-/{service}`)
|
|
165
326
|
- [docs/sparql-support.md](docs/sparql-support.md) - SPARQL 1.1 support details
|
|
166
327
|
- [docs/vector-api-server-guide.md](docs/vector-api-server-guide.md) - Vector search API guide
|
package/config/cli.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"@type": "YargsCliExtractor",
|
|
11
11
|
"parameters": [
|
|
12
12
|
{
|
|
13
|
-
"comment": "=== Visible CLI parameters ===",
|
|
13
|
+
"comment": "=== Visible CLI parameters (核心模式开关) ===",
|
|
14
14
|
"@type": "YargsParameter",
|
|
15
15
|
"name": "edition",
|
|
16
16
|
"options": {
|
|
@@ -20,18 +20,19 @@
|
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"@type": "YargsParameter",
|
|
23
|
-
"name": "
|
|
23
|
+
"name": "authMode",
|
|
24
24
|
"options": {
|
|
25
|
-
"type": "
|
|
26
|
-
"describe": "
|
|
25
|
+
"type": "string",
|
|
26
|
+
"describe": "Authorization mode: acp, acl, or allow-all",
|
|
27
|
+
"hidden": true
|
|
27
28
|
}
|
|
28
29
|
},
|
|
29
30
|
{
|
|
30
31
|
"@type": "YargsParameter",
|
|
31
|
-
"name": "
|
|
32
|
+
"name": "edgeNodesEnabled",
|
|
32
33
|
"options": {
|
|
33
34
|
"type": "boolean",
|
|
34
|
-
"describe": "Enable
|
|
35
|
+
"describe": "Enable edge node registry and routing."
|
|
35
36
|
}
|
|
36
37
|
},
|
|
37
38
|
{
|
|
@@ -51,14 +52,6 @@
|
|
|
51
52
|
"hidden": true
|
|
52
53
|
}
|
|
53
54
|
},
|
|
54
|
-
{
|
|
55
|
-
"@type": "YargsParameter",
|
|
56
|
-
"name": "identityTablePrefix",
|
|
57
|
-
"options": {
|
|
58
|
-
"type": "string",
|
|
59
|
-
"hidden": true
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
55
|
{
|
|
63
56
|
"@type": "YargsParameter",
|
|
64
57
|
"name": "usageDbUrl",
|
|
@@ -99,22 +92,6 @@
|
|
|
99
92
|
"hidden": true
|
|
100
93
|
}
|
|
101
94
|
},
|
|
102
|
-
{
|
|
103
|
-
"@type": "YargsParameter",
|
|
104
|
-
"name": "cachePath",
|
|
105
|
-
"options": {
|
|
106
|
-
"type": "string",
|
|
107
|
-
"hidden": true
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
"@type": "YargsParameter",
|
|
112
|
-
"name": "cacheMaxSize",
|
|
113
|
-
"options": {
|
|
114
|
-
"type": "string",
|
|
115
|
-
"hidden": true
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
95
|
{
|
|
119
96
|
"@type": "YargsParameter",
|
|
120
97
|
"name": "redisClient",
|
|
@@ -173,14 +150,6 @@
|
|
|
173
150
|
},
|
|
174
151
|
{
|
|
175
152
|
"comment": "=== Hidden: Business Features ===",
|
|
176
|
-
"@type": "YargsParameter",
|
|
177
|
-
"name": "signalEndpoint",
|
|
178
|
-
"options": {
|
|
179
|
-
"type": "string",
|
|
180
|
-
"hidden": true
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
153
|
"@type": "YargsParameter",
|
|
185
154
|
"name": "clusterIngressDomain",
|
|
186
155
|
"options": {
|
|
@@ -196,14 +165,6 @@
|
|
|
196
165
|
"hidden": true
|
|
197
166
|
}
|
|
198
167
|
},
|
|
199
|
-
{
|
|
200
|
-
"@type": "YargsParameter",
|
|
201
|
-
"name": "dnsRootDomain",
|
|
202
|
-
"options": {
|
|
203
|
-
"type": "string",
|
|
204
|
-
"hidden": true
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
168
|
{
|
|
208
169
|
"@type": "YargsParameter",
|
|
209
170
|
"name": "dnsRecordTtl",
|
|
@@ -244,14 +205,6 @@
|
|
|
244
205
|
"hidden": true
|
|
245
206
|
}
|
|
246
207
|
},
|
|
247
|
-
{
|
|
248
|
-
"@type": "YargsParameter",
|
|
249
|
-
"name": "tunnelEntrypoints",
|
|
250
|
-
"options": {
|
|
251
|
-
"type": "string",
|
|
252
|
-
"hidden": true
|
|
253
|
-
}
|
|
254
|
-
},
|
|
255
208
|
{
|
|
256
209
|
"@type": "YargsParameter",
|
|
257
210
|
"name": "edgeHealthProbesEnabled",
|
|
@@ -308,22 +261,6 @@
|
|
|
308
261
|
"hidden": true
|
|
309
262
|
}
|
|
310
263
|
},
|
|
311
|
-
{
|
|
312
|
-
"@type": "YargsParameter",
|
|
313
|
-
"name": "nodeToken",
|
|
314
|
-
"options": {
|
|
315
|
-
"type": "string",
|
|
316
|
-
"hidden": true
|
|
317
|
-
}
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
"@type": "YargsParameter",
|
|
321
|
-
"name": "nodePublicAddress",
|
|
322
|
-
"options": {
|
|
323
|
-
"type": "string",
|
|
324
|
-
"hidden": true
|
|
325
|
-
}
|
|
326
|
-
},
|
|
327
264
|
{
|
|
328
265
|
"@type": "YargsParameter",
|
|
329
266
|
"name": "nodeHeartbeatInterval",
|
|
@@ -344,9 +281,10 @@
|
|
|
344
281
|
{
|
|
345
282
|
"comment": "=== Hidden: IdP/SP Separation ===",
|
|
346
283
|
"@type": "YargsParameter",
|
|
347
|
-
"name": "
|
|
284
|
+
"name": "baseStorageDomain",
|
|
348
285
|
"options": {
|
|
349
286
|
"type": "string",
|
|
287
|
+
"describe": "Root domain for edge/SP node DNS records (e.g. undefineds.site)",
|
|
350
288
|
"hidden": true
|
|
351
289
|
}
|
|
352
290
|
},
|
package/config/cloud.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"overrideParameters": {
|
|
19
19
|
"@type": "WrappedExpiringReadWriteLocker",
|
|
20
20
|
"locker": {
|
|
21
|
-
"@type": "
|
|
21
|
+
"@type": "UrlAwareRedisLocker",
|
|
22
22
|
"redisClient": {
|
|
23
23
|
"@id": "urn:solid-server:default:variable:redisClient",
|
|
24
24
|
"@type": "Variable"
|
|
@@ -83,12 +83,11 @@
|
|
|
83
83
|
]
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
|
-
"comment": "
|
|
86
|
+
"comment": "Quota service backed by identity DB, falls back to env defaults then unlimited",
|
|
87
87
|
"@id": "urn:undefineds:xpod:QuotaService",
|
|
88
|
-
"@type": "
|
|
89
|
-
"
|
|
90
|
-
"@
|
|
91
|
-
"value": 10737418240
|
|
88
|
+
"@type": "DrizzleQuotaService",
|
|
89
|
+
"DrizzleQuotaService:_options_identityDbUrl": {
|
|
90
|
+
"@id": "urn:solid-server:default:variable:identityDbUrl"
|
|
92
91
|
}
|
|
93
92
|
},
|
|
94
93
|
{
|
|
@@ -126,7 +125,8 @@
|
|
|
126
125
|
},
|
|
127
126
|
"unstructuredDataAccessor": {
|
|
128
127
|
"@id": "urn:undefineds:xpod:RemoteDataAccessor"
|
|
129
|
-
}
|
|
128
|
+
},
|
|
129
|
+
"presignedRedirectEnabled": true
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
132
|
"comment": "PgQuintStore instance for QuintStoreSparqlDataAccessor (PostgreSQL backend).",
|
|
@@ -511,6 +511,33 @@
|
|
|
511
511
|
}
|
|
512
512
|
]
|
|
513
513
|
}
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"comment": "Override PodCreator with ProvisionPodCreator to support remote SP pod creation via provisionCode",
|
|
517
|
+
"@type": "Override",
|
|
518
|
+
"overrideInstance": {
|
|
519
|
+
"@id": "urn:solid-server:default:PodCreator"
|
|
520
|
+
},
|
|
521
|
+
"overrideParameters": {
|
|
522
|
+
"@type": "ProvisionPodCreator",
|
|
523
|
+
"baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
|
|
524
|
+
"identifierGenerator": { "@id": "urn:solid-server:default:IdentifierGenerator" },
|
|
525
|
+
"relativeWebIdPath": "/profile/card#me",
|
|
526
|
+
"webIdStore": { "@id": "urn:solid-server:default:WebIdStore" },
|
|
527
|
+
"podStore": { "@id": "urn:solid-server:default:PodStore" }
|
|
528
|
+
}
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"comment": "Override create-pod template to pass provisionCode from sessionStorage into POST settings",
|
|
532
|
+
"@type": "Override",
|
|
533
|
+
"overrideInstance": {
|
|
534
|
+
"@id": "urn:solid-server:default:CreatePodHtml"
|
|
535
|
+
},
|
|
536
|
+
"overrideParameters": {
|
|
537
|
+
"@type": "HtmlViewEntry",
|
|
538
|
+
"filePath": "./templates/identity/account/create-pod.html.ejs",
|
|
539
|
+
"route": { "@id": "urn:solid-server:default:AccountPodRoute" }
|
|
540
|
+
}
|
|
514
541
|
}
|
|
515
542
|
]
|
|
516
543
|
}
|
package/config/local.json
CHANGED
|
@@ -12,9 +12,13 @@
|
|
|
12
12
|
],
|
|
13
13
|
"@graph": [
|
|
14
14
|
{
|
|
15
|
-
"comment": "
|
|
15
|
+
"comment": "Quota service backed by identity DB, no env defaults = unlimited",
|
|
16
16
|
"@id": "urn:undefineds:xpod:QuotaService",
|
|
17
|
-
"@type": "
|
|
17
|
+
"@type": "DrizzleQuotaService",
|
|
18
|
+
"DrizzleQuotaService:_options_identityDbUrl": {
|
|
19
|
+
"@id": "urn:solid-server:default:variable:identityDbUrl",
|
|
20
|
+
"@type": "Variable"
|
|
21
|
+
}
|
|
18
22
|
},
|
|
19
23
|
{
|
|
20
24
|
"comment": "定义 idpUrl 变量(外部 IdP 基础 URL),设置后启用 SP 模式",
|
package/config/resolver.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"@type": "CombinedShorthandResolver",
|
|
11
11
|
"resolvers": [
|
|
12
12
|
{
|
|
13
|
-
"comment": "=== CLI Parameters (
|
|
13
|
+
"comment": "=== CLI Parameters (核心模式开关) ===",
|
|
14
14
|
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:edition",
|
|
15
15
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
16
16
|
"@type": "KeyExtractor",
|
|
@@ -19,18 +19,18 @@
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
|
-
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:
|
|
22
|
+
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:authMode",
|
|
23
23
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
24
24
|
"@type": "KeyExtractor",
|
|
25
|
-
"key": "
|
|
26
|
-
"defaultValue": "
|
|
25
|
+
"key": "authMode",
|
|
26
|
+
"defaultValue": "acp"
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:
|
|
30
|
+
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:edgeNodesEnabled",
|
|
31
31
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
32
32
|
"@type": "KeyExtractor",
|
|
33
|
-
"key": "
|
|
33
|
+
"key": "edgeNodesEnabled",
|
|
34
34
|
"defaultValue": "false"
|
|
35
35
|
}
|
|
36
36
|
},
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
|
|
46
46
|
{
|
|
47
|
-
"comment": "=== Data Layer
|
|
47
|
+
"comment": "=== Data Layer ===",
|
|
48
48
|
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:identityDbUrl",
|
|
49
49
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
50
50
|
"@type": "KeyExtractor",
|
|
@@ -147,15 +147,7 @@
|
|
|
147
147
|
},
|
|
148
148
|
|
|
149
149
|
{
|
|
150
|
-
"comment": "===
|
|
151
|
-
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:signalEndpoint",
|
|
152
|
-
"CombinedShorthandResolver:_resolvers_value": {
|
|
153
|
-
"@type": "KeyExtractor",
|
|
154
|
-
"key": "signalEndpoint",
|
|
155
|
-
"defaultValue": ""
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
{
|
|
150
|
+
"comment": "=== Business Features ===",
|
|
159
151
|
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:clusterIngressDomain",
|
|
160
152
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
161
153
|
"@type": "KeyExtractor",
|
|
@@ -171,13 +163,6 @@
|
|
|
171
163
|
"defaultValue": ""
|
|
172
164
|
}
|
|
173
165
|
},
|
|
174
|
-
{
|
|
175
|
-
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:dnsRootDomain",
|
|
176
|
-
"CombinedShorthandResolver:_resolvers_value": {
|
|
177
|
-
"@type": "KeyExtractor",
|
|
178
|
-
"key": "dnsRootDomain"
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
166
|
{
|
|
182
167
|
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:dnsRecordTtl",
|
|
183
168
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
@@ -218,14 +203,6 @@
|
|
|
218
203
|
"defaultValue": "0"
|
|
219
204
|
}
|
|
220
205
|
},
|
|
221
|
-
{
|
|
222
|
-
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:tunnelEntrypoints",
|
|
223
|
-
"CombinedShorthandResolver:_resolvers_value": {
|
|
224
|
-
"@type": "KeyExtractor",
|
|
225
|
-
"key": "tunnelEntrypoints",
|
|
226
|
-
"defaultValue": ""
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
206
|
{
|
|
230
207
|
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:edgeHealthProbesEnabled",
|
|
231
208
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
@@ -284,22 +261,6 @@
|
|
|
284
261
|
"defaultValue": ""
|
|
285
262
|
}
|
|
286
263
|
},
|
|
287
|
-
{
|
|
288
|
-
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:nodeToken",
|
|
289
|
-
"CombinedShorthandResolver:_resolvers_value": {
|
|
290
|
-
"@type": "KeyExtractor",
|
|
291
|
-
"key": "nodeToken",
|
|
292
|
-
"defaultValue": ""
|
|
293
|
-
}
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:nodePublicAddress",
|
|
297
|
-
"CombinedShorthandResolver:_resolvers_value": {
|
|
298
|
-
"@type": "KeyExtractor",
|
|
299
|
-
"key": "nodePublicAddress",
|
|
300
|
-
"defaultValue": ""
|
|
301
|
-
}
|
|
302
|
-
},
|
|
303
264
|
{
|
|
304
265
|
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:nodeHeartbeatInterval",
|
|
305
266
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
@@ -316,12 +277,13 @@
|
|
|
316
277
|
"defaultValue": "false"
|
|
317
278
|
}
|
|
318
279
|
},
|
|
280
|
+
|
|
319
281
|
{
|
|
320
282
|
"comment": "=== IdP/SP Separation Parameters ===",
|
|
321
|
-
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:
|
|
283
|
+
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:baseStorageDomain",
|
|
322
284
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
323
285
|
"@type": "KeyExtractor",
|
|
324
|
-
"key": "
|
|
286
|
+
"key": "baseStorageDomain",
|
|
325
287
|
"defaultValue": ""
|
|
326
288
|
}
|
|
327
289
|
},
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": [
|
|
3
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld",
|
|
4
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld"
|
|
5
|
+
],
|
|
6
|
+
"@graph": [
|
|
7
|
+
{
|
|
8
|
+
"comment": "Runtime-only override: disable auth resource handler in allow-all mode.",
|
|
9
|
+
"@type": "Override",
|
|
10
|
+
"overrideInstance": {
|
|
11
|
+
"@id": "urn:solid-server:default:AuthResourceHttpHandler"
|
|
12
|
+
},
|
|
13
|
+
"overrideParameters": {
|
|
14
|
+
"@type": "StaticThrowHandler",
|
|
15
|
+
"onlyHandle": false,
|
|
16
|
+
"factory": {
|
|
17
|
+
"@id": "urn:solid-server:default:UnsupportedErrorFactory"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
package/config/xpod.base.json
CHANGED
|
@@ -19,6 +19,38 @@
|
|
|
19
19
|
"@id": "urn:solid-server:default:variable:edgeNodesEnabled",
|
|
20
20
|
"@type": "Variable"
|
|
21
21
|
},
|
|
22
|
+
{
|
|
23
|
+
"comment": "ACP permission reader clone for auth mode switching.",
|
|
24
|
+
"@id": "urn:undefineds:xpod:AcpPermissionReader",
|
|
25
|
+
"@type": "CachedHandler",
|
|
26
|
+
"fields": [
|
|
27
|
+
"credentials",
|
|
28
|
+
"requestedModes"
|
|
29
|
+
],
|
|
30
|
+
"source": {
|
|
31
|
+
"@id": "urn:solid-server:default:AuxiliaryReader"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"comment": "Override default permission reader so tests can switch auth mode with a parameter.",
|
|
36
|
+
"@type": "Override",
|
|
37
|
+
"overrideInstance": {
|
|
38
|
+
"@id": "urn:solid-server:default:PermissionReader"
|
|
39
|
+
},
|
|
40
|
+
"overrideParameters": {
|
|
41
|
+
"@type": "AuthModeSelector",
|
|
42
|
+
"authMode": {
|
|
43
|
+
"@id": "urn:solid-server:default:variable:authMode",
|
|
44
|
+
"@type": "Variable"
|
|
45
|
+
},
|
|
46
|
+
"acpReader": {
|
|
47
|
+
"@id": "urn:undefineds:xpod:AcpPermissionReader"
|
|
48
|
+
},
|
|
49
|
+
"aclReader": {
|
|
50
|
+
"@id": "urn:undefineds:xpod:AcpPermissionReader"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
22
54
|
{
|
|
23
55
|
"comment": "An accessor for a Quadstore",
|
|
24
56
|
"@type": "QuadstoreSparqlDataAccessor",
|