@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
@@ -1,36 +1,8 @@
1
1
  import type { QName } from '../wsdl/qname.js';
2
2
  import type { ElementDecl, ResolvedAttribute, SourceRef } from './model.js';
3
3
  import type { SchemaSet } from './schema-set.js';
4
- /** A half-open character range in a text document. */
5
- export interface TextRange {
6
- readonly start: number;
7
- readonly end: number;
8
- }
9
- /** What the completion provider needs to offer children of the element the cursor is in. */
10
- export interface CompletionContext {
11
- /** Ancestor chain of the element that would contain the completed child, outermost first. */
12
- readonly path: readonly QName[];
13
- /** The (possibly empty) element name typed so far after `<`, including any prefix. */
14
- readonly partial: string;
15
- /** Namespace prefixes in scope at the cursor. */
16
- readonly prefixes: Readonly<Record<string, string>>;
17
- /** The range of `partial` in the document, to replace with the accepted completion. */
18
- readonly replaceRange: TextRange;
19
- }
20
- /**
21
- * Ancestor chain (outermost first) of the element containing `offset`,
22
- * resolved to expanded QNames via the `xmlns` declarations in scope at that
23
- * point in the text.
24
- */
25
- export declare function elementPathAt(text: string, offset: number): QName[];
26
- /**
27
- * Pure text analysis for the completion provider: detects an in-progress
28
- * `<partial` element-name token ending at `offset` and reports the ancestor
29
- * path, in-scope prefixes and the range to replace with the accepted item.
30
- * Returns `undefined` when the cursor is not positioned right after an open
31
- * `<` (e.g. mid-attribute, or not inside a tag at all).
32
- */
33
- export declare function completionContextAt(text: string, offset: number): CompletionContext | undefined;
4
+ export { completionContextAt, elementPathAt } from '../xml/locate.js';
5
+ export type { CompletionContext, TextRange } from '../xml/locate.js';
34
6
  /** Element declarations legal as children of the element at `path`, in schema order (substitution members included). */
35
7
  export declare function childrenAllowedAt(schemaSet: SchemaSet, path: readonly QName[]): ElementDecl[];
36
8
  /** Attributes legal on the element at `path`. */
@@ -1,113 +1,5 @@
1
1
  import { qnameEquals } from '../wsdl/qname.js';
2
- const OPEN_TAG_RE = /<([^\s/!?>][^\s/>]*)((?:\s+[^<>]*)?)\s*(\/?)>/g;
3
- const ATTR_RE = /([:\w.-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
4
- const XML_PREFIX = 'xml';
5
- const XML_NS = 'http://www.w3.org/XML/1998/namespace';
6
- /** Extracts `xmlns`/`xmlns:prefix` declarations from a tag's raw attribute text. */
7
- function xmlnsDeclarations(rawAttrs) {
8
- const decls = {};
9
- const re = new RegExp(ATTR_RE);
10
- let m;
11
- while ((m = re.exec(rawAttrs)) !== null) {
12
- const attrName = m[1];
13
- const value = m[2] ?? m[3] ?? '';
14
- if (attrName === 'xmlns') {
15
- decls[''] = value;
16
- }
17
- else if (attrName.startsWith('xmlns:')) {
18
- decls[attrName.slice('xmlns:'.length)] = value;
19
- }
20
- }
21
- return decls;
22
- }
23
- function resolvePrefixed(name, prefixes) {
24
- const colon = name.indexOf(':');
25
- if (colon === -1) {
26
- return { namespaceUri: prefixes[''] ?? '', localName: name };
27
- }
28
- const prefix = name.slice(0, colon);
29
- const localName = name.slice(colon + 1);
30
- if (prefix === XML_PREFIX) {
31
- return { namespaceUri: XML_NS, localName };
32
- }
33
- return { namespaceUri: prefixes[prefix] ?? '', localName };
34
- }
35
- /**
36
- * Walks open/close tags textually (never a DOM parse) to find the in-scope
37
- * ancestor stack ending just before `offset`. Tolerant of an unfinished tag
38
- * at the cursor: a `<…` with no closing `>` yet in the text simply does not
39
- * match and is ignored.
40
- */
41
- function scopeStackAt(text, offset) {
42
- const stack = [];
43
- const re = new RegExp(OPEN_TAG_RE);
44
- let m;
45
- while ((m = re.exec(text)) !== null) {
46
- const matchEnd = m.index + m[0].length;
47
- if (matchEnd > offset) {
48
- break;
49
- }
50
- const raw = m[0];
51
- if (raw.startsWith('</')) {
52
- // Tolerant of stray/mismatched close tags: just pop, since the source text
53
- // up to the cursor is assumed well-formed for the purpose of this walk.
54
- if (stack.length > 0) {
55
- stack.pop();
56
- }
57
- continue;
58
- }
59
- const name = m[1].replace(/^\//, '');
60
- const rawAttrs = m[2] ?? '';
61
- const selfClosing = m[3] === '/';
62
- const parentPrefixes = stack.length > 0 ? stack[stack.length - 1].prefixes : {};
63
- const ownDecls = xmlnsDeclarations(rawAttrs);
64
- const prefixes = Object.keys(ownDecls).length > 0 ? { ...parentPrefixes, ...ownDecls } : parentPrefixes;
65
- const qname = resolvePrefixed(name, prefixes);
66
- if (!selfClosing) {
67
- stack.push({ qname, prefixes });
68
- }
69
- }
70
- return stack;
71
- }
72
- /**
73
- * Ancestor chain (outermost first) of the element containing `offset`,
74
- * resolved to expanded QNames via the `xmlns` declarations in scope at that
75
- * point in the text.
76
- */
77
- export function elementPathAt(text, offset) {
78
- return scopeStackAt(text, offset).map((s) => s.qname);
79
- }
80
- /**
81
- * Pure text analysis for the completion provider: detects an in-progress
82
- * `<partial` element-name token ending at `offset` and reports the ancestor
83
- * path, in-scope prefixes and the range to replace with the accepted item.
84
- * Returns `undefined` when the cursor is not positioned right after an open
85
- * `<` (e.g. mid-attribute, or not inside a tag at all).
86
- */
87
- export function completionContextAt(text, offset) {
88
- const before = text.slice(0, offset);
89
- const ltIndex = before.lastIndexOf('<');
90
- if (ltIndex === -1) {
91
- return undefined;
92
- }
93
- const between = text.slice(ltIndex + 1, offset);
94
- if (/[\s>/]/.test(between) || between.startsWith('/')) {
95
- return undefined;
96
- }
97
- let end = offset;
98
- while (end < text.length && /[\w:.-]/.test(text[end])) {
99
- end += 1;
100
- }
101
- const path = elementPathAt(text, ltIndex);
102
- const scope = scopeStackAt(text, ltIndex);
103
- const prefixes = scope.length > 0 ? scope[scope.length - 1].prefixes : {};
104
- return {
105
- path,
106
- partial: between,
107
- prefixes,
108
- replaceRange: { start: ltIndex + 1, end },
109
- };
110
- }
2
+ export { completionContextAt, elementPathAt } from '../xml/locate.js';
111
3
  function resolveDeclType(schemaSet, decl) {
112
4
  if (decl.type !== undefined) {
113
5
  const type = schemaSet.lookupType(decl.type);
@@ -54,6 +54,8 @@ export interface ScanXmlResult {
54
54
  readonly elements: readonly ScannedElement[];
55
55
  readonly problems: readonly string[];
56
56
  }
57
+ /** Decodes the five predefined XML entities plus numeric character references. */
58
+ export declare function decodeEntities(raw: string): string;
57
59
  /**
58
60
  * Scans an XML fragment into an element tree with exact ranges.
59
61
  *
@@ -16,7 +16,7 @@ const ATTR_RE = /([^\s=/>]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
16
16
  const NAME_CHAR_RE = /[^\s/>]/;
17
17
  const XML_NS = 'http://www.w3.org/XML/1998/namespace';
18
18
  /** Decodes the five predefined XML entities plus numeric character references. */
19
- function decodeEntities(raw) {
19
+ export function decodeEntities(raw) {
20
20
  return raw.replace(/&(#x[0-9a-fA-F]+|#\d+|[a-zA-Z]+);/g, (match, body) => {
21
21
  if (body === 'amp')
22
22
  return '&';
@@ -47,6 +47,8 @@ export declare class PrefixTable {
47
47
  private readonly taken;
48
48
  private counter;
49
49
  constructor(preferred: Readonly<Record<string, string>>);
50
+ /** Keeps `prefix` from being allocated: it is already bound in an enclosing scope. */
51
+ reserve(prefix: string): void;
50
52
  /** The prefix for `uri`, allocating one on first use. The empty namespace has no prefix. */
51
53
  prefixFor(uri: string, hint?: string): string;
52
54
  /** Renders `name` as a prefixed lexical QName. */
@@ -65,6 +65,10 @@ export class PrefixTable {
65
65
  constructor(preferred) {
66
66
  this.preferred = preferred;
67
67
  }
68
+ /** Keeps `prefix` from being allocated: it is already bound in an enclosing scope. */
69
+ reserve(prefix) {
70
+ this.taken.add(prefix);
71
+ }
68
72
  /** The prefix for `uri`, allocating one on first use. The empty namespace has no prefix. */
69
73
  prefixFor(uri, hint) {
70
74
  if (uri === '') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirebench/engine",
3
- "version": "2.2.1",
3
+ "version": "3.1.0-rc.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "repository": {
@@ -42,17 +42,28 @@
42
42
  "types": "./dist/grpc/browser.d.ts",
43
43
  "default": "./dist/grpc/browser.js"
44
44
  },
45
+ "./asyncapi": {
46
+ "types": "./dist/asyncapi/browser.d.ts",
47
+ "default": "./dist/asyncapi/browser.js"
48
+ },
49
+ "./snapshot": {
50
+ "types": "./dist/snapshot/index.d.ts",
51
+ "default": "./dist/snapshot/index.js"
52
+ },
45
53
  "./detect": {
46
54
  "types": "./dist/import-detect.d.ts",
47
55
  "default": "./dist/import-detect.js"
48
56
  }
49
57
  },
50
58
  "dependencies": {
59
+ "@jitl/quickjs-wasmfile-release-sync": "0.32.0",
51
60
  "@xmldom/xmldom": "^0.9.12",
52
61
  "fontoxpath": "^3.34.0",
53
62
  "jsonpath-plus": "^10.4.0",
54
63
  "node-forge": "^1.3.1",
55
64
  "protobufjs": "^8.8.0",
65
+ "quickjs-emscripten-core": "0.32.0",
66
+ "typescript": "~5.9.3",
56
67
  "ulidx": "^2.4.1",
57
68
  "undici": "^8",
58
69
  "xml-crypto": "^6.1.2",
@@ -1,12 +0,0 @@
1
- /**
2
- * Convenience wrappers around `buildSampleRequest`/`buildEmptyRequest` that
3
- * take an {@link ImportResult} directly, so callers don't have to thread
4
- * `definition`/`schemaSet` through by hand.
5
- */
6
- import type { GeneratedRequest, OperationRef, RequestBuildOptions } from './soap/request-builder.js';
7
- import type { GenerateOptions } from './xsd/sample-generator.js';
8
- import type { ImportResult } from './types.js';
9
- /** Builds the sample SOAP request for one operation of an imported definition. */
10
- export declare function generateRequest(result: ImportResult, op: OperationRef, genOptions?: Partial<GenerateOptions>, options?: RequestBuildOptions): GeneratedRequest;
11
- /** Builds an empty SOAP request (empty `Header`/`Body`) for one operation of an imported definition. */
12
- export declare function generateEmptyRequest(result: ImportResult, op: OperationRef, options?: RequestBuildOptions): GeneratedRequest;
@@ -1,12 +0,0 @@
1
- /**
2
- * Builds the operation-picker summary (`OperationSummary[]`) for an imported
3
- * WSDL definition: every binding operation, cross-referenced with the ports
4
- * (and their services) that expose it.
5
- */
6
- import type { WsdlDefinition } from './wsdl/model.js';
7
- import type { OperationSummary } from './types.js';
8
- /**
9
- * Walks every `binding` x `operation` pair in `definition`, mapping each to
10
- * the ports (and their services) that reference the binding.
11
- */
12
- export declare function summarizeOperations(definition: WsdlDefinition): readonly OperationSummary[];
@@ -1,10 +0,0 @@
1
- import type { AuthConfig, EndpointAuth } from '../project/model.js';
2
- import type { SelectedRequest } from './select.js';
3
- /** A SOAP request's own auth, combined with its endpoint's, falling back to the interface's. */
4
- export declare function soapEffectiveAuth(selected: Extract<SelectedRequest, {
5
- kind: 'soap';
6
- }>): EndpointAuth | undefined;
7
- /** Innermost first, as the app's `authChainFor` builds it: request, its folders inside-out, the API. */
8
- export declare function restEffectiveAuth(selected: Extract<SelectedRequest, {
9
- kind: 'rest';
10
- }>): AuthConfig;
@@ -1,19 +0,0 @@
1
- /**
2
- * The authentication a selected request would send with, before any secret is resolved. Both
3
- * `prepareSend` and `secretNeedsOf` read it from here, so the secrets a run is told it needs are
4
- * exactly the secrets its sends will ask for.
5
- */
6
- import { effectiveAuth } from '../project/endpoints.js';
7
- import { resolveAuthEndpoint } from '../project/environments.js';
8
- import { resolveAuthChain } from '../rest/auth.js';
9
- /** A SOAP request's own auth, combined with its endpoint's, falling back to the interface's. */
10
- export function soapEffectiveAuth(selected) {
11
- const { iface, request } = selected;
12
- const endpoint = resolveAuthEndpoint(iface, request);
13
- return effectiveAuth(request.auth, endpoint?.auth, endpoint?.authMode ?? 'override', iface.auth);
14
- }
15
- /** Innermost first, as the app's `authChainFor` builds it: request, its folders inside-out, the API. */
16
- export function restEffectiveAuth(selected) {
17
- const { api, chain, request } = selected;
18
- return resolveAuthChain([request.auth, ...[...chain].reverse().map((folder) => folder.auth), api.auth]);
19
- }
@@ -1,43 +0,0 @@
1
- import type { ProxyOptions } from '../http/types.js';
2
- import type { Project, PropertyMap } from '../project/model.js';
3
- import type { PropertyScopes } from '../project/properties.js';
4
- import type { RestSendInput } from '../rest/send.js';
5
- import type { GetSecret } from '../secrets/resolve.js';
6
- import type { SoapSendInput } from '../types.js';
7
- import type { SelectedRequest } from './select.js';
8
- /** Everything a run supplies around the saved requests it sends. */
9
- export interface RunContext {
10
- readonly project: Project;
11
- /** The project folder: keystores, attachments and file bodies are read from inside it only. */
12
- readonly projectDir: string;
13
- readonly environmentId?: string;
14
- /** `--var` overrides, laid over the environment's properties. */
15
- readonly overrides: PropertyMap;
16
- readonly getSecret: GetSecret;
17
- readonly timeoutMs?: number;
18
- readonly insecure?: boolean;
19
- readonly proxyFor?: (url: string) => ProxyOptions | undefined;
20
- readonly signal?: AbortSignal;
21
- /**
22
- * The WSDL-derived default `wsa:Action` for a SOAP request, as the app takes it from the
23
- * interface's imported definition. Absent (or returning `''`) when no definition is at hand:
24
- * an explicit `wsa:Action` or the request's SOAPAction then still applies.
25
- */
26
- readonly defaultWsaActionFor?: (selected: Extract<SelectedRequest, {
27
- kind: 'soap';
28
- }>) => string;
29
- }
30
- /** One request, ready for `sendSoapRequest` (with `scopes`) or `sendRest`. */
31
- export type PreparedSend = {
32
- readonly kind: 'soap';
33
- readonly input: SoapSendInput;
34
- readonly scopes: PropertyScopes;
35
- } | {
36
- readonly kind: 'rest';
37
- readonly input: RestSendInput;
38
- };
39
- /**
40
- * @throws WirebenchError `unresolved-properties` | `endpoint-unresolved` | `secret-missing` |
41
- * `auth-grant-unsupported` | `wss-config-missing` | `keystore-missing`
42
- */
43
- export declare function prepareSend(selected: SelectedRequest, context: RunContext): Promise<PreparedSend>;
@@ -1,280 +0,0 @@
1
- /**
2
- * Turns one saved request into a send input, for a host with no editor: no draft to apply, no
3
- * user preferences to fold in, no renderer to keep credentials from. It composes the same engine
4
- * functions the app's main process does, in the same order, so a request runs in a pipeline the
5
- * way it runs when its author presses Send.
6
- *
7
- * What the app reads from the user's preferences — a global client keystore, a CA bundle, a
8
- * proxy, global properties — has no counterpart here: a run is described by the project and its
9
- * command line alone. Trust anchors beyond Node's own come from `NODE_EXTRA_CA_CERTS`.
10
- */
11
- import { readFile, stat } from 'node:fs/promises';
12
- import { isAbsolute, resolve as resolvePath } from 'node:path';
13
- import { WirebenchError } from '../errors.js';
14
- import { isInsideRealDir } from '../fs.js';
15
- import { createFileAttachmentResolver, readAttachment } from '../project/attachments-cache.js';
16
- import { resolveApiBaseUrl, resolveEndpoint, resolveScopes } from '../project/environments.js';
17
- import { toKeystoreDef } from '../project/keystores.js';
18
- import { expandSendInput } from '../project/properties.js';
19
- import { toWssIncomingConfig, toWssOutgoingConfig } from '../project/wss-configs.js';
20
- import { expandRestSendInput } from '../rest/expand.js';
21
- import { resolveAuthConfig, resolveEndpointAuth, toSendAuth } from '../secrets/resolve.js';
22
- import { toRestSendInput, toSendInput } from '../send-options.js';
23
- import { effectiveWsa } from '../wsa/model.js';
24
- import { loadKeystore, toTlsClientIdentity } from '../wss/keystore/index.js';
25
- import { createWssContext } from '../wss/model.js';
26
- import { restEffectiveAuth, soapEffectiveAuth } from './effective-auth.js';
27
- function scopesFor(context) {
28
- const scopes = resolveScopes(context.project, context.environmentId, {}, process.env);
29
- return { ...scopes, env: { ...(scopes.env ?? {}), ...context.overrides } };
30
- }
31
- function unresolvedError(path, unresolved) {
32
- const exprs = unresolved.map((ref) => ref.expr);
33
- return new WirebenchError('unresolved-properties', `"${path}" has property references nothing resolves: ${exprs.join(', ')}`, { details: { path, unresolved: exprs } });
34
- }
35
- /** A secret the project names but the run was not given: refused, never sent without. */
36
- async function requiredSecret(ref, getSecret) {
37
- const value = await getSecret(ref);
38
- if (value === undefined) {
39
- throw new WirebenchError('secret-missing', `Secret ${ref} was not supplied to this run.`, { details: { ref } });
40
- }
41
- return value;
42
- }
43
- /**
44
- * `path` resolved against the project folder, refused when it lands outside it. The app also
45
- * accepts a file its user picked through a dialog; a pipeline has no such user, so the project
46
- * folder is the whole boundary.
47
- */
48
- async function insideProject(context, path, code, name) {
49
- const resolved = resolvePath(context.projectDir, path);
50
- if (!(await isInsideRealDir(context.projectDir, resolved))) {
51
- throw new WirebenchError(code, `"${name}" resolves outside the project folder.`, { details: { path } });
52
- }
53
- return resolved;
54
- }
55
- /** Mirrors the app's keystore loading, minus its cache: a run loads each keystore it needs. */
56
- async function loadKeystoreById(context, keystoreId) {
57
- const ref = context.project.wss.keystores.find((candidate) => candidate.id === keystoreId);
58
- if (ref === undefined) {
59
- return undefined;
60
- }
61
- const def = toKeystoreDef(ref);
62
- const path = await insideProject(context, def.path, 'keystore-outside-project', def.name);
63
- try {
64
- await stat(path);
65
- }
66
- catch (error) {
67
- throw new WirebenchError('keystore-unreadable', `The keystore file "${def.path}" could not be read.`, {
68
- details: { id: def.id },
69
- cause: error,
70
- });
71
- }
72
- const password = def.passwordSecretRef === undefined ? undefined : await requiredSecret(def.passwordSecretRef, context.getSecret);
73
- return loadKeystore(await readFile(path), { type: def.type, ...(password !== undefined ? { password } : {}) });
74
- }
75
- /** The `cert`/`key` a request's own keystore presents; there is no global keystore in a run. */
76
- async function clientIdentityFor(context, keystoreId) {
77
- if (keystoreId === undefined || keystoreId.length === 0) {
78
- return undefined;
79
- }
80
- const keystore = await loadKeystoreById(context, keystoreId);
81
- const def = context.project.wss.keystores.find((candidate) => candidate.id === keystoreId);
82
- if (keystore === undefined || def === undefined) {
83
- throw new WirebenchError('keystore-missing', 'This request selects a keystore the project no longer has.', {
84
- details: { keystoreId },
85
- });
86
- }
87
- const identity = toTlsClientIdentity(keystore, toKeystoreDef(def).defaultAlias);
88
- return { cert: identity.cert, key: identity.key };
89
- }
90
- /** Identity, then the only two trust opt-outs a run honours: `--insecure` and the file's own flag. */
91
- async function tlsFor(context, keystoreId, trustInvalid) {
92
- const identity = await clientIdentityFor(context, keystoreId);
93
- const skipVerify = context.insecure === true || trustInvalid;
94
- if (identity === undefined && !skipVerify) {
95
- return undefined;
96
- }
97
- return { ...identity, ...(skipVerify ? { rejectUnauthorized: false } : {}) };
98
- }
99
- /**
100
- * WS-Addressing as the app's `wsaFor` builds it. The WSDL-derived default action comes from the
101
- * host's `defaultWsaActionFor`; without one it is empty, as it is in the app for an interface not
102
- * yet hydrated, and an explicit `wsa:Action` or the request's SOAPAction still applies.
103
- */
104
- function wsaFor(selected, context) {
105
- const config = effectiveWsa(selected.iface.wsa, selected.request.wsa);
106
- return config.enabled ? { config, defaultAction: context.defaultWsaActionFor?.(selected) ?? '' } : undefined;
107
- }
108
- /** The app's `wssFor`: a selected configuration the project no longer has refuses the send. */
109
- function wssFor(selected, context) {
110
- const { request } = selected;
111
- const pick = (id) => (id === undefined || id.length === 0 ? undefined : id);
112
- const outgoingId = pick(request.wssOutgoingRef);
113
- const incomingId = pick(request.wssIncomingRef);
114
- if (outgoingId === undefined && incomingId === undefined) {
115
- return undefined;
116
- }
117
- const find = (refs, id, convert) => {
118
- const ref = refs.find((candidate) => candidate.id === id);
119
- if (ref !== undefined) {
120
- try {
121
- return convert(ref);
122
- }
123
- catch {
124
- // An unreadable configuration is treated as the app treats it: as missing.
125
- }
126
- }
127
- throw new WirebenchError('wss-config-missing', 'This request selects a WS-Security configuration the project no longer has.', { details: { configId: id } });
128
- };
129
- const outgoing = outgoingId === undefined ? undefined : find(context.project.wss.outgoing, outgoingId, toWssOutgoingConfig);
130
- const incoming = incomingId === undefined ? undefined : find(context.project.wss.incoming, incomingId, toWssIncomingConfig);
131
- const { properties } = request;
132
- return {
133
- ...(outgoing !== undefined ? { outgoing } : {}),
134
- ...(incoming !== undefined ? { incoming } : {}),
135
- ctx: createWssContext({
136
- keystores: (ref) => loadKeystoreById(context, ref),
137
- secrets: (ref) => requiredSecret(ref, context.getSecret),
138
- }),
139
- requestProperties: {
140
- ...(properties.wssPasswordType !== undefined ? { wssPasswordType: properties.wssPasswordType } : {}),
141
- ...(properties.wssTimeToLive !== undefined ? { wssTimeToLive: properties.wssTimeToLive } : {}),
142
- },
143
- };
144
- }
145
- /**
146
- * The app's `attachmentResolvers`, with the project folder as the only read boundary: a `cache`
147
- * attachment comes out of `attachments/`, a `path` one from its first existing candidate (resource
148
- * root, then the project), and an inline `file:` reference from the project folder.
149
- */
150
- function attachmentResolvers(context) {
151
- const { projectDir } = context;
152
- const resourceRoot = context.project.settings.resourceRoot;
153
- const read = createFileAttachmentResolver(projectDir, resourceRoot);
154
- return {
155
- resolver: async (attachment) => {
156
- if (attachment.source.kind === 'path') {
157
- const { path } = attachment.source;
158
- const candidates = isAbsolute(path)
159
- ? [path]
160
- : [...(resourceRoot !== undefined ? [resolvePath(resourceRoot, path)] : []), resolvePath(projectDir, path)];
161
- for (const candidate of candidates) {
162
- const exists = await stat(candidate).then(() => true, () => false);
163
- if (exists) {
164
- await insideProject(context, candidate, 'attachment-outside-project', attachment.name);
165
- return new Uint8Array(await readFile(candidate));
166
- }
167
- }
168
- }
169
- return read(attachment);
170
- },
171
- resolveFile: async (path) => new Uint8Array(await readFile(await insideProject(context, path, 'inline-file-outside-project', path))),
172
- resourceRoot: projectDir,
173
- };
174
- }
175
- /** A REST multipart file part or binary body, read from inside the project folder. */
176
- function restFileResolver(context) {
177
- return async (source) => source.kind === 'cache'
178
- ? readAttachment(context.projectDir, source.sha256)
179
- : new Uint8Array(await readFile(await insideProject(context, source.path, 'rest-file-outside-project', source.path)));
180
- }
181
- async function prepareSoap(selected, context) {
182
- const { iface, request } = selected;
183
- const resolved = resolveEndpoint(context.project, context.environmentId, iface, request);
184
- if (resolved.url === undefined) {
185
- throw new WirebenchError('endpoint-unresolved', `No endpoint resolves for "${selected.path}"`, {
186
- details: { path: selected.path },
187
- });
188
- }
189
- const auth = await resolveEndpointAuth(soapEffectiveAuth(selected), context.getSecret);
190
- const base = toSendInput({
191
- request: {
192
- properties: request.properties,
193
- soapVersion: request.soapVersion,
194
- ...(request.soapAction !== undefined ? { soapAction: request.soapAction } : {}),
195
- headers: request.headers,
196
- envelopeXml: request.envelopeXml,
197
- },
198
- endpoint: resolved.url,
199
- projectSettings: context.project.settings,
200
- attachments: request.attachments,
201
- attachmentResolvers: attachmentResolvers(context),
202
- });
203
- const scopes = scopesFor(context);
204
- const tls = await tlsFor(context, request.properties.sslKeystoreRef, resolved.endpoint?.trustInvalid === true);
205
- const proxy = context.proxyFor?.(resolved.url);
206
- const wsa = wsaFor(selected, context);
207
- const wss = wssFor(selected, context);
208
- const sendAuth = toSendAuth(auth);
209
- // The attachments and MTOM options ride on `base`, as the app's `sendAttachmentsFor` builds them.
210
- const input = {
211
- ...base,
212
- ...(sendAuth !== undefined ? { auth: sendAuth } : {}),
213
- ...(context.timeoutMs !== undefined ? { timeoutMs: context.timeoutMs } : {}),
214
- ...(tls !== undefined ? { tls: { ...base.tls, ...tls } } : {}),
215
- ...(proxy !== undefined ? { proxy } : {}),
216
- ...(wsa !== undefined ? { wsa } : {}),
217
- ...(wss !== undefined ? { wss } : {}),
218
- ...(context.signal !== undefined ? { signal: context.signal } : {}),
219
- };
220
- // Refused here, before the wire: the engine would report the same refs on the exchange, but by
221
- // then a half-expanded envelope has already been sent to somebody's service.
222
- const { unresolved } = expandSendInput(input, scopes);
223
- if (unresolved.length > 0) {
224
- throw unresolvedError(selected.path, unresolved);
225
- }
226
- return { kind: 'soap', input, scopes };
227
- }
228
- async function prepareRest(selected, context) {
229
- const { api, request } = selected;
230
- const configured = restEffectiveAuth(selected);
231
- if (configured.type === 'oauth2') {
232
- throw new WirebenchError('auth-grant-unsupported', configured.grant === 'authorization-code'
233
- ? 'This request signs in through a browser (OAuth2 authorization code), which a pipeline cannot do.'
234
- : 'OAuth2 is not supported by the runner yet.', { details: { path: selected.path, grant: configured.grant } });
235
- }
236
- const auth = await resolveAuthConfig(configured, context.getSecret);
237
- const scopes = scopesFor(context);
238
- const baseUrl = resolveApiBaseUrl(context.project, context.environmentId, api).url;
239
- const tls = await tlsFor(context, request.settings.sslKeystoreRef, request.settings.trustInvalid === true);
240
- const unexpanded = toRestSendInput({
241
- request: {
242
- method: request.method,
243
- url: request.url,
244
- pathParams: request.pathParams,
245
- query: request.query,
246
- headers: request.headers,
247
- body: request.body,
248
- settings: request.settings,
249
- },
250
- baseUrl,
251
- projectSettings: context.project.settings,
252
- ...(auth !== undefined ? { auth } : {}),
253
- ...(tls !== undefined ? { tls } : {}),
254
- resolveFile: restFileResolver(context),
255
- ...(context.signal !== undefined ? { signal: context.signal } : {}),
256
- });
257
- const { input, unresolved } = expandRestSendInput(unexpanded, scopes, {
258
- escape: request.settings.escapeProperties === true,
259
- });
260
- if (unresolved.length > 0) {
261
- throw unresolvedError(selected.path, unresolved);
262
- }
263
- // As the app does: the proxy is chosen for the base URL, or the request's own when it has none.
264
- const proxy = context.proxyFor?.(input.baseUrl === '' ? input.request.url : input.baseUrl);
265
- return {
266
- kind: 'rest',
267
- input: {
268
- ...input,
269
- ...(proxy !== undefined ? { proxy } : {}),
270
- ...(context.timeoutMs !== undefined ? { settings: { ...input.settings, timeoutMs: context.timeoutMs } } : {}),
271
- },
272
- };
273
- }
274
- /**
275
- * @throws WirebenchError `unresolved-properties` | `endpoint-unresolved` | `secret-missing` |
276
- * `auth-grant-unsupported` | `wss-config-missing` | `keystore-missing`
277
- */
278
- export function prepareSend(selected, context) {
279
- return selected.kind === 'soap' ? prepareSoap(selected, context) : prepareRest(selected, context);
280
- }