@wirebench/engine 2.2.1 → 3.1.0-rc.1

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 (566) hide show
  1. package/README.md +134 -1
  2. package/dist/account/schema.d.ts +34 -0
  3. package/dist/account/schema.js +29 -0
  4. package/dist/assert/callback.d.ts +76 -0
  5. package/dist/assert/callback.js +320 -0
  6. package/dist/assert/capture-source.d.ts +50 -0
  7. package/dist/assert/capture-source.js +89 -0
  8. package/dist/assert/check.d.ts +8 -0
  9. package/dist/assert/check.js +18 -0
  10. package/dist/assert/header.d.ts +5 -0
  11. package/dist/assert/header.js +48 -0
  12. package/dist/assert/index.d.ts +2 -2
  13. package/dist/assert/index.js +12 -0
  14. package/dist/assert/match.d.ts +6 -0
  15. package/dist/assert/match.js +13 -4
  16. package/dist/assert/model.d.ts +110 -3
  17. package/dist/assert/model.js +16 -1
  18. package/dist/assert/schema.d.ts +194 -1
  19. package/dist/assert/schema.js +154 -12
  20. package/dist/assert/status-names.d.ts +9 -0
  21. package/dist/assert/status-names.js +27 -0
  22. package/dist/assert/status.d.ts +4 -1
  23. package/dist/assert/status.js +27 -3
  24. package/dist/asyncapi/browser.d.ts +7 -0
  25. package/dist/asyncapi/browser.js +6 -0
  26. package/dist/asyncapi/frame-check-worker-host.d.ts +44 -0
  27. package/dist/asyncapi/frame-check-worker-host.js +175 -0
  28. package/dist/asyncapi/frame-check-worker.d.ts +12 -0
  29. package/dist/asyncapi/frame-check-worker.js +25 -0
  30. package/dist/asyncapi/frame-check.d.ts +25 -0
  31. package/dist/asyncapi/frame-check.js +78 -0
  32. package/dist/asyncapi/import.d.ts +25 -0
  33. package/dist/asyncapi/import.js +34 -0
  34. package/dist/asyncapi/map.d.ts +40 -0
  35. package/dist/asyncapi/map.js +230 -0
  36. package/dist/asyncapi/model.d.ts +84 -0
  37. package/dist/asyncapi/model.js +7 -0
  38. package/dist/asyncapi/normalise-2.d.ts +13 -0
  39. package/dist/asyncapi/normalise-2.js +113 -0
  40. package/dist/asyncapi/normalise-3.d.ts +14 -0
  41. package/dist/asyncapi/normalise-3.js +133 -0
  42. package/dist/asyncapi/parse.d.ts +31 -0
  43. package/dist/asyncapi/parse.js +85 -0
  44. package/dist/asyncapi/read.d.ts +35 -0
  45. package/dist/asyncapi/read.js +186 -0
  46. package/dist/asyncapi/security.d.ts +14 -0
  47. package/dist/asyncapi/security.js +55 -0
  48. package/dist/asyncapi/update.d.ts +53 -0
  49. package/dist/asyncapi/update.js +220 -0
  50. package/dist/errors.d.ts +16 -0
  51. package/dist/errors.js +22 -0
  52. package/dist/grpc/events.d.ts +22 -0
  53. package/dist/grpc/events.js +1 -0
  54. package/dist/grpc/expand.d.ts +1 -1
  55. package/dist/grpc/expand.js +15 -5
  56. package/dist/grpc/files.d.ts +271 -0
  57. package/dist/grpc/files.js +62 -0
  58. package/dist/grpc/model.d.ts +11 -1
  59. package/dist/grpc/module.d.ts +2 -0
  60. package/dist/grpc/module.js +13 -0
  61. package/dist/grpc/run.d.ts +73 -0
  62. package/dist/grpc/run.js +407 -0
  63. package/dist/grpc/script-types.d.ts +8 -0
  64. package/dist/grpc/script-types.js +149 -0
  65. package/dist/grpc/scripting.d.ts +34 -0
  66. package/dist/grpc/scripting.js +147 -0
  67. package/dist/grpc/send-input.d.ts +46 -0
  68. package/dist/grpc/send-input.js +42 -0
  69. package/dist/grpc/send.d.ts +2 -2
  70. package/dist/grpc/status.d.ts +9 -2
  71. package/dist/grpc/status.js +11 -24
  72. package/dist/grpc/storage.d.ts +9 -0
  73. package/dist/grpc/storage.js +167 -0
  74. package/dist/{rest/auth.d.ts → http/auth/apply-auth.d.ts} +4 -4
  75. package/dist/{rest/auth.js → http/auth/apply-auth.js} +1 -1
  76. package/dist/http/auth/apply.d.ts +1 -1
  77. package/dist/{rest → http/auth}/oauth2.d.ts +2 -2
  78. package/dist/{rest → http/auth}/oauth2.js +1 -1
  79. package/dist/http/auth/send-auth.d.ts +57 -0
  80. package/dist/http/auth/send-auth.js +7 -0
  81. package/dist/http/client.js +150 -8
  82. package/dist/http/cookies.d.ts +79 -0
  83. package/dist/http/cookies.js +81 -0
  84. package/dist/http/curl.d.ts +4 -14
  85. package/dist/http/curl.js +4 -154
  86. package/dist/http/decompress.d.ts +7 -0
  87. package/dist/http/decompress.js +23 -1
  88. package/dist/http/document-fetch.d.ts +42 -0
  89. package/dist/http/document-fetch.js +207 -0
  90. package/dist/http/entries.d.ts +27 -0
  91. package/dist/http/entries.js +16 -0
  92. package/dist/http/escape.d.ts +18 -0
  93. package/dist/http/escape.js +30 -0
  94. package/dist/http/fetch-document.d.ts +28 -0
  95. package/dist/{wsdl/fetch.js → http/fetch-document.js} +8 -16
  96. package/dist/http/media-type.d.ts +9 -0
  97. package/dist/http/media-type.js +12 -0
  98. package/dist/http/transcript-cap.d.ts +26 -0
  99. package/dist/http/transcript-cap.js +36 -0
  100. package/dist/http/types.d.ts +59 -0
  101. package/dist/http/webhook-signature.d.ts +81 -0
  102. package/dist/http/webhook-signature.js +227 -0
  103. package/dist/import-detect.d.ts +2 -2
  104. package/dist/import-detect.js +10 -1
  105. package/dist/index.d.ts +207 -55
  106. package/dist/index.js +129 -32
  107. package/dist/json/cursor.d.ts +2 -0
  108. package/dist/json/cursor.js +1 -0
  109. package/dist/json/pointer-range.d.ts +18 -0
  110. package/dist/json/pointer-range.js +157 -0
  111. package/dist/json/schema/model.d.ts +59 -0
  112. package/dist/json/schema/model.js +8 -0
  113. package/dist/json/schema/parse-text.d.ts +16 -0
  114. package/dist/json/schema/parse-text.js +37 -0
  115. package/dist/{rest/openapi → json/schema}/refs.d.ts +2 -2
  116. package/dist/{rest/openapi → json/schema}/refs.js +3 -3
  117. package/dist/{rest/openapi → json/schema}/sample.d.ts +4 -0
  118. package/dist/{rest/openapi → json/schema}/sample.js +2 -2
  119. package/dist/json/schema/source.d.ts +21 -0
  120. package/dist/json/schema/source.js +8 -0
  121. package/dist/json/schema-validate.d.ts +49 -0
  122. package/dist/json/schema-validate.js +557 -0
  123. package/dist/{wss/keystore → keystore}/index.js +1 -1
  124. package/dist/{wss/keystore → keystore}/pem.js +1 -1
  125. package/dist/{wss/keystore → keystore}/pkcs12.js +1 -1
  126. package/dist/project/attachments-cache.d.ts +3 -1
  127. package/dist/{wsdl → project}/cache-naming.js +1 -1
  128. package/dist/project/endpoints.d.ts +18 -8
  129. package/dist/project/endpoints.js +21 -6
  130. package/dist/project/environments.d.ts +7 -5
  131. package/dist/project/history.d.ts +105 -9
  132. package/dist/project/history.js +195 -23
  133. package/dist/project/inherit.d.ts +7 -0
  134. package/dist/project/inherit.js +9 -0
  135. package/dist/project/keystores.d.ts +1 -1
  136. package/dist/project/load-helpers.d.ts +89 -0
  137. package/dist/project/load-helpers.js +177 -0
  138. package/dist/project/load.d.ts +30 -4
  139. package/dist/project/load.js +168 -545
  140. package/dist/project/managed-files.d.ts +36 -0
  141. package/dist/project/managed-files.js +97 -0
  142. package/dist/project/migrate.d.ts +2 -2
  143. package/dist/project/migrate.js +2 -2
  144. package/dist/project/model.d.ts +92 -14
  145. package/dist/project/model.js +50 -4
  146. package/dist/project/paths.d.ts +10 -1
  147. package/dist/project/paths.js +10 -1
  148. package/dist/project/preferences.d.ts +11 -2
  149. package/dist/project/preferences.js +5 -1
  150. package/dist/project/properties.d.ts +31 -17
  151. package/dist/project/properties.js +89 -70
  152. package/dist/project/request-location.d.ts +20 -0
  153. package/dist/project/request-location.js +62 -0
  154. package/dist/project/save.d.ts +12 -2
  155. package/dist/project/save.js +186 -141
  156. package/dist/project/schema-parts.d.ts +337 -0
  157. package/dist/project/schema-parts.js +248 -0
  158. package/dist/project/schema.d.ts +72 -928
  159. package/dist/project/schema.js +17 -466
  160. package/dist/project/sequence-guards.d.ts +43 -0
  161. package/dist/project/sequence-guards.js +109 -0
  162. package/dist/project/serialize-helpers.d.ts +60 -0
  163. package/dist/project/serialize-helpers.js +108 -0
  164. package/dist/project/serialize.d.ts +7 -8
  165. package/dist/project/serialize.js +34 -293
  166. package/dist/protocol/features.d.ts +51 -0
  167. package/dist/protocol/features.js +64 -0
  168. package/dist/protocol/index.d.ts +7 -0
  169. package/dist/protocol/index.js +4 -0
  170. package/dist/protocol/module.d.ts +247 -0
  171. package/dist/protocol/module.js +48 -0
  172. package/dist/protocol/registry.d.ts +42 -0
  173. package/dist/protocol/registry.js +47 -0
  174. package/dist/protocols.d.ts +77 -0
  175. package/dist/protocols.js +40 -0
  176. package/dist/redact/index.d.ts +12 -1
  177. package/dist/redact/index.js +55 -7
  178. package/dist/redact/literal.d.ts +10 -0
  179. package/dist/redact/literal.js +110 -12
  180. package/dist/rest/body.d.ts +2 -10
  181. package/dist/rest/body.js +3 -25
  182. package/dist/rest/browser.d.ts +4 -0
  183. package/dist/rest/browser.js +5 -0
  184. package/dist/rest/contract-check-worker-host.d.ts +36 -0
  185. package/dist/rest/contract-check-worker-host.js +158 -0
  186. package/dist/rest/contract-check-worker.d.ts +7 -0
  187. package/dist/rest/contract-check-worker.js +28 -0
  188. package/dist/rest/contract-check.d.ts +43 -0
  189. package/dist/rest/contract-check.js +217 -0
  190. package/dist/rest/cookie-jar.d.ts +62 -0
  191. package/dist/rest/cookie-jar.js +262 -0
  192. package/dist/rest/cookies.d.ts +6 -22
  193. package/dist/rest/cookies.js +6 -42
  194. package/dist/rest/curl.js +5 -1
  195. package/dist/rest/events.d.ts +12 -0
  196. package/dist/rest/events.js +1 -0
  197. package/dist/rest/expand.d.ts +6 -1
  198. package/dist/rest/expand.js +29 -11
  199. package/dist/rest/files.d.ts +439 -0
  200. package/dist/rest/files.js +107 -0
  201. package/dist/rest/json-form.d.ts +97 -0
  202. package/dist/rest/json-form.js +396 -0
  203. package/dist/rest/model.d.ts +35 -24
  204. package/dist/rest/model.js +6 -9
  205. package/dist/rest/module.d.ts +2 -0
  206. package/dist/rest/module.js +13 -0
  207. package/dist/rest/openapi/cache.d.ts +7 -2
  208. package/dist/rest/openapi/cache.js +2 -2
  209. package/dist/rest/openapi/import.d.ts +11 -16
  210. package/dist/rest/openapi/import.js +6 -2
  211. package/dist/rest/openapi/map.d.ts +38 -1
  212. package/dist/rest/openapi/map.js +151 -41
  213. package/dist/rest/openapi/match.d.ts +20 -0
  214. package/dist/rest/openapi/match.js +117 -0
  215. package/dist/rest/openapi/model.d.ts +33 -45
  216. package/dist/rest/openapi/parse.d.ts +3 -12
  217. package/dist/rest/openapi/parse.js +138 -67
  218. package/dist/rest/openapi/responses.d.ts +23 -0
  219. package/dist/rest/openapi/responses.js +59 -0
  220. package/dist/rest/openapi/runtime-expression.d.ts +69 -0
  221. package/dist/rest/openapi/runtime-expression.js +213 -0
  222. package/dist/rest/openapi/update.d.ts +116 -0
  223. package/dist/rest/openapi/update.js +456 -0
  224. package/dist/rest/postman/map.d.ts +1 -0
  225. package/dist/rest/postman/map.js +66 -4
  226. package/dist/rest/postman/model.d.ts +9 -0
  227. package/dist/rest/postman/parse.js +33 -10
  228. package/dist/rest/response.d.ts +2 -23
  229. package/dist/rest/response.js +3 -75
  230. package/dist/rest/run.d.ts +56 -0
  231. package/dist/rest/run.js +395 -0
  232. package/dist/rest/script-types.d.ts +7 -0
  233. package/dist/rest/script-types.js +83 -0
  234. package/dist/rest/scripting.d.ts +38 -0
  235. package/dist/rest/scripting.js +282 -0
  236. package/dist/rest/send-input.d.ts +54 -0
  237. package/dist/rest/send-input.js +73 -0
  238. package/dist/rest/send.d.ts +77 -4
  239. package/dist/rest/send.js +128 -7
  240. package/dist/rest/sse-transcript.d.ts +25 -0
  241. package/dist/rest/sse-transcript.js +95 -0
  242. package/dist/rest/sse.d.ts +43 -0
  243. package/dist/rest/sse.js +195 -0
  244. package/dist/rest/storage.d.ts +26 -0
  245. package/dist/rest/storage.js +262 -0
  246. package/dist/rest/url.d.ts +10 -4
  247. package/dist/rest/url.js +38 -5
  248. package/dist/run/baseline-update.d.ts +35 -0
  249. package/dist/run/baseline-update.js +97 -0
  250. package/dist/run/baseline.d.ts +42 -0
  251. package/dist/run/baseline.js +93 -0
  252. package/dist/run/context.d.ts +86 -0
  253. package/dist/run/context.js +31 -0
  254. package/dist/run/current-values.d.ts +32 -0
  255. package/dist/run/current-values.js +43 -0
  256. package/dist/run/event-queue.d.ts +14 -0
  257. package/dist/run/event-queue.js +46 -0
  258. package/dist/run/exchange.d.ts +62 -0
  259. package/dist/run/exchange.js +65 -0
  260. package/dist/run/host.d.ts +89 -0
  261. package/dist/run/host.js +1 -0
  262. package/dist/run/index.d.ts +20 -7
  263. package/dist/run/index.js +12 -4
  264. package/dist/run/oauth2-token.d.ts +42 -0
  265. package/dist/run/oauth2-token.js +92 -0
  266. package/dist/run/open.d.ts +12 -0
  267. package/dist/run/open.js +16 -0
  268. package/dist/run/run.d.ts +124 -4
  269. package/dist/run/run.js +293 -134
  270. package/dist/run/scope.d.ts +11 -0
  271. package/dist/run/scope.js +26 -0
  272. package/dist/run/script-support.d.ts +53 -0
  273. package/dist/run/script-support.js +68 -0
  274. package/dist/run/secret-needs.d.ts +11 -4
  275. package/dist/run/secret-needs.js +48 -96
  276. package/dist/run/select.d.ts +34 -25
  277. package/dist/run/select.js +45 -54
  278. package/dist/run/send-helpers.d.ts +93 -0
  279. package/dist/run/send-helpers.js +255 -0
  280. package/dist/run/tree.d.ts +50 -0
  281. package/dist/run/tree.js +54 -0
  282. package/dist/script/api/postman.d.ts +10 -0
  283. package/dist/script/api/postman.js +264 -0
  284. package/dist/script/api/prelude.d.ts +20 -0
  285. package/dist/script/api/prelude.js +215 -0
  286. package/dist/script/apply.d.ts +44 -0
  287. package/dist/script/apply.js +120 -0
  288. package/dist/script/check/host.d.ts +41 -0
  289. package/dist/script/check/host.js +143 -0
  290. package/dist/script/check/service.d.ts +52 -0
  291. package/dist/script/check/service.js +195 -0
  292. package/dist/script/check/worker.d.ts +1 -0
  293. package/dist/script/check/worker.js +40 -0
  294. package/dist/script/index.d.ts +16 -0
  295. package/dist/script/index.js +10 -0
  296. package/dist/script/lookup.d.ts +10 -0
  297. package/dist/script/lookup.js +23 -0
  298. package/dist/script/model.d.ts +82 -0
  299. package/dist/script/model.js +18 -0
  300. package/dist/script/props.d.ts +8 -0
  301. package/dist/script/props.js +28 -0
  302. package/dist/script/request-scripts.d.ts +83 -0
  303. package/dist/script/request-scripts.js +160 -0
  304. package/dist/script/run.d.ts +47 -0
  305. package/dist/script/run.js +146 -0
  306. package/dist/script/sandbox/execute.d.ts +26 -0
  307. package/dist/script/sandbox/execute.js +212 -0
  308. package/dist/script/sandbox/host-api.d.ts +27 -0
  309. package/dist/script/sandbox/host-api.js +101 -0
  310. package/dist/script/sandbox/host.d.ts +18 -0
  311. package/dist/script/sandbox/host.js +172 -0
  312. package/dist/script/sandbox/model.d.ts +69 -0
  313. package/dist/script/sandbox/model.js +24 -0
  314. package/dist/script/sandbox/worker.d.ts +1 -0
  315. package/dist/script/sandbox/worker.js +20 -0
  316. package/dist/script/send.d.ts +27 -0
  317. package/dist/script/send.js +76 -0
  318. package/dist/script/strip.d.ts +5 -0
  319. package/dist/script/strip.js +43 -0
  320. package/dist/script/types/api.d.ts +38 -0
  321. package/dist/script/types/api.js +113 -0
  322. package/dist/script/types/json-schema.d.ts +26 -0
  323. package/dist/script/types/json-schema.js +206 -0
  324. package/dist/secrets/env-names.d.ts +9 -1
  325. package/dist/secrets/env-names.js +17 -1
  326. package/dist/secrets/resolve.d.ts +44 -4
  327. package/dist/secrets/resolve.js +58 -1
  328. package/dist/secrets/scan/apply.d.ts +36 -0
  329. package/dist/secrets/scan/apply.js +194 -0
  330. package/dist/secrets/scan/rules.d.ts +32 -0
  331. package/dist/secrets/scan/rules.js +346 -0
  332. package/dist/secrets/scan/scan.d.ts +6 -0
  333. package/dist/secrets/scan/scan.js +57 -0
  334. package/dist/secrets/scan/walk.d.ts +70 -0
  335. package/dist/secrets/scan/walk.js +156 -0
  336. package/dist/secrets/secret-refs.d.ts +8 -0
  337. package/dist/secrets/secret-refs.js +25 -0
  338. package/dist/secrets/secret-token.d.ts +17 -0
  339. package/dist/secrets/secret-token.js +25 -0
  340. package/dist/sequence/file.d.ts +169 -0
  341. package/dist/sequence/file.js +237 -0
  342. package/dist/sequence/index.d.ts +7 -0
  343. package/dist/sequence/index.js +5 -0
  344. package/dist/sequence/load.d.ts +32 -0
  345. package/dist/sequence/load.js +56 -0
  346. package/dist/sequence/model.d.ts +115 -0
  347. package/dist/sequence/model.js +53 -0
  348. package/dist/sequence/run.d.ts +131 -0
  349. package/dist/sequence/run.js +191 -0
  350. package/dist/sequence/transfer.d.ts +24 -0
  351. package/dist/sequence/transfer.js +75 -0
  352. package/dist/server-api/audit.d.ts +455 -0
  353. package/dist/server-api/audit.js +186 -0
  354. package/dist/server-api/ci-tokens.d.ts +50 -0
  355. package/dist/server-api/ci-tokens.js +35 -0
  356. package/dist/server-api/hooks.d.ts +337 -0
  357. package/dist/server-api/hooks.js +152 -0
  358. package/dist/server-api/identity.d.ts +210 -0
  359. package/dist/server-api/identity.js +115 -0
  360. package/dist/server-api/licensing.d.ts +80 -0
  361. package/dist/server-api/licensing.js +53 -0
  362. package/dist/server-api/live.d.ts +132 -0
  363. package/dist/server-api/live.js +102 -0
  364. package/dist/server-api/meta.d.ts +31 -0
  365. package/dist/server-api/meta.js +21 -0
  366. package/dist/server-api/sync.d.ts +179 -0
  367. package/dist/server-api/sync.js +124 -0
  368. package/dist/server-api/teams.d.ts +306 -0
  369. package/dist/server-api/teams.js +113 -0
  370. package/dist/snapshot/diff.d.ts +30 -0
  371. package/dist/snapshot/diff.js +75 -0
  372. package/dist/snapshot/format.d.ts +17 -0
  373. package/dist/snapshot/format.js +40 -0
  374. package/dist/snapshot/golden-file.d.ts +45 -0
  375. package/dist/snapshot/golden-file.js +173 -0
  376. package/dist/snapshot/ignore.d.ts +14 -0
  377. package/dist/snapshot/ignore.js +79 -0
  378. package/dist/snapshot/index.d.ts +9 -0
  379. package/dist/snapshot/index.js +9 -0
  380. package/dist/snapshot/json-diff.d.ts +3 -0
  381. package/dist/snapshot/json-diff.js +93 -0
  382. package/dist/snapshot/xml-diff.d.ts +10 -0
  383. package/dist/snapshot/xml-diff.js +194 -0
  384. package/dist/soap/auth.d.ts +26 -0
  385. package/dist/soap/auth.js +54 -0
  386. package/dist/soap/curl.d.ts +20 -0
  387. package/dist/soap/curl.js +161 -0
  388. package/dist/soap/expand.d.ts +24 -0
  389. package/dist/soap/expand.js +95 -0
  390. package/dist/soap/files.d.ts +384 -0
  391. package/dist/soap/files.js +114 -0
  392. package/dist/soap/form-request.d.ts +13 -0
  393. package/dist/soap/form-request.js +2 -2
  394. package/dist/soap/generate.d.ts +12 -0
  395. package/dist/{generate.js → soap/generate.js} +4 -4
  396. package/dist/{import.d.ts → soap/import.d.ts} +4 -4
  397. package/dist/{import.js → soap/import.js} +13 -13
  398. package/dist/soap/json-operation.d.ts +35 -0
  399. package/dist/soap/json-operation.js +225 -0
  400. package/dist/soap/legacy-project/env-refs.d.ts +19 -0
  401. package/dist/soap/legacy-project/env-refs.js +105 -0
  402. package/dist/soap/legacy-project/map.d.ts +2 -2
  403. package/dist/soap/legacy-project/map.js +6 -0
  404. package/dist/soap/mime/multipart.d.ts +2 -2
  405. package/dist/soap/mime/multipart.js +2 -5
  406. package/dist/soap/mime/send-pipeline.d.ts +1 -1
  407. package/dist/soap/mime/send-pipeline.js +1 -1
  408. package/dist/soap/mime/types.d.ts +1 -3
  409. package/dist/soap/module.d.ts +2 -0
  410. package/dist/soap/module.js +13 -0
  411. package/dist/soap/namespace-scope.js +1 -1
  412. package/dist/soap/operations.d.ts +12 -0
  413. package/dist/{operations.js → soap/operations.js} +4 -4
  414. package/dist/soap/run.d.ts +70 -0
  415. package/dist/soap/run.js +549 -0
  416. package/dist/soap/script-types.d.ts +65 -0
  417. package/dist/soap/script-types.js +379 -0
  418. package/dist/soap/scripting.d.ts +45 -0
  419. package/dist/soap/scripting.js +221 -0
  420. package/dist/soap/send-input.d.ts +61 -0
  421. package/dist/{send-options.js → soap/send-input.js} +5 -109
  422. package/dist/{send.d.ts → soap/send.d.ts} +1 -1
  423. package/dist/{send.js → soap/send.js} +28 -12
  424. package/dist/soap/storage.d.ts +9 -0
  425. package/dist/soap/storage.js +237 -0
  426. package/dist/soap/transforms.d.ts +3 -12
  427. package/dist/soap/transforms.js +3 -14
  428. package/dist/{types.d.ts → soap/types.d.ts} +34 -84
  429. package/dist/sync/git-cli.d.ts +202 -0
  430. package/dist/sync/git-cli.js +684 -0
  431. package/dist/sync/three-way-merge.d.ts +41 -0
  432. package/dist/sync/three-way-merge.js +85 -0
  433. package/dist/sync/tree-paths.d.ts +34 -0
  434. package/dist/sync/tree-paths.js +131 -0
  435. package/dist/team-secrets/envelope.d.ts +10 -0
  436. package/dist/team-secrets/envelope.js +121 -0
  437. package/dist/team-secrets/errors.d.ts +26 -0
  438. package/dist/team-secrets/errors.js +27 -0
  439. package/dist/team-secrets/index.d.ts +14 -0
  440. package/dist/team-secrets/index.js +8 -0
  441. package/dist/team-secrets/keys.d.ts +52 -0
  442. package/dist/team-secrets/keys.js +158 -0
  443. package/dist/team-secrets/log.d.ts +48 -0
  444. package/dist/team-secrets/log.js +175 -0
  445. package/dist/team-secrets/resolve-conflict.d.ts +7 -0
  446. package/dist/team-secrets/resolve-conflict.js +14 -0
  447. package/dist/team-secrets/schema.d.ts +97 -0
  448. package/dist/team-secrets/schema.js +157 -0
  449. package/dist/team-secrets/sign.d.ts +24 -0
  450. package/dist/team-secrets/sign.js +71 -0
  451. package/dist/team-secrets/vault.d.ts +49 -0
  452. package/dist/team-secrets/vault.js +148 -0
  453. package/dist/validate/wsi/run-message.d.ts +2 -2
  454. package/dist/validate/wsi/run-message.js +1 -1
  455. package/dist/validate/wsi/run-wsdl.d.ts +2 -2
  456. package/dist/validate/wsi/run-wsdl.js +1 -1
  457. package/dist/validate/wsi/types.d.ts +1 -1
  458. package/dist/webhooks/model.d.ts +138 -0
  459. package/dist/webhooks/model.js +150 -0
  460. package/dist/workspace/commit-message.d.ts +1 -1
  461. package/dist/workspace/commit-message.js +6 -1
  462. package/dist/workspace/environments.d.ts +11 -4
  463. package/dist/workspace/environments.js +12 -0
  464. package/dist/workspace/index.d.ts +3 -3
  465. package/dist/workspace/index.js +2 -2
  466. package/dist/workspace/paths.d.ts +5 -2
  467. package/dist/workspace/paths.js +5 -2
  468. package/dist/workspace/schema.d.ts +7 -3
  469. package/dist/workspace/schema.js +24 -3
  470. package/dist/workspace/share.d.ts +30 -11
  471. package/dist/workspace/share.js +32 -6
  472. package/dist/ws/call.d.ts +1 -1
  473. package/dist/ws/call.js +2 -2
  474. package/dist/ws/connect.d.ts +60 -0
  475. package/dist/ws/connect.js +131 -0
  476. package/dist/ws/events.d.ts +17 -0
  477. package/dist/ws/events.js +1 -0
  478. package/dist/ws/expand.d.ts +1 -1
  479. package/dist/ws/expand.js +1 -1
  480. package/dist/ws/files.d.ts +284 -0
  481. package/dist/ws/files.js +71 -0
  482. package/dist/ws/history-entry.d.ts +44 -0
  483. package/dist/ws/history-entry.js +93 -0
  484. package/dist/ws/model.d.ts +44 -3
  485. package/dist/ws/model.js +3 -0
  486. package/dist/ws/module.d.ts +2 -0
  487. package/dist/ws/module.js +11 -0
  488. package/dist/ws/run.d.ts +63 -0
  489. package/dist/ws/run.js +470 -0
  490. package/dist/ws/session.d.ts +18 -0
  491. package/dist/ws/session.js +52 -25
  492. package/dist/ws/storage.d.ts +9 -0
  493. package/dist/ws/storage.js +176 -0
  494. package/dist/ws/transcript.d.ts +3 -4
  495. package/dist/ws/transcript.js +26 -17
  496. package/dist/ws/url.d.ts +1 -1
  497. package/dist/wsdl/cache.js +1 -1
  498. package/dist/wsdl/docs-generator.d.ts +3 -3
  499. package/dist/wsdl/docs-generator.js +1 -1
  500. package/dist/wsdl/export-definition.js +1 -1
  501. package/dist/wsdl/qname.d.ts +2 -5
  502. package/dist/wsdl/resolver.d.ts +4 -11
  503. package/dist/wsdl/resolver.js +3 -3
  504. package/dist/wsdl/update-definition.d.ts +5 -5
  505. package/dist/wsdl/update-definition.js +6 -6
  506. package/dist/wss/apply.js +1 -1
  507. package/dist/{project/wss-configs.d.ts → wss/configs.d.ts} +2 -2
  508. package/dist/{project/wss-configs.js → wss/configs.js} +2 -2
  509. package/dist/wss/incoming/decrypt.d.ts +1 -1
  510. package/dist/wss/incoming/index.js +1 -1
  511. package/dist/wss/incoming/verify.d.ts +1 -1
  512. package/dist/wss/incoming/verify.js +1 -1
  513. package/dist/wss/key-identifiers.js +1 -1
  514. package/dist/wss/model.d.ts +1 -1
  515. package/dist/wss/outgoing/encryption.d.ts +1 -1
  516. package/dist/wss/outgoing/signature.d.ts +1 -1
  517. package/dist/xml/decode.d.ts +15 -0
  518. package/dist/xml/decode.js +22 -0
  519. package/dist/xml/entitize.d.ts +17 -0
  520. package/dist/xml/entitize.js +19 -0
  521. package/dist/xml/index.d.ts +1 -1
  522. package/dist/xml/index.js +1 -1
  523. package/dist/xml/locate.d.ts +39 -0
  524. package/dist/xml/locate.js +117 -0
  525. package/dist/xml/qname.d.ts +12 -0
  526. package/dist/xml/qname.js +8 -0
  527. package/dist/xpath/evaluate-async.d.ts +19 -0
  528. package/dist/xpath/evaluate-async.js +31 -11
  529. package/dist/xpath/evaluate.d.ts +1 -1
  530. package/dist/xpath/namespaces.js +1 -1
  531. package/dist/xpath/worker.d.ts +11 -5
  532. package/dist/xpath/worker.js +24 -7
  533. package/dist/xsd/form-model.d.ts +19 -2
  534. package/dist/xsd/form-model.js +14 -2
  535. package/dist/xsd/json-bridge.d.ts +152 -0
  536. package/dist/xsd/json-bridge.js +1213 -0
  537. package/dist/xsd/locate.d.ts +2 -30
  538. package/dist/xsd/locate.js +1 -109
  539. package/dist/xsd/xml-scan.d.ts +2 -0
  540. package/dist/xsd/xml-scan.js +1 -1
  541. package/dist/xsd/xml-writer.d.ts +2 -0
  542. package/dist/xsd/xml-writer.js +4 -0
  543. package/package.json +12 -1
  544. package/dist/generate.d.ts +0 -12
  545. package/dist/operations.d.ts +0 -12
  546. package/dist/run/effective-auth.d.ts +0 -10
  547. package/dist/run/effective-auth.js +0 -19
  548. package/dist/run/prepare.d.ts +0 -43
  549. package/dist/run/prepare.js +0 -280
  550. package/dist/send-options.d.ts +0 -141
  551. package/dist/wsdl/fetch.d.ts +0 -13
  552. /package/dist/{soap → http}/charset.d.ts +0 -0
  553. /package/dist/{soap → http}/charset.js +0 -0
  554. /package/dist/{wsdl → http}/ref-policy.d.ts +0 -0
  555. /package/dist/{wsdl → http}/ref-policy.js +0 -0
  556. /package/dist/{wss/keystore → keystore}/certificate.d.ts +0 -0
  557. /package/dist/{wss/keystore → keystore}/certificate.js +0 -0
  558. /package/dist/{wss/keystore → keystore}/index.d.ts +0 -0
  559. /package/dist/{wss/keystore → keystore}/model.d.ts +0 -0
  560. /package/dist/{wss/keystore → keystore}/model.js +0 -0
  561. /package/dist/{wss/keystore → keystore}/pem.d.ts +0 -0
  562. /package/dist/{wss/keystore → keystore}/pkcs12.d.ts +0 -0
  563. /package/dist/{wsdl → project}/cache-naming.d.ts +0 -0
  564. /package/dist/{types.js → soap/types.js} +0 -0
  565. /package/dist/{soap → xml}/prefixes.d.ts +0 -0
  566. /package/dist/{soap → xml}/prefixes.js +0 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Where a callback assertion reads captures from (callback-assertion spec §2.2). The engine never
3
+ * talks to a server: a host (the desktop's main process, the CLI) hands a run a `CaptureSource`.
4
+ * `captureSourceOver` builds one from the three reads of the webhook-capture manage API, so the two
5
+ * hosts share the paging, the oldest-first order and the decoding, and differ only in how they
6
+ * authenticate.
7
+ */
8
+ import { WirebenchError } from '../errors.js';
9
+ import { HOOKS_LIMITS } from '../server-api/hooks.js';
10
+ /** Below every ULID: `after` from here reads a hook's captures from its first. */
11
+ export const FIRST_CAPTURE_CURSOR = '00000000000000000000000000';
12
+ /** A wait never reads more than this many pages of 200 per poll: a flood is not worth following. */
13
+ const MAX_PAGES_PER_POLL = 25;
14
+ function decodedPath(subpath) {
15
+ const path = subpath === '' ? '/' : subpath;
16
+ try {
17
+ return decodeURIComponent(path);
18
+ }
19
+ catch {
20
+ // A sender's malformed escape stays as it arrived: `path` then compares against what was sent.
21
+ return path;
22
+ }
23
+ }
24
+ export function captureSummaryView(summary) {
25
+ const signature = summary.signature ?? null;
26
+ return {
27
+ id: summary.id,
28
+ receivedAt: summary.receivedAt,
29
+ method: summary.method,
30
+ path: decodedPath(summary.subpath),
31
+ signature: signature === null
32
+ ? null
33
+ : { verdict: signature.verdict, ...(signature.reason !== undefined ? { reason: signature.reason } : {}) },
34
+ };
35
+ }
36
+ export function captureDetailView(capture) {
37
+ return {
38
+ ...captureSummaryView(capture),
39
+ headers: capture.headers,
40
+ bodyText: Buffer.from(capture.body, 'base64').toString('utf8'),
41
+ truncated: capture.truncated,
42
+ };
43
+ }
44
+ /** A `CaptureSource` over the manage API. The hook list is read once per source, which is once per run. */
45
+ export function captureSourceOver(reads) {
46
+ let hooks;
47
+ return {
48
+ async resolve(catchUrl) {
49
+ hooks ??= reads.hooks();
50
+ let list;
51
+ try {
52
+ list = await hooks;
53
+ }
54
+ catch (error) {
55
+ hooks = undefined; // the next assertion asks again
56
+ throw error;
57
+ }
58
+ const wanted = catchUrl.trim().toLowerCase();
59
+ const found = list.find((hook) => hook.name.trim().toLowerCase() === wanted);
60
+ return found === undefined ? undefined : { hookId: found.id };
61
+ },
62
+ async cursor(hookId) {
63
+ const [newest] = await reads.captures(hookId, { limit: 1 });
64
+ return newest?.id ?? null;
65
+ },
66
+ async after(hookId, cursor) {
67
+ const out = [];
68
+ let from = cursor ?? FIRST_CAPTURE_CURSOR;
69
+ for (let page = 0; page < MAX_PAGES_PER_POLL; page += 1) {
70
+ const newestFirst = await reads.captures(hookId, { after: from, limit: HOOKS_LIMITS.maxPageSize });
71
+ const oldestFirst = [...newestFirst].reverse();
72
+ out.push(...oldestFirst.map(captureSummaryView));
73
+ const last = oldestFirst.at(-1);
74
+ if (last === undefined || newestFirst.length < HOOKS_LIMITS.maxPageSize)
75
+ break;
76
+ from = last.id;
77
+ }
78
+ return out;
79
+ },
80
+ async detail(hookId, captureId) {
81
+ return captureDetailView(await reads.capture(hookId, captureId));
82
+ },
83
+ };
84
+ }
85
+ /** A source for a host that cannot read captures: every callback assertion errors with `message`. */
86
+ export function unavailableCaptureSource(message) {
87
+ const refuse = () => Promise.reject(new WirebenchError('callback-source-unavailable', message));
88
+ return { resolve: refuse, cursor: refuse, after: refuse, detail: refuse };
89
+ }
@@ -0,0 +1,8 @@
1
+ import type { Assertion, AssertionResult, AssertionSubject } from './model.js';
2
+ /**
3
+ * Checks `assertions` against `subject`, in order. A run's default SLA joins them when the request
4
+ * has no `sla` of its own. Callback assertions are left out: only a run waits for a callback.
5
+ */
6
+ export declare function checkRequestAssertions(subject: AssertionSubject, assertions: readonly Assertion[], options?: {
7
+ readonly defaultSlaMs?: number;
8
+ }): Promise<AssertionResult[]>;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * A request's own assertions checked against what came back (request-assertions spec §4): the one
3
+ * check a run and the desktop's editor Send share.
4
+ */
5
+ import { isCallbackAssertion } from './callback.js';
6
+ import { evaluateAssertions } from './index.js';
7
+ /**
8
+ * Checks `assertions` against `subject`, in order. A run's default SLA joins them when the request
9
+ * has no `sla` of its own. Callback assertions are left out: only a run waits for a callback.
10
+ */
11
+ export async function checkRequestAssertions(subject, assertions, options = {}) {
12
+ const withDefault = options.defaultSlaMs !== undefined && !assertions.some((a) => a.type === 'sla')
13
+ ? [...assertions, { type: 'sla', maxMs: options.defaultSlaMs }]
14
+ : assertions;
15
+ return [
16
+ ...(await evaluateAssertions(subject, withDefault.filter((a) => !isCallbackAssertion(a)))),
17
+ ];
18
+ }
@@ -0,0 +1,5 @@
1
+ import type { AssertionResult, AssertionSubject, HeaderAssertion } from './model.js';
2
+ /** The first value of `name` among `headers`, compared without regard to case. */
3
+ export declare function firstHeaderValue(headers: readonly (readonly [string, string])[] | undefined, name: string): string | undefined;
4
+ /** Checks one response header: that it exists, equals a value, or matches a pattern. */
5
+ export declare function evaluateHeader(subject: AssertionSubject, assertion: HeaderAssertion): Promise<AssertionResult>;
@@ -0,0 +1,48 @@
1
+ import { matchRegexWithTimeout } from '../xpath/evaluate-async.js';
2
+ /** Long enough to read, short enough that a report stays a report. */
3
+ const MAX_ACTUAL_CHARS = 200;
4
+ function truncate(text) {
5
+ return text.length > MAX_ACTUAL_CHARS ? `${text.slice(0, MAX_ACTUAL_CHARS)}…` : text;
6
+ }
7
+ /** The first value of `name` among `headers`, compared without regard to case. */
8
+ export function firstHeaderValue(headers, name) {
9
+ const wanted = name.toLowerCase();
10
+ return headers?.find(([key]) => key.toLowerCase() === wanted)?.[1];
11
+ }
12
+ /** Checks one response header: that it exists, equals a value, or matches a pattern. */
13
+ export async function evaluateHeader(subject, assertion) {
14
+ const base = { type: 'header', label: assertion.name ?? `header ${assertion.header}` };
15
+ const actual = firstHeaderValue(subject.headers, assertion.header);
16
+ if (assertion.exists !== undefined) {
17
+ const found = actual !== undefined;
18
+ return found === assertion.exists
19
+ ? { ...base, outcome: 'passed' }
20
+ : {
21
+ ...base,
22
+ outcome: 'failed',
23
+ expected: assertion.exists ? 'present' : 'absent',
24
+ actual: found ? 'present' : 'absent',
25
+ };
26
+ }
27
+ if (actual === undefined) {
28
+ return {
29
+ ...base,
30
+ outcome: 'failed',
31
+ expected: assertion.matches !== undefined ? `/${assertion.matches}/` : String(assertion.equals),
32
+ actual: 'absent',
33
+ };
34
+ }
35
+ if (assertion.matches !== undefined) {
36
+ const matched = await matchRegexWithTimeout(assertion.matches, actual);
37
+ if (matched.kind === 'error') {
38
+ return { ...base, outcome: 'errored', message: matched.message };
39
+ }
40
+ return matched.matched
41
+ ? { ...base, outcome: 'passed' }
42
+ : { ...base, outcome: 'failed', expected: `/${assertion.matches}/`, actual: truncate(actual) };
43
+ }
44
+ const expected = String(assertion.equals);
45
+ return actual === expected
46
+ ? { ...base, outcome: 'passed' }
47
+ : { ...base, outcome: 'failed', expected, actual: truncate(actual) };
48
+ }
@@ -1,4 +1,4 @@
1
- import type { Assertion, AssertionResult, AssertionSubject } from './model.js';
1
+ import type { AssertionResult, AssertionSubject, StepAssertion } from './model.js';
2
2
  /** Evaluates every assertion, in order. One failing or erroring never stops the rest. */
3
- export declare function evaluateAssertions(subject: AssertionSubject, assertions: readonly Assertion[]): Promise<AssertionResult[]>;
3
+ export declare function evaluateAssertions(subject: AssertionSubject, assertions: readonly StepAssertion[]): Promise<AssertionResult[]>;
4
4
  export type * from './model.js';
@@ -1,4 +1,6 @@
1
+ import { callbackLabel } from './model.js';
1
2
  import { evaluateContract } from './contract.js';
3
+ import { evaluateHeader } from './header.js';
2
4
  import { evaluateMatch } from './match.js';
3
5
  import { evaluateSla } from './sla.js';
4
6
  import { evaluateSoapFault } from './soap-fault.js';
@@ -15,6 +17,16 @@ function evaluateOne(subject, assertion) {
15
17
  return evaluateMatch(subject, assertion);
16
18
  case 'schema':
17
19
  return evaluateContract(subject, assertion);
20
+ case 'header':
21
+ return evaluateHeader(subject, assertion);
22
+ case 'callback':
23
+ // Waiting needs the send's moment and a capture source: only a run has them (`assert/callback.ts`).
24
+ return {
25
+ type: 'callback',
26
+ label: callbackLabel(assertion),
27
+ outcome: 'errored',
28
+ message: 'a callback assertion is checked by a run, after its send',
29
+ };
18
30
  }
19
31
  }
20
32
  /** Evaluates every assertion, in order. One failing or erroring never stops the rest. */
@@ -1,3 +1,9 @@
1
+ import type { QueryResult } from '../xpath/evaluate.js';
1
2
  import type { AssertionResult, AssertionSubject, MatchAssertion } from './model.js';
3
+ /**
4
+ * The result as one string: the first item's text, which is what a scalar comparison means. Shared
5
+ * with sequence transfers, which lift a value the same way a `match` reads one.
6
+ */
7
+ export declare function firstText(result: QueryResult): string | undefined;
2
8
  /** Evaluates an XPath/XQuery/JSONPath expression against the response and checks its result. */
3
9
  export declare function evaluateMatch(subject: AssertionSubject, assertion: MatchAssertion): Promise<AssertionResult>;
@@ -1,11 +1,14 @@
1
- import { evaluateWithTimeout } from '../xpath/evaluate-async.js';
1
+ import { evaluateWithTimeout, matchRegexWithTimeout } from '../xpath/evaluate-async.js';
2
2
  /** Long enough to read, short enough that a report stays a report. */
3
3
  const MAX_ACTUAL_CHARS = 200;
4
4
  function truncate(text) {
5
5
  return text.length > MAX_ACTUAL_CHARS ? `${text.slice(0, MAX_ACTUAL_CHARS)}…` : text;
6
6
  }
7
- /** The result as one string: the first item's text, which is what a scalar comparison means. */
8
- function firstText(result) {
7
+ /**
8
+ * The result as one string: the first item's text, which is what a scalar comparison means. Shared
9
+ * with sequence transfers, which lift a value the same way a `match` reads one.
10
+ */
11
+ export function firstText(result) {
9
12
  if (result.kind === 'nodes') {
10
13
  return result.items[0]?.text;
11
14
  }
@@ -47,7 +50,13 @@ export async function evaluateMatch(subject, assertion) {
47
50
  }
48
51
  const actual = firstText(result) ?? '';
49
52
  if (assertion.matches !== undefined) {
50
- return new RegExp(assertion.matches).test(actual)
53
+ // On the worker, never here: the pattern comes from a file, and a backtracking one would block
54
+ // this thread (the desktop's main process, for a sequence) for as long as it runs.
55
+ const matched = await matchRegexWithTimeout(assertion.matches, actual);
56
+ if (matched.kind === 'error') {
57
+ return { ...base, outcome: 'errored', message: matched.message };
58
+ }
59
+ return matched.matched
51
60
  ? { ...base, outcome: 'passed' }
52
61
  : { ...base, outcome: 'failed', expected: `/${assertion.matches}/`, actual: truncate(actual) };
53
62
  }
@@ -41,11 +41,100 @@ export interface SlaAssertion {
41
41
  readonly maxMs: number;
42
42
  readonly name?: string;
43
43
  }
44
+ /** Bounds on a callback assertion (spec §2.1) and the engine's poll interval (§2.3). */
45
+ export declare const CALLBACK_LIMITS: Readonly<{
46
+ defaultWithinMs: 30000;
47
+ minWithinMs: 1000;
48
+ maxWithinMs: 300000;
49
+ /** How often a waiting callback asks for new captures. A constant; tests inject their own. */
50
+ pollIntervalMs: 1000;
51
+ /** A catch URL's name, as the server bounds it (`HOOKS_LIMITS.maxNameLength`). */
52
+ maxCatchUrlLength: 100;
53
+ maxHeaderChecks: 20;
54
+ maxExpectChecks: 20;
55
+ }>;
56
+ /** One header of a capture: its name ignores case; exactly one of `equals`, `matches`, `exists`. */
57
+ export interface CallbackHeaderCheck {
58
+ readonly name: string;
59
+ readonly equals?: string;
60
+ readonly matches?: string;
61
+ readonly exists?: boolean;
62
+ }
63
+ /** An expression over a capture's body text; exactly one of `equals`, `matches`, `exists`. */
64
+ export interface CallbackBodyCheck {
65
+ readonly language: 'jsonpath' | 'xpath';
66
+ readonly path: string;
67
+ readonly equals?: string;
68
+ readonly matches?: string;
69
+ readonly exists?: boolean;
70
+ }
71
+ /** What picks the capture (spec §2.3): every part given must hold. */
72
+ export interface CallbackMatch {
73
+ /** Compared without regard to case. */
74
+ readonly method?: string;
75
+ /** Exact, against the decoded subpath (leading `/`). At most one of `path` and `pathMatches`. */
76
+ readonly path?: string;
77
+ readonly pathMatches?: string;
78
+ readonly headers?: readonly CallbackHeaderCheck[];
79
+ readonly body?: CallbackBodyCheck;
80
+ }
81
+ /** What is checked on the matched capture; every check is reported. */
82
+ export type CallbackCheck = {
83
+ readonly body: CallbackBodyCheck;
84
+ } | {
85
+ readonly header: CallbackHeaderCheck;
86
+ } | {
87
+ readonly signature: 'verified';
88
+ };
89
+ /**
90
+ * Waits after the send for the first capture at `catchUrl` that fits `match`, then checks it with
91
+ * `expect` (spec §2). Only a run evaluates it: a desktop Send and `evaluateAssertions` alone cannot.
92
+ */
93
+ export interface CallbackAssertion {
94
+ readonly type: 'callback';
95
+ /** The catch URL's name in the server workspace (unique there, case-insensitive). */
96
+ readonly catchUrl: string;
97
+ /** How long to wait after the send finished: {@link CALLBACK_LIMITS}. */
98
+ readonly withinMs: number;
99
+ readonly match: CallbackMatch;
100
+ readonly expect: readonly CallbackCheck[];
101
+ readonly name?: string;
102
+ }
44
103
  /** The union of every declarative check a request file may carry under `assertions:`. */
45
- export type Assertion = StatusAssertion | SoapFaultAssertion | MatchAssertion | SchemaAssertion | SlaAssertion;
104
+ export type Assertion = StatusAssertion | SoapFaultAssertion | MatchAssertion | SchemaAssertion | SlaAssertion | CallbackAssertion;
105
+ /** The label of a callback assertion's result: its `name`, else the catch URL it waits on. */
106
+ export declare function callbackLabel(assertion: CallbackAssertion): string;
107
+ /**
108
+ * Checks a response header (gRPC: response metadata, then trailers). Name matching ignores case; the
109
+ * first value found is compared.
110
+ *
111
+ * A sequence step may carry it; a request file may not (it reads the response, which a request file's own
112
+ * assertions already cover by `match`).
113
+ */
114
+ export interface HeaderAssertion {
115
+ readonly type: 'header';
116
+ readonly header: string;
117
+ readonly equals?: string;
118
+ readonly matches?: string;
119
+ readonly exists?: boolean;
120
+ readonly name?: string;
121
+ }
122
+ /** What a sequence step may assert: the request catalogue plus {@link HeaderAssertion}. */
123
+ export type StepAssertion = Assertion | HeaderAssertion;
124
+ /**
125
+ * A protocol's status codes by name, for a subject whose statuses have names (gRPC's `NOT_FOUND`).
126
+ *
127
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
128
+ */
129
+ export interface StatusNames {
130
+ readonly byName: ReadonlyMap<string, number>;
131
+ /** The name of a code, including one the protocol does not define. */
132
+ nameOf(code: number): string;
133
+ }
46
134
  /** What an assertion looks at — protocol-neutral, built by the runner from an exchange. */
47
135
  export interface AssertionSubject {
48
- readonly protocol: 'soap' | 'rest';
136
+ /** The `kind` of the protocol module that built the subject. */
137
+ readonly protocol: string;
49
138
  readonly status: number;
50
139
  readonly durationMs: number;
51
140
  /** Decoded response text: the (possibly decrypted) envelope for SOAP, the body text for REST. */
@@ -60,14 +149,32 @@ export interface AssertionSubject {
60
149
  readonly validateContract?: () => Promise<readonly {
61
150
  readonly message: string;
62
151
  }[]>;
152
+ /**
153
+ * The response headers in wire order (gRPC: metadata, then trailers), for `header` assertions and
154
+ * sequence transfers. Absent means none were recorded.
155
+ */
156
+ readonly headers?: readonly (readonly [string, string])[];
157
+ /**
158
+ * Set when the protocol's statuses have names. A status assertion then accepts a name and
159
+ * compares codes exactly; without it the HTTP rules apply (a number, or an `Nxx` class).
160
+ *
161
+ * @internal Exported for the engine's own hosts; not yet a plugin API (ADR-0017).
162
+ */
163
+ readonly statusNames?: StatusNames;
63
164
  }
64
165
  /** The outcome of evaluating one assertion against a subject. */
65
166
  export interface AssertionResult {
66
- readonly type: Assertion['type'];
167
+ /** `script` for a test a post-response script recorded (#63); `baseline` for the runner's `--baseline` (#36). */
168
+ readonly type: StepAssertion['type'] | 'script' | 'baseline';
67
169
  readonly label: string;
68
170
  readonly outcome: 'passed' | 'failed' | 'errored';
69
171
  readonly expected?: string;
70
172
  readonly actual?: string;
71
173
  /** Why it errored: an expression that does not compile, a timeout, no contract to validate against. */
72
174
  readonly message?: string;
175
+ /** A callback assertion's matched capture, for a link to it (spec §5). */
176
+ readonly capture?: {
177
+ readonly hookId: string;
178
+ readonly captureId: string;
179
+ };
73
180
  }
@@ -5,4 +5,19 @@
5
5
  * for. Every member is evaluated — a failure does not stop the rest — so a report shows everything
6
6
  * that is wrong with a response, not just the first thing.
7
7
  */
8
- export {};
8
+ /** Bounds on a callback assertion (spec §2.1) and the engine's poll interval (§2.3). */
9
+ export const CALLBACK_LIMITS = Object.freeze({
10
+ defaultWithinMs: 30_000,
11
+ minWithinMs: 1_000,
12
+ maxWithinMs: 300_000,
13
+ /** How often a waiting callback asks for new captures. A constant; tests inject their own. */
14
+ pollIntervalMs: 1_000,
15
+ /** A catch URL's name, as the server bounds it (`HOOKS_LIMITS.maxNameLength`). */
16
+ maxCatchUrlLength: 100,
17
+ maxHeaderChecks: 20,
18
+ maxExpectChecks: 20,
19
+ });
20
+ /** The label of a callback assertion's result: its `name`, else the catch URL it waits on. */
21
+ export function callbackLabel(assertion) {
22
+ return assertion.name ?? `callback ${assertion.catchUrl}`;
23
+ }
@@ -1,8 +1,65 @@
1
1
  import { z } from 'zod';
2
+ import type { CallbackAssertion } from './model.js';
3
+ /** `type: callback` (spec §2.1): the same shape on a request file and on a sequence step. */
4
+ export declare const callbackAssertionSchema: z.ZodObject<{
5
+ type: z.ZodLiteral<"callback">;
6
+ catchUrl: z.ZodString;
7
+ withinMs: z.ZodDefault<z.ZodNumber>;
8
+ match: z.ZodDefault<z.ZodObject<{
9
+ method: z.ZodOptional<z.ZodString>;
10
+ path: z.ZodOptional<z.ZodString>;
11
+ pathMatches: z.ZodOptional<z.ZodString>;
12
+ headers: z.ZodOptional<z.ZodArray<z.ZodObject<{
13
+ equals: z.ZodOptional<z.ZodString>;
14
+ matches: z.ZodOptional<z.ZodString>;
15
+ exists: z.ZodOptional<z.ZodBoolean>;
16
+ name: z.ZodString;
17
+ }, z.core.$loose>>>;
18
+ body: z.ZodOptional<z.ZodObject<{
19
+ equals: z.ZodOptional<z.ZodString>;
20
+ matches: z.ZodOptional<z.ZodString>;
21
+ exists: z.ZodOptional<z.ZodBoolean>;
22
+ language: z.ZodEnum<{
23
+ xpath: "xpath";
24
+ jsonpath: "jsonpath";
25
+ }>;
26
+ path: z.ZodString;
27
+ }, z.core.$loose>>;
28
+ }, z.core.$loose>>;
29
+ expect: z.ZodDefault<z.ZodArray<z.ZodObject<{
30
+ body: z.ZodOptional<z.ZodObject<{
31
+ equals: z.ZodOptional<z.ZodString>;
32
+ matches: z.ZodOptional<z.ZodString>;
33
+ exists: z.ZodOptional<z.ZodBoolean>;
34
+ language: z.ZodEnum<{
35
+ xpath: "xpath";
36
+ jsonpath: "jsonpath";
37
+ }>;
38
+ path: z.ZodString;
39
+ }, z.core.$loose>>;
40
+ header: z.ZodOptional<z.ZodObject<{
41
+ equals: z.ZodOptional<z.ZodString>;
42
+ matches: z.ZodOptional<z.ZodString>;
43
+ exists: z.ZodOptional<z.ZodBoolean>;
44
+ name: z.ZodString;
45
+ }, z.core.$loose>>;
46
+ signature: z.ZodOptional<z.ZodLiteral<"verified">>;
47
+ }, z.core.$loose>>>;
48
+ name: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$loose>;
50
+ /**
51
+ * Only the fields a callback assertion defines, at every level. `looseObject` keeps unknown keys on
52
+ * the parsed value; dropping them here keeps them from being written back.
53
+ */
54
+ export declare function toCallbackAssertion(raw: CallbackAssertion | z.output<typeof callbackAssertionSchema>): CallbackAssertion;
2
55
  /** The `assertions:` list of a request file. `looseObject` like every project schema; see `project/schema.ts`. */
3
56
  export declare const assertionsSchema: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
4
57
  type: z.ZodLiteral<"status">;
5
- equals: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodArray<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>]>;
58
+ equals: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodNumber, z.ZodString, z.ZodEnum<{
59
+ [x: string]: string;
60
+ }>]>, z.ZodArray<z.ZodUnion<readonly [z.ZodNumber, z.ZodNumber, z.ZodString, z.ZodEnum<{
61
+ [x: string]: string;
62
+ }>]>>]>;
6
63
  name: z.ZodOptional<z.ZodString>;
7
64
  }, z.core.$loose>, z.ZodObject<{
8
65
  type: z.ZodLiteral<"soap-fault">;
@@ -31,4 +88,140 @@ export declare const assertionsSchema: z.ZodArray<z.ZodDiscriminatedUnion<[z.Zod
31
88
  type: z.ZodLiteral<"sla">;
32
89
  maxMs: z.ZodNumber;
33
90
  name: z.ZodOptional<z.ZodString>;
91
+ }, z.core.$loose>, z.ZodObject<{
92
+ type: z.ZodLiteral<"callback">;
93
+ catchUrl: z.ZodString;
94
+ withinMs: z.ZodDefault<z.ZodNumber>;
95
+ match: z.ZodDefault<z.ZodObject<{
96
+ method: z.ZodOptional<z.ZodString>;
97
+ path: z.ZodOptional<z.ZodString>;
98
+ pathMatches: z.ZodOptional<z.ZodString>;
99
+ headers: z.ZodOptional<z.ZodArray<z.ZodObject<{
100
+ equals: z.ZodOptional<z.ZodString>;
101
+ matches: z.ZodOptional<z.ZodString>;
102
+ exists: z.ZodOptional<z.ZodBoolean>;
103
+ name: z.ZodString;
104
+ }, z.core.$loose>>>;
105
+ body: z.ZodOptional<z.ZodObject<{
106
+ equals: z.ZodOptional<z.ZodString>;
107
+ matches: z.ZodOptional<z.ZodString>;
108
+ exists: z.ZodOptional<z.ZodBoolean>;
109
+ language: z.ZodEnum<{
110
+ xpath: "xpath";
111
+ jsonpath: "jsonpath";
112
+ }>;
113
+ path: z.ZodString;
114
+ }, z.core.$loose>>;
115
+ }, z.core.$loose>>;
116
+ expect: z.ZodDefault<z.ZodArray<z.ZodObject<{
117
+ body: z.ZodOptional<z.ZodObject<{
118
+ equals: z.ZodOptional<z.ZodString>;
119
+ matches: z.ZodOptional<z.ZodString>;
120
+ exists: z.ZodOptional<z.ZodBoolean>;
121
+ language: z.ZodEnum<{
122
+ xpath: "xpath";
123
+ jsonpath: "jsonpath";
124
+ }>;
125
+ path: z.ZodString;
126
+ }, z.core.$loose>>;
127
+ header: z.ZodOptional<z.ZodObject<{
128
+ equals: z.ZodOptional<z.ZodString>;
129
+ matches: z.ZodOptional<z.ZodString>;
130
+ exists: z.ZodOptional<z.ZodBoolean>;
131
+ name: z.ZodString;
132
+ }, z.core.$loose>>;
133
+ signature: z.ZodOptional<z.ZodLiteral<"verified">>;
134
+ }, z.core.$loose>>>;
135
+ name: z.ZodOptional<z.ZodString>;
136
+ }, z.core.$loose>], "type">>;
137
+ /**
138
+ * The `assertions:` list of a sequence step: the request catalogue plus `header`.
139
+ */
140
+ export declare const stepAssertionsSchema: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
141
+ type: z.ZodLiteral<"status">;
142
+ equals: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodNumber, z.ZodNumber, z.ZodString, z.ZodEnum<{
143
+ [x: string]: string;
144
+ }>]>, z.ZodArray<z.ZodUnion<readonly [z.ZodNumber, z.ZodNumber, z.ZodString, z.ZodEnum<{
145
+ [x: string]: string;
146
+ }>]>>]>;
147
+ name: z.ZodOptional<z.ZodString>;
148
+ }, z.core.$loose>, z.ZodObject<{
149
+ type: z.ZodLiteral<"soap-fault">;
150
+ expect: z.ZodDefault<z.ZodEnum<{
151
+ none: "none";
152
+ present: "present";
153
+ }>>;
154
+ name: z.ZodOptional<z.ZodString>;
155
+ }, z.core.$loose>, z.ZodObject<{
156
+ type: z.ZodLiteral<"match">;
157
+ language: z.ZodEnum<{
158
+ xpath: "xpath";
159
+ xquery: "xquery";
160
+ jsonpath: "jsonpath";
161
+ }>;
162
+ expression: z.ZodString;
163
+ namespaces: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
164
+ equals: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
165
+ matches: z.ZodOptional<z.ZodString>;
166
+ exists: z.ZodOptional<z.ZodBoolean>;
167
+ name: z.ZodOptional<z.ZodString>;
168
+ }, z.core.$loose>, z.ZodObject<{
169
+ type: z.ZodLiteral<"schema">;
170
+ name: z.ZodOptional<z.ZodString>;
171
+ }, z.core.$loose>, z.ZodObject<{
172
+ type: z.ZodLiteral<"sla">;
173
+ maxMs: z.ZodNumber;
174
+ name: z.ZodOptional<z.ZodString>;
175
+ }, z.core.$loose>, z.ZodObject<{
176
+ type: z.ZodLiteral<"header">;
177
+ header: z.ZodString;
178
+ equals: z.ZodOptional<z.ZodString>;
179
+ matches: z.ZodOptional<z.ZodString>;
180
+ exists: z.ZodOptional<z.ZodBoolean>;
181
+ name: z.ZodOptional<z.ZodString>;
182
+ }, z.core.$loose>, z.ZodObject<{
183
+ type: z.ZodLiteral<"callback">;
184
+ catchUrl: z.ZodString;
185
+ withinMs: z.ZodDefault<z.ZodNumber>;
186
+ match: z.ZodDefault<z.ZodObject<{
187
+ method: z.ZodOptional<z.ZodString>;
188
+ path: z.ZodOptional<z.ZodString>;
189
+ pathMatches: z.ZodOptional<z.ZodString>;
190
+ headers: z.ZodOptional<z.ZodArray<z.ZodObject<{
191
+ equals: z.ZodOptional<z.ZodString>;
192
+ matches: z.ZodOptional<z.ZodString>;
193
+ exists: z.ZodOptional<z.ZodBoolean>;
194
+ name: z.ZodString;
195
+ }, z.core.$loose>>>;
196
+ body: z.ZodOptional<z.ZodObject<{
197
+ equals: z.ZodOptional<z.ZodString>;
198
+ matches: z.ZodOptional<z.ZodString>;
199
+ exists: z.ZodOptional<z.ZodBoolean>;
200
+ language: z.ZodEnum<{
201
+ xpath: "xpath";
202
+ jsonpath: "jsonpath";
203
+ }>;
204
+ path: z.ZodString;
205
+ }, z.core.$loose>>;
206
+ }, z.core.$loose>>;
207
+ expect: z.ZodDefault<z.ZodArray<z.ZodObject<{
208
+ body: z.ZodOptional<z.ZodObject<{
209
+ equals: z.ZodOptional<z.ZodString>;
210
+ matches: z.ZodOptional<z.ZodString>;
211
+ exists: z.ZodOptional<z.ZodBoolean>;
212
+ language: z.ZodEnum<{
213
+ xpath: "xpath";
214
+ jsonpath: "jsonpath";
215
+ }>;
216
+ path: z.ZodString;
217
+ }, z.core.$loose>>;
218
+ header: z.ZodOptional<z.ZodObject<{
219
+ equals: z.ZodOptional<z.ZodString>;
220
+ matches: z.ZodOptional<z.ZodString>;
221
+ exists: z.ZodOptional<z.ZodBoolean>;
222
+ name: z.ZodString;
223
+ }, z.core.$loose>>;
224
+ signature: z.ZodOptional<z.ZodLiteral<"verified">>;
225
+ }, z.core.$loose>>>;
226
+ name: z.ZodOptional<z.ZodString>;
34
227
  }, z.core.$loose>], "type">>;