@opendatalabs/personal-server-ts-server 0.0.1-canary.016adf9 → 0.0.1-canary.052d47e

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 (213) 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 +77 -2
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +165 -9
  12. package/dist/app.js.map +1 -1
  13. package/dist/bootstrap.d.ts +36 -3
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +434 -39
  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 +78 -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 +10 -0
  38. package/dist/enclave-main.d.ts.map +1 -0
  39. package/dist/enclave-main.js +115 -0
  40. package/dist/enclave-main.js.map +1 -0
  41. package/dist/hono-context.d.ts +14 -0
  42. package/dist/hono-context.d.ts.map +1 -0
  43. package/dist/hono-context.js +2 -0
  44. package/dist/hono-context.js.map +1 -0
  45. package/dist/index.js +48 -12
  46. package/dist/index.js.map +1 -1
  47. package/dist/jobs/types.d.ts +17 -0
  48. package/dist/jobs/types.d.ts.map +1 -0
  49. package/dist/jobs/types.js +3 -0
  50. package/dist/jobs/types.js.map +1 -0
  51. package/dist/jobs/worker.d.ts +30 -0
  52. package/dist/jobs/worker.d.ts.map +1 -0
  53. package/dist/jobs/worker.js +217 -0
  54. package/dist/jobs/worker.js.map +1 -0
  55. package/dist/keys/server-account.d.ts +28 -0
  56. package/dist/keys/server-account.d.ts.map +1 -0
  57. package/dist/keys/server-account.js +48 -0
  58. package/dist/keys/server-account.js.map +1 -0
  59. package/dist/listen.d.ts +11 -0
  60. package/dist/listen.d.ts.map +1 -0
  61. package/dist/listen.js +23 -0
  62. package/dist/listen.js.map +1 -0
  63. package/dist/logger/index.d.ts +5 -0
  64. package/dist/logger/index.d.ts.map +1 -0
  65. package/dist/logger/index.js +9 -0
  66. package/dist/logger/index.js.map +1 -0
  67. package/dist/logging/access-log.d.ts +4 -0
  68. package/dist/logging/access-log.d.ts.map +1 -0
  69. package/dist/logging/access-log.js +25 -0
  70. package/dist/logging/access-log.js.map +1 -0
  71. package/dist/logging/access-reader.d.ts +19 -0
  72. package/dist/logging/access-reader.d.ts.map +1 -0
  73. package/dist/logging/access-reader.js +50 -0
  74. package/dist/logging/access-reader.js.map +1 -0
  75. package/dist/middleware/access-log.d.ts.map +1 -1
  76. package/dist/middleware/access-log.js +8 -2
  77. package/dist/middleware/access-log.js.map +1 -1
  78. package/dist/middleware/builder-check.d.ts +2 -2
  79. package/dist/middleware/builder-check.d.ts.map +1 -1
  80. package/dist/middleware/builder-check.js +7 -2
  81. package/dist/middleware/builder-check.js.map +1 -1
  82. package/dist/middleware/cors.d.ts +18 -0
  83. package/dist/middleware/cors.d.ts.map +1 -0
  84. package/dist/middleware/cors.js +51 -0
  85. package/dist/middleware/cors.js.map +1 -0
  86. package/dist/middleware/owner-check.js +1 -1
  87. package/dist/middleware/owner-check.js.map +1 -1
  88. package/dist/middleware/web3-auth.d.ts +12 -0
  89. package/dist/middleware/web3-auth.d.ts.map +1 -1
  90. package/dist/middleware/web3-auth.js +27 -31
  91. package/dist/middleware/web3-auth.js.map +1 -1
  92. package/dist/migrations/detect-stuck-version-ledger.d.ts +43 -0
  93. package/dist/migrations/detect-stuck-version-ledger.d.ts.map +1 -0
  94. package/dist/migrations/detect-stuck-version-ledger.js +73 -0
  95. package/dist/migrations/detect-stuck-version-ledger.js.map +1 -0
  96. package/dist/migrations/local-state.d.ts +35 -0
  97. package/dist/migrations/local-state.d.ts.map +1 -0
  98. package/dist/migrations/local-state.js +133 -0
  99. package/dist/migrations/local-state.js.map +1 -0
  100. package/dist/migrations/state-migrations.d.ts +78 -0
  101. package/dist/migrations/state-migrations.d.ts.map +1 -0
  102. package/dist/migrations/state-migrations.js +72 -0
  103. package/dist/migrations/state-migrations.js.map +1 -0
  104. package/dist/pending-blob-deletions.d.ts +10 -0
  105. package/dist/pending-blob-deletions.d.ts.map +1 -0
  106. package/dist/pending-blob-deletions.js +38 -0
  107. package/dist/pending-blob-deletions.js.map +1 -0
  108. package/dist/routes/access-logs.d.ts +7 -0
  109. package/dist/routes/access-logs.d.ts.map +1 -1
  110. package/dist/routes/access-logs.js +11 -17
  111. package/dist/routes/access-logs.js.map +1 -1
  112. package/dist/routes/auth-device.d.ts +49 -0
  113. package/dist/routes/auth-device.d.ts.map +1 -0
  114. package/dist/routes/auth-device.js +581 -0
  115. package/dist/routes/auth-device.js.map +1 -0
  116. package/dist/routes/data.d.ts +67 -2
  117. package/dist/routes/data.d.ts.map +1 -1
  118. package/dist/routes/data.js +41 -201
  119. package/dist/routes/data.js.map +1 -1
  120. package/dist/routes/derivatives.d.ts +33 -0
  121. package/dist/routes/derivatives.d.ts.map +1 -0
  122. package/dist/routes/derivatives.js +33 -0
  123. package/dist/routes/derivatives.js.map +1 -0
  124. package/dist/routes/enclave-jobs.d.ts +9 -0
  125. package/dist/routes/enclave-jobs.d.ts.map +1 -0
  126. package/dist/routes/enclave-jobs.js +104 -0
  127. package/dist/routes/enclave-jobs.js.map +1 -0
  128. package/dist/routes/grants.d.ts +9 -2
  129. package/dist/routes/grants.d.ts.map +1 -1
  130. package/dist/routes/grants.js +18 -196
  131. package/dist/routes/grants.js.map +1 -1
  132. package/dist/routes/health.d.ts +7 -1
  133. package/dist/routes/health.d.ts.map +1 -1
  134. package/dist/routes/health.js +39 -2
  135. package/dist/routes/health.js.map +1 -1
  136. package/dist/routes/mcp.d.ts +115 -0
  137. package/dist/routes/mcp.d.ts.map +1 -0
  138. package/dist/routes/mcp.js +676 -0
  139. package/dist/routes/mcp.js.map +1 -0
  140. package/dist/routes/oauth-token.d.ts +56 -0
  141. package/dist/routes/oauth-token.d.ts.map +1 -0
  142. package/dist/routes/oauth-token.js +49 -0
  143. package/dist/routes/oauth-token.js.map +1 -0
  144. package/dist/routes/sync.d.ts +7 -0
  145. package/dist/routes/sync.d.ts.map +1 -1
  146. package/dist/routes/sync.js +12 -39
  147. package/dist/routes/sync.js.map +1 -1
  148. package/dist/routes/ui-config.d.ts.map +1 -1
  149. package/dist/routes/ui-config.js +17 -82
  150. package/dist/routes/ui-config.js.map +1 -1
  151. package/dist/routes/ui-registration.d.ts +9 -0
  152. package/dist/routes/ui-registration.d.ts.map +1 -0
  153. package/dist/routes/ui-registration.js +217 -0
  154. package/dist/routes/ui-registration.js.map +1 -0
  155. package/dist/routes/ui.d.ts +1 -0
  156. package/dist/routes/ui.d.ts.map +1 -1
  157. package/dist/routes/ui.js +46 -4
  158. package/dist/routes/ui.js.map +1 -1
  159. package/dist/routes/write-session.d.ts +37 -0
  160. package/dist/routes/write-session.d.ts.map +1 -0
  161. package/dist/routes/write-session.js +34 -0
  162. package/dist/routes/write-session.js.map +1 -0
  163. package/dist/storage/hierarchy.d.ts +36 -0
  164. package/dist/storage/hierarchy.d.ts.map +1 -0
  165. package/dist/storage/hierarchy.js +282 -0
  166. package/dist/storage/hierarchy.js.map +1 -0
  167. package/dist/storage/index-manager.d.ts +60 -0
  168. package/dist/storage/index-manager.d.ts.map +1 -0
  169. package/dist/storage/index-manager.js +174 -0
  170. package/dist/storage/index-manager.js.map +1 -0
  171. package/dist/storage/index-schema.d.ts +5 -0
  172. package/dist/storage/index-schema.d.ts.map +1 -0
  173. package/dist/storage/index-schema.js +69 -0
  174. package/dist/storage/index-schema.js.map +1 -0
  175. package/dist/storage/node-data-storage.d.ts +9 -0
  176. package/dist/storage/node-data-storage.d.ts.map +1 -0
  177. package/dist/storage/node-data-storage.js +105 -0
  178. package/dist/storage/node-data-storage.js.map +1 -0
  179. package/dist/storage/question-store.d.ts +9 -0
  180. package/dist/storage/question-store.d.ts.map +1 -0
  181. package/dist/storage/question-store.js +151 -0
  182. package/dist/storage/question-store.js.map +1 -0
  183. package/dist/sync-cursor.d.ts +15 -0
  184. package/dist/sync-cursor.d.ts.map +1 -0
  185. package/dist/sync-cursor.js +110 -0
  186. package/dist/sync-cursor.js.map +1 -0
  187. package/dist/token-store.d.ts +22 -0
  188. package/dist/token-store.d.ts.map +1 -0
  189. package/dist/token-store.js +120 -0
  190. package/dist/token-store.js.map +1 -0
  191. package/dist/tunnel/auth.d.ts +4 -0
  192. package/dist/tunnel/auth.d.ts.map +1 -1
  193. package/dist/tunnel/auth.js +2 -1
  194. package/dist/tunnel/auth.js.map +1 -1
  195. package/dist/tunnel/config.d.ts +1 -0
  196. package/dist/tunnel/config.d.ts.map +1 -1
  197. package/dist/tunnel/config.js +1 -1
  198. package/dist/tunnel/config.js.map +1 -1
  199. package/dist/tunnel/manager.d.ts +21 -1
  200. package/dist/tunnel/manager.d.ts.map +1 -1
  201. package/dist/tunnel/manager.js +78 -23
  202. package/dist/tunnel/manager.js.map +1 -1
  203. package/dist/ui/browser_tls_rustls_bg.wasm +0 -0
  204. package/dist/ui/index.html +2192 -0
  205. package/dist/ui/ps-lite-debug.d.ts +93 -0
  206. package/dist/ui/ps-lite-debug.d.ts.map +1 -0
  207. package/dist/ui/ps-lite-debug.js +135347 -0
  208. package/dist/ui/ps-lite-debug.js.map +1 -0
  209. package/package.json +20 -6
  210. package/dist/middleware/grant-check.d.ts +0 -12
  211. package/dist/middleware/grant-check.d.ts.map +0 -1
  212. package/dist/middleware/grant-check.js +0 -90
  213. package/dist/middleware/grant-check.js.map +0 -1
@@ -1,9 +1,15 @@
1
1
  import { Hono } from "hono";
2
+ import { type PersonalServerApiDispatchOptions, type PersonalServerReadFulfillmentReporter } from "@opendatalabs/personal-server-ts-core/api";
2
3
  import type { HierarchyManagerOptions } from "@opendatalabs/personal-server-ts-core/storage/hierarchy";
3
4
  import type { IndexManager } from "@opendatalabs/personal-server-ts-core/storage/index";
4
- import type { GatewayClient } from "@opendatalabs/personal-server-ts-core/gateway";
5
+ import type { DataPortabilityGatewayConfig, GatewayClient } from "@opendatalabs/vana-sdk/node";
5
6
  import type { AccessLogWriter } from "@opendatalabs/personal-server-ts-core/logging/access-log";
6
- import type { SyncManager } from "@opendatalabs/personal-server-ts-core/sync";
7
+ import type { ScopeDeletionTracker, SyncManager } from "@opendatalabs/personal-server-ts-core/sync";
8
+ import type { DataStoragePort, RuntimeAvailabilityPort } from "@opendatalabs/personal-server-ts-core/ports";
9
+ import type { ServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
10
+ import type { TokenStore } from "../token-store.js";
11
+ import type { WriteProofReplayStore, WriteSessionStore } from "@opendatalabs/personal-server-ts-core/write";
12
+ import type { LineageGatewayPort } from "@opendatalabs/personal-server-ts-core/lineage";
7
13
  import type { Logger } from "pino";
8
14
  export interface DataRouteDeps {
9
15
  indexManager: IndexManager;
@@ -12,9 +18,68 @@ export interface DataRouteDeps {
12
18
  serverOrigin: string | (() => string);
13
19
  serverOwner?: `0x${string}`;
14
20
  gateway: GatewayClient;
21
+ /**
22
+ * Required for the X402 flow on GET /v1/data/:scope. Provides the EIP-712
23
+ * domain (escrowPaymentDomain + dataRegistryDomain) the server uses to
24
+ * recover X-PAYMENT signatures and the embedded accessRecord signatures.
25
+ */
26
+ gatewayConfig?: DataPortabilityGatewayConfig;
27
+ /**
28
+ * Gateway base URL. Used by the X402 forward path — the handler `fetch`es
29
+ * POST /v1/escrow/pay directly so it can inspect the gateway's structured
30
+ * error body (the SDK's gateway.payForOperation discards it).
31
+ */
32
+ gatewayUrl?: string;
33
+ /**
34
+ * When true, GET /v1/data/:scope enforces the X402 challenge / X-PAYMENT
35
+ * cycle on every read. Off-by-default so dev / test setups don't require
36
+ * builder-side payment signing.
37
+ */
38
+ paymentEnabled?: boolean;
15
39
  accessLogWriter: AccessLogWriter;
40
+ readFulfillmentReporter?: PersonalServerReadFulfillmentReporter;
16
41
  syncManager?: SyncManager | null;
42
+ /** Read-side tombstone memory; reads of a deleted scope answer 410. */
43
+ scopeDeletions?: ScopeDeletionTracker;
17
44
  devToken?: string;
45
+ accessToken?: string;
46
+ tokenStore?: TokenStore;
47
+ dataStorage?: DataStoragePort;
48
+ runtimeAvailability?: RuntimeAvailabilityPort;
49
+ /**
50
+ * Write API sessions (POST /v1/write/session). When present, the ingest
51
+ * endpoint accepts write-session bearer tokens for delegated builder
52
+ * writes; absent = owner-only ingest, unchanged.
53
+ */
54
+ writeSessionStore?: WriteSessionStore;
55
+ /** Replay guard for per-write proofs; defaults to in-memory (api-auth). */
56
+ writeProofReplayStore?: WriteProofReplayStore;
57
+ /**
58
+ * Powers the RECORD_DATA_ACCESS attestation embedded in 402 challenges.
59
+ * When supplied alongside serverOwner + paymentEnabled, every challenge
60
+ * carries a server-signed accessRecord. Required for the on-chain
61
+ * recordDataAccess to be scheduled by gateway.settle later.
62
+ */
63
+ serverSigner?: ServerSigner;
64
+ /**
65
+ * Personal server's own EOA address. Needed by the X402 verifier so it
66
+ * can confirm that the accessRecord echoed back in X-PAYMENT was signed
67
+ * by this server (not forged by a malicious builder).
68
+ */
69
+ serverAddress?: `0x${string}`;
70
+ /**
71
+ * Gateway access for derivative data: lineage source lookups on write, the
72
+ * signed lineage read and the cascade delete walk. Absent = lineage writes
73
+ * can only cite local scopes; lineage read / cascade answer 503 / 501.
74
+ */
75
+ lineageGateway?: LineageGatewayPort;
76
+ /** Post-commit write hook (derivative recompute on refresh). */
77
+ onDataWritten?: (event: {
78
+ scope: string;
79
+ collectedAt: string;
80
+ lineageSources?: string[];
81
+ }) => void;
82
+ mountPath?: PersonalServerApiDispatchOptions["basePath"];
18
83
  }
19
84
  export declare function dataRoutes(deps: DataRouteDeps): Hono;
20
85
  //# sourceMappingURL=data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAWnC,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAoRpD"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAEL,KAAK,gCAAgC,EACrC,KAAK,qCAAqC,EAC3C,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,KAAK,EACV,4BAA4B,EAC5B,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACZ,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAQnC,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,4BAA4B,CAAC;IAC7C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,uBAAuB,CAAC,EAAE,qCAAqC,CAAC;IAChE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,uEAAuE;IACvE,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,gEAAgE;IAChE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,gCAAgC,CAAC,UAAU,CAAC,CAAC;CAC1D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAwDpD"}
@@ -1,213 +1,53 @@
1
1
  import { Hono } from "hono";
2
- import { ScopeSchema } from "@opendatalabs/personal-server-ts-core/scopes";
3
- import { createDataFileEnvelope } from "@opendatalabs/personal-server-ts-core/schemas/data-file";
4
- import { generateCollectedAt, writeDataFile, readDataFile, deleteAllForScope, } from "@opendatalabs/personal-server-ts-core/storage/hierarchy";
2
+ import { handlePersonalServerDataRequest, } from "@opendatalabs/personal-server-ts-core/api";
5
3
  import { createBodyLimit, DATA_INGEST_MAX_SIZE, } from "../middleware/body-limit.js";
6
- import { createWeb3AuthMiddleware } from "../middleware/web3-auth.js";
7
- import { createBuilderCheckMiddleware } from "../middleware/builder-check.js";
8
- import { createGrantCheckMiddleware } from "../middleware/grant-check.js";
9
- import { createAccessLogMiddleware } from "../middleware/access-log.js";
10
- import { createOwnerCheckMiddleware } from "../middleware/owner-check.js";
4
+ import { createNodeDataStorage } from "../storage/node-data-storage.js";
5
+ import { createServerApiAuth } from "../api-auth.js";
11
6
  export function dataRoutes(deps) {
12
7
  const app = new Hono();
13
- // Create middleware instances
14
- const web3Auth = createWeb3AuthMiddleware({
8
+ const dataStorage = deps.dataStorage ??
9
+ createNodeDataStorage({
10
+ indexManager: deps.indexManager,
11
+ hierarchyOptions: deps.hierarchyOptions,
12
+ });
13
+ const auth = createServerApiAuth({
15
14
  serverOrigin: deps.serverOrigin,
16
- devToken: deps.devToken,
17
15
  serverOwner: deps.serverOwner,
18
- });
19
- const builderCheck = createBuilderCheckMiddleware(deps.gateway);
20
- const grantCheck = createGrantCheckMiddleware({
21
16
  gateway: deps.gateway,
22
- serverOwner: deps.serverOwner,
23
- });
24
- const accessLog = createAccessLogMiddleware(deps.accessLogWriter);
25
- // GET /v1/data/:scope/versions — list versions for a scope (requires auth + builder, no grant)
26
- app.get("/:scope/versions", web3Auth, builderCheck, async (c) => {
27
- // 1. Validate scope
28
- const scopeParam = c.req.param("scope");
29
- const scopeResult = ScopeSchema.safeParse(scopeParam);
30
- if (!scopeResult.success) {
31
- return c.json({
32
- error: "INVALID_SCOPE",
33
- message: scopeResult.error.issues[0].message,
34
- }, 400);
35
- }
36
- const scope = scopeResult.data;
37
- // 2. Parse pagination
38
- const limit = c.req.query("limit")
39
- ? parseInt(c.req.query("limit"), 10)
40
- : 20;
41
- const offset = c.req.query("offset")
42
- ? parseInt(c.req.query("offset"), 10)
43
- : 0;
44
- // 3. Query index
45
- const entries = deps.indexManager.findByScope({ scope, limit, offset });
46
- const total = deps.indexManager.countByScope(scope);
47
- // 4. Return response
48
- return c.json({
49
- scope,
50
- versions: entries.map((e) => ({
51
- fileId: e.fileId,
52
- collectedAt: e.collectedAt,
53
- })),
54
- total,
55
- limit,
56
- offset,
57
- });
58
- });
59
- // GET /v1/data — list distinct scopes (requires auth + builder, no grant)
60
- app.get("/", web3Auth, builderCheck, async (c) => {
61
- const scopePrefix = c.req.query("scopePrefix");
62
- const limit = c.req.query("limit")
63
- ? parseInt(c.req.query("limit"), 10)
64
- : 20;
65
- const offset = c.req.query("offset")
66
- ? parseInt(c.req.query("offset"), 10)
67
- : 0;
68
- const result = deps.indexManager.listDistinctScopes({
69
- scopePrefix: scopePrefix || undefined,
70
- limit,
71
- offset,
72
- });
73
- return c.json({
74
- scopes: result.scopes,
75
- total: result.total,
76
- limit,
77
- offset,
78
- });
79
- });
80
- // GET /v1/data/:scope — read a data file (requires auth + grant)
81
- app.get("/:scope", web3Auth, builderCheck, grantCheck, accessLog, async (c) => {
82
- // 1. Validate scope
83
- const scopeParam = c.req.param("scope");
84
- const scopeResult = ScopeSchema.safeParse(scopeParam);
85
- if (!scopeResult.success) {
86
- return c.json({
87
- error: "INVALID_SCOPE",
88
- message: scopeResult.error.issues[0].message,
89
- }, 400);
90
- }
91
- const scope = scopeResult.data;
92
- // 2. Determine lookup strategy: fileId, at, or latest
93
- const fileIdParam = c.req.query("fileId");
94
- const atParam = c.req.query("at");
95
- let entry;
96
- if (fileIdParam) {
97
- entry = deps.indexManager.findByFileId(fileIdParam);
98
- }
99
- else if (atParam) {
100
- entry = deps.indexManager.findClosestByScope(scope, atParam);
101
- }
102
- else {
103
- entry = deps.indexManager.findLatestByScope(scope);
104
- }
105
- // 3. 404 if not found
106
- if (!entry) {
107
- return c.json({
108
- error: "NOT_FOUND",
109
- message: `No data found for scope "${scope}"`,
110
- }, 404);
111
- }
112
- // 4. Read the data file from disk
113
- const envelope = await readDataFile(deps.hierarchyOptions, scope, entry.collectedAt);
114
- // 5. Return 200 with envelope
115
- return c.json(envelope);
17
+ devToken: deps.devToken,
18
+ accessToken: deps.accessToken,
19
+ tokenStore: deps.tokenStore,
20
+ dataStorage,
21
+ runtimeAvailability: deps.runtimeAvailability,
22
+ writeSessionStore: deps.writeSessionStore,
23
+ writeProofReplayStore: deps.writeProofReplayStore,
116
24
  });
117
25
  app.use("/:scope", createBodyLimit(DATA_INGEST_MAX_SIZE));
118
- app.post("/:scope", async (c) => {
119
- // 1. Parse & validate scope
120
- const scopeParam = c.req.param("scope");
121
- const scopeResult = ScopeSchema.safeParse(scopeParam);
122
- if (!scopeResult.success) {
123
- return c.json({
124
- error: "INVALID_SCOPE",
125
- message: scopeResult.error.issues[0].message,
126
- }, 400);
127
- }
128
- const scope = scopeResult.data;
129
- // 2. Parse JSON body
130
- let body;
131
- try {
132
- body = await c.req.json();
133
- }
134
- catch {
135
- return c.json({
136
- error: "INVALID_BODY",
137
- message: "Request body must be valid JSON",
138
- }, 400);
139
- }
140
- if (body === null || typeof body !== "object" || Array.isArray(body)) {
141
- return c.json({
142
- error: "INVALID_BODY",
143
- message: "Request body must be a JSON object",
144
- }, 400);
145
- }
146
- // 3. Look up schema via Gateway (strict: reject if not found)
147
- let schemaUrl;
148
- try {
149
- const schema = await deps.gateway.getSchemaForScope(scope);
150
- if (!schema) {
151
- return c.json({
152
- error: "NO_SCHEMA",
153
- message: `No schema registered for scope: ${scope}`,
154
- }, 400);
155
- }
156
- schemaUrl = schema.definitionUrl;
157
- }
158
- catch (err) {
159
- deps.logger.error({ err, scope }, "Gateway schema lookup failed");
160
- return c.json({
161
- error: "GATEWAY_ERROR",
162
- message: "Failed to look up schema for scope",
163
- }, 502);
164
- }
165
- // 4. Generate collectedAt
166
- const collectedAt = generateCollectedAt();
167
- // 5. Construct envelope
168
- const envelope = createDataFileEnvelope(scope, collectedAt, body, schemaUrl);
169
- // 6. Write atomically
170
- const writeResult = await writeDataFile(deps.hierarchyOptions, envelope);
171
- // 7. Insert into index
172
- deps.indexManager.insert({
173
- fileId: null,
174
- path: writeResult.relativePath,
175
- scope,
176
- collectedAt,
177
- sizeBytes: writeResult.sizeBytes,
178
- });
179
- deps.logger.info({ scope, collectedAt, path: writeResult.relativePath }, "Data file ingested");
180
- // 8. Notify sync manager of new data (if enabled)
181
- let status = "stored";
182
- if (deps.syncManager) {
183
- deps.syncManager.notifyNewData();
184
- status = "syncing";
185
- }
186
- // 9. Return 201
187
- return c.json({ scope, collectedAt, status }, 201);
188
- });
189
- // Owner-check middleware (web3-auth + owner-check)
190
- const ownerCheck = createOwnerCheckMiddleware(deps.serverOwner);
191
- // DELETE /v1/data/:scope — delete all versions for a scope (owner auth required)
192
- app.delete("/:scope", web3Auth, ownerCheck, async (c) => {
193
- // 1. Validate scope
194
- const scopeParam = c.req.param("scope");
195
- const scopeResult = ScopeSchema.safeParse(scopeParam);
196
- if (!scopeResult.success) {
197
- return c.json({
198
- error: "INVALID_SCOPE",
199
- message: scopeResult.error.issues[0].message,
200
- }, 400);
201
- }
202
- const scope = scopeResult.data;
203
- // 2. Delete from index
204
- const deletedCount = deps.indexManager.deleteByScope(scope);
205
- // 3. Delete from filesystem
206
- await deleteAllForScope(deps.hierarchyOptions, scope);
207
- deps.logger.info({ scope, deletedCount }, "Scope deleted");
208
- // 4. Return 204
209
- return c.body(null, 204);
210
- });
26
+ app.all("*", (c) => handlePersonalServerDataRequest(c.req.raw, {
27
+ storage: dataStorage,
28
+ auth,
29
+ accessLogWriter: deps.accessLogWriter,
30
+ readFulfillmentReporter: deps.readFulfillmentReporter,
31
+ syncManager: deps.syncManager ?? null,
32
+ scopeDeletions: deps.scopeDeletions,
33
+ runtimeAvailability: deps.runtimeAvailability,
34
+ serverSigner: deps.serverSigner,
35
+ serverOwner: deps.serverOwner,
36
+ serverAddress: deps.serverAddress,
37
+ gateway: deps.gateway,
38
+ gatewayConfig: deps.gatewayConfig,
39
+ gatewayUrl: deps.gatewayUrl,
40
+ paymentEnabled: deps.paymentEnabled,
41
+ lineageGateway: deps.lineageGateway,
42
+ onDataWritten: deps.onDataWritten,
43
+ // Network identifier for the 402 challenge body. We use the chain
44
+ // id as the convention since the gateway is chain-scoped; clients
45
+ // dispatch on the (scheme, chainId) pair, not the human name.
46
+ network: deps.gatewayConfig
47
+ ? `vana:${deps.gatewayConfig.chainId}`
48
+ : undefined,
49
+ logger: deps.logger,
50
+ }, { basePath: deps.mountPath }));
211
51
  return app;
212
52
  }
213
53
  //# sourceMappingURL=data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/routes/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,+BAA+B,GAGhC,MAAM,2CAA2C,CAAC;AAwBnD,OAAO,EACL,eAAe,EACf,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAyErD,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC5C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,MAAM,WAAW,GACf,IAAI,CAAC,WAAW;QAChB,qBAAqB,CAAC;YACpB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAC;IACL,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW;QACX,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;KAClD,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC1D,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CACjB,+BAA+B,CAC7B,CAAC,CAAC,GAAG,CAAC,GAAG,EACT;QACE,OAAO,EAAE,WAAW;QACpB,IAAI;QACJ,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;QACrD,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,kEAAkE;QAClE,kEAAkE;QAClE,8DAA8D;QAC9D,OAAO,EAAE,IAAI,CAAC,aAAa;YACzB,CAAC,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;YACtC,CAAC,CAAC,SAAS;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC7B,CACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Derivative compute routes: /v1/derivatives/questions. Thin Hono wrapper
3
+ * over the runtime-agnostic core handler; builder auth is the Write API's
4
+ * (write-session token + signed proof), owner auth is the usual owner gate.
5
+ */
6
+ import { Hono } from "hono";
7
+ import type { Logger } from "pino";
8
+ import type { GatewayClient } from "@opendatalabs/vana-sdk/node";
9
+ import { type PersonalServerDerivativesApiDeps } from "@opendatalabs/personal-server-ts-core/derivatives";
10
+ import type { PersonalServerApiDispatchOptions } from "@opendatalabs/personal-server-ts-core/api";
11
+ import type { DataStoragePort, RuntimeAvailabilityPort } from "@opendatalabs/personal-server-ts-core/ports";
12
+ import type { WriteProofReplayStore, WriteSessionStore } from "@opendatalabs/personal-server-ts-core/write";
13
+ import type { TokenStore } from "../token-store.js";
14
+ export interface DerivativesRouteDeps {
15
+ logger: Logger;
16
+ serverOrigin: string | (() => string);
17
+ serverOwner?: `0x${string}`;
18
+ gateway: GatewayClient;
19
+ devToken?: string;
20
+ accessToken?: string;
21
+ tokenStore?: TokenStore;
22
+ dataStorage?: DataStoragePort;
23
+ runtimeAvailability?: RuntimeAvailabilityPort;
24
+ /** Shared with the data routes so builder tokens work on both. */
25
+ writeSessionStore?: WriteSessionStore;
26
+ writeProofReplayStore?: WriteProofReplayStore;
27
+ /** The compute layer (store + scheduler). Absent = every route answers 503. */
28
+ compute?: PersonalServerDerivativesApiDeps["compute"];
29
+ now?: () => Date;
30
+ mountPath?: PersonalServerApiDispatchOptions["basePath"];
31
+ }
32
+ export declare function derivativesRoutes(deps: DerivativesRouteDeps): Hono;
33
+ //# sourceMappingURL=derivatives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derivatives.d.ts","sourceRoot":"","sources":["../../src/routes/derivatives.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAGL,KAAK,gCAAgC,EACtC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,2CAA2C,CAAC;AAClG,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,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,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,+EAA+E;IAC/E,OAAO,CAAC,EAAE,gCAAgC,CAAC,SAAS,CAAC,CAAC;IACtD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,gCAAgC,CAAC,UAAU,CAAC,CAAC;CAC1D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CA6BlE"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Derivative compute routes: /v1/derivatives/questions. Thin Hono wrapper
3
+ * over the runtime-agnostic core handler; builder auth is the Write API's
4
+ * (write-session token + signed proof), owner auth is the usual owner gate.
5
+ */
6
+ import { Hono } from "hono";
7
+ import { handlePersonalServerDerivativesRequest, MAX_QUESTION_BODY_BYTES, } from "@opendatalabs/personal-server-ts-core/derivatives";
8
+ import { createBodyLimit } from "../middleware/body-limit.js";
9
+ import { createServerApiAuth } from "../api-auth.js";
10
+ export function derivativesRoutes(deps) {
11
+ const app = new Hono();
12
+ const auth = createServerApiAuth({
13
+ serverOrigin: deps.serverOrigin,
14
+ serverOwner: deps.serverOwner,
15
+ gateway: deps.gateway,
16
+ devToken: deps.devToken,
17
+ accessToken: deps.accessToken,
18
+ tokenStore: deps.tokenStore,
19
+ dataStorage: deps.dataStorage,
20
+ runtimeAvailability: deps.runtimeAvailability,
21
+ writeSessionStore: deps.writeSessionStore,
22
+ writeProofReplayStore: deps.writeProofReplayStore,
23
+ });
24
+ app.use("*", createBodyLimit(MAX_QUESTION_BODY_BYTES));
25
+ app.all("*", (c) => handlePersonalServerDerivativesRequest(c.req.raw, {
26
+ auth,
27
+ compute: deps.compute ?? null,
28
+ now: deps.now,
29
+ logger: deps.logger,
30
+ }, { basePath: deps.mountPath }));
31
+ return app;
32
+ }
33
+ //# sourceMappingURL=derivatives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derivatives.js","sourceRoot":"","sources":["../../src/routes/derivatives.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EACL,sCAAsC,EACtC,uBAAuB,GAExB,MAAM,mDAAmD,CAAC;AAW3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAqBrD,MAAM,UAAU,iBAAiB,CAAC,IAA0B;IAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;KAClD,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACvD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CACjB,sCAAsC,CACpC,CAAC,CAAC,GAAG,CAAC,GAAG,EACT;QACE,IAAI;QACJ,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;QAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC7B,CACF,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Hono } from "hono";
2
+ import { type JobRequestEnvelope } from "@opendatalabs/vana-sdk/protocol/jobs";
3
+ import type { JobExecuteResponse } from "../jobs/types.js";
4
+ export interface EnclaveJobRouteDeps {
5
+ accessToken: string;
6
+ executeJob(envelope: JobRequestEnvelope): Promise<JobExecuteResponse>;
7
+ }
8
+ export declare function enclaveJobRoutes(deps: EnclaveJobRouteDeps): Hono;
9
+ //# sourceMappingURL=enclave-jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enclave-jobs.d.ts","sourceRoot":"","sources":["../../src/routes/enclave-jobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAM1B,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CA0ChE"}
@@ -0,0 +1,104 @@
1
+ import { timingSafeEqual } from "node:crypto";
2
+ import { Hono } from "hono";
3
+ import { isAddress, isHex } from "viem";
4
+ import { JOB_OPERATIONS, JOB_PROTOCOL_VERSION, } from "@opendatalabs/vana-sdk/protocol/jobs";
5
+ import { createBodyLimit } from "../middleware/body-limit.js";
6
+ import { JobFailure } from "../jobs/worker.js";
7
+ const MAX_JOB_BODY_BYTES = 256 * 1024;
8
+ const BEARER_PREFIX = "Bearer ";
9
+ export function enclaveJobRoutes(deps) {
10
+ const app = new Hono();
11
+ app.use("/execute", createBodyLimit(MAX_JOB_BODY_BYTES));
12
+ app.post("/execute", async (context) => {
13
+ if (!hasValidBearer(context.req.header("authorization"), deps.accessToken)) {
14
+ return context.json(jobError("AUTH_INVALID", "invalid bearer token"), 401);
15
+ }
16
+ let body;
17
+ try {
18
+ body = await context.req.json();
19
+ }
20
+ catch {
21
+ return context.json({ error: { message: "invalid request body" } }, 400);
22
+ }
23
+ if (!isJobEnvelope(body)) {
24
+ return context.json({ error: { message: "invalid request body" } }, 400);
25
+ }
26
+ try {
27
+ return context.json(await deps.executeJob(body), 200);
28
+ }
29
+ catch (error) {
30
+ if (error instanceof JobFailure) {
31
+ return context.json(jobError(error.code, error.message, error.retryable), statusFor(error.code));
32
+ }
33
+ return context.json(jobError("INTERNAL", "job execution failed", true), 500);
34
+ }
35
+ });
36
+ return app;
37
+ }
38
+ function hasValidBearer(header, expected) {
39
+ if (!header?.startsWith(BEARER_PREFIX)) {
40
+ return false;
41
+ }
42
+ const received = Buffer.from(header.slice(BEARER_PREFIX.length));
43
+ const target = Buffer.from(expected);
44
+ if (received.length !== target.length) {
45
+ return false;
46
+ }
47
+ return timingSafeEqual(received, target);
48
+ }
49
+ function isJobEnvelope(value) {
50
+ if (!isRecord(value) || !isRecord(value.request)) {
51
+ return false;
52
+ }
53
+ const request = value.request;
54
+ return (value.auth !== "" &&
55
+ typeof value.auth === "string" &&
56
+ request.v === JOB_PROTOCOL_VERSION &&
57
+ typeof request.jobId === "string" &&
58
+ isAddressValue(request.owner) &&
59
+ isAddressValue(request.builder) &&
60
+ isHexValue(request.builderPublicKey) &&
61
+ isHexValue(request.grantId) &&
62
+ typeof request.scope === "string" &&
63
+ JOB_OPERATIONS.some((operation) => operation === request.operation) &&
64
+ (request.pinnedVersion === null ||
65
+ typeof request.pinnedVersion === "string") &&
66
+ typeof request.deadline === "string");
67
+ }
68
+ function isAddressValue(value) {
69
+ return typeof value === "string" && isAddress(value);
70
+ }
71
+ function isHexValue(value) {
72
+ return typeof value === "string" && isHex(value);
73
+ }
74
+ function isRecord(value) {
75
+ return typeof value === "object" && value !== null;
76
+ }
77
+ function jobError(code, message, retryable = false) {
78
+ return { error: { code, message, retryable } };
79
+ }
80
+ function statusFor(code) {
81
+ switch (code) {
82
+ case "AUTH_INVALID":
83
+ return 401;
84
+ case "BUILDER_MISMATCH":
85
+ case "OWNER_MISMATCH":
86
+ case "GRANT_REVOKED":
87
+ case "GRANT_INVALID":
88
+ case "SIGNED_ARTIFACT_MISSING":
89
+ case "SIGNED_ARTIFACT_INVALID":
90
+ case "SERVER_NOT_REGISTERED":
91
+ return 403;
92
+ case "SCOPE_NOT_FOUND":
93
+ return 404;
94
+ case "VERSION_MISMATCH":
95
+ return 409;
96
+ case "DEADLINE_PASSED":
97
+ return 410;
98
+ case "RESULT_TOO_LARGE":
99
+ return 413;
100
+ case "INTERNAL":
101
+ return 500;
102
+ }
103
+ }
104
+ //# sourceMappingURL=enclave-jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enclave-jobs.js","sourceRoot":"","sources":["../../src/routes/enclave-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,KAAK,EAA0B,MAAM,MAAM,CAAC;AAChE,OAAO,EACL,cAAc,EACd,oBAAoB,GAErB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,CAAC;AACtC,MAAM,aAAa,GAAG,SAAS,CAAC;AAOhC,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACxD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACrC,IACE,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,EACtE,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CACjB,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC,EAChD,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,IAAI,CACjB,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,EACpD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CACtB,CAAC;YACJ,CAAC;YAED,OAAO,OAAO,CAAC,IAAI,CACjB,QAAQ,CAAC,UAAU,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAClD,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,MAA0B,EAAE,QAAgB;IAClE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAE9B,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,EAAE;QACjB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,CAAC,CAAC,KAAK,oBAAoB;QAClC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7B,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/B,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACpC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC;QACnE,CAAC,OAAO,CAAC,aAAa,KAAK,IAAI;YAC7B,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,CAAC;QAC5C,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CACrC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CACf,IAAoB,EACpB,OAAe,EACf,SAAS,GAAG,KAAK;IAEjB,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,SAAS,CAChB,IAAoB;IAEpB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,cAAc;YACjB,OAAO,GAAG,CAAC;QACb,KAAK,kBAAkB,CAAC;QACxB,KAAK,gBAAgB,CAAC;QACtB,KAAK,eAAe,CAAC;QACrB,KAAK,eAAe,CAAC;QACrB,KAAK,yBAAyB,CAAC;QAC/B,KAAK,yBAAyB,CAAC;QAC/B,KAAK,uBAAuB;YAC1B,OAAO,GAAG,CAAC;QACb,KAAK,iBAAiB;YACpB,OAAO,GAAG,CAAC;QACb,KAAK,kBAAkB;YACrB,OAAO,GAAG,CAAC;QACb,KAAK,iBAAiB;YACpB,OAAO,GAAG,CAAC;QACb,KAAK,kBAAkB;YACrB,OAAO,GAAG,CAAC;QACb,KAAK,UAAU;YACb,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,17 +1,24 @@
1
1
  /**
2
- * Grants routes — GET / (owner), POST / (create grant), POST /verify (public).
2
+ * Grants routes — GET / (owner), POST / (create grant), DELETE /:grantId
3
+ * (revoke grant), POST /verify (public).
3
4
  */
4
5
  import { Hono } from "hono";
5
6
  import type { Logger } from "pino";
6
- import type { GatewayClient } from "@opendatalabs/personal-server-ts-core/gateway";
7
+ import type { DataPortabilityGatewayConfig, GatewayClient } from "@opendatalabs/vana-sdk/node";
8
+ import { type PersonalServerApiDispatchOptions } from "@opendatalabs/personal-server-ts-core/api";
7
9
  import type { ServerSigner } from "@opendatalabs/personal-server-ts-core/signing";
10
+ import type { TokenStore } from "../token-store.js";
8
11
  export interface GrantsRouteDeps {
9
12
  logger: Logger;
10
13
  gateway: GatewayClient;
14
+ gatewayConfig?: DataPortabilityGatewayConfig;
11
15
  serverOwner?: `0x${string}`;
12
16
  serverOrigin: string | (() => string);
13
17
  devToken?: string;
18
+ accessToken?: string;
19
+ tokenStore?: TokenStore;
14
20
  serverSigner?: ServerSigner;
21
+ mountPath?: PersonalServerApiDispatchOptions["basePath"];
15
22
  }
16
23
  export declare function grantsRoutes(deps: GrantsRouteDeps): Hono;
17
24
  //# sourceMappingURL=grants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grants.d.ts","sourceRoot":"","sources":["../../src/routes/grants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAKnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAIlF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAoED,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAwMxD"}
1
+ {"version":3,"file":"grants.d.ts","sourceRoot":"","sources":["../../src/routes/grants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EACV,4BAA4B,EAC5B,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,4BAA4B,CAAC;IAC7C,WAAW,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,gCAAgC,CAAC,UAAU,CAAC,CAAC;CAC1D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA8BxD"}