@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,510 @@
1
+ const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
+ const require_blocklet_hook = require('./blocklet-hook.cjs');
3
+ const require_cid = require('./cid.cjs');
4
+ const require_did_utils = require('./did-utils.cjs');
5
+ require('./mime-utils.cjs');
6
+ const require_inline_content = require('./inline-content.cjs');
7
+ const require_share_declaration = require('./share-declaration.cjs');
8
+ const require_share_hook = require('./share-hook.cjs');
9
+ const require_upload_session_store = require('./upload-session-store.cjs');
10
+ const require_cid_byte_cache = require('./cid-byte-cache.cjs');
11
+ const require_d1_gc_queue = require('./d1-gc-queue.cjs');
12
+ const require_d1_resolve_store = require('./d1-resolve-store.cjs');
13
+ const require_object_key = require('./object-key.cjs');
14
+ const require_d1_tree_index = require('./d1-tree-index.cjs');
15
+ const require_prefixed_tree_index = require('./prefixed-tree-index.cjs');
16
+ const require_resolve = require('./resolve.cjs');
17
+ const require_scope_id = require('./scope-id.cjs');
18
+ const require_index = require('./index.cjs');
19
+ let _aigne_afs = require("@aigne/afs");
20
+ let _aigne_afs_provider_utils = require("@aigne/afs-provider-utils");
21
+
22
+ //#region src/cloudflare.ts
23
+ /**
24
+ * CloudflareDIDSpace — Cloudflare backend for DID-scoped storage.
25
+ *
26
+ * Composes DIDSpaceProvider (files via R2 + D1 TreeIndex) per app,
27
+ * with logical isolation (separate D1 scope per user+app DID).
28
+ *
29
+ * Same interface as local DIDSpace for 100% compatibility.
30
+ *
31
+ * Usage:
32
+ * const space = new CloudflareDIDSpace({ userDid: "did:abt:z1...", objectStore, indexDb });
33
+ * const afs = await space.getInstanceSpace({ instanceDid: "z1app", role: "system" });
34
+ * await afs.write("/hello.txt", { content: "hello" });
35
+ */
36
+ /** provider:did-space structured logger (debug self-guards; off by default). */
37
+ const log = (0, _aigne_afs.nsLog)("provider:did-space");
38
+ var CloudflareDIDSpace = class {
39
+ /** Real normalizeId(DID) — identity, returned to callers (NOT a storage key). */
40
+ userDid;
41
+ /**
42
+ * Storage scope — `deriveScope(userDid, secret)` when de-id is on, else the
43
+ * plaintext `userDid`. Every D1 storage/query key uses this, never `userDid`.
44
+ * Named `_scope` to avoid colliding with the `get scope()` accessor (README §4.1).
45
+ */
46
+ _scope;
47
+ objectStore;
48
+ indexDb;
49
+ _resolver;
50
+ /** Optional ShareResolver for .share reconcile hook (Phase 0.4) */
51
+ shareResolver;
52
+ /** Read replica opt-in for read-serving paths only — see options doc. */
53
+ useReplica;
54
+ /** upload-limits Phase 5 per-scope byte quota (0 = off, the opt-in default). */
55
+ maxBytesPerScope;
56
+ /**
57
+ * Instance space cache keyed by (role, useReplica) — same shape as `local.ts`
58
+ * `instanceSpaces`. Without it, `getInstanceSpace` returns a fresh `AFS`
59
+ * (and fresh `EventBus`) every call, so propBind subscribe (registered on
60
+ * AFS_A at session start) and the agent's subsequent write (executing on
61
+ * AFS_B for that exec) cross different buses — the write's `afs:write`
62
+ * event never reaches the subscriber, so the live patch silently drops and
63
+ * the user only sees the new value after a manual page reload (Layer 2
64
+ * staleness on staging). Bounded by the lifetime of this DID-Space (per
65
+ * caller in the resolver), the same memory budget the resolver already
66
+ * spends on `spaces`.
67
+ */
68
+ instanceSpaces = /* @__PURE__ */ new Map();
69
+ /**
70
+ * User-space cache keyed by (accessMode, useReplica) — the getUserSpace
71
+ * counterpart of {@link instanceSpaces}. Without it, every `getUserSpace()`
72
+ * builds a fresh `AFS` and re-runs `AFS.mount()`'s async provider health check
73
+ * (a root `stat` → `countChildren` + list). Blocklet serve calls getUserSpace
74
+ * once PER stage (reader / afsRoot), so a cold page paid that root enumeration
75
+ * 3× (issue #808 #4). Caching the handle reuses the mounted provider; data
76
+ * reads stay fresh (path→cid D1 lookups are never cached), so zero staleness.
77
+ */
78
+ userSpaces = /* @__PURE__ */ new Map();
79
+ /** Shared GC queue instance — created once per CloudflareDIDSpace instance */
80
+ gcQueue;
81
+ /** Injected presigned-PUT signer (upload plane). Undefined → no grant capability. */
82
+ signer;
83
+ constructor(options) {
84
+ require_did_utils.validateId(options.userDid);
85
+ this.userDid = require_did_utils.normalizeId(options.userDid);
86
+ this._scope = options.scopeHmacSecret ? require_scope_id.deriveScope(this.userDid, options.scopeHmacSecret) : this.userDid;
87
+ this.objectStore = new require_cid_byte_cache.CachingObjectStore(options.objectStore, new require_cid_byte_cache.CidByteCache());
88
+ this.indexDb = options.indexDb;
89
+ this.gcQueue = new require_d1_gc_queue.D1GCQueue(options.indexDb);
90
+ this.shareResolver = options.shareResolver;
91
+ this.useReplica = options.useReplica ?? false;
92
+ this.maxBytesPerScope = options.maxBytesPerScope ?? 0;
93
+ this.signer = options.signer;
94
+ }
95
+ /**
96
+ * Construct a D1TreeIndex for this scope with the per-scope byte quota
97
+ * (upload-limits Phase 5) always injected — so every write path enforces it
98
+ * uniformly without each call site remembering to thread it. 0 = quota off.
99
+ */
100
+ makeTreeIndex(opts) {
101
+ return new require_d1_tree_index.D1TreeIndex(this.indexDb, this._scope, {
102
+ ...opts,
103
+ maxBytesPerScope: this.maxBytesPerScope
104
+ });
105
+ }
106
+ /**
107
+ * The injected presigned-PUT signer, or undefined when no R2 signer
108
+ * credentials are configured. The seam through which `prepare-upload` (P2)
109
+ * mints upload grants; also the capability signal clients use to decide
110
+ * grant-path vs batchWrite fallback (§15 decision 7/8).
111
+ */
112
+ get presignSigner() {
113
+ return this.signer;
114
+ }
115
+ /**
116
+ * Upload-plane deps for the user-facing `DIDSpaceProvider` (design §7): the
117
+ * injected signer (CF mints grants; absent → fallback), a D1-backed session
118
+ * store, and the de-identified storage scope written into `upload_sessions`.
119
+ * Only the user space gets these — `/instance` (installer) + config don't.
120
+ */
121
+ uploadDeps() {
122
+ return {
123
+ signer: this.signer,
124
+ uploadSessionStore: new require_upload_session_store.D1UploadSessionStore(this.indexDb),
125
+ uploadScope: this._scope
126
+ };
127
+ }
128
+ /**
129
+ * Get an isolated AFS instance for a blocklet instance under this DID Space,
130
+ * scoped by role (system = installer-side data, user = caller-side data).
131
+ *
132
+ * Layout (PrefixedTreeIndex prefix relative to `entries.scope = userDid`):
133
+ * role:"system" → blocklets/{instanceDid}/system/ (content tree, mounted at `/`)
134
+ * role:"user" → blocklets/{instanceDid}/user/ (content tree, mounted at `/`)
135
+ * config → blocklets/{instanceDid}/config/ (sibling fragment, getConfigSpace)
136
+ *
137
+ * /files-prefix-removal: content tree is the role root (no `files/` wrapper);
138
+ * config is a sibling fragment (invisible to `/instance`); vault removed.
139
+ *
140
+ * did-space-composition Phase 2 (symmetric with the local backend): the user
141
+ * fragment is a SINGLE `user` subtree. Per-user isolation comes from scope =
142
+ * caller's userDid (the resolver hands back a CloudflareDIDSpace scoped to the
143
+ * caller), so a `users/{userDid}` path segment would be redundant. `userDid`
144
+ * is @deprecated for this call and ignored for the path.
145
+ *
146
+ * Cached per (instanceDid, role, useReplica) — first caller's accessMode
147
+ * wins for that triple (mirrors local.ts). See `instanceSpaces` for the
148
+ * live-update rationale.
149
+ */
150
+ async getInstanceSpace(opts) {
151
+ log.debug({
152
+ message: "getInstanceSpace",
153
+ instanceDid: opts.instanceDid,
154
+ role: opts.role
155
+ });
156
+ require_did_utils.validateId(opts.instanceDid);
157
+ if (opts.role !== "system" && opts.role !== "user") throw new Error(`getInstanceSpace: invalid role "${opts.role}"`);
158
+ if (opts.role === "user" && opts.userDid != null) require_did_utils.validateId(opts.userDid);
159
+ const bareInstanceId = require_did_utils.normalizeId(opts.instanceDid);
160
+ const useReplica = opts.consistency === "primary" ? false : this.useReplica;
161
+ const cacheKey = `${bareInstanceId}::${opts.role}::${useReplica ? "r" : "p"}`;
162
+ const cached = this.instanceSpaces.get(cacheKey);
163
+ if (cached) return cached;
164
+ const subtree = opts.role === "system" ? `blocklets/${bareInstanceId}/system` : `blocklets/${bareInstanceId}/user`;
165
+ const accessMode = opts.accessMode ?? "readwrite";
166
+ const afs = new _aigne_afs.AFS();
167
+ const baseTreeIndex = this.makeTreeIndex({
168
+ useReplica,
169
+ inlineCache: "on"
170
+ });
171
+ const fileProvider = new require_index.DIDSpaceProvider({
172
+ did: bareInstanceId,
173
+ objectStore: this.objectStore,
174
+ treeIndex: new require_prefixed_tree_index.PrefixedTreeIndex(baseTreeIndex, `${subtree}/`),
175
+ name: "content",
176
+ accessMode,
177
+ gcQueue: this.gcQueue,
178
+ ...opts.role === "user" ? {
179
+ shareTreePrefix: `${subtree}/`,
180
+ ...this.shareResolver ? {
181
+ shareResolver: this.shareResolver,
182
+ shareOwnerDid: this._scope
183
+ } : {},
184
+ blockletResolver: this.resolver,
185
+ blockletOwnerDid: this.userDid
186
+ } : {},
187
+ ...opts.role === "user" ? this.uploadDeps() : {}
188
+ });
189
+ await afs.mount(fileProvider, "/", { skipHealthCheck: true });
190
+ this.instanceSpaces.set(cacheKey, afs);
191
+ return afs;
192
+ }
193
+ /**
194
+ * Runtime-internal config fragment (`blocklets/<i>/config/`, mounted at
195
+ * `/`). Mirrors local `getConfigSpace`. Invisible to `/instance`; holds
196
+ * per-instance machine state like `mounts.toml`.
197
+ */
198
+ async getConfigSpace(instanceDid) {
199
+ require_did_utils.validateId(instanceDid);
200
+ const bareInstanceId = require_did_utils.normalizeId(instanceDid);
201
+ const afs = new _aigne_afs.AFS();
202
+ const baseTreeIndex = this.makeTreeIndex({
203
+ useReplica: this.useReplica,
204
+ inlineCache: "on"
205
+ });
206
+ const configProvider = new require_index.DIDSpaceProvider({
207
+ did: bareInstanceId,
208
+ objectStore: this.objectStore,
209
+ treeIndex: new require_prefixed_tree_index.PrefixedTreeIndex(baseTreeIndex, `blocklets/${bareInstanceId}/config/`),
210
+ name: "config",
211
+ accessMode: "readwrite",
212
+ gcQueue: this.gcQueue
213
+ });
214
+ await afs.mount(configProvider, "/", { skipHealthCheck: true });
215
+ return afs;
216
+ }
217
+ /**
218
+ * List all instance DIDs that have storage in this user's space.
219
+ *
220
+ * Enumerates entries under the `blocklets/<instanceDid>/...` prefix and
221
+ * returns the distinct instance-DID segment. This mirrors the local
222
+ * backend's `listApps`, which enumerates `{userDir}/blocklets/*`. Legacy
223
+ * top-level `getAppSpace` segments are NOT enumerated — that layout is
224
+ * deprecated and removed in P4.
225
+ */
226
+ async listApps() {
227
+ const result = await this.makeTreeIndex({ useReplica: this.useReplica }).list("", { limit: 1e3 });
228
+ const apps = /* @__PURE__ */ new Set();
229
+ for (const entry of result.entries) {
230
+ const parts = entry.path.split("/");
231
+ if (parts[0] === "blocklets" && parts[1]) apps.add(parts[1]);
232
+ }
233
+ return [...apps];
234
+ }
235
+ /**
236
+ * Contract alias (分叉 A, observability Phase 2) for the whole-space root.
237
+ * Delegates to {@link getUserSpace}; satisfies `DIDSpaceLike.getSpaceRoot`
238
+ * without renaming the existing CF method. Defaults readonly via getUserSpace.
239
+ */
240
+ async getSpaceRoot(options) {
241
+ return this.getUserSpace(options);
242
+ }
243
+ /**
244
+ * Get an AFS instance scoped to the user's entire DID Space.
245
+ * No appDid sub-partitioning.
246
+ */
247
+ async getUserSpace(options) {
248
+ log.debug({
249
+ message: "getUserSpace",
250
+ userDid: this.userDid
251
+ });
252
+ const accessMode = options?.accessMode ?? "readonly";
253
+ const cacheKey = `${accessMode}::${this.useReplica ? "r" : "p"}`;
254
+ const cached = this.userSpaces.get(cacheKey);
255
+ if (cached) return cached;
256
+ const afs = new _aigne_afs.AFS();
257
+ const provider = new require_index.DIDSpaceProvider({
258
+ did: this.userDid,
259
+ objectStore: this.objectStore,
260
+ treeIndex: this.makeTreeIndex({
261
+ useReplica: this.useReplica,
262
+ inlineCache: "on"
263
+ }),
264
+ name: "did-space-user",
265
+ accessMode,
266
+ shareResolver: this.shareResolver,
267
+ blockletResolver: this.resolver,
268
+ blockletOwnerDid: this.userDid,
269
+ ...this.uploadDeps()
270
+ });
271
+ await afs.mount(provider, "/", { skipHealthCheck: true });
272
+ this.userSpaces.set(cacheKey, afs);
273
+ return afs;
274
+ }
275
+ get resolver() {
276
+ if (!this._resolver) this._resolver = new require_resolve.DIDSpaceResolver(new require_d1_resolve_store.D1ResolveStore(this.indexDb, { useReplica: this.useReplica }));
277
+ return this._resolver;
278
+ }
279
+ /**
280
+ * Expose the underlying storage scope — used by worker handlers for
281
+ * cid-permission queries. MUST return the derived scope (not the plaintext
282
+ * DID) so the worker's `entries.scope` lookups match what was written.
283
+ */
284
+ get scope() {
285
+ return this._scope;
286
+ }
287
+ /**
288
+ * Direct write path for the Worker HTTP handler (Task 2.4b).
289
+ *
290
+ * Bypasses the generic `afs.write()` path because `AFSWriteEntryPayload` has
291
+ * no `deviceId`/`skipChangelog` field — the `PutOpts` cannot be smuggled
292
+ * through the public AFS API. The Worker handler therefore constructs a
293
+ * `CloudflareDIDSpace` and calls this method directly, passing the per-
294
+ * request `deviceId` read from the `X-Device-Id` header.
295
+ *
296
+ * Semantics mirror `DIDSpaceProvider.writeHandler`:
297
+ * 1. Compute the content-addressed CID from the payload bytes.
298
+ * 2. R2 put `objects/{cid}` if not already stored (head-check for dedup).
299
+ * 3. `treeIndex.put` — atomic `entries` + `changelog` write (Task 2.4a).
300
+ * 4. Enqueue the previous CID (if any) onto the GC queue for deferred
301
+ * cleanup. Enqueuing an overwritten CID is a no-op if the CID is still
302
+ * referenced by another row (the GC job's reference check handles it).
303
+ *
304
+ * Path conventions:
305
+ * - `afsPath` is an AFS-style path WITH leading slash (e.g. `/foo.json`
306
+ * or `/blocklets/z1abc/index.html`).
307
+ * - The leading slash is stripped before `treeIndex.put`; the remainder is
308
+ * stored verbatim under `entries.scope = this._scope` (the derived storage
309
+ * scope when de-id is on, else the plaintext DID). This matches the
310
+ * `getUserSpace()` layout (no appDid sub-partition) that blocklet publish
311
+ * and general user-space CRUD share.
312
+ *
313
+ * Returns `{ cid, oldCid }`. `oldCid` is present only when an existing row
314
+ * was overwritten; the caller can treat its presence as "something was
315
+ * replaced" for change-tracking. `seq` is not returned — Task 2.4a's
316
+ * `treeIndex.put` does not expose the changelog's AUTOINCREMENT `seq`, and
317
+ * adding a separate SELECT round trip here is wasted work for the current
318
+ * sync path (which only cares about cid + oldCid).
319
+ *
320
+ * No event dispatch is performed (Decision 3A round 5): CloudflareDIDSpace
321
+ * has no event bus reference, the Worker runtime is request/response with
322
+ * no long-lived subscriber, and the sync protocol polls `changelog` rows
323
+ * by `seq` rather than reacting to transient event fan-out.
324
+ */
325
+ async internalWrite(afsPath, content, opts) {
326
+ let bytes;
327
+ let storeValue;
328
+ if (content instanceof Uint8Array) {
329
+ bytes = content;
330
+ storeValue = bytes.buffer;
331
+ } else if (content instanceof ArrayBuffer) {
332
+ bytes = new Uint8Array(content);
333
+ storeValue = content;
334
+ } else {
335
+ bytes = new TextEncoder().encode(content);
336
+ storeValue = content;
337
+ }
338
+ const cid = await require_cid.computeCID(bytes);
339
+ const objectKey = require_object_key.objectKeyForCid(cid);
340
+ const treePath = afsPath.replace(/^\/+/, "");
341
+ if (require_share_declaration.isShareReservedPath(afsPath)) throw new _aigne_afs.AFSForbiddenError(afsPath, "share-path-reserved");
342
+ await require_share_hook.applyShareWriteHook({
343
+ afsPath,
344
+ treePath,
345
+ bytes,
346
+ cid,
347
+ ownerDid: this._scope,
348
+ resolver: this.shareResolver,
349
+ phase: "pre-io"
350
+ });
351
+ if (!await this.objectStore.head(objectKey)) await this.objectStore.put(objectKey, storeValue);
352
+ const now = Date.now();
353
+ const mimeType = (0, _aigne_afs_provider_utils.detectMimeType)(afsPath) ?? void 0;
354
+ const treeIndex = this.makeTreeIndex({ inlineCache: "on" });
355
+ const entry = {
356
+ cid,
357
+ size: bytes.length,
358
+ mtime: now,
359
+ ctime: now,
360
+ mimeType
361
+ };
362
+ const inlineText = require_inline_content.decodeInlineText(bytes, mimeType);
363
+ if (inlineText !== null) entry.content = inlineText;
364
+ const { oldCid } = await treeIndex.put(treePath, entry, opts);
365
+ await this.gcQueue.remove(cid);
366
+ if (oldCid && oldCid !== cid) await this.gcQueue.enqueue([oldCid]);
367
+ await require_share_hook.applyShareWriteHook({
368
+ afsPath,
369
+ treePath,
370
+ bytes,
371
+ cid,
372
+ ownerDid: this._scope,
373
+ resolver: this.shareResolver,
374
+ phase: "post-io"
375
+ });
376
+ await require_blocklet_hook.applyBlockletWriteHook({
377
+ afsPath,
378
+ treePath,
379
+ bytes,
380
+ ownerDid: this.userDid,
381
+ resolver: this.resolver,
382
+ purgeCachesForDomains: typeof caches !== "undefined" ? async (domains) => {
383
+ const cfCaches = caches;
384
+ for (const domain of domains) {
385
+ const rootKey = new Request(`https://${domain}/`, { method: "GET" });
386
+ await cfCaches.default.delete(rootKey);
387
+ }
388
+ } : void 0
389
+ });
390
+ return oldCid === void 0 ? { cid } : {
391
+ cid,
392
+ oldCid
393
+ };
394
+ }
395
+ /**
396
+ * Read the current entry's cid + mtime + last-write deviceId for an
397
+ * If-Match precondition check (Task 3.3).
398
+ *
399
+ * Used by `_createSpaceHandler` BEFORE issuing a write when the client
400
+ * sends `If-Match: <cid>` for optimistic concurrency control. The
401
+ * handler compares the returned `cid` to the header value and returns
402
+ * 409 (with the full snapshot below) on mismatch, or 412 if the row
403
+ * doesn't exist (first-create with If-Match).
404
+ *
405
+ * The query joins `entries` (cid + mtime authoritative) with the most
406
+ * recent put row in `changelog` (device_id of last writer). Both
407
+ * indices used (`PRIMARY KEY (scope, path)` on entries +
408
+ * `idx_changelog_scope_seq` on changelog) keep this O(log n).
409
+ *
410
+ * `deviceId` is `null` when the entry was written via the blocklet
411
+ * exemption path (skipChangelog = true) — there's no changelog row to
412
+ * read the device id from. The handler exposes `null` to clients in
413
+ * the 409 body.
414
+ *
415
+ * Returns `null` when no entry exists at this path.
416
+ */
417
+ async getCurrentEntry(afsPath) {
418
+ const treePath = afsPath.replace(/^\/+/, "");
419
+ const row = await this.indexDb.prepare(`SELECT
420
+ e.cid AS cid,
421
+ e.mtime AS mtime,
422
+ (SELECT device_id FROM ds_changelog
423
+ WHERE scope = ? AND path = ? AND op = 'put'
424
+ ORDER BY seq DESC LIMIT 1) AS device_id
425
+ FROM ds_entries e
426
+ WHERE e.scope = ? AND e.path = ? AND e.kind = 'file'`).bind(this._scope, treePath, this._scope, treePath).first();
427
+ if (!row || row.cid === null) return null;
428
+ return {
429
+ cid: row.cid,
430
+ mtime: row.mtime,
431
+ deviceId: row.device_id
432
+ };
433
+ }
434
+ /**
435
+ * Read the changelog `seq` of the most recent write by `(scope, path,
436
+ * deviceId)` (Task 3.3).
437
+ *
438
+ * The Worker handler calls this AFTER `internalWrite/internalDelete`
439
+ * to recover the seq of the row just inserted, so the PUT/DELETE
440
+ * response can echo `{cid, seq}` for the client.
441
+ *
442
+ * The triple WHERE clause (scope + path + device_id) is the safety
443
+ * mechanism for concurrent writers: each writer is guaranteed to have
444
+ * a unique `device_id` (validated by the Worker handler's strict
445
+ * format regex BEFORE we get here), so even if two PUTs on the same
446
+ * path race, each call's getLastSeq sees ONLY its own write — never
447
+ * the other writer's.
448
+ *
449
+ * Returns `0` when no row matches (impossible if called immediately
450
+ * after a successful internalWrite, but defensive against
451
+ * skipChangelog = true callers — blocklet exempt PUTs have no
452
+ * changelog row at all and the handler should NOT call this for them).
453
+ */
454
+ async getLastSeq(afsPath, deviceId) {
455
+ const treePath = afsPath.replace(/^\/+/, "");
456
+ return (await this.indexDb.prepare(`SELECT MAX(seq) AS seq FROM ds_changelog
457
+ WHERE scope = ? AND path = ? AND device_id = ?`).bind(this._scope, treePath, deviceId).first())?.seq ?? 0;
458
+ }
459
+ /**
460
+ * Direct delete path for the Worker HTTP handler (Task 2.4b).
461
+ *
462
+ * Semantics mirror `DIDSpaceProvider.deleteHandler`:
463
+ * 1. Read the current entry (for GC enqueue of the soon-to-be-orphaned CID).
464
+ * 2. `treeIndex.delete` — atomic `entries` delete + `changelog` delete row
465
+ * (Task 2.4a's `INSERT INTO ds_changelog SELECT ... FROM ds_entries` pattern
466
+ * captures the old CID in-batch).
467
+ * 3. Enqueue the old CID for GC. Enqueueing is safe even under races —
468
+ * the GC job's `isReferenced` check skips CIDs still referenced by
469
+ * other rows.
470
+ *
471
+ * Returns an empty object (no `seq` for the same reason as `internalWrite`).
472
+ * Callers that need to know whether anything was actually deleted can rely
473
+ * on the absence of an `AFSNotFoundError` — Task 2.4b's handler converts
474
+ * that to a 404 response.
475
+ */
476
+ async internalDelete(afsPath, opts) {
477
+ const treePath = afsPath.replace(/^\/+/, "");
478
+ const treeIndex = this.makeTreeIndex();
479
+ if (require_share_declaration.isShareReservedPath(afsPath)) throw new _aigne_afs.AFSForbiddenError(afsPath, "share-path-reserved");
480
+ const entry = await treeIndex.get(treePath, { includeContent: false });
481
+ if (!entry) return { deleted: false };
482
+ await this.gcQueue.enqueue([entry.cid]);
483
+ await treeIndex.delete(treePath, opts);
484
+ await require_share_hook.applyShareDeleteHook({
485
+ afsPath,
486
+ treePath,
487
+ ownerDid: this._scope,
488
+ resolver: this.shareResolver
489
+ });
490
+ await require_blocklet_hook.applyBlockletDeleteHook({
491
+ afsPath,
492
+ treePath,
493
+ ownerDid: this.userDid,
494
+ resolver: this.resolver
495
+ });
496
+ return { deleted: true };
497
+ }
498
+ /**
499
+ * Clean up resources. Drops the cached instance-space map so retained AFS
500
+ * instances are GC-eligible alongside this DID-Space.
501
+ */
502
+ close() {
503
+ this.instanceSpaces.clear();
504
+ }
505
+ };
506
+
507
+ //#endregion
508
+ exports.CloudflareDIDSpace = CloudflareDIDSpace;
509
+ exports.normalizeId = require_did_utils.normalizeId;
510
+ exports.validateId = require_did_utils.validateId;