@opendatalabs/personal-server-ts-core 0.2.0 → 1.0.1

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 (340) hide show
  1. package/dist/api/index.d.ts +160 -0
  2. package/dist/api/index.d.ts.map +1 -0
  3. package/dist/api/index.js +774 -0
  4. package/dist/api/index.js.map +1 -0
  5. package/dist/auth/index.d.ts +2 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +2 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/request.d.ts +28 -0
  10. package/dist/auth/request.d.ts.map +1 -0
  11. package/dist/auth/request.js +106 -0
  12. package/dist/auth/request.js.map +1 -0
  13. package/dist/client.d.ts +233 -0
  14. package/dist/client.d.ts.map +1 -0
  15. package/dist/client.js +243 -0
  16. package/dist/client.js.map +1 -0
  17. package/dist/config/defaults.d.ts +5 -5
  18. package/dist/config/defaults.d.ts.map +1 -1
  19. package/dist/config/defaults.js +3 -5
  20. package/dist/config/defaults.js.map +1 -1
  21. package/dist/config/index.d.ts +0 -1
  22. package/dist/config/index.d.ts.map +1 -1
  23. package/dist/config/index.js +0 -1
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/config/paths.d.ts.map +1 -1
  26. package/dist/config/paths.js +1 -9
  27. package/dist/config/paths.js.map +1 -1
  28. package/dist/contracts/access-logs.d.ts +8 -0
  29. package/dist/contracts/access-logs.d.ts.map +1 -0
  30. package/dist/contracts/access-logs.js +7 -0
  31. package/dist/contracts/access-logs.js.map +1 -0
  32. package/dist/contracts/auth-device.d.ts +70 -0
  33. package/dist/contracts/auth-device.d.ts.map +1 -0
  34. package/dist/contracts/auth-device.js +163 -0
  35. package/dist/contracts/auth-device.js.map +1 -0
  36. package/dist/contracts/binary.d.ts +54 -0
  37. package/dist/contracts/binary.d.ts.map +1 -0
  38. package/dist/contracts/binary.js +92 -0
  39. package/dist/contracts/binary.js.map +1 -0
  40. package/dist/contracts/config.d.ts +5 -0
  41. package/dist/contracts/config.d.ts.map +1 -0
  42. package/dist/contracts/config.js +30 -0
  43. package/dist/contracts/config.js.map +1 -0
  44. package/dist/contracts/data.d.ts +115 -0
  45. package/dist/contracts/data.d.ts.map +1 -0
  46. package/dist/contracts/data.js +237 -0
  47. package/dist/contracts/data.js.map +1 -0
  48. package/dist/contracts/grants.d.ts +45 -0
  49. package/dist/contracts/grants.d.ts.map +1 -0
  50. package/dist/contracts/grants.js +177 -0
  51. package/dist/contracts/grants.js.map +1 -0
  52. package/dist/contracts/http.d.ts +21 -0
  53. package/dist/contracts/http.d.ts.map +1 -0
  54. package/dist/contracts/http.js +49 -0
  55. package/dist/contracts/http.js.map +1 -0
  56. package/dist/contracts/index.d.ts +16 -0
  57. package/dist/contracts/index.d.ts.map +1 -0
  58. package/dist/contracts/index.js +10 -0
  59. package/dist/contracts/index.js.map +1 -0
  60. package/dist/contracts/oauth.d.ts +38 -0
  61. package/dist/contracts/oauth.d.ts.map +1 -0
  62. package/dist/contracts/oauth.js +130 -0
  63. package/dist/contracts/oauth.js.map +1 -0
  64. package/dist/contracts/sync.d.ts +10 -0
  65. package/dist/contracts/sync.d.ts.map +1 -0
  66. package/dist/contracts/sync.js +34 -0
  67. package/dist/contracts/sync.js.map +1 -0
  68. package/dist/errors/catalog.d.ts +9 -0
  69. package/dist/errors/catalog.d.ts.map +1 -1
  70. package/dist/errors/catalog.js +15 -0
  71. package/dist/errors/catalog.js.map +1 -1
  72. package/dist/grants/index.d.ts +2 -4
  73. package/dist/grants/index.d.ts.map +1 -1
  74. package/dist/grants/index.js +1 -2
  75. package/dist/grants/index.js.map +1 -1
  76. package/dist/keys/index.d.ts +1 -2
  77. package/dist/keys/index.d.ts.map +1 -1
  78. package/dist/keys/index.js +1 -2
  79. package/dist/keys/index.js.map +1 -1
  80. package/dist/keys/server-account.d.ts +5 -9
  81. package/dist/keys/server-account.d.ts.map +1 -1
  82. package/dist/keys/server-account.js +1 -47
  83. package/dist/keys/server-account.js.map +1 -1
  84. package/dist/logger/index.d.ts +6 -2
  85. package/dist/logger/index.d.ts.map +1 -1
  86. package/dist/logger/index.js +2 -6
  87. package/dist/logger/index.js.map +1 -1
  88. package/dist/logging/access-log.d.ts +0 -1
  89. package/dist/logging/access-log.d.ts.map +1 -1
  90. package/dist/logging/access-log.js +1 -24
  91. package/dist/logging/access-log.js.map +1 -1
  92. package/dist/logging/access-reader.d.ts +0 -5
  93. package/dist/logging/access-reader.d.ts.map +1 -1
  94. package/dist/logging/access-reader.js +1 -49
  95. package/dist/logging/access-reader.js.map +1 -1
  96. package/dist/mcp/activity.d.ts +68 -0
  97. package/dist/mcp/activity.d.ts.map +1 -0
  98. package/dist/mcp/activity.js +111 -0
  99. package/dist/mcp/activity.js.map +1 -0
  100. package/dist/mcp/builder-registration.d.ts +24 -0
  101. package/dist/mcp/builder-registration.d.ts.map +1 -0
  102. package/dist/mcp/builder-registration.js +89 -0
  103. package/dist/mcp/builder-registration.js.map +1 -0
  104. package/dist/mcp/connection-api.d.ts +170 -0
  105. package/dist/mcp/connection-api.d.ts.map +1 -0
  106. package/dist/mcp/connection-api.js +379 -0
  107. package/dist/mcp/connection-api.js.map +1 -0
  108. package/dist/mcp/grantee.d.ts +52 -0
  109. package/dist/mcp/grantee.d.ts.map +1 -0
  110. package/dist/mcp/grantee.js +91 -0
  111. package/dist/mcp/grantee.js.map +1 -0
  112. package/dist/mcp/index.d.ts +10 -0
  113. package/dist/mcp/index.d.ts.map +1 -0
  114. package/dist/mcp/index.js +10 -0
  115. package/dist/mcp/index.js.map +1 -0
  116. package/dist/mcp/read-client.d.ts +136 -0
  117. package/dist/mcp/read-client.d.ts.map +1 -0
  118. package/dist/mcp/read-client.js +306 -0
  119. package/dist/mcp/read-client.js.map +1 -0
  120. package/dist/mcp/resources.d.ts +37 -0
  121. package/dist/mcp/resources.d.ts.map +1 -0
  122. package/dist/mcp/resources.js +114 -0
  123. package/dist/mcp/resources.js.map +1 -0
  124. package/dist/mcp/search/index.d.ts +34 -0
  125. package/dist/mcp/search/index.d.ts.map +1 -0
  126. package/dist/mcp/search/index.js +69 -0
  127. package/dist/mcp/search/index.js.map +1 -0
  128. package/dist/mcp/server.d.ts +53 -0
  129. package/dist/mcp/server.d.ts.map +1 -0
  130. package/dist/mcp/server.js +308 -0
  131. package/dist/mcp/server.js.map +1 -0
  132. package/dist/mcp/store.d.ts +13 -0
  133. package/dist/mcp/store.d.ts.map +1 -0
  134. package/dist/mcp/store.js +98 -0
  135. package/dist/mcp/store.js.map +1 -0
  136. package/dist/mcp/tools.d.ts +60 -0
  137. package/dist/mcp/tools.d.ts.map +1 -0
  138. package/dist/mcp/tools.js +1058 -0
  139. package/dist/mcp/tools.js.map +1 -0
  140. package/dist/mcp/types.d.ts +97 -0
  141. package/dist/mcp/types.d.ts.map +1 -0
  142. package/dist/mcp/types.js +24 -0
  143. package/dist/mcp/types.js.map +1 -0
  144. package/dist/payment/index.d.ts +2 -0
  145. package/dist/payment/index.d.ts.map +1 -0
  146. package/dist/payment/index.js +2 -0
  147. package/dist/payment/index.js.map +1 -0
  148. package/dist/payment/x402.d.ts +155 -0
  149. package/dist/payment/x402.d.ts.map +1 -0
  150. package/dist/payment/x402.js +402 -0
  151. package/dist/payment/x402.js.map +1 -0
  152. package/dist/policy/data-read.d.ts +15 -0
  153. package/dist/policy/data-read.d.ts.map +1 -0
  154. package/dist/policy/data-read.js +84 -0
  155. package/dist/policy/data-read.js.map +1 -0
  156. package/dist/policy/index.d.ts +2 -0
  157. package/dist/policy/index.d.ts.map +1 -0
  158. package/dist/policy/index.js +2 -0
  159. package/dist/policy/index.js.map +1 -0
  160. package/dist/ports/index.d.ts +95 -0
  161. package/dist/ports/index.d.ts.map +1 -0
  162. package/dist/ports/index.js +7 -0
  163. package/dist/ports/index.js.map +1 -0
  164. package/dist/schemas/server-config.d.ts +12 -0
  165. package/dist/schemas/server-config.d.ts.map +1 -1
  166. package/dist/schemas/server-config.js +34 -4
  167. package/dist/schemas/server-config.js.map +1 -1
  168. package/dist/signing/index.d.ts +0 -1
  169. package/dist/signing/index.d.ts.map +1 -1
  170. package/dist/signing/index.js +0 -1
  171. package/dist/signing/index.js.map +1 -1
  172. package/dist/signing/request-signer.d.ts +8 -2
  173. package/dist/signing/request-signer.d.ts.map +1 -1
  174. package/dist/signing/request-signer.js +5 -31
  175. package/dist/signing/request-signer.js.map +1 -1
  176. package/dist/signing/signer.d.ts +20 -2
  177. package/dist/signing/signer.d.ts.map +1 -1
  178. package/dist/signing/signer.js +23 -13
  179. package/dist/signing/signer.js.map +1 -1
  180. package/dist/storage/adapters/index.d.ts +2 -1
  181. package/dist/storage/adapters/index.d.ts.map +1 -1
  182. package/dist/storage/adapters/index.js +2 -1
  183. package/dist/storage/adapters/index.js.map +1 -1
  184. package/dist/storage/adapters/interface.d.ts +10 -0
  185. package/dist/storage/adapters/interface.d.ts.map +1 -1
  186. package/dist/storage/adapters/sdk.d.ts +23 -0
  187. package/dist/storage/adapters/sdk.d.ts.map +1 -0
  188. package/dist/storage/adapters/sdk.js +73 -0
  189. package/dist/storage/adapters/sdk.js.map +1 -0
  190. package/dist/storage/adapters/vana.d.ts +7 -30
  191. package/dist/storage/adapters/vana.d.ts.map +1 -1
  192. package/dist/storage/adapters/vana.js +37 -92
  193. package/dist/storage/adapters/vana.js.map +1 -1
  194. package/dist/storage/blocks/build.d.ts +20 -0
  195. package/dist/storage/blocks/build.d.ts.map +1 -0
  196. package/dist/storage/blocks/build.js +378 -0
  197. package/dist/storage/blocks/build.js.map +1 -0
  198. package/dist/storage/blocks/cursor.d.ts +33 -0
  199. package/dist/storage/blocks/cursor.d.ts.map +1 -0
  200. package/dist/storage/blocks/cursor.js +142 -0
  201. package/dist/storage/blocks/cursor.js.map +1 -0
  202. package/dist/storage/blocks/errors.d.ts +6 -0
  203. package/dist/storage/blocks/errors.d.ts.map +1 -0
  204. package/dist/storage/blocks/errors.js +9 -0
  205. package/dist/storage/blocks/errors.js.map +1 -0
  206. package/dist/storage/blocks/index.d.ts +5 -0
  207. package/dist/storage/blocks/index.d.ts.map +1 -0
  208. package/dist/storage/blocks/index.js +4 -0
  209. package/dist/storage/blocks/index.js.map +1 -0
  210. package/dist/storage/blocks/types.d.ts +49 -0
  211. package/dist/storage/blocks/types.d.ts.map +1 -0
  212. package/dist/storage/blocks/types.js +2 -0
  213. package/dist/{grants → storage/blocks}/types.js.map +1 -1
  214. package/dist/storage/hierarchy/index.d.ts +0 -1
  215. package/dist/storage/hierarchy/index.d.ts.map +1 -1
  216. package/dist/storage/hierarchy/index.js +0 -1
  217. package/dist/storage/hierarchy/index.js.map +1 -1
  218. package/dist/storage/hierarchy/manager.d.ts +0 -14
  219. package/dist/storage/hierarchy/manager.d.ts.map +1 -1
  220. package/dist/storage/hierarchy/manager.js +1 -59
  221. package/dist/storage/hierarchy/manager.js.map +1 -1
  222. package/dist/storage/hierarchy/paths.d.ts.map +1 -1
  223. package/dist/storage/hierarchy/paths.js +11 -4
  224. package/dist/storage/hierarchy/paths.js.map +1 -1
  225. package/dist/storage/index/index.d.ts +2 -3
  226. package/dist/storage/index/index.d.ts.map +1 -1
  227. package/dist/storage/index/index.js +1 -2
  228. package/dist/storage/index/index.js.map +1 -1
  229. package/dist/storage/index/manager.d.ts +26 -6
  230. package/dist/storage/index/manager.d.ts.map +1 -1
  231. package/dist/storage/index/manager.js +1 -131
  232. package/dist/storage/index/manager.js.map +1 -1
  233. package/dist/storage/index/schema.d.ts +1 -3
  234. package/dist/storage/index/schema.d.ts.map +1 -1
  235. package/dist/storage/index/schema.js +1 -26
  236. package/dist/storage/index/schema.js.map +1 -1
  237. package/dist/storage/index/types.d.ts +16 -0
  238. package/dist/storage/index/types.d.ts.map +1 -1
  239. package/dist/storage/preview.d.ts +12 -0
  240. package/dist/storage/preview.d.ts.map +1 -0
  241. package/dist/storage/preview.js +239 -0
  242. package/dist/storage/preview.js.map +1 -0
  243. package/dist/sync/cursor.d.ts +5 -7
  244. package/dist/sync/cursor.d.ts.map +1 -1
  245. package/dist/sync/cursor.js +1 -18
  246. package/dist/sync/cursor.js.map +1 -1
  247. package/dist/sync/engine/sync-manager.d.ts +17 -0
  248. package/dist/sync/engine/sync-manager.d.ts.map +1 -1
  249. package/dist/sync/engine/sync-manager.js +104 -43
  250. package/dist/sync/engine/sync-manager.js.map +1 -1
  251. package/dist/sync/index.d.ts +4 -2
  252. package/dist/sync/index.d.ts.map +1 -1
  253. package/dist/sync/index.js +1 -1
  254. package/dist/sync/index.js.map +1 -1
  255. package/dist/sync/issues.d.ts +55 -0
  256. package/dist/sync/issues.d.ts.map +1 -0
  257. package/dist/sync/issues.js +168 -0
  258. package/dist/sync/issues.js.map +1 -0
  259. package/dist/sync/retry-memory.d.ts +33 -0
  260. package/dist/sync/retry-memory.d.ts.map +1 -0
  261. package/dist/sync/retry-memory.js +68 -0
  262. package/dist/sync/retry-memory.js.map +1 -0
  263. package/dist/sync/types.d.ts +9 -24
  264. package/dist/sync/types.d.ts.map +1 -1
  265. package/dist/sync/workers/delete.d.ts +42 -0
  266. package/dist/sync/workers/delete.d.ts.map +1 -0
  267. package/dist/sync/workers/delete.js +40 -0
  268. package/dist/sync/workers/delete.js.map +1 -0
  269. package/dist/sync/workers/download.d.ts +64 -18
  270. package/dist/sync/workers/download.d.ts.map +1 -1
  271. package/dist/sync/workers/download.js +396 -54
  272. package/dist/sync/workers/download.js.map +1 -1
  273. package/dist/sync/workers/upload.d.ts +29 -18
  274. package/dist/sync/workers/upload.d.ts.map +1 -1
  275. package/dist/sync/workers/upload.js +163 -46
  276. package/dist/sync/workers/upload.js.map +1 -1
  277. package/dist/test-utils/wallet.d.ts +1 -0
  278. package/dist/test-utils/wallet.d.ts.map +1 -1
  279. package/dist/test-utils/wallet.js +9 -31
  280. package/dist/test-utils/wallet.js.map +1 -1
  281. package/package.json +51 -27
  282. package/dist/auth/web3-signed.d.ts +0 -48
  283. package/dist/auth/web3-signed.d.ts.map +0 -1
  284. package/dist/auth/web3-signed.js +0 -110
  285. package/dist/auth/web3-signed.js.map +0 -1
  286. package/dist/config/loader.d.ts +0 -8
  287. package/dist/config/loader.d.ts.map +0 -1
  288. package/dist/config/loader.js +0 -38
  289. package/dist/config/loader.js.map +0 -1
  290. package/dist/gateway/client.d.ts +0 -98
  291. package/dist/gateway/client.d.ts.map +0 -1
  292. package/dist/gateway/client.js +0 -171
  293. package/dist/gateway/client.js.map +0 -1
  294. package/dist/grants/eip712.d.ts +0 -28
  295. package/dist/grants/eip712.d.ts.map +0 -1
  296. package/dist/grants/eip712.js +0 -30
  297. package/dist/grants/eip712.js.map +0 -1
  298. package/dist/grants/types.d.ts +0 -29
  299. package/dist/grants/types.d.ts.map +0 -1
  300. package/dist/grants/types.js +0 -6
  301. package/dist/grants/verify.d.ts +0 -24
  302. package/dist/grants/verify.d.ts.map +0 -1
  303. package/dist/grants/verify.js +0 -71
  304. package/dist/grants/verify.js.map +0 -1
  305. package/dist/keys/derive.d.ts +0 -18
  306. package/dist/keys/derive.d.ts.map +0 -1
  307. package/dist/keys/derive.js +0 -43
  308. package/dist/keys/derive.js.map +0 -1
  309. package/dist/schemas/data-file.d.ts +0 -20
  310. package/dist/schemas/data-file.d.ts.map +0 -1
  311. package/dist/schemas/data-file.js +0 -23
  312. package/dist/schemas/data-file.js.map +0 -1
  313. package/dist/scopes/index.d.ts +0 -3
  314. package/dist/scopes/index.d.ts.map +0 -1
  315. package/dist/scopes/index.js +0 -3
  316. package/dist/scopes/index.js.map +0 -1
  317. package/dist/scopes/match.d.ts +0 -13
  318. package/dist/scopes/match.d.ts.map +0 -1
  319. package/dist/scopes/match.js +0 -23
  320. package/dist/scopes/match.js.map +0 -1
  321. package/dist/scopes/parse.d.ts +0 -12
  322. package/dist/scopes/parse.d.ts.map +0 -1
  323. package/dist/scopes/parse.js +0 -29
  324. package/dist/scopes/parse.js.map +0 -1
  325. package/dist/signing/eip712.d.ts +0 -69
  326. package/dist/signing/eip712.d.ts.map +0 -1
  327. package/dist/signing/eip712.js +0 -68
  328. package/dist/signing/eip712.js.map +0 -1
  329. package/dist/storage/encryption/decrypt.d.ts +0 -10
  330. package/dist/storage/encryption/decrypt.d.ts.map +0 -1
  331. package/dist/storage/encryption/decrypt.js +0 -19
  332. package/dist/storage/encryption/decrypt.js.map +0 -1
  333. package/dist/storage/encryption/encrypt.d.ts +0 -10
  334. package/dist/storage/encryption/encrypt.d.ts.map +0 -1
  335. package/dist/storage/encryption/encrypt.js +0 -19
  336. package/dist/storage/encryption/encrypt.js.map +0 -1
  337. package/dist/storage/encryption/index.d.ts +0 -3
  338. package/dist/storage/encryption/index.d.ts.map +0 -1
  339. package/dist/storage/encryption/index.js +0 -3
  340. package/dist/storage/encryption/index.js.map +0 -1
@@ -1,65 +1,157 @@
1
- import { readDataFile } from "../../storage/hierarchy/index.js";
2
- import { deriveScopeKey } from "../../keys/derive.js";
3
- import { encryptWithPassword } from "../../storage/encryption/index.js";
1
+ import { encodeAbiParameters, keccak256, stringToHex } from "viem";
2
+ import { deriveScopeKey, encryptWithPassword, } from "@opendatalabs/vana-sdk/browser";
4
3
  /**
5
4
  * Upload a single unsynced index entry:
6
5
  * 1. Read local data file from disk
7
- * 2. Look up schema for the scopeget schemaId
8
- * 3. Derive scope key from master keyhex-encode as OpenPGP password
9
- * 4. Encrypt with OpenPGP password-based encryption → binary
10
- * 5. Upload OpenPGP binary to storage backend
11
- * 6. Sign file registration via EIP-712
12
- * 7. Register file record on-chain via Gateway (with schemaId)
13
- * 8. Update local index with fileId
6
+ * 2. Derive scope key from master keyhex-encode as OpenPGP password
7
+ * 3. Encrypt envelope with OpenPGP password-based encryptionciphertext
8
+ * 4. Compute dataHash / metadataHash commitments (scope-addressed, no schema)
9
+ * 5. Upload ciphertext to storage backend, version-keyed `{scope}/{version}`
10
+ * 6. Register DPv2 data point on-chain (AddData) if not already
11
+ * 7. Persist the gateway-assigned dataPointId (marks the entry synced)
14
12
  */
15
13
  export async function uploadOne(deps, entry) {
16
- const { indexManager, hierarchyOptions, storageAdapter, gateway, signer, masterKey, serverOwner, logger, } = deps;
14
+ const { storage, storageAdapter, gateway, signer, masterKey, serverOwner, logger, } = deps;
17
15
  // 1. Read local data file
18
- const envelope = await readDataFile(hierarchyOptions, entry.scope, entry.collectedAt);
19
- // 2. Look up schema for the scope
20
- const schema = await gateway.getSchemaForScope(entry.scope);
21
- if (!schema) {
22
- throw new Error(`No schema found for scope: ${entry.scope}`);
23
- }
24
- // 3. Derive scope key → hex-encode as OpenPGP password
16
+ const envelope = await storage.readEnvelope(entry.scope, entry.collectedAt);
17
+ // 2. Derive scope key hex-encode as OpenPGP password
25
18
  const scopeKey = deriveScopeKey(masterKey, entry.scope);
26
- const scopeKeyHex = Buffer.from(scopeKey).toString("hex");
27
- // 4. Encrypt with OpenPGP password-based encryption
19
+ const scopeKeyHex = uint8ToHex(scopeKey);
20
+ // 3. Encrypt with OpenPGP password-based encryption
28
21
  const plaintext = new TextEncoder().encode(JSON.stringify(envelope));
29
22
  const encrypted = await encryptWithPassword(plaintext, scopeKeyHex);
30
- // 5. Upload to storage backend
31
- const storageKey = `${entry.scope}/${entry.collectedAt}`;
32
- const url = await storageAdapter.upload(storageKey, encrypted);
33
- // 6. Sign file registration via EIP-712
34
- const signature = await signer.signFileRegistration({
35
- ownerAddress: serverOwner,
36
- url,
37
- schemaId: schema.id,
38
- });
39
- // 7. Register file on-chain via Gateway
40
- const registration = await gateway.registerFile({
41
- ownerAddress: serverOwner,
42
- url,
43
- schemaId: schema.id,
44
- signature,
45
- });
46
- const fileId = registration.fileId;
47
- if (!fileId) {
48
- throw new Error(`Gateway registerFile did not return a fileId for ${entry.path}`);
23
+ // 4. Compute the on-chain commitments.
24
+ // dataHash = keccak256 of the plaintext envelope JSON. Commits to the
25
+ // canonical content, not the ciphertext — OpenPGP
26
+ // password-based encryption embeds random salts so
27
+ // re-encrypting the same plaintext yields different bytes;
28
+ // hashing the plaintext keeps the on-chain commitment
29
+ // reproducible across replicas serving the same version.
30
+ // metadataHash = keccak256 of canonical-JSON({scope, collectedAt,
31
+ // sizeBytes}). Commits to the off-chain metadata that
32
+ // describes this version without leaking the payload. DPv2
33
+ // is scope-addressed with no schema concept — the gateway
34
+ // neither records nor registers schemas — so no schemaId is
35
+ // looked up or committed.
36
+ const dataHash = keccak256(plaintext);
37
+ const metadataHash = keccak256(stringToHex(JSON.stringify({
38
+ scope: entry.scope,
39
+ collectedAt: entry.collectedAt,
40
+ sizeBytes: encrypted.byteLength,
41
+ })));
42
+ // 5. Upload ciphertext to storage backend FIRST, version-keyed so the
43
+ // download worker can reconstruct the URL from a DataPointRecord's
44
+ // (scope, expectedVersion) — DataPointRecords carry no URL. We upload
45
+ // before registering so the on-chain data point (the synced marker) is
46
+ // never stamped ahead of a blob that failed to land.
47
+ const storageKey = `${entry.scope}/${entry.version}`;
48
+ let url = await storageAdapter.upload(storageKey, encrypted);
49
+ // 6. DPv2 data-point registration (idempotent — skipped when a prior run
50
+ // already persisted a dataPointId on this entry). registerDataPoint stamps
51
+ // the synced marker that excludes this entry from findUnsynced next time.
52
+ let dataPointId;
53
+ if (entry.dataPointId) {
54
+ dataPointId = entry.dataPointId;
55
+ }
56
+ else {
57
+ const registerAt = async (version) => {
58
+ const addDataSignature = await signer.signAddData({
59
+ ownerAddress: serverOwner,
60
+ scope: entry.scope,
61
+ dataHash,
62
+ metadataHash,
63
+ expectedVersion: version,
64
+ });
65
+ const dataPointResult = await gateway.registerDataPoint({
66
+ ownerAddress: serverOwner,
67
+ scope: entry.scope,
68
+ dataHash,
69
+ metadataHash,
70
+ expectedVersion: String(version),
71
+ signature: addDataSignature,
72
+ });
73
+ const id = dataPointResult.dataPointId ?? null;
74
+ if (!id) {
75
+ throw new Error(`Gateway registerDataPoint did not return a dataPointId for ${entry.path} (scope=${entry.scope}, version=${version})`);
76
+ }
77
+ return id;
78
+ };
79
+ try {
80
+ dataPointId = await registerAt(BigInt(entry.version));
81
+ }
82
+ catch (err) {
83
+ if (!isStaleVersionConflict(err))
84
+ throw err;
85
+ // The registry's version for this (owner, scope) is ahead of the local
86
+ // index: pre-DPv2 rows were backfilled to version 1, and other replicas
87
+ // (PS Lite in the browser) advance the same per-scope sequence. The
88
+ // gateway 409s precisely so the client can re-sign against the live
89
+ // version — retrying the same version every cycle head-blocks the
90
+ // scope's whole upload queue.
91
+ const record = await gateway.getDataPoint(computeDataPointId(serverOwner, entry.scope));
92
+ if (!record)
93
+ throw err;
94
+ if (record.dataHash.toLowerCase() === dataHash.toLowerCase()) {
95
+ // Identical content is already registered (this entry, or a replica's
96
+ // copy of it) — adopt the registered data point rather than minting a
97
+ // new version of the same bytes.
98
+ dataPointId = record.id;
99
+ // Align the local row with the adopted registry version — downstream
100
+ // consumers sign from the row's version (e.g. x402 RecordDataAccess),
101
+ // so a stale local version would emit records the registry rejects.
102
+ const adoptedVersion = Number(record.expectedVersion);
103
+ if (adoptedVersion !== entry.version) {
104
+ // Cross-replica adopt: "the registrant already uploaded the blob
105
+ // under the registered version key" is an assumption, not a fact —
106
+ // a replica that crashed between register and upload leaves a
107
+ // registry row whose bytes 404 for every consumer (readers
108
+ // reconstruct the URL from the record's (scope, expectedVersion);
109
+ // records carry no URL). Verify, and heal from our identical
110
+ // plaintext (dataHash matched, so our ciphertext decrypts to the
111
+ // registered content).
112
+ const adoptedKey = `${entry.scope}/${adoptedVersion}`;
113
+ const adoptedBlobExists = await storageAdapter.exists(storageAdapter.urlForKey(adoptedKey));
114
+ if (!adoptedBlobExists) {
115
+ logger.warn({ scope: entry.scope, version: adoptedVersion, dataPointId }, "Adopted registry version has no blob in storage; re-uploading from local content");
116
+ url = await storageAdapter.upload(adoptedKey, encrypted);
117
+ }
118
+ await storage.updateEntryVersion(entry.path, adoptedVersion);
119
+ }
120
+ }
121
+ else {
122
+ // Rebase: re-sign one past the registry's live version. The blob key
123
+ // embeds the version (replicas reconstruct URLs from the registry
124
+ // record), so the rebased version needs its own blob; the one written
125
+ // under the stale key above is orphaned, which storage tolerates.
126
+ const rebased = BigInt(record.expectedVersion) + 1n;
127
+ url = await storageAdapter.upload(`${entry.scope}/${rebased}`, encrypted);
128
+ // A concurrent replica can still win the race to `rebased`; the next
129
+ // sync cycle re-reads the registry and rebases again, so this stays
130
+ // convergent without looping here.
131
+ dataPointId = await registerAt(rebased);
132
+ await storage.updateEntryVersion(entry.path, Number(rebased));
133
+ }
134
+ }
135
+ // 7. Stamp the dataPointId on the local index entry — marks it synced.
136
+ await storage.updateDataPointId(entry.path, dataPointId);
49
137
  }
50
- // 8. Update local index with fileId
51
- indexManager.updateFileId(entry.path, fileId);
52
- logger.info({ path: entry.path, fileId, url }, "Uploaded and registered file");
53
- return { path: entry.path, fileId, url };
138
+ logger.info({
139
+ path: entry.path,
140
+ scope: entry.scope,
141
+ version: entry.version,
142
+ url,
143
+ dataPointId,
144
+ }, "Uploaded and registered DPv2 data point");
145
+ return { path: entry.path, url, dataPointId };
54
146
  }
55
147
  /**
56
- * Process all unsynced entries (fileId === null).
148
+ * Process all unsynced entries (dataPointId === null).
57
149
  * Processes sequentially to avoid overwhelming storage backend.
58
150
  * Returns array of results (skips failures, logs errors).
59
151
  */
60
152
  export async function uploadAll(deps, options) {
61
153
  const batchSize = options?.batchSize ?? 50;
62
- const entries = deps.indexManager.findUnsynced({ limit: batchSize });
154
+ const entries = deps.storage.findUnsynced({ limit: batchSize });
63
155
  const results = [];
64
156
  for (const entry of entries) {
65
157
  try {
@@ -67,9 +159,34 @@ export async function uploadAll(deps, options) {
67
159
  results.push(result);
68
160
  }
69
161
  catch (err) {
70
- deps.logger.error({ path: entry.path, scope: entry.scope, error: err.message }, "Failed to upload entry");
162
+ const error = err;
163
+ options?.onError?.(entry, error);
164
+ deps.logger.error({ path: entry.path, scope: entry.scope, error: error.message }, "Failed to upload entry");
71
165
  }
72
166
  }
73
167
  return results;
74
168
  }
169
+ function uint8ToHex(bytes) {
170
+ return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
171
+ }
172
+ // The gateway rejects a registration whose expectedVersion is not strictly
173
+ // greater than its stored value with a 409; the SDK client surfaces it as
174
+ // `Gateway error: 409 <detail>`. Anything else is not a version conflict.
175
+ function isStaleVersionConflict(err) {
176
+ return err instanceof Error && /Gateway error: 409\b/.test(err.message);
177
+ }
178
+ /**
179
+ * Deterministic DPv2 data-point id — `keccak256(abi.encode(owner, scope))`,
180
+ * the same primary key DataRegistryV2 and the gateway use. Lets the upload
181
+ * worker look up the registry's live row for a scope without a list call.
182
+ */
183
+ export function computeDataPointId(ownerAddress, scope) {
184
+ // ABI-encoding an address is checksum-insensitive (same bytes either way),
185
+ // but viem rejects mixed-case strings that fail checksum validation —
186
+ // normalize so config-sourced owner strings can't trip it.
187
+ return keccak256(encodeAbiParameters([
188
+ { name: "ownerAddress", type: "address" },
189
+ { name: "scope", type: "string" },
190
+ ], [ownerAddress.toLowerCase(), scope]));
191
+ }
75
192
  //# sourceMappingURL=upload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/sync/workers/upload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/sync/workers/upload.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ export declare function buildWeb3SignedHeader(params: {
33
33
  method: string;
34
34
  uri: string;
35
35
  bodyHash?: string;
36
+ body?: Uint8Array;
36
37
  iat?: number;
37
38
  exp?: number;
38
39
  grantId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/test-utils/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IACrD,aAAa,CAAC,MAAM,EAAE;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAC;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAU,GAAG,UAAU,CA0B7D;AAWD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiClB"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/test-utils/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IACrD,aAAa,CAAC,MAAM,EAAE;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAC;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAU,GAAG,UAAU,CA0B7D;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlB"}
@@ -3,6 +3,7 @@
3
3
  * Provides deterministic wallets and header builders for integration tests.
4
4
  */
5
5
  import { privateKeyToAccount } from "viem/accounts";
6
+ import { buildWeb3SignedHeader as sdkBuildWeb3SignedHeader } from "@opendatalabs/vana-sdk/browser";
6
7
  /**
7
8
  * Create a deterministic test wallet from a seed index.
8
9
  * Seed 0 produces a fixed private key, seed N produces key = padded hex(N+1).
@@ -29,14 +30,6 @@ export function createTestWallet(seed = 0) {
29
30
  },
30
31
  };
31
32
  }
32
- /** Base64url encode a string (no padding). */
33
- function base64urlEncode(input) {
34
- return Buffer.from(input, "utf-8")
35
- .toString("base64")
36
- .replace(/\+/g, "-")
37
- .replace(/\//g, "_")
38
- .replace(/=+$/, "");
39
- }
40
33
  /**
41
34
  * Build a valid Web3Signed Authorization header value.
42
35
  * Format: "Web3Signed {base64url(payload)}.{signature}"
@@ -44,31 +37,16 @@ function base64urlEncode(input) {
44
37
  * The payload is JSON with sorted keys, signed via EIP-191.
45
38
  */
46
39
  export async function buildWeb3SignedHeader(params) {
47
- const now = Math.floor(Date.now() / 1000);
48
- const payload = {
40
+ return sdkBuildWeb3SignedHeader({
41
+ signMessage: (message) => params.wallet.signMessage(message),
49
42
  aud: params.aud,
50
- // SHA256 of empty string is a well-known constant
51
- bodyHash: params.bodyHash ??
52
- "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
53
- exp: params.exp ?? now + 300,
54
- iat: params.iat ?? now,
55
43
  method: params.method,
56
44
  uri: params.uri,
57
- };
58
- if (params.grantId !== undefined) {
59
- payload["grantId"] = params.grantId;
60
- }
61
- // Sort keys for deterministic serialization
62
- const sortedPayload = Object.keys(payload)
63
- .sort()
64
- .reduce((acc, key) => {
65
- acc[key] = payload[key];
66
- return acc;
67
- }, {});
68
- const payloadJson = JSON.stringify(sortedPayload);
69
- const payloadBase64 = base64urlEncode(payloadJson);
70
- // Sign the base64url string via EIP-191
71
- const signature = await params.wallet.signMessage(payloadBase64);
72
- return `Web3Signed ${payloadBase64}.${signature}`;
45
+ bodyHash: params.bodyHash,
46
+ body: params.body,
47
+ iat: params.iat,
48
+ exp: params.exp,
49
+ grantId: params.grantId,
50
+ });
73
51
  }
74
52
  //# sourceMappingURL=wallet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/test-utils/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAepD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,CAAC;IAC/C,oDAAoD;IACpD,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,KAAK,QAAQ,EAAmB,CAAC;IACpD,MAAM,OAAO,GAAsB,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU;QACV,KAAK,CAAC,WAAW,CAAC,OAAe;YAC/B,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,MAAM;YACxB,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAED;gBACd,KAAK,EAAE,MAAM,CAAC,KAED;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8CAA8C;AAC9C,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;SAC/B,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAS3C;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAA4B;QACvC,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,kDAAkD;QAClD,QAAQ,EACN,MAAM,CAAC,QAAQ;YACf,yEAAyE;QAC3E,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG;QAC5B,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG;QACtB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACvC,IAAI,EAAE;SACN,MAAM,CAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAET,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAEnD,wCAAwC;IACxC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAEjE,OAAO,cAAc,aAAa,IAAI,SAAS,EAAE,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/test-utils/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,qBAAqB,IAAI,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAcnG;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,CAAC;IAC/C,oDAAoD;IACpD,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,KAAK,QAAQ,EAAmB,CAAC;IACpD,MAAM,OAAO,GAAsB,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU;QACV,KAAK,CAAC,WAAW,CAAC,OAAe;YAC/B,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,MAAM;YACxB,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAED;gBACd,KAAK,EAAE,MAAM,CAAC,KAED;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAU3C;IACC,OAAO,wBAAwB,CAAC;QAC9B,WAAW,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;QACpE,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendatalabs/personal-server-ts-core",
3
- "version": "0.2.0",
3
+ "version": "1.0.1",
4
4
  "description": "Protocol logic for the Vana Personal Server — auth, grants, scopes, storage, keys",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -24,6 +24,22 @@
24
24
  "types": "./dist/config/index.d.ts",
25
25
  "import": "./dist/config/index.js"
26
26
  },
27
+ "./auth": {
28
+ "types": "./dist/auth/index.d.ts",
29
+ "import": "./dist/auth/index.js"
30
+ },
31
+ "./contracts": {
32
+ "types": "./dist/contracts/index.d.ts",
33
+ "import": "./dist/contracts/index.js"
34
+ },
35
+ "./client": {
36
+ "types": "./dist/client.d.ts",
37
+ "import": "./dist/client.js"
38
+ },
39
+ "./api": {
40
+ "types": "./dist/api/index.d.ts",
41
+ "import": "./dist/api/index.js"
42
+ },
27
43
  "./logger": {
28
44
  "types": "./dist/logger/index.d.ts",
29
45
  "import": "./dist/logger/index.js"
@@ -36,10 +52,6 @@
36
52
  "types": "./dist/schemas/server-config.d.ts",
37
53
  "import": "./dist/schemas/server-config.js"
38
54
  },
39
- "./scopes": {
40
- "types": "./dist/scopes/index.d.ts",
41
- "import": "./dist/scopes/index.js"
42
- },
43
55
  "./storage/hierarchy": {
44
56
  "types": "./dist/storage/hierarchy/index.d.ts",
45
57
  "import": "./dist/storage/hierarchy/index.js"
@@ -48,26 +60,38 @@
48
60
  "types": "./dist/storage/index/index.d.ts",
49
61
  "import": "./dist/storage/index/index.js"
50
62
  },
51
- "./schemas/data-file": {
52
- "types": "./dist/schemas/data-file.d.ts",
53
- "import": "./dist/schemas/data-file.js"
63
+ "./storage/blocks": {
64
+ "types": "./dist/storage/blocks/index.d.ts",
65
+ "import": "./dist/storage/blocks/index.js"
54
66
  },
55
- "./auth": {
56
- "types": "./dist/auth/web3-signed.d.ts",
57
- "import": "./dist/auth/web3-signed.js"
67
+ "./storage/preview": {
68
+ "types": "./dist/storage/preview.d.ts",
69
+ "import": "./dist/storage/preview.js"
70
+ },
71
+ "./storage/blocks/build": {
72
+ "types": "./dist/storage/blocks/build.d.ts",
73
+ "import": "./dist/storage/blocks/build.js"
58
74
  },
59
75
  "./grants": {
60
76
  "types": "./dist/grants/index.d.ts",
61
77
  "import": "./dist/grants/index.js"
62
78
  },
63
- "./gateway": {
64
- "types": "./dist/gateway/client.d.ts",
65
- "import": "./dist/gateway/client.js"
79
+ "./policy": {
80
+ "types": "./dist/policy/index.d.ts",
81
+ "import": "./dist/policy/index.js"
82
+ },
83
+ "./ports": {
84
+ "types": "./dist/ports/index.d.ts",
85
+ "import": "./dist/ports/index.js"
66
86
  },
67
87
  "./logging/access-log": {
68
88
  "types": "./dist/logging/access-log.d.ts",
69
89
  "import": "./dist/logging/access-log.js"
70
90
  },
91
+ "./mcp": {
92
+ "types": "./dist/mcp/index.d.ts",
93
+ "import": "./dist/mcp/index.js"
94
+ },
71
95
  "./keys": {
72
96
  "types": "./dist/keys/index.d.ts",
73
97
  "import": "./dist/keys/index.js"
@@ -84,9 +108,9 @@
84
108
  "types": "./dist/sync/index.d.ts",
85
109
  "import": "./dist/sync/index.js"
86
110
  },
87
- "./storage/encryption": {
88
- "types": "./dist/storage/encryption/index.d.ts",
89
- "import": "./dist/storage/encryption/index.js"
111
+ "./sync/manager": {
112
+ "types": "./dist/sync/engine/sync-manager.d.ts",
113
+ "import": "./dist/sync/engine/sync-manager.js"
90
114
  },
91
115
  "./storage/adapters": {
92
116
  "types": "./dist/storage/adapters/index.d.ts",
@@ -95,21 +119,21 @@
95
119
  "./test-utils": {
96
120
  "types": "./dist/test-utils/index.d.ts",
97
121
  "import": "./dist/test-utils/index.js"
122
+ },
123
+ "./payment": {
124
+ "types": "./dist/payment/index.d.ts",
125
+ "import": "./dist/payment/index.js"
98
126
  }
99
127
  },
100
128
  "scripts": {
101
129
  "build": "tsc --build"
102
130
  },
103
131
  "dependencies": {
104
- "@noble/hashes": "^2.0.1",
105
- "better-sqlite3": "^12.6.2",
106
- "openpgp": "^6.3.0",
107
- "pino": "^10.3.0",
108
- "pino-pretty": "^13.0.0",
109
- "viem": "^2.45.1",
110
- "zod": "^4.3.6"
111
- },
112
- "devDependencies": {
113
- "@types/better-sqlite3": "^7.6.0"
132
+ "@modelcontextprotocol/sdk": "^1.29.0",
133
+ "@opendatalabs/vana-sdk": "3.13.0",
134
+ "minisearch": "^7.2.0",
135
+ "unpdf": "^1.6.2",
136
+ "viem": "^2.54.2",
137
+ "zod": "^4.4.3"
114
138
  }
115
139
  }
@@ -1,48 +0,0 @@
1
- /**
2
- * Web3Signed Authorization header parsing and verification.
3
- *
4
- * Header format: "Web3Signed {base64url(payload)}.{signature}"
5
- * Payload is JSON with fields: aud, method, uri, bodyHash, iat, exp, grantId?
6
- * Signature is EIP-191 over the base64url-encoded payload string.
7
- */
8
- export interface Web3SignedPayload {
9
- aud: string;
10
- method: string;
11
- uri: string;
12
- bodyHash: string;
13
- iat: number;
14
- exp: number;
15
- grantId?: string;
16
- }
17
- export interface VerifiedAuth {
18
- signer: `0x${string}`;
19
- payload: Web3SignedPayload;
20
- }
21
- /**
22
- * Parse "Web3Signed <base64url>.<signature>" header value.
23
- * Throws MissingAuthError if header is missing/empty.
24
- * Throws InvalidSignatureError if format is invalid.
25
- */
26
- export declare function parseWeb3SignedHeader(headerValue: string | undefined): {
27
- payloadBase64: string;
28
- payload: Web3SignedPayload;
29
- signature: `0x${string}`;
30
- };
31
- /**
32
- * Full verification: parse header, recover signer via EIP-191, check claims.
33
- *
34
- * Steps:
35
- * 1. Parse header -> base64url + signature
36
- * 2. Recover signer via recoverMessageAddress (EIP-191) over the base64url string
37
- * 3. Check aud === expectedOrigin, method === expectedMethod, uri === expectedPath
38
- * 4. Check iat/exp within clock skew (60s)
39
- * 5. Return { signer, payload }
40
- */
41
- export declare function verifyWeb3Signed(params: {
42
- headerValue: string | undefined;
43
- expectedOrigin: string;
44
- expectedMethod: string;
45
- expectedPath: string;
46
- now?: number;
47
- }): Promise<VerifiedAuth>;
48
- //# sourceMappingURL=web3-signed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web3-signed.d.ts","sourceRoot":"","sources":["../../src/auth/web3-signed.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAaD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;CAC1B,CAmCA;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,YAAY,CAAC,CAqDxB"}