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

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 (628) hide show
  1. package/README.md +1255 -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 +37 -13
  87. package/dist/document-mutation.d.ts.map +1 -1
  88. package/dist/document-mutation.js +129 -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/document-backend.d.ts +74 -0
  221. package/dist/hosted-transport/document-backend.d.ts.map +1 -0
  222. package/dist/hosted-transport/document-backend.js +160 -0
  223. package/dist/hosted-transport/document-backend.js.map +1 -0
  224. package/dist/hosted-transport/history-pages.d.ts +55 -0
  225. package/dist/hosted-transport/history-pages.d.ts.map +1 -0
  226. package/dist/hosted-transport/history-pages.js +69 -0
  227. package/dist/hosted-transport/history-pages.js.map +1 -0
  228. package/dist/hosted-transport/index.d.ts +19 -0
  229. package/dist/hosted-transport/index.d.ts.map +1 -0
  230. package/dist/hosted-transport/index.js +19 -0
  231. package/dist/hosted-transport/index.js.map +1 -0
  232. package/dist/hosted-transport/operations.d.ts +85 -0
  233. package/dist/hosted-transport/operations.d.ts.map +1 -0
  234. package/dist/hosted-transport/operations.js +128 -0
  235. package/dist/hosted-transport/operations.js.map +1 -0
  236. package/dist/hosted-transport/paged-reads.d.ts +87 -0
  237. package/dist/hosted-transport/paged-reads.d.ts.map +1 -0
  238. package/dist/hosted-transport/paged-reads.js +238 -0
  239. package/dist/hosted-transport/paged-reads.js.map +1 -0
  240. package/dist/hosted-transport/read-adapter.d.ts +256 -0
  241. package/dist/hosted-transport/read-adapter.d.ts.map +1 -0
  242. package/dist/hosted-transport/read-adapter.js +568 -0
  243. package/dist/hosted-transport/read-adapter.js.map +1 -0
  244. package/dist/hosted-transport/root-write.d.ts +114 -0
  245. package/dist/hosted-transport/root-write.d.ts.map +1 -0
  246. package/dist/hosted-transport/root-write.js +171 -0
  247. package/dist/hosted-transport/root-write.js.map +1 -0
  248. package/dist/hosted-transport/whole-document-transport.d.ts +204 -0
  249. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -0
  250. package/dist/hosted-transport/whole-document-transport.js +447 -0
  251. package/dist/hosted-transport/whole-document-transport.js.map +1 -0
  252. package/dist/identity-fold.d.ts +18 -0
  253. package/dist/identity-fold.d.ts.map +1 -0
  254. package/dist/identity-fold.js +22 -0
  255. package/dist/identity-fold.js.map +1 -0
  256. package/dist/index.d.ts +41 -11
  257. package/dist/index.d.ts.map +1 -1
  258. package/dist/index.js +31 -9
  259. package/dist/index.js.map +1 -1
  260. package/dist/indexeddb-backend.d.ts +25 -33
  261. package/dist/indexeddb-backend.d.ts.map +1 -1
  262. package/dist/indexeddb-backend.js +264 -8
  263. package/dist/indexeddb-backend.js.map +1 -1
  264. package/dist/inventory-guard.d.ts +58 -0
  265. package/dist/inventory-guard.d.ts.map +1 -0
  266. package/dist/inventory-guard.js +169 -0
  267. package/dist/inventory-guard.js.map +1 -0
  268. package/dist/journaled-backend.d.ts +149 -9
  269. package/dist/journaled-backend.d.ts.map +1 -1
  270. package/dist/journaled-backend.js +64 -58
  271. package/dist/journaled-backend.js.map +1 -1
  272. package/dist/kind-authoring.d.ts +170 -0
  273. package/dist/kind-authoring.d.ts.map +1 -0
  274. package/dist/kind-authoring.js +452 -0
  275. package/dist/kind-authoring.js.map +1 -0
  276. package/dist/kind-changes.d.ts +45 -0
  277. package/dist/kind-changes.d.ts.map +1 -0
  278. package/dist/kind-changes.js +96 -0
  279. package/dist/kind-changes.js.map +1 -0
  280. package/dist/kind-conformance-error.d.ts +15 -0
  281. package/dist/kind-conformance-error.d.ts.map +1 -0
  282. package/dist/kind-conformance-error.js +20 -0
  283. package/dist/kind-conformance-error.js.map +1 -0
  284. package/dist/kind-coverage.d.ts +99 -0
  285. package/dist/kind-coverage.d.ts.map +1 -0
  286. package/dist/kind-coverage.js +186 -0
  287. package/dist/kind-coverage.js.map +1 -0
  288. package/dist/kind-deprecation.d.ts +32 -0
  289. package/dist/kind-deprecation.d.ts.map +1 -0
  290. package/dist/kind-deprecation.js +141 -0
  291. package/dist/kind-deprecation.js.map +1 -0
  292. package/dist/kind-field-mutation.d.ts +4 -0
  293. package/dist/kind-field-mutation.d.ts.map +1 -1
  294. package/dist/kind-field-mutation.js +28 -3
  295. package/dist/kind-field-mutation.js.map +1 -1
  296. package/dist/kinds-load.js +4 -4
  297. package/dist/kinds-load.js.map +1 -1
  298. package/dist/kinds.d.ts +111 -2
  299. package/dist/kinds.d.ts.map +1 -1
  300. package/dist/kinds.js +386 -20
  301. package/dist/kinds.js.map +1 -1
  302. package/dist/link-emit.d.ts +29 -0
  303. package/dist/link-emit.d.ts.map +1 -0
  304. package/dist/link-emit.js +39 -0
  305. package/dist/link-emit.js.map +1 -0
  306. package/dist/link-types.d.ts +27 -0
  307. package/dist/link-types.d.ts.map +1 -0
  308. package/dist/link-types.js +60 -0
  309. package/dist/link-types.js.map +1 -0
  310. package/dist/links.d.ts +52 -3
  311. package/dist/links.d.ts.map +1 -1
  312. package/dist/links.js +259 -18
  313. package/dist/links.js.map +1 -1
  314. package/dist/managed-document-metadata.d.ts +2 -0
  315. package/dist/managed-document-metadata.d.ts.map +1 -0
  316. package/dist/managed-document-metadata.js +9 -0
  317. package/dist/managed-document-metadata.js.map +1 -0
  318. package/dist/memory-backend.d.ts +3 -0
  319. package/dist/memory-backend.d.ts.map +1 -1
  320. package/dist/memory-backend.js +44 -2
  321. package/dist/memory-backend.js.map +1 -1
  322. package/dist/okf-actor.d.ts +1 -0
  323. package/dist/okf-actor.d.ts.map +1 -1
  324. package/dist/okf-actor.js +1 -0
  325. package/dist/okf-actor.js.map +1 -1
  326. package/dist/okf-authoring.d.ts +4 -0
  327. package/dist/okf-authoring.d.ts.map +1 -0
  328. package/dist/okf-authoring.js +12 -0
  329. package/dist/okf-authoring.js.map +1 -0
  330. package/dist/okf-standard-fields.d.ts +3 -0
  331. package/dist/okf-standard-fields.d.ts.map +1 -1
  332. package/dist/okf-standard-fields.js +3 -0
  333. package/dist/okf-standard-fields.js.map +1 -1
  334. package/dist/path-fold.d.ts +39 -0
  335. package/dist/path-fold.d.ts.map +1 -0
  336. package/dist/path-fold.js +41 -0
  337. package/dist/path-fold.js.map +1 -0
  338. package/dist/paths.d.ts +18 -0
  339. package/dist/paths.d.ts.map +1 -1
  340. package/dist/paths.js +32 -0
  341. package/dist/paths.js.map +1 -1
  342. package/dist/platform.d.ts +13 -2
  343. package/dist/platform.d.ts.map +1 -1
  344. package/dist/platform.js +16 -0
  345. package/dist/platform.js.map +1 -1
  346. package/dist/portable-export.d.ts +119 -0
  347. package/dist/portable-export.d.ts.map +1 -0
  348. package/dist/portable-export.js +501 -0
  349. package/dist/portable-export.js.map +1 -0
  350. package/dist/publication-filesystem.d.ts +1 -1
  351. package/dist/publication-filesystem.d.ts.map +1 -1
  352. package/dist/publication-filesystem.js +1 -1
  353. package/dist/publication-filesystem.js.map +1 -1
  354. package/dist/qualified-links.d.ts +67 -0
  355. package/dist/qualified-links.d.ts.map +1 -0
  356. package/dist/qualified-links.js +117 -0
  357. package/dist/qualified-links.js.map +1 -0
  358. package/dist/query-filter.d.ts +16 -2
  359. package/dist/query-filter.d.ts.map +1 -1
  360. package/dist/query-filter.js +40 -1
  361. package/dist/query-filter.js.map +1 -1
  362. package/dist/query-order.d.ts +22 -0
  363. package/dist/query-order.d.ts.map +1 -0
  364. package/dist/query-order.js +43 -0
  365. package/dist/query-order.js.map +1 -0
  366. package/dist/recipe-lifecycle/errors.d.ts +96 -0
  367. package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
  368. package/dist/recipe-lifecycle/errors.js +122 -0
  369. package/dist/recipe-lifecycle/errors.js.map +1 -0
  370. package/dist/recipe-lifecycle/evolution.d.ts +124 -0
  371. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
  372. package/dist/recipe-lifecycle/evolution.js +993 -0
  373. package/dist/recipe-lifecycle/evolution.js.map +1 -0
  374. package/dist/recipe-lifecycle/index.d.ts +34 -0
  375. package/dist/recipe-lifecycle/index.d.ts.map +1 -0
  376. package/dist/recipe-lifecycle/index.js +28 -0
  377. package/dist/recipe-lifecycle/index.js.map +1 -0
  378. package/dist/recipe-lifecycle/install.d.ts +155 -0
  379. package/dist/recipe-lifecycle/install.d.ts.map +1 -0
  380. package/dist/recipe-lifecycle/install.js +604 -0
  381. package/dist/recipe-lifecycle/install.js.map +1 -0
  382. package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
  383. package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
  384. package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
  385. package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
  386. package/dist/recipe-lifecycle/retirement-apply.d.ts +59 -0
  387. package/dist/recipe-lifecycle/retirement-apply.d.ts.map +1 -0
  388. package/dist/recipe-lifecycle/retirement-apply.js +165 -0
  389. package/dist/recipe-lifecycle/retirement-apply.js.map +1 -0
  390. package/dist/recipe-lifecycle/retirement.d.ts +89 -0
  391. package/dist/recipe-lifecycle/retirement.d.ts.map +1 -0
  392. package/dist/recipe-lifecycle/retirement.js +347 -0
  393. package/dist/recipe-lifecycle/retirement.js.map +1 -0
  394. package/dist/recipe-lifecycle/stamp.d.ts +151 -0
  395. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
  396. package/dist/recipe-lifecycle/stamp.js +364 -0
  397. package/dist/recipe-lifecycle/stamp.js.map +1 -0
  398. package/dist/recipe-set-preflight.d.ts +139 -0
  399. package/dist/recipe-set-preflight.d.ts.map +1 -0
  400. package/dist/recipe-set-preflight.js +536 -0
  401. package/dist/recipe-set-preflight.js.map +1 -0
  402. package/dist/recipes.d.ts +29 -1
  403. package/dist/recipes.d.ts.map +1 -1
  404. package/dist/recipes.js +137 -1
  405. package/dist/recipes.js.map +1 -1
  406. package/dist/record-overlay/apply.d.ts +43 -0
  407. package/dist/record-overlay/apply.d.ts.map +1 -0
  408. package/dist/record-overlay/apply.js +527 -0
  409. package/dist/record-overlay/apply.js.map +1 -0
  410. package/dist/record-overlay/canonical.d.ts +22 -0
  411. package/dist/record-overlay/canonical.d.ts.map +1 -0
  412. package/dist/record-overlay/canonical.js +47 -0
  413. package/dist/record-overlay/canonical.js.map +1 -0
  414. package/dist/record-overlay/digest.d.ts +4 -0
  415. package/dist/record-overlay/digest.d.ts.map +1 -0
  416. package/dist/record-overlay/digest.js +11 -0
  417. package/dist/record-overlay/digest.js.map +1 -0
  418. package/dist/record-overlay/errors.d.ts +44 -0
  419. package/dist/record-overlay/errors.d.ts.map +1 -0
  420. package/dist/record-overlay/errors.js +55 -0
  421. package/dist/record-overlay/errors.js.map +1 -0
  422. package/dist/record-overlay/findings.d.ts +5 -0
  423. package/dist/record-overlay/findings.d.ts.map +1 -0
  424. package/dist/record-overlay/findings.js +83 -0
  425. package/dist/record-overlay/findings.js.map +1 -0
  426. package/dist/record-overlay/index.d.ts +23 -0
  427. package/dist/record-overlay/index.d.ts.map +1 -0
  428. package/dist/record-overlay/index.js +21 -0
  429. package/dist/record-overlay/index.js.map +1 -0
  430. package/dist/record-overlay/plan.d.ts +12 -0
  431. package/dist/record-overlay/plan.d.ts.map +1 -0
  432. package/dist/record-overlay/plan.js +285 -0
  433. package/dist/record-overlay/plan.js.map +1 -0
  434. package/dist/record-overlay/policy.d.ts +74 -0
  435. package/dist/record-overlay/policy.d.ts.map +1 -0
  436. package/dist/record-overlay/policy.js +235 -0
  437. package/dist/record-overlay/policy.js.map +1 -0
  438. package/dist/record-overlay/redact.d.ts +3 -0
  439. package/dist/record-overlay/redact.d.ts.map +1 -0
  440. package/dist/record-overlay/redact.js +27 -0
  441. package/dist/record-overlay/redact.js.map +1 -0
  442. package/dist/record-overlay/signal-kind.d.ts +30 -0
  443. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  444. package/dist/record-overlay/signal-kind.js +38 -0
  445. package/dist/record-overlay/signal-kind.js.map +1 -0
  446. package/dist/record-overlay/signal-text.d.ts +45 -0
  447. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  448. package/dist/record-overlay/signal-text.js +116 -0
  449. package/dist/record-overlay/signal-text.js.map +1 -0
  450. package/dist/record-overlay/source-index.d.ts +19 -0
  451. package/dist/record-overlay/source-index.d.ts.map +1 -0
  452. package/dist/record-overlay/source-index.js +102 -0
  453. package/dist/record-overlay/source-index.js.map +1 -0
  454. package/dist/record-overlay/types.d.ts +291 -0
  455. package/dist/record-overlay/types.d.ts.map +1 -0
  456. package/dist/record-overlay/types.js +2 -0
  457. package/dist/record-overlay/types.js.map +1 -0
  458. package/dist/remote-backend.d.ts +58 -13
  459. package/dist/remote-backend.d.ts.map +1 -1
  460. package/dist/remote-backend.js +156 -36
  461. package/dist/remote-backend.js.map +1 -1
  462. package/dist/remote-document-codec.d.ts +2 -1
  463. package/dist/remote-document-codec.d.ts.map +1 -1
  464. package/dist/remote-document-codec.js +3 -2
  465. package/dist/remote-document-codec.js.map +1 -1
  466. package/dist/remote-error.d.ts +17 -1
  467. package/dist/remote-error.d.ts.map +1 -1
  468. package/dist/remote-error.js +32 -2
  469. package/dist/remote-error.js.map +1 -1
  470. package/dist/remote-operations.d.ts +0 -40
  471. package/dist/remote-operations.d.ts.map +1 -1
  472. package/dist/remote-operations.js +26 -6
  473. package/dist/remote-operations.js.map +1 -1
  474. package/dist/remote-parsers.d.ts +1 -1
  475. package/dist/remote-parsers.js +1 -1
  476. package/dist/search/backend-source.d.ts +6 -0
  477. package/dist/search/backend-source.d.ts.map +1 -0
  478. package/dist/search/backend-source.js +33 -0
  479. package/dist/search/backend-source.js.map +1 -0
  480. package/dist/search/contract.d.ts +151 -0
  481. package/dist/search/contract.d.ts.map +1 -0
  482. package/dist/search/contract.js +78 -0
  483. package/dist/search/contract.js.map +1 -0
  484. package/dist/search/errors.d.ts +30 -0
  485. package/dist/search/errors.d.ts.map +1 -0
  486. package/dist/search/errors.js +50 -0
  487. package/dist/search/errors.js.map +1 -0
  488. package/dist/search/identity.d.ts +12 -0
  489. package/dist/search/identity.d.ts.map +1 -0
  490. package/dist/search/identity.js +90 -0
  491. package/dist/search/identity.js.map +1 -0
  492. package/dist/search/index.d.ts +16 -0
  493. package/dist/search/index.d.ts.map +1 -0
  494. package/dist/search/index.js +15 -0
  495. package/dist/search/index.js.map +1 -0
  496. package/dist/search/memory-source.d.ts +36 -0
  497. package/dist/search/memory-source.d.ts.map +1 -0
  498. package/dist/search/memory-source.js +235 -0
  499. package/dist/search/memory-source.js.map +1 -0
  500. package/dist/search/rank.d.ts +34 -0
  501. package/dist/search/rank.d.ts.map +1 -0
  502. package/dist/search/rank.js +129 -0
  503. package/dist/search/rank.js.map +1 -0
  504. package/dist/search/row-text.d.ts +38 -0
  505. package/dist/search/row-text.d.ts.map +1 -0
  506. package/dist/search/row-text.js +88 -0
  507. package/dist/search/row-text.js.map +1 -0
  508. package/dist/search/search.d.ts +28 -0
  509. package/dist/search/search.d.ts.map +1 -0
  510. package/dist/search/search.js +257 -0
  511. package/dist/search/search.js.map +1 -0
  512. package/dist/search/source.d.ts +67 -0
  513. package/dist/search/source.d.ts.map +1 -0
  514. package/dist/search/source.js +2 -0
  515. package/dist/search/source.js.map +1 -0
  516. package/dist/search/text.d.ts +47 -0
  517. package/dist/search/text.d.ts.map +1 -0
  518. package/dist/search/text.js +150 -0
  519. package/dist/search/text.js.map +1 -0
  520. package/dist/site-capabilities.d.ts +345 -0
  521. package/dist/site-capabilities.d.ts.map +1 -0
  522. package/dist/site-capabilities.js +724 -0
  523. package/dist/site-capabilities.js.map +1 -0
  524. package/dist/source-engine/driver.d.ts +42 -0
  525. package/dist/source-engine/driver.d.ts.map +1 -0
  526. package/dist/source-engine/driver.js +529 -0
  527. package/dist/source-engine/driver.js.map +1 -0
  528. package/dist/source-engine/evidence.d.ts +39 -0
  529. package/dist/source-engine/evidence.d.ts.map +1 -0
  530. package/dist/source-engine/evidence.js +54 -0
  531. package/dist/source-engine/evidence.js.map +1 -0
  532. package/dist/source-engine/guard.d.ts +87 -0
  533. package/dist/source-engine/guard.d.ts.map +1 -0
  534. package/dist/source-engine/guard.js +427 -0
  535. package/dist/source-engine/guard.js.map +1 -0
  536. package/dist/source-engine/index.d.ts +35 -0
  537. package/dist/source-engine/index.d.ts.map +1 -0
  538. package/dist/source-engine/index.js +27 -0
  539. package/dist/source-engine/index.js.map +1 -0
  540. package/dist/source-engine/machine-state.d.ts +87 -0
  541. package/dist/source-engine/machine-state.d.ts.map +1 -0
  542. package/dist/source-engine/machine-state.js +94 -0
  543. package/dist/source-engine/machine-state.js.map +1 -0
  544. package/dist/source-engine/observe.d.ts +10 -0
  545. package/dist/source-engine/observe.d.ts.map +1 -0
  546. package/dist/source-engine/observe.js +276 -0
  547. package/dist/source-engine/observe.js.map +1 -0
  548. package/dist/source-engine/overlay.d.ts +50 -0
  549. package/dist/source-engine/overlay.d.ts.map +1 -0
  550. package/dist/source-engine/overlay.js +114 -0
  551. package/dist/source-engine/overlay.js.map +1 -0
  552. package/dist/source-engine/robots.d.ts +53 -0
  553. package/dist/source-engine/robots.d.ts.map +1 -0
  554. package/dist/source-engine/robots.js +158 -0
  555. package/dist/source-engine/robots.js.map +1 -0
  556. package/dist/source-engine/snapshot.d.ts +104 -0
  557. package/dist/source-engine/snapshot.d.ts.map +1 -0
  558. package/dist/source-engine/snapshot.js +240 -0
  559. package/dist/source-engine/snapshot.js.map +1 -0
  560. package/dist/source-engine/target-consumer.d.ts +12 -0
  561. package/dist/source-engine/target-consumer.d.ts.map +1 -0
  562. package/dist/source-engine/target-consumer.js +15 -0
  563. package/dist/source-engine/target-consumer.js.map +1 -0
  564. package/dist/source-engine/target-descriptor.d.ts +3 -0
  565. package/dist/source-engine/target-descriptor.d.ts.map +1 -0
  566. package/dist/source-engine/target-descriptor.js +26 -0
  567. package/dist/source-engine/target-descriptor.js.map +1 -0
  568. package/dist/source-engine/target.d.ts +82 -0
  569. package/dist/source-engine/target.d.ts.map +1 -0
  570. package/dist/source-engine/target.js +213 -0
  571. package/dist/source-engine/target.js.map +1 -0
  572. package/dist/source-engine/types.d.ts +296 -0
  573. package/dist/source-engine/types.d.ts.map +1 -0
  574. package/dist/source-engine/types.js +2 -0
  575. package/dist/source-engine/types.js.map +1 -0
  576. package/dist/source-harness/conformance.d.ts +16 -0
  577. package/dist/source-harness/conformance.d.ts.map +1 -0
  578. package/dist/source-harness/conformance.js +266 -0
  579. package/dist/source-harness/conformance.js.map +1 -0
  580. package/dist/source-harness/fixture.d.ts +97 -0
  581. package/dist/source-harness/fixture.d.ts.map +1 -0
  582. package/dist/source-harness/fixture.js +276 -0
  583. package/dist/source-harness/fixture.js.map +1 -0
  584. package/dist/source-harness/index.d.ts +22 -0
  585. package/dist/source-harness/index.d.ts.map +1 -0
  586. package/dist/source-harness/index.js +19 -0
  587. package/dist/source-harness/index.js.map +1 -0
  588. package/dist/source-harness/peer.d.ts +74 -0
  589. package/dist/source-harness/peer.d.ts.map +1 -0
  590. package/dist/source-harness/peer.js +106 -0
  591. package/dist/source-harness/peer.js.map +1 -0
  592. package/dist/source-profiles/index.d.ts +31 -0
  593. package/dist/source-profiles/index.d.ts.map +1 -0
  594. package/dist/source-profiles/index.js +206 -0
  595. package/dist/source-profiles/index.js.map +1 -0
  596. package/dist/source-profiles/link-header.d.ts +6 -0
  597. package/dist/source-profiles/link-header.d.ts.map +1 -0
  598. package/dist/source-profiles/link-header.js +131 -0
  599. package/dist/source-profiles/link-header.js.map +1 -0
  600. package/dist/storage.d.ts +9 -2
  601. package/dist/storage.d.ts.map +1 -1
  602. package/dist/storage.js +6 -1
  603. package/dist/storage.js.map +1 -1
  604. package/dist/string-identity-agreement.d.ts +35 -0
  605. package/dist/string-identity-agreement.d.ts.map +1 -0
  606. package/dist/string-identity-agreement.js +72 -0
  607. package/dist/string-identity-agreement.js.map +1 -0
  608. package/dist/types.d.ts +41 -6
  609. package/dist/types.d.ts.map +1 -1
  610. package/dist/types.js +0 -10
  611. package/dist/types.js.map +1 -1
  612. package/dist/uncertain-write.d.ts +157 -17
  613. package/dist/uncertain-write.d.ts.map +1 -1
  614. package/dist/uncertain-write.js +86 -30
  615. package/dist/uncertain-write.js.map +1 -1
  616. package/dist/versioning.d.ts +9 -4
  617. package/dist/versioning.d.ts.map +1 -1
  618. package/dist/versioning.js +9 -4
  619. package/dist/versioning.js.map +1 -1
  620. package/dist/view-launch-contract.d.ts +14 -0
  621. package/dist/view-launch-contract.d.ts.map +1 -0
  622. package/dist/view-launch-contract.js +23 -0
  623. package/dist/view-launch-contract.js.map +1 -0
  624. package/dist/write-identity.d.ts +5 -0
  625. package/dist/write-identity.d.ts.map +1 -0
  626. package/dist/write-identity.js +9 -0
  627. package/dist/write-identity.js.map +1 -0
  628. package/package.json +140 -3
@@ -0,0 +1,260 @@
1
+ import { isAgentLabelVia, isWriteRequestId, isWriteBinding } from "../write-identity.js";
2
+ /** The header that carries {@link HostedRequestOptions.workspace}. */
3
+ export const WORKSPACE_HEADER = "Superbee-Workspace";
4
+ /** A namespaced tenant id (`tenant:holaxis`, `org:…`): the shape the host checks before admission. */
5
+ const TENANT_ID = /^[a-z][a-z0-9-]{0,15}:[A-Za-z0-9._-]{1,128}$/;
6
+ /** Whether `value` has the shape of a tenant id the workspace header may carry. */
7
+ export function isWorkspaceTenantId(value) {
8
+ return typeof value === "string" && TENANT_ID.test(value);
9
+ }
10
+ /** The header that carries {@link HostedRequestOptions.acceptDeletes}. */
11
+ export const ACCEPT_DELETES_HEADER = "X-Superbee-Accept-Deletes";
12
+ /** The largest acknowledgment the host admits. */
13
+ export const MAXIMUM_ACCEPTED_DELETIONS = 100000;
14
+ /** Whether `value` is an acknowledgment count the host admits: an integer from 1 to 100,000. */
15
+ export function isAcceptedDeletionCount(value) {
16
+ return Number.isSafeInteger(value) && value >= 1 && value <= MAXIMUM_ACCEPTED_DELETIONS;
17
+ }
18
+ /** The header that carries {@link HostedRequestOptions.recreate}. */
19
+ export const RECREATE_HEADER = "X-Superbee-Recreate";
20
+ /** The header that carries {@link HostedRequestOptions.via}. */
21
+ export const VIA_HEADER = "X-Superbee-Via";
22
+ /**
23
+ * Whether `value` is a `via` token the host admits: 1 to 32 characters of `[a-z0-9._-]`, never
24
+ * starting with `superbee` (Superbee's own names). The same rule as the host's `isAgentLabelVia`;
25
+ * the `/sync/v1` golden exchanges (`create-200-ok-via`, `write-400-invalid-via`) pin the header
26
+ * and the host's refusal. A token the host refused would make every write a terminal 400.
27
+ */
28
+ export { isAgentLabelVia } from "../write-identity.js";
29
+ /**
30
+ * The cause a carrier's `unavailable` carries when the answer was larger than the request's
31
+ * `maximum`: the host answered, and the same request gets the same answer, so a reader may report
32
+ * it as a deterministic refusal rather than an outage. The carrier's code stays `unavailable`.
33
+ */
34
+ export class HostedAnswerTooLarge extends Error {
35
+ name = "HostedAnswerTooLarge";
36
+ maximum;
37
+ constructor(maximum) {
38
+ super(`the answer is larger than ${maximum} bytes`);
39
+ this.maximum = maximum;
40
+ }
41
+ }
42
+ /** True when `error` is a carrier failure because the answer exceeded its bound. */
43
+ export function isAnswerTooLarge(error) {
44
+ return error instanceof HostedCarrierError && error.cause instanceof HostedAnswerTooLarge;
45
+ }
46
+ export class HostedCarrierError extends Error {
47
+ name = "HostedCarrierError";
48
+ code;
49
+ constructor(code, options) {
50
+ super(code, options);
51
+ this.code = code;
52
+ }
53
+ }
54
+ const ROUTE_HEADER = /^x-superbee-[a-z0-9]+(?:-[a-z0-9]+)*$/;
55
+ const ROUTE_HEADER_VALUE = /^[\x20-\x7e]{0,1024}$/;
56
+ async function readBounded(response, maximum) {
57
+ if (!response.body)
58
+ return undefined;
59
+ const reader = response.body.getReader();
60
+ const chunks = [];
61
+ let size = 0;
62
+ try {
63
+ for (;;) {
64
+ const part = await reader.read();
65
+ if (part.done)
66
+ break;
67
+ size += part.value.byteLength;
68
+ if (size > maximum)
69
+ throw new HostedCarrierError("unavailable", { cause: new HostedAnswerTooLarge(maximum) });
70
+ chunks.push(part.value);
71
+ }
72
+ }
73
+ finally {
74
+ void reader.cancel().catch(() => { });
75
+ }
76
+ if (size === 0)
77
+ return undefined;
78
+ const bytes = new Uint8Array(size);
79
+ let offset = 0;
80
+ for (const chunk of chunks) {
81
+ bytes.set(chunk, offset);
82
+ offset += chunk.byteLength;
83
+ }
84
+ try {
85
+ return JSON.parse(new TextDecoder("utf-8", { fatal: true, ignoreBOM: false }).decode(bytes));
86
+ }
87
+ catch (cause) {
88
+ throw new HostedCarrierError("unavailable", { cause });
89
+ }
90
+ }
91
+ /** Restart `deadlineMs` at every chunk, so a slow but live stream is not cut and a stalled one is. */
92
+ function idleBounded(body, deadlineMs, abort) {
93
+ let timer;
94
+ const arm = () => {
95
+ clearTimeout(timer);
96
+ timer = setTimeout(abort, deadlineMs);
97
+ };
98
+ arm();
99
+ return body.pipeThrough(new TransformStream({
100
+ transform(chunk, controller) {
101
+ arm();
102
+ controller.enqueue(chunk);
103
+ },
104
+ flush() {
105
+ clearTimeout(timer);
106
+ },
107
+ // A consumer that stops reading, or a body that fails, never reaches flush; a live timer
108
+ // would hold the process open for the rest of the deadline.
109
+ cancel() {
110
+ clearTimeout(timer);
111
+ },
112
+ }));
113
+ }
114
+ /** A request's headers: its own fields, then the credential and the content headers, which always win. */
115
+ function requestHeaders(credentials, extra, type) {
116
+ const headers = new Headers(extra);
117
+ for (const [name, value] of Object.entries(credentials))
118
+ headers.set(name, value);
119
+ headers.set("Content-Type", type);
120
+ headers.set("Accept", "application/json");
121
+ return headers;
122
+ }
123
+ /**
124
+ * A carrier over `fetch` with caller-supplied credential headers: the shape the CLI's bearer
125
+ * carrier takes. Requests are `POST` with a JSON body (or, through `bytes`, a raw one), never follow
126
+ * redirects, and are refused before sending when the identity, binding or a route header is
127
+ * malformed.
128
+ */
129
+ export function createFetchCarrier(options) {
130
+ const fetcher = options.fetch ?? fetch;
131
+ const deadlineMs = options.deadlineMs ?? 15_000;
132
+ const bindingHeader = options.bindingHeader ?? "X-Superbee-Checkout";
133
+ const base = new URL(options.baseUrl);
134
+ async function send(path, body, signal, extra, deadline) {
135
+ if (!path.startsWith("/"))
136
+ throw new TypeError(`hosted route '${path}' must be absolute`);
137
+ let credentials;
138
+ try {
139
+ credentials = await options.credentials(signal);
140
+ }
141
+ catch (cause) {
142
+ throw new HostedCarrierError("denied", { cause });
143
+ }
144
+ if (signal.aborted)
145
+ throw new HostedCarrierError("denied");
146
+ // A credential header `fetch` cannot carry is no credential: nothing is sent.
147
+ let headers;
148
+ try {
149
+ headers = requestHeaders(credentials, extra, body.type);
150
+ }
151
+ catch (cause) {
152
+ throw new HostedCarrierError("denied", { cause });
153
+ }
154
+ try {
155
+ return await fetcher(new URL(path, base), {
156
+ method: "POST",
157
+ redirect: "error",
158
+ headers,
159
+ body: body.content,
160
+ signal: AbortSignal.any([signal, deadline]),
161
+ });
162
+ }
163
+ catch (cause) {
164
+ throw new HostedCarrierError("unavailable", { cause });
165
+ }
166
+ }
167
+ const jsonBody = (input) => ({ type: "application/json", content: JSON.stringify(input) });
168
+ // Headers the carrier sets itself, which a route's own fields never name.
169
+ const owned = new Set(["x-superbee-write-request", bindingHeader.toLowerCase(), RECREATE_HEADER.toLowerCase(), VIA_HEADER.toLowerCase(), ACCEPT_DELETES_HEADER.toLowerCase(), WORKSPACE_HEADER.toLowerCase()]);
170
+ /**
171
+ * The headers the carrier owns for one request, each refused before sending when malformed. The
172
+ * one place a JSON and a raw request derive their identity, binding, `recreate`, `via` and
173
+ * deletion acknowledgment headers.
174
+ */
175
+ function carrierHeaders(request) {
176
+ if (request.writeRequest !== undefined && !isWriteRequestId(request.writeRequest))
177
+ throw new HostedCarrierError("denied");
178
+ if (request.binding !== undefined && !isWriteBinding(request.binding))
179
+ throw new HostedCarrierError("denied");
180
+ if (request.recreate !== undefined && !isWriteBinding(request.recreate))
181
+ throw new HostedCarrierError("denied");
182
+ if (request.via !== undefined && !isAgentLabelVia(request.via))
183
+ throw new HostedCarrierError("denied");
184
+ if (request.acceptDeletes !== undefined && !isAcceptedDeletionCount(request.acceptDeletes))
185
+ throw new HostedCarrierError("denied");
186
+ if (request.workspace !== undefined && !isWorkspaceTenantId(request.workspace))
187
+ throw new HostedCarrierError("denied");
188
+ const headers = {};
189
+ if (request.writeRequest !== undefined)
190
+ headers["X-Superbee-Write-Request"] = request.writeRequest;
191
+ if (request.binding !== undefined)
192
+ headers[bindingHeader] = request.binding;
193
+ if (request.recreate !== undefined)
194
+ headers[RECREATE_HEADER] = request.recreate;
195
+ if (request.via !== undefined)
196
+ headers[VIA_HEADER] = request.via;
197
+ if (request.acceptDeletes !== undefined)
198
+ headers[ACCEPT_DELETES_HEADER] = String(request.acceptDeletes);
199
+ if (request.workspace !== undefined)
200
+ headers[WORKSPACE_HEADER] = request.workspace;
201
+ return headers;
202
+ }
203
+ async function answer(path, body, signal, extra, maximum) {
204
+ // An answer is always read within a bound: an unset or nonsensical maximum refuses before sending.
205
+ if (!Number.isSafeInteger(maximum) || maximum <= 0)
206
+ throw new HostedCarrierError("denied");
207
+ const deadline = AbortSignal.timeout(deadlineMs);
208
+ const response = await send(path, body, signal, extra, deadline);
209
+ let read;
210
+ try {
211
+ read = await readBounded(response, maximum);
212
+ }
213
+ catch (error) {
214
+ // A refusal's envelope is best effort: its status already decides, and an unreadable
215
+ // body must never read as "not applied".
216
+ if (response.ok)
217
+ throw error instanceof HostedCarrierError ? error : new HostedCarrierError("unavailable", { cause: error });
218
+ read = undefined;
219
+ }
220
+ return { status: response.status, headers: response.headers, body: read };
221
+ }
222
+ return {
223
+ async json(path, input, signal, request) {
224
+ return answer(path, jsonBody(input), signal, carrierHeaders(request), request.maximum);
225
+ },
226
+ async bytes(path, body, signal, request) {
227
+ if (!(body instanceof Uint8Array))
228
+ throw new HostedCarrierError("denied");
229
+ // Named, not spread: a raw request carries no `recreate` or deletion acknowledgment.
230
+ const own = carrierHeaders({ writeRequest: request.writeRequest, binding: request.binding, via: request.via });
231
+ const extra = {};
232
+ for (const [name, value] of Object.entries(request.headers ?? {})) {
233
+ const lower = name.toLowerCase();
234
+ if (!ROUTE_HEADER.test(lower) || owned.has(lower) || lower in extra || typeof value !== "string" || !ROUTE_HEADER_VALUE.test(value))
235
+ throw new HostedCarrierError("denied");
236
+ extra[lower] = value;
237
+ }
238
+ Object.assign(extra, own);
239
+ // The body is sent as given; `fetch` derives its exact Content-Length from the bytes.
240
+ return answer(path, { type: "application/octet-stream", content: body }, signal, extra, request.maximum);
241
+ },
242
+ async stream(path, input, signal) {
243
+ const idle = new AbortController();
244
+ const firstByte = setTimeout(() => idle.abort(), deadlineMs);
245
+ let response;
246
+ try {
247
+ response = await send(path, jsonBody(input), signal, {}, idle.signal);
248
+ }
249
+ finally {
250
+ clearTimeout(firstByte);
251
+ }
252
+ if (!response.ok || !response.body) {
253
+ const body = await readBounded(response, 64 * 1024).catch(() => undefined);
254
+ return { status: response.status, headers: response.headers, ok: false, body };
255
+ }
256
+ return { status: response.status, headers: response.headers, ok: true, body: idleBounded(response.body, deadlineMs, () => idle.abort()) };
257
+ },
258
+ };
259
+ }
260
+ //# sourceMappingURL=carrier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carrier.js","sourceRoot":"","sources":["../../src/hosted-transport/carrier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { StorageBackend } from "../types.js";
2
+ import { type OperationIntent, type Outcome } from "../uncertain-write.js";
3
+ import { VersionConflict } from "../version-transport.js";
4
+ import type { HostedCarrier } from "./carrier.js";
5
+ import type { HostedReadAdapter } from "./read-adapter.js";
6
+ import { type WholeDocumentRoutes } from "./whole-document-transport.js";
7
+ /** Authority and interpretation pinned by the host before constructing this backend. */
8
+ export interface HostedDocumentScope {
9
+ readonly tenant: string;
10
+ readonly bundleId: string;
11
+ readonly registration: string;
12
+ readonly binding: string;
13
+ readonly workspace: string | null;
14
+ readonly okfVersion: "0.1" | "0.2";
15
+ readonly mode: "write";
16
+ readonly bodyPolicy: "protected";
17
+ readonly tombstonePolicy: "refuse";
18
+ }
19
+ export interface HostedDocumentIntent {
20
+ readonly scope: Readonly<HostedDocumentScope>;
21
+ readonly intent: Readonly<OperationIntent>;
22
+ /** Advisory input only; the carrier and host determine persisted attribution. */
23
+ readonly advisoryActor: string | null;
24
+ /** Binds immutable scope, content, premise, identity and original creation instant. */
25
+ readonly digest: string;
26
+ readonly outcome?: Readonly<Outcome>;
27
+ }
28
+ /**
29
+ * Trusted persistence, outside the bundle. All methods are atomic and durable before resolving.
30
+ * prepareOrReadAndClaim inserts a new descriptor with in_flight/attempts=1 and returns fresh=true
31
+ * to exactly one caller. An existing row, even pending or in_flight, ALWAYS returns fresh=false.
32
+ * A failed/uncertain acknowledgement grants no freshness. Never overwrite a different descriptor
33
+ * under an identity. settle compares the immutable digest, preserves the descriptor, and must not
34
+ * overwrite a definitive outcome; contradictory settlement must refuse. A refused outcome with
35
+ * executed:"unknown" is unresolved attempt evidence, including in previously stored records.
36
+ * Retain descriptor and outcome through the consumer's acceptance acknowledgement.
37
+ */
38
+ export interface HostedDocumentIntentPort {
39
+ prepareOrReadAndClaim(candidate: HostedDocumentIntent): Promise<{
40
+ record: HostedDocumentIntent;
41
+ fresh: boolean;
42
+ }>;
43
+ settle(record: HostedDocumentIntent, outcome: Outcome): Promise<void>;
44
+ }
45
+ export declare class HostedDocumentBackendError extends Error {
46
+ readonly name = "HostedDocumentBackendError";
47
+ readonly code: string;
48
+ readonly requestId?: string;
49
+ readonly record?: HostedDocumentIntent;
50
+ constructor(code: string, message: string, requestId?: string, record?: HostedDocumentIntent, options?: ErrorOptions);
51
+ }
52
+ /** CAS conflict retaining the original identity and tombstone receipt for its consumer. */
53
+ export declare class HostedDocumentVersionConflict extends VersionConflict {
54
+ readonly requestId: string;
55
+ readonly record: HostedDocumentIntent;
56
+ constructor(record: HostedDocumentIntent);
57
+ }
58
+ export interface HostedDocumentBackendOptions {
59
+ readonly reader: HostedReadAdapter;
60
+ readonly carrier: HostedCarrier;
61
+ readonly scope: HostedDocumentScope;
62
+ readonly intents: HostedDocumentIntentPort;
63
+ readonly maximumDocuments: number;
64
+ readonly routes?: WholeDocumentRoutes;
65
+ readonly now?: () => number;
66
+ }
67
+ /**
68
+ * No auth authority or general wire routes are supplied here. An actor option is validated as
69
+ * advisory only; agent/bodyReplace
70
+ * options are refused: the host attributes normal writes and retains its body protection policy.
71
+ * Every reopened descriptor is lookup-only; absent or expired receipts never authorize a resend.
72
+ */
73
+ export declare function createHostedDocumentBackend(options: HostedDocumentBackendOptions): StorageBackend;
74
+ //# sourceMappingURL=document-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-backend.d.ts","sourceRoot":"","sources":["../../src/hosted-transport/document-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ /** A finite document StorageBackend over hosted's existing read and write grammars. */
2
+ import { isOkfActor } from "../okf-actor.js";
3
+ import { stringifyDoc } from "../frontmatter.js";
4
+ import { assertSafeConceptId, isReservedFile, pathFromConceptId } from "../paths.js";
5
+ import { sha256HexOfUtf8 } from "../sha256.js";
6
+ import { performUncertainWrite } from "../uncertain-write.js";
7
+ import { isContentVersion, VersionConflict } from "../version-transport.js";
8
+ import { isWriteBinding, isWriteRequestId } from "../write-identity.js";
9
+ import { createWholeDocumentTransport, wholeDocumentRequest } from "./whole-document-transport.js";
10
+ export class HostedDocumentBackendError extends Error {
11
+ name = "HostedDocumentBackendError";
12
+ code;
13
+ requestId;
14
+ record;
15
+ constructor(code, message, requestId, record, options) {
16
+ super(message, options);
17
+ this.code = code;
18
+ this.requestId = requestId;
19
+ this.record = record;
20
+ }
21
+ }
22
+ /** CAS conflict retaining the original identity and tombstone receipt for its consumer. */
23
+ export class HostedDocumentVersionConflict extends VersionConflict {
24
+ requestId;
25
+ record;
26
+ constructor(record) {
27
+ const outcome = record.outcome;
28
+ if (outcome?.kind !== "conflict")
29
+ throw new TypeError("A recorded conflict is required.");
30
+ super(record.intent.target, record.intent.base, outcome.actual);
31
+ this.requestId = record.intent.requestId;
32
+ this.record = record;
33
+ }
34
+ }
35
+ function immutable(record) {
36
+ const { intent: i, scope: s } = record;
37
+ return JSON.stringify([s.tenant, s.bundleId, s.registration, s.binding, s.workspace, s.okfVersion, s.mode, s.bodyPolicy, s.tombstonePolicy,
38
+ record.advisoryActor, i.requestId, i.kind, i.target, i.base, i.local, i.content, i.createdAt]);
39
+ }
40
+ function capture(record) {
41
+ return Object.freeze({ scope: Object.freeze({ ...record.scope }), intent: Object.freeze({ ...record.intent }), advisoryActor: record.advisoryActor, digest: record.digest,
42
+ ...(record.outcome === undefined ? {} : { outcome: Object.freeze({ ...record.outcome }) }) });
43
+ }
44
+ function sameInput(a, b) {
45
+ return a.scope.workspace === b.scope.workspace && a.intent.base === b.intent.base && a.advisoryActor === b.advisoryActor &&
46
+ immutable({ ...a, intent: { ...a.intent, createdAt: b.intent.createdAt } }) === immutable(b);
47
+ }
48
+ function refuse() { throw new HostedDocumentBackendError("unsupported", "This backend supports only finite document reads and conditional document writes."); }
49
+ async function unsupported() { return refuse(); }
50
+ /** The shared Outcome contract marks this as attempt evidence, never an identity verdict. */
51
+ function identityOutcome(outcome) {
52
+ return outcome.kind === "refused" && outcome.executed === "unknown"
53
+ ? { kind: "unknown", refusal: { code: outcome.code, message: outcome.message } }
54
+ : outcome;
55
+ }
56
+ /**
57
+ * No auth authority or general wire routes are supplied here. An actor option is validated as
58
+ * advisory only; agent/bodyReplace
59
+ * options are refused: the host attributes normal writes and retains its body protection policy.
60
+ * Every reopened descriptor is lookup-only; absent or expired receipts never authorize a resend.
61
+ */
62
+ export function createHostedDocumentBackend(options) {
63
+ const { reader, carrier, intents } = options;
64
+ const scope = Object.freeze({ ...options.scope });
65
+ if (![scope.tenant, scope.bundleId, scope.registration].every((v) => typeof v === "string" && v.length > 0) ||
66
+ !isWriteBinding(scope.binding) || !(scope.workspace === null || typeof scope.workspace === "string" && scope.workspace.length > 0) ||
67
+ !["0.1", "0.2"].includes(scope.okfVersion) || scope.mode !== "write" || scope.bodyPolicy !== "protected" || scope.tombstonePolicy !== "refuse")
68
+ throw new TypeError("Invalid hosted document scope.");
69
+ const maximumDocuments = options.maximumDocuments;
70
+ if (!Number.isSafeInteger(maximumDocuments) || maximumDocuments < 1)
71
+ throw new TypeError("maximumDocuments must be a positive integer.");
72
+ const now = options.now ?? Date.now;
73
+ const routes = options.routes === undefined ? undefined : Object.freeze({ ...options.routes });
74
+ return {
75
+ read: (id) => reader.read(id),
76
+ readMany: (ids) => reader.readMany(ids),
77
+ readReserved: (dir, name) => reader.readReserved(dir, name),
78
+ async exists(id) {
79
+ try {
80
+ await reader.read(id);
81
+ return true;
82
+ }
83
+ catch (error) {
84
+ if (error?.code === "ENOENT")
85
+ return false;
86
+ throw error;
87
+ }
88
+ },
89
+ async list(prefix) {
90
+ const result = await reader.heads();
91
+ if (result === null)
92
+ throw new HostedDocumentBackendError("inventory_incomplete", "A complete document inventory is required.");
93
+ if (result.heads.length > maximumDocuments)
94
+ throw new HostedDocumentBackendError("inventory_bound", "Document inventory exceeds the configured bound.");
95
+ return result.heads.map((head) => head.id).filter((id) => prefix === undefined || id.startsWith(prefix));
96
+ },
97
+ async write(id, doc, writeOptions) {
98
+ assertSafeConceptId(id);
99
+ if (isReservedFile(pathFromConceptId(id)))
100
+ refuse();
101
+ if (!writeOptions || typeof writeOptions.requestId !== "string" || !isWriteRequestId(writeOptions.requestId) ||
102
+ !(writeOptions.expectedVersion === null || isContentVersion(writeOptions.expectedVersion)))
103
+ throw new HostedDocumentBackendError("invalid_input", "A UUIDv4 requestId and explicit create/replace CAS are required.");
104
+ if (writeOptions.actor !== undefined && !isOkfActor(writeOptions.actor))
105
+ throw new HostedDocumentBackendError("invalid_input", "actor must be an OKF actor; persisted attribution belongs to the host.");
106
+ if (Object.entries(writeOptions).some(([key, value]) => value !== undefined && !["requestId", "expectedVersion", "actor"].includes(key)))
107
+ refuse();
108
+ const requestId = writeOptions.requestId;
109
+ const content = stringifyDoc(doc.frontmatter, doc.body);
110
+ const intent = { requestId, kind: "document.write", target: id, base: writeOptions.expectedVersion,
111
+ local: `sha256:${sha256HexOfUtf8(content)}`, content, createdAt: new Date(now()).toISOString(), attempts: 1, state: "in_flight" };
112
+ // Preflight uses the same semantic owner as the actual transport, before persistence.
113
+ wholeDocumentRequest(scope.bundleId, intent, scope.okfVersion);
114
+ const initial = { scope, intent, advisoryActor: writeOptions.actor ?? null, digest: "" };
115
+ const candidate = capture({ ...initial, digest: sha256HexOfUtf8(immutable(initial)) });
116
+ let record;
117
+ let fresh;
118
+ try {
119
+ const prepared = await intents.prepareOrReadAndClaim(candidate);
120
+ record = capture(prepared.record);
121
+ fresh = prepared.fresh;
122
+ }
123
+ catch (cause) {
124
+ throw new HostedDocumentBackendError("outcome_unknown", "Intent claim acknowledgement is uncertain; retain the original identity.", requestId, undefined, { cause });
125
+ }
126
+ if (!sameInput(record, candidate) || record.digest !== sha256HexOfUtf8(immutable(record)) ||
127
+ record.intent.local !== `sha256:${sha256HexOfUtf8(record.intent.content)}` || record.intent.bodyReplace !== undefined || record.intent.recreates !== undefined ||
128
+ !Number.isFinite(Date.parse(record.intent.createdAt)) || typeof fresh !== "boolean" ||
129
+ !Number.isSafeInteger(record.intent.attempts) || record.intent.attempts < 0 ||
130
+ !["pending", "in_flight", "acknowledged", "conflict", "refused", "unknown"].includes(record.intent.state) ||
131
+ fresh && (record.digest !== candidate.digest || record.intent.attempts !== 1 || record.intent.state !== "in_flight" || record.outcome !== undefined))
132
+ throw new HostedDocumentBackendError("intent_conflict", "Stored identity does not match the immutable write and scope.", requestId);
133
+ const transport = createWholeDocumentTransport({ carrier, bundleId: scope.bundleId, binding: scope.binding, okfVersion: scope.okfVersion,
134
+ remote: reader, intentFor: async (key) => key === requestId ? { ...record.intent } : undefined, routes, signal: reader.signal, now });
135
+ const storedOutcome = record.outcome === undefined ? undefined : identityOutcome(record.outcome);
136
+ const result = storedOutcome && storedOutcome.kind !== "unknown" ? { outcome: storedOutcome } :
137
+ await performUncertainWrite({ submit: async (sending, opts) => identityOutcome(await transport.submit(sending, opts)), lookup: async (key) => {
138
+ const answer = await transport.lookup(key);
139
+ return answer === null || answer.kind === "pending" ? null : identityOutcome(answer);
140
+ } }, { ...record.intent }, { settlement: "recorded-only", start: fresh ? "submit-claimed" : "lookup", signal: reader.signal });
141
+ const outcome = result.outcome;
142
+ try {
143
+ await intents.settle(record, outcome);
144
+ }
145
+ catch (cause) {
146
+ throw new HostedDocumentBackendError("outcome_unknown", "Outcome persistence is uncertain; retain the original identity.", requestId, capture({ ...record, outcome }), { cause });
147
+ }
148
+ switch (outcome.kind) {
149
+ case "committed": return outcome.version;
150
+ case "conflict": throw new HostedDocumentVersionConflict(capture({ ...record, outcome }));
151
+ case "refused": throw new HostedDocumentBackendError(outcome.code, outcome.message, requestId, capture({ ...record, outcome }));
152
+ case "unknown": throw new HostedDocumentBackendError("outcome_unknown", "The original write outcome remains unknown.", requestId, capture({ ...record, outcome }));
153
+ }
154
+ },
155
+ capabilities: () => ({ enforced_cas: true, history: false, blobs: false }),
156
+ versions: unsupported, writeReserved: unsupported, delete: unsupported, readBlob: unsupported, writeBlob: unsupported,
157
+ existsBlob: unsupported, listBlobs: unsupported, deleteBlob: unsupported,
158
+ };
159
+ }
160
+ //# sourceMappingURL=document-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-backend.js","sourceRoot":"","sources":["../../src/hosted-transport/document-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Paging back through one document's hosted history (`documents.history.v1`). The host serves a
3
+ * lineage newest first, a page at a time: the first page (no `before`) states the lineage's
4
+ * `total`, and each later page lists the versions older than the last one read. Older versions
5
+ * never change, so a write that only appends to the lineage while the pages are read leaves the
6
+ * listing a true picture of the lineage as the first page saw it.
7
+ *
8
+ * What does break a listing is a new lineage: the document deleted (and perhaps recreated, its
9
+ * `seq` restarting at 1) between two pages. A later page that answers `document_not_found` says
10
+ * so directly; otherwise, after a listing of more than one page, the first page's newest version
11
+ * is read again by its `seq`, and a listing whose newest version is gone or different starts
12
+ * again from the first page, after {@link pageRestartDelay}, at most {@link HEADS_PAGE_ATTEMPTS}
13
+ * times in all. Pages from two lineages are never assembled into one listing.
14
+ */
15
+ import { type HostedHistoryAnswer, type HostedHistoryRequest, type HostedHistoryVersion, type HostedOperationRefusal } from "./read-adapter.js";
16
+ /** Reads one page of a document's history (a client's bounded history read). */
17
+ export type HistoryPageReader = (request: HostedHistoryRequest) => Promise<HostedHistoryAnswer>;
18
+ export interface HistoryListingRequest {
19
+ readonly documentId: string;
20
+ /** The newest this many versions, or fewer when the lineage is shorter. */
21
+ readonly wanted: number;
22
+ /** Ask each page for its versions' stored bytes (a page's content shares the host's 1 MiB bound). */
23
+ readonly includeContent?: boolean;
24
+ /** Versions per request, 1..{@link HISTORY_PAGE_LIMIT} (default: the limit). */
25
+ readonly pageSize?: number;
26
+ }
27
+ export type HistoryListing =
28
+ /** Newest first; `total` is the lineage's length as the first page stated it. */
29
+ {
30
+ readonly status: "listed";
31
+ readonly versions: readonly HostedHistoryVersion[];
32
+ readonly total: number;
33
+ }
34
+ /** The first page answered `document_not_found`: the host has no such document. */
35
+ | {
36
+ readonly status: "absent";
37
+ }
38
+ /** The host refused a page for another reason; the caller maps it. */
39
+ | {
40
+ readonly status: "refused";
41
+ readonly refusal: HostedOperationRefusal;
42
+ }
43
+ /** The lineage changed under every attempt. */
44
+ | {
45
+ readonly status: "moved";
46
+ };
47
+ export interface HistoryListingOptions {
48
+ readonly signal: AbortSignal;
49
+ /** Test seam: how the listing waits before starting again. */
50
+ readonly sleep?: (ms: number, signal: AbortSignal) => Promise<void>;
51
+ readonly attempts?: number;
52
+ }
53
+ /** The newest `wanted` versions of one lineage, paged back with `before`. */
54
+ export declare function readHistoryListing(readPage: HistoryPageReader, request: HistoryListingRequest, options: HistoryListingOptions): Promise<HistoryListing>;
55
+ //# sourceMappingURL=history-pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-pages.d.ts","sourceRoot":"","sources":["../../src/hosted-transport/history-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAsB,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEpK,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAEhG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qGAAqG;IACrG,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc;AACxB,iFAAiF;AAC/E;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAC3G,mFAAmF;GACjF;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;CAAE;AAC/B,sEAAsE;GACpE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE;AAC1E,+CAA+C;GAC7C;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAsCD,6EAA6E;AAC7E,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAQ7J"}