@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
@@ -8,10 +8,9 @@
8
8
  * YAML, and a document that does not declare a supported OpenAPI or Swagger version. Swagger 1.x
9
9
  * and 2.0 documents are converted into the intermediate OpenAPI representation.
10
10
  *
11
- * The parser reads a document that is already resolved: `refs.ts` inlines every `$ref` first, so
11
+ * The parser reads a document that is already resolved: `json/schema/refs.ts` inlines every `$ref` first, so
12
12
  * nothing here has to fetch anything.
13
13
  */
14
- import { parse as parseYamlDocument } from 'yaml';
15
14
  import { OpenApiError } from '../../errors.js';
16
15
  import { HTTP_METHODS } from './model.js';
17
16
  import { trimTrailingSlashes } from '../url.js';
@@ -37,34 +36,7 @@ function asStringArray(value) {
37
36
  function asJson(value) {
38
37
  return value === undefined ? undefined : value;
39
38
  }
40
- /**
41
- * Parses text as JSON when it looks like JSON, and as YAML otherwise.
42
- *
43
- * JSON is a subset of YAML, so one parser would do — but a JSON document with a syntax error gets a
44
- * far better message from `JSON.parse`, and that message is what the user has to act on.
45
- *
46
- * @throws OpenApiError `openapi-malformed` when the text parses as neither.
47
- */
48
- export function parseDocumentText(text, where = 'the document') {
49
- const trimmed = text.replace(/^/, '').trimStart();
50
- if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
51
- try {
52
- return JSON.parse(trimmed);
53
- }
54
- catch (error) {
55
- throw new OpenApiError('openapi-malformed', `${where} is not valid JSON: ${messageOf(error)}`, { cause: error });
56
- }
57
- }
58
- try {
59
- return parseYamlDocument(trimmed);
60
- }
61
- catch (error) {
62
- throw new OpenApiError('openapi-malformed', `${where} is not valid YAML: ${messageOf(error)}`, { cause: error });
63
- }
64
- }
65
- function messageOf(error) {
66
- return error instanceof Error ? error.message : String(error);
67
- }
39
+ export { parseDocumentText } from '../../json/schema/parse-text.js';
68
40
  function asVersionString(v) {
69
41
  if (typeof v === 'string')
70
42
  return v;
@@ -132,14 +104,13 @@ export function versionOf(root) {
132
104
  }
133
105
  /** The keys a document may carry that this client knowingly does not read, with what to call them. */
134
106
  const IGNORED_ROOT_KEYS = {
135
- webhooks: 'webhook',
136
107
  callbacks: 'callback',
137
108
  links: 'link',
138
109
  };
139
110
  /**
140
111
  * Reads a resolved OpenAPI document.
141
112
  *
142
- * @param root the parsed document, with every `$ref` already inlined (see `refs.ts`)
113
+ * @param root the parsed document, with every `$ref` already inlined (see `json/schema/refs.ts`)
143
114
  * @throws OpenApiError `openapi-not-a-document` / `openapi-unsupported-version` as {@link versionOf} does
144
115
  */
145
116
  export function parseOpenApiDocument(root) {
@@ -159,6 +130,7 @@ export function parseOpenApiDocument(root) {
159
130
  }
160
131
  const info = isRecord(document['info']) ? document['info'] : {};
161
132
  const title = asString(info['title']) ?? 'Imported API';
133
+ const webhooks = parseWebhooks(document['webhooks'], version, skipped);
162
134
  for (const [key, kind] of Object.entries(IGNORED_ROOT_KEYS)) {
163
135
  const value = document[key];
164
136
  if (isRecord(value)) {
@@ -187,9 +159,32 @@ export function parseOpenApiDocument(root) {
187
159
  ? { security: parseSecurityRequirements(document['security']) }
188
160
  : {}),
189
161
  tags: parseTags(document['tags']),
162
+ ...(webhooks.length > 0 ? { webhooks } : {}),
190
163
  skipped,
191
164
  };
192
165
  }
166
+ /** Root `webhooks` (OpenAPI 3.1+): one {@link OpenApiHook} per name, each a path item of operations. */
167
+ function parseWebhooks(value, version, skipped) {
168
+ if (!isRecord(value))
169
+ return [];
170
+ const hooks = [];
171
+ for (const [name, item] of Object.entries(value)) {
172
+ if (name.startsWith('x-')) {
173
+ skipped.push({ kind: 'extension', where: `/webhooks/${name}`, reason: 'vendor extensions are not imported' });
174
+ continue;
175
+ }
176
+ if (version === '3.0') {
177
+ skipped.push({ kind: 'webhook', where: `/webhooks/${name}`, reason: 'webhooks need OpenAPI 3.1' });
178
+ continue;
179
+ }
180
+ if (!isRecord(item)) {
181
+ skipped.push({ kind: 'webhook', where: `/webhooks/${name}`, reason: 'not a path item' });
182
+ continue;
183
+ }
184
+ hooks.push({ name, operations: parsePathItemOperations(name, item, skipped) });
185
+ }
186
+ return hooks;
187
+ }
193
188
  function parseServers(value, skipped) {
194
189
  if (!Array.isArray(value)) {
195
190
  return [];
@@ -254,37 +249,43 @@ function parseOperations(value, skipped) {
254
249
  skipped.push({ kind: 'path', where: `/paths/${path}`, reason: 'not a path item' });
255
250
  continue;
256
251
  }
257
- const shared = parseParameters(item['parameters'], `${path} (path level)`, skipped);
258
- for (const [key, operation] of Object.entries(item)) {
259
- if (!HTTP_METHODS.includes(key.toLowerCase())) {
252
+ operations.push(...parsePathItemOperations(path, item, skipped));
253
+ }
254
+ return operations;
255
+ }
256
+ /** One path item's operations: the fixed HTTP-method fields plus 3.2's `additionalOperations`. */
257
+ function parsePathItemOperations(key, item, skipped) {
258
+ const operations = [];
259
+ const shared = parseParameters(item['parameters'], `${key} (path level)`, skipped);
260
+ for (const [method, operation] of Object.entries(item)) {
261
+ if (!HTTP_METHODS.includes(method.toLowerCase())) {
262
+ continue;
263
+ }
264
+ if (!isRecord(operation)) {
265
+ skipped.push({ kind: 'operation', where: `${method.toUpperCase()} ${key}`, reason: 'not an object' });
266
+ continue;
267
+ }
268
+ operations.push(parseOperation(method.toLowerCase(), key, operation, shared, skipped));
269
+ }
270
+ if (isRecord(item['additionalOperations'])) {
271
+ for (const [method, operation] of Object.entries(item['additionalOperations'])) {
272
+ if (method.startsWith('x-')) {
273
+ skipped.push({ kind: 'extension', where: `${method} ${key}`, reason: 'vendor extensions are not imported' });
260
274
  continue;
261
275
  }
262
- if (!isRecord(operation)) {
263
- skipped.push({ kind: 'operation', where: `${key.toUpperCase()} ${path}`, reason: 'not an object' });
276
+ if (FIXED_PATH_ITEM_METHODS.has(method.toLowerCase())) {
277
+ skipped.push({ kind: 'operation', where: `${method} ${key}`, reason: 'use the fixed field' });
264
278
  continue;
265
279
  }
266
- operations.push(parseOperation(key.toLowerCase(), path, operation, shared, skipped));
267
- }
268
- if (isRecord(item['additionalOperations'])) {
269
- for (const [key, operation] of Object.entries(item['additionalOperations'])) {
270
- if (key.startsWith('x-')) {
271
- skipped.push({ kind: 'extension', where: `${key} ${path}`, reason: 'vendor extensions are not imported' });
272
- continue;
273
- }
274
- if (FIXED_PATH_ITEM_METHODS.has(key.toLowerCase())) {
275
- skipped.push({ kind: 'operation', where: `${key} ${path}`, reason: 'use the fixed field' });
276
- continue;
277
- }
278
- if (!RFC_9110_METHOD_TOKEN.test(key)) {
279
- skipped.push({ kind: 'operation', where: `${key} ${path}`, reason: 'invalid HTTP method name' });
280
- continue;
281
- }
282
- if (!isRecord(operation)) {
283
- skipped.push({ kind: 'operation', where: `${key} ${path}`, reason: 'not an object' });
284
- continue;
285
- }
286
- operations.push(parseOperation(key, path, operation, shared, skipped));
280
+ if (!RFC_9110_METHOD_TOKEN.test(method)) {
281
+ skipped.push({ kind: 'operation', where: `${method} ${key}`, reason: 'invalid HTTP method name' });
282
+ continue;
283
+ }
284
+ if (!isRecord(operation)) {
285
+ skipped.push({ kind: 'operation', where: `${method} ${key}`, reason: 'not an object' });
286
+ continue;
287
287
  }
288
+ operations.push(parseOperation(method, key, operation, shared, skipped));
288
289
  }
289
290
  }
290
291
  return operations;
@@ -299,8 +300,8 @@ function parseOperation(method, path, operation, shared, skipped) {
299
300
  merged.set(`${parameter.in}:${parameter.name}`, parameter);
300
301
  }
301
302
  for (const key of Object.keys(operation)) {
302
- if (key === 'callbacks' || key === 'links') {
303
- skipped.push({ kind: key.replace(/s$/, ''), where, reason: `${key} are not imported` });
303
+ if (key === 'links') {
304
+ skipped.push({ kind: 'link', where, reason: 'links are not imported' });
304
305
  }
305
306
  if (key.startsWith('x-')) {
306
307
  skipped.push({ kind: 'extension', where: `${where} ${key}`, reason: 'vendor extensions are not imported' });
@@ -308,6 +309,8 @@ function parseOperation(method, path, operation, shared, skipped) {
308
309
  }
309
310
  const requestBody = parseRequestBody(operation['requestBody'], where, skipped);
310
311
  const security = parseSecurityRequirements(operation['security']);
312
+ const responses = parseResponses(operation['responses'], false);
313
+ const callbacks = parseCallbacks(operation['callbacks'], where, skipped);
311
314
  return {
312
315
  method,
313
316
  path,
@@ -323,8 +326,68 @@ function parseOperation(method, path, operation, shared, skipped) {
323
326
  ...(asBoolean(operation['deprecated']) === true ? { deprecated: true } : {}),
324
327
  ...(requestBody !== undefined ? { requestBody } : {}),
325
328
  ...(security !== undefined ? { security } : {}),
329
+ ...(responses !== undefined ? { responses } : {}),
330
+ ...(callbacks.length > 0 ? { callbacks } : {}),
326
331
  };
327
332
  }
333
+ /** One operation's `callbacks`: each name to its path-item key (an expression) and that item's operations. */
334
+ function parseCallbacks(value, where, skipped) {
335
+ if (!isRecord(value))
336
+ return [];
337
+ const callbacks = [];
338
+ for (const [name, entry] of Object.entries(value)) {
339
+ if (name.startsWith('x-') || !isRecord(entry))
340
+ continue;
341
+ for (const [expression, item] of Object.entries(entry)) {
342
+ if (expression.startsWith('x-'))
343
+ continue;
344
+ if (!isRecord(item)) {
345
+ skipped.push({ kind: 'callback', where: `${where} ${name}`, reason: 'not a path item' });
346
+ continue;
347
+ }
348
+ callbacks.push({ name, expression, operations: parsePathItemOperations(expression, item, skipped) });
349
+ }
350
+ }
351
+ return callbacks;
352
+ }
353
+ /**
354
+ * Reads an operation's `responses`, schemas kept as the resolved nodes (response validation needs every
355
+ * keyword, not the sample generator's subset). Swagger 2.0 declares one `schema` per response and no
356
+ * media types; it becomes `application/json` content, which is what those documents describe.
357
+ */
358
+ function parseResponses(value, swagger2) {
359
+ if (!isRecord(value)) {
360
+ return undefined;
361
+ }
362
+ const responses = nullRecord();
363
+ for (const [key, entry] of Object.entries(value)) {
364
+ if (key.startsWith('x-') || !isRecord(entry)) {
365
+ continue;
366
+ }
367
+ const description = asString(entry['description']);
368
+ let content;
369
+ if (swagger2) {
370
+ if (entry['schema'] !== undefined) {
371
+ content = nullRecord();
372
+ content['application/json'] = { schema: entry['schema'] };
373
+ }
374
+ }
375
+ else if (isRecord(entry['content'])) {
376
+ content = nullRecord();
377
+ for (const [mediaType, media] of Object.entries(entry['content'])) {
378
+ if (!isRecord(media)) {
379
+ continue;
380
+ }
381
+ content[mediaType] = media['schema'] !== undefined ? { schema: media['schema'] } : {};
382
+ }
383
+ }
384
+ responses[key] = {
385
+ ...(description !== undefined ? { description } : {}),
386
+ ...(content !== undefined ? { content } : {}),
387
+ };
388
+ }
389
+ return responses;
390
+ }
328
391
  function parseParameters(value, where, skipped) {
329
392
  if (!Array.isArray(value)) {
330
393
  return [];
@@ -434,7 +497,7 @@ function parseRequestBody(value, where, skipped) {
434
497
  /**
435
498
  * One parsed schema per resolved node, keyed by the node itself.
436
499
  *
437
- * A `$ref`-resolved description is a *graph*: `refs.ts` hands back one object per reference target,
500
+ * A `$ref`-resolved description is a *graph*: `json/schema/refs.ts` hands back one object per reference target,
438
501
  * shared by every place that referenced it. Rebuilding that graph as a tree — which is what a plain
439
502
  * recursive parse does — revisits a shared node once per path to it, so a document whose schemas
440
503
  * reference each other costs `breadth ^ depth`. Keyed on identity because that is exactly the
@@ -495,6 +558,9 @@ function parseSchemaFields(value) {
495
558
  ...(branches('allOf') !== undefined ? { allOf: branches('allOf') } : {}),
496
559
  ...(branches('oneOf') !== undefined ? { oneOf: branches('oneOf') } : {}),
497
560
  ...(branches('anyOf') !== undefined ? { anyOf: branches('anyOf') } : {}),
561
+ ...(isRecord(value['discriminator']) && asString(value['discriminator']['propertyName']) !== undefined
562
+ ? { discriminator: parseDiscriminator(value['discriminator']) }
563
+ : {}),
498
564
  ...(asBoolean(value['nullable']) !== undefined ? { nullable: asBoolean(value['nullable']) } : {}),
499
565
  ...(asBoolean(value['deprecated']) === true ? { deprecated: true } : {}),
500
566
  ...(asBoolean(value['readOnly']) === true ? { readOnly: true } : {}),
@@ -505,6 +571,15 @@ function parseSchemaFields(value) {
505
571
  ...(asString(value['$ref']) !== undefined ? { $ref: asString(value['$ref']) } : {}),
506
572
  };
507
573
  }
574
+ function parseDiscriminator(value) {
575
+ const mapping = isRecord(value['mapping'])
576
+ ? Object.fromEntries(Object.entries(value['mapping']).filter((entry) => typeof entry[1] === 'string'))
577
+ : undefined;
578
+ return {
579
+ propertyName: asString(value['propertyName']),
580
+ ...(mapping !== undefined ? { mapping } : {}),
581
+ };
582
+ }
508
583
  function parseXml(value) {
509
584
  return {
510
585
  ...(asString(value['name']) !== undefined ? { name: asString(value['name']) } : {}),
@@ -644,9 +719,6 @@ function parseSwagger2Document(document, declared) {
644
719
  if (document['produces'] !== undefined) {
645
720
  skipped.push({ kind: 'produces', where: '/produces', reason: 'produces are not imported' });
646
721
  }
647
- if (document['responses'] !== undefined) {
648
- skipped.push({ kind: 'responses', where: '/responses', reason: 'responses are not imported' });
649
- }
650
722
  return {
651
723
  version: '2.0',
652
724
  declaredVersion: declared,
@@ -1013,14 +1085,12 @@ function parseSwagger2Operations(document, skipped) {
1013
1085
  else if (opKey === 'produces') {
1014
1086
  skipped.push({ kind: 'produces', where: `${where} produces`, reason: 'produces are not imported' });
1015
1087
  }
1016
- else if (opKey === 'responses') {
1017
- skipped.push({ kind: 'responses', where: `${where} responses`, reason: 'responses are not imported' });
1018
- }
1019
1088
  else if (opKey === 'example') {
1020
1089
  skipped.push({ kind: 'example', where: `${where} example`, reason: 'examples are not imported' });
1021
1090
  }
1022
1091
  }
1023
1092
  const security = parseSecurityRequirements(operation['security']);
1093
+ const responses = parseResponses(operation['responses'], true);
1024
1094
  operations.push({
1025
1095
  method: key.toLowerCase(),
1026
1096
  path,
@@ -1038,6 +1108,7 @@ function parseSwagger2Operations(document, skipped) {
1038
1108
  ...(asBoolean(operation['deprecated']) === true ? { deprecated: true } : {}),
1039
1109
  ...(requestBody !== undefined ? { requestBody } : {}),
1040
1110
  ...(security !== undefined ? { security } : {}),
1111
+ ...(responses !== undefined ? { responses } : {}),
1041
1112
  });
1042
1113
  }
1043
1114
  }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Choosing the declared response a received one is checked against.
3
+ *
4
+ * Status first: the exact code, then its range (`4XX`, any case), then `default`. Then the media type,
5
+ * parameters ignored: the exact type, then `application/json` for a `+json` suffix, then
6
+ * `application/*`, then `*\/*`. Pure, so the worker and the tests share it.
7
+ */
8
+ import type { OpenApiResponses } from './model.js';
9
+ export type ResponseSelection = {
10
+ readonly kind: 'schema';
11
+ readonly responseKey: string;
12
+ readonly mediaType: string;
13
+ readonly schema: unknown;
14
+ } | {
15
+ readonly kind: 'no-body';
16
+ readonly responseKey: string;
17
+ } | {
18
+ readonly kind: 'no-schema';
19
+ readonly responseKey: string;
20
+ } | {
21
+ readonly kind: 'unmatched';
22
+ };
23
+ export declare function selectResponse(responses: OpenApiResponses, status: number, contentType: string | undefined): ResponseSelection;
@@ -0,0 +1,59 @@
1
+ function own(record, key) {
2
+ return Object.prototype.hasOwnProperty.call(record, key);
3
+ }
4
+ function findStatus(responses, status) {
5
+ const exact = String(status);
6
+ if (own(responses, exact)) {
7
+ return [exact, responses[exact]];
8
+ }
9
+ const range = `${Math.floor(status / 100)}xx`;
10
+ for (const key of Object.keys(responses)) {
11
+ if (key.toLowerCase() === range) {
12
+ return [key, responses[key]];
13
+ }
14
+ }
15
+ if (own(responses, 'default')) {
16
+ return ['default', responses['default']];
17
+ }
18
+ return undefined;
19
+ }
20
+ function essence(mediaType) {
21
+ return (mediaType.split(';')[0] ?? '').trim().toLowerCase();
22
+ }
23
+ export function selectResponse(responses, status, contentType) {
24
+ const found = findStatus(responses, status);
25
+ if (found === undefined) {
26
+ return { kind: 'unmatched' };
27
+ }
28
+ const [responseKey, response] = found;
29
+ const content = response.content;
30
+ if (content === undefined || Object.keys(content).length === 0) {
31
+ return { kind: 'no-body', responseKey };
32
+ }
33
+ const declared = new Map();
34
+ for (const key of Object.keys(content)) {
35
+ const normal = essence(key);
36
+ if (!declared.has(normal)) {
37
+ declared.set(normal, key);
38
+ }
39
+ }
40
+ const received = contentType === undefined ? '' : essence(contentType);
41
+ const candidates = [
42
+ received,
43
+ received.endsWith('+json') ? 'application/json' : '',
44
+ received.startsWith('application/') ? 'application/*' : '',
45
+ '*/*',
46
+ ];
47
+ for (const candidate of candidates) {
48
+ const key = candidate === '' ? undefined : declared.get(candidate);
49
+ if (key === undefined) {
50
+ continue;
51
+ }
52
+ const schema = content[key]?.schema;
53
+ if (schema === undefined) {
54
+ return { kind: 'no-schema', responseKey };
55
+ }
56
+ return { kind: 'schema', responseKey, mediaType: key, schema };
57
+ }
58
+ return { kind: 'no-schema', responseKey };
59
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * OpenAPI runtime expressions: the `{$request.body#/callbackUrl}` in a callback's key. Parsed once,
3
+ * evaluated against one recorded exchange of the parent operation. Anything the grammar does not
4
+ * allow is "not a runtime expression" — never an exception.
5
+ */
6
+ export type RuntimeSource = {
7
+ readonly kind: 'header';
8
+ readonly name: string;
9
+ } | {
10
+ readonly kind: 'query';
11
+ readonly name: string;
12
+ } | {
13
+ readonly kind: 'path';
14
+ readonly name: string;
15
+ } | {
16
+ readonly kind: 'body';
17
+ readonly pointer: string;
18
+ };
19
+ export type RuntimeExpression = {
20
+ readonly kind: 'url';
21
+ } | {
22
+ readonly kind: 'method';
23
+ } | {
24
+ readonly kind: 'statusCode';
25
+ } | {
26
+ readonly kind: 'request';
27
+ readonly source: RuntimeSource;
28
+ } | {
29
+ readonly kind: 'response';
30
+ readonly source: RuntimeSource;
31
+ };
32
+ export type TemplatePart = {
33
+ readonly kind: 'text';
34
+ readonly text: string;
35
+ } | {
36
+ readonly kind: 'expression';
37
+ readonly source: string;
38
+ readonly expression: RuntimeExpression;
39
+ };
40
+ /** The exchange an expression is evaluated against: the parent operation's last request and reply. */
41
+ export interface RuntimeExchange {
42
+ readonly url: string;
43
+ readonly method: string;
44
+ /** The parent's templated path (`/subscriptions/{id}`), for `$request.path.<name>`. */
45
+ readonly pathTemplate?: string;
46
+ readonly request: {
47
+ readonly headers: readonly (readonly [string, string])[];
48
+ readonly body?: string;
49
+ };
50
+ readonly response?: {
51
+ readonly status: number;
52
+ readonly headers: readonly (readonly [string, string])[];
53
+ readonly body?: string;
54
+ } | undefined;
55
+ }
56
+ /** Parses one expression without its braces: `$url`, `$request.body#/a`… */
57
+ export declare function parseRuntimeExpression(text: string): RuntimeExpression | undefined;
58
+ /** Splits a callback key into literal text and `{expression}` parts; `undefined` when it does not parse. */
59
+ export declare function parseRuntimeTemplate(key: string): readonly TemplatePart[] | undefined;
60
+ /** RFC 6901: `''` is the whole value; `~1` is `/`, `~0` is `~`. `undefined` when there is nothing there. */
61
+ export declare function resolveJsonPointer(value: unknown, pointer: string): unknown;
62
+ /** Fills a callback key from `exchange`. */
63
+ export declare function evaluateRuntimeTemplate(key: string, exchange: RuntimeExchange): {
64
+ readonly ok: true;
65
+ readonly value: string;
66
+ } | {
67
+ readonly ok: false;
68
+ readonly reason: string;
69
+ };