@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,178 @@
1
+ import { AFSAlreadyExistsError, makeNsLog } from "@aigne/afs";
2
+
3
+ //#region src/blocklet-hook.ts
4
+ /**
5
+ * Blocklet publish/resolve write & delete hooks (#674 Phase 3, v2).
6
+ *
7
+ * AFS-native registration keyed on a PUBLISH MARKER, not `blocklet.yaml`:
8
+ * `arc deploy` writes `<blocklet-root>/.blocklet-publish.json` LAST (always —
9
+ * even for blocklets that have no `blocklet.yaml`, e.g. a plain `index.html`
10
+ * one), and that write registers the blocklet in the global resolve table under
11
+ * `resolve/blocklet/<id>`. The CF/Node serve path reads the table back to find
12
+ * the owner space + path. There is NO REST endpoint — registration rides the
13
+ * AFS write of the marker, mirroring how `.share` files reconcile.
14
+ *
15
+ * Why a marker and not `blocklet.yaml`: not every blocklet has a manifest, and
16
+ * the blocklet's identity at publish time is the target slug
17
+ * (`/user/blocklets/<slug>/`), which `arc deploy` already knows (manifest id
18
+ * else dir name). Keying on a publish-written marker (a) works for ALL blocklet
19
+ * shapes, (b) leaves the developer's files untouched (so a static blocklet stays
20
+ * a static blocklet — a synthesized manifest could flip its serve type), and
21
+ * (c) registers only on an explicit publish, not on any incidental manifest write.
22
+ *
23
+ * Contract (see planning/did-integration/blocklet-publish-resolve/design.md):
24
+ * marker : <blocklet-root>/.blocklet-publish.json = { "id": "<slug>", ... }
25
+ * register: resolve/blocklet/<id> → { owner, path, type:"blocklet", name:id }
26
+ * - owner = PLAINTEXT space-owner DID (so the reader can open the space)
27
+ * - path = the blocklet root (dir holding the marker), captured at write
28
+ * time — scope-absolute, so resolve replays it regardless of WHERE
29
+ * it was written (`/user/...` lands physically under
30
+ * `blocklets/<instance>/user/...` and we capture that real path)
31
+ * resolve : resolve/blocklet/<id> → { owner, path }
32
+ * serve : getUserSpace(owner) → createAfsBlockletReader(afs, path)
33
+ *
34
+ * All hooks are best-effort / fail-soft: a marker that doesn't parse or has no
35
+ * `id`, or a registration failure, MUST NOT break the underlying file write.
36
+ *
37
+ * #764 Phase 4 extends the marker with an optional `domains: string[]` (from
38
+ * the manifest's `sites[].domains`) that also registers `resolve/domain/<domain>`
39
+ * → { did, owner, path }. This is the ONE deliberate exception to fail-soft: a
40
+ * domain already owned by a different owner rejects the write loudly instead
41
+ * of silently overwriting — see `applyBlockletWriteHook`'s doc comment.
42
+ */
43
+ const log = makeNsLog("provider:did-space:blocklet-hook");
44
+ /** The publish marker `arc deploy` writes (last) into a blocklet's DID-Space root. */
45
+ const BLOCKLET_PUBLISH_MARKER = ".blocklet-publish.json";
46
+ /**
47
+ * True if `afsPath`'s basename is the publish marker. Accepts a leading slash
48
+ * and any directory depth.
49
+ */
50
+ function isBlockletPublishMarkerPath(afsPath) {
51
+ const p = afsPath.startsWith("/") ? afsPath.slice(1) : afsPath;
52
+ return p === BLOCKLET_PUBLISH_MARKER || p.endsWith(`/${BLOCKLET_PUBLISH_MARKER}`);
53
+ }
54
+ /**
55
+ * Parse a publish-marker payload and extract `{id, did, domains}`. Returns
56
+ * null on any failure (non-UTF-8, non-JSON, not an object, missing/blank
57
+ * `id`) — the caller treats null as "not registerable" and leaves the write
58
+ * untouched. A malformed `domains` field (not an array, or with non-string /
59
+ * empty elements) is NOT a parse failure — it is silently dropped down to
60
+ * only the valid string entries (empty result → field omitted), same
61
+ * fail-soft spirit as the rest of this parser.
62
+ */
63
+ function parseBlockletPublishMarker(bytes) {
64
+ let text;
65
+ try {
66
+ text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
67
+ } catch {
68
+ return null;
69
+ }
70
+ let doc;
71
+ try {
72
+ doc = JSON.parse(text);
73
+ } catch {
74
+ return null;
75
+ }
76
+ if (!doc || typeof doc !== "object" || Array.isArray(doc)) return null;
77
+ const record = doc;
78
+ const id = record.id;
79
+ if (typeof id !== "string" || id.length === 0) return null;
80
+ const did = typeof record.did === "string" && record.did.length > 0 ? record.did : void 0;
81
+ const domains = Array.isArray(record.domains) ? record.domains.filter((d) => typeof d === "string" && d.length > 0) : void 0;
82
+ const publishVersion = typeof record.publishVersion === "number" && Number.isFinite(record.publishVersion) ? record.publishVersion : void 0;
83
+ const hasWebCache = typeof record.hasWebCache === "boolean" ? record.hasWebCache : void 0;
84
+ return {
85
+ id,
86
+ did,
87
+ ...domains && domains.length > 0 ? { domains } : {},
88
+ ...publishVersion !== void 0 ? { publishVersion } : {},
89
+ ...hasWebCache !== void 0 ? { hasWebCache } : {}
90
+ };
91
+ }
92
+ /** Blocklet root for a marker tree path: strip the trailing marker segment. */
93
+ function blockletDir(treePath) {
94
+ const norm = treePath.replace(/^\/+/, "");
95
+ const idx = norm.lastIndexOf("/");
96
+ return idx === -1 ? "" : norm.slice(0, idx);
97
+ }
98
+ /**
99
+ * applyBlockletWriteHook — called AFTER a successful publish-marker write in any
100
+ * DID Space write path. Registers `resolve/blocklet/<id>` → {owner, path} and,
101
+ * when the marker declares `domains` (#764), `resolve/domain/<domain>` →
102
+ * {did, owner, path} for each.
103
+ *
104
+ * No-op when the resolver is absent, the path isn't the publish marker, or the
105
+ * marker has no usable `id`.
106
+ *
107
+ * Domain conflict is a DELIBERATE, SCOPED exception to this file's usual
108
+ * fail-soft rule: the user wants a domain claimed by a different owner to
109
+ * reject the publish loudly, not silently succeed into someone else's slot.
110
+ * The conflict check therefore runs OUTSIDE the fail-soft try/catch below —
111
+ * validate every domain BEFORE registering anything (so a conflict on one
112
+ * domain never leaves a partial registration), then register. A registration
113
+ * failure unrelated to a conflict (e.g. a transient resolver error) keeps the
114
+ * existing fail-soft contract: the marker write itself must not fail.
115
+ */
116
+ async function applyBlockletWriteHook(params) {
117
+ if (!params.resolver || !isBlockletPublishMarkerPath(params.afsPath)) return;
118
+ const marker = parseBlockletPublishMarker(params.bytes);
119
+ if (!marker) return;
120
+ const { id, domains = [] } = marker;
121
+ const did = marker.did ?? `did:blocklet:${id}`;
122
+ const path = blockletDir(params.treePath);
123
+ const { resolver, ownerDid } = params;
124
+ const existingBlocklet = await resolver.resolveBlocklet(id);
125
+ if (existingBlocklet && existingBlocklet.owner !== ownerDid) throw new AFSAlreadyExistsError(id, `blocklet "${id}" is already registered to a different owner`);
126
+ for (const domain of domains) {
127
+ const existing = await resolver.resolveDomain(domain);
128
+ if (existing && existing.owner !== ownerDid) throw new AFSAlreadyExistsError(domain, `domain "${domain}" is already registered to a different owner`);
129
+ }
130
+ const { publishVersion, hasWebCache } = marker;
131
+ try {
132
+ await resolver.registerBlocklet(id, {
133
+ owner: ownerDid,
134
+ path,
135
+ type: "blocklet",
136
+ name: id,
137
+ ...publishVersion !== void 0 ? { publishVersion } : {},
138
+ ...hasWebCache !== void 0 ? { hasWebCache } : {}
139
+ });
140
+ for (const domain of domains) await resolver.registerDomain(domain, {
141
+ did,
142
+ owner: ownerDid,
143
+ path,
144
+ ...publishVersion !== void 0 ? { publishVersion } : {},
145
+ ...hasWebCache !== void 0 ? { hasWebCache } : {}
146
+ });
147
+ const stale = (await resolver.domainsForBlocklet(ownerDid, path)).filter((d) => !domains.includes(d));
148
+ for (const domain of stale) await resolver.unregisterDomain(domain);
149
+ if (params.purgeCachesForDomains && domains.length > 0) await params.purgeCachesForDomains(domains);
150
+ } catch (err) {
151
+ log.warn(`[blocklet-hook] registration for "${id}" failed: ${err instanceof Error ? err.message : err}`);
152
+ }
153
+ }
154
+ /**
155
+ * applyBlockletDeleteHook — called AFTER a publish marker is deleted. Looks up
156
+ * the registered blocklet by (owner, path) and unregisters it, along with any
157
+ * domains registered for the same (owner, path) (#764). We key by path rather
158
+ * than re-parsing the marker because the delete path has no bytes; the
159
+ * (owner, path) pair uniquely identifies a published blocklet (one marker per
160
+ * root). No-op when nothing matches.
161
+ */
162
+ async function applyBlockletDeleteHook(params) {
163
+ if (!params.resolver || !isBlockletPublishMarkerPath(params.afsPath)) return;
164
+ const path = blockletDir(params.treePath);
165
+ const { resolver, ownerDid } = params;
166
+ try {
167
+ const all = await resolver.listBlocklets();
168
+ for (const { id, entry } of all) if (entry.owner === ownerDid && entry.path === path) await resolver.unregisterBlocklet(id);
169
+ const domains = await resolver.domainsForBlocklet(ownerDid, path);
170
+ for (const domain of domains) await resolver.unregisterDomain(domain);
171
+ } catch (err) {
172
+ log.warn(`[blocklet-hook] unregister for path "${path}" failed: ${err instanceof Error ? err.message : err}`);
173
+ }
174
+ }
175
+
176
+ //#endregion
177
+ export { BLOCKLET_PUBLISH_MARKER, applyBlockletDeleteHook, applyBlockletWriteHook };
178
+ //# sourceMappingURL=blocklet-hook.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocklet-hook.mjs","names":[],"sources":["../src/blocklet-hook.ts"],"sourcesContent":["/**\n * Blocklet publish/resolve write & delete hooks (#674 Phase 3, v2).\n *\n * AFS-native registration keyed on a PUBLISH MARKER, not `blocklet.yaml`:\n * `arc deploy` writes `<blocklet-root>/.blocklet-publish.json` LAST (always —\n * even for blocklets that have no `blocklet.yaml`, e.g. a plain `index.html`\n * one), and that write registers the blocklet in the global resolve table under\n * `resolve/blocklet/<id>`. The CF/Node serve path reads the table back to find\n * the owner space + path. There is NO REST endpoint — registration rides the\n * AFS write of the marker, mirroring how `.share` files reconcile.\n *\n * Why a marker and not `blocklet.yaml`: not every blocklet has a manifest, and\n * the blocklet's identity at publish time is the target slug\n * (`/user/blocklets/<slug>/`), which `arc deploy` already knows (manifest id\n * else dir name). Keying on a publish-written marker (a) works for ALL blocklet\n * shapes, (b) leaves the developer's files untouched (so a static blocklet stays\n * a static blocklet — a synthesized manifest could flip its serve type), and\n * (c) registers only on an explicit publish, not on any incidental manifest write.\n *\n * Contract (see planning/did-integration/blocklet-publish-resolve/design.md):\n * marker : <blocklet-root>/.blocklet-publish.json = { \"id\": \"<slug>\", ... }\n * register: resolve/blocklet/<id> → { owner, path, type:\"blocklet\", name:id }\n * - owner = PLAINTEXT space-owner DID (so the reader can open the space)\n * - path = the blocklet root (dir holding the marker), captured at write\n * time — scope-absolute, so resolve replays it regardless of WHERE\n * it was written (`/user/...` lands physically under\n * `blocklets/<instance>/user/...` and we capture that real path)\n * resolve : resolve/blocklet/<id> → { owner, path }\n * serve : getUserSpace(owner) → createAfsBlockletReader(afs, path)\n *\n * All hooks are best-effort / fail-soft: a marker that doesn't parse or has no\n * `id`, or a registration failure, MUST NOT break the underlying file write.\n *\n * #764 Phase 4 extends the marker with an optional `domains: string[]` (from\n * the manifest's `sites[].domains`) that also registers `resolve/domain/<domain>`\n * → { did, owner, path }. This is the ONE deliberate exception to fail-soft: a\n * domain already owned by a different owner rejects the write loudly instead\n * of silently overwriting — see `applyBlockletWriteHook`'s doc comment.\n */\n\nimport { AFSAlreadyExistsError, makeNsLog } from \"@aigne/afs\";\nimport type { DIDSpaceResolver } from \"./resolve.js\";\n\nconst log = makeNsLog(\"provider:did-space:blocklet-hook\");\n\n/** The publish marker `arc deploy` writes (last) into a blocklet's DID-Space root. */\nexport const BLOCKLET_PUBLISH_MARKER = \".blocklet-publish.json\";\n\n/** Shape of the publish marker payload. */\nexport interface BlockletPublishMarker {\n /** The blocklet slug — manifest `id` else the publish dir name. Resolve key. */\n id: string;\n /** Full blocklet DID. Load-bearing for domain registration (#764) — see below. */\n did?: string;\n /** ISO publish timestamp (informational). */\n publishedAt?: string;\n /** Custom domains declared under `sites[].domains` in the manifest (#764). */\n domains?: string[];\n /**\n * Monotonic timestamp (Date.now()) written by the CLI at publish time.\n * Materialized into resolve entries; used by CF Worker edge-cache invalidation\n * so that the cached page key changes on every publish (#1110).\n */\n publishVersion?: number;\n /**\n * True when the published bundle includes pre-rendered `.web-cache/` content.\n * Materialized into resolve entries so the CF Worker knows to do edge-caching\n * without checking the blocklet files (#1110).\n */\n hasWebCache?: boolean;\n}\n\n/**\n * True if `afsPath`'s basename is the publish marker. Accepts a leading slash\n * and any directory depth.\n */\nexport function isBlockletPublishMarkerPath(afsPath: string): boolean {\n const p = afsPath.startsWith(\"/\") ? afsPath.slice(1) : afsPath;\n return p === BLOCKLET_PUBLISH_MARKER || p.endsWith(`/${BLOCKLET_PUBLISH_MARKER}`);\n}\n\n/**\n * Parse a publish-marker payload and extract `{id, did, domains}`. Returns\n * null on any failure (non-UTF-8, non-JSON, not an object, missing/blank\n * `id`) — the caller treats null as \"not registerable\" and leaves the write\n * untouched. A malformed `domains` field (not an array, or with non-string /\n * empty elements) is NOT a parse failure — it is silently dropped down to\n * only the valid string entries (empty result → field omitted), same\n * fail-soft spirit as the rest of this parser.\n */\nexport function parseBlockletPublishMarker(bytes: Uint8Array): {\n id: string;\n did?: string;\n domains?: string[];\n publishVersion?: number;\n hasWebCache?: boolean;\n} | null {\n let text: string;\n try {\n text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n } catch {\n return null;\n }\n let doc: unknown;\n try {\n doc = JSON.parse(text);\n } catch {\n return null;\n }\n if (!doc || typeof doc !== \"object\" || Array.isArray(doc)) return null;\n const record = doc as Record<string, unknown>;\n const id = record.id;\n if (typeof id !== \"string\" || id.length === 0) return null;\n const did = typeof record.did === \"string\" && record.did.length > 0 ? record.did : undefined;\n const domains = Array.isArray(record.domains)\n ? record.domains.filter((d): d is string => typeof d === \"string\" && d.length > 0)\n : undefined;\n const publishVersion =\n typeof record.publishVersion === \"number\" && Number.isFinite(record.publishVersion)\n ? record.publishVersion\n : undefined;\n const hasWebCache = typeof record.hasWebCache === \"boolean\" ? record.hasWebCache : undefined;\n return {\n id,\n did,\n ...(domains && domains.length > 0 ? { domains } : {}),\n ...(publishVersion !== undefined ? { publishVersion } : {}),\n ...(hasWebCache !== undefined ? { hasWebCache } : {}),\n };\n}\n\n/** Blocklet root for a marker tree path: strip the trailing marker segment. */\nfunction blockletDir(treePath: string): string {\n const norm = treePath.replace(/^\\/+/, \"\");\n const idx = norm.lastIndexOf(\"/\");\n return idx === -1 ? \"\" : norm.slice(0, idx);\n}\n\n/**\n * applyBlockletWriteHook — called AFTER a successful publish-marker write in any\n * DID Space write path. Registers `resolve/blocklet/<id>` → {owner, path} and,\n * when the marker declares `domains` (#764), `resolve/domain/<domain>` →\n * {did, owner, path} for each.\n *\n * No-op when the resolver is absent, the path isn't the publish marker, or the\n * marker has no usable `id`.\n *\n * Domain conflict is a DELIBERATE, SCOPED exception to this file's usual\n * fail-soft rule: the user wants a domain claimed by a different owner to\n * reject the publish loudly, not silently succeed into someone else's slot.\n * The conflict check therefore runs OUTSIDE the fail-soft try/catch below —\n * validate every domain BEFORE registering anything (so a conflict on one\n * domain never leaves a partial registration), then register. A registration\n * failure unrelated to a conflict (e.g. a transient resolver error) keeps the\n * existing fail-soft contract: the marker write itself must not fail.\n */\nexport async function applyBlockletWriteHook(params: {\n afsPath: string;\n /** Whole-tree (scope-absolute) tree path of the written publish marker. */\n treePath: string;\n bytes: Uint8Array;\n /** PLAINTEXT space-owner DID (NOT the de-id scope). */\n ownerDid: string;\n resolver: DIDSpaceResolver | undefined;\n /**\n * Optional callback invoked after all blocklet/domain resolve entries are\n * (re-)registered. Receives the full list of active domains for the newly\n * published blocklet. Intended for CF edge-cache purge: delete the cached\n * HTML for each domain so the next request fetches the new content (#1110).\n * The callback is best-effort — any error it throws is swallowed by the\n * outer fail-soft try/catch (same contract as registration failures).\n */\n purgeCachesForDomains?: (domains: string[]) => Promise<void>;\n}): Promise<void> {\n if (!params.resolver || !isBlockletPublishMarkerPath(params.afsPath)) return;\n const marker = parseBlockletPublishMarker(params.bytes);\n if (!marker) return;\n const { id, domains = [] } = marker;\n const did = marker.did ?? `did:blocklet:${id}`;\n const path = blockletDir(params.treePath);\n const { resolver, ownerDid } = params;\n\n // Validate blocklet id ownership before registering ANYTHING. Like the\n // domain check below, this runs outside the fail-soft try/catch so a\n // genuine conflict surfaces as a write rejection rather than a silent\n // swallow.\n const existingBlocklet = await resolver.resolveBlocklet(id);\n if (existingBlocklet && existingBlocklet.owner !== ownerDid) {\n throw new AFSAlreadyExistsError(\n id,\n `blocklet \"${id}\" is already registered to a different owner`,\n );\n }\n\n // Validate ALL domains before registering ANYTHING (data-loss prevention —\n // a conflict must not leave a partial registration). Un-caught: a genuine\n // conflict (or any other error surfaced while checking) propagates to the\n // caller as a write rejection, it is not swallowed.\n for (const domain of domains) {\n const existing = await resolver.resolveDomain(domain);\n if (existing && existing.owner !== ownerDid) {\n throw new AFSAlreadyExistsError(\n domain,\n `domain \"${domain}\" is already registered to a different owner`,\n );\n }\n }\n\n const { publishVersion, hasWebCache } = marker;\n try {\n await resolver.registerBlocklet(id, {\n owner: ownerDid,\n path,\n type: \"blocklet\",\n name: id,\n ...(publishVersion !== undefined ? { publishVersion } : {}),\n ...(hasWebCache !== undefined ? { hasWebCache } : {}),\n });\n for (const domain of domains) {\n await resolver.registerDomain(domain, {\n did,\n owner: ownerDid,\n path,\n ...(publishVersion !== undefined ? { publishVersion } : {}),\n ...(hasWebCache !== undefined ? { hasWebCache } : {}),\n });\n }\n // Reconcile: drop domains previously registered for this (owner, path)\n // that are no longer in the new list (developer removed a custom domain).\n const stale = (await resolver.domainsForBlocklet(ownerDid, path)).filter(\n (d) => !domains.includes(d),\n );\n for (const domain of stale) {\n await resolver.unregisterDomain(domain);\n }\n // Purge CF edge caches for all active domains so the next request fetches\n // fresh content (#1110). Best-effort — failure here is swallowed below.\n if (params.purgeCachesForDomains && domains.length > 0) {\n await params.purgeCachesForDomains(domains);\n }\n } catch (err) {\n // Fail-soft: a registration failure (e.g. invalid id, or a transient\n // resolver error during domain register/reconcile) must not break the\n // write — the file is already persisted; resolve just won't see it.\n log.warn(\n `[blocklet-hook] registration for \"${id}\" failed: ${err instanceof Error ? err.message : err}`,\n );\n }\n}\n\n/**\n * applyBlockletDeleteHook — called AFTER a publish marker is deleted. Looks up\n * the registered blocklet by (owner, path) and unregisters it, along with any\n * domains registered for the same (owner, path) (#764). We key by path rather\n * than re-parsing the marker because the delete path has no bytes; the\n * (owner, path) pair uniquely identifies a published blocklet (one marker per\n * root). No-op when nothing matches.\n */\nexport async function applyBlockletDeleteHook(params: {\n afsPath: string;\n treePath: string;\n ownerDid: string;\n resolver: DIDSpaceResolver | undefined;\n}): Promise<void> {\n if (!params.resolver || !isBlockletPublishMarkerPath(params.afsPath)) return;\n const path = blockletDir(params.treePath);\n const { resolver, ownerDid } = params;\n try {\n const all = await resolver.listBlocklets();\n for (const { id, entry } of all) {\n if (entry.owner === ownerDid && entry.path === path) {\n await resolver.unregisterBlocklet(id);\n }\n }\n const domains = await resolver.domainsForBlocklet(ownerDid, path);\n for (const domain of domains) {\n await resolver.unregisterDomain(domain);\n }\n } catch (err) {\n log.warn(\n `[blocklet-hook] unregister for path \"${path}\" failed: ${err instanceof Error ? err.message : err}`,\n );\n }\n}\n"],"mappings":"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"}