@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,77 @@
1
+ /**
2
+ * Masks secret-bearing values before they cross IPC into the renderer (HTTP log, and later
3
+ * history — Task 24 reuses these helpers). The engine's own in-memory `HttpExchange` stays
4
+ * unredacted; everything built for the wire (`engine-wire.ts`) goes through here unless the
5
+ * session's "show secrets" flag is on.
6
+ */
7
+ /** The exact marker text every redaction helper below writes in place of a masked secret. */
8
+ export declare const REDACTED_MARKER = "<redacted>";
9
+ /** True when `text` contains the redaction marker — i.e. it was produced by a `redact*` helper. */
10
+ export declare function containsRedaction(text: string): boolean;
11
+ /** Masks the values of sensitive headers in a plain header map, case-insensitively. */
12
+ export declare function redactHeaders(headers: Readonly<Record<string, string>>, opts?: {
13
+ show?: boolean;
14
+ }): Record<string, string>;
15
+ /**
16
+ * Masks the values of sensitive headers in a `[name, value]` pair list — the raw, duplicate-
17
+ * preserving header form (`Set-Cookie` appears once per cookie there, so this list is exactly
18
+ * where a naive copy leaks by default).
19
+ */
20
+ export declare function redactHeaderPairs(pairs: readonly (readonly [string, string])[], opts?: {
21
+ show?: boolean;
22
+ }): [string, string][];
23
+ /**
24
+ * Masks the value of every sensitive query parameter in `url`, plus any parameter named in
25
+ * `extraParams` — which is how the send path masks the exact parameter an API key is configured to
26
+ * travel in, whatever it is called.
27
+ *
28
+ * A URL that cannot be parsed is returned unchanged: it is already not a URL, and mangling it would
29
+ * only hide what is wrong with it.
30
+ */
31
+ export declare function redactUrl(url: string, opts?: {
32
+ show?: boolean;
33
+ extraParams?: readonly string[];
34
+ }): string;
35
+ /**
36
+ * The redaction pass for a response's attachment list. Nothing in `{index, contentId,
37
+ * contentType, size, name}` carries a secret today, so this is a copy — it exists as the one
38
+ * call site so that when a part's `Content-Disposition` (or a signed-URL-shaped name) does need
39
+ * masking, it is masked everywhere the list is built, including on a show-secrets re-render.
40
+ * It takes no `show` flag: both callers (`toResponseAttachmentWires` and
41
+ * `redactExchangeSummary`) decide for themselves whether to run it, because the summary built
42
+ * with `{ show: true }` is the unredacted master the `ExchangeCache` keeps.
43
+ */
44
+ export declare function redactResponseAttachments<T>(attachments: readonly T[]): T[];
45
+ /**
46
+ * Masks the text content of `wsse:Password` elements (any namespace prefix) in raw XML — except
47
+ * a `#PasswordDigest` value, which is a hash, not a secret, and must reach the wire intact.
48
+ */
49
+ export declare function redactXml(text: string, opts?: {
50
+ show?: boolean;
51
+ }): string;
52
+ /** Body keys whose values are masked in JSON and form bodies, compared case-insensitively. */
53
+ export declare const SECRET_BODY_KEYS: readonly string[];
54
+ /**
55
+ * Masks secret-keyed values in a JSON (`application/json`, `+json`) or urlencoded form body;
56
+ * anything else, or JSON that does not parse, is returned as is.
57
+ */
58
+ export declare function redactStructuredBody(text: string, contentType: string | undefined, opts?: {
59
+ show?: boolean;
60
+ }): string;
61
+ /**
62
+ * Redacts a raw HTTP message **on its bytes**, never assuming the whole message is UTF-8 text.
63
+ *
64
+ * The buffer is split at the first `\r\n\r\n` (falling back to `\n\n`); only the header block is
65
+ * decoded — as latin1, which is byte-preserving for the ASCII header grammar — so sensitive
66
+ * header lines can be masked while their original line terminators are re-joined verbatim. The
67
+ * body is decoded and masked (`wsse:Password`) only when the headers say it is uncompressed
68
+ * SOAP/XML/plain text; otherwise its bytes are copied through untouched, so a gzip or binary
69
+ * body round-trips byte-identically.
70
+ *
71
+ * `opts.encoding` says whether `input`/the return value is `'text'` (default) or a `'base64'`
72
+ * string, so callers can pass the wire's `rawRequestBase64`/`rawResponseBase64` straight through.
73
+ */
74
+ export declare function redactRawHttp(input: string, opts?: {
75
+ show?: boolean;
76
+ encoding?: 'text' | 'base64';
77
+ }): string;
@@ -0,0 +1,328 @@
1
+ /**
2
+ * Masks secret-bearing values before they cross IPC into the renderer (HTTP log, and later
3
+ * history — Task 24 reuses these helpers). The engine's own in-memory `HttpExchange` stays
4
+ * unredacted; everything built for the wire (`engine-wire.ts`) goes through here unless the
5
+ * session's "show secrets" flag is on.
6
+ */
7
+ const REDACTED = '<redacted>';
8
+ /** The exact marker text every redaction helper below writes in place of a masked secret. */
9
+ export const REDACTED_MARKER = REDACTED;
10
+ /** True when `text` contains the redaction marker — i.e. it was produced by a `redact*` helper. */
11
+ export function containsRedaction(text) {
12
+ return text.includes(REDACTED_MARKER);
13
+ }
14
+ /** Header names (case-insensitive) whose value is always masked. */
15
+ const SENSITIVE_HEADERS = new Set(['authorization', 'proxy-authorization', 'cookie', 'set-cookie', 'x-api-key']);
16
+ /** Masks the values of sensitive headers in a plain header map, case-insensitively. */
17
+ export function redactHeaders(headers, opts) {
18
+ if (opts?.show) {
19
+ return { ...headers };
20
+ }
21
+ const result = {};
22
+ for (const [name, value] of Object.entries(headers)) {
23
+ result[name] = SENSITIVE_HEADERS.has(name.toLowerCase()) ? REDACTED : value;
24
+ }
25
+ return result;
26
+ }
27
+ /**
28
+ * Masks the values of sensitive headers in a `[name, value]` pair list — the raw, duplicate-
29
+ * preserving header form (`Set-Cookie` appears once per cookie there, so this list is exactly
30
+ * where a naive copy leaks by default).
31
+ */
32
+ export function redactHeaderPairs(pairs, opts) {
33
+ const show = opts?.show ?? false;
34
+ return pairs.map(([name, value]) => [name, !show && SENSITIVE_HEADERS.has(name.toLowerCase()) ? REDACTED : value]);
35
+ }
36
+ /**
37
+ * Query-parameter names (case-insensitive) whose value is masked wherever a URL is logged, stored
38
+ * or shown. An API key that travels in the query string is as much a credential as one in a header,
39
+ * and a URL reaches more places than a header does: the HTTP log, history, the cURL export, a
40
+ * problem message.
41
+ */
42
+ const SENSITIVE_QUERY_PARAMS = new Set([
43
+ 'api_key',
44
+ 'apikey',
45
+ 'api-key',
46
+ 'access_token',
47
+ 'token',
48
+ 'key',
49
+ 'auth',
50
+ 'signature',
51
+ 'sig',
52
+ ]);
53
+ /**
54
+ * Masks the value of every sensitive query parameter in `url`, plus any parameter named in
55
+ * `extraParams` — which is how the send path masks the exact parameter an API key is configured to
56
+ * travel in, whatever it is called.
57
+ *
58
+ * A URL that cannot be parsed is returned unchanged: it is already not a URL, and mangling it would
59
+ * only hide what is wrong with it.
60
+ */
61
+ export function redactUrl(url, opts) {
62
+ if (opts?.show === true) {
63
+ return url;
64
+ }
65
+ let parsed;
66
+ try {
67
+ parsed = new URL(url);
68
+ }
69
+ catch {
70
+ return url;
71
+ }
72
+ const extra = new Set((opts?.extraParams ?? []).map((name) => name.toLowerCase()));
73
+ let changed = false;
74
+ if (parsed.password !== '') {
75
+ parsed.password = REDACTED;
76
+ changed = true;
77
+ }
78
+ for (const name of [...parsed.searchParams.keys()]) {
79
+ const lower = name.toLowerCase();
80
+ if (SENSITIVE_QUERY_PARAMS.has(lower) || extra.has(lower)) {
81
+ parsed.searchParams.set(name, REDACTED);
82
+ changed = true;
83
+ }
84
+ }
85
+ // `URL` normalises as it serialises (a `+` becomes `%2B`, a default port disappears), so an
86
+ // untouched URL is returned as it came in rather than as the parser would have written it.
87
+ return changed ? parsed.toString() : url;
88
+ }
89
+ /**
90
+ * The redaction pass for a response's attachment list. Nothing in `{index, contentId,
91
+ * contentType, size, name}` carries a secret today, so this is a copy — it exists as the one
92
+ * call site so that when a part's `Content-Disposition` (or a signed-URL-shaped name) does need
93
+ * masking, it is masked everywhere the list is built, including on a show-secrets re-render.
94
+ * It takes no `show` flag: both callers (`toResponseAttachmentWires` and
95
+ * `redactExchangeSummary`) decide for themselves whether to run it, because the summary built
96
+ * with `{ show: true }` is the unredacted master the `ExchangeCache` keeps.
97
+ */
98
+ export function redactResponseAttachments(attachments) {
99
+ return [...attachments];
100
+ }
101
+ /**
102
+ * The start of an (optionally namespace-prefixed) `<Password` open tag, and a matching close tag.
103
+ *
104
+ * Used by a scanner rather than as one `/(<…Password[^>]*>)([\\s\\S]*?)(<\\/…Password>)/gi`: that
105
+ * pattern's lazy body backtracks to the end of the text for every open tag that has no close tag,
106
+ * which is O(n²) — and this runs over a *response*, so the text is whatever server answered.
107
+ */
108
+ const PASSWORD_OPEN_RE = /<(?:[\w-]+:)?Password\b/gi;
109
+ const PASSWORD_CLOSE_RE = /<\/(?:[\w-]+:)?Password>/gi;
110
+ /** Matches a `Type` attribute in a `Password` open tag, capturing its value. */
111
+ const TYPE_ATTR_RE = /\bType\s*=\s*"([^"]*)"|\bType\s*=\s*'([^']*)'/i;
112
+ /**
113
+ * Whether a `<Password>` open tag's `Type` attribute marks the value as a `#PasswordDigest` —
114
+ * not a secret, and never masked. Any other `Type` (including the WSS `#PasswordText` profile
115
+ * URI) or a missing `Type` attribute is treated as a plaintext password and masked.
116
+ */
117
+ function isPasswordDigest(openTag) {
118
+ const match = TYPE_ATTR_RE.exec(openTag);
119
+ const value = match?.[1] ?? match?.[2];
120
+ return value !== undefined && value.endsWith('#PasswordDigest');
121
+ }
122
+ /**
123
+ * Masks the text content of `wsse:Password` elements (any namespace prefix) in raw XML — except
124
+ * a `#PasswordDigest` value, which is a hash, not a secret, and must reach the wire intact.
125
+ */
126
+ export function redactXml(text, opts) {
127
+ if (opts?.show) {
128
+ return text;
129
+ }
130
+ // One forward pass. Each open tag is paired with the first close tag after it (what the lazy
131
+ // match did), and the scan resumes past that close tag. An open tag with no `>` or no close tag
132
+ // ends the pass: nothing later could pair either, which is exactly when the regex found nothing.
133
+ const open = new RegExp(PASSWORD_OPEN_RE.source, 'gi');
134
+ const close = new RegExp(PASSWORD_CLOSE_RE.source, 'gi');
135
+ let out = '';
136
+ let from = 0;
137
+ for (;;) {
138
+ open.lastIndex = from;
139
+ const opened = open.exec(text);
140
+ if (opened === null) {
141
+ break;
142
+ }
143
+ const tagEnd = text.indexOf('>', opened.index + opened[0].length);
144
+ if (tagEnd === -1) {
145
+ break;
146
+ }
147
+ close.lastIndex = tagEnd + 1;
148
+ const closed = close.exec(text);
149
+ if (closed === null) {
150
+ break;
151
+ }
152
+ const openTag = text.slice(opened.index, tagEnd + 1);
153
+ const content = isPasswordDigest(openTag) ? text.slice(tagEnd + 1, closed.index) : REDACTED;
154
+ out += `${text.slice(from, tagEnd + 1)}${content}${closed[0]}`;
155
+ from = closed.index + closed[0].length;
156
+ }
157
+ return out + text.slice(from);
158
+ }
159
+ /** Body keys whose values are masked in JSON and form bodies, compared case-insensitively. */
160
+ export const SECRET_BODY_KEYS = [
161
+ 'password',
162
+ 'passwd',
163
+ 'secret',
164
+ 'token',
165
+ 'access_token',
166
+ 'refresh_token',
167
+ 'id_token',
168
+ 'client_secret',
169
+ 'api_key',
170
+ 'apikey',
171
+ 'authorization',
172
+ ];
173
+ const SECRET_BODY_KEY_SET = new Set(SECRET_BODY_KEYS);
174
+ function mediaTypeOf(contentType) {
175
+ return (contentType.split(';')[0] ?? '').trim().toLowerCase();
176
+ }
177
+ function isJsonType(contentType) {
178
+ const type = mediaTypeOf(contentType);
179
+ return type === 'application/json' || type.endsWith('+json');
180
+ }
181
+ function isFormType(contentType) {
182
+ return mediaTypeOf(contentType) === 'application/x-www-form-urlencoded';
183
+ }
184
+ /** A copy with every secret-keyed value replaced whole — a nested object or array under one too. */
185
+ function maskJson(value) {
186
+ if (Array.isArray(value)) {
187
+ return value.map(maskJson);
188
+ }
189
+ if (value !== null && typeof value === 'object') {
190
+ return Object.fromEntries(Object.entries(value).map(([key, inner]) => [
191
+ key,
192
+ SECRET_BODY_KEY_SET.has(key.toLowerCase()) ? REDACTED : maskJson(inner),
193
+ ]));
194
+ }
195
+ return value;
196
+ }
197
+ /** The indentation of the input's second line, so a pretty body stays pretty and a compact one compact. */
198
+ function indentOf(text) {
199
+ const match = /\n( +)\S/.exec(text);
200
+ return match?.[1]?.length;
201
+ }
202
+ function maskFormPair(pair) {
203
+ const eq = pair.indexOf('=');
204
+ const rawKey = eq < 0 ? pair : pair.slice(0, eq);
205
+ let key;
206
+ try {
207
+ key = decodeURIComponent(rawKey.replace(/\+/g, ' '));
208
+ }
209
+ catch {
210
+ key = rawKey;
211
+ }
212
+ return SECRET_BODY_KEY_SET.has(key.toLowerCase()) ? `${rawKey}=${encodeURIComponent(REDACTED)}` : pair;
213
+ }
214
+ /**
215
+ * Masks secret-keyed values in a JSON (`application/json`, `+json`) or urlencoded form body;
216
+ * anything else, or JSON that does not parse, is returned as is.
217
+ */
218
+ export function redactStructuredBody(text, contentType, opts) {
219
+ if (opts?.show === true || contentType === undefined) {
220
+ return text;
221
+ }
222
+ if (isJsonType(contentType)) {
223
+ let parsed;
224
+ try {
225
+ parsed = JSON.parse(text);
226
+ }
227
+ catch {
228
+ return text;
229
+ }
230
+ return JSON.stringify(maskJson(parsed), null, indentOf(text));
231
+ }
232
+ if (isFormType(contentType)) {
233
+ return text.split('&').map(maskFormPair).join('&');
234
+ }
235
+ return text;
236
+ }
237
+ /** Masks a single raw `name: value` header line (no terminator), case-insensitively. */
238
+ function redactHeaderLine(line) {
239
+ const idx = line.indexOf(':');
240
+ if (idx < 0) {
241
+ return line;
242
+ }
243
+ const name = line.slice(0, idx).trim().toLowerCase();
244
+ if (!SENSITIVE_HEADERS.has(name)) {
245
+ return line;
246
+ }
247
+ return `${line.slice(0, idx + 1)} ${REDACTED}`;
248
+ }
249
+ /** Content types whose body is text we may safely decode, mask and re-encode. */
250
+ const TEXTUAL_CONTENT_TYPES = ['text/xml', 'application/soap+xml', 'application/xml', 'text/plain'];
251
+ /** Reads the (first) value of `name` out of an already-decoded header block. */
252
+ function headerValue(headerBlock, name) {
253
+ for (const line of headerBlock.split(/\r?\n/)) {
254
+ const idx = line.indexOf(':');
255
+ if (idx > 0 && line.slice(0, idx).trim().toLowerCase() === name) {
256
+ return line.slice(idx + 1).trim();
257
+ }
258
+ }
259
+ return undefined;
260
+ }
261
+ /**
262
+ * Whether the body bytes may be decoded as text and masked: only for a SOAP/XML/plain content
263
+ * type, and never when a `content-encoding` says the bytes are compressed (decoding those as
264
+ * text would corrupt them irrecoverably).
265
+ */
266
+ function bodyIsIdentityEncoded(headerBlock) {
267
+ const encoding = headerValue(headerBlock, 'content-encoding');
268
+ return encoding === undefined || encoding.length === 0 || encoding.toLowerCase() === 'identity';
269
+ }
270
+ function bodyIsMaskableText(headerBlock) {
271
+ if (!bodyIsIdentityEncoded(headerBlock)) {
272
+ return false;
273
+ }
274
+ const contentType = headerValue(headerBlock, 'content-type')?.toLowerCase() ?? '';
275
+ return TEXTUAL_CONTENT_TYPES.some((type) => contentType.startsWith(type));
276
+ }
277
+ /**
278
+ * Redacts a raw HTTP message **on its bytes**, never assuming the whole message is UTF-8 text.
279
+ *
280
+ * The buffer is split at the first `\r\n\r\n` (falling back to `\n\n`); only the header block is
281
+ * decoded — as latin1, which is byte-preserving for the ASCII header grammar — so sensitive
282
+ * header lines can be masked while their original line terminators are re-joined verbatim. The
283
+ * body is decoded and masked (`wsse:Password`) only when the headers say it is uncompressed
284
+ * SOAP/XML/plain text; otherwise its bytes are copied through untouched, so a gzip or binary
285
+ * body round-trips byte-identically.
286
+ *
287
+ * `opts.encoding` says whether `input`/the return value is `'text'` (default) or a `'base64'`
288
+ * string, so callers can pass the wire's `rawRequestBase64`/`rawResponseBase64` straight through.
289
+ */
290
+ export function redactRawHttp(input, opts) {
291
+ if (opts?.show) {
292
+ return input;
293
+ }
294
+ const isBase64 = opts?.encoding === 'base64';
295
+ const buffer = isBase64 ? Buffer.from(input, 'base64') : Buffer.from(input, 'utf8');
296
+ let separator = '\r\n\r\n';
297
+ let splitIndex = buffer.indexOf(separator);
298
+ if (splitIndex < 0) {
299
+ separator = '\n\n';
300
+ splitIndex = buffer.indexOf(separator);
301
+ }
302
+ const headerEnd = splitIndex >= 0 ? splitIndex : buffer.length;
303
+ const headerBlock = buffer.subarray(0, headerEnd).toString('latin1');
304
+ const bodyBytes = splitIndex >= 0 ? buffer.subarray(headerEnd + separator.length) : Buffer.alloc(0);
305
+ // Split keeping the terminators so `\r\n` and `\n` mixes survive the round trip verbatim.
306
+ const redactedHeaderBlock = headerBlock
307
+ .split(/(\r\n|\n)/)
308
+ .map((part, index) => (index % 2 === 0 ? redactHeaderLine(part) : part))
309
+ .join('');
310
+ // XML first (a `wsse:Password` element), then JSON and form bodies by key. A compressed body is
311
+ // left alone: its bytes are not the text either pass reads.
312
+ let bodyText = bodyIsMaskableText(headerBlock) ? redactXml(bodyBytes.toString('utf8')) : undefined;
313
+ const contentType = headerValue(headerBlock, 'content-type');
314
+ if (contentType !== undefined && bodyIsIdentityEncoded(headerBlock)) {
315
+ const before = bodyText ?? bodyBytes.toString('utf8');
316
+ const structured = redactStructuredBody(before, contentType);
317
+ if (structured !== before) {
318
+ bodyText = structured;
319
+ }
320
+ }
321
+ const redactedBody = bodyText === undefined ? bodyBytes : Buffer.from(bodyText, 'utf8');
322
+ const parts = [Buffer.from(redactedHeaderBlock, 'latin1')];
323
+ if (splitIndex >= 0) {
324
+ parts.push(Buffer.from(separator, 'latin1'), redactedBody);
325
+ }
326
+ const out = Buffer.concat(parts);
327
+ return isBase64 ? out.toString('base64') : out.toString('utf8');
328
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Masks known secret *values* wherever they turn up. The pattern-based helpers beside this one
3
+ * know where a secret usually sits (an `Authorization` header, a `wsse:Password`); a runner also
4
+ * knows the values themselves, because it just read them from the environment, so it can catch the
5
+ * one that was interpolated somewhere no pattern looks — a query parameter, an assertion's
6
+ * "actual" text, an error message.
7
+ */
8
+ /**
9
+ * Builds a function that replaces every occurrence of `values` — and the base64, percent-, form-,
10
+ * XML- and JSON-escaped forms of each — with the redaction marker.
11
+ */
12
+ export declare function createSecretMasker(values: readonly string[]): (text: string) => string;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Masks known secret *values* wherever they turn up. The pattern-based helpers beside this one
3
+ * know where a secret usually sits (an `Authorization` header, a `wsse:Password`); a runner also
4
+ * knows the values themselves, because it just read them from the environment, so it can catch the
5
+ * one that was interpolated somewhere no pattern looks — a query parameter, an assertion's
6
+ * "actual" text, an error message.
7
+ */
8
+ import { REDACTED_MARKER } from './index.js';
9
+ /** Below this length a value is too likely to occur by chance; masking it would shred the text. */
10
+ const MIN_MASKED_LENGTH = 4;
11
+ /**
12
+ * The forms a value takes on the wire besides itself — each one the engine (or its XML serializer,
13
+ * or `URLSearchParams`) really writes somewhere:
14
+ * - percent-encoded, as `encodeURIComponent` puts it in a URL;
15
+ * - `application/x-www-form-urlencoded`, both as `rest/body.ts`'s `formEncode` writes a form body
16
+ * and as `URLSearchParams` writes an OAuth2 token request (they differ on `~`);
17
+ * - XML text with the three entities `entitizeValue` and a DOM serializer emit (the SOAP envelope,
18
+ * a WS-Security `wsse:Password`), and with all five, as `escapeForLanguage` escapes an XML body;
19
+ * - a JSON string's content, as `escapeForLanguage` escapes a JSON body or `JSON.stringify` writes
20
+ * an error detail.
21
+ * A server echoing the value back is free to use any of them too.
22
+ */
23
+ function encodedForms(value) {
24
+ const xml3 = value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
25
+ return [
26
+ encodeURIComponent(value),
27
+ encodeURIComponent(value)
28
+ .replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)
29
+ .replace(/%20/g, '+'),
30
+ new URLSearchParams({ v: value }).toString().slice(2),
31
+ xml3,
32
+ xml3.replace(/"/g, '&quot;').replace(/'/g, '&apos;'),
33
+ JSON.stringify(value).slice(1, -1),
34
+ ];
35
+ }
36
+ /**
37
+ * Builds a function that replaces every occurrence of `values` — and the base64, percent-, form-,
38
+ * XML- and JSON-escaped forms of each — with the redaction marker.
39
+ */
40
+ export function createSecretMasker(values) {
41
+ const plain = values.filter((value) => value.length >= MIN_MASKED_LENGTH);
42
+ const needles = new Set();
43
+ for (const value of plain) {
44
+ needles.add(value);
45
+ for (const form of encodedForms(value)) {
46
+ // An escaped form is never shorter than the value, but the floor is kept explicit per needle.
47
+ if (form.length >= MIN_MASKED_LENGTH) {
48
+ needles.add(form);
49
+ }
50
+ }
51
+ }
52
+ // Longest first: a value that is a prefix of another must not leave the other's tail behind.
53
+ const ordered = [...needles].sort((a, b) => b.length - a.length);
54
+ return (text) => {
55
+ let out = maskBasicCredentials(text, plain);
56
+ for (const needle of ordered) {
57
+ out = out.split(needle).join(REDACTED_MARKER);
58
+ }
59
+ return out;
60
+ };
61
+ }
62
+ /** A Basic credential is base64 of `user:password`, so the password never appears literally. */
63
+ function maskBasicCredentials(text, values) {
64
+ return text.replace(/\bBasic\s+([A-Za-z0-9+/=]{8,})/g, (whole, encoded) => {
65
+ const decoded = Buffer.from(encoded, 'base64').toString('utf8');
66
+ return values.some((value) => decoded.includes(value)) ? `Basic ${REDACTED_MARKER}` : whole;
67
+ });
68
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Working out which credentials a REST request uses, and turning them into what goes on the wire.
3
+ *
4
+ * Two halves, both pure. {@link resolveAuthChain} walks the inheritance chain — request, then each
5
+ * folder outwards, then the API — and answers with the first configuration that is not `inherit`.
6
+ * {@link applyAuth} takes credentials the host has already resolved (values, not `secretRef`s) and
7
+ * says what to add to the headers or the query string.
8
+ *
9
+ * Basic and NTLM are deliberately *not* applied here: they may need a challenge round trip, which
10
+ * is the transport's job (`http/auth/*`), and this module never touches the network.
11
+ */
12
+ import type { AuthConfig } from '../project/model.js';
13
+ import type { SendAuth } from '../types.js';
14
+ import type { KeyValueEntry } from './model.js';
15
+ /**
16
+ * The credentials that actually apply, given a request's own configuration followed by its
17
+ * folders from the inside out and finally its API's.
18
+ *
19
+ * `inherit` means "ask the next one up", and an `undefined` link — a folder or API that configures
20
+ * nothing — is the same thing. Running out of chain means `none`: an API with no credentials
21
+ * authenticates its requests with none, rather than with whatever a sibling API happens to use.
22
+ */
23
+ export declare function resolveAuthChain(chain: readonly (AuthConfig | undefined)[]): AuthConfig;
24
+ /** Which link of a chain supplied the effective credentials, for the editor to explain. */
25
+ export declare function resolveAuthChainIndex(chain: readonly (AuthConfig | undefined)[]): number;
26
+ /** What {@link applyAuth} adds to a request. */
27
+ export interface AppliedAuth {
28
+ /** Headers to merge in. A header the request set itself wins over these (see `rest/send.ts`). */
29
+ readonly headers: Readonly<Record<string, string>>;
30
+ /** Query rows to append, for an API key that travels in the query string. */
31
+ readonly query: readonly KeyValueEntry[];
32
+ /**
33
+ * Credentials the transport has to handle itself, because they may need a challenge round trip:
34
+ * Basic and NTLM. Passed through to `sendHttp` untouched.
35
+ */
36
+ readonly transportAuth?: SendAuth;
37
+ }
38
+ /**
39
+ * Turns resolved credentials into headers, query rows, or a transport handoff.
40
+ *
41
+ * A Basic credential marked preemptive is still handed to the transport rather than encoded here,
42
+ * so there is exactly one implementation of the header and one of the challenge flow.
43
+ */
44
+ export declare function applyAuth(auth: SendAuth | undefined): AppliedAuth;
45
+ /**
46
+ * Whether a configuration still needs a secret the host has not resolved — a token, key or client
47
+ * secret whose reference is missing or empty.
48
+ *
49
+ * Used to tell "not configured yet" (a request being written) from "configured and broken" (a
50
+ * reference whose secret is gone, e.g. a project opened on another machine), which are different
51
+ * problems with different fixes.
52
+ */
53
+ export declare function missingSecretRef(auth: AuthConfig): 'tokenRef' | 'valueRef' | 'clientSecretRef' | undefined;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Working out which credentials a REST request uses, and turning them into what goes on the wire.
3
+ *
4
+ * Two halves, both pure. {@link resolveAuthChain} walks the inheritance chain — request, then each
5
+ * folder outwards, then the API — and answers with the first configuration that is not `inherit`.
6
+ * {@link applyAuth} takes credentials the host has already resolved (values, not `secretRef`s) and
7
+ * says what to add to the headers or the query string.
8
+ *
9
+ * Basic and NTLM are deliberately *not* applied here: they may need a challenge round trip, which
10
+ * is the transport's job (`http/auth/*`), and this module never touches the network.
11
+ */
12
+ /** Nothing configured anywhere in a chain means no credentials at all. */
13
+ const NO_AUTH = { type: 'none' };
14
+ /**
15
+ * The credentials that actually apply, given a request's own configuration followed by its
16
+ * folders from the inside out and finally its API's.
17
+ *
18
+ * `inherit` means "ask the next one up", and an `undefined` link — a folder or API that configures
19
+ * nothing — is the same thing. Running out of chain means `none`: an API with no credentials
20
+ * authenticates its requests with none, rather than with whatever a sibling API happens to use.
21
+ */
22
+ export function resolveAuthChain(chain) {
23
+ for (const link of chain) {
24
+ if (link !== undefined && link.type !== 'inherit') {
25
+ return link;
26
+ }
27
+ }
28
+ return NO_AUTH;
29
+ }
30
+ /** Which link of a chain supplied the effective credentials, for the editor to explain. */
31
+ export function resolveAuthChainIndex(chain) {
32
+ return chain.findIndex((link) => link !== undefined && link.type !== 'inherit');
33
+ }
34
+ /**
35
+ * Turns resolved credentials into headers, query rows, or a transport handoff.
36
+ *
37
+ * A Basic credential marked preemptive is still handed to the transport rather than encoded here,
38
+ * so there is exactly one implementation of the header and one of the challenge flow.
39
+ */
40
+ export function applyAuth(auth) {
41
+ if (auth === undefined) {
42
+ return { headers: {}, query: [] };
43
+ }
44
+ switch (auth.type) {
45
+ case 'bearer':
46
+ return { headers: { Authorization: `${auth.scheme ?? 'Bearer'} ${auth.token}` }, query: [] };
47
+ case 'oauth2':
48
+ return { headers: { Authorization: `Bearer ${auth.accessToken}` }, query: [] };
49
+ case 'api-key':
50
+ return auth.in === 'header'
51
+ ? { headers: { [auth.name]: auth.value }, query: [] }
52
+ : { headers: {}, query: [{ name: auth.name, value: auth.value, enabled: true }] };
53
+ default:
54
+ return { headers: {}, query: [], transportAuth: auth };
55
+ }
56
+ }
57
+ /**
58
+ * Whether a configuration still needs a secret the host has not resolved — a token, key or client
59
+ * secret whose reference is missing or empty.
60
+ *
61
+ * Used to tell "not configured yet" (a request being written) from "configured and broken" (a
62
+ * reference whose secret is gone, e.g. a project opened on another machine), which are different
63
+ * problems with different fixes.
64
+ */
65
+ export function missingSecretRef(auth) {
66
+ switch (auth.type) {
67
+ case 'bearer':
68
+ return auth.tokenRef === undefined || auth.tokenRef === '' ? 'tokenRef' : undefined;
69
+ case 'api-key':
70
+ return auth.valueRef === undefined || auth.valueRef === '' ? 'valueRef' : undefined;
71
+ case 'oauth2':
72
+ // A public client legitimately has no secret, so only a confidential one is incomplete
73
+ // without it: `clientAuth: 'basic'` is the confidential form.
74
+ return auth.clientAuth === 'basic' && (auth.clientSecretRef === undefined || auth.clientSecretRef === '')
75
+ ? 'clientSecretRef'
76
+ : undefined;
77
+ default:
78
+ return undefined;
79
+ }
80
+ }