@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,245 @@
1
+ /**
2
+ * Interoperability convenience: export a send as a `curl` command, and parse a pasted `curl` command
3
+ * back into a partial send input.
4
+ *
5
+ * {@link toCurl} describes a request in `curl`'s own terms — a method, a URL, headers and one of the
6
+ * body shapes `curl` has a flag for — and knows nothing about SOAP or REST. Each protocol builds that
7
+ * description from its own send input ({@link soapToCurl} here, `restToCurl` in `rest/curl.ts`), so the
8
+ * quoting, the line continuations and the two shells have one implementation rather than two.
9
+ */
10
+ import { soapActionHeaders } from '../soap/soap-action.js';
11
+ import { findHeredoc, findHereString } from './heredoc.js';
12
+ import { expandBundles, takesNoValue } from './curl-flags.js';
13
+ /** Escapes a value for a POSIX single-quoted shell string. */
14
+ function posixQuote(value) {
15
+ return `'${value.replace(/'/g, "'\\''")}'`;
16
+ }
17
+ /** Escapes a value for a PowerShell single-quoted string. */
18
+ function powershellQuote(value) {
19
+ return `'${value.replace(/'/g, "''")}'`;
20
+ }
21
+ /** Quotes one argument for `shell`; shared with the gRPC command renderer so both quote alike. */
22
+ export function quoteForShell(value, shell) {
23
+ return shell === 'powershell' ? powershellQuote(value) : posixQuote(value);
24
+ }
25
+ /** The path a `@file` argument names, or a placeholder when no file has been chosen yet. */
26
+ function filePath(path) {
27
+ return path.length > 0 ? path : '/path/to/file';
28
+ }
29
+ /**
30
+ * Builds a `curl` command from {@link CurlCommand}.
31
+ *
32
+ * A raw body travels as a heredoc (POSIX) or a here-string (PowerShell) rather than as a quoted
33
+ * argument: it may contain newlines, quotes and anything else, and a heredoc is the one form that
34
+ * carries all of it unchanged — which is also what {@link fromCurl} reads back.
35
+ */
36
+ export function toCurl(command, options = {}) {
37
+ const shell = options.shell ?? 'posix';
38
+ const powershell = shell === 'powershell';
39
+ const quote = powershell ? powershellQuote : posixQuote;
40
+ const continuation = powershell ? '`' : '\\';
41
+ const program = powershell ? 'curl.exe' : 'curl';
42
+ const body = command.body ?? { kind: 'none' };
43
+ // The method and the URL stay on the first line together: that is the shape everyone recognises,
44
+ // and it is what makes the rest of the command read as a list of options rather than of arguments.
45
+ const args = [`--request ${command.method} ${quote(command.url)}`];
46
+ for (const header of command.headers) {
47
+ args.push(`--header ${quote(`${header.name}: ${header.value}`)}`);
48
+ }
49
+ if (command.basic !== undefined) {
50
+ args.push(`--user ${quote(`${command.basic.username}:${command.basic.password}`)}`);
51
+ }
52
+ if (command.insecure === true) {
53
+ args.push('--insecure');
54
+ }
55
+ if (command.followRedirects === true) {
56
+ args.push('--location');
57
+ if (command.maxRedirects !== undefined) {
58
+ args.push(`--max-redirs ${String(command.maxRedirects)}`);
59
+ }
60
+ }
61
+ switch (body.kind) {
62
+ case 'form':
63
+ for (const field of body.fields) {
64
+ args.push(`--data-urlencode ${quote(`${field.name}=${field.value}`)}`);
65
+ }
66
+ break;
67
+ case 'multipart':
68
+ for (const part of body.parts) {
69
+ const value = part.kind === 'file' ? `${part.name}=@${filePath(part.path)}` : `${part.name}=${part.value}`;
70
+ const typed = part.contentType !== undefined ? `${value};type=${part.contentType}` : value;
71
+ args.push(`--form ${quote(typed)}`);
72
+ }
73
+ break;
74
+ case 'binary':
75
+ args.push(`--data-binary ${quote(`@${filePath(body.path)}`)}`);
76
+ break;
77
+ case 'raw':
78
+ args.push(powershell ? `--data-binary @'` : `--data-binary @- <<'EOF'`);
79
+ break;
80
+ default:
81
+ break;
82
+ }
83
+ const lines = [];
84
+ const last = args.length - 1;
85
+ args.forEach((argument, index) => {
86
+ const prefix = index === 0 ? `${program} ` : ' ';
87
+ // The heredoc opener must be the last argument, and takes no continuation: its body follows.
88
+ const tail = index === last ? '' : ` ${continuation}`;
89
+ lines.push(`${prefix}${argument}${tail}`);
90
+ });
91
+ if (body.kind === 'raw') {
92
+ lines.push(body.text, powershell ? `'@` : 'EOF');
93
+ }
94
+ return lines.join('\n');
95
+ }
96
+ /** Builds a `curl` command reproducing a SOAP send — headers, envelope and all. */
97
+ export function soapToCurl(input, options = {}) {
98
+ const actionHeaders = soapActionHeaders(input.soapVersion, input.soapAction, input.skipSoapAction !== undefined ? { skipSoapAction: input.skipSoapAction } : {});
99
+ const contentType = input.contentType ?? input.headers?.['Content-Type'] ?? actionHeaders.contentType;
100
+ const headers = [{ name: 'Content-Type', value: contentType }];
101
+ if (input.soapVersion === '1.1' && input.headers?.['SOAPAction'] === undefined) {
102
+ headers.push({ name: 'SOAPAction', value: `"${input.soapAction ?? ''}"` });
103
+ }
104
+ for (const [name, value] of Object.entries(input.headers ?? {})) {
105
+ if (name === 'Content-Type')
106
+ continue;
107
+ headers.push({ name, value });
108
+ }
109
+ return toCurl({ method: 'POST', url: input.endpoint, headers, body: { kind: 'raw', text: input.envelopeXml } }, options);
110
+ }
111
+ /** Splits a command line into tokens, respecting single/double quoted spans (no `$'…'` support). */
112
+ function tokenize(text) {
113
+ const tokens = [];
114
+ let i = 0;
115
+ const len = text.length;
116
+ while (i < len) {
117
+ while (i < len && /\s/.test(text[i]))
118
+ i += 1;
119
+ if (i >= len)
120
+ break;
121
+ let token = '';
122
+ while (i < len && !/\s/.test(text[i])) {
123
+ const ch = text[i];
124
+ if (ch === "'" || ch === '"') {
125
+ const quote = ch;
126
+ i += 1;
127
+ const start = i;
128
+ while (i < len && text[i] !== quote)
129
+ i += 1;
130
+ token += text.slice(start, i);
131
+ i += 1;
132
+ }
133
+ else if (ch === '\\' && i + 1 < len) {
134
+ token += text[i + 1];
135
+ i += 2;
136
+ }
137
+ else if (ch === '`' || (ch === '\\' && text[i + 1] === '\n')) {
138
+ // line continuation markers; skip
139
+ i += 1;
140
+ }
141
+ else {
142
+ token += ch;
143
+ i += 1;
144
+ }
145
+ }
146
+ if (token.length > 0)
147
+ tokens.push(token);
148
+ }
149
+ return tokens;
150
+ }
151
+ /** Parses a pasted `curl` command back into a partial {@link SoapSendInput}. */
152
+ export function fromCurl(text) {
153
+ const problems = [];
154
+ // Pull out a heredoc/here-string body (`<<'EOF' ... EOF` or `@'...'@`) before line-splicing and
155
+ // tokenizing the rest — its content is verbatim and may contain anything, including newlines.
156
+ let heredocData;
157
+ let withoutHeredoc = text;
158
+ const embedded = findHeredoc(text) ?? findHereString(text);
159
+ if (embedded !== undefined) {
160
+ heredocData = embedded.body;
161
+ withoutHeredoc = text.slice(0, embedded.start) + text.slice(embedded.end);
162
+ }
163
+ const normalized = withoutHeredoc
164
+ .replace(/\\\r?\n/g, ' ')
165
+ .replace(/`\r?\n/g, ' ')
166
+ .trim();
167
+ const tokens = expandBundles(tokenize(normalized));
168
+ let endpoint;
169
+ let envelopeXml;
170
+ const headers = {};
171
+ let i = 0;
172
+ if (tokens[0] === 'curl' || tokens[0] === 'curl.exe')
173
+ i += 1;
174
+ while (i < tokens.length) {
175
+ const tok = tokens[i];
176
+ if (tok === '-X' || tok === '--request') {
177
+ i += 2;
178
+ continue;
179
+ }
180
+ if (tok === '-H' || tok === '--header') {
181
+ const header = tokens[i + 1] ?? '';
182
+ const colon = header.indexOf(':');
183
+ if (colon !== -1) {
184
+ const key = header.slice(0, colon).trim();
185
+ const value = header.slice(colon + 1).trim();
186
+ headers[key] = value;
187
+ }
188
+ i += 2;
189
+ continue;
190
+ }
191
+ if (tok === '-d' || tok === '--data' || tok === '--data-binary' || tok === '--data-raw') {
192
+ const data = tokens[i + 1] ?? '';
193
+ if ((data === '@-' || data === '') && heredocData !== undefined) {
194
+ envelopeXml = heredocData;
195
+ }
196
+ else if (data.startsWith('@')) {
197
+ problems.push('data-from-file-unsupported');
198
+ }
199
+ else {
200
+ envelopeXml = data;
201
+ }
202
+ i += 2;
203
+ continue;
204
+ }
205
+ if (tok === '--url') {
206
+ endpoint = tokens[i + 1];
207
+ i += 2;
208
+ continue;
209
+ }
210
+ if (tok === '-u' || tok === '--user') {
211
+ problems.push('basic-auth-ignored');
212
+ i += 2;
213
+ continue;
214
+ }
215
+ if (tok.startsWith('-')) {
216
+ // A flag with no field here: skip its value too, unless it is one that takes none.
217
+ problems.push(`ignored-flag:${tok}`);
218
+ i += takesNoValue(tok) ? 1 : 2;
219
+ continue;
220
+ }
221
+ // bare token: the URL
222
+ if (endpoint === undefined) {
223
+ endpoint = tok;
224
+ }
225
+ i += 1;
226
+ }
227
+ const soapActionHeader = headers['SOAPAction'];
228
+ let soapAction;
229
+ if (soapActionHeader !== undefined) {
230
+ soapAction = soapActionHeader.replace(/^"|"$/g, '');
231
+ }
232
+ const contentType = headers['Content-Type'];
233
+ const soapVersion = contentType?.includes('application/soap+xml') === true ? '1.2' : '1.1';
234
+ const extraHeaders = { ...headers };
235
+ delete extraHeaders['SOAPAction'];
236
+ delete extraHeaders['Content-Type'];
237
+ const input = {
238
+ ...(endpoint !== undefined ? { endpoint } : {}),
239
+ ...(envelopeXml !== undefined ? { envelopeXml } : {}),
240
+ soapVersion,
241
+ ...(soapAction !== undefined ? { soapAction } : {}),
242
+ ...(Object.keys(extraHeaders).length > 0 ? { headers: extraHeaders } : {}),
243
+ };
244
+ return { input, problems };
245
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Decompresses `data` according to the response's `content-encoding` header
3
+ * (`gzip`, `x-gzip`, `deflate`, or `br`). Returns `data` unchanged for any
4
+ * other/absent encoding. Errors from a malformed compressed body propagate
5
+ * to the caller.
6
+ */
7
+ export declare function decompressBody(data: Uint8Array, contentEncoding: string | undefined): Promise<Uint8Array>;
@@ -0,0 +1,22 @@
1
+ import { brotliDecompress, gunzip, inflate } from 'node:zlib';
2
+ /**
3
+ * Decompresses `data` according to the response's `content-encoding` header
4
+ * (`gzip`, `x-gzip`, `deflate`, or `br`). Returns `data` unchanged for any
5
+ * other/absent encoding. Errors from a malformed compressed body propagate
6
+ * to the caller.
7
+ */
8
+ export async function decompressBody(data, contentEncoding) {
9
+ const encoding = contentEncoding?.trim().toLowerCase();
10
+ const buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
11
+ switch (encoding) {
12
+ case 'gzip':
13
+ case 'x-gzip':
14
+ return new Uint8Array(await new Promise((resolve, reject) => gunzip(buf, (err, out) => (err ? reject(err) : resolve(out)))));
15
+ case 'deflate':
16
+ return new Uint8Array(await new Promise((resolve, reject) => inflate(buf, (err, out) => (err ? reject(err) : resolve(out)))));
17
+ case 'br':
18
+ return new Uint8Array(await new Promise((resolve, reject) => brotliDecompress(buf, (err, out) => (err ? reject(err) : resolve(out)))));
19
+ default:
20
+ return data;
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ import { HttpError } from '../errors.js';
2
+ /**
3
+ * Maps a raw error thrown by undici/Node's networking stack (or our own deadline
4
+ * timer) into a stable {@link HttpError} with an {@link HttpErrorCode}. `userAborted`
5
+ * distinguishes a caller-triggered abort from the deadline timer firing so we can
6
+ * report `aborted` vs `timeout` correctly even though both surface as AbortError.
7
+ * `hadProxy` (the request had `proxy` set) is used to route connection-level
8
+ * failures and undici's proxy errors to the `proxy` code instead of `connection-refused`/`network`.
9
+ * `host` names the peer in a `tls-untrusted` message when Node did not attach the offending
10
+ * certificate to the error (undici's connector usually does not), so the user is always told
11
+ * *which* server they are being asked to trust.
12
+ */
13
+ export declare function toHttpError(err: unknown, options: {
14
+ readonly userAborted: boolean;
15
+ readonly deadlineHit: boolean;
16
+ readonly hadProxy?: boolean;
17
+ readonly host?: string;
18
+ }): HttpError;
19
+ /** Builds the `HttpError('invalid-url')` thrown when `req.url` cannot be parsed. */
20
+ export declare function invalidUrlError(url: string, cause: unknown): HttpError;
21
+ /** Builds the `HttpError('too-many-redirects')` thrown when the redirect cap is exceeded. */
22
+ export declare function tooManyRedirectsError(maxRedirects: number): HttpError;
@@ -0,0 +1,144 @@
1
+ import { HttpError } from '../errors.js';
2
+ /**
3
+ * The verification failures that mean "the chain did not lead to a trusted root" — as opposed
4
+ * to a protocol or handshake failure. These are the ones a CA bundle (or the endpoint's
5
+ * "Trust invalid certificates" flag) actually fixes, so they get their own code and their own
6
+ * remedy-shaped message.
7
+ */
8
+ const UNTRUSTED_CODES = new Set([
9
+ 'UNABLE_TO_VERIFY_LEAF_SIGNATURE',
10
+ 'SELF_SIGNED_CERT_IN_CHAIN',
11
+ 'DEPTH_ZERO_SELF_SIGNED_CERT',
12
+ 'UNABLE_TO_GET_ISSUER_CERT',
13
+ 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',
14
+ 'CERT_UNTRUSTED',
15
+ ]);
16
+ /** Node/undici error codes recognized as TLS/certificate failures. */
17
+ const TLS_CODE_PATTERNS = [
18
+ /^CERT_/,
19
+ /^ERR_TLS_/,
20
+ /^ERR_SSL_/,
21
+ /^DEPTH_ZERO_SELF_SIGNED_CERT$/,
22
+ /^UNABLE_TO_VERIFY_LEAF_SIGNATURE$/,
23
+ /^SELF_SIGNED_CERT_IN_CHAIN$/,
24
+ ];
25
+ /**
26
+ * The peer's subject DN, when Node attached the offending certificate to the error (it does,
27
+ * for every verification failure raised by `tls.connect`). Rendered `CN=x, O=y` in the
28
+ * certificate's own attribute order, matching `PeerCert.subject`, so the problem row and the
29
+ * SSL inspector name the same thing. `undefined` when the error carries no certificate.
30
+ */
31
+ function peerSubjectOf(err) {
32
+ const chain = [err];
33
+ for (let depth = 0; depth < 4 && chain.length > 0; depth += 1) {
34
+ const current = chain.shift();
35
+ if (current === null || typeof current !== 'object')
36
+ continue;
37
+ const cert = current.cert;
38
+ if (cert !== null && typeof cert === 'object') {
39
+ const subject = cert.subject;
40
+ if (subject !== null && typeof subject === 'object') {
41
+ const parts = [];
42
+ for (const [key, value] of Object.entries(subject)) {
43
+ if (Array.isArray(value)) {
44
+ for (const item of value)
45
+ parts.push(`${key}=${String(item)}`);
46
+ }
47
+ else {
48
+ parts.push(`${key}=${String(value)}`);
49
+ }
50
+ }
51
+ if (parts.length > 0)
52
+ return parts.join(', ');
53
+ }
54
+ }
55
+ chain.push(current.cause);
56
+ }
57
+ return undefined;
58
+ }
59
+ /** Extracts a Node-style `code` (e.g. `ECONNREFUSED`) from an arbitrary thrown value, if any. */
60
+ function nodeErrorCode(err) {
61
+ if (err !== null && typeof err === 'object' && 'code' in err) {
62
+ const code = err.code;
63
+ if (typeof code === 'string')
64
+ return code;
65
+ }
66
+ return undefined;
67
+ }
68
+ /** True if `err` (or its cause chain) was raised because of an AbortSignal firing. */
69
+ function isAbortError(err) {
70
+ if (err instanceof Error && err.name === 'AbortError')
71
+ return true;
72
+ if (err !== null && typeof err === 'object' && 'code' in err) {
73
+ return err.code === 'ABORT_ERR';
74
+ }
75
+ return false;
76
+ }
77
+ /** Builds `HttpError` constructor options, omitting `details` entirely when there's no code. */
78
+ function optionsFor(cause, code) {
79
+ return code !== undefined ? { cause, details: { code } } : { cause };
80
+ }
81
+ /** Node error codes that indicate a connection-level failure (occur during connect, before any bytes flow). */
82
+ const CONNECT_FAILURE_CODES = new Set(['ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN', 'ECONNRESET']);
83
+ /** True if `err`'s name or message mentions "Proxy" (undici's proxy-related errors do this). */
84
+ function looksLikeProxyError(err) {
85
+ if (!(err instanceof Error))
86
+ return false;
87
+ return /proxy/i.test(err.name) || /proxy/i.test(err.message);
88
+ }
89
+ /**
90
+ * Maps a raw error thrown by undici/Node's networking stack (or our own deadline
91
+ * timer) into a stable {@link HttpError} with an {@link HttpErrorCode}. `userAborted`
92
+ * distinguishes a caller-triggered abort from the deadline timer firing so we can
93
+ * report `aborted` vs `timeout` correctly even though both surface as AbortError.
94
+ * `hadProxy` (the request had `proxy` set) is used to route connection-level
95
+ * failures and undici's proxy errors to the `proxy` code instead of `connection-refused`/`network`.
96
+ * `host` names the peer in a `tls-untrusted` message when Node did not attach the offending
97
+ * certificate to the error (undici's connector usually does not), so the user is always told
98
+ * *which* server they are being asked to trust.
99
+ */
100
+ export function toHttpError(err, options) {
101
+ const code = nodeErrorCode(err);
102
+ if (options.deadlineHit) {
103
+ return new HttpError('timeout', 'The request timed out.', optionsFor(err, code));
104
+ }
105
+ if (options.userAborted || isAbortError(err)) {
106
+ return new HttpError('aborted', 'The request was aborted.', optionsFor(err, code));
107
+ }
108
+ if (options.hadProxy === true &&
109
+ ((code !== undefined && CONNECT_FAILURE_CODES.has(code)) || looksLikeProxyError(err))) {
110
+ return new HttpError('proxy', 'Proxy connection failed.', optionsFor(err, code));
111
+ }
112
+ if (code === 'ECONNREFUSED') {
113
+ return new HttpError('connection-refused', 'Connection refused.', optionsFor(err, code));
114
+ }
115
+ if (code === 'ENOTFOUND' || code === 'EAI_AGAIN') {
116
+ return new HttpError('dns', 'DNS lookup failed.', optionsFor(err, code));
117
+ }
118
+ if (code !== undefined && UNTRUSTED_CODES.has(code)) {
119
+ const peerSubject = peerSubjectOf(err);
120
+ const peer = peerSubject ?? options.host;
121
+ return new HttpError('tls-untrusted', `The server certificate${peer === undefined ? '' : ` for ${peer}`} is not trusted. Add its CA to the CA bundle, or turn on "Trust invalid certificates" for this endpoint.`, {
122
+ cause: err,
123
+ details: {
124
+ code,
125
+ ...(peerSubject !== undefined ? { peerSubject } : {}),
126
+ ...(options.host !== undefined ? { host: options.host } : {}),
127
+ },
128
+ });
129
+ }
130
+ if (code !== undefined && TLS_CODE_PATTERNS.some((pattern) => pattern.test(code))) {
131
+ return new HttpError('tls', 'TLS/certificate error.', optionsFor(err, code));
132
+ }
133
+ return new HttpError('network', err instanceof Error ? err.message : 'Network error.', optionsFor(err, code));
134
+ }
135
+ /** Builds the `HttpError('invalid-url')` thrown when `req.url` cannot be parsed. */
136
+ export function invalidUrlError(url, cause) {
137
+ return new HttpError('invalid-url', `Invalid URL: ${url}`, { cause, details: { url } });
138
+ }
139
+ /** Builds the `HttpError('too-many-redirects')` thrown when the redirect cap is exceeded. */
140
+ export function tooManyRedirectsError(maxRedirects) {
141
+ return new HttpError('too-many-redirects', `Exceeded maximum of ${maxRedirects} redirects.`, {
142
+ details: { maxRedirects },
143
+ });
144
+ }
@@ -0,0 +1,27 @@
1
+ /** The most body bytes a transport error carries: enough to debug a send, small enough to log. */
2
+ export declare const FAILED_REQUEST_BODY_CAP_BYTES: number;
3
+ /**
4
+ * The request a transport error was raised for, as it was about to go on the wire: the last
5
+ * attempt's URL and method (after any redirects), its final headers (credentials applied, plus the
6
+ * `host` and `content-length` the transport adds) and at most {@link FAILED_REQUEST_BODY_CAP_BYTES}
7
+ * of its body. Unredacted — whoever shows it must redact it.
8
+ */
9
+ export interface FailedRequest {
10
+ readonly url: string;
11
+ readonly method: string;
12
+ readonly headers: Readonly<Record<string, string>>;
13
+ /** Absent when the attempt had no body. */
14
+ readonly bodyBase64?: string;
15
+ /** True when the body was longer than the cap and `bodyBase64` holds only its start. */
16
+ readonly bodyTruncated: boolean;
17
+ }
18
+ /** Builds the {@link FailedRequest} for one attempt, capping its body. */
19
+ export declare function failedRequestFor(url: string, method: string, headers: Readonly<Record<string, string>>, body: Uint8Array | undefined): FailedRequest;
20
+ /**
21
+ * Returns an `HttpError` with `details.request` set to `request` — a new one with the same code,
22
+ * message and cause, since `details` is read-only. Anything that is not an `HttpError` is
23
+ * returned as is.
24
+ */
25
+ export declare function withFailedRequest(error: unknown, request: FailedRequest): unknown;
26
+ /** The request a transport error was raised for, or `undefined` when it carries none (e.g. `invalid-url`). */
27
+ export declare function failedRequestOf(error: unknown): FailedRequest | undefined;
@@ -0,0 +1,48 @@
1
+ import { HttpError, isWirebenchError } from '../errors.js';
2
+ /** The most body bytes a transport error carries: enough to debug a send, small enough to log. */
3
+ export const FAILED_REQUEST_BODY_CAP_BYTES = 64 * 1024;
4
+ /** Builds the {@link FailedRequest} for one attempt, capping its body. */
5
+ export function failedRequestFor(url, method, headers, body) {
6
+ if (body === undefined || body.length === 0) {
7
+ return { url, method, headers: { ...headers }, bodyTruncated: false };
8
+ }
9
+ const truncated = body.length > FAILED_REQUEST_BODY_CAP_BYTES;
10
+ const kept = truncated ? body.subarray(0, FAILED_REQUEST_BODY_CAP_BYTES) : body;
11
+ return {
12
+ url,
13
+ method,
14
+ headers: { ...headers },
15
+ bodyBase64: Buffer.from(kept.buffer, kept.byteOffset, kept.byteLength).toString('base64'),
16
+ bodyTruncated: truncated,
17
+ };
18
+ }
19
+ /**
20
+ * Returns an `HttpError` with `details.request` set to `request` — a new one with the same code,
21
+ * message and cause, since `details` is read-only. Anything that is not an `HttpError` is
22
+ * returned as is.
23
+ */
24
+ export function withFailedRequest(error, request) {
25
+ if (!(error instanceof HttpError) || error.details?.['request'] !== undefined) {
26
+ return error;
27
+ }
28
+ const rebuilt = new HttpError(error.code, error.message, {
29
+ ...(error.cause !== undefined ? { cause: error.cause } : {}),
30
+ details: { ...error.details, request },
31
+ });
32
+ if (error.stack !== undefined)
33
+ rebuilt.stack = error.stack;
34
+ return rebuilt;
35
+ }
36
+ /** The request a transport error was raised for, or `undefined` when it carries none (e.g. `invalid-url`). */
37
+ export function failedRequestOf(error) {
38
+ if (!isWirebenchError(error))
39
+ return undefined;
40
+ const candidate = error.details?.['request'];
41
+ if (candidate === null || typeof candidate !== 'object')
42
+ return undefined;
43
+ const { url, method, headers } = candidate;
44
+ if (typeof url !== 'string' || typeof method !== 'string' || headers === null || typeof headers !== 'object') {
45
+ return undefined;
46
+ }
47
+ return candidate;
48
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Case-insensitive helpers for the header maps the transport passes around.
3
+ *
4
+ * HTTP header names are case-insensitive but the maps here are plain objects, so every
5
+ * lookup and every override has to compare case-folded names or a caller-supplied
6
+ * `Content-Type` would silently sit next to a computed `content-type`.
7
+ */
8
+ /** Case-insensitively merges `override` onto `base`, letting `override`'s casing win for shared keys. */
9
+ export declare function mergeHeaders(base: Readonly<Record<string, string>>, override: Readonly<Record<string, string>>): Record<string, string>;
10
+ /** Sets a header, replacing any differently-cased entry of the same name. */
11
+ export declare function setHeader(headers: Record<string, string>, name: string, value: string): void;
12
+ /** Returns a copy of `headers` with `name` removed, case-insensitively. */
13
+ export declare function withoutHeader(headers: Readonly<Record<string, string>>, name: string): Record<string, string>;
14
+ /** Looks up a header case-insensitively. */
15
+ export declare function headerValue(headers: Readonly<Record<string, string>>, name: string): string | undefined;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Case-insensitive helpers for the header maps the transport passes around.
3
+ *
4
+ * HTTP header names are case-insensitive but the maps here are plain objects, so every
5
+ * lookup and every override has to compare case-folded names or a caller-supplied
6
+ * `Content-Type` would silently sit next to a computed `content-type`.
7
+ */
8
+ /** Case-insensitively merges `override` onto `base`, letting `override`'s casing win for shared keys. */
9
+ export function mergeHeaders(base, override) {
10
+ const merged = { ...base };
11
+ const lowerToKey = new Map(Object.keys(merged).map((key) => [key.toLowerCase(), key]));
12
+ for (const [key, value] of Object.entries(override)) {
13
+ const existingKey = lowerToKey.get(key.toLowerCase());
14
+ if (existingKey !== undefined && existingKey !== key) {
15
+ delete merged[existingKey];
16
+ }
17
+ merged[key] = value;
18
+ lowerToKey.set(key.toLowerCase(), key);
19
+ }
20
+ return merged;
21
+ }
22
+ /** Sets a header, replacing any differently-cased entry of the same name. */
23
+ export function setHeader(headers, name, value) {
24
+ for (const key of Object.keys(headers)) {
25
+ if (key.toLowerCase() === name.toLowerCase() && key !== name) {
26
+ delete headers[key];
27
+ }
28
+ }
29
+ headers[name] = value;
30
+ }
31
+ /** Returns a copy of `headers` with `name` removed, case-insensitively. */
32
+ export function withoutHeader(headers, name) {
33
+ const lower = name.toLowerCase();
34
+ const result = {};
35
+ for (const [key, value] of Object.entries(headers)) {
36
+ if (key.toLowerCase() !== lower)
37
+ result[key] = value;
38
+ }
39
+ return result;
40
+ }
41
+ /** Looks up a header case-insensitively. */
42
+ export function headerValue(headers, name) {
43
+ const lower = name.toLowerCase();
44
+ for (const [key, value] of Object.entries(headers)) {
45
+ if (key.toLowerCase() === lower) {
46
+ return value;
47
+ }
48
+ }
49
+ return undefined;
50
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Finds the heredoc or here-string body embedded in a pasted `curl` command.
3
+ *
4
+ * Both cURL parsers (`http/curl.ts` for SOAP, `rest/curl.ts` for REST) need this and nothing else
5
+ * in common, so it lives here rather than in either. It scans instead of matching a regex: the
6
+ * pattern this replaces, `/<<\\s*'?(\\w+)'?\\r?\\n([\\s\\S]*?)\\r?\\n\\1/`, backtracks its lazy body against a
7
+ * backreference for every candidate `<<`, which is O(n²) on a command that a user pastes and can
8
+ * therefore be anything.
9
+ */
10
+ /** A body found by {@link findHeredoc} or {@link findHereString}: what to keep, and where it sat. */
11
+ export interface EmbeddedBody {
12
+ readonly body: string;
13
+ /** Offset of the opener (`<<` or `@'`) in the source text. */
14
+ readonly start: number;
15
+ /** Offset just past the closing delimiter line. */
16
+ readonly end: number;
17
+ }
18
+ /**
19
+ * Locates a POSIX heredoc: `<<EOF` or `<<'EOF'`, a newline, the body, a newline and `EOF` on a line
20
+ * of its own. The body is everything between the opening line and the first line that is exactly
21
+ * the delimiter; an opener with no such closing line is not a heredoc.
22
+ */
23
+ export declare function findHeredoc(text: string): EmbeddedBody | undefined;
24
+ /** Locates a PowerShell here-string: `@'`, a newline, the body, a newline and `'@`. */
25
+ export declare function findHereString(text: string): EmbeddedBody | undefined;