@undefineds.co/xpod 0.1.6 → 0.2.0-preview.2
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 +141 -2
- 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/api/ApiServer.js +1 -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.js +19 -3
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/schema.d.ts +9 -3
- package/dist/api/chatkit/schema.js +14 -6
- 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 +12 -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 -15
- 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 +104 -0
- package/dist/api/runtime.js.map +1 -0
- 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/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 +143 -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 +208 -1
- 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/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 +23 -5
- 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
|
@@ -66,6 +66,98 @@ Visit [http://localhost:3000/](http://localhost:3000/) after startup.
|
|
|
66
66
|
|
|
67
67
|
See [docs/deployment-modes.md](docs/deployment-modes.md) for detailed profile comparison and cloud-edge coordination.
|
|
68
68
|
|
|
69
|
+
## Library Mode for Tests
|
|
70
|
+
|
|
71
|
+
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.
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { startXpodRuntime } from '@undefineds.co/xpod/runtime';
|
|
75
|
+
|
|
76
|
+
const runtime = await startXpodRuntime({
|
|
77
|
+
mode: 'local',
|
|
78
|
+
open: true,
|
|
79
|
+
transport: 'socket',
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const res = await runtime.fetch('/service/status');
|
|
83
|
+
console.log(await res.json());
|
|
84
|
+
|
|
85
|
+
await runtime.stop();
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
For the lightest test setup, use the test helper export:
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
import { startNoAuthXpod } from '@undefineds.co/xpod/test-utils';
|
|
92
|
+
|
|
93
|
+
const xpod = await startNoAuthXpod();
|
|
94
|
+
console.log(xpod.baseUrl);
|
|
95
|
+
await xpod.stop();
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Notes:
|
|
99
|
+
- In socket mode, the logical base URL is `http://localhost/`, but real traffic goes through a Unix socket.
|
|
100
|
+
- This mode is ideal for CI and integration tests that should avoid external port conflicts.
|
|
101
|
+
- Docker/cluster integration tests should still use real service startup.
|
|
102
|
+
|
|
103
|
+
### Using Xpod from a downstream project
|
|
104
|
+
|
|
105
|
+
Install Xpod as a dev dependency in your test project:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
yarn add -D @undefineds.co/xpod
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Recommended entry points:
|
|
112
|
+
- `@undefineds.co/xpod` — CSS/components main entry
|
|
113
|
+
- `@undefineds.co/xpod/runtime` — in-process runtime API (`startXpodRuntime`)
|
|
114
|
+
- `@undefineds.co/xpod/test-utils` — lightest no-auth helper (`startNoAuthXpod`)
|
|
115
|
+
|
|
116
|
+
A minimal `vitest` example in a downstream repo:
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
120
|
+
import { startNoAuthXpod } from '@undefineds.co/xpod/test-utils';
|
|
121
|
+
|
|
122
|
+
let xpod: Awaited<ReturnType<typeof startNoAuthXpod>>;
|
|
123
|
+
|
|
124
|
+
afterAll(async() => {
|
|
125
|
+
await xpod?.stop();
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
beforeAll(async() => {
|
|
129
|
+
xpod = await startNoAuthXpod();
|
|
130
|
+
}, 60_000);
|
|
131
|
+
|
|
132
|
+
describe('xpod integration', () => {
|
|
133
|
+
it('starts in-process', async() => {
|
|
134
|
+
const response = await fetch(new URL('/service/status', xpod.baseUrl));
|
|
135
|
+
expect(response.ok).toBe(true);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
If you need more control in a downstream repo, use `startXpodRuntime` directly:
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
import { startXpodRuntime } from '@undefineds.co/xpod/runtime';
|
|
144
|
+
|
|
145
|
+
const runtime = await startXpodRuntime({
|
|
146
|
+
mode: 'local',
|
|
147
|
+
open: true,
|
|
148
|
+
transport: 'socket',
|
|
149
|
+
runtimeRoot: './.test-data/xpod-runtime',
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// use runtime.baseUrl / runtime.fetch / runtime.sockets here
|
|
153
|
+
await runtime.stop();
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Typical downstream use cases:
|
|
157
|
+
- Use `startNoAuthXpod()` for CI-friendly integration tests that only need an open local stack.
|
|
158
|
+
- Use `startXpodRuntime()` when you need auth mode, custom storage paths, or explicit runtime options.
|
|
159
|
+
- Keep Docker/cluster tests on real services; use library mode for local/lite test paths.
|
|
160
|
+
|
|
69
161
|
## Single-File Packaging
|
|
70
162
|
|
|
71
163
|
Build a self-extracting single-file launcher:
|
|
@@ -132,6 +224,45 @@ Xpod introduces a robust distributed architecture on top of standard Solid proto
|
|
|
132
224
|
- **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
225
|
- **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
226
|
|
|
227
|
+
### 7. Dual-Process Architecture (CSS + API Server)
|
|
228
|
+
|
|
229
|
+
Xpod runs as two cooperating processes behind a single gateway:
|
|
230
|
+
|
|
231
|
+
| Process | Port | Responsibility |
|
|
232
|
+
|---------|------|----------------|
|
|
233
|
+
| **CSS** (Solid Server) | 3000 | LDP resource access, OIDC auth, SPARQL, WebSocket notifications |
|
|
234
|
+
| **API Server** | 3001 | Node management, heartbeat/DNS sync, quota, API Keys, AI chat |
|
|
235
|
+
|
|
236
|
+
- **CSS** handles everything related to the Solid protocol — it's the kernel of the Pod file system.
|
|
237
|
+
- **API Server** handles management APIs that don't belong in the Solid request chain.
|
|
238
|
+
- Both share the same PostgreSQL database (server mode) or SQLite (local mode).
|
|
239
|
+
|
|
240
|
+
**Auth methods**: Solid Token (DPoP/Bearer), API Key (`sk-*`), Node Token (`XpodNode nodeId:token`).
|
|
241
|
+
|
|
242
|
+
**API Server routes**:
|
|
243
|
+
|
|
244
|
+
| Route | Description | Mode |
|
|
245
|
+
|-------|-------------|------|
|
|
246
|
+
| `POST /v1/signal` | Edge node heartbeat → health check → DNS sync | Shared |
|
|
247
|
+
| `/v1/nodes/*` | Node CRUD | Shared |
|
|
248
|
+
| `/v1/keys/*` | API Key management | Shared |
|
|
249
|
+
| `/v1/chat/completions` | OpenAI-compatible chat (SSE streaming) | Shared |
|
|
250
|
+
| `/v1/responses` | OpenAI Responses API | Shared |
|
|
251
|
+
| `/v1/messages` | Anthropic/OpenAI Threads compatible | Shared |
|
|
252
|
+
| `/v1/models` | List available models | Shared |
|
|
253
|
+
| `POST /v1/chatkit` | ChatKit protocol endpoint (streaming) | Shared |
|
|
254
|
+
| `/v1/chatkit/threads/*` | ChatKit REST API (threads CRUD, items) | Shared |
|
|
255
|
+
| `/v1/subdomains/*` | Subdomain allocation | Cloud |
|
|
256
|
+
| `/v1/ddns/*` | Dynamic DNS management | Cloud |
|
|
257
|
+
| `/v1/webid-profile/*` | WebID Profile hosting | Cloud |
|
|
258
|
+
| `/provision/nodes` | SP registration | Cloud |
|
|
259
|
+
| `/provision/pods` | Pod creation (SP callback) | Local |
|
|
260
|
+
| `/admin/*` | Local config & restart | Local |
|
|
261
|
+
|
|
262
|
+
Key components:
|
|
263
|
+
- `EdgeNodeSignalHandler` (API Server) — receives heartbeats, triggers health checks and DNS synchronization
|
|
264
|
+
- `EdgeNodeSignalClient` (local/edge) — sends periodic heartbeats with system metrics, network info, and tunnel status
|
|
265
|
+
|
|
135
266
|
## Privacy & Compliance (GDPR)
|
|
136
267
|
|
|
137
268
|
Xpod is designed for the post-GDPR world, where **Data Sovereignty** is paramount.
|
|
@@ -149,18 +280,26 @@ Xpod is designed for the post-GDPR world, where **Data Sovereignty** is paramoun
|
|
|
149
280
|
- [x] Sidecar API: SPARQL (`/-/sparql`)
|
|
150
281
|
- [x] Sidecar API: Vector (`/-/vector`)
|
|
151
282
|
- [x] Cloud-Edge Cluster Architecture
|
|
152
|
-
- [
|
|
153
|
-
- [
|
|
283
|
+
- [x] API Server (dual-process architecture, separated from CSS)
|
|
284
|
+
- [x] Multi-Auth: Solid Token / API Key / Node Token
|
|
285
|
+
- [x] Edge Node Heartbeat + Health Check + DNS Sync
|
|
286
|
+
- [x] SP Provision & Pod Management
|
|
287
|
+
- [x] AI API: Chat Completions, Responses, Messages, Models (OpenAI-compatible, SSE streaming)
|
|
288
|
+
- [x] ChatKit API (conversation management)
|
|
289
|
+
- [x] Subdomain & DDNS Management
|
|
154
290
|
- [ ] Sidecar API: Terminal (`/-/terminal`)
|
|
291
|
+
- [ ] Rate Limiting
|
|
155
292
|
- [ ] Attribute-Based Access Control (ABAC)
|
|
156
293
|
- [ ] Feature Store (Federated Learning)
|
|
157
294
|
|
|
158
295
|
## Documentation
|
|
159
296
|
|
|
160
297
|
- [docs/COMPONENTS.md](docs/COMPONENTS.md) - Components.js reference and configuration patterns
|
|
298
|
+
- [docs/api-service-design.md](docs/api-service-design.md) - API Server architecture, routes, and auth design
|
|
161
299
|
- [docs/deployment-modes.md](docs/deployment-modes.md) - Deployment profiles (local, cloud)
|
|
162
300
|
- [docs/admin-guide.md](docs/admin-guide.md) - Admin initialization, roles, and reserved names
|
|
163
301
|
- [docs/edge-cluster-architecture.md](docs/edge-cluster-architecture.md) - Cloud-edge coordination and routing
|
|
302
|
+
- [docs/edge-node-deployment-modes.md](docs/edge-node-deployment-modes.md) - Edge node deployment scenarios
|
|
164
303
|
- [docs/sidecar-api.md](docs/sidecar-api.md) - Sidecar API pattern (`/-/{service}`)
|
|
165
304
|
- [docs/sparql-support.md](docs/sparql-support.md) - SPARQL 1.1 support details
|
|
166
305
|
- [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",
|
package/config/xpod.cluster.json
CHANGED
|
@@ -197,16 +197,12 @@
|
|
|
197
197
|
"@id": "urn:undefineds:xpod:TencentDnsProvider"
|
|
198
198
|
},
|
|
199
199
|
"rootDomain": {
|
|
200
|
-
"@id": "urn:solid-server:default:variable:
|
|
200
|
+
"@id": "urn:solid-server:default:variable:baseStorageDomain",
|
|
201
201
|
"@type": "Variable"
|
|
202
202
|
},
|
|
203
203
|
"ttl": {
|
|
204
204
|
"@id": "urn:solid-server:default:variable:dnsRecordTtl",
|
|
205
205
|
"@type": "Variable"
|
|
206
|
-
},
|
|
207
|
-
"clusterIp": {
|
|
208
|
-
"@id": "urn:solid-server:default:variable:clusterIngressIp",
|
|
209
|
-
"@type": "Variable"
|
|
210
206
|
}
|
|
211
207
|
},
|
|
212
208
|
{
|
|
@@ -280,31 +276,6 @@
|
|
|
280
276
|
"@type": "Variable"
|
|
281
277
|
}
|
|
282
278
|
},
|
|
283
|
-
{
|
|
284
|
-
"comment": "Edge node signal handler",
|
|
285
|
-
"@type": "EdgeNodeSignalHttpHandler",
|
|
286
|
-
"@id": "urn:undefineds:xpod:EdgeNodeSignalHttpHandler",
|
|
287
|
-
"identityDbUrl": {
|
|
288
|
-
"@id": "urn:solid-server:default:variable:identityDbUrl",
|
|
289
|
-
"@type": "Variable"
|
|
290
|
-
},
|
|
291
|
-
"edgeNodesEnabled": {
|
|
292
|
-
"@id": "urn:solid-server:default:variable:edgeNodesEnabled",
|
|
293
|
-
"@type": "Variable"
|
|
294
|
-
},
|
|
295
|
-
"dnsCoordinator": {
|
|
296
|
-
"@id": "urn:undefineds:xpod:EdgeNodeDnsCoordinator"
|
|
297
|
-
},
|
|
298
|
-
"certificateProvisioner": {
|
|
299
|
-
"@id": "urn:undefineds:xpod:Dns01CertificateProvisioner"
|
|
300
|
-
},
|
|
301
|
-
"tunnelManager": {
|
|
302
|
-
"@id": "urn:undefineds:xpod:EdgeNodeTunnelManager"
|
|
303
|
-
},
|
|
304
|
-
"healthProbeService": {
|
|
305
|
-
"@id": "urn:undefineds:xpod:EdgeNodeHealthProbeService"
|
|
306
|
-
}
|
|
307
|
-
},
|
|
308
279
|
{
|
|
309
280
|
"comment": "Redirects pod traffic to registered edge nodes (Debug Only)",
|
|
310
281
|
"@type": "EdgeNodeDirectDebugHttpHandler",
|
|
@@ -394,24 +365,11 @@
|
|
|
394
365
|
}
|
|
395
366
|
},
|
|
396
367
|
{
|
|
397
|
-
"comment": "
|
|
398
|
-
"@id": "urn:undefineds:xpod:SignalAwareHttpHandler",
|
|
399
|
-
"@type": "npmd:@undefineds.co/xpod/^0.0.0/dist/http/SignalInterceptHttpHandler.jsonld#SignalInterceptHttpHandler",
|
|
400
|
-
"npmd:@undefineds.co/xpod/^0.0.0/dist/http/SignalInterceptHttpHandler.jsonld#SignalInterceptHttpHandler_options_signalHandler": {
|
|
401
|
-
"@id": "urn:undefineds:xpod:EdgeNodeSignalHttpHandler"
|
|
402
|
-
},
|
|
403
|
-
"npmd:@undefineds.co/xpod/^0.0.0/dist/http/SignalInterceptHttpHandler.jsonld#SignalInterceptHttpHandler_options_fallback": {
|
|
404
|
-
"@id": "urn:solid-server:default:HttpHandler"
|
|
405
|
-
},
|
|
406
|
-
"npmd:@undefineds.co/xpod/^0.0.0/dist/http/SignalInterceptHttpHandler.jsonld#SignalInterceptHttpHandler_options_basePath": "/api/v1/signal"
|
|
407
|
-
},
|
|
408
|
-
{
|
|
409
|
-
"comment": "Define MainHttpHandler with SignalAwareHttpHandler in the middleware chain.",
|
|
368
|
+
"comment": "Define MainHttpHandler with tracing middleware.",
|
|
410
369
|
"@id": "urn:undefineds:xpod:MainHttpHandler",
|
|
411
370
|
"@type": "https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/ChainedHttpHandler.jsonld#ChainedHttpHandler",
|
|
412
371
|
"https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/ChainedHttpHandler.jsonld#ChainedHttpHandler_handlers": [
|
|
413
372
|
{ "@id": "urn:undefineds:xpod:TracingMiddleware" },
|
|
414
|
-
{ "@id": "urn:undefineds:xpod:SignalAwareHttpHandler" },
|
|
415
373
|
{ "@id": "urn:solid-server:default:HttpHandler" }
|
|
416
374
|
]
|
|
417
375
|
}
|