@aigne/afs-did-space 1.12.0-beta.5

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 (510) hide show
  1. package/LICENSE.md +26 -0
  2. package/README.md +129 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
  5. package/dist/_virtual/rolldown_runtime.cjs +29 -0
  6. package/dist/afs-metadata-context.cjs +20 -0
  7. package/dist/afs-metadata-context.d.cts +21 -0
  8. package/dist/afs-metadata-context.d.cts.map +1 -0
  9. package/dist/afs-metadata-context.d.mts +21 -0
  10. package/dist/afs-metadata-context.d.mts.map +1 -0
  11. package/dist/afs-metadata-context.mjs +18 -0
  12. package/dist/afs-metadata-context.mjs.map +1 -0
  13. package/dist/blocklet-hook.cjs +180 -0
  14. package/dist/blocklet-hook.d.cts +29 -0
  15. package/dist/blocklet-hook.d.cts.map +1 -0
  16. package/dist/blocklet-hook.d.mts +29 -0
  17. package/dist/blocklet-hook.d.mts.map +1 -0
  18. package/dist/blocklet-hook.mjs +178 -0
  19. package/dist/blocklet-hook.mjs.map +1 -0
  20. package/dist/changelog-schema.cjs +603 -0
  21. package/dist/changelog-schema.d.cts +395 -0
  22. package/dist/changelog-schema.d.cts.map +1 -0
  23. package/dist/changelog-schema.d.mts +395 -0
  24. package/dist/changelog-schema.d.mts.map +1 -0
  25. package/dist/changelog-schema.mjs +570 -0
  26. package/dist/changelog-schema.mjs.map +1 -0
  27. package/dist/changelog-write.cjs +80 -0
  28. package/dist/changelog-write.d.cts +70 -0
  29. package/dist/changelog-write.d.cts.map +1 -0
  30. package/dist/changelog-write.d.mts +70 -0
  31. package/dist/changelog-write.d.mts.map +1 -0
  32. package/dist/changelog-write.mjs +77 -0
  33. package/dist/changelog-write.mjs.map +1 -0
  34. package/dist/cid-byte-cache.cjs +126 -0
  35. package/dist/cid-byte-cache.d.cts +46 -0
  36. package/dist/cid-byte-cache.d.cts.map +1 -0
  37. package/dist/cid-byte-cache.d.mts +47 -0
  38. package/dist/cid-byte-cache.d.mts.map +1 -0
  39. package/dist/cid-byte-cache.mjs +125 -0
  40. package/dist/cid-byte-cache.mjs.map +1 -0
  41. package/dist/cid.cjs +68 -0
  42. package/dist/cid.d.cts +22 -0
  43. package/dist/cid.d.cts.map +1 -0
  44. package/dist/cid.d.mts +22 -0
  45. package/dist/cid.d.mts.map +1 -0
  46. package/dist/cid.mjs +65 -0
  47. package/dist/cid.mjs.map +1 -0
  48. package/dist/client.cjs +221 -0
  49. package/dist/client.d.cts +72 -0
  50. package/dist/client.d.cts.map +1 -0
  51. package/dist/client.d.mts +72 -0
  52. package/dist/client.d.mts.map +1 -0
  53. package/dist/client.mjs +220 -0
  54. package/dist/client.mjs.map +1 -0
  55. package/dist/cloudflare.cjs +510 -0
  56. package/dist/cloudflare.d.cts +307 -0
  57. package/dist/cloudflare.d.cts.map +1 -0
  58. package/dist/cloudflare.d.mts +308 -0
  59. package/dist/cloudflare.d.mts.map +1 -0
  60. package/dist/cloudflare.mjs +507 -0
  61. package/dist/cloudflare.mjs.map +1 -0
  62. package/dist/ctime-backfill.cjs +272 -0
  63. package/dist/ctime-backfill.d.cts +169 -0
  64. package/dist/ctime-backfill.d.cts.map +1 -0
  65. package/dist/ctime-backfill.d.mts +169 -0
  66. package/dist/ctime-backfill.d.mts.map +1 -0
  67. package/dist/ctime-backfill.mjs +267 -0
  68. package/dist/ctime-backfill.mjs.map +1 -0
  69. package/dist/d1-gc-queue.cjs +80 -0
  70. package/dist/d1-gc-queue.d.cts +59 -0
  71. package/dist/d1-gc-queue.d.cts.map +1 -0
  72. package/dist/d1-gc-queue.d.mts +59 -0
  73. package/dist/d1-gc-queue.d.mts.map +1 -0
  74. package/dist/d1-gc-queue.mjs +81 -0
  75. package/dist/d1-gc-queue.mjs.map +1 -0
  76. package/dist/d1-resolve-store.cjs +189 -0
  77. package/dist/d1-resolve-store.d.cts +93 -0
  78. package/dist/d1-resolve-store.d.cts.map +1 -0
  79. package/dist/d1-resolve-store.d.mts +93 -0
  80. package/dist/d1-resolve-store.d.mts.map +1 -0
  81. package/dist/d1-resolve-store.mjs +190 -0
  82. package/dist/d1-resolve-store.mjs.map +1 -0
  83. package/dist/d1-schema.cjs +361 -0
  84. package/dist/d1-schema.d.cts +237 -0
  85. package/dist/d1-schema.d.cts.map +1 -0
  86. package/dist/d1-schema.d.mts +237 -0
  87. package/dist/d1-schema.d.mts.map +1 -0
  88. package/dist/d1-schema.mjs +341 -0
  89. package/dist/d1-schema.mjs.map +1 -0
  90. package/dist/d1-share-store.cjs +0 -0
  91. package/dist/d1-share-store.d.cts +53 -0
  92. package/dist/d1-share-store.d.cts.map +1 -0
  93. package/dist/d1-share-store.d.mts +53 -0
  94. package/dist/d1-share-store.d.mts.map +1 -0
  95. package/dist/d1-share-store.mjs +0 -0
  96. package/dist/d1-share-store.mjs.map +1 -0
  97. package/dist/d1-tree-index.cjs +1098 -0
  98. package/dist/d1-tree-index.d.cts +203 -0
  99. package/dist/d1-tree-index.d.cts.map +1 -0
  100. package/dist/d1-tree-index.d.mts +203 -0
  101. package/dist/d1-tree-index.d.mts.map +1 -0
  102. package/dist/d1-tree-index.mjs +1094 -0
  103. package/dist/d1-tree-index.mjs.map +1 -0
  104. package/dist/data-backend.cjs +147 -0
  105. package/dist/data-backend.d.cts +30 -0
  106. package/dist/data-backend.d.cts.map +1 -0
  107. package/dist/data-backend.d.mts +30 -0
  108. package/dist/data-backend.d.mts.map +1 -0
  109. package/dist/data-backend.mjs +148 -0
  110. package/dist/data-backend.mjs.map +1 -0
  111. package/dist/dedup-backfill.cjs +278 -0
  112. package/dist/dedup-backfill.d.cts +165 -0
  113. package/dist/dedup-backfill.d.cts.map +1 -0
  114. package/dist/dedup-backfill.d.mts +165 -0
  115. package/dist/dedup-backfill.d.mts.map +1 -0
  116. package/dist/dedup-backfill.mjs +273 -0
  117. package/dist/dedup-backfill.mjs.map +1 -0
  118. package/dist/did-space-like.d.cts +2 -0
  119. package/dist/did-space-like.d.mts +2 -0
  120. package/dist/did-utils.cjs +44 -0
  121. package/dist/did-utils.d.cts +25 -0
  122. package/dist/did-utils.d.cts.map +1 -0
  123. package/dist/did-utils.d.mts +25 -0
  124. package/dist/did-utils.d.mts.map +1 -0
  125. package/dist/did-utils.mjs +43 -0
  126. package/dist/did-utils.mjs.map +1 -0
  127. package/dist/dirty-path-queue.cjs +31 -0
  128. package/dist/dirty-path-queue.d.cts +104 -0
  129. package/dist/dirty-path-queue.d.cts.map +1 -0
  130. package/dist/dirty-path-queue.d.mts +104 -0
  131. package/dist/dirty-path-queue.d.mts.map +1 -0
  132. package/dist/dirty-path-queue.mjs +31 -0
  133. package/dist/dirty-path-queue.mjs.map +1 -0
  134. package/dist/dirty-path-schema.cjs +142 -0
  135. package/dist/dirty-path-schema.d.cts +90 -0
  136. package/dist/dirty-path-schema.d.cts.map +1 -0
  137. package/dist/dirty-path-schema.d.mts +90 -0
  138. package/dist/dirty-path-schema.d.mts.map +1 -0
  139. package/dist/dirty-path-schema.mjs +136 -0
  140. package/dist/dirty-path-schema.mjs.map +1 -0
  141. package/dist/download-actions.cjs +43 -0
  142. package/dist/download-actions.mjs +40 -0
  143. package/dist/download-actions.mjs.map +1 -0
  144. package/dist/fs-object-store.cjs +153 -0
  145. package/dist/fs-object-store.d.cts +21 -0
  146. package/dist/fs-object-store.d.cts.map +1 -0
  147. package/dist/fs-object-store.d.mts +22 -0
  148. package/dist/fs-object-store.d.mts.map +1 -0
  149. package/dist/fs-object-store.mjs +153 -0
  150. package/dist/fs-object-store.mjs.map +1 -0
  151. package/dist/gc-queue.d.cts +43 -0
  152. package/dist/gc-queue.d.cts.map +1 -0
  153. package/dist/gc-queue.d.mts +43 -0
  154. package/dist/gc-queue.d.mts.map +1 -0
  155. package/dist/index.cjs +2712 -0
  156. package/dist/index.d.cts +504 -0
  157. package/dist/index.d.cts.map +1 -0
  158. package/dist/index.d.mts +505 -0
  159. package/dist/index.d.mts.map +1 -0
  160. package/dist/index.mjs +2537 -0
  161. package/dist/index.mjs.map +1 -0
  162. package/dist/inline-content-migration.cjs +212 -0
  163. package/dist/inline-content-migration.d.cts +110 -0
  164. package/dist/inline-content-migration.d.cts.map +1 -0
  165. package/dist/inline-content-migration.d.mts +111 -0
  166. package/dist/inline-content-migration.d.mts.map +1 -0
  167. package/dist/inline-content-migration.mjs +207 -0
  168. package/dist/inline-content-migration.mjs.map +1 -0
  169. package/dist/inline-content.cjs +145 -0
  170. package/dist/inline-content.d.cts +98 -0
  171. package/dist/inline-content.d.cts.map +1 -0
  172. package/dist/inline-content.d.mts +98 -0
  173. package/dist/inline-content.d.mts.map +1 -0
  174. package/dist/inline-content.mjs +137 -0
  175. package/dist/inline-content.mjs.map +1 -0
  176. package/dist/local-changelog.cjs +241 -0
  177. package/dist/local-changelog.d.cts +119 -0
  178. package/dist/local-changelog.d.cts.map +1 -0
  179. package/dist/local-changelog.d.mts +119 -0
  180. package/dist/local-changelog.d.mts.map +1 -0
  181. package/dist/local-changelog.mjs +240 -0
  182. package/dist/local-changelog.mjs.map +1 -0
  183. package/dist/local.cjs +435 -0
  184. package/dist/local.d.cts +254 -0
  185. package/dist/local.d.cts.map +1 -0
  186. package/dist/local.d.mts +254 -0
  187. package/dist/local.d.mts.map +1 -0
  188. package/dist/local.mjs +427 -0
  189. package/dist/local.mjs.map +1 -0
  190. package/dist/memory-gc-queue.cjs +36 -0
  191. package/dist/memory-gc-queue.d.cts +22 -0
  192. package/dist/memory-gc-queue.d.cts.map +1 -0
  193. package/dist/memory-gc-queue.d.mts +22 -0
  194. package/dist/memory-gc-queue.d.mts.map +1 -0
  195. package/dist/memory-gc-queue.mjs +36 -0
  196. package/dist/memory-gc-queue.mjs.map +1 -0
  197. package/dist/memory-tree-index.cjs +734 -0
  198. package/dist/memory-tree-index.d.cts +159 -0
  199. package/dist/memory-tree-index.d.cts.map +1 -0
  200. package/dist/memory-tree-index.d.mts +159 -0
  201. package/dist/memory-tree-index.d.mts.map +1 -0
  202. package/dist/memory-tree-index.mjs +735 -0
  203. package/dist/memory-tree-index.mjs.map +1 -0
  204. package/dist/metadata-db.cjs +562 -0
  205. package/dist/metadata-db.d.cts +102 -0
  206. package/dist/metadata-db.d.cts.map +1 -0
  207. package/dist/metadata-db.d.mts +102 -0
  208. package/dist/metadata-db.d.mts.map +1 -0
  209. package/dist/metadata-db.mjs +562 -0
  210. package/dist/metadata-db.mjs.map +1 -0
  211. package/dist/mime-utils.cjs +2 -0
  212. package/dist/mime-utils.d.cts +2 -0
  213. package/dist/mime-utils.d.mts +2 -0
  214. package/dist/mime-utils.mjs +3 -0
  215. package/dist/object-key.cjs +41 -0
  216. package/dist/object-key.d.cts +25 -0
  217. package/dist/object-key.d.cts.map +1 -0
  218. package/dist/object-key.d.mts +25 -0
  219. package/dist/object-key.d.mts.map +1 -0
  220. package/dist/object-key.mjs +40 -0
  221. package/dist/object-key.mjs.map +1 -0
  222. package/dist/packages/session/dist/index.cjs +788 -0
  223. package/dist/packages/session/dist/index.mjs +782 -0
  224. package/dist/packages/session/dist/index.mjs.map +1 -0
  225. package/dist/platform/r2/dist/types.d.cts +49 -0
  226. package/dist/platform/r2/dist/types.d.cts.map +1 -0
  227. package/dist/prefix-range.cjs +33 -0
  228. package/dist/prefix-range.d.cts +29 -0
  229. package/dist/prefix-range.d.cts.map +1 -0
  230. package/dist/prefix-range.d.mts +29 -0
  231. package/dist/prefix-range.d.mts.map +1 -0
  232. package/dist/prefix-range.mjs +33 -0
  233. package/dist/prefix-range.mjs.map +1 -0
  234. package/dist/prefixed-tree-index.cjs +238 -0
  235. package/dist/prefixed-tree-index.d.cts +85 -0
  236. package/dist/prefixed-tree-index.d.cts.map +1 -0
  237. package/dist/prefixed-tree-index.d.mts +85 -0
  238. package/dist/prefixed-tree-index.d.mts.map +1 -0
  239. package/dist/prefixed-tree-index.mjs +239 -0
  240. package/dist/prefixed-tree-index.mjs.map +1 -0
  241. package/dist/presign-signer.cjs +7 -0
  242. package/dist/presign-signer.d.cts +99 -0
  243. package/dist/presign-signer.d.cts.map +1 -0
  244. package/dist/presign-signer.d.mts +99 -0
  245. package/dist/presign-signer.d.mts.map +1 -0
  246. package/dist/presign-signer.mjs +7 -0
  247. package/dist/presign-signer.mjs.map +1 -0
  248. package/dist/providers/platform/r2/dist/index.d.mts +3 -0
  249. package/dist/providers/platform/r2/dist/types.d.mts +49 -0
  250. package/dist/providers/platform/r2/dist/types.d.mts.map +1 -0
  251. package/dist/reconcile.cjs +184 -0
  252. package/dist/reconcile.d.cts +26 -0
  253. package/dist/reconcile.d.cts.map +1 -0
  254. package/dist/reconcile.d.mts +26 -0
  255. package/dist/reconcile.d.mts.map +1 -0
  256. package/dist/reconcile.mjs +184 -0
  257. package/dist/reconcile.mjs.map +1 -0
  258. package/dist/reference-check.cjs +49 -0
  259. package/dist/reference-check.d.cts +10 -0
  260. package/dist/reference-check.d.cts.map +1 -0
  261. package/dist/reference-check.d.mts +10 -0
  262. package/dist/reference-check.d.mts.map +1 -0
  263. package/dist/reference-check.mjs +48 -0
  264. package/dist/reference-check.mjs.map +1 -0
  265. package/dist/remote-afs.cjs +681 -0
  266. package/dist/remote-afs.d.cts +236 -0
  267. package/dist/remote-afs.d.cts.map +1 -0
  268. package/dist/remote-afs.d.mts +236 -0
  269. package/dist/remote-afs.d.mts.map +1 -0
  270. package/dist/remote-afs.mjs +676 -0
  271. package/dist/remote-afs.mjs.map +1 -0
  272. package/dist/rename-guard.cjs +18 -0
  273. package/dist/rename-guard.mjs +18 -0
  274. package/dist/rename-guard.mjs.map +1 -0
  275. package/dist/resolve.cjs +260 -0
  276. package/dist/resolve.d.cts +113 -0
  277. package/dist/resolve.d.cts.map +1 -0
  278. package/dist/resolve.d.mts +113 -0
  279. package/dist/resolve.d.mts.map +1 -0
  280. package/dist/resolve.mjs +260 -0
  281. package/dist/resolve.mjs.map +1 -0
  282. package/dist/rsync-content.cjs +33 -0
  283. package/dist/rsync-content.mjs +33 -0
  284. package/dist/rsync-content.mjs.map +1 -0
  285. package/dist/rsync.cjs +400 -0
  286. package/dist/rsync.d.cts +157 -0
  287. package/dist/rsync.d.cts.map +1 -0
  288. package/dist/rsync.d.mts +157 -0
  289. package/dist/rsync.d.mts.map +1 -0
  290. package/dist/rsync.mjs +397 -0
  291. package/dist/rsync.mjs.map +1 -0
  292. package/dist/run-gc.cjs +57 -0
  293. package/dist/run-gc.d.cts +40 -0
  294. package/dist/run-gc.d.cts.map +1 -0
  295. package/dist/run-gc.d.mts +41 -0
  296. package/dist/run-gc.d.mts.map +1 -0
  297. package/dist/run-gc.mjs +57 -0
  298. package/dist/run-gc.mjs.map +1 -0
  299. package/dist/scope-id.cjs +70 -0
  300. package/dist/scope-id.d.cts +35 -0
  301. package/dist/scope-id.d.cts.map +1 -0
  302. package/dist/scope-id.d.mts +35 -0
  303. package/dist/scope-id.d.mts.map +1 -0
  304. package/dist/scope-id.mjs +68 -0
  305. package/dist/scope-id.mjs.map +1 -0
  306. package/dist/scope-migration-node.cjs +172 -0
  307. package/dist/scope-migration-node.d.cts +44 -0
  308. package/dist/scope-migration-node.d.cts.map +1 -0
  309. package/dist/scope-migration-node.d.mts +44 -0
  310. package/dist/scope-migration-node.d.mts.map +1 -0
  311. package/dist/scope-migration-node.mjs +171 -0
  312. package/dist/scope-migration-node.mjs.map +1 -0
  313. package/dist/scope-migration.cjs +155 -0
  314. package/dist/scope-migration.d.cts +65 -0
  315. package/dist/scope-migration.d.cts.map +1 -0
  316. package/dist/scope-migration.d.mts +65 -0
  317. package/dist/scope-migration.d.mts.map +1 -0
  318. package/dist/scope-migration.mjs +154 -0
  319. package/dist/scope-migration.mjs.map +1 -0
  320. package/dist/share-declaration.cjs +225 -0
  321. package/dist/share-declaration.d.cts +30 -0
  322. package/dist/share-declaration.d.cts.map +1 -0
  323. package/dist/share-declaration.d.mts +32 -0
  324. package/dist/share-declaration.d.mts.map +1 -0
  325. package/dist/share-declaration.mjs +221 -0
  326. package/dist/share-declaration.mjs.map +1 -0
  327. package/dist/share-hook.cjs +63 -0
  328. package/dist/share-hook.mjs +62 -0
  329. package/dist/share-hook.mjs.map +1 -0
  330. package/dist/share-resolve.cjs +176 -0
  331. package/dist/share-resolve.d.cts +36 -0
  332. package/dist/share-resolve.d.cts.map +1 -0
  333. package/dist/share-resolve.d.mts +36 -0
  334. package/dist/share-resolve.d.mts.map +1 -0
  335. package/dist/share-resolve.mjs +177 -0
  336. package/dist/share-resolve.mjs.map +1 -0
  337. package/dist/share-serve.cjs +145 -0
  338. package/dist/share-serve.d.cts +30 -0
  339. package/dist/share-serve.d.cts.map +1 -0
  340. package/dist/share-serve.d.mts +30 -0
  341. package/dist/share-serve.d.mts.map +1 -0
  342. package/dist/share-serve.mjs +144 -0
  343. package/dist/share-serve.mjs.map +1 -0
  344. package/dist/share-store.cjs +25 -0
  345. package/dist/share-store.d.cts +65 -0
  346. package/dist/share-store.d.cts.map +1 -0
  347. package/dist/share-store.d.mts +65 -0
  348. package/dist/share-store.d.mts.map +1 -0
  349. package/dist/share-store.mjs +25 -0
  350. package/dist/share-store.mjs.map +1 -0
  351. package/dist/share-virtual-path.cjs +102 -0
  352. package/dist/share-virtual-path.mjs +101 -0
  353. package/dist/share-virtual-path.mjs.map +1 -0
  354. package/dist/space-resolver.cjs +54 -0
  355. package/dist/space-resolver.d.cts +34 -0
  356. package/dist/space-resolver.d.cts.map +1 -0
  357. package/dist/space-resolver.d.mts +34 -0
  358. package/dist/space-resolver.d.mts.map +1 -0
  359. package/dist/space-resolver.mjs +55 -0
  360. package/dist/space-resolver.mjs.map +1 -0
  361. package/dist/sqlite-gc-queue.cjs +51 -0
  362. package/dist/sqlite-gc-queue.d.cts +22 -0
  363. package/dist/sqlite-gc-queue.d.cts.map +1 -0
  364. package/dist/sqlite-gc-queue.d.mts +22 -0
  365. package/dist/sqlite-gc-queue.d.mts.map +1 -0
  366. package/dist/sqlite-gc-queue.mjs +52 -0
  367. package/dist/sqlite-gc-queue.mjs.map +1 -0
  368. package/dist/sqlite-resolve-store.cjs +163 -0
  369. package/dist/sqlite-resolve-store.d.cts +50 -0
  370. package/dist/sqlite-resolve-store.d.cts.map +1 -0
  371. package/dist/sqlite-resolve-store.d.mts +50 -0
  372. package/dist/sqlite-resolve-store.d.mts.map +1 -0
  373. package/dist/sqlite-resolve-store.mjs +164 -0
  374. package/dist/sqlite-resolve-store.mjs.map +1 -0
  375. package/dist/sqlite-share-store.cjs +157 -0
  376. package/dist/sqlite-share-store.d.cts +31 -0
  377. package/dist/sqlite-share-store.d.cts.map +1 -0
  378. package/dist/sqlite-share-store.d.mts +31 -0
  379. package/dist/sqlite-share-store.d.mts.map +1 -0
  380. package/dist/sqlite-share-store.mjs +157 -0
  381. package/dist/sqlite-share-store.mjs.map +1 -0
  382. package/dist/sqlite-tree-index.cjs +901 -0
  383. package/dist/sqlite-tree-index.d.cts +107 -0
  384. package/dist/sqlite-tree-index.d.cts.map +1 -0
  385. package/dist/sqlite-tree-index.d.mts +107 -0
  386. package/dist/sqlite-tree-index.d.mts.map +1 -0
  387. package/dist/sqlite-tree-index.mjs +902 -0
  388. package/dist/sqlite-tree-index.mjs.map +1 -0
  389. package/dist/sync-engine.cjs +1324 -0
  390. package/dist/sync-engine.d.cts +473 -0
  391. package/dist/sync-engine.d.cts.map +1 -0
  392. package/dist/sync-engine.d.mts +473 -0
  393. package/dist/sync-engine.d.mts.map +1 -0
  394. package/dist/sync-engine.mjs +1315 -0
  395. package/dist/sync-engine.mjs.map +1 -0
  396. package/dist/sync-state.cjs +303 -0
  397. package/dist/sync-state.d.cts +224 -0
  398. package/dist/sync-state.d.cts.map +1 -0
  399. package/dist/sync-state.d.mts +224 -0
  400. package/dist/sync-state.d.mts.map +1 -0
  401. package/dist/sync-state.mjs +297 -0
  402. package/dist/sync-state.mjs.map +1 -0
  403. package/dist/timestamp.cjs +92 -0
  404. package/dist/timestamp.mjs +91 -0
  405. package/dist/timestamp.mjs.map +1 -0
  406. package/dist/transports/http.cjs +54 -0
  407. package/dist/transports/http.d.cts +26 -0
  408. package/dist/transports/http.d.cts.map +1 -0
  409. package/dist/transports/http.d.mts +26 -0
  410. package/dist/transports/http.d.mts.map +1 -0
  411. package/dist/transports/http.mjs +54 -0
  412. package/dist/transports/http.mjs.map +1 -0
  413. package/dist/transports/static.cjs +55 -0
  414. package/dist/transports/static.d.cts +28 -0
  415. package/dist/transports/static.d.cts.map +1 -0
  416. package/dist/transports/static.d.mts +28 -0
  417. package/dist/transports/static.d.mts.map +1 -0
  418. package/dist/transports/static.mjs +55 -0
  419. package/dist/transports/static.mjs.map +1 -0
  420. package/dist/transports/types.cjs +13 -0
  421. package/dist/transports/types.d.cts +72 -0
  422. package/dist/transports/types.d.cts.map +1 -0
  423. package/dist/transports/types.d.mts +72 -0
  424. package/dist/transports/types.d.mts.map +1 -0
  425. package/dist/transports/types.mjs +13 -0
  426. package/dist/transports/types.mjs.map +1 -0
  427. package/dist/transports/ws.cjs +207 -0
  428. package/dist/transports/ws.d.cts +47 -0
  429. package/dist/transports/ws.d.cts.map +1 -0
  430. package/dist/transports/ws.d.mts +47 -0
  431. package/dist/transports/ws.d.mts.map +1 -0
  432. package/dist/transports/ws.mjs +206 -0
  433. package/dist/transports/ws.mjs.map +1 -0
  434. package/dist/tree-index.cjs +333 -0
  435. package/dist/tree-index.d.cts +524 -0
  436. package/dist/tree-index.d.cts.map +1 -0
  437. package/dist/tree-index.d.mts +524 -0
  438. package/dist/tree-index.d.mts.map +1 -0
  439. package/dist/tree-index.mjs +322 -0
  440. package/dist/tree-index.mjs.map +1 -0
  441. package/dist/tree-query.cjs +655 -0
  442. package/dist/tree-query.d.cts +70 -0
  443. package/dist/tree-query.d.cts.map +1 -0
  444. package/dist/tree-query.d.mts +70 -0
  445. package/dist/tree-query.d.mts.map +1 -0
  446. package/dist/tree-query.mjs +648 -0
  447. package/dist/tree-query.mjs.map +1 -0
  448. package/dist/upload-actions.cjs +97 -0
  449. package/dist/upload-actions.d.cts +19 -0
  450. package/dist/upload-actions.d.cts.map +1 -0
  451. package/dist/upload-actions.d.mts +21 -0
  452. package/dist/upload-actions.d.mts.map +1 -0
  453. package/dist/upload-actions.mjs +90 -0
  454. package/dist/upload-actions.mjs.map +1 -0
  455. package/dist/upload-session-store.cjs +185 -0
  456. package/dist/upload-session-store.d.cts +99 -0
  457. package/dist/upload-session-store.d.cts.map +1 -0
  458. package/dist/upload-session-store.d.mts +99 -0
  459. package/dist/upload-session-store.d.mts.map +1 -0
  460. package/dist/upload-session-store.mjs +184 -0
  461. package/dist/upload-session-store.mjs.map +1 -0
  462. package/dist/url-normalize.cjs +61 -0
  463. package/dist/url-normalize.d.cts +33 -0
  464. package/dist/url-normalize.d.cts.map +1 -0
  465. package/dist/url-normalize.d.mts +33 -0
  466. package/dist/url-normalize.d.mts.map +1 -0
  467. package/dist/url-normalize.mjs +61 -0
  468. package/dist/url-normalize.mjs.map +1 -0
  469. package/dist/versioned-content-backends.cjs +155 -0
  470. package/dist/versioned-content-backends.d.cts +49 -0
  471. package/dist/versioned-content-backends.d.cts.map +1 -0
  472. package/dist/versioned-content-backends.d.mts +49 -0
  473. package/dist/versioned-content-backends.d.mts.map +1 -0
  474. package/dist/versioned-content-backends.mjs +154 -0
  475. package/dist/versioned-content-backends.mjs.map +1 -0
  476. package/dist/versioned-content-index.cjs +102 -0
  477. package/dist/versioned-content-index.d.cts +46 -0
  478. package/dist/versioned-content-index.d.cts.map +1 -0
  479. package/dist/versioned-content-index.d.mts +46 -0
  480. package/dist/versioned-content-index.d.mts.map +1 -0
  481. package/dist/versioned-content-index.mjs +103 -0
  482. package/dist/versioned-content-index.mjs.map +1 -0
  483. package/dist/versioned-content-store.cjs +121 -0
  484. package/dist/versioned-content-store.d.cts +90 -0
  485. package/dist/versioned-content-store.d.cts.map +1 -0
  486. package/dist/versioned-content-store.d.mts +90 -0
  487. package/dist/versioned-content-store.d.mts.map +1 -0
  488. package/dist/versioned-content-store.mjs +122 -0
  489. package/dist/versioned-content-store.mjs.map +1 -0
  490. package/dist/versioned-scope.cjs +39 -0
  491. package/dist/versioned-scope.d.cts +57 -0
  492. package/dist/versioned-scope.d.cts.map +1 -0
  493. package/dist/versioned-scope.d.mts +57 -0
  494. package/dist/versioned-scope.d.mts.map +1 -0
  495. package/dist/versioned-scope.mjs +37 -0
  496. package/dist/versioned-scope.mjs.map +1 -0
  497. package/migrations/0001_tree_entries.sql +17 -0
  498. package/migrations/0002_resolve_entries.sql +7 -0
  499. package/migrations/0003_entries_v2.sql +38 -0
  500. package/migrations/0004_gc_queue.sql +5 -0
  501. package/migrations/0006_resolve_enhance.sql +14 -0
  502. package/migrations/0007_resolve_created_at.sql +10 -0
  503. package/migrations/0008_changelog.sql +34 -0
  504. package/migrations/0009_device_sync_state.sql +29 -0
  505. package/migrations/0010_scope_meta.sql +33 -0
  506. package/migrations/0011_shares.sql +25 -0
  507. package/migrations/0012_scope_meta_file_count.sql +41 -0
  508. package/migrations/0013_scope_meta_total_bytes.sql +47 -0
  509. package/migrations/0014_rename_tables.sql +62 -0
  510. package/package.json +102 -0
@@ -0,0 +1,473 @@
1
+ import { ChangelogEntry } from "./tree-index.cjs";
2
+ import { LocalChangelog } from "./local-changelog.cjs";
3
+ import { CommitUploadEntryInput, DownloadGrant, PrepareDownloadEntryInput, PrepareDownloadResult, PrepareUploadEntryInput, PrepareUploadResult, RpcBatchResult, UploadGrant } from "./remote-afs.cjs";
4
+ import { SyncStateStore } from "./sync-state.cjs";
5
+ import { AFSBatchDeleteEntry, AFSBatchWriteEntry, AFSDeleteOptions, AFSDeleteResult, AFSListOptions, AFSListResult, AFSReadOptions, AFSReadResult, AFSWriteEntryPayload, AFSWriteOptions, AFSWriteResult } from "@aigne/afs";
6
+
7
+ //#region src/sync-engine.d.ts
8
+ /**
9
+ * Narrow AFS surface consumed by SyncEngine. Production wires this to a
10
+ * full `AFS` instance (which structurally satisfies the four methods);
11
+ * tests wire it to {@link InMemoryCloudProvider} so the engine never
12
+ * speaks to a real HTTP transport.
13
+ *
14
+ * Restricting the type to four methods keeps the test surface tractable
15
+ * (the AFS root has ~20 methods, most irrelevant to sync) and keeps the
16
+ * "this is the only I/O surface SyncEngine touches" contract visible
17
+ * at the type level.
18
+ */
19
+ interface SyncCloudAFS {
20
+ list(path: string, options?: AFSListOptions): Promise<AFSListResult>;
21
+ read(path: string, options?: AFSReadOptions): Promise<AFSReadResult>;
22
+ write(path: string, payload: AFSWriteEntryPayload, options?: AFSWriteOptions): Promise<AFSWriteResult>;
23
+ delete(path: string, options?: AFSDeleteOptions): Promise<AFSDeleteResult>;
24
+ batchWrite?(entries: AFSBatchWriteEntry[]): Promise<RpcBatchResult>;
25
+ batchDelete?(entries: AFSBatchDeleteEntry[]): Promise<RpcBatchResult>;
26
+ batchRead?(entries: Array<{
27
+ path: string;
28
+ optional?: boolean;
29
+ }>): Promise<RpcBatchResult>;
30
+ uploadGrantCapability?(): Promise<boolean>;
31
+ prepareUpload?(entries: PrepareUploadEntryInput[]): Promise<PrepareUploadResult>;
32
+ commitUpload?(sessionId: string, entries: CommitUploadEntryInput[]): Promise<RpcBatchResult>;
33
+ /** Out-of-band PUT of object bytes via a grant; returns the HTTP status. */
34
+ uploadObject?(grant: UploadGrant, bytes: Uint8Array): Promise<number>;
35
+ downloadGrantCapability?(): Promise<boolean>;
36
+ prepareDownload?(entries: PrepareDownloadEntryInput[]): Promise<PrepareDownloadResult>;
37
+ /** Out-of-band GET of object bytes via a grant; returns the raw bytes. */
38
+ downloadObject?(grant: DownloadGrant): Promise<Uint8Array>;
39
+ }
40
+ /**
41
+ * Push batch size. Each round, push() fetches up to this many unpushed
42
+ * changelog rows in a single SQLite query and uploads them one by one.
43
+ * Lower than PULL_BATCH_LIMIT because each row is a separate PUT/DELETE
44
+ * round-trip (vs. PULL which fetches many change rows in a single call).
45
+ */
46
+ declare const PUSH_BATCH_LIMIT = 100;
47
+ /**
48
+ * Flush local_seq to SQLite every N successful pushes. Trade-off: lower
49
+ * = less progress lost on crash, higher = fewer DB writes. 10 is the
50
+ * round-trip frequency Task 3.6 spec mandates.
51
+ */
52
+ declare const PUSH_PROGRESS_FLUSH_INTERVAL = 10;
53
+ /**
54
+ * Pull batch size. Each `.changelog` cursor list call fetches up to this
55
+ * many rows. Matches the server's MAX_LIMIT hard cap
56
+ * (`services/arc-computer/src/handlers/space-api.ts` — .changelog list
57
+ * branch inside `_createSpaceHandler`).
58
+ */
59
+ declare const PULL_BATCH_LIMIT = 1000;
60
+ /**
61
+ * Concurrency cap for `.objects/{cid}` reads inside pull(). Higher = faster
62
+ * under large pulls, but risks server-side rate limits and memory
63
+ * pressure on the client. 4 is the spec default.
64
+ */
65
+ declare const PULL_FETCH_CONCURRENCY = 4;
66
+ /**
67
+ * Wall-clock budget for a single sync() call. Protects against runaway
68
+ * pulls on wildly out-of-date clients. pull() checks Date.now() against
69
+ * the deadline at the top of every batch loop iteration.
70
+ */
71
+ declare const SYNC_WALL_CLOCK_BUDGET_MS = 25000;
72
+ /**
73
+ * Narrow provider interface consumed by SyncEngine.
74
+ *
75
+ * The production mobile runtimes implement this directly on
76
+ * DIDSpaceProvider; tests use a mock. Only `internalWrite`,
77
+ * `internalDelete`, and `readBytes` are exercised — SyncEngine does
78
+ * NOT need list/stat/search.
79
+ *
80
+ * `readBytes` is the push-side counterpart: SyncEngine needs the raw
81
+ * bytes of a locally-stored cid so it can upload them via
82
+ * `cloudAfs.write`. Tests wire this to an in-memory map.
83
+ */
84
+ interface SyncEngineProviderHandle {
85
+ internalWrite(path: string, opts: {
86
+ content: Uint8Array;
87
+ deviceId: string;
88
+ mtime?: number;
89
+ mimeType?: string;
90
+ /**
91
+ * Application metadata (e.g. `createdAt`) the SyncEngine derived from the
92
+ * bytes via `readApplicationMetadata` BEFORE calling internalWrite
93
+ * (feed-sort §5.1). The provider stamps the local-copy ctime from
94
+ * `metadata.createdAt` (Rule R1/R2) and persists it — it NEVER parses the
95
+ * bytes itself. Absent ⇒ ctime falls back to the write time.
96
+ */
97
+ metadata?: Record<string, unknown>;
98
+ }): Promise<void>;
99
+ internalDelete(path: string, opts: {
100
+ deviceId: string;
101
+ mtime?: number;
102
+ }): Promise<void>;
103
+ /**
104
+ * Fetch the raw bytes for a locally stored path. Used by push() to
105
+ * upload the file content referenced by a `put` changelog row.
106
+ *
107
+ * Returning `null` signals "the file is no longer on disk" (e.g. the
108
+ * user deleted it after the changelog row was written but before the
109
+ * sync picked it up). push() treats null as "skip this row,
110
+ * advance cursor" because the DELETE row that will follow is what
111
+ * the cloud needs to see.
112
+ */
113
+ readBytes(path: string): Promise<Uint8Array | null>;
114
+ /**
115
+ * List all currently-stored file paths for the scope. Only used by
116
+ * fullResync() to diff the cloud manifest against local state. Paths
117
+ * returned here are NOT slash-prefixed (they match the internal
118
+ * entries table shape); SyncEngine normalises before calling
119
+ * internalDelete.
120
+ */
121
+ listAllPaths(): Promise<string[]>;
122
+ /**
123
+ * Derive application metadata (e.g. Aside's `createdAt`) from a file's own
124
+ * bytes (did-space-metadata G3). The engine is format-agnostic, so the
125
+ * provider decides how to extract it (parse the record JSON). Attached to the
126
+ * push wire — top-level `meta` on the batchWrite leg (afs-rpc `wireMeta` lifts
127
+ * it onto `payload.meta`), `metadata` on the upload-plane commit leg.
128
+ *
129
+ * OPTIONAL: providers that expose no application metadata omit it, and the
130
+ * engine emits no metadata — preserving the pre-G3 wire contract byte-for-byte.
131
+ * Mirrors Swift's `readApplicationMetadata` + Kotlin's equivalent (P1 lockstep).
132
+ */
133
+ readApplicationMetadata?(path: string, bytes: Uint8Array): Promise<Record<string, unknown>>;
134
+ }
135
+ /** Outcome of a {@link SyncEngine.sync} call. */
136
+ interface SyncResult {
137
+ /** Whether the sync completed all three legs (push, pull, gc) normally. */
138
+ ok: boolean;
139
+ /** Whether abortSignal fired before the engine reached its happy path. */
140
+ aborted: boolean;
141
+ /** Number of rows successfully pushed in the push leg. */
142
+ pushed: number;
143
+ /** Number of rows successfully applied in the pull leg. */
144
+ pulled: number;
145
+ /** Number of changelog rows GC'd at the end of the run. */
146
+ gcDeleted: number;
147
+ /** True when fullResync was taken (first-sync or 409 Compacted). */
148
+ fullResynced: boolean;
149
+ /** When the run ended, Date.now() in millis. */
150
+ endedAt: number;
151
+ }
152
+ /**
153
+ * Thrown by {@link SyncEngine.resolveConflict} when the server's 409
154
+ * conflict response is missing required fields (notably `currentMtime`).
155
+ * The LWW decision needs both timestamps, so a malformed response is
156
+ * treated as fatal to the in-flight push leg.
157
+ *
158
+ * Phase 5 Task 5.1 (G11): replaced the Task 3.6 `ConflictTODOError`
159
+ * stub with the real LWW resolver. The resolver handles every well-formed
160
+ * conflict shape inline; this error class only fires on protocol breakage.
161
+ */
162
+ declare class ConflictResolutionError extends Error {
163
+ readonly change: ChangelogEntry;
164
+ readonly reason: string;
165
+ constructor(change: ChangelogEntry, reason: string);
166
+ }
167
+ /** Where a current-cid 404 surfaced. */
168
+ type CurrentObjectSource = "manifest" | "latest-put" | "conflict";
169
+ /**
170
+ * Thrown when an object read returns 404 for a cid that is the **current**
171
+ * state of a path — design §4.7.2, the GC-go-live safety contract. Enabling
172
+ * object GC makes a current-cid 404 possible (a GC bug or the residual
173
+ * re-reference race); it MUST be a loud, hard error — NEVER silently treated as
174
+ * convergence. The cursor must stay pinned (do not advance past the failing
175
+ * change) so the next sync revisits it once the object is restored/re-pushed.
176
+ *
177
+ * Distinct from a **superseded**-cid 404 (an old changelog row a later same-path
178
+ * row supersedes), which is benign — skip + advance (the Path-Y offline
179
+ * tradeoff, §0.2). Classification: see {@link classifyMissingObject}.
180
+ */
181
+ declare class CurrentObjectMissingError extends Error {
182
+ readonly path: string;
183
+ readonly cid: string;
184
+ readonly source: CurrentObjectSource;
185
+ constructor(path: string, cid: string, source: CurrentObjectSource);
186
+ }
187
+ /**
188
+ * Classify an object-read 404 during incremental apply (design §4.7.2).
189
+ *
190
+ * `lastCidForPath` maps each path in the batch to the cid of its LAST row
191
+ * (max seq) — `null` if that last row is a delete. Fail-closed:
192
+ * - cid === the path's last-row cid ⇒ "current" (this cid is the path's
193
+ * final state in the batch) ⇒ hard error.
194
+ * - path absent from the map (unknown cid, not in this batch) ⇒ "current"
195
+ * (fail closed — never benign-skip something we can't prove superseded).
196
+ * - otherwise a later same-path row supersedes this cid ⇒ "superseded" ⇒ skip.
197
+ */
198
+ declare function classifyMissingObject(path: string, cid: string, lastCidForPath: Map<string, string | null>): "current" | "superseded";
199
+ /**
200
+ * Conflict response shape consumed by {@link SyncEngine.resolveConflict}.
201
+ * Mirrors the 409 body returned by Task 3.3's PUT/DELETE handlers.
202
+ *
203
+ * `currentCid === null` AND `currentMtime !== null` means "the cloud has
204
+ * deleted this path at currentMtime"; both null means the server returned
205
+ * a malformed response and the resolver throws ConflictResolutionError.
206
+ */
207
+ interface ConflictResponse {
208
+ /** Server's current CID for the path (null if cloud has deleted it). */
209
+ currentCid: string | null;
210
+ /** Server's current mtime for the path (required for LWW comparison). */
211
+ currentMtime: number | null;
212
+ /** Origin device id for the cloud entry. Used for echo-loop Layer II. */
213
+ currentDeviceId: string | null;
214
+ }
215
+ interface SyncEngineOptions {
216
+ localChangelog: LocalChangelog;
217
+ syncStateStore: SyncStateStore;
218
+ cloudAfs: SyncCloudAFS;
219
+ provider: SyncEngineProviderHandle;
220
+ /** Self deviceId: written into changelog rows (options.meta.deviceId) and used
221
+ /// as the self filter. */
222
+ deviceId: string;
223
+ /**
224
+ * Override wall-clock budget in tests. Falls back to the module-level
225
+ * constant when not provided.
226
+ */
227
+ wallClockBudgetMs?: number;
228
+ }
229
+ /**
230
+ * Local push + pull + GC orchestrator. One instance per DIDSpaceProvider /
231
+ * per userDid. Instances are NOT thread-safe at the data level — the
232
+ * internal mutex only serialises `sync()` calls; callers that mutate
233
+ * local state while a sync is in flight are expected to do so via
234
+ * `provider.internalWrite/Delete` so the changelog row is visible to the
235
+ * next push batch.
236
+ */
237
+ declare class SyncEngine {
238
+ private readonly localChangelog;
239
+ private readonly syncStateStore;
240
+ private readonly cloudAfs;
241
+ private readonly provider;
242
+ private readonly selfDeviceId;
243
+ private readonly wallClockBudgetMs;
244
+ private readonly mutex;
245
+ /**
246
+ * Per-INSTANCE capability-fallback memory (design §7.1): set the first
247
+ * time the server answers a batch envelope with the exact
248
+ * "Unsupported op 'batch…'" 400. Never set by any other 400 (e.g.
249
+ * BATCH_OVER_BUDGET halves and retries instead).
250
+ */
251
+ private batchFallback;
252
+ /**
253
+ * Per-INSTANCE upload-plane capability memory (design §7.1, mirrors
254
+ * batchFallback). null = not yet probed; set on the first `push()` that
255
+ * reaches the threshold. `false` (Node / old server / signer-less) keeps the
256
+ * engine on batchWrite forever for this instance.
257
+ */
258
+ private uploadPlaneCapable;
259
+ /** Set per-push() when this push routes large put-chunks through the upload plane. */
260
+ private uploadPlaneActive;
261
+ /**
262
+ * Per-INSTANCE download-plane capability memory (design §7.3, mirrors
263
+ * uploadPlaneCapable). null = not yet probed. `false` (Node / old server /
264
+ * signer-less) keeps the engine on batchRead forever for this instance — it is
265
+ * NOT reset per session (unlike {@link downloadFallback}): a server that never
266
+ * advertised the capability won't start mid-process, so re-probing every sync
267
+ * would just waste a `/.actions` list. A server UPGRADE needs a client restart.
268
+ */
269
+ private downloadPlaneCapable;
270
+ /**
271
+ * Runtime fallback-on-403 latch (design §7.3): set when a presigned GET is
272
+ * rejected 401/403 (token lacks GetObject / bad signature). Once set, the whole
273
+ * sync SESSION reverts to batchRead and never re-tries the plane — so a misconfig
274
+ * costs at most ONE 403 per object before the first hit flips it, then nothing.
275
+ * Reset at the start of each sync() so a fixed token recovers without restart.
276
+ */
277
+ private downloadFallback;
278
+ /** Resolved once per instance — the out-of-band GET fan-out (env-overridable). */
279
+ private readonly downloadGetConcurrency;
280
+ constructor(opts: SyncEngineOptions);
281
+ /**
282
+ * Run a single sync round — push → pull → gc. Concurrent sync() calls
283
+ * on the same instance are serialised by the internal mutex. Always
284
+ * returns a {@link SyncResult}; throws only on unhandled errors from
285
+ * the underlying store/network layers.
286
+ */
287
+ sync(opts?: {
288
+ signal?: AbortSignal;
289
+ }): Promise<SyncResult>;
290
+ /**
291
+ * Upload unpushed local changes to the cloud, advancing local_seq in
292
+ * SQLite every `PUSH_PROGRESS_FLUSH_INTERVAL` rows. On any error
293
+ * mid-batch, flush the already-advanced cursor before re-throwing so
294
+ * the next sync() resumes where this one left off.
295
+ *
296
+ * Per-row semantics:
297
+ * - `put` row → `cloudAfs.write(path, content, {...})`
298
+ * - `delete` row → `cloudAfs.delete(path, {...})`
299
+ * - `put` row whose file has been deleted locally since the row was
300
+ * written → skip (cursor advances; the following delete row will
301
+ * tell the cloud what happened).
302
+ * - 409 conflict → delegate to {@link SyncEngine.resolveConflict}
303
+ * (LWW + tiebreak — see G11 in native-sync-design.md).
304
+ */
305
+ push(opts: {
306
+ signal?: AbortSignal;
307
+ deadline: number;
308
+ }): Promise<{
309
+ pushed: number;
310
+ }>;
311
+ /**
312
+ * Batch push leg (P4, design §7.2): split the changelog window into
313
+ * MAXIMAL same-op runs in seq order (op type never mixes inside a run —
314
+ * put(a)→delete(a) is two runs, so same-path cross-op order rides the
315
+ * sequential awaits); pack each run by maxEntries + Σ-decoded-bytes +
316
+ * UNIQUE-path-per-chunk (a duplicate path cuts the chunk so the server's
317
+ * one-shot preread stays serial-equivalent — and the SECOND chunk's
318
+ * ifMatch sees the first chunk's result); consume results strictly in
319
+ * order. Returns the advanced cursor; `stop` = abort/deadline/tail-skip.
320
+ */
321
+ private pushBatchLeg;
322
+ /**
323
+ * Send one packed chunk, halving on envelope over-budget (down to 1 entry
324
+ * = pushOne, the literal old behavior — bounded recursion by construction:
325
+ * each level halves a strictly smaller chunk).
326
+ */
327
+ private sendPushChunk;
328
+ /**
329
+ * Decide whether THIS push routes large put-chunks through the upload plane
330
+ * (design §6.1 / decision 4). True only when (a) the adapter has the
331
+ * prepare/commit/uploadObject surface, (b) the server advertises grant
332
+ * capability (memoized per instance — Node/old-server/signer-less → false →
333
+ * never), and (c) the put backlog meets the conservative threshold
334
+ * (≥ MIN_ENTRIES puts, or ≥ MIN_BYTES) via a cheap bounded peek.
335
+ */
336
+ private shouldUseUploadPlane;
337
+ /**
338
+ * Upload-plane transport for one put chunk (design §6.1 / §8). Mirrors a
339
+ * `batchWrite` call but moves content OUT of the worker:
340
+ * 1. prepare-upload (reuses each row's local `cid` — never re-hashed);
341
+ * 2. out-of-band PUT each grant (bounded concurrency);
342
+ * 3. commit-upload ONLY the entries whose PUT returned 200 (commit-after-
343
+ * 200, decision 2 — the sole dangling defense). PUT-failed entries get a
344
+ * per-entry failure so the cursor pins there for retry next round.
345
+ * Returns the SAME `RpcBatchResult` shape `sendPushChunk` consumes. If a grant
346
+ * is unexpectedly absent (capability was advertised but a row got none), bail
347
+ * via `BatchUnsupportedError` → the engine reverts to the legacy path.
348
+ */
349
+ /**
350
+ * Application metadata for a push entry, derived from its own bytes via the
351
+ * optional provider hook (did-space-metadata G3). Returns undefined when the
352
+ * provider exposes none — so the engine emits no metadata and the wire stays
353
+ * pre-G3 byte-identical.
354
+ */
355
+ private readAppMeta;
356
+ private uploadPlaneWriteChunk;
357
+ /** Run `fn(0..n-1)` with at most `limit` in flight (push-side PUT fan-out). */
358
+ private boundedAll;
359
+ /**
360
+ * Upload a single change row. Split from push() so both the normal
361
+ * loop and future retry paths can call it.
362
+ *
363
+ * On 409 conflict, delegates to {@link resolveConflict}, which decides
364
+ * by LWW + tiebreak whether to force-overwrite the cloud or adopt the
365
+ * cloud's version locally. Either way, after resolveConflict returns,
366
+ * the row is considered "handled" and the push cursor advances past it.
367
+ */
368
+ private pushOne;
369
+ /**
370
+ * Resolve a push-side 409 conflict via Last-Write-Wins (LWW).
371
+ *
372
+ * Decision matrix (see `native-sync-design.md` G11 for the full 7-row
373
+ * matrix and rationale):
374
+ *
375
+ * 1. `localMtime > cloudMtime` → **local wins**: force-overwrite the
376
+ * cloud (resend without `If-Match`). The server still validates
377
+ * `X-Content-CID`, so a corrupted upload still fails.
378
+ *
379
+ * 2. `localMtime < cloudMtime` → **cloud wins**: adopt the cloud's
380
+ * version locally via `provider.internalWrite/Delete` with the
381
+ * ORIGIN deviceId from the conflict response. Echo-loop Layer II.
382
+ *
383
+ * 3. `localMtime === cloudMtime` → **tiebreak by CID lexicographic
384
+ * order** (round 7 decision). The larger cid wins. delete ops
385
+ * treat their cid as the empty string, so a `put` with non-empty
386
+ * cid always beats a `delete` at the same mtime.
387
+ *
388
+ * Special cases handled here:
389
+ * - delete vs delete (both null cid) → idempotent no-op (defensive;
390
+ * in practice the server's delete handler turns DELETE 404 into
391
+ * success and the conflict never reaches here).
392
+ * - same mtime + same cid → idempotent natural convergence (the
393
+ * local-wins path is taken but the resend produces the same cid
394
+ * the cloud already has).
395
+ *
396
+ * mtime skew defense: G5.c (Task 3.3) rejects writes with
397
+ * `mtime > serverNow + 5min` at the header layer, so a single device
398
+ * with a wildly bad clock cannot poison the LWW decision globally.
399
+ */
400
+ resolveConflict(change: ChangelogEntry, resp: ConflictResponse): Promise<void>;
401
+ /**
402
+ * Fetch and apply incoming changes from the cloud. Loops until either
403
+ * the server reports `hasMore === false`, the deadline passes, or the
404
+ * abort signal fires. On 409 Compacted, delegates to fullResync().
405
+ *
406
+ * Apply order: sequential in seq order within a batch (SQLite
407
+ * integrity + single origin-deviceId per row). Content fetching is
408
+ * parallel up to `PULL_FETCH_CONCURRENCY`.
409
+ */
410
+ pull(opts: {
411
+ signal?: AbortSignal;
412
+ deadline: number;
413
+ }): Promise<{
414
+ pulled: number;
415
+ fullResynced: boolean;
416
+ }>;
417
+ /**
418
+ * Fetch content bytes for a batch of `put` rows in parallel, bounded
419
+ * by {@link PULL_FETCH_CONCURRENCY}. Results land in `cidMap`;
420
+ * individual fetch failures (404, cid mismatch) are logged and the
421
+ * offending cid is omitted so the caller's serial apply pass can
422
+ * detect the gap and skip.
423
+ */
424
+ /**
425
+ * Content fetch dispatcher (P4): chunked `batchRead(optional:true)` when
426
+ * the adapter has it (≤20 cids and ≤2MB ESTIMATED bytes per chunk — size
427
+ * from the changelog rows), single concurrent reads otherwise. Tail-
428
+ * skipped cids are simply re-queued for the next chunk (they were never
429
+ * read); `missing:true` cids stay out of the map so the apply loop's
430
+ * §4.7.2 current/superseded classification is untouched.
431
+ */
432
+ private fetchContent;
433
+ /** Single `.objects/{cid}` read with the same soft-failure semantics. */
434
+ private fetchOneObject;
435
+ private fetchContentConcurrent;
436
+ /**
437
+ * Whether the download plane can be used RIGHT NOW: the adapter speaks the
438
+ * methods, the server advertised the INDEPENDENT capability (memoized per
439
+ * instance, §7.3), and this session hasn't latched a 401/403 fallback.
440
+ */
441
+ private downloadPlaneAvailable;
442
+ /**
443
+ * Fetch LARGE objects (size ≥ {@link DOWNLOAD_PLANE_MIN_BYTES}) via the
444
+ * download plane — prepare-download → bounded-concurrency direct R2 GET →
445
+ * computeCID → `bytesMap`. Bytes leave R2 directly (never through the worker /
446
+ * base64). Returns the SET of cids it satisfied; the caller routes the rest
447
+ * (small objects, Node `grant:null`, forbidden, 404, post-fallback) through
448
+ * batchRead — so a true miss still raises the existing fail-closed path.
449
+ *
450
+ * fail-closed: a byte string whose `computeCID` ≠ the requested cid (R2 served
451
+ * tampered/other bytes) is DROPPED, never written (§8.1). A 401/403 latches
452
+ * `downloadFallback` for the whole session — at most one wall-bang (§7.3).
453
+ */
454
+ private fillBytesViaDownloadPlane;
455
+ /**
456
+ * First-sync / post-compaction recovery path. Fetches the full manifest
457
+ * and reconciles the local store against it, skipping paths the local
458
+ * changelog still has unpushed changes for (invariant I1).
459
+ *
460
+ * ORDERING IS CRITICAL — `pendingPaths` MUST be collected BEFORE the
461
+ * manifest fetch so a delete written between pendingPaths collection
462
+ * and apply does not get reverted by the manifest restoration.
463
+ */
464
+ fullResync(opts: {
465
+ signal?: AbortSignal;
466
+ deadline: number;
467
+ }): Promise<{
468
+ pulled: number;
469
+ }>;
470
+ }
471
+ //#endregion
472
+ export { ConflictResolutionError, ConflictResponse, CurrentObjectMissingError, CurrentObjectSource, PULL_BATCH_LIMIT, PULL_FETCH_CONCURRENCY, PUSH_BATCH_LIMIT, PUSH_PROGRESS_FLUSH_INTERVAL, SYNC_WALL_CLOCK_BUDGET_MS, SyncCloudAFS, SyncEngine, SyncEngineOptions, SyncEngineProviderHandle, SyncResult, classifyMissingObject };
473
+ //# sourceMappingURL=sync-engine.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-engine.d.cts","names":[],"sources":["../src/sync-engine.ts"],"mappings":"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"}