@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,223 @@
1
+ /**
2
+ * Sends each selected request, evaluates its assertions and summarises the run.
3
+ *
4
+ * One request's error never stops the run unless `bail` asks it to: a pipeline wants the whole
5
+ * picture, not the first thing that went wrong. An errored assertion outranks a failed one for the
6
+ * request's outcome, because "we could not tell" is a different problem from "it is wrong".
7
+ */
8
+ import { evaluateAssertions } from '../assert/index.js';
9
+ import { isWirebenchError } from '../errors.js';
10
+ import { definitionCacheDir } from '../project/paths.js';
11
+ import { sendRest } from '../rest/send.js';
12
+ import { sendSoapRequest } from '../send.js';
13
+ import { bindingContextFor, validateMessage } from '../validate/index.js';
14
+ import { summarizeWsa } from '../wsa/policy-detect.js';
15
+ import { parseWsdlBundle } from '../wsdl/merge.js';
16
+ import { readDefinitionCache } from '../wsdl/cache.js';
17
+ import { buildSchemaSet } from '../xsd/schema-set.js';
18
+ import { prepareSend } from './prepare.js';
19
+ /** Enough of each exchange to keep for a report: a failing response can be megabytes. */
20
+ const EXCHANGE_CAP_BYTES = 64 * 1024;
21
+ function capped(bytes) {
22
+ if (bytes.length <= EXCHANGE_CAP_BYTES) {
23
+ return new TextDecoder().decode(bytes);
24
+ }
25
+ return `${new TextDecoder().decode(bytes.subarray(0, EXCHANGE_CAP_BYTES))}\n… truncated`;
26
+ }
27
+ function identity(item) {
28
+ return { path: item.path, group: item.group, name: item.request.name, protocol: item.kind };
29
+ }
30
+ function erroredResult(item, error) {
31
+ return {
32
+ ...identity(item),
33
+ outcome: 'errored',
34
+ assertions: [],
35
+ error,
36
+ unasserted: item.request.assertions.length === 0,
37
+ };
38
+ }
39
+ function parseClark(clark) {
40
+ const match = /^\{([^}]*)\}(.*)$/.exec(clark);
41
+ return match === null
42
+ ? { namespaceUri: '', localName: clark }
43
+ : { namespaceUri: match[1] ?? '', localName: match[2] ?? '' };
44
+ }
45
+ /**
46
+ * Reads the interface's definition from `interfaces/<slug>/definition/`, as the app hydrates it
47
+ * with `prefer-cache` — minus the network fallback: a run never fetches a WSDL. An interface that
48
+ * does not cache its definition, or whose cache is absent or unreadable, has no contract here.
49
+ */
50
+ async function loadDefinition(projectDir, iface) {
51
+ if (!iface.cacheDefinition) {
52
+ return undefined;
53
+ }
54
+ try {
55
+ const bundle = await readDefinitionCache(definitionCacheDir(projectDir, iface.slug));
56
+ const definition = parseWsdlBundle(bundle);
57
+ return {
58
+ definition,
59
+ bundle,
60
+ schemaSet: buildSchemaSet(bundle),
61
+ defaultActionByOperation: summarizeWsa(definition).defaultActionByOperation,
62
+ };
63
+ }
64
+ catch {
65
+ return undefined;
66
+ }
67
+ }
68
+ function soapSubject(exchange, loaded, item) {
69
+ const fault = exchange.response?.fault;
70
+ const bodyText = exchange.response?.envelopeXml ?? new TextDecoder().decode(exchange.http.body);
71
+ const binding = loaded === undefined
72
+ ? undefined
73
+ : bindingContextFor(loaded.definition, { bindingName: parseClark(item.operation.bindingName), operationName: item.operation.name }, 'response');
74
+ const contentType = exchange.http.headers['content-type'];
75
+ return {
76
+ protocol: 'soap',
77
+ status: exchange.http.status,
78
+ durationMs: exchange.durationMs,
79
+ bodyText,
80
+ bodyKind: exchange.response?.isSoap === true ? 'xml' : 'other',
81
+ fault: {
82
+ present: fault !== undefined,
83
+ ...(fault !== undefined ? { summary: [fault.code, fault.reason].filter((s) => s.length > 0).join(' — ') } : {}),
84
+ },
85
+ ...(loaded !== undefined && binding !== undefined
86
+ ? {
87
+ validateContract: () => validateMessage({
88
+ xml: bodyText,
89
+ direction: 'response',
90
+ schemaSet: loaded.schemaSet,
91
+ bundle: loaded.bundle,
92
+ binding,
93
+ http: { ...(contentType !== undefined ? { contentType } : {}) },
94
+ }).then((r) => r.problems),
95
+ }
96
+ : {}),
97
+ };
98
+ }
99
+ function restSubject(exchange) {
100
+ return {
101
+ protocol: 'rest',
102
+ status: exchange.status,
103
+ durationMs: exchange.durationMs,
104
+ bodyText: exchange.text,
105
+ bodyKind: exchange.language === 'json' ? 'json' : exchange.language === 'xml' ? 'xml' : 'other',
106
+ };
107
+ }
108
+ function outcomeOf(assertions) {
109
+ if (assertions.some((a) => a.outcome === 'errored'))
110
+ return 'errored';
111
+ if (assertions.some((a) => a.outcome === 'failed'))
112
+ return 'failed';
113
+ return 'passed';
114
+ }
115
+ /** Runs one request; a throw anywhere on the way becomes an errored result, never a stopped run. */
116
+ async function runOne(item, context, options, definitionFor) {
117
+ try {
118
+ const loaded = item.kind === 'soap' ? await definitionFor(item.iface) : undefined;
119
+ const prepared = await prepareSend(item, {
120
+ ...context,
121
+ ...(loaded !== undefined
122
+ ? {
123
+ defaultWsaActionFor: (s) => loaded.defaultActionByOperation[`${s.operation.bindingName}|${s.operation.name}`] ?? '',
124
+ }
125
+ : {}),
126
+ });
127
+ let subject;
128
+ let raw;
129
+ if (prepared.kind === 'soap' && item.kind === 'soap') {
130
+ const exchange = await sendSoapRequest(prepared.input, { scopes: prepared.scopes });
131
+ subject = soapSubject(exchange, loaded, item);
132
+ raw = exchange.http;
133
+ }
134
+ else if (prepared.kind === 'rest') {
135
+ const exchange = await sendRest(prepared.input);
136
+ subject = restSubject(exchange);
137
+ raw = exchange;
138
+ }
139
+ else {
140
+ throw new Error('prepareSend returned a send of the wrong protocol');
141
+ }
142
+ const own = item.request.assertions;
143
+ const withDefault = options.defaultSlaMs !== undefined && !own.some((a) => a.type === 'sla')
144
+ ? [...own, { type: 'sla', maxMs: options.defaultSlaMs }]
145
+ : own;
146
+ const assertions = await evaluateAssertions(subject, withDefault);
147
+ const outcome = outcomeOf(assertions);
148
+ return {
149
+ ...identity(item),
150
+ outcome,
151
+ status: subject.status,
152
+ durationMs: subject.durationMs,
153
+ assertions,
154
+ unasserted: own.length === 0,
155
+ ...(outcome !== 'passed'
156
+ ? { exchange: { request: capped(raw.rawRequest), response: capped(raw.rawResponse) } }
157
+ : {}),
158
+ };
159
+ }
160
+ catch (e) {
161
+ return erroredResult(item, {
162
+ code: isWirebenchError(e) ? e.code : 'internal-error',
163
+ message: e instanceof Error ? e.message : String(e),
164
+ ...(isWirebenchError(e) && e.details !== undefined ? { details: e.details } : {}),
165
+ });
166
+ }
167
+ }
168
+ /**
169
+ * Sends `selected` in order and reports each. A request after an abort, or after the first
170
+ * failure under `bail`, is `skipped` and never sent.
171
+ */
172
+ export async function runRequests(selected, context, options = {}) {
173
+ const started = performance.now();
174
+ const startedAt = new Date().toISOString();
175
+ const definitions = new Map();
176
+ const definitionFor = (iface) => {
177
+ let loaded = definitions.get(iface.id);
178
+ if (loaded === undefined) {
179
+ loaded = loadDefinition(context.projectDir, iface);
180
+ definitions.set(iface.id, loaded);
181
+ }
182
+ return loaded;
183
+ };
184
+ const results = [];
185
+ let stopped = false;
186
+ for (const item of selected) {
187
+ let result;
188
+ if (stopped || context.signal?.aborted === true) {
189
+ result = {
190
+ ...identity(item),
191
+ outcome: 'skipped',
192
+ assertions: [],
193
+ unasserted: item.request.assertions.length === 0,
194
+ };
195
+ }
196
+ else if (item.request.assertions.length === 0 && options.requireAssertions === true) {
197
+ result = erroredResult(item, { code: 'assertions-required', message: 'This request has no assertions.' });
198
+ }
199
+ else {
200
+ result = await runOne(item, context, options, definitionFor);
201
+ }
202
+ results.push(result);
203
+ options.onRequestDone?.(result);
204
+ if (options.bail === true && (result.outcome === 'failed' || result.outcome === 'errored')) {
205
+ stopped = true;
206
+ }
207
+ }
208
+ const count = (outcome) => results.filter((r) => r.outcome === outcome).length;
209
+ const environment = context.project.environments.find((e) => e.id === context.environmentId)?.name;
210
+ return {
211
+ startedAt,
212
+ ...(environment !== undefined ? { environment } : {}),
213
+ summary: {
214
+ total: results.length,
215
+ passed: count('passed'),
216
+ failed: count('failed'),
217
+ errored: count('errored'),
218
+ skipped: count('skipped'),
219
+ durationMs: Math.round(performance.now() - started),
220
+ },
221
+ requests: results,
222
+ };
223
+ }
@@ -0,0 +1,13 @@
1
+ import type { Project } from '../project/model.js';
2
+ import type { SecretNeed } from '../secrets/env-names.js';
3
+ import type { SelectedRequest } from './select.js';
4
+ /** One secret a run needs, and which requests need it. */
5
+ export interface LocatedSecretNeed extends SecretNeed {
6
+ /** Display paths of the requests that need it. */
7
+ readonly usedBy: readonly string[];
8
+ }
9
+ /**
10
+ * The secrets `selected` needs, one entry per ref in first-use order, each with every request
11
+ * that uses it. The first declaration of a ref supplies its name and purpose.
12
+ */
13
+ export declare function secretNeedsOf(selected: readonly SelectedRequest[], project: Project): LocatedSecretNeed[];
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Every secret a selection of requests will ask for, found before anything is sent, so a pipeline
3
+ * can be told which variables to set (`wirebench secrets list`) and a run knows which names to
4
+ * read. It walks the same sources `prepareSend` resolves: effective auth, the request's keystore,
5
+ * and the WS-Security configurations it selects, with the keystores those lead to.
6
+ */
7
+ import { toKeystoreDef } from '../project/keystores.js';
8
+ import { toWssIncomingConfig, toWssOutgoingConfig } from '../project/wss-configs.js';
9
+ import { secretNeedsOfAuth } from '../secrets/env-names.js';
10
+ import { restEffectiveAuth, soapEffectiveAuth } from './effective-auth.js';
11
+ const present = (id) => id !== undefined && id.length > 0;
12
+ /** A keystore's password, when the registry entry has one; an unreadable entry needs nothing here. */
13
+ function keystoreNeeds(project, keystoreId) {
14
+ if (!present(keystoreId)) {
15
+ return [];
16
+ }
17
+ const ref = project.wss.keystores.find((candidate) => candidate.id === keystoreId);
18
+ if (ref === undefined) {
19
+ return [];
20
+ }
21
+ try {
22
+ const def = toKeystoreDef(ref);
23
+ return present(def.passwordSecretRef)
24
+ ? [
25
+ {
26
+ ref: def.passwordSecretRef,
27
+ ...(def.passwordEnv !== undefined ? { envName: def.passwordEnv } : {}),
28
+ purpose: `keystore password for "${def.name}"`,
29
+ },
30
+ ]
31
+ : [];
32
+ }
33
+ catch {
34
+ // `prepareSend` refuses such a request with its own error; it needs no secret before then.
35
+ return [];
36
+ }
37
+ }
38
+ /** Parses a WS-Security configuration by id; missing or unreadable is prepare's error, not a need. */
39
+ function findConfig(refs, id, convert) {
40
+ if (!present(id)) {
41
+ return undefined;
42
+ }
43
+ const ref = refs.find((candidate) => candidate.id === id);
44
+ if (ref === undefined) {
45
+ return undefined;
46
+ }
47
+ try {
48
+ return convert(ref);
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ }
54
+ /** WS-Security passwords carry no `…Env` name: they resolve through their ref-derived variable. */
55
+ function outgoingNeeds(project, config) {
56
+ const needs = [];
57
+ for (const entry of config.entries) {
58
+ if (entry.kind === 'username-token') {
59
+ const ref = entry.passwordRef ?? config.defaultPasswordRef;
60
+ if (entry.passwordType !== 'none' && present(ref)) {
61
+ needs.push({ ref, purpose: `WS-Security password for "${entry.username}"` });
62
+ }
63
+ }
64
+ else if (entry.kind === 'signature') {
65
+ needs.push(...keystoreNeeds(project, entry.keystoreRef));
66
+ if (present(entry.keyPasswordRef)) {
67
+ needs.push({ ref: entry.keyPasswordRef, purpose: `WS-Security signing key password ("${config.name}")` });
68
+ }
69
+ }
70
+ else if (entry.kind === 'encryption') {
71
+ needs.push(...keystoreNeeds(project, entry.keystoreRef));
72
+ }
73
+ }
74
+ return needs;
75
+ }
76
+ function incomingNeeds(project, config) {
77
+ return [
78
+ ...keystoreNeeds(project, config.decryptKeystoreRef),
79
+ ...(present(config.decryptKeyPasswordRef)
80
+ ? [{ ref: config.decryptKeyPasswordRef, purpose: `WS-Security decryption key password ("${config.name}")` }]
81
+ : []),
82
+ ...keystoreNeeds(project, config.signatureKeystoreRef),
83
+ ];
84
+ }
85
+ function needsOf(selected, project) {
86
+ if (selected.kind === 'rest') {
87
+ return [
88
+ ...secretNeedsOfAuth(restEffectiveAuth(selected)),
89
+ ...keystoreNeeds(project, selected.request.settings.sslKeystoreRef),
90
+ ];
91
+ }
92
+ const { request } = selected;
93
+ const outgoing = findConfig(project.wss.outgoing, request.wssOutgoingRef, toWssOutgoingConfig);
94
+ const incoming = findConfig(project.wss.incoming, request.wssIncomingRef, toWssIncomingConfig);
95
+ return [
96
+ ...secretNeedsOfAuth(soapEffectiveAuth(selected)),
97
+ ...keystoreNeeds(project, request.properties.sslKeystoreRef),
98
+ ...(outgoing !== undefined ? outgoingNeeds(project, outgoing) : []),
99
+ ...(incoming !== undefined ? incomingNeeds(project, incoming) : []),
100
+ ];
101
+ }
102
+ /**
103
+ * The secrets `selected` needs, one entry per ref in first-use order, each with every request
104
+ * that uses it. The first declaration of a ref supplies its name and purpose.
105
+ */
106
+ export function secretNeedsOf(selected, project) {
107
+ const byRef = new Map();
108
+ for (const item of selected) {
109
+ for (const need of needsOf(item, project)) {
110
+ const known = byRef.get(need.ref);
111
+ if (known === undefined) {
112
+ byRef.set(need.ref, { need, usedBy: [item.path] });
113
+ }
114
+ else {
115
+ if (!known.usedBy.includes(item.path)) {
116
+ known.usedBy.push(item.path);
117
+ }
118
+ if (known.need.envName === undefined && need.envName !== undefined) {
119
+ known.need = { ...known.need, envName: need.envName };
120
+ }
121
+ }
122
+ }
123
+ }
124
+ return [...byRef.values()].map(({ need, usedBy }) => ({ ...need, usedBy }));
125
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Which requests a run covers, and in what order: the order the explorer shows, so a report reads
3
+ * like the project. Interfaces and APIs share one ordering space (see `Project.apis`).
4
+ */
5
+ import type { Interface, OperationDef, Project, SoapRequestDef } from '../project/model.js';
6
+ import type { RestApi, RestFolder, RestRequestDef } from '../rest/model.js';
7
+ /** One saved request selected for a run, with enough context to send and report it. */
8
+ export type SelectedRequest = {
9
+ readonly kind: 'soap';
10
+ readonly path: string;
11
+ readonly group: string;
12
+ readonly iface: Interface;
13
+ readonly operation: OperationDef;
14
+ readonly request: SoapRequestDef;
15
+ } | {
16
+ readonly kind: 'rest';
17
+ readonly path: string;
18
+ readonly group: string;
19
+ readonly api: RestApi;
20
+ readonly chain: readonly RestFolder[];
21
+ readonly request: RestRequestDef;
22
+ };
23
+ /**
24
+ * Resolves `selectors` (display paths or on-disk paths, matched at a `/` boundary) against the
25
+ * project's requests, in explorer order. An empty `selectors` list selects everything. A gRPC or
26
+ * WebSocket API is skipped: neither is runnable from the command line in this slice, and there is
27
+ * no per-selector reason to report — a selector naming one simply matches nothing and surfaces
28
+ * through `unmatched`, same as a typo would. `unmatched` lists every selector that covered no
29
+ * request, so the runner can refuse the run rather than quietly test nothing.
30
+ */
31
+ export declare function selectRequests(project: Project, selectors: readonly string[]): {
32
+ selected: SelectedRequest[];
33
+ unmatched: string[];
34
+ };
@@ -0,0 +1,76 @@
1
+ const byOrder = (a, b) => a.order - b.order || a.name.localeCompare(b.name);
2
+ function walkRest(api, chain, node, group, diskDir, out) {
3
+ const children = [
4
+ ...node.requests.map((request) => ({
5
+ tag: 'request',
6
+ order: request.order,
7
+ name: request.name,
8
+ request,
9
+ })),
10
+ ...node.folders.map((folder) => ({ tag: 'folder', order: folder.order, name: folder.name, folder })),
11
+ ].sort(byOrder);
12
+ for (const child of children) {
13
+ if (child.tag === 'request') {
14
+ if (child.request.orphaned !== true) {
15
+ out.push({
16
+ item: { kind: 'rest', path: `${group}/${child.request.name}`, group, api, chain, request: child.request },
17
+ diskPath: `${diskDir}/${child.request.slug}`,
18
+ });
19
+ }
20
+ }
21
+ else {
22
+ walkRest(api, [...chain, child.folder], child.folder, `${group}/${child.folder.name}`, `${diskDir}/${child.folder.slug}`, out);
23
+ }
24
+ }
25
+ }
26
+ function candidates(project) {
27
+ const out = [];
28
+ for (const container of [...project.interfaces, ...project.apis].sort(byOrder)) {
29
+ if (container.kind === 'rest') {
30
+ walkRest(container, [], container, container.name, `apis/${container.slug}/requests`, out);
31
+ continue;
32
+ }
33
+ for (const operation of [...container.operations].sort(byOrder)) {
34
+ const group = `${container.name}/${operation.name}`;
35
+ for (const request of [...operation.requests].sort(byOrder)) {
36
+ if (request.orphaned !== true) {
37
+ out.push({
38
+ item: { kind: 'soap', path: `${group}/${request.name}`, group, iface: container, operation, request },
39
+ diskPath: `interfaces/${container.slug}/operations/${operation.slug}/${request.slug}`,
40
+ });
41
+ }
42
+ }
43
+ }
44
+ }
45
+ return out;
46
+ }
47
+ function normalise(selector) {
48
+ return selector
49
+ .replace(/\\/g, '/')
50
+ .replace(/^\.\//, '')
51
+ .replace(/\.request\.yaml$/, '')
52
+ .replace(/\/$/, '');
53
+ }
54
+ const covers = (selector, candidate) => candidate === selector || candidate.startsWith(`${selector}/`);
55
+ /**
56
+ * Resolves `selectors` (display paths or on-disk paths, matched at a `/` boundary) against the
57
+ * project's requests, in explorer order. An empty `selectors` list selects everything. A gRPC or
58
+ * WebSocket API is skipped: neither is runnable from the command line in this slice, and there is
59
+ * no per-selector reason to report — a selector naming one simply matches nothing and surfaces
60
+ * through `unmatched`, same as a typo would. `unmatched` lists every selector that covered no
61
+ * request, so the runner can refuse the run rather than quietly test nothing.
62
+ */
63
+ export function selectRequests(project, selectors) {
64
+ const all = candidates(project);
65
+ if (selectors.length === 0) {
66
+ return { selected: all.map((c) => c.item), unmatched: [] };
67
+ }
68
+ const matches = (selector, c) => {
69
+ const s = normalise(selector);
70
+ return covers(s, c.item.path) || covers(s, c.diskPath);
71
+ };
72
+ return {
73
+ selected: all.filter((c) => selectors.some((s) => matches(s, c))).map((c) => c.item),
74
+ unmatched: selectors.filter((s) => !all.some((c) => matches(s, c))),
75
+ };
76
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * What secrets a config needs, and what environment variable a run reads each one from.
3
+ *
4
+ * A `secretRef` is opaque by design (see `resolve.ts`): it identifies an entry in the OS-keychain-
5
+ * backed secret store, not a name a human would choose for a CI variable. A file may now declare a
6
+ * friendlier `…Env` name beside the ref — not a secret, safe to commit — and this module is where
7
+ * that name and the ref both turn into the environment variables a headless run is allowed to read.
8
+ */
9
+ import type { AuthConfig, EndpointAuth } from '../project/model.js';
10
+ /** The prefix every secret-carrying environment variable name starts with. */
11
+ export declare const SECRET_ENV_PREFIX = "WIREBENCH_SECRET_";
12
+ /** One secret a run must be given, and the friendlier name the file declares for it, if any. */
13
+ export interface SecretNeed {
14
+ /** The opaque reference in the file. */
15
+ readonly ref: string;
16
+ /** The declared name, when the file carries one. */
17
+ readonly envName?: string;
18
+ /** What the secret is for, for `secrets list`: e.g. `basic password for "svc-billing"`. */
19
+ readonly purpose: string;
20
+ }
21
+ /** Every secret `auth` would resolve at send time. */
22
+ export declare function secretNeedsOfAuth(auth: AuthConfig | EndpointAuth | undefined): SecretNeed[];
23
+ /**
24
+ * The variables a host reads for one secret, in order: the declared name, then the reference
25
+ * itself. The reference form exists so a project nobody has annotated can still run in CI.
26
+ */
27
+ export declare function envVariablesFor(secret: Pick<SecretNeed, 'ref' | 'envName'>): string[];
@@ -0,0 +1,40 @@
1
+ /**
2
+ * What secrets a config needs, and what environment variable a run reads each one from.
3
+ *
4
+ * A `secretRef` is opaque by design (see `resolve.ts`): it identifies an entry in the OS-keychain-
5
+ * backed secret store, not a name a human would choose for a CI variable. A file may now declare a
6
+ * friendlier `…Env` name beside the ref — not a secret, safe to commit — and this module is where
7
+ * that name and the ref both turn into the environment variables a headless run is allowed to read.
8
+ */
9
+ /** The prefix every secret-carrying environment variable name starts with. */
10
+ export const SECRET_ENV_PREFIX = 'WIREBENCH_SECRET_';
11
+ function need(ref, envName, purpose) {
12
+ return ref === undefined || ref.length === 0 ? [] : [{ ref, ...(envName !== undefined ? { envName } : {}), purpose }];
13
+ }
14
+ /** Every secret `auth` would resolve at send time. */
15
+ export function secretNeedsOfAuth(auth) {
16
+ if (auth === undefined) {
17
+ return [];
18
+ }
19
+ switch (auth.type) {
20
+ case 'basic':
21
+ case 'ntlm':
22
+ return need(auth.passwordRef, auth.passwordEnv, `${auth.type} password for "${auth.username ?? ''}"`);
23
+ case 'bearer':
24
+ return need(auth.tokenRef, auth.tokenEnv, 'bearer token');
25
+ case 'api-key':
26
+ return need(auth.valueRef, auth.valueEnv, `API key "${auth.name}"`);
27
+ case 'oauth2':
28
+ return need(auth.clientSecretRef, auth.clientSecretEnv, `OAuth2 client secret for "${auth.clientId}"`);
29
+ default:
30
+ return [];
31
+ }
32
+ }
33
+ /**
34
+ * The variables a host reads for one secret, in order: the declared name, then the reference
35
+ * itself. The reference form exists so a project nobody has annotated can still run in CI.
36
+ */
37
+ export function envVariablesFor(secret) {
38
+ const byRef = `${SECRET_ENV_PREFIX}${secret.ref.toUpperCase().replace(/[^A-Z0-9]/g, '_')}`;
39
+ return secret.envName !== undefined ? [`${SECRET_ENV_PREFIX}${secret.envName}`, byRef] : [byRef];
40
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Resolves an `EndpointAuth` (which only ever carries a `passwordRef`) into the plaintext shape
3
+ * the engine's `importDefinition`/send path expects. Kept pure — the secret getter is injected —
4
+ * so it needs no Electron and is trivially testable without a real `SecretStore`.
5
+ */
6
+ import type { AuthConfig, EndpointAuth } from '../project/model.js';
7
+ import type { SendAuth } from '../types.js';
8
+ /** Turns a `secretRef` into its value. The one seam every host fills in: a keychain, or `process.env`. */
9
+ export type GetSecret = (ref: string) => Promise<string | undefined>;
10
+ /**
11
+ * The message for a `secret-missing` error: in a shared workspace, secret refs travel with the
12
+ * project but values stay in each member's local keychain-backed store, so a teammate who joins
13
+ * sees a ref with nothing behind it on their machine. Named by username when one is known,
14
+ * otherwise a generic fallback — either way it tells the user where to act instead of merely
15
+ * naming the dangling ref.
16
+ */
17
+ export declare function secretMissingMessage(username: string | undefined): string;
18
+ /** The engine-facing shape: a resolved password in place of a `passwordRef`. */
19
+ export interface ResolvedAuth {
20
+ readonly type: EndpointAuth['type'];
21
+ readonly username?: string;
22
+ readonly password?: string;
23
+ readonly domain?: string;
24
+ readonly workstation?: string;
25
+ readonly preemptive?: boolean;
26
+ }
27
+ /**
28
+ * Looks up `auth.passwordRef` via `getSecret` and returns the resolved auth. Returns `undefined`
29
+ * when `auth` itself is `undefined` (nothing to resolve). Throws a `secret-missing`
30
+ * `WirebenchError` when a `passwordRef` is set but the store has no value for it — a dangling
31
+ * reference must fail loudly rather than silently sending no credentials.
32
+ */
33
+ export declare function resolveEndpointAuth(auth: EndpointAuth | undefined, getSecret: GetSecret): Promise<ResolvedAuth | undefined>;
34
+ /**
35
+ * Converts resolved endpoint credentials into the engine's `SendAuth`, or `undefined` when there
36
+ * is nothing to send (no auth configured, `type: 'none'`, or an incomplete pair). Basic defaults
37
+ * to preemptive; a non-preemptive send waits for the 401 challenge. Shared by every host so a
38
+ * SOAP request authenticates the same way from the app and from a pipeline.
39
+ */
40
+ export declare function toSendAuth(auth?: ResolvedAuth): SendAuth | undefined;
41
+ /**
42
+ * Resolves any {@link AuthConfig} into the engine's `SendAuth` — the shape that carries values
43
+ * rather than references.
44
+ *
45
+ * The token-bearing schemes are resolved here; OAuth2 is not, because obtaining a token is a
46
+ * network exchange with its own cache and its own browser flow. The caller passes `accessToken`
47
+ * for an OAuth2 configuration, having got it from `oauth2.ts`.
48
+ *
49
+ * `inherit` and `none` resolve to no credentials at all: `inherit` should already have been
50
+ * resolved by `resolveAuthChain` before this is called, and reaching here means nothing in the
51
+ * chain configured anything.
52
+ *
53
+ * @throws WirebenchError `secret-missing` when a reference is set but the store has no value for
54
+ * it — a dangling reference must fail loudly rather than quietly sending no credentials.
55
+ */
56
+ export declare function resolveAuthConfig(auth: AuthConfig | undefined, getSecret: GetSecret, options?: {
57
+ readonly accessToken?: string;
58
+ }): Promise<SendAuth | undefined>;