@undefineds.co/xpod 0.1.7 → 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.
Files changed (305) hide show
  1. package/README.md +141 -2
  2. package/config/cli.json +9 -71
  3. package/config/cloud.json +34 -7
  4. package/config/local.json +6 -2
  5. package/config/resolver.json +11 -49
  6. package/config/runtime-open.json +22 -0
  7. package/config/xpod.base.json +32 -0
  8. package/config/xpod.cluster.json +2 -44
  9. package/config/xpod.json +5 -2
  10. package/dist/api/auth/AuthContext.d.ts +12 -1
  11. package/dist/api/auth/AuthContext.js +18 -1
  12. package/dist/api/auth/AuthContext.js.map +1 -1
  13. package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +0 -1
  14. package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
  15. package/dist/api/auth/ServiceTokenAuthenticator.d.ts +18 -0
  16. package/dist/api/auth/ServiceTokenAuthenticator.js +50 -0
  17. package/dist/api/auth/ServiceTokenAuthenticator.js.map +1 -0
  18. package/dist/api/auth/index.d.ts +1 -0
  19. package/dist/api/auth/index.js +1 -0
  20. package/dist/api/auth/index.js.map +1 -1
  21. package/dist/api/chatkit/ai-provider.d.ts +0 -10
  22. package/dist/api/chatkit/ai-provider.js +11 -120
  23. package/dist/api/chatkit/ai-provider.js.map +1 -1
  24. package/dist/api/chatkit/default-agent.js +11 -8
  25. package/dist/api/chatkit/default-agent.js.map +1 -1
  26. package/dist/api/chatkit/pod-store.js +19 -3
  27. package/dist/api/chatkit/pod-store.js.map +1 -1
  28. package/dist/api/chatkit/schema.d.ts +9 -3
  29. package/dist/api/chatkit/schema.js +14 -6
  30. package/dist/api/chatkit/schema.js.map +1 -1
  31. package/dist/api/container/business-token.d.ts +9 -0
  32. package/dist/api/container/business-token.js +32 -0
  33. package/dist/api/container/business-token.js.map +1 -0
  34. package/dist/api/container/cloud.js +36 -12
  35. package/dist/api/container/cloud.js.map +1 -1
  36. package/dist/api/container/common.js +12 -5
  37. package/dist/api/container/common.js.map +1 -1
  38. package/dist/api/container/index.js +94 -14
  39. package/dist/api/container/index.js.map +1 -1
  40. package/dist/api/container/local.js +2 -1
  41. package/dist/api/container/local.js.map +1 -1
  42. package/dist/api/container/routes.js +81 -9
  43. package/dist/api/container/routes.js.map +1 -1
  44. package/dist/api/container/types.d.ts +8 -6
  45. package/dist/api/container/types.js.map +1 -1
  46. package/dist/api/handlers/AdminHandler.js +9 -9
  47. package/dist/api/handlers/AdminHandler.js.map +1 -1
  48. package/dist/api/handlers/ApiKeyHandler.js +0 -6
  49. package/dist/api/handlers/ApiKeyHandler.js.map +1 -1
  50. package/dist/api/handlers/EdgeNodeSignalHandler.d.ts +17 -0
  51. package/dist/api/handlers/EdgeNodeSignalHandler.js +171 -0
  52. package/dist/api/handlers/EdgeNodeSignalHandler.js.map +1 -0
  53. package/dist/api/handlers/PodManagementHandler.d.ts +5 -4
  54. package/dist/api/handlers/PodManagementHandler.js +11 -10
  55. package/dist/api/handlers/PodManagementHandler.js.map +1 -1
  56. package/dist/api/handlers/ProvisionHandler.d.ts +42 -0
  57. package/dist/api/handlers/ProvisionHandler.js +161 -0
  58. package/dist/api/handlers/ProvisionHandler.js.map +1 -0
  59. package/dist/api/handlers/QuotaHandler.d.ts +7 -7
  60. package/dist/api/handlers/QuotaHandler.js +143 -73
  61. package/dist/api/handlers/QuotaHandler.js.map +1 -1
  62. package/dist/api/handlers/SubdomainClientHandler.js +2 -2
  63. package/dist/api/handlers/SubdomainClientHandler.js.map +1 -1
  64. package/dist/api/handlers/SubdomainHandler.js +13 -8
  65. package/dist/api/handlers/SubdomainHandler.js.map +1 -1
  66. package/dist/api/handlers/UsageHandler.d.ts +14 -0
  67. package/dist/api/handlers/UsageHandler.js +123 -0
  68. package/dist/api/handlers/UsageHandler.js.map +1 -0
  69. package/dist/api/handlers/index.d.ts +3 -1
  70. package/dist/api/handlers/index.js +3 -1
  71. package/dist/api/handlers/index.js.map +1 -1
  72. package/dist/api/main.js +18 -0
  73. package/dist/api/main.js.map +1 -1
  74. package/dist/api/middleware/OpenAuthMiddleware.d.ts +12 -0
  75. package/dist/api/middleware/OpenAuthMiddleware.js +27 -0
  76. package/dist/api/middleware/OpenAuthMiddleware.js.map +1 -0
  77. package/dist/api/runtime.d.ts +15 -0
  78. package/dist/api/runtime.js +104 -0
  79. package/dist/api/runtime.js.map +1 -0
  80. package/dist/api/service/VercelChatService.d.ts +16 -7
  81. package/dist/api/service/VercelChatService.js +98 -178
  82. package/dist/api/service/VercelChatService.js.map +1 -1
  83. package/dist/api/store/DrizzleClientCredentialsStore.d.ts +6 -11
  84. package/dist/api/store/DrizzleClientCredentialsStore.js +9 -39
  85. package/dist/api/store/DrizzleClientCredentialsStore.js.map +1 -1
  86. package/dist/authorization/AuthModeSelector.d.ts +10 -0
  87. package/dist/authorization/AuthModeSelector.js +27 -0
  88. package/dist/authorization/AuthModeSelector.js.map +1 -0
  89. package/dist/authorization/AuthModeSelector.jsonld +81 -0
  90. package/dist/cli/commands/account.d.ts +6 -0
  91. package/dist/cli/commands/account.js +119 -0
  92. package/dist/cli/commands/account.js.map +1 -0
  93. package/dist/cli/commands/auth.js +20 -29
  94. package/dist/cli/commands/auth.js.map +1 -1
  95. package/dist/cli/commands/backup.d.ts +15 -0
  96. package/dist/cli/commands/backup.js +286 -0
  97. package/dist/cli/commands/backup.js.map +1 -0
  98. package/dist/cli/commands/config.d.ts +34 -3
  99. package/dist/cli/commands/config.js +195 -258
  100. package/dist/cli/commands/config.js.map +1 -1
  101. package/dist/cli/commands/doctor.d.ts +6 -0
  102. package/dist/cli/commands/doctor.js +94 -0
  103. package/dist/cli/commands/doctor.js.map +1 -0
  104. package/dist/cli/commands/pod.d.ts +6 -0
  105. package/dist/cli/commands/pod.js +124 -0
  106. package/dist/cli/commands/pod.js.map +1 -0
  107. package/dist/cli/commands/start.js +28 -5
  108. package/dist/cli/commands/start.js.map +1 -1
  109. package/dist/cli/index.js +9 -0
  110. package/dist/cli/index.js.map +1 -1
  111. package/dist/cli/lib/credentials-store.d.ts +17 -0
  112. package/dist/cli/lib/credentials-store.js +73 -0
  113. package/dist/cli/lib/credentials-store.js.map +1 -0
  114. package/dist/cli/lib/css-account.d.ts +17 -0
  115. package/dist/cli/lib/css-account.js +56 -0
  116. package/dist/cli/lib/css-account.js.map +1 -1
  117. package/dist/cli/lib/pod-thread-store.d.ts +57 -0
  118. package/dist/cli/lib/pod-thread-store.js +310 -0
  119. package/dist/cli/lib/pod-thread-store.js.map +1 -0
  120. package/dist/cli/lib/solid-auth.d.ts +20 -0
  121. package/dist/cli/lib/solid-auth.js +70 -0
  122. package/dist/cli/lib/solid-auth.js.map +1 -0
  123. package/dist/components/components.jsonld +5 -8
  124. package/dist/components/context.jsonld +114 -244
  125. package/dist/edge/EdgeNodeAgent.js +2 -2
  126. package/dist/edge/EdgeNodeAgent.js.map +1 -1
  127. package/dist/edge/EdgeNodeDnsCoordinator.d.ts +1 -7
  128. package/dist/edge/EdgeNodeDnsCoordinator.js +31 -41
  129. package/dist/edge/EdgeNodeDnsCoordinator.js.map +1 -1
  130. package/dist/edge/EdgeNodeDnsCoordinator.jsonld +1 -27
  131. package/dist/edge/EdgeNodeModeDetector.d.ts +1 -1
  132. package/dist/edge/EdgeNodeModeDetector.js +9 -11
  133. package/dist/edge/EdgeNodeModeDetector.js.map +1 -1
  134. package/dist/http/ClusterIngressRouter.js +3 -3
  135. package/dist/http/ClusterIngressRouter.js.map +1 -1
  136. package/dist/http/ClusterWebSocketConfigurator.js +2 -2
  137. package/dist/http/ClusterWebSocketConfigurator.js.map +1 -1
  138. package/dist/http/PodRoutingHttpHandler.js +2 -2
  139. package/dist/http/PodRoutingHttpHandler.js.map +1 -1
  140. package/dist/http/cluster/PodMigrationHttpHandler.d.ts +1 -1
  141. package/dist/http/cluster/PodMigrationHttpHandler.js +1 -1
  142. package/dist/http/cluster/PodMigrationHttpHandler.js.map +1 -1
  143. package/dist/identity/drizzle/EdgeNodeRepository.d.ts +37 -4
  144. package/dist/identity/drizzle/EdgeNodeRepository.js +120 -128
  145. package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
  146. package/dist/identity/drizzle/ServiceTokenRepository.d.ts +52 -0
  147. package/dist/identity/drizzle/ServiceTokenRepository.js +143 -0
  148. package/dist/identity/drizzle/ServiceTokenRepository.js.map +1 -0
  149. package/dist/identity/drizzle/db.d.ts +9 -0
  150. package/dist/identity/drizzle/db.js +208 -1
  151. package/dist/identity/drizzle/db.js.map +1 -1
  152. package/dist/identity/drizzle/schema.pg.d.ts +5 -0
  153. package/dist/identity/drizzle/schema.pg.js +49 -20
  154. package/dist/identity/drizzle/schema.pg.js.map +1 -1
  155. package/dist/identity/drizzle/schema.sqlite.d.ts +332 -57
  156. package/dist/identity/drizzle/schema.sqlite.js +48 -18
  157. package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
  158. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +6 -4
  159. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
  160. package/dist/index.d.ts +6 -9
  161. package/dist/index.js +12 -14
  162. package/dist/index.js.map +1 -1
  163. package/dist/main.js +25 -8
  164. package/dist/main.js.map +1 -1
  165. package/dist/provision/ProvisionCodeCodec.d.ts +39 -0
  166. package/dist/provision/ProvisionCodeCodec.js +65 -0
  167. package/dist/provision/ProvisionCodeCodec.js.map +1 -0
  168. package/dist/provision/ProvisionCodeCodec.jsonld +47 -0
  169. package/dist/provision/ProvisionPodCreator.d.ts +20 -0
  170. package/dist/provision/ProvisionPodCreator.js +84 -0
  171. package/dist/provision/ProvisionPodCreator.js.map +1 -0
  172. package/dist/provision/ProvisionPodCreator.jsonld +118 -0
  173. package/dist/quota/DrizzleQuotaService.d.ts +17 -3
  174. package/dist/quota/DrizzleQuotaService.js +108 -8
  175. package/dist/quota/DrizzleQuotaService.js.map +1 -1
  176. package/dist/quota/DrizzleQuotaService.jsonld +33 -22
  177. package/dist/quota/NoopQuotaService.d.ts +7 -1
  178. package/dist/quota/NoopQuotaService.js +12 -0
  179. package/dist/quota/NoopQuotaService.js.map +1 -1
  180. package/dist/quota/NoopQuotaService.jsonld +24 -0
  181. package/dist/quota/QuotaService.d.ts +17 -0
  182. package/dist/quota/QuotaService.js +5 -0
  183. package/dist/quota/QuotaService.js.map +1 -1
  184. package/dist/quota/QuotaService.jsonld +50 -0
  185. package/dist/runtime/Proxy.d.ts +22 -4
  186. package/dist/runtime/Proxy.js +154 -35
  187. package/dist/runtime/Proxy.js.map +1 -1
  188. package/dist/runtime/XpodRuntime.d.ts +49 -0
  189. package/dist/runtime/XpodRuntime.js +374 -0
  190. package/dist/runtime/XpodRuntime.js.map +1 -0
  191. package/dist/runtime/env-utils.d.ts +2 -0
  192. package/dist/runtime/env-utils.js +55 -0
  193. package/dist/runtime/env-utils.js.map +1 -0
  194. package/dist/runtime/index.d.ts +4 -0
  195. package/dist/runtime/index.js +8 -1
  196. package/dist/runtime/index.js.map +1 -1
  197. package/dist/runtime/socket-fetch.d.ts +1 -0
  198. package/dist/runtime/socket-fetch.js +72 -0
  199. package/dist/runtime/socket-fetch.js.map +1 -0
  200. package/dist/runtime/socket-http.d.ts +1 -0
  201. package/dist/runtime/socket-http.js +142 -0
  202. package/dist/runtime/socket-http.js.map +1 -0
  203. package/dist/runtime/socket-utils.d.ts +2 -0
  204. package/dist/runtime/socket-utils.js +34 -0
  205. package/dist/runtime/socket-utils.js.map +1 -0
  206. package/dist/service/{EdgeNodeHeartbeatService.d.ts → EdgeNodeSignalClient.d.ts} +3 -3
  207. package/dist/service/{EdgeNodeHeartbeatService.js → EdgeNodeSignalClient.js} +4 -4
  208. package/dist/service/EdgeNodeSignalClient.js.map +1 -0
  209. package/dist/service/PodMigrationService.d.ts +1 -2
  210. package/dist/service/PodMigrationService.js +1 -2
  211. package/dist/service/PodMigrationService.js.map +1 -1
  212. package/dist/storage/SparqlUpdateResourceStore.js +1 -1
  213. package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
  214. package/dist/storage/accessors/MinioDataAccessor.d.ts +6 -0
  215. package/dist/storage/accessors/MinioDataAccessor.js +10 -0
  216. package/dist/storage/accessors/MinioDataAccessor.js.map +1 -1
  217. package/dist/storage/accessors/MinioDataAccessor.jsonld +4 -0
  218. package/dist/storage/accessors/MixDataAccessor.d.ts +2 -1
  219. package/dist/storage/accessors/MixDataAccessor.js +12 -1
  220. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  221. package/dist/storage/accessors/MixDataAccessor.jsonld +19 -0
  222. package/dist/storage/locking/UrlAwareRedisLocker.d.ts +18 -0
  223. package/dist/storage/locking/UrlAwareRedisLocker.js +60 -0
  224. package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -0
  225. package/dist/storage/locking/UrlAwareRedisLocker.jsonld +123 -0
  226. package/dist/storage/quota/UsageRepository.d.ts +41 -8
  227. package/dist/storage/quota/UsageRepository.js +252 -50
  228. package/dist/storage/quota/UsageRepository.js.map +1 -1
  229. package/dist/storage/sparql/ComunicaQuintEngine.d.ts +9 -0
  230. package/dist/storage/sparql/ComunicaQuintEngine.js +50 -9
  231. package/dist/storage/sparql/ComunicaQuintEngine.js.map +1 -1
  232. package/dist/storage/sparql/QueryOptimizer.js +13 -1
  233. package/dist/storage/sparql/QueryOptimizer.js.map +1 -1
  234. package/dist/storage/sparql/QuintQuerySource.d.ts +14 -0
  235. package/dist/storage/sparql/QuintQuerySource.js +152 -1
  236. package/dist/storage/sparql/QuintQuerySource.js.map +1 -1
  237. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -0
  238. package/dist/storage/sparql/SubgraphQueryEngine.js +6 -2
  239. package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
  240. package/dist/storage/sparql/SubgraphQueryEngine.jsonld +4 -0
  241. package/dist/subdomain/SubdomainClient.d.ts +3 -3
  242. package/dist/subdomain/SubdomainClient.js +1 -1
  243. package/dist/subdomain/SubdomainClient.js.map +1 -1
  244. package/dist/subdomain/SubdomainService.d.ts +15 -16
  245. package/dist/subdomain/SubdomainService.js +80 -54
  246. package/dist/subdomain/SubdomainService.js.map +1 -1
  247. package/dist/subdomain/SubdomainService.jsonld +22 -26
  248. package/dist/supervisor/Supervisor.d.ts +7 -2
  249. package/dist/supervisor/Supervisor.js +33 -1
  250. package/dist/supervisor/Supervisor.js.map +1 -1
  251. package/dist/test-utils/index.d.ts +4 -0
  252. package/dist/test-utils/index.js +8 -0
  253. package/dist/test-utils/index.js.map +1 -0
  254. package/dist/test-utils/no-auth-xpod.d.ts +11 -0
  255. package/dist/test-utils/no-auth-xpod.js +25 -0
  256. package/dist/test-utils/no-auth-xpod.js.map +1 -0
  257. package/dist/test-utils/seed-pod.d.ts +5 -0
  258. package/dist/test-utils/seed-pod.js +61 -0
  259. package/dist/test-utils/seed-pod.js.map +1 -0
  260. package/package.json +23 -5
  261. package/templates/identity/account/create-pod.html.ejs +110 -0
  262. package/templates/main.html.ejs +10 -0
  263. package/dist/api/handlers/DevHandler.d.ts +0 -18
  264. package/dist/api/handlers/DevHandler.js +0 -276
  265. package/dist/api/handlers/DevHandler.js.map +0 -1
  266. package/dist/api/handlers/SignalHandler.d.ts +0 -13
  267. package/dist/api/handlers/SignalHandler.js +0 -122
  268. package/dist/api/handlers/SignalHandler.js.map +0 -1
  269. package/dist/gateway/Proxy.d.ts +0 -24
  270. package/dist/gateway/Proxy.js +0 -209
  271. package/dist/gateway/Proxy.js.map +0 -1
  272. package/dist/gateway/Supervisor.d.ts +0 -2
  273. package/dist/gateway/Supervisor.js +0 -7
  274. package/dist/gateway/Supervisor.js.map +0 -1
  275. package/dist/gateway/port-finder.d.ts +0 -4
  276. package/dist/gateway/port-finder.js +0 -15
  277. package/dist/gateway/port-finder.js.map +0 -1
  278. package/dist/gateway/types.d.ts +0 -1
  279. package/dist/gateway/types.js +0 -3
  280. package/dist/gateway/types.js.map +0 -1
  281. package/dist/http/SignalInterceptHttpHandler.d.ts +0 -24
  282. package/dist/http/SignalInterceptHttpHandler.js +0 -47
  283. package/dist/http/SignalInterceptHttpHandler.js.map +0 -1
  284. package/dist/http/SignalInterceptHttpHandler.jsonld +0 -103
  285. package/dist/http/admin/EdgeNodeSignalHttpHandler.d.ts +0 -71
  286. package/dist/http/admin/EdgeNodeSignalHttpHandler.js +0 -674
  287. package/dist/http/admin/EdgeNodeSignalHttpHandler.js.map +0 -1
  288. package/dist/http/admin/EdgeNodeSignalHttpHandler.jsonld +0 -406
  289. package/dist/http/cluster/PodMigrationHttpHandler.jsonld +0 -169
  290. package/dist/quota/DefaultQuotaService.d.ts +0 -16
  291. package/dist/quota/DefaultQuotaService.js +0 -37
  292. package/dist/quota/DefaultQuotaService.js.map +0 -1
  293. package/dist/quota/DefaultQuotaService.jsonld +0 -85
  294. package/dist/service/EdgeNodeHeartbeatService.js.map +0 -1
  295. package/dist/service/PodMigrationService.jsonld +0 -76
  296. package/dist/storage/MigratableDataAccessor.d.ts +0 -63
  297. package/dist/storage/MigratableDataAccessor.js +0 -11
  298. package/dist/storage/MigratableDataAccessor.js.map +0 -1
  299. package/dist/storage/MigratableDataAccessor.jsonld +0 -60
  300. package/dist/storage/accessors/TieredMinioDataAccessor.d.ts +0 -150
  301. package/dist/storage/accessors/TieredMinioDataAccessor.js +0 -582
  302. package/dist/storage/accessors/TieredMinioDataAccessor.js.map +0 -1
  303. package/dist/storage/accessors/TieredMinioDataAccessor.jsonld +0 -333
  304. package/static/app/assets/index.css +0 -1
  305. 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
- - [ ] Sidecar API: Chat Completions (`/-/chat/completions`)
153
- - [ ] Sidecar API: Responses (`/-/responses`)
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": "edgeNodesEnabled",
23
+ "name": "authMode",
24
24
  "options": {
25
- "type": "boolean",
26
- "describe": "Enable edge node registry and routing."
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": "edgeAgentEnabled",
32
+ "name": "edgeNodesEnabled",
32
33
  "options": {
33
34
  "type": "boolean",
34
- "describe": "Enable local edge agent functionality."
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": "baseDomain",
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": "RedisLocker",
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": "Default quota limits (in-memory overrides)",
86
+ "comment": "Quota service backed by identity DB, falls back to env defaults then unlimited",
87
87
  "@id": "urn:undefineds:xpod:QuotaService",
88
- "@type": "DefaultQuotaService",
89
- "DefaultQuotaService:_options_defaultAccountQuotaBytes": {
90
- "@type": "Literal",
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": "Disable quota for local profile",
15
+ "comment": "Quota service backed by identity DB, no env defaults = unlimited",
16
16
  "@id": "urn:undefineds:xpod:QuotaService",
17
- "@type": "NoopQuotaService"
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 模式",
@@ -10,7 +10,7 @@
10
10
  "@type": "CombinedShorthandResolver",
11
11
  "resolvers": [
12
12
  {
13
- "comment": "=== CLI Parameters (KeyExtractor, from Yargs args dict) ===",
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:edgeNodesEnabled",
22
+ "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:authMode",
23
23
  "CombinedShorthandResolver:_resolvers_value": {
24
24
  "@type": "KeyExtractor",
25
- "key": "edgeNodesEnabled",
26
- "defaultValue": "false"
25
+ "key": "authMode",
26
+ "defaultValue": "acp"
27
27
  }
28
28
  },
29
29
  {
30
- "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:edgeAgentEnabled",
30
+ "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:edgeNodesEnabled",
31
31
  "CombinedShorthandResolver:_resolvers_value": {
32
32
  "@type": "KeyExtractor",
33
- "key": "edgeAgentEnabled",
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 (KeyExtractor, hidden CLI params with CSS_ prefix) ===",
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": "=== Xpod Business Features (KeyExtractor, CSS_ prefix via Yargs) ===",
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:baseDomain",
283
+ "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:baseStorageDomain",
322
284
  "CombinedShorthandResolver:_resolvers_value": {
323
285
  "@type": "KeyExtractor",
324
- "key": "baseDomain",
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
+ }
@@ -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",
@@ -197,16 +197,12 @@
197
197
  "@id": "urn:undefineds:xpod:TencentDnsProvider"
198
198
  },
199
199
  "rootDomain": {
200
- "@id": "urn:solid-server:default:variable:baseUrl",
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": "Composite handler that intercepts /api/v1/signal and forwards other traffic to CSS defaults.",
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
  }