@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,314 @@
1
+ /**
2
+ * "Update Definition": re-import a WSDL and reconcile an existing
3
+ * project against it.
4
+ *
5
+ * The two halves are deliberately separate. {@link planUpdate} is a pure diff of
6
+ * two {@link ImportResult}s — what a preview dialog shows before the user commits
7
+ * to anything. {@link applyUpdate} then rewrites the project model per the
8
+ * options the user ticked, and is equally pure: it returns the next `Project`
9
+ * plus the relative paths of the `.xml.bak` backups the save layer should write
10
+ * (see `project/save.ts`'s `backups` option), and never touches a file system
11
+ * itself.
12
+ *
13
+ * Nothing is ever deleted. Requests belonging to an operation the new definition
14
+ * no longer has are kept and flagged {@link RequestDef.orphaned} rather than
15
+ * removed — the user decides whether a vanished operation means "clean
16
+ * this up" or "the new WSDL is wrong".
17
+ */
18
+ import { generateRequest } from '../generate.js';
19
+ import { createRequest, generateId } from '../project/model.js';
20
+ import { INTERFACES_DIR, OPERATIONS_DIR, uniqueSlug } from '../project/paths.js';
21
+ import { recreateRequest } from '../soap/recreate.js';
22
+ import { generateElement, generateType } from '../xsd/sample-generator.js';
23
+ import { findBinding, findPortType } from './model.js';
24
+ import { qnameToString } from './qname.js';
25
+ /**
26
+ * Generation options the diff compares envelopes under. Optional content is
27
+ * deliberately *included*: an added `minOccurs="0"` element is a real schema
28
+ * change the user must be told about, even though the default sample envelope
29
+ * would not show it.
30
+ */
31
+ const DIFF_GENERATE_OPTIONS = { includeOptional: true, typeComments: false, sampleValues: false };
32
+ /** An operation's identity across two definitions: its binding's expanded name plus its own name. */
33
+ function operationKey(ref) {
34
+ return `${qnameToString(ref.bindingName)}#${ref.operationName}`;
35
+ }
36
+ function refOf(summary) {
37
+ return { bindingName: summary.bindingName, operationName: summary.operationName };
38
+ }
39
+ /** Every `soap:address` the definition exposes, deduplicated, in document order. */
40
+ function addressesOf(summary) {
41
+ const seen = new Set();
42
+ for (const operation of summary) {
43
+ for (const port of operation.ports) {
44
+ if (port.address !== undefined) {
45
+ seen.add(port.address);
46
+ }
47
+ }
48
+ }
49
+ return [...seen];
50
+ }
51
+ /** The generated sample envelope for one operation, or `undefined` when it cannot be built. */
52
+ function envelopeOf(result, ref) {
53
+ try {
54
+ return generateRequest(result, ref, DIFF_GENERATE_OPTIONS).envelopeXml;
55
+ }
56
+ catch {
57
+ return undefined;
58
+ }
59
+ }
60
+ /**
61
+ * A structural fingerprint of one operation's output message: every part, with
62
+ * the sample fragment its element/type would generate. There is no response
63
+ * builder in the engine, so this stands in for "the response shape changed".
64
+ */
65
+ function outputSignature(definition, schemaSet, ref) {
66
+ const binding = findBinding(definition, ref.bindingName);
67
+ if (binding === undefined) {
68
+ return '';
69
+ }
70
+ const portType = findPortType(definition, binding.type);
71
+ const operation = portType?.operations.find((candidate) => candidate.name === ref.operationName);
72
+ const output = operation?.output;
73
+ if (output === undefined) {
74
+ return '';
75
+ }
76
+ const message = definition.messages.find((candidate) => qnameToString(candidate.name) === qnameToString(output.message));
77
+ if (message === undefined) {
78
+ return qnameToString(output.message);
79
+ }
80
+ const parts = message.parts.map((part) => {
81
+ try {
82
+ if (part.element !== undefined) {
83
+ return `${part.name}=${generateElement(schemaSet, part.element, DIFF_GENERATE_OPTIONS).xml}`;
84
+ }
85
+ if (part.type !== undefined) {
86
+ const name = { namespaceUri: '', localName: part.name };
87
+ return `${part.name}=${generateType(schemaSet, name, part.type, DIFF_GENERATE_OPTIONS).xml}`;
88
+ }
89
+ }
90
+ catch {
91
+ /* An unresolvable part contributes its declared name only. */
92
+ }
93
+ return `${part.name}=?`;
94
+ });
95
+ return parts.join('\n');
96
+ }
97
+ /** The first reason `next` differs from `previous`, or `undefined` when they match. */
98
+ function changeReason(oldImport, newImport, previous, next) {
99
+ if (previous.soapAction !== next.soapAction) {
100
+ return 'soap-action';
101
+ }
102
+ if (previous.style !== next.style) {
103
+ return 'style';
104
+ }
105
+ if (previous.soapVersion !== next.soapVersion) {
106
+ return 'binding';
107
+ }
108
+ if (envelopeOf(oldImport, refOf(previous)) !== envelopeOf(newImport, refOf(next))) {
109
+ return 'input-schema';
110
+ }
111
+ const ref = refOf(next);
112
+ if (outputSignature(oldImport.definition, oldImport.schemaSet, ref) !==
113
+ outputSignature(newImport.definition, newImport.schemaSet, ref)) {
114
+ return 'output-schema';
115
+ }
116
+ return undefined;
117
+ }
118
+ /**
119
+ * Diffs two imports of the same interface: what the new definition adds, drops
120
+ * and changes. Operation identity is the binding's expanded name plus the
121
+ * operation name, so a renamed binding reads as "every operation removed, every
122
+ * operation added" — which is what it is.
123
+ *
124
+ * Pure and deterministic: the lists follow the new definition's document order
125
+ * (removed operations follow the old one's).
126
+ *
127
+ * @param oldImport the definition the project was built from
128
+ * @param newImport the freshly fetched definition
129
+ */
130
+ export function planUpdate(oldImport, newImport) {
131
+ const oldByKey = new Map(oldImport.operations.map((op) => [operationKey(refOf(op)), op]));
132
+ const newByKey = new Map(newImport.operations.map((op) => [operationKey(refOf(op)), op]));
133
+ const newOperations = [];
134
+ const changedOperations = [];
135
+ for (const [key, next] of newByKey) {
136
+ const previous = oldByKey.get(key);
137
+ if (previous === undefined) {
138
+ newOperations.push(refOf(next));
139
+ continue;
140
+ }
141
+ const reason = changeReason(oldImport, newImport, previous, next);
142
+ if (reason !== undefined) {
143
+ changedOperations.push({ ref: refOf(next), reason });
144
+ }
145
+ }
146
+ const removedOperations = [];
147
+ for (const [key, previous] of oldByKey) {
148
+ if (!newByKey.has(key)) {
149
+ removedOperations.push(refOf(previous));
150
+ }
151
+ }
152
+ const oldAddresses = addressesOf(oldImport.operations);
153
+ const newAddresses = addressesOf(newImport.operations);
154
+ return {
155
+ newOperations,
156
+ removedOperations,
157
+ changedOperations,
158
+ endpointsAdded: newAddresses.filter((address) => !oldAddresses.includes(address)),
159
+ endpointsRemoved: oldAddresses.filter((address) => !newAddresses.includes(address)),
160
+ };
161
+ }
162
+ function requireInterface(project, interfaceId) {
163
+ const iface = project.interfaces.find((candidate) => candidate.id === interfaceId);
164
+ if (iface === undefined) {
165
+ throw new Error(`No interface with id "${interfaceId}"`);
166
+ }
167
+ return iface;
168
+ }
169
+ /** The `.xml.bak` path of one saved request, relative to the project root. */
170
+ function backupPath(iface, operation, request) {
171
+ return `${INTERFACES_DIR}/${iface.slug}/${OPERATIONS_DIR}/${operation.slug}/${request.slug}.xml.bak`;
172
+ }
173
+ /** The operation summary for `ref` in the new import, if the new definition still has it. */
174
+ function summaryFor(result, key) {
175
+ return result.operations.find((op) => operationKey(refOf(op)) === key);
176
+ }
177
+ /** Adds the endpoints `plan.endpointsAdded` names, skipping URLs the interface already has. */
178
+ function withAddedEndpoints(iface, plan, newId) {
179
+ const known = new Set(iface.endpoints.map((endpoint) => endpoint.url));
180
+ const added = plan.endpointsAdded
181
+ .filter((url) => !known.has(url))
182
+ .map((url) => ({ id: newId(), name: url, url, authMode: 'complement' }));
183
+ if (added.length === 0) {
184
+ return iface;
185
+ }
186
+ const endpoints = [...iface.endpoints, ...added];
187
+ return {
188
+ ...iface,
189
+ endpoints,
190
+ ...(iface.defaultEndpointId === undefined && endpoints[0] !== undefined
191
+ ? { defaultEndpointId: endpoints[0].id }
192
+ : {}),
193
+ };
194
+ }
195
+ /**
196
+ * Applies `plan` to one interface of `project`, per `options`.
197
+ *
198
+ * Never deletes anything: a removed operation's requests stay exactly where they
199
+ * are with `orphaned: true`, and an operation the new definition brought back has
200
+ * that flag cleared again.
201
+ *
202
+ * @param project the model to update; never mutated
203
+ * @param interfaceId the interface the plan belongs to
204
+ * @param plan the diff from {@link planUpdate}
205
+ * @param newImport the freshly imported definition the plan was built against
206
+ * @param options which of the update behaviours to perform
207
+ * @throws Error when `interfaceId` names no interface of `project`
208
+ */
209
+ export function applyUpdate(project, interfaceId, plan, newImport, options) {
210
+ const newId = options.newId ?? generateId;
211
+ let iface = requireInterface(project, interfaceId);
212
+ const requestsCreated = [];
213
+ const requestsRecreated = [];
214
+ const requestsOrphaned = [];
215
+ const backups = [];
216
+ const removedKeys = new Set(plan.removedOperations.map(operationKey));
217
+ const changedByKey = new Map(plan.changedOperations.map((changed) => [operationKey(changed.ref), changed]));
218
+ const generateOptions = { includeOptional: options.recreateOptional };
219
+ // Pass 1: orphan flags and recreated envelopes, operation by operation.
220
+ const operations = iface.operations.map((operation) => {
221
+ const key = `${operation.bindingName}#${operation.name}`;
222
+ const orphaned = removedKeys.has(key);
223
+ const recreate = options.recreateRequests && changedByKey.has(key);
224
+ const requests = operation.requests.map((request) => {
225
+ let next = request;
226
+ if (orphaned) {
227
+ if (request.orphaned !== true) {
228
+ requestsOrphaned.push(request.id);
229
+ }
230
+ next = { ...next, orphaned: true };
231
+ }
232
+ else if (request.orphaned === true) {
233
+ // `exactOptionalPropertyTypes`: the flag is *absent* again, not `undefined`.
234
+ next = Object.fromEntries(Object.entries(next).filter(([key]) => key !== 'orphaned'));
235
+ }
236
+ if (recreate) {
237
+ const summary = summaryFor(newImport, key);
238
+ if (summary !== undefined) {
239
+ const generated = generateRequest(newImport, refOf(summary), generateOptions);
240
+ const merged = recreateRequest(next.envelopeXml, generated.envelopeXml, {
241
+ keepValues: options.keepExisting,
242
+ keepHeaders: options.keepSoapHeaders,
243
+ });
244
+ if (options.createBackups) {
245
+ backups.push(backupPath(iface, operation, request));
246
+ }
247
+ requestsRecreated.push(request.id);
248
+ next = {
249
+ ...next,
250
+ envelopeXml: merged.xml,
251
+ soapVersion: generated.soapVersion,
252
+ ...(generated.soapAction !== undefined ? { soapAction: generated.soapAction } : {}),
253
+ };
254
+ }
255
+ }
256
+ return next;
257
+ });
258
+ return { ...operation, requests };
259
+ });
260
+ iface = { ...iface, operations };
261
+ // Pass 2: an operation folder (and its first request) for everything the new definition adds.
262
+ if (options.createNewRequests) {
263
+ for (const ref of plan.newOperations) {
264
+ const summary = summaryFor(newImport, operationKey(ref));
265
+ if (summary === undefined) {
266
+ continue;
267
+ }
268
+ const bindingName = qnameToString(ref.bindingName);
269
+ const existing = iface.operations.find((op) => op.bindingName === bindingName && op.name === ref.operationName);
270
+ const operation = existing ?? {
271
+ name: ref.operationName,
272
+ bindingName,
273
+ slug: uniqueSlug(ref.operationName, new Set(iface.operations.map((op) => op.slug))),
274
+ order: iface.operations.length,
275
+ requests: [],
276
+ };
277
+ const generated = generateRequest(newImport, ref, generateOptions);
278
+ const name = 'Request 1';
279
+ const request = createRequest(name, {
280
+ id: newId(),
281
+ envelopeXml: generated.envelopeXml,
282
+ soapVersion: generated.soapVersion,
283
+ slug: uniqueSlug(name, new Set(operation.requests.map((r) => r.slug))),
284
+ order: operation.requests.length,
285
+ ...(generated.soapAction !== undefined ? { soapAction: generated.soapAction } : {}),
286
+ ...(iface.defaultEndpointId !== undefined ? { endpointId: iface.defaultEndpointId } : {}),
287
+ });
288
+ requestsCreated.push(request.id);
289
+ const withRequest = { ...operation, requests: [...operation.requests, request] };
290
+ iface = {
291
+ ...iface,
292
+ operations: existing === undefined
293
+ ? [...iface.operations, withRequest]
294
+ : iface.operations.map((op) => (op === existing ? withRequest : op)),
295
+ };
296
+ }
297
+ }
298
+ iface = withAddedEndpoints(iface, plan, newId);
299
+ iface = {
300
+ ...iface,
301
+ definitionUrl: newImport.bundle.root.location,
302
+ ...(newImport.definition.targetNamespace !== '' ? { targetNamespace: newImport.definition.targetNamespace } : {}),
303
+ };
304
+ return {
305
+ project: {
306
+ ...project,
307
+ interfaces: project.interfaces.map((candidate) => (candidate.id === interfaceId ? iface : candidate)),
308
+ },
309
+ requestsCreated,
310
+ requestsRecreated,
311
+ requestsOrphaned,
312
+ backups,
313
+ };
314
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Applies (and removes) an outgoing WS-Security header on a SOAP envelope: the
3
+ * `wsse:Security` block, its `mustUnderstand`/actor attributes, and the configured entries in
4
+ * configuration order.
5
+ */
6
+ import type { WssContext, WssOutgoingConfig } from './model.js';
7
+ /** Request-level properties that override an entry's own settings for one send. */
8
+ export interface WssRequestProperties {
9
+ readonly wssPasswordType?: 'text' | 'digest';
10
+ readonly wssTimeToLive?: number;
11
+ }
12
+ /** Options accepted by {@link applyOutgoingWss}. */
13
+ export interface ApplyOutgoingWssOptions {
14
+ readonly requestProperties?: WssRequestProperties;
15
+ }
16
+ /**
17
+ * Applies `config` to `envelopeXml`, returning the new envelope.
18
+ *
19
+ * The `soap:Header` is created (before the `Body`) when missing, the `wsse:Security` block
20
+ * addressed to `config.actor` is reused when one already exists, and the entries are appended
21
+ * to it in configuration order. Request-level `wssPasswordType`/`wssTimeToLive` override the
22
+ * matching entry fields for this application only.
23
+ *
24
+ * @param envelopeXml the envelope to secure
25
+ * @param config the outgoing configuration
26
+ * @param ctx the injected keystore/secret/clock/entropy capabilities
27
+ * @param options request-level property overrides
28
+ * @returns the serialized, secured envelope
29
+ * @throws WssError `wss-not-an-envelope`, or `wss-entry-unsupported` for an unknown entry kind
30
+ */
31
+ export declare function applyOutgoingWss(envelopeXml: string, config: WssOutgoingConfig, ctx: WssContext, options?: ApplyOutgoingWssOptions): Promise<string>;
32
+ /**
33
+ * Removes the `wsse:Security` header addressed to `actor` (the ultimate receiver's when
34
+ * `actor` is omitted), plus the `soap:Header` if that emptied it.
35
+ *
36
+ * @param envelopeXml the envelope to clean
37
+ * @param actor the actor/role whose Security block to remove
38
+ * @returns the envelope without that header; unchanged when there is nothing to remove
39
+ */
40
+ export declare function removeOutgoingWss(envelopeXml: string, actor?: string): string;
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Applies (and removes) an outgoing WS-Security header on a SOAP envelope: the
3
+ * `wsse:Security` block, its `mustUnderstand`/actor attributes, and the configured entries in
4
+ * configuration order.
5
+ */
6
+ import { WssError } from '../errors.js';
7
+ import { parseXml } from '../xml/parse.js';
8
+ import { serializeXml } from '../xml/serialize.js';
9
+ import { NS } from '../xml/namespaces.js';
10
+ import { detectEnvelopeVersion, envelopeNamespace } from '../soap/envelope.js';
11
+ import { buildTimestamp } from './outgoing/timestamp.js';
12
+ import { buildUsernameToken } from './outgoing/username-token.js';
13
+ import { signEnvelope } from './outgoing/signature.js';
14
+ import { encryptEnvelope } from './outgoing/encryption.js';
15
+ import { selectAlias } from './keystore/index.js';
16
+ import { actorAttribute, childElement, mustUnderstandValue, securityHeaders, securityActor, } from './security-header.js';
17
+ /** The namespace `xmlns:*` declarations themselves live in. */
18
+ const XMLNS = 'http://www.w3.org/2000/xmlns/';
19
+ /** True when `header` has no element children and only whitespace (or no) text content. */
20
+ function headerHasOnlyWhitespace(header) {
21
+ for (let node = header.firstChild; node !== null; node = node.nextSibling) {
22
+ if (node.nodeType === 1) {
23
+ return false;
24
+ }
25
+ if (node.nodeType === 3 && (node.nodeValue ?? '').trim() !== '') {
26
+ return false;
27
+ }
28
+ }
29
+ return true;
30
+ }
31
+ /** Parses `envelopeXml`, rejecting anything that is not a SOAP envelope. */
32
+ function parseEnvelope(envelopeXml) {
33
+ const doc = parseXml(envelopeXml, { location: 'envelope' });
34
+ const version = detectEnvelopeVersion(doc);
35
+ const root = doc.documentElement;
36
+ if (version === undefined || root === null) {
37
+ throw new WssError('wss-not-an-envelope', 'WS-Security can only be applied to a SOAP envelope.');
38
+ }
39
+ return { doc, root, version };
40
+ }
41
+ /** The prefix the envelope binds its SOAP namespace to (`soapenv` when it uses a default namespace). */
42
+ function envelopePrefix(root) {
43
+ const prefix = root.prefix;
44
+ return prefix === null || prefix === '' ? 'soapenv' : prefix;
45
+ }
46
+ /** Finds or creates the `soap:Header`, always placing a new one before the `Body`. */
47
+ function ensureHeader(doc, root, version) {
48
+ const namespace = envelopeNamespace(version);
49
+ const existing = childElement(root, namespace, 'Header');
50
+ if (existing !== undefined) {
51
+ return existing;
52
+ }
53
+ const header = doc.createElementNS(namespace, `${envelopePrefix(root)}:Header`);
54
+ const body = childElement(root, namespace, 'Body');
55
+ root.insertBefore(header, body ?? null);
56
+ return header;
57
+ }
58
+ /** Finds or creates the `wsse:Security` block addressed to `actor`. */
59
+ function ensureSecurity(doc, root, header, version, config) {
60
+ const existing = securityHeaders(header).find((element) => securityActor(element, version) === config.actor);
61
+ const security = existing ?? doc.createElementNS(NS.WSSE, 'wsse:Security');
62
+ if (existing === undefined) {
63
+ // `wsse` comes from the element's own name; `wsu` is declared here through the xmlns
64
+ // namespace (not as a plain attribute) so xmldom records it in the element's namespace map
65
+ // and the entries below inherit the prefix instead of re-declaring it on every child.
66
+ security.setAttributeNS(XMLNS, 'xmlns:wsu', NS.WSU);
67
+ header.appendChild(security);
68
+ }
69
+ const prefix = envelopePrefix(root);
70
+ const envelopeNs = envelopeNamespace(version);
71
+ if (config.actor !== undefined && config.actor !== '') {
72
+ security.setAttributeNS(envelopeNs, `${prefix}:${actorAttribute(version)}`, config.actor);
73
+ }
74
+ else {
75
+ security.removeAttributeNS(envelopeNs, actorAttribute(version));
76
+ }
77
+ if (config.mustUnderstand) {
78
+ security.setAttributeNS(envelopeNs, `${prefix}:mustUnderstand`, mustUnderstandValue(version));
79
+ }
80
+ else {
81
+ security.removeAttributeNS(envelopeNs, 'mustUnderstand');
82
+ }
83
+ return security;
84
+ }
85
+ /** The password type an entry effectively uses, after the request-level override. */
86
+ function effectivePasswordType(entry, override) {
87
+ // 'none' is a deliberate "send no password"; a request property never turns it back on.
88
+ return entry.passwordType === 'none' ? 'none' : (override ?? entry.passwordType);
89
+ }
90
+ /** Builds the element for one entry, resolving its secret through `ctx`. */
91
+ async function buildEntry(entry, config, ctx, properties) {
92
+ if (entry.kind === 'timestamp') {
93
+ return buildTimestamp({
94
+ ttlSeconds: properties?.wssTimeToLive ?? entry.timeToLiveSeconds,
95
+ millisecondPrecision: entry.millisecondPrecision,
96
+ clock: ctx.clock,
97
+ uuid: ctx.uuid,
98
+ });
99
+ }
100
+ if (entry.kind === 'username-token') {
101
+ const passwordType = effectivePasswordType(entry, properties?.wssPasswordType);
102
+ const ref = entry.passwordRef ?? config.defaultPasswordRef;
103
+ const password = passwordType === 'none' || ref === undefined ? undefined : await ctx.secrets(ref);
104
+ return buildUsernameToken({
105
+ username: entry.username,
106
+ ...(password !== undefined ? { password } : {}),
107
+ passwordType,
108
+ addNonce: entry.addNonce,
109
+ addCreated: entry.addCreated,
110
+ clock: ctx.clock,
111
+ nonce: ctx.nonce,
112
+ uuid: ctx.uuid,
113
+ });
114
+ }
115
+ throw new WssError('wss-entry-unsupported', `WS-Security "${entry.kind}" entries are not supported yet.`, {
116
+ details: { kind: entry.kind },
117
+ });
118
+ }
119
+ /** Loads the keystore a signature or encryption entry names and picks its alias. */
120
+ async function resolveKeystoreAlias(entry, config, ctx) {
121
+ const keystore = await ctx.keystores(entry.keystoreRef);
122
+ if (keystore === undefined) {
123
+ throw new WssError('wss-keystore-missing', 'The keystore this entry needs is not available.', {
124
+ details: { keystoreRef: entry.keystoreRef },
125
+ });
126
+ }
127
+ return {
128
+ keystore,
129
+ alias: selectAlias(keystore, entry.alias ?? config.defaultAlias),
130
+ ...(config.actor !== undefined ? { actor: config.actor } : {}),
131
+ };
132
+ }
133
+ /**
134
+ * Applies `config` to `envelopeXml`, returning the new envelope.
135
+ *
136
+ * The `soap:Header` is created (before the `Body`) when missing, the `wsse:Security` block
137
+ * addressed to `config.actor` is reused when one already exists, and the entries are appended
138
+ * to it in configuration order. Request-level `wssPasswordType`/`wssTimeToLive` override the
139
+ * matching entry fields for this application only.
140
+ *
141
+ * @param envelopeXml the envelope to secure
142
+ * @param config the outgoing configuration
143
+ * @param ctx the injected keystore/secret/clock/entropy capabilities
144
+ * @param options request-level property overrides
145
+ * @returns the serialized, secured envelope
146
+ * @throws WssError `wss-not-an-envelope`, or `wss-entry-unsupported` for an unknown entry kind
147
+ */
148
+ export async function applyOutgoingWss(envelopeXml, config, ctx, options) {
149
+ const { doc, version } = parseEnvelope(envelopeXml);
150
+ for (const entry of config.entries) {
151
+ // The header is re-resolved every iteration because signing re-serializes the whole
152
+ // document (xml-crypto only speaks strings), which invalidates any element held across it.
153
+ const root = doc.documentElement;
154
+ if (root === null) {
155
+ throw new WssError('wss-not-an-envelope', 'WS-Security can only be applied to a SOAP envelope.');
156
+ }
157
+ const header = ensureHeader(doc, root, version);
158
+ const security = ensureSecurity(doc, root, header, version, config);
159
+ if (entry.kind === 'signature') {
160
+ await signEnvelope(doc, entry, await resolveKeystoreAlias(entry, config, ctx), ctx);
161
+ continue;
162
+ }
163
+ if (entry.kind === 'encryption') {
164
+ encryptEnvelope(doc, entry, await resolveKeystoreAlias(entry, config, ctx), ctx);
165
+ continue;
166
+ }
167
+ security.appendChild(doc.importNode(await buildEntry(entry, config, ctx, options?.requestProperties), true));
168
+ }
169
+ if (config.entries.length === 0) {
170
+ const root = doc.documentElement;
171
+ if (root !== null) {
172
+ ensureSecurity(doc, root, ensureHeader(doc, root, version), version, config);
173
+ }
174
+ }
175
+ return serializeXml(doc);
176
+ }
177
+ /**
178
+ * Removes the `wsse:Security` header addressed to `actor` (the ultimate receiver's when
179
+ * `actor` is omitted), plus the `soap:Header` if that emptied it.
180
+ *
181
+ * @param envelopeXml the envelope to clean
182
+ * @param actor the actor/role whose Security block to remove
183
+ * @returns the envelope without that header; unchanged when there is nothing to remove
184
+ */
185
+ export function removeOutgoingWss(envelopeXml, actor) {
186
+ let parsed;
187
+ try {
188
+ parsed = parseEnvelope(envelopeXml);
189
+ }
190
+ catch {
191
+ return envelopeXml;
192
+ }
193
+ const { doc, root, version } = parsed;
194
+ const header = childElement(root, envelopeNamespace(version), 'Header');
195
+ if (header === undefined) {
196
+ return envelopeXml;
197
+ }
198
+ let removed = false;
199
+ for (const security of securityHeaders(header)) {
200
+ if (securityActor(security, version) === actor) {
201
+ header.removeChild(security);
202
+ removed = true;
203
+ }
204
+ }
205
+ if (!removed) {
206
+ return envelopeXml;
207
+ }
208
+ if (childElement(header, NS.WSSE, 'Security') === undefined && headerHasOnlyWhitespace(header)) {
209
+ root.removeChild(header);
210
+ }
211
+ return serializeXml(doc);
212
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The `InclusiveNamespaces PrefixList` exclusive canonicalization needs to be told about.
3
+ *
4
+ * Exclusive c14n's "visible utilization" rule only looks at element and attribute *names*, so a
5
+ * prefix a subtree uses only inside an attribute value or in text — `xsi:type="tns:Foo"`, a
6
+ * WSDL/XSD `ref`, a `QName` element body — loses its declaration and the canonical form stops
7
+ * meaning what it said. Both `outgoing/signature.ts` (per-reference transforms) and
8
+ * `outgoing/encryption.ts` (the plaintext it canonicalizes before encrypting) need the same
9
+ * list, so the rule lives here once.
10
+ */
11
+ import type { Element } from '@xmldom/xmldom';
12
+ /**
13
+ * The `InclusiveNamespaces PrefixList` exclusive c14n of `element` needs: every prefix
14
+ * `element`'s subtree references only through attribute-value or text QName content — a use
15
+ * exclusive c14n's "visible utilization" rule does not see — plus `envelopePrefix` when one is
16
+ * given.
17
+ *
18
+ * A prefix `element` already declares on itself is left out: exclusive c14n renders that
19
+ * declaration regardless, so listing it again would be redundant, not wrong.
20
+ *
21
+ * @param element the element about to be canonicalized
22
+ * @param envelopePrefix the SOAP envelope's own prefix when the canonical form has to stand on
23
+ * its own inside the envelope (a signature reference), or `null` when it does not (an
24
+ * encrypted plaintext, which is self-contained by construction)
25
+ * @returns the prefixes to list, sorted, so the value is stable
26
+ */
27
+ export declare function inclusiveNamespacePrefixList(element: Element, envelopePrefix: string | null): string[];