@superbee/core 0.2.0-pre.4 → 0.2.0-pre.40

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 (612) hide show
  1. package/README.md +1209 -0
  2. package/dist/artifact-contract.d.ts +90 -0
  3. package/dist/artifact-contract.d.ts.map +1 -0
  4. package/dist/artifact-contract.js +205 -0
  5. package/dist/artifact-contract.js.map +1 -0
  6. package/dist/backend.d.ts +22 -2
  7. package/dist/backend.d.ts.map +1 -1
  8. package/dist/backend.js +153 -38
  9. package/dist/backend.js.map +1 -1
  10. package/dist/blob-contract.d.ts +82 -0
  11. package/dist/blob-contract.d.ts.map +1 -0
  12. package/dist/blob-contract.js +134 -0
  13. package/dist/blob-contract.js.map +1 -0
  14. package/dist/blob-journal.d.ts +303 -0
  15. package/dist/blob-journal.d.ts.map +1 -0
  16. package/dist/blob-journal.js +541 -0
  17. package/dist/blob-journal.js.map +1 -0
  18. package/dist/body-replace-guards.d.ts +52 -0
  19. package/dist/body-replace-guards.d.ts.map +1 -0
  20. package/dist/body-replace-guards.js +176 -0
  21. package/dist/body-replace-guards.js.map +1 -0
  22. package/dist/builtin-recipes/content.d.ts +93 -0
  23. package/dist/builtin-recipes/content.d.ts.map +1 -0
  24. package/dist/builtin-recipes/content.js +288 -0
  25. package/dist/builtin-recipes/content.js.map +1 -0
  26. package/dist/builtin-recipes.d.ts +10 -0
  27. package/dist/builtin-recipes.d.ts.map +1 -0
  28. package/dist/builtin-recipes.js +97 -0
  29. package/dist/builtin-recipes.js.map +1 -0
  30. package/dist/bundle-health/index.d.ts +14 -0
  31. package/dist/bundle-health/index.d.ts.map +1 -0
  32. package/dist/bundle-health/index.js +12 -0
  33. package/dist/bundle-health/index.js.map +1 -0
  34. package/dist/bundle-health/kind-findings.d.ts +44 -0
  35. package/dist/bundle-health/kind-findings.d.ts.map +1 -0
  36. package/dist/bundle-health/kind-findings.js +68 -0
  37. package/dist/bundle-health/kind-findings.js.map +1 -0
  38. package/dist/bundle-health/legacy-page.d.ts +39 -0
  39. package/dist/bundle-health/legacy-page.d.ts.map +1 -0
  40. package/dist/bundle-health/legacy-page.js +50 -0
  41. package/dist/bundle-health/legacy-page.js.map +1 -0
  42. package/dist/bundle-health/report.d.ts +207 -0
  43. package/dist/bundle-health/report.d.ts.map +1 -0
  44. package/dist/bundle-health/report.js +454 -0
  45. package/dist/bundle-health/report.js.map +1 -0
  46. package/dist/bundle-ops.d.ts +3 -2
  47. package/dist/bundle-ops.d.ts.map +1 -1
  48. package/dist/bundle-ops.js +4 -4
  49. package/dist/bundle-ops.js.map +1 -1
  50. package/dist/bundle.d.ts +3 -4
  51. package/dist/bundle.d.ts.map +1 -1
  52. package/dist/bundle.js +5 -14
  53. package/dist/bundle.js.map +1 -1
  54. package/dist/code-point-order.d.ts +8 -0
  55. package/dist/code-point-order.d.ts.map +1 -0
  56. package/dist/code-point-order.js +20 -0
  57. package/dist/code-point-order.js.map +1 -0
  58. package/dist/code-unit-order.d.ts +15 -0
  59. package/dist/code-unit-order.d.ts.map +1 -0
  60. package/dist/code-unit-order.js +17 -0
  61. package/dist/code-unit-order.js.map +1 -0
  62. package/dist/connector-request.d.ts +112 -0
  63. package/dist/connector-request.d.ts.map +1 -0
  64. package/dist/connector-request.js +495 -0
  65. package/dist/connector-request.js.map +1 -0
  66. package/dist/connectors.d.ts +297 -0
  67. package/dist/connectors.d.ts.map +1 -0
  68. package/dist/connectors.js +1233 -0
  69. package/dist/connectors.js.map +1 -0
  70. package/dist/cross-bundle.d.ts +135 -0
  71. package/dist/cross-bundle.d.ts.map +1 -0
  72. package/dist/cross-bundle.js +191 -0
  73. package/dist/cross-bundle.js.map +1 -0
  74. package/dist/dependencies.d.ts +94 -0
  75. package/dist/dependencies.d.ts.map +1 -0
  76. package/dist/dependencies.js +180 -0
  77. package/dist/dependencies.js.map +1 -0
  78. package/dist/document-codec.d.ts +7 -2
  79. package/dist/document-codec.d.ts.map +1 -1
  80. package/dist/document-codec.js +8 -5
  81. package/dist/document-codec.js.map +1 -1
  82. package/dist/document-field-actions.d.ts +31 -1
  83. package/dist/document-field-actions.d.ts.map +1 -1
  84. package/dist/document-field-actions.js +137 -34
  85. package/dist/document-field-actions.js.map +1 -1
  86. package/dist/document-mutation.d.ts +35 -13
  87. package/dist/document-mutation.d.ts.map +1 -1
  88. package/dist/document-mutation.js +124 -60
  89. package/dist/document-mutation.js.map +1 -1
  90. package/dist/document-transfer.d.ts +208 -0
  91. package/dist/document-transfer.d.ts.map +1 -0
  92. package/dist/document-transfer.js +928 -0
  93. package/dist/document-transfer.js.map +1 -0
  94. package/dist/document-write-policy.d.ts.map +1 -1
  95. package/dist/document-write-policy.js +4 -2
  96. package/dist/document-write-policy.js.map +1 -1
  97. package/dist/domain-model.d.ts +73 -0
  98. package/dist/domain-model.d.ts.map +1 -0
  99. package/dist/domain-model.js +169 -0
  100. package/dist/domain-model.js.map +1 -0
  101. package/dist/engine.d.ts +21 -9
  102. package/dist/engine.d.ts.map +1 -1
  103. package/dist/engine.js +72 -14
  104. package/dist/engine.js.map +1 -1
  105. package/dist/file-journaled-backend-internal.d.ts +21 -0
  106. package/dist/file-journaled-backend-internal.d.ts.map +1 -0
  107. package/dist/file-journaled-backend-internal.js +12 -0
  108. package/dist/file-journaled-backend-internal.js.map +1 -0
  109. package/dist/file-journaled-backend.d.ts +160 -0
  110. package/dist/file-journaled-backend.d.ts.map +1 -0
  111. package/dist/file-journaled-backend.js +1345 -0
  112. package/dist/file-journaled-backend.js.map +1 -0
  113. package/dist/filesystem-host.d.ts +15 -0
  114. package/dist/filesystem-host.d.ts.map +1 -0
  115. package/dist/filesystem-host.js +20 -0
  116. package/dist/filesystem-host.js.map +1 -0
  117. package/dist/filesystem-identity.d.ts +97 -21
  118. package/dist/filesystem-identity.d.ts.map +1 -1
  119. package/dist/filesystem-identity.js +398 -119
  120. package/dist/filesystem-identity.js.map +1 -1
  121. package/dist/filesystem-lock.d.ts +16 -3
  122. package/dist/filesystem-lock.d.ts.map +1 -1
  123. package/dist/filesystem-lock.js +323 -77
  124. package/dist/filesystem-lock.js.map +1 -1
  125. package/dist/filesystem-push-role.d.ts +77 -0
  126. package/dist/filesystem-push-role.d.ts.map +1 -0
  127. package/dist/filesystem-push-role.js +165 -0
  128. package/dist/filesystem-push-role.js.map +1 -0
  129. package/dist/filesystem.d.ts +17 -0
  130. package/dist/filesystem.d.ts.map +1 -0
  131. package/dist/filesystem.js +18 -0
  132. package/dist/filesystem.js.map +1 -0
  133. package/dist/frontmatter.d.ts +8 -6
  134. package/dist/frontmatter.d.ts.map +1 -1
  135. package/dist/frontmatter.js +5 -4
  136. package/dist/frontmatter.js.map +1 -1
  137. package/dist/governed-body-write.d.ts +8 -1
  138. package/dist/governed-body-write.d.ts.map +1 -1
  139. package/dist/governed-body-write.js +9 -2
  140. package/dist/governed-body-write.js.map +1 -1
  141. package/dist/heads-digest.d.ts.map +1 -1
  142. package/dist/heads-digest.js +2 -1
  143. package/dist/heads-digest.js.map +1 -1
  144. package/dist/host-policy-snapshot.d.ts +9 -0
  145. package/dist/host-policy-snapshot.d.ts.map +1 -0
  146. package/dist/host-policy-snapshot.js +33 -0
  147. package/dist/host-policy-snapshot.js.map +1 -0
  148. package/dist/host-text.d.ts +31 -0
  149. package/dist/host-text.d.ts.map +1 -0
  150. package/dist/host-text.js +77 -0
  151. package/dist/host-text.js.map +1 -0
  152. package/dist/hosted-client/binding.d.ts +7 -0
  153. package/dist/hosted-client/binding.d.ts.map +1 -0
  154. package/dist/hosted-client/binding.js +10 -0
  155. package/dist/hosted-client/binding.js.map +1 -0
  156. package/dist/hosted-client/blob-delivery.d.ts +68 -0
  157. package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
  158. package/dist/hosted-client/blob-delivery.js +170 -0
  159. package/dist/hosted-client/blob-delivery.js.map +1 -0
  160. package/dist/hosted-client/blob-write.d.ts +387 -0
  161. package/dist/hosted-client/blob-write.d.ts.map +1 -0
  162. package/dist/hosted-client/blob-write.js +770 -0
  163. package/dist/hosted-client/blob-write.js.map +1 -0
  164. package/dist/hosted-client/bundle-listing.d.ts +46 -0
  165. package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
  166. package/dist/hosted-client/bundle-listing.js +36 -0
  167. package/dist/hosted-client/bundle-listing.js.map +1 -0
  168. package/dist/hosted-client/client.d.ts +219 -0
  169. package/dist/hosted-client/client.d.ts.map +1 -0
  170. package/dist/hosted-client/client.js +309 -0
  171. package/dist/hosted-client/client.js.map +1 -0
  172. package/dist/hosted-client/directory.d.ts +46 -0
  173. package/dist/hosted-client/directory.d.ts.map +1 -0
  174. package/dist/hosted-client/directory.js +74 -0
  175. package/dist/hosted-client/directory.js.map +1 -0
  176. package/dist/hosted-client/errors.d.ts +26 -0
  177. package/dist/hosted-client/errors.d.ts.map +1 -0
  178. package/dist/hosted-client/errors.js +35 -0
  179. package/dist/hosted-client/errors.js.map +1 -0
  180. package/dist/hosted-client/inbox.d.ts +320 -0
  181. package/dist/hosted-client/inbox.d.ts.map +1 -0
  182. package/dist/hosted-client/inbox.js +379 -0
  183. package/dist/hosted-client/inbox.js.map +1 -0
  184. package/dist/hosted-client/index.d.ts +30 -0
  185. package/dist/hosted-client/index.d.ts.map +1 -0
  186. package/dist/hosted-client/index.js +32 -0
  187. package/dist/hosted-client/index.js.map +1 -0
  188. package/dist/hosted-client/journal.d.ts +103 -0
  189. package/dist/hosted-client/journal.d.ts.map +1 -0
  190. package/dist/hosted-client/journal.js +464 -0
  191. package/dist/hosted-client/journal.js.map +1 -0
  192. package/dist/hosted-client/node.d.ts +74 -0
  193. package/dist/hosted-client/node.d.ts.map +1 -0
  194. package/dist/hosted-client/node.js +219 -0
  195. package/dist/hosted-client/node.js.map +1 -0
  196. package/dist/hosted-client/reference.d.ts +12 -0
  197. package/dist/hosted-client/reference.d.ts.map +1 -0
  198. package/dist/hosted-client/reference.js +29 -0
  199. package/dist/hosted-client/reference.js.map +1 -0
  200. package/dist/hosted-client/write.d.ts +217 -0
  201. package/dist/hosted-client/write.d.ts.map +1 -0
  202. package/dist/hosted-client/write.js +418 -0
  203. package/dist/hosted-client/write.js.map +1 -0
  204. package/dist/hosted-transport/answer-rows.d.ts +243 -0
  205. package/dist/hosted-transport/answer-rows.d.ts.map +1 -0
  206. package/dist/hosted-transport/answer-rows.js +457 -0
  207. package/dist/hosted-transport/answer-rows.js.map +1 -0
  208. package/dist/hosted-transport/blob-reads.d.ts +35 -0
  209. package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
  210. package/dist/hosted-transport/blob-reads.js +179 -0
  211. package/dist/hosted-transport/blob-reads.js.map +1 -0
  212. package/dist/hosted-transport/blob-write.d.ts +34 -0
  213. package/dist/hosted-transport/blob-write.d.ts.map +1 -0
  214. package/dist/hosted-transport/blob-write.js +115 -0
  215. package/dist/hosted-transport/blob-write.js.map +1 -0
  216. package/dist/hosted-transport/carrier.d.ts +151 -0
  217. package/dist/hosted-transport/carrier.d.ts.map +1 -0
  218. package/dist/hosted-transport/carrier.js +260 -0
  219. package/dist/hosted-transport/carrier.js.map +1 -0
  220. package/dist/hosted-transport/history-pages.d.ts +55 -0
  221. package/dist/hosted-transport/history-pages.d.ts.map +1 -0
  222. package/dist/hosted-transport/history-pages.js +69 -0
  223. package/dist/hosted-transport/history-pages.js.map +1 -0
  224. package/dist/hosted-transport/index.d.ts +18 -0
  225. package/dist/hosted-transport/index.d.ts.map +1 -0
  226. package/dist/hosted-transport/index.js +18 -0
  227. package/dist/hosted-transport/index.js.map +1 -0
  228. package/dist/hosted-transport/operations.d.ts +85 -0
  229. package/dist/hosted-transport/operations.d.ts.map +1 -0
  230. package/dist/hosted-transport/operations.js +128 -0
  231. package/dist/hosted-transport/operations.js.map +1 -0
  232. package/dist/hosted-transport/paged-reads.d.ts +87 -0
  233. package/dist/hosted-transport/paged-reads.d.ts.map +1 -0
  234. package/dist/hosted-transport/paged-reads.js +238 -0
  235. package/dist/hosted-transport/paged-reads.js.map +1 -0
  236. package/dist/hosted-transport/read-adapter.d.ts +256 -0
  237. package/dist/hosted-transport/read-adapter.d.ts.map +1 -0
  238. package/dist/hosted-transport/read-adapter.js +568 -0
  239. package/dist/hosted-transport/read-adapter.js.map +1 -0
  240. package/dist/hosted-transport/root-write.d.ts +114 -0
  241. package/dist/hosted-transport/root-write.d.ts.map +1 -0
  242. package/dist/hosted-transport/root-write.js +171 -0
  243. package/dist/hosted-transport/root-write.js.map +1 -0
  244. package/dist/hosted-transport/whole-document-transport.d.ts +204 -0
  245. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -0
  246. package/dist/hosted-transport/whole-document-transport.js +447 -0
  247. package/dist/hosted-transport/whole-document-transport.js.map +1 -0
  248. package/dist/identity-fold.d.ts +18 -0
  249. package/dist/identity-fold.d.ts.map +1 -0
  250. package/dist/identity-fold.js +22 -0
  251. package/dist/identity-fold.js.map +1 -0
  252. package/dist/index.d.ts +41 -11
  253. package/dist/index.d.ts.map +1 -1
  254. package/dist/index.js +31 -9
  255. package/dist/index.js.map +1 -1
  256. package/dist/indexeddb-backend.d.ts +25 -33
  257. package/dist/indexeddb-backend.d.ts.map +1 -1
  258. package/dist/indexeddb-backend.js +264 -8
  259. package/dist/indexeddb-backend.js.map +1 -1
  260. package/dist/inventory-guard.d.ts +58 -0
  261. package/dist/inventory-guard.d.ts.map +1 -0
  262. package/dist/inventory-guard.js +169 -0
  263. package/dist/inventory-guard.js.map +1 -0
  264. package/dist/journaled-backend.d.ts +149 -9
  265. package/dist/journaled-backend.d.ts.map +1 -1
  266. package/dist/journaled-backend.js +64 -58
  267. package/dist/journaled-backend.js.map +1 -1
  268. package/dist/kind-authoring.d.ts +170 -0
  269. package/dist/kind-authoring.d.ts.map +1 -0
  270. package/dist/kind-authoring.js +452 -0
  271. package/dist/kind-authoring.js.map +1 -0
  272. package/dist/kind-changes.d.ts +45 -0
  273. package/dist/kind-changes.d.ts.map +1 -0
  274. package/dist/kind-changes.js +96 -0
  275. package/dist/kind-changes.js.map +1 -0
  276. package/dist/kind-conformance-error.d.ts +15 -0
  277. package/dist/kind-conformance-error.d.ts.map +1 -0
  278. package/dist/kind-conformance-error.js +20 -0
  279. package/dist/kind-conformance-error.js.map +1 -0
  280. package/dist/kind-coverage.d.ts +99 -0
  281. package/dist/kind-coverage.d.ts.map +1 -0
  282. package/dist/kind-coverage.js +186 -0
  283. package/dist/kind-coverage.js.map +1 -0
  284. package/dist/kind-deprecation.d.ts +32 -0
  285. package/dist/kind-deprecation.d.ts.map +1 -0
  286. package/dist/kind-deprecation.js +141 -0
  287. package/dist/kind-deprecation.js.map +1 -0
  288. package/dist/kind-field-mutation.d.ts +4 -0
  289. package/dist/kind-field-mutation.d.ts.map +1 -1
  290. package/dist/kind-field-mutation.js +28 -3
  291. package/dist/kind-field-mutation.js.map +1 -1
  292. package/dist/kinds-load.js +4 -4
  293. package/dist/kinds-load.js.map +1 -1
  294. package/dist/kinds.d.ts +111 -2
  295. package/dist/kinds.d.ts.map +1 -1
  296. package/dist/kinds.js +386 -20
  297. package/dist/kinds.js.map +1 -1
  298. package/dist/link-emit.d.ts +29 -0
  299. package/dist/link-emit.d.ts.map +1 -0
  300. package/dist/link-emit.js +39 -0
  301. package/dist/link-emit.js.map +1 -0
  302. package/dist/link-types.d.ts +27 -0
  303. package/dist/link-types.d.ts.map +1 -0
  304. package/dist/link-types.js +60 -0
  305. package/dist/link-types.js.map +1 -0
  306. package/dist/links.d.ts +52 -3
  307. package/dist/links.d.ts.map +1 -1
  308. package/dist/links.js +259 -18
  309. package/dist/links.js.map +1 -1
  310. package/dist/managed-document-metadata.d.ts +2 -0
  311. package/dist/managed-document-metadata.d.ts.map +1 -0
  312. package/dist/managed-document-metadata.js +9 -0
  313. package/dist/managed-document-metadata.js.map +1 -0
  314. package/dist/memory-backend.d.ts +3 -0
  315. package/dist/memory-backend.d.ts.map +1 -1
  316. package/dist/memory-backend.js +44 -2
  317. package/dist/memory-backend.js.map +1 -1
  318. package/dist/okf-actor.d.ts +1 -0
  319. package/dist/okf-actor.d.ts.map +1 -1
  320. package/dist/okf-actor.js +1 -0
  321. package/dist/okf-actor.js.map +1 -1
  322. package/dist/okf-authoring.d.ts +4 -0
  323. package/dist/okf-authoring.d.ts.map +1 -0
  324. package/dist/okf-authoring.js +12 -0
  325. package/dist/okf-authoring.js.map +1 -0
  326. package/dist/okf-standard-fields.d.ts +3 -0
  327. package/dist/okf-standard-fields.d.ts.map +1 -1
  328. package/dist/okf-standard-fields.js +3 -0
  329. package/dist/okf-standard-fields.js.map +1 -1
  330. package/dist/path-fold.d.ts +39 -0
  331. package/dist/path-fold.d.ts.map +1 -0
  332. package/dist/path-fold.js +41 -0
  333. package/dist/path-fold.js.map +1 -0
  334. package/dist/paths.d.ts +18 -0
  335. package/dist/paths.d.ts.map +1 -1
  336. package/dist/paths.js +32 -0
  337. package/dist/paths.js.map +1 -1
  338. package/dist/platform.d.ts +13 -2
  339. package/dist/platform.d.ts.map +1 -1
  340. package/dist/platform.js +16 -0
  341. package/dist/platform.js.map +1 -1
  342. package/dist/portable-export.d.ts +119 -0
  343. package/dist/portable-export.d.ts.map +1 -0
  344. package/dist/portable-export.js +501 -0
  345. package/dist/portable-export.js.map +1 -0
  346. package/dist/publication-filesystem.d.ts +1 -1
  347. package/dist/publication-filesystem.d.ts.map +1 -1
  348. package/dist/publication-filesystem.js +1 -1
  349. package/dist/publication-filesystem.js.map +1 -1
  350. package/dist/qualified-links.d.ts +67 -0
  351. package/dist/qualified-links.d.ts.map +1 -0
  352. package/dist/qualified-links.js +117 -0
  353. package/dist/qualified-links.js.map +1 -0
  354. package/dist/query-filter.d.ts +16 -2
  355. package/dist/query-filter.d.ts.map +1 -1
  356. package/dist/query-filter.js +40 -1
  357. package/dist/query-filter.js.map +1 -1
  358. package/dist/query-order.d.ts +22 -0
  359. package/dist/query-order.d.ts.map +1 -0
  360. package/dist/query-order.js +43 -0
  361. package/dist/query-order.js.map +1 -0
  362. package/dist/recipe-lifecycle/errors.d.ts +96 -0
  363. package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
  364. package/dist/recipe-lifecycle/errors.js +122 -0
  365. package/dist/recipe-lifecycle/errors.js.map +1 -0
  366. package/dist/recipe-lifecycle/evolution.d.ts +124 -0
  367. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
  368. package/dist/recipe-lifecycle/evolution.js +993 -0
  369. package/dist/recipe-lifecycle/evolution.js.map +1 -0
  370. package/dist/recipe-lifecycle/index.d.ts +34 -0
  371. package/dist/recipe-lifecycle/index.d.ts.map +1 -0
  372. package/dist/recipe-lifecycle/index.js +28 -0
  373. package/dist/recipe-lifecycle/index.js.map +1 -0
  374. package/dist/recipe-lifecycle/install.d.ts +155 -0
  375. package/dist/recipe-lifecycle/install.d.ts.map +1 -0
  376. package/dist/recipe-lifecycle/install.js +604 -0
  377. package/dist/recipe-lifecycle/install.js.map +1 -0
  378. package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
  379. package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
  380. package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
  381. package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
  382. package/dist/recipe-lifecycle/retirement-apply.d.ts +59 -0
  383. package/dist/recipe-lifecycle/retirement-apply.d.ts.map +1 -0
  384. package/dist/recipe-lifecycle/retirement-apply.js +165 -0
  385. package/dist/recipe-lifecycle/retirement-apply.js.map +1 -0
  386. package/dist/recipe-lifecycle/retirement.d.ts +89 -0
  387. package/dist/recipe-lifecycle/retirement.d.ts.map +1 -0
  388. package/dist/recipe-lifecycle/retirement.js +347 -0
  389. package/dist/recipe-lifecycle/retirement.js.map +1 -0
  390. package/dist/recipe-lifecycle/stamp.d.ts +151 -0
  391. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
  392. package/dist/recipe-lifecycle/stamp.js +364 -0
  393. package/dist/recipe-lifecycle/stamp.js.map +1 -0
  394. package/dist/recipe-set-preflight.d.ts +139 -0
  395. package/dist/recipe-set-preflight.d.ts.map +1 -0
  396. package/dist/recipe-set-preflight.js +536 -0
  397. package/dist/recipe-set-preflight.js.map +1 -0
  398. package/dist/recipes.d.ts +29 -1
  399. package/dist/recipes.d.ts.map +1 -1
  400. package/dist/recipes.js +137 -1
  401. package/dist/recipes.js.map +1 -1
  402. package/dist/record-overlay/apply.d.ts +43 -0
  403. package/dist/record-overlay/apply.d.ts.map +1 -0
  404. package/dist/record-overlay/apply.js +527 -0
  405. package/dist/record-overlay/apply.js.map +1 -0
  406. package/dist/record-overlay/canonical.d.ts +22 -0
  407. package/dist/record-overlay/canonical.d.ts.map +1 -0
  408. package/dist/record-overlay/canonical.js +47 -0
  409. package/dist/record-overlay/canonical.js.map +1 -0
  410. package/dist/record-overlay/digest.d.ts +4 -0
  411. package/dist/record-overlay/digest.d.ts.map +1 -0
  412. package/dist/record-overlay/digest.js +11 -0
  413. package/dist/record-overlay/digest.js.map +1 -0
  414. package/dist/record-overlay/errors.d.ts +44 -0
  415. package/dist/record-overlay/errors.d.ts.map +1 -0
  416. package/dist/record-overlay/errors.js +55 -0
  417. package/dist/record-overlay/errors.js.map +1 -0
  418. package/dist/record-overlay/findings.d.ts +5 -0
  419. package/dist/record-overlay/findings.d.ts.map +1 -0
  420. package/dist/record-overlay/findings.js +83 -0
  421. package/dist/record-overlay/findings.js.map +1 -0
  422. package/dist/record-overlay/index.d.ts +23 -0
  423. package/dist/record-overlay/index.d.ts.map +1 -0
  424. package/dist/record-overlay/index.js +21 -0
  425. package/dist/record-overlay/index.js.map +1 -0
  426. package/dist/record-overlay/plan.d.ts +12 -0
  427. package/dist/record-overlay/plan.d.ts.map +1 -0
  428. package/dist/record-overlay/plan.js +285 -0
  429. package/dist/record-overlay/plan.js.map +1 -0
  430. package/dist/record-overlay/policy.d.ts +74 -0
  431. package/dist/record-overlay/policy.d.ts.map +1 -0
  432. package/dist/record-overlay/policy.js +235 -0
  433. package/dist/record-overlay/policy.js.map +1 -0
  434. package/dist/record-overlay/redact.d.ts +3 -0
  435. package/dist/record-overlay/redact.d.ts.map +1 -0
  436. package/dist/record-overlay/redact.js +27 -0
  437. package/dist/record-overlay/redact.js.map +1 -0
  438. package/dist/record-overlay/signal-kind.d.ts +30 -0
  439. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  440. package/dist/record-overlay/signal-kind.js +38 -0
  441. package/dist/record-overlay/signal-kind.js.map +1 -0
  442. package/dist/record-overlay/signal-text.d.ts +45 -0
  443. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  444. package/dist/record-overlay/signal-text.js +116 -0
  445. package/dist/record-overlay/signal-text.js.map +1 -0
  446. package/dist/record-overlay/source-index.d.ts +19 -0
  447. package/dist/record-overlay/source-index.d.ts.map +1 -0
  448. package/dist/record-overlay/source-index.js +102 -0
  449. package/dist/record-overlay/source-index.js.map +1 -0
  450. package/dist/record-overlay/types.d.ts +291 -0
  451. package/dist/record-overlay/types.d.ts.map +1 -0
  452. package/dist/record-overlay/types.js +2 -0
  453. package/dist/record-overlay/types.js.map +1 -0
  454. package/dist/remote-backend.d.ts +58 -13
  455. package/dist/remote-backend.d.ts.map +1 -1
  456. package/dist/remote-backend.js +156 -36
  457. package/dist/remote-backend.js.map +1 -1
  458. package/dist/remote-document-codec.d.ts +2 -1
  459. package/dist/remote-document-codec.d.ts.map +1 -1
  460. package/dist/remote-document-codec.js +3 -2
  461. package/dist/remote-document-codec.js.map +1 -1
  462. package/dist/remote-error.d.ts +17 -1
  463. package/dist/remote-error.d.ts.map +1 -1
  464. package/dist/remote-error.js +32 -2
  465. package/dist/remote-error.js.map +1 -1
  466. package/dist/remote-operations.d.ts +0 -40
  467. package/dist/remote-operations.d.ts.map +1 -1
  468. package/dist/remote-operations.js +26 -6
  469. package/dist/remote-operations.js.map +1 -1
  470. package/dist/remote-parsers.d.ts +1 -1
  471. package/dist/remote-parsers.js +1 -1
  472. package/dist/search/backend-source.d.ts +6 -0
  473. package/dist/search/backend-source.d.ts.map +1 -0
  474. package/dist/search/backend-source.js +33 -0
  475. package/dist/search/backend-source.js.map +1 -0
  476. package/dist/search/contract.d.ts +151 -0
  477. package/dist/search/contract.d.ts.map +1 -0
  478. package/dist/search/contract.js +78 -0
  479. package/dist/search/contract.js.map +1 -0
  480. package/dist/search/errors.d.ts +30 -0
  481. package/dist/search/errors.d.ts.map +1 -0
  482. package/dist/search/errors.js +50 -0
  483. package/dist/search/errors.js.map +1 -0
  484. package/dist/search/identity.d.ts +12 -0
  485. package/dist/search/identity.d.ts.map +1 -0
  486. package/dist/search/identity.js +90 -0
  487. package/dist/search/identity.js.map +1 -0
  488. package/dist/search/index.d.ts +16 -0
  489. package/dist/search/index.d.ts.map +1 -0
  490. package/dist/search/index.js +15 -0
  491. package/dist/search/index.js.map +1 -0
  492. package/dist/search/memory-source.d.ts +36 -0
  493. package/dist/search/memory-source.d.ts.map +1 -0
  494. package/dist/search/memory-source.js +235 -0
  495. package/dist/search/memory-source.js.map +1 -0
  496. package/dist/search/rank.d.ts +34 -0
  497. package/dist/search/rank.d.ts.map +1 -0
  498. package/dist/search/rank.js +129 -0
  499. package/dist/search/rank.js.map +1 -0
  500. package/dist/search/row-text.d.ts +38 -0
  501. package/dist/search/row-text.d.ts.map +1 -0
  502. package/dist/search/row-text.js +88 -0
  503. package/dist/search/row-text.js.map +1 -0
  504. package/dist/search/search.d.ts +28 -0
  505. package/dist/search/search.d.ts.map +1 -0
  506. package/dist/search/search.js +257 -0
  507. package/dist/search/search.js.map +1 -0
  508. package/dist/search/source.d.ts +67 -0
  509. package/dist/search/source.d.ts.map +1 -0
  510. package/dist/search/source.js +2 -0
  511. package/dist/search/source.js.map +1 -0
  512. package/dist/search/text.d.ts +47 -0
  513. package/dist/search/text.d.ts.map +1 -0
  514. package/dist/search/text.js +150 -0
  515. package/dist/search/text.js.map +1 -0
  516. package/dist/site-capabilities.d.ts +345 -0
  517. package/dist/site-capabilities.d.ts.map +1 -0
  518. package/dist/site-capabilities.js +724 -0
  519. package/dist/site-capabilities.js.map +1 -0
  520. package/dist/source-engine/driver.d.ts +40 -0
  521. package/dist/source-engine/driver.d.ts.map +1 -0
  522. package/dist/source-engine/driver.js +392 -0
  523. package/dist/source-engine/driver.js.map +1 -0
  524. package/dist/source-engine/evidence.d.ts +39 -0
  525. package/dist/source-engine/evidence.d.ts.map +1 -0
  526. package/dist/source-engine/evidence.js +54 -0
  527. package/dist/source-engine/evidence.js.map +1 -0
  528. package/dist/source-engine/guard.d.ts +87 -0
  529. package/dist/source-engine/guard.d.ts.map +1 -0
  530. package/dist/source-engine/guard.js +427 -0
  531. package/dist/source-engine/guard.js.map +1 -0
  532. package/dist/source-engine/index.d.ts +33 -0
  533. package/dist/source-engine/index.d.ts.map +1 -0
  534. package/dist/source-engine/index.js +26 -0
  535. package/dist/source-engine/index.js.map +1 -0
  536. package/dist/source-engine/machine-state.d.ts +74 -0
  537. package/dist/source-engine/machine-state.d.ts.map +1 -0
  538. package/dist/source-engine/machine-state.js +48 -0
  539. package/dist/source-engine/machine-state.js.map +1 -0
  540. package/dist/source-engine/observe.d.ts +10 -0
  541. package/dist/source-engine/observe.d.ts.map +1 -0
  542. package/dist/source-engine/observe.js +270 -0
  543. package/dist/source-engine/observe.js.map +1 -0
  544. package/dist/source-engine/overlay.d.ts +50 -0
  545. package/dist/source-engine/overlay.d.ts.map +1 -0
  546. package/dist/source-engine/overlay.js +114 -0
  547. package/dist/source-engine/overlay.js.map +1 -0
  548. package/dist/source-engine/robots.d.ts +53 -0
  549. package/dist/source-engine/robots.d.ts.map +1 -0
  550. package/dist/source-engine/robots.js +158 -0
  551. package/dist/source-engine/robots.js.map +1 -0
  552. package/dist/source-engine/snapshot.d.ts +104 -0
  553. package/dist/source-engine/snapshot.d.ts.map +1 -0
  554. package/dist/source-engine/snapshot.js +240 -0
  555. package/dist/source-engine/snapshot.js.map +1 -0
  556. package/dist/source-engine/types.d.ts +292 -0
  557. package/dist/source-engine/types.d.ts.map +1 -0
  558. package/dist/source-engine/types.js +2 -0
  559. package/dist/source-engine/types.js.map +1 -0
  560. package/dist/source-harness/conformance.d.ts +16 -0
  561. package/dist/source-harness/conformance.d.ts.map +1 -0
  562. package/dist/source-harness/conformance.js +266 -0
  563. package/dist/source-harness/conformance.js.map +1 -0
  564. package/dist/source-harness/fixture.d.ts +97 -0
  565. package/dist/source-harness/fixture.d.ts.map +1 -0
  566. package/dist/source-harness/fixture.js +276 -0
  567. package/dist/source-harness/fixture.js.map +1 -0
  568. package/dist/source-harness/index.d.ts +22 -0
  569. package/dist/source-harness/index.d.ts.map +1 -0
  570. package/dist/source-harness/index.js +19 -0
  571. package/dist/source-harness/index.js.map +1 -0
  572. package/dist/source-harness/peer.d.ts +74 -0
  573. package/dist/source-harness/peer.d.ts.map +1 -0
  574. package/dist/source-harness/peer.js +106 -0
  575. package/dist/source-harness/peer.js.map +1 -0
  576. package/dist/source-profiles/index.d.ts +31 -0
  577. package/dist/source-profiles/index.d.ts.map +1 -0
  578. package/dist/source-profiles/index.js +206 -0
  579. package/dist/source-profiles/index.js.map +1 -0
  580. package/dist/source-profiles/link-header.d.ts +6 -0
  581. package/dist/source-profiles/link-header.d.ts.map +1 -0
  582. package/dist/source-profiles/link-header.js +131 -0
  583. package/dist/source-profiles/link-header.js.map +1 -0
  584. package/dist/storage.d.ts +9 -2
  585. package/dist/storage.d.ts.map +1 -1
  586. package/dist/storage.js +6 -1
  587. package/dist/storage.js.map +1 -1
  588. package/dist/string-identity-agreement.d.ts +35 -0
  589. package/dist/string-identity-agreement.d.ts.map +1 -0
  590. package/dist/string-identity-agreement.js +72 -0
  591. package/dist/string-identity-agreement.js.map +1 -0
  592. package/dist/types.d.ts +41 -6
  593. package/dist/types.d.ts.map +1 -1
  594. package/dist/types.js +0 -10
  595. package/dist/types.js.map +1 -1
  596. package/dist/uncertain-write.d.ts +157 -17
  597. package/dist/uncertain-write.d.ts.map +1 -1
  598. package/dist/uncertain-write.js +86 -30
  599. package/dist/uncertain-write.js.map +1 -1
  600. package/dist/versioning.d.ts +9 -4
  601. package/dist/versioning.d.ts.map +1 -1
  602. package/dist/versioning.js +9 -4
  603. package/dist/versioning.js.map +1 -1
  604. package/dist/view-launch-contract.d.ts +14 -0
  605. package/dist/view-launch-contract.d.ts.map +1 -0
  606. package/dist/view-launch-contract.js +23 -0
  607. package/dist/view-launch-contract.js.map +1 -0
  608. package/dist/write-identity.d.ts +5 -0
  609. package/dist/write-identity.d.ts.map +1 -0
  610. package/dist/write-identity.js +9 -0
  611. package/dist/write-identity.js.map +1 -0
  612. package/package.json +140 -3
@@ -0,0 +1,179 @@
1
+ /** Ordinary opaque-file reads over the supplied hosted carrier. Metadata is published only
2
+ * after a whole consistent listing; bytes only after their length, digest and exact MIME pin
3
+ * are verified. This adapter neither changes the document reader nor supplies credentials. */
4
+ import { compareStorageKeys } from "../paths.js";
5
+ import { captureBlobHead } from "../blob-contract.js";
6
+ import { sha256HexOfBytes, sha256HexOfUtf8 } from "../sha256.js";
7
+ import { isContentVersion } from "../version-transport.js";
8
+ import { malformed, onRoute, RemoteError } from "../remote-error.js";
9
+ import { HostedAnswerTooLarge, HostedCarrierError } from "./carrier.js";
10
+ import { HostedReadAdapterError, readRefusal } from "./read-adapter.js";
11
+ import { HEADS_PAGE_ATTEMPTS, isPageRestart, pageRestartDelay, pause } from "./paged-reads.js";
12
+ export const HOSTED_BLOB_READ_BOUNDS = Object.freeze({
13
+ bytes: 16 * 1024 * 1024,
14
+ heads: 10000,
15
+ headsPerPage: 1000,
16
+ // Even maximally escaped legal keys and MIME values in a full page fit within this bound.
17
+ headsPageBytes: 4 * 1024 * 1024,
18
+ cursorChars: 1024,
19
+ });
20
+ const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
21
+ const only = (value, keys) => Object.keys(value).every(key => keys.includes(key));
22
+ const whole = (value) => typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
23
+ function head(value) {
24
+ try {
25
+ return captureBlobHead(value);
26
+ }
27
+ catch (error) {
28
+ throw malformed(error instanceof Error ? error.message : "malformed blob head");
29
+ }
30
+ }
31
+ function tooLarge(maximum) {
32
+ return new HostedCarrierError("unavailable", { cause: new HostedAnswerTooLarge(maximum) });
33
+ }
34
+ export function createHostedBlobReadAdapter(options) {
35
+ const { carrier, bundleId, signal, capabilities } = options;
36
+ const prefix = options.prefix ?? "/sync/v1";
37
+ const headsRoute = `${prefix}/blob-heads`, readRoute = `${prefix}/blob-read`;
38
+ const assertOpen = () => { if (signal.aborted)
39
+ throw new HostedCarrierError("unavailable"); };
40
+ /** Race even caller-supplied ports: abort must not depend on their cooperation. */
41
+ function active(work, discard) {
42
+ assertOpen();
43
+ return new Promise((resolve, reject) => {
44
+ const aborted = () => reject(new HostedCarrierError("unavailable"));
45
+ signal.addEventListener("abort", aborted, { once: true });
46
+ Promise.resolve().then(() => { assertOpen(); return work(); }).then(value => {
47
+ if (signal.aborted) {
48
+ discard?.(value);
49
+ aborted();
50
+ }
51
+ else
52
+ resolve(value);
53
+ }, reject).finally(() => signal.removeEventListener("abort", aborted));
54
+ });
55
+ }
56
+ async function admitted() {
57
+ const caps = await active(capabilities);
58
+ assertOpen();
59
+ if (caps.blobReads !== "allowed" || !Number.isSafeInteger(caps.blobReadBytes) || !(caps.blobReadBytes > 0))
60
+ throw new HostedReadAdapterError("unsupported");
61
+ return Math.min(caps.blobReadBytes, HOSTED_BLOB_READ_BOUNDS.bytes);
62
+ }
63
+ function carrierFailure(error) {
64
+ if (error instanceof HostedCarrierError && error.code === "denied")
65
+ throw new RemoteError("no credential for the host", "AUTH_REQUIRED", 401, error);
66
+ throw error;
67
+ }
68
+ async function listing() {
69
+ const heads = [], cursors = new Set();
70
+ let cursor, revision, digest, total;
71
+ for (;;) {
72
+ const answer = await active(() => carrier.json(headsRoute, { bundleId, ...(cursor === undefined ? {} : { cursor }) }, signal, { maximum: HOSTED_BLOB_READ_BOUNDS.headsPageBytes })).catch(carrierFailure);
73
+ assertOpen();
74
+ if (answer.status !== 200)
75
+ throw readRefusal(answer);
76
+ const page = answer.body;
77
+ if (!record(page) || !only(page, ["schemaVersion", "bundleId", "revision", "digest", "total", "heads", "next"]) ||
78
+ page.schemaVersion !== 1 || page.bundleId !== bundleId || !whole(page.revision) || !isContentVersion(page.digest) ||
79
+ !whole(page.total) || page.total > HOSTED_BLOB_READ_BOUNDS.heads || !Array.isArray(page.heads) || page.heads.length > HOSTED_BLOB_READ_BOUNDS.headsPerPage ||
80
+ !(page.next === null || typeof page.next === "string" && page.next.length > 0 && page.next.length <= HOSTED_BLOB_READ_BOUNDS.cursorChars))
81
+ throw malformed("malformed blob heads page");
82
+ if (revision !== undefined && (revision !== page.revision || digest !== page.digest || total !== page.total))
83
+ throw malformed("mixed blob heads pages");
84
+ revision = page.revision;
85
+ digest = page.digest;
86
+ total = page.total;
87
+ for (const raw of page.heads) {
88
+ const entry = head(raw), previous = heads.at(-1);
89
+ if (previous && compareStorageKeys(previous.key, entry.key) >= 0)
90
+ throw malformed("blob heads are not strictly ordered");
91
+ heads.push(entry);
92
+ }
93
+ if (heads.length > total || page.heads.length === 0 && (total !== 0 || cursor !== undefined || page.next !== null))
94
+ throw malformed("blob heads page made no progress");
95
+ if (page.next === null) {
96
+ if (heads.length !== total || digest !== `sha256:${sha256HexOfUtf8(JSON.stringify([revision, heads.map(entry => [entry.key, entry.version, entry.contentType])]))}`)
97
+ throw malformed("blob heads count or digest mismatch");
98
+ return Object.freeze({ bundleId, revision, digest, heads: Object.freeze(heads) });
99
+ }
100
+ if (heads.length >= total || cursors.has(page.next))
101
+ throw malformed("blob heads cursor made no progress");
102
+ cursors.add(page.next);
103
+ cursor = page.next;
104
+ }
105
+ }
106
+ return {
107
+ async heads() {
108
+ await admitted();
109
+ return onRoute(headsRoute, async () => {
110
+ for (let attempt = 1;; attempt += 1) {
111
+ try {
112
+ return await listing();
113
+ }
114
+ catch (error) {
115
+ if (attempt >= HEADS_PAGE_ATTEMPTS || !isPageRestart(error))
116
+ throw error;
117
+ await active(() => (options.sleep ?? pause)(pageRestartDelay(attempt), signal));
118
+ }
119
+ }
120
+ });
121
+ },
122
+ async read(pin) {
123
+ // Copy before any await so caller mutation cannot change the request or its expectations.
124
+ const expected = head(pin);
125
+ const maximum = await admitted();
126
+ return onRoute(readRoute, async () => {
127
+ // An uncooperative port may answer after abort. It still must not leave an open body.
128
+ const answer = await active(() => carrier.stream(readRoute, { bundleId, ...expected }, signal), answer => {
129
+ if (answer.ok)
130
+ void answer.body.cancel().catch(() => { });
131
+ }).catch(carrierFailure);
132
+ if (!answer.ok)
133
+ throw readRefusal(answer);
134
+ const reader = answer.body.getReader();
135
+ let complete = false;
136
+ const cancel = () => { void reader.cancel().catch(() => { }); };
137
+ signal.addEventListener("abort", cancel, { once: true });
138
+ try {
139
+ assertOpen();
140
+ const lengthText = answer.headers.get("content-length");
141
+ if (answer.status !== 200 || answer.headers.get("content-type") !== "application/octet-stream" ||
142
+ answer.headers.get("x-superbee-blob-version") !== expected.version || answer.headers.get("x-superbee-content-type") !== expected.contentType ||
143
+ lengthText === null || !/^(0|[1-9][0-9]*)$/.test(lengthText) || !whole(Number(lengthText)))
144
+ throw malformed("blob read headers do not match the pin");
145
+ const length = Number(lengthText);
146
+ if (length > maximum)
147
+ throw tooLarge(maximum);
148
+ const bytes = new Uint8Array(length);
149
+ let offset = 0;
150
+ for (;;) {
151
+ const chunk = await active(() => reader.read());
152
+ assertOpen();
153
+ if (chunk.done)
154
+ break;
155
+ if (!(chunk.value instanceof Uint8Array))
156
+ throw malformed("blob read yielded non-byte content");
157
+ if (chunk.value.byteLength > maximum - offset)
158
+ throw tooLarge(maximum);
159
+ if (chunk.value.byteLength > length - offset)
160
+ throw malformed("blob read exceeded its stated length");
161
+ bytes.set(chunk.value, offset);
162
+ offset += chunk.value.byteLength;
163
+ }
164
+ if (offset !== length || `sha256:${sha256HexOfBytes(bytes)}` !== expected.version)
165
+ throw malformed("blob read length or digest mismatch");
166
+ complete = true;
167
+ return Object.freeze({ ...expected, bytes });
168
+ }
169
+ finally {
170
+ signal.removeEventListener("abort", cancel);
171
+ if (!complete)
172
+ cancel();
173
+ reader.releaseLock();
174
+ }
175
+ });
176
+ },
177
+ };
178
+ }
179
+ //# sourceMappingURL=blob-reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob-reads.js","sourceRoot":"","sources":["../../src/hosted-transport/blob-reads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type HostedCarrier } from "./carrier.js";
2
+ import { type BlobWriteExpected, type BlobWriteResult, type BlobOutcomeAnswer, type UpdateAnswerRow } from "./answer-rows.js";
3
+ import { type HostedCapabilities } from "./read-adapter.js";
4
+ export interface HostedBlobWriteIdentity {
5
+ readonly requestId: string;
6
+ readonly binding: string;
7
+ readonly via?: string;
8
+ /** A person's confirmation of the deletion count; admission only, sent on delete, never lookup. */
9
+ readonly acceptDeletes?: number;
10
+ }
11
+ export interface BlobSendAnswer {
12
+ /** Null when the carrier failed or the call was aborted without usable answer evidence. */
13
+ readonly status: number | null;
14
+ readonly row: UpdateAnswerRow;
15
+ readonly result?: BlobWriteResult;
16
+ /** An exact request-id marker accompanying valid terminal evidence that its row admits.
17
+ * False does not override the row: successful/recorded rows retain their original meaning. */
18
+ readonly settled: boolean;
19
+ }
20
+ export interface HostedBlobWriteAdapterOptions {
21
+ readonly carrier: HostedCarrier;
22
+ /** Bare portable bundle id. A supplied scoped carrier owns workspace qualification. */
23
+ readonly bundleId: string;
24
+ readonly prefix?: string;
25
+ readonly signal: AbortSignal;
26
+ readonly capabilities: () => Promise<HostedCapabilities>;
27
+ }
28
+ export interface HostedBlobWriteAdapter {
29
+ send(intent: BlobWriteExpected, identity: HostedBlobWriteIdentity, bytes?: Uint8Array): Promise<BlobSendAnswer>;
30
+ /** Returns explicit absence, never null or resend permission. Failed evidence rejects. */
31
+ lookup(intent: BlobWriteExpected, identity: HostedBlobWriteIdentity): Promise<BlobOutcomeAnswer>;
32
+ }
33
+ export declare function createHostedBlobWriteAdapter(options: HostedBlobWriteAdapterOptions): HostedBlobWriteAdapter;
34
+ //# sourceMappingURL=blob-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob-write.d.ts","sourceRoot":"","sources":["../../src/hosted-transport/blob-write.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAC3F,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEpF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AACD,MAAM,WAAW,cAAc;IAC7B,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC;kGAC8F;IAC9F,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AACD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1D;AACD,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAChH,0FAA0F;IAC1F,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAClG;AAmBD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,6BAA6B,GAAG,sBAAsB,CAgE3G"}
@@ -0,0 +1,115 @@
1
+ /** One identified blob delivery or outcome lookup through the caller's carrier. This wire
2
+ * adapter preserves typed evidence; it never resends, reads a current head, or interprets an
3
+ * absent outcome as permission to deliver again. Client journaling and recovery live elsewhere. */
4
+ import { captureBlobWriteExpected, encodeBlobKey } from "../blob-contract.js";
5
+ import { isWriteRequestId } from "../write-identity.js";
6
+ import { isHostedBundleId } from "../dependencies.js";
7
+ import { isContentVersion } from "../version-transport.js";
8
+ import { sha256HexOfBytes } from "../sha256.js";
9
+ import { isAgentLabelVia, isAcceptedDeletionCount, HostedCarrierError, } from "./carrier.js";
10
+ import { classifyBlobWriteAnswer, decodeBlobOutcomeAnswer, HostedOutcomeError, updateRow, } from "./answer-rows.js";
11
+ import { HostedReadAdapterError } from "./read-adapter.js";
12
+ const MAXIMUM_BLOB_BYTES = 16 * 1024 * 1024;
13
+ const ANSWER_BYTES = 64 * 1024;
14
+ const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
15
+ const only = (value, keys) => Object.keys(value).every(key => keys.includes(key));
16
+ function snapshot(intent, identity) {
17
+ if (!record(intent) || !record(identity))
18
+ throw new TypeError("blob intent and identity must be objects");
19
+ const copied = { ...intent }, id = { ...identity };
20
+ const deletion = copied.operationId === "blobs.delete.v1";
21
+ captureBlobWriteExpected(copied);
22
+ if (!only(id, ["requestId", "binding", "via", "acceptDeletes"]) || typeof id.requestId !== "string" || !isWriteRequestId(id.requestId) || !isContentVersion(id.binding) ||
23
+ id.via !== undefined && !isAgentLabelVia(id.via) || id.acceptDeletes !== undefined && (!deletion || !isAcceptedDeletionCount(id.acceptDeletes)))
24
+ throw new TypeError("invalid blob write identity");
25
+ return { intent: Object.freeze(copied), identity: Object.freeze(id), keyHeader: encodeBlobKey(copied.key) };
26
+ }
27
+ function immutable(result) {
28
+ Object.freeze(result.ok ? result.data : result.error);
29
+ return Object.freeze(result);
30
+ }
31
+ export function createHostedBlobWriteAdapter(options) {
32
+ const { carrier, bundleId, signal, capabilities } = options;
33
+ const prefix = options.prefix ?? "/sync/v1";
34
+ if (typeof bundleId !== "string" || !isHostedBundleId(bundleId))
35
+ throw new TypeError("a bare hosted bundle id is required");
36
+ const assertOpen = () => { if (signal.aborted)
37
+ throw new HostedCarrierError("unavailable"); };
38
+ function active(work) {
39
+ assertOpen();
40
+ return new Promise((resolve, reject) => {
41
+ const abort = () => reject(new HostedCarrierError("unavailable"));
42
+ signal.addEventListener("abort", abort, { once: true });
43
+ Promise.resolve().then(() => { assertOpen(); return work(); }).then(value => {
44
+ if (signal.aborted)
45
+ abort();
46
+ else
47
+ resolve(value);
48
+ }, reject).finally(() => signal.removeEventListener("abort", abort));
49
+ });
50
+ }
51
+ async function admitted() {
52
+ const caps = await active(capabilities);
53
+ assertOpen();
54
+ if (caps.blobWrites !== "allowed" || !Number.isSafeInteger(caps.blobWriteBytes) || !(caps.blobWriteBytes > 0))
55
+ throw new HostedReadAdapterError("unsupported");
56
+ return Math.min(caps.blobWriteBytes, MAXIMUM_BLOB_BYTES);
57
+ }
58
+ const headers = (id, deletion = false) => ({ maximum: ANSWER_BYTES, writeRequest: id.requestId, binding: id.binding, ...(id.via === undefined ? {} : { via: id.via }), ...(deletion && id.acceptDeletes !== undefined ? { acceptDeletes: id.acceptDeletes } : {}) });
59
+ return {
60
+ async send(rawIntent, rawIdentity, rawBytes) {
61
+ const { intent, identity, keyHeader } = snapshot(rawIntent, rawIdentity);
62
+ const deletion = intent.operationId === "blobs.delete.v1";
63
+ if (deletion ? rawBytes !== undefined : !(rawBytes instanceof Uint8Array))
64
+ throw new TypeError("only blob create/replace carry bytes");
65
+ if (rawBytes && rawBytes.byteLength > MAXIMUM_BLOB_BYTES)
66
+ throw new TypeError("blob bytes exceed the write bound");
67
+ const bytes = rawBytes === undefined ? undefined : new Uint8Array(rawBytes);
68
+ if (bytes && (bytes.byteLength > MAXIMUM_BLOB_BYTES || intent.operationId === "blobs.delete.v1" || `sha256:${sha256HexOfBytes(bytes)}` !== intent.version))
69
+ throw new TypeError("blob bytes do not match the retained digest or bound");
70
+ const maximum = await admitted();
71
+ if (bytes && bytes.byteLength > maximum)
72
+ throw new TypeError("blob bytes exceed the advertised write bound");
73
+ if (!deletion && !carrier.bytes)
74
+ throw new HostedReadAdapterError("unsupported");
75
+ try {
76
+ const answer = await active(() => {
77
+ if (intent.operationId === "blobs.delete.v1")
78
+ return carrier.json(`${prefix}/blob-delete`, { bundleId, ...intent }, signal, headers(identity, true));
79
+ return carrier.bytes(`${prefix}/${intent.operationId === "blobs.create.v1" ? "blob-create" : "blob-replace"}`, bytes, signal, {
80
+ ...headers(identity), headers: {
81
+ "X-Superbee-Bundle": bundleId, "X-Superbee-Blob-Key": keyHeader,
82
+ "X-Superbee-Blob-Version": intent.version, "X-Superbee-Content-Type": intent.contentType,
83
+ ...(intent.operationId === "blobs.create.v1" ? {} : { "X-Superbee-Expected-Version": intent.expectedVersion, "X-Superbee-Expected-Content-Type": intent.expectedContentType }),
84
+ },
85
+ });
86
+ });
87
+ const { row, result } = classifyBlobWriteAnswer(answer, intent);
88
+ const settled = answer.headers.get("X-Superbee-Write-Settled") === identity.requestId && result !== undefined &&
89
+ (row.recorded === "yes" || row.recorded === "settled-only") && (result.ok || result.error.writeState === "not_applied");
90
+ return Object.freeze({ status: answer.status, row, ...(result === undefined ? {} : { result: immutable(result) }), settled });
91
+ }
92
+ catch {
93
+ return Object.freeze({ status: null, row: updateRow("carrier"), settled: false });
94
+ }
95
+ },
96
+ async lookup(rawIntent, rawIdentity) {
97
+ const { intent, identity } = snapshot(rawIntent, rawIdentity);
98
+ await admitted();
99
+ let answer;
100
+ try {
101
+ answer = await active(() => carrier.json(`${prefix}/outcome`, { bundleId, ...intent }, signal, headers(identity)));
102
+ }
103
+ catch {
104
+ throw new HostedOutcomeError("unavailable");
105
+ }
106
+ if (answer.status !== 200)
107
+ throw new HostedOutcomeError("refused", answer.status);
108
+ const decoded = decodeBlobOutcomeAnswer(answer.body, { ...intent, requestId: identity.requestId, binding: identity.binding });
109
+ if (decoded.status !== "absent")
110
+ immutable(decoded.result);
111
+ return Object.freeze(decoded);
112
+ },
113
+ };
114
+ }
115
+ //# sourceMappingURL=blob-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob-write.js","sourceRoot":"","sources":["../../src/hosted-transport/blob-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * The carrier seam: how a hosted request leaves and what comes back, with the credential kept on
3
+ * the carrier's side. The browser's carrier sends the session cookie and CSRF token; the CLI's
4
+ * sends a bearer token. Everything above the seam (the read adapter, the whole-document
5
+ * transport, the answer rows) is the same for both, so one answer grammar serves every client.
6
+ *
7
+ * A carrier reports two failures and never a third: `denied` says nothing left (the credential
8
+ * was already gone, so the request was never sent), and `unavailable` says the request may have
9
+ * left and its answer is unknown. It never reports "not applied" on its own.
10
+ */
11
+ /** A hosted answer as the route sent it: the status, the headers, and the bounded JSON body (undefined when there is none). */
12
+ export type HostedAnswer = {
13
+ status: number;
14
+ headers: Headers;
15
+ body: unknown;
16
+ };
17
+ /** A streamed answer: the body as a stream for a `2xx`, otherwise the bounded refusal envelope. */
18
+ export type HostedStream = {
19
+ status: number;
20
+ headers: Headers;
21
+ } & ({
22
+ ok: true;
23
+ body: ReadableStream<Uint8Array>;
24
+ } | {
25
+ ok: false;
26
+ body: unknown;
27
+ });
28
+ export interface HostedRequestOptions {
29
+ /** Largest answer body admitted, in bytes; a larger or undecodable body is `unavailable`. */
30
+ maximum: number;
31
+ /** The request identity of an identified write or its outcome lookup. */
32
+ writeRequest?: string;
33
+ /**
34
+ * The binding the request is pinned to: the browser's editor recovery target, or the CLI
35
+ * checkout's digest. The carrier decides which header carries it.
36
+ */
37
+ binding?: string;
38
+ /**
39
+ * The tombstone a create acknowledges it re-creates (`X-Superbee-Recreate`), on a create and
40
+ * on that create's outcome lookup only. It is part of the request identity on the host, so a
41
+ * lookup must carry exactly what the write carried.
42
+ */
43
+ recreate?: string;
44
+ /**
45
+ * The agent the client runs under, such as `claude-code` (`X-Superbee-Via`): the unverified
46
+ * `;via=` part of the host's agent label for this write. Attribution only, never authority, and
47
+ * not part of the request identity. Only an identified write and its outcome lookup carry it,
48
+ * and only a token {@link isAgentLabelVia} admits is ever sent.
49
+ */
50
+ via?: string;
51
+ /**
52
+ * A person's typed acknowledgment of the host's mass-delete hold (`X-Superbee-Accept-Deletes`):
53
+ * the deletions they confirmed the bundle's 24-hour window may hold, from 1 to 100,000. Sent on
54
+ * a delete only, and never without that confirmation. Admission only, not part of the request
55
+ * identity.
56
+ */
57
+ acceptDeletes?: number;
58
+ /**
59
+ * The workspace (tenant id, such as `tenant:holaxis`) a workspace-scoped route acts in
60
+ * (`Superbee-Workspace`), for the attention routes, whose admission spans every workspace the
61
+ * person is in. Admission only. A value that is not a tenant id is refused before sending.
62
+ */
63
+ workspace?: string;
64
+ }
65
+ /** The header that carries {@link HostedRequestOptions.workspace}. */
66
+ export declare const WORKSPACE_HEADER = "Superbee-Workspace";
67
+ /** Whether `value` has the shape of a tenant id the workspace header may carry. */
68
+ export declare function isWorkspaceTenantId(value: unknown): value is string;
69
+ /** The header that carries {@link HostedRequestOptions.acceptDeletes}. */
70
+ export declare const ACCEPT_DELETES_HEADER = "X-Superbee-Accept-Deletes";
71
+ /** The largest acknowledgment the host admits. */
72
+ export declare const MAXIMUM_ACCEPTED_DELETIONS = 100000;
73
+ /** Whether `value` is an acknowledgment count the host admits: an integer from 1 to 100,000. */
74
+ export declare function isAcceptedDeletionCount(value: unknown): value is number;
75
+ /** The header that carries {@link HostedRequestOptions.recreate}. */
76
+ export declare const RECREATE_HEADER = "X-Superbee-Recreate";
77
+ /** The header that carries {@link HostedRequestOptions.via}. */
78
+ export declare const VIA_HEADER = "X-Superbee-Via";
79
+ /**
80
+ * Whether `value` is a `via` token the host admits: 1 to 32 characters of `[a-z0-9._-]`, never
81
+ * starting with `superbee` (Superbee's own names). The same rule as the host's `isAgentLabelVia`;
82
+ * the `/sync/v1` golden exchanges (`create-200-ok-via`, `write-400-invalid-via`) pin the header
83
+ * and the host's refusal. A token the host refused would make every write a terminal 400.
84
+ */
85
+ export { isAgentLabelVia } from "../write-identity.js";
86
+ /**
87
+ * A raw-bytes request ({@link HostedCarrier.bytes}), such as one blob of a staged bundle creation
88
+ * (`bundle-create-blob`): the body travels as `application/octet-stream` with its exact
89
+ * `Content-Length`, and the route's own fields travel as headers. The request identity, the
90
+ * binding and `via` are a JSON request's own ({@link HostedRequestOptions}): the same headers,
91
+ * refused before sending by the same rules, so an identified raw write is identified as a document
92
+ * write is.
93
+ */
94
+ export interface HostedBytesRequestOptions extends Pick<HostedRequestOptions, "maximum" | "writeRequest" | "binding" | "via"> {
95
+ /**
96
+ * The route's own fields (`X-Superbee-Workspace`, say): `X-Superbee-` names only, and never a
97
+ * header the carrier owns (the request identity, the binding, `recreate`, `via`, the deletion
98
+ * acknowledgment) or a credential. Values are printable ASCII.
99
+ */
100
+ headers?: Readonly<Record<string, string>>;
101
+ }
102
+ export interface HostedCarrier {
103
+ json(path: string, input: unknown, signal: AbortSignal, options: HostedRequestOptions): Promise<HostedAnswer>;
104
+ stream(path: string, input: unknown, signal: AbortSignal): Promise<HostedStream>;
105
+ /**
106
+ * One `POST` whose body is `body` exactly, answered as {@link json} answers. Optional: a carrier
107
+ * without it (the browser's) cannot send raw bytes, and a caller that needs them says so.
108
+ */
109
+ bytes?(path: string, body: Uint8Array, signal: AbortSignal, options: HostedBytesRequestOptions): Promise<HostedAnswer>;
110
+ }
111
+ /**
112
+ * The cause a carrier's `unavailable` carries when the answer was larger than the request's
113
+ * `maximum`: the host answered, and the same request gets the same answer, so a reader may report
114
+ * it as a deterministic refusal rather than an outage. The carrier's code stays `unavailable`.
115
+ */
116
+ export declare class HostedAnswerTooLarge extends Error {
117
+ readonly name = "HostedAnswerTooLarge";
118
+ readonly maximum: number;
119
+ constructor(maximum: number);
120
+ }
121
+ /** True when `error` is a carrier failure because the answer exceeded its bound. */
122
+ export declare function isAnswerTooLarge(error: unknown): boolean;
123
+ export declare class HostedCarrierError extends Error {
124
+ readonly name = "HostedCarrierError";
125
+ readonly code: "denied" | "unavailable";
126
+ constructor(code: "denied" | "unavailable", options?: {
127
+ cause?: unknown;
128
+ });
129
+ }
130
+ export interface FetchCarrierOptions {
131
+ /** The host's origin, e.g. `https://superbee.example`; paths are resolved against it. */
132
+ baseUrl: string;
133
+ /**
134
+ * The credential headers for one request, such as `{ Authorization: "Bearer …" }`. A rejection
135
+ * means no credential is available: the request is not sent and the carrier reports `denied`.
136
+ */
137
+ credentials(signal: AbortSignal): Promise<Record<string, string>>;
138
+ /** The header that carries `binding`. Default `X-Superbee-Checkout`. */
139
+ bindingHeader?: string;
140
+ fetch?: typeof fetch;
141
+ /** Every request is answered within this many milliseconds; a stream restarts it at each chunk. Default 15 s. */
142
+ deadlineMs?: number;
143
+ }
144
+ /**
145
+ * A carrier over `fetch` with caller-supplied credential headers: the shape the CLI's bearer
146
+ * carrier takes. Requests are `POST` with a JSON body (or, through `bytes`, a raw one), never follow
147
+ * redirects, and are refused before sending when the identity, binding or a route header is
148
+ * malformed.
149
+ */
150
+ export declare function createFetchCarrier(options: FetchCarrierOptions): HostedCarrier;
151
+ //# sourceMappingURL=carrier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carrier.d.ts","sourceRoot":"","sources":["../../src/hosted-transport/carrier.ts"],"names":[],"mappings":"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"}