@superbee/core 0.2.0-pre.2 → 0.2.0-pre.21

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 (517) hide show
  1. package/README.md +1000 -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 +50 -0
  19. package/dist/body-replace-guards.d.ts.map +1 -0
  20. package/dist/body-replace-guards.js +158 -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/connectors.d.ts +230 -0
  59. package/dist/connectors.d.ts.map +1 -0
  60. package/dist/connectors.js +1150 -0
  61. package/dist/connectors.js.map +1 -0
  62. package/dist/cross-bundle.d.ts +135 -0
  63. package/dist/cross-bundle.d.ts.map +1 -0
  64. package/dist/cross-bundle.js +186 -0
  65. package/dist/cross-bundle.js.map +1 -0
  66. package/dist/dependencies.d.ts +94 -0
  67. package/dist/dependencies.d.ts.map +1 -0
  68. package/dist/dependencies.js +180 -0
  69. package/dist/dependencies.js.map +1 -0
  70. package/dist/document-codec.d.ts +6 -1
  71. package/dist/document-codec.d.ts.map +1 -1
  72. package/dist/document-codec.js +8 -4
  73. package/dist/document-codec.js.map +1 -1
  74. package/dist/document-field-actions.d.ts +31 -1
  75. package/dist/document-field-actions.d.ts.map +1 -1
  76. package/dist/document-field-actions.js +137 -34
  77. package/dist/document-field-actions.js.map +1 -1
  78. package/dist/document-mutation.d.ts +22 -10
  79. package/dist/document-mutation.d.ts.map +1 -1
  80. package/dist/document-mutation.js +58 -27
  81. package/dist/document-mutation.js.map +1 -1
  82. package/dist/document-write-policy.d.ts.map +1 -1
  83. package/dist/document-write-policy.js +4 -2
  84. package/dist/document-write-policy.js.map +1 -1
  85. package/dist/engine.d.ts +9 -2
  86. package/dist/engine.d.ts.map +1 -1
  87. package/dist/engine.js +11 -4
  88. package/dist/engine.js.map +1 -1
  89. package/dist/file-journaled-backend-internal.d.ts +21 -0
  90. package/dist/file-journaled-backend-internal.d.ts.map +1 -0
  91. package/dist/file-journaled-backend-internal.js +12 -0
  92. package/dist/file-journaled-backend-internal.js.map +1 -0
  93. package/dist/file-journaled-backend.d.ts +200 -0
  94. package/dist/file-journaled-backend.d.ts.map +1 -0
  95. package/dist/file-journaled-backend.js +1334 -0
  96. package/dist/file-journaled-backend.js.map +1 -0
  97. package/dist/filesystem-host.d.ts +15 -0
  98. package/dist/filesystem-host.d.ts.map +1 -0
  99. package/dist/filesystem-host.js +20 -0
  100. package/dist/filesystem-host.js.map +1 -0
  101. package/dist/filesystem-identity.d.ts +86 -4
  102. package/dist/filesystem-identity.d.ts.map +1 -1
  103. package/dist/filesystem-identity.js +338 -102
  104. package/dist/filesystem-identity.js.map +1 -1
  105. package/dist/filesystem-lock.d.ts +16 -3
  106. package/dist/filesystem-lock.d.ts.map +1 -1
  107. package/dist/filesystem-lock.js +323 -77
  108. package/dist/filesystem-lock.js.map +1 -1
  109. package/dist/filesystem-push-role.d.ts +77 -0
  110. package/dist/filesystem-push-role.d.ts.map +1 -0
  111. package/dist/filesystem-push-role.js +165 -0
  112. package/dist/filesystem-push-role.js.map +1 -0
  113. package/dist/filesystem.d.ts +17 -0
  114. package/dist/filesystem.d.ts.map +1 -0
  115. package/dist/filesystem.js +18 -0
  116. package/dist/filesystem.js.map +1 -0
  117. package/dist/frontmatter.d.ts +8 -0
  118. package/dist/frontmatter.d.ts.map +1 -1
  119. package/dist/frontmatter.js +14 -4
  120. package/dist/frontmatter.js.map +1 -1
  121. package/dist/governed-body-write.d.ts +106 -0
  122. package/dist/governed-body-write.d.ts.map +1 -0
  123. package/dist/governed-body-write.js +251 -0
  124. package/dist/governed-body-write.js.map +1 -0
  125. package/dist/host-policy-snapshot.d.ts +9 -0
  126. package/dist/host-policy-snapshot.d.ts.map +1 -0
  127. package/dist/host-policy-snapshot.js +33 -0
  128. package/dist/host-policy-snapshot.js.map +1 -0
  129. package/dist/host-text.d.ts +31 -0
  130. package/dist/host-text.d.ts.map +1 -0
  131. package/dist/host-text.js +77 -0
  132. package/dist/host-text.js.map +1 -0
  133. package/dist/hosted-client/binding.d.ts +7 -0
  134. package/dist/hosted-client/binding.d.ts.map +1 -0
  135. package/dist/hosted-client/binding.js +10 -0
  136. package/dist/hosted-client/binding.js.map +1 -0
  137. package/dist/hosted-client/blob-delivery.d.ts +67 -0
  138. package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
  139. package/dist/hosted-client/blob-delivery.js +169 -0
  140. package/dist/hosted-client/blob-delivery.js.map +1 -0
  141. package/dist/hosted-client/blob-write.d.ts +386 -0
  142. package/dist/hosted-client/blob-write.d.ts.map +1 -0
  143. package/dist/hosted-client/blob-write.js +770 -0
  144. package/dist/hosted-client/blob-write.js.map +1 -0
  145. package/dist/hosted-client/bundle-listing.d.ts +46 -0
  146. package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
  147. package/dist/hosted-client/bundle-listing.js +36 -0
  148. package/dist/hosted-client/bundle-listing.js.map +1 -0
  149. package/dist/hosted-client/client.d.ts +219 -0
  150. package/dist/hosted-client/client.d.ts.map +1 -0
  151. package/dist/hosted-client/client.js +309 -0
  152. package/dist/hosted-client/client.js.map +1 -0
  153. package/dist/hosted-client/directory.d.ts +46 -0
  154. package/dist/hosted-client/directory.d.ts.map +1 -0
  155. package/dist/hosted-client/directory.js +74 -0
  156. package/dist/hosted-client/directory.js.map +1 -0
  157. package/dist/hosted-client/errors.d.ts +26 -0
  158. package/dist/hosted-client/errors.d.ts.map +1 -0
  159. package/dist/hosted-client/errors.js +35 -0
  160. package/dist/hosted-client/errors.js.map +1 -0
  161. package/dist/hosted-client/inbox.d.ts +320 -0
  162. package/dist/hosted-client/inbox.d.ts.map +1 -0
  163. package/dist/hosted-client/inbox.js +379 -0
  164. package/dist/hosted-client/inbox.js.map +1 -0
  165. package/dist/hosted-client/index.d.ts +30 -0
  166. package/dist/hosted-client/index.d.ts.map +1 -0
  167. package/dist/hosted-client/index.js +32 -0
  168. package/dist/hosted-client/index.js.map +1 -0
  169. package/dist/hosted-client/journal.d.ts +103 -0
  170. package/dist/hosted-client/journal.d.ts.map +1 -0
  171. package/dist/hosted-client/journal.js +464 -0
  172. package/dist/hosted-client/journal.js.map +1 -0
  173. package/dist/hosted-client/node.d.ts +74 -0
  174. package/dist/hosted-client/node.d.ts.map +1 -0
  175. package/dist/hosted-client/node.js +219 -0
  176. package/dist/hosted-client/node.js.map +1 -0
  177. package/dist/hosted-client/reference.d.ts +12 -0
  178. package/dist/hosted-client/reference.d.ts.map +1 -0
  179. package/dist/hosted-client/reference.js +29 -0
  180. package/dist/hosted-client/reference.js.map +1 -0
  181. package/dist/hosted-client/write.d.ts +217 -0
  182. package/dist/hosted-client/write.d.ts.map +1 -0
  183. package/dist/hosted-client/write.js +418 -0
  184. package/dist/hosted-client/write.js.map +1 -0
  185. package/dist/hosted-transport/answer-rows.d.ts +243 -0
  186. package/dist/hosted-transport/answer-rows.d.ts.map +1 -0
  187. package/dist/hosted-transport/answer-rows.js +454 -0
  188. package/dist/hosted-transport/answer-rows.js.map +1 -0
  189. package/dist/hosted-transport/blob-reads.d.ts +35 -0
  190. package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
  191. package/dist/hosted-transport/blob-reads.js +179 -0
  192. package/dist/hosted-transport/blob-reads.js.map +1 -0
  193. package/dist/hosted-transport/blob-write.d.ts +34 -0
  194. package/dist/hosted-transport/blob-write.d.ts.map +1 -0
  195. package/dist/hosted-transport/blob-write.js +115 -0
  196. package/dist/hosted-transport/blob-write.js.map +1 -0
  197. package/dist/hosted-transport/carrier.d.ts +151 -0
  198. package/dist/hosted-transport/carrier.d.ts.map +1 -0
  199. package/dist/hosted-transport/carrier.js +260 -0
  200. package/dist/hosted-transport/carrier.js.map +1 -0
  201. package/dist/hosted-transport/history-pages.d.ts +55 -0
  202. package/dist/hosted-transport/history-pages.d.ts.map +1 -0
  203. package/dist/hosted-transport/history-pages.js +69 -0
  204. package/dist/hosted-transport/history-pages.js.map +1 -0
  205. package/dist/hosted-transport/index.d.ts +18 -0
  206. package/dist/hosted-transport/index.d.ts.map +1 -0
  207. package/dist/hosted-transport/index.js +18 -0
  208. package/dist/hosted-transport/index.js.map +1 -0
  209. package/dist/hosted-transport/operations.d.ts +85 -0
  210. package/dist/hosted-transport/operations.d.ts.map +1 -0
  211. package/dist/hosted-transport/operations.js +128 -0
  212. package/dist/hosted-transport/operations.js.map +1 -0
  213. package/dist/hosted-transport/paged-reads.d.ts +87 -0
  214. package/dist/hosted-transport/paged-reads.d.ts.map +1 -0
  215. package/dist/hosted-transport/paged-reads.js +238 -0
  216. package/dist/hosted-transport/paged-reads.js.map +1 -0
  217. package/dist/hosted-transport/read-adapter.d.ts +256 -0
  218. package/dist/hosted-transport/read-adapter.d.ts.map +1 -0
  219. package/dist/hosted-transport/read-adapter.js +568 -0
  220. package/dist/hosted-transport/read-adapter.js.map +1 -0
  221. package/dist/hosted-transport/root-write.d.ts +114 -0
  222. package/dist/hosted-transport/root-write.d.ts.map +1 -0
  223. package/dist/hosted-transport/root-write.js +171 -0
  224. package/dist/hosted-transport/root-write.js.map +1 -0
  225. package/dist/hosted-transport/whole-document-transport.d.ts +204 -0
  226. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -0
  227. package/dist/hosted-transport/whole-document-transport.js +447 -0
  228. package/dist/hosted-transport/whole-document-transport.js.map +1 -0
  229. package/dist/index.d.ts +34 -10
  230. package/dist/index.d.ts.map +1 -1
  231. package/dist/index.js +26 -8
  232. package/dist/index.js.map +1 -1
  233. package/dist/indexeddb-backend.d.ts +28 -6
  234. package/dist/indexeddb-backend.d.ts.map +1 -1
  235. package/dist/indexeddb-backend.js +471 -92
  236. package/dist/indexeddb-backend.js.map +1 -1
  237. package/dist/journaled-backend.d.ts +247 -10
  238. package/dist/journaled-backend.d.ts.map +1 -1
  239. package/dist/journaled-backend.js +302 -1
  240. package/dist/journaled-backend.js.map +1 -1
  241. package/dist/kind-authoring.d.ts +170 -0
  242. package/dist/kind-authoring.d.ts.map +1 -0
  243. package/dist/kind-authoring.js +451 -0
  244. package/dist/kind-authoring.js.map +1 -0
  245. package/dist/kind-conformance-error.d.ts +15 -0
  246. package/dist/kind-conformance-error.d.ts.map +1 -0
  247. package/dist/kind-conformance-error.js +20 -0
  248. package/dist/kind-conformance-error.js.map +1 -0
  249. package/dist/kind-coverage.d.ts +99 -0
  250. package/dist/kind-coverage.d.ts.map +1 -0
  251. package/dist/kind-coverage.js +186 -0
  252. package/dist/kind-coverage.js.map +1 -0
  253. package/dist/kind-field-mutation.d.ts +4 -0
  254. package/dist/kind-field-mutation.d.ts.map +1 -1
  255. package/dist/kind-field-mutation.js +28 -3
  256. package/dist/kind-field-mutation.js.map +1 -1
  257. package/dist/kinds-load.js +4 -4
  258. package/dist/kinds-load.js.map +1 -1
  259. package/dist/kinds.d.ts +65 -2
  260. package/dist/kinds.d.ts.map +1 -1
  261. package/dist/kinds.js +341 -21
  262. package/dist/kinds.js.map +1 -1
  263. package/dist/link-types.d.ts +26 -0
  264. package/dist/link-types.d.ts.map +1 -0
  265. package/dist/link-types.js +57 -0
  266. package/dist/link-types.js.map +1 -0
  267. package/dist/links.d.ts +21 -3
  268. package/dist/links.d.ts.map +1 -1
  269. package/dist/links.js +213 -14
  270. package/dist/links.js.map +1 -1
  271. package/dist/managed-document-metadata.d.ts +2 -0
  272. package/dist/managed-document-metadata.d.ts.map +1 -0
  273. package/dist/managed-document-metadata.js +9 -0
  274. package/dist/managed-document-metadata.js.map +1 -0
  275. package/dist/memory-backend.d.ts +2 -2
  276. package/dist/memory-backend.d.ts.map +1 -1
  277. package/dist/memory-backend.js +26 -11
  278. package/dist/memory-backend.js.map +1 -1
  279. package/dist/paths.d.ts +16 -0
  280. package/dist/paths.d.ts.map +1 -1
  281. package/dist/paths.js +25 -0
  282. package/dist/paths.js.map +1 -1
  283. package/dist/platform.d.ts +13 -2
  284. package/dist/platform.d.ts.map +1 -1
  285. package/dist/platform.js +16 -0
  286. package/dist/platform.js.map +1 -1
  287. package/dist/portable-export.d.ts +119 -0
  288. package/dist/portable-export.d.ts.map +1 -0
  289. package/dist/portable-export.js +501 -0
  290. package/dist/portable-export.js.map +1 -0
  291. package/dist/publication-filesystem.d.ts +1 -1
  292. package/dist/publication-filesystem.d.ts.map +1 -1
  293. package/dist/publication-filesystem.js +1 -1
  294. package/dist/publication-filesystem.js.map +1 -1
  295. package/dist/qualified-links.d.ts +67 -0
  296. package/dist/qualified-links.d.ts.map +1 -0
  297. package/dist/qualified-links.js +117 -0
  298. package/dist/qualified-links.js.map +1 -0
  299. package/dist/query-filter.d.ts +16 -2
  300. package/dist/query-filter.d.ts.map +1 -1
  301. package/dist/query-filter.js +40 -1
  302. package/dist/query-filter.js.map +1 -1
  303. package/dist/query-order.d.ts +22 -0
  304. package/dist/query-order.d.ts.map +1 -0
  305. package/dist/query-order.js +42 -0
  306. package/dist/query-order.js.map +1 -0
  307. package/dist/recipe-lifecycle/errors.d.ts +96 -0
  308. package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
  309. package/dist/recipe-lifecycle/errors.js +122 -0
  310. package/dist/recipe-lifecycle/errors.js.map +1 -0
  311. package/dist/recipe-lifecycle/evolution.d.ts +108 -0
  312. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
  313. package/dist/recipe-lifecycle/evolution.js +884 -0
  314. package/dist/recipe-lifecycle/evolution.js.map +1 -0
  315. package/dist/recipe-lifecycle/index.d.ts +26 -0
  316. package/dist/recipe-lifecycle/index.d.ts.map +1 -0
  317. package/dist/recipe-lifecycle/index.js +22 -0
  318. package/dist/recipe-lifecycle/index.js.map +1 -0
  319. package/dist/recipe-lifecycle/install.d.ts +127 -0
  320. package/dist/recipe-lifecycle/install.d.ts.map +1 -0
  321. package/dist/recipe-lifecycle/install.js +526 -0
  322. package/dist/recipe-lifecycle/install.js.map +1 -0
  323. package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
  324. package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
  325. package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
  326. package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
  327. package/dist/recipe-lifecycle/stamp.d.ts +136 -0
  328. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
  329. package/dist/recipe-lifecycle/stamp.js +326 -0
  330. package/dist/recipe-lifecycle/stamp.js.map +1 -0
  331. package/dist/recipes.d.ts +29 -1
  332. package/dist/recipes.d.ts.map +1 -1
  333. package/dist/recipes.js +137 -1
  334. package/dist/recipes.js.map +1 -1
  335. package/dist/record-overlay/apply.d.ts +43 -0
  336. package/dist/record-overlay/apply.d.ts.map +1 -0
  337. package/dist/record-overlay/apply.js +527 -0
  338. package/dist/record-overlay/apply.js.map +1 -0
  339. package/dist/record-overlay/canonical.d.ts +22 -0
  340. package/dist/record-overlay/canonical.d.ts.map +1 -0
  341. package/dist/record-overlay/canonical.js +47 -0
  342. package/dist/record-overlay/canonical.js.map +1 -0
  343. package/dist/record-overlay/digest.d.ts +4 -0
  344. package/dist/record-overlay/digest.d.ts.map +1 -0
  345. package/dist/record-overlay/digest.js +11 -0
  346. package/dist/record-overlay/digest.js.map +1 -0
  347. package/dist/record-overlay/errors.d.ts +44 -0
  348. package/dist/record-overlay/errors.d.ts.map +1 -0
  349. package/dist/record-overlay/errors.js +55 -0
  350. package/dist/record-overlay/errors.js.map +1 -0
  351. package/dist/record-overlay/findings.d.ts +5 -0
  352. package/dist/record-overlay/findings.d.ts.map +1 -0
  353. package/dist/record-overlay/findings.js +83 -0
  354. package/dist/record-overlay/findings.js.map +1 -0
  355. package/dist/record-overlay/index.d.ts +23 -0
  356. package/dist/record-overlay/index.d.ts.map +1 -0
  357. package/dist/record-overlay/index.js +21 -0
  358. package/dist/record-overlay/index.js.map +1 -0
  359. package/dist/record-overlay/plan.d.ts +12 -0
  360. package/dist/record-overlay/plan.d.ts.map +1 -0
  361. package/dist/record-overlay/plan.js +285 -0
  362. package/dist/record-overlay/plan.js.map +1 -0
  363. package/dist/record-overlay/policy.d.ts +69 -0
  364. package/dist/record-overlay/policy.d.ts.map +1 -0
  365. package/dist/record-overlay/policy.js +228 -0
  366. package/dist/record-overlay/policy.js.map +1 -0
  367. package/dist/record-overlay/redact.d.ts +3 -0
  368. package/dist/record-overlay/redact.d.ts.map +1 -0
  369. package/dist/record-overlay/redact.js +27 -0
  370. package/dist/record-overlay/redact.js.map +1 -0
  371. package/dist/record-overlay/signal-kind.d.ts +30 -0
  372. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  373. package/dist/record-overlay/signal-kind.js +38 -0
  374. package/dist/record-overlay/signal-kind.js.map +1 -0
  375. package/dist/record-overlay/signal-text.d.ts +45 -0
  376. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  377. package/dist/record-overlay/signal-text.js +116 -0
  378. package/dist/record-overlay/signal-text.js.map +1 -0
  379. package/dist/record-overlay/source-index.d.ts +19 -0
  380. package/dist/record-overlay/source-index.d.ts.map +1 -0
  381. package/dist/record-overlay/source-index.js +102 -0
  382. package/dist/record-overlay/source-index.js.map +1 -0
  383. package/dist/record-overlay/types.d.ts +291 -0
  384. package/dist/record-overlay/types.d.ts.map +1 -0
  385. package/dist/record-overlay/types.js +2 -0
  386. package/dist/record-overlay/types.js.map +1 -0
  387. package/dist/remote-backend.d.ts +67 -67
  388. package/dist/remote-backend.d.ts.map +1 -1
  389. package/dist/remote-backend.js +169 -201
  390. package/dist/remote-backend.js.map +1 -1
  391. package/dist/remote-document-codec.d.ts +15 -0
  392. package/dist/remote-document-codec.d.ts.map +1 -0
  393. package/dist/remote-document-codec.js +103 -0
  394. package/dist/remote-document-codec.js.map +1 -0
  395. package/dist/remote-error.d.ts +38 -0
  396. package/dist/remote-error.d.ts.map +1 -0
  397. package/dist/remote-error.js +59 -0
  398. package/dist/remote-error.js.map +1 -0
  399. package/dist/remote-operations.d.ts +6 -3
  400. package/dist/remote-operations.d.ts.map +1 -1
  401. package/dist/remote-operations.js +23 -5
  402. package/dist/remote-operations.js.map +1 -1
  403. package/dist/remote-parsers.d.ts +86 -0
  404. package/dist/remote-parsers.d.ts.map +1 -0
  405. package/dist/remote-parsers.js +181 -0
  406. package/dist/remote-parsers.js.map +1 -0
  407. package/dist/remote.d.ts +5 -2
  408. package/dist/remote.d.ts.map +1 -1
  409. package/dist/remote.js +5 -1
  410. package/dist/remote.js.map +1 -1
  411. package/dist/search/backend-source.d.ts +6 -0
  412. package/dist/search/backend-source.d.ts.map +1 -0
  413. package/dist/search/backend-source.js +33 -0
  414. package/dist/search/backend-source.js.map +1 -0
  415. package/dist/search/contract.d.ts +151 -0
  416. package/dist/search/contract.d.ts.map +1 -0
  417. package/dist/search/contract.js +78 -0
  418. package/dist/search/contract.js.map +1 -0
  419. package/dist/search/errors.d.ts +30 -0
  420. package/dist/search/errors.d.ts.map +1 -0
  421. package/dist/search/errors.js +50 -0
  422. package/dist/search/errors.js.map +1 -0
  423. package/dist/search/identity.d.ts +12 -0
  424. package/dist/search/identity.d.ts.map +1 -0
  425. package/dist/search/identity.js +90 -0
  426. package/dist/search/identity.js.map +1 -0
  427. package/dist/search/index.d.ts +16 -0
  428. package/dist/search/index.d.ts.map +1 -0
  429. package/dist/search/index.js +15 -0
  430. package/dist/search/index.js.map +1 -0
  431. package/dist/search/memory-source.d.ts +36 -0
  432. package/dist/search/memory-source.d.ts.map +1 -0
  433. package/dist/search/memory-source.js +235 -0
  434. package/dist/search/memory-source.js.map +1 -0
  435. package/dist/search/rank.d.ts +34 -0
  436. package/dist/search/rank.d.ts.map +1 -0
  437. package/dist/search/rank.js +129 -0
  438. package/dist/search/rank.js.map +1 -0
  439. package/dist/search/row-text.d.ts +38 -0
  440. package/dist/search/row-text.d.ts.map +1 -0
  441. package/dist/search/row-text.js +88 -0
  442. package/dist/search/row-text.js.map +1 -0
  443. package/dist/search/search.d.ts +28 -0
  444. package/dist/search/search.d.ts.map +1 -0
  445. package/dist/search/search.js +257 -0
  446. package/dist/search/search.js.map +1 -0
  447. package/dist/search/source.d.ts +67 -0
  448. package/dist/search/source.d.ts.map +1 -0
  449. package/dist/search/source.js +2 -0
  450. package/dist/search/source.js.map +1 -0
  451. package/dist/search/text.d.ts +47 -0
  452. package/dist/search/text.d.ts.map +1 -0
  453. package/dist/search/text.js +148 -0
  454. package/dist/search/text.js.map +1 -0
  455. package/dist/site-capabilities.d.ts +339 -0
  456. package/dist/site-capabilities.d.ts.map +1 -0
  457. package/dist/site-capabilities.js +717 -0
  458. package/dist/site-capabilities.js.map +1 -0
  459. package/dist/source-engine/guard.d.ts +82 -0
  460. package/dist/source-engine/guard.d.ts.map +1 -0
  461. package/dist/source-engine/guard.js +396 -0
  462. package/dist/source-engine/guard.js.map +1 -0
  463. package/dist/source-engine/index.d.ts +24 -0
  464. package/dist/source-engine/index.d.ts.map +1 -0
  465. package/dist/source-engine/index.js +20 -0
  466. package/dist/source-engine/index.js.map +1 -0
  467. package/dist/source-engine/machine-state.d.ts +74 -0
  468. package/dist/source-engine/machine-state.d.ts.map +1 -0
  469. package/dist/source-engine/machine-state.js +48 -0
  470. package/dist/source-engine/machine-state.js.map +1 -0
  471. package/dist/source-engine/observe.d.ts +18 -0
  472. package/dist/source-engine/observe.d.ts.map +1 -0
  473. package/dist/source-engine/observe.js +598 -0
  474. package/dist/source-engine/observe.js.map +1 -0
  475. package/dist/source-engine/robots.d.ts +53 -0
  476. package/dist/source-engine/robots.d.ts.map +1 -0
  477. package/dist/source-engine/robots.js +158 -0
  478. package/dist/source-engine/robots.js.map +1 -0
  479. package/dist/source-engine/types.d.ts +285 -0
  480. package/dist/source-engine/types.d.ts.map +1 -0
  481. package/dist/source-engine/types.js +2 -0
  482. package/dist/source-engine/types.js.map +1 -0
  483. package/dist/source-harness/conformance.d.ts +16 -0
  484. package/dist/source-harness/conformance.d.ts.map +1 -0
  485. package/dist/source-harness/conformance.js +265 -0
  486. package/dist/source-harness/conformance.js.map +1 -0
  487. package/dist/source-harness/fixture.d.ts +95 -0
  488. package/dist/source-harness/fixture.d.ts.map +1 -0
  489. package/dist/source-harness/fixture.js +261 -0
  490. package/dist/source-harness/fixture.js.map +1 -0
  491. package/dist/source-harness/index.d.ts +22 -0
  492. package/dist/source-harness/index.d.ts.map +1 -0
  493. package/dist/source-harness/index.js +19 -0
  494. package/dist/source-harness/index.js.map +1 -0
  495. package/dist/source-harness/peer.d.ts +74 -0
  496. package/dist/source-harness/peer.d.ts.map +1 -0
  497. package/dist/source-harness/peer.js +106 -0
  498. package/dist/source-harness/peer.js.map +1 -0
  499. package/dist/storage.d.ts +6 -2
  500. package/dist/storage.d.ts.map +1 -1
  501. package/dist/storage.js +4 -1
  502. package/dist/storage.js.map +1 -1
  503. package/dist/types.d.ts +33 -5
  504. package/dist/types.d.ts.map +1 -1
  505. package/dist/uncertain-write.d.ts +156 -19
  506. package/dist/uncertain-write.d.ts.map +1 -1
  507. package/dist/uncertain-write.js +90 -31
  508. package/dist/uncertain-write.js.map +1 -1
  509. package/dist/versioning.d.ts +9 -4
  510. package/dist/versioning.d.ts.map +1 -1
  511. package/dist/versioning.js +9 -4
  512. package/dist/versioning.js.map +1 -1
  513. package/dist/write-identity.d.ts +5 -0
  514. package/dist/write-identity.d.ts.map +1 -0
  515. package/dist/write-identity.js +9 -0
  516. package/dist/write-identity.js.map +1 -0
  517. package/package.json +94 -2
@@ -0,0 +1,464 @@
1
+ /**
2
+ * The hosted client's durable intent store: a {@link HostedIntentStore} over a private
3
+ * `FileJournaledBackend` directory, so a process that exits with a write `unknown` finds it again
4
+ * (`heldWrites`) and settles it (`settleWrite`) after a restart. Node only; reached through
5
+ * `@superbee/core/hosted-client/node`.
6
+ *
7
+ * The directory holds the backend's own log and snapshot, in its supported on-disk format. Each
8
+ * held document write is one meta row, `hosted-client.write.<requestId>`, each held blob write
9
+ * one row of the backend's own blob intent family (`blobs`), and a marker row,
10
+ * `hosted-client.journal = { schemaVersion: 1 }`, names the directory as this store. The store's
11
+ * document, reserved-file and blob-file families stay empty: open refuses a directory holding any
12
+ * of them, or a checkout's blob-sync state, so a CLI checkout store is never adopted.
13
+ */
14
+ import { promises as fs } from "node:fs";
15
+ import path from "node:path";
16
+ import { FILE_JOURNAL_LOG, FILE_JOURNAL_SNAPSHOT, FileJournaledBackend, } from "../file-journaled-backend.js";
17
+ import { captureJournalValue, JournalGuardConflict } from "../journaled-backend.js";
18
+ import { decodePreparedBlobIntent } from "../blob-journal.js";
19
+ /** The marker row's key. */
20
+ export const HOSTED_CLIENT_JOURNAL_MARKER = "hosted-client.journal";
21
+ /** The schema this version of the client writes and reads. */
22
+ export const HOSTED_CLIENT_JOURNAL_SCHEMA_VERSION = 1;
23
+ /** The prefix of every held document write's meta row; the request identity follows it. */
24
+ export const HOSTED_CLIENT_WRITE_PREFIX = "hosted-client.write.";
25
+ /** How many times `delete` reads a row again after a concurrent put to it, before refusing. */
26
+ const DELETE_ATTEMPTS = 8;
27
+ /** The CLI's blob-sync map: a store holding it is a checkout store. */
28
+ const CHECKOUT_BLOB_SYNC_KEY = "hosted.blob-sync.v1";
29
+ /**
30
+ * The log is compacted into the snapshot once it is larger than the greater of this floor and
31
+ * twice the last snapshot, checked after every mutation. Settled writes leave the live state, so
32
+ * a steady stream of writes keeps the log under about this floor plus one record, and the work
33
+ * stays linear when unsettled writes hold the snapshot large.
34
+ */
35
+ export const HOSTED_CLIENT_JOURNAL_COMPACT_FLOOR_BYTES = 1024 * 1024;
36
+ /** Open refused the directory; nothing in it was changed. */
37
+ export class HostedClientJournalError extends Error {
38
+ name = "HostedClientJournalError";
39
+ code;
40
+ directory;
41
+ /** With `JOURNAL_SCHEMA_UNSUPPORTED`: the marker's `schemaVersion`, as found. */
42
+ schemaVersion;
43
+ constructor(code, directory, message, options = {}) {
44
+ super(message);
45
+ this.code = code;
46
+ this.directory = directory;
47
+ if ("schemaVersion" in options)
48
+ this.schemaVersion = options.schemaVersion;
49
+ }
50
+ }
51
+ /** True when `error` is a {@link HostedClientJournalError}, with `code` when one is named. */
52
+ export function isHostedClientJournalError(error, code) {
53
+ return error instanceof HostedClientJournalError && (code === undefined || error.code === code);
54
+ }
55
+ /**
56
+ * Open (or create) the hosted client's durable intent store in `directory`.
57
+ *
58
+ * Refusals change no file in an existing directory:
59
+ * - {@link HostedClientJournalError} — the directory is not private (a symbolic link, another
60
+ * owner, group or other permission bits), holds files but no store, is not this client's
61
+ * store, or names a newer schema;
62
+ * - `FilesystemMutationLockError` — another process holds the directory past `lock.waitMs`;
63
+ * - `FileJournalCorruptError` / `FileJournalFormatError` — the log or snapshot is damaged or in a
64
+ * newer format. Nothing is repaired: moving the directory aside loses the writes it holds.
65
+ *
66
+ * The directory may hold only the backend's store files, each a regular file of its own. The
67
+ * decision is made on a read-only open, which changes nothing, and the directory, its listing,
68
+ * its files and its contents are checked again under the writable open's lock before the marker
69
+ * is written. Another process of the same user modifying the directory while it opens is out of
70
+ * scope: between the read-only decision and the writable lock, such a change can make the
71
+ * writable open truncate a torn or foreign log tail, remove a leftover snapshot temp, or create
72
+ * an empty log, and a foreign log truncated to nothing that way is adopted as an empty journal.
73
+ */
74
+ export function openHostedClientJournal(options) {
75
+ return openHostedClientJournalWith(options);
76
+ }
77
+ /**
78
+ * The only entries a journal's directory may hold: the files a `FileJournaledBackend` keeps.
79
+ * Nothing else is tolerated, not even an operating system's own files such as `.DS_Store`: the
80
+ * directory is the journal's alone, and a refusal is safer than adopting a directory in use.
81
+ */
82
+ const STORE_FILES = new Set([FILE_JOURNAL_LOG, FILE_JOURNAL_SNAPSHOT, "store.snapshot.tmp"]);
83
+ /** The backend's record frame magic, the first bytes of every record in its (supported) on-disk format. */
84
+ const RECORD_MAGIC = Buffer.from("SBJR", "latin1");
85
+ /**
86
+ * The longest torn first record a journal's own log can begin with: the marker record, the first
87
+ * a new journal writes, is a few hundred bytes, so its torn remains fit in one page.
88
+ */
89
+ const TORN_FIRST_RECORD_BYTES = 4096;
90
+ /** @internal {@link openHostedClientJournal} with its test seam. Not in the package's exports. */
91
+ export async function openHostedClientJournalWith(options, seam = {}) {
92
+ if (!options || typeof options.directory !== "string" || options.directory.trim() === "")
93
+ throw new TypeError("a hosted client journal names its directory");
94
+ const waitMs = options.lock?.waitMs;
95
+ if (waitMs !== undefined && !(typeof waitMs === "number" && Number.isFinite(waitMs) && waitMs >= 0))
96
+ throw new TypeError("lock.waitMs is a finite number of milliseconds, 0 or more");
97
+ const directory = path.resolve(options.directory);
98
+ const open = seam.openBackend ?? ((backendOptions) => FileJournaledBackend.open(backendOptions));
99
+ const backendOptions = (readOnly) => ({
100
+ directory,
101
+ // Never compact before the store is adopted: a refused store keeps its files as they were.
102
+ compactAfterBytes: Number.POSITIVE_INFINITY,
103
+ lock: { ...(waitMs !== undefined ? { waitMs } : {}), ...(seam.lockRoot !== undefined ? { lockRoot: seam.lockRoot } : {}) },
104
+ ...(readOnly ? { readOnly } : {}),
105
+ });
106
+ let identity = await privateDirectory(directory, { mayBeAbsent: true });
107
+ let created = false;
108
+ if (!identity) {
109
+ await seam.window?.("before-create");
110
+ // Create it here rather than in the backend, so a directory that appears in the meantime is
111
+ // found (EEXIST) and checked as an existing one instead of having a log created inside it.
112
+ await fs.mkdir(path.dirname(directory), { recursive: true, mode: 0o700 });
113
+ try {
114
+ await fs.mkdir(directory, { mode: 0o700 });
115
+ await syncDirectory(path.dirname(directory));
116
+ created = true;
117
+ }
118
+ catch (error) {
119
+ if (error.code !== "EEXIST")
120
+ throw error;
121
+ }
122
+ identity = await privateDirectory(directory, { mayBeAbsent: false });
123
+ }
124
+ if (!created) {
125
+ await assertStoreFilesOnly(directory);
126
+ // Decide on a read-only open first, which changes no file.
127
+ const inspected = await open(backendOptions(true));
128
+ try {
129
+ await assertLogIsJournals(directory, inspected);
130
+ await inspect(inspected, directory);
131
+ }
132
+ finally {
133
+ await inspected.close();
134
+ }
135
+ }
136
+ await seam.window?.("before-writable-open");
137
+ const backend = await open(backendOptions(false));
138
+ try {
139
+ // The lock is held from here: the directory must still be the private, journal-only one checked above.
140
+ const held = await privateDirectory(directory, { mayBeAbsent: false });
141
+ if (held.ino !== identity.ino || held.dev !== identity.dev) {
142
+ throw new HostedClientJournalError("JOURNAL_DIRECTORY_NOT_PRIVATE", directory, `'${directory}' was replaced while the journal opened`);
143
+ }
144
+ await assertStoreFilesOnly(directory);
145
+ if ((await inspect(backend, directory)) === "empty") {
146
+ await backend.writeMeta(HOSTED_CLIENT_JOURNAL_MARKER, { schemaVersion: HOSTED_CLIENT_JOURNAL_SCHEMA_VERSION }, { expected: { present: false }, requireEmptyJournal: true });
147
+ }
148
+ const journal = new FileHostedClientJournal(backend, await fileSize(path.join(directory, FILE_JOURNAL_SNAPSHOT)));
149
+ await journal.compactIfDue();
150
+ return journal;
151
+ }
152
+ catch (error) {
153
+ await backend.close().catch(() => { });
154
+ throw error;
155
+ }
156
+ }
157
+ /** Make a directory entry durable; Windows cannot flush a directory handle, and journals its own metadata. */
158
+ async function syncDirectory(directory) {
159
+ if (process.platform === "win32")
160
+ return;
161
+ const handle = await fs.open(directory, "r");
162
+ try {
163
+ await handle.sync();
164
+ }
165
+ finally {
166
+ await handle.close();
167
+ }
168
+ }
169
+ /**
170
+ * The directory holds only store files, a leftover snapshot temp only beside a log, and each
171
+ * store file is this directory's own: a regular file (not a symbolic link or a directory) with
172
+ * one link, owned on POSIX by this user. The lock is keyed by directory, so a store file linked
173
+ * into another directory would let two journals append to one log at once.
174
+ */
175
+ async function assertStoreFilesOnly(directory) {
176
+ const names = await fs.readdir(directory);
177
+ const stray = names.filter((name) => !STORE_FILES.has(name));
178
+ if (stray.length > 0 || (names.includes("store.snapshot.tmp") && !names.includes(FILE_JOURNAL_LOG))) {
179
+ throw new HostedClientJournalError("JOURNAL_NOT_HOSTED_CLIENT", directory, `'${directory}' holds files that are not a journal's (${stray.length > 0 ? stray.join(", ") : "a snapshot temp with no log"}); a hosted client journal is an empty or journal-only directory`);
180
+ }
181
+ for (const name of names) {
182
+ let stat;
183
+ try {
184
+ stat = await fs.lstat(path.join(directory, name));
185
+ }
186
+ catch (error) {
187
+ if (error.code === "ENOENT")
188
+ continue;
189
+ throw error;
190
+ }
191
+ const why = stat.isSymbolicLink()
192
+ ? "is a symbolic link"
193
+ : !stat.isFile()
194
+ ? "is not a regular file"
195
+ : stat.nlink !== 1
196
+ ? `has ${stat.nlink} links`
197
+ : process.platform !== "win32" && typeof process.getuid === "function" && stat.uid !== process.getuid()
198
+ ? `is owned by uid ${stat.uid}`
199
+ : undefined;
200
+ if (why)
201
+ throw new HostedClientJournalError("JOURNAL_NOT_HOSTED_CLIENT", directory, `'${path.join(directory, name)}' ${why}; a hosted client journal's files are its own`);
202
+ }
203
+ }
204
+ /**
205
+ * A log that holds no whole record and has no snapshot beside it must be what a journal's own
206
+ * crash leaves: nothing, zeros (an extension whose data never landed), or the torn start of its
207
+ * first record, which begins with the record magic and fits in a page. Any other bytes are a
208
+ * foreign file named `store.log`, which the writable open would truncate.
209
+ */
210
+ async function assertLogIsJournals(directory, backend) {
211
+ if (backend.transaction > 0 || (await fileSize(path.join(directory, FILE_JOURNAL_SNAPSHOT))) > 0)
212
+ return;
213
+ let head;
214
+ try {
215
+ const handle = await fs.open(path.join(directory, FILE_JOURNAL_LOG), "r");
216
+ try {
217
+ const buffer = Buffer.alloc(TORN_FIRST_RECORD_BYTES + 1);
218
+ const { bytesRead } = await handle.read(buffer, 0, buffer.byteLength, 0);
219
+ head = buffer.subarray(0, bytesRead);
220
+ }
221
+ finally {
222
+ await handle.close();
223
+ }
224
+ }
225
+ catch (error) {
226
+ if (error.code === "ENOENT")
227
+ return;
228
+ throw error;
229
+ }
230
+ if (head.byteLength === 0)
231
+ return;
232
+ const prefix = Math.min(head.byteLength, RECORD_MAGIC.byteLength);
233
+ const journals = head.byteLength <= TORN_FIRST_RECORD_BYTES && (head.every((byte) => byte === 0) || head.subarray(0, prefix).equals(RECORD_MAGIC.subarray(0, prefix)));
234
+ if (!journals)
235
+ throw new HostedClientJournalError("JOURNAL_NOT_HOSTED_CLIENT", directory, `'${directory}' holds a store.log that is not a journal's log`);
236
+ }
237
+ /**
238
+ * The directory's identity when it is a real directory private to this user, or undefined when
239
+ * it is absent and may be (the backend then creates it 0700). Windows has no POSIX mode bits or
240
+ * uids; its ACLs are the distribution's to check.
241
+ */
242
+ async function privateDirectory(directory, options) {
243
+ let stat;
244
+ try {
245
+ stat = await fs.lstat(directory);
246
+ }
247
+ catch (error) {
248
+ if (error.code === "ENOENT" && options.mayBeAbsent)
249
+ return undefined;
250
+ throw error;
251
+ }
252
+ const refuse = (why) => new HostedClientJournalError("JOURNAL_DIRECTORY_NOT_PRIVATE", directory, `'${directory}' ${why}; a hosted client journal is a real directory of mode 0700 owned by this user`);
253
+ if (stat.isSymbolicLink())
254
+ throw refuse("is a symbolic link");
255
+ if (!stat.isDirectory())
256
+ throw refuse("is not a directory");
257
+ if (process.platform !== "win32") {
258
+ if (typeof process.getuid === "function" && stat.uid !== process.getuid())
259
+ throw refuse(`is owned by uid ${stat.uid}`);
260
+ if ((stat.mode & 0o077) !== 0)
261
+ throw refuse(`grants its group or others access (mode ${(stat.mode & 0o777).toString(8)})`);
262
+ }
263
+ return { dev: stat.dev, ino: stat.ino };
264
+ }
265
+ /**
266
+ * Whether the open store is this client's: `marked` (a marker of a known schema, none of a
267
+ * checkout's state) or `empty` (nothing at all, to be marked). Anything else is refused.
268
+ *
269
+ * The caller marks an empty store with `writeMeta(expected: absent, requireEmptyJournal)`. That
270
+ * write re-checks only the marker and the intents family; what makes the whole empty check hold
271
+ * is the directory's exclusive lock, held from this check through that write, with no other
272
+ * caller of the backend in between. A crash between the two leaves either nothing or a torn
273
+ * marker record, which open truncates, so the next open finds the store empty and marks it.
274
+ */
275
+ async function inspect(backend, directory) {
276
+ const meta = await backend.listMeta();
277
+ const foreign = (await backend.list()).length > 0 ||
278
+ (await backend.listBlobs()).length > 0 ||
279
+ (await backend.readReserved("", "index.md")) !== null ||
280
+ (await backend.readReserved("", "log.md")) !== null ||
281
+ (await backend.listIntents()).length > 0 ||
282
+ meta.some((row) => row.key === CHECKOUT_BLOB_SYNC_KEY);
283
+ if (foreign)
284
+ throw new HostedClientJournalError("JOURNAL_NOT_HOSTED_CLIENT", directory, `'${directory}' holds documents or a checkout's state; it is not a hosted client journal`);
285
+ const marker = meta.find((row) => row.key === HOSTED_CLIENT_JOURNAL_MARKER);
286
+ if (marker) {
287
+ const schemaVersion = typeof marker.value === "object" && marker.value !== null ? marker.value.schemaVersion : undefined;
288
+ if (schemaVersion !== HOSTED_CLIENT_JOURNAL_SCHEMA_VERSION) {
289
+ throw new HostedClientJournalError("JOURNAL_SCHEMA_UNSUPPORTED", directory, `'${directory}' is a hosted client journal of schema ${String(schemaVersion)}; this version reads schema ${HOSTED_CLIENT_JOURNAL_SCHEMA_VERSION}`, { schemaVersion });
290
+ }
291
+ return "marked";
292
+ }
293
+ if (meta.length > 0 || (await backend.listBlobIntents()).length > 0) {
294
+ throw new HostedClientJournalError("JOURNAL_NOT_HOSTED_CLIENT", directory, `'${directory}' holds a store with no hosted client journal marker`);
295
+ }
296
+ return "empty";
297
+ }
298
+ async function fileSize(file) {
299
+ try {
300
+ return (await fs.stat(file)).size;
301
+ }
302
+ catch (error) {
303
+ if (error.code === "ENOENT")
304
+ return 0;
305
+ throw error;
306
+ }
307
+ }
308
+ function keyOf(requestId) {
309
+ if (typeof requestId !== "string" || requestId === "")
310
+ throw new TypeError("a held write names its request identity");
311
+ return `${HOSTED_CLIENT_WRITE_PREFIX}${requestId}`;
312
+ }
313
+ /** A blob mutation's metadata may never write this journal's own rows or a checkout's state. */
314
+ function assertClientBlobMeta(options) {
315
+ const keys = [...(options?.meta ?? []).map((row) => row?.key), ...(options?.removeMeta ?? [])];
316
+ if (keys.some((key) => typeof key === "string" && (key.startsWith("hosted-client.") || key === CHECKOUT_BLOB_SYNC_KEY))) {
317
+ throw new TypeError("a blob write's metadata may not name the hosted client journal's own rows or a checkout's blob-sync state");
318
+ }
319
+ }
320
+ class FileHostedClientJournal {
321
+ directory;
322
+ blobs;
323
+ #backend;
324
+ #snapshotBytes;
325
+ #compacting = null;
326
+ constructor(backend, snapshotBytes) {
327
+ this.#backend = backend;
328
+ this.directory = backend.directory;
329
+ this.#snapshotBytes = snapshotBytes;
330
+ this.blobs = this.#blobFacade();
331
+ }
332
+ /**
333
+ * The backend's blob verbs, with compaction after each mutation. A blob intent carries its
334
+ * bytes in every record of its life, so removing one that does (a retire or a forget of a
335
+ * create or replace) leaves those bytes dead in the snapshot and log: compact then whenever
336
+ * either is past the floor, rather than waiting for the log to outgrow twice the snapshot.
337
+ */
338
+ #blobFacade() {
339
+ const backend = this.#backend;
340
+ const carriesBytes = async (requestIds) => {
341
+ for (const id of requestIds) {
342
+ const row = typeof id === "string" ? await backend.readBlobIntent(id).catch(() => undefined) : undefined;
343
+ if (row && decodePreparedBlobIntent(row.prepared).bytesBase64 !== undefined)
344
+ return true;
345
+ }
346
+ return false;
347
+ };
348
+ return Object.freeze({
349
+ readBlobWithJournal: (key, options) => backend.readBlobWithJournal(key, options),
350
+ listBlobIntents: (state) => backend.listBlobIntents(state),
351
+ readBlobIntent: (requestId) => backend.readBlobIntent(requestId),
352
+ writeBlobMeta: async (key, changes, options) => {
353
+ assertClientBlobMeta(changes);
354
+ await backend.writeBlobMeta(key, changes, options);
355
+ await this.compactIfDue();
356
+ },
357
+ admitPreparedBlob: async (prepared, options) => {
358
+ assertClientBlobMeta(options);
359
+ const row = await backend.admitPreparedBlob(prepared, options);
360
+ await this.compactIfDue();
361
+ return row;
362
+ },
363
+ updateBlobIntent: async (requestId, expectedState, patch, options) => {
364
+ assertClientBlobMeta(options);
365
+ const row = await backend.updateBlobIntent(requestId, expectedState, patch, options);
366
+ await this.compactIfDue();
367
+ return row;
368
+ },
369
+ retireBlobIntents: async (key, requestIds, options) => {
370
+ assertClientBlobMeta(options);
371
+ const reclaim = await carriesBytes(requestIds);
372
+ await backend.retireBlobIntents(key, requestIds, options);
373
+ await this.compactIfDue(reclaim);
374
+ },
375
+ forgetBlobIntent: async (requestId, options) => {
376
+ assertClientBlobMeta(options);
377
+ const reclaim = await carriesBytes([requestId]);
378
+ await backend.forgetBlobIntent(requestId, options);
379
+ await this.compactIfDue(reclaim);
380
+ },
381
+ });
382
+ }
383
+ async put(intent) {
384
+ if (typeof intent !== "object" || intent === null)
385
+ throw new TypeError("a held write is a record");
386
+ const key = keyOf(intent.requestId);
387
+ let record;
388
+ try {
389
+ // Only plain data is held, so the row can later be removed compare-and-swap against itself.
390
+ record = captureJournalValue({ ...intent });
391
+ }
392
+ catch (cause) {
393
+ throw new TypeError("a held write holds only strings, numbers, booleans, null and plain records", { cause });
394
+ }
395
+ await this.#backend.writeMeta(key, record);
396
+ await this.compactIfDue();
397
+ }
398
+ async get(requestId) {
399
+ const value = await this.#backend.readMeta(keyOf(requestId));
400
+ return value === undefined ? undefined : Object.freeze(value);
401
+ }
402
+ async delete(requestId) {
403
+ const key = keyOf(requestId);
404
+ // Compare-and-swap against the row as read. A put to this key landing in between is read
405
+ // again, a bounded number of times; any other refusal is the caller's.
406
+ for (let attempt = 1;; attempt++) {
407
+ const current = await this.#backend.readMeta(key);
408
+ if (current === undefined)
409
+ return;
410
+ try {
411
+ await this.#backend.removeMeta(key, { expected: { present: true, value: current } });
412
+ break;
413
+ }
414
+ catch (error) {
415
+ if (!(error instanceof JournalGuardConflict) || error.target !== key || attempt >= DELETE_ATTEMPTS)
416
+ throw error;
417
+ }
418
+ }
419
+ await this.compactIfDue();
420
+ }
421
+ async *list() {
422
+ const rows = await this.#backend.listMeta(HOSTED_CLIENT_WRITE_PREFIX);
423
+ const intents = rows.map((row) => row.value);
424
+ intents.sort((a, b) => (a.createdAt < b.createdAt ? -1 : a.createdAt > b.createdAt ? 1 : a.requestId < b.requestId ? -1 : a.requestId > b.requestId ? 1 : 0));
425
+ for (const intent of intents)
426
+ yield Object.freeze(intent);
427
+ }
428
+ close() {
429
+ return this.#backend.close();
430
+ }
431
+ /**
432
+ * Compact when the log has outgrown the live state (see
433
+ * {@link HOSTED_CLIENT_JOURNAL_COMPACT_FLOOR_BYTES}), or, with `reclaim` (a removal that freed
434
+ * blob bytes), when the log or the snapshot is past the floor. The mutation before it is already durable,
435
+ * so a failed compaction only leaves the log longer: it is not the caller's failure, and the
436
+ * next mutation tries again.
437
+ */
438
+ async compactIfDue(reclaim = false) {
439
+ if (this.#compacting && !reclaim)
440
+ return;
441
+ // A reclaim must not be lost to a compaction that began before its removal committed.
442
+ while (this.#compacting)
443
+ await this.#compacting;
444
+ this.#compacting = (async () => {
445
+ try {
446
+ const logBytes = await fileSize(path.join(this.directory, FILE_JOURNAL_LOG));
447
+ const floor = HOSTED_CLIENT_JOURNAL_COMPACT_FLOOR_BYTES;
448
+ const due = logBytes > Math.max(floor, 2 * this.#snapshotBytes) || (reclaim && (logBytes > floor || this.#snapshotBytes > floor));
449
+ if (!due)
450
+ return;
451
+ await this.#backend.compact();
452
+ this.#snapshotBytes = await fileSize(path.join(this.directory, FILE_JOURNAL_SNAPSHOT));
453
+ }
454
+ catch {
455
+ // Durable already; see above.
456
+ }
457
+ finally {
458
+ this.#compacting = null;
459
+ }
460
+ })();
461
+ await this.#compacting;
462
+ }
463
+ }
464
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/hosted-client/journal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * `@superbee/core/hosted-client/node`: the hosted client's Node-only half, a supported public API
3
+ * under core's normal versioning. It holds the durable intent store (`openHostedClientJournal`,
4
+ * in `journal.ts`), and it downloads a hosted bundle's portable export
5
+ * (`<prefix>/export`) and verifies it with `@superbee/core/portable-export`, whose digests and
6
+ * file placement need Node, so it is kept off the browser-safe `@superbee/core/hosted-client`.
7
+ *
8
+ * The result is a verified export or a typed failure, never files: a stopped, tampered or
9
+ * oversized export is refused before anything is returned, and placing the verified entries is
10
+ * the caller's (`materializeExport`, or its own staging).
11
+ */
12
+ import { type VerifiedExport } from "../portable-export.js";
13
+ import type { HostedClient } from "./client.js";
14
+ export { ExportArchiveError, MAX_EXPORT_BYTES, type VerifiedExport } from "../portable-export.js";
15
+ export { HOSTED_CLIENT_JOURNAL_COMPACT_FLOOR_BYTES, HOSTED_CLIENT_JOURNAL_SCHEMA_VERSION, HostedClientJournalError, isHostedClientJournalError, openHostedClientJournal, type HostedClientJournal, type HostedClientJournalOptions, type HostedClientJournalProblem, } from "./journal.js";
16
+ export { FileJournalCorruptError, FileJournalFormatError, FileJournalUnavailableError } from "../file-journaled-backend.js";
17
+ export { FilesystemMutationLockError } from "../filesystem-lock.js";
18
+ /**
19
+ * The host's export window: an export (or one page of a paged one) is answered within 60 s. A
20
+ * client that downloads exports should be created with at least this `deadlineMs`; the default
21
+ * 15 s read deadline would cut a large bundle.
22
+ */
23
+ export declare const EXPORT_WINDOW_MS = 60000;
24
+ /**
25
+ * Why a download was refused, apart from the host's refusals and the verifier's:
26
+ * `stopped` — the answer's body failed part way (the network, or the carrier's idle deadline), so
27
+ * the same request may succeed; `too_large` — the answer ran past what an export carries
28
+ * ({@link MAX_EXPORT_BYTES} in all); `source_changed` — the bundle kept changing between the pages
29
+ * of a paged export, every attempt.
30
+ */
31
+ export type HostedExportProblem = "stopped" | "too_large" | "source_changed";
32
+ export declare class HostedExportError extends Error {
33
+ readonly name = "HostedExportError";
34
+ readonly problem: HostedExportProblem;
35
+ readonly bundleId: string;
36
+ /** With `too_large`: the bound the answer ran past, in bytes. */
37
+ readonly maximum?: number;
38
+ constructor(problem: HostedExportProblem, bundleId: string, message: string, options?: {
39
+ cause?: unknown;
40
+ maximum?: number;
41
+ });
42
+ }
43
+ /** True when `error` is a {@link HostedExportError}, with `problem` when one is named. */
44
+ export declare function isHostedExportError(error: unknown, problem?: HostedExportProblem): error is HostedExportError;
45
+ export interface DownloadExportOptions {
46
+ /** Aborting it stops the download; it is thrown as the signal's reason. The client's own signal applies too. */
47
+ readonly signal?: AbortSignal;
48
+ }
49
+ /** What a download needs of a client: its carrier, its sync prefix and its signal. A `within` client qualifies the bundle. */
50
+ export type HostedExportClient = Pick<HostedClient, "carrier" | "prefix" | "signal">;
51
+ /**
52
+ * The verified portable export of `bundleId` at its latest confirmed revision: every document,
53
+ * reserved file and blob, byte for byte, read whole and checked against the host's digest
54
+ * manifests before it is returned.
55
+ *
56
+ * A host that pages the export answers it a page at a time; each page is verified as it arrives,
57
+ * checked against the pages before it, and the pages are joined (`ExportPageChain`). A host from
58
+ * before paging refuses the paged request as `invalid_input`, and the whole bundle is then read as
59
+ * one archive. A bundle that changes between pages (`concurrent_change`) is read again from its
60
+ * first page, up to three attempts. A page the host was too busy for (`backend_unavailable`, its
61
+ * one export slot) or stopped part way is asked for once more.
62
+ *
63
+ * Failures are typed:
64
+ * - `HostedCarrierError` — transport (the request may not have been answered);
65
+ * - `HostedRouteNotServed` — a host from before the export route;
66
+ * - `RemoteError` — the host's refusal, with its code and status (`bundle_not_found`,
67
+ * `result_too_large`, `validation_failed`, `unauthenticated` and so on);
68
+ * - `ExportArchiveError` — the verifier refused the archive (`incomplete` when the host stopped it);
69
+ * - {@link HostedExportError} — the answer stopped part way, ran past {@link MAX_EXPORT_BYTES}, or
70
+ * the bundle kept changing;
71
+ * - the signal's reason, once `options.signal` or the client's signal aborts.
72
+ */
73
+ export declare function downloadExport(client: HostedExportClient, bundleId: string, options?: DownloadExportOptions): Promise<VerifiedExport>;
74
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/hosted-client/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EACL,yCAAyC,EACzC,oCAAoC,EACpC,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,GAChC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC5H,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAC;AASvC;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAE7E,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAkB,IAAI,uBAAuB;IAC7C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBACd,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;CAMjI;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,KAAK,IAAI,iBAAiB,CAE7G;AAED,MAAM,WAAW,qBAAqB;IACpC,gHAAgH;IAChH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,8HAA8H;AAC9H,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,cAAc,CAAC,CA4C/I"}