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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/LICENSE.md +26 -0
  2. package/README.md +129 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
  5. package/dist/_virtual/rolldown_runtime.cjs +29 -0
  6. package/dist/afs-metadata-context.cjs +20 -0
  7. package/dist/afs-metadata-context.d.cts +21 -0
  8. package/dist/afs-metadata-context.d.cts.map +1 -0
  9. package/dist/afs-metadata-context.d.mts +21 -0
  10. package/dist/afs-metadata-context.d.mts.map +1 -0
  11. package/dist/afs-metadata-context.mjs +18 -0
  12. package/dist/afs-metadata-context.mjs.map +1 -0
  13. package/dist/blocklet-hook.cjs +180 -0
  14. package/dist/blocklet-hook.d.cts +29 -0
  15. package/dist/blocklet-hook.d.cts.map +1 -0
  16. package/dist/blocklet-hook.d.mts +29 -0
  17. package/dist/blocklet-hook.d.mts.map +1 -0
  18. package/dist/blocklet-hook.mjs +178 -0
  19. package/dist/blocklet-hook.mjs.map +1 -0
  20. package/dist/changelog-schema.cjs +603 -0
  21. package/dist/changelog-schema.d.cts +395 -0
  22. package/dist/changelog-schema.d.cts.map +1 -0
  23. package/dist/changelog-schema.d.mts +395 -0
  24. package/dist/changelog-schema.d.mts.map +1 -0
  25. package/dist/changelog-schema.mjs +570 -0
  26. package/dist/changelog-schema.mjs.map +1 -0
  27. package/dist/changelog-write.cjs +80 -0
  28. package/dist/changelog-write.d.cts +70 -0
  29. package/dist/changelog-write.d.cts.map +1 -0
  30. package/dist/changelog-write.d.mts +70 -0
  31. package/dist/changelog-write.d.mts.map +1 -0
  32. package/dist/changelog-write.mjs +77 -0
  33. package/dist/changelog-write.mjs.map +1 -0
  34. package/dist/cid-byte-cache.cjs +126 -0
  35. package/dist/cid-byte-cache.d.cts +46 -0
  36. package/dist/cid-byte-cache.d.cts.map +1 -0
  37. package/dist/cid-byte-cache.d.mts +47 -0
  38. package/dist/cid-byte-cache.d.mts.map +1 -0
  39. package/dist/cid-byte-cache.mjs +125 -0
  40. package/dist/cid-byte-cache.mjs.map +1 -0
  41. package/dist/cid.cjs +68 -0
  42. package/dist/cid.d.cts +22 -0
  43. package/dist/cid.d.cts.map +1 -0
  44. package/dist/cid.d.mts +22 -0
  45. package/dist/cid.d.mts.map +1 -0
  46. package/dist/cid.mjs +65 -0
  47. package/dist/cid.mjs.map +1 -0
  48. package/dist/client.cjs +221 -0
  49. package/dist/client.d.cts +72 -0
  50. package/dist/client.d.cts.map +1 -0
  51. package/dist/client.d.mts +72 -0
  52. package/dist/client.d.mts.map +1 -0
  53. package/dist/client.mjs +220 -0
  54. package/dist/client.mjs.map +1 -0
  55. package/dist/cloudflare.cjs +510 -0
  56. package/dist/cloudflare.d.cts +307 -0
  57. package/dist/cloudflare.d.cts.map +1 -0
  58. package/dist/cloudflare.d.mts +308 -0
  59. package/dist/cloudflare.d.mts.map +1 -0
  60. package/dist/cloudflare.mjs +507 -0
  61. package/dist/cloudflare.mjs.map +1 -0
  62. package/dist/ctime-backfill.cjs +272 -0
  63. package/dist/ctime-backfill.d.cts +169 -0
  64. package/dist/ctime-backfill.d.cts.map +1 -0
  65. package/dist/ctime-backfill.d.mts +169 -0
  66. package/dist/ctime-backfill.d.mts.map +1 -0
  67. package/dist/ctime-backfill.mjs +267 -0
  68. package/dist/ctime-backfill.mjs.map +1 -0
  69. package/dist/d1-gc-queue.cjs +80 -0
  70. package/dist/d1-gc-queue.d.cts +59 -0
  71. package/dist/d1-gc-queue.d.cts.map +1 -0
  72. package/dist/d1-gc-queue.d.mts +59 -0
  73. package/dist/d1-gc-queue.d.mts.map +1 -0
  74. package/dist/d1-gc-queue.mjs +81 -0
  75. package/dist/d1-gc-queue.mjs.map +1 -0
  76. package/dist/d1-resolve-store.cjs +189 -0
  77. package/dist/d1-resolve-store.d.cts +93 -0
  78. package/dist/d1-resolve-store.d.cts.map +1 -0
  79. package/dist/d1-resolve-store.d.mts +93 -0
  80. package/dist/d1-resolve-store.d.mts.map +1 -0
  81. package/dist/d1-resolve-store.mjs +190 -0
  82. package/dist/d1-resolve-store.mjs.map +1 -0
  83. package/dist/d1-schema.cjs +361 -0
  84. package/dist/d1-schema.d.cts +237 -0
  85. package/dist/d1-schema.d.cts.map +1 -0
  86. package/dist/d1-schema.d.mts +237 -0
  87. package/dist/d1-schema.d.mts.map +1 -0
  88. package/dist/d1-schema.mjs +341 -0
  89. package/dist/d1-schema.mjs.map +1 -0
  90. package/dist/d1-share-store.cjs +0 -0
  91. package/dist/d1-share-store.d.cts +53 -0
  92. package/dist/d1-share-store.d.cts.map +1 -0
  93. package/dist/d1-share-store.d.mts +53 -0
  94. package/dist/d1-share-store.d.mts.map +1 -0
  95. package/dist/d1-share-store.mjs +0 -0
  96. package/dist/d1-share-store.mjs.map +1 -0
  97. package/dist/d1-tree-index.cjs +1098 -0
  98. package/dist/d1-tree-index.d.cts +203 -0
  99. package/dist/d1-tree-index.d.cts.map +1 -0
  100. package/dist/d1-tree-index.d.mts +203 -0
  101. package/dist/d1-tree-index.d.mts.map +1 -0
  102. package/dist/d1-tree-index.mjs +1094 -0
  103. package/dist/d1-tree-index.mjs.map +1 -0
  104. package/dist/data-backend.cjs +147 -0
  105. package/dist/data-backend.d.cts +30 -0
  106. package/dist/data-backend.d.cts.map +1 -0
  107. package/dist/data-backend.d.mts +30 -0
  108. package/dist/data-backend.d.mts.map +1 -0
  109. package/dist/data-backend.mjs +148 -0
  110. package/dist/data-backend.mjs.map +1 -0
  111. package/dist/dedup-backfill.cjs +278 -0
  112. package/dist/dedup-backfill.d.cts +165 -0
  113. package/dist/dedup-backfill.d.cts.map +1 -0
  114. package/dist/dedup-backfill.d.mts +165 -0
  115. package/dist/dedup-backfill.d.mts.map +1 -0
  116. package/dist/dedup-backfill.mjs +273 -0
  117. package/dist/dedup-backfill.mjs.map +1 -0
  118. package/dist/did-space-like.d.cts +2 -0
  119. package/dist/did-space-like.d.mts +2 -0
  120. package/dist/did-utils.cjs +44 -0
  121. package/dist/did-utils.d.cts +25 -0
  122. package/dist/did-utils.d.cts.map +1 -0
  123. package/dist/did-utils.d.mts +25 -0
  124. package/dist/did-utils.d.mts.map +1 -0
  125. package/dist/did-utils.mjs +43 -0
  126. package/dist/did-utils.mjs.map +1 -0
  127. package/dist/dirty-path-queue.cjs +31 -0
  128. package/dist/dirty-path-queue.d.cts +104 -0
  129. package/dist/dirty-path-queue.d.cts.map +1 -0
  130. package/dist/dirty-path-queue.d.mts +104 -0
  131. package/dist/dirty-path-queue.d.mts.map +1 -0
  132. package/dist/dirty-path-queue.mjs +31 -0
  133. package/dist/dirty-path-queue.mjs.map +1 -0
  134. package/dist/dirty-path-schema.cjs +142 -0
  135. package/dist/dirty-path-schema.d.cts +90 -0
  136. package/dist/dirty-path-schema.d.cts.map +1 -0
  137. package/dist/dirty-path-schema.d.mts +90 -0
  138. package/dist/dirty-path-schema.d.mts.map +1 -0
  139. package/dist/dirty-path-schema.mjs +136 -0
  140. package/dist/dirty-path-schema.mjs.map +1 -0
  141. package/dist/download-actions.cjs +43 -0
  142. package/dist/download-actions.mjs +40 -0
  143. package/dist/download-actions.mjs.map +1 -0
  144. package/dist/fs-object-store.cjs +153 -0
  145. package/dist/fs-object-store.d.cts +21 -0
  146. package/dist/fs-object-store.d.cts.map +1 -0
  147. package/dist/fs-object-store.d.mts +22 -0
  148. package/dist/fs-object-store.d.mts.map +1 -0
  149. package/dist/fs-object-store.mjs +153 -0
  150. package/dist/fs-object-store.mjs.map +1 -0
  151. package/dist/gc-queue.d.cts +43 -0
  152. package/dist/gc-queue.d.cts.map +1 -0
  153. package/dist/gc-queue.d.mts +43 -0
  154. package/dist/gc-queue.d.mts.map +1 -0
  155. package/dist/index.cjs +2712 -0
  156. package/dist/index.d.cts +504 -0
  157. package/dist/index.d.cts.map +1 -0
  158. package/dist/index.d.mts +505 -0
  159. package/dist/index.d.mts.map +1 -0
  160. package/dist/index.mjs +2537 -0
  161. package/dist/index.mjs.map +1 -0
  162. package/dist/inline-content-migration.cjs +212 -0
  163. package/dist/inline-content-migration.d.cts +110 -0
  164. package/dist/inline-content-migration.d.cts.map +1 -0
  165. package/dist/inline-content-migration.d.mts +111 -0
  166. package/dist/inline-content-migration.d.mts.map +1 -0
  167. package/dist/inline-content-migration.mjs +207 -0
  168. package/dist/inline-content-migration.mjs.map +1 -0
  169. package/dist/inline-content.cjs +145 -0
  170. package/dist/inline-content.d.cts +98 -0
  171. package/dist/inline-content.d.cts.map +1 -0
  172. package/dist/inline-content.d.mts +98 -0
  173. package/dist/inline-content.d.mts.map +1 -0
  174. package/dist/inline-content.mjs +137 -0
  175. package/dist/inline-content.mjs.map +1 -0
  176. package/dist/local-changelog.cjs +241 -0
  177. package/dist/local-changelog.d.cts +119 -0
  178. package/dist/local-changelog.d.cts.map +1 -0
  179. package/dist/local-changelog.d.mts +119 -0
  180. package/dist/local-changelog.d.mts.map +1 -0
  181. package/dist/local-changelog.mjs +240 -0
  182. package/dist/local-changelog.mjs.map +1 -0
  183. package/dist/local.cjs +435 -0
  184. package/dist/local.d.cts +254 -0
  185. package/dist/local.d.cts.map +1 -0
  186. package/dist/local.d.mts +254 -0
  187. package/dist/local.d.mts.map +1 -0
  188. package/dist/local.mjs +427 -0
  189. package/dist/local.mjs.map +1 -0
  190. package/dist/memory-gc-queue.cjs +36 -0
  191. package/dist/memory-gc-queue.d.cts +22 -0
  192. package/dist/memory-gc-queue.d.cts.map +1 -0
  193. package/dist/memory-gc-queue.d.mts +22 -0
  194. package/dist/memory-gc-queue.d.mts.map +1 -0
  195. package/dist/memory-gc-queue.mjs +36 -0
  196. package/dist/memory-gc-queue.mjs.map +1 -0
  197. package/dist/memory-tree-index.cjs +734 -0
  198. package/dist/memory-tree-index.d.cts +159 -0
  199. package/dist/memory-tree-index.d.cts.map +1 -0
  200. package/dist/memory-tree-index.d.mts +159 -0
  201. package/dist/memory-tree-index.d.mts.map +1 -0
  202. package/dist/memory-tree-index.mjs +735 -0
  203. package/dist/memory-tree-index.mjs.map +1 -0
  204. package/dist/metadata-db.cjs +562 -0
  205. package/dist/metadata-db.d.cts +102 -0
  206. package/dist/metadata-db.d.cts.map +1 -0
  207. package/dist/metadata-db.d.mts +102 -0
  208. package/dist/metadata-db.d.mts.map +1 -0
  209. package/dist/metadata-db.mjs +562 -0
  210. package/dist/metadata-db.mjs.map +1 -0
  211. package/dist/mime-utils.cjs +2 -0
  212. package/dist/mime-utils.d.cts +2 -0
  213. package/dist/mime-utils.d.mts +2 -0
  214. package/dist/mime-utils.mjs +3 -0
  215. package/dist/object-key.cjs +41 -0
  216. package/dist/object-key.d.cts +25 -0
  217. package/dist/object-key.d.cts.map +1 -0
  218. package/dist/object-key.d.mts +25 -0
  219. package/dist/object-key.d.mts.map +1 -0
  220. package/dist/object-key.mjs +40 -0
  221. package/dist/object-key.mjs.map +1 -0
  222. package/dist/packages/session/dist/index.cjs +788 -0
  223. package/dist/packages/session/dist/index.mjs +782 -0
  224. package/dist/packages/session/dist/index.mjs.map +1 -0
  225. package/dist/platform/r2/dist/types.d.cts +49 -0
  226. package/dist/platform/r2/dist/types.d.cts.map +1 -0
  227. package/dist/prefix-range.cjs +33 -0
  228. package/dist/prefix-range.d.cts +29 -0
  229. package/dist/prefix-range.d.cts.map +1 -0
  230. package/dist/prefix-range.d.mts +29 -0
  231. package/dist/prefix-range.d.mts.map +1 -0
  232. package/dist/prefix-range.mjs +33 -0
  233. package/dist/prefix-range.mjs.map +1 -0
  234. package/dist/prefixed-tree-index.cjs +238 -0
  235. package/dist/prefixed-tree-index.d.cts +85 -0
  236. package/dist/prefixed-tree-index.d.cts.map +1 -0
  237. package/dist/prefixed-tree-index.d.mts +85 -0
  238. package/dist/prefixed-tree-index.d.mts.map +1 -0
  239. package/dist/prefixed-tree-index.mjs +239 -0
  240. package/dist/prefixed-tree-index.mjs.map +1 -0
  241. package/dist/presign-signer.cjs +7 -0
  242. package/dist/presign-signer.d.cts +99 -0
  243. package/dist/presign-signer.d.cts.map +1 -0
  244. package/dist/presign-signer.d.mts +99 -0
  245. package/dist/presign-signer.d.mts.map +1 -0
  246. package/dist/presign-signer.mjs +7 -0
  247. package/dist/presign-signer.mjs.map +1 -0
  248. package/dist/providers/platform/r2/dist/index.d.mts +3 -0
  249. package/dist/providers/platform/r2/dist/types.d.mts +49 -0
  250. package/dist/providers/platform/r2/dist/types.d.mts.map +1 -0
  251. package/dist/reconcile.cjs +184 -0
  252. package/dist/reconcile.d.cts +26 -0
  253. package/dist/reconcile.d.cts.map +1 -0
  254. package/dist/reconcile.d.mts +26 -0
  255. package/dist/reconcile.d.mts.map +1 -0
  256. package/dist/reconcile.mjs +184 -0
  257. package/dist/reconcile.mjs.map +1 -0
  258. package/dist/reference-check.cjs +49 -0
  259. package/dist/reference-check.d.cts +10 -0
  260. package/dist/reference-check.d.cts.map +1 -0
  261. package/dist/reference-check.d.mts +10 -0
  262. package/dist/reference-check.d.mts.map +1 -0
  263. package/dist/reference-check.mjs +48 -0
  264. package/dist/reference-check.mjs.map +1 -0
  265. package/dist/remote-afs.cjs +681 -0
  266. package/dist/remote-afs.d.cts +236 -0
  267. package/dist/remote-afs.d.cts.map +1 -0
  268. package/dist/remote-afs.d.mts +236 -0
  269. package/dist/remote-afs.d.mts.map +1 -0
  270. package/dist/remote-afs.mjs +676 -0
  271. package/dist/remote-afs.mjs.map +1 -0
  272. package/dist/rename-guard.cjs +18 -0
  273. package/dist/rename-guard.mjs +18 -0
  274. package/dist/rename-guard.mjs.map +1 -0
  275. package/dist/resolve.cjs +260 -0
  276. package/dist/resolve.d.cts +113 -0
  277. package/dist/resolve.d.cts.map +1 -0
  278. package/dist/resolve.d.mts +113 -0
  279. package/dist/resolve.d.mts.map +1 -0
  280. package/dist/resolve.mjs +260 -0
  281. package/dist/resolve.mjs.map +1 -0
  282. package/dist/rsync-content.cjs +33 -0
  283. package/dist/rsync-content.mjs +33 -0
  284. package/dist/rsync-content.mjs.map +1 -0
  285. package/dist/rsync.cjs +400 -0
  286. package/dist/rsync.d.cts +157 -0
  287. package/dist/rsync.d.cts.map +1 -0
  288. package/dist/rsync.d.mts +157 -0
  289. package/dist/rsync.d.mts.map +1 -0
  290. package/dist/rsync.mjs +397 -0
  291. package/dist/rsync.mjs.map +1 -0
  292. package/dist/run-gc.cjs +57 -0
  293. package/dist/run-gc.d.cts +40 -0
  294. package/dist/run-gc.d.cts.map +1 -0
  295. package/dist/run-gc.d.mts +41 -0
  296. package/dist/run-gc.d.mts.map +1 -0
  297. package/dist/run-gc.mjs +57 -0
  298. package/dist/run-gc.mjs.map +1 -0
  299. package/dist/scope-id.cjs +70 -0
  300. package/dist/scope-id.d.cts +35 -0
  301. package/dist/scope-id.d.cts.map +1 -0
  302. package/dist/scope-id.d.mts +35 -0
  303. package/dist/scope-id.d.mts.map +1 -0
  304. package/dist/scope-id.mjs +68 -0
  305. package/dist/scope-id.mjs.map +1 -0
  306. package/dist/scope-migration-node.cjs +172 -0
  307. package/dist/scope-migration-node.d.cts +44 -0
  308. package/dist/scope-migration-node.d.cts.map +1 -0
  309. package/dist/scope-migration-node.d.mts +44 -0
  310. package/dist/scope-migration-node.d.mts.map +1 -0
  311. package/dist/scope-migration-node.mjs +171 -0
  312. package/dist/scope-migration-node.mjs.map +1 -0
  313. package/dist/scope-migration.cjs +155 -0
  314. package/dist/scope-migration.d.cts +65 -0
  315. package/dist/scope-migration.d.cts.map +1 -0
  316. package/dist/scope-migration.d.mts +65 -0
  317. package/dist/scope-migration.d.mts.map +1 -0
  318. package/dist/scope-migration.mjs +154 -0
  319. package/dist/scope-migration.mjs.map +1 -0
  320. package/dist/share-declaration.cjs +225 -0
  321. package/dist/share-declaration.d.cts +30 -0
  322. package/dist/share-declaration.d.cts.map +1 -0
  323. package/dist/share-declaration.d.mts +32 -0
  324. package/dist/share-declaration.d.mts.map +1 -0
  325. package/dist/share-declaration.mjs +221 -0
  326. package/dist/share-declaration.mjs.map +1 -0
  327. package/dist/share-hook.cjs +63 -0
  328. package/dist/share-hook.mjs +62 -0
  329. package/dist/share-hook.mjs.map +1 -0
  330. package/dist/share-resolve.cjs +176 -0
  331. package/dist/share-resolve.d.cts +36 -0
  332. package/dist/share-resolve.d.cts.map +1 -0
  333. package/dist/share-resolve.d.mts +36 -0
  334. package/dist/share-resolve.d.mts.map +1 -0
  335. package/dist/share-resolve.mjs +177 -0
  336. package/dist/share-resolve.mjs.map +1 -0
  337. package/dist/share-serve.cjs +145 -0
  338. package/dist/share-serve.d.cts +30 -0
  339. package/dist/share-serve.d.cts.map +1 -0
  340. package/dist/share-serve.d.mts +30 -0
  341. package/dist/share-serve.d.mts.map +1 -0
  342. package/dist/share-serve.mjs +144 -0
  343. package/dist/share-serve.mjs.map +1 -0
  344. package/dist/share-store.cjs +25 -0
  345. package/dist/share-store.d.cts +65 -0
  346. package/dist/share-store.d.cts.map +1 -0
  347. package/dist/share-store.d.mts +65 -0
  348. package/dist/share-store.d.mts.map +1 -0
  349. package/dist/share-store.mjs +25 -0
  350. package/dist/share-store.mjs.map +1 -0
  351. package/dist/share-virtual-path.cjs +102 -0
  352. package/dist/share-virtual-path.mjs +101 -0
  353. package/dist/share-virtual-path.mjs.map +1 -0
  354. package/dist/space-resolver.cjs +54 -0
  355. package/dist/space-resolver.d.cts +34 -0
  356. package/dist/space-resolver.d.cts.map +1 -0
  357. package/dist/space-resolver.d.mts +34 -0
  358. package/dist/space-resolver.d.mts.map +1 -0
  359. package/dist/space-resolver.mjs +55 -0
  360. package/dist/space-resolver.mjs.map +1 -0
  361. package/dist/sqlite-gc-queue.cjs +51 -0
  362. package/dist/sqlite-gc-queue.d.cts +22 -0
  363. package/dist/sqlite-gc-queue.d.cts.map +1 -0
  364. package/dist/sqlite-gc-queue.d.mts +22 -0
  365. package/dist/sqlite-gc-queue.d.mts.map +1 -0
  366. package/dist/sqlite-gc-queue.mjs +52 -0
  367. package/dist/sqlite-gc-queue.mjs.map +1 -0
  368. package/dist/sqlite-resolve-store.cjs +163 -0
  369. package/dist/sqlite-resolve-store.d.cts +50 -0
  370. package/dist/sqlite-resolve-store.d.cts.map +1 -0
  371. package/dist/sqlite-resolve-store.d.mts +50 -0
  372. package/dist/sqlite-resolve-store.d.mts.map +1 -0
  373. package/dist/sqlite-resolve-store.mjs +164 -0
  374. package/dist/sqlite-resolve-store.mjs.map +1 -0
  375. package/dist/sqlite-share-store.cjs +157 -0
  376. package/dist/sqlite-share-store.d.cts +31 -0
  377. package/dist/sqlite-share-store.d.cts.map +1 -0
  378. package/dist/sqlite-share-store.d.mts +31 -0
  379. package/dist/sqlite-share-store.d.mts.map +1 -0
  380. package/dist/sqlite-share-store.mjs +157 -0
  381. package/dist/sqlite-share-store.mjs.map +1 -0
  382. package/dist/sqlite-tree-index.cjs +901 -0
  383. package/dist/sqlite-tree-index.d.cts +107 -0
  384. package/dist/sqlite-tree-index.d.cts.map +1 -0
  385. package/dist/sqlite-tree-index.d.mts +107 -0
  386. package/dist/sqlite-tree-index.d.mts.map +1 -0
  387. package/dist/sqlite-tree-index.mjs +902 -0
  388. package/dist/sqlite-tree-index.mjs.map +1 -0
  389. package/dist/sync-engine.cjs +1324 -0
  390. package/dist/sync-engine.d.cts +473 -0
  391. package/dist/sync-engine.d.cts.map +1 -0
  392. package/dist/sync-engine.d.mts +473 -0
  393. package/dist/sync-engine.d.mts.map +1 -0
  394. package/dist/sync-engine.mjs +1315 -0
  395. package/dist/sync-engine.mjs.map +1 -0
  396. package/dist/sync-state.cjs +303 -0
  397. package/dist/sync-state.d.cts +224 -0
  398. package/dist/sync-state.d.cts.map +1 -0
  399. package/dist/sync-state.d.mts +224 -0
  400. package/dist/sync-state.d.mts.map +1 -0
  401. package/dist/sync-state.mjs +297 -0
  402. package/dist/sync-state.mjs.map +1 -0
  403. package/dist/timestamp.cjs +92 -0
  404. package/dist/timestamp.mjs +91 -0
  405. package/dist/timestamp.mjs.map +1 -0
  406. package/dist/transports/http.cjs +54 -0
  407. package/dist/transports/http.d.cts +26 -0
  408. package/dist/transports/http.d.cts.map +1 -0
  409. package/dist/transports/http.d.mts +26 -0
  410. package/dist/transports/http.d.mts.map +1 -0
  411. package/dist/transports/http.mjs +54 -0
  412. package/dist/transports/http.mjs.map +1 -0
  413. package/dist/transports/static.cjs +55 -0
  414. package/dist/transports/static.d.cts +28 -0
  415. package/dist/transports/static.d.cts.map +1 -0
  416. package/dist/transports/static.d.mts +28 -0
  417. package/dist/transports/static.d.mts.map +1 -0
  418. package/dist/transports/static.mjs +55 -0
  419. package/dist/transports/static.mjs.map +1 -0
  420. package/dist/transports/types.cjs +13 -0
  421. package/dist/transports/types.d.cts +72 -0
  422. package/dist/transports/types.d.cts.map +1 -0
  423. package/dist/transports/types.d.mts +72 -0
  424. package/dist/transports/types.d.mts.map +1 -0
  425. package/dist/transports/types.mjs +13 -0
  426. package/dist/transports/types.mjs.map +1 -0
  427. package/dist/transports/ws.cjs +207 -0
  428. package/dist/transports/ws.d.cts +47 -0
  429. package/dist/transports/ws.d.cts.map +1 -0
  430. package/dist/transports/ws.d.mts +47 -0
  431. package/dist/transports/ws.d.mts.map +1 -0
  432. package/dist/transports/ws.mjs +206 -0
  433. package/dist/transports/ws.mjs.map +1 -0
  434. package/dist/tree-index.cjs +333 -0
  435. package/dist/tree-index.d.cts +524 -0
  436. package/dist/tree-index.d.cts.map +1 -0
  437. package/dist/tree-index.d.mts +524 -0
  438. package/dist/tree-index.d.mts.map +1 -0
  439. package/dist/tree-index.mjs +322 -0
  440. package/dist/tree-index.mjs.map +1 -0
  441. package/dist/tree-query.cjs +655 -0
  442. package/dist/tree-query.d.cts +70 -0
  443. package/dist/tree-query.d.cts.map +1 -0
  444. package/dist/tree-query.d.mts +70 -0
  445. package/dist/tree-query.d.mts.map +1 -0
  446. package/dist/tree-query.mjs +648 -0
  447. package/dist/tree-query.mjs.map +1 -0
  448. package/dist/upload-actions.cjs +97 -0
  449. package/dist/upload-actions.d.cts +19 -0
  450. package/dist/upload-actions.d.cts.map +1 -0
  451. package/dist/upload-actions.d.mts +21 -0
  452. package/dist/upload-actions.d.mts.map +1 -0
  453. package/dist/upload-actions.mjs +90 -0
  454. package/dist/upload-actions.mjs.map +1 -0
  455. package/dist/upload-session-store.cjs +185 -0
  456. package/dist/upload-session-store.d.cts +99 -0
  457. package/dist/upload-session-store.d.cts.map +1 -0
  458. package/dist/upload-session-store.d.mts +99 -0
  459. package/dist/upload-session-store.d.mts.map +1 -0
  460. package/dist/upload-session-store.mjs +184 -0
  461. package/dist/upload-session-store.mjs.map +1 -0
  462. package/dist/url-normalize.cjs +61 -0
  463. package/dist/url-normalize.d.cts +33 -0
  464. package/dist/url-normalize.d.cts.map +1 -0
  465. package/dist/url-normalize.d.mts +33 -0
  466. package/dist/url-normalize.d.mts.map +1 -0
  467. package/dist/url-normalize.mjs +61 -0
  468. package/dist/url-normalize.mjs.map +1 -0
  469. package/dist/versioned-content-backends.cjs +155 -0
  470. package/dist/versioned-content-backends.d.cts +49 -0
  471. package/dist/versioned-content-backends.d.cts.map +1 -0
  472. package/dist/versioned-content-backends.d.mts +49 -0
  473. package/dist/versioned-content-backends.d.mts.map +1 -0
  474. package/dist/versioned-content-backends.mjs +154 -0
  475. package/dist/versioned-content-backends.mjs.map +1 -0
  476. package/dist/versioned-content-index.cjs +102 -0
  477. package/dist/versioned-content-index.d.cts +46 -0
  478. package/dist/versioned-content-index.d.cts.map +1 -0
  479. package/dist/versioned-content-index.d.mts +46 -0
  480. package/dist/versioned-content-index.d.mts.map +1 -0
  481. package/dist/versioned-content-index.mjs +103 -0
  482. package/dist/versioned-content-index.mjs.map +1 -0
  483. package/dist/versioned-content-store.cjs +121 -0
  484. package/dist/versioned-content-store.d.cts +90 -0
  485. package/dist/versioned-content-store.d.cts.map +1 -0
  486. package/dist/versioned-content-store.d.mts +90 -0
  487. package/dist/versioned-content-store.d.mts.map +1 -0
  488. package/dist/versioned-content-store.mjs +122 -0
  489. package/dist/versioned-content-store.mjs.map +1 -0
  490. package/dist/versioned-scope.cjs +39 -0
  491. package/dist/versioned-scope.d.cts +57 -0
  492. package/dist/versioned-scope.d.cts.map +1 -0
  493. package/dist/versioned-scope.d.mts +57 -0
  494. package/dist/versioned-scope.d.mts.map +1 -0
  495. package/dist/versioned-scope.mjs +37 -0
  496. package/dist/versioned-scope.mjs.map +1 -0
  497. package/migrations/0001_tree_entries.sql +17 -0
  498. package/migrations/0002_resolve_entries.sql +7 -0
  499. package/migrations/0003_entries_v2.sql +38 -0
  500. package/migrations/0004_gc_queue.sql +5 -0
  501. package/migrations/0006_resolve_enhance.sql +14 -0
  502. package/migrations/0007_resolve_created_at.sql +10 -0
  503. package/migrations/0008_changelog.sql +34 -0
  504. package/migrations/0009_device_sync_state.sql +29 -0
  505. package/migrations/0010_scope_meta.sql +33 -0
  506. package/migrations/0011_shares.sql +25 -0
  507. package/migrations/0012_scope_meta_file_count.sql +41 -0
  508. package/migrations/0013_scope_meta_total_bytes.sql +47 -0
  509. package/migrations/0014_rename_tables.sql +62 -0
  510. package/package.json +102 -0
package/dist/local.cjs ADDED
@@ -0,0 +1,435 @@
1
+ const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
+ const require_did_utils = require('./did-utils.cjs');
3
+ const require_upload_session_store = require('./upload-session-store.cjs');
4
+ const require_afs_metadata_context = require('./afs-metadata-context.cjs');
5
+ const require_cid_byte_cache = require('./cid-byte-cache.cjs');
6
+ const require_prefixed_tree_index = require('./prefixed-tree-index.cjs');
7
+ const require_reference_check = require('./reference-check.cjs');
8
+ const require_resolve = require('./resolve.cjs');
9
+ const require_run_gc = require('./run-gc.cjs');
10
+ const require_scope_id = require('./scope-id.cjs');
11
+ const require_sqlite_gc_queue = require('./sqlite-gc-queue.cjs');
12
+ const require_sqlite_resolve_store = require('./sqlite-resolve-store.cjs');
13
+ const require_sqlite_tree_index = require('./sqlite-tree-index.cjs');
14
+ const require_index = require('./index.cjs');
15
+ const require_fs_object_store = require('./fs-object-store.cjs');
16
+ const require_metadata_db = require('./metadata-db.cjs');
17
+ const require_reconcile = require('./reconcile.cjs');
18
+ const require_scope_migration_node = require('./scope-migration-node.cjs');
19
+ let _aigne_afs = require("@aigne/afs");
20
+ let node_fs = require("node:fs");
21
+ let node_path = require("node:path");
22
+ let _aigne_afs_fs = require("@aigne/afs-fs");
23
+
24
+ //#region src/local.ts
25
+ /**
26
+ * DIDSpace — local (Node) backend for DID-scoped storage.
27
+ *
28
+ * Phase 3 (mobile-didspace-transport): unified onto the single
29
+ * `DIDSpaceProvider`, exactly like the Cloudflare backend — only the injected
30
+ * storage primitives differ (Node: `FsObjectStore` + `SQLiteTreeIndex`; CF: R2
31
+ * + `D1TreeIndex`). This makes the backend runtime-agnostic per CLAUDE.md and
32
+ * gives Node the content-addressed `.objects/{cid}`, `.changelog`, `maxDepth:-1`
33
+ * manifest, device-aware writes, and ifMatch that the bare `AFSFS` mount lacked.
34
+ *
35
+ * Layout (relative to `userDir`, all under `entries.scope = <storage scope>` —
36
+ * the derived scope when de-id is on, else the plaintext DID; `userDir` itself
37
+ * is `{rootPath}/{storage scope}`):
38
+ * role:"system" → PrefixedTreeIndex `blocklets/{i}/system/` (mounted at `/`)
39
+ * role:"user" → PrefixedTreeIndex `blocklets/{i}/user/` (mounted at `/`)
40
+ * space root → no-prefix SQLiteTreeIndex (whole space; CLI manifest)
41
+ * config → AFSFS `blocklets/{i}/config/` (blob fragment)
42
+ * Content blobs live once at `{userDir}/objects/{cid}` (FsObjectStore); the
43
+ * index (`_metadata.db`) is the source of truth. The old eventual-mirror
44
+ * subscriber + `desktop:default` deviceId hardcode are gone — the provider's
45
+ * `put` writes entries + changelog atomically.
46
+ *
47
+ * Usage:
48
+ * const space = new DIDSpace({ rootPath: "~/.afs/spaces", userDid: "did:abt:z1..." });
49
+ * const afs = await space.getInstanceSpace({ instanceDid: "z1app", role: "system" });
50
+ * await afs.write("/hello.txt", { content: "hello" });
51
+ */
52
+ /** Local desktop device label written into changelog rows for local writes. */
53
+ const LOCAL_DEVICE_ID = "desktop:default";
54
+ var DIDSpace = class DIDSpace {
55
+ rootPath;
56
+ /** Real normalizeId(DID) — identity, returned to callers (NOT a storage key). */
57
+ userDid;
58
+ /**
59
+ * Storage scope — `deriveScope(userDid, secret)` when de-id is on, else the
60
+ * plaintext `userDid`. Drives the directory name (`userDir`), every
61
+ * SQLiteTreeIndex scope, and `_shares.db` owner_did. Named `_scope` to mirror
62
+ * the CF backend (cloudflare.ts).
63
+ */
64
+ _scope;
65
+ userDir;
66
+ instanceSpaces = /* @__PURE__ */ new Map();
67
+ _resolver;
68
+ /** Backing store for {@link resolver}; closed in {@link close}. */
69
+ _resolveStore;
70
+ /** User-level MetadataDB; lazy-opened on first getInstanceSpace/getUserSpace */
71
+ metadataDb = null;
72
+ /** Shared content-addressed object store (one objects/ dir per user space). */
73
+ objectStore = null;
74
+ /**
75
+ * `objectStore` wrapped with a content-addressed byte cache (#674 perf). Keyed
76
+ * by cid (immutable) → no staleness, no TTL; bounded LRU keeps memory flat.
77
+ * Persists for this DID-Space's lifetime (the Node daemon reuses it per user).
78
+ */
79
+ cachingStore = null;
80
+ objectByteCache = new require_cid_byte_cache.CidByteCache();
81
+ /** GC queue over `_metadata.db` (deferred object cleanup); lazy, ensureTable once. */
82
+ gcQueue = null;
83
+ /**
84
+ * Share-out Phase 3: builds the ShareResolver for getUserSpace providers.
85
+ * Read lazily at provider-construction time, so a late {@link
86
+ * setShareResolverFactory} (installer space) still covers providers built
87
+ * after the call. Undefined → no share-out (back-compat: dark-wired off).
88
+ */
89
+ _shareResolverFactory;
90
+ /** upload-limits Phase 5 per-scope byte quota (0 = off, the opt-in default). */
91
+ maxBytesPerScope;
92
+ constructor(options) {
93
+ require_did_utils.validateId(options.userDid);
94
+ this.rootPath = options.rootPath;
95
+ this.maxBytesPerScope = options.maxBytesPerScope ?? 0;
96
+ this.userDid = require_did_utils.normalizeId(options.userDid);
97
+ this._scope = options.scopeHmacSecret ? require_scope_id.deriveScope(this.userDid, options.scopeHmacSecret) : this.userDid;
98
+ this.userDir = (0, node_path.join)(this.rootPath, this._scope);
99
+ this._shareResolverFactory = options.shareResolverFactory;
100
+ }
101
+ /**
102
+ * Storage scope — mirrors `CloudflareDIDSpace.scope` (cloudflare.ts:443).
103
+ * De-id on → derived HMAC hash; de-id off → plaintext `userDid`.
104
+ * Used by consumers (e.g. the Node daemon `/user/index` mount) that need
105
+ * the same de-identified partition key used for physical storage.
106
+ */
107
+ get scope() {
108
+ return this._scope;
109
+ }
110
+ /**
111
+ * Construct a SQLiteTreeIndex for this scope with the per-scope byte quota
112
+ * (upload-limits Phase 5) always injected — so every write path enforces it
113
+ * without each call site threading it. 0 = quota off (the opt-in default).
114
+ */
115
+ sqliteTreeIndex(metadataDb, opts) {
116
+ return new require_sqlite_tree_index.SQLiteTreeIndex(metadataDb, this._scope, {
117
+ ...opts,
118
+ maxBytesPerScope: this.maxBytesPerScope
119
+ });
120
+ }
121
+ /**
122
+ * Open a space DIRECTLY by its storage scope, WITHOUT deriving (README §5.6
123
+ * `/spaces` naming contract). For `/spaces/{X}` inspection where `X` is already
124
+ * the storage scope (a base32 hash under de-id, or a plaintext DID otherwise):
125
+ * the directory `{rootPath}/{storageScope}` is opened verbatim, `did` returns
126
+ * the opaque `storageScope`, and NO `deriveScope` runs (re-deriving would point
127
+ * at a non-existent `{rootPath}/{derive(storageScope)}`). Constructing with no
128
+ * secret guarantees `_scope === storageScope`. Callers mount it readonly.
129
+ */
130
+ static openStorageScope(opts) {
131
+ return new DIDSpace({
132
+ rootPath: opts.rootPath,
133
+ userDid: opts.storageScope
134
+ });
135
+ }
136
+ /**
137
+ * Late-inject the share-resolver factory (share-out Phase 3). Used for the
138
+ * installer space, which `resolveLocalDIDSpace()` builds BEFORE the
139
+ * daemon-global share store exists. Lazy provider construction means this
140
+ * covers every getUserSpace provider built after the call.
141
+ */
142
+ setShareResolverFactory(factory) {
143
+ this._shareResolverFactory = factory;
144
+ }
145
+ /** Expose constructor options for daemon integration (rootPath, userDid). */
146
+ get config() {
147
+ return {
148
+ rootPath: this.rootPath,
149
+ userDid: this.userDid
150
+ };
151
+ }
152
+ /**
153
+ * Lazily open (or reuse) the user-level `_metadata.db`.
154
+ * Creates `userDir` if missing. Only one instance per DIDSpace.
155
+ */
156
+ async getMetadataDb() {
157
+ if (this.metadataDb) return this.metadataDb;
158
+ (0, node_fs.mkdirSync)(this.userDir, { recursive: true });
159
+ this.metadataDb = await require_metadata_db.MetadataDB.open(this.userDir);
160
+ return this.metadataDb;
161
+ }
162
+ /**
163
+ * Upload-plane deps for the user-facing provider (design §7 / §15 decision 8).
164
+ * Node is FALLBACK-ONLY: it implements the actions + SQLite session table
165
+ * (protocol parity) but injects NO signer, so `prepare-upload` returns
166
+ * `grant: null` and the native client falls back to batchWrite.
167
+ */
168
+ uploadDeps(metadataDb) {
169
+ return {
170
+ uploadSessionStore: new require_upload_session_store.SqliteUploadSessionStore(metadataDb.rawClient),
171
+ uploadScope: this._scope
172
+ };
173
+ }
174
+ /**
175
+ * Lazily create the shared FsObjectStore rooted at `{userDir}/objects`, wrapped
176
+ * with the content-addressed byte cache. Returns the caching wrapper so every
177
+ * provider read benefits; the raw {@link objectStore} field is kept only so
178
+ * {@link close} can drop it.
179
+ */
180
+ getObjectStore() {
181
+ if (!this.cachingStore) {
182
+ (0, node_fs.mkdirSync)(this.userDir, { recursive: true });
183
+ this.objectStore = new require_fs_object_store.FsObjectStore(this.userDir);
184
+ this.cachingStore = new require_cid_byte_cache.CachingObjectStore(this.objectStore, this.objectByteCache);
185
+ }
186
+ return this.cachingStore;
187
+ }
188
+ /**
189
+ * Lazily create the `SqliteGcQueue` over the user-level `_metadata.db`
190
+ * (via the `MetadataDB.rawClient` getter — never reaches into private fields).
191
+ * One queue per DIDSpace; injected into every DIDSpaceProvider so overwrites/
192
+ * deletes enqueue the orphaned oldCid for the deferred sweep.
193
+ */
194
+ async getGcQueue() {
195
+ if (!this.gcQueue) {
196
+ const queue = new require_sqlite_gc_queue.SqliteGcQueue((await this.getMetadataDb()).rawClient);
197
+ await queue.ensureTable();
198
+ this.gcQueue = queue;
199
+ }
200
+ return this.gcQueue;
201
+ }
202
+ /**
203
+ * Run one object-GC sweep over this space's single owner scope (design §4.6).
204
+ * Scope-agnostic: `referencedAnywhere` is scope-blind over the one
205
+ * `_metadata.db`, so one sweep covers the whole daemon. Used by both the
206
+ * `arc space gc` CLI and the daemon's scheduled GC task (AFSScheduler, #742 S3).
207
+ */
208
+ async runGc(opts) {
209
+ const metadataDb = await this.getMetadataDb();
210
+ const stats = await require_run_gc.runGc({
211
+ queue: await this.getGcQueue(),
212
+ referencedAnywhere: (cid, nowMs) => require_reference_check.referencedAnywhereLibsql(metadataDb.rawClient, cid, nowMs),
213
+ objectStore: this.getObjectStore(),
214
+ graceMs: opts?.graceMs,
215
+ limit: opts?.limit,
216
+ log: opts?.log
217
+ });
218
+ await new require_upload_session_store.SqliteUploadSessionStore(metadataDb.rawClient).sweepExpired(Date.now());
219
+ return stats;
220
+ }
221
+ /**
222
+ * Back-compat no-op: the eventual-mirror subscriber is gone (the provider now
223
+ * writes entries + changelog atomically), so there is no in-flight work to
224
+ * drain. Kept so existing test/daemon call sites don't break.
225
+ */
226
+ async drainSubscribers() {}
227
+ /**
228
+ * Get an isolated AFS instance for a blocklet instance under this DID Space,
229
+ * scoped by role (system = installer-side data, user = caller-side data).
230
+ *
231
+ * Mounts a single `DIDSpaceProvider` whose treeIndex is a `PrefixedTreeIndex`
232
+ * over the user-scoped `SQLiteTreeIndex` at `blocklets/{i}/{role}/`. The
233
+ * prefix is MANDATORY — without it the role root would degrade to the whole
234
+ * space root (data越界). Blobs share the user-level `FsObjectStore`.
235
+ *
236
+ * `userDid` is @deprecated for role:"user" — per-user isolation comes from
237
+ * WHICH space backs the call (the space is already the caller's), so it never
238
+ * enters the path; validated only as defense if supplied.
239
+ */
240
+ async getInstanceSpace(opts) {
241
+ require_did_utils.validateId(opts.instanceDid);
242
+ if (opts.role !== "system" && opts.role !== "user") throw new Error(`getInstanceSpace: invalid role "${opts.role}"`);
243
+ if (opts.role === "user" && opts.userDid != null) require_did_utils.validateId(opts.userDid);
244
+ const bareInstanceId = require_did_utils.normalizeId(opts.instanceDid);
245
+ const cacheKey = opts.role === "system" ? `system:${bareInstanceId}` : `user:${bareInstanceId}`;
246
+ const existing = this.instanceSpaces.get(cacheKey);
247
+ if (existing) return existing;
248
+ const prefix = `blocklets/${bareInstanceId}/${opts.role}/`;
249
+ const accessMode = opts.accessMode ?? "readwrite";
250
+ const metadataDb = await this.getMetadataDb();
251
+ const treeIndex = new require_prefixed_tree_index.PrefixedTreeIndex(this.sqliteTreeIndex(metadataDb, { inlineCache: "on" }), prefix);
252
+ const gcQueue = await this.getGcQueue();
253
+ const shareResolver = opts.role === "user" ? this._shareResolverFactory?.(this.sqliteTreeIndex(metadataDb, { inlineCache: "on" })) : void 0;
254
+ const afs = new _aigne_afs.AFS();
255
+ await afs.mount(new require_index.DIDSpaceProvider({
256
+ did: bareInstanceId,
257
+ objectStore: this.getObjectStore(),
258
+ treeIndex,
259
+ name: "content",
260
+ accessMode,
261
+ deviceId: LOCAL_DEVICE_ID,
262
+ gcQueue,
263
+ ...opts.role === "user" ? {
264
+ shareTreePrefix: prefix,
265
+ ...shareResolver ? {
266
+ shareResolver,
267
+ shareOwnerDid: this._scope
268
+ } : {},
269
+ blockletResolver: this.resolver,
270
+ blockletOwnerDid: this.userDid
271
+ } : {},
272
+ ...opts.role === "user" ? this.uploadDeps(metadataDb) : {}
273
+ }), "/");
274
+ this.instanceSpaces.set(cacheKey, afs);
275
+ return afs;
276
+ }
277
+ /**
278
+ * Source-side dirty queue for an instance's `/user` fragment
279
+ * (index-follower-dirty-path §7, §9.2). Returns a `PrefixedTreeIndex` over the
280
+ * user-level `_metadata.db` (where `ds_changelog` + `ds_dirty_path` live), so
281
+ * the daemon can drain the merged dirty projection instead of replaying
282
+ * `/.changelog`. This is a RUNTIME-INTERNAL capability held directly by the
283
+ * daemon's follower — it is NEVER exposed as a public `/user` AFS action
284
+ * (ack/fail mutate scheduling state). Node has no D1 replica, so a single
285
+ * primary `_metadata.db` read is already read-your-write. The index writes stay
286
+ * in the separate `user-index.db`; only source/dirty rows are read here.
287
+ */
288
+ async getInstanceDirtyQueue(opts) {
289
+ require_did_utils.validateId(opts.instanceDid);
290
+ const prefix = `blocklets/${require_did_utils.normalizeId(opts.instanceDid)}/${opts.role}/`;
291
+ const metadataDb = await this.getMetadataDb();
292
+ return new require_prefixed_tree_index.PrefixedTreeIndex(this.sqliteTreeIndex(metadataDb), prefix);
293
+ }
294
+ /**
295
+ * Config fragment for an instance — a sibling of the role content tree at
296
+ * `blocklets/<i>/config/`, mounted at `/`. Runtime-internal (mount overrides
297
+ * etc.); NOT part of `/instance`. Stays a plain `AFSFS` blob fragment: config
298
+ * is opaque machine state, not content-addressed sync data (design §2.F/T3.9).
299
+ */
300
+ async getConfigSpace(instanceDid) {
301
+ require_did_utils.validateId(instanceDid);
302
+ const bareInstanceId = require_did_utils.normalizeId(instanceDid);
303
+ const configDir = (0, node_path.join)(this.userDir, "blocklets", bareInstanceId, "config");
304
+ (0, node_fs.mkdirSync)(configDir, { recursive: true });
305
+ const afs = new _aigne_afs.AFS();
306
+ await afs.mount(new _aigne_afs_fs.AFSFS({
307
+ localPath: configDir,
308
+ name: "config",
309
+ accessMode: "readwrite"
310
+ }), "/");
311
+ return afs;
312
+ }
313
+ /**
314
+ * List all instance DIDs that have storage in this user's DID space.
315
+ *
316
+ * Enumerated from the index (the source of truth) rather than `readdir` of
317
+ * the physical tree — the physical layout is now `objects/{cid}` + index, so
318
+ * there is no per-instance directory to walk. Direct children of the
319
+ * `blocklets/` prefix are the instance ids (trailing-slash dir rows).
320
+ */
321
+ async listApps() {
322
+ const metadataDb = await this.getMetadataDb();
323
+ const result = await this.sqliteTreeIndex(metadataDb).listChildren("blocklets/");
324
+ const ids = /* @__PURE__ */ new Set();
325
+ for (const entry of result.entries) {
326
+ const rel = entry.path.slice(10).replace(/\/$/, "");
327
+ if (rel) ids.add(rel);
328
+ }
329
+ return [...ids];
330
+ }
331
+ /**
332
+ * Resolve table — persistent + DAEMON-GLOBAL (`{rootPath}/_resolve.db`, NOT
333
+ * the per-space `_metadata.db`): `blocklet/<id> → owner` / `domain/<host> → …`
334
+ * are caller-less reverse lookups that need ONE shared registry, exactly like
335
+ * `_shares.db` and CF's single shared D1. Backed by `SqliteResolveStore` so
336
+ * entries survive across DID-Space instances and daemon restarts — symmetric
337
+ * with `CloudflareDIDSpace.resolver` (D1ResolveStore). Closed in {@link close}.
338
+ */
339
+ get resolver() {
340
+ if (!this._resolver) {
341
+ this._resolveStore = new require_sqlite_resolve_store.SqliteResolveStore((0, node_path.join)(this.rootPath, "_resolve.db"));
342
+ this._resolver = new require_resolve.DIDSpaceResolver(this._resolveStore);
343
+ }
344
+ return this._resolver;
345
+ }
346
+ /**
347
+ * Whole-space root (contract alias `getSpaceRoot`; legacy name `getUserSpace`)
348
+ * — a `DIDSpaceProvider` over the NO-PREFIX user-scoped `SQLiteTreeIndex`, so
349
+ * it sees every instance fragment in the space. Used by `arc space`
350
+ * export/import/diff (CLI manifest source) and observability. Mobile sync does
351
+ * NOT use it (mobile goes through the aside `/user` fragment).
352
+ */
353
+ async getSpaceRoot(options) {
354
+ return this.getUserSpace(options);
355
+ }
356
+ async getUserSpace(options) {
357
+ const metadataDb = await this.getMetadataDb();
358
+ const gcQueue = await this.getGcQueue();
359
+ const afs = new _aigne_afs.AFS();
360
+ const scopeTreeIndex = this.sqliteTreeIndex(metadataDb, { inlineCache: "on" });
361
+ await afs.mount(new require_index.DIDSpaceProvider({
362
+ did: this.userDid,
363
+ objectStore: this.getObjectStore(),
364
+ treeIndex: scopeTreeIndex,
365
+ name: "did-space-user",
366
+ accessMode: options?.accessMode ?? "readonly",
367
+ deviceId: LOCAL_DEVICE_ID,
368
+ gcQueue,
369
+ shareResolver: this._shareResolverFactory?.(scopeTreeIndex),
370
+ blockletResolver: this.resolver,
371
+ blockletOwnerDid: this.userDid,
372
+ ...this.uploadDeps(metadataDb)
373
+ }), "/");
374
+ require_afs_metadata_context.attachMetadataContext(afs, {
375
+ metadataDb,
376
+ userDir: this.userDir,
377
+ scope: this._scope
378
+ });
379
+ return afs;
380
+ }
381
+ /**
382
+ * Share-out Phase 4: a READONLY AFS for public `/s/{slug}` serving, scoped by
383
+ * `prefix` (with trailing slash, e.g. `docs/`) or — when undefined — the whole
384
+ * owner tree (root share + sidecar). Reuses THIS space's metadataDb +
385
+ * objectStore (no second libsql client on `_metadata.db`, which would race).
386
+ * No shareResolver injected: serving is read-only, never reconciles.
387
+ */
388
+ async getShareServeAFS(prefix) {
389
+ const metadataDb = await this.getMetadataDb();
390
+ const base = this.sqliteTreeIndex(metadataDb, { inlineCache: "on" });
391
+ const treeIndex = prefix ? new require_prefixed_tree_index.PrefixedTreeIndex(base, prefix) : base;
392
+ const afs = new _aigne_afs.AFS();
393
+ await afs.mount(new require_index.DIDSpaceProvider({
394
+ did: this.userDid,
395
+ objectStore: this.getObjectStore(),
396
+ treeIndex,
397
+ name: "did-space-share-serve",
398
+ accessMode: "readonly",
399
+ deviceId: LOCAL_DEVICE_ID
400
+ }), "/");
401
+ return afs;
402
+ }
403
+ /**
404
+ * Clean up resources. Closes the user-level MetadataDB and clears the
405
+ * instance-space cache. No event subscriptions to tear down anymore.
406
+ */
407
+ close() {
408
+ if (this.metadataDb) {
409
+ try {
410
+ this.metadataDb.close();
411
+ } catch {}
412
+ this.metadataDb = null;
413
+ }
414
+ if (this._resolveStore) {
415
+ this._resolveStore.close();
416
+ this._resolveStore = void 0;
417
+ this._resolver = void 0;
418
+ }
419
+ this.gcQueue = null;
420
+ this.objectStore = null;
421
+ this.cachingStore = null;
422
+ this.instanceSpaces.clear();
423
+ }
424
+ };
425
+
426
+ //#endregion
427
+ exports.DIDSpace = DIDSpace;
428
+ exports.FsObjectStore = require_fs_object_store.FsObjectStore;
429
+ exports.MetadataDB = require_metadata_db.MetadataDB;
430
+ exports.SQLiteTreeIndex = require_sqlite_tree_index.SQLiteTreeIndex;
431
+ exports.migrateNodeMetadataDb = require_scope_migration_node.migrateNodeMetadataDb;
432
+ exports.migrateNodeSpaces = require_scope_migration_node.migrateNodeSpaces;
433
+ exports.normalizeId = require_did_utils.normalizeId;
434
+ exports.reconcile = require_reconcile.reconcile;
435
+ exports.validateId = require_did_utils.validateId;
@@ -0,0 +1,254 @@
1
+ import { DIDSpaceLike as DIDSpaceLike$1, InstanceSpaceOptions } from "./did-space-like.cjs";
2
+ import { DIDSpaceResolver } from "./resolve.cjs";
3
+ import { TreeIndex } from "./tree-index.cjs";
4
+ import { ShareResolver } from "./share-resolve.cjs";
5
+ import { normalizeId, validateId } from "./did-utils.cjs";
6
+ import { CidCacheRow, EntryRow, MetadataDB } from "./metadata-db.cjs";
7
+ import { PrefixedTreeIndex } from "./prefixed-tree-index.cjs";
8
+ import { GcStats } from "./run-gc.cjs";
9
+ import { FsObjectStore } from "./fs-object-store.cjs";
10
+ import { ReconcileOptions, ReconcileStats, reconcile } from "./reconcile.cjs";
11
+ import { NodeScopeMigrationOptions, NodeScopeMigrationReport, migrateNodeMetadataDb, migrateNodeSpaces } from "./scope-migration-node.cjs";
12
+ import { SQLiteTreeIndex } from "./sqlite-tree-index.cjs";
13
+ import { AFS, AFSAccessMode } from "@aigne/afs";
14
+
15
+ //#region src/local.d.ts
16
+ /**
17
+ * Builds a {@link ShareResolver} for a user/owner space (share-out Phase 3).
18
+ * The daemon-global share store is captured in the factory's closure (one
19
+ * `_shares.db` across all owners); `scopeTreeIndex` is the per-space tree index
20
+ * (WHOLE user tree, no prefix) the resolver uses for sidecar/.web pre-io checks.
21
+ * Injected into `getUserSpace` (whole-space) AND `getInstanceSpace(role:"user")`
22
+ * (the caller's own per-user blocklet fragment — `/user` mount + mobile-sync
23
+ * target); the fragment provider remaps owner→userDid + restores the full decl
24
+ * path. role:"system" instance spaces are NEVER shared (installer data).
25
+ */
26
+ type ShareResolverFactory = (scopeTreeIndex: TreeIndex) => ShareResolver;
27
+ interface DIDSpaceOptions {
28
+ /** Root directory for all DID spaces (e.g., ~/.afs/spaces) */
29
+ rootPath: string;
30
+ /** Owner DID of this space */
31
+ userDid: string;
32
+ /**
33
+ * Per-deployment HMAC secret for scope de-identification (README §5.3). When
34
+ * set, the storage scope — the directory name `{rootPath}/{scope}`, the
35
+ * `_metadata.db` scope columns, and the `_shares.db` owner_did — becomes
36
+ * `deriveScope(userDid, secret)`. When absent, scope stays the plaintext DID
37
+ * (de-id off, back-compat). Each deployment has its own secret (§5.5).
38
+ */
39
+ scopeHmacSecret?: Uint8Array;
40
+ /**
41
+ * Share-out Phase 3: optional factory that builds a ShareResolver for this
42
+ * space's `getUserSpace` provider (closure over the daemon-global share
43
+ * store). Can also be late-injected via {@link DIDSpace.setShareResolverFactory}
44
+ * for spaces constructed before the store exists (installer space).
45
+ */
46
+ shareResolverFactory?: ShareResolverFactory;
47
+ /**
48
+ * upload-limits Phase 5 per-scope byte quota (bytes). 0 / unset = OFF (the
49
+ * opt-in default). Threaded into every SQLiteTreeIndex this space builds.
50
+ * The Node daemon resolves it from `resolveUploadLimits(process.env)`.
51
+ */
52
+ maxBytesPerScope?: number;
53
+ }
54
+ declare class DIDSpace implements DIDSpaceLike$1 {
55
+ private readonly rootPath;
56
+ /** Real normalizeId(DID) — identity, returned to callers (NOT a storage key). */
57
+ private readonly userDid;
58
+ /**
59
+ * Storage scope — `deriveScope(userDid, secret)` when de-id is on, else the
60
+ * plaintext `userDid`. Drives the directory name (`userDir`), every
61
+ * SQLiteTreeIndex scope, and `_shares.db` owner_did. Named `_scope` to mirror
62
+ * the CF backend (cloudflare.ts).
63
+ */
64
+ private readonly _scope;
65
+ readonly userDir: string;
66
+ private readonly instanceSpaces;
67
+ private _resolver?;
68
+ /** Backing store for {@link resolver}; closed in {@link close}. */
69
+ private _resolveStore?;
70
+ /** User-level MetadataDB; lazy-opened on first getInstanceSpace/getUserSpace */
71
+ private metadataDb;
72
+ /** Shared content-addressed object store (one objects/ dir per user space). */
73
+ private objectStore;
74
+ /**
75
+ * `objectStore` wrapped with a content-addressed byte cache (#674 perf). Keyed
76
+ * by cid (immutable) → no staleness, no TTL; bounded LRU keeps memory flat.
77
+ * Persists for this DID-Space's lifetime (the Node daemon reuses it per user).
78
+ */
79
+ private cachingStore;
80
+ private readonly objectByteCache;
81
+ /** GC queue over `_metadata.db` (deferred object cleanup); lazy, ensureTable once. */
82
+ private gcQueue;
83
+ /**
84
+ * Share-out Phase 3: builds the ShareResolver for getUserSpace providers.
85
+ * Read lazily at provider-construction time, so a late {@link
86
+ * setShareResolverFactory} (installer space) still covers providers built
87
+ * after the call. Undefined → no share-out (back-compat: dark-wired off).
88
+ */
89
+ private _shareResolverFactory?;
90
+ /** upload-limits Phase 5 per-scope byte quota (0 = off, the opt-in default). */
91
+ private readonly maxBytesPerScope;
92
+ constructor(options: DIDSpaceOptions);
93
+ /**
94
+ * Storage scope — mirrors `CloudflareDIDSpace.scope` (cloudflare.ts:443).
95
+ * De-id on → derived HMAC hash; de-id off → plaintext `userDid`.
96
+ * Used by consumers (e.g. the Node daemon `/user/index` mount) that need
97
+ * the same de-identified partition key used for physical storage.
98
+ */
99
+ get scope(): string;
100
+ /**
101
+ * Construct a SQLiteTreeIndex for this scope with the per-scope byte quota
102
+ * (upload-limits Phase 5) always injected — so every write path enforces it
103
+ * without each call site threading it. 0 = quota off (the opt-in default).
104
+ */
105
+ private sqliteTreeIndex;
106
+ /**
107
+ * Open a space DIRECTLY by its storage scope, WITHOUT deriving (README §5.6
108
+ * `/spaces` naming contract). For `/spaces/{X}` inspection where `X` is already
109
+ * the storage scope (a base32 hash under de-id, or a plaintext DID otherwise):
110
+ * the directory `{rootPath}/{storageScope}` is opened verbatim, `did` returns
111
+ * the opaque `storageScope`, and NO `deriveScope` runs (re-deriving would point
112
+ * at a non-existent `{rootPath}/{derive(storageScope)}`). Constructing with no
113
+ * secret guarantees `_scope === storageScope`. Callers mount it readonly.
114
+ */
115
+ static openStorageScope(opts: {
116
+ rootPath: string;
117
+ storageScope: string;
118
+ }): DIDSpace;
119
+ /**
120
+ * Late-inject the share-resolver factory (share-out Phase 3). Used for the
121
+ * installer space, which `resolveLocalDIDSpace()` builds BEFORE the
122
+ * daemon-global share store exists. Lazy provider construction means this
123
+ * covers every getUserSpace provider built after the call.
124
+ */
125
+ setShareResolverFactory(factory: ShareResolverFactory): void;
126
+ /** Expose constructor options for daemon integration (rootPath, userDid). */
127
+ get config(): Readonly<DIDSpaceOptions>;
128
+ /**
129
+ * Lazily open (or reuse) the user-level `_metadata.db`.
130
+ * Creates `userDir` if missing. Only one instance per DIDSpace.
131
+ */
132
+ getMetadataDb(): Promise<MetadataDB>;
133
+ /**
134
+ * Upload-plane deps for the user-facing provider (design §7 / §15 decision 8).
135
+ * Node is FALLBACK-ONLY: it implements the actions + SQLite session table
136
+ * (protocol parity) but injects NO signer, so `prepare-upload` returns
137
+ * `grant: null` and the native client falls back to batchWrite.
138
+ */
139
+ private uploadDeps;
140
+ /**
141
+ * Lazily create the shared FsObjectStore rooted at `{userDir}/objects`, wrapped
142
+ * with the content-addressed byte cache. Returns the caching wrapper so every
143
+ * provider read benefits; the raw {@link objectStore} field is kept only so
144
+ * {@link close} can drop it.
145
+ */
146
+ private getObjectStore;
147
+ /**
148
+ * Lazily create the `SqliteGcQueue` over the user-level `_metadata.db`
149
+ * (via the `MetadataDB.rawClient` getter — never reaches into private fields).
150
+ * One queue per DIDSpace; injected into every DIDSpaceProvider so overwrites/
151
+ * deletes enqueue the orphaned oldCid for the deferred sweep.
152
+ */
153
+ private getGcQueue;
154
+ /**
155
+ * Run one object-GC sweep over this space's single owner scope (design §4.6).
156
+ * Scope-agnostic: `referencedAnywhere` is scope-blind over the one
157
+ * `_metadata.db`, so one sweep covers the whole daemon. Used by both the
158
+ * `arc space gc` CLI and the daemon's scheduled GC task (AFSScheduler, #742 S3).
159
+ */
160
+ runGc(opts?: {
161
+ graceMs?: number;
162
+ limit?: number;
163
+ log?: (line: string) => void;
164
+ }): Promise<GcStats>;
165
+ /**
166
+ * Back-compat no-op: the eventual-mirror subscriber is gone (the provider now
167
+ * writes entries + changelog atomically), so there is no in-flight work to
168
+ * drain. Kept so existing test/daemon call sites don't break.
169
+ */
170
+ drainSubscribers(): Promise<void>;
171
+ /**
172
+ * Get an isolated AFS instance for a blocklet instance under this DID Space,
173
+ * scoped by role (system = installer-side data, user = caller-side data).
174
+ *
175
+ * Mounts a single `DIDSpaceProvider` whose treeIndex is a `PrefixedTreeIndex`
176
+ * over the user-scoped `SQLiteTreeIndex` at `blocklets/{i}/{role}/`. The
177
+ * prefix is MANDATORY — without it the role root would degrade to the whole
178
+ * space root (data越界). Blobs share the user-level `FsObjectStore`.
179
+ *
180
+ * `userDid` is @deprecated for role:"user" — per-user isolation comes from
181
+ * WHICH space backs the call (the space is already the caller's), so it never
182
+ * enters the path; validated only as defense if supplied.
183
+ */
184
+ getInstanceSpace(opts: InstanceSpaceOptions): Promise<AFS>;
185
+ /**
186
+ * Source-side dirty queue for an instance's `/user` fragment
187
+ * (index-follower-dirty-path §7, §9.2). Returns a `PrefixedTreeIndex` over the
188
+ * user-level `_metadata.db` (where `ds_changelog` + `ds_dirty_path` live), so
189
+ * the daemon can drain the merged dirty projection instead of replaying
190
+ * `/.changelog`. This is a RUNTIME-INTERNAL capability held directly by the
191
+ * daemon's follower — it is NEVER exposed as a public `/user` AFS action
192
+ * (ack/fail mutate scheduling state). Node has no D1 replica, so a single
193
+ * primary `_metadata.db` read is already read-your-write. The index writes stay
194
+ * in the separate `user-index.db`; only source/dirty rows are read here.
195
+ */
196
+ getInstanceDirtyQueue(opts: {
197
+ instanceDid: string;
198
+ role: "user";
199
+ }): Promise<PrefixedTreeIndex>;
200
+ /**
201
+ * Config fragment for an instance — a sibling of the role content tree at
202
+ * `blocklets/<i>/config/`, mounted at `/`. Runtime-internal (mount overrides
203
+ * etc.); NOT part of `/instance`. Stays a plain `AFSFS` blob fragment: config
204
+ * is opaque machine state, not content-addressed sync data (design §2.F/T3.9).
205
+ */
206
+ getConfigSpace(instanceDid: string): Promise<AFS>;
207
+ /**
208
+ * List all instance DIDs that have storage in this user's DID space.
209
+ *
210
+ * Enumerated from the index (the source of truth) rather than `readdir` of
211
+ * the physical tree — the physical layout is now `objects/{cid}` + index, so
212
+ * there is no per-instance directory to walk. Direct children of the
213
+ * `blocklets/` prefix are the instance ids (trailing-slash dir rows).
214
+ */
215
+ listApps(): Promise<string[]>;
216
+ /**
217
+ * Resolve table — persistent + DAEMON-GLOBAL (`{rootPath}/_resolve.db`, NOT
218
+ * the per-space `_metadata.db`): `blocklet/<id> → owner` / `domain/<host> → …`
219
+ * are caller-less reverse lookups that need ONE shared registry, exactly like
220
+ * `_shares.db` and CF's single shared D1. Backed by `SqliteResolveStore` so
221
+ * entries survive across DID-Space instances and daemon restarts — symmetric
222
+ * with `CloudflareDIDSpace.resolver` (D1ResolveStore). Closed in {@link close}.
223
+ */
224
+ get resolver(): DIDSpaceResolver;
225
+ /**
226
+ * Whole-space root (contract alias `getSpaceRoot`; legacy name `getUserSpace`)
227
+ * — a `DIDSpaceProvider` over the NO-PREFIX user-scoped `SQLiteTreeIndex`, so
228
+ * it sees every instance fragment in the space. Used by `arc space`
229
+ * export/import/diff (CLI manifest source) and observability. Mobile sync does
230
+ * NOT use it (mobile goes through the aside `/user` fragment).
231
+ */
232
+ getSpaceRoot(options?: {
233
+ accessMode?: AFSAccessMode;
234
+ }): Promise<AFS>;
235
+ getUserSpace(options?: {
236
+ accessMode?: AFSAccessMode;
237
+ }): Promise<AFS>;
238
+ /**
239
+ * Share-out Phase 4: a READONLY AFS for public `/s/{slug}` serving, scoped by
240
+ * `prefix` (with trailing slash, e.g. `docs/`) or — when undefined — the whole
241
+ * owner tree (root share + sidecar). Reuses THIS space's metadataDb +
242
+ * objectStore (no second libsql client on `_metadata.db`, which would race).
243
+ * No shareResolver injected: serving is read-only, never reconciles.
244
+ */
245
+ getShareServeAFS(prefix?: string): Promise<AFS>;
246
+ /**
247
+ * Clean up resources. Closes the user-level MetadataDB and clears the
248
+ * instance-space cache. No event subscriptions to tear down anymore.
249
+ */
250
+ close(): void;
251
+ }
252
+ //#endregion
253
+ export { type CidCacheRow, DIDSpace, DIDSpaceOptions, type EntryRow, FsObjectStore, type InstanceSpaceOptions, MetadataDB, type NodeScopeMigrationOptions, type NodeScopeMigrationReport, type ReconcileOptions, type ReconcileStats, SQLiteTreeIndex, ShareResolverFactory, migrateNodeMetadataDb, migrateNodeSpaces, normalizeId, reconcile, validateId };
254
+ //# sourceMappingURL=local.d.cts.map