@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
package/dist/rsync.cjs ADDED
@@ -0,0 +1,400 @@
1
+ const require_cid = require('./cid.cjs');
2
+ const require_afs_metadata_context = require('./afs-metadata-context.cjs');
3
+ const require_rsync_content = require('./rsync-content.cjs');
4
+
5
+ //#region src/rsync.ts
6
+ /**
7
+ * Compute how many files to sample for verification.
8
+ * Formula: max(1, min(100, ceil(totalTransferred / 10)))
9
+ */
10
+ function computeSampleCount(totalTransferred) {
11
+ if (totalTransferred === 0) return 0;
12
+ return Math.max(1, Math.min(100, Math.ceil(totalTransferred / 10)));
13
+ }
14
+ /**
15
+ * Select a random sample of `count` items from `files`.
16
+ * Uses partial Fisher-Yates shuffle. Returns a copy.
17
+ */
18
+ function sampleFiles(files, count) {
19
+ if (count >= files.length) return [...files];
20
+ const shuffled = [...files];
21
+ for (let i = 0; i < count; i++) {
22
+ const j = i + Math.floor(Math.random() * (shuffled.length - i));
23
+ [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
24
+ }
25
+ return shuffled.slice(0, count);
26
+ }
27
+ /** Content-decoding helpers shared with the local metadata subscriber. */
28
+ const resolveContent = require_rsync_content.resolveAFSContent;
29
+ /**
30
+ * Fetch a file manifest from a remote server's POST /api/space/manifest endpoint.
31
+ *
32
+ * This replaces the N-request paginated list + per-file CID read with a single
33
+ * request that returns the complete manifest directly from the server's D1 index.
34
+ *
35
+ * @param baseUrl Server base URL (e.g. "https://computer.afsd.dev")
36
+ * @param authHeader Authorization header value (e.g. "Bearer <token>")
37
+ * @param basePath Path within the space (e.g. "/" or "/blocklets/z1blk/")
38
+ * @param since Optional: only return files modified after this ms timestamp
39
+ * @param fetchFn Optional fetch override (for testing)
40
+ */
41
+ async function fetchRemoteManifest(baseUrl, authHeader, basePath, since, fetchFn = globalThis.fetch) {
42
+ const url = `${baseUrl.replace(/\/$/, "")}/api/space/manifest`;
43
+ const body = { basePath };
44
+ if (since !== void 0) body.since = since;
45
+ const response = await fetchFn(url, {
46
+ method: "POST",
47
+ headers: {
48
+ "Content-Type": "application/json",
49
+ Authorization: authHeader
50
+ },
51
+ body: JSON.stringify(body)
52
+ });
53
+ if (!response.ok) throw new Error(`fetchRemoteManifest failed: ${response.status} ${response.statusText} from ${url}`);
54
+ const raw = await response.json();
55
+ const files = raw.entries ?? raw.files ?? [];
56
+ return {
57
+ files,
58
+ entries: files,
59
+ manifestSeq: raw.manifestSeq,
60
+ createdAt: raw.createdAt
61
+ };
62
+ }
63
+ const BUILD_MANIFEST_PAGE_SIZE = 1e3;
64
+ async function buildManifest(afs, basePath, options) {
65
+ if (options?.fetchManifest) return options.fetchManifest(basePath, options.since);
66
+ if (options?.localMetadataDb && options.localRootPath && options.localScope) return buildManifestFromDB(options.localMetadataDb, options.localRootPath, options.localScope, basePath);
67
+ if (!options?.skipLocalMetadataDb) {
68
+ const ctx = require_afs_metadata_context.getMetadataContext(afs);
69
+ if (ctx) return buildManifestFromDB(ctx.metadataDb, ctx.userDir, ctx.scope, basePath);
70
+ }
71
+ const SYSTEM_VIRTUAL_PATHS = new Set([
72
+ "/.knowledge",
73
+ "/.meta",
74
+ "/.actions"
75
+ ]);
76
+ const allEntries = [];
77
+ let offset = 0;
78
+ let pageEntries = [];
79
+ do {
80
+ const batch = await afs.list(basePath, {
81
+ maxDepth: 99,
82
+ limit: BUILD_MANIFEST_PAGE_SIZE,
83
+ offset
84
+ });
85
+ pageEntries = basePath === "/" ? batch.data.filter((e) => !SYSTEM_VIRTUAL_PATHS.has(e.path)) : batch.data;
86
+ allEntries.push(...pageEntries);
87
+ offset += pageEntries.length;
88
+ } while (pageEntries.length === BUILD_MANIFEST_PAGE_SIZE);
89
+ const files = [];
90
+ for (const entry of allEntries) {
91
+ if (entry.meta?.childrenCount != null) continue;
92
+ let cid = entry.meta?.cid;
93
+ if (!cid) try {
94
+ const readResult = await afs.read(entry.path);
95
+ const content = readResult.data?.content;
96
+ if (content != null) cid = await require_cid.computeCID(resolveContent(content, readResult.data?.meta));
97
+ } catch {}
98
+ files.push({
99
+ path: entry.path,
100
+ size: entry.meta?.size ?? 0,
101
+ cid,
102
+ mtime: entry.updatedAt?.getTime()
103
+ });
104
+ }
105
+ return {
106
+ files,
107
+ createdAt: Date.now()
108
+ };
109
+ }
110
+ function computeDiff(src, dst, options) {
111
+ const dstMap = /* @__PURE__ */ new Map();
112
+ for (const f of dst.files) dstMap.set(f.path, f);
113
+ const entries = [];
114
+ let added = 0;
115
+ let modified = 0;
116
+ let unchanged = 0;
117
+ const seenPaths = /* @__PURE__ */ new Set();
118
+ for (const srcFile of src.files) {
119
+ seenPaths.add(srcFile.path);
120
+ const dstFile = dstMap.get(srcFile.path);
121
+ if (!dstFile) {
122
+ entries.push({
123
+ path: srcFile.path,
124
+ reason: "added"
125
+ });
126
+ added++;
127
+ continue;
128
+ }
129
+ if (isModified(srcFile, dstFile)) {
130
+ entries.push({
131
+ path: srcFile.path,
132
+ reason: "modified"
133
+ });
134
+ modified++;
135
+ } else unchanged++;
136
+ }
137
+ let deleted = 0;
138
+ if (options?.delete) {
139
+ for (const dstFile of dst.files) if (!seenPaths.has(dstFile.path)) {
140
+ entries.push({
141
+ path: dstFile.path,
142
+ reason: "deleted"
143
+ });
144
+ deleted++;
145
+ }
146
+ }
147
+ return {
148
+ entries,
149
+ stats: {
150
+ added,
151
+ modified,
152
+ deleted,
153
+ unchanged
154
+ }
155
+ };
156
+ }
157
+ function isModified(src, dst) {
158
+ if (src.cid && dst.cid) return src.cid !== dst.cid;
159
+ return src.size !== dst.size;
160
+ }
161
+ async function transferFiles(srcAfs, dstAfs, diff, options) {
162
+ const concurrency = options?.concurrency ?? 5;
163
+ const dryRun = options?.dryRun ?? false;
164
+ const errors = [];
165
+ let transferred = 0;
166
+ let sessionId = null;
167
+ const completedPaths = /* @__PURE__ */ new Set();
168
+ const checkpointOpts = options?.checkpointOptions;
169
+ if (checkpointOpts && !dryRun) {
170
+ const { metadataDb, direction, remoteUrl, basePath } = checkpointOpts;
171
+ const existing = await metadataDb.getActiveCheckpoint(direction, remoteUrl, basePath);
172
+ if (existing) {
173
+ sessionId = existing.session_id;
174
+ try {
175
+ const parsed = JSON.parse(existing.completed);
176
+ if (Array.isArray(parsed)) {
177
+ for (const p of parsed) if (typeof p === "string") completedPaths.add(p);
178
+ }
179
+ } catch {
180
+ await metadataDb.updateCheckpointCompleted(sessionId, []);
181
+ }
182
+ } else {
183
+ sessionId = crypto.randomUUID();
184
+ await metadataDb.createCheckpoint({
185
+ session_id: sessionId,
186
+ direction,
187
+ remote_url: remoteUrl,
188
+ base_path: basePath,
189
+ status: "active",
190
+ diff_json: JSON.stringify(diff.entries),
191
+ completed: "[]",
192
+ created_at: Date.now(),
193
+ updated_at: Date.now()
194
+ });
195
+ }
196
+ }
197
+ const progress = {
198
+ phase: "transferring",
199
+ filesTotal: diff.entries.length,
200
+ filesProcessed: 0,
201
+ bytesTotal: 0,
202
+ bytesTransferred: 0,
203
+ errors: [],
204
+ startedAt: Date.now(),
205
+ updatedAt: Date.now()
206
+ };
207
+ const toTransfer = diff.entries.filter((e) => e.reason === "added" || e.reason === "modified");
208
+ const toDelete = diff.entries.filter((e) => e.reason === "deleted");
209
+ const transferOne = async (entry) => {
210
+ if (completedPaths.has(entry.path)) {
211
+ transferred++;
212
+ progress.filesProcessed++;
213
+ progress.updatedAt = Date.now();
214
+ options?.onProgress?.(progress);
215
+ return;
216
+ }
217
+ try {
218
+ if (dryRun) return;
219
+ const readResult = await srcAfs.read(entry.path);
220
+ const rawContent = readResult.data?.content;
221
+ if (rawContent == null) throw new Error(`Failed to read ${entry.path}: no content`);
222
+ const content = resolveContent(rawContent, readResult.data?.meta);
223
+ await dstAfs.write(entry.path, { content });
224
+ transferred++;
225
+ progress.bytesTransferred += readResult.data?.meta?.size ?? 0;
226
+ if (sessionId && checkpointOpts) {
227
+ completedPaths.add(entry.path);
228
+ await checkpointOpts.metadataDb.updateCheckpointCompleted(sessionId, [...completedPaths]);
229
+ }
230
+ } catch (err) {
231
+ const msg = err instanceof Error ? err.message : String(err);
232
+ errors.push({
233
+ path: entry.path,
234
+ error: msg
235
+ });
236
+ } finally {
237
+ progress.filesProcessed++;
238
+ progress.updatedAt = Date.now();
239
+ progress.errors = [...errors];
240
+ options?.onProgress?.(progress);
241
+ }
242
+ };
243
+ await runWithConcurrency(toTransfer.map((e) => () => transferOne(e)), concurrency);
244
+ for (const entry of toDelete) {
245
+ if (dryRun) continue;
246
+ try {
247
+ await dstAfs.delete(entry.path);
248
+ } catch (err) {
249
+ const msg = err instanceof Error ? err.message : String(err);
250
+ errors.push({
251
+ path: entry.path,
252
+ error: msg
253
+ });
254
+ } finally {
255
+ progress.filesProcessed++;
256
+ progress.updatedAt = Date.now();
257
+ progress.errors = [...errors];
258
+ options?.onProgress?.(progress);
259
+ }
260
+ }
261
+ if (sessionId && checkpointOpts) await checkpointOpts.metadataDb.completeCheckpoint(sessionId);
262
+ return {
263
+ transferred,
264
+ errors
265
+ };
266
+ }
267
+ async function runWithConcurrency(tasks, limit) {
268
+ const executing = /* @__PURE__ */ new Set();
269
+ for (const task of tasks) {
270
+ const p = task().then(() => {
271
+ executing.delete(p);
272
+ });
273
+ executing.add(p);
274
+ if (executing.size >= limit) await Promise.race(executing);
275
+ }
276
+ await Promise.all(executing);
277
+ }
278
+ /**
279
+ * Verify sync by sampling transferred files and comparing CIDs.
280
+ *
281
+ * Phase 3 change: instead of full buildManifest on dst, we sample
282
+ * max(1, min(100, ceil(transferred/10))) files from the transferred set,
283
+ * read each from dst, compute its CID, and compare against srcManifest CID.
284
+ *
285
+ * @param dstAfs Destination AFS to read files from
286
+ * @param transferredFiles FileFingerprints from srcManifest for transferred files
287
+ */
288
+ async function verifySync(dstAfs, transferredFiles) {
289
+ if (transferredFiles.length === 0) return true;
290
+ const sample = sampleFiles(transferredFiles, computeSampleCount(transferredFiles.length));
291
+ for (const srcFile of sample) {
292
+ if (!srcFile.cid) continue;
293
+ try {
294
+ const readResult = await dstAfs.read(srcFile.path);
295
+ const rawContent = readResult.data?.content;
296
+ if (rawContent == null) return false;
297
+ if (await require_cid.computeCID(resolveContent(rawContent, readResult.data?.meta)) !== srcFile.cid) return false;
298
+ } catch {
299
+ return false;
300
+ }
301
+ }
302
+ return true;
303
+ }
304
+ async function syncDIDSpace(srcAfs, dstAfs, basePath, options) {
305
+ const startTime = Date.now();
306
+ const verify = options?.verify ?? true;
307
+ const progress = {
308
+ phase: "scanning",
309
+ filesTotal: 0,
310
+ filesProcessed: 0,
311
+ bytesTotal: 0,
312
+ bytesTransferred: 0,
313
+ errors: [],
314
+ startedAt: startTime,
315
+ updatedAt: startTime
316
+ };
317
+ options?.onProgress?.(progress);
318
+ let [srcManifest, dstManifest] = await Promise.all([buildManifest(srcAfs, basePath, options?.srcFetchManifest ? { fetchManifest: options.srcFetchManifest } : void 0), buildManifest(dstAfs, basePath, options?.dstFetchManifest ? { fetchManifest: options.dstFetchManifest } : void 0)]);
319
+ if (options?.pathFilter) {
320
+ const pf = options.pathFilter;
321
+ srcManifest = {
322
+ ...srcManifest,
323
+ files: srcManifest.files.filter((f) => pf(f.path))
324
+ };
325
+ dstManifest = {
326
+ ...dstManifest,
327
+ files: dstManifest.files.filter((f) => pf(f.path))
328
+ };
329
+ }
330
+ progress.phase = "diffing";
331
+ progress.updatedAt = Date.now();
332
+ options?.onProgress?.(progress);
333
+ const diff = computeDiff(srcManifest, dstManifest, options);
334
+ progress.phase = "transferring";
335
+ progress.filesTotal = diff.entries.filter((e) => e.reason !== "deleted").length;
336
+ progress.updatedAt = Date.now();
337
+ options?.onProgress?.(progress);
338
+ const { transferred, errors } = await transferFiles(srcAfs, dstAfs, diff, options);
339
+ let verified = false;
340
+ if (verify && !options?.dryRun) {
341
+ progress.phase = "verifying";
342
+ progress.updatedAt = Date.now();
343
+ options?.onProgress?.(progress);
344
+ const transferredPaths = new Set(diff.entries.filter((e) => e.reason === "added" || e.reason === "modified").map((e) => e.path));
345
+ verified = await verifySync(dstAfs, srcManifest.files.filter((f) => transferredPaths.has(f.path)));
346
+ }
347
+ progress.phase = errors.length > 0 ? "failed" : "done";
348
+ progress.updatedAt = Date.now();
349
+ options?.onProgress?.(progress);
350
+ return {
351
+ success: errors.length === 0,
352
+ diff,
353
+ transferred,
354
+ verified,
355
+ errors,
356
+ durationMs: Date.now() - startTime
357
+ };
358
+ }
359
+ /**
360
+ * Build a manifest purely from `_metadata.db` (the index is the source of
361
+ * truth after the Node backend moved to content-addressed storage, Phase 3).
362
+ *
363
+ * The old `reconcile({ rootPath })` FS-scan prelude is GONE: there is no
364
+ * verbatim file tree to walk anymore — content lives at `objects/{cid}` and the
365
+ * index already reflects every write (the provider writes entries atomically).
366
+ * Reconciling against the CAS layout would mis-scan internal object files.
367
+ * `rootPath` is retained in the signature for caller compatibility but unused.
368
+ */
369
+ async function buildManifestFromDB(metadataDb, _rootPath, scope, basePath) {
370
+ const dbBasePath = afsBasePathToDbPrefix(basePath);
371
+ return {
372
+ files: (await metadataDb.getFiles(scope, dbBasePath)).map((row) => ({
373
+ path: `/${row.path}`,
374
+ size: row.size,
375
+ cid: row.cid ?? void 0,
376
+ mtime: row.mtime
377
+ })),
378
+ createdAt: Date.now()
379
+ };
380
+ }
381
+ /**
382
+ * Convert an AFS basePath to a MetadataDB path prefix.
383
+ *
384
+ * Examples:
385
+ * "/" → undefined (match all)
386
+ * "/appDid" → "appDid/"
387
+ * "/appDid/" → "appDid/"
388
+ */
389
+ function afsBasePathToDbPrefix(basePath) {
390
+ const stripped = basePath.replace(/^\/+/, "").replace(/\/*$/, "");
391
+ if (!stripped) return void 0;
392
+ return `${stripped}/`;
393
+ }
394
+
395
+ //#endregion
396
+ exports.buildManifest = buildManifest;
397
+ exports.computeDiff = computeDiff;
398
+ exports.fetchRemoteManifest = fetchRemoteManifest;
399
+ exports.runWithConcurrency = runWithConcurrency;
400
+ exports.syncDIDSpace = syncDIDSpace;
@@ -0,0 +1,157 @@
1
+ import { MetadataDB } from "./metadata-db.cjs";
2
+ import { AFS } from "@aigne/afs";
3
+
4
+ //#region src/rsync.d.ts
5
+ interface FileFingerprint {
6
+ path: string;
7
+ size: number;
8
+ cid?: string;
9
+ mtime?: number;
10
+ }
11
+ interface SyncManifest {
12
+ /**
13
+ * Legacy file list field — kept REQUIRED for backward compatibility
14
+ * with existing consumers (rsync.ts pipeline, computeDiff, e2e tests).
15
+ *
16
+ * Task 3.2: as of the G5.b manifest endpoint rewrite, the server now
17
+ * also returns this same data under the `entries` field plus a fresh
18
+ * `manifestSeq` cursor. New code should prefer `entries` + `manifestSeq`
19
+ * but reading `files` continues to work — both arrays carry identical
20
+ * data, they are two views of the same underlying snapshot.
21
+ */
22
+ files: FileFingerprint[];
23
+ /**
24
+ * Task 3.2 — canonical "entries" view of the same data as `files`.
25
+ * Optional because clients constructing a manifest locally (e.g.
26
+ * `buildManifestFromDB`) may omit it; the wire format from the server
27
+ * always includes it.
28
+ */
29
+ entries?: FileFingerprint[];
30
+ /**
31
+ * Task 3.2 — server-provided changelog cursor at the moment the
32
+ * manifest was assembled. After reading the manifest a client can
33
+ * call `GET /sync/changes?since=manifestSeq` to fetch all subsequent
34
+ * deltas without missing or replaying entries (CTE single-shot
35
+ * snapshot — entries and manifestSeq come from the same point-in-time
36
+ * read).
37
+ *
38
+ * Optional because client-constructed manifests have no server seq.
39
+ * 0 is a valid value (empty changelog == nothing has been written
40
+ * to this scope yet).
41
+ */
42
+ manifestSeq?: number;
43
+ createdAt: number;
44
+ }
45
+ interface SyncDiffEntry {
46
+ path: string;
47
+ reason: "added" | "modified" | "deleted";
48
+ }
49
+ interface SyncDiff {
50
+ entries: SyncDiffEntry[];
51
+ stats: {
52
+ added: number;
53
+ modified: number;
54
+ deleted: number;
55
+ unchanged: number;
56
+ };
57
+ }
58
+ interface SyncProgress {
59
+ phase: "scanning" | "diffing" | "transferring" | "verifying" | "done" | "failed";
60
+ filesTotal: number;
61
+ filesProcessed: number;
62
+ bytesTotal: number;
63
+ bytesTransferred: number;
64
+ errors: Array<{
65
+ path: string;
66
+ error: string;
67
+ }>;
68
+ startedAt: number;
69
+ updatedAt: number;
70
+ }
71
+ interface SyncResult {
72
+ success: boolean;
73
+ diff: SyncDiff;
74
+ transferred: number;
75
+ verified: boolean;
76
+ errors: Array<{
77
+ path: string;
78
+ error: string;
79
+ }>;
80
+ durationMs: number;
81
+ }
82
+ interface SyncOptions {
83
+ delete?: boolean;
84
+ dryRun?: boolean;
85
+ verify?: boolean;
86
+ concurrency?: number;
87
+ onProgress?: (progress: SyncProgress) => void;
88
+ /** Filter function to exclude paths from sync. Return true to include. */
89
+ pathFilter?: (path: string) => boolean;
90
+ /**
91
+ * If provided, fetch the src manifest from a remote server endpoint instead of
92
+ * paginating through srcAfs. Useful when the remote side has a manifest endpoint.
93
+ */
94
+ srcFetchManifest?: (basePath: string, since?: number) => Promise<SyncManifest>;
95
+ /**
96
+ * If provided, fetch the dst manifest from a remote server endpoint instead of
97
+ * paginating through dstAfs. Useful when the remote side has a manifest endpoint.
98
+ */
99
+ dstFetchManifest?: (basePath: string, since?: number) => Promise<SyncManifest>;
100
+ /**
101
+ * Phase 3: If provided, enable checkpoint-based resume-on-failure.
102
+ * transferFiles() will persist progress to sync_checkpoint table and resume
103
+ * from the last completed file if interrupted.
104
+ */
105
+ checkpointOptions?: {
106
+ metadataDb: MetadataDB;
107
+ direction: string;
108
+ remoteUrl: string;
109
+ basePath: string;
110
+ };
111
+ }
112
+ interface BuildManifestOptions {
113
+ /**
114
+ * If provided, fetch manifest from a remote server endpoint instead of
115
+ * paginating through the AFS. The `afs` parameter is unused when this is set.
116
+ */
117
+ fetchManifest?: (basePath: string, since?: number) => Promise<SyncManifest>;
118
+ /** Only return files modified after this timestamp (ms). Passed to fetchManifest. */
119
+ since?: number;
120
+ /**
121
+ * Phase 2: If provided (together with localRootPath + localScope), build the
122
+ * manifest by calling reconcile() then querying _metadata.db directly.
123
+ * This replaces the O(N) full stat+read+CID scan with an O(1) SQL query.
124
+ */
125
+ localMetadataDb?: MetadataDB;
126
+ /** Root directory of the user's DID space (required when localMetadataDb is set). */
127
+ localRootPath?: string;
128
+ /** userDid / scope for the entries query (required when localMetadataDb is set). */
129
+ localScope?: string;
130
+ /**
131
+ * Task 1.3: explicit opt-out — skip both the explicit DB params and the
132
+ * metadata context attached by DIDSpace, and fall through to the legacy
133
+ * AFS pagination path. Used for back-compat testing + rare callers that
134
+ * must re-scan the filesystem from scratch.
135
+ */
136
+ skipLocalMetadataDb?: boolean;
137
+ }
138
+ /**
139
+ * Fetch a file manifest from a remote server's POST /api/space/manifest endpoint.
140
+ *
141
+ * This replaces the N-request paginated list + per-file CID read with a single
142
+ * request that returns the complete manifest directly from the server's D1 index.
143
+ *
144
+ * @param baseUrl Server base URL (e.g. "https://computer.afsd.dev")
145
+ * @param authHeader Authorization header value (e.g. "Bearer <token>")
146
+ * @param basePath Path within the space (e.g. "/" or "/blocklets/z1blk/")
147
+ * @param since Optional: only return files modified after this ms timestamp
148
+ * @param fetchFn Optional fetch override (for testing)
149
+ */
150
+ declare function fetchRemoteManifest(baseUrl: string, authHeader: string, basePath: string, since?: number, fetchFn?: typeof globalThis.fetch): Promise<SyncManifest>;
151
+ declare function buildManifest(afs: AFS, basePath: string, options?: BuildManifestOptions): Promise<SyncManifest>;
152
+ declare function computeDiff(src: SyncManifest, dst: SyncManifest, options?: Pick<SyncOptions, "delete">): SyncDiff;
153
+ declare function runWithConcurrency(tasks: Array<() => Promise<void>>, limit: number): Promise<void>;
154
+ declare function syncDIDSpace(srcAfs: AFS, dstAfs: AFS, basePath: string, options?: SyncOptions): Promise<SyncResult>;
155
+ //#endregion
156
+ export { BuildManifestOptions, FileFingerprint, SyncDiff, SyncDiffEntry, SyncManifest, SyncOptions, SyncProgress, SyncResult, buildManifest, computeDiff, fetchRemoteManifest, runWithConcurrency, syncDIDSpace };
157
+ //# sourceMappingURL=rsync.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsync.d.cts","names":[],"sources":["../src/rsync.ts"],"mappings":";;;;UAuCiB,eAAA;EACf,IAAA;EACA,IAAA;EACA,GAAA;EACA,KAAA;AAAA;AAAA,UAGe,YAAA;EAgCN;;AAGX;;;;;AAKA;;;EA7BE,KAAA,EAAO,eAAA;EA8BP;;;;;;EAvBA,OAAA,GAAU,eAAA;EAwB0D;;AAGtE;;;;;;;;;;EAdE,WAAA;EACA,SAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;EACA,MAAA;AAAA;AAAA,UAGe,QAAA;EACf,OAAA,EAAS,aAAA;EACT,KAAA;IAAS,KAAA;IAAe,QAAA;IAAkB,OAAA;IAAiB,SAAA;EAAA;AAAA;AAAA,UAG5C,YAAA;EACf,KAAA;EACA,UAAA;EACA,cAAA;EACA,UAAA;EACA,gBAAA;EACA,MAAA,EAAQ,KAAA;IAAQ,IAAA;IAAc,KAAA;EAAA;EAC9B,SAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,OAAA;EACA,IAAA,EAAM,QAAA;EACN,WAAA;EACA,QAAA;EACA,MAAA,EAAQ,KAAA;IAAQ,IAAA;IAAc,KAAA;EAAA;EAC9B,UAAA;AAAA;AAAA,UAGe,WAAA;EACf,MAAA;EACA,MAAA;EACA,MAAA;EACA,WAAA;EACA,UAAA,IAAc,QAAA,EAAU,YAAA;EAOiC;EALzD,UAAA,IAAc,IAAA;EAUd;;;;EALA,gBAAA,IAAoB,QAAA,UAAkB,KAAA,cAAmB,OAAA,CAAQ,YAAA;EAWjE;;;;EANA,gBAAA,IAAoB,QAAA,UAAkB,KAAA,cAAmB,OAAA,CAAQ,YAAA;EAU/D;;;AAIJ;;EARE,iBAAA;IACE,UAAA,EAAY,UAAA;IACZ,SAAA;IACA,SAAA;IACA,QAAA;EAAA;AAAA;AAAA,UAIa,oBAAA;EAKoB;;;;EAAnC,aAAA,IAAiB,QAAA,UAAkB,KAAA,cAAmB,OAAA,CAAQ,YAAA;EAQ5C;EANlB,KAAA;EAUA;;;;AA6BF;EAjCE,eAAA,GAAkB,UAAA;;EAElB,aAAA;EAqCS;EAnCT,UAAA;EAmCQ;;;;;;EA5BR,mBAAA;AAAA;;;;;;AAoEF;;;;;;;iBA9CsB,mBAAA,CACpB,OAAA,UACA,UAAA,UACA,QAAA,UACA,KAAA,WACA,OAAA,UAAgB,UAAA,CAAW,KAAA,GAC1B,OAAA,CAAQ,YAAA;AAAA,iBAwCW,aAAA,CACpB,GAAA,EAAK,GAAA,EACL,QAAA,UACA,OAAA,GAAU,oBAAA,GACT,OAAA,CAAQ,YAAA;AAAA,iBAwFK,WAAA,CACd,GAAA,EAAK,YAAA,EACL,GAAA,EAAK,YAAA,EACL,OAAA,GAAU,IAAA,CAAK,WAAA,cACd,QAAA;AAAA,iBA4LmB,kBAAA,CACpB,KAAA,EAAO,KAAA,OAAY,OAAA,SACnB,KAAA,WACC,OAAA;AAAA,iBAyDmB,YAAA,CACpB,MAAA,EAAQ,GAAA,EACR,MAAA,EAAQ,GAAA,EACR,QAAA,UACA,OAAA,GAAU,WAAA,GACT,OAAA,CAAQ,UAAA"}