@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,125 @@
1
+ /**
2
+ * PKCS#12 (`.p12`/`.pfx`) reading, via node-forge.
3
+ *
4
+ * A PKCS#12 file is a bag of bags: shrouded key bags, certificate bags, and attributes
5
+ * (`friendlyName`, `localKeyId`) that tie a key to its certificate. This module flattens that
6
+ * into the alias list the rest of Wirebench works with, re-exporting every private key as an
7
+ * unencrypted PKCS#8 PEM **in memory only** — nothing here writes to disk, and the caller is
8
+ * expected to keep the result out of the renderer.
9
+ */
10
+ import forge from 'node-forge';
11
+ import { WssError } from '../../errors.js';
12
+ import { buildChain, commonNameOf, describeCertificate, keyMatchesCertificate } from './certificate.js';
13
+ function invalid(cause) {
14
+ return new WssError('keystore-invalid', 'The file is not a readable PKCS#12 keystore.', { cause });
15
+ }
16
+ /**
17
+ * Wrong-password failures are the common case and must be distinguishable from a corrupt file.
18
+ *
19
+ * Matched narrowly, on forge's MAC/password wording only: a broader pattern (anything mentioning
20
+ * "decrypt", say) swallows genuinely malformed files and reports them as a bad password, which
21
+ * sends the user round a retype loop no password can end.
22
+ */
23
+ function looksLikeBadPassword(error) {
24
+ const message = error instanceof Error ? error.message : String(error);
25
+ return /mac could not be verified|invalid password|wrong password|password is (?:invalid|incorrect)/i.test(message);
26
+ }
27
+ /** A key as an unencrypted PKCS#8 PEM — what Node's `tls` accepts without a passphrase. */
28
+ function toPkcs8Pem(key) {
29
+ return forge.pki.privateKeyInfoToPem(forge.pki.wrapRsaPrivateKey(forge.pki.privateKeyToAsn1(key)));
30
+ }
31
+ function attribute(bag, name) {
32
+ const value = bag.attributes?.[name]?.[0];
33
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
34
+ }
35
+ /** Every bag of one type, flattened out of forge's `{ [oid]: Bag[] }` result. */
36
+ function bagsOfType(p12, bagType) {
37
+ const found = p12.getBags({ bagType });
38
+ return Object.values(found).flatMap((bags) => bags ?? []);
39
+ }
40
+ /**
41
+ * Reads a PKCS#12 keystore.
42
+ *
43
+ * @param bytes the raw `.p12`/`.pfx` content
44
+ * @param password the keystore password; an empty/absent password is tried as `''`
45
+ * @returns the parsed keystore, one alias per key entry plus one per unused certificate
46
+ * @throws WssError `keystore-bad-password` when the MAC does not verify, `keystore-invalid`
47
+ * when the bytes are not a PKCS#12 file at all, or when a key it holds matches none of its
48
+ * certificates
49
+ */
50
+ export function loadPkcs12(bytes, password) {
51
+ const binary = forge.util.createBuffer(Buffer.from(bytes).toString('binary'));
52
+ let asn1;
53
+ try {
54
+ asn1 = forge.asn1.fromDer(binary);
55
+ }
56
+ catch (error) {
57
+ throw invalid(error);
58
+ }
59
+ let p12;
60
+ try {
61
+ p12 = forge.pkcs12.pkcs12FromAsn1(asn1, password ?? '');
62
+ }
63
+ catch (error) {
64
+ if (looksLikeBadPassword(error)) {
65
+ throw new WssError('keystore-bad-password', 'The keystore password is incorrect.', { cause: error });
66
+ }
67
+ throw invalid(error);
68
+ }
69
+ const certBags = bagsOfType(p12, forge.pki.oids['certBag'] ?? 'certBag');
70
+ const keyBags = [
71
+ ...bagsOfType(p12, forge.pki.oids['pkcs8ShroudedKeyBag'] ?? 'pkcs8ShroudedKeyBag'),
72
+ ...bagsOfType(p12, forge.pki.oids['keyBag'] ?? 'keyBag'),
73
+ ];
74
+ const certificates = certBags.map((bag) => bag.cert).filter((cert) => !!cert);
75
+ if (certificates.length === 0) {
76
+ throw invalid(new Error('the keystore holds no certificates'));
77
+ }
78
+ const used = new Set();
79
+ const aliases = [];
80
+ keyBags.forEach((keyBag, index) => {
81
+ const key = keyBag.key;
82
+ if (!key) {
83
+ return;
84
+ }
85
+ const localKeyId = attribute(keyBag, 'localKeyId');
86
+ // `localKeyId` is the file's own statement of which certificate belongs to this key, so it
87
+ // wins. Without one, the pairing is *proved* by the public key rather than guessed from bag
88
+ // order: a `.p12` written as [ca, leaf] would otherwise hand the client's key the CA's
89
+ // certificate and present an identity the key cannot sign for.
90
+ const certBag = certBags.find((bag) => !!bag.cert && localKeyId !== undefined && attribute(bag, 'localKeyId') === localKeyId) ??
91
+ certBags.find((bag) => !!bag.cert && !used.has(bag.cert) && keyMatchesCertificate(key, bag.cert));
92
+ const cert = certBag?.cert;
93
+ if (!cert) {
94
+ throw new WssError('keystore-invalid', 'The keystore holds a private key that matches none of its certificates.');
95
+ }
96
+ used.add(cert);
97
+ const chain = buildChain(cert, certificates, used);
98
+ aliases.push({
99
+ alias: attribute(keyBag, 'friendlyName') ??
100
+ (certBag === undefined ? undefined : attribute(certBag, 'friendlyName')) ??
101
+ commonNameOf(cert) ??
102
+ `key-${String(index)}`,
103
+ ...describeCertificate(cert),
104
+ keyPem: toPkcs8Pem(key),
105
+ chainPem: chain.map((issuer) => forge.pki.certificateToPem(issuer)),
106
+ hasPrivateKey: true,
107
+ });
108
+ });
109
+ // Whatever is left is a trust anchor the file happened to carry: still worth listing, so the
110
+ // UI can show what the user actually imported, but never usable as a client identity.
111
+ certBags.forEach((bag, index) => {
112
+ const cert = bag.cert;
113
+ if (!cert || used.has(cert)) {
114
+ return;
115
+ }
116
+ used.add(cert);
117
+ aliases.push({
118
+ alias: attribute(bag, 'friendlyName') ?? commonNameOf(cert) ?? `cert-${String(index)}`,
119
+ ...describeCertificate(cert),
120
+ chainPem: [],
121
+ hasPrivateKey: false,
122
+ });
123
+ });
124
+ return { type: 'pkcs12', aliases };
125
+ }
@@ -0,0 +1,160 @@
1
+ /**
2
+ * The WS-Security configuration model: what a project's `wss/outgoing/<id>.yaml` and
3
+ * `wss/incoming/<id>.yaml` describe, plus the {@link WssContext} of injected capabilities
4
+ * every builder takes (so nothing here reads a keystore, a secret, the clock or the entropy
5
+ * pool on its own — the host supplies all four, and tests supply deterministic ones).
6
+ */
7
+ import type { Keystore } from './keystore/model.js';
8
+ /** How a `wsse:UsernameToken` carries (or does not carry) its password. */
9
+ export type WssPasswordType = 'text' | 'digest' | 'none';
10
+ /** A `wsu:Timestamp` header element. */
11
+ export interface WssTimestampEntry {
12
+ readonly kind: 'timestamp';
13
+ /** Seconds between `Created` and `Expires`; `0` omits `Expires` entirely. */
14
+ readonly timeToLiveSeconds: number;
15
+ /** Emit `.SSS` fractional seconds rather than whole seconds. */
16
+ readonly millisecondPrecision: boolean;
17
+ }
18
+ /** A `wsse:UsernameToken` header element. */
19
+ export interface WssUsernameTokenEntry {
20
+ readonly kind: 'username-token';
21
+ readonly username: string;
22
+ /** Secret reference; the password itself is resolved by the host, never persisted. */
23
+ readonly passwordRef?: string;
24
+ readonly passwordType: WssPasswordType;
25
+ readonly addNonce: boolean;
26
+ readonly addCreated: boolean;
27
+ }
28
+ /**
29
+ * One message part a signature covers (or, from Task 39 on, an encryption entry encrypts),
30
+ * named the way the "Parts" table names it: by local name and namespace.
31
+ */
32
+ export interface WssPart {
33
+ readonly name: string;
34
+ readonly namespace: string;
35
+ /** `Content` signs/encrypts the element's children, `Element` the element itself. */
36
+ readonly encode: 'Content' | 'Element';
37
+ }
38
+ /** How a signature's `wsse:SecurityTokenReference` points at the signing certificate. */
39
+ export type WssKeyIdentifierType = 'BinarySecurityToken' | 'IssuerSerial' | 'SubjectKeyIdentifier' | 'X509KeyIdentifier' | 'Thumbprint';
40
+ /** The RSA signature algorithms this build offers. */
41
+ export type WssSignatureAlgorithm = 'rsa-sha256' | 'rsa-sha1';
42
+ /** The digest algorithms this build offers, for both `SignedInfo` references and `SignatureMethod`. */
43
+ export type WssDigestAlgorithm = 'sha256' | 'sha1';
44
+ /**
45
+ * An XML Signature entry: which key signs, how the certificate is referenced, and which parts
46
+ * of the message are covered.
47
+ */
48
+ export interface WssSignatureEntry {
49
+ readonly kind: 'signature';
50
+ /** The `wss/keystores.yaml` registry id holding the signing key. */
51
+ readonly keystoreRef: string;
52
+ /** Alias inside that keystore; falls back to the configuration's `defaultAlias`. */
53
+ readonly alias?: string;
54
+ /** Secret reference for the private key's passphrase, when its PEM is encrypted. */
55
+ readonly keyPasswordRef?: string;
56
+ readonly keyIdentifierType: WssKeyIdentifierType;
57
+ readonly signatureAlgorithm: WssSignatureAlgorithm;
58
+ readonly digestAlgorithm: WssDigestAlgorithm;
59
+ /** Only exclusive canonicalization is offered; the field exists so documents stay explicit. */
60
+ readonly canonicalization: 'exc-c14n';
61
+ /** Emit only the leaf certificate (`X509v3`) rather than the whole path (`X509PKIPathv1`). */
62
+ readonly useSingleCertificate: boolean;
63
+ readonly parts: readonly WssPart[];
64
+ }
65
+ /** The parts a new signature entry covers: the SOAP `Body` and the WS-Security `Timestamp`. */
66
+ export declare const DEFAULT_WSS_SIGNATURE_PARTS: readonly WssPart[];
67
+ /** The block ciphers (and modes) this build encrypts message parts with. */
68
+ export type WssSymmetricAlgorithm = 'aes128-cbc' | 'aes256-cbc' | 'aes128-gcm' | 'aes256-gcm';
69
+ /** How the per-message symmetric key is wrapped for the recipient. */
70
+ export type WssKeyTransportAlgorithm = 'rsa-oaep' | 'rsa-1_5';
71
+ /**
72
+ * An XML Encryption entry: whose certificate the message is encrypted *to*, how that
73
+ * certificate is referenced, which algorithms are used, and which parts are encrypted.
74
+ *
75
+ * Only the recipient's **certificate** is needed — encryption uses its public key, so the
76
+ * keystore alias this names never has to carry a private key.
77
+ */
78
+ export interface WssEncryptionEntry {
79
+ readonly kind: 'encryption';
80
+ /** The `wss/keystores.yaml` registry id holding the recipient's certificate. */
81
+ readonly keystoreRef: string;
82
+ /** Alias inside that keystore; falls back to the configuration's `defaultAlias`. */
83
+ readonly alias?: string;
84
+ readonly keyIdentifierType: WssKeyIdentifierType;
85
+ readonly symmetricAlgorithm: WssSymmetricAlgorithm;
86
+ readonly keyTransportAlgorithm: WssKeyTransportAlgorithm;
87
+ /** Embed the recipient certificate as a `wsse:BinarySecurityToken` rather than referencing one. */
88
+ readonly embedKey: boolean;
89
+ /** Wrap the symmetric key in an `xenc:EncryptedKey`; `false` means it is shared out of band. */
90
+ readonly encryptSymmetricKey: boolean;
91
+ readonly parts: readonly WssPart[];
92
+ }
93
+ /** The parts a new encryption entry covers: the SOAP `Body`'s content. */
94
+ export declare const DEFAULT_WSS_ENCRYPTION_PARTS: readonly WssPart[];
95
+ /** One element of an outgoing WS-Security configuration, applied in configuration order. */
96
+ export type WssEntry = WssTimestampEntry | WssUsernameTokenEntry | WssSignatureEntry | WssEncryptionEntry;
97
+ /** Every entry kind, in the order the editor offers them. */
98
+ export declare const WSS_ENTRY_KINDS: readonly ["timestamp", "username-token", "signature", "encryption"];
99
+ /** One `wss/outgoing/<id>.yaml` document. */
100
+ export interface WssOutgoingConfig {
101
+ readonly id: string;
102
+ readonly name: string;
103
+ /** Keystore alias entries default to when they name none. */
104
+ readonly defaultAlias?: string;
105
+ /** Secret reference username tokens default to when they name none. */
106
+ readonly defaultPasswordRef?: string;
107
+ /** SOAP actor/role the `wsse:Security` header is addressed to. */
108
+ readonly actor?: string;
109
+ /** Set `mustUnderstand` on the `wsse:Security` header. */
110
+ readonly mustUnderstand: boolean;
111
+ readonly entries: readonly WssEntry[];
112
+ }
113
+ /**
114
+ * One `wss/incoming/<id>.yaml` document: how a *response* is decrypted and how its signatures
115
+ * and timestamp are judged.
116
+ */
117
+ export interface WssIncomingConfig {
118
+ readonly id: string;
119
+ readonly name: string;
120
+ /** Keystore holding the private key incoming `xenc:EncryptedKey` blocks are opened with. */
121
+ readonly decryptKeystoreRef?: string;
122
+ /** Alias inside that keystore; the keystore's first (or default) alias when omitted. */
123
+ readonly decryptAlias?: string;
124
+ /** Secret reference for that private key's passphrase, when its PEM is encrypted. */
125
+ readonly decryptKeyPasswordRef?: string;
126
+ /** Truststore: a keystore whose aliases are the certificates (or CAs) incoming signatures are trusted from. */
127
+ readonly signatureKeystoreRef?: string;
128
+ /** Report a failed `signature` action when the response carries no `ds:Signature` at all. */
129
+ readonly requireSignature: boolean;
130
+ /** Report a failed `timestamp` action when the response carries no `wsu:Timestamp`. */
131
+ readonly requireTimestamp: boolean;
132
+ /** Clock skew tolerated on `wsu:Created`/`wsu:Expires`, in seconds. */
133
+ readonly timestampSkewSeconds: number;
134
+ /** Accept a signer that chains to a truststore certificate, not only one stored verbatim. */
135
+ readonly verifyChain: boolean;
136
+ }
137
+ /** The defaults a new incoming configuration starts from. */
138
+ export declare const DEFAULT_WSS_TIMESTAMP_SKEW_SECONDS = 300;
139
+ /**
140
+ * Everything a WS-Security operation needs from the outside world. All five members are
141
+ * injectable: the host wires them to the real keystore loader, the secret store and
142
+ * `node:crypto`; tests wire them to fixtures and a frozen clock.
143
+ */
144
+ export interface WssContext {
145
+ /** Resolves a `wss/keystores.yaml` entry id to its parsed keystore. */
146
+ readonly keystores: (ref: string) => Promise<Keystore | undefined>;
147
+ /** Resolves a secret reference to its plaintext. Only ever called inside the host process. */
148
+ readonly secrets: (ref: string) => Promise<string | undefined>;
149
+ readonly clock: () => Date;
150
+ readonly nonce: (bytes: number) => Uint8Array;
151
+ readonly uuid: () => string;
152
+ }
153
+ /**
154
+ * A {@link WssContext} with real defaults: no keystores, no secrets, the system clock and
155
+ * `node:crypto` entropy. Any member given in `overrides` replaces its default.
156
+ *
157
+ * @param overrides the members the caller can actually provide
158
+ * @returns a complete context
159
+ */
160
+ export declare function createWssContext(overrides?: Partial<WssContext>): WssContext;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The WS-Security configuration model: what a project's `wss/outgoing/<id>.yaml` and
3
+ * `wss/incoming/<id>.yaml` describe, plus the {@link WssContext} of injected capabilities
4
+ * every builder takes (so nothing here reads a keystore, a secret, the clock or the entropy
5
+ * pool on its own — the host supplies all four, and tests supply deterministic ones).
6
+ */
7
+ import { randomBytes, randomUUID } from 'node:crypto';
8
+ import { NS } from '../xml/namespaces.js';
9
+ /** The parts a new signature entry covers: the SOAP `Body` and the WS-Security `Timestamp`. */
10
+ export const DEFAULT_WSS_SIGNATURE_PARTS = [
11
+ { name: 'Body', namespace: NS.SOAP11_ENV, encode: 'Content' },
12
+ { name: 'Timestamp', namespace: NS.WSU, encode: 'Content' },
13
+ ];
14
+ /** The parts a new encryption entry covers: the SOAP `Body`'s content. */
15
+ export const DEFAULT_WSS_ENCRYPTION_PARTS = [
16
+ { name: 'Body', namespace: NS.SOAP11_ENV, encode: 'Content' },
17
+ ];
18
+ /** Every entry kind, in the order the editor offers them. */
19
+ export const WSS_ENTRY_KINDS = ['timestamp', 'username-token', 'signature', 'encryption'];
20
+ /** The defaults a new incoming configuration starts from. */
21
+ export const DEFAULT_WSS_TIMESTAMP_SKEW_SECONDS = 300;
22
+ /**
23
+ * A {@link WssContext} with real defaults: no keystores, no secrets, the system clock and
24
+ * `node:crypto` entropy. Any member given in `overrides` replaces its default.
25
+ *
26
+ * @param overrides the members the caller can actually provide
27
+ * @returns a complete context
28
+ */
29
+ export function createWssContext(overrides) {
30
+ return {
31
+ keystores: overrides?.keystores ?? (() => Promise.resolve(undefined)),
32
+ secrets: overrides?.secrets ?? (() => Promise.resolve(undefined)),
33
+ clock: overrides?.clock ?? (() => new Date()),
34
+ nonce: overrides?.nonce ?? ((bytes) => new Uint8Array(randomBytes(bytes))),
35
+ uuid: overrides?.uuid ?? (() => randomUUID()),
36
+ };
37
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * XML Encryption (W3C XML-Enc 1.0/1.1) for a WS-Security header, implemented directly on
3
+ * `node:crypto`.
4
+ *
5
+ * The spec-approved `xml-encryption` package was evaluated first and rejected: it does every
6
+ * algorithm this build needs, but it emits one fixed shape — an `xenc:EncryptedData` of
7
+ * `Type="…#Element"` with the `xenc:EncryptedKey` *nested inside its own `ds:KeyInfo`* — with
8
+ * no `Id`, no `Type="…#Content"`, no `xenc:ReferenceList`/`xenc:DataReference`, and no
9
+ * `wsse:SecurityTokenReference` key identifiers. WS-Security needs the opposite arrangement
10
+ * (one `EncryptedKey` in the `wsse:Security` header, referencing the `EncryptedData` blocks it
11
+ * keyed), so adopting it would mean rebuilding its output string and using only its ~40 lines
12
+ * of `node:crypto` calls. Those are written here instead, and no dependency was added.
13
+ *
14
+ * Ciphertext layout, per XML-Enc §5.2 and XML-Enc 1.1 §5.2.4: CBC is `IV(16) ‖ ciphertext`
15
+ * (PKCS#7 padded), GCM is `IV(12) ‖ ciphertext ‖ tag(16)`. Key transport is RSA-OAEP with a
16
+ * SHA-1 digest and MGF1-SHA1 (§5.4.2), or raw PKCS#1 v1.5.
17
+ *
18
+ * Unlike `signEnvelope`, this mutates `doc` in place and never re-serializes it, so elements
19
+ * the caller held stay valid — but `applyOutgoingWss` re-resolves the header anyway, because a
20
+ * *signature* entry earlier in the same configuration may already have swapped the document.
21
+ */
22
+ import type { Document } from '@xmldom/xmldom';
23
+ import type { Keystore, KeystoreAlias } from '../keystore/model.js';
24
+ import type { WssContext, WssEncryptionEntry } from '../model.js';
25
+ /** The keystore material {@link encryptEnvelope} encrypts *to*; only the certificate is used. */
26
+ export interface ResolvedEncryptionKey {
27
+ readonly keystore: Keystore;
28
+ readonly alias: KeystoreAlias;
29
+ /** The actor/role of the `wsse:Security` block the `xenc:EncryptedKey` belongs in. */
30
+ readonly actor?: string;
31
+ }
32
+ /** What {@link decryptEnvelope} needs to open an envelope. */
33
+ export interface DecryptEnvelopeOptions {
34
+ readonly keystore: Keystore;
35
+ /** The alias whose private key unwraps the `xenc:EncryptedKey`. */
36
+ readonly alias: KeystoreAlias;
37
+ /** Passphrase for an encrypted private key PEM. Resolved by the host; never logged. */
38
+ readonly keyPassword?: string;
39
+ }
40
+ /** The outcome of {@link decryptEnvelope}. */
41
+ export interface DecryptEnvelopeResult {
42
+ /** The envelope with every `xenc:EncryptedData` replaced by its plaintext. */
43
+ readonly xml: string;
44
+ /** The plaintext of each decrypted block, in the order the `ReferenceList` named them. */
45
+ readonly decrypted: readonly string[];
46
+ }
47
+ /**
48
+ * Encrypts the parts `entry` names and, when `entry.encryptSymmetricKey`, appends one
49
+ * `<xenc:EncryptedKey>` to the `wsse:Security` block addressed to `resolved.actor`.
50
+ *
51
+ * The `EncryptedKey` is *appended*, so its position in the header matches the entry's position
52
+ * in the configuration: `[encryption, signature]` puts it before the `ds:Signature` (which
53
+ * therefore covers it), `[signature, encryption]` puts it after.
54
+ *
55
+ * @param doc the envelope, already carrying its `wsse:Security` header
56
+ * @param entry the encryption configuration
57
+ * @param resolved the keystore alias whose certificate the message is encrypted to
58
+ * @param ctx the injected entropy/uuid capabilities
59
+ * @throws WssError `wss-not-an-envelope`, `wss-part-missing`, `wss-ski-missing`
60
+ */
61
+ export declare function encryptEnvelope(doc: Document, entry: WssEncryptionEntry, resolved: ResolvedEncryptionKey, ctx: WssContext): void;
62
+ /**
63
+ * Decrypts every `xenc:EncryptedData` in `xml` that `alias`'s private key can open, restoring
64
+ * the original `Content`/`Element` in place and removing the consumed `xenc:EncryptedKey` from
65
+ * the `wsse:Security` header.
66
+ *
67
+ * The `EncryptedKey` whose `ds:KeyInfo` names `alias`'s certificate is preferred; when none
68
+ * does (a key identifier form this build cannot compute, say), every `EncryptedKey` is tried
69
+ * and the first one that unwraps wins. A key that does not fit fails closed.
70
+ *
71
+ * @param xml the encrypted envelope
72
+ * @param options the keystore alias to decrypt with
73
+ * @returns the restored envelope and the plaintext of each decrypted block
74
+ * @throws WssError `wss-decrypt-failed`, `wss-algorithm-unsupported`, `wss-decryption-key-missing`
75
+ */
76
+ export declare function decryptEnvelope(xml: string, options: DecryptEnvelopeOptions): DecryptEnvelopeResult;