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

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,90 +1,432 @@
1
- import { writeDataFile } from "../../storage/hierarchy/index.js";
2
- import { deriveScopeKey } from "../../keys/derive.js";
3
- import { decryptWithPassword } from "../../storage/encryption/index.js";
4
- import { DataFileEnvelopeSchema } from "../../schemas/data-file.js";
1
+ import { DataFileEnvelopeSchema, decryptWithPassword, deriveScopeKey, } from "@opendatalabs/vana-sdk/browser";
2
+ import { buildDataBlocksAsync } from "../../storage/blocks/build.js";
3
+ import { classifySyncFailure, inferPayloadKind, } from "../issues.js";
4
+ import { downloadRetryKey } from "../retry-memory.js";
5
5
  /**
6
- * Download and process a single file record from the storage backend:
7
- * 1. Check dedup: skip if fileId already in local index
8
- * 2. Download OpenPGP encrypted binary from storage backend
9
- * 3. Resolve schemaId scope via Gateway getSchema
6
+ * Download and process a single DPv2 data point from the storage backend:
7
+ * 1. Check dedup: skip if dataPointId already in local index
8
+ * 2. Reconstruct the blob URL from (scope, expectedVersion) — DataPointRecords
9
+ * carry no URL, so we rebuild the version-keyed `{scope}/{version}` key the
10
+ * upload worker wrote under and resolve it via storageAdapter.urlForKey
11
+ * 3. Download the OpenPGP encrypted binary from storage
10
12
  * 4. Derive scope key from master key → hex-encode as OpenPGP password
13
+ * (scope comes straight off the record — no schema lookup needed)
11
14
  * 5. Decrypt with OpenPGP password-based decryption → plaintext JSON
12
15
  * 6. Parse as DataFileEnvelope (validate)
13
- * 7. Write to local filesystem via hierarchy manager
14
- * 8. Insert into local index (with fileId)
16
+ * 7. Write to local filesystem + bounded block sidecars
17
+ * 8. Insert into local index (with dataPointId + version)
15
18
  */
16
19
  export async function downloadOne(deps, record) {
17
- const { indexManager, hierarchyOptions, storageAdapter, gateway, masterKey, logger, } = deps;
18
- // 1. Check dedup: skip if fileId already in local index
19
- const existing = indexManager.findByFileId(record.fileId);
20
+ const { storage, storageAdapter, masterKey, logger, diagnostics } = deps;
21
+ const ctx = { dataPointId: record.id, schemaId: null };
22
+ // 1. Check dedup: skip if dataPointId already in local index
23
+ const existing = storage.findByDataPointId(record.id);
20
24
  if (existing) {
21
- logger.debug({ fileId: record.fileId }, "File already in index, skipping");
22
- return null;
23
- }
24
- // 2. Download OpenPGP encrypted binary from storage backend
25
- const encrypted = await storageAdapter.download(record.url);
26
- // 3. Resolve schemaId → scope via Gateway getSchema
27
- const schema = await gateway.getSchema(record.schemaId);
28
- if (!schema) {
29
- throw new Error(`No schema found for schemaId: ${record.schemaId}`);
30
- }
31
- // 4. Derive scope key → hex-encode as OpenPGP password
32
- const scopeKey = deriveScopeKey(masterKey, schema.scope);
33
- const scopeKeyHex = Buffer.from(scopeKey).toString("hex");
25
+ const repairResult = await repairMissingBlockSidecars(storage, logger, { dataPointId: record.id, schemaId: existing.schemaId }, existing, diagnostics);
26
+ if (repairResult === "missing-envelope") {
27
+ logger.warn({
28
+ dataPointId: record.id,
29
+ scope: existing.scope,
30
+ collectedAt: existing.collectedAt,
31
+ }, "Local index entry was missing its envelope; re-downloading data point");
32
+ }
33
+ else {
34
+ logger.debug({ dataPointId: record.id }, "Data point already in index, skipping");
35
+ return null;
36
+ }
37
+ }
38
+ // 2. Reconstruct the version-keyed storage URL.
39
+ const storageKey = `${record.scope}/${record.expectedVersion}`;
40
+ const url = storageAdapter.urlForKey(storageKey);
41
+ // 3. Download OpenPGP encrypted binary from storage backend. A download
42
+ // failure throws and blocks the cursor (correct: a transient error retries
43
+ // next cycle rather than risk a silent gap). Stamp the stage so the
44
+ // classifier can tell a deterministic 404 (quarantine, never retry) from a
45
+ // transient storage error — without it the failure infers stage "unknown"
46
+ // and every 404 is retried forever.
47
+ diagnostics?.onDownloadStart(record.id);
48
+ let encrypted;
49
+ try {
50
+ encrypted = await storageAdapter.download(url);
51
+ }
52
+ catch (err) {
53
+ const detail = err.message;
54
+ diagnostics?.onDownloadError(record.id, detail);
55
+ throw withSyncFailureMetadata(err, {
56
+ stage: "download",
57
+ scope: record.scope,
58
+ });
59
+ }
60
+ diagnostics?.onDownloadEnd(record.id, record.scope);
61
+ // 4. Derive scope key → hex-encode as OpenPGP password (scope off the record)
62
+ const scopeKey = deriveScopeKey(masterKey, record.scope);
63
+ const scopeKeyHex = uint8ToHex(scopeKey);
34
64
  // 5. Decrypt with OpenPGP password-based decryption
35
- const plaintext = await decryptWithPassword(encrypted, scopeKeyHex);
65
+ diagnostics?.onDecryptStart(record.id, record.scope);
66
+ let plaintext;
67
+ try {
68
+ plaintext = await decryptWithPassword(encrypted, scopeKeyHex);
69
+ }
70
+ catch (err) {
71
+ const payloadKind = inferPayloadKind(encrypted);
72
+ const encryptedSizeBytes = encrypted.byteLength;
73
+ const detail = [
74
+ err.message,
75
+ `payloadKind=${payloadKind}`,
76
+ `encryptedSizeBytes=${encryptedSizeBytes}`,
77
+ ].join("; ");
78
+ diagnostics?.onDecryptError(record.id, record.scope, detail);
79
+ throw withSyncFailureMetadata(err, {
80
+ scope: record.scope,
81
+ payloadKind,
82
+ encryptedSizeBytes,
83
+ });
84
+ }
36
85
  // 6. Parse as DataFileEnvelope (validate)
37
- const raw = JSON.parse(new TextDecoder().decode(plaintext));
38
- const envelope = DataFileEnvelopeSchema.parse(raw);
39
- // 7. Write to local filesystem via hierarchy manager
40
- const { relativePath, sizeBytes } = await writeDataFile(hierarchyOptions, envelope);
41
- // 8. Insert into local index (with fileId)
42
- indexManager.insert({
43
- fileId: record.fileId,
44
- path: relativePath,
86
+ let envelope;
87
+ try {
88
+ const raw = JSON.parse(new TextDecoder().decode(plaintext));
89
+ envelope = DataFileEnvelopeSchema.parse(raw);
90
+ }
91
+ catch (err) {
92
+ const detail = err.message;
93
+ diagnostics?.onDecryptError(record.id, record.scope, detail);
94
+ throw err;
95
+ }
96
+ ctx.schemaId = envelope.schemaId ?? null;
97
+ diagnostics?.onDecryptEnd(record.id, envelope.scope);
98
+ const existingByVersion = storage.findEntry({
45
99
  scope: envelope.scope,
46
- collectedAt: envelope.collectedAt,
47
- sizeBytes,
100
+ at: envelope.collectedAt,
48
101
  });
49
- logger.info({ fileId: record.fileId, scope: envelope.scope, path: relativePath }, "Downloaded and indexed file");
102
+ if (existingByVersion !== undefined &&
103
+ existingByVersion.collectedAt === envelope.collectedAt) {
104
+ if (existingByVersion.dataPointId !== record.id) {
105
+ await storage.updateDataPointId(existingByVersion.path, record.id);
106
+ }
107
+ const repairResult = await repairMissingBlockSidecars(storage, logger, {
108
+ dataPointId: record.id,
109
+ schemaId: existingByVersion.schemaId ?? ctx.schemaId,
110
+ }, existingByVersion, diagnostics);
111
+ if (repairResult !== "missing-envelope") {
112
+ logger.debug({
113
+ dataPointId: record.id,
114
+ scope: envelope.scope,
115
+ collectedAt: envelope.collectedAt,
116
+ }, "Data version already exists locally, skipping");
117
+ return null;
118
+ }
119
+ logger.warn({
120
+ dataPointId: record.id,
121
+ scope: envelope.scope,
122
+ collectedAt: envelope.collectedAt,
123
+ }, "Local version entry was missing its envelope; rewriting downloaded file");
124
+ }
125
+ // 7. Write to local storage + bounded block sidecars
126
+ diagnostics?.onIndexStart(record.id, envelope.scope);
127
+ let relativePath;
128
+ let sizeBytes;
129
+ try {
130
+ ({ relativePath, sizeBytes } = await storage.writeEnvelope(envelope));
131
+ await writeBlockSidecars(storage, envelope, logger, ctx, relativePath, diagnostics);
132
+ }
133
+ catch (err) {
134
+ const detail = err.message;
135
+ diagnostics?.onIndexError(record.id, envelope.scope, detail);
136
+ throw err;
137
+ }
138
+ // 8. Insert into local index (with dataPointId + version)
139
+ try {
140
+ await storage.insertEntry({
141
+ fileId: null,
142
+ schemaId: ctx.schemaId,
143
+ path: relativePath,
144
+ scope: envelope.scope,
145
+ collectedAt: envelope.collectedAt,
146
+ sizeBytes,
147
+ version: Number(record.expectedVersion),
148
+ dataPointId: record.id,
149
+ });
150
+ }
151
+ catch (err) {
152
+ const detail = err.message;
153
+ diagnostics?.onIndexError(record.id, envelope.scope, detail);
154
+ throw err;
155
+ }
156
+ diagnostics?.onIndexEnd(record.id, envelope.scope);
157
+ logger.info({ dataPointId: record.id, scope: envelope.scope, path: relativePath }, "Downloaded and indexed data point");
50
158
  return {
51
- fileId: record.fileId,
159
+ dataPointId: record.id,
52
160
  scope: envelope.scope,
53
161
  collectedAt: envelope.collectedAt,
54
162
  path: relativePath,
55
163
  };
56
164
  }
57
165
  /**
58
- * Poll Gateway for new file records since lastProcessedTimestamp,
59
- * download each, and advance the cursor.
166
+ * Poll Gateway for the owner's data points since the stored cursor, download
167
+ * each, and advance the cursor only when the page fully succeeds.
60
168
  */
61
- export async function downloadAll(deps) {
169
+ export async function downloadAll(deps, options = {}) {
62
170
  const { gateway, cursor, serverOwner, logger } = deps;
63
- // 1. Read cursor
64
- const lastProcessedTimestamp = await cursor.read();
65
- // 2. Poll gateway for new file records
66
- const { files, cursor: nextCursor } = await gateway.listFilesSince(serverOwner, lastProcessedTimestamp);
171
+ const syncRunId = createSyncRunId();
172
+ const repairSummary = await repairLocalMissingBlockSidecars(deps);
173
+ // 1. Read cursor (opaque pagination cursor persisted across runs)
174
+ const lastCursor = options.fullReconcile || repairSummary.missingEnvelopeEntries > 0
175
+ ? null
176
+ : await cursor.read();
177
+ if (options.fullReconcile) {
178
+ logger.info("Running full registry reconciliation to repair any missing local scope records");
179
+ }
180
+ if (repairSummary.missingEnvelopeEntries > 0) {
181
+ logger.warn({ missingEnvelopeEntries: repairSummary.missingEnvelopeEntries }, "Resetting this sync listing to repair stale local index entries");
182
+ }
183
+ if (options.fullReconcile || repairSummary.missingEnvelopeEntries > 0) {
184
+ // An EXPLICIT listing restart (full reconcile, or the repair path above)
185
+ // exists to re-fetch — give transient failures a fresh attempt budget so
186
+ // it can; 404s stay dead. Note `lastCursor === null` alone is NOT a
187
+ // reset signal: single-page listings never advance the cursor, so null
188
+ // is their steady state and clearing on it would erase the backoff
189
+ // memory every cycle.
190
+ options.retryMemory?.onListingReset();
191
+ }
192
+ // 2. Poll gateway for the owner's data points.
193
+ const { dataPoints, cursor: nextCursor } = await gateway.listDataPointsByOwner(serverOwner, lastCursor);
67
194
  const results = [];
68
- // 3. Process each file record
69
- for (const file of files) {
195
+ let failed = false;
196
+ // 3. Process each data point record
197
+ for (const dataPoint of dataPoints) {
198
+ const retryKey = downloadRetryKey(dataPoint);
199
+ const decision = options.retryMemory?.decide(retryKey) ?? "attempt";
200
+ if (decision === "give-up") {
201
+ // Non-retryable failure (e.g. blob 404) or exhausted transient
202
+ // retries — skip without blocking the cursor so one dead record
203
+ // can't wedge the rest of the listing. A new registered version
204
+ // (different retry key) starts fresh.
205
+ logger.debug({ dataPointId: dataPoint.id, scope: dataPoint.scope }, "Skipping data point after exhausted download retries");
206
+ continue;
207
+ }
208
+ if (decision === "backoff") {
209
+ // Waiting out the backoff window. Block the cursor so the record is
210
+ // still listed when the window expires.
211
+ failed = true;
212
+ continue;
213
+ }
70
214
  try {
71
- const result = await downloadOne(deps, file);
215
+ const result = await downloadOne(deps, dataPoint);
216
+ options.retryMemory?.recordSuccess(retryKey);
72
217
  if (result) {
73
218
  results.push(result);
74
219
  }
75
220
  }
76
221
  catch (err) {
222
+ const metadata = getSyncFailureMetadata(err);
223
+ const classified = classifySyncFailure({
224
+ error: err,
225
+ fileId: dataPoint.id,
226
+ syncRunId,
227
+ stage: metadata.stage,
228
+ scope: metadata.scope ?? dataPoint.scope,
229
+ payloadKind: metadata.payloadKind,
230
+ encryptedSizeBytes: metadata.encryptedSizeBytes,
231
+ });
232
+ options.retryMemory?.recordFailure(retryKey, classified.issue.retryable);
233
+ if (!classified.issue.retryable) {
234
+ logger.warn({
235
+ dataPointId: dataPoint.id,
236
+ scope: classified.issue.scope,
237
+ stage: classified.issue.stage,
238
+ payloadKind: classified.issue.payloadKind,
239
+ encryptedSizeBytes: classified.issue.encryptedSizeBytes,
240
+ errorClass: classified.issue.errorClass,
241
+ message: classified.issue.message,
242
+ }, "Quarantined corrupt synced data point");
243
+ continue;
244
+ }
77
245
  logger.error({
78
- fileId: file.fileId,
79
- schemaId: file.schemaId,
246
+ dataPointId: dataPoint.id,
247
+ scope: dataPoint.scope,
80
248
  error: err.message,
81
- }, "Failed to download file");
249
+ }, "Failed to download data point");
250
+ failed = true;
82
251
  }
83
252
  }
84
- // 4. Advance cursor if there are new records
85
- if (nextCursor !== null) {
253
+ // 4. Advance cursor only when every record in the page was handled.
254
+ if (nextCursor !== null && !failed) {
86
255
  await cursor.write(nextCursor);
87
256
  }
257
+ else if (failed) {
258
+ logger.warn({ nextCursor }, "Download cursor not advanced because one or more data points failed");
259
+ }
88
260
  return results;
89
261
  }
262
+ export async function repairLocalMissingBlockSidecars(deps) {
263
+ const { storage, logger, diagnostics } = deps;
264
+ if (!storage.writeBlockManifest || !storage.hasScopeBlocks) {
265
+ return { repaired: 0, missingEnvelopeEntries: 0 };
266
+ }
267
+ let repaired = 0;
268
+ let missingEnvelopeEntries = 0;
269
+ let offset = 0;
270
+ const limit = 100;
271
+ while (true) {
272
+ const page = storage.listScopes({ limit, offset });
273
+ let deletedEntryInPage = false;
274
+ for (const scopeSummary of page.scopes) {
275
+ const entry = storage.findEntry({
276
+ scope: scopeSummary.scope,
277
+ at: scopeSummary.latestCollectedAt,
278
+ });
279
+ if (!entry)
280
+ continue;
281
+ const repairResult = await repairMissingBlockSidecars(storage, logger, {
282
+ dataPointId: entry.dataPointId ?? entry.path,
283
+ schemaId: entry.schemaId,
284
+ }, entry, diagnostics);
285
+ if (repairResult === "repaired")
286
+ repaired += 1;
287
+ if (repairResult === "missing-envelope") {
288
+ missingEnvelopeEntries += 1;
289
+ deletedEntryInPage = true;
290
+ }
291
+ }
292
+ if (!deletedEntryInPage) {
293
+ offset += page.scopes.length;
294
+ }
295
+ if (offset >= page.total || page.scopes.length === 0)
296
+ break;
297
+ }
298
+ if (repaired > 0) {
299
+ logger.info({ repaired }, "Repaired missing bounded block sidecars for local indexed data");
300
+ }
301
+ if (missingEnvelopeEntries > 0) {
302
+ logger.warn({ missingEnvelopeEntries }, "Removed stale local index entries missing local envelopes");
303
+ }
304
+ return { repaired, missingEnvelopeEntries };
305
+ }
306
+ function createSyncRunId() {
307
+ return typeof crypto !== "undefined" &&
308
+ typeof crypto.randomUUID === "function"
309
+ ? crypto.randomUUID()
310
+ : `download-${Date.now().toString(36)}`;
311
+ }
312
+ function uint8ToHex(bytes) {
313
+ return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
314
+ }
315
+ function withSyncFailureMetadata(error, metadata) {
316
+ if (error instanceof Error) {
317
+ Object.assign(error, { syncFailureMetadata: metadata });
318
+ return error;
319
+ }
320
+ return { error, syncFailureMetadata: metadata };
321
+ }
322
+ function getSyncFailureMetadata(error) {
323
+ if (typeof error !== "object" || error === null)
324
+ return {};
325
+ const metadata = error
326
+ .syncFailureMetadata;
327
+ if (typeof metadata !== "object" || metadata === null)
328
+ return {};
329
+ return metadata;
330
+ }
331
+ async function writeBlockSidecars(storage, envelope, logger, ctx, relativePath, diagnostics) {
332
+ if (!storage.writeBlockManifest)
333
+ return;
334
+ diagnostics?.onManifestBuildStart(ctx.dataPointId, envelope.scope);
335
+ try {
336
+ const built = await buildDataBlocksAsync({
337
+ scope: envelope.scope,
338
+ collectedAt: envelope.collectedAt,
339
+ schemaId: ctx.schemaId ?? undefined,
340
+ content: envelope,
341
+ });
342
+ await storage.writeBlockManifest(envelope.scope, envelope.collectedAt, built.manifest, built.blocks);
343
+ diagnostics?.onManifestBuildEnd(ctx.dataPointId, envelope.scope);
344
+ }
345
+ catch (error) {
346
+ const classified = classifySyncFailure({
347
+ error,
348
+ fileId: ctx.dataPointId,
349
+ syncRunId: "download",
350
+ stage: "block_build",
351
+ schemaId: ctx.schemaId ?? undefined,
352
+ scope: envelope.scope,
353
+ });
354
+ diagnostics?.onManifestBuildError(ctx.dataPointId, envelope.scope, classified.issue.message);
355
+ logger.warn({
356
+ dataPointId: ctx.dataPointId,
357
+ scope: envelope.scope,
358
+ collectedAt: envelope.collectedAt,
359
+ path: relativePath,
360
+ stage: classified.issue.stage,
361
+ errorClass: classified.issue.errorClass,
362
+ message: classified.issue.message,
363
+ }, "Bounded block sidecar write failed after raw envelope write");
364
+ }
365
+ }
366
+ async function repairMissingBlockSidecars(storage, logger, ctx, entry, diagnostics) {
367
+ if (!storage.writeBlockManifest || !storage.hasScopeBlocks) {
368
+ return "not-repaired";
369
+ }
370
+ let hasBlocks = false;
371
+ try {
372
+ hasBlocks = await storage.hasScopeBlocks(entry.scope, entry.collectedAt);
373
+ }
374
+ catch (error) {
375
+ logger.warn({
376
+ dataPointId: ctx.dataPointId,
377
+ scope: entry.scope,
378
+ collectedAt: entry.collectedAt,
379
+ error: error.message,
380
+ }, "Bounded block sidecar repair skipped after readiness check failed");
381
+ return "not-repaired";
382
+ }
383
+ if (hasBlocks)
384
+ return "already-ready";
385
+ diagnostics?.onRepair(entry.scope, "indexed entry missing block manifest; rebuilding from local envelope");
386
+ let envelope;
387
+ try {
388
+ envelope = await storage.readEnvelope(entry.scope, entry.collectedAt);
389
+ }
390
+ catch (error) {
391
+ logger.warn({
392
+ dataPointId: ctx.dataPointId,
393
+ scope: entry.scope,
394
+ collectedAt: entry.collectedAt,
395
+ error: error.message,
396
+ }, "Bounded block sidecar repair skipped because local envelope is unavailable");
397
+ // Remove the stale index entry whose payload is gone. We can only target
398
+ // it by gateway fileId; DataPoint-only entries (fileId === null) are left
399
+ // in place (no path-keyed delete on the port) and self-heal on re-download.
400
+ if (entry.fileId) {
401
+ diagnostics?.onRepair(entry.scope, "index exists without local payload; removing stale local index entry");
402
+ const removed = await storage.deleteByFileId(entry.fileId);
403
+ logger.warn({
404
+ dataPointId: ctx.dataPointId,
405
+ scope: entry.scope,
406
+ collectedAt: entry.collectedAt,
407
+ removed,
408
+ }, "Removed stale local index entry missing local envelope");
409
+ return removed ? "missing-envelope" : "not-repaired";
410
+ }
411
+ return "not-repaired";
412
+ }
413
+ await writeBlockSidecars(storage, envelope, logger, {
414
+ dataPointId: ctx.dataPointId,
415
+ schemaId: entry.schemaId ?? ctx.schemaId,
416
+ }, entry.path, diagnostics);
417
+ try {
418
+ return (await storage.hasScopeBlocks(entry.scope, entry.collectedAt))
419
+ ? "repaired"
420
+ : "not-repaired";
421
+ }
422
+ catch (error) {
423
+ logger.warn({
424
+ dataPointId: ctx.dataPointId,
425
+ scope: entry.scope,
426
+ collectedAt: entry.collectedAt,
427
+ error: error.message,
428
+ }, "Bounded block sidecar repair completed but readiness could not be verified");
429
+ return "not-repaired";
430
+ }
431
+ }
90
432
  //# sourceMappingURL=download.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/sync/workers/download.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/sync/workers/download.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,11 @@
1
- import type { IndexManager } from "../../storage/index/manager.js";
2
- import type { HierarchyManagerOptions } from "../../storage/hierarchy/index.js";
3
1
  import type { StorageAdapter } from "../../storage/adapters/interface.js";
4
- import type { GatewayClient } from "../../gateway/client.js";
2
+ import { type GatewayClient } from "@opendatalabs/vana-sdk/browser";
5
3
  import type { ServerSigner } from "../../signing/signer.js";
6
- import type { Logger } from "pino";
4
+ import type { Logger } from "../../logger/index.js";
7
5
  import type { IndexEntry } from "../../storage/index/types.js";
6
+ import type { DataStoragePort } from "../../ports/index.js";
8
7
  export interface UploadWorkerDeps {
9
- indexManager: IndexManager;
10
- hierarchyOptions: HierarchyManagerOptions;
8
+ storage: DataStoragePort;
11
9
  storageAdapter: StorageAdapter;
12
10
  gateway: GatewayClient;
13
11
  signer: ServerSigner;
@@ -17,27 +15,40 @@ export interface UploadWorkerDeps {
17
15
  }
18
16
  export interface UploadResult {
19
17
  path: string;
20
- fileId: string;
18
+ /** Storage URL the encrypted blob was written to (version-keyed). */
21
19
  url: string;
20
+ /**
21
+ * DPv2 data-point id assigned by the gateway. Present whenever this run
22
+ * either freshly registered the data point or found one already attached
23
+ * to the index entry from a prior run.
24
+ */
25
+ dataPointId: string;
26
+ }
27
+ export interface UploadAllOptions {
28
+ batchSize?: number;
29
+ onError?: (entry: IndexEntry, error: Error) => void;
22
30
  }
23
31
  /**
24
32
  * Upload a single unsynced index entry:
25
33
  * 1. Read local data file from disk
26
- * 2. Look up schema for the scopeget schemaId
27
- * 3. Derive scope key from master keyhex-encode as OpenPGP password
28
- * 4. Encrypt with OpenPGP password-based encryption → binary
29
- * 5. Upload OpenPGP binary to storage backend
30
- * 6. Sign file registration via EIP-712
31
- * 7. Register file record on-chain via Gateway (with schemaId)
32
- * 8. Update local index with fileId
34
+ * 2. Derive scope key from master keyhex-encode as OpenPGP password
35
+ * 3. Encrypt envelope with OpenPGP password-based encryptionciphertext
36
+ * 4. Compute dataHash / metadataHash commitments (scope-addressed, no schema)
37
+ * 5. Upload ciphertext to storage backend, version-keyed `{scope}/{version}`
38
+ * 6. Register DPv2 data point on-chain (AddData) if not already
39
+ * 7. Persist the gateway-assigned dataPointId (marks the entry synced)
33
40
  */
34
41
  export declare function uploadOne(deps: UploadWorkerDeps, entry: IndexEntry): Promise<UploadResult>;
35
42
  /**
36
- * Process all unsynced entries (fileId === null).
43
+ * Process all unsynced entries (dataPointId === null).
37
44
  * Processes sequentially to avoid overwhelming storage backend.
38
45
  * Returns array of results (skips failures, logs errors).
39
46
  */
40
- export declare function uploadAll(deps: UploadWorkerDeps, options?: {
41
- batchSize?: number;
42
- }): Promise<UploadResult[]>;
47
+ export declare function uploadAll(deps: UploadWorkerDeps, options?: UploadAllOptions): Promise<UploadResult[]>;
48
+ /**
49
+ * Deterministic DPv2 data-point id — `keccak256(abi.encode(owner, scope))`,
50
+ * the same primary key DataRegistryV2 and the gateway use. Lets the upload
51
+ * worker look up the registry's live row for a scope without a list call.
52
+ */
53
+ export declare function computeDataPointId(ownerAddress: string, scope: string): `0x${string}`;
43
54
  //# sourceMappingURL=upload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/sync/workers/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAK/D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,YAAY,CAAC,CAoEvB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC,CAkBzB"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/sync/workers/upload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,YAAY,CAAC,CAwKvB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,YAAY,EAAE,CAAC,CAoBzB;AAeD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,KAAK,MAAM,EAAE,CAaf"}