@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,524 @@
1
+ import { TreeQueryResult, TreeQuerySpec } from "./tree-query.mjs";
2
+ import { DirtyPathRow, ListDirtyPathOptions } from "./dirty-path-queue.mjs";
3
+
4
+ //#region src/tree-index.d.ts
5
+ interface TreeEntry {
6
+ cid: string;
7
+ size: number;
8
+ mtime: number;
9
+ ctime: number;
10
+ mimeType?: string;
11
+ /**
12
+ * Inline copy of the entry's bytes (Layer 0 inline-content capability, see
13
+ * `inline-content.ts`). cid-verified: when present, `hash(content) === cid`
14
+ * holds — the cid stays the identity; content is a co-located copy.
15
+ *
16
+ * On `put`: an index constructed with `inlineCache: "on"` stores text
17
+ * content ≤ its threshold (verified against cid, mismatch rejected);
18
+ * default-off indexes ignore the field (byte-identical legacy behavior).
19
+ * Passing NO content on overwrite clears any prior inline copy — the
20
+ * column can never go stale relative to the cid.
21
+ *
22
+ * On reads: `get` returns it when stored; `listEntries`/`listChildren`
23
+ * include it ONLY under `{ includeContent: true }` (default projection
24
+ * stays content-free).
25
+ */
26
+ content?: string;
27
+ /**
28
+ * Application metadata (planning/agent-hub/metadata-foundation.md).
29
+ * Stores `AFSWriteEntryPayload.meta` — application-level dimension
30
+ * fields the application uses for collection-query `meta.*` paths.
31
+ *
32
+ * Provider-computed fields (`kind / size / cid / mimeType`) are NOT in
33
+ * here — they live in their own TreeEntry properties / columns and the
34
+ * provider merges them on top at read time.
35
+ *
36
+ * On `put`: persisted as a JSON blob to the `entries.metadata` column.
37
+ * Undefined / empty object → stored as NULL.
38
+ *
39
+ * On reads: returned exactly as written (after provider-reserved fields
40
+ * are stripped by the application-layer write path).
41
+ */
42
+ metadata?: Record<string, unknown>;
43
+ /**
44
+ * Dedup-on-write secondary-index columns (#1159). Together they back the
45
+ * `(scope, dedup_scope, dedup_key)` partial UNIQUE index that resolves a
46
+ * dedup write to at-most-one entry — replacing the old cid-in-path scheme.
47
+ *
48
+ * - `dedupScope`: the COLLECTION the record dedups within (the write `path`
49
+ * argument, e.g. `user/items`). Decoupled from the row's physical `parent`
50
+ * so a flat `{coll}/{uuid}.json` and a legacy dir-per-record
51
+ * `{coll}/{uuid}/item.json` dedup against the SAME scope.
52
+ * - `dedupKey`: the normalized identity value (e.g. `normalizeItemUrl(url)`).
53
+ *
54
+ * Set ONLY by the provider's dedup write path (and the reindex seam); a plain
55
+ * write leaves them undefined. On overwrite the SQL upserts COALESCE the
56
+ * existing value when the incoming entry omits them, so a non-dedup edit of a
57
+ * dedup row never drops it out of the index.
58
+ */
59
+ dedupScope?: string;
60
+ dedupKey?: string;
61
+ }
62
+ interface TreeIndexListOptions {
63
+ limit?: number;
64
+ cursor?: string;
65
+ /**
66
+ * Include each entry's inline `content` (when stored) in the result.
67
+ * Default OFF — the default SELECT never touches the content column, so
68
+ * every existing list path is zero-regression, zero extra bytes. Entries
69
+ * without an inline copy come back without `content` (best-effort).
70
+ */
71
+ includeContent?: boolean;
72
+ /**
73
+ * Sort column. `name` is `listChildren`'s historical hardcoded default,
74
+ * now explicit (the `entries` table has a `name` column, so `list` /
75
+ * `listEntries` map it naturally too).
76
+ *
77
+ * Semantics when set (all three impls, enforced by
78
+ * `test/tree-index-order.test.ts`):
79
+ * - tiebreak on the listing's unique key (`name` for `listChildren`,
80
+ * `path` for `list`/`listEntries`), same direction;
81
+ * - missing values (NULL `mime_type`) sort LAST regardless of direction;
82
+ * - the resume cursor is the keyset v2 format (`v2:<b64>:<b64>`, see
83
+ * {@link buildKeysetCursor}) so duplicate sort values never skip rows
84
+ * across a page boundary;
85
+ * - a legacy (non-v2) cursor combined with `orderBy` is rejected.
86
+ *
87
+ * When UNSET the listing keeps its historical byte-identical behavior:
88
+ * `listChildren` orders by `name` with a plain name-string cursor;
89
+ * `list`/`listEntries` order by `path` with a plain sort-value cursor.
90
+ */
91
+ orderBy?: "path" | "mtime" | "size" | "ctime" | "mimeType" | "name";
92
+ order?: "asc" | "desc";
93
+ }
94
+ /** Decoded keyset cursor: the last row's sort value + unique tiebreak value. */
95
+ interface TreeKeysetCursor {
96
+ /** Raw sort-column value of the last row; `null` for NULL (missing) values. */
97
+ sortValue: string | number | null;
98
+ /** Unique tiebreak value of the last row (`name` or `path`). */
99
+ tie: string;
100
+ }
101
+ /** Build a v2 keyset cursor: `v2:<b64(json(sortValue))>:<b64(tie)>`. */
102
+ declare function buildKeysetCursor(sortValue: string | number | null, tie: string): string;
103
+ type ParsedTreeCursor = {
104
+ kind: "none";
105
+ } | {
106
+ kind: "legacy";
107
+ value: string;
108
+ } | {
109
+ kind: "v2";
110
+ cursor: TreeKeysetCursor;
111
+ };
112
+ /**
113
+ * Parse a list cursor. Shared by all three TreeIndex impls so the
114
+ * legacy-vs-v2 dance can never drift between them.
115
+ *
116
+ * - undefined → none
117
+ * - `v2:`-prefixed → keyset cursor; REQUIRES `hasOrderBy` (a keyset cursor
118
+ * replayed onto a default-order listing would be a wrong page); malformed
119
+ * payloads throw a clean error instead of producing a wrong page.
120
+ * - anything else → legacy plain cursor, accepted ONLY for default
121
+ * (no-orderBy) order.
122
+ */
123
+ declare function parseTreeCursor(cursor: string | undefined, hasOrderBy: boolean): ParsedTreeCursor;
124
+ /** SQL fragments for an ordered, keyset-resumable listing. */
125
+ interface OrderedQueryParts {
126
+ /** Extra WHERE condition (empty string when no cursor). */
127
+ cursorWhereSql: string;
128
+ cursorArgs: Array<string | number>;
129
+ /** ORDER BY clause body (without the `ORDER BY` keyword). */
130
+ orderSql: string;
131
+ }
132
+ /**
133
+ * Build the ORDER BY + keyset-resume WHERE for an ordered listing. Shared
134
+ * by SQLiteTreeIndex and D1TreeIndex (identical SQL dialect).
135
+ *
136
+ * - Missing values sort LAST regardless of direction: nullable columns get
137
+ * a leading `(col IS NULL) ASC` term. Non-nullable columns skip it so the
138
+ * `(scope, parent, col, name)` indexes stay usable.
139
+ * - Resume uses the expansion `col > ? OR (col = ? AND tie > ?)` (row-value
140
+ * free — works on every SQLite the runtimes target) plus NULL-run
141
+ * handling for nullable columns.
142
+ */
143
+ declare function buildOrderedQueryParts(opts: {
144
+ col: string;
145
+ nullable: boolean;
146
+ order: "asc" | "desc";
147
+ tieCol: string;
148
+ cursor?: TreeKeysetCursor;
149
+ }): OrderedQueryParts;
150
+ /**
151
+ * In-memory equivalents of the SQL ordering semantics, used by
152
+ * MemoryTreeIndex so all three impls stay in lockstep.
153
+ */
154
+ declare function compareTreeSortValues(a: string | number | null, b: string | number | null, order: "asc" | "desc"): number;
155
+ /** Keyset predicate mirroring {@link buildOrderedQueryParts}'s WHERE. */
156
+ declare function keysetAfter(rowSort: string | number | null, rowTie: string, cursor: TreeKeysetCursor, order: "asc" | "desc"): boolean;
157
+ interface TreeIndexListResult {
158
+ entries: Array<{
159
+ path: string;
160
+ }>;
161
+ hasMore: boolean;
162
+ cursor?: string;
163
+ }
164
+ interface TreeIndexListEntriesResult {
165
+ entries: Array<{
166
+ path: string;
167
+ } & TreeEntry>;
168
+ hasMore: boolean;
169
+ cursor?: string;
170
+ }
171
+ /**
172
+ * Options for mutation methods (Task 2.4a — atomic changelog write).
173
+ *
174
+ * Every put/delete/putBatch/deleteByPrefix call carries:
175
+ * - `deviceId`: opaque per-device identifier persisted into the changelog row.
176
+ * Required, non-empty, ≤ 128 bytes. Validated at runtime by
177
+ * `validateDeviceId()` in `changelog-write.ts`.
178
+ * - `skipChangelog`: when `true`, the underlying TreeIndex writes the `entries`
179
+ * row but skips the corresponding `changelog` INSERT. Used by
180
+ * Task 2.4b to exempt blocklet-publish CLI uploads (the publish
181
+ * flow is already batched and does not need per-file sync fan-out).
182
+ *
183
+ * Strict-TypeScript design: `opts` is a REQUIRED trailing parameter on every
184
+ * mutation method (see `tree-index.ts`). Callers that go through the `TreeIndex`
185
+ * interface (e.g. `CloudflareDIDSpace`, `DIDSpaceProvider`) get a compile-time
186
+ * error if they omit `opts` — that is the enforcement point for Phase 2 sync.
187
+ */
188
+ interface PutOpts {
189
+ /** Required. Non-empty string ≤ 128 bytes. Written into `changelog.device_id`. */
190
+ deviceId: string;
191
+ /**
192
+ * Optional client mtime (unix millis) written into `changelog.mtime` for
193
+ * delete/deleteByPrefix rows (T1.5). When absent, implementations fall back to
194
+ * the server clock (`Date.now()`). `put` carries its mtime via the `TreeEntry`,
195
+ * so this only affects the delete paths where there is no entry to read it from.
196
+ */
197
+ mtime?: number;
198
+ /** When `true`, skip the `changelog` INSERT. Default `false`. */
199
+ skipChangelog?: boolean;
200
+ }
201
+ /**
202
+ * In-memory shape of a `changelog` row.
203
+ *
204
+ * Matches the D1/libsql row shape 1:1 so MemoryTreeIndex tests can assert
205
+ * against the same fields that production code will see on the wire. Exposed
206
+ * via `MemoryTreeIndex.getChangelogSnapshot()` for unit tests.
207
+ */
208
+ interface ChangelogEntry {
209
+ /** Monotonically increasing row ID (1-based in MemoryTreeIndex; AUTOINCREMENT in D1). */
210
+ seq: number;
211
+ scope: string;
212
+ path: string;
213
+ op: "put" | "delete";
214
+ /** `null` on delete rows; non-null on put rows. */
215
+ cid: string | null;
216
+ /** `null` on first write; prior cid on overwrite/delete. */
217
+ old_cid: string | null;
218
+ /** `null` on delete rows; file size on put rows. */
219
+ size: number | null;
220
+ mtime: number;
221
+ device_id: string;
222
+ }
223
+ /** Per-entry options for the batch sync fast path. */
224
+ interface BatchEntryOpts {
225
+ /** Required. Written into `changelog.device_id` (echo prevention / LWW). */
226
+ deviceId: string;
227
+ /** Client mtime for DELETE changelog rows (put rows take mtime from the entry). */
228
+ mtime?: number;
229
+ /** Optimistic-concurrency precondition against the current entry cid. */
230
+ ifMatch?: string;
231
+ }
232
+ interface BatchPutEntry {
233
+ path: string;
234
+ entry: TreeEntry;
235
+ opts: BatchEntryOpts;
236
+ }
237
+ interface BatchDeleteEntry {
238
+ path: string;
239
+ opts: BatchEntryOpts;
240
+ }
241
+ /** Conflict triple — mirrors the single-op AFSConflictError fields
242
+ * (deviceId is null, exactly like the single write path which never reads it). */
243
+ interface BatchEntryConflict {
244
+ currentCid: string | null;
245
+ currentMtime: number | null;
246
+ currentDeviceId: string | null;
247
+ }
248
+ interface BatchPutEntryResult {
249
+ path: string;
250
+ /** Prior cid when the path existed (drives the caller's GC enqueue). */
251
+ oldCid?: string;
252
+ /** Skip-if-unchanged hit: same cid+mimeType — no changelog row, no watermark bump. */
253
+ skipped?: boolean;
254
+ /** Present iff the entry failed its ifMatch precondition (nothing written). */
255
+ conflict?: BatchEntryConflict;
256
+ /** Non-conflict per-entry failure (e.g. quota) — message parity with single put. */
257
+ error?: string;
258
+ /**
259
+ * Stable code for a non-conflict failure (upload-limits Phase 5):
260
+ * `STORAGE_QUOTA_EXCEEDED` on a file-count OR byte-quota rejection. Lets a
261
+ * consumer distinguish quota from other per-entry errors (the single-put path
262
+ * carries it on the thrown Error's `.code`).
263
+ */
264
+ code?: string;
265
+ /** This entry's own watermark seq (+1 per write, batch-order ascending).
266
+ * Absent for skip/conflict/error entries and root-level paths (no collection root). */
267
+ liveSeq?: number;
268
+ }
269
+ interface BatchDeleteEntryResult {
270
+ path: string;
271
+ /** The deleted entry's cid (drives the caller's GC enqueue). */
272
+ deletedCid?: string;
273
+ /** Path had no file entry — per-entry not-found, never aborts neighbors. */
274
+ notFound?: boolean;
275
+ conflict?: BatchEntryConflict;
276
+ error?: string;
277
+ liveSeq?: number;
278
+ }
279
+ /** Shared context: a caller-supplied preread snapshot (one IN query reused
280
+ * across the provider's preflight AND the index batch — design §4.3). */
281
+ interface BatchIndexContext {
282
+ preread?: Map<string, TreeEntry | null>;
283
+ }
284
+ interface TreeIndex {
285
+ /**
286
+ * Read a single file's metadata. `includeContent` (default true) projects the
287
+ * inline `content` copy; metadata-only callers (stat / list / readMeta) pass
288
+ * `false` to skip marshalling the inline bytes. A projection hint — an
289
+ * in-memory backend may still return content (zero marshalling cost there).
290
+ */
291
+ get(path: string, opts?: {
292
+ includeContent?: boolean;
293
+ }): Promise<TreeEntry | null>;
294
+ /**
295
+ * Read a directory row's own `ctime`/`mtime`. Directory rows are scaffolded
296
+ * by the put path (`ancestorDirs` + `buildDirChainStmt`) with no `cid`, so
297
+ * {@link get} — which returns null for cid-less rows — never surfaces them.
298
+ * This is the read used to expose a directory's created/modified time on
299
+ * `stat` (the file path already returns them via {@link get}).
300
+ *
301
+ * `dirPath` is the trailing-slash index key (e.g. `user/photos/`), i.e. the
302
+ * value {@link treeListPrefix} produces. Returns null for a directory with
303
+ * no scaffolded row (the absolute scope root, or an as-yet-unwritten dir).
304
+ *
305
+ * Optional: callers MUST guard and simply omit the timestamps when an
306
+ * implementation does not provide it.
307
+ */
308
+ getDirTimes?(dirPath: string): Promise<{
309
+ ctime: number;
310
+ mtime: number;
311
+ } | null>;
312
+ /**
313
+ * Batch metadata read for the sync fast path's ONE-query preflight
314
+ * (afs-rpc-batch §4.3). Returns a map with an entry for EVERY requested
315
+ * path (`null` when absent). Optional: callers fall back to per-path `get`.
316
+ */
317
+ getMany?(paths: string[]): Promise<Map<string, TreeEntry | null>>;
318
+ /**
319
+ * Batch `get(filePath)` + `hasChildren(dirPrefix)` in a single storage
320
+ * round-trip. Used by `readHandler` to cut miss-path D1 calls in half:
321
+ * a non-existent file previously paid `get` + `hasChildren` sequentially
322
+ * (2 HTTP round-trips); this collapses both into one batch call.
323
+ * Optional — callers fall back to sequential `get` + `hasChildren` when absent.
324
+ */
325
+ getAndHasChildren?(filePath: string, dirPrefix: string): Promise<[TreeEntry | null, boolean]>;
326
+ /**
327
+ * Batch sync fast path (afs-rpc-batch P3) — per-entry opts
328
+ * (deviceId/mtime/ifMatch) and per-entry results (oldCid / skipped /
329
+ * conflict / liveSeq). Entries arrive with UNIQUE paths (the core splits
330
+ * duplicate-path batches) so a one-shot preread is serial-equivalent.
331
+ * Watermark semantics match single `put`: +1 per written entry, each
332
+ * result carrying its own seq. See the section comment above for why this
333
+ * is NOT the legacy `putBatch`.
334
+ */
335
+ batchPutEntries?(entries: BatchPutEntry[], ctx?: BatchIndexContext): Promise<BatchPutEntryResult[]>;
336
+ /** Delete twin of {@link batchPutEntries}. FILE entries only (no dir fallback). */
337
+ batchDeleteEntries?(entries: BatchDeleteEntry[], ctx?: BatchIndexContext): Promise<BatchDeleteEntryResult[]>;
338
+ /** Write/update file metadata (ctime preserved by implementation). Returns previous CID if entry existed. */
339
+ put(path: string, entry: TreeEntry, opts: PutOpts): Promise<{
340
+ oldCid?: string;
341
+ }>;
342
+ /**
343
+ * Dedup-on-write lookup (#1159): resolve the single entry whose
344
+ * `(dedup_scope, dedup_key)` matches within this scope, or `null`. Backed by
345
+ * the `(scope, dedup_scope, dedup_key)` partial UNIQUE index → O(log n) point
346
+ * seek, never a `json_extract` full scan. Returns the entry's REAL path so the
347
+ * provider can merge into it in place.
348
+ *
349
+ * Optional during rollout: a TreeIndex without it makes the owning provider
350
+ * treat `dedupBy` writes as unsupported (explicit error, never silent).
351
+ */
352
+ findByDedupKey?(dedupScope: string, dedupKey: string): Promise<({
353
+ path: string;
354
+ } & TreeEntry) | null>;
355
+ /**
356
+ * Populate the dedup columns of an EXISTING row WITHOUT rewriting its
357
+ * content/cid or emitting a changelog row — the one-time reindex/backfill seam
358
+ * (#1159, deferred script). Index-only UPDATE keyed on `(scope, path)`. No-op
359
+ * if the path has no row. Optional: reindex callers guard on its presence.
360
+ */
361
+ setDedupKey?(path: string, dedupScope: string, dedupKey: string, opts: PutOpts): Promise<void>;
362
+ /**
363
+ * Resolve the inline `content` this entry WOULD store under the index's
364
+ * configured inline policy (or `null` for "store NULL"). Exposed so
365
+ * {@link loopBatchPutEntries} can mirror D1's content-aware skip — a cid+mime
366
+ * match whose inline column is out of sync must fall through to `put()` to
367
+ * self-repair, instead of being early-skipped. Optional: indexes without
368
+ * inline support omit it and the loop keeps the legacy cid+mime skip.
369
+ */
370
+ inlineForEntry?(entry: TreeEntry): Promise<string | null>;
371
+ /** Delete a single file */
372
+ delete(path: string, opts: PutOpts): Promise<void>;
373
+ /** List entries under a prefix (for directory browsing) */
374
+ list(prefix: string, options?: TreeIndexListOptions): Promise<TreeIndexListResult>;
375
+ /** List entries with full metadata under a prefix */
376
+ listEntries(prefix: string, options?: TreeIndexListOptions): Promise<TreeIndexListEntriesResult>;
377
+ /** Check if prefix has any child entries (directory existence) */
378
+ hasChildren(prefix: string): Promise<boolean>;
379
+ /** Count entries under a prefix (exact value) */
380
+ count(prefix: string): Promise<number>;
381
+ /** Bulk-delete all entries under a prefix, return count deleted */
382
+ deleteByPrefix(prefix: string, opts: PutOpts): Promise<number>;
383
+ /** List direct children of a parent directory (uses parent index) */
384
+ listChildren(parent: string, options?: TreeIndexListOptions): Promise<TreeIndexListEntriesResult>;
385
+ /** Count direct children of a parent directory (exact, O(log n)) */
386
+ countChildren(parent: string): Promise<number>;
387
+ /**
388
+ * Count direct children for EACH of the given parent directories in one
389
+ * round-trip, returned as `Map<parentPath, count>` keyed by the same path
390
+ * form `listChildren` yields for a directory child (trailing-slash, and —
391
+ * for {@link PrefixedTreeIndex} — prefix-stripped).
392
+ *
393
+ * PAGE-BOUNDED by contract: callers pass only the directories on the page
394
+ * being listed, so the cost is Σ direct children of those dirs. This
395
+ * replaces the retired subtree-wide `countChildrenGrouped(prefix)`, whose
396
+ * `parent >= lo AND parent < hi` range scanned EVERY descendant (all
397
+ * depths) under the listed prefix on every list — ~100M+ D1 rows_read/day
398
+ * once a hot collection grew to ~1k dirs (2026-06 free-tier exhaustion).
399
+ *
400
+ * Optional: callers MUST fall back to per-path {@link countChildren} when
401
+ * an implementation does not provide it. The returned map omits empty
402
+ * directories (count 0) — look up with `map.get(path) ?? 0`.
403
+ */
404
+ countChildrenMany?(parents: string[]): Promise<Map<string, number>>;
405
+ /** Get aggregate stats (file count + total size) for a prefix */
406
+ aggregate(prefix: string): Promise<{
407
+ fileCount: number;
408
+ totalSize: number;
409
+ }>;
410
+ /** Batch write entries in a transaction */
411
+ putBatch(entries: Array<{
412
+ path: string;
413
+ entry: TreeEntry;
414
+ }>, opts: PutOpts): Promise<void>;
415
+ /** List entries modified since a timestamp */
416
+ listModifiedSince(prefix: string, since: number, options?: TreeIndexListOptions): Promise<TreeIndexListEntriesResult>;
417
+ /**
418
+ * Return the maximum changelog seq for this scope.
419
+ * Used by `DIDSpaceProvider.list(path, { maxDepth: -1 })` to include
420
+ * the snapshot waterline in `meta.cursor`. Returns 0 when the changelog
421
+ * is empty (no writes have been recorded yet).
422
+ */
423
+ getMaxSeq(): Promise<number>;
424
+ /**
425
+ * Read the per-prefix watermark `version` for a collection root (Live Update
426
+ * Resilience §11.4). `prefix` is a scope-relative path; the implementation
427
+ * reduces it to its first path segment (the `/user` first-level collection
428
+ * root) and returns that row's `version`, or `0` when no row exists yet
429
+ * ("nothing written under this collection root").
430
+ *
431
+ * This is the O(1) change-detector that web reconcile reads on every
432
+ * connection edge: it never scans the changelog and never grows with history
433
+ * or global write volume. Optional during rollout — a TreeIndex without it
434
+ * leaves the owning provider unable to emit `liveSeq` (consumer falls back to
435
+ * full re-list on every edge/poll, still correct).
436
+ *
437
+ * Tri-state return:
438
+ * - `null` — the path has no collection root (no watermark key): the owner
439
+ * emits NO `liveSeq`, consumers stay on the conservative full-refetch path.
440
+ * - `0` — valid collection root with no writes yet: the owner emits
441
+ * `liveSeq: "0"` so consumers baseline at 0 and DON'T refetch every poll
442
+ * tick on a read-only collection (the first write bumps to 1 > 0).
443
+ * - `>0` — the row's version.
444
+ */
445
+ getPrefixWatermark?(prefix: string): Promise<number | null>;
446
+ /**
447
+ * Return changelog rows with `seq > sinceSeq` (ascending), capped at `limit`.
448
+ *
449
+ * `cursor` is the highest **inner** seq this scan observed — NOT the seq of
450
+ * the last returned entry. This distinction matters for {@link
451
+ * PrefixedTreeIndex}: when a prefix filter drops every row on a page, the page
452
+ * returns `entries: []` but `cursor` still advances to the max inner seq so
453
+ * the caller never re-requests the same window (no infinite loop on empty
454
+ * pages). `hasMore` follows the inner pagination ("are there more inner rows
455
+ * with seq > cursor"), not "are there more rows under this prefix".
456
+ *
457
+ * On an empty changelog (or no rows past `sinceSeq`) returns
458
+ * `{ entries: [], hasMore: false, cursor: sinceSeq }` — cursor never goes
459
+ * backwards.
460
+ */
461
+ getChangelogSince(sinceSeq: number, limit: number): Promise<{
462
+ entries: ChangelogEntry[];
463
+ hasMore: boolean;
464
+ cursor: number;
465
+ }>;
466
+ /**
467
+ * Compaction watermark for this scope (Phase 1 of changelog compaction).
468
+ * Returns 0 when no compaction has ever run (safe permissive default).
469
+ */
470
+ getCompactedBelowSeq?(): Promise<number>;
471
+ /**
472
+ * Collection query over DIRECT children of `parent` (afs-collection-query
473
+ * Phase 1, design §3.5): typed where σ on the record document (doc-joined
474
+ * for dir-per-record, inline content for file-per-record), entry-column
475
+ * orderBy, exact post-WHERE total, keyset/offset pagination, groupBy
476
+ * counting. Spec semantics are locked to the core reference evaluator by
477
+ * conformance + the cross-backend lockstep test (`tree-query.ts`).
478
+ *
479
+ * Optional during rollout: implementations without it leave the owning
480
+ * provider undeclared (the root action then fails AFS_UNSUPPORTED).
481
+ */
482
+ query?(parent: string, spec: TreeQuerySpec): Promise<TreeQueryResult>;
483
+ /**
484
+ * True if `cid` is referenced within THIS index's VIEW (read-**auth**,
485
+ * design §4.1) — three-way `entries.cid ∪ changelog.cid ∪ changelog.old_cid`,
486
+ * always `WHERE scope = ?`.
487
+ *
488
+ * `pathPrefix` (default `""`) restricts the check to a sub-tree
489
+ * (`path >= lo AND path < hi`). {@link PrefixedTreeIndex} passes its own
490
+ * prefix so a blocklet/role provider authorizes ONLY cids its own fragment
491
+ * references (P0#2 blocklet isolation); the unprefixed space-root provider
492
+ * leaves it `""` and stays whole-scope.
493
+ *
494
+ * This is the authorization check, distinct from the scope-blind,
495
+ * entries-only GC-liveness check `referencedAnywhere` (design §3, §4.4b).
496
+ * Returns false for empty `cid`.
497
+ */
498
+ isReferenced(cid: string, pathPrefix?: string): Promise<boolean>;
499
+ /**
500
+ * Batch read-auth (download plane, design §7.2): given a set of cids, return
501
+ * the SUBSET that is referenced within THIS index's VIEW — exactly the cids
502
+ * for which {@link isReferenced} would return `true`. A cid NOT in the result
503
+ * is `forbidden` (covers both unreferenced AND not-found — never distinguish).
504
+ *
505
+ * MUST be three-way-equivalent to per-cid `isReferenced`
506
+ * (`entries.cid ∪ changelog.cid ∪ changelog.old_cid`, scope-aware, optionally
507
+ * prefix-local) — a superseded cid that left `entries` but lives in
508
+ * `changelog.old_cid` MUST still be returned, or the read-auth invariant
509
+ * breaks (design Finding 2). The SQL backends shard the `IN (?,…)` list to
510
+ * stay under the bound-parameter cap (D1 = 100; the three-way UNION binds each
511
+ * cid 3×, so the per-query cid budget is small). Empty input → empty set, no
512
+ * query (avoid `IN ()`).
513
+ */
514
+ isReferencedMany(cids: string[], pathPrefix?: string): Promise<Set<string>>;
515
+ /** Ready dirty rows under `prefix` with `next_attempt_at <= now`, capped at `limit`. */
516
+ listDirtyPaths?(options: ListDirtyPathOptions): Promise<DirtyPathRow[]>;
517
+ /** Guarded ack: delete the dirty row iff its `latest_seq` still equals `latestSeq`. */
518
+ ackDirtyPath?(path: string, latestSeq: number): Promise<boolean>;
519
+ /** Guarded failure record: bump attempts + set last_error/next_attempt_at on the matching row. */
520
+ markDirtyPathError?(path: string, latestSeq: number, error: string, nextAttemptAt: number): Promise<boolean>;
521
+ }
522
+ //#endregion
523
+ export { BatchDeleteEntry, BatchDeleteEntryResult, BatchIndexContext, BatchPutEntry, BatchPutEntryResult, ChangelogEntry, OrderedQueryParts, ParsedTreeCursor, PutOpts, TreeEntry, TreeIndex, TreeIndexListEntriesResult, TreeIndexListOptions, TreeIndexListResult, TreeKeysetCursor, buildKeysetCursor, buildOrderedQueryParts, compareTreeSortValues, keysetAfter, parseTreeCursor };
524
+ //# sourceMappingURL=tree-index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-index.d.mts","names":[],"sources":["../src/tree-index.ts"],"mappings":";;;;UA0BiB,SAAA;EACf,GAAA;EACA,IAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EA2ImC;;;;;;;;AAoCrC;;;;;AAqBA;;EApLE,OAAA;EAoLgC;;AAIlC;;;;;;;;;;;;AAgBA;EAxLE,QAAA,GAAW,MAAA;;;;;;;;AAsNb;;;;;;;;;EArME,UAAA;EACA,QAAA;AAAA;AAAA,UAyFe,oBAAA;EACf,KAAA;EACA,MAAA;EAkNkC;;;;;;EA3MlC,cAAA;EA8MA;;;AAGF;;;;;;;;;;;;AAuBA;;;;EApNE,OAAA;EACA,KAAA;AAAA;;UAMe,gBAAA;EAkOA;EAhOf,SAAA;;EAEA,GAAA;AAAA;;iBAiBc,iBAAA,CAAkB,SAAA,0BAAmC,GAAA;AAAA,KAIzD,gBAAA;EACN,IAAA;AAAA;EACA,IAAA;EAAgB,KAAA;AAAA;EAChB,IAAA;EAAY,MAAA,EAAQ,gBAAA;AAAA;;;;;;;;;AAyO1B;;;iBA5NgB,eAAA,CAAgB,MAAA,sBAA4B,UAAA,YAAsB,gBAAA;;UA8BjE,iBAAA;EAgMR;EA9LP,cAAA;EACA,UAAA,EAAY,KAAA;EA8LQ;EA5LpB,QAAA;AAAA;;;;;;;;;AAsMF;;;iBAxLgB,sBAAA,CAAuB,IAAA;EACrC,GAAA;EACA,QAAA;EACA,KAAA;EACA,MAAA;EACA,MAAA,GAAS,gBAAA;AAAA,IACP,iBAAA;;;;;iBA0CY,qBAAA,CACd,CAAA,0BACA,CAAA,0BACA,KAAA;;iBAkBc,WAAA,CACd,OAAA,0BACA,MAAA,UACA,MAAA,EAAQ,gBAAA,EACR,KAAA;AAAA,UAae,mBAAA;EACf,OAAA,EAAS,KAAA;IAAQ,IAAA;EAAA;EACjB,OAAA;EACA,MAAA;AAAA;AAAA,UAGe,0BAAA;EACf,OAAA,EAAS,KAAA;IAAQ,IAAA;EAAA,IAAiB,SAAA;EAClC,OAAA;EACA,MAAA;AAAA;;;;;;AAkIF;;;;;;;;;AAqHA;;;UAnOiB,OAAA;EA0OyC;EAxOxD,QAAA;EA+P+C;;;;;;EAxP/C,KAAA;EA+QW;EA7QX,aAAA;AAAA;;;;;;;;UAUe,cAAA;EAmSwD;EAjSvE,GAAA;EACA,KAAA;EACA,IAAA;EACA,EAAA;EA2SqC;EAzSrC,GAAA;EA4S8D;EA1S9D,OAAA;EA6SsC;EA3StC,IAAA;EACA,KAAA;EACA,SAAA;AAAA;;UAae,cAAA;EA0SwB;EAxSvC,QAAA;EAwS8D;EAtS9D,KAAA;EA4T+C;EA1T/C,OAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;EACA,KAAA,EAAO,SAAA;EACP,IAAA,EAAM,cAAA;AAAA;AAAA,UAGS,gBAAA;EACf,IAAA;EACA,IAAA,EAAM,cAAA;AAAA;;;UAKS,kBAAA;EACf,UAAA;EACA,YAAA;EACA,eAAA;AAAA;AAAA,UAGe,mBAAA;EACf,IAAA;EAyayB;EAvazB,MAAA;EAuagD;EArahD,OAAA;EAgbG;EA9aH,QAAA,GAAW,kBAAA;EA8aD;EA5aV,KAAA;EAsJI;;;;;;EA/IJ,IAAA;EA+J+B;;EA5J/B,OAAA;AAAA;AAAA,UAGe,sBAAA;EACf,IAAA;EA+JmC;EA7JnC,UAAA;EAsKA;EApKA,QAAA;EACA,QAAA,GAAW,kBAAA;EACX,KAAA;EACA,OAAA;AAAA;;;UAKe,iBAAA;EACf,OAAA,GAAU,GAAA,SAAY,SAAA;AAAA;AAAA,UAoHP,SAAA;EA8DX;;;;;;EAvDJ,GAAA,CAAI,IAAA,UAAc,IAAA;IAAS,cAAA;EAAA,IAA6B,OAAA,CAAQ,SAAA;EAqE9D;;;;;;;;;;;;;;EArDF,WAAA,EAAa,OAAA,WAAkB,OAAA;IAAU,KAAA;IAAe,KAAA;EAAA;EA2EnC;;;;;EApErB,OAAA,EAAS,KAAA,aAAkB,OAAA,CAAQ,GAAA,SAAY,SAAA;EAuEO;;;;;;;EA9DtD,iBAAA,EAAmB,QAAA,UAAkB,SAAA,WAAoB,OAAA,EAAS,SAAA;EAoElE;;;;;;;;;EAzDA,eAAA,EACE,OAAA,EAAS,aAAA,IACT,GAAA,GAAM,iBAAA,GACL,OAAA,CAAQ,mBAAA;EA4DoC;EAzD/C,kBAAA,EACE,OAAA,EAAS,gBAAA,IACT,GAAA,GAAM,iBAAA,GACL,OAAA,CAAQ,sBAAA;EA2DE;EAxDb,GAAA,CAAI,IAAA,UAAc,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,OAAA,GAAU,OAAA;IAAU,MAAA;EAAA;EAwDQ;;;;;;;;;;EA5CtE,cAAA,EACE,UAAA,UACA,QAAA,WACC,OAAA;IAAW,IAAA;EAAA,IAAiB,SAAA;EAqE/B;;;;;;EA7DA,WAAA,EAAa,IAAA,UAAc,UAAA,UAAoB,QAAA,UAAkB,IAAA,EAAM,OAAA,GAAU,OAAA;EA6DpB;;;;;;;;EAnD7D,cAAA,EAAgB,KAAA,EAAO,SAAA,GAAY,OAAA;EAkEnC;EA/DA,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,OAAA,GAAU,OAAA;EAsFrC;EAnFA,IAAA,CAAK,MAAA,UAAgB,OAAA,GAAU,oBAAA,GAAuB,OAAA,CAAQ,mBAAA;EAmFzB;EAhFrC,WAAA,CAAY,MAAA,UAAgB,OAAA,GAAU,oBAAA,GAAuB,OAAA,CAAQ,0BAAA;EAkGnE;EA/FF,WAAA,CAAY,MAAA,WAAiB,OAAA;EAiG1B;EA9FH,KAAA,CAAM,MAAA,WAAiB,OAAA;EA8FD;EA3FtB,cAAA,CAAe,MAAA,UAAgB,IAAA,EAAM,OAAA,GAAU,OAAA;EA2FW;EAtF1D,YAAA,CAAa,MAAA,UAAgB,OAAA,GAAU,oBAAA,GAAuB,OAAA,CAAQ,0BAAA;EA4F7C;EAzFzB,aAAA,CAAc,MAAA,WAAiB,OAAA;EAuG7B;;;;;;;;;;;;;;;;;EApFF,iBAAA,EAAmB,OAAA,aAAoB,OAAA,CAAQ,GAAA;EAsIS;EAnIxD,SAAA,CAAU,MAAA,WAAiB,OAAA;IAAU,SAAA;IAAmB,SAAA;EAAA;EAyIxD;EAtIA,QAAA,CAAS,OAAA,EAAS,KAAA;IAAQ,IAAA;IAAc,KAAA,EAAO,SAAA;EAAA,IAAc,IAAA,EAAM,OAAA,GAAU,OAAA;EA2I1E;EAxIH,iBAAA,CACE,MAAA,UACA,KAAA,UACA,OAAA,GAAU,oBAAA,GACT,OAAA,CAAQ,0BAAA;EAoID;;;;;;EA5HV,SAAA,IAAa,OAAA;;;;;;;;;;;;;;;;;;;;;;EAuBb,kBAAA,EAAoB,MAAA,WAAiB,OAAA;;;;;;;;;;;;;;;;EAiBrC,iBAAA,CACE,QAAA,UACA,KAAA,WACC,OAAA;IAAU,OAAA,EAAS,cAAA;IAAkB,OAAA;IAAkB,MAAA;EAAA;;;;;EAM1D,oBAAA,KAAyB,OAAA;;;;;;;;;;;;EAazB,KAAA,EACE,MAAA,UACA,IAAA,EAf8B,aAAA,GAgB7B,OAAA,CAD4C,eAAA;;;;;;;;;;;;;;;;EAkB/C,YAAA,CAAa,GAAA,UAAa,UAAA,YAAsB,OAAA;;;;;;;;;;;;;;;;EAiBhD,gBAAA,CAAiB,IAAA,YAAgB,UAAA,YAAsB,OAAA,CAAQ,GAAA;;EAc/D,cAAA,EAAgB,OAAA,EAAS,oBAAA,GAAuB,OAAA,CAAQ,YAAA;;EAGxD,YAAA,EAAc,IAAA,UAAc,SAAA,WAAoB,OAAA;;EAGhD,kBAAA,EACE,IAAA,UACA,SAAA,UACA,KAAA,UACA,aAAA,WACC,OAAA;AAAA"}