@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,309 @@
1
+ // The headless client of the hosted sync route family (`/sync/v1`): a bearer carrier over the
2
+ // shared hosted transport, the identity and bundle-list reads a caller needs before it opens a
3
+ // bundle, document reads and history, and operations run by id.
4
+ //
5
+ // Credentials come from the caller's provider, asked once per request through the carrier seam, so
6
+ // a short-lived token can be renewed between requests. The client never logs them, and its errors
7
+ // carry the route and code, never a credential. Failures are typed and never worded for a particular surface:
8
+ // `HostedCarrierError` (transport), `MalformedAnswer` (an answer the contract does not admit),
9
+ // `RemoteError` (a refusal, with the host's code and status) and `HostedRouteNotServed`.
10
+ import { createFetchCarrier, createHostedReadAdapter, decodeHistoryAnswer, decodeOperationListing, decodeOperationRun, familyRefusal, historyInput, HOSTED_READ_BOUNDS, operationRunBody, readRefusal, statedDocumentInputBytes, } from "../hosted-transport/index.js";
11
+ import { MalformedAnswer, RemoteError } from "../remote-error.js";
12
+ import { HostedRouteNotServed } from "./errors.js";
13
+ import { hostedBundleReferenceText, isWorkspaceSlug, parseHostedBundleReference } from "./reference.js";
14
+ import { checkoutBindingDigest } from "./binding.js";
15
+ import { mintRequestId } from "../uncertain-write.js";
16
+ import { createCapabilitiesCache, createMemoryIntentStore, hostedHeldWrites, hostedLookupWrite, hostedSettleWrite, hostedWrite, } from "./write.js";
17
+ import { createMemoryBlobJournal } from "../blob-journal.js";
18
+ import { hostedBlobHead, hostedBlobHeads, hostedDeleteBlob, hostedForgetBlobWrite, hostedHeldBlobWrites, hostedLookupBlobWrite, hostedReadBlob, hostedSettleBlobWrite, hostedWriteBlob, } from "./blob-write.js";
19
+ const IDENTITY_BYTES = 64 * 1024;
20
+ const BUNDLES_BYTES = 256 * 1024;
21
+ const AGENT_AUDIENCE_PATH = /^\/agents\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/mcp$/;
22
+ /**
23
+ * A {@link HostedCredentialProvider} sending `Authorization: Bearer <token>`, asking `getToken`
24
+ * before every request. A value that is not a string is no credential (`denied`).
25
+ */
26
+ export function bearerCredentials(getToken) {
27
+ return async (signal) => {
28
+ const token = await getToken(signal);
29
+ if (typeof token !== "string")
30
+ throw new TypeError("the token provider returned no bearer");
31
+ return { Authorization: `Bearer ${token}` };
32
+ };
33
+ }
34
+ /**
35
+ * The sync family under a protected resource's audience: `/sync/v1` for the Superbee API
36
+ * (`<origin>/mcp`), `/agents/<uuid>/sync/v1` for an agent connection. Null for any other
37
+ * audience, which has no sync family.
38
+ */
39
+ export function syncRoutePrefix(resource) {
40
+ const { origin, audience } = resource;
41
+ // The audience must be on the origin itself, not on another host whose name merely starts the same.
42
+ if (!audience.startsWith(origin) || (audience.length > origin.length && audience[origin.length] !== "/"))
43
+ return null;
44
+ const audiencePath = audience.slice(origin.length);
45
+ if (audiencePath === "/mcp")
46
+ return "/sync/v1";
47
+ if (AGENT_AUDIENCE_PATH.test(audiencePath))
48
+ return `${audiencePath.slice(0, -"/mcp".length)}/sync/v1`;
49
+ return null;
50
+ }
51
+ function syncReadRoutes(prefix) {
52
+ return Object.freeze({
53
+ capabilities: `${prefix}/capabilities`,
54
+ heads: `${prefix}/heads`,
55
+ snapshot: `${prefix}/snapshot`,
56
+ read: `${prefix}/read`,
57
+ });
58
+ }
59
+ /**
60
+ * The sync routes whose body never names one bundle by reference: `whoami` and `bundles` span the
61
+ * person's workspaces, and `bundle-create` and the staged creation's four routes name their
62
+ * workspace in the body (the blob route in its headers) and a bundle that does not exist yet.
63
+ * Every other route under the family's prefix is bundle-scoped, the host's own rule, so a route
64
+ * added later is qualified by default rather than read as an absent bundle once an id collides.
65
+ */
66
+ const UNSCOPED_ROUTES = Object.freeze([
67
+ "whoami",
68
+ "bundles",
69
+ "bundle-create",
70
+ "bundle-create-begin",
71
+ "bundle-create-stage",
72
+ "bundle-create-blob",
73
+ "bundle-create-commit",
74
+ ]);
75
+ /**
76
+ * The carrier with a workspace: every bundle-scoped request names its bundle as
77
+ * `<slug>/<bundle-id>`, so the host selects that workspace's bundle. The host's answers still
78
+ * name the bare id. An id that already names a workspace is a caller's mistake (a `TypeError`),
79
+ * as is a raw body sent to a bundle-scoped route other than an ordinary blob create/replace.
80
+ */
81
+ export function qualifyingCarrier(carrier, prefix, slug) {
82
+ const unscoped = new Set(UNSCOPED_ROUTES.map((route) => `${prefix}/${route}`));
83
+ const blobUploads = new Set([`${prefix}/blob-create`, `${prefix}/blob-replace`]);
84
+ const scoped = (route) => route.startsWith(`${prefix}/`) && !unscoped.has(route);
85
+ const qualify = (route, input) => {
86
+ if (!scoped(route) || input === null || typeof input !== "object" || Array.isArray(input))
87
+ return input;
88
+ const bundleId = input.bundleId;
89
+ if (typeof bundleId !== "string")
90
+ return input;
91
+ if (bundleId.includes("/"))
92
+ throw new TypeError("a qualified reference sent through a qualifying client");
93
+ return { ...input, bundleId: hostedBundleReferenceText({ slug, bundleId }) };
94
+ };
95
+ const bytes = carrier.bytes?.bind(carrier);
96
+ return {
97
+ json: async (route, input, signal, options) => carrier.json(route, qualify(route, input), signal, options),
98
+ stream: async (route, input, signal) => carrier.stream(route, qualify(route, input), signal),
99
+ // Ordinary blob uploads name their bundle in one route header, not in the binary body.
100
+ ...(bytes
101
+ ? {
102
+ bytes: async (route, body, signal, options) => {
103
+ if (blobUploads.has(route)) {
104
+ const entries = Object.entries(options.headers ?? {}).filter(([name]) => name.toLowerCase() === "x-superbee-bundle");
105
+ if (entries.length !== 1)
106
+ throw new TypeError("a blob upload must name exactly one bundle header");
107
+ const [name, value] = entries[0];
108
+ const reference = typeof value === "string" ? parseHostedBundleReference(value) : null;
109
+ if (reference === null || reference.slug !== null)
110
+ throw new TypeError("a blob upload through a qualifying client must name a bare hosted bundle id");
111
+ return bytes(route, body, signal, { ...options, headers: { ...options.headers, [name]: hostedBundleReferenceText({ slug, bundleId: reference.bundleId }) } });
112
+ }
113
+ if (scoped(route))
114
+ throw new TypeError(`a raw body sent to the bundle-scoped route ${route} through a qualifying client`);
115
+ return bytes(route, body, signal, options);
116
+ },
117
+ }
118
+ : {}),
119
+ };
120
+ }
121
+ /** A client of the hosted sync family at `options.target`, authenticated by `options.credentials`. */
122
+ export function createHostedClient(options) {
123
+ const { syncPrefix } = options.target;
124
+ if (typeof syncPrefix !== "string" || !syncPrefix.startsWith("/") || syncPrefix.endsWith("/")) {
125
+ throw new TypeError("a hosted client's sync prefix is an absolute path without a trailing slash");
126
+ }
127
+ if (typeof options.credentials !== "function")
128
+ throw new TypeError("a hosted client needs a credential provider");
129
+ // One binding per client instance, shared by its `within` clients: a digest of a random id, as a
130
+ // checkout's is, so the id itself never leaves.
131
+ const writes = {
132
+ binding: checkoutBindingDigest(mintRequestId()),
133
+ store: options.intentStore ?? createMemoryIntentStore(),
134
+ inFlight: new Map(),
135
+ capabilities: createCapabilitiesCache(options.capabilitiesTtlMs, options.now),
136
+ blobJournal: options.blobJournal ?? createMemoryBlobJournal(),
137
+ blobLocks: new Map(),
138
+ };
139
+ return clientIn(options, options.signal ?? new AbortController().signal, undefined, writes);
140
+ }
141
+ /** The client, naming its bundles in the workspace with `slug` when there is one. */
142
+ function clientIn(options, signal, slug, writes) {
143
+ const { target } = options;
144
+ const prefix = target.syncPrefix;
145
+ const fetchCarrier = createFetchCarrier({
146
+ baseUrl: target.origin,
147
+ credentials: options.credentials,
148
+ ...(options.fetch ? { fetch: options.fetch } : {}),
149
+ ...(options.deadlineMs ? { deadlineMs: options.deadlineMs } : {}),
150
+ });
151
+ const carrier = slug === undefined ? fetchCarrier : qualifyingCarrier(fetchCarrier, prefix, slug);
152
+ const writeContext = {
153
+ ...writes,
154
+ prefix,
155
+ workspace: slug ?? null,
156
+ signal,
157
+ ...(options.writeRecovery?.lookupDelayMs !== undefined ? { lookupDelayMs: options.writeRecovery.lookupDelayMs } : {}),
158
+ readRoutes: syncReadRoutes(prefix),
159
+ // A recorded write is looked up in the workspace it was sent in, whichever client asks.
160
+ carrierFor: (workspace) => (workspace === null ? fetchCarrier : qualifyingCarrier(fetchCarrier, prefix, workspace)),
161
+ origin: new URL(target.origin).origin,
162
+ };
163
+ /** An unscoped read: the body on a `200`, otherwise the host's refusal as a `RemoteError`. */
164
+ async function json(route, maximum) {
165
+ const answer = await carrier.json(`${prefix}/${route}`, {}, signal, { maximum });
166
+ if (answer.status !== 200) {
167
+ const code = answer.body?.error;
168
+ const named = typeof code === "string" ? code : typeof code?.code === "string" ? code.code : undefined;
169
+ throw new RemoteError(`hosted ${route} answered ${answer.status}`, named ?? "RUNTIME", answer.status);
170
+ }
171
+ return answer.body;
172
+ }
173
+ /**
174
+ * One request of a route a gateway may not have yet. That gateway answers the family's
175
+ * unknown-route 404, which is {@link HostedRouteNotServed}. An answer larger than `maximum` is
176
+ * the carrier's `unavailable` whose cause is `HostedAnswerTooLarge` (see `isAnswerTooLarge`).
177
+ */
178
+ async function send(route, input, maximum) {
179
+ const answer = await carrier.json(route, input, signal, { maximum });
180
+ if (answer.status === 404 && isUnknownRoute(answer.body))
181
+ throw new HostedRouteNotServed(route);
182
+ return answer;
183
+ }
184
+ return {
185
+ target,
186
+ prefix,
187
+ carrier,
188
+ signal,
189
+ async whoami() {
190
+ const route = `${prefix}/whoami`;
191
+ const body = (await json("whoami", IDENTITY_BYTES));
192
+ if (typeof body?.principalId !== "string" ||
193
+ body.principalId === "" ||
194
+ !Array.isArray(body.tenantIds) ||
195
+ !body.tenantIds.every((id) => typeof id === "string")) {
196
+ throw new MalformedAnswer("not an identity", route);
197
+ }
198
+ const tenantIds = [...body.tenantIds].sort();
199
+ // A host from before qualified references names no slugs.
200
+ const slugs = new Map();
201
+ if (body.workspaces !== undefined) {
202
+ if (!Array.isArray(body.workspaces) ||
203
+ body.workspaces.length !== tenantIds.length ||
204
+ !body.workspaces.every((w) => typeof w?.tenantId === "string" &&
205
+ tenantIds.includes(w.tenantId) &&
206
+ (w.slug === null || isWorkspaceSlug(w.slug)))) {
207
+ throw new MalformedAnswer("not an identity's workspaces", route);
208
+ }
209
+ for (const w of body.workspaces)
210
+ slugs.set(w.tenantId, w.slug);
211
+ if (slugs.size !== tenantIds.length)
212
+ throw new MalformedAnswer("an identity naming a workspace twice", route);
213
+ }
214
+ return {
215
+ principalId: body.principalId,
216
+ tenantIds,
217
+ workspaces: tenantIds.map((tenantId) => ({ tenantId, slug: slugs.get(tenantId) ?? null })),
218
+ documentInputBytes: statedDocumentInputBytes(body.limits),
219
+ email: typeof body.email === "string" && /^[^\s\p{Cc}\p{Cf}]{3,320}$/u.test(body.email) ? body.email : null,
220
+ ...(isAuthorityKey(body.targetAuthorityKey) ? { targetAuthorityKey: body.targetAuthorityKey } : {}),
221
+ ...directoryWorkspaces(body.notificationDirectoryWorkspaces, tenantIds),
222
+ };
223
+ },
224
+ async bundles() {
225
+ const body = (await json("bundles", BUNDLES_BYTES));
226
+ if (body?.ok === false) {
227
+ const code = typeof body.error?.code === "string" ? body.error.code : "RUNTIME";
228
+ throw new RemoteError(`hosted bundles answered ${code}`, code, code === "insufficient_scope" ? 403 : 422);
229
+ }
230
+ const rows = body?.data?.bundles;
231
+ if (body?.ok !== true || !Array.isArray(rows))
232
+ throw new MalformedAnswer("not a bundle list", `${prefix}/bundles`);
233
+ return rows
234
+ .filter((row) => typeof row?.bundleId === "string" && typeof row?.name === "string")
235
+ .map((row) => ({ bundleId: row.bundleId, name: row.name, lifecycle: typeof row.lifecycle === "string" ? row.lifecycle : null }));
236
+ },
237
+ reader(bundleId) {
238
+ return createHostedReadAdapter({ carrier, bundleId, routes: syncReadRoutes(prefix) });
239
+ },
240
+ within(workspace) {
241
+ return clientIn(options, signal, workspace, writes);
242
+ },
243
+ write: (bundleId, input, writeOptions) => hostedWrite(writeContext, bundleId, input, writeOptions),
244
+ lookupWrite: (requestId, lookupOptions) => hostedLookupWrite(writeContext, requestId, lookupOptions),
245
+ settleWrite: (requestId, settleOptions) => hostedSettleWrite(writeContext, requestId, settleOptions),
246
+ heldWrites: () => hostedHeldWrites(writeContext),
247
+ writeBlob: (bundleId, input, blobOptions) => hostedWriteBlob(writeContext, bundleId, input, blobOptions),
248
+ deleteBlob: (bundleId, input, blobOptions) => hostedDeleteBlob(writeContext, bundleId, input, blobOptions),
249
+ lookupBlobWrite: (requestId, lookupOptions) => hostedLookupBlobWrite(writeContext, requestId, lookupOptions),
250
+ settleBlobWrite: (requestId, settleOptions) => hostedSettleBlobWrite(writeContext, requestId, settleOptions),
251
+ forgetBlobWrite: (requestId, forgetOptions) => hostedForgetBlobWrite(writeContext, requestId, forgetOptions),
252
+ heldBlobWrites: () => hostedHeldBlobWrites(writeContext),
253
+ blobHeads: (bundleId, readOptions) => hostedBlobHeads(writeContext, bundleId, readOptions),
254
+ blobHead: (bundleId, key, readOptions) => hostedBlobHead(writeContext, bundleId, key, readOptions),
255
+ readBlob: (bundleId, key, readOptions) => hostedReadBlob(writeContext, bundleId, key, readOptions),
256
+ async history(bundleId, request) {
257
+ const route = `${prefix}/history`;
258
+ const answer = await send(route, historyInput(bundleId, request), HOSTED_READ_BOUNDS.historyBytes);
259
+ if (answer.status !== 200)
260
+ throw readRefusal(answer);
261
+ return decodeHistoryAnswer(request, answer.body, route);
262
+ },
263
+ async listOperations(bundleId) {
264
+ const route = `${prefix}/operations`;
265
+ const answer = await send(route, { bundleId }, HOSTED_READ_BOUNDS.operationsBytes);
266
+ if (answer.status !== 200) {
267
+ // The listing refuses a bundle as capabilities does: a 404 naming the code, never a 200.
268
+ const refusal = answer.status === 404 ? familyRefusal(answer) : undefined;
269
+ if (refusal?.code === "bundle_not_found")
270
+ return { ok: false, refusal };
271
+ throw readRefusal(answer);
272
+ }
273
+ return { ok: true, listing: decodeOperationListing(answer.body, route) };
274
+ },
275
+ async runOperation(bundleId, operationId, input, runOptions = {}) {
276
+ const route = `${prefix}/run`;
277
+ const answer = await send(route, operationRunBody(bundleId, operationId, input), runOptions.maximumBytes ?? HOSTED_READ_BOUNDS.runBytes);
278
+ if (answer.status !== 200) {
279
+ // The route's own refusals of the request, before any operation ran: an id the host does
280
+ // not run by id, and an envelope or input it refuses. Both are typed, for the caller to word.
281
+ const refusal = answer.status === 400 ? familyRefusal(answer) : undefined;
282
+ if (refusal?.code === "unknown_operation" || refusal?.code === "invalid_input")
283
+ return { ok: false, refusal };
284
+ throw readRefusal(answer);
285
+ }
286
+ return decodeOperationRun(operationId, answer.body, route);
287
+ },
288
+ };
289
+ }
290
+ /** The document target decoder's key rule: printable ASCII without a slash or backslash, at most 256 characters. */
291
+ function isAuthorityKey(value) {
292
+ return typeof value === "string" && /^[\x21-\x7e]{1,256}$/.test(value) && !/[\\/]/.test(value);
293
+ }
294
+ /**
295
+ * The stated directory workspaces the identity belongs to, sorted and once each; nothing when the
296
+ * field is absent, not a list, or names none of them. An entry outside `tenantIds` is dropped: the
297
+ * directory is only ever offered in a workspace the person is in.
298
+ */
299
+ function directoryWorkspaces(value, tenantIds) {
300
+ if (!Array.isArray(value))
301
+ return {};
302
+ const offered = tenantIds.filter((tenantId) => value.includes(tenantId));
303
+ return offered.length === 0 ? {} : { notificationDirectoryWorkspaces: offered };
304
+ }
305
+ /** The sync family's answer to a route it does not have: `404 {"error":"not_found"}`, nothing else. */
306
+ function isUnknownRoute(body) {
307
+ return typeof body === "object" && body !== null && !Array.isArray(body) && Object.keys(body).length === 1 && body.error === "not_found";
308
+ }
309
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/hosted-client/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type DirectoryMember, type HostedInbox } from "./inbox.js";
2
+ /** The most directory pages {@link readDirectory} reads by default: 2,000 members. */
3
+ export declare const DIRECTORY_PAGES_MAX = 20;
4
+ export interface DirectoryListing {
5
+ readonly members: readonly DirectoryMember[];
6
+ /** False when the directory had more pages than were read: a match over it may miss a duplicate. */
7
+ readonly complete: boolean;
8
+ }
9
+ /** Every member the directory lists, page by page, up to `maxPages` pages. */
10
+ export declare function readDirectory(inbox: Pick<HostedInbox, "directory">, options?: {
11
+ readonly maxPages?: number;
12
+ }): Promise<DirectoryListing>;
13
+ /** How a member matched exactly: its principal id, its email, or its whole name. */
14
+ export type DirectoryMatchBy = "principal_id" | "email" | "name";
15
+ export type DirectoryMatch = {
16
+ readonly outcome: "matched";
17
+ readonly member: DirectoryMember;
18
+ readonly by: DirectoryMatchBy;
19
+ } | {
20
+ readonly outcome: "ambiguous";
21
+ readonly by: Exclude<DirectoryMatchBy, "principal_id">;
22
+ readonly candidates: readonly DirectoryMember[];
23
+ }
24
+ /** No exact match, but these names start with the query: suggestions, never a recipient. */
25
+ | {
26
+ readonly outcome: "prefix";
27
+ readonly candidates: readonly DirectoryMember[];
28
+ }
29
+ /** `emails` false: the query was an email and the directory shares none, so it cannot match one. */
30
+ | {
31
+ readonly outcome: "none";
32
+ readonly emails: boolean;
33
+ };
34
+ /**
35
+ * A name as matching compares it: control and format characters removed, NFC, runs of space
36
+ * folded to one, trimmed and lowercased.
37
+ */
38
+ export declare function directoryNameKey(value: string): string;
39
+ /**
40
+ * The one member `query` names, by these rules in order: an exact principal id; with an `@`, an
41
+ * exact email (any case) when the directory shares emails; else an exact display name (any case,
42
+ * spacing folded). Several at the first rule that matches any are ambiguous. With no exact name,
43
+ * the names that start with the query are returned as `prefix` suggestions; nothing at all is none.
44
+ */
45
+ export declare function matchDirectoryMember(members: readonly DirectoryMember[], query: string): DirectoryMatch;
46
+ //# sourceMappingURL=directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../src/hosted-client/directory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAsB,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAExF,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,8EAA8E;AAC9E,wBAAsB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBlJ;AAED,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjE,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAA;CAAE,GAChG;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE;AAC5I,4FAA4F;GAC1F;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE;AACjF,oGAAoG;GAClG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAkBvG"}
@@ -0,0 +1,74 @@
1
+ // Finding a teammate in a hosted workspace's notification directory (decision
2
+ // notification-directory-2026-10-17): reading every page, and the one matching rule every client
3
+ // uses to turn what a person typed (a principal id, an email, a name) into one member, or into a
4
+ // refusal that names the candidates. A match never guesses: only an exact principal id, email or
5
+ // name names a member; two that fit equally are ambiguous, and the start of a name only suggests
6
+ // members, because someone who turned the directory off is not there to make it ambiguous.
7
+ import { stripHostControls } from "../host-text.js";
8
+ import { DIRECTORY_PAGE_MAX } from "./inbox.js";
9
+ /** The most directory pages {@link readDirectory} reads by default: 2,000 members. */
10
+ export const DIRECTORY_PAGES_MAX = 20;
11
+ /** Every member the directory lists, page by page, up to `maxPages` pages. */
12
+ export async function readDirectory(inbox, options = {}) {
13
+ const maxPages = Math.max(1, Math.floor(options.maxPages ?? DIRECTORY_PAGES_MAX));
14
+ const members = [];
15
+ const seen = new Set();
16
+ let after;
17
+ for (let page = 0; page < maxPages; page += 1) {
18
+ const answer = await inbox.directory({ limit: DIRECTORY_PAGE_MAX, ...(after === undefined ? {} : { after }) });
19
+ for (const member of answer.members) {
20
+ if (seen.has(member.principalId))
21
+ continue;
22
+ seen.add(member.principalId);
23
+ members.push(member);
24
+ }
25
+ // A cursor that does not move would page forever: stop and say the listing is not whole.
26
+ if (answer.nextAfter === null)
27
+ return { members, complete: true };
28
+ if (answer.nextAfter === after)
29
+ return { members, complete: false };
30
+ after = answer.nextAfter;
31
+ }
32
+ return { members, complete: false };
33
+ }
34
+ /**
35
+ * A name as matching compares it: control and format characters removed, NFC, runs of space
36
+ * folded to one, trimmed and lowercased.
37
+ */
38
+ export function directoryNameKey(value) {
39
+ return stripHostControls(value).replace(/[\t\n\r]/g, " ").normalize("NFC").replace(/\s+/gu, " ").trim().toLowerCase();
40
+ }
41
+ /**
42
+ * The one member `query` names, by these rules in order: an exact principal id; with an `@`, an
43
+ * exact email (any case) when the directory shares emails; else an exact display name (any case,
44
+ * spacing folded). Several at the first rule that matches any are ambiguous. With no exact name,
45
+ * the names that start with the query are returned as `prefix` suggestions; nothing at all is none.
46
+ */
47
+ export function matchDirectoryMember(members, query) {
48
+ const byId = members.find((member) => member.principalId === query);
49
+ if (byId)
50
+ return { outcome: "matched", member: byId, by: "principal_id" };
51
+ const key = directoryNameKey(query);
52
+ if (key === "")
53
+ return { outcome: "none", emails: true };
54
+ if (query.includes("@")) {
55
+ const shared = members.some((member) => typeof member.email === "string");
56
+ if (!shared)
57
+ return { outcome: "none", emails: false };
58
+ return settle(members.filter((member) => typeof member.email === "string" && directoryNameKey(member.email) === key), "email") ?? { outcome: "none", emails: true };
59
+ }
60
+ const named = members.filter((member) => member.displayName !== null);
61
+ return (settle(named.filter((member) => directoryNameKey(member.displayName) === key), "name") ??
62
+ suggest(named.filter((member) => directoryNameKey(member.displayName).startsWith(key))) ?? { outcome: "none", emails: true });
63
+ }
64
+ function suggest(found) {
65
+ return found.length === 0 ? null : { outcome: "prefix", candidates: found };
66
+ }
67
+ function settle(found, by) {
68
+ if (found.length === 0)
69
+ return null;
70
+ if (found.length === 1)
71
+ return { outcome: "matched", member: found[0], by };
72
+ return { outcome: "ambiguous", by, candidates: found };
73
+ }
74
+ //# sourceMappingURL=directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/hosted-client/directory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { RemoteError } from "../remote-error.js";
2
+ /** The code of {@link HostedRouteNotServed}. */
3
+ export declare const ROUTE_NOT_SERVED = "ROUTE_NOT_SERVED";
4
+ /**
5
+ * The host does not have this route yet: the sync family's own unknown-route answer,
6
+ * `404 {"error":"not_found"}` and nothing else, which a gateway from before the route sends. It
7
+ * is deterministic for that host version, so it is never retried; a later host serves the route.
8
+ * Its status stays `404`, and it names the route asked for.
9
+ */
10
+ export declare class HostedRouteNotServed extends RemoteError {
11
+ readonly route: string;
12
+ constructor(route: string);
13
+ }
14
+ /** True when `error` is a {@link HostedRouteNotServed}. */
15
+ export declare function isRouteNotServed(error: unknown): error is HostedRouteNotServed;
16
+ /**
17
+ * The host serves this bundle no blob writes (`blobWrites` is not `allowed` in its capabilities,
18
+ * as an older host's answer decodes). A {@link HostedRouteNotServed}, so `isRouteNotServed` is
19
+ * true; thrown before anything is journaled or sent. Unlike `write()`, whose bundle without
20
+ * writes is the result `refused: read_only`, a blob write throws: the blob routes are a newer
21
+ * capability a caller is expected to probe for, as it probes for any route a host may lack.
22
+ */
23
+ export declare class HostedBlobWritesNotServed extends HostedRouteNotServed {
24
+ constructor(route: string);
25
+ }
26
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/hosted-client/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM;CAK1B;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAE9E;AAED;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB;gBACrD,KAAK,EAAE,MAAM;CAI1B"}
@@ -0,0 +1,35 @@
1
+ import { RemoteError } from "../remote-error.js";
2
+ /** The code of {@link HostedRouteNotServed}. */
3
+ export const ROUTE_NOT_SERVED = "ROUTE_NOT_SERVED";
4
+ /**
5
+ * The host does not have this route yet: the sync family's own unknown-route answer,
6
+ * `404 {"error":"not_found"}` and nothing else, which a gateway from before the route sends. It
7
+ * is deterministic for that host version, so it is never retried; a later host serves the route.
8
+ * Its status stays `404`, and it names the route asked for.
9
+ */
10
+ export class HostedRouteNotServed extends RemoteError {
11
+ route;
12
+ constructor(route) {
13
+ super(`the host does not serve ${route}`, ROUTE_NOT_SERVED, 404);
14
+ this.name = "HostedRouteNotServed";
15
+ this.route = route;
16
+ }
17
+ }
18
+ /** True when `error` is a {@link HostedRouteNotServed}. */
19
+ export function isRouteNotServed(error) {
20
+ return error instanceof HostedRouteNotServed;
21
+ }
22
+ /**
23
+ * The host serves this bundle no blob writes (`blobWrites` is not `allowed` in its capabilities,
24
+ * as an older host's answer decodes). A {@link HostedRouteNotServed}, so `isRouteNotServed` is
25
+ * true; thrown before anything is journaled or sent. Unlike `write()`, whose bundle without
26
+ * writes is the result `refused: read_only`, a blob write throws: the blob routes are a newer
27
+ * capability a caller is expected to probe for, as it probes for any route a host may lack.
28
+ */
29
+ export class HostedBlobWritesNotServed extends HostedRouteNotServed {
30
+ constructor(route) {
31
+ super(route);
32
+ this.name = "HostedBlobWritesNotServed";
33
+ }
34
+ }
35
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/hosted-client/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAC1C,KAAK,CAAS;IACvB,YAAY,KAAa;QACvB,KAAK,CAAC,2BAA2B,KAAK,EAAE,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,oBAAoB,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,yBAA0B,SAAQ,oBAAoB;IACjE,YAAY,KAAa;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF"}