@superbee/core 0.2.0-pre.3 → 0.2.0-pre.30

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 (534) hide show
  1. package/README.md +1082 -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 +19 -1
  7. package/dist/backend.d.ts.map +1 -1
  8. package/dist/backend.js +83 -36
  9. package/dist/backend.js.map +1 -1
  10. package/dist/blob-contract.d.ts +80 -0
  11. package/dist/blob-contract.d.ts.map +1 -0
  12. package/dist/blob-contract.js +131 -0
  13. package/dist/blob-contract.js.map +1 -0
  14. package/dist/blob-journal.d.ts +302 -0
  15. package/dist/blob-journal.d.ts.map +1 -0
  16. package/dist/blob-journal.js +540 -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 +202 -0
  43. package/dist/bundle-health/report.d.ts.map +1 -0
  44. package/dist/bundle-health/report.js +438 -0
  45. package/dist/bundle-health/report.js.map +1 -0
  46. package/dist/bundle-ops.d.ts +1 -1
  47. package/dist/bundle-ops.d.ts.map +1 -1
  48. package/dist/bundle-ops.js +2 -2
  49. package/dist/bundle-ops.js.map +1 -1
  50. package/dist/bundle.d.ts +2 -1
  51. package/dist/bundle.d.ts.map +1 -1
  52. package/dist/bundle.js +3 -3
  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/connector-request.d.ts +87 -0
  59. package/dist/connector-request.d.ts.map +1 -0
  60. package/dist/connector-request.js +370 -0
  61. package/dist/connector-request.js.map +1 -0
  62. package/dist/connectors.d.ts +262 -0
  63. package/dist/connectors.d.ts.map +1 -0
  64. package/dist/connectors.js +1179 -0
  65. package/dist/connectors.js.map +1 -0
  66. package/dist/cross-bundle.d.ts +135 -0
  67. package/dist/cross-bundle.d.ts.map +1 -0
  68. package/dist/cross-bundle.js +186 -0
  69. package/dist/cross-bundle.js.map +1 -0
  70. package/dist/dependencies.d.ts +94 -0
  71. package/dist/dependencies.d.ts.map +1 -0
  72. package/dist/dependencies.js +180 -0
  73. package/dist/dependencies.js.map +1 -0
  74. package/dist/document-codec.d.ts +5 -1
  75. package/dist/document-codec.d.ts.map +1 -1
  76. package/dist/document-codec.js +7 -4
  77. package/dist/document-codec.js.map +1 -1
  78. package/dist/document-field-actions.d.ts +31 -1
  79. package/dist/document-field-actions.d.ts.map +1 -1
  80. package/dist/document-field-actions.js +137 -34
  81. package/dist/document-field-actions.js.map +1 -1
  82. package/dist/document-mutation.d.ts +22 -10
  83. package/dist/document-mutation.d.ts.map +1 -1
  84. package/dist/document-mutation.js +61 -27
  85. package/dist/document-mutation.js.map +1 -1
  86. package/dist/document-write-policy.d.ts.map +1 -1
  87. package/dist/document-write-policy.js +4 -2
  88. package/dist/document-write-policy.js.map +1 -1
  89. package/dist/domain-model.d.ts +73 -0
  90. package/dist/domain-model.d.ts.map +1 -0
  91. package/dist/domain-model.js +169 -0
  92. package/dist/domain-model.js.map +1 -0
  93. package/dist/engine.d.ts +16 -8
  94. package/dist/engine.d.ts.map +1 -1
  95. package/dist/engine.js +42 -4
  96. package/dist/engine.js.map +1 -1
  97. package/dist/file-journaled-backend-internal.d.ts +21 -0
  98. package/dist/file-journaled-backend-internal.d.ts.map +1 -0
  99. package/dist/file-journaled-backend-internal.js +12 -0
  100. package/dist/file-journaled-backend-internal.js.map +1 -0
  101. package/dist/file-journaled-backend.d.ts +160 -0
  102. package/dist/file-journaled-backend.d.ts.map +1 -0
  103. package/dist/file-journaled-backend.js +1345 -0
  104. package/dist/file-journaled-backend.js.map +1 -0
  105. package/dist/filesystem-host.d.ts +15 -0
  106. package/dist/filesystem-host.d.ts.map +1 -0
  107. package/dist/filesystem-host.js +20 -0
  108. package/dist/filesystem-host.js.map +1 -0
  109. package/dist/filesystem-identity.d.ts +86 -4
  110. package/dist/filesystem-identity.d.ts.map +1 -1
  111. package/dist/filesystem-identity.js +338 -102
  112. package/dist/filesystem-identity.js.map +1 -1
  113. package/dist/filesystem-lock.d.ts +16 -3
  114. package/dist/filesystem-lock.d.ts.map +1 -1
  115. package/dist/filesystem-lock.js +323 -77
  116. package/dist/filesystem-lock.js.map +1 -1
  117. package/dist/filesystem-push-role.d.ts +77 -0
  118. package/dist/filesystem-push-role.d.ts.map +1 -0
  119. package/dist/filesystem-push-role.js +165 -0
  120. package/dist/filesystem-push-role.js.map +1 -0
  121. package/dist/filesystem.d.ts +17 -0
  122. package/dist/filesystem.d.ts.map +1 -0
  123. package/dist/filesystem.js +18 -0
  124. package/dist/filesystem.js.map +1 -0
  125. package/dist/governed-body-write.d.ts +106 -0
  126. package/dist/governed-body-write.d.ts.map +1 -0
  127. package/dist/governed-body-write.js +251 -0
  128. package/dist/governed-body-write.js.map +1 -0
  129. package/dist/host-policy-snapshot.d.ts +9 -0
  130. package/dist/host-policy-snapshot.d.ts.map +1 -0
  131. package/dist/host-policy-snapshot.js +33 -0
  132. package/dist/host-policy-snapshot.js.map +1 -0
  133. package/dist/host-text.d.ts +31 -0
  134. package/dist/host-text.d.ts.map +1 -0
  135. package/dist/host-text.js +77 -0
  136. package/dist/host-text.js.map +1 -0
  137. package/dist/hosted-client/binding.d.ts +7 -0
  138. package/dist/hosted-client/binding.d.ts.map +1 -0
  139. package/dist/hosted-client/binding.js +10 -0
  140. package/dist/hosted-client/binding.js.map +1 -0
  141. package/dist/hosted-client/blob-delivery.d.ts +67 -0
  142. package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
  143. package/dist/hosted-client/blob-delivery.js +169 -0
  144. package/dist/hosted-client/blob-delivery.js.map +1 -0
  145. package/dist/hosted-client/blob-write.d.ts +386 -0
  146. package/dist/hosted-client/blob-write.d.ts.map +1 -0
  147. package/dist/hosted-client/blob-write.js +770 -0
  148. package/dist/hosted-client/blob-write.js.map +1 -0
  149. package/dist/hosted-client/bundle-listing.d.ts +46 -0
  150. package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
  151. package/dist/hosted-client/bundle-listing.js +36 -0
  152. package/dist/hosted-client/bundle-listing.js.map +1 -0
  153. package/dist/hosted-client/client.d.ts +219 -0
  154. package/dist/hosted-client/client.d.ts.map +1 -0
  155. package/dist/hosted-client/client.js +309 -0
  156. package/dist/hosted-client/client.js.map +1 -0
  157. package/dist/hosted-client/directory.d.ts +46 -0
  158. package/dist/hosted-client/directory.d.ts.map +1 -0
  159. package/dist/hosted-client/directory.js +74 -0
  160. package/dist/hosted-client/directory.js.map +1 -0
  161. package/dist/hosted-client/errors.d.ts +26 -0
  162. package/dist/hosted-client/errors.d.ts.map +1 -0
  163. package/dist/hosted-client/errors.js +35 -0
  164. package/dist/hosted-client/errors.js.map +1 -0
  165. package/dist/hosted-client/inbox.d.ts +320 -0
  166. package/dist/hosted-client/inbox.d.ts.map +1 -0
  167. package/dist/hosted-client/inbox.js +379 -0
  168. package/dist/hosted-client/inbox.js.map +1 -0
  169. package/dist/hosted-client/index.d.ts +30 -0
  170. package/dist/hosted-client/index.d.ts.map +1 -0
  171. package/dist/hosted-client/index.js +32 -0
  172. package/dist/hosted-client/index.js.map +1 -0
  173. package/dist/hosted-client/journal.d.ts +103 -0
  174. package/dist/hosted-client/journal.d.ts.map +1 -0
  175. package/dist/hosted-client/journal.js +464 -0
  176. package/dist/hosted-client/journal.js.map +1 -0
  177. package/dist/hosted-client/node.d.ts +74 -0
  178. package/dist/hosted-client/node.d.ts.map +1 -0
  179. package/dist/hosted-client/node.js +219 -0
  180. package/dist/hosted-client/node.js.map +1 -0
  181. package/dist/hosted-client/reference.d.ts +12 -0
  182. package/dist/hosted-client/reference.d.ts.map +1 -0
  183. package/dist/hosted-client/reference.js +29 -0
  184. package/dist/hosted-client/reference.js.map +1 -0
  185. package/dist/hosted-client/write.d.ts +217 -0
  186. package/dist/hosted-client/write.d.ts.map +1 -0
  187. package/dist/hosted-client/write.js +418 -0
  188. package/dist/hosted-client/write.js.map +1 -0
  189. package/dist/hosted-transport/answer-rows.d.ts +243 -0
  190. package/dist/hosted-transport/answer-rows.d.ts.map +1 -0
  191. package/dist/hosted-transport/answer-rows.js +454 -0
  192. package/dist/hosted-transport/answer-rows.js.map +1 -0
  193. package/dist/hosted-transport/blob-reads.d.ts +35 -0
  194. package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
  195. package/dist/hosted-transport/blob-reads.js +179 -0
  196. package/dist/hosted-transport/blob-reads.js.map +1 -0
  197. package/dist/hosted-transport/blob-write.d.ts +34 -0
  198. package/dist/hosted-transport/blob-write.d.ts.map +1 -0
  199. package/dist/hosted-transport/blob-write.js +115 -0
  200. package/dist/hosted-transport/blob-write.js.map +1 -0
  201. package/dist/hosted-transport/carrier.d.ts +151 -0
  202. package/dist/hosted-transport/carrier.d.ts.map +1 -0
  203. package/dist/hosted-transport/carrier.js +260 -0
  204. package/dist/hosted-transport/carrier.js.map +1 -0
  205. package/dist/hosted-transport/history-pages.d.ts +55 -0
  206. package/dist/hosted-transport/history-pages.d.ts.map +1 -0
  207. package/dist/hosted-transport/history-pages.js +69 -0
  208. package/dist/hosted-transport/history-pages.js.map +1 -0
  209. package/dist/hosted-transport/index.d.ts +18 -0
  210. package/dist/hosted-transport/index.d.ts.map +1 -0
  211. package/dist/hosted-transport/index.js +18 -0
  212. package/dist/hosted-transport/index.js.map +1 -0
  213. package/dist/hosted-transport/operations.d.ts +85 -0
  214. package/dist/hosted-transport/operations.d.ts.map +1 -0
  215. package/dist/hosted-transport/operations.js +128 -0
  216. package/dist/hosted-transport/operations.js.map +1 -0
  217. package/dist/hosted-transport/paged-reads.d.ts +87 -0
  218. package/dist/hosted-transport/paged-reads.d.ts.map +1 -0
  219. package/dist/hosted-transport/paged-reads.js +238 -0
  220. package/dist/hosted-transport/paged-reads.js.map +1 -0
  221. package/dist/hosted-transport/read-adapter.d.ts +256 -0
  222. package/dist/hosted-transport/read-adapter.d.ts.map +1 -0
  223. package/dist/hosted-transport/read-adapter.js +568 -0
  224. package/dist/hosted-transport/read-adapter.js.map +1 -0
  225. package/dist/hosted-transport/root-write.d.ts +114 -0
  226. package/dist/hosted-transport/root-write.d.ts.map +1 -0
  227. package/dist/hosted-transport/root-write.js +171 -0
  228. package/dist/hosted-transport/root-write.js.map +1 -0
  229. package/dist/hosted-transport/whole-document-transport.d.ts +204 -0
  230. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -0
  231. package/dist/hosted-transport/whole-document-transport.js +447 -0
  232. package/dist/hosted-transport/whole-document-transport.js.map +1 -0
  233. package/dist/index.d.ts +34 -10
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +26 -8
  236. package/dist/index.js.map +1 -1
  237. package/dist/indexeddb-backend.d.ts +28 -37
  238. package/dist/indexeddb-backend.d.ts.map +1 -1
  239. package/dist/indexeddb-backend.js +467 -113
  240. package/dist/indexeddb-backend.js.map +1 -1
  241. package/dist/journaled-backend.d.ts +232 -15
  242. package/dist/journaled-backend.d.ts.map +1 -1
  243. package/dist/journaled-backend.js +254 -55
  244. package/dist/journaled-backend.js.map +1 -1
  245. package/dist/kind-authoring.d.ts +170 -0
  246. package/dist/kind-authoring.d.ts.map +1 -0
  247. package/dist/kind-authoring.js +451 -0
  248. package/dist/kind-authoring.js.map +1 -0
  249. package/dist/kind-conformance-error.d.ts +15 -0
  250. package/dist/kind-conformance-error.d.ts.map +1 -0
  251. package/dist/kind-conformance-error.js +20 -0
  252. package/dist/kind-conformance-error.js.map +1 -0
  253. package/dist/kind-coverage.d.ts +99 -0
  254. package/dist/kind-coverage.d.ts.map +1 -0
  255. package/dist/kind-coverage.js +186 -0
  256. package/dist/kind-coverage.js.map +1 -0
  257. package/dist/kind-field-mutation.d.ts +4 -0
  258. package/dist/kind-field-mutation.d.ts.map +1 -1
  259. package/dist/kind-field-mutation.js +28 -3
  260. package/dist/kind-field-mutation.js.map +1 -1
  261. package/dist/kinds-load.js +4 -4
  262. package/dist/kinds-load.js.map +1 -1
  263. package/dist/kinds.d.ts +65 -2
  264. package/dist/kinds.d.ts.map +1 -1
  265. package/dist/kinds.js +341 -21
  266. package/dist/kinds.js.map +1 -1
  267. package/dist/link-types.d.ts +26 -0
  268. package/dist/link-types.d.ts.map +1 -0
  269. package/dist/link-types.js +57 -0
  270. package/dist/link-types.js.map +1 -0
  271. package/dist/links.d.ts +21 -3
  272. package/dist/links.d.ts.map +1 -1
  273. package/dist/links.js +213 -14
  274. package/dist/links.js.map +1 -1
  275. package/dist/managed-document-metadata.d.ts +2 -0
  276. package/dist/managed-document-metadata.d.ts.map +1 -0
  277. package/dist/managed-document-metadata.js +9 -0
  278. package/dist/managed-document-metadata.js.map +1 -0
  279. package/dist/memory-backend.d.ts.map +1 -1
  280. package/dist/memory-backend.js +6 -2
  281. package/dist/memory-backend.js.map +1 -1
  282. package/dist/paths.d.ts +16 -0
  283. package/dist/paths.d.ts.map +1 -1
  284. package/dist/paths.js +25 -0
  285. package/dist/paths.js.map +1 -1
  286. package/dist/platform.d.ts +13 -2
  287. package/dist/platform.d.ts.map +1 -1
  288. package/dist/platform.js +16 -0
  289. package/dist/platform.js.map +1 -1
  290. package/dist/portable-export.d.ts +119 -0
  291. package/dist/portable-export.d.ts.map +1 -0
  292. package/dist/portable-export.js +501 -0
  293. package/dist/portable-export.js.map +1 -0
  294. package/dist/publication-filesystem.d.ts +1 -1
  295. package/dist/publication-filesystem.d.ts.map +1 -1
  296. package/dist/publication-filesystem.js +1 -1
  297. package/dist/publication-filesystem.js.map +1 -1
  298. package/dist/qualified-links.d.ts +67 -0
  299. package/dist/qualified-links.d.ts.map +1 -0
  300. package/dist/qualified-links.js +117 -0
  301. package/dist/qualified-links.js.map +1 -0
  302. package/dist/query-filter.d.ts +16 -2
  303. package/dist/query-filter.d.ts.map +1 -1
  304. package/dist/query-filter.js +40 -1
  305. package/dist/query-filter.js.map +1 -1
  306. package/dist/query-order.d.ts +22 -0
  307. package/dist/query-order.d.ts.map +1 -0
  308. package/dist/query-order.js +42 -0
  309. package/dist/query-order.js.map +1 -0
  310. package/dist/recipe-lifecycle/errors.d.ts +96 -0
  311. package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
  312. package/dist/recipe-lifecycle/errors.js +122 -0
  313. package/dist/recipe-lifecycle/errors.js.map +1 -0
  314. package/dist/recipe-lifecycle/evolution.d.ts +112 -0
  315. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
  316. package/dist/recipe-lifecycle/evolution.js +941 -0
  317. package/dist/recipe-lifecycle/evolution.js.map +1 -0
  318. package/dist/recipe-lifecycle/index.d.ts +30 -0
  319. package/dist/recipe-lifecycle/index.d.ts.map +1 -0
  320. package/dist/recipe-lifecycle/index.js +26 -0
  321. package/dist/recipe-lifecycle/index.js.map +1 -0
  322. package/dist/recipe-lifecycle/install.d.ts +155 -0
  323. package/dist/recipe-lifecycle/install.d.ts.map +1 -0
  324. package/dist/recipe-lifecycle/install.js +594 -0
  325. package/dist/recipe-lifecycle/install.js.map +1 -0
  326. package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
  327. package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
  328. package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
  329. package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
  330. package/dist/recipe-lifecycle/stamp.d.ts +151 -0
  331. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
  332. package/dist/recipe-lifecycle/stamp.js +364 -0
  333. package/dist/recipe-lifecycle/stamp.js.map +1 -0
  334. package/dist/recipes.d.ts +29 -1
  335. package/dist/recipes.d.ts.map +1 -1
  336. package/dist/recipes.js +137 -1
  337. package/dist/recipes.js.map +1 -1
  338. package/dist/record-overlay/apply.d.ts +43 -0
  339. package/dist/record-overlay/apply.d.ts.map +1 -0
  340. package/dist/record-overlay/apply.js +527 -0
  341. package/dist/record-overlay/apply.js.map +1 -0
  342. package/dist/record-overlay/canonical.d.ts +22 -0
  343. package/dist/record-overlay/canonical.d.ts.map +1 -0
  344. package/dist/record-overlay/canonical.js +47 -0
  345. package/dist/record-overlay/canonical.js.map +1 -0
  346. package/dist/record-overlay/digest.d.ts +4 -0
  347. package/dist/record-overlay/digest.d.ts.map +1 -0
  348. package/dist/record-overlay/digest.js +11 -0
  349. package/dist/record-overlay/digest.js.map +1 -0
  350. package/dist/record-overlay/errors.d.ts +44 -0
  351. package/dist/record-overlay/errors.d.ts.map +1 -0
  352. package/dist/record-overlay/errors.js +55 -0
  353. package/dist/record-overlay/errors.js.map +1 -0
  354. package/dist/record-overlay/findings.d.ts +5 -0
  355. package/dist/record-overlay/findings.d.ts.map +1 -0
  356. package/dist/record-overlay/findings.js +83 -0
  357. package/dist/record-overlay/findings.js.map +1 -0
  358. package/dist/record-overlay/index.d.ts +23 -0
  359. package/dist/record-overlay/index.d.ts.map +1 -0
  360. package/dist/record-overlay/index.js +21 -0
  361. package/dist/record-overlay/index.js.map +1 -0
  362. package/dist/record-overlay/plan.d.ts +12 -0
  363. package/dist/record-overlay/plan.d.ts.map +1 -0
  364. package/dist/record-overlay/plan.js +285 -0
  365. package/dist/record-overlay/plan.js.map +1 -0
  366. package/dist/record-overlay/policy.d.ts +69 -0
  367. package/dist/record-overlay/policy.d.ts.map +1 -0
  368. package/dist/record-overlay/policy.js +228 -0
  369. package/dist/record-overlay/policy.js.map +1 -0
  370. package/dist/record-overlay/redact.d.ts +3 -0
  371. package/dist/record-overlay/redact.d.ts.map +1 -0
  372. package/dist/record-overlay/redact.js +27 -0
  373. package/dist/record-overlay/redact.js.map +1 -0
  374. package/dist/record-overlay/signal-kind.d.ts +30 -0
  375. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  376. package/dist/record-overlay/signal-kind.js +38 -0
  377. package/dist/record-overlay/signal-kind.js.map +1 -0
  378. package/dist/record-overlay/signal-text.d.ts +45 -0
  379. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  380. package/dist/record-overlay/signal-text.js +116 -0
  381. package/dist/record-overlay/signal-text.js.map +1 -0
  382. package/dist/record-overlay/source-index.d.ts +19 -0
  383. package/dist/record-overlay/source-index.d.ts.map +1 -0
  384. package/dist/record-overlay/source-index.js +102 -0
  385. package/dist/record-overlay/source-index.js.map +1 -0
  386. package/dist/record-overlay/types.d.ts +291 -0
  387. package/dist/record-overlay/types.d.ts.map +1 -0
  388. package/dist/record-overlay/types.js +2 -0
  389. package/dist/record-overlay/types.js.map +1 -0
  390. package/dist/remote-backend.d.ts +67 -67
  391. package/dist/remote-backend.d.ts.map +1 -1
  392. package/dist/remote-backend.js +168 -201
  393. package/dist/remote-backend.js.map +1 -1
  394. package/dist/remote-document-codec.d.ts +2 -1
  395. package/dist/remote-document-codec.d.ts.map +1 -1
  396. package/dist/remote-document-codec.js +3 -2
  397. package/dist/remote-document-codec.js.map +1 -1
  398. package/dist/remote-error.d.ts +38 -0
  399. package/dist/remote-error.d.ts.map +1 -0
  400. package/dist/remote-error.js +59 -0
  401. package/dist/remote-error.js.map +1 -0
  402. package/dist/remote-operations.d.ts +0 -40
  403. package/dist/remote-operations.d.ts.map +1 -1
  404. package/dist/remote-operations.js +26 -6
  405. package/dist/remote-operations.js.map +1 -1
  406. package/dist/remote-parsers.d.ts +86 -0
  407. package/dist/remote-parsers.d.ts.map +1 -0
  408. package/dist/remote-parsers.js +181 -0
  409. package/dist/remote-parsers.js.map +1 -0
  410. package/dist/remote.d.ts +5 -2
  411. package/dist/remote.d.ts.map +1 -1
  412. package/dist/remote.js +5 -1
  413. package/dist/remote.js.map +1 -1
  414. package/dist/search/backend-source.d.ts +6 -0
  415. package/dist/search/backend-source.d.ts.map +1 -0
  416. package/dist/search/backend-source.js +33 -0
  417. package/dist/search/backend-source.js.map +1 -0
  418. package/dist/search/contract.d.ts +151 -0
  419. package/dist/search/contract.d.ts.map +1 -0
  420. package/dist/search/contract.js +78 -0
  421. package/dist/search/contract.js.map +1 -0
  422. package/dist/search/errors.d.ts +30 -0
  423. package/dist/search/errors.d.ts.map +1 -0
  424. package/dist/search/errors.js +50 -0
  425. package/dist/search/errors.js.map +1 -0
  426. package/dist/search/identity.d.ts +12 -0
  427. package/dist/search/identity.d.ts.map +1 -0
  428. package/dist/search/identity.js +90 -0
  429. package/dist/search/identity.js.map +1 -0
  430. package/dist/search/index.d.ts +16 -0
  431. package/dist/search/index.d.ts.map +1 -0
  432. package/dist/search/index.js +15 -0
  433. package/dist/search/index.js.map +1 -0
  434. package/dist/search/memory-source.d.ts +36 -0
  435. package/dist/search/memory-source.d.ts.map +1 -0
  436. package/dist/search/memory-source.js +235 -0
  437. package/dist/search/memory-source.js.map +1 -0
  438. package/dist/search/rank.d.ts +34 -0
  439. package/dist/search/rank.d.ts.map +1 -0
  440. package/dist/search/rank.js +129 -0
  441. package/dist/search/rank.js.map +1 -0
  442. package/dist/search/row-text.d.ts +38 -0
  443. package/dist/search/row-text.d.ts.map +1 -0
  444. package/dist/search/row-text.js +88 -0
  445. package/dist/search/row-text.js.map +1 -0
  446. package/dist/search/search.d.ts +28 -0
  447. package/dist/search/search.d.ts.map +1 -0
  448. package/dist/search/search.js +257 -0
  449. package/dist/search/search.js.map +1 -0
  450. package/dist/search/source.d.ts +67 -0
  451. package/dist/search/source.d.ts.map +1 -0
  452. package/dist/search/source.js +2 -0
  453. package/dist/search/source.js.map +1 -0
  454. package/dist/search/text.d.ts +47 -0
  455. package/dist/search/text.d.ts.map +1 -0
  456. package/dist/search/text.js +150 -0
  457. package/dist/search/text.js.map +1 -0
  458. package/dist/site-capabilities.d.ts +345 -0
  459. package/dist/site-capabilities.d.ts.map +1 -0
  460. package/dist/site-capabilities.js +724 -0
  461. package/dist/site-capabilities.js.map +1 -0
  462. package/dist/source-engine/guard.d.ts +78 -0
  463. package/dist/source-engine/guard.d.ts.map +1 -0
  464. package/dist/source-engine/guard.js +423 -0
  465. package/dist/source-engine/guard.js.map +1 -0
  466. package/dist/source-engine/index.d.ts +26 -0
  467. package/dist/source-engine/index.d.ts.map +1 -0
  468. package/dist/source-engine/index.js +21 -0
  469. package/dist/source-engine/index.js.map +1 -0
  470. package/dist/source-engine/machine-state.d.ts +74 -0
  471. package/dist/source-engine/machine-state.d.ts.map +1 -0
  472. package/dist/source-engine/machine-state.js +48 -0
  473. package/dist/source-engine/machine-state.js.map +1 -0
  474. package/dist/source-engine/observe.d.ts +18 -0
  475. package/dist/source-engine/observe.d.ts.map +1 -0
  476. package/dist/source-engine/observe.js +620 -0
  477. package/dist/source-engine/observe.js.map +1 -0
  478. package/dist/source-engine/overlay.d.ts +49 -0
  479. package/dist/source-engine/overlay.d.ts.map +1 -0
  480. package/dist/source-engine/overlay.js +114 -0
  481. package/dist/source-engine/overlay.js.map +1 -0
  482. package/dist/source-engine/robots.d.ts +53 -0
  483. package/dist/source-engine/robots.d.ts.map +1 -0
  484. package/dist/source-engine/robots.js +158 -0
  485. package/dist/source-engine/robots.js.map +1 -0
  486. package/dist/source-engine/types.d.ts +287 -0
  487. package/dist/source-engine/types.d.ts.map +1 -0
  488. package/dist/source-engine/types.js +2 -0
  489. package/dist/source-engine/types.js.map +1 -0
  490. package/dist/source-harness/conformance.d.ts +16 -0
  491. package/dist/source-harness/conformance.d.ts.map +1 -0
  492. package/dist/source-harness/conformance.js +266 -0
  493. package/dist/source-harness/conformance.js.map +1 -0
  494. package/dist/source-harness/fixture.d.ts +95 -0
  495. package/dist/source-harness/fixture.d.ts.map +1 -0
  496. package/dist/source-harness/fixture.js +273 -0
  497. package/dist/source-harness/fixture.js.map +1 -0
  498. package/dist/source-harness/index.d.ts +22 -0
  499. package/dist/source-harness/index.d.ts.map +1 -0
  500. package/dist/source-harness/index.js +19 -0
  501. package/dist/source-harness/index.js.map +1 -0
  502. package/dist/source-harness/peer.d.ts +74 -0
  503. package/dist/source-harness/peer.d.ts.map +1 -0
  504. package/dist/source-harness/peer.js +106 -0
  505. package/dist/source-harness/peer.js.map +1 -0
  506. package/dist/source-profiles/index.d.ts +31 -0
  507. package/dist/source-profiles/index.d.ts.map +1 -0
  508. package/dist/source-profiles/index.js +206 -0
  509. package/dist/source-profiles/index.js.map +1 -0
  510. package/dist/source-profiles/link-header.d.ts +6 -0
  511. package/dist/source-profiles/link-header.d.ts.map +1 -0
  512. package/dist/source-profiles/link-header.js +131 -0
  513. package/dist/source-profiles/link-header.js.map +1 -0
  514. package/dist/storage.d.ts +6 -2
  515. package/dist/storage.d.ts.map +1 -1
  516. package/dist/storage.js +4 -1
  517. package/dist/storage.js.map +1 -1
  518. package/dist/types.d.ts +38 -5
  519. package/dist/types.d.ts.map +1 -1
  520. package/dist/types.js +0 -10
  521. package/dist/types.js.map +1 -1
  522. package/dist/uncertain-write.d.ts +161 -19
  523. package/dist/uncertain-write.d.ts.map +1 -1
  524. package/dist/uncertain-write.js +90 -31
  525. package/dist/uncertain-write.js.map +1 -1
  526. package/dist/versioning.d.ts +9 -4
  527. package/dist/versioning.d.ts.map +1 -1
  528. package/dist/versioning.js +9 -4
  529. package/dist/versioning.js.map +1 -1
  530. package/dist/write-identity.d.ts +5 -0
  531. package/dist/write-identity.d.ts.map +1 -0
  532. package/dist/write-identity.js +9 -0
  533. package/dist/write-identity.js.map +1 -0
  534. package/package.json +103 -2
@@ -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,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"}
@@ -0,0 +1,69 @@
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 { HEADS_PAGE_ATTEMPTS, pageRestartDelay, pause } from "./paged-reads.js";
16
+ import { HISTORY_PAGE_LIMIT } from "./read-adapter.js";
17
+ async function listOnce(readPage, request) {
18
+ const size = request.pageSize ?? HISTORY_PAGE_LIMIT;
19
+ if (!Number.isSafeInteger(size) || size < 1 || size > HISTORY_PAGE_LIMIT)
20
+ throw new RangeError(`history page size must be 1..${HISTORY_PAGE_LIMIT}`);
21
+ const versions = [];
22
+ let total = 0;
23
+ let before;
24
+ for (;;) {
25
+ const answer = await readPage({
26
+ documentId: request.documentId,
27
+ limit: Math.min(size, request.wanted - versions.length),
28
+ ...(before === undefined ? {} : { before }),
29
+ ...(request.includeContent ? { includeContent: true } : {}),
30
+ });
31
+ if (!answer.ok) {
32
+ // Absent on the first page is the answer; absent on a later page, the lineage ended meanwhile.
33
+ if (answer.refusal.code === "document_not_found")
34
+ return before === undefined ? { status: "absent" } : "moved";
35
+ return { status: "refused", refusal: answer.refusal };
36
+ }
37
+ const { page } = answer;
38
+ if (before === undefined)
39
+ total = page.total;
40
+ versions.push(...page.versions);
41
+ if (!page.more || versions.length >= request.wanted)
42
+ break;
43
+ before = page.versions.at(-1).seq;
44
+ }
45
+ if (before === undefined)
46
+ return { status: "listed", versions, total };
47
+ // More than one page: the first page's newest version must still be the lineage's, by its seq.
48
+ const newest = versions[0];
49
+ const check = await readPage({ documentId: request.documentId, limit: 1, before: newest.seq + 1 });
50
+ if (!check.ok)
51
+ return check.refusal.code === "document_not_found" ? "moved" : { status: "refused", refusal: check.refusal };
52
+ const again = check.page.versions[0];
53
+ if (!again || again.seq !== newest.seq || again.version !== newest.version || again.timestamp !== newest.timestamp)
54
+ return "moved";
55
+ return { status: "listed", versions, total };
56
+ }
57
+ /** The newest `wanted` versions of one lineage, paged back with `before`. */
58
+ export async function readHistoryListing(readPage, request, options) {
59
+ const attempts = options.attempts ?? HEADS_PAGE_ATTEMPTS;
60
+ for (let attempt = 1;; attempt += 1) {
61
+ const result = await listOnce(readPage, request);
62
+ if (result !== "moved")
63
+ return result;
64
+ if (attempt >= attempts)
65
+ return { status: "moved" };
66
+ await (options.sleep ?? pause)(pageRestartDelay(attempt), options.signal);
67
+ }
68
+ }
69
+ //# sourceMappingURL=history-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-pages.js","sourceRoot":"","sources":["../../src/hosted-transport/history-pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `@superbee/core/hosted-transport`: one client grammar for a hosted Superbee bundle, shared by
3
+ * the browser working copy and the CLI checkout. The carrier seam keeps the credential
4
+ * (cookie and CSRF, or bearer) outside; the read adapter, the answer rows and the
5
+ * whole-document write transport are the same for every client. Hosted Superbee serves the
6
+ * `/sync/v1` routes it targets; `@superbee/core/hosted-client` is the headless client built on it.
7
+ */
8
+ export * from "./carrier.js";
9
+ export * from "./answer-rows.js";
10
+ export * from "./read-adapter.js";
11
+ export * from "./paged-reads.js";
12
+ export * from "./whole-document-transport.js";
13
+ export * from "./history-pages.js";
14
+ export * from "./operations.js";
15
+ export * from "./root-write.js";
16
+ export * from "./blob-reads.js";
17
+ export * from "./blob-write.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hosted-transport/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `@superbee/core/hosted-transport`: one client grammar for a hosted Superbee bundle, shared by
3
+ * the browser working copy and the CLI checkout. The carrier seam keeps the credential
4
+ * (cookie and CSRF, or bearer) outside; the read adapter, the answer rows and the
5
+ * whole-document write transport are the same for every client. Hosted Superbee serves the
6
+ * `/sync/v1` routes it targets; `@superbee/core/hosted-client` is the headless client built on it.
7
+ */
8
+ export * from "./carrier.js";
9
+ export * from "./answer-rows.js";
10
+ export * from "./read-adapter.js";
11
+ export * from "./paged-reads.js";
12
+ export * from "./whole-document-transport.js";
13
+ export * from "./history-pages.js";
14
+ export * from "./operations.js";
15
+ export * from "./root-write.js";
16
+ export * from "./blob-reads.js";
17
+ export * from "./blob-write.js";
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hosted-transport/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Hosted operations by id: the host lists the reads it runs for one bundle
3
+ * (`POST <sync prefix>/operations {bundleId}`) and runs one of them
4
+ * (`POST <sync prefix>/run {bundleId, operationId, input}`), answering the kernel's operation
5
+ * result. A client reaches a read the host adds with no change of its own.
6
+ *
7
+ * Everything the host says here is untrusted data. A descriptor's title and description go
8
+ * through {@link stripHostText}; its JSON Schemas are carried for rendering only, never compiled
9
+ * and never followed (`$ref`, `$id`); a result is data, never a path, URL or command. A listing
10
+ * is bounded: at most {@link HOSTED_READ_BOUNDS.operations} descriptors, and a descriptor that is
11
+ * malformed or out of bounds is dropped with a note while the rest still list.
12
+ */
13
+ import { type HostedOperationRefusal } from "./read-adapter.js";
14
+ /** True for an id in the operation grammar (`documents.history.v1`), at most 128 characters. */
15
+ export declare function isOperationId(value: unknown): value is string;
16
+ /** A JSON object, as parsed from an answer. */
17
+ export type JsonObject = {
18
+ readonly [key: string]: unknown;
19
+ };
20
+ /** One operation the host runs by id, as its listing describes it. */
21
+ export interface HostedOperation {
22
+ readonly operationId: string;
23
+ /** Host text, stripped of control and format characters, at most {@link HOSTED_READ_BOUNDS.operationTitleChars}. */
24
+ readonly title: string;
25
+ /** Host text, stripped of control and format characters, at most {@link HOSTED_READ_BOUNDS.operationDescriptionChars}. */
26
+ readonly description: string;
27
+ /** The most bytes the host answers a run of this operation with. */
28
+ readonly maximumOutputBytes: number;
29
+ /** For rendering only: never compiled, never followed. */
30
+ readonly inputJsonSchema: JsonObject;
31
+ /** For rendering only: never compiled, never followed. */
32
+ readonly resultJsonSchema: JsonObject;
33
+ /** The boolean hints the host states (`readOnlyHint`, `destructiveHint`, ...); any other value is left out. */
34
+ readonly annotations: Readonly<Record<string, boolean>>;
35
+ }
36
+ /** A decoded listing: the operations admitted, in the host's order, and a note for each one dropped. */
37
+ export interface HostedOperationListing {
38
+ readonly operations: readonly HostedOperation[];
39
+ readonly notes: readonly string[];
40
+ }
41
+ /**
42
+ * The listing route's `200` answer (`{ operations: [descriptor, ...] }`). A body that is not an
43
+ * object with an `operations` array is malformed, naming `route`; fields the answer may gain are
44
+ * ignored. Each descriptor is admitted on its own: one that is malformed, whose id is outside the
45
+ * operation grammar or repeats an earlier one, whose `maximumOutputBytes` is not positive, or
46
+ * whose schema nests deeper than {@link HOSTED_READ_BOUNDS.operationSchemaDepth} is dropped with a note. At most
47
+ * {@link HOSTED_READ_BOUNDS.operations} are read.
48
+ */
49
+ export declare function decodeOperationListing(body: unknown, route?: string): HostedOperationListing;
50
+ /** True when an operation input names a bundle other than `bundleId` (an input without one names none). */
51
+ export declare function namesOtherBundle(input: JsonObject, bundleId: string): boolean;
52
+ /**
53
+ * The body a run sends: the bundle the request selects its tenant by, the operation, and the
54
+ * operation's input with its `bundleId` set to that same bare bundle id (the host refuses an
55
+ * input naming another bundle). An input that already names another bundle is refused here.
56
+ */
57
+ export declare function operationRunBody(bundleId: string, operationId: string, input: JsonObject): {
58
+ bundleId: string;
59
+ operationId: string;
60
+ input: Record<string, unknown>;
61
+ };
62
+ /** A listing, or the refusal of the bundle it was asked for. */
63
+ export type HostedOperationListingAnswer = {
64
+ readonly ok: true;
65
+ readonly listing: HostedOperationListing;
66
+ } | {
67
+ readonly ok: false;
68
+ readonly refusal: HostedOperationRefusal;
69
+ };
70
+ /** A run's `200` answer: the operation's data, or its refusal (the kernel's code, message and retry advice). */
71
+ export type HostedOperationRun = {
72
+ readonly ok: true;
73
+ readonly data: unknown;
74
+ } | {
75
+ readonly ok: false;
76
+ readonly refusal: HostedOperationRefusal;
77
+ };
78
+ /**
79
+ * A run's `200` answer, the kernel's operation result: `{ ok: true, operationId, data }` for the
80
+ * operation asked for, or its refusal through {@link operationRefusal}. Anything else, including
81
+ * a result for another operation, or data nested deeper than `HOSTED_READ_BOUNDS.runDepth`
82
+ * levels (which no renderer could walk), is malformed, naming `route`. The data is not interpreted.
83
+ */
84
+ export declare function decodeOperationRun(operationId: string, body: unknown, route?: string): HostedOperationRun;
85
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/hosted-transport/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAwC,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAOtG,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D;AAED,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE7D,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oHAAoH;IACpH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0HAA0H;IAC1H,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC;IACtC,+GAA+G;IAC/G,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD;AAED,wGAAwG;AACxG,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAmCD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAmB5F;AAED,2GAA2G;AAC3G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAKpK;AAED,gEAAgE;AAChE,MAAM,MAAM,4BAA4B,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE9K,gHAAgH;AAChH,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAElJ;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAOzG"}