@wirebench/engine 2.2.1 → 3.1.0-rc.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 (566) hide show
  1. package/README.md +134 -1
  2. package/dist/account/schema.d.ts +34 -0
  3. package/dist/account/schema.js +29 -0
  4. package/dist/assert/callback.d.ts +76 -0
  5. package/dist/assert/callback.js +320 -0
  6. package/dist/assert/capture-source.d.ts +50 -0
  7. package/dist/assert/capture-source.js +89 -0
  8. package/dist/assert/check.d.ts +8 -0
  9. package/dist/assert/check.js +18 -0
  10. package/dist/assert/header.d.ts +5 -0
  11. package/dist/assert/header.js +48 -0
  12. package/dist/assert/index.d.ts +2 -2
  13. package/dist/assert/index.js +12 -0
  14. package/dist/assert/match.d.ts +6 -0
  15. package/dist/assert/match.js +13 -4
  16. package/dist/assert/model.d.ts +110 -3
  17. package/dist/assert/model.js +16 -1
  18. package/dist/assert/schema.d.ts +194 -1
  19. package/dist/assert/schema.js +154 -12
  20. package/dist/assert/status-names.d.ts +9 -0
  21. package/dist/assert/status-names.js +27 -0
  22. package/dist/assert/status.d.ts +4 -1
  23. package/dist/assert/status.js +27 -3
  24. package/dist/asyncapi/browser.d.ts +7 -0
  25. package/dist/asyncapi/browser.js +6 -0
  26. package/dist/asyncapi/frame-check-worker-host.d.ts +44 -0
  27. package/dist/asyncapi/frame-check-worker-host.js +175 -0
  28. package/dist/asyncapi/frame-check-worker.d.ts +12 -0
  29. package/dist/asyncapi/frame-check-worker.js +25 -0
  30. package/dist/asyncapi/frame-check.d.ts +25 -0
  31. package/dist/asyncapi/frame-check.js +78 -0
  32. package/dist/asyncapi/import.d.ts +25 -0
  33. package/dist/asyncapi/import.js +34 -0
  34. package/dist/asyncapi/map.d.ts +40 -0
  35. package/dist/asyncapi/map.js +230 -0
  36. package/dist/asyncapi/model.d.ts +84 -0
  37. package/dist/asyncapi/model.js +7 -0
  38. package/dist/asyncapi/normalise-2.d.ts +13 -0
  39. package/dist/asyncapi/normalise-2.js +113 -0
  40. package/dist/asyncapi/normalise-3.d.ts +14 -0
  41. package/dist/asyncapi/normalise-3.js +133 -0
  42. package/dist/asyncapi/parse.d.ts +31 -0
  43. package/dist/asyncapi/parse.js +85 -0
  44. package/dist/asyncapi/read.d.ts +35 -0
  45. package/dist/asyncapi/read.js +186 -0
  46. package/dist/asyncapi/security.d.ts +14 -0
  47. package/dist/asyncapi/security.js +55 -0
  48. package/dist/asyncapi/update.d.ts +53 -0
  49. package/dist/asyncapi/update.js +220 -0
  50. package/dist/errors.d.ts +16 -0
  51. package/dist/errors.js +22 -0
  52. package/dist/grpc/events.d.ts +22 -0
  53. package/dist/grpc/events.js +1 -0
  54. package/dist/grpc/expand.d.ts +1 -1
  55. package/dist/grpc/expand.js +15 -5
  56. package/dist/grpc/files.d.ts +271 -0
  57. package/dist/grpc/files.js +62 -0
  58. package/dist/grpc/model.d.ts +11 -1
  59. package/dist/grpc/module.d.ts +2 -0
  60. package/dist/grpc/module.js +13 -0
  61. package/dist/grpc/run.d.ts +73 -0
  62. package/dist/grpc/run.js +407 -0
  63. package/dist/grpc/script-types.d.ts +8 -0
  64. package/dist/grpc/script-types.js +149 -0
  65. package/dist/grpc/scripting.d.ts +34 -0
  66. package/dist/grpc/scripting.js +147 -0
  67. package/dist/grpc/send-input.d.ts +46 -0
  68. package/dist/grpc/send-input.js +42 -0
  69. package/dist/grpc/send.d.ts +2 -2
  70. package/dist/grpc/status.d.ts +9 -2
  71. package/dist/grpc/status.js +11 -24
  72. package/dist/grpc/storage.d.ts +9 -0
  73. package/dist/grpc/storage.js +167 -0
  74. package/dist/{rest/auth.d.ts → http/auth/apply-auth.d.ts} +4 -4
  75. package/dist/{rest/auth.js → http/auth/apply-auth.js} +1 -1
  76. package/dist/http/auth/apply.d.ts +1 -1
  77. package/dist/{rest → http/auth}/oauth2.d.ts +2 -2
  78. package/dist/{rest → http/auth}/oauth2.js +1 -1
  79. package/dist/http/auth/send-auth.d.ts +57 -0
  80. package/dist/http/auth/send-auth.js +7 -0
  81. package/dist/http/client.js +150 -8
  82. package/dist/http/cookies.d.ts +79 -0
  83. package/dist/http/cookies.js +81 -0
  84. package/dist/http/curl.d.ts +4 -14
  85. package/dist/http/curl.js +4 -154
  86. package/dist/http/decompress.d.ts +7 -0
  87. package/dist/http/decompress.js +23 -1
  88. package/dist/http/document-fetch.d.ts +42 -0
  89. package/dist/http/document-fetch.js +207 -0
  90. package/dist/http/entries.d.ts +27 -0
  91. package/dist/http/entries.js +16 -0
  92. package/dist/http/escape.d.ts +18 -0
  93. package/dist/http/escape.js +30 -0
  94. package/dist/http/fetch-document.d.ts +28 -0
  95. package/dist/{wsdl/fetch.js → http/fetch-document.js} +8 -16
  96. package/dist/http/media-type.d.ts +9 -0
  97. package/dist/http/media-type.js +12 -0
  98. package/dist/http/transcript-cap.d.ts +26 -0
  99. package/dist/http/transcript-cap.js +36 -0
  100. package/dist/http/types.d.ts +59 -0
  101. package/dist/http/webhook-signature.d.ts +81 -0
  102. package/dist/http/webhook-signature.js +227 -0
  103. package/dist/import-detect.d.ts +2 -2
  104. package/dist/import-detect.js +10 -1
  105. package/dist/index.d.ts +207 -55
  106. package/dist/index.js +129 -32
  107. package/dist/json/cursor.d.ts +2 -0
  108. package/dist/json/cursor.js +1 -0
  109. package/dist/json/pointer-range.d.ts +18 -0
  110. package/dist/json/pointer-range.js +157 -0
  111. package/dist/json/schema/model.d.ts +59 -0
  112. package/dist/json/schema/model.js +8 -0
  113. package/dist/json/schema/parse-text.d.ts +16 -0
  114. package/dist/json/schema/parse-text.js +37 -0
  115. package/dist/{rest/openapi → json/schema}/refs.d.ts +2 -2
  116. package/dist/{rest/openapi → json/schema}/refs.js +3 -3
  117. package/dist/{rest/openapi → json/schema}/sample.d.ts +4 -0
  118. package/dist/{rest/openapi → json/schema}/sample.js +2 -2
  119. package/dist/json/schema/source.d.ts +21 -0
  120. package/dist/json/schema/source.js +8 -0
  121. package/dist/json/schema-validate.d.ts +49 -0
  122. package/dist/json/schema-validate.js +557 -0
  123. package/dist/{wss/keystore → keystore}/index.js +1 -1
  124. package/dist/{wss/keystore → keystore}/pem.js +1 -1
  125. package/dist/{wss/keystore → keystore}/pkcs12.js +1 -1
  126. package/dist/project/attachments-cache.d.ts +3 -1
  127. package/dist/{wsdl → project}/cache-naming.js +1 -1
  128. package/dist/project/endpoints.d.ts +18 -8
  129. package/dist/project/endpoints.js +21 -6
  130. package/dist/project/environments.d.ts +7 -5
  131. package/dist/project/history.d.ts +105 -9
  132. package/dist/project/history.js +195 -23
  133. package/dist/project/inherit.d.ts +7 -0
  134. package/dist/project/inherit.js +9 -0
  135. package/dist/project/keystores.d.ts +1 -1
  136. package/dist/project/load-helpers.d.ts +89 -0
  137. package/dist/project/load-helpers.js +177 -0
  138. package/dist/project/load.d.ts +30 -4
  139. package/dist/project/load.js +168 -545
  140. package/dist/project/managed-files.d.ts +36 -0
  141. package/dist/project/managed-files.js +97 -0
  142. package/dist/project/migrate.d.ts +2 -2
  143. package/dist/project/migrate.js +2 -2
  144. package/dist/project/model.d.ts +92 -14
  145. package/dist/project/model.js +50 -4
  146. package/dist/project/paths.d.ts +10 -1
  147. package/dist/project/paths.js +10 -1
  148. package/dist/project/preferences.d.ts +11 -2
  149. package/dist/project/preferences.js +5 -1
  150. package/dist/project/properties.d.ts +31 -17
  151. package/dist/project/properties.js +89 -70
  152. package/dist/project/request-location.d.ts +20 -0
  153. package/dist/project/request-location.js +62 -0
  154. package/dist/project/save.d.ts +12 -2
  155. package/dist/project/save.js +186 -141
  156. package/dist/project/schema-parts.d.ts +337 -0
  157. package/dist/project/schema-parts.js +248 -0
  158. package/dist/project/schema.d.ts +72 -928
  159. package/dist/project/schema.js +17 -466
  160. package/dist/project/sequence-guards.d.ts +43 -0
  161. package/dist/project/sequence-guards.js +109 -0
  162. package/dist/project/serialize-helpers.d.ts +60 -0
  163. package/dist/project/serialize-helpers.js +108 -0
  164. package/dist/project/serialize.d.ts +7 -8
  165. package/dist/project/serialize.js +34 -293
  166. package/dist/protocol/features.d.ts +51 -0
  167. package/dist/protocol/features.js +64 -0
  168. package/dist/protocol/index.d.ts +7 -0
  169. package/dist/protocol/index.js +4 -0
  170. package/dist/protocol/module.d.ts +247 -0
  171. package/dist/protocol/module.js +48 -0
  172. package/dist/protocol/registry.d.ts +42 -0
  173. package/dist/protocol/registry.js +47 -0
  174. package/dist/protocols.d.ts +77 -0
  175. package/dist/protocols.js +40 -0
  176. package/dist/redact/index.d.ts +12 -1
  177. package/dist/redact/index.js +55 -7
  178. package/dist/redact/literal.d.ts +10 -0
  179. package/dist/redact/literal.js +110 -12
  180. package/dist/rest/body.d.ts +2 -10
  181. package/dist/rest/body.js +3 -25
  182. package/dist/rest/browser.d.ts +4 -0
  183. package/dist/rest/browser.js +5 -0
  184. package/dist/rest/contract-check-worker-host.d.ts +36 -0
  185. package/dist/rest/contract-check-worker-host.js +158 -0
  186. package/dist/rest/contract-check-worker.d.ts +7 -0
  187. package/dist/rest/contract-check-worker.js +28 -0
  188. package/dist/rest/contract-check.d.ts +43 -0
  189. package/dist/rest/contract-check.js +217 -0
  190. package/dist/rest/cookie-jar.d.ts +62 -0
  191. package/dist/rest/cookie-jar.js +262 -0
  192. package/dist/rest/cookies.d.ts +6 -22
  193. package/dist/rest/cookies.js +6 -42
  194. package/dist/rest/curl.js +5 -1
  195. package/dist/rest/events.d.ts +12 -0
  196. package/dist/rest/events.js +1 -0
  197. package/dist/rest/expand.d.ts +6 -1
  198. package/dist/rest/expand.js +29 -11
  199. package/dist/rest/files.d.ts +439 -0
  200. package/dist/rest/files.js +107 -0
  201. package/dist/rest/json-form.d.ts +97 -0
  202. package/dist/rest/json-form.js +396 -0
  203. package/dist/rest/model.d.ts +35 -24
  204. package/dist/rest/model.js +6 -9
  205. package/dist/rest/module.d.ts +2 -0
  206. package/dist/rest/module.js +13 -0
  207. package/dist/rest/openapi/cache.d.ts +7 -2
  208. package/dist/rest/openapi/cache.js +2 -2
  209. package/dist/rest/openapi/import.d.ts +11 -16
  210. package/dist/rest/openapi/import.js +6 -2
  211. package/dist/rest/openapi/map.d.ts +38 -1
  212. package/dist/rest/openapi/map.js +151 -41
  213. package/dist/rest/openapi/match.d.ts +20 -0
  214. package/dist/rest/openapi/match.js +117 -0
  215. package/dist/rest/openapi/model.d.ts +33 -45
  216. package/dist/rest/openapi/parse.d.ts +3 -12
  217. package/dist/rest/openapi/parse.js +138 -67
  218. package/dist/rest/openapi/responses.d.ts +23 -0
  219. package/dist/rest/openapi/responses.js +59 -0
  220. package/dist/rest/openapi/runtime-expression.d.ts +69 -0
  221. package/dist/rest/openapi/runtime-expression.js +213 -0
  222. package/dist/rest/openapi/update.d.ts +116 -0
  223. package/dist/rest/openapi/update.js +456 -0
  224. package/dist/rest/postman/map.d.ts +1 -0
  225. package/dist/rest/postman/map.js +66 -4
  226. package/dist/rest/postman/model.d.ts +9 -0
  227. package/dist/rest/postman/parse.js +33 -10
  228. package/dist/rest/response.d.ts +2 -23
  229. package/dist/rest/response.js +3 -75
  230. package/dist/rest/run.d.ts +56 -0
  231. package/dist/rest/run.js +395 -0
  232. package/dist/rest/script-types.d.ts +7 -0
  233. package/dist/rest/script-types.js +83 -0
  234. package/dist/rest/scripting.d.ts +38 -0
  235. package/dist/rest/scripting.js +282 -0
  236. package/dist/rest/send-input.d.ts +54 -0
  237. package/dist/rest/send-input.js +73 -0
  238. package/dist/rest/send.d.ts +77 -4
  239. package/dist/rest/send.js +128 -7
  240. package/dist/rest/sse-transcript.d.ts +25 -0
  241. package/dist/rest/sse-transcript.js +95 -0
  242. package/dist/rest/sse.d.ts +43 -0
  243. package/dist/rest/sse.js +195 -0
  244. package/dist/rest/storage.d.ts +26 -0
  245. package/dist/rest/storage.js +262 -0
  246. package/dist/rest/url.d.ts +10 -4
  247. package/dist/rest/url.js +38 -5
  248. package/dist/run/baseline-update.d.ts +35 -0
  249. package/dist/run/baseline-update.js +97 -0
  250. package/dist/run/baseline.d.ts +42 -0
  251. package/dist/run/baseline.js +93 -0
  252. package/dist/run/context.d.ts +86 -0
  253. package/dist/run/context.js +31 -0
  254. package/dist/run/current-values.d.ts +32 -0
  255. package/dist/run/current-values.js +43 -0
  256. package/dist/run/event-queue.d.ts +14 -0
  257. package/dist/run/event-queue.js +46 -0
  258. package/dist/run/exchange.d.ts +62 -0
  259. package/dist/run/exchange.js +65 -0
  260. package/dist/run/host.d.ts +89 -0
  261. package/dist/run/host.js +1 -0
  262. package/dist/run/index.d.ts +20 -7
  263. package/dist/run/index.js +12 -4
  264. package/dist/run/oauth2-token.d.ts +42 -0
  265. package/dist/run/oauth2-token.js +92 -0
  266. package/dist/run/open.d.ts +12 -0
  267. package/dist/run/open.js +16 -0
  268. package/dist/run/run.d.ts +124 -4
  269. package/dist/run/run.js +293 -134
  270. package/dist/run/scope.d.ts +11 -0
  271. package/dist/run/scope.js +26 -0
  272. package/dist/run/script-support.d.ts +53 -0
  273. package/dist/run/script-support.js +68 -0
  274. package/dist/run/secret-needs.d.ts +11 -4
  275. package/dist/run/secret-needs.js +48 -96
  276. package/dist/run/select.d.ts +34 -25
  277. package/dist/run/select.js +45 -54
  278. package/dist/run/send-helpers.d.ts +93 -0
  279. package/dist/run/send-helpers.js +255 -0
  280. package/dist/run/tree.d.ts +50 -0
  281. package/dist/run/tree.js +54 -0
  282. package/dist/script/api/postman.d.ts +10 -0
  283. package/dist/script/api/postman.js +264 -0
  284. package/dist/script/api/prelude.d.ts +20 -0
  285. package/dist/script/api/prelude.js +215 -0
  286. package/dist/script/apply.d.ts +44 -0
  287. package/dist/script/apply.js +120 -0
  288. package/dist/script/check/host.d.ts +41 -0
  289. package/dist/script/check/host.js +143 -0
  290. package/dist/script/check/service.d.ts +52 -0
  291. package/dist/script/check/service.js +195 -0
  292. package/dist/script/check/worker.d.ts +1 -0
  293. package/dist/script/check/worker.js +40 -0
  294. package/dist/script/index.d.ts +16 -0
  295. package/dist/script/index.js +10 -0
  296. package/dist/script/lookup.d.ts +10 -0
  297. package/dist/script/lookup.js +23 -0
  298. package/dist/script/model.d.ts +82 -0
  299. package/dist/script/model.js +18 -0
  300. package/dist/script/props.d.ts +8 -0
  301. package/dist/script/props.js +28 -0
  302. package/dist/script/request-scripts.d.ts +83 -0
  303. package/dist/script/request-scripts.js +160 -0
  304. package/dist/script/run.d.ts +47 -0
  305. package/dist/script/run.js +146 -0
  306. package/dist/script/sandbox/execute.d.ts +26 -0
  307. package/dist/script/sandbox/execute.js +212 -0
  308. package/dist/script/sandbox/host-api.d.ts +27 -0
  309. package/dist/script/sandbox/host-api.js +101 -0
  310. package/dist/script/sandbox/host.d.ts +18 -0
  311. package/dist/script/sandbox/host.js +172 -0
  312. package/dist/script/sandbox/model.d.ts +69 -0
  313. package/dist/script/sandbox/model.js +24 -0
  314. package/dist/script/sandbox/worker.d.ts +1 -0
  315. package/dist/script/sandbox/worker.js +20 -0
  316. package/dist/script/send.d.ts +27 -0
  317. package/dist/script/send.js +76 -0
  318. package/dist/script/strip.d.ts +5 -0
  319. package/dist/script/strip.js +43 -0
  320. package/dist/script/types/api.d.ts +38 -0
  321. package/dist/script/types/api.js +113 -0
  322. package/dist/script/types/json-schema.d.ts +26 -0
  323. package/dist/script/types/json-schema.js +206 -0
  324. package/dist/secrets/env-names.d.ts +9 -1
  325. package/dist/secrets/env-names.js +17 -1
  326. package/dist/secrets/resolve.d.ts +44 -4
  327. package/dist/secrets/resolve.js +58 -1
  328. package/dist/secrets/scan/apply.d.ts +36 -0
  329. package/dist/secrets/scan/apply.js +194 -0
  330. package/dist/secrets/scan/rules.d.ts +32 -0
  331. package/dist/secrets/scan/rules.js +346 -0
  332. package/dist/secrets/scan/scan.d.ts +6 -0
  333. package/dist/secrets/scan/scan.js +57 -0
  334. package/dist/secrets/scan/walk.d.ts +70 -0
  335. package/dist/secrets/scan/walk.js +156 -0
  336. package/dist/secrets/secret-refs.d.ts +8 -0
  337. package/dist/secrets/secret-refs.js +25 -0
  338. package/dist/secrets/secret-token.d.ts +17 -0
  339. package/dist/secrets/secret-token.js +25 -0
  340. package/dist/sequence/file.d.ts +169 -0
  341. package/dist/sequence/file.js +237 -0
  342. package/dist/sequence/index.d.ts +7 -0
  343. package/dist/sequence/index.js +5 -0
  344. package/dist/sequence/load.d.ts +32 -0
  345. package/dist/sequence/load.js +56 -0
  346. package/dist/sequence/model.d.ts +115 -0
  347. package/dist/sequence/model.js +53 -0
  348. package/dist/sequence/run.d.ts +131 -0
  349. package/dist/sequence/run.js +191 -0
  350. package/dist/sequence/transfer.d.ts +24 -0
  351. package/dist/sequence/transfer.js +75 -0
  352. package/dist/server-api/audit.d.ts +455 -0
  353. package/dist/server-api/audit.js +186 -0
  354. package/dist/server-api/ci-tokens.d.ts +50 -0
  355. package/dist/server-api/ci-tokens.js +35 -0
  356. package/dist/server-api/hooks.d.ts +337 -0
  357. package/dist/server-api/hooks.js +152 -0
  358. package/dist/server-api/identity.d.ts +210 -0
  359. package/dist/server-api/identity.js +115 -0
  360. package/dist/server-api/licensing.d.ts +80 -0
  361. package/dist/server-api/licensing.js +53 -0
  362. package/dist/server-api/live.d.ts +132 -0
  363. package/dist/server-api/live.js +102 -0
  364. package/dist/server-api/meta.d.ts +31 -0
  365. package/dist/server-api/meta.js +21 -0
  366. package/dist/server-api/sync.d.ts +179 -0
  367. package/dist/server-api/sync.js +124 -0
  368. package/dist/server-api/teams.d.ts +306 -0
  369. package/dist/server-api/teams.js +113 -0
  370. package/dist/snapshot/diff.d.ts +30 -0
  371. package/dist/snapshot/diff.js +75 -0
  372. package/dist/snapshot/format.d.ts +17 -0
  373. package/dist/snapshot/format.js +40 -0
  374. package/dist/snapshot/golden-file.d.ts +45 -0
  375. package/dist/snapshot/golden-file.js +173 -0
  376. package/dist/snapshot/ignore.d.ts +14 -0
  377. package/dist/snapshot/ignore.js +79 -0
  378. package/dist/snapshot/index.d.ts +9 -0
  379. package/dist/snapshot/index.js +9 -0
  380. package/dist/snapshot/json-diff.d.ts +3 -0
  381. package/dist/snapshot/json-diff.js +93 -0
  382. package/dist/snapshot/xml-diff.d.ts +10 -0
  383. package/dist/snapshot/xml-diff.js +194 -0
  384. package/dist/soap/auth.d.ts +26 -0
  385. package/dist/soap/auth.js +54 -0
  386. package/dist/soap/curl.d.ts +20 -0
  387. package/dist/soap/curl.js +161 -0
  388. package/dist/soap/expand.d.ts +24 -0
  389. package/dist/soap/expand.js +95 -0
  390. package/dist/soap/files.d.ts +384 -0
  391. package/dist/soap/files.js +114 -0
  392. package/dist/soap/form-request.d.ts +13 -0
  393. package/dist/soap/form-request.js +2 -2
  394. package/dist/soap/generate.d.ts +12 -0
  395. package/dist/{generate.js → soap/generate.js} +4 -4
  396. package/dist/{import.d.ts → soap/import.d.ts} +4 -4
  397. package/dist/{import.js → soap/import.js} +13 -13
  398. package/dist/soap/json-operation.d.ts +35 -0
  399. package/dist/soap/json-operation.js +225 -0
  400. package/dist/soap/legacy-project/env-refs.d.ts +19 -0
  401. package/dist/soap/legacy-project/env-refs.js +105 -0
  402. package/dist/soap/legacy-project/map.d.ts +2 -2
  403. package/dist/soap/legacy-project/map.js +6 -0
  404. package/dist/soap/mime/multipart.d.ts +2 -2
  405. package/dist/soap/mime/multipart.js +2 -5
  406. package/dist/soap/mime/send-pipeline.d.ts +1 -1
  407. package/dist/soap/mime/send-pipeline.js +1 -1
  408. package/dist/soap/mime/types.d.ts +1 -3
  409. package/dist/soap/module.d.ts +2 -0
  410. package/dist/soap/module.js +13 -0
  411. package/dist/soap/namespace-scope.js +1 -1
  412. package/dist/soap/operations.d.ts +12 -0
  413. package/dist/{operations.js → soap/operations.js} +4 -4
  414. package/dist/soap/run.d.ts +70 -0
  415. package/dist/soap/run.js +549 -0
  416. package/dist/soap/script-types.d.ts +65 -0
  417. package/dist/soap/script-types.js +379 -0
  418. package/dist/soap/scripting.d.ts +45 -0
  419. package/dist/soap/scripting.js +221 -0
  420. package/dist/soap/send-input.d.ts +61 -0
  421. package/dist/{send-options.js → soap/send-input.js} +5 -109
  422. package/dist/{send.d.ts → soap/send.d.ts} +1 -1
  423. package/dist/{send.js → soap/send.js} +28 -12
  424. package/dist/soap/storage.d.ts +9 -0
  425. package/dist/soap/storage.js +237 -0
  426. package/dist/soap/transforms.d.ts +3 -12
  427. package/dist/soap/transforms.js +3 -14
  428. package/dist/{types.d.ts → soap/types.d.ts} +34 -84
  429. package/dist/sync/git-cli.d.ts +202 -0
  430. package/dist/sync/git-cli.js +684 -0
  431. package/dist/sync/three-way-merge.d.ts +41 -0
  432. package/dist/sync/three-way-merge.js +85 -0
  433. package/dist/sync/tree-paths.d.ts +34 -0
  434. package/dist/sync/tree-paths.js +131 -0
  435. package/dist/team-secrets/envelope.d.ts +10 -0
  436. package/dist/team-secrets/envelope.js +121 -0
  437. package/dist/team-secrets/errors.d.ts +26 -0
  438. package/dist/team-secrets/errors.js +27 -0
  439. package/dist/team-secrets/index.d.ts +14 -0
  440. package/dist/team-secrets/index.js +8 -0
  441. package/dist/team-secrets/keys.d.ts +52 -0
  442. package/dist/team-secrets/keys.js +158 -0
  443. package/dist/team-secrets/log.d.ts +48 -0
  444. package/dist/team-secrets/log.js +175 -0
  445. package/dist/team-secrets/resolve-conflict.d.ts +7 -0
  446. package/dist/team-secrets/resolve-conflict.js +14 -0
  447. package/dist/team-secrets/schema.d.ts +97 -0
  448. package/dist/team-secrets/schema.js +157 -0
  449. package/dist/team-secrets/sign.d.ts +24 -0
  450. package/dist/team-secrets/sign.js +71 -0
  451. package/dist/team-secrets/vault.d.ts +49 -0
  452. package/dist/team-secrets/vault.js +148 -0
  453. package/dist/validate/wsi/run-message.d.ts +2 -2
  454. package/dist/validate/wsi/run-message.js +1 -1
  455. package/dist/validate/wsi/run-wsdl.d.ts +2 -2
  456. package/dist/validate/wsi/run-wsdl.js +1 -1
  457. package/dist/validate/wsi/types.d.ts +1 -1
  458. package/dist/webhooks/model.d.ts +138 -0
  459. package/dist/webhooks/model.js +150 -0
  460. package/dist/workspace/commit-message.d.ts +1 -1
  461. package/dist/workspace/commit-message.js +6 -1
  462. package/dist/workspace/environments.d.ts +11 -4
  463. package/dist/workspace/environments.js +12 -0
  464. package/dist/workspace/index.d.ts +3 -3
  465. package/dist/workspace/index.js +2 -2
  466. package/dist/workspace/paths.d.ts +5 -2
  467. package/dist/workspace/paths.js +5 -2
  468. package/dist/workspace/schema.d.ts +7 -3
  469. package/dist/workspace/schema.js +24 -3
  470. package/dist/workspace/share.d.ts +30 -11
  471. package/dist/workspace/share.js +32 -6
  472. package/dist/ws/call.d.ts +1 -1
  473. package/dist/ws/call.js +2 -2
  474. package/dist/ws/connect.d.ts +60 -0
  475. package/dist/ws/connect.js +131 -0
  476. package/dist/ws/events.d.ts +17 -0
  477. package/dist/ws/events.js +1 -0
  478. package/dist/ws/expand.d.ts +1 -1
  479. package/dist/ws/expand.js +1 -1
  480. package/dist/ws/files.d.ts +284 -0
  481. package/dist/ws/files.js +71 -0
  482. package/dist/ws/history-entry.d.ts +44 -0
  483. package/dist/ws/history-entry.js +93 -0
  484. package/dist/ws/model.d.ts +44 -3
  485. package/dist/ws/model.js +3 -0
  486. package/dist/ws/module.d.ts +2 -0
  487. package/dist/ws/module.js +11 -0
  488. package/dist/ws/run.d.ts +63 -0
  489. package/dist/ws/run.js +470 -0
  490. package/dist/ws/session.d.ts +18 -0
  491. package/dist/ws/session.js +52 -25
  492. package/dist/ws/storage.d.ts +9 -0
  493. package/dist/ws/storage.js +176 -0
  494. package/dist/ws/transcript.d.ts +3 -4
  495. package/dist/ws/transcript.js +26 -17
  496. package/dist/ws/url.d.ts +1 -1
  497. package/dist/wsdl/cache.js +1 -1
  498. package/dist/wsdl/docs-generator.d.ts +3 -3
  499. package/dist/wsdl/docs-generator.js +1 -1
  500. package/dist/wsdl/export-definition.js +1 -1
  501. package/dist/wsdl/qname.d.ts +2 -5
  502. package/dist/wsdl/resolver.d.ts +4 -11
  503. package/dist/wsdl/resolver.js +3 -3
  504. package/dist/wsdl/update-definition.d.ts +5 -5
  505. package/dist/wsdl/update-definition.js +6 -6
  506. package/dist/wss/apply.js +1 -1
  507. package/dist/{project/wss-configs.d.ts → wss/configs.d.ts} +2 -2
  508. package/dist/{project/wss-configs.js → wss/configs.js} +2 -2
  509. package/dist/wss/incoming/decrypt.d.ts +1 -1
  510. package/dist/wss/incoming/index.js +1 -1
  511. package/dist/wss/incoming/verify.d.ts +1 -1
  512. package/dist/wss/incoming/verify.js +1 -1
  513. package/dist/wss/key-identifiers.js +1 -1
  514. package/dist/wss/model.d.ts +1 -1
  515. package/dist/wss/outgoing/encryption.d.ts +1 -1
  516. package/dist/wss/outgoing/signature.d.ts +1 -1
  517. package/dist/xml/decode.d.ts +15 -0
  518. package/dist/xml/decode.js +22 -0
  519. package/dist/xml/entitize.d.ts +17 -0
  520. package/dist/xml/entitize.js +19 -0
  521. package/dist/xml/index.d.ts +1 -1
  522. package/dist/xml/index.js +1 -1
  523. package/dist/xml/locate.d.ts +39 -0
  524. package/dist/xml/locate.js +117 -0
  525. package/dist/xml/qname.d.ts +12 -0
  526. package/dist/xml/qname.js +8 -0
  527. package/dist/xpath/evaluate-async.d.ts +19 -0
  528. package/dist/xpath/evaluate-async.js +31 -11
  529. package/dist/xpath/evaluate.d.ts +1 -1
  530. package/dist/xpath/namespaces.js +1 -1
  531. package/dist/xpath/worker.d.ts +11 -5
  532. package/dist/xpath/worker.js +24 -7
  533. package/dist/xsd/form-model.d.ts +19 -2
  534. package/dist/xsd/form-model.js +14 -2
  535. package/dist/xsd/json-bridge.d.ts +152 -0
  536. package/dist/xsd/json-bridge.js +1213 -0
  537. package/dist/xsd/locate.d.ts +2 -30
  538. package/dist/xsd/locate.js +1 -109
  539. package/dist/xsd/xml-scan.d.ts +2 -0
  540. package/dist/xsd/xml-scan.js +1 -1
  541. package/dist/xsd/xml-writer.d.ts +2 -0
  542. package/dist/xsd/xml-writer.js +4 -0
  543. package/package.json +12 -1
  544. package/dist/generate.d.ts +0 -12
  545. package/dist/operations.d.ts +0 -12
  546. package/dist/run/effective-auth.d.ts +0 -10
  547. package/dist/run/effective-auth.js +0 -19
  548. package/dist/run/prepare.d.ts +0 -43
  549. package/dist/run/prepare.js +0 -280
  550. package/dist/send-options.d.ts +0 -141
  551. package/dist/wsdl/fetch.d.ts +0 -13
  552. /package/dist/{soap → http}/charset.d.ts +0 -0
  553. /package/dist/{soap → http}/charset.js +0 -0
  554. /package/dist/{wsdl → http}/ref-policy.d.ts +0 -0
  555. /package/dist/{wsdl → http}/ref-policy.js +0 -0
  556. /package/dist/{wss/keystore → keystore}/certificate.d.ts +0 -0
  557. /package/dist/{wss/keystore → keystore}/certificate.js +0 -0
  558. /package/dist/{wss/keystore → keystore}/index.d.ts +0 -0
  559. /package/dist/{wss/keystore → keystore}/model.d.ts +0 -0
  560. /package/dist/{wss/keystore → keystore}/model.js +0 -0
  561. /package/dist/{wss/keystore → keystore}/pem.d.ts +0 -0
  562. /package/dist/{wss/keystore → keystore}/pkcs12.d.ts +0 -0
  563. /package/dist/{wsdl → project}/cache-naming.d.ts +0 -0
  564. /package/dist/{types.js → soap/types.js} +0 -0
  565. /package/dist/{soap → xml}/prefixes.d.ts +0 -0
  566. /package/dist/{soap → xml}/prefixes.js +0 -0
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Turns a saved request plus the settings around it into the {@link SoapSendInput} the
3
+ * transport actually receives.
4
+ *
5
+ * This is the single place the three layers of configuration meet, and the precedence between
6
+ * them is fixed here rather than in the desktop app: the request's own property wins, then the
7
+ * project's setting, then the user's preference (which is also the engine default). A property
8
+ * left unset in the request is therefore never "off" — it is "inherit".
9
+ */
10
+ import type { Preferences } from '../project/preferences.js';
11
+ import type { Attachment, HeaderEntry, ProjectSettings, RequestProperties } from '../project/model.js';
12
+ import type { AttachmentResolver } from './mime/types.js';
13
+ import type { SoapSendInput } from './types.js';
14
+ /** The parts of a request {@link toSoapSendInput} reads. */
15
+ export interface SoapSendRequestInput {
16
+ readonly properties: RequestProperties;
17
+ readonly soapVersion: '1.1' | '1.2';
18
+ readonly soapAction?: string;
19
+ readonly headers: readonly HeaderEntry[];
20
+ readonly envelopeXml: string;
21
+ }
22
+ /**
23
+ * How the send is to read attachment and inline-file bytes. The engine never opens a file
24
+ * on its own, so without this the request's attachments (and its inline-file property) are
25
+ * left inert; the desktop main process supplies `createFileAttachmentResolver`.
26
+ */
27
+ export interface AttachmentResolvers {
28
+ readonly resolver: AttachmentResolver;
29
+ /** Reads one file for "Enable Inline Files". */
30
+ readonly resolveFile?: (path: string) => Promise<Uint8Array>;
31
+ /** The project's resource root, for relative inline-file references. */
32
+ readonly resourceRoot?: string;
33
+ }
34
+ /** Everything {@link toSoapSendInput} needs beyond the request itself. */
35
+ export interface ToSoapSendInputArgs {
36
+ readonly request: SoapSendRequestInput;
37
+ /** The already-resolved endpoint URL (environment overrides applied). */
38
+ readonly endpoint: string;
39
+ readonly preferences?: Preferences;
40
+ readonly projectSettings?: Pick<ProjectSettings, 'defaultTimeoutMs'>;
41
+ /** The request's attachments; only acted on together with {@link attachmentResolvers}. */
42
+ readonly attachments?: readonly Attachment[];
43
+ readonly attachmentResolvers?: AttachmentResolvers;
44
+ }
45
+ /**
46
+ * Builds the send input for one request.
47
+ *
48
+ * Timeout precedence is request > project > preference. The TLS floor (`ssl.minVersion`) and
49
+ * the HTTP/2 offer come from preferences alone. Headers are the request's own, plus a
50
+ * `User-Agent` from preferences when the request does not set one, plus `Accept-Encoding` when
51
+ * response compression is enabled and `Connection: close` when connection reuse is disabled.
52
+ * Request-body gzip is requested via `compressBody`; the transport does the compressing so the
53
+ * `Content-Length` it computes describes the bytes that are actually sent.
54
+ *
55
+ * The MTOM/attachment properties are mapped only when `attachmentResolvers` says how bytes
56
+ * can be read; without a resolver there is nothing the transport could do with them, and a
57
+ * half-configured send would silently drop parts.
58
+ *
59
+ * @param args the request, its resolved endpoint, and the preferences/project settings around it
60
+ */
61
+ export declare function toSoapSendInput(args: ToSoapSendInputArgs): SoapSendInput;
@@ -7,9 +7,9 @@
7
7
  * project's setting, then the user's preference (which is also the engine default). A property
8
8
  * left unset in the request is therefore never "off" — it is "inherit".
9
9
  */
10
- import { DEFAULT_PREFERENCES } from './project/preferences.js';
11
- import { soapActionHeaders } from './soap/soap-action.js';
12
- import { prettyPrint, removeEmptyContent, stripWhitespaces } from './soap/transforms.js';
10
+ import { DEFAULT_PREFERENCES } from '../project/preferences.js';
11
+ import { soapActionHeaders } from './soap-action.js';
12
+ import { prettyPrint, removeEmptyContent, stripWhitespaces } from './transforms.js';
13
13
  /** Case-insensitive lookup over a header map. */
14
14
  function hasHeader(headers, name) {
15
15
  const lower = name.toLowerCase();
@@ -55,7 +55,7 @@ function transformEnvelope(xml, properties, indentWidth) {
55
55
  *
56
56
  * @param args the request, its resolved endpoint, and the preferences/project settings around it
57
57
  */
58
- export function toSendInput(args) {
58
+ export function toSoapSendInput(args) {
59
59
  const preferences = args.preferences ?? DEFAULT_PREFERENCES;
60
60
  const { properties } = args.request;
61
61
  const headers = {};
@@ -72,7 +72,7 @@ export function toSendInput(args) {
72
72
  headers['Connection'] = 'close';
73
73
  }
74
74
  // A non-default `encoding` property changes what bytes actually go on the wire (see
75
- // `encodeBody` in `send.ts`), so the `Content-Type` charset must say the same thing — a
75
+ // `encodeBody` in `http/charset.ts`), so the `Content-Type` charset must say the same thing — a
76
76
  // request sent as ISO-8859-1 but declared UTF-8 would decode wrong at the far end. This is
77
77
  // skipped for the default encoding so a request with no opinion keeps getting the transport's
78
78
  // own `UTF-8` charset, computed downstream exactly as it always has been.
@@ -122,107 +122,3 @@ export function toSendInput(args) {
122
122
  ...(attachmentOptions !== undefined ? { attachments: args.attachments ?? [], attachmentOptions } : {}),
123
123
  };
124
124
  }
125
- /** The first of `values` that is not `undefined`, which is what "inherit" means. */
126
- function inherited(...values) {
127
- return values.find((value) => value !== undefined);
128
- }
129
- /**
130
- * Builds the send input for one REST request.
131
- *
132
- * Precedence is request → API → project → preference, the same ladder a SOAP request's properties
133
- * climb, and for the same reason: a setting the request leaves unset means *inherit*, never *off*.
134
- * The headers the host adds on the request's behalf — `User-Agent`, `Accept-Encoding`, `Connection`,
135
- * a default `Accept` — are passed separately from the request's own, so `rest/send.ts` can let the
136
- * user's typed header win without having to guess which came from where.
137
- */
138
- export function toRestSendInput(args) {
139
- const preferences = args.preferences ?? DEFAULT_PREFERENCES;
140
- const request = args.request;
141
- const api = args.apiSettings ?? {};
142
- const defaultHeaders = {};
143
- if (preferences.http.userAgent.length > 0) {
144
- defaultHeaders['User-Agent'] = preferences.http.userAgent;
145
- }
146
- if (preferences.http.responseCompression) {
147
- defaultHeaders['Accept-Encoding'] = 'gzip, deflate, br';
148
- }
149
- if (preferences.http.closeConnections) {
150
- defaultHeaders.Connection = 'close';
151
- }
152
- if (preferences.rest.defaultAccept.length > 0) {
153
- defaultHeaders.Accept = preferences.rest.defaultAccept;
154
- }
155
- const timeoutMs = inherited(request.settings.timeoutMs, api.timeoutMs, args.projectSettings?.defaultTimeoutMs) ??
156
- preferences.http.socketTimeoutMs;
157
- const followRedirects = inherited(request.settings.followRedirects, api.followRedirects) ?? preferences.rest.followRedirects;
158
- const maxRedirects = inherited(request.settings.maxRedirects, api.maxRedirects) ?? preferences.rest.maxRedirects;
159
- const keepBodyOnRedirect = inherited(request.settings.keepBodyOnRedirect, api.keepBodyOnRedirect);
160
- const encodeUrl = inherited(request.settings.encodeUrl, api.encodeUrl);
161
- const maxSizeBytes = inherited(request.settings.maxSizeBytes, api.maxSizeBytes);
162
- const bindAddress = inherited(request.settings.bindAddress, api.bindAddress);
163
- return {
164
- baseUrl: args.baseUrl,
165
- request: {
166
- method: request.method,
167
- url: request.url,
168
- pathParams: request.pathParams,
169
- query: request.query,
170
- headers: request.headers,
171
- body: request.body,
172
- },
173
- settings: {
174
- timeoutMs,
175
- followRedirects,
176
- maxRedirects,
177
- ...(keepBodyOnRedirect !== undefined ? { keepBodyOnRedirect } : {}),
178
- ...(encodeUrl !== undefined ? { encodeUrl } : {}),
179
- ...(maxSizeBytes !== undefined ? { maxSizeBytes } : {}),
180
- ...(bindAddress !== undefined && bindAddress.length > 0 ? { localAddress: bindAddress } : {}),
181
- ...(preferences.http.allowH2 ? { allowH2: true } : {}),
182
- },
183
- defaultHeaders,
184
- ...(args.auth !== undefined ? { auth: args.auth } : {}),
185
- ...(args.cookies !== undefined ? { cookies: args.cookies } : {}),
186
- // As for SOAP: the TLS floor is the user's one-off choice, and everything else in `tls` is
187
- // resolved by the host, which reads files and secrets, and merged onto this.
188
- tls: { minVersion: preferences.ssl.minVersion, ...args.tls },
189
- ...(args.proxy !== undefined ? { proxy: args.proxy } : {}),
190
- ...(args.resolveFile !== undefined ? { resolveFile: args.resolveFile } : {}),
191
- ...(args.signal !== undefined ? { signal: args.signal } : {}),
192
- };
193
- }
194
- /**
195
- * Builds the transport input for one gRPC call, everything but the encoded messages.
196
- *
197
- * The same request → API → project → preference ladder as a REST request, and the same TLS rule:
198
- * the floor comes from preferences, and the host merges trust anchors, the client identity and the
199
- * per-request trust decision on top. Metadata rows are the API's first and then the request's, so
200
- * a repeated key resolves to the request's value on the wire.
201
- */
202
- export function toGrpcSendInput(args) {
203
- const preferences = args.preferences ?? DEFAULT_PREFERENCES;
204
- const request = args.request;
205
- const api = args.apiSettings ?? {};
206
- const defaultMetadata = {};
207
- if (preferences.http.userAgent.length > 0) {
208
- defaultMetadata['user-agent'] = preferences.http.userAgent;
209
- }
210
- const timeoutMs = inherited(request.settings.timeoutMs, api.timeoutMs, args.projectSettings?.defaultTimeoutMs) ??
211
- preferences.http.socketTimeoutMs;
212
- const maxSizeBytes = inherited(request.settings.maxSizeBytes, api.maxSizeBytes);
213
- const bindAddress = inherited(request.settings.bindAddress, api.bindAddress);
214
- return {
215
- target: args.target,
216
- tls: args.tls,
217
- service: request.service,
218
- method: request.method,
219
- metadata: [...(args.apiMetadata ?? []), ...request.metadata],
220
- defaultMetadata,
221
- timeoutMs,
222
- ...(maxSizeBytes !== undefined ? { maxSizeBytes } : {}),
223
- ...(bindAddress !== undefined && bindAddress.length > 0 ? { localAddress: bindAddress } : {}),
224
- ...(args.auth !== undefined ? { auth: args.auth } : {}),
225
- tlsOptions: { minVersion: preferences.ssl.minVersion, ...args.tlsOptions },
226
- ...(args.signal !== undefined ? { signal: args.signal } : {}),
227
- };
228
- }
@@ -3,7 +3,7 @@
3
3
  * response: SOAP version, fault, or "not actually SOAP" detection.
4
4
  */
5
5
  import type { Dispatcher } from 'undici';
6
- import type { PropertyScopes } from './project/properties.js';
6
+ import type { PropertyScopes } from '../project/properties.js';
7
7
  import type { SoapExchange, SoapSendInput } from './types.js';
8
8
  /**
9
9
  * Sends `input.envelopeXml` to `input.endpoint` over HTTP, computing the
@@ -4,17 +4,18 @@
4
4
  */
5
5
  import { randomUUID } from 'node:crypto';
6
6
  import { gzipSync } from 'node:zlib';
7
- import { WirebenchError } from './errors.js';
8
- import { expandSendInput } from './project/properties.js';
9
- import { sendWithAuth } from './http/auth/apply.js';
10
- import { headerValue, mergeHeaders } from './http/headers.js';
11
- import { charsetOf } from './soap/charset.js';
12
- import { packageRequestBody, readResponseBody, substituteInlineFiles, } from './soap/mime/send-pipeline.js';
13
- import { parseSoapResponse } from './soap/response-parser.js';
14
- import { soapActionHeaders } from './soap/soap-action.js';
15
- import { applyWsaHeaders, effectiveAction } from './wsa/headers.js';
16
- import { applyOutgoingWss } from './wss/apply.js';
17
- import { processIncomingWss } from './wss/incoming/index.js';
7
+ import { WirebenchError } from '../errors.js';
8
+ import { expandSendInput } from './expand.js';
9
+ import { sendWithAuth } from '../http/auth/apply.js';
10
+ import { applySoapAuth } from './auth.js';
11
+ import { headerValue, mergeHeaders } from '../http/headers.js';
12
+ import { charsetOf } from '../http/charset.js';
13
+ import { packageRequestBody, readResponseBody, substituteInlineFiles } from './mime/send-pipeline.js';
14
+ import { parseSoapResponse } from './response-parser.js';
15
+ import { soapActionHeaders } from './soap-action.js';
16
+ import { applyWsaHeaders, effectiveAction } from '../wsa/headers.js';
17
+ import { applyOutgoingWss } from '../wss/apply.js';
18
+ import { processIncomingWss } from '../wss/incoming/index.js';
18
19
  /**
19
20
  * Sends `input.envelopeXml` to `input.endpoint` over HTTP, computing the
20
21
  * `Content-Type`/`SOAPAction` headers for `input.soapVersion` and merging in
@@ -64,6 +65,12 @@ export async function sendSoapRequest(input, options) {
64
65
  effectiveInput = expanded.input;
65
66
  unresolved = expanded.unresolved;
66
67
  }
68
+ // Token credentials become headers or a query parameter now, after expansion so a `${token}`
69
+ // has resolved. The keyed endpoint is used only on the wire: WS-Addressing's `wsa:To` below
70
+ // keeps the configured endpoint, so an API key never lands inside the envelope.
71
+ const authApplied = applySoapAuth(effectiveInput.endpoint, effectiveInput.headers, effectiveInput.auth);
72
+ const wireEndpoint = authApplied.endpoint;
73
+ effectiveInput = withTransportAuth({ ...effectiveInput, headers: authApplied.headers }, authApplied.transportAuth);
67
74
  const problems = [];
68
75
  // Inline `file:` references are substituted first, with property expansion: both are envelope
69
76
  // *text* preparation, and the envelope every later stage sees must be the one that goes on
@@ -137,7 +144,7 @@ export async function sendSoapRequest(input, options) {
137
144
  }
138
145
  const timeoutMs = effectiveInput.timeoutMs ?? 60_000;
139
146
  const request = {
140
- url: effectiveInput.endpoint,
147
+ url: wireEndpoint,
141
148
  method: 'POST',
142
149
  headers,
143
150
  body,
@@ -208,3 +215,12 @@ export async function sendSoapRequest(input, options) {
208
215
  : {}),
209
216
  };
210
217
  }
218
+ /** The input with `auth` replaced by only what the transport handles (Basic/NTLM), or removed. */
219
+ function withTransportAuth(input, transportAuth) {
220
+ if (transportAuth !== undefined) {
221
+ return { ...input, auth: transportAuth };
222
+ }
223
+ const copy = { ...input };
224
+ delete copy.auth;
225
+ return copy;
226
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * How SOAP interfaces are stored in a project folder (spec §3.2): `interfaces/<slug>/interface.yaml`,
3
+ * and under `operations/<operation slug>/` one `<slug>.request.yaml` with its envelope in the sibling
4
+ * `<slug>.xml` and its scripts beside it.
5
+ */
6
+ import type { Interface } from '../project/model.js';
7
+ import type { ProtocolStorage } from '../protocol/module.js';
8
+ /** SOAP's storage facet. */
9
+ export declare const soapStorage: ProtocolStorage<Interface>;
@@ -0,0 +1,237 @@
1
+ /**
2
+ * How SOAP interfaces are stored in a project folder (spec §3.2): `interfaces/<slug>/interface.yaml`,
3
+ * and under `operations/<operation slug>/` one `<slug>.request.yaml` with its envelope in the sibling
4
+ * `<slug>.xml` and its scripts beside it.
5
+ */
6
+ import { toCallbackAssertion } from '../assert/schema.js';
7
+ import { readFileIfExists, readdirIfExists } from '../project/fs.js';
8
+ import { abs, authConfig, byOrder, exact, loadScripts, optional, readYaml } from '../project/load-helpers.js';
9
+ import { assertPathSegment, INTERFACES_DIR, OPERATIONS_DIR, REQUEST_SUFFIX } from '../project/paths.js';
10
+ import { assertSupportedKind, parseFile } from '../project/schema-parts.js';
11
+ import { authDocument, scriptsDocument, writeScriptFiles } from '../project/serialize-helpers.js';
12
+ import { compact, stringifyYaml } from '../project/yaml.js';
13
+ import { isScriptFileOf } from '../script/model.js';
14
+ import { normalizeWsa } from '../wsa/model.js';
15
+ import { interfaceFileSchema, requestFileSchema } from './files.js';
16
+ /**
17
+ * Authentication at one of the three SOAP owner sites (interface, endpoint, request), loaded
18
+ * through {@link authConfig} so OAuth2 defaults (`scopes`, `clientAuth`, `pkce`) are filled
19
+ * exactly as for REST, then narrowed to {@link SoapOwnerAuth}: the schema (`soapOwnerAuthSchema`)
20
+ * already refuses `inherit` at these sites, so the narrowing cast only restates what parsing
21
+ * proved.
22
+ */
23
+ function soapOwnerAuth(parsed) {
24
+ return parsed === undefined ? undefined : authConfig(parsed);
25
+ }
26
+ async function loadRequests(fs, root, dir, problems) {
27
+ const requests = [];
28
+ const entries = await readdirIfExists(fs, abs(root, dir));
29
+ const names = new Set(entries.filter((e) => e.isFile).map((e) => e.name));
30
+ for (const entry of [...entries].sort((a, b) => a.name.localeCompare(b.name))) {
31
+ if (!entry.isFile || !entry.name.endsWith(REQUEST_SUFFIX)) {
32
+ continue;
33
+ }
34
+ const slug = entry.name.slice(0, -REQUEST_SUFFIX.length);
35
+ const relative = `${dir}/${entry.name}`;
36
+ const document = await readYaml(fs, root, relative);
37
+ assertSupportedKind(document, relative);
38
+ const parsed = parseFile(requestFileSchema, document, relative);
39
+ const xmlRelative = `${dir}/${slug}.xml`;
40
+ const envelope = await readFileIfExists(fs, abs(root, xmlRelative));
41
+ if (envelope === undefined) {
42
+ problems.push({
43
+ code: 'missing-envelope',
44
+ message: `Request "${parsed.name}" has no envelope file; loaded with an empty body`,
45
+ file: xmlRelative,
46
+ });
47
+ }
48
+ names.delete(entry.name);
49
+ names.delete(`${slug}.xml`);
50
+ const scripts = await loadScripts(fs, root, dir, slug, parsed.scripts, parsed.name, problems, (name) => names.delete(name));
51
+ requests.push({
52
+ kind: 'soap',
53
+ id: parsed.id,
54
+ name: parsed.name,
55
+ slug,
56
+ order: parsed.order,
57
+ ...optional('description', parsed.description),
58
+ ...optional('endpointId', parsed.endpointId),
59
+ ...optional('endpointUrl', parsed.endpointUrl),
60
+ soapVersion: parsed.soapVersion,
61
+ ...optional('soapAction', parsed.soapAction),
62
+ headers: parsed.headers,
63
+ attachments: parsed.attachments.map((a) => exact(a)),
64
+ ...optional('auth', soapOwnerAuth(parsed.auth)),
65
+ ...(parsed.wsa !== undefined ? { wsa: normalizeWsa(parsed.wsa) } : {}),
66
+ ...optional('wssOutgoingRef', parsed.wssOutgoingRef),
67
+ ...optional('wssIncomingRef', parsed.wssIncomingRef),
68
+ properties: exact(parsed.properties),
69
+ assertions: parsed.assertions.map((a) => (a.type === 'callback' ? toCallbackAssertion(a) : exact(a))),
70
+ ...(parsed.orphaned === true ? { orphaned: true } : {}),
71
+ ...(scripts !== undefined ? { scripts } : {}),
72
+ envelopeXml: envelope === undefined ? '' : envelope.toString('utf8'),
73
+ });
74
+ }
75
+ for (const orphan of [...names].sort()) {
76
+ problems.push({
77
+ code: 'orphan-request-file',
78
+ message: `"${orphan}" does not belong to any request`,
79
+ file: `${dir}/${orphan}`,
80
+ });
81
+ }
82
+ return requests.sort(byOrder);
83
+ }
84
+ function requestDocument(request) {
85
+ return compact({
86
+ kind: request.kind,
87
+ id: request.id,
88
+ name: request.name,
89
+ order: request.order,
90
+ description: request.description,
91
+ endpointId: request.endpointId,
92
+ endpointUrl: request.endpointUrl,
93
+ soapVersion: request.soapVersion,
94
+ soapAction: request.soapAction,
95
+ headers: request.headers.map((h) => ({ name: h.name, value: h.value })),
96
+ attachments: request.attachments.map((a) => compact({ ...a })),
97
+ auth: request.auth === undefined ? undefined : authDocument(request.auth),
98
+ wsa: request.wsa === undefined ? undefined : compact({ ...request.wsa }),
99
+ wssOutgoingRef: request.wssOutgoingRef,
100
+ wssIncomingRef: request.wssIncomingRef,
101
+ properties: compact({ ...request.properties }),
102
+ assertions: request.assertions.length > 0 ? request.assertions.map((a) => compact({ ...a })) : undefined,
103
+ orphaned: request.orphaned === true ? true : undefined,
104
+ scripts: scriptsDocument(request.scripts, request.slug).document,
105
+ });
106
+ }
107
+ function interfaceDocument(iface) {
108
+ return compact({
109
+ kind: iface.kind,
110
+ id: iface.id,
111
+ name: iface.name,
112
+ order: iface.order,
113
+ definitionUrl: iface.definitionUrl,
114
+ cacheDefinition: iface.cacheDefinition,
115
+ targetNamespace: iface.targetNamespace,
116
+ endpoints: iface.endpoints.map((e) => compact({ ...e, auth: e.auth === undefined ? undefined : authDocument(e.auth) })),
117
+ defaultEndpointId: iface.defaultEndpointId,
118
+ wsa: compact({ ...iface.wsa }),
119
+ auth: iface.auth === undefined ? undefined : authDocument(iface.auth),
120
+ operations: iface.operations.map((op) => ({
121
+ name: op.name,
122
+ bindingName: op.bindingName,
123
+ slug: op.slug,
124
+ order: op.order,
125
+ })),
126
+ });
127
+ }
128
+ /** SOAP's storage facet. */
129
+ export const soapStorage = {
130
+ dir: INTERFACES_DIR,
131
+ async load(ctx, slug, document) {
132
+ const { fs, root, problems } = ctx;
133
+ const relative = `${INTERFACES_DIR}/${slug}/interface.yaml`;
134
+ const parsed = parseFile(interfaceFileSchema, document, relative);
135
+ const operationsDir = `${INTERFACES_DIR}/${slug}/${OPERATIONS_DIR}`;
136
+ const folders = new Set((await readdirIfExists(fs, abs(root, operationsDir))).filter((e) => e.isDirectory).map((e) => e.name));
137
+ const operations = [];
138
+ for (const entry of parsed.operations) {
139
+ folders.delete(entry.slug);
140
+ operations.push({
141
+ name: entry.name,
142
+ bindingName: entry.bindingName,
143
+ slug: entry.slug,
144
+ order: entry.order,
145
+ requests: await loadRequests(fs, root, `${operationsDir}/${entry.slug}`, problems),
146
+ });
147
+ }
148
+ for (const orphan of [...folders].sort()) {
149
+ problems.push({
150
+ code: 'orphan-operation-folder',
151
+ message: `Operation folder "${orphan}" is not listed in interface.yaml`,
152
+ file: `${operationsDir}/${orphan}`,
153
+ });
154
+ }
155
+ const endpoints = parsed.endpoints.map((e) => ({
156
+ id: e.id,
157
+ name: e.name,
158
+ url: e.url,
159
+ ...optional('auth', soapOwnerAuth(e.auth)),
160
+ authMode: e.authMode,
161
+ }));
162
+ return {
163
+ kind: 'soap',
164
+ id: parsed.id,
165
+ name: parsed.name,
166
+ slug,
167
+ order: parsed.order,
168
+ definitionUrl: parsed.definitionUrl,
169
+ cacheDefinition: parsed.cacheDefinition,
170
+ ...optional('targetNamespace', parsed.targetNamespace),
171
+ endpoints,
172
+ ...optional('defaultEndpointId', parsed.defaultEndpointId),
173
+ wsa: normalizeWsa(parsed.wsa),
174
+ ...optional('auth', soapOwnerAuth(parsed.auth)),
175
+ operations: operations.sort(byOrder),
176
+ };
177
+ },
178
+ files(iface) {
179
+ const files = new Map();
180
+ assertPathSegment(iface.slug);
181
+ const base = `${INTERFACES_DIR}/${iface.slug}`;
182
+ files.set(`${base}/interface.yaml`, stringifyYaml(interfaceDocument(iface)));
183
+ for (const operation of iface.operations) {
184
+ assertPathSegment(operation.slug);
185
+ const dir = `${base}/${OPERATIONS_DIR}/${operation.slug}`;
186
+ for (const request of operation.requests) {
187
+ assertPathSegment(request.slug);
188
+ files.set(`${dir}/${request.slug}${REQUEST_SUFFIX}`, stringifyYaml(requestDocument(request)));
189
+ files.set(`${dir}/${request.slug}.xml`, request.envelopeXml);
190
+ writeScriptFiles(files, dir, request.scripts, request.slug);
191
+ }
192
+ }
193
+ return files;
194
+ },
195
+ /**
196
+ * `interface.yaml`, every `operations/<slug>/*.request.yaml`, and the `.xml` and script files
197
+ * that sit beside a request file of the same slug. An envelope with no request file, the
198
+ * definition cache and anything else in the folder are not Wirebench's to delete.
199
+ */
200
+ async managed(fs, root, slug) {
201
+ const managed = [];
202
+ const base = `${INTERFACES_DIR}/${slug}`;
203
+ const ifaceFile = `${base}/interface.yaml`;
204
+ if ((await readFileIfExists(fs, abs(root, ifaceFile))) !== undefined) {
205
+ managed.push(ifaceFile);
206
+ }
207
+ const opsDir = `${base}/${OPERATIONS_DIR}`;
208
+ for (const opEntry of await readdirIfExists(fs, abs(root, opsDir))) {
209
+ if (!opEntry.isDirectory) {
210
+ continue;
211
+ }
212
+ const opDir = `${opsDir}/${opEntry.name}`;
213
+ const requestSlugs = new Set();
214
+ const opFiles = await readdirIfExists(fs, abs(root, opDir));
215
+ for (const fileEntry of opFiles) {
216
+ if (fileEntry.isFile && fileEntry.name.endsWith(REQUEST_SUFFIX)) {
217
+ requestSlugs.add(fileEntry.name.slice(0, -REQUEST_SUFFIX.length));
218
+ managed.push(`${opDir}/${fileEntry.name}`);
219
+ }
220
+ }
221
+ for (const fileEntry of opFiles) {
222
+ if (fileEntry.isFile && fileEntry.name.endsWith('.xml')) {
223
+ const requestSlug = fileEntry.name.slice(0, -'.xml'.length);
224
+ if (requestSlugs.has(requestSlug)) {
225
+ managed.push(`${opDir}/${fileEntry.name}`);
226
+ }
227
+ }
228
+ else if (fileEntry.isFile && [...requestSlugs].some((known) => isScriptFileOf(fileEntry.name, known))) {
229
+ managed.push(`${opDir}/${fileEntry.name}`);
230
+ }
231
+ }
232
+ }
233
+ return managed;
234
+ },
235
+ containers: (project) => project.interfaces,
236
+ withContainers: (project, interfaces) => ({ ...project, interfaces }),
237
+ };
@@ -10,8 +10,8 @@
10
10
  * Entitizing is the odd one out. It escapes the values substituted by property expansion,
11
11
  * which cannot be identified after the fact — by the time an envelope is a string, a `&` that
12
12
  * came from a property is indistinguishable from one the user typed. So {@link entitizeValue}
13
- * is applied *during* expansion instead (see `project/properties.ts`'s `entitize` option), and
14
- * lives here alongside its siblings.
13
+ * is applied *during* expansion instead (see `project/properties.ts`'s `entitize` option). It
14
+ * lives in `xml/entitize.ts`, which core can import, and is re-exported here beside its siblings.
15
15
  */
16
16
  /**
17
17
  * "Remove Empty Content": drops every element that has no attributes and whose whole
@@ -40,13 +40,4 @@ export declare function stripWhitespaces(xml: string): string;
40
40
  * @returns the formatted envelope, or `xml` unchanged when it could not be formatted
41
41
  */
42
42
  export declare function prettyPrint(xml: string, indentWidth?: number): string;
43
- /**
44
- * "Entitize Properties", applied to one substituted property value: escapes the three
45
- * characters that would otherwise be read as markup once the value lands inside an envelope.
46
- *
47
- * `"` and `'` are deliberately left alone: expansion targets element content far more often
48
- * than an attribute value, and escaping quotes there would show up as `&quot;` in the payload.
49
- *
50
- * @param value the expanded property value
51
- */
52
- export declare function entitizeValue(value: string): string;
43
+ export { entitizeValue } from '../xml/entitize.js';
@@ -10,8 +10,8 @@
10
10
  * Entitizing is the odd one out. It escapes the values substituted by property expansion,
11
11
  * which cannot be identified after the fact — by the time an envelope is a string, a `&` that
12
12
  * came from a property is indistinguishable from one the user typed. So {@link entitizeValue}
13
- * is applied *during* expansion instead (see `project/properties.ts`'s `entitize` option), and
14
- * lives here alongside its siblings.
13
+ * is applied *during* expansion instead (see `project/properties.ts`'s `entitize` option). It
14
+ * lives in `xml/entitize.ts`, which core can import, and is re-exported here beside its siblings.
15
15
  */
16
16
  import { formatXml } from '../xml/pretty.js';
17
17
  import { buildRangeTree, localNameOf, tokenizeXml } from '../xml/tolerant-tree.js';
@@ -150,15 +150,4 @@ export function prettyPrint(xml, indentWidth = 3) {
150
150
  const result = formatXml(xml, { indent: ' '.repeat(Math.max(0, indentWidth)) });
151
151
  return result.problem === undefined ? result.text : xml;
152
152
  }
153
- /**
154
- * "Entitize Properties", applied to one substituted property value: escapes the three
155
- * characters that would otherwise be read as markup once the value lands inside an envelope.
156
- *
157
- * `"` and `'` are deliberately left alone: expansion targets element content far more often
158
- * than an attribute value, and escaping quotes there would show up as `&quot;` in the payload.
159
- *
160
- * @param value the expanded property value
161
- */
162
- export function entitizeValue(value) {
163
- return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
164
- }
153
+ export { entitizeValue } from '../xml/entitize.js';