@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,788 @@
1
+ const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
2
+ let _aigne_afs = require("@aigne/afs");
3
+ let ufo = require("ufo");
4
+
5
+ //#region ../../../packages/session/dist/index.mjs
6
+ /**
7
+ * Binary sidecar — carry raw bytes alongside a JSON envelope.
8
+ *
9
+ * Wire format for a message that contains a Uint8Array value:
10
+ * [Binary frame: reqId=N, payload=raw bytes]
11
+ * [JSON frame: reqId=N, payload=JSON with {__afs_binary_ref:true,size:N} marker]
12
+ *
13
+ * Ordering: the Binary frame MUST immediately precede the JSON frame with
14
+ * the same reqId. WebSocket preserves message order, so receivers can
15
+ * buffer the last-seen Binary by reqId and splice it in when the matching
16
+ * JSON arrives.
17
+ *
18
+ * Only one binary slot per message is supported today — large reads/writes
19
+ * put the bytes at `result.data.content` / `params.payload.content`. If we
20
+ * ever need multi-slot, extend the marker with an index and have the binary
21
+ * frame carry a length-prefixed table.
22
+ *
23
+ * Marker key is intentionally rare (`__afs_binary_ref`) to avoid colliding
24
+ * with user payload keys. `isBinaryMarker` also requires `size: number` so
25
+ * a stray `{__afs_binary_ref: true}` in user data without a numeric size
26
+ * still won't be mistaken for a marker.
27
+ */
28
+ const BINARY_MARKER_KEY = "__afs_binary_ref";
29
+ function isBinaryMarker(v) {
30
+ if (typeof v !== "object" || v === null) return false;
31
+ const o = v;
32
+ return o[BINARY_MARKER_KEY] === true && typeof o.size === "number";
33
+ }
34
+ function toUint8(value) {
35
+ if (value instanceof Uint8Array) return value;
36
+ if (value instanceof ArrayBuffer) return new Uint8Array(value);
37
+ return null;
38
+ }
39
+ /**
40
+ * Walk a value and replace the first node for which `replace` returns a
41
+ * non-null value. Identity-preserving: if nothing changed, returns the
42
+ * original reference — so the no-binary path allocates nothing.
43
+ */
44
+ function walkReplaceFirst(value, replace) {
45
+ let done = false;
46
+ const walk = (v) => {
47
+ if (done) return v;
48
+ const replaced = replace(v);
49
+ if (replaced !== null) {
50
+ done = true;
51
+ return replaced;
52
+ }
53
+ if (Array.isArray(v)) {
54
+ let changed = false;
55
+ let out = null;
56
+ for (let i = 0; i < v.length; i++) {
57
+ const nv = walk(v[i]);
58
+ if (nv !== v[i]) {
59
+ if (!changed) {
60
+ out = v.slice();
61
+ changed = true;
62
+ }
63
+ out[i] = nv;
64
+ }
65
+ }
66
+ return changed ? out : v;
67
+ }
68
+ if (v && typeof v === "object") {
69
+ let changed = false;
70
+ let out = null;
71
+ for (const [k, inner] of Object.entries(v)) {
72
+ const nv = walk(inner);
73
+ if (nv !== inner) {
74
+ if (!changed) {
75
+ out = { ...v };
76
+ changed = true;
77
+ }
78
+ out[k] = nv;
79
+ }
80
+ }
81
+ return changed ? out : v;
82
+ }
83
+ return v;
84
+ };
85
+ return walk(value);
86
+ }
87
+ /**
88
+ * Walk a message object and extract the first Uint8Array / ArrayBuffer
89
+ * value found (depth-first, keys in insertion order). Replaces the value
90
+ * with a `{__afs_binary_ref:true,size:N}` marker. Returns the cleaned
91
+ * message plus the extracted bytes (if any).
92
+ *
93
+ * Pure — does not mutate the input.
94
+ */
95
+ function extractBinary(message) {
96
+ let extracted;
97
+ const next = walkReplaceFirst(message, (v) => {
98
+ const bytes = toUint8(v);
99
+ if (!bytes) return null;
100
+ extracted = bytes;
101
+ return {
102
+ [BINARY_MARKER_KEY]: true,
103
+ size: bytes.byteLength
104
+ };
105
+ });
106
+ return extracted ? {
107
+ message: next,
108
+ binary: extracted
109
+ } : { message };
110
+ }
111
+ /**
112
+ * Walk a value and replace the first `{__afs_binary_ref:true,size:N}`
113
+ * marker with the given Uint8Array. Returns a new value if a marker was
114
+ * found, or the original reference if not.
115
+ */
116
+ function injectBinary(value, binary) {
117
+ return walkReplaceFirst(value, (v) => isBinaryMarker(v) ? binary : null);
118
+ }
119
+ /**
120
+ * Protocol constants
121
+ */
122
+ const HEADER_SIZE = 9;
123
+ const MAX_PAYLOAD_SIZE = 16 * 1024 * 1024;
124
+ const CHUNK_SIZE = 64 * 1024;
125
+ const MAX_JSON_DEPTH = 100;
126
+ const MAX_JSON_SIZE = MAX_PAYLOAD_SIZE;
127
+ const MAX_UINT32 = 4294967295;
128
+ /**
129
+ * Frame types
130
+ */
131
+ let FrameType = /* @__PURE__ */ function(FrameType) {
132
+ FrameType[FrameType["JSON"] = 1] = "JSON";
133
+ FrameType[FrameType["Binary"] = 2] = "Binary";
134
+ return FrameType;
135
+ }({});
136
+ /**
137
+ * Protocol errors
138
+ */
139
+ var ProtocolError = class extends Error {
140
+ constructor(code, message) {
141
+ super(message);
142
+ this.code = code;
143
+ this.name = "ProtocolError";
144
+ }
145
+ };
146
+ var PayloadTooLargeError = class extends ProtocolError {
147
+ constructor(size) {
148
+ super("payload_too_large", `Payload size ${size} exceeds maximum ${MAX_PAYLOAD_SIZE}`);
149
+ this.name = "PayloadTooLargeError";
150
+ }
151
+ };
152
+ var InvalidPayloadError = class extends ProtocolError {
153
+ constructor(message) {
154
+ super("invalid_payload", message);
155
+ this.name = "InvalidPayloadError";
156
+ }
157
+ };
158
+ var InvalidFrameTypeError = class extends ProtocolError {
159
+ constructor(type) {
160
+ super("invalid_frame_type", `Invalid frame type: 0x${type.toString(16).padStart(2, "0")}`);
161
+ this.name = "InvalidFrameTypeError";
162
+ }
163
+ };
164
+ var InvalidReqIdError = class extends ProtocolError {
165
+ constructor(reqId) {
166
+ super("invalid_req_id", `Invalid request ID: ${reqId} (must be 0-${MAX_UINT32})`);
167
+ this.name = "InvalidReqIdError";
168
+ }
169
+ };
170
+ var IncompleteFrameError = class extends ProtocolError {
171
+ constructor(message) {
172
+ super("incomplete_frame", message);
173
+ this.name = "IncompleteFrameError";
174
+ }
175
+ };
176
+ /**
177
+ * Validates frame type.
178
+ */
179
+ function isValidFrameType(type) {
180
+ return type === FrameType.JSON || type === FrameType.Binary;
181
+ }
182
+ /**
183
+ * Encodes a frame with the given type, request ID, and payload.
184
+ *
185
+ * Frame structure (big-endian):
186
+ * - Length (4 bytes): payload length
187
+ * - Type (1 byte): frame type
188
+ * - ReqId (4 bytes): request ID
189
+ * - Payload (variable): actual data
190
+ *
191
+ * @param type Frame type (JSON or Binary)
192
+ * @param reqId Request ID (0 for events, >0 for request/response)
193
+ * @param payload The payload data
194
+ * @returns Encoded frame as Uint8Array
195
+ */
196
+ function encodeFrame(type, reqId, payload) {
197
+ if (payload == null) throw new InvalidPayloadError("Payload cannot be null or undefined");
198
+ if (payload.length > MAX_PAYLOAD_SIZE) throw new PayloadTooLargeError(payload.length);
199
+ if (!isValidFrameType(type)) throw new InvalidFrameTypeError(type);
200
+ if (reqId < 0 || reqId > MAX_UINT32 || !Number.isInteger(reqId)) throw new InvalidReqIdError(reqId);
201
+ const frame = new Uint8Array(HEADER_SIZE + payload.length);
202
+ const view = new DataView(frame.buffer, frame.byteOffset);
203
+ view.setUint32(0, payload.length);
204
+ view.setUint8(4, type);
205
+ view.setUint32(5, reqId);
206
+ frame.set(payload, HEADER_SIZE);
207
+ return frame;
208
+ }
209
+ /**
210
+ * Decodes a frame from a buffer.
211
+ *
212
+ * @param buffer The buffer containing the frame data
213
+ * @returns Object containing the decoded frame and any remaining bytes
214
+ * @throws IncompleteFrameError if buffer doesn't contain a complete frame
215
+ * @throws InvalidFrameTypeError if frame type is invalid
216
+ * @throws PayloadTooLargeError if payload length exceeds maximum
217
+ */
218
+ function decodeFrame(buffer) {
219
+ if (buffer.length < HEADER_SIZE) throw new IncompleteFrameError(`Buffer too small: ${buffer.length} bytes, need at least ${HEADER_SIZE}`);
220
+ const view = new DataView(buffer.buffer, buffer.byteOffset);
221
+ const length = view.getUint32(0);
222
+ const type = view.getUint8(4);
223
+ const reqId = view.getUint32(5);
224
+ if (length > MAX_PAYLOAD_SIZE) throw new PayloadTooLargeError(length);
225
+ if (!isValidFrameType(type)) throw new InvalidFrameTypeError(type);
226
+ const totalSize = HEADER_SIZE + length;
227
+ if (buffer.length < totalSize) throw new IncompleteFrameError(`Incomplete frame: have ${buffer.length} bytes, need ${totalSize}`);
228
+ const payload = buffer.slice(HEADER_SIZE, totalSize);
229
+ const remaining = buffer.slice(totalSize);
230
+ return {
231
+ frame: {
232
+ type,
233
+ reqId,
234
+ payload
235
+ },
236
+ remaining
237
+ };
238
+ }
239
+ /**
240
+ * Error thrown when pending buffer exceeds maximum size
241
+ */
242
+ var BufferOverflowError = class extends ProtocolError {
243
+ constructor(size, maxSize) {
244
+ super("buffer_overflow", `Pending buffer size ${size} exceeds maximum ${maxSize}`);
245
+ this.name = "BufferOverflowError";
246
+ }
247
+ };
248
+ /**
249
+ * Streaming frame decoder that handles:
250
+ * - Partial frames across multiple pushes (拆包)
251
+ * - Multiple frames in single push (粘包)
252
+ * - Buffer overflow protection (security)
253
+ */
254
+ var FrameDecoder = class {
255
+ buffer = new Uint8Array(0);
256
+ maxPendingSize;
257
+ constructor(options) {
258
+ this.maxPendingSize = options?.maxPendingSize ?? MAX_PAYLOAD_SIZE + HEADER_SIZE;
259
+ }
260
+ /**
261
+ * Push data into the decoder and return any complete frames.
262
+ *
263
+ * @param data New data to append to buffer
264
+ * @returns Array of complete frames (may be empty)
265
+ * @throws InvalidFrameTypeError if frame type is invalid
266
+ * @throws PayloadTooLargeError if payload exceeds maximum
267
+ * @throws BufferOverflowError if pending buffer exceeds maximum
268
+ */
269
+ push(data) {
270
+ if (data.length === 0) return [];
271
+ const newBuffer = new Uint8Array(this.buffer.length + data.length);
272
+ newBuffer.set(this.buffer, 0);
273
+ newBuffer.set(data, this.buffer.length);
274
+ this.buffer = newBuffer;
275
+ if (this.buffer.length > this.maxPendingSize) throw new BufferOverflowError(this.buffer.length, this.maxPendingSize);
276
+ const frames = [];
277
+ while (this.buffer.length >= HEADER_SIZE) {
278
+ const payloadLength = new DataView(this.buffer.buffer, this.buffer.byteOffset).getUint32(0);
279
+ if (payloadLength > MAX_PAYLOAD_SIZE) throw new PayloadTooLargeError(payloadLength);
280
+ const totalFrameSize = HEADER_SIZE + payloadLength;
281
+ if (this.buffer.length < totalFrameSize) break;
282
+ const { frame, remaining } = decodeFrame(this.buffer);
283
+ frames.push(frame);
284
+ this.buffer = remaining;
285
+ }
286
+ return frames;
287
+ }
288
+ /**
289
+ * Reset the decoder state, discarding any buffered data.
290
+ */
291
+ reset() {
292
+ this.buffer = new Uint8Array(0);
293
+ }
294
+ /**
295
+ * Get the current pending buffer size.
296
+ */
297
+ get pendingSize() {
298
+ return this.buffer.length;
299
+ }
300
+ };
301
+ /**
302
+ * Error for invalid message structure
303
+ */
304
+ var InvalidMessageError = class extends ProtocolError {
305
+ constructor(message) {
306
+ super("invalid_message", message);
307
+ this.name = "InvalidMessageError";
308
+ }
309
+ };
310
+ /**
311
+ * Error for JSON parsing failures
312
+ */
313
+ var ParseError = class extends ProtocolError {
314
+ constructor(message) {
315
+ super("parse_error", `Parse error: ${message}`);
316
+ this.name = "ParseError";
317
+ }
318
+ };
319
+ /**
320
+ * Error for depth limit exceeded
321
+ */
322
+ var DepthLimitExceededError = class extends ProtocolError {
323
+ constructor() {
324
+ super("depth_limit_exceeded", `JSON depth limit exceeded (max ${MAX_JSON_DEPTH})`);
325
+ this.name = "DepthLimitExceededError";
326
+ }
327
+ };
328
+ /**
329
+ * Error for message too large
330
+ */
331
+ var MessageTooLargeError = class extends ProtocolError {
332
+ constructor(size) {
333
+ super("message_too_large", `Message too large: ${size} bytes (max ${MAX_JSON_SIZE})`);
334
+ this.name = "MessageTooLargeError";
335
+ }
336
+ };
337
+ /**
338
+ * Dangerous keys that should be filtered for security
339
+ */
340
+ const DANGEROUS_KEYS = new Set([
341
+ "__proto__",
342
+ "constructor",
343
+ "prototype"
344
+ ]);
345
+ /**
346
+ * Recursively filter dangerous keys from an object
347
+ */
348
+ function filterDangerousKeys(obj, depth = 0) {
349
+ if (depth > MAX_JSON_DEPTH) throw new DepthLimitExceededError();
350
+ if (obj === null || typeof obj !== "object") return obj;
351
+ if (Array.isArray(obj)) return obj.map((item) => filterDangerousKeys(item, depth + 1));
352
+ const filtered = {};
353
+ for (const [key, value] of Object.entries(obj)) if (!DANGEROUS_KEYS.has(key)) filtered[key] = filterDangerousKeys(value, depth + 1);
354
+ return filtered;
355
+ }
356
+ /**
357
+ * Calculate depth of a JSON object
358
+ */
359
+ function calculateDepth(obj, depth = 0) {
360
+ if (depth > MAX_JSON_DEPTH) return depth;
361
+ if (obj === null || typeof obj !== "object") return depth;
362
+ let maxDepth = depth;
363
+ if (Array.isArray(obj)) for (const item of obj) {
364
+ maxDepth = Math.max(maxDepth, calculateDepth(item, depth + 1));
365
+ if (maxDepth > MAX_JSON_DEPTH) return maxDepth;
366
+ }
367
+ else for (const value of Object.values(obj)) {
368
+ maxDepth = Math.max(maxDepth, calculateDepth(value, depth + 1));
369
+ if (maxDepth > MAX_JSON_DEPTH) return maxDepth;
370
+ }
371
+ return maxDepth;
372
+ }
373
+ /**
374
+ * Serialize a message to JSON bytes.
375
+ *
376
+ * @param message The message to serialize
377
+ * @returns UTF-8 encoded JSON bytes
378
+ * @throws InvalidMessageError if message is invalid
379
+ */
380
+ function serializeMessage(message) {
381
+ if (!message || typeof message !== "object" || !("type" in message)) throw new InvalidMessageError("Invalid message: missing type");
382
+ const { type } = message;
383
+ if (type === "request") {
384
+ const req = message;
385
+ if (!req.id) throw new InvalidMessageError("Invalid request: missing id");
386
+ if (!req.method) throw new InvalidMessageError("Invalid request: missing method");
387
+ }
388
+ const clean = {};
389
+ for (const [key, value] of Object.entries(message)) if (value !== void 0) clean[key] = value;
390
+ const json = JSON.stringify(clean);
391
+ return new TextEncoder().encode(json);
392
+ }
393
+ /**
394
+ * Deserialize JSON bytes to a message.
395
+ *
396
+ * @param data UTF-8 encoded JSON bytes
397
+ * @returns Parsed message
398
+ * @throws ParseError if JSON is invalid
399
+ * @throws InvalidMessageError if message structure is invalid
400
+ * @throws DepthLimitExceededError if JSON is too deeply nested
401
+ * @throws MessageTooLargeError if message exceeds size limit
402
+ */
403
+ function deserializeMessage(data) {
404
+ if (data.length > MAX_JSON_SIZE) throw new MessageTooLargeError(data.length);
405
+ let parsed;
406
+ try {
407
+ const json = new TextDecoder().decode(data);
408
+ parsed = JSON.parse(json);
409
+ } catch (e) {
410
+ throw new ParseError(e instanceof Error ? e.message : "Invalid JSON");
411
+ }
412
+ if (!parsed || typeof parsed !== "object") throw new InvalidMessageError("Invalid message: not an object");
413
+ if (calculateDepth(parsed) > MAX_JSON_DEPTH) throw new DepthLimitExceededError();
414
+ const filtered = filterDangerousKeys(parsed);
415
+ if (!("type" in filtered) || typeof filtered.type !== "string") throw new InvalidMessageError("Invalid message: missing type");
416
+ const { type } = filtered;
417
+ if (type !== "request" && type !== "response" && type !== "event") throw new InvalidMessageError(`Invalid message type: ${type}`);
418
+ return filtered;
419
+ }
420
+ /**
421
+ * Bounded buffer for sidecar Binary frames awaiting their JSON sibling.
422
+ *
423
+ * A single logical binary payload may arrive as multiple consecutive Binary
424
+ * frames (§6.4 chunking: each chunk ≤ 64 KB). All chunks for a reqId are
425
+ * accumulated and concatenated before being handed to the JSON handler.
426
+ *
427
+ * Three failure modes we defend against:
428
+ * 1. Orphaned Binary frames (peer sent Binary but then the connection died,
429
+ * or the JSON never arrives for some reason) — capped by MAX_PENDING so
430
+ * a malicious/broken peer can't pin unbounded memory on us.
431
+ * 2. Concurrent inflight requests — up to MAX_PENDING distinct reqIds may
432
+ * have pending binary chunks at any time; oldest is evicted if exceeded.
433
+ * 3. A single reqId reused to accumulate unbounded bytes (#821). MAX_PENDING
434
+ * only bounds the number of DISTINCT reqIds, so a peer reusing ONE reqId
435
+ * could grow a single entry without limit → OOM. maxBytesPerReqId caps the
436
+ * accumulated bytes per reqId; a logical binary payload must never exceed
437
+ * MAX_PAYLOAD_SIZE, so once an entry crosses the cap it is evicted whole.
438
+ */
439
+ const MAX_PENDING = 16;
440
+ var PendingBinaryBuffer = class {
441
+ map = /* @__PURE__ */ new Map();
442
+ logger;
443
+ maxBytesPerReqId;
444
+ constructor(logger, options) {
445
+ this.logger = logger;
446
+ this.maxBytesPerReqId = options?.maxBytesPerReqId ?? MAX_PAYLOAD_SIZE;
447
+ }
448
+ set(reqId, payload) {
449
+ const existing = this.map.get(reqId);
450
+ if (existing !== void 0) {
451
+ if (existing.bytes + payload.byteLength > this.maxBytesPerReqId) {
452
+ this.map.delete(reqId);
453
+ this.logger?.warn("pendingBinary per-reqId byte cap exceeded — evicted entry", {
454
+ reqId,
455
+ attempted: existing.bytes + payload.byteLength,
456
+ limit: this.maxBytesPerReqId
457
+ });
458
+ return;
459
+ }
460
+ existing.chunks.push(payload);
461
+ existing.bytes += payload.byteLength;
462
+ return;
463
+ }
464
+ if (payload.byteLength > this.maxBytesPerReqId) {
465
+ this.logger?.warn("pendingBinary per-reqId byte cap exceeded — dropped frame", {
466
+ reqId,
467
+ attempted: payload.byteLength,
468
+ limit: this.maxBytesPerReqId
469
+ });
470
+ return;
471
+ }
472
+ if (this.map.size >= MAX_PENDING) {
473
+ const oldestKey = this.map.keys().next().value;
474
+ if (oldestKey !== void 0) {
475
+ this.map.delete(oldestKey);
476
+ this.logger?.warn("pendingBinary buffer full — evicted oldest", {
477
+ evicted: oldestKey,
478
+ limit: MAX_PENDING
479
+ });
480
+ }
481
+ }
482
+ this.map.set(reqId, {
483
+ chunks: [payload],
484
+ bytes: payload.byteLength
485
+ });
486
+ }
487
+ take(reqId) {
488
+ const entry = this.map.get(reqId);
489
+ if (entry === void 0) return void 0;
490
+ this.map.delete(reqId);
491
+ const { chunks } = entry;
492
+ if (chunks.length === 0) return new Uint8Array(0);
493
+ if (chunks.length === 1) return chunks[0];
494
+ const result = new Uint8Array(entry.bytes);
495
+ let offset = 0;
496
+ for (const chunk of chunks) {
497
+ result.set(chunk, offset);
498
+ offset += chunk.byteLength;
499
+ }
500
+ return result;
501
+ }
502
+ clear() {
503
+ this.map.clear();
504
+ }
505
+ get size() {
506
+ return this.map.size;
507
+ }
508
+ };
509
+ /**
510
+ * Bidirectional RPC handler.
511
+ *
512
+ * Manages outgoing requests (send + wait for response) and
513
+ * identifies incoming responses for matching.
514
+ */
515
+ var RPCHandler = class {
516
+ nextId;
517
+ idIncrement;
518
+ timeout;
519
+ pending = /* @__PURE__ */ new Map();
520
+ constructor(options = {}) {
521
+ this.nextId = options.startId ?? 2;
522
+ this.idIncrement = options.idIncrement ?? 2;
523
+ this.timeout = options.timeout ?? 3e4;
524
+ }
525
+ /**
526
+ * Send a request via transport and wait for the matching response.
527
+ */
528
+ async sendRequest(transport, method, params) {
529
+ if (!transport.connected) throw new Error("Transport not connected");
530
+ const id = String(this.nextId);
531
+ this.nextId += this.idIncrement;
532
+ if (this.nextId > 4294967294) this.nextId = this.idIncrement === 2 ? this.nextId % 2 === 0 ? 2 : 1 : 1;
533
+ const request = {
534
+ type: "request",
535
+ id,
536
+ method,
537
+ params
538
+ };
539
+ return new Promise((resolve, reject) => {
540
+ const timer = setTimeout(() => {
541
+ this.pending.delete(id);
542
+ reject(/* @__PURE__ */ new Error(`RPC timeout: ${method} (id=${id})`));
543
+ }, this.timeout);
544
+ this.pending.set(id, {
545
+ resolve: (response) => {
546
+ if (response.error) {
547
+ const errObj = response.error;
548
+ const isStructured = typeof errObj === "object" && errObj !== null;
549
+ const message = isStructured ? errObj.message || JSON.stringify(errObj) : String(errObj);
550
+ const err = new Error(message);
551
+ if (isStructured) {
552
+ const code = errObj.code;
553
+ const details = errObj.details;
554
+ if (typeof code === "string") Object.defineProperty(err, "code", {
555
+ value: code,
556
+ enumerable: false,
557
+ configurable: true,
558
+ writable: false
559
+ });
560
+ if (details !== void 0) Object.defineProperty(err, "details", {
561
+ value: details,
562
+ enumerable: false,
563
+ configurable: true,
564
+ writable: false
565
+ });
566
+ }
567
+ reject(err);
568
+ } else resolve(response.result);
569
+ },
570
+ reject,
571
+ timer
572
+ });
573
+ const reqIdNum = Number.parseInt(id, 10);
574
+ const { message: cleanRequest, binary } = extractBinary(request);
575
+ const send = async () => {
576
+ if (binary) for (let offset = 0; offset < binary.byteLength; offset += CHUNK_SIZE) await transport.send({
577
+ type: FrameType.Binary,
578
+ reqId: reqIdNum,
579
+ payload: binary.subarray(offset, Math.min(offset + CHUNK_SIZE, binary.byteLength))
580
+ });
581
+ await transport.send({
582
+ type: FrameType.JSON,
583
+ reqId: reqIdNum,
584
+ payload: serializeMessage(cleanRequest)
585
+ });
586
+ };
587
+ send().catch((err) => {
588
+ clearTimeout(timer);
589
+ this.pending.delete(id);
590
+ reject(err);
591
+ });
592
+ });
593
+ }
594
+ /**
595
+ * Try to handle a frame as a response to a pending request.
596
+ * Returns true if it was a response we were waiting for, false otherwise.
597
+ *
598
+ * Callers must splice any sidecar Binary frame into the message before
599
+ * calling — by the time we see a `Response`, its result is final.
600
+ */
601
+ handleResponse(response) {
602
+ const pending = this.pending.get(response.id);
603
+ if (!pending) return false;
604
+ clearTimeout(pending.timer);
605
+ this.pending.delete(response.id);
606
+ pending.resolve(response);
607
+ return true;
608
+ }
609
+ /**
610
+ * Reject all pending requests (e.g., on disconnect).
611
+ */
612
+ rejectAll(error) {
613
+ for (const [_id, pending] of this.pending) {
614
+ clearTimeout(pending.timer);
615
+ pending.reject(error);
616
+ }
617
+ this.pending.clear();
618
+ }
619
+ /**
620
+ * Number of pending requests.
621
+ */
622
+ get pendingCount() {
623
+ return this.pending.size;
624
+ }
625
+ };
626
+ /**
627
+ * Protocol version
628
+ */
629
+ const PROTOCOL_VERSION = "1.0";
630
+ const log$2 = (0, _aigne_afs.makeNsLog)("session");
631
+ const log$1 = (0, _aigne_afs.makeNsLog)("session");
632
+ /**
633
+ * SessionClient — provider-side session participant.
634
+ *
635
+ * Connects to a SessionHost, attaches with a namespace + manifest,
636
+ * and handles incoming AFS requests by routing them to provider instances.
637
+ */
638
+ const log = (0, _aigne_afs.makeNsLog)("session");
639
+ /**
640
+ * Error for WebSocket operations
641
+ */
642
+ var WebSocketError = class extends Error {
643
+ constructor(code, message) {
644
+ super(message);
645
+ this.code = code;
646
+ this.name = "WebSocketError";
647
+ }
648
+ };
649
+ /**
650
+ * Encode an auth token for safe transport inside a
651
+ * `Sec-WebSocket-Protocol` subprotocol name. Per RFC 6455, subprotocol
652
+ * names must be RFC 2616 tokens — alphanumerics and a small set of
653
+ * punctuation. Hex encoding guarantees the value survives the wire
654
+ * unchanged regardless of the original token's characters.
655
+ */
656
+ function encodeBearerToken(raw) {
657
+ return Buffer.from(raw, "utf8").toString("hex");
658
+ }
659
+ /**
660
+ * WebSocket client transport (uses browser WebSocket API).
661
+ */
662
+ var ClientWebSocketTransport = class {
663
+ ws;
664
+ decoder = new FrameDecoder();
665
+ handlers = /* @__PURE__ */ new Map();
666
+ _connected = false;
667
+ constructor(ws) {
668
+ this.ws = ws;
669
+ this._connected = ws.readyState === WebSocket.OPEN;
670
+ this.setupHandlers();
671
+ }
672
+ setupHandlers() {
673
+ this.ws.onmessage = (event) => {
674
+ try {
675
+ const data = event.data instanceof ArrayBuffer ? new Uint8Array(event.data) : typeof event.data === "string" ? new TextEncoder().encode(event.data) : new Uint8Array(event.data);
676
+ const frames = this.decoder.push(data);
677
+ for (const frame of frames) this.emit("frame", frame);
678
+ } catch (error) {
679
+ this.emit("error", error);
680
+ }
681
+ };
682
+ this.ws.onclose = () => {
683
+ this._connected = false;
684
+ this.emit("close");
685
+ };
686
+ this.ws.onerror = () => {
687
+ this.emit("error", /* @__PURE__ */ new Error("WebSocket error"));
688
+ };
689
+ this.ws.onopen = () => {
690
+ this._connected = true;
691
+ };
692
+ }
693
+ async send(frame) {
694
+ if (!this._connected) throw new WebSocketError("not_connected", "Transport is not connected");
695
+ const encoded = encodeFrame(frame.type, frame.reqId, frame.payload);
696
+ this.ws.send(encoded);
697
+ }
698
+ async close() {
699
+ if (this._connected) {
700
+ this.ws.close();
701
+ this._connected = false;
702
+ }
703
+ }
704
+ on(event, handler) {
705
+ if (!this.handlers.has(event)) this.handlers.set(event, /* @__PURE__ */ new Set());
706
+ this.handlers.get(event).add(handler);
707
+ }
708
+ off(event, handler) {
709
+ this.handlers.get(event)?.delete(handler);
710
+ }
711
+ emit(event, ...args) {
712
+ const handlers = this.handlers.get(event);
713
+ if (handlers) for (const handler of handlers) handler(...args);
714
+ }
715
+ get connected() {
716
+ return this._connected;
717
+ }
718
+ };
719
+ /**
720
+ * WebSocket client implementation.
721
+ */
722
+ var WebSocketClient = class {
723
+ ws = null;
724
+ transport = null;
725
+ host;
726
+ port;
727
+ authToken;
728
+ handlers = /* @__PURE__ */ new Map();
729
+ constructor(options = {}) {
730
+ this.host = options.host || "localhost";
731
+ this.port = options.port || 9999;
732
+ this.authToken = options.authToken;
733
+ }
734
+ async connect() {
735
+ return new Promise((resolve, reject) => {
736
+ const url = `ws://${this.host}:${this.port}`;
737
+ const protocols = this.authToken ? [`bearer.${encodeBearerToken(this.authToken)}`] : void 0;
738
+ this.ws = protocols ? new WebSocket(url, protocols) : new WebSocket(url);
739
+ this.ws.binaryType = "arraybuffer";
740
+ this.ws.onopen = () => {
741
+ this.transport = new ClientWebSocketTransport(this.ws);
742
+ this.transport.on("frame", (frame) => this.emit("frame", frame));
743
+ this.transport.on("error", (error) => this.emit("error", error));
744
+ this.transport.on("close", () => this.emit("close"));
745
+ resolve();
746
+ };
747
+ this.ws.onerror = () => {
748
+ reject(new WebSocketError("connection_failed", "Failed to connect"));
749
+ };
750
+ this.ws.onclose = (event) => {
751
+ if (!this.transport) if (event.code === 1002 || event.code === 1008) reject(new WebSocketError("auth_failed", "Authentication failed"));
752
+ else reject(new WebSocketError("connection_failed", "Connection closed"));
753
+ };
754
+ });
755
+ }
756
+ async send(frame) {
757
+ if (!this.transport) throw new WebSocketError("not_connected", "Client is not connected");
758
+ return this.transport.send(frame);
759
+ }
760
+ async close() {
761
+ if (this.transport) await this.transport.close();
762
+ this.ws = null;
763
+ this.transport = null;
764
+ }
765
+ on(event, handler) {
766
+ if (!this.handlers.has(event)) this.handlers.set(event, /* @__PURE__ */ new Set());
767
+ this.handlers.get(event).add(handler);
768
+ }
769
+ off(event, handler) {
770
+ this.handlers.get(event)?.delete(handler);
771
+ }
772
+ emit(event, ...args) {
773
+ const handlers = this.handlers.get(event);
774
+ if (handlers) for (const handler of handlers) handler(...args);
775
+ }
776
+ get connected() {
777
+ return this.transport?.connected ?? false;
778
+ }
779
+ };
780
+
781
+ //#endregion
782
+ exports.FrameType = FrameType;
783
+ exports.PROTOCOL_VERSION = PROTOCOL_VERSION;
784
+ exports.PendingBinaryBuffer = PendingBinaryBuffer;
785
+ exports.RPCHandler = RPCHandler;
786
+ exports.WebSocketClient = WebSocketClient;
787
+ exports.deserializeMessage = deserializeMessage;
788
+ exports.injectBinary = injectBinary;