@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,68 @@
1
+ import { resolveSecretTokens } from '../secrets/resolve.js';
2
+ import { scriptError, } from '../script/request-scripts.js';
3
+ /** The values of the secrets a request's scripts list. */
4
+ export async function listedSecrets(names, getSecret) {
5
+ return names.length === 0 ? {} : resolveSecretTokens(names, getSecret);
6
+ }
7
+ /** A script's tests as a report's assertions. */
8
+ export function scriptAssertions(tests) {
9
+ return tests.map((test) => ({
10
+ type: 'script',
11
+ label: test.name,
12
+ outcome: test.passed ? 'passed' : 'failed',
13
+ ...(test.message !== undefined ? { message: test.message } : {}),
14
+ }));
15
+ }
16
+ /**
17
+ * Adds a script's values to a run's values. A value marked secret, or holding a credential the run
18
+ * knows, is reported for masking first (ADR-0015).
19
+ */
20
+ export function mergeScriptValues(target, values, onSecretValue, containsKnownSecret) {
21
+ for (const { name, value, secret } of values) {
22
+ if (secret || containsKnownSecret?.(value) === true)
23
+ onSecretValue?.(value);
24
+ target.set(name, value);
25
+ }
26
+ }
27
+ /**
28
+ * The scripts of one send of `scripted`. The run and the app both send through this, so a value a
29
+ * script marks secret is masked before anything about the send is shown, in either.
30
+ */
31
+ export function scriptSession(scripting, scripted, values, options = {}) {
32
+ const tests = [];
33
+ const set = [];
34
+ const lines = [];
35
+ let truncated = false;
36
+ const collect = (outcome) => {
37
+ tests.push(...outcome.tests);
38
+ set.push(...outcome.values);
39
+ lines.push(...outcome.log.lines);
40
+ truncated ||= outcome.log.truncated;
41
+ for (const { value, secret } of outcome.values) {
42
+ if (secret || options.containsKnownSecret?.(value) === true)
43
+ options.onSecretValue?.(value);
44
+ }
45
+ };
46
+ return {
47
+ pre: async (before) => {
48
+ if (scripted.scripts.pre === undefined)
49
+ return before;
50
+ const outcome = await scripting.pre(scripted, before, values);
51
+ collect(outcome);
52
+ return (outcome.request ?? before);
53
+ },
54
+ post: async (sent, response) => {
55
+ let error;
56
+ if (scripted.scripts.post !== undefined) {
57
+ const later = { ...values, vars: { ...values.vars, ...Object.fromEntries(set.map((v) => [v.name, v.value])) } };
58
+ const outcome = await scripting.post(scripted, sent, response, later);
59
+ collect(outcome);
60
+ if (!outcome.ok) {
61
+ const thrown = scriptError(outcome.error, scripting.fileOf(scripted, 'post'));
62
+ error = { code: thrown.code, message: thrown.message };
63
+ }
64
+ }
65
+ return { tests, values: set, log: { lines, truncated }, ...(error !== undefined ? { error } : {}) };
66
+ },
67
+ };
68
+ }
@@ -1,6 +1,9 @@
1
- import type { Project } from '../project/model.js';
1
+ import type { Project, PropertyMap } from '../project/model.js';
2
+ import type { ProtocolRegistry } from '../protocol/registry.js';
3
+ import type { SelectedRequest } from '../protocols.js';
2
4
  import type { SecretNeed } from '../secrets/env-names.js';
3
- import type { SelectedRequest } from './select.js';
5
+ import type { Workspace } from '../workspace/model.js';
6
+ export { secretNamesInValue } from './send-helpers.js';
4
7
  /** One secret a run needs, and which requests need it. */
5
8
  export interface LocatedSecretNeed extends SecretNeed {
6
9
  /** Display paths of the requests that need it. */
@@ -8,6 +11,10 @@ export interface LocatedSecretNeed extends SecretNeed {
8
11
  }
9
12
  /**
10
13
  * The secrets `selected` needs, one entry per ref in first-use order, each with every request
11
- * that uses it. The first declaration of a ref supplies its name and purpose.
14
+ * that uses it. The first declaration of a ref supplies its name and purpose. `overrides` are the
15
+ * run's `--var` properties, laid over the environment's as a send lays them. With a `workspace`
16
+ * the scopes are the ones a send inside it expands against: the workspace's properties, and each
17
+ * workspace environment with its linked project environment. `registry` is the set of protocol
18
+ * modules asked for their needs; the built-in ones by default.
12
19
  */
13
- export declare function secretNeedsOf(selected: readonly SelectedRequest[], project: Project): LocatedSecretNeed[];
20
+ export declare function secretNeedsOf(selected: readonly SelectedRequest[], project: Project, overrides?: PropertyMap, workspace?: Workspace, registry?: ProtocolRegistry): LocatedSecretNeed[];
@@ -1,112 +1,64 @@
1
1
  /**
2
2
  * Every secret a selection of requests will ask for, found before anything is sent, so a pipeline
3
3
  * can be told which variables to set (`wirebench secrets list`) and a run knows which names to
4
- * read. It walks the same sources `prepareSend` resolves: effective auth, the request's keystore,
5
- * and the WS-Security configurations it selects, with the keystores those lead to.
4
+ * read. The generic part is here: every `${secret:name}` the request's own text reaches, and the
5
+ * secrets its scripts list. What a protocol's configuration needs (effective auth, the request's
6
+ * keystore, signing, WS-Security) is its module's answer, walking the same sources its send resolves.
6
7
  */
7
- import { toKeystoreDef } from '../project/keystores.js';
8
- import { toWssIncomingConfig, toWssOutgoingConfig } from '../project/wss-configs.js';
9
- import { secretNeedsOfAuth } from '../secrets/env-names.js';
10
- import { restEffectiveAuth, soapEffectiveAuth } from './effective-auth.js';
11
- const present = (id) => id !== undefined && id.length > 0;
12
- /** A keystore's password, when the registry entry has one; an unreadable entry needs nothing here. */
13
- function keystoreNeeds(project, keystoreId) {
14
- if (!present(keystoreId)) {
15
- return [];
16
- }
17
- const ref = project.wss.keystores.find((candidate) => candidate.id === keystoreId);
18
- if (ref === undefined) {
19
- return [];
20
- }
21
- try {
22
- const def = toKeystoreDef(ref);
23
- return present(def.passwordSecretRef)
24
- ? [
25
- {
26
- ref: def.passwordSecretRef,
27
- ...(def.passwordEnv !== undefined ? { envName: def.passwordEnv } : {}),
28
- purpose: `keystore password for "${def.name}"`,
29
- },
30
- ]
31
- : [];
32
- }
33
- catch {
34
- // `prepareSend` refuses such a request with its own error; it needs no secret before then.
35
- return [];
36
- }
37
- }
38
- /** Parses a WS-Security configuration by id; missing or unreadable is prepare's error, not a need. */
39
- function findConfig(refs, id, convert) {
40
- if (!present(id)) {
41
- return undefined;
42
- }
43
- const ref = refs.find((candidate) => candidate.id === id);
44
- if (ref === undefined) {
45
- return undefined;
46
- }
47
- try {
48
- return convert(ref);
49
- }
50
- catch {
51
- return undefined;
8
+ import { resolveScopes } from '../project/environments.js';
9
+ import { defaultRegistry } from '../protocols.js';
10
+ import { activeScripts } from '../script/request-scripts.js';
11
+ import { secretEnvName, secretPseudoRef } from '../secrets/secret-token.js';
12
+ import { resolveWorkspaceScopes, withActiveEnvironment } from '../workspace/environments.js';
13
+ import { secretNamesInValue } from './send-helpers.js';
14
+ export { secretNamesInValue } from './send-helpers.js';
15
+ function tokenNeeds(selected, scopeSets) {
16
+ // A script's own text is code, not a template: nothing in it is a reference. The secrets its
17
+ // request lists for `secrets.get` are needed instead (#63).
18
+ const { scripts, ...request } = selected.request;
19
+ const names = new Set(scopeSets.flatMap((scopes) => secretNamesInValue(request, scopes)));
20
+ for (const name of activeScripts(scripts)?.secrets ?? []) {
21
+ names.add(name);
52
22
  }
23
+ return [...names].map((name) => ({
24
+ ref: secretPseudoRef(name),
25
+ envName: secretEnvName(name),
26
+ purpose: `secret "${name}"`,
27
+ }));
53
28
  }
54
- /** WS-Security passwords carry no `…Env` name: they resolve through their ref-derived variable. */
55
- function outgoingNeeds(project, config) {
56
- const needs = [];
57
- for (const entry of config.entries) {
58
- if (entry.kind === 'username-token') {
59
- const ref = entry.passwordRef ?? config.defaultPasswordRef;
60
- if (entry.passwordType !== 'none' && present(ref)) {
61
- needs.push({ ref, purpose: `WS-Security password for "${entry.username}"` });
62
- }
63
- }
64
- else if (entry.kind === 'signature') {
65
- needs.push(...keystoreNeeds(project, entry.keystoreRef));
66
- if (present(entry.keyPasswordRef)) {
67
- needs.push({ ref: entry.keyPasswordRef, purpose: `WS-Security signing key password ("${config.name}")` });
68
- }
69
- }
70
- else if (entry.kind === 'encryption') {
71
- needs.push(...keystoreNeeds(project, entry.keystoreRef));
72
- }
73
- }
74
- return needs;
29
+ /** The generic needs of `selected`, then what its protocol's configuration needs. */
30
+ function needsOf(selected, project, scopeSets, registry) {
31
+ const run = registry.find(selected.kind)?.run;
32
+ return [...tokenNeeds(selected, scopeSets), ...(run !== undefined ? run.secretNeeds(selected, project) : [])];
75
33
  }
76
- function incomingNeeds(project, config) {
77
- return [
78
- ...keystoreNeeds(project, config.decryptKeystoreRef),
79
- ...(present(config.decryptKeyPasswordRef)
80
- ? [{ ref: config.decryptKeyPasswordRef, purpose: `WS-Security decryption key password ("${config.name}")` }]
81
- : []),
82
- ...keystoreNeeds(project, config.signatureKeystoreRef),
83
- ];
84
- }
85
- function needsOf(selected, project) {
86
- if (selected.kind === 'rest') {
87
- return [
88
- ...secretNeedsOfAuth(restEffectiveAuth(selected)),
89
- ...keystoreNeeds(project, selected.request.settings.sslKeystoreRef),
90
- ];
91
- }
92
- const { request } = selected;
93
- const outgoing = findConfig(project.wss.outgoing, request.wssOutgoingRef, toWssOutgoingConfig);
94
- const incoming = findConfig(project.wss.incoming, request.wssIncomingRef, toWssIncomingConfig);
95
- return [
96
- ...secretNeedsOfAuth(soapEffectiveAuth(selected)),
97
- ...keystoreNeeds(project, request.properties.sslKeystoreRef),
98
- ...(outgoing !== undefined ? outgoingNeeds(project, outgoing) : []),
99
- ...(incoming !== undefined ? incomingNeeds(project, incoming) : []),
100
- ];
34
+ /** A workspace's scopes with no environment active, then under each of its environments in turn. */
35
+ function workspaceScopeSets(workspace, project) {
36
+ return [undefined, ...workspace.environments.map((environment) => environment.id)].map((environmentId) => resolveWorkspaceScopes({ workspace: withActiveEnvironment(workspace, environmentId), project, globals: {} }));
101
37
  }
102
38
  /**
103
39
  * The secrets `selected` needs, one entry per ref in first-use order, each with every request
104
- * that uses it. The first declaration of a ref supplies its name and purpose.
40
+ * that uses it. The first declaration of a ref supplies its name and purpose. `overrides` are the
41
+ * run's `--var` properties, laid over the environment's as a send lays them. With a `workspace`
42
+ * the scopes are the ones a send inside it expands against: the workspace's properties, and each
43
+ * workspace environment with its linked project environment. `registry` is the set of protocol
44
+ * modules asked for their needs; the built-in ones by default.
105
45
  */
106
- export function secretNeedsOf(selected, project) {
46
+ export function secretNeedsOf(selected, project, overrides = {}, workspace, registry = defaultRegistry()) {
107
47
  const byRef = new Map();
48
+ // A token a property holds counts whichever environment a run picks: project properties alone,
49
+ // then each environment laid over them. No process environment, so this stays pure.
50
+ const withOverrides = (scopes) => ({
51
+ ...scopes,
52
+ env: { ...(scopes.env ?? {}), ...overrides },
53
+ });
54
+ const scopeSets = (workspace === undefined
55
+ ? [
56
+ resolveScopes(project, undefined, {}, {}),
57
+ ...project.environments.map((environment) => resolveScopes(project, environment.id, {}, {})),
58
+ ]
59
+ : workspaceScopeSets(workspace, project)).map(withOverrides);
108
60
  for (const item of selected) {
109
- for (const need of needsOf(item, project)) {
61
+ for (const need of needsOf(item, project, scopeSets, registry)) {
110
62
  const known = byRef.get(need.ref);
111
63
  if (known === undefined) {
112
64
  byRef.set(need.ref, { need, usedBy: [item.path] });
@@ -1,34 +1,43 @@
1
1
  /**
2
2
  * Which requests a run covers, and in what order: the order the explorer shows, so a report reads
3
- * like the project. Interfaces and APIs share one ordering space (see `Project.apis`).
3
+ * like the project. Every container shares one ordering space (see `Project.apis`). The requests
4
+ * themselves come from the protocol modules: nothing here names a protocol.
4
5
  */
5
- import type { Interface, OperationDef, Project, SoapRequestDef } from '../project/model.js';
6
- import type { RestApi, RestFolder, RestRequestDef } from '../rest/model.js';
7
- /** One saved request selected for a run, with enough context to send and report it. */
8
- export type SelectedRequest = {
9
- readonly kind: 'soap';
10
- readonly path: string;
11
- readonly group: string;
12
- readonly iface: Interface;
13
- readonly operation: OperationDef;
14
- readonly request: SoapRequestDef;
15
- } | {
16
- readonly kind: 'rest';
17
- readonly path: string;
18
- readonly group: string;
19
- readonly api: RestApi;
20
- readonly chain: readonly RestFolder[];
21
- readonly request: RestRequestDef;
22
- };
6
+ import type { Project } from '../project/model.js';
7
+ import type { ProtocolRegistry } from '../protocol/registry.js';
8
+ import type { SelectedRequest } from '../protocols.js';
9
+ export type { SelectedRequest } from '../protocols.js';
23
10
  /**
24
11
  * Resolves `selectors` (display paths or on-disk paths, matched at a `/` boundary) against the
25
- * project's requests, in explorer order. An empty `selectors` list selects everything. A gRPC or
26
- * WebSocket API is skipped: neither is runnable from the command line in this slice, and there is
27
- * no per-selector reason to report — a selector naming one simply matches nothing and surfaces
28
- * through `unmatched`, same as a typo would. `unmatched` lists every selector that covered no
29
- * request, so the runner can refuse the run rather than quietly test nothing.
12
+ * project's requests, in explorer order. An empty `selectors` list selects everything but the webhook
13
+ * items: those deliver to a receiver rather than test an API, so a run sends one only when a selector
14
+ * covers it (`Webhooks/…` or `webhooks/requests/…`). A gRPC request that streams, and a request its
15
+ * contract no longer has, are skipped: neither is runnable from the command line yet, and there is no
16
+ * per-selector reason to report — a selector naming one simply matches nothing and surfaces through
17
+ * `unmatched`, same as a typo would. `unmatched` lists every selector that covered no request, so the
18
+ * runner can refuse the run rather than quietly test nothing.
19
+ *
20
+ * `registry` is the set of protocol modules asked for their requests; the built-in ones by default.
30
21
  */
31
- export declare function selectRequests(project: Project, selectors: readonly string[]): {
22
+ export declare function selectRequests(project: Project, selectors: readonly string[], registry?: ProtocolRegistry): {
32
23
  selected: SelectedRequest[];
33
24
  unmatched: string[];
34
25
  };
26
+ /** Where a sequence step's request id leads. */
27
+ export type StepRequestLookup = {
28
+ readonly kind: 'found';
29
+ readonly selected: SelectedRequest;
30
+ } | {
31
+ readonly kind: 'missing';
32
+ } | {
33
+ readonly kind: 'unsupported';
34
+ readonly reason: string;
35
+ };
36
+ /**
37
+ * Finds the request a sequence step names by id, among the requests a run can send, with the same
38
+ * context `selectRequests` gives. A request that exists but cannot run (a webhook item, a streaming
39
+ * gRPC call, one orphaned by its contract) says why, so the step errors with a reason rather than as
40
+ * missing. Every module is asked for a reason before any candidate is looked
41
+ * at: a webhook item is a candidate of a run, and still not a step.
42
+ */
43
+ export declare function findStepRequest(project: Project, requestId: string, registry?: ProtocolRegistry): StepRequestLookup;
@@ -1,48 +1,18 @@
1
- const byOrder = (a, b) => a.order - b.order || a.name.localeCompare(b.name);
2
- function walkRest(api, chain, node, group, diskDir, out) {
3
- const children = [
4
- ...node.requests.map((request) => ({
5
- tag: 'request',
6
- order: request.order,
7
- name: request.name,
8
- request,
9
- })),
10
- ...node.folders.map((folder) => ({ tag: 'folder', order: folder.order, name: folder.name, folder })),
11
- ].sort(byOrder);
12
- for (const child of children) {
13
- if (child.tag === 'request') {
14
- if (child.request.orphaned !== true) {
15
- out.push({
16
- item: { kind: 'rest', path: `${group}/${child.request.name}`, group, api, chain, request: child.request },
17
- diskPath: `${diskDir}/${child.request.slug}`,
18
- });
19
- }
20
- }
21
- else {
22
- walkRest(api, [...chain, child.folder], child.folder, `${group}/${child.folder.name}`, `${diskDir}/${child.folder.slug}`, out);
23
- }
24
- }
25
- }
26
- function candidates(project) {
27
- const out = [];
28
- for (const container of [...project.interfaces, ...project.apis].sort(byOrder)) {
29
- if (container.kind === 'rest') {
30
- walkRest(container, [], container, container.name, `apis/${container.slug}/requests`, out);
31
- continue;
32
- }
33
- for (const operation of [...container.operations].sort(byOrder)) {
34
- const group = `${container.name}/${operation.name}`;
35
- for (const request of [...operation.requests].sort(byOrder)) {
36
- if (request.orphaned !== true) {
37
- out.push({
38
- item: { kind: 'soap', path: `${group}/${request.name}`, group, iface: container, operation, request },
39
- diskPath: `interfaces/${container.slug}/operations/${operation.slug}/${request.slug}`,
40
- });
41
- }
42
- }
43
- }
44
- }
45
- return out;
1
+ import { defaultRegistry } from '../protocols.js';
2
+ import { byOrder } from './tree.js';
3
+ /**
4
+ * A module's selection under the built-in union. A registry may hold a module that is not built in;
5
+ * its items travel under this type too, and a caller that narrows on `kind` simply never matches them.
6
+ */
7
+ const asSelected = (item) => item;
8
+ /** Every runnable request, container by container in explorer order, `explicitOnly` groups last. */
9
+ function candidates(project, registry) {
10
+ const groups = registry.modules.flatMap((module) => module.run?.groups(project) ?? []);
11
+ const inOrder = [
12
+ ...groups.filter((group) => group.explicitOnly !== true).sort(byOrder),
13
+ ...groups.filter((group) => group.explicitOnly === true).sort(byOrder),
14
+ ];
15
+ return inOrder.flatMap((group) => group.candidates.map(({ item, diskPath }) => ({ item, diskPath, explicitOnly: group.explicitOnly === true })));
46
16
  }
47
17
  function normalise(selector) {
48
18
  return selector
@@ -54,23 +24,44 @@ function normalise(selector) {
54
24
  const covers = (selector, candidate) => candidate === selector || candidate.startsWith(`${selector}/`);
55
25
  /**
56
26
  * Resolves `selectors` (display paths or on-disk paths, matched at a `/` boundary) against the
57
- * project's requests, in explorer order. An empty `selectors` list selects everything. A gRPC or
58
- * WebSocket API is skipped: neither is runnable from the command line in this slice, and there is
59
- * no per-selector reason to report — a selector naming one simply matches nothing and surfaces
60
- * through `unmatched`, same as a typo would. `unmatched` lists every selector that covered no
61
- * request, so the runner can refuse the run rather than quietly test nothing.
27
+ * project's requests, in explorer order. An empty `selectors` list selects everything but the webhook
28
+ * items: those deliver to a receiver rather than test an API, so a run sends one only when a selector
29
+ * covers it (`Webhooks/…` or `webhooks/requests/…`). A gRPC request that streams, and a request its
30
+ * contract no longer has, are skipped: neither is runnable from the command line yet, and there is no
31
+ * per-selector reason to report — a selector naming one simply matches nothing and surfaces through
32
+ * `unmatched`, same as a typo would. `unmatched` lists every selector that covered no request, so the
33
+ * runner can refuse the run rather than quietly test nothing.
34
+ *
35
+ * `registry` is the set of protocol modules asked for their requests; the built-in ones by default.
62
36
  */
63
- export function selectRequests(project, selectors) {
64
- const all = candidates(project);
37
+ export function selectRequests(project, selectors, registry = defaultRegistry()) {
38
+ const all = candidates(project, registry);
65
39
  if (selectors.length === 0) {
66
- return { selected: all.map((c) => c.item), unmatched: [] };
40
+ return { selected: all.filter((c) => !c.explicitOnly).map((c) => asSelected(c.item)), unmatched: [] };
67
41
  }
68
42
  const matches = (selector, c) => {
69
43
  const s = normalise(selector);
70
44
  return covers(s, c.item.path) || covers(s, c.diskPath);
71
45
  };
72
46
  return {
73
- selected: all.filter((c) => selectors.some((s) => matches(s, c))).map((c) => c.item),
47
+ selected: all.filter((c) => selectors.some((s) => matches(s, c))).map((c) => asSelected(c.item)),
74
48
  unmatched: selectors.filter((s) => !all.some((c) => matches(s, c))),
75
49
  };
76
50
  }
51
+ /**
52
+ * Finds the request a sequence step names by id, among the requests a run can send, with the same
53
+ * context `selectRequests` gives. A request that exists but cannot run (a webhook item, a streaming
54
+ * gRPC call, one orphaned by its contract) says why, so the step errors with a reason rather than as
55
+ * missing. Every module is asked for a reason before any candidate is looked
56
+ * at: a webhook item is a candidate of a run, and still not a step.
57
+ */
58
+ export function findStepRequest(project, requestId, registry = defaultRegistry()) {
59
+ for (const module of registry.modules) {
60
+ const reason = module.run?.whyNotRunnable(project, requestId);
61
+ if (reason !== undefined) {
62
+ return { kind: 'unsupported', reason };
63
+ }
64
+ }
65
+ const runnable = candidates(project, registry).find((candidate) => candidate.item.request.id === requestId);
66
+ return runnable !== undefined ? { kind: 'found', selected: asSelected(runnable.item) } : { kind: 'missing' };
67
+ }
@@ -0,0 +1,93 @@
1
+ import { WirebenchError } from '../errors.js';
2
+ import type { TlsOptions } from '../http/types.js';
3
+ import type { BaseUrlSource } from '../project/environments.js';
4
+ import type { AuthConfig, Project } from '../project/model.js';
5
+ import type { PropertyScopes, UnresolvedRef } from '../project/properties.js';
6
+ import type { SecretPlaceholders } from '../script/send.js';
7
+ import type { SecretNeed } from '../secrets/env-names.js';
8
+ import { resolveAuthConfig } from '../secrets/resolve.js';
9
+ import type { GetSecret } from '../secrets/resolve.js';
10
+ import type { SendAuth } from '../http/auth/send-auth.js';
11
+ import type { Keystore } from '../keystore/index.js';
12
+ import type { RunContext } from './context.js';
13
+ import type { RunTokenSource } from './oauth2-token.js';
14
+ /**
15
+ * The `${secret:name}` names anywhere in `value`'s strings — a send input or a saved request —
16
+ * following property values through `scopes`, in first-use order. Binary data is skipped.
17
+ */
18
+ export declare function secretNamesInValue(value: unknown, scopes?: PropertyScopes): string[];
19
+ /**
20
+ * `scopes` with the value of every `${secret:name}` token `input` reaches. Each value comes from
21
+ * `getSecret`, so a host that masks what it hands out (the CLI's `createEnvSecrets`) masks these too.
22
+ */
23
+ export declare function withSecrets(input: unknown, scopes: PropertyScopes, getSecret: GetSecret, placeholders?: SecretPlaceholders): Promise<PropertyScopes>;
24
+ /** A send resolved (spec §3.4): what it would send, and the references nothing resolves in it. */
25
+ export interface Resolved<I> {
26
+ readonly input: I;
27
+ readonly unresolved: readonly UnresolvedRef[];
28
+ }
29
+ /**
30
+ * The refusal for a request whose text holds property references nothing resolves, under the code
31
+ * its protocol raises (spec §8).
32
+ */
33
+ export declare function unresolvedError(code: string, path: string, unresolved: readonly UnresolvedRef[]): WirebenchError;
34
+ /**
35
+ * `path` resolved against the project folder, refused when it lands outside it. The app also
36
+ * accepts a file its user picked through a dialog; a pipeline has no such user, so the project
37
+ * folder is the whole boundary.
38
+ */
39
+ export declare function insideProject(context: RunContext, path: string, code: string, name: string): Promise<string>;
40
+ /** A keystore by its entry id: through the host's loader when it lends one, else from the project folder. */
41
+ export declare function keystoreFor(context: RunContext, keystoreId: string): Promise<Keystore | undefined>;
42
+ /** The `cert`/`key` a request's own keystore presents; there is no global keystore in a run. */
43
+ export declare function clientIdentityFor(context: RunContext, keystoreId: string | undefined): Promise<TlsOptions | undefined>;
44
+ /** Identity, then the only two trust opt-outs a run honours: `--insecure` and the file's own flag. */
45
+ export declare function tlsFor(context: RunContext, keystoreId: string | undefined, trustInvalid: boolean): Promise<TlsOptions | undefined>;
46
+ /** The run's shared token source, or a fresh one for a send outside a run. */
47
+ export declare function tokenSourceOf(context: RunContext): RunTokenSource;
48
+ /**
49
+ * A request's effective auth with its secrets resolved. OAuth2 client credentials obtains a token
50
+ * (the token request uses the request's own TLS, the proxy for the token URL and the run's
51
+ * timeout); the authorization-code grant needs a browser a pipeline does not have, and is refused.
52
+ *
53
+ * @throws WirebenchError `auth-grant-unsupported` | `secret-missing` | `unresolved-properties` |
54
+ * `oauth2-token-error` | `oauth2-token-malformed`
55
+ */
56
+ export declare function authFor(configured: AuthConfig, path: string, context: RunContext, tls: TlsOptions | undefined): Promise<Awaited<ReturnType<typeof resolveAuthConfig>>>;
57
+ /**
58
+ * Tells the host each credential a resolved auth puts on the wire, in the form it travels there,
59
+ * so a server that echoes one back has it masked: an API key's value, a bearer or OAuth2 access
60
+ * token, and Basic's `base64(user:password)`. A password is never reported bare — people choose
61
+ * them, so one is often ordinary text — and NTLM's password never travels at all.
62
+ */
63
+ export declare function reportedAuth(auth: SendAuth | undefined, context: RunContext): SendAuth | undefined;
64
+ /**
65
+ * An API's base URL (or target) and where it came from, through the workspace's environment when
66
+ * the run has a workspace: what a preview reports beside the URL.
67
+ */
68
+ export declare function resolvedBaseUrl(context: Pick<RunContext, 'project' | 'environmentId' | 'workspace'>, api: {
69
+ readonly slug: string;
70
+ readonly baseUrl: string;
71
+ }): {
72
+ readonly url: string;
73
+ readonly source: BaseUrlSource;
74
+ };
75
+ /** An API's base URL (or target), through the workspace's environment likewise. */
76
+ export declare function baseUrlFor(context: RunContext, api: {
77
+ readonly slug: string;
78
+ readonly baseUrl: string;
79
+ }): string;
80
+ /**
81
+ * After a server refused the credentials a send carried, drops the run's OAuth2 token among them,
82
+ * so the next request behind that configuration fetches a new one instead of repeating the refusal.
83
+ * The refused request itself is never sent again.
84
+ */
85
+ export declare function dropRefusedToken(context: RunContext, auth: SendAuth | undefined, refused: boolean): void;
86
+ /** The origin a request went to, as a sent request reports it; nothing for a URL without one. */
87
+ export declare function originOf(url: string): {
88
+ readonly origin?: string;
89
+ };
90
+ /** True for a reference that is set: neither absent nor empty. */
91
+ export declare const present: (id: string | undefined) => id is string;
92
+ /** A keystore's password, when the registry entry has one; an unreadable entry needs nothing here. */
93
+ export declare function keystoreNeeds(project: Project, keystoreId: string | undefined): SecretNeed[];