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

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 +94 -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 +75 -0
  312. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
  313. package/dist/recipe-lifecycle/evolution.js +789 -0
  314. package/dist/recipe-lifecycle/evolution.js.map +1 -0
  315. package/dist/recipe-lifecycle/index.d.ts +24 -0
  316. package/dist/recipe-lifecycle/index.d.ts.map +1 -0
  317. package/dist/recipe-lifecycle/index.js +20 -0
  318. package/dist/recipe-lifecycle/index.js.map +1 -0
  319. package/dist/recipe-lifecycle/install.d.ts +126 -0
  320. package/dist/recipe-lifecycle/install.d.ts.map +1 -0
  321. package/dist/recipe-lifecycle/install.js +511 -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,598 @@
1
+ /**
2
+ * The observation loop: run a profile page by page behind the guarded transport, diff each page
3
+ * against the stored records into record-overlay changes, hand them to the caller's commit, and
4
+ * only then store the cursor and the records. A change the commit asks to retry stays pending in
5
+ * the machine state and is planned again before the next run fetches anything, so the cursor
6
+ * never waits on one record. A pass counts as a complete observation only when it ran in complete
7
+ * mode from no cursor to its last page within this run, the profile claimed it complete and the
8
+ * source is declared complete; only a complete observation counts a stored record as missing, and
9
+ * a record is `disappeared` after `missing_threshold` of them.
10
+ */
11
+ import { changeBetween, findingsFor, mapRecord } from "../connectors.js";
12
+ import { overlayCanonicalJson } from "../record-overlay/canonical.js";
13
+ import { DEFAULT_SOURCE_BUDGET, DEFAULT_STATUS_RULES, guardTransport, raceAbort, sourceHostSet, SourceStop } from "./guard.js";
14
+ import { isSourceState } from "./machine-state.js";
15
+ /** Complete observations without a record before it is `disappeared`, when the feed names none. */
16
+ export const DEFAULT_MISSING_THRESHOLD = 2;
17
+ /** The largest stored cursor, as canonical JSON characters. */
18
+ export const MAX_CURSOR_CHARS = 8192;
19
+ /**
20
+ * Replays of a pending change whose commit threw, after which the change is dropped with a finding:
21
+ * the record is planned again when it is next observed.
22
+ */
23
+ export const MAX_REPLAY_FAILURES = 5;
24
+ const PROFILE_ID = /^[a-z][a-z0-9-]*$/;
25
+ const UNSUPPORTED_CONTENT = "SOURCE_UNSUPPORTED_CONTENT";
26
+ /** Thrown by a profile that cannot read a provider's body; the run ends `unsupported_content`. */
27
+ export function unsupportedContent(detail) {
28
+ throw Object.assign(new Error(`unsupported content: ${detail}`), { code: UNSUPPORTED_CONTENT, detail });
29
+ }
30
+ const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
31
+ const clip = (text, n) => (text.length > n ? text.slice(0, n - 1) + "…" : text);
32
+ /** JSON data only: finite numbers, plain objects and arrays, no undefined members. */
33
+ function isJsonData(value, depth = 0) {
34
+ if (depth > 32)
35
+ return false;
36
+ if (value === null || typeof value === "string" || typeof value === "boolean")
37
+ return true;
38
+ if (typeof value === "number")
39
+ return Number.isFinite(value);
40
+ if (Array.isArray(value))
41
+ return value.every((item) => isJsonData(item, depth + 1));
42
+ if (!record(value))
43
+ return false;
44
+ // A plain object from any realm: its prototype is null or a prototype that itself has none.
45
+ const proto = Object.getPrototypeOf(value);
46
+ if (proto !== null && Object.getPrototypeOf(proto) !== null)
47
+ return false;
48
+ return Object.values(value).every((item) => item !== undefined && isJsonData(item, depth + 1));
49
+ }
50
+ function budgetOf(given) {
51
+ const budget = { ...DEFAULT_SOURCE_BUDGET, ...given };
52
+ // Timer delays above 2^31 - 1 milliseconds overflow to an immediate timeout.
53
+ const ok = ["requests", "maxBytes", "redirects", "pages", "deadlineMs", "requestTimeoutMs"].every((key) => Number.isInteger(budget[key])
54
+ && budget[key] >= (key === "redirects" ? 0 : 1) && budget[key] <= 2 ** 31 - 1);
55
+ return ok ? budget : undefined;
56
+ }
57
+ function statusesOf(given) {
58
+ const statuses = { ...DEFAULT_STATUS_RULES, ...given };
59
+ const ok = Object.values(statuses).every((list) => Array.isArray(list) && list.every((s) => Number.isInteger(s) && s >= 400 && s <= 599));
60
+ return ok ? statuses : undefined;
61
+ }
62
+ function profileProblem(profile) {
63
+ if (!record(profile))
64
+ return "not a profile";
65
+ if (typeof profile.id !== "string" || !PROFILE_ID.test(profile.id))
66
+ return "id is a slug";
67
+ if (!Number.isInteger(profile.version) || profile.version < 1)
68
+ return "version is a positive integer";
69
+ if (profile.kind !== "generic" && profile.kind !== "extension")
70
+ return "kind is generic or extension";
71
+ if (typeof profile.validateSpec !== "function" || typeof profile.hostsFor !== "function" || typeof profile.observe !== "function")
72
+ return "missing a method";
73
+ return undefined;
74
+ }
75
+ /** The page as the engine accepts it, or why not. */
76
+ function pageProblem(page) {
77
+ if (!record(page))
78
+ return "page_invalid";
79
+ if (!Array.isArray(page.records) || typeof page.more !== "boolean" || typeof page.complete !== "boolean")
80
+ return "page_invalid";
81
+ if (page.diagnostics !== undefined && !(Array.isArray(page.diagnostics) && page.diagnostics.every((d) => record(d) && typeof d.code === "string" && typeof d.message === "string")))
82
+ return "page_invalid";
83
+ if (page.validators !== undefined && !(record(page.validators) && Object.values(page.validators).every((v) => typeof v === "string")))
84
+ return "page_invalid";
85
+ const cursor = page.nextCursor === undefined ? null : page.nextCursor;
86
+ if (!isJsonData(cursor) || (overlayCanonicalJson(cursor) ?? "").length > MAX_CURSOR_CHARS)
87
+ return "cursor_invalid";
88
+ return undefined;
89
+ }
90
+ /**
91
+ * Diff one page against the stored records. Within a page the last occurrence of an id wins and is
92
+ * diffed against the stored entry, so every change's `before` is what the overlay last accepted.
93
+ */
94
+ function diffPage(state, page, bound, observedAt) {
95
+ const diagnostics = [];
96
+ const profileDiagnostics = [...(page.diagnostics ?? [])].map((d) => ({ ...d }));
97
+ const last = new Map();
98
+ const seen = new Set();
99
+ let notObjects = 0;
100
+ let duplicates = 0;
101
+ for (const raw of page.records) {
102
+ if (!record(raw)) {
103
+ notObjects += 1;
104
+ continue;
105
+ }
106
+ const mapped = mapRecord(bound.source, raw, bound.kind);
107
+ diagnostics.push(...mapped.diagnostics);
108
+ const id = mapped.external_id;
109
+ if (id === null)
110
+ continue;
111
+ seen.add(id);
112
+ if (last.has(id))
113
+ duplicates += 1;
114
+ last.set(id, mapped);
115
+ }
116
+ if (notObjects)
117
+ profileDiagnostics.push({ code: "RECORD_NOT_OBJECT", message: "records that are not JSON objects were skipped", count: notObjects });
118
+ if (duplicates)
119
+ profileDiagnostics.push({ code: "RECORD_DUPLICATE", message: "a page listed the same record more than once; the last one was used", count: duplicates });
120
+ const changes = [];
121
+ const entries = new Map();
122
+ for (const [id, mapped] of last) {
123
+ const stored = Object.hasOwn(state.records, id) ? state.records[id] : undefined;
124
+ if (mapped.kind === "refused") {
125
+ // Refused but present: still observed, so never missing; its accepted values stay.
126
+ if (stored)
127
+ entries.set(id, { ...stored, missing: 0, seen_at: observedAt, first_missing_at: undefined });
128
+ continue;
129
+ }
130
+ const previous = stored && !stored.gone ? stored.after : null;
131
+ const change = changeBetween(previous, mapped, { external_id: id, change_kind: previous === null ? "new" : "changed" });
132
+ entries.set(id, { after: change.after, digest: change.content_digest, missing: 0, seen_at: observedAt });
133
+ if (previous === null || change.changed_fields.length > 0)
134
+ changes.push(change);
135
+ }
136
+ return { changes, entries, seen, diagnostics, profileDiagnostics };
137
+ }
138
+ /** Disappearances at the end of a complete observation: every present record the pass did not list. */
139
+ function missingAfterComplete(records, seen, threshold, observedAt) {
140
+ const changes = [];
141
+ const entries = new Map();
142
+ for (const [id, entry] of Object.entries(records)) {
143
+ if (entry.gone || seen.has(id))
144
+ continue;
145
+ const missing = entry.missing + 1;
146
+ const firstMissingAt = entry.first_missing_at ?? observedAt;
147
+ if (missing >= threshold) {
148
+ entries.set(id, { ...entry, missing, first_missing_at: firstMissingAt, gone: true });
149
+ changes.push({
150
+ external_id: id, change_kind: "disappeared", changed_fields: [], before: { ...entry.after }, after: null,
151
+ content_digest: entry.digest, missing_count: missing, first_missing_at: firstMissingAt,
152
+ });
153
+ }
154
+ else {
155
+ entries.set(id, { ...entry, missing, first_missing_at: firstMissingAt });
156
+ }
157
+ }
158
+ return { changes, entries };
159
+ }
160
+ /** Drop `undefined` members so the stored state is plain JSON. */
161
+ function entryJson(entry) {
162
+ const { first_missing_at: firstMissingAt, gone, ...rest } = entry;
163
+ return { ...rest, ...(firstMissingAt !== undefined ? { first_missing_at: firstMissingAt } : {}), ...(gone ? { gone } : {}) };
164
+ }
165
+ function emptyState(profile) {
166
+ return { v: 1, profile: { id: profile.id, version: profile.version }, cursor: null, open: false, records: {}, complete_observations: 0 };
167
+ }
168
+ const OUTCOME_TEXT = {
169
+ deferred: "the provider asked to slow down; the run stopped and resumes from the last committed page",
170
+ credential_refused: "the provider refused the credential; runs stay stopped until the credential changes",
171
+ provider_unavailable: "the provider did not answer usefully; nothing past the last committed page was read",
172
+ not_found: "the provider says the resource does not exist",
173
+ unsupported_content: "the provider sent a body the profile cannot read; nothing from it was written",
174
+ too_large: "the provider sent a body over the byte bound; nothing from it was written",
175
+ refused: "a request was refused before it was sent",
176
+ failed: "the run failed before its page was stored",
177
+ };
178
+ /** One finding for a run that did not end as observed, keyed so a repeat collapses into one Signal. */
179
+ function outcomeFinding(source, stop, url) {
180
+ if (stop.outcome === "observed" || (stop.outcome === "deferred" && (stop.reason === "budget" || stop.reason === "deadline")))
181
+ return null;
182
+ const where = url ? ` (${clip(url, 160)})` : "";
183
+ const status = stop.status !== undefined ? ` Status ${stop.status}.` : "";
184
+ return {
185
+ key: `source:${source}:${stop.outcome}${stop.reason ? `:${stop.reason}` : ""}`,
186
+ title: clip(`Source ${source}: ${stop.outcome.replaceAll("_", " ")}${stop.reason ? ` (${stop.reason.replaceAll("_", " ")})` : ""}`, 140),
187
+ summary: clip(`${OUTCOME_TEXT[stop.outcome] ?? stop.outcome}.${status}${where}`, 600),
188
+ priority: stop.outcome === "credential_refused" || stop.outcome === "refused" || stop.outcome === "failed" ? "normal" : "low",
189
+ facts: { outcome: stop.outcome, reason: stop.reason ?? null, status: stop.status ?? null },
190
+ };
191
+ }
192
+ /** A URL as a finding shows it: scheme, host and path, never the query. */
193
+ function findingUrl(url) {
194
+ if (!url)
195
+ return undefined;
196
+ try {
197
+ const parsed = new URL(url);
198
+ return `${parsed.protocol}//${parsed.host}${parsed.pathname}`;
199
+ }
200
+ catch {
201
+ return undefined;
202
+ }
203
+ }
204
+ /** The ids a commit did not write, read defensively. */
205
+ function commitResult(result) {
206
+ const ids = (value) => (Array.isArray(value) ? value.filter((id) => typeof id === "string") : []);
207
+ const retry = new Set(record(result) ? ids(result.retry) : []);
208
+ const hold = new Set((record(result) ? ids(result.hold) : []).filter((id) => !retry.has(id)));
209
+ return { hold, retry };
210
+ }
211
+ /**
212
+ * Run one observation of a bound Source Feed. Returns a receipt; never throws for a provider,
213
+ * profile, guard or commit problem, which all end the run with an outcome and a finding.
214
+ */
215
+ export async function observeSource(options) {
216
+ const now = options.now ?? (() => new Date());
217
+ const observedAt = now().toISOString();
218
+ const { bound, connector } = options;
219
+ const profile = options.profile;
220
+ const requestedMode = options.mode ?? "incremental";
221
+ const receipt = {
222
+ feed: bound.policy.feed,
223
+ provider: bound.policy.provider,
224
+ source: bound.source.name,
225
+ profile: { id: String(profile?.id), version: Number(profile?.version) },
226
+ mode: requestedMode,
227
+ observed_at: observedAt,
228
+ outcome: "observed",
229
+ retry: true,
230
+ pages: 0,
231
+ held: 0,
232
+ pending: 0,
233
+ requests: [],
234
+ pass: { resumed: false, ended: false, complete: false },
235
+ changes: { new: 0, changed: 0, disappeared: 0 },
236
+ cursor: null,
237
+ diagnostics: [],
238
+ profile_diagnostics: [],
239
+ findings: [],
240
+ };
241
+ let stop;
242
+ let stopUrl;
243
+ const extraFindings = [];
244
+ const finish = () => {
245
+ if (stop) {
246
+ receipt.outcome = stop.outcome;
247
+ receipt.retry = stop.retry;
248
+ if (stop.reason !== undefined)
249
+ receipt.reason = stop.reason;
250
+ if (stop.detail !== undefined)
251
+ receipt.detail = clip(stop.detail, 300);
252
+ if (stop.status !== undefined)
253
+ receipt.status = stop.status;
254
+ if (stop.retry_after !== undefined)
255
+ receipt.retry_after = stop.retry_after;
256
+ }
257
+ const mapping = findingsFor(receipt.diagnostics, { source: bound.source.name });
258
+ const outcome = stop ? outcomeFinding(bound.source.name, stop, findingUrl(stopUrl)) : null;
259
+ receipt.findings = [...(outcome ? [outcome] : []), ...extraFindings, ...mapping];
260
+ return receipt;
261
+ };
262
+ const refuse = (reason, detail) => {
263
+ stop = { outcome: "refused", reason, retry: false, ...(detail !== undefined ? { detail } : {}) };
264
+ return finish();
265
+ };
266
+ const errorText = (error) => (error instanceof Error ? error.message : String(error));
267
+ const problem = profileProblem(profile);
268
+ if (problem)
269
+ return refuse("profile_invalid", problem);
270
+ if (profile.id !== bound.source.profile)
271
+ return refuse("profile_mismatch", `the source names ${bound.source.profile}`);
272
+ if (requestedMode !== "incremental" && requestedMode !== "complete")
273
+ return refuse("mode_invalid");
274
+ const budget = budgetOf(options.budget);
275
+ if (!budget)
276
+ return refuse("budget_invalid");
277
+ const statuses = statusesOf(options.statuses);
278
+ if (!statuses)
279
+ return refuse("statuses_invalid");
280
+ const identity = options.identity;
281
+ if (!record(identity) || typeof identity.userAgent !== "string" || !/^[\x20-\x7e]{1,512}$/.test(identity.userAgent)
282
+ || typeof identity.productToken !== "string" || !/^[A-Za-z_-]{1,64}$/.test(identity.productToken))
283
+ return refuse("identity_invalid");
284
+ let spec;
285
+ let hosts;
286
+ try {
287
+ const checked = profile.validateSpec(options.spec);
288
+ if (!checked.ok)
289
+ return refuse("spec_invalid", checked.errors.map((e) => `${e.path} ${e.message}`).join("; "));
290
+ spec = checked.spec;
291
+ hosts = profile.hostsFor(spec, bound);
292
+ }
293
+ catch (error) {
294
+ stop = { outcome: "failed", reason: "profile_error", retry: false, detail: errorText(error) };
295
+ return finish();
296
+ }
297
+ if (!Array.isArray(hosts) || !hosts.every((host) => typeof host === "string"))
298
+ return refuse("hosts_invalid");
299
+ const hostSet = sourceHostSet(connector, hosts);
300
+ if (!hostSet.ok)
301
+ return refuse("hosts_undeclared", hostSet.undeclared.join(", "));
302
+ const key = bound.policy.feed;
303
+ let version;
304
+ let state;
305
+ try {
306
+ const stored = await options.state.read(key);
307
+ if (stored && !isSourceState(stored.state)) {
308
+ stop = { outcome: "failed", reason: "state_invalid", retry: false };
309
+ return finish();
310
+ }
311
+ version = stored?.version ?? null;
312
+ state = stored?.state ?? emptyState(profile);
313
+ }
314
+ catch (error) {
315
+ stop = { outcome: "failed", reason: "state_unreadable", retry: true, detail: errorText(error) };
316
+ return finish();
317
+ }
318
+ const baseline = version === null;
319
+ receipt.cursor = state.cursor;
320
+ receipt.pending = Object.keys(state.pending ?? {}).length;
321
+ let mode = requestedMode;
322
+ if (state.profile.id !== profile.id || state.profile.version !== profile.version) {
323
+ // A cursor is the profile's own format, so another profile's is never handed back.
324
+ if (!baseline)
325
+ receipt.cursor_reset = "profile_version";
326
+ state = { ...state, profile: { id: profile.id, version: profile.version }, cursor: null, open: false };
327
+ delete state.validators;
328
+ if (!baseline)
329
+ mode = "complete";
330
+ }
331
+ receipt.mode = mode;
332
+ // A complete observation always lists from the start; an incremental one continues the stored cursor.
333
+ const resumed = mode === "incremental" && state.open;
334
+ receipt.pass.resumed = resumed;
335
+ let cursor = mode === "complete" ? null : state.cursor;
336
+ const threshold = bound.policy.missing_threshold ?? DEFAULT_MISSING_THRESHOLD;
337
+ const sourceComplete = bound.source.completeness === "complete";
338
+ // Without the caller's deadline the run has its own; every request has its own timeout either way.
339
+ const ownDeadline = options.signal ? undefined : new AbortController();
340
+ const timer = ownDeadline ? setTimeout(() => ownDeadline.abort(), budget.deadlineMs) : undefined;
341
+ const signal = options.signal ?? ownDeadline.signal;
342
+ const guard = guardTransport({
343
+ hosts: hostSet.hosts, transport: options.transport, identity, budget, rules: options.rules ?? {}, statuses, now, conditional: mode === "incremental",
344
+ signal, requestTimeoutMs: budget.requestTimeoutMs,
345
+ });
346
+ receipt.requests = guard.requests;
347
+ /** Store `next` after a commit; false when the store refused it and the run has stopped. */
348
+ const store = async (next) => {
349
+ try {
350
+ version = await options.state.write(key, next, version);
351
+ state = next;
352
+ receipt.pending = Object.keys(next.pending ?? {}).length;
353
+ return true;
354
+ }
355
+ catch (error) {
356
+ const conflict = record(error) && error.code === "MACHINE_STATE_CONFLICT";
357
+ stop = { outcome: "failed", reason: conflict ? "state_conflict" : "state_unwritable", retry: true };
358
+ return false;
359
+ }
360
+ };
361
+ try {
362
+ // Changes an earlier commit asked to retry are planned again before anything is fetched. A
363
+ // record that has since disappeared has nothing left to write, unless the held change is the
364
+ // record coming back.
365
+ const pendingIds = signal.aborted ? [] : Object.keys(state.pending ?? {}).sort();
366
+ if (pendingIds.length) {
367
+ const pending = state.pending;
368
+ const live = pendingIds.filter((id) => !state.records[id]?.gone || pending[id].change.change_kind === "new");
369
+ const changes = live.map((id) => pending[id].change);
370
+ const records = {};
371
+ for (const change of changes)
372
+ records[change.external_id] = { fields: { ...(change.after ?? change.before ?? {}) } };
373
+ let result;
374
+ let failure;
375
+ if (live.length) {
376
+ try {
377
+ result = commitResult(await options.commit({
378
+ feed: key, provider: bound.policy.provider, observed_at: observedAt, page: 0, replay: true, changes, records, baseline: false, complete: false,
379
+ }));
380
+ }
381
+ catch (error) {
382
+ failure = errorText(error);
383
+ }
384
+ }
385
+ const nextRecords = { ...state.records };
386
+ const nextPending = {};
387
+ const dropped = [];
388
+ for (const id of live) {
389
+ const entry = pending[id];
390
+ if (failure !== undefined) {
391
+ // A replay the commit cannot take stays pending, so a later sighting can still supersede
392
+ // it, until it has failed too often.
393
+ const failures = (entry.replay_failures ?? 0) + 1;
394
+ if (failures >= MAX_REPLAY_FAILURES)
395
+ dropped.push(id);
396
+ else
397
+ nextPending[id] = { ...entry, replay_failures: failures };
398
+ }
399
+ else if (result.retry.has(id)) {
400
+ nextPending[id] = entry;
401
+ }
402
+ else if (!result.hold.has(id)) {
403
+ // The record's absence since the hold is newer than the change, so its count stays; a
404
+ // record that comes back starts afresh.
405
+ const current = state.records[id];
406
+ nextRecords[id] = entryJson(current?.gone ? entry.entry : { ...entry.entry, missing: current?.missing ?? 0, first_missing_at: current?.first_missing_at });
407
+ }
408
+ }
409
+ receipt.held += live.filter((id) => failure !== undefined || result.retry.has(id) || result.hold.has(id)).length;
410
+ if (failure !== undefined) {
411
+ extraFindings.push({
412
+ key: `source:${bound.source.name}:replay_failed`,
413
+ title: clip(`Source ${bound.source.name}: a held change could not be planned again`, 140),
414
+ summary: clip(`Replaying ${live.length} pending change${live.length === 1 ? "" : "s"} failed (${failure}); they stay pending and the run went on to read the provider.`, 600),
415
+ priority: "normal",
416
+ facts: { outcome: "failed", reason: "replay_failed" },
417
+ });
418
+ }
419
+ if (dropped.length) {
420
+ extraFindings.push({
421
+ key: `source:${bound.source.name}:replay_dropped`,
422
+ title: clip(`Source ${bound.source.name}: held changes dropped after ${MAX_REPLAY_FAILURES} failed replays`, 140),
423
+ summary: clip(`Dropped ${dropped.length} pending change${dropped.length === 1 ? "" : "s"} (${dropped.slice(0, 3).map((id) => clip(id, 60)).join(", ")}${dropped.length > 3 ? ", …" : ""}); each record is planned again when it is next observed.`, 600),
424
+ priority: "normal",
425
+ facts: { outcome: "failed", reason: "replay_dropped", count: dropped.length },
426
+ });
427
+ }
428
+ const next = { ...state, records: nextRecords };
429
+ if (Object.keys(nextPending).length)
430
+ next.pending = nextPending;
431
+ else
432
+ delete next.pending;
433
+ if (!(await store(next)))
434
+ return finish();
435
+ }
436
+ const seen = new Set();
437
+ /** The cursors this run has asked for; a page handing one back again has looped. */
438
+ const asked = new Set();
439
+ const lastRequestUrl = () => guard.requests.at(-1)?.url;
440
+ for (let first = true;; first = false) {
441
+ if (signal.aborted) {
442
+ stop = { outcome: "deferred", reason: "deadline", retry: true };
443
+ break;
444
+ }
445
+ // A resumed pass may restart from its first page, so the cursor it resumes from is not a loop.
446
+ if (cursor !== null && !(first && resumed))
447
+ asked.add(overlayCanonicalJson(cursor));
448
+ let raw;
449
+ try {
450
+ // The deadline bounds profile code too: a page still pending when it passes is discarded.
451
+ raw = await raceAbort(profile.observe({
452
+ spec, bound, cursor, resumed: first && resumed, mode, transport: guard.transport,
453
+ budget: { requests: guard.remaining(), maxBytes: budget.maxBytes }, now: now(),
454
+ validators: mode === "complete" ? null : state.validators ?? null,
455
+ }), signal);
456
+ }
457
+ catch (error) {
458
+ stop = guard.stopped() ?? (error instanceof SourceStop ? error.stop : undefined);
459
+ if (!stop && signal.aborted)
460
+ stop = { outcome: "deferred", reason: "deadline", retry: true };
461
+ if (!stop) {
462
+ const code = record(error) ? error.code : undefined;
463
+ stop = code === UNSUPPORTED_CONTENT
464
+ ? { outcome: "unsupported_content", retry: false, detail: String(error.detail ?? "") }
465
+ : { outcome: "failed", reason: "profile_error", retry: false, detail: errorText(error) };
466
+ }
467
+ stopUrl = lastRequestUrl();
468
+ break;
469
+ }
470
+ // A stop the profile caught and swallowed still ends the run, and its page is discarded.
471
+ const guardStop = guard.stopped();
472
+ if (guardStop) {
473
+ stop = guardStop;
474
+ stopUrl = lastRequestUrl();
475
+ break;
476
+ }
477
+ let page;
478
+ try {
479
+ const invalid = pageProblem(raw);
480
+ if (invalid) {
481
+ stop = { outcome: "failed", reason: invalid, retry: false };
482
+ break;
483
+ }
484
+ // One read of the profile's page, as JSON data, so no getter or later mutation reaches the diff.
485
+ page = JSON.parse(JSON.stringify(raw));
486
+ }
487
+ catch (error) {
488
+ stop = { outcome: "failed", reason: "page_invalid", retry: false, detail: errorText(error) };
489
+ break;
490
+ }
491
+ const nextCursor = page.nextCursor ?? null;
492
+ // A page that promises more but hands back no cursor, or one this run already asked for, would
493
+ // read the same pages until the budget runs out.
494
+ if (page.more && (nextCursor === null || asked.has(overlayCanonicalJson(nextCursor)))) {
495
+ stop = { outcome: "failed", reason: "cursor_stuck", retry: false };
496
+ break;
497
+ }
498
+ const diff = diffPage(state, page, bound, observedAt);
499
+ for (const id of diff.seen)
500
+ seen.add(id);
501
+ const ended = !page.more;
502
+ const complete = ended && mode === "complete" && page.complete && sourceComplete;
503
+ const merged = { ...state.records };
504
+ for (const [id, entry] of diff.entries)
505
+ merged[id] = entry;
506
+ const missing = complete ? missingAfterComplete(merged, seen, threshold, observedAt) : { changes: [], entries: new Map() };
507
+ const changes = [...diff.changes, ...missing.changes];
508
+ const byId = new Map(changes.map((change) => [change.external_id, change]));
509
+ // A newer observation of a record, its listing or its absence from a complete pass, supersedes
510
+ // its pending change, whether or not the record was ever stored. Those entries are dropped and
511
+ // stored before the commit, so a crash after the commit never replays a change older than what
512
+ // the commit wrote.
513
+ const unlisted = complete ? Object.keys(state.pending ?? {}).filter((id) => !seen.has(id)) : [];
514
+ const superseded = [...new Set([...diff.seen, ...missing.entries.keys(), ...unlisted])].filter((id) => state.pending !== undefined && Object.hasOwn(state.pending, id));
515
+ if (superseded.length) {
516
+ const remaining = { ...state.pending };
517
+ for (const id of superseded)
518
+ delete remaining[id];
519
+ const pre = { ...state };
520
+ if (Object.keys(remaining).length)
521
+ pre.pending = remaining;
522
+ else
523
+ delete pre.pending;
524
+ if (!(await store(pre)))
525
+ break;
526
+ }
527
+ const records = {};
528
+ for (const change of changes)
529
+ records[change.external_id] = { fields: { ...(change.after ?? change.before ?? {}) } };
530
+ let result;
531
+ try {
532
+ result = commitResult(await options.commit({
533
+ feed: key, provider: bound.policy.provider, observed_at: observedAt, page: receipt.pages + 1, replay: false,
534
+ changes, records, baseline, complete,
535
+ }));
536
+ }
537
+ catch (error) {
538
+ stop = { outcome: "failed", reason: "commit_failed", retry: true, detail: errorText(error) };
539
+ break;
540
+ }
541
+ const notWritten = (id) => byId.has(id) && (result.hold.has(id) || result.retry.has(id));
542
+ // The page committed: now, and only now, its records and cursor are stored.
543
+ const nextRecords = { ...state.records };
544
+ const nextPending = { ...state.pending };
545
+ for (const [id, entry] of [...diff.entries, ...missing.entries]) {
546
+ if (byId.has(id) && result.retry.has(id))
547
+ nextPending[id] = { change: byId.get(id), entry: entryJson(entry), held_at: observedAt };
548
+ else if (!notWritten(id))
549
+ nextRecords[id] = entryJson(entry);
550
+ }
551
+ const next = {
552
+ ...state,
553
+ cursor: nextCursor,
554
+ open: page.more,
555
+ records: nextRecords,
556
+ complete_observations: state.complete_observations + (complete ? 1 : 0),
557
+ ...(complete ? { last_complete_at: observedAt } : {}),
558
+ ...(page.validators ? { validators: { ...page.validators } } : {}),
559
+ };
560
+ if (Object.keys(nextPending).length)
561
+ next.pending = nextPending;
562
+ else
563
+ delete next.pending;
564
+ if (!(await store(next)))
565
+ break;
566
+ receipt.pages += 1;
567
+ receipt.cursor = nextCursor;
568
+ receipt.diagnostics.push(...diff.diagnostics);
569
+ receipt.profile_diagnostics.push(...diff.profileDiagnostics);
570
+ for (const change of changes) {
571
+ if (notWritten(change.external_id)) {
572
+ receipt.held += 1;
573
+ continue;
574
+ }
575
+ const kind = change.change_kind;
576
+ if (Object.hasOwn(receipt.changes, kind))
577
+ receipt.changes[kind] += 1;
578
+ }
579
+ if (ended) {
580
+ receipt.pass.ended = true;
581
+ receipt.pass.complete = complete;
582
+ break;
583
+ }
584
+ if (receipt.pages >= budget.pages) {
585
+ stop = { outcome: "deferred", reason: "budget", retry: true };
586
+ break;
587
+ }
588
+ cursor = nextCursor;
589
+ }
590
+ return finish();
591
+ }
592
+ finally {
593
+ if (timer !== undefined)
594
+ clearTimeout(timer);
595
+ guard.close();
596
+ }
597
+ }
598
+ //# sourceMappingURL=observe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/source-engine/observe.ts"],"names":[],"mappings":"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"}