@wirebench/engine 2.1.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 (583) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/assert/contract.d.ts +3 -0
  4. package/dist/assert/contract.js +17 -0
  5. package/dist/assert/index.d.ts +4 -0
  6. package/dist/assert/index.js +27 -0
  7. package/dist/assert/match.d.ts +3 -0
  8. package/dist/assert/match.js +58 -0
  9. package/dist/assert/model.d.ts +73 -0
  10. package/dist/assert/model.js +8 -0
  11. package/dist/assert/schema.d.ts +34 -0
  12. package/dist/assert/schema.js +46 -0
  13. package/dist/assert/sla.d.ts +3 -0
  14. package/dist/assert/sla.js +8 -0
  15. package/dist/assert/soap-fault.d.ts +3 -0
  16. package/dist/assert/soap-fault.js +20 -0
  17. package/dist/assert/status.d.ts +3 -0
  18. package/dist/assert/status.js +14 -0
  19. package/dist/errors.d.ts +77 -0
  20. package/dist/errors.js +121 -0
  21. package/dist/fs.d.ts +35 -0
  22. package/dist/fs.js +64 -0
  23. package/dist/generate.d.ts +12 -0
  24. package/dist/generate.js +14 -0
  25. package/dist/grpc/browser.d.ts +11 -0
  26. package/dist/grpc/browser.js +9 -0
  27. package/dist/grpc/cache.d.ts +113 -0
  28. package/dist/grpc/cache.js +244 -0
  29. package/dist/grpc/call.d.ts +64 -0
  30. package/dist/grpc/call.js +72 -0
  31. package/dist/grpc/codec.d.ts +29 -0
  32. package/dist/grpc/codec.js +416 -0
  33. package/dist/grpc/command.d.ts +23 -0
  34. package/dist/grpc/command.js +91 -0
  35. package/dist/grpc/expand.d.ts +25 -0
  36. package/dist/grpc/expand.js +52 -0
  37. package/dist/grpc/framing.d.ts +28 -0
  38. package/dist/grpc/framing.js +61 -0
  39. package/dist/grpc/import.d.ts +47 -0
  40. package/dist/grpc/import.js +88 -0
  41. package/dist/grpc/model.d.ts +179 -0
  42. package/dist/grpc/model.js +91 -0
  43. package/dist/grpc/proto/describe.d.ts +92 -0
  44. package/dist/grpc/proto/describe.js +205 -0
  45. package/dist/grpc/proto/load.d.ts +35 -0
  46. package/dist/grpc/proto/load.js +112 -0
  47. package/dist/grpc/proto/sample.d.ts +21 -0
  48. package/dist/grpc/proto/sample.js +79 -0
  49. package/dist/grpc/proto/well-known.d.ts +42 -0
  50. package/dist/grpc/proto/well-known.js +143 -0
  51. package/dist/grpc/reconcile.d.ts +42 -0
  52. package/dist/grpc/reconcile.js +153 -0
  53. package/dist/grpc/reflection/client.d.ts +70 -0
  54. package/dist/grpc/reflection/client.js +197 -0
  55. package/dist/grpc/reflection/descriptors.d.ts +69 -0
  56. package/dist/grpc/reflection/descriptors.js +140 -0
  57. package/dist/grpc/reflection/proto.d.ts +33 -0
  58. package/dist/grpc/reflection/proto.js +144 -0
  59. package/dist/grpc/send.d.ts +132 -0
  60. package/dist/grpc/send.js +435 -0
  61. package/dist/grpc/shape.d.ts +29 -0
  62. package/dist/grpc/shape.js +36 -0
  63. package/dist/grpc/status.d.ts +21 -0
  64. package/dist/grpc/status.js +62 -0
  65. package/dist/grpc/target.d.ts +21 -0
  66. package/dist/grpc/target.js +66 -0
  67. package/dist/http/auth/apply.d.ts +37 -0
  68. package/dist/http/auth/apply.js +74 -0
  69. package/dist/http/auth/basic.d.ts +36 -0
  70. package/dist/http/auth/basic.js +69 -0
  71. package/dist/http/auth/md4.d.ts +13 -0
  72. package/dist/http/auth/md4.js +81 -0
  73. package/dist/http/auth/ntlm-transport.d.ts +61 -0
  74. package/dist/http/auth/ntlm-transport.js +97 -0
  75. package/dist/http/auth/ntlm.d.ts +190 -0
  76. package/dist/http/auth/ntlm.js +377 -0
  77. package/dist/http/client.d.ts +73 -0
  78. package/dist/http/client.js +403 -0
  79. package/dist/http/curl-flags.d.ts +15 -0
  80. package/dist/http/curl-flags.js +95 -0
  81. package/dist/http/curl.d.ts +94 -0
  82. package/dist/http/curl.js +245 -0
  83. package/dist/http/decompress.d.ts +7 -0
  84. package/dist/http/decompress.js +22 -0
  85. package/dist/http/errors.d.ts +22 -0
  86. package/dist/http/errors.js +144 -0
  87. package/dist/http/failed-request.d.ts +27 -0
  88. package/dist/http/failed-request.js +48 -0
  89. package/dist/http/headers.d.ts +15 -0
  90. package/dist/http/headers.js +50 -0
  91. package/dist/http/heredoc.d.ts +25 -0
  92. package/dist/http/heredoc.js +74 -0
  93. package/dist/http/proxy.d.ts +103 -0
  94. package/dist/http/proxy.js +168 -0
  95. package/dist/http/raw-capture.d.ts +23 -0
  96. package/dist/http/raw-capture.js +57 -0
  97. package/dist/http/timings.d.ts +79 -0
  98. package/dist/http/timings.js +212 -0
  99. package/dist/http/tls.d.ts +111 -0
  100. package/dist/http/tls.js +167 -0
  101. package/dist/http/types.d.ts +125 -0
  102. package/dist/http/types.js +6 -0
  103. package/dist/import-detect.d.ts +26 -0
  104. package/dist/import-detect.js +169 -0
  105. package/dist/import.d.ts +20 -0
  106. package/dist/import.js +163 -0
  107. package/dist/index.d.ts +272 -0
  108. package/dist/index.js +157 -0
  109. package/dist/json/cursor.d.ts +43 -0
  110. package/dist/json/cursor.js +168 -0
  111. package/dist/operations.d.ts +12 -0
  112. package/dist/operations.js +52 -0
  113. package/dist/project/attachments-cache.d.ts +80 -0
  114. package/dist/project/attachments-cache.js +186 -0
  115. package/dist/project/endpoints.d.ts +23 -0
  116. package/dist/project/endpoints.js +47 -0
  117. package/dist/project/environments.d.ts +68 -0
  118. package/dist/project/environments.js +124 -0
  119. package/dist/project/fs.d.ts +45 -0
  120. package/dist/project/fs.js +78 -0
  121. package/dist/project/history.d.ts +171 -0
  122. package/dist/project/history.js +179 -0
  123. package/dist/project/keystores.d.ts +24 -0
  124. package/dist/project/keystores.js +66 -0
  125. package/dist/project/load.d.ts +44 -0
  126. package/dist/project/load.js +634 -0
  127. package/dist/project/migrate.d.ts +27 -0
  128. package/dist/project/migrate.js +46 -0
  129. package/dist/project/model.d.ts +401 -0
  130. package/dist/project/model.js +126 -0
  131. package/dist/project/paths.d.ts +134 -0
  132. package/dist/project/paths.js +259 -0
  133. package/dist/project/preferences.d.ts +318 -0
  134. package/dist/project/preferences.js +239 -0
  135. package/dist/project/properties.d.ts +97 -0
  136. package/dist/project/properties.js +356 -0
  137. package/dist/project/save.d.ts +65 -0
  138. package/dist/project/save.js +295 -0
  139. package/dist/project/schema.d.ts +1329 -0
  140. package/dist/project/schema.js +737 -0
  141. package/dist/project/serialize.d.ts +42 -0
  142. package/dist/project/serialize.js +385 -0
  143. package/dist/project/wss-configs.d.ts +40 -0
  144. package/dist/project/wss-configs.js +142 -0
  145. package/dist/project/yaml.d.ts +17 -0
  146. package/dist/project/yaml.js +39 -0
  147. package/dist/redact/index.d.ts +77 -0
  148. package/dist/redact/index.js +328 -0
  149. package/dist/redact/literal.d.ts +12 -0
  150. package/dist/redact/literal.js +68 -0
  151. package/dist/rest/auth.d.ts +53 -0
  152. package/dist/rest/auth.js +80 -0
  153. package/dist/rest/body.d.ts +61 -0
  154. package/dist/rest/body.js +184 -0
  155. package/dist/rest/browser.d.ts +12 -0
  156. package/dist/rest/browser.js +11 -0
  157. package/dist/rest/cookies.d.ts +41 -0
  158. package/dist/rest/cookies.js +102 -0
  159. package/dist/rest/curl.d.ts +75 -0
  160. package/dist/rest/curl.js +417 -0
  161. package/dist/rest/expand.d.ts +35 -0
  162. package/dist/rest/expand.js +104 -0
  163. package/dist/rest/model.d.ts +247 -0
  164. package/dist/rest/model.js +118 -0
  165. package/dist/rest/oauth2.d.ts +118 -0
  166. package/dist/rest/oauth2.js +212 -0
  167. package/dist/rest/openapi/cache.d.ts +54 -0
  168. package/dist/rest/openapi/cache.js +128 -0
  169. package/dist/rest/openapi/import.d.ts +67 -0
  170. package/dist/rest/openapi/import.js +91 -0
  171. package/dist/rest/openapi/map.d.ts +102 -0
  172. package/dist/rest/openapi/map.js +477 -0
  173. package/dist/rest/openapi/model.d.ts +203 -0
  174. package/dist/rest/openapi/model.js +37 -0
  175. package/dist/rest/openapi/parse.d.ts +44 -0
  176. package/dist/rest/openapi/parse.js +1530 -0
  177. package/dist/rest/openapi/refs.d.ts +63 -0
  178. package/dist/rest/openapi/refs.js +258 -0
  179. package/dist/rest/openapi/sample.d.ts +68 -0
  180. package/dist/rest/openapi/sample.js +336 -0
  181. package/dist/rest/postman/import.d.ts +21 -0
  182. package/dist/rest/postman/import.js +47 -0
  183. package/dist/rest/postman/index.d.ts +7 -0
  184. package/dist/rest/postman/index.js +7 -0
  185. package/dist/rest/postman/map.d.ts +28 -0
  186. package/dist/rest/postman/map.js +427 -0
  187. package/dist/rest/postman/model.d.ts +118 -0
  188. package/dist/rest/postman/model.js +7 -0
  189. package/dist/rest/postman/parse.d.ts +29 -0
  190. package/dist/rest/postman/parse.js +518 -0
  191. package/dist/rest/response.d.ts +72 -0
  192. package/dist/rest/response.js +221 -0
  193. package/dist/rest/send.d.ts +102 -0
  194. package/dist/rest/send.js +148 -0
  195. package/dist/rest/url.d.ts +92 -0
  196. package/dist/rest/url.js +213 -0
  197. package/dist/run/effective-auth.d.ts +10 -0
  198. package/dist/run/effective-auth.js +19 -0
  199. package/dist/run/index.d.ts +8 -0
  200. package/dist/run/index.js +4 -0
  201. package/dist/run/prepare.d.ts +43 -0
  202. package/dist/run/prepare.js +280 -0
  203. package/dist/run/run.d.ts +53 -0
  204. package/dist/run/run.js +223 -0
  205. package/dist/run/secret-needs.d.ts +13 -0
  206. package/dist/run/secret-needs.js +125 -0
  207. package/dist/run/select.d.ts +34 -0
  208. package/dist/run/select.js +76 -0
  209. package/dist/secrets/env-names.d.ts +27 -0
  210. package/dist/secrets/env-names.js +40 -0
  211. package/dist/secrets/resolve.d.ts +58 -0
  212. package/dist/secrets/resolve.js +136 -0
  213. package/dist/send-options.d.ts +141 -0
  214. package/dist/send-options.js +228 -0
  215. package/dist/send.d.ts +53 -0
  216. package/dist/send.js +210 -0
  217. package/dist/soap/body-builder.d.ts +38 -0
  218. package/dist/soap/body-builder.js +250 -0
  219. package/dist/soap/build-problems.d.ts +12 -0
  220. package/dist/soap/build-problems.js +2 -0
  221. package/dist/soap/charset.d.ts +23 -0
  222. package/dist/soap/charset.js +47 -0
  223. package/dist/soap/envelope.d.ts +44 -0
  224. package/dist/soap/envelope.js +76 -0
  225. package/dist/soap/fault.d.ts +46 -0
  226. package/dist/soap/fault.js +129 -0
  227. package/dist/soap/form-request.d.ts +34 -0
  228. package/dist/soap/form-request.js +251 -0
  229. package/dist/soap/legacy-project/definition-fetcher.d.ts +21 -0
  230. package/dist/soap/legacy-project/definition-fetcher.js +43 -0
  231. package/dist/soap/legacy-project/format.d.ts +18 -0
  232. package/dist/soap/legacy-project/format.js +24 -0
  233. package/dist/soap/legacy-project/import.d.ts +21 -0
  234. package/dist/soap/legacy-project/import.js +46 -0
  235. package/dist/soap/legacy-project/index.d.ts +9 -0
  236. package/dist/soap/legacy-project/index.js +5 -0
  237. package/dist/soap/legacy-project/map.d.ts +91 -0
  238. package/dist/soap/legacy-project/map.js +290 -0
  239. package/dist/soap/legacy-project/model.d.ts +98 -0
  240. package/dist/soap/legacy-project/model.js +5 -0
  241. package/dist/soap/legacy-project/parse.d.ts +16 -0
  242. package/dist/soap/legacy-project/parse.js +325 -0
  243. package/dist/soap/mime/cid-scan.d.ts +36 -0
  244. package/dist/soap/mime/cid-scan.js +52 -0
  245. package/dist/soap/mime/inline-files.d.ts +39 -0
  246. package/dist/soap/mime/inline-files.js +71 -0
  247. package/dist/soap/mime/mtom.d.ts +74 -0
  248. package/dist/soap/mime/mtom.js +134 -0
  249. package/dist/soap/mime/multipart.d.ts +66 -0
  250. package/dist/soap/mime/multipart.js +329 -0
  251. package/dist/soap/mime/send-pipeline.d.ts +61 -0
  252. package/dist/soap/mime/send-pipeline.js +145 -0
  253. package/dist/soap/mime/swa.d.ts +45 -0
  254. package/dist/soap/mime/swa.js +62 -0
  255. package/dist/soap/mime/types.d.ts +69 -0
  256. package/dist/soap/mime/types.js +10 -0
  257. package/dist/soap/namespace-scope.d.ts +32 -0
  258. package/dist/soap/namespace-scope.js +85 -0
  259. package/dist/soap/prefixes.d.ts +24 -0
  260. package/dist/soap/prefixes.js +70 -0
  261. package/dist/soap/recreate.d.ts +28 -0
  262. package/dist/soap/recreate.js +168 -0
  263. package/dist/soap/request-builder.d.ts +63 -0
  264. package/dist/soap/request-builder.js +161 -0
  265. package/dist/soap/response-parser.d.ts +29 -0
  266. package/dist/soap/response-parser.js +71 -0
  267. package/dist/soap/soap-action.d.ts +31 -0
  268. package/dist/soap/soap-action.js +28 -0
  269. package/dist/soap/transforms.d.ts +52 -0
  270. package/dist/soap/transforms.js +164 -0
  271. package/dist/types.d.ts +307 -0
  272. package/dist/types.js +6 -0
  273. package/dist/validate/index.d.ts +61 -0
  274. package/dist/validate/index.js +72 -0
  275. package/dist/validate/schema-file-set.d.ts +51 -0
  276. package/dist/validate/schema-file-set.js +288 -0
  277. package/dist/validate/schema-validator.d.ts +53 -0
  278. package/dist/validate/schema-validator.js +251 -0
  279. package/dist/validate/soap-structure.d.ts +34 -0
  280. package/dist/validate/soap-structure.js +255 -0
  281. package/dist/validate/types.d.ts +47 -0
  282. package/dist/validate/types.js +8 -0
  283. package/dist/validate/wsi/assertions/helpers.d.ts +145 -0
  284. package/dist/validate/wsi/assertions/helpers.js +387 -0
  285. package/dist/validate/wsi/assertions/index.d.ts +44 -0
  286. package/dist/validate/wsi/assertions/index.js +77 -0
  287. package/dist/validate/wsi/assertions/message/helpers.d.ts +63 -0
  288. package/dist/validate/wsi/assertions/message/helpers.js +168 -0
  289. package/dist/validate/wsi/assertions/message/index.d.ts +39 -0
  290. package/dist/validate/wsi/assertions/message/index.js +62 -0
  291. package/dist/validate/wsi/assertions/message/r1001.d.ts +10 -0
  292. package/dist/validate/wsi/assertions/message/r1001.js +38 -0
  293. package/dist/validate/wsi/assertions/message/r1003.d.ts +14 -0
  294. package/dist/validate/wsi/assertions/message/r1003.js +45 -0
  295. package/dist/validate/wsi/assertions/message/r1005.d.ts +12 -0
  296. package/dist/validate/wsi/assertions/message/r1005.js +37 -0
  297. package/dist/validate/wsi/assertions/message/r1006.d.ts +10 -0
  298. package/dist/validate/wsi/assertions/message/r1006.js +49 -0
  299. package/dist/validate/wsi/assertions/message/r1007.d.ts +10 -0
  300. package/dist/validate/wsi/assertions/message/r1007.js +30 -0
  301. package/dist/validate/wsi/assertions/message/r1011.d.ts +10 -0
  302. package/dist/validate/wsi/assertions/message/r1011.js +33 -0
  303. package/dist/validate/wsi/assertions/message/r1012.d.ts +13 -0
  304. package/dist/validate/wsi/assertions/message/r1012.js +37 -0
  305. package/dist/validate/wsi/assertions/message/r1013.d.ts +9 -0
  306. package/dist/validate/wsi/assertions/message/r1013.js +42 -0
  307. package/dist/validate/wsi/assertions/message/r1014.d.ts +10 -0
  308. package/dist/validate/wsi/assertions/message/r1014.js +30 -0
  309. package/dist/validate/wsi/assertions/message/r1015.d.ts +12 -0
  310. package/dist/validate/wsi/assertions/message/r1015.js +36 -0
  311. package/dist/validate/wsi/assertions/message/r1017.d.ts +10 -0
  312. package/dist/validate/wsi/assertions/message/r1017.js +30 -0
  313. package/dist/validate/wsi/assertions/message/r1100.d.ts +10 -0
  314. package/dist/validate/wsi/assertions/message/r1100.js +39 -0
  315. package/dist/validate/wsi/assertions/message/r1101.d.ts +10 -0
  316. package/dist/validate/wsi/assertions/message/r1101.js +37 -0
  317. package/dist/validate/wsi/assertions/message/r1102.d.ts +10 -0
  318. package/dist/validate/wsi/assertions/message/r1102.js +41 -0
  319. package/dist/validate/wsi/assertions/message/r1103.d.ts +10 -0
  320. package/dist/validate/wsi/assertions/message/r1103.js +28 -0
  321. package/dist/validate/wsi/assertions/message/r1107.d.ts +10 -0
  322. package/dist/validate/wsi/assertions/message/r1107.js +38 -0
  323. package/dist/validate/wsi/assertions/message/r1109.d.ts +10 -0
  324. package/dist/validate/wsi/assertions/message/r1109.js +32 -0
  325. package/dist/validate/wsi/assertions/message/r1124.d.ts +10 -0
  326. package/dist/validate/wsi/assertions/message/r1124.js +31 -0
  327. package/dist/validate/wsi/assertions/message/r1132.d.ts +9 -0
  328. package/dist/validate/wsi/assertions/message/r1132.js +23 -0
  329. package/dist/validate/wsi/assertions/message/r1140.d.ts +10 -0
  330. package/dist/validate/wsi/assertions/message/r1140.js +42 -0
  331. package/dist/validate/wsi/assertions/message/r1141.d.ts +10 -0
  332. package/dist/validate/wsi/assertions/message/r1141.js +32 -0
  333. package/dist/validate/wsi/assertions/message/r2113.d.ts +11 -0
  334. package/dist/validate/wsi/assertions/message/r2113.js +33 -0
  335. package/dist/validate/wsi/assertions/message/r2211.d.ts +7 -0
  336. package/dist/validate/wsi/assertions/message/r2211.js +42 -0
  337. package/dist/validate/wsi/assertions/r2001.d.ts +15 -0
  338. package/dist/validate/wsi/assertions/r2001.js +47 -0
  339. package/dist/validate/wsi/assertions/r2002.d.ts +11 -0
  340. package/dist/validate/wsi/assertions/r2002.js +38 -0
  341. package/dist/validate/wsi/assertions/r2003.d.ts +7 -0
  342. package/dist/validate/wsi/assertions/r2003.js +32 -0
  343. package/dist/validate/wsi/assertions/r2005.d.ts +7 -0
  344. package/dist/validate/wsi/assertions/r2005.js +40 -0
  345. package/dist/validate/wsi/assertions/r2101.d.ts +14 -0
  346. package/dist/validate/wsi/assertions/r2101.js +65 -0
  347. package/dist/validate/wsi/assertions/r2102.d.ts +10 -0
  348. package/dist/validate/wsi/assertions/r2102.js +41 -0
  349. package/dist/validate/wsi/assertions/r2105.d.ts +8 -0
  350. package/dist/validate/wsi/assertions/r2105.js +39 -0
  351. package/dist/validate/wsi/assertions/r2110.d.ts +8 -0
  352. package/dist/validate/wsi/assertions/r2110.js +38 -0
  353. package/dist/validate/wsi/assertions/r2111.d.ts +6 -0
  354. package/dist/validate/wsi/assertions/r2111.js +30 -0
  355. package/dist/validate/wsi/assertions/r2112.d.ts +7 -0
  356. package/dist/validate/wsi/assertions/r2112.js +35 -0
  357. package/dist/validate/wsi/assertions/r2201.d.ts +7 -0
  358. package/dist/validate/wsi/assertions/r2201.js +28 -0
  359. package/dist/validate/wsi/assertions/r2203.d.ts +7 -0
  360. package/dist/validate/wsi/assertions/r2203.js +30 -0
  361. package/dist/validate/wsi/assertions/r2204.d.ts +6 -0
  362. package/dist/validate/wsi/assertions/r2204.js +29 -0
  363. package/dist/validate/wsi/assertions/r2205.d.ts +8 -0
  364. package/dist/validate/wsi/assertions/r2205.js +46 -0
  365. package/dist/validate/wsi/assertions/r2206.d.ts +7 -0
  366. package/dist/validate/wsi/assertions/r2206.js +36 -0
  367. package/dist/validate/wsi/assertions/r2209.d.ts +12 -0
  368. package/dist/validate/wsi/assertions/r2209.js +37 -0
  369. package/dist/validate/wsi/assertions/r2210.d.ts +7 -0
  370. package/dist/validate/wsi/assertions/r2210.js +30 -0
  371. package/dist/validate/wsi/assertions/r2303.d.ts +7 -0
  372. package/dist/validate/wsi/assertions/r2303.js +44 -0
  373. package/dist/validate/wsi/assertions/r2304.d.ts +6 -0
  374. package/dist/validate/wsi/assertions/r2304.js +32 -0
  375. package/dist/validate/wsi/assertions/r2401.d.ts +12 -0
  376. package/dist/validate/wsi/assertions/r2401.js +31 -0
  377. package/dist/validate/wsi/assertions/r2701.d.ts +7 -0
  378. package/dist/validate/wsi/assertions/r2701.js +28 -0
  379. package/dist/validate/wsi/assertions/r2702.d.ts +6 -0
  380. package/dist/validate/wsi/assertions/r2702.js +26 -0
  381. package/dist/validate/wsi/assertions/r2705.d.ts +11 -0
  382. package/dist/validate/wsi/assertions/r2705.js +31 -0
  383. package/dist/validate/wsi/assertions/r2706.d.ts +7 -0
  384. package/dist/validate/wsi/assertions/r2706.js +29 -0
  385. package/dist/validate/wsi/assertions/r2710.d.ts +13 -0
  386. package/dist/validate/wsi/assertions/r2710.js +37 -0
  387. package/dist/validate/wsi/assertions/r2716.d.ts +7 -0
  388. package/dist/validate/wsi/assertions/r2716.js +29 -0
  389. package/dist/validate/wsi/assertions/r2717.d.ts +9 -0
  390. package/dist/validate/wsi/assertions/r2717.js +31 -0
  391. package/dist/validate/wsi/assertions/r2718.d.ts +7 -0
  392. package/dist/validate/wsi/assertions/r2718.js +41 -0
  393. package/dist/validate/wsi/assertions/r2720.d.ts +7 -0
  394. package/dist/validate/wsi/assertions/r2720.js +29 -0
  395. package/dist/validate/wsi/assertions/r2721.d.ts +6 -0
  396. package/dist/validate/wsi/assertions/r2721.js +27 -0
  397. package/dist/validate/wsi/assertions/r2722.d.ts +6 -0
  398. package/dist/validate/wsi/assertions/r2722.js +29 -0
  399. package/dist/validate/wsi/assertions/r2801.d.ts +7 -0
  400. package/dist/validate/wsi/assertions/r2801.js +39 -0
  401. package/dist/validate/wsi/assertions/r2803.d.ts +7 -0
  402. package/dist/validate/wsi/assertions/r2803.js +29 -0
  403. package/dist/validate/wsi/docs.d.ts +29 -0
  404. package/dist/validate/wsi/docs.js +167 -0
  405. package/dist/validate/wsi/index.d.ts +16 -0
  406. package/dist/validate/wsi/index.js +11 -0
  407. package/dist/validate/wsi/report-html.d.ts +36 -0
  408. package/dist/validate/wsi/report-html.js +135 -0
  409. package/dist/validate/wsi/run-message.d.ts +50 -0
  410. package/dist/validate/wsi/run-message.js +190 -0
  411. package/dist/validate/wsi/run-wsdl.d.ts +48 -0
  412. package/dist/validate/wsi/run-wsdl.js +99 -0
  413. package/dist/validate/wsi/types.d.ts +173 -0
  414. package/dist/validate/wsi/types.js +17 -0
  415. package/dist/workspace/commit-message.d.ts +47 -0
  416. package/dist/workspace/commit-message.js +195 -0
  417. package/dist/workspace/environments.d.ts +79 -0
  418. package/dist/workspace/environments.js +115 -0
  419. package/dist/workspace/index.d.ts +28 -0
  420. package/dist/workspace/index.js +19 -0
  421. package/dist/workspace/load.d.ts +45 -0
  422. package/dist/workspace/load.js +155 -0
  423. package/dist/workspace/local-state.d.ts +37 -0
  424. package/dist/workspace/local-state.js +59 -0
  425. package/dist/workspace/migrate.d.ts +38 -0
  426. package/dist/workspace/migrate.js +50 -0
  427. package/dist/workspace/model.d.ts +86 -0
  428. package/dist/workspace/model.js +54 -0
  429. package/dist/workspace/paths.d.ts +64 -0
  430. package/dist/workspace/paths.js +97 -0
  431. package/dist/workspace/reidentify.d.ts +22 -0
  432. package/dist/workspace/reidentify.js +122 -0
  433. package/dist/workspace/save.d.ts +31 -0
  434. package/dist/workspace/save.js +84 -0
  435. package/dist/workspace/schema.d.ts +93 -0
  436. package/dist/workspace/schema.js +115 -0
  437. package/dist/workspace/serialize.d.ts +24 -0
  438. package/dist/workspace/serialize.js +60 -0
  439. package/dist/workspace/share.d.ts +52 -0
  440. package/dist/workspace/share.js +89 -0
  441. package/dist/ws/browser.d.ts +13 -0
  442. package/dist/ws/browser.js +11 -0
  443. package/dist/ws/call.d.ts +53 -0
  444. package/dist/ws/call.js +106 -0
  445. package/dist/ws/command.d.ts +19 -0
  446. package/dist/ws/command.js +28 -0
  447. package/dist/ws/expand.d.ts +38 -0
  448. package/dist/ws/expand.js +76 -0
  449. package/dist/ws/model.d.ts +191 -0
  450. package/dist/ws/model.js +83 -0
  451. package/dist/ws/pretty.d.ts +12 -0
  452. package/dist/ws/pretty.js +25 -0
  453. package/dist/ws/session.d.ts +50 -0
  454. package/dist/ws/session.js +333 -0
  455. package/dist/ws/shape.d.ts +18 -0
  456. package/dist/ws/shape.js +28 -0
  457. package/dist/ws/transcript.d.ts +14 -0
  458. package/dist/ws/transcript.js +29 -0
  459. package/dist/ws/url.d.ts +3 -0
  460. package/dist/ws/url.js +44 -0
  461. package/dist/wsa/headers.d.ts +78 -0
  462. package/dist/wsa/headers.js +244 -0
  463. package/dist/wsa/model.d.ts +66 -0
  464. package/dist/wsa/model.js +52 -0
  465. package/dist/wsa/policy-detect.d.ts +81 -0
  466. package/dist/wsa/policy-detect.js +245 -0
  467. package/dist/wsdl/cache-naming.d.ts +39 -0
  468. package/dist/wsdl/cache-naming.js +90 -0
  469. package/dist/wsdl/cache.d.ts +48 -0
  470. package/dist/wsdl/cache.js +141 -0
  471. package/dist/wsdl/docs-generator.d.ts +47 -0
  472. package/dist/wsdl/docs-generator.js +439 -0
  473. package/dist/wsdl/dom-utils.d.ts +15 -0
  474. package/dist/wsdl/dom-utils.js +50 -0
  475. package/dist/wsdl/export-definition.d.ts +38 -0
  476. package/dist/wsdl/export-definition.js +100 -0
  477. package/dist/wsdl/fetch.d.ts +13 -0
  478. package/dist/wsdl/fetch.js +60 -0
  479. package/dist/wsdl/merge.d.ts +17 -0
  480. package/dist/wsdl/merge.js +57 -0
  481. package/dist/wsdl/model.d.ts +176 -0
  482. package/dist/wsdl/model.js +17 -0
  483. package/dist/wsdl/parse-binding.d.ts +6 -0
  484. package/dist/wsdl/parse-binding.js +150 -0
  485. package/dist/wsdl/parse-wsdl.d.ts +47 -0
  486. package/dist/wsdl/parse-wsdl.js +161 -0
  487. package/dist/wsdl/qname.d.ts +28 -0
  488. package/dist/wsdl/qname.js +41 -0
  489. package/dist/wsdl/ref-policy.d.ts +54 -0
  490. package/dist/wsdl/ref-policy.js +87 -0
  491. package/dist/wsdl/resolver.d.ts +81 -0
  492. package/dist/wsdl/resolver.js +276 -0
  493. package/dist/wsdl/update-definition.d.ts +106 -0
  494. package/dist/wsdl/update-definition.js +314 -0
  495. package/dist/wss/apply.d.ts +40 -0
  496. package/dist/wss/apply.js +212 -0
  497. package/dist/wss/c14n-prefixes.d.ts +27 -0
  498. package/dist/wss/c14n-prefixes.js +95 -0
  499. package/dist/wss/incoming/decrypt.d.ts +35 -0
  500. package/dist/wss/incoming/decrypt.js +57 -0
  501. package/dist/wss/incoming/index.d.ts +56 -0
  502. package/dist/wss/incoming/index.js +189 -0
  503. package/dist/wss/incoming/verify.d.ts +74 -0
  504. package/dist/wss/incoming/verify.js +440 -0
  505. package/dist/wss/key-identifiers.d.ts +76 -0
  506. package/dist/wss/key-identifiers.js +139 -0
  507. package/dist/wss/keystore/certificate.d.ts +45 -0
  508. package/dist/wss/keystore/certificate.js +134 -0
  509. package/dist/wss/keystore/index.d.ts +50 -0
  510. package/dist/wss/keystore/index.js +80 -0
  511. package/dist/wss/keystore/model.d.ts +83 -0
  512. package/dist/wss/keystore/model.js +27 -0
  513. package/dist/wss/keystore/pem.d.ts +21 -0
  514. package/dist/wss/keystore/pem.js +140 -0
  515. package/dist/wss/keystore/pkcs12.d.ts +21 -0
  516. package/dist/wss/keystore/pkcs12.js +125 -0
  517. package/dist/wss/model.d.ts +160 -0
  518. package/dist/wss/model.js +37 -0
  519. package/dist/wss/outgoing/encryption.d.ts +76 -0
  520. package/dist/wss/outgoing/encryption.js +618 -0
  521. package/dist/wss/outgoing/signature.d.ts +73 -0
  522. package/dist/wss/outgoing/signature.js +239 -0
  523. package/dist/wss/outgoing/timestamp.d.ts +29 -0
  524. package/dist/wss/outgoing/timestamp.js +39 -0
  525. package/dist/wss/outgoing/username-token.d.ts +36 -0
  526. package/dist/wss/outgoing/username-token.js +68 -0
  527. package/dist/wss/security-header.d.ts +31 -0
  528. package/dist/wss/security-header.js +83 -0
  529. package/dist/xml/index.d.ts +7 -0
  530. package/dist/xml/index.js +7 -0
  531. package/dist/xml/namespaces.d.ts +36 -0
  532. package/dist/xml/namespaces.js +60 -0
  533. package/dist/xml/parse.d.ts +79 -0
  534. package/dist/xml/parse.js +109 -0
  535. package/dist/xml/positions.d.ts +26 -0
  536. package/dist/xml/positions.js +71 -0
  537. package/dist/xml/pretty.d.ts +37 -0
  538. package/dist/xml/pretty.js +137 -0
  539. package/dist/xml/serialize.d.ts +6 -0
  540. package/dist/xml/serialize.js +8 -0
  541. package/dist/xml/tolerant-tree.d.ts +56 -0
  542. package/dist/xml/tolerant-tree.js +134 -0
  543. package/dist/xpath/evaluate-async.d.ts +31 -0
  544. package/dist/xpath/evaluate-async.js +81 -0
  545. package/dist/xpath/evaluate.d.ts +98 -0
  546. package/dist/xpath/evaluate.js +340 -0
  547. package/dist/xpath/jsonpath.d.ts +40 -0
  548. package/dist/xpath/jsonpath.js +109 -0
  549. package/dist/xpath/namespaces.d.ts +29 -0
  550. package/dist/xpath/namespaces.js +101 -0
  551. package/dist/xpath/worker.d.ts +7 -0
  552. package/dist/xpath/worker.js +26 -0
  553. package/dist/xsd/builtins.d.ts +36 -0
  554. package/dist/xsd/builtins.js +108 -0
  555. package/dist/xsd/check-references.d.ts +25 -0
  556. package/dist/xsd/check-references.js +145 -0
  557. package/dist/xsd/form-edits.d.ts +57 -0
  558. package/dist/xsd/form-edits.js +153 -0
  559. package/dist/xsd/form-model.d.ts +153 -0
  560. package/dist/xsd/form-model.js +691 -0
  561. package/dist/xsd/locate.d.ts +42 -0
  562. package/dist/xsd/locate.js +249 -0
  563. package/dist/xsd/model.d.ts +249 -0
  564. package/dist/xsd/model.js +1 -0
  565. package/dist/xsd/parse-particles.d.ts +48 -0
  566. package/dist/xsd/parse-particles.js +320 -0
  567. package/dist/xsd/parse-schema.d.ts +21 -0
  568. package/dist/xsd/parse-schema.js +143 -0
  569. package/dist/xsd/resolve-content.d.ts +18 -0
  570. package/dist/xsd/resolve-content.js +242 -0
  571. package/dist/xsd/sample-generator.d.ts +51 -0
  572. package/dist/xsd/sample-generator.js +291 -0
  573. package/dist/xsd/sample-types.d.ts +21 -0
  574. package/dist/xsd/sample-types.js +69 -0
  575. package/dist/xsd/sample-values.d.ts +54 -0
  576. package/dist/xsd/sample-values.js +267 -0
  577. package/dist/xsd/schema-set.d.ts +51 -0
  578. package/dist/xsd/schema-set.js +203 -0
  579. package/dist/xsd/xml-scan.d.ts +64 -0
  580. package/dist/xsd/xml-scan.js +286 -0
  581. package/dist/xsd/xml-writer.d.ts +56 -0
  582. package/dist/xsd/xml-writer.js +103 -0
  583. package/package.json +69 -0
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Building the URL a REST request actually sends, and taking one apart again.
3
+ *
4
+ * Two jobs, both pure. {@link composeUrl} joins the API's base URL with the request's own URL,
5
+ * fills its `{name}` path parameters and appends its enabled query rows, percent-encoding to
6
+ * RFC 3986. {@link splitQuery} and {@link joinQuery} are the other direction: the editor keeps one
7
+ * URL field and one query table, and they have to be the same thing seen twice, so a value typed
8
+ * into either lands in the other without drifting.
9
+ *
10
+ * Nothing here throws for bad input. A missing path parameter or a property reference nothing
11
+ * expanded is a {@link UrlProblem} the caller surfaces before the send — a URL that is merely
12
+ * unfinished is the normal state of a request being written.
13
+ */
14
+ /** Characters RFC 3986 §2.3 calls unreserved, plus the sub-delims a value may keep. */
15
+ const UNRESERVED = /[A-Za-z0-9\-._~]/;
16
+ /** A `%XX` sequence that is already a valid escape, so encoding it again would double it. */
17
+ const VALID_ESCAPE = /^%[0-9A-Fa-f]{2}/;
18
+ /**
19
+ * Percent-encodes one value, leaving an existing valid `%XX` escape alone.
20
+ *
21
+ * The double-encoding guard is the whole point: a user who pastes `a%20b` means one space, and
22
+ * turning it into `a%2520b` would silently change the request. A lone `%` that is not a valid
23
+ * escape *is* encoded, because on the wire it has to be.
24
+ */
25
+ export function encodeValue(value, extraSafe = '') {
26
+ let out = '';
27
+ for (let i = 0; i < value.length;) {
28
+ const char = value[i];
29
+ if (char === '%' && VALID_ESCAPE.test(value.slice(i, i + 3))) {
30
+ out += value.slice(i, i + 3);
31
+ i += 3;
32
+ continue;
33
+ }
34
+ out += UNRESERVED.test(char) || extraSafe.includes(char) ? char : percentEncode(char, value, i);
35
+ i += char === '%' ? 1 : charLength(value, i);
36
+ }
37
+ return out;
38
+ }
39
+ /** How many UTF-16 code units the character at `index` occupies (a surrogate pair counts as two). */
40
+ function charLength(value, index) {
41
+ const code = value.codePointAt(index);
42
+ return code !== undefined && code > 0xffff ? 2 : 1;
43
+ }
44
+ /** The `%XX` (or multi-byte `%XX%XX…`) escape for the character at `index`. */
45
+ function percentEncode(char, value, index) {
46
+ const length = charLength(value, index);
47
+ return encodeURIComponent(value.slice(index, index + length)).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
48
+ }
49
+ /** Every `{name}` in `url`, in the order they appear, without duplicates. */
50
+ export function parseUrlParams(url) {
51
+ const names = [];
52
+ for (const match of url.matchAll(/\{([^{}/?#]+)\}/g)) {
53
+ const name = match[1];
54
+ if (!names.includes(name)) {
55
+ names.push(name);
56
+ }
57
+ }
58
+ return names;
59
+ }
60
+ /**
61
+ * Every `${…}` reference left in `text`, which means the caller did not expand it.
62
+ *
63
+ * An `indexOf` walk rather than `/\$\{([^}]*)\}/g`: with an unclosed `${` the regex rescans to
64
+ * the end of the string from every later start, which is O(n²) on pathological input. This finds
65
+ * each `${`, then the next `}`; if there is none, nothing after it can match either, so it stops.
66
+ */
67
+ function unexpandedProperties(text) {
68
+ const names = [];
69
+ let from = 0;
70
+ for (;;) {
71
+ const open = text.indexOf('${', from);
72
+ if (open === -1) {
73
+ return names;
74
+ }
75
+ const close = text.indexOf('}', open + 2);
76
+ if (close === -1) {
77
+ return names;
78
+ }
79
+ names.push(text.slice(open + 2, close));
80
+ from = close + 1;
81
+ }
82
+ }
83
+ /**
84
+ * Drops every trailing `/` from `text`.
85
+ *
86
+ * A character walk rather than `replace(/\/+$/, '')`: that pattern is anchored at the end but not
87
+ * at the start, so the engine retries it at each of the string's positions and the whole trim costs
88
+ * O(n²) — 80k slashes took five seconds. Nothing here is attacker-supplied (it is the user's own
89
+ * base URL), so this is a sharp edge rather than a vulnerability, but linear is free.
90
+ */
91
+ export function trimTrailingSlashes(text) {
92
+ let end = text.length;
93
+ while (end > 0 && text.charCodeAt(end - 1) === 0x2f) {
94
+ end -= 1;
95
+ }
96
+ return text.slice(0, end);
97
+ }
98
+ /** True when `url` already carries its own scheme, so the base URL plays no part. */
99
+ function isAbsolute(url) {
100
+ return /^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(url);
101
+ }
102
+ /**
103
+ * Joins a base URL with a request's relative URL.
104
+ *
105
+ * The base's own path is kept (`https://h/api/v3` + `/pet` is `https://h/api/v3/pet`), because an
106
+ * API's base URL usually *is* a path prefix; exactly one `/` ends up between the two however many
107
+ * either side brought. An empty relative URL sends the base itself.
108
+ */
109
+ export function joinBase(base, url) {
110
+ if (isAbsolute(url)) {
111
+ return url;
112
+ }
113
+ const trimmedBase = trimTrailingSlashes(base);
114
+ if (url === '') {
115
+ return trimmedBase;
116
+ }
117
+ const relative = url.replace(/^\/+/, '');
118
+ return trimmedBase === '' ? `/${relative}` : `${trimmedBase}/${relative}`;
119
+ }
120
+ /** Splits `url` into its part before `?`/`#` and the query rows after it. */
121
+ export function splitQuery(url) {
122
+ const hash = url.indexOf('#');
123
+ const fragment = hash === -1 ? '' : url.slice(hash);
124
+ const withoutFragment = hash === -1 ? url : url.slice(0, hash);
125
+ const mark = withoutFragment.indexOf('?');
126
+ if (mark === -1) {
127
+ return { path: url, query: [] };
128
+ }
129
+ const path = withoutFragment.slice(0, mark) + fragment;
130
+ const search = withoutFragment.slice(mark + 1);
131
+ const query = search
132
+ .split('&')
133
+ .filter((pair) => pair.length > 0)
134
+ .map((pair) => {
135
+ const equals = pair.indexOf('=');
136
+ const name = equals === -1 ? pair : pair.slice(0, equals);
137
+ const value = equals === -1 ? '' : pair.slice(equals + 1);
138
+ return { name, value, enabled: true };
139
+ });
140
+ return { path, query };
141
+ }
142
+ /**
143
+ * The inverse of {@link splitQuery}: puts enabled rows back onto `path` as its query string.
144
+ *
145
+ * Values are written exactly as given — this is the editor's URL field, not the wire — so
146
+ * `joinQuery(splitQuery(url))` returns `url` for any URL the editor could have produced.
147
+ */
148
+ export function joinQuery(path, query) {
149
+ const hash = path.indexOf('#');
150
+ const base = hash === -1 ? path : path.slice(0, hash);
151
+ const fragment = hash === -1 ? '' : path.slice(hash);
152
+ const search = query
153
+ .filter((row) => row.enabled)
154
+ .map((row) => (row.value === '' ? row.name : `${row.name}=${row.value}`))
155
+ .join('&');
156
+ return search === '' ? base + fragment : `${base}?${search}${fragment}`;
157
+ }
158
+ /**
159
+ * Builds the URL one send actually uses.
160
+ *
161
+ * Order of work: the request's URL wins over the base when it is absolute; `{name}` parameters are
162
+ * filled from the enabled rows of `pathParams`; the URL's own query string and the `query` table
163
+ * are concatenated, in that order, so a parameter typed into the field and one added in the table
164
+ * both survive; every value is encoded unless `encode` is off.
165
+ *
166
+ * @param base the API's effective base URL, already expanded
167
+ * @param url the request's URL, already expanded
168
+ * @param pathParams values for the URL's `{name}` placeholders
169
+ * @param query query rows to append
170
+ */
171
+ export function composeUrl(base, url, pathParams = [], query = [], options = {}) {
172
+ const encode = options.encode ?? true;
173
+ const problems = [];
174
+ const joined = joinBase(base, url);
175
+ const { path, query: inlineQuery } = splitQuery(joined);
176
+ const values = new Map();
177
+ for (const row of pathParams) {
178
+ if (row.enabled) {
179
+ values.set(row.name, row.value);
180
+ }
181
+ }
182
+ const filled = path.replace(/\{([^{}/?#]+)\}/g, (whole, name) => {
183
+ const value = values.get(name);
184
+ if (value === undefined || value === '') {
185
+ problems.push({ code: 'missing-path-param', name });
186
+ return whole;
187
+ }
188
+ // A path segment keeps sub-delims but never a `/`: a value containing one would invent a
189
+ // segment the request did not ask for.
190
+ return encode ? encodeValue(value, "!$&'()*+,;=:@") : value;
191
+ });
192
+ const rows = [...inlineQuery, ...query].filter((row) => row.enabled);
193
+ const search = rows
194
+ .map((row) => {
195
+ const name = encode ? encodeValue(row.name, '') : row.name;
196
+ const value = encode ? encodeValue(row.value, '') : row.value;
197
+ return value === '' ? name : `${name}=${value}`;
198
+ })
199
+ .join('&');
200
+ const composed = search === '' ? filled : appendSearch(filled, search);
201
+ for (const name of unexpandedProperties(composed)) {
202
+ problems.push({ code: 'unexpanded-property', name });
203
+ }
204
+ if (!isAbsolute(composed)) {
205
+ problems.push({ code: 'no-host', name: composed });
206
+ }
207
+ return { url: composed, problems };
208
+ }
209
+ /** Appends a query string to a URL that may already carry a fragment. */
210
+ function appendSearch(url, search) {
211
+ const hash = url.indexOf('#');
212
+ return hash === -1 ? `${url}?${search}` : `${url.slice(0, hash)}?${search}${url.slice(hash)}`;
213
+ }
@@ -0,0 +1,10 @@
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;
@@ -0,0 +1,19 @@
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
+ }
@@ -0,0 +1,8 @@
1
+ export { selectRequests } from './select.js';
2
+ export type { SelectedRequest } from './select.js';
3
+ export { prepareSend } from './prepare.js';
4
+ export type { PreparedSend, RunContext } from './prepare.js';
5
+ export { runRequests } from './run.js';
6
+ export type { RequestOutcome, RequestResult, RunOptions, RunResult, RunSummary } from './run.js';
7
+ export { secretNeedsOf } from './secret-needs.js';
8
+ export type { LocatedSecretNeed } from './secret-needs.js';
@@ -0,0 +1,4 @@
1
+ export { selectRequests } from './select.js';
2
+ export { prepareSend } from './prepare.js';
3
+ export { runRequests } from './run.js';
4
+ export { secretNeedsOf } from './secret-needs.js';
@@ -0,0 +1,43 @@
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>;
@@ -0,0 +1,280 @@
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
+ }
@@ -0,0 +1,53 @@
1
+ import type { AssertionResult } from '../assert/model.js';
2
+ import type { RunContext } from './prepare.js';
3
+ import type { SelectedRequest } from './select.js';
4
+ export type RequestOutcome = 'passed' | 'failed' | 'errored' | 'skipped';
5
+ /** What happened to one selected request. */
6
+ export interface RequestResult {
7
+ readonly path: string;
8
+ readonly group: string;
9
+ readonly name: string;
10
+ readonly protocol: 'soap' | 'rest';
11
+ readonly outcome: RequestOutcome;
12
+ readonly status?: number;
13
+ readonly durationMs?: number;
14
+ readonly assertions: readonly AssertionResult[];
15
+ /** Set when errored before or during the send. */
16
+ readonly error?: {
17
+ readonly code: string;
18
+ readonly message: string;
19
+ readonly details?: Readonly<Record<string, unknown>>;
20
+ };
21
+ /** A request with no assertions of its own; reported, and an error under `requireAssertions`. */
22
+ readonly unasserted: boolean;
23
+ /** Raw request and response text, kept for failed and errored requests only. NOT yet redacted. */
24
+ readonly exchange?: {
25
+ readonly request: string;
26
+ readonly response: string;
27
+ };
28
+ }
29
+ export interface RunSummary {
30
+ readonly total: number;
31
+ readonly passed: number;
32
+ readonly failed: number;
33
+ readonly errored: number;
34
+ readonly skipped: number;
35
+ readonly durationMs: number;
36
+ }
37
+ export interface RunResult {
38
+ readonly startedAt: string;
39
+ readonly environment?: string;
40
+ readonly summary: RunSummary;
41
+ readonly requests: readonly RequestResult[];
42
+ }
43
+ export interface RunOptions {
44
+ readonly bail?: boolean;
45
+ readonly defaultSlaMs?: number;
46
+ readonly requireAssertions?: boolean;
47
+ readonly onRequestDone?: (result: RequestResult) => void;
48
+ }
49
+ /**
50
+ * Sends `selected` in order and reports each. A request after an abort, or after the first
51
+ * failure under `bail`, is `skipped` and never sent.
52
+ */
53
+ export declare function runRequests(selected: readonly SelectedRequest[], context: RunContext, options?: RunOptions): Promise<RunResult>;