@opendatalabs/personal-server-ts-server 0.0.1-canary.e9e40b0 → 0.0.1-canary.ee2f3fb

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 (247) hide show
  1. package/dist/api-auth.d.ts +31 -0
  2. package/dist/api-auth.d.ts.map +1 -0
  3. package/dist/api-auth.js +148 -0
  4. package/dist/api-auth.js.map +1 -0
  5. package/dist/api.d.ts +4 -0
  6. package/dist/api.d.ts.map +1 -1
  7. package/dist/api.js +3 -0
  8. package/dist/api.js.map +1 -1
  9. package/dist/app.d.ts +70 -3
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +168 -10
  12. package/dist/app.js.map +1 -1
  13. package/dist/bootstrap.d.ts +36 -2
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +361 -27
  16. package/dist/bootstrap.js.map +1 -1
  17. package/dist/client.d.ts +17 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +369 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/config/defaults.d.ts +12 -0
  22. package/dist/config/defaults.d.ts.map +1 -0
  23. package/dist/config/defaults.js +14 -0
  24. package/dist/config/defaults.js.map +1 -0
  25. package/dist/config/index.d.ts +4 -0
  26. package/dist/config/index.d.ts.map +1 -0
  27. package/dist/config/index.js +4 -0
  28. package/dist/config/index.js.map +1 -0
  29. package/dist/config/loader.d.ts +8 -0
  30. package/dist/config/loader.d.ts.map +1 -0
  31. package/dist/config/loader.js +82 -0
  32. package/dist/config/loader.js.map +1 -0
  33. package/dist/config/paths.d.ts +9 -0
  34. package/dist/config/paths.d.ts.map +1 -0
  35. package/dist/config/paths.js +22 -0
  36. package/dist/config/paths.js.map +1 -0
  37. package/dist/enclave-main.d.ts +11 -0
  38. package/dist/enclave-main.d.ts.map +1 -0
  39. package/dist/enclave-main.js +188 -0
  40. package/dist/enclave-main.js.map +1 -0
  41. package/dist/index.js +13 -24
  42. package/dist/index.js.map +1 -1
  43. package/dist/jobs/access-reporter.d.ts +36 -0
  44. package/dist/jobs/access-reporter.d.ts.map +1 -0
  45. package/dist/jobs/access-reporter.js +272 -0
  46. package/dist/jobs/access-reporter.js.map +1 -0
  47. package/dist/jobs/raw-envelope-stream.d.ts +3 -0
  48. package/dist/jobs/raw-envelope-stream.d.ts.map +1 -0
  49. package/dist/jobs/raw-envelope-stream.js +371 -0
  50. package/dist/jobs/raw-envelope-stream.js.map +1 -0
  51. package/dist/jobs/types.d.ts +17 -0
  52. package/dist/jobs/types.d.ts.map +1 -0
  53. package/dist/jobs/types.js +3 -0
  54. package/dist/jobs/types.js.map +1 -0
  55. package/dist/jobs/worker.d.ts +43 -0
  56. package/dist/jobs/worker.d.ts.map +1 -0
  57. package/dist/jobs/worker.js +491 -0
  58. package/dist/jobs/worker.js.map +1 -0
  59. package/dist/keys/server-account.d.ts +28 -0
  60. package/dist/keys/server-account.d.ts.map +1 -0
  61. package/dist/keys/server-account.js +48 -0
  62. package/dist/keys/server-account.js.map +1 -0
  63. package/dist/listen.d.ts +11 -0
  64. package/dist/listen.d.ts.map +1 -0
  65. package/dist/listen.js +23 -0
  66. package/dist/listen.js.map +1 -0
  67. package/dist/logger/index.d.ts +5 -0
  68. package/dist/logger/index.d.ts.map +1 -0
  69. package/dist/logger/index.js +9 -0
  70. package/dist/logger/index.js.map +1 -0
  71. package/dist/logging/access-log.d.ts +4 -0
  72. package/dist/logging/access-log.d.ts.map +1 -0
  73. package/dist/logging/access-log.js +25 -0
  74. package/dist/logging/access-log.js.map +1 -0
  75. package/dist/logging/access-reader.d.ts +19 -0
  76. package/dist/logging/access-reader.d.ts.map +1 -0
  77. package/dist/logging/access-reader.js +50 -0
  78. package/dist/logging/access-reader.js.map +1 -0
  79. package/dist/mcp/durable-state.d.ts +82 -0
  80. package/dist/mcp/durable-state.d.ts.map +1 -0
  81. package/dist/mcp/durable-state.js +428 -0
  82. package/dist/mcp/durable-state.js.map +1 -0
  83. package/dist/mcp/grants.d.ts +12 -0
  84. package/dist/mcp/grants.d.ts.map +1 -0
  85. package/dist/mcp/grants.js +33 -0
  86. package/dist/mcp/grants.js.map +1 -0
  87. package/dist/mcp/index.d.ts +4 -0
  88. package/dist/mcp/index.d.ts.map +1 -0
  89. package/dist/mcp/index.js +4 -0
  90. package/dist/mcp/index.js.map +1 -0
  91. package/dist/mcp/tee-ingress.d.ts +33 -0
  92. package/dist/mcp/tee-ingress.d.ts.map +1 -0
  93. package/dist/mcp/tee-ingress.js +336 -0
  94. package/dist/mcp/tee-ingress.js.map +1 -0
  95. package/dist/middleware/cors.d.ts +18 -0
  96. package/dist/middleware/cors.d.ts.map +1 -0
  97. package/dist/middleware/cors.js +51 -0
  98. package/dist/middleware/cors.js.map +1 -0
  99. package/dist/middleware/local-listener.d.ts +33 -0
  100. package/dist/middleware/local-listener.d.ts.map +1 -0
  101. package/dist/middleware/local-listener.js +103 -0
  102. package/dist/middleware/local-listener.js.map +1 -0
  103. package/dist/middleware/web3-auth.d.ts +1 -0
  104. package/dist/middleware/web3-auth.d.ts.map +1 -1
  105. package/dist/middleware/web3-auth.js +6 -0
  106. package/dist/middleware/web3-auth.js.map +1 -1
  107. package/dist/migrations/detect-stuck-version-ledger.d.ts +43 -0
  108. package/dist/migrations/detect-stuck-version-ledger.d.ts.map +1 -0
  109. package/dist/migrations/detect-stuck-version-ledger.js +73 -0
  110. package/dist/migrations/detect-stuck-version-ledger.js.map +1 -0
  111. package/dist/migrations/local-state.d.ts +14 -0
  112. package/dist/migrations/local-state.d.ts.map +1 -1
  113. package/dist/migrations/local-state.js +27 -0
  114. package/dist/migrations/local-state.js.map +1 -1
  115. package/dist/migrations/state-migrations.d.ts +78 -0
  116. package/dist/migrations/state-migrations.d.ts.map +1 -0
  117. package/dist/migrations/state-migrations.js +72 -0
  118. package/dist/migrations/state-migrations.js.map +1 -0
  119. package/dist/package.json +67 -0
  120. package/dist/pending-blob-deletions.d.ts +10 -0
  121. package/dist/pending-blob-deletions.d.ts.map +1 -0
  122. package/dist/pending-blob-deletions.js +38 -0
  123. package/dist/pending-blob-deletions.js.map +1 -0
  124. package/dist/routes/access-logs.d.ts +5 -0
  125. package/dist/routes/access-logs.d.ts.map +1 -1
  126. package/dist/routes/access-logs.js +10 -15
  127. package/dist/routes/access-logs.js.map +1 -1
  128. package/dist/routes/auth-device.d.ts +1 -0
  129. package/dist/routes/auth-device.d.ts.map +1 -1
  130. package/dist/routes/auth-device.js +6 -0
  131. package/dist/routes/auth-device.js.map +1 -1
  132. package/dist/routes/data.d.ts +67 -4
  133. package/dist/routes/data.d.ts.map +1 -1
  134. package/dist/routes/data.js +37 -142
  135. package/dist/routes/data.js.map +1 -1
  136. package/dist/routes/derivatives.d.ts +33 -0
  137. package/dist/routes/derivatives.d.ts.map +1 -0
  138. package/dist/routes/derivatives.js +33 -0
  139. package/dist/routes/derivatives.js.map +1 -0
  140. package/dist/routes/enclave-fleet.d.ts +14 -0
  141. package/dist/routes/enclave-fleet.d.ts.map +1 -0
  142. package/dist/routes/enclave-fleet.js +43 -0
  143. package/dist/routes/enclave-fleet.js.map +1 -0
  144. package/dist/routes/enclave-jobs.d.ts +9 -0
  145. package/dist/routes/enclave-jobs.d.ts.map +1 -0
  146. package/dist/routes/enclave-jobs.js +106 -0
  147. package/dist/routes/enclave-jobs.js.map +1 -0
  148. package/dist/routes/enclave-mcp.d.ts +9 -0
  149. package/dist/routes/enclave-mcp.d.ts.map +1 -0
  150. package/dist/routes/enclave-mcp.js +46 -0
  151. package/dist/routes/enclave-mcp.js.map +1 -0
  152. package/dist/routes/grants.d.ts +7 -2
  153. package/dist/routes/grants.d.ts.map +1 -1
  154. package/dist/routes/grants.js +17 -43
  155. package/dist/routes/grants.js.map +1 -1
  156. package/dist/routes/health.d.ts.map +1 -1
  157. package/dist/routes/health.js +18 -4
  158. package/dist/routes/health.js.map +1 -1
  159. package/dist/routes/mcp.d.ts +118 -0
  160. package/dist/routes/mcp.d.ts.map +1 -0
  161. package/dist/routes/mcp.js +705 -0
  162. package/dist/routes/mcp.js.map +1 -0
  163. package/dist/routes/oauth-token.d.ts +1 -1
  164. package/dist/routes/oauth-token.d.ts.map +1 -1
  165. package/dist/routes/oauth-token.js +8 -33
  166. package/dist/routes/oauth-token.js.map +1 -1
  167. package/dist/routes/sync.d.ts +5 -0
  168. package/dist/routes/sync.d.ts.map +1 -1
  169. package/dist/routes/sync.js +11 -26
  170. package/dist/routes/sync.js.map +1 -1
  171. package/dist/routes/ui-config.d.ts.map +1 -1
  172. package/dist/routes/ui-config.js +17 -60
  173. package/dist/routes/ui-config.js.map +1 -1
  174. package/dist/routes/ui-registration.d.ts +2 -0
  175. package/dist/routes/ui-registration.d.ts.map +1 -1
  176. package/dist/routes/ui-registration.js +13 -5
  177. package/dist/routes/ui-registration.js.map +1 -1
  178. package/dist/routes/ui.d.ts +7 -0
  179. package/dist/routes/ui.d.ts.map +1 -1
  180. package/dist/routes/ui.js +32 -3
  181. package/dist/routes/ui.js.map +1 -1
  182. package/dist/routes/write-session.d.ts +37 -0
  183. package/dist/routes/write-session.d.ts.map +1 -0
  184. package/dist/routes/write-session.js +34 -0
  185. package/dist/routes/write-session.js.map +1 -0
  186. package/dist/scripts/bundle-verification.d.ts +2 -0
  187. package/dist/scripts/bundle-verification.d.ts.map +1 -0
  188. package/dist/scripts/bundle-verification.js +32 -0
  189. package/dist/scripts/bundle-verification.js.map +1 -0
  190. package/dist/scripts/verify-bundle.d.ts +2 -0
  191. package/dist/scripts/verify-bundle.d.ts.map +1 -0
  192. package/dist/scripts/verify-bundle.js +44 -0
  193. package/dist/scripts/verify-bundle.js.map +1 -0
  194. package/dist/storage/hierarchy.d.ts +40 -0
  195. package/dist/storage/hierarchy.d.ts.map +1 -0
  196. package/dist/storage/hierarchy.js +292 -0
  197. package/dist/storage/hierarchy.js.map +1 -0
  198. package/dist/storage/index-manager.d.ts +60 -0
  199. package/dist/storage/index-manager.d.ts.map +1 -0
  200. package/dist/storage/index-manager.js +174 -0
  201. package/dist/storage/index-manager.js.map +1 -0
  202. package/dist/storage/index-schema.d.ts +5 -0
  203. package/dist/storage/index-schema.d.ts.map +1 -0
  204. package/dist/storage/index-schema.js +69 -0
  205. package/dist/storage/index-schema.js.map +1 -0
  206. package/dist/storage/node-data-storage.d.ts +1 -1
  207. package/dist/storage/node-data-storage.d.ts.map +1 -1
  208. package/dist/storage/node-data-storage.js +64 -1
  209. package/dist/storage/node-data-storage.js.map +1 -1
  210. package/dist/storage/question-store.d.ts +9 -0
  211. package/dist/storage/question-store.d.ts.map +1 -0
  212. package/dist/storage/question-store.js +173 -0
  213. package/dist/storage/question-store.js.map +1 -0
  214. package/dist/sync-cursor.d.ts +15 -0
  215. package/dist/sync-cursor.d.ts.map +1 -0
  216. package/dist/sync-cursor.js +110 -0
  217. package/dist/sync-cursor.js.map +1 -0
  218. package/dist/tunnel/auth.d.ts +4 -0
  219. package/dist/tunnel/auth.d.ts.map +1 -1
  220. package/dist/tunnel/auth.js +2 -1
  221. package/dist/tunnel/auth.js.map +1 -1
  222. package/dist/tunnel/binary.d.ts +8 -0
  223. package/dist/tunnel/binary.d.ts.map +1 -1
  224. package/dist/tunnel/binary.js +11 -0
  225. package/dist/tunnel/binary.js.map +1 -1
  226. package/dist/tunnel/config.d.ts +1 -0
  227. package/dist/tunnel/config.d.ts.map +1 -1
  228. package/dist/tunnel/config.js +1 -1
  229. package/dist/tunnel/config.js.map +1 -1
  230. package/dist/tunnel/manager.d.ts +21 -1
  231. package/dist/tunnel/manager.d.ts.map +1 -1
  232. package/dist/tunnel/manager.js +78 -23
  233. package/dist/tunnel/manager.js.map +1 -1
  234. package/dist/ui/index.html +319 -34
  235. package/dist/ui/ps-lite-debug.d.ts +31 -0
  236. package/dist/ui/ps-lite-debug.d.ts.map +1 -1
  237. package/dist/ui/ps-lite-debug.js +125824 -61836
  238. package/dist/ui/ps-lite-debug.js.map +1 -1
  239. package/package.json +26 -8
  240. package/dist/middleware/data-read-policy.d.ts +0 -11
  241. package/dist/middleware/data-read-policy.d.ts.map +0 -1
  242. package/dist/middleware/data-read-policy.js +0 -39
  243. package/dist/middleware/data-read-policy.js.map +0 -1
  244. package/dist/middleware/grant-check.d.ts +0 -12
  245. package/dist/middleware/grant-check.d.ts.map +0 -1
  246. package/dist/middleware/grant-check.js +0 -90
  247. package/dist/middleware/grant-check.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ import { type SessionTokenVerifierPort } from "@opendatalabs/personal-server-ts-core/auth";
2
+ import type { PersonalServerApiAuthPort } from "@opendatalabs/personal-server-ts-core/api";
3
+ import { type WriteProofReplayStore, type WriteSessionStore } from "@opendatalabs/personal-server-ts-core/write";
4
+ import type { DataStoragePort, RuntimeAvailabilityPort } from "@opendatalabs/personal-server-ts-core/ports";
5
+ import type { GatewayClient } from "@opendatalabs/vana-sdk/node";
6
+ export interface ServerApiAuthDeps {
7
+ serverOrigin: string | (() => string);
8
+ serverOwner?: `0x${string}`;
9
+ gateway: GatewayClient;
10
+ devToken?: string;
11
+ accessToken?: string;
12
+ tokenStore?: SessionTokenVerifierPort;
13
+ dataStorage?: Pick<DataStoragePort, "findEntry">;
14
+ runtimeAvailability?: RuntimeAvailabilityPort;
15
+ /**
16
+ * Write API sessions. When present, POST /v1/data/:scope accepts a bearer
17
+ * write-session token (minted by POST /v1/write/session) and authorizes the
18
+ * write as the session's builder via verifyDataWritePolicy + the
19
+ * X-Vana-Write-Signature attribution proof. Absent = owner-only ingest,
20
+ * exactly as before.
21
+ */
22
+ writeSessionStore?: WriteSessionStore;
23
+ /**
24
+ * Replay guard for per-write proofs (X-Vana-Write-Signature). Defaults to
25
+ * an in-memory store so replay protection is always on when write sessions
26
+ * are enabled; hosts may supply a shared store.
27
+ */
28
+ writeProofReplayStore?: WriteProofReplayStore;
29
+ }
30
+ export declare function createServerApiAuth(deps: ServerApiAuthDeps): PersonalServerApiAuthPort;
31
+ //# sourceMappingURL=api-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-auth.d.ts","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EACV,yBAAyB,EAG1B,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,6CAA6C,CAAC;AAMrD,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,WAAW,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACjD,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AA6CD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,iBAAiB,GACtB,yBAAyB,CAiI3B"}
@@ -0,0 +1,148 @@
1
+ import { authenticateRequest, } from "@opendatalabs/personal-server-ts-core/auth";
2
+ import { verifyDataReadPolicy } from "@opendatalabs/personal-server-ts-core/policy";
3
+ import { createInMemoryWriteProofReplayStore, createWriteSessionAuthorization, } from "@opendatalabs/personal-server-ts-core/write";
4
+ import { NotOwnerError, ProtocolError, UnregisteredBuilderError, } from "@opendatalabs/personal-server-ts-core/errors";
5
+ function serverNotConfigured() {
6
+ return new ProtocolError(500, "SERVER_NOT_CONFIGURED", "Server owner address not configured. Set VANA_MASTER_KEY_SIGNATURE environment variable.");
7
+ }
8
+ function isOwner(signer, serverOwner) {
9
+ return Boolean(serverOwner && signer.toLowerCase() === serverOwner.toLowerCase());
10
+ }
11
+ async function authenticate(request, deps) {
12
+ return authenticateRequest({
13
+ request,
14
+ serverOrigin: deps.serverOrigin,
15
+ devToken: deps.devToken,
16
+ accessToken: deps.accessToken,
17
+ sessionTokenVerifier: deps.tokenStore,
18
+ serverOwner: deps.serverOwner,
19
+ });
20
+ }
21
+ async function assertRegisteredBuilder(gateway, signer) {
22
+ // vana-sdk 3.14.0's GatewayClient always exposes isRegisteredBuilder, so the
23
+ // legacy getBuilder feature-detect fallback is now unreachable (its else
24
+ // branch narrows the client to `never`). Query registration directly, matching
25
+ // middleware/builder-check.ts.
26
+ if (await gateway.isRegisteredBuilder(signer))
27
+ return;
28
+ throw new UnregisteredBuilderError();
29
+ }
30
+ export function createServerApiAuth(deps) {
31
+ const writeProofReplayStore = deps.writeProofReplayStore ?? createInMemoryWriteProofReplayStore();
32
+ // The write-session half of this port is protocol, not runtime: the browser
33
+ // build's adapters call the same factory, so a delegated write is checked
34
+ // identically wherever the Personal Server runs.
35
+ const writeSessions = createWriteSessionAuthorization({
36
+ serverOrigin: deps.serverOrigin,
37
+ serverOwner: deps.serverOwner,
38
+ sessionStore: deps.writeSessionStore,
39
+ replayStore: writeProofReplayStore,
40
+ policyPorts: {
41
+ authSessionVerifier: deps.gateway,
42
+ grantVerifier: deps.gateway,
43
+ runtimeAvailability: deps.runtimeAvailability,
44
+ // Fee seam intentionally not wired: builder writes are free in the
45
+ // demo slice (write fee mechanics undecided).
46
+ },
47
+ });
48
+ async function authorizeOwner(request) {
49
+ const result = await authenticate(request, deps);
50
+ if (result.isPolicyBypass)
51
+ return;
52
+ if (!deps.serverOwner)
53
+ throw serverNotConfigured();
54
+ if (!isOwner(result.auth.signer, deps.serverOwner)) {
55
+ throw new NotOwnerError({
56
+ signer: result.auth.signer,
57
+ expected: deps.serverOwner,
58
+ });
59
+ }
60
+ }
61
+ /**
62
+ * Delegated ingest. A bearer token that resolves to a live write session
63
+ * authorizes as the session builder: the write policy re-runs against the
64
+ * LIVE grant (revocation / expiry / scope coverage stay authoritative per
65
+ * write), and the builder's X-Vana-Write-Signature payload proof is
66
+ * verified and returned for the handler to store with the record. Any
67
+ * other credential (owner Web3Signed, dev token, control-plane token,
68
+ * unknown bearer) falls through to the owner path unchanged.
69
+ */
70
+ async function authorizeWrite(input) {
71
+ const delegated = await writeSessions.authorizeSessionWrite(input);
72
+ if (delegated)
73
+ return delegated;
74
+ await authorizeOwner(input.request);
75
+ }
76
+ /**
77
+ * Identity-only recognition of a write-session caller: the bearer must
78
+ * resolve to a live session and the request must carry that builder's
79
+ * valid proof, but NO grant policy runs (there is no scope to run it
80
+ * against). Callers use it only to choose between error shapes, never to
81
+ * release data, so a revoked or narrowed grant getting a 404 instead of a
82
+ * 401 discloses nothing. Returns undefined for any other credential.
83
+ */
84
+ async function authorizeWriteSession(request) {
85
+ return writeSessions.recognizeWriteSession(request);
86
+ }
87
+ return {
88
+ authorizeOwner,
89
+ authorizeWrite,
90
+ authorizeWriteSession,
91
+ async authorizeBuilderList(request) {
92
+ const result = await authenticate(request, deps);
93
+ if (result.isPolicyBypass ||
94
+ isOwner(result.auth.signer, deps.serverOwner)) {
95
+ return;
96
+ }
97
+ await assertRegisteredBuilder(deps.gateway, result.auth.signer);
98
+ },
99
+ async authorizeBuilderRead(input) {
100
+ const result = await authenticate(input.request, deps);
101
+ if (result.isPolicyBypass) {
102
+ return { builder: result.auth.signer, grantId: "policy-bypass" };
103
+ }
104
+ // Owner-exempt read paths. We allow two mechanisms here:
105
+ // - web3-signed: per-request signature by the owner wallet. Already
106
+ // gated on a fresh cryptographic proof per request.
107
+ // - control-plane-token: a static bearer set by the parent host
108
+ // process at boot. Never crosses an interactive surface, so it
109
+ // has the same threat model as the host process itself.
110
+ // Intentionally NOT exempted:
111
+ // - cli-session-token: an interactive bearer issued via /auth/device.
112
+ // These flow through terminals / copy-paste / shell history, so we
113
+ // keep them on the grant path so that any leaked CLI session can
114
+ // still only read what an explicit grant authorizes.
115
+ // Defense-in-depth justification: any owner-identified credential can
116
+ // already mint a grant via authorizeOwner, so blocking owner reads in
117
+ // general does not meaningfully shrink the blast radius of a stolen
118
+ // token. The cli-session-token exception preserves the audit-log
119
+ // signal for the one credential class that's most prone to leakage.
120
+ if (isOwner(result.auth.signer, deps.serverOwner) &&
121
+ (result.mechanism === "web3-signed" ||
122
+ result.mechanism === "control-plane-token")) {
123
+ return { builder: result.auth.signer, grantId: "owner" };
124
+ }
125
+ // Fail closed: a builder grant read can't be authorized if we can't
126
+ // identify this server's owner to bind the grant to.
127
+ if (!deps.serverOwner)
128
+ throw serverNotConfigured();
129
+ const selectedEntry = deps.dataStorage?.findEntry({
130
+ scope: input.scope,
131
+ fileId: input.fileId,
132
+ });
133
+ const grant = await verifyDataReadPolicy({
134
+ signer: result.auth.signer,
135
+ grantId: result.auth.payload.grantId ?? input.grantId,
136
+ requestedScope: input.scope,
137
+ fileId: input.fileId ?? selectedEntry?.fileId ?? undefined,
138
+ serverOwner: deps.serverOwner,
139
+ }, {
140
+ authSessionVerifier: deps.gateway,
141
+ grantVerifier: deps.gateway,
142
+ runtimeAvailability: deps.runtimeAvailability,
143
+ });
144
+ return { builder: result.auth.signer, grantId: grant.id };
145
+ },
146
+ };
147
+ }
148
+ //# sourceMappingURL=api-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-auth.js","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"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"}
package/dist/api.d.ts CHANGED
@@ -1,2 +1,6 @@
1
1
  export { createServer, type CreateServerOptions, type ServerContext, } from "./bootstrap.js";
2
+ export { startPersonalServer, type StartPersonalServerNodeOptions, } from "./client.js";
3
+ export type { PersonalServerHandle, PersonalServerClientErrorBody, PersonalServerDataVersion, PersonalServerHealthRegistration, PersonalServerIdentity, PersonalServerInfo, PersonalServerAuthRequestOptions, PersonalServerListDataOptions, PersonalServerListDataResult, PersonalServerListVersionsOptions, PersonalServerListVersionsResult, PersonalServerReadDataOptions, PersonalServerRegistrationRequest, PersonalServerStatus, PersonalServerSyncTriggerResult, PersonalServerUrls, } from "@opendatalabs/personal-server-ts-core/client";
4
+ export { PersonalServerClientError, dataListPath, dataReadPath, dataVersionsPath, parsePersonalServerJsonResponse, } from "@opendatalabs/personal-server-ts-core/client";
5
+ export { DEFAULT_ROOT_PATH, DEFAULT_CONFIG_PATH, DEFAULT_DATA_DIR, DEFAULT_SERVER_DIR, DEFAULT_VANA_DIR, expandHomePath, loadConfig, resolveRootPath, type LoadConfigOptions, } from "./config/index.js";
2
6
  //# sourceMappingURL=api.d.ts.map
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,KAAK,8BAA8B,GACpC,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,6BAA6B,EAC7B,yBAAyB,EACzB,gCAAgC,EAChC,sBAAsB,EACtB,kBAAkB,EAClB,gCAAgC,EAChC,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,EACjC,gCAAgC,EAChC,6BAA6B,EAC7B,iCAAiC,EACjC,oBAAoB,EACpB,+BAA+B,EAC/B,kBAAkB,GACnB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,+BAA+B,GAChC,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC"}
package/dist/api.js CHANGED
@@ -1,2 +1,5 @@
1
1
  export { createServer, } from "./bootstrap.js";
2
+ export { startPersonalServer, } from "./client.js";
3
+ export { PersonalServerClientError, dataListPath, dataReadPath, dataVersionsPath, parsePersonalServerJsonResponse, } from "@opendatalabs/personal-server-ts-core/client";
4
+ export { DEFAULT_ROOT_PATH, DEFAULT_CONFIG_PATH, DEFAULT_DATA_DIR, DEFAULT_SERVER_DIR, DEFAULT_VANA_DIR, expandHomePath, loadConfig, resolveRootPath, } from "./config/index.js";
2
5
  //# sourceMappingURL=api.js.map
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AAmBrB,OAAO,EACL,yBAAyB,EACzB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,+BAA+B,GAChC,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,eAAe,GAEhB,MAAM,mBAAmB,CAAC"}
package/dist/app.d.ts CHANGED
@@ -5,12 +5,19 @@ import type { DataPortabilityGatewayConfig, GatewayClient } from "@opendatalabs/
5
5
  import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
6
6
  import type { AccessLogWriter } from "@opendatalabs/personal-server-ts-core/logging/access-log";
7
7
  import type { AccessLogReader } from "@opendatalabs/personal-server-ts-core/logging/access-reader";
8
+ import type { PersonalServerReadFulfillmentReporter } from "@opendatalabs/personal-server-ts-core/api";
8
9
  import { type HealthDeps } from "./routes/health.js";
9
- import type { SyncManager } from "@opendatalabs/personal-server-ts-core/sync";
10
+ import { type WriteProofReplayStore, type WriteSessionStore } from "@opendatalabs/personal-server-ts-core/write";
11
+ import { McpActivityRecorder, type McpConnectionStore, type McpOAuthAuthorizationStore } from "@opendatalabs/personal-server-ts-core/mcp";
12
+ import type { ScopeDeletionTracker, SyncManager } from "@opendatalabs/personal-server-ts-core/sync";
10
13
  import type { ServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
11
- import type { DataStoragePort, FeeVerifierPort, RuntimeAvailabilityPort } from "@opendatalabs/personal-server-ts-core/ports";
14
+ import type { LineageGatewayPort } from "@opendatalabs/personal-server-ts-core/lineage";
15
+ import type { QuestionStore, RecomputeScheduler } from "@opendatalabs/personal-server-ts-core/derivatives";
16
+ import type { DataStoragePort, RuntimeAvailabilityPort } from "@opendatalabs/personal-server-ts-core/ports";
12
17
  import type { TokenStore } from "./token-store.js";
13
18
  import type { Logger } from "pino";
19
+ import type { JobRequestEnvelope } from "@opendatalabs/vana-sdk/protocol/jobs";
20
+ import type { JobExecuteResponse } from "./jobs/types.js";
14
21
  export interface IdentityInfo {
15
22
  address: `0x${string}`;
16
23
  publicKey: `0x${string}`;
@@ -33,19 +40,79 @@ export interface AppDeps {
33
40
  config?: ServerConfig;
34
41
  accessLogWriter: AccessLogWriter;
35
42
  accessLogReader: AccessLogReader;
43
+ readFulfillmentReporter?: PersonalServerReadFulfillmentReporter;
36
44
  cloudMode?: boolean;
37
45
  devToken?: string;
46
+ /**
47
+ * Port of the loopback-only auth listener. The dev UI subtree is served
48
+ * only to connections that arrived on it (never via the tunnel).
49
+ */
50
+ localApprovalPort?: number;
51
+ /** Main server port; a loopback-port collision disables the dev UI. */
52
+ serverPort?: number;
38
53
  ownerSignature?: `0x${string}`;
39
54
  ownerPrivateKey?: `0x${string}`;
40
55
  accessToken?: string;
41
56
  configPath?: string;
42
57
  syncManager?: SyncManager | null;
58
+ /** Read-side tombstone memory; reads of a deleted scope answer 410. */
59
+ scopeDeletions?: ScopeDeletionTracker;
43
60
  serverSigner?: ServerSigner;
44
61
  tokenStore?: TokenStore;
45
- feeVerifier?: FeeVerifierPort;
46
62
  runtimeAvailability?: RuntimeAvailabilityPort;
47
63
  dataStorage?: DataStoragePort;
64
+ /**
65
+ * Gateway base URL — wired into the data route so the GET handler can
66
+ * forward validated X-PAYMENTs to POST /v1/escrow/pay via direct fetch.
67
+ */
68
+ gatewayUrl?: string;
69
+ /**
70
+ * When true, GET /v1/data/:scope enforces X402 payment on every read.
71
+ * Off-by-default to keep dev / test setups frictionless.
72
+ */
73
+ paymentEnabled?: boolean;
74
+ /** Derivative data: gateway lineage access for the data routes. */
75
+ lineageGateway?: LineageGatewayPort;
76
+ /**
77
+ * Derivative compute layer (docs/derivative-data-api.md, "Compute").
78
+ * Absent = /v1/derivatives answers 503 and writes trigger no recompute.
79
+ */
80
+ derivativeCompute?: {
81
+ store: QuestionStore;
82
+ scheduler: RecomputeScheduler;
83
+ } | null;
48
84
  getTunnelStatus?: HealthDeps["getTunnelStatus"];
85
+ /**
86
+ * Invoked when the /ui/api registration route confirms the server is
87
+ * registered with the gateway (fresh or pre-existing), so a
88
+ * registration-gated tunnel can start immediately instead of waiting for
89
+ * the bootstrap's gateway poll (BUI-611).
90
+ */
91
+ onServerRegistered?: (serverId: string | null) => void;
92
+ /**
93
+ * MCP connection store shared between the `/mcp/:token` Streamable HTTP
94
+ * endpoint and the owner `/v1/mcp/connections` management surface. Defaults
95
+ * to an in-memory store so the routes are wired up out of the box; pass an
96
+ * IndexedDB-backed (or persistent) store for production.
97
+ */
98
+ mcpConnectionStore?: McpConnectionStore;
99
+ mcpOAuthAuthorizationStore?: McpOAuthAuthorizationStore;
100
+ mcpOAuthApprovalUrl?: string | (() => string);
101
+ mcpActivityRecorder?: McpActivityRecorder;
102
+ mcpHydrateScopes?: (scopes: string[]) => Promise<void>;
103
+ /**
104
+ * Write API session store shared between POST /v1/write/session (which
105
+ * mints tokens) and the ingest endpoint (which redeems them). Defaults to
106
+ * an in-memory store, mirroring the MCP connection store default.
107
+ */
108
+ writeSessionStore?: WriteSessionStore;
109
+ /**
110
+ * Replay guard for per-write proofs on delegated ingest. Defaults to an
111
+ * in-memory store (api-auth); hosts may supply a shared one.
112
+ */
113
+ writeProofReplayStore?: WriteProofReplayStore;
114
+ profile?: "standard" | "enclave";
115
+ jobWorker?: (envelope: JobRequestEnvelope) => Promise<JobExecuteResponse>;
49
116
  }
50
117
  export declare function createApp(deps: AppDeps): Hono;
51
118
  //# sourceMappingURL=app.d.ts.map
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,KAAK,EACV,4BAA4B,EAC5B,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AACnG,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAalE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1D,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,4BAA4B,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;CACjD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CA6L7C"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/app.js CHANGED
@@ -1,25 +1,49 @@
1
1
  import { Hono } from "hono";
2
- import { cors } from "hono/cors";
3
2
  import { ProtocolError } from "@opendatalabs/personal-server-ts-core/errors";
4
3
  import { healthRoute } from "./routes/health.js";
4
+ import { corsMiddleware } from "./middleware/cors.js";
5
+ import { requireLoopbackListener } from "./middleware/local-listener.js";
5
6
  import { dataRoutes } from "./routes/data.js";
7
+ import { writeSessionRoutes } from "./routes/write-session.js";
8
+ import { createInMemoryWriteProofReplayStore, createInMemoryWriteSessionStore, } from "@opendatalabs/personal-server-ts-core/write";
9
+ import { derivativesRoutes } from "./routes/derivatives.js";
6
10
  import { grantsRoutes } from "./routes/grants.js";
7
11
  import { accessLogsRoutes } from "./routes/access-logs.js";
8
12
  import { syncRoutes } from "./routes/sync.js";
13
+ import { executeMcpConnectionRequest, mcpActivityRoutes, mcpConnectionsRoutes, mcpOAuthRoutes, mcpStreamableHttpRoutes, } from "./routes/mcp.js";
14
+ import { enclaveMcpRoutes } from "./routes/enclave-mcp.js";
15
+ import { enclaveFleetRoutes } from "./routes/enclave-fleet.js";
16
+ import { McpActivityRecorder, createInMemoryMcpConnectionStore, createInMemoryMcpOAuthAuthorizationStore, } from "@opendatalabs/personal-server-ts-core/mcp";
9
17
  import { uiConfigRoutes } from "./routes/ui-config.js";
10
18
  import { uiRegistrationRoutes } from "./routes/ui-registration.js";
11
19
  import { uiRoute } from "./routes/ui.js";
12
20
  import { authDeviceRoutes, createDeviceSessionLookup, } from "./routes/auth-device.js";
13
21
  import { oauthTokenRoutes } from "./routes/oauth-token.js";
22
+ import { enclaveJobRoutes } from "./routes/enclave-jobs.js";
14
23
  export function createApp(deps) {
15
24
  const app = new Hono();
16
- // CORS — allow all origins for browser-based clients
17
- app.use("*", cors({
18
- origin: "*",
19
- allowHeaders: ["Content-Type", "Authorization"],
20
- allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
21
- maxAge: 86400,
22
- }));
25
+ // One store for mint (POST /v1/write/session) and redeem (data ingest and
26
+ // derivative question registration), and one replay guard for the proofs
27
+ // both redeeming routes verify.
28
+ const writeSessionStore = deps.writeSessionStore ?? createInMemoryWriteSessionStore();
29
+ const writeProofReplayStore = deps.writeProofReplayStore ?? createInMemoryWriteProofReplayStore();
30
+ // CORS — allow all origins for browser-based clients. Registered first so
31
+ // OPTIONS preflights are answered before any route or auth code runs
32
+ // (route sub-apps only register their real methods).
33
+ // Dev UI gate — registered BEFORE the permissive global CORS so a
34
+ // cross-origin preflight for /ui/* is refused rather than answered with
35
+ // `Access-Control-Allow-Origin: *`. The whole /ui subtree is served only to
36
+ // connections on the loopback auth listener: the tunnel forwards the main
37
+ // server port, so without this gate the page (and the dev token it
38
+ // carries, which is a full owner/policy bypass) is reachable by anyone who
39
+ // knows the public tunnel URL.
40
+ const uiLoopbackOnly = requireLoopbackListener({
41
+ localApprovalPort: deps.localApprovalPort,
42
+ serverPort: deps.serverPort,
43
+ });
44
+ app.use("/ui", uiLoopbackOnly);
45
+ app.use("/ui/*", uiLoopbackOnly);
46
+ app.use("*", corsMiddleware());
23
47
  // Mount health route
24
48
  app.route("/", healthRoute({
25
49
  version: deps.version,
@@ -33,6 +57,12 @@ export function createApp(deps) {
33
57
  getTunnelStatus: deps.getTunnelStatus,
34
58
  runtimeAvailability: deps.runtimeAvailability,
35
59
  }));
60
+ if (deps.profile === "enclave" && deps.jobWorker && deps.accessToken) {
61
+ app.route("/enclave/v1/jobs", enclaveJobRoutes({
62
+ accessToken: deps.accessToken,
63
+ executeJob: deps.jobWorker,
64
+ }));
65
+ }
36
66
  // Mount data routes (ingest + read + delete)
37
67
  app.route("/v1/data", dataRoutes({
38
68
  indexManager: deps.indexManager,
@@ -42,22 +72,79 @@ export function createApp(deps) {
42
72
  serverOwner: deps.serverOwner,
43
73
  gateway: deps.gateway,
44
74
  accessLogWriter: deps.accessLogWriter,
75
+ readFulfillmentReporter: deps.readFulfillmentReporter,
45
76
  devToken: deps.devToken,
77
+ accessToken: deps.accessToken,
46
78
  tokenStore: deps.tokenStore,
47
79
  syncManager: deps.syncManager ?? null,
48
- feeVerifier: deps.feeVerifier,
80
+ scopeDeletions: deps.scopeDeletions,
49
81
  runtimeAvailability: deps.runtimeAvailability,
50
82
  dataStorage: deps.dataStorage,
83
+ // Powers the RECORD_DATA_ACCESS attestation embedded in X402 challenges.
84
+ serverSigner: deps.serverSigner,
85
+ serverAddress: deps.identity?.address,
86
+ // Required for X402: gatewayConfig provides the EIP-712 domain for
87
+ // payment signature recovery; gatewayUrl is the forward target for
88
+ // POST /v1/escrow/pay (direct fetch — bypasses the SDK client to
89
+ // preserve the gateway's structured error bodies).
90
+ gatewayConfig: deps.gatewayConfig,
91
+ gatewayUrl: deps.gatewayUrl ?? deps.config?.gateway.url ?? deps.gatewayConfig?.url,
92
+ paymentEnabled: deps.paymentEnabled,
93
+ lineageGateway: deps.lineageGateway,
94
+ writeSessionStore,
95
+ writeProofReplayStore,
96
+ // A new local version of a scope marks every question that reads it
97
+ // stale; the recompute waits for a reader.
98
+ onDataWritten: deps.derivativeCompute
99
+ ? (event) => deps.derivativeCompute?.scheduler.markSourceChanged(event.scope, {
100
+ lineageSources: event.lineageSources,
101
+ })
102
+ : undefined,
103
+ // And an authorized read of a derived scope is that reader.
104
+ onDataRead: deps.derivativeCompute
105
+ ? (event) => deps.derivativeCompute?.scheduler.markDemand(event.scope)
106
+ : undefined,
107
+ mountPath: "/v1/data",
108
+ }));
109
+ // Derivative compute: question registration + readiness for builders.
110
+ app.route("/v1/derivatives", derivativesRoutes({
111
+ logger: deps.logger,
112
+ serverOrigin: deps.serverOrigin,
113
+ serverOwner: deps.serverOwner,
114
+ gateway: deps.gateway,
115
+ devToken: deps.devToken,
116
+ accessToken: deps.accessToken,
117
+ tokenStore: deps.tokenStore,
118
+ dataStorage: deps.dataStorage,
119
+ runtimeAvailability: deps.runtimeAvailability,
120
+ writeSessionStore,
121
+ writeProofReplayStore,
122
+ compute: deps.derivativeCompute ?? null,
123
+ mountPath: "/v1/derivatives",
124
+ }));
125
+ // Mount the Write API session handshake (delegated builder writes).
126
+ app.route("/v1/write", writeSessionRoutes({
127
+ logger: deps.logger,
128
+ serverOrigin: deps.serverOrigin,
129
+ serverOwner: deps.serverOwner,
130
+ gateway: deps.gateway,
131
+ devToken: deps.devToken,
132
+ accessToken: deps.accessToken,
133
+ tokenStore: deps.tokenStore,
134
+ sessionStore: writeSessionStore,
51
135
  }));
52
136
  // Mount grants routes (POST /verify is public, GET / and POST / need owner auth)
53
137
  app.route("/v1/grants", grantsRoutes({
54
138
  logger: deps.logger,
55
139
  gateway: deps.gateway,
140
+ gatewayConfig: deps.gatewayConfig,
56
141
  serverOwner: deps.serverOwner,
57
142
  serverOrigin: deps.serverOrigin,
58
143
  devToken: deps.devToken,
144
+ accessToken: deps.accessToken,
59
145
  tokenStore: deps.tokenStore,
60
146
  serverSigner: deps.serverSigner,
147
+ mountPath: "/v1/grants",
61
148
  }));
62
149
  // Mount access-logs routes (all owner auth)
63
150
  app.route("/v1/access-logs", accessLogsRoutes({
@@ -65,18 +152,87 @@ export function createApp(deps) {
65
152
  accessLogReader: deps.accessLogReader,
66
153
  serverOrigin: deps.serverOrigin,
67
154
  serverOwner: deps.serverOwner,
155
+ gateway: deps.gateway,
68
156
  devToken: deps.devToken,
157
+ accessToken: deps.accessToken,
69
158
  tokenStore: deps.tokenStore,
159
+ mountPath: "/v1/access-logs",
70
160
  }));
71
161
  // Mount sync routes (all owner auth)
72
162
  app.route("/v1/sync", syncRoutes({
73
163
  logger: deps.logger,
74
164
  serverOrigin: deps.serverOrigin,
75
165
  serverOwner: deps.serverOwner,
166
+ gateway: deps.gateway,
76
167
  devToken: deps.devToken,
168
+ accessToken: deps.accessToken,
77
169
  tokenStore: deps.tokenStore,
78
170
  syncManager: deps.syncManager ?? null,
171
+ mountPath: "/v1/sync",
79
172
  }));
173
+ // MCP — Phase 1 / 260604-PLAN-vana-mcp-personal-server.md.
174
+ // Owner endpoints + Claude-facing Streamable HTTP endpoint share a single
175
+ // connection store so the management API and the data path agree on which
176
+ // connections exist.
177
+ const mcpConnectionStore = deps.mcpConnectionStore ?? createInMemoryMcpConnectionStore();
178
+ const mcpOAuthAuthorizationStore = deps.mcpOAuthAuthorizationStore ??
179
+ createInMemoryMcpOAuthAuthorizationStore();
180
+ const mcpActivityRecorder = deps.mcpActivityRecorder ?? new McpActivityRecorder();
181
+ const mcpRouteDeps = {
182
+ logger: deps.logger,
183
+ serverOrigin: deps.serverOrigin,
184
+ serverOwner: deps.serverOwner,
185
+ serverAddress: deps.identity?.address,
186
+ serverSigner: deps.serverSigner,
187
+ gateway: deps.gateway,
188
+ gatewayConfig: deps.gatewayConfig,
189
+ paymentEnabled: deps.paymentEnabled,
190
+ devToken: deps.devToken,
191
+ accessToken: deps.accessToken,
192
+ tokenStore: deps.tokenStore,
193
+ accessLogWriter: deps.accessLogWriter,
194
+ readFulfillmentReporter: deps.readFulfillmentReporter,
195
+ indexManager: deps.indexManager,
196
+ hierarchyOptions: deps.hierarchyOptions,
197
+ dataStorage: deps.dataStorage,
198
+ runtimeAvailability: deps.runtimeAvailability,
199
+ connectionStore: mcpConnectionStore,
200
+ oauthAuthorizationStore: mcpOAuthAuthorizationStore,
201
+ oauthApprovalUrl: deps.mcpOAuthApprovalUrl,
202
+ activityRecorder: mcpActivityRecorder,
203
+ };
204
+ app.route("/", mcpOAuthRoutes(mcpRouteDeps));
205
+ app.route("/v1/mcp/connections", mcpConnectionsRoutes(mcpRouteDeps));
206
+ app.route("/v1/mcp/activity", mcpActivityRoutes(mcpRouteDeps));
207
+ app.route("/mcp", mcpStreamableHttpRoutes(mcpRouteDeps));
208
+ if (deps.profile === "enclave" && deps.accessToken && deps.serverOwner) {
209
+ app.route("/enclave/v1/fleet", enclaveFleetRoutes({
210
+ accessToken: deps.accessToken,
211
+ hydrate: async (scopes) => {
212
+ if (!deps.mcpHydrateScopes)
213
+ throw new Error("Scoped hydration unavailable");
214
+ await deps.mcpHydrateScopes(scopes);
215
+ },
216
+ observe: async (scope) => {
217
+ const storage = deps.dataStorage;
218
+ const entry = storage?.findEntry({ scope });
219
+ const ready = entry && storage?.hasScopeBlocks
220
+ ? await storage.hasScopeBlocks(scope, entry.collectedAt)
221
+ : false;
222
+ return { dataVersion: entry?.version ?? null, ready };
223
+ },
224
+ }));
225
+ app.route("/enclave/v1/mcp", enclaveMcpRoutes({
226
+ accessToken: deps.accessToken,
227
+ serverOwner: deps.serverOwner,
228
+ execute: async (request, connection) => {
229
+ await deps.mcpHydrateScopes?.([
230
+ ...new Set(connection.grants.flatMap((grant) => grant.scopes)),
231
+ ]);
232
+ return executeMcpConnectionRequest(request, connection, mcpRouteDeps);
233
+ },
234
+ }));
235
+ }
80
236
  // Mount login flow v2 routes (self-hosted CLI auth, no auth required)
81
237
  if (deps.tokenStore) {
82
238
  app.route("/auth/device", authDeviceRoutes({
@@ -99,7 +255,8 @@ export function createApp(deps) {
99
255
  deviceSessions: createDeviceSessionLookup(),
100
256
  }));
101
257
  }
102
- // Mount dev UI routes when dev token is available
258
+ // Mount dev UI routes when dev token is available. The /ui subtree is
259
+ // already gated to the loopback auth listener above.
103
260
  if (deps.devToken) {
104
261
  app.route("/ui", uiRoute({
105
262
  devToken: deps.devToken,
@@ -119,6 +276,7 @@ export function createApp(deps) {
119
276
  app.route("/ui/api", uiRegistrationRoutes({
120
277
  devToken: deps.devToken,
121
278
  ownerPrivateKey: deps.ownerPrivateKey,
279
+ onRegistered: deps.onServerRegistered,
122
280
  }));
123
281
  }
124
282
  // Global error handler
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}