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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/README.md +1082 -0
  2. package/dist/artifact-contract.d.ts +90 -0
  3. package/dist/artifact-contract.d.ts.map +1 -0
  4. package/dist/artifact-contract.js +205 -0
  5. package/dist/artifact-contract.js.map +1 -0
  6. package/dist/backend.d.ts +19 -1
  7. package/dist/backend.d.ts.map +1 -1
  8. package/dist/backend.js +83 -36
  9. package/dist/backend.js.map +1 -1
  10. package/dist/blob-contract.d.ts +80 -0
  11. package/dist/blob-contract.d.ts.map +1 -0
  12. package/dist/blob-contract.js +131 -0
  13. package/dist/blob-contract.js.map +1 -0
  14. package/dist/blob-journal.d.ts +302 -0
  15. package/dist/blob-journal.d.ts.map +1 -0
  16. package/dist/blob-journal.js +540 -0
  17. package/dist/blob-journal.js.map +1 -0
  18. package/dist/body-replace-guards.d.ts +52 -0
  19. package/dist/body-replace-guards.d.ts.map +1 -0
  20. package/dist/body-replace-guards.js +176 -0
  21. package/dist/body-replace-guards.js.map +1 -0
  22. package/dist/builtin-recipes/content.d.ts +93 -0
  23. package/dist/builtin-recipes/content.d.ts.map +1 -0
  24. package/dist/builtin-recipes/content.js +288 -0
  25. package/dist/builtin-recipes/content.js.map +1 -0
  26. package/dist/builtin-recipes.d.ts +10 -0
  27. package/dist/builtin-recipes.d.ts.map +1 -0
  28. package/dist/builtin-recipes.js +97 -0
  29. package/dist/builtin-recipes.js.map +1 -0
  30. package/dist/bundle-health/index.d.ts +14 -0
  31. package/dist/bundle-health/index.d.ts.map +1 -0
  32. package/dist/bundle-health/index.js +12 -0
  33. package/dist/bundle-health/index.js.map +1 -0
  34. package/dist/bundle-health/kind-findings.d.ts +44 -0
  35. package/dist/bundle-health/kind-findings.d.ts.map +1 -0
  36. package/dist/bundle-health/kind-findings.js +68 -0
  37. package/dist/bundle-health/kind-findings.js.map +1 -0
  38. package/dist/bundle-health/legacy-page.d.ts +39 -0
  39. package/dist/bundle-health/legacy-page.d.ts.map +1 -0
  40. package/dist/bundle-health/legacy-page.js +50 -0
  41. package/dist/bundle-health/legacy-page.js.map +1 -0
  42. package/dist/bundle-health/report.d.ts +202 -0
  43. package/dist/bundle-health/report.d.ts.map +1 -0
  44. package/dist/bundle-health/report.js +438 -0
  45. package/dist/bundle-health/report.js.map +1 -0
  46. package/dist/bundle-ops.d.ts +1 -1
  47. package/dist/bundle-ops.d.ts.map +1 -1
  48. package/dist/bundle-ops.js +2 -2
  49. package/dist/bundle-ops.js.map +1 -1
  50. package/dist/bundle.d.ts +2 -1
  51. package/dist/bundle.d.ts.map +1 -1
  52. package/dist/bundle.js +3 -3
  53. package/dist/bundle.js.map +1 -1
  54. package/dist/code-point-order.d.ts +8 -0
  55. package/dist/code-point-order.d.ts.map +1 -0
  56. package/dist/code-point-order.js +20 -0
  57. package/dist/code-point-order.js.map +1 -0
  58. package/dist/connector-request.d.ts +87 -0
  59. package/dist/connector-request.d.ts.map +1 -0
  60. package/dist/connector-request.js +370 -0
  61. package/dist/connector-request.js.map +1 -0
  62. package/dist/connectors.d.ts +262 -0
  63. package/dist/connectors.d.ts.map +1 -0
  64. package/dist/connectors.js +1179 -0
  65. package/dist/connectors.js.map +1 -0
  66. package/dist/cross-bundle.d.ts +135 -0
  67. package/dist/cross-bundle.d.ts.map +1 -0
  68. package/dist/cross-bundle.js +186 -0
  69. package/dist/cross-bundle.js.map +1 -0
  70. package/dist/dependencies.d.ts +94 -0
  71. package/dist/dependencies.d.ts.map +1 -0
  72. package/dist/dependencies.js +180 -0
  73. package/dist/dependencies.js.map +1 -0
  74. package/dist/document-codec.d.ts +5 -1
  75. package/dist/document-codec.d.ts.map +1 -1
  76. package/dist/document-codec.js +7 -4
  77. package/dist/document-codec.js.map +1 -1
  78. package/dist/document-field-actions.d.ts +31 -1
  79. package/dist/document-field-actions.d.ts.map +1 -1
  80. package/dist/document-field-actions.js +137 -34
  81. package/dist/document-field-actions.js.map +1 -1
  82. package/dist/document-mutation.d.ts +22 -10
  83. package/dist/document-mutation.d.ts.map +1 -1
  84. package/dist/document-mutation.js +61 -27
  85. package/dist/document-mutation.js.map +1 -1
  86. package/dist/document-write-policy.d.ts.map +1 -1
  87. package/dist/document-write-policy.js +4 -2
  88. package/dist/document-write-policy.js.map +1 -1
  89. package/dist/domain-model.d.ts +73 -0
  90. package/dist/domain-model.d.ts.map +1 -0
  91. package/dist/domain-model.js +169 -0
  92. package/dist/domain-model.js.map +1 -0
  93. package/dist/engine.d.ts +16 -8
  94. package/dist/engine.d.ts.map +1 -1
  95. package/dist/engine.js +42 -4
  96. package/dist/engine.js.map +1 -1
  97. package/dist/file-journaled-backend-internal.d.ts +21 -0
  98. package/dist/file-journaled-backend-internal.d.ts.map +1 -0
  99. package/dist/file-journaled-backend-internal.js +12 -0
  100. package/dist/file-journaled-backend-internal.js.map +1 -0
  101. package/dist/file-journaled-backend.d.ts +160 -0
  102. package/dist/file-journaled-backend.d.ts.map +1 -0
  103. package/dist/file-journaled-backend.js +1345 -0
  104. package/dist/file-journaled-backend.js.map +1 -0
  105. package/dist/filesystem-host.d.ts +15 -0
  106. package/dist/filesystem-host.d.ts.map +1 -0
  107. package/dist/filesystem-host.js +20 -0
  108. package/dist/filesystem-host.js.map +1 -0
  109. package/dist/filesystem-identity.d.ts +86 -4
  110. package/dist/filesystem-identity.d.ts.map +1 -1
  111. package/dist/filesystem-identity.js +338 -102
  112. package/dist/filesystem-identity.js.map +1 -1
  113. package/dist/filesystem-lock.d.ts +16 -3
  114. package/dist/filesystem-lock.d.ts.map +1 -1
  115. package/dist/filesystem-lock.js +323 -77
  116. package/dist/filesystem-lock.js.map +1 -1
  117. package/dist/filesystem-push-role.d.ts +77 -0
  118. package/dist/filesystem-push-role.d.ts.map +1 -0
  119. package/dist/filesystem-push-role.js +165 -0
  120. package/dist/filesystem-push-role.js.map +1 -0
  121. package/dist/filesystem.d.ts +17 -0
  122. package/dist/filesystem.d.ts.map +1 -0
  123. package/dist/filesystem.js +18 -0
  124. package/dist/filesystem.js.map +1 -0
  125. package/dist/governed-body-write.d.ts +106 -0
  126. package/dist/governed-body-write.d.ts.map +1 -0
  127. package/dist/governed-body-write.js +251 -0
  128. package/dist/governed-body-write.js.map +1 -0
  129. package/dist/host-policy-snapshot.d.ts +9 -0
  130. package/dist/host-policy-snapshot.d.ts.map +1 -0
  131. package/dist/host-policy-snapshot.js +33 -0
  132. package/dist/host-policy-snapshot.js.map +1 -0
  133. package/dist/host-text.d.ts +31 -0
  134. package/dist/host-text.d.ts.map +1 -0
  135. package/dist/host-text.js +77 -0
  136. package/dist/host-text.js.map +1 -0
  137. package/dist/hosted-client/binding.d.ts +7 -0
  138. package/dist/hosted-client/binding.d.ts.map +1 -0
  139. package/dist/hosted-client/binding.js +10 -0
  140. package/dist/hosted-client/binding.js.map +1 -0
  141. package/dist/hosted-client/blob-delivery.d.ts +67 -0
  142. package/dist/hosted-client/blob-delivery.d.ts.map +1 -0
  143. package/dist/hosted-client/blob-delivery.js +169 -0
  144. package/dist/hosted-client/blob-delivery.js.map +1 -0
  145. package/dist/hosted-client/blob-write.d.ts +386 -0
  146. package/dist/hosted-client/blob-write.d.ts.map +1 -0
  147. package/dist/hosted-client/blob-write.js +770 -0
  148. package/dist/hosted-client/blob-write.js.map +1 -0
  149. package/dist/hosted-client/bundle-listing.d.ts +46 -0
  150. package/dist/hosted-client/bundle-listing.d.ts.map +1 -0
  151. package/dist/hosted-client/bundle-listing.js +36 -0
  152. package/dist/hosted-client/bundle-listing.js.map +1 -0
  153. package/dist/hosted-client/client.d.ts +219 -0
  154. package/dist/hosted-client/client.d.ts.map +1 -0
  155. package/dist/hosted-client/client.js +309 -0
  156. package/dist/hosted-client/client.js.map +1 -0
  157. package/dist/hosted-client/directory.d.ts +46 -0
  158. package/dist/hosted-client/directory.d.ts.map +1 -0
  159. package/dist/hosted-client/directory.js +74 -0
  160. package/dist/hosted-client/directory.js.map +1 -0
  161. package/dist/hosted-client/errors.d.ts +26 -0
  162. package/dist/hosted-client/errors.d.ts.map +1 -0
  163. package/dist/hosted-client/errors.js +35 -0
  164. package/dist/hosted-client/errors.js.map +1 -0
  165. package/dist/hosted-client/inbox.d.ts +320 -0
  166. package/dist/hosted-client/inbox.d.ts.map +1 -0
  167. package/dist/hosted-client/inbox.js +379 -0
  168. package/dist/hosted-client/inbox.js.map +1 -0
  169. package/dist/hosted-client/index.d.ts +30 -0
  170. package/dist/hosted-client/index.d.ts.map +1 -0
  171. package/dist/hosted-client/index.js +32 -0
  172. package/dist/hosted-client/index.js.map +1 -0
  173. package/dist/hosted-client/journal.d.ts +103 -0
  174. package/dist/hosted-client/journal.d.ts.map +1 -0
  175. package/dist/hosted-client/journal.js +464 -0
  176. package/dist/hosted-client/journal.js.map +1 -0
  177. package/dist/hosted-client/node.d.ts +74 -0
  178. package/dist/hosted-client/node.d.ts.map +1 -0
  179. package/dist/hosted-client/node.js +219 -0
  180. package/dist/hosted-client/node.js.map +1 -0
  181. package/dist/hosted-client/reference.d.ts +12 -0
  182. package/dist/hosted-client/reference.d.ts.map +1 -0
  183. package/dist/hosted-client/reference.js +29 -0
  184. package/dist/hosted-client/reference.js.map +1 -0
  185. package/dist/hosted-client/write.d.ts +217 -0
  186. package/dist/hosted-client/write.d.ts.map +1 -0
  187. package/dist/hosted-client/write.js +418 -0
  188. package/dist/hosted-client/write.js.map +1 -0
  189. package/dist/hosted-transport/answer-rows.d.ts +243 -0
  190. package/dist/hosted-transport/answer-rows.d.ts.map +1 -0
  191. package/dist/hosted-transport/answer-rows.js +454 -0
  192. package/dist/hosted-transport/answer-rows.js.map +1 -0
  193. package/dist/hosted-transport/blob-reads.d.ts +35 -0
  194. package/dist/hosted-transport/blob-reads.d.ts.map +1 -0
  195. package/dist/hosted-transport/blob-reads.js +179 -0
  196. package/dist/hosted-transport/blob-reads.js.map +1 -0
  197. package/dist/hosted-transport/blob-write.d.ts +34 -0
  198. package/dist/hosted-transport/blob-write.d.ts.map +1 -0
  199. package/dist/hosted-transport/blob-write.js +115 -0
  200. package/dist/hosted-transport/blob-write.js.map +1 -0
  201. package/dist/hosted-transport/carrier.d.ts +151 -0
  202. package/dist/hosted-transport/carrier.d.ts.map +1 -0
  203. package/dist/hosted-transport/carrier.js +260 -0
  204. package/dist/hosted-transport/carrier.js.map +1 -0
  205. package/dist/hosted-transport/history-pages.d.ts +55 -0
  206. package/dist/hosted-transport/history-pages.d.ts.map +1 -0
  207. package/dist/hosted-transport/history-pages.js +69 -0
  208. package/dist/hosted-transport/history-pages.js.map +1 -0
  209. package/dist/hosted-transport/index.d.ts +18 -0
  210. package/dist/hosted-transport/index.d.ts.map +1 -0
  211. package/dist/hosted-transport/index.js +18 -0
  212. package/dist/hosted-transport/index.js.map +1 -0
  213. package/dist/hosted-transport/operations.d.ts +85 -0
  214. package/dist/hosted-transport/operations.d.ts.map +1 -0
  215. package/dist/hosted-transport/operations.js +128 -0
  216. package/dist/hosted-transport/operations.js.map +1 -0
  217. package/dist/hosted-transport/paged-reads.d.ts +87 -0
  218. package/dist/hosted-transport/paged-reads.d.ts.map +1 -0
  219. package/dist/hosted-transport/paged-reads.js +238 -0
  220. package/dist/hosted-transport/paged-reads.js.map +1 -0
  221. package/dist/hosted-transport/read-adapter.d.ts +256 -0
  222. package/dist/hosted-transport/read-adapter.d.ts.map +1 -0
  223. package/dist/hosted-transport/read-adapter.js +568 -0
  224. package/dist/hosted-transport/read-adapter.js.map +1 -0
  225. package/dist/hosted-transport/root-write.d.ts +114 -0
  226. package/dist/hosted-transport/root-write.d.ts.map +1 -0
  227. package/dist/hosted-transport/root-write.js +171 -0
  228. package/dist/hosted-transport/root-write.js.map +1 -0
  229. package/dist/hosted-transport/whole-document-transport.d.ts +204 -0
  230. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -0
  231. package/dist/hosted-transport/whole-document-transport.js +447 -0
  232. package/dist/hosted-transport/whole-document-transport.js.map +1 -0
  233. package/dist/index.d.ts +34 -10
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +26 -8
  236. package/dist/index.js.map +1 -1
  237. package/dist/indexeddb-backend.d.ts +28 -37
  238. package/dist/indexeddb-backend.d.ts.map +1 -1
  239. package/dist/indexeddb-backend.js +467 -113
  240. package/dist/indexeddb-backend.js.map +1 -1
  241. package/dist/journaled-backend.d.ts +232 -15
  242. package/dist/journaled-backend.d.ts.map +1 -1
  243. package/dist/journaled-backend.js +254 -55
  244. package/dist/journaled-backend.js.map +1 -1
  245. package/dist/kind-authoring.d.ts +170 -0
  246. package/dist/kind-authoring.d.ts.map +1 -0
  247. package/dist/kind-authoring.js +451 -0
  248. package/dist/kind-authoring.js.map +1 -0
  249. package/dist/kind-conformance-error.d.ts +15 -0
  250. package/dist/kind-conformance-error.d.ts.map +1 -0
  251. package/dist/kind-conformance-error.js +20 -0
  252. package/dist/kind-conformance-error.js.map +1 -0
  253. package/dist/kind-coverage.d.ts +99 -0
  254. package/dist/kind-coverage.d.ts.map +1 -0
  255. package/dist/kind-coverage.js +186 -0
  256. package/dist/kind-coverage.js.map +1 -0
  257. package/dist/kind-field-mutation.d.ts +4 -0
  258. package/dist/kind-field-mutation.d.ts.map +1 -1
  259. package/dist/kind-field-mutation.js +28 -3
  260. package/dist/kind-field-mutation.js.map +1 -1
  261. package/dist/kinds-load.js +4 -4
  262. package/dist/kinds-load.js.map +1 -1
  263. package/dist/kinds.d.ts +65 -2
  264. package/dist/kinds.d.ts.map +1 -1
  265. package/dist/kinds.js +341 -21
  266. package/dist/kinds.js.map +1 -1
  267. package/dist/link-types.d.ts +26 -0
  268. package/dist/link-types.d.ts.map +1 -0
  269. package/dist/link-types.js +57 -0
  270. package/dist/link-types.js.map +1 -0
  271. package/dist/links.d.ts +21 -3
  272. package/dist/links.d.ts.map +1 -1
  273. package/dist/links.js +213 -14
  274. package/dist/links.js.map +1 -1
  275. package/dist/managed-document-metadata.d.ts +2 -0
  276. package/dist/managed-document-metadata.d.ts.map +1 -0
  277. package/dist/managed-document-metadata.js +9 -0
  278. package/dist/managed-document-metadata.js.map +1 -0
  279. package/dist/memory-backend.d.ts.map +1 -1
  280. package/dist/memory-backend.js +6 -2
  281. package/dist/memory-backend.js.map +1 -1
  282. package/dist/paths.d.ts +16 -0
  283. package/dist/paths.d.ts.map +1 -1
  284. package/dist/paths.js +25 -0
  285. package/dist/paths.js.map +1 -1
  286. package/dist/platform.d.ts +13 -2
  287. package/dist/platform.d.ts.map +1 -1
  288. package/dist/platform.js +16 -0
  289. package/dist/platform.js.map +1 -1
  290. package/dist/portable-export.d.ts +119 -0
  291. package/dist/portable-export.d.ts.map +1 -0
  292. package/dist/portable-export.js +501 -0
  293. package/dist/portable-export.js.map +1 -0
  294. package/dist/publication-filesystem.d.ts +1 -1
  295. package/dist/publication-filesystem.d.ts.map +1 -1
  296. package/dist/publication-filesystem.js +1 -1
  297. package/dist/publication-filesystem.js.map +1 -1
  298. package/dist/qualified-links.d.ts +67 -0
  299. package/dist/qualified-links.d.ts.map +1 -0
  300. package/dist/qualified-links.js +117 -0
  301. package/dist/qualified-links.js.map +1 -0
  302. package/dist/query-filter.d.ts +16 -2
  303. package/dist/query-filter.d.ts.map +1 -1
  304. package/dist/query-filter.js +40 -1
  305. package/dist/query-filter.js.map +1 -1
  306. package/dist/query-order.d.ts +22 -0
  307. package/dist/query-order.d.ts.map +1 -0
  308. package/dist/query-order.js +42 -0
  309. package/dist/query-order.js.map +1 -0
  310. package/dist/recipe-lifecycle/errors.d.ts +96 -0
  311. package/dist/recipe-lifecycle/errors.d.ts.map +1 -0
  312. package/dist/recipe-lifecycle/errors.js +122 -0
  313. package/dist/recipe-lifecycle/errors.js.map +1 -0
  314. package/dist/recipe-lifecycle/evolution.d.ts +112 -0
  315. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -0
  316. package/dist/recipe-lifecycle/evolution.js +941 -0
  317. package/dist/recipe-lifecycle/evolution.js.map +1 -0
  318. package/dist/recipe-lifecycle/index.d.ts +30 -0
  319. package/dist/recipe-lifecycle/index.d.ts.map +1 -0
  320. package/dist/recipe-lifecycle/index.js +26 -0
  321. package/dist/recipe-lifecycle/index.js.map +1 -0
  322. package/dist/recipe-lifecycle/install.d.ts +155 -0
  323. package/dist/recipe-lifecycle/install.d.ts.map +1 -0
  324. package/dist/recipe-lifecycle/install.js +594 -0
  325. package/dist/recipe-lifecycle/install.js.map +1 -0
  326. package/dist/recipe-lifecycle/legacy-aliases.d.ts +16 -0
  327. package/dist/recipe-lifecycle/legacy-aliases.d.ts.map +1 -0
  328. package/dist/recipe-lifecycle/legacy-aliases.js +51 -0
  329. package/dist/recipe-lifecycle/legacy-aliases.js.map +1 -0
  330. package/dist/recipe-lifecycle/stamp.d.ts +151 -0
  331. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -0
  332. package/dist/recipe-lifecycle/stamp.js +364 -0
  333. package/dist/recipe-lifecycle/stamp.js.map +1 -0
  334. package/dist/recipes.d.ts +29 -1
  335. package/dist/recipes.d.ts.map +1 -1
  336. package/dist/recipes.js +137 -1
  337. package/dist/recipes.js.map +1 -1
  338. package/dist/record-overlay/apply.d.ts +43 -0
  339. package/dist/record-overlay/apply.d.ts.map +1 -0
  340. package/dist/record-overlay/apply.js +527 -0
  341. package/dist/record-overlay/apply.js.map +1 -0
  342. package/dist/record-overlay/canonical.d.ts +22 -0
  343. package/dist/record-overlay/canonical.d.ts.map +1 -0
  344. package/dist/record-overlay/canonical.js +47 -0
  345. package/dist/record-overlay/canonical.js.map +1 -0
  346. package/dist/record-overlay/digest.d.ts +4 -0
  347. package/dist/record-overlay/digest.d.ts.map +1 -0
  348. package/dist/record-overlay/digest.js +11 -0
  349. package/dist/record-overlay/digest.js.map +1 -0
  350. package/dist/record-overlay/errors.d.ts +44 -0
  351. package/dist/record-overlay/errors.d.ts.map +1 -0
  352. package/dist/record-overlay/errors.js +55 -0
  353. package/dist/record-overlay/errors.js.map +1 -0
  354. package/dist/record-overlay/findings.d.ts +5 -0
  355. package/dist/record-overlay/findings.d.ts.map +1 -0
  356. package/dist/record-overlay/findings.js +83 -0
  357. package/dist/record-overlay/findings.js.map +1 -0
  358. package/dist/record-overlay/index.d.ts +23 -0
  359. package/dist/record-overlay/index.d.ts.map +1 -0
  360. package/dist/record-overlay/index.js +21 -0
  361. package/dist/record-overlay/index.js.map +1 -0
  362. package/dist/record-overlay/plan.d.ts +12 -0
  363. package/dist/record-overlay/plan.d.ts.map +1 -0
  364. package/dist/record-overlay/plan.js +285 -0
  365. package/dist/record-overlay/plan.js.map +1 -0
  366. package/dist/record-overlay/policy.d.ts +69 -0
  367. package/dist/record-overlay/policy.d.ts.map +1 -0
  368. package/dist/record-overlay/policy.js +228 -0
  369. package/dist/record-overlay/policy.js.map +1 -0
  370. package/dist/record-overlay/redact.d.ts +3 -0
  371. package/dist/record-overlay/redact.d.ts.map +1 -0
  372. package/dist/record-overlay/redact.js +27 -0
  373. package/dist/record-overlay/redact.js.map +1 -0
  374. package/dist/record-overlay/signal-kind.d.ts +30 -0
  375. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  376. package/dist/record-overlay/signal-kind.js +38 -0
  377. package/dist/record-overlay/signal-kind.js.map +1 -0
  378. package/dist/record-overlay/signal-text.d.ts +45 -0
  379. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  380. package/dist/record-overlay/signal-text.js +116 -0
  381. package/dist/record-overlay/signal-text.js.map +1 -0
  382. package/dist/record-overlay/source-index.d.ts +19 -0
  383. package/dist/record-overlay/source-index.d.ts.map +1 -0
  384. package/dist/record-overlay/source-index.js +102 -0
  385. package/dist/record-overlay/source-index.js.map +1 -0
  386. package/dist/record-overlay/types.d.ts +291 -0
  387. package/dist/record-overlay/types.d.ts.map +1 -0
  388. package/dist/record-overlay/types.js +2 -0
  389. package/dist/record-overlay/types.js.map +1 -0
  390. package/dist/remote-backend.d.ts +67 -67
  391. package/dist/remote-backend.d.ts.map +1 -1
  392. package/dist/remote-backend.js +168 -201
  393. package/dist/remote-backend.js.map +1 -1
  394. package/dist/remote-document-codec.d.ts +2 -1
  395. package/dist/remote-document-codec.d.ts.map +1 -1
  396. package/dist/remote-document-codec.js +3 -2
  397. package/dist/remote-document-codec.js.map +1 -1
  398. package/dist/remote-error.d.ts +38 -0
  399. package/dist/remote-error.d.ts.map +1 -0
  400. package/dist/remote-error.js +59 -0
  401. package/dist/remote-error.js.map +1 -0
  402. package/dist/remote-operations.d.ts +0 -40
  403. package/dist/remote-operations.d.ts.map +1 -1
  404. package/dist/remote-operations.js +26 -6
  405. package/dist/remote-operations.js.map +1 -1
  406. package/dist/remote-parsers.d.ts +86 -0
  407. package/dist/remote-parsers.d.ts.map +1 -0
  408. package/dist/remote-parsers.js +181 -0
  409. package/dist/remote-parsers.js.map +1 -0
  410. package/dist/remote.d.ts +5 -2
  411. package/dist/remote.d.ts.map +1 -1
  412. package/dist/remote.js +5 -1
  413. package/dist/remote.js.map +1 -1
  414. package/dist/search/backend-source.d.ts +6 -0
  415. package/dist/search/backend-source.d.ts.map +1 -0
  416. package/dist/search/backend-source.js +33 -0
  417. package/dist/search/backend-source.js.map +1 -0
  418. package/dist/search/contract.d.ts +151 -0
  419. package/dist/search/contract.d.ts.map +1 -0
  420. package/dist/search/contract.js +78 -0
  421. package/dist/search/contract.js.map +1 -0
  422. package/dist/search/errors.d.ts +30 -0
  423. package/dist/search/errors.d.ts.map +1 -0
  424. package/dist/search/errors.js +50 -0
  425. package/dist/search/errors.js.map +1 -0
  426. package/dist/search/identity.d.ts +12 -0
  427. package/dist/search/identity.d.ts.map +1 -0
  428. package/dist/search/identity.js +90 -0
  429. package/dist/search/identity.js.map +1 -0
  430. package/dist/search/index.d.ts +16 -0
  431. package/dist/search/index.d.ts.map +1 -0
  432. package/dist/search/index.js +15 -0
  433. package/dist/search/index.js.map +1 -0
  434. package/dist/search/memory-source.d.ts +36 -0
  435. package/dist/search/memory-source.d.ts.map +1 -0
  436. package/dist/search/memory-source.js +235 -0
  437. package/dist/search/memory-source.js.map +1 -0
  438. package/dist/search/rank.d.ts +34 -0
  439. package/dist/search/rank.d.ts.map +1 -0
  440. package/dist/search/rank.js +129 -0
  441. package/dist/search/rank.js.map +1 -0
  442. package/dist/search/row-text.d.ts +38 -0
  443. package/dist/search/row-text.d.ts.map +1 -0
  444. package/dist/search/row-text.js +88 -0
  445. package/dist/search/row-text.js.map +1 -0
  446. package/dist/search/search.d.ts +28 -0
  447. package/dist/search/search.d.ts.map +1 -0
  448. package/dist/search/search.js +257 -0
  449. package/dist/search/search.js.map +1 -0
  450. package/dist/search/source.d.ts +67 -0
  451. package/dist/search/source.d.ts.map +1 -0
  452. package/dist/search/source.js +2 -0
  453. package/dist/search/source.js.map +1 -0
  454. package/dist/search/text.d.ts +47 -0
  455. package/dist/search/text.d.ts.map +1 -0
  456. package/dist/search/text.js +150 -0
  457. package/dist/search/text.js.map +1 -0
  458. package/dist/site-capabilities.d.ts +345 -0
  459. package/dist/site-capabilities.d.ts.map +1 -0
  460. package/dist/site-capabilities.js +724 -0
  461. package/dist/site-capabilities.js.map +1 -0
  462. package/dist/source-engine/guard.d.ts +78 -0
  463. package/dist/source-engine/guard.d.ts.map +1 -0
  464. package/dist/source-engine/guard.js +423 -0
  465. package/dist/source-engine/guard.js.map +1 -0
  466. package/dist/source-engine/index.d.ts +26 -0
  467. package/dist/source-engine/index.d.ts.map +1 -0
  468. package/dist/source-engine/index.js +21 -0
  469. package/dist/source-engine/index.js.map +1 -0
  470. package/dist/source-engine/machine-state.d.ts +74 -0
  471. package/dist/source-engine/machine-state.d.ts.map +1 -0
  472. package/dist/source-engine/machine-state.js +48 -0
  473. package/dist/source-engine/machine-state.js.map +1 -0
  474. package/dist/source-engine/observe.d.ts +18 -0
  475. package/dist/source-engine/observe.d.ts.map +1 -0
  476. package/dist/source-engine/observe.js +620 -0
  477. package/dist/source-engine/observe.js.map +1 -0
  478. package/dist/source-engine/overlay.d.ts +49 -0
  479. package/dist/source-engine/overlay.d.ts.map +1 -0
  480. package/dist/source-engine/overlay.js +114 -0
  481. package/dist/source-engine/overlay.js.map +1 -0
  482. package/dist/source-engine/robots.d.ts +53 -0
  483. package/dist/source-engine/robots.d.ts.map +1 -0
  484. package/dist/source-engine/robots.js +158 -0
  485. package/dist/source-engine/robots.js.map +1 -0
  486. package/dist/source-engine/types.d.ts +287 -0
  487. package/dist/source-engine/types.d.ts.map +1 -0
  488. package/dist/source-engine/types.js +2 -0
  489. package/dist/source-engine/types.js.map +1 -0
  490. package/dist/source-harness/conformance.d.ts +16 -0
  491. package/dist/source-harness/conformance.d.ts.map +1 -0
  492. package/dist/source-harness/conformance.js +266 -0
  493. package/dist/source-harness/conformance.js.map +1 -0
  494. package/dist/source-harness/fixture.d.ts +95 -0
  495. package/dist/source-harness/fixture.d.ts.map +1 -0
  496. package/dist/source-harness/fixture.js +273 -0
  497. package/dist/source-harness/fixture.js.map +1 -0
  498. package/dist/source-harness/index.d.ts +22 -0
  499. package/dist/source-harness/index.d.ts.map +1 -0
  500. package/dist/source-harness/index.js +19 -0
  501. package/dist/source-harness/index.js.map +1 -0
  502. package/dist/source-harness/peer.d.ts +74 -0
  503. package/dist/source-harness/peer.d.ts.map +1 -0
  504. package/dist/source-harness/peer.js +106 -0
  505. package/dist/source-harness/peer.js.map +1 -0
  506. package/dist/source-profiles/index.d.ts +31 -0
  507. package/dist/source-profiles/index.d.ts.map +1 -0
  508. package/dist/source-profiles/index.js +206 -0
  509. package/dist/source-profiles/index.js.map +1 -0
  510. package/dist/source-profiles/link-header.d.ts +6 -0
  511. package/dist/source-profiles/link-header.d.ts.map +1 -0
  512. package/dist/source-profiles/link-header.js +131 -0
  513. package/dist/source-profiles/link-header.js.map +1 -0
  514. package/dist/storage.d.ts +6 -2
  515. package/dist/storage.d.ts.map +1 -1
  516. package/dist/storage.js +4 -1
  517. package/dist/storage.js.map +1 -1
  518. package/dist/types.d.ts +38 -5
  519. package/dist/types.d.ts.map +1 -1
  520. package/dist/types.js +0 -10
  521. package/dist/types.js.map +1 -1
  522. package/dist/uncertain-write.d.ts +161 -19
  523. package/dist/uncertain-write.d.ts.map +1 -1
  524. package/dist/uncertain-write.js +90 -31
  525. package/dist/uncertain-write.js.map +1 -1
  526. package/dist/versioning.d.ts +9 -4
  527. package/dist/versioning.d.ts.map +1 -1
  528. package/dist/versioning.js +9 -4
  529. package/dist/versioning.js.map +1 -1
  530. package/dist/write-identity.d.ts +5 -0
  531. package/dist/write-identity.d.ts.map +1 -0
  532. package/dist/write-identity.js +9 -0
  533. package/dist/write-identity.js.map +1 -0
  534. package/package.json +103 -2
@@ -0,0 +1,95 @@
1
+ /**
2
+ * The fixture harness: replay a profile's scripted provider answers through the engine, map and
3
+ * write each committed page through record-overlay over a MemoryBackend bundle, and check each
4
+ * required scenario's outcome rule. The rules are profile-independent, so one list holds every
5
+ * profile, generic or extension, to the same behaviour.
6
+ */
7
+ import { type Connector } from "../connectors.js";
8
+ import type { OverlayReceipt, RecordChange } from "../record-overlay/types.js";
9
+ import { type SourceState } from "../source-engine/machine-state.js";
10
+ import { type FetchIdentity } from "../source-engine/robots.js";
11
+ import type { SourceBudget, SourceProfile, SourceRunReceipt } from "../source-engine/types.js";
12
+ import type { ConceptId, Frontmatter, OkfDocument } from "../types.js";
13
+ import { type PeerRequest, type ScriptedExchange, type TransportCredential } from "./peer.js";
14
+ /** Every profile's fixture includes these; a name may add a variant after a dot (`cursor.resume.page-number`). */
15
+ export declare const REQUIRED_SCENARIOS: readonly ["errors.auth", "errors.rate-limit", "errors.server", "errors.malformed", "page.incomplete", "cursor.resume", "cursor.hostile", "complete.disappear", "fields.owned-conflict", "fields.unmapped", "fields.null", "identity.missing", "hosts.redirect", "hosts.undeclared"];
16
+ export type RequiredScenario = (typeof REQUIRED_SCENARIOS)[number];
17
+ /** The required scenario a name counts toward, or undefined. */
18
+ export declare function scenarioBase(name: string): RequiredScenario | undefined;
19
+ /** Required scenarios no name covers. */
20
+ export declare function missingScenarios(names: Iterable<string>): RequiredScenario[];
21
+ export interface SourceFixture {
22
+ connector: Connector;
23
+ profile: SourceProfile<any, any>;
24
+ spec: unknown;
25
+ /**
26
+ * The bundle's starting documents: Conventions for the target Kind, `Signal` and `Source Feed`,
27
+ * the Source Feed, and any overlay documents.
28
+ */
29
+ documents: readonly OkfDocument[];
30
+ feed: ConceptId;
31
+ identity?: FetchIdentity;
32
+ credential?: TransportCredential;
33
+ }
34
+ export interface SourceRunScript {
35
+ mode?: "incremental" | "complete";
36
+ /** The run's observation time; runs default to one hour apart. */
37
+ at?: string;
38
+ exchanges: readonly ScriptedExchange[];
39
+ /** Editor edits applied before the run. */
40
+ edits?: ReadonlyArray<{
41
+ id: ConceptId;
42
+ set: Record<string, unknown>;
43
+ }>;
44
+ budget?: Partial<SourceBudget>;
45
+ }
46
+ export interface SourceScenario {
47
+ name: string;
48
+ /** Replaces the fixture's spec for this scenario. */
49
+ spec?: unknown;
50
+ runs: readonly SourceRunScript[];
51
+ }
52
+ export interface ScenarioRun {
53
+ receipt: SourceRunReceipt;
54
+ /** Every change a commit carried, replays of pending changes included. */
55
+ changes: RecordChange[];
56
+ /** One record-overlay receipt per committed page. */
57
+ overlay: OverlayReceipt[];
58
+ /** The run's findings, written. */
59
+ findings: OverlayReceipt;
60
+ /** Requests that reached the provider. */
61
+ received: PeerRequest[];
62
+ unscripted: string[];
63
+ unused: ScriptedExchange[];
64
+ stateBefore: SourceState | null;
65
+ state: SourceState | null;
66
+ /** Every document's frontmatter after the run. */
67
+ documents: Record<string, Frontmatter>;
68
+ }
69
+ export interface ScenarioResult {
70
+ name: string;
71
+ base: RequiredScenario | undefined;
72
+ /** The declared hosts the scenario's spec may reach. */
73
+ hosts: string[];
74
+ threshold: number;
75
+ edits: Array<{
76
+ run: number;
77
+ id: ConceptId;
78
+ set: Record<string, unknown>;
79
+ }>;
80
+ runs: ScenarioRun[];
81
+ }
82
+ /** Run one scenario's runs in order over one fresh bundle and one machine state. */
83
+ export declare function runSourceScenario(fixture: SourceFixture, scenario: SourceScenario): Promise<ScenarioResult>;
84
+ /**
85
+ * The problems with one scenario's result: its required outcome rule, plus for every scenario no
86
+ * request to a host outside the declared set and no request the fixture did not script.
87
+ */
88
+ export declare function checkScenario(result: ScenarioResult): string[];
89
+ /** Run every scenario of a fixture, check each, and list the required scenarios it lacks. */
90
+ export declare function runSourceFixture(fixture: SourceFixture, scenarios: readonly SourceScenario[]): Promise<{
91
+ results: ScenarioResult[];
92
+ problems: Record<string, string[]>;
93
+ missing: RequiredScenario[];
94
+ }>;
95
+ //# sourceMappingURL=fixture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/source-harness/fixture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * The fixture harness: replay a profile's scripted provider answers through the engine, map and
3
+ * write each committed page through record-overlay over a MemoryBackend bundle, and check each
4
+ * required scenario's outcome rule. The rules are profile-independent, so one list holds every
5
+ * profile, generic or extension, to the same behaviour.
6
+ */
7
+ import { bindSourceFeed, credentialHosts } from "../connectors.js";
8
+ import { mutateDocument } from "../document-mutation.js";
9
+ import { loadKinds } from "../kinds-load.js";
10
+ import { MemoryBackend } from "../memory-backend.js";
11
+ import { buildSourceIndex } from "../record-overlay/source-index.js";
12
+ import { createSourceOverlayAdapter } from "../source-engine/overlay.js";
13
+ import { MemoryMachineState } from "../source-engine/machine-state.js";
14
+ import { observeSource } from "../source-engine/observe.js";
15
+ import { fetchIdentity } from "../source-engine/robots.js";
16
+ import { ExchangePeer, peerTransport } from "./peer.js";
17
+ /** Every profile's fixture includes these; a name may add a variant after a dot (`cursor.resume.page-number`). */
18
+ export const REQUIRED_SCENARIOS = Object.freeze([
19
+ "errors.auth",
20
+ "errors.rate-limit",
21
+ "errors.server",
22
+ "errors.malformed",
23
+ "page.incomplete",
24
+ "cursor.resume",
25
+ "cursor.hostile",
26
+ "complete.disappear",
27
+ "fields.owned-conflict",
28
+ "fields.unmapped",
29
+ "fields.null",
30
+ "identity.missing",
31
+ "hosts.redirect",
32
+ "hosts.undeclared",
33
+ ]);
34
+ /** The required scenario a name counts toward, or undefined. */
35
+ export function scenarioBase(name) {
36
+ return REQUIRED_SCENARIOS.find((base) => name === base || name.startsWith(`${base}.`));
37
+ }
38
+ /** Required scenarios no name covers. */
39
+ export function missingScenarios(names) {
40
+ const covered = new Set();
41
+ for (const name of names) {
42
+ const base = scenarioBase(name);
43
+ if (base)
44
+ covered.add(base);
45
+ }
46
+ return REQUIRED_SCENARIOS.filter((base) => !covered.has(base));
47
+ }
48
+ const FIXTURE_IDENTITY = fetchIdentity("SuperbeeSourceFixture/1 (+https://superbee.example.org/source-fixture)");
49
+ const SOURCE_ACTOR = "process:source-fixture";
50
+ const EDITOR = "human:fixture-editor";
51
+ const START = Date.parse("2026-01-01T00:00:00.000Z");
52
+ function declaredHosts(fixture, spec, bound) {
53
+ try {
54
+ const checked = fixture.profile.validateSpec(spec);
55
+ if (!checked.ok)
56
+ return [];
57
+ const reach = new Set([...credentialHosts(fixture.connector.auth), ...fixture.connector.domains]);
58
+ return [...new Set(fixture.profile.hostsFor(checked.spec, bound))].filter((host) => reach.has(host)).sort();
59
+ }
60
+ catch {
61
+ return [];
62
+ }
63
+ }
64
+ /** Run one scenario's runs in order over one fresh bundle and one machine state. */
65
+ export async function runSourceScenario(fixture, scenario) {
66
+ const backend = new MemoryBackend();
67
+ await backend.writeReserved("", "index.md", "---\nokf_version: '0.2'\n---\n# Source fixture\n");
68
+ const bundle = { root: "memory://source-fixture", backend };
69
+ for (const doc of fixture.documents)
70
+ await backend.write(doc.id, { id: doc.id, frontmatter: structuredClone(doc.frontmatter), body: doc.body });
71
+ const registry = await loadKinds(bundle);
72
+ const overlay = { bundle, registry, okfVersion: "0.2" };
73
+ const bound = bindSourceFeed(fixture.connector, (await backend.read(fixture.feed)).doc, registry, { okfVersion: "0.2" });
74
+ const state = new MemoryMachineState();
75
+ let accepted = { v: 1, entries: [] };
76
+ const spec = scenario.spec !== undefined ? scenario.spec : fixture.spec;
77
+ const slug = `${fixture.feed.split("/").pop().replace(/[^a-z0-9-]+/gi, "-").toLowerCase()}-source`;
78
+ const result = {
79
+ name: scenario.name, base: scenarioBase(scenario.name), hosts: declaredHosts(fixture, spec, bound),
80
+ threshold: bound.policy.missing_threshold ?? 2, edits: [], runs: [],
81
+ };
82
+ for (const [index, script] of scenario.runs.entries()) {
83
+ for (const edit of script.edits ?? []) {
84
+ result.edits.push({ run: index, id: edit.id, set: { ...edit.set } });
85
+ await mutateDocument({
86
+ bundle, id: edit.id, mode: "patch", registry, strict: false, actor: EDITOR,
87
+ buildCandidate: (existing) => ({ frontmatter: { ...existing.frontmatter, ...edit.set }, body: existing.body }),
88
+ });
89
+ }
90
+ const controller = new AbortController();
91
+ const peer = new ExchangePeer(script.exchanges, { onHang: () => controller.abort() });
92
+ const at = script.at ?? new Date(START + index * 3_600_000).toISOString();
93
+ const stateBefore = (await state.read(fixture.feed))?.state ?? null;
94
+ const changes = [];
95
+ const overlayReceipts = [];
96
+ const adapter = createSourceOverlayAdapter({ content: overlay, policy: bound.policy, actor: SOURCE_ACTOR,
97
+ overlays: await buildSourceIndex(bundle), accepted, slug });
98
+ if (stateBefore) {
99
+ await adapter.reconcile(stateBefore, at);
100
+ accepted = adapter.stagedSnapshot();
101
+ adapter.consume();
102
+ }
103
+ const jointState = {
104
+ read: state.read.bind(state),
105
+ async write(key, value, expected) {
106
+ try {
107
+ const version = await state.write(key, value, expected);
108
+ accepted = adapter.stagedSnapshot() ?? adapter.snapshot();
109
+ adapter.consume();
110
+ return version;
111
+ }
112
+ catch (error) {
113
+ adapter.discard();
114
+ throw error;
115
+ }
116
+ },
117
+ };
118
+ const receipt = await observeSource({
119
+ connector: fixture.connector, bound, profile: fixture.profile, spec, state: jointState, identity: fixture.identity ?? FIXTURE_IDENTITY,
120
+ transport: peerTransport(peer, fixture.credential ? { credential: fixture.credential } : {}),
121
+ mode: script.mode ?? "incremental", signal: controller.signal, now: () => new Date(at),
122
+ ...(script.budget ? { budget: script.budget } : {}),
123
+ commit: async (page) => {
124
+ const applied = await adapter.commit(page);
125
+ changes.push(...page.changes);
126
+ overlayReceipts.push(applied.receipt);
127
+ return applied;
128
+ },
129
+ });
130
+ const findings = await adapter.applyFindings(receipt.findings, at);
131
+ const documents = {};
132
+ for (const id of await backend.list())
133
+ documents[id] = (await backend.read(id)).doc.frontmatter;
134
+ result.runs.push({
135
+ receipt, changes, overlay: overlayReceipts, findings, received: [...peer.received], unscripted: [...peer.unscripted], unused: peer.unused(),
136
+ stateBefore, state: (await state.read(fixture.feed))?.state ?? null, documents,
137
+ });
138
+ }
139
+ return result;
140
+ }
141
+ const json = (value) => JSON.stringify(value ?? null);
142
+ const outcomeFindings = (run) => run.receipt.findings.filter((finding) => finding.key.startsWith("source:"));
143
+ const hasCode = (run, ...codes) => run.receipt.diagnostics.some((d) => codes.includes(d.code));
144
+ const writesNothing = (run) => run.receipt.pages === 0 && run.changes.length === 0;
145
+ const cursorKept = (run) => json(run.state?.cursor) === json(run.stateBefore?.cursor);
146
+ const hostOf = (url) => {
147
+ try {
148
+ return new URL(url).hostname;
149
+ }
150
+ catch {
151
+ return undefined;
152
+ }
153
+ };
154
+ const reachedHost = (run, url) => run.received.some((request) => hostOf(request.url) === hostOf(url));
155
+ /** At least one run satisfies `predicate`, or the scenario fails with `missing`. */
156
+ function some(result, missing, predicate) {
157
+ return result.runs.some(predicate) ? [] : [missing];
158
+ }
159
+ const CHECKS = {
160
+ "errors.auth": (r) => some(r, "no run ends credential_refused with nothing written, no retry, the cursor kept and one finding", (run) => run.receipt.outcome === "credential_refused" && !run.receipt.retry && writesNothing(run) && cursorKept(run) && outcomeFindings(run).length === 1),
161
+ "errors.rate-limit": (r) => some(r, "no run commits a page and then ends deferred on 429 with a Retry-After, the cursor at its last committed page", (run) => run.receipt.outcome === "deferred" && run.receipt.status === 429 && run.receipt.pages >= 1 && run.receipt.retry_after !== undefined
162
+ && run.state?.open === true && json(run.state.cursor) === json(run.receipt.cursor)),
163
+ "errors.server": (r) => some(r, "no run ends provider_unavailable on a 5xx with nothing written and one finding", (run) => run.receipt.outcome === "provider_unavailable" && (run.receipt.status ?? 0) >= 500 && writesNothing(run) && outcomeFindings(run).length === 1),
164
+ "errors.malformed": (r) => [
165
+ ...some(r, "no run ends unsupported_content with nothing written and one finding", (run) => run.receipt.outcome === "unsupported_content" && writesNothing(run) && outcomeFindings(run).length === 1),
166
+ ...some(r, "no run ends too_large with nothing written and one finding", (run) => run.receipt.outcome === "too_large" && writesNothing(run) && outcomeFindings(run).length === 1),
167
+ ],
168
+ "page.incomplete": (r) => some(r, "no run commits a page, stops before the pass ends and stores the cursor of its last committed page as a partial observation", (run) => run.receipt.pages >= 1 && !run.receipt.pass.ended && !run.receipt.pass.complete && run.receipt.outcome !== "observed"
169
+ && run.state?.open === true && json(run.state.cursor) === json(run.receipt.cursor) && run.receipt.changes.disappeared === 0),
170
+ "cursor.resume": (r) => {
171
+ const resumed = r.runs.map((run, index) => ({ run, index })).filter(({ run, index }) => index > 0 && run.receipt.pass.resumed && r.runs[index - 1].state?.open === true);
172
+ if (!resumed.length)
173
+ return ["no run resumes a pass an earlier run left open"];
174
+ const problems = [];
175
+ for (const { run, index } of resumed) {
176
+ if (run.receipt.pass.complete)
177
+ problems.push(`run ${index + 1} resumed a pass and counted it complete`);
178
+ const known = run.stateBefore?.records ?? {};
179
+ for (const change of run.changes) {
180
+ if (change.change_kind === "new" && Object.hasOwn(known, change.external_id) && !known[change.external_id].gone)
181
+ problems.push(`run ${index + 1} reported ${change.external_id} as new after resuming`);
182
+ if (change.change_kind === "changed" && known[change.external_id]?.digest === change.content_digest)
183
+ problems.push(`run ${index + 1} reported an overlap record ${change.external_id} as changed`);
184
+ }
185
+ }
186
+ return problems;
187
+ },
188
+ "cursor.hostile": (r) => some(r, "no run refuses a provider-steered request (a host, redirect, address, scheme or url refusal) after a committed page", (run) => run.receipt.pages >= 1 && run.receipt.outcome === "refused"
189
+ && run.receipt.requests.some((row) => row.purpose === "page" && row.refused !== undefined && /^(host|redirect|address|scheme|url)_/.test(row.refused))),
190
+ "complete.disappear": (r) => {
191
+ const problems = [];
192
+ let disappeared = 0;
193
+ let completeSeen = false;
194
+ let partialBetween = false;
195
+ r.runs.forEach((run, index) => {
196
+ const before = run.stateBefore?.records ?? {};
197
+ const after = run.state?.records ?? {};
198
+ for (const [id, entry] of Object.entries(after)) {
199
+ const grew = entry.missing - (before[id]?.missing ?? 0);
200
+ if (!run.receipt.pass.complete && grew > 0)
201
+ problems.push(`run ${index + 1} is not complete and counted ${id} missing`);
202
+ if (grew > 1)
203
+ problems.push(`run ${index + 1} counted ${id} missing more than once`);
204
+ }
205
+ for (const change of run.changes.filter((c) => c.change_kind === "disappeared")) {
206
+ disappeared += 1;
207
+ if (!run.receipt.pass.complete)
208
+ problems.push(`run ${index + 1} reported ${change.external_id} disappeared without a complete observation`);
209
+ if (change.missing_count !== r.threshold)
210
+ problems.push(`${change.external_id} disappeared after ${change.missing_count} complete observations, not ${r.threshold}`);
211
+ }
212
+ if (run.receipt.pass.complete)
213
+ completeSeen = true;
214
+ else if (completeSeen && run.receipt.pages >= 1)
215
+ partialBetween = true;
216
+ });
217
+ if (!disappeared)
218
+ problems.push("no record disappeared");
219
+ if (!partialBetween)
220
+ problems.push("no partial or resumed pass ran between complete observations");
221
+ return problems;
222
+ },
223
+ "fields.owned-conflict": (r) => some(r, "no run refuses an owned field the editor changed, keeps the editor's value and raises a Signal", (run, index) => run.overlay.some((receipt) => receipt.refusals.some((refusal) => refusal.code === "OVERLAY_DOC_CONFLICT" && refusal.target !== undefined && refusal.field !== undefined
224
+ && r.edits.some((edit) => edit.run <= index && edit.id === refusal.target && Object.hasOwn(edit.set, refusal.field) && json(run.documents[refusal.target]?.[refusal.field]) === json(edit.set[refusal.field])))
225
+ && receipt.results.some((step) => (step.op === "create-signal" || step.op === "collapse-signal") && step.outcome === "applied"))),
226
+ "fields.unmapped": (r) => some(r, "no run keeps or refuses a value outside the values table with a mapping finding and no write of that field", (run) => run.receipt.diagnostics.some((d) => (d.code === "VALUE_UNMAPPED" || d.code === "RECORD_REFUSED")
227
+ && run.receipt.findings.some((f) => f.key.startsWith("mapping:") && f.facts?.code === d.code)
228
+ && !run.changes.some((c) => c.external_id === d.external_id && c.changed_fields.includes(d.field)))),
229
+ "fields.null": (r) => [
230
+ ...some(r, "no committed change removes an optional field the provider sent empty", (run) => run.changes.some((c) => c.before !== null && c.after !== null && Object.keys(c.before).some((field) => !Object.hasOwn(c.after, field) && c.changed_fields.includes(field)))),
231
+ ...some(r, "no run keeps a required field the provider sent empty (VALUE_MISSING)", (run) => hasCode(run, "VALUE_MISSING")),
232
+ ],
233
+ "identity.missing": (r) => some(r, "no run skips a record without an identity and raises a finding", (run) => hasCode(run, "IDENTITY_MISSING") && run.receipt.findings.some((f) => f.key.endsWith(":IDENTITY_MISSING"))),
234
+ "hosts.redirect": (r) => some(r, "no run refuses a redirect to another host before requesting it", (run) => run.receipt.outcome === "refused" && (run.receipt.reason === "host_refused" || run.receipt.reason === "redirect_refused")
235
+ && run.receipt.requests.some((row) => row.refused === run.receipt.reason && !reachedHost(run, row.url))),
236
+ "hosts.undeclared": (r) => some(r, "no run refuses an undeclared host or method with no request to it", (run) => run.receipt.outcome === "refused" && ((run.receipt.reason === "hosts_undeclared" && run.received.length === 0)
237
+ || (run.receipt.reason === "host_refused" && run.receipt.requests.some((row) => row.refused === "host_refused" && !reachedHost(run, row.url)))
238
+ || (run.receipt.reason === "method_refused" && run.receipt.requests.some((row) => row.refused === "method_refused" && !run.received.some((request) => request.method === row.method && request.url === row.url))))),
239
+ };
240
+ /**
241
+ * The problems with one scenario's result: its required outcome rule, plus for every scenario no
242
+ * request to a host outside the declared set and no request the fixture did not script.
243
+ */
244
+ export function checkScenario(result) {
245
+ const problems = [];
246
+ const allowed = new Set(result.hosts);
247
+ result.runs.forEach((run, index) => {
248
+ for (const request of run.received) {
249
+ const host = new URL(request.url).hostname;
250
+ if (!allowed.has(host))
251
+ problems.push(`run ${index + 1} reached undeclared host ${host}`);
252
+ }
253
+ for (const request of run.unscripted)
254
+ problems.push(`run ${index + 1} made an unscripted request: ${request}`);
255
+ });
256
+ if (result.base)
257
+ problems.push(...CHECKS[result.base](result));
258
+ return problems;
259
+ }
260
+ /** Run every scenario of a fixture, check each, and list the required scenarios it lacks. */
261
+ export async function runSourceFixture(fixture, scenarios) {
262
+ const results = [];
263
+ const problems = {};
264
+ for (const scenario of scenarios) {
265
+ const result = await runSourceScenario(fixture, scenario);
266
+ results.push(result);
267
+ const found = checkScenario(result);
268
+ if (found.length)
269
+ problems[scenario.name] = found;
270
+ }
271
+ return { results, problems, missing: missingScenarios(scenarios.map((s) => s.name)) };
272
+ }
273
+ //# sourceMappingURL=fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/source-harness/fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAkC,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAA8B,MAAM,6BAA6B,CAAC;AAErG,OAAO,EAAE,kBAAkB,EAAoB,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAsB,MAAM,4BAA4B,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAqE,MAAM,WAAW,CAAC;AAE3H,kHAAkH;AAClH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,aAAa;IACb,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,oBAAoB;IACpB,uBAAuB;IACvB,iBAAiB;IACjB,aAAa;IACb,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;CACV,CAAC,CAAC;AAGZ,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,gBAAgB,CAAC,KAAuB;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AA6DD,MAAM,gBAAgB,GAAG,aAAa,CAAC,wEAAwE,CAAkB,CAAC;AAClI,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAC9C,MAAM,MAAM,GAAG,sBAAsB,CAAC;AACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAErD,SAAS,aAAa,CAAC,OAAsB,EAAE,IAAa,EAAE,KAAgB;IAC5E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAClG,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAsB,EAAE,QAAwB;IACtF,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IACpC,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,kDAAkD,CAAC,CAAC;IAChG,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,CAAC;IAC5D,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAChJ,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,OAAO,GAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACvE,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACzH,MAAM,KAAK,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACvC,IAAI,QAAQ,GAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACxE,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC;IACpG,MAAM,MAAM,GAAmB;QAC7B,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC;QAClG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;KACpE,CAAC;IACF,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,cAAc,CAAC;gBACnB,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;gBAC1E,cAAc,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,QAAS,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,EAAiB,EAAE,IAAI,EAAE,QAAS,CAAC,IAAI,EAAE,CAAC;aAChI,CAAC,CAAC;QACL,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1E,MAAM,WAAW,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;QACpE,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,eAAe,GAAqB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,0BAA0B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY;YACtG,QAAQ,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACzC,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAG,CAAC;YACrC,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;QACD,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,KAAkB,EAAE,QAAuB;gBAClE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;oBACxD,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC1D,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO,OAAO,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBAAC,MAAM,KAAK,CAAC;gBAAC,CAAC;YACrD,CAAC;SACF,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;YAClC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,gBAAgB;YACtI,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACrB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9B,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtC,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,SAAS,GAAgC,EAAE,CAAC;QAClD,KAAK,MAAM,EAAE,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QAChG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YAC3I,WAAW,EAAE,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE,SAAS;SAC/E,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AACvE,MAAM,eAAe,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1H,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAE,GAAG,KAAe,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtH,MAAM,aAAa,GAAG,CAAC,GAAgB,EAAW,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;AACzG,MAAM,UAAU,GAAG,CAAC,GAAgB,EAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC5G,MAAM,MAAM,GAAG,CAAC,GAAW,EAAsB,EAAE;IACjD,IAAI,CAAC;QAAC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AACnE,CAAC,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,GAAgB,EAAE,GAAW,EAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAEpI,oFAAoF;AACpF,SAAS,IAAI,CAAC,MAAsB,EAAE,OAAe,EAAE,SAAuD;IAC5G,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,MAAM,GAAmE;IAC7E,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,gGAAgG,EAC5H,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,oBAAoB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAE5J,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,+GAA+G,EACjJ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS;WACvI,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvF,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,gFAAgF,EAC9G,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,sBAAsB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAEzJ,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACzB,GAAG,IAAI,CAAC,CAAC,EAAE,sEAAsE,EAC/E,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,qBAAqB,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QACpH,GAAG,IAAI,CAAC,CAAC,EAAE,4DAA4D,EACrE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,WAAW,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;KAC3G;IAED,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,6HAA6H,EAC7J,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU;WACzH,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,CAAC;IAEhI,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1K,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACxG,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC;YAC7C,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAE,CAAC,IAAI;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,aAAa,MAAM,CAAC,WAAW,wBAAwB,CAAC,CAAC;gBACzM,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,cAAc;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,+BAA+B,MAAM,CAAC,WAAW,aAAa,CAAC,CAAC;YACrM,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,qHAAqH,EACpJ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS;WAC/D,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,sCAAsC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3J,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,gCAAgC,EAAE,UAAU,CAAC,CAAC;gBACxH,IAAI,IAAI,GAAG,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;YACvF,CAAC;YACD,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,aAAa,CAAC,EAAE,CAAC;gBAChF,WAAW,IAAI,CAAC,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,aAAa,MAAM,CAAC,WAAW,6CAA6C,CAAC,CAAC;gBAC5I,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,CAAC,SAAS;oBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,sBAAsB,MAAM,CAAC,aAAa,+BAA+B,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YACvK,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ;gBAAE,YAAY,GAAG,IAAI,CAAC;iBAC9C,IAAI,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;gBAAE,cAAc,GAAG,IAAI,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW;YAAE,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc;YAAE,QAAQ,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QACnG,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,gGAAgG,EACtI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,sBAAsB,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;WAClL,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,KAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC;WAChN,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,eAAe,IAAI,IAAI,CAAC,EAAE,KAAK,iBAAiB,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC;IAErI,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,4GAA4G,EAC5I,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;WACpG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAK,CAAC,CAAC,KAAuC,EAAE,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;WAC7H,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAExG,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACpB,GAAG,IAAI,CAAC,CAAC,EAAE,uEAAuE,EAChF,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxL,GAAG,IAAI,CAAC,CAAC,EAAE,uEAAuE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;KAC5H;IAED,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,gEAAgE,EACjG,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAErH,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,gEAAgE,EAC/F,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,kBAAkB,CAAC;WAC7H,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5G,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,mEAAmE,EACpG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,CAC5C,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,kBAAkB,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;WACrE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,cAAc,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;WAC3I,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,gBAAgB,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,gBAAgB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CACxN,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAsB;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACjC,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,UAAU;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAsB,EAAE,SAAoC;IACjG,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM;YAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACxF,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `@superbee/core/source-harness`: how a profile and a transport prove the source engine's rules
3
+ * offline.
4
+ *
5
+ * {@link runSourceScenario} replays a profile's scripted provider answers through
6
+ * `observeSource`, writing each committed page through record-overlay over a MemoryBackend
7
+ * bundle, and {@link checkScenario} holds the result to the required scenario's outcome rule
8
+ * ({@link REQUIRED_SCENARIOS}). {@link runTransportConformance} is the suite every transport passes
9
+ * against a scripted peer: the credential only to its host (a custom header included), redirects
10
+ * returned unfollowed, a body over the bound refused, and behind the engine a cross-host or
11
+ * private-address redirect that reaches nothing. {@link peerTransport} is a memory transport that
12
+ * passes it. Results are rows, not assertions, so any test runner can use them.
13
+ *
14
+ * Storage-neutral: no Node globals or builtins, and nothing here calls `fetch`.
15
+ */
16
+ export { ExchangePeer, peerTransport, ScriptedPeer } from "./peer.js";
17
+ export type { PeerRequest, PeerResponse, ScriptedExchange, TransportCredential } from "./peer.js";
18
+ export { CONFORMANCE_SCENARIOS, runTransportConformance } from "./conformance.js";
19
+ export type { ConformanceRow, TransportConformanceTarget } from "./conformance.js";
20
+ export { checkScenario, missingScenarios, REQUIRED_SCENARIOS, runSourceFixture, runSourceScenario, scenarioBase } from "./fixture.js";
21
+ export type { RequiredScenario, ScenarioResult, ScenarioRun, SourceFixture, SourceRunScript, SourceScenario } from "./fixture.js";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/source-harness/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAClF,YAAY,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACtI,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `@superbee/core/source-harness`: how a profile and a transport prove the source engine's rules
3
+ * offline.
4
+ *
5
+ * {@link runSourceScenario} replays a profile's scripted provider answers through
6
+ * `observeSource`, writing each committed page through record-overlay over a MemoryBackend
7
+ * bundle, and {@link checkScenario} holds the result to the required scenario's outcome rule
8
+ * ({@link REQUIRED_SCENARIOS}). {@link runTransportConformance} is the suite every transport passes
9
+ * against a scripted peer: the credential only to its host (a custom header included), redirects
10
+ * returned unfollowed, a body over the bound refused, and behind the engine a cross-host or
11
+ * private-address redirect that reaches nothing. {@link peerTransport} is a memory transport that
12
+ * passes it. Results are rows, not assertions, so any test runner can use them.
13
+ *
14
+ * Storage-neutral: no Node globals or builtins, and nothing here calls `fetch`.
15
+ */
16
+ export { ExchangePeer, peerTransport, ScriptedPeer } from "./peer.js";
17
+ export { CONFORMANCE_SCENARIOS, runTransportConformance } from "./conformance.js";
18
+ export { checkScenario, missingScenarios, REQUIRED_SCENARIOS, runSourceFixture, runSourceScenario, scenarioBase } from "./fixture.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/source-harness/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * A scripted provider and the memory transport that reaches it. The peer stands in for the
3
+ * network: it answers every request from a script and records exactly what arrived, headers
4
+ * included, so a test can see what a transport sent. The memory transport honours the transport
5
+ * contract (no redirect following, a refused rather than truncated body over the bound, the
6
+ * credential only toward its hosts over https), so it passes the conformance suite.
7
+ */
8
+ import type { HttpMethod, Transport } from "../source-engine/types.js";
9
+ /** A request as it reached the provider. */
10
+ export interface PeerRequest {
11
+ url: string;
12
+ method: HttpMethod;
13
+ headers: Record<string, string>;
14
+ body?: string;
15
+ }
16
+ export type PeerResponse = {
17
+ status: number;
18
+ headers?: Readonly<Record<string, string>>;
19
+ body?: string;
20
+ }
21
+ /** Never answers: the request waits for the run's deadline. */
22
+ | {
23
+ hang: true;
24
+ }
25
+ /** The connection fails. */
26
+ | {
27
+ fail: true;
28
+ };
29
+ export interface ScriptedExchange {
30
+ request: {
31
+ method?: HttpMethod;
32
+ url: string;
33
+ };
34
+ response: PeerResponse;
35
+ }
36
+ /** The credential a transport under test holds: a header sent only toward `hosts` over https. */
37
+ export interface TransportCredential {
38
+ hosts: readonly string[];
39
+ header: string;
40
+ value: string;
41
+ }
42
+ export declare class ScriptedPeer {
43
+ /** Every request that reached the provider, in order. */
44
+ readonly received: PeerRequest[];
45
+ private readonly handler;
46
+ private readonly onHang;
47
+ constructor(handler: (request: PeerRequest) => PeerResponse, options?: {
48
+ onHang?: () => void;
49
+ });
50
+ answer(request: PeerRequest): PeerResponse;
51
+ /** Requests received for one hostname. */
52
+ to(hostname: string): PeerRequest[];
53
+ }
54
+ /** A peer answering from exchanges, each used once, matched on method and URL in order. */
55
+ export declare class ExchangePeer extends ScriptedPeer {
56
+ /** Requests no exchange matched (answered 404); robots.txt is answered 404 without being listed. */
57
+ readonly unscripted: string[];
58
+ private readonly pending;
59
+ constructor(exchanges: readonly ScriptedExchange[], options?: {
60
+ onHang?: () => void;
61
+ });
62
+ /** Exchanges no request used. */
63
+ unused(): ScriptedExchange[];
64
+ }
65
+ /**
66
+ * A transport over a scripted peer. It adds `credential` only when the engine marks the request
67
+ * as toward a credential host and the URL itself is https on the default port with a host exactly
68
+ * one of the credential's hosts. It returns redirects unfollowed, refuses a body over `maxBytes`
69
+ * and rejects when the request's signal aborts.
70
+ */
71
+ export declare function peerTransport(peer: ScriptedPeer, options?: {
72
+ credential?: TransportCredential;
73
+ }): Transport;
74
+ //# sourceMappingURL=peer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/source-harness/peer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAmB,MAAM,2BAA2B,CAAC;AAExF,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC/E,+DAA+D;GAC7D;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE;AAChB,4BAA4B;GAC1B;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAEnB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,iGAAiG;AACjG,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,YAAY;IACvB,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAM;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;gBAEtC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,YAAY,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;KAAO;IAKlG,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY;IAQ1C,0CAA0C;IAC1C,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;CAGpC;AAYD,2FAA2F;AAC3F,qBAAa,YAAa,SAAQ,YAAY;IAC5C,oGAAoG;IACpG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,SAAS,EAAE,SAAS,gBAAgB,EAAE,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;KAAO;IAgBzF,iCAAiC;IACjC,MAAM,IAAI,gBAAgB,EAAE;CAG7B;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,mBAAmB,CAAA;CAAO,GAAG,SAAS,CA6B/G"}