@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.
- package/README.md +134 -1
- package/dist/account/schema.d.ts +34 -0
- package/dist/account/schema.js +29 -0
- package/dist/assert/callback.d.ts +76 -0
- package/dist/assert/callback.js +320 -0
- package/dist/assert/capture-source.d.ts +50 -0
- package/dist/assert/capture-source.js +89 -0
- package/dist/assert/check.d.ts +8 -0
- package/dist/assert/check.js +18 -0
- package/dist/assert/header.d.ts +5 -0
- package/dist/assert/header.js +48 -0
- package/dist/assert/index.d.ts +2 -2
- package/dist/assert/index.js +12 -0
- package/dist/assert/match.d.ts +6 -0
- package/dist/assert/match.js +13 -4
- package/dist/assert/model.d.ts +110 -3
- package/dist/assert/model.js +16 -1
- package/dist/assert/schema.d.ts +194 -1
- package/dist/assert/schema.js +154 -12
- package/dist/assert/status-names.d.ts +9 -0
- package/dist/assert/status-names.js +27 -0
- package/dist/assert/status.d.ts +4 -1
- package/dist/assert/status.js +27 -3
- package/dist/asyncapi/browser.d.ts +7 -0
- package/dist/asyncapi/browser.js +6 -0
- package/dist/asyncapi/frame-check-worker-host.d.ts +44 -0
- package/dist/asyncapi/frame-check-worker-host.js +175 -0
- package/dist/asyncapi/frame-check-worker.d.ts +12 -0
- package/dist/asyncapi/frame-check-worker.js +25 -0
- package/dist/asyncapi/frame-check.d.ts +25 -0
- package/dist/asyncapi/frame-check.js +78 -0
- package/dist/asyncapi/import.d.ts +25 -0
- package/dist/asyncapi/import.js +34 -0
- package/dist/asyncapi/map.d.ts +40 -0
- package/dist/asyncapi/map.js +230 -0
- package/dist/asyncapi/model.d.ts +84 -0
- package/dist/asyncapi/model.js +7 -0
- package/dist/asyncapi/normalise-2.d.ts +13 -0
- package/dist/asyncapi/normalise-2.js +113 -0
- package/dist/asyncapi/normalise-3.d.ts +14 -0
- package/dist/asyncapi/normalise-3.js +133 -0
- package/dist/asyncapi/parse.d.ts +31 -0
- package/dist/asyncapi/parse.js +85 -0
- package/dist/asyncapi/read.d.ts +35 -0
- package/dist/asyncapi/read.js +186 -0
- package/dist/asyncapi/security.d.ts +14 -0
- package/dist/asyncapi/security.js +55 -0
- package/dist/asyncapi/update.d.ts +53 -0
- package/dist/asyncapi/update.js +220 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.js +22 -0
- package/dist/grpc/events.d.ts +22 -0
- package/dist/grpc/events.js +1 -0
- package/dist/grpc/expand.d.ts +1 -1
- package/dist/grpc/expand.js +15 -5
- package/dist/grpc/files.d.ts +271 -0
- package/dist/grpc/files.js +62 -0
- package/dist/grpc/model.d.ts +11 -1
- package/dist/grpc/module.d.ts +2 -0
- package/dist/grpc/module.js +13 -0
- package/dist/grpc/run.d.ts +73 -0
- package/dist/grpc/run.js +407 -0
- package/dist/grpc/script-types.d.ts +8 -0
- package/dist/grpc/script-types.js +149 -0
- package/dist/grpc/scripting.d.ts +34 -0
- package/dist/grpc/scripting.js +147 -0
- package/dist/grpc/send-input.d.ts +46 -0
- package/dist/grpc/send-input.js +42 -0
- package/dist/grpc/send.d.ts +2 -2
- package/dist/grpc/status.d.ts +9 -2
- package/dist/grpc/status.js +11 -24
- package/dist/grpc/storage.d.ts +9 -0
- package/dist/grpc/storage.js +167 -0
- package/dist/{rest/auth.d.ts → http/auth/apply-auth.d.ts} +4 -4
- package/dist/{rest/auth.js → http/auth/apply-auth.js} +1 -1
- package/dist/http/auth/apply.d.ts +1 -1
- package/dist/{rest → http/auth}/oauth2.d.ts +2 -2
- package/dist/{rest → http/auth}/oauth2.js +1 -1
- package/dist/http/auth/send-auth.d.ts +57 -0
- package/dist/http/auth/send-auth.js +7 -0
- package/dist/http/client.js +150 -8
- package/dist/http/cookies.d.ts +79 -0
- package/dist/http/cookies.js +81 -0
- package/dist/http/curl.d.ts +4 -14
- package/dist/http/curl.js +4 -154
- package/dist/http/decompress.d.ts +7 -0
- package/dist/http/decompress.js +23 -1
- package/dist/http/document-fetch.d.ts +42 -0
- package/dist/http/document-fetch.js +207 -0
- package/dist/http/entries.d.ts +27 -0
- package/dist/http/entries.js +16 -0
- package/dist/http/escape.d.ts +18 -0
- package/dist/http/escape.js +30 -0
- package/dist/http/fetch-document.d.ts +28 -0
- package/dist/{wsdl/fetch.js → http/fetch-document.js} +8 -16
- package/dist/http/media-type.d.ts +9 -0
- package/dist/http/media-type.js +12 -0
- package/dist/http/transcript-cap.d.ts +26 -0
- package/dist/http/transcript-cap.js +36 -0
- package/dist/http/types.d.ts +59 -0
- package/dist/http/webhook-signature.d.ts +81 -0
- package/dist/http/webhook-signature.js +227 -0
- package/dist/import-detect.d.ts +2 -2
- package/dist/import-detect.js +10 -1
- package/dist/index.d.ts +207 -55
- package/dist/index.js +129 -32
- package/dist/json/cursor.d.ts +2 -0
- package/dist/json/cursor.js +1 -0
- package/dist/json/pointer-range.d.ts +18 -0
- package/dist/json/pointer-range.js +157 -0
- package/dist/json/schema/model.d.ts +59 -0
- package/dist/json/schema/model.js +8 -0
- package/dist/json/schema/parse-text.d.ts +16 -0
- package/dist/json/schema/parse-text.js +37 -0
- package/dist/{rest/openapi → json/schema}/refs.d.ts +2 -2
- package/dist/{rest/openapi → json/schema}/refs.js +3 -3
- package/dist/{rest/openapi → json/schema}/sample.d.ts +4 -0
- package/dist/{rest/openapi → json/schema}/sample.js +2 -2
- package/dist/json/schema/source.d.ts +21 -0
- package/dist/json/schema/source.js +8 -0
- package/dist/json/schema-validate.d.ts +49 -0
- package/dist/json/schema-validate.js +557 -0
- package/dist/{wss/keystore → keystore}/index.js +1 -1
- package/dist/{wss/keystore → keystore}/pem.js +1 -1
- package/dist/{wss/keystore → keystore}/pkcs12.js +1 -1
- package/dist/project/attachments-cache.d.ts +3 -1
- package/dist/{wsdl → project}/cache-naming.js +1 -1
- package/dist/project/endpoints.d.ts +18 -8
- package/dist/project/endpoints.js +21 -6
- package/dist/project/environments.d.ts +7 -5
- package/dist/project/history.d.ts +105 -9
- package/dist/project/history.js +195 -23
- package/dist/project/inherit.d.ts +7 -0
- package/dist/project/inherit.js +9 -0
- package/dist/project/keystores.d.ts +1 -1
- package/dist/project/load-helpers.d.ts +89 -0
- package/dist/project/load-helpers.js +177 -0
- package/dist/project/load.d.ts +30 -4
- package/dist/project/load.js +168 -545
- package/dist/project/managed-files.d.ts +36 -0
- package/dist/project/managed-files.js +97 -0
- package/dist/project/migrate.d.ts +2 -2
- package/dist/project/migrate.js +2 -2
- package/dist/project/model.d.ts +92 -14
- package/dist/project/model.js +50 -4
- package/dist/project/paths.d.ts +10 -1
- package/dist/project/paths.js +10 -1
- package/dist/project/preferences.d.ts +11 -2
- package/dist/project/preferences.js +5 -1
- package/dist/project/properties.d.ts +31 -17
- package/dist/project/properties.js +89 -70
- package/dist/project/request-location.d.ts +20 -0
- package/dist/project/request-location.js +62 -0
- package/dist/project/save.d.ts +12 -2
- package/dist/project/save.js +186 -141
- package/dist/project/schema-parts.d.ts +337 -0
- package/dist/project/schema-parts.js +248 -0
- package/dist/project/schema.d.ts +72 -928
- package/dist/project/schema.js +17 -466
- package/dist/project/sequence-guards.d.ts +43 -0
- package/dist/project/sequence-guards.js +109 -0
- package/dist/project/serialize-helpers.d.ts +60 -0
- package/dist/project/serialize-helpers.js +108 -0
- package/dist/project/serialize.d.ts +7 -8
- package/dist/project/serialize.js +34 -293
- package/dist/protocol/features.d.ts +51 -0
- package/dist/protocol/features.js +64 -0
- package/dist/protocol/index.d.ts +7 -0
- package/dist/protocol/index.js +4 -0
- package/dist/protocol/module.d.ts +247 -0
- package/dist/protocol/module.js +48 -0
- package/dist/protocol/registry.d.ts +42 -0
- package/dist/protocol/registry.js +47 -0
- package/dist/protocols.d.ts +77 -0
- package/dist/protocols.js +40 -0
- package/dist/redact/index.d.ts +12 -1
- package/dist/redact/index.js +55 -7
- package/dist/redact/literal.d.ts +10 -0
- package/dist/redact/literal.js +110 -12
- package/dist/rest/body.d.ts +2 -10
- package/dist/rest/body.js +3 -25
- package/dist/rest/browser.d.ts +4 -0
- package/dist/rest/browser.js +5 -0
- package/dist/rest/contract-check-worker-host.d.ts +36 -0
- package/dist/rest/contract-check-worker-host.js +158 -0
- package/dist/rest/contract-check-worker.d.ts +7 -0
- package/dist/rest/contract-check-worker.js +28 -0
- package/dist/rest/contract-check.d.ts +43 -0
- package/dist/rest/contract-check.js +217 -0
- package/dist/rest/cookie-jar.d.ts +62 -0
- package/dist/rest/cookie-jar.js +262 -0
- package/dist/rest/cookies.d.ts +6 -22
- package/dist/rest/cookies.js +6 -42
- package/dist/rest/curl.js +5 -1
- package/dist/rest/events.d.ts +12 -0
- package/dist/rest/events.js +1 -0
- package/dist/rest/expand.d.ts +6 -1
- package/dist/rest/expand.js +29 -11
- package/dist/rest/files.d.ts +439 -0
- package/dist/rest/files.js +107 -0
- package/dist/rest/json-form.d.ts +97 -0
- package/dist/rest/json-form.js +396 -0
- package/dist/rest/model.d.ts +35 -24
- package/dist/rest/model.js +6 -9
- package/dist/rest/module.d.ts +2 -0
- package/dist/rest/module.js +13 -0
- package/dist/rest/openapi/cache.d.ts +7 -2
- package/dist/rest/openapi/cache.js +2 -2
- package/dist/rest/openapi/import.d.ts +11 -16
- package/dist/rest/openapi/import.js +6 -2
- package/dist/rest/openapi/map.d.ts +38 -1
- package/dist/rest/openapi/map.js +151 -41
- package/dist/rest/openapi/match.d.ts +20 -0
- package/dist/rest/openapi/match.js +117 -0
- package/dist/rest/openapi/model.d.ts +33 -45
- package/dist/rest/openapi/parse.d.ts +3 -12
- package/dist/rest/openapi/parse.js +138 -67
- package/dist/rest/openapi/responses.d.ts +23 -0
- package/dist/rest/openapi/responses.js +59 -0
- package/dist/rest/openapi/runtime-expression.d.ts +69 -0
- package/dist/rest/openapi/runtime-expression.js +213 -0
- package/dist/rest/openapi/update.d.ts +116 -0
- package/dist/rest/openapi/update.js +456 -0
- package/dist/rest/postman/map.d.ts +1 -0
- package/dist/rest/postman/map.js +66 -4
- package/dist/rest/postman/model.d.ts +9 -0
- package/dist/rest/postman/parse.js +33 -10
- package/dist/rest/response.d.ts +2 -23
- package/dist/rest/response.js +3 -75
- package/dist/rest/run.d.ts +56 -0
- package/dist/rest/run.js +395 -0
- package/dist/rest/script-types.d.ts +7 -0
- package/dist/rest/script-types.js +83 -0
- package/dist/rest/scripting.d.ts +38 -0
- package/dist/rest/scripting.js +282 -0
- package/dist/rest/send-input.d.ts +54 -0
- package/dist/rest/send-input.js +73 -0
- package/dist/rest/send.d.ts +77 -4
- package/dist/rest/send.js +128 -7
- package/dist/rest/sse-transcript.d.ts +25 -0
- package/dist/rest/sse-transcript.js +95 -0
- package/dist/rest/sse.d.ts +43 -0
- package/dist/rest/sse.js +195 -0
- package/dist/rest/storage.d.ts +26 -0
- package/dist/rest/storage.js +262 -0
- package/dist/rest/url.d.ts +10 -4
- package/dist/rest/url.js +38 -5
- package/dist/run/baseline-update.d.ts +35 -0
- package/dist/run/baseline-update.js +97 -0
- package/dist/run/baseline.d.ts +42 -0
- package/dist/run/baseline.js +93 -0
- package/dist/run/context.d.ts +86 -0
- package/dist/run/context.js +31 -0
- package/dist/run/current-values.d.ts +32 -0
- package/dist/run/current-values.js +43 -0
- package/dist/run/event-queue.d.ts +14 -0
- package/dist/run/event-queue.js +46 -0
- package/dist/run/exchange.d.ts +62 -0
- package/dist/run/exchange.js +65 -0
- package/dist/run/host.d.ts +89 -0
- package/dist/run/host.js +1 -0
- package/dist/run/index.d.ts +20 -7
- package/dist/run/index.js +12 -4
- package/dist/run/oauth2-token.d.ts +42 -0
- package/dist/run/oauth2-token.js +92 -0
- package/dist/run/open.d.ts +12 -0
- package/dist/run/open.js +16 -0
- package/dist/run/run.d.ts +124 -4
- package/dist/run/run.js +293 -134
- package/dist/run/scope.d.ts +11 -0
- package/dist/run/scope.js +26 -0
- package/dist/run/script-support.d.ts +53 -0
- package/dist/run/script-support.js +68 -0
- package/dist/run/secret-needs.d.ts +11 -4
- package/dist/run/secret-needs.js +48 -96
- package/dist/run/select.d.ts +34 -25
- package/dist/run/select.js +45 -54
- package/dist/run/send-helpers.d.ts +93 -0
- package/dist/run/send-helpers.js +255 -0
- package/dist/run/tree.d.ts +50 -0
- package/dist/run/tree.js +54 -0
- package/dist/script/api/postman.d.ts +10 -0
- package/dist/script/api/postman.js +264 -0
- package/dist/script/api/prelude.d.ts +20 -0
- package/dist/script/api/prelude.js +215 -0
- package/dist/script/apply.d.ts +44 -0
- package/dist/script/apply.js +120 -0
- package/dist/script/check/host.d.ts +41 -0
- package/dist/script/check/host.js +143 -0
- package/dist/script/check/service.d.ts +52 -0
- package/dist/script/check/service.js +195 -0
- package/dist/script/check/worker.d.ts +1 -0
- package/dist/script/check/worker.js +40 -0
- package/dist/script/index.d.ts +16 -0
- package/dist/script/index.js +10 -0
- package/dist/script/lookup.d.ts +10 -0
- package/dist/script/lookup.js +23 -0
- package/dist/script/model.d.ts +82 -0
- package/dist/script/model.js +18 -0
- package/dist/script/props.d.ts +8 -0
- package/dist/script/props.js +28 -0
- package/dist/script/request-scripts.d.ts +83 -0
- package/dist/script/request-scripts.js +160 -0
- package/dist/script/run.d.ts +47 -0
- package/dist/script/run.js +146 -0
- package/dist/script/sandbox/execute.d.ts +26 -0
- package/dist/script/sandbox/execute.js +212 -0
- package/dist/script/sandbox/host-api.d.ts +27 -0
- package/dist/script/sandbox/host-api.js +101 -0
- package/dist/script/sandbox/host.d.ts +18 -0
- package/dist/script/sandbox/host.js +172 -0
- package/dist/script/sandbox/model.d.ts +69 -0
- package/dist/script/sandbox/model.js +24 -0
- package/dist/script/sandbox/worker.d.ts +1 -0
- package/dist/script/sandbox/worker.js +20 -0
- package/dist/script/send.d.ts +27 -0
- package/dist/script/send.js +76 -0
- package/dist/script/strip.d.ts +5 -0
- package/dist/script/strip.js +43 -0
- package/dist/script/types/api.d.ts +38 -0
- package/dist/script/types/api.js +113 -0
- package/dist/script/types/json-schema.d.ts +26 -0
- package/dist/script/types/json-schema.js +206 -0
- package/dist/secrets/env-names.d.ts +9 -1
- package/dist/secrets/env-names.js +17 -1
- package/dist/secrets/resolve.d.ts +44 -4
- package/dist/secrets/resolve.js +58 -1
- package/dist/secrets/scan/apply.d.ts +36 -0
- package/dist/secrets/scan/apply.js +194 -0
- package/dist/secrets/scan/rules.d.ts +32 -0
- package/dist/secrets/scan/rules.js +346 -0
- package/dist/secrets/scan/scan.d.ts +6 -0
- package/dist/secrets/scan/scan.js +57 -0
- package/dist/secrets/scan/walk.d.ts +70 -0
- package/dist/secrets/scan/walk.js +156 -0
- package/dist/secrets/secret-refs.d.ts +8 -0
- package/dist/secrets/secret-refs.js +25 -0
- package/dist/secrets/secret-token.d.ts +17 -0
- package/dist/secrets/secret-token.js +25 -0
- package/dist/sequence/file.d.ts +169 -0
- package/dist/sequence/file.js +237 -0
- package/dist/sequence/index.d.ts +7 -0
- package/dist/sequence/index.js +5 -0
- package/dist/sequence/load.d.ts +32 -0
- package/dist/sequence/load.js +56 -0
- package/dist/sequence/model.d.ts +115 -0
- package/dist/sequence/model.js +53 -0
- package/dist/sequence/run.d.ts +131 -0
- package/dist/sequence/run.js +191 -0
- package/dist/sequence/transfer.d.ts +24 -0
- package/dist/sequence/transfer.js +75 -0
- package/dist/server-api/audit.d.ts +455 -0
- package/dist/server-api/audit.js +186 -0
- package/dist/server-api/ci-tokens.d.ts +50 -0
- package/dist/server-api/ci-tokens.js +35 -0
- package/dist/server-api/hooks.d.ts +337 -0
- package/dist/server-api/hooks.js +152 -0
- package/dist/server-api/identity.d.ts +210 -0
- package/dist/server-api/identity.js +115 -0
- package/dist/server-api/licensing.d.ts +80 -0
- package/dist/server-api/licensing.js +53 -0
- package/dist/server-api/live.d.ts +132 -0
- package/dist/server-api/live.js +102 -0
- package/dist/server-api/meta.d.ts +31 -0
- package/dist/server-api/meta.js +21 -0
- package/dist/server-api/sync.d.ts +179 -0
- package/dist/server-api/sync.js +124 -0
- package/dist/server-api/teams.d.ts +306 -0
- package/dist/server-api/teams.js +113 -0
- package/dist/snapshot/diff.d.ts +30 -0
- package/dist/snapshot/diff.js +75 -0
- package/dist/snapshot/format.d.ts +17 -0
- package/dist/snapshot/format.js +40 -0
- package/dist/snapshot/golden-file.d.ts +45 -0
- package/dist/snapshot/golden-file.js +173 -0
- package/dist/snapshot/ignore.d.ts +14 -0
- package/dist/snapshot/ignore.js +79 -0
- package/dist/snapshot/index.d.ts +9 -0
- package/dist/snapshot/index.js +9 -0
- package/dist/snapshot/json-diff.d.ts +3 -0
- package/dist/snapshot/json-diff.js +93 -0
- package/dist/snapshot/xml-diff.d.ts +10 -0
- package/dist/snapshot/xml-diff.js +194 -0
- package/dist/soap/auth.d.ts +26 -0
- package/dist/soap/auth.js +54 -0
- package/dist/soap/curl.d.ts +20 -0
- package/dist/soap/curl.js +161 -0
- package/dist/soap/expand.d.ts +24 -0
- package/dist/soap/expand.js +95 -0
- package/dist/soap/files.d.ts +384 -0
- package/dist/soap/files.js +114 -0
- package/dist/soap/form-request.d.ts +13 -0
- package/dist/soap/form-request.js +2 -2
- package/dist/soap/generate.d.ts +12 -0
- package/dist/{generate.js → soap/generate.js} +4 -4
- package/dist/{import.d.ts → soap/import.d.ts} +4 -4
- package/dist/{import.js → soap/import.js} +13 -13
- package/dist/soap/json-operation.d.ts +35 -0
- package/dist/soap/json-operation.js +225 -0
- package/dist/soap/legacy-project/env-refs.d.ts +19 -0
- package/dist/soap/legacy-project/env-refs.js +105 -0
- package/dist/soap/legacy-project/map.d.ts +2 -2
- package/dist/soap/legacy-project/map.js +6 -0
- package/dist/soap/mime/multipart.d.ts +2 -2
- package/dist/soap/mime/multipart.js +2 -5
- package/dist/soap/mime/send-pipeline.d.ts +1 -1
- package/dist/soap/mime/send-pipeline.js +1 -1
- package/dist/soap/mime/types.d.ts +1 -3
- package/dist/soap/module.d.ts +2 -0
- package/dist/soap/module.js +13 -0
- package/dist/soap/namespace-scope.js +1 -1
- package/dist/soap/operations.d.ts +12 -0
- package/dist/{operations.js → soap/operations.js} +4 -4
- package/dist/soap/run.d.ts +70 -0
- package/dist/soap/run.js +549 -0
- package/dist/soap/script-types.d.ts +65 -0
- package/dist/soap/script-types.js +379 -0
- package/dist/soap/scripting.d.ts +45 -0
- package/dist/soap/scripting.js +221 -0
- package/dist/soap/send-input.d.ts +61 -0
- package/dist/{send-options.js → soap/send-input.js} +5 -109
- package/dist/{send.d.ts → soap/send.d.ts} +1 -1
- package/dist/{send.js → soap/send.js} +28 -12
- package/dist/soap/storage.d.ts +9 -0
- package/dist/soap/storage.js +237 -0
- package/dist/soap/transforms.d.ts +3 -12
- package/dist/soap/transforms.js +3 -14
- package/dist/{types.d.ts → soap/types.d.ts} +34 -84
- package/dist/sync/git-cli.d.ts +202 -0
- package/dist/sync/git-cli.js +684 -0
- package/dist/sync/three-way-merge.d.ts +41 -0
- package/dist/sync/three-way-merge.js +85 -0
- package/dist/sync/tree-paths.d.ts +34 -0
- package/dist/sync/tree-paths.js +131 -0
- package/dist/team-secrets/envelope.d.ts +10 -0
- package/dist/team-secrets/envelope.js +121 -0
- package/dist/team-secrets/errors.d.ts +26 -0
- package/dist/team-secrets/errors.js +27 -0
- package/dist/team-secrets/index.d.ts +14 -0
- package/dist/team-secrets/index.js +8 -0
- package/dist/team-secrets/keys.d.ts +52 -0
- package/dist/team-secrets/keys.js +158 -0
- package/dist/team-secrets/log.d.ts +48 -0
- package/dist/team-secrets/log.js +175 -0
- package/dist/team-secrets/resolve-conflict.d.ts +7 -0
- package/dist/team-secrets/resolve-conflict.js +14 -0
- package/dist/team-secrets/schema.d.ts +97 -0
- package/dist/team-secrets/schema.js +157 -0
- package/dist/team-secrets/sign.d.ts +24 -0
- package/dist/team-secrets/sign.js +71 -0
- package/dist/team-secrets/vault.d.ts +49 -0
- package/dist/team-secrets/vault.js +148 -0
- package/dist/validate/wsi/run-message.d.ts +2 -2
- package/dist/validate/wsi/run-message.js +1 -1
- package/dist/validate/wsi/run-wsdl.d.ts +2 -2
- package/dist/validate/wsi/run-wsdl.js +1 -1
- package/dist/validate/wsi/types.d.ts +1 -1
- package/dist/webhooks/model.d.ts +138 -0
- package/dist/webhooks/model.js +150 -0
- package/dist/workspace/commit-message.d.ts +1 -1
- package/dist/workspace/commit-message.js +6 -1
- package/dist/workspace/environments.d.ts +11 -4
- package/dist/workspace/environments.js +12 -0
- package/dist/workspace/index.d.ts +3 -3
- package/dist/workspace/index.js +2 -2
- package/dist/workspace/paths.d.ts +5 -2
- package/dist/workspace/paths.js +5 -2
- package/dist/workspace/schema.d.ts +7 -3
- package/dist/workspace/schema.js +24 -3
- package/dist/workspace/share.d.ts +30 -11
- package/dist/workspace/share.js +32 -6
- package/dist/ws/call.d.ts +1 -1
- package/dist/ws/call.js +2 -2
- package/dist/ws/connect.d.ts +60 -0
- package/dist/ws/connect.js +131 -0
- package/dist/ws/events.d.ts +17 -0
- package/dist/ws/events.js +1 -0
- package/dist/ws/expand.d.ts +1 -1
- package/dist/ws/expand.js +1 -1
- package/dist/ws/files.d.ts +284 -0
- package/dist/ws/files.js +71 -0
- package/dist/ws/history-entry.d.ts +44 -0
- package/dist/ws/history-entry.js +93 -0
- package/dist/ws/model.d.ts +44 -3
- package/dist/ws/model.js +3 -0
- package/dist/ws/module.d.ts +2 -0
- package/dist/ws/module.js +11 -0
- package/dist/ws/run.d.ts +63 -0
- package/dist/ws/run.js +470 -0
- package/dist/ws/session.d.ts +18 -0
- package/dist/ws/session.js +52 -25
- package/dist/ws/storage.d.ts +9 -0
- package/dist/ws/storage.js +176 -0
- package/dist/ws/transcript.d.ts +3 -4
- package/dist/ws/transcript.js +26 -17
- package/dist/ws/url.d.ts +1 -1
- package/dist/wsdl/cache.js +1 -1
- package/dist/wsdl/docs-generator.d.ts +3 -3
- package/dist/wsdl/docs-generator.js +1 -1
- package/dist/wsdl/export-definition.js +1 -1
- package/dist/wsdl/qname.d.ts +2 -5
- package/dist/wsdl/resolver.d.ts +4 -11
- package/dist/wsdl/resolver.js +3 -3
- package/dist/wsdl/update-definition.d.ts +5 -5
- package/dist/wsdl/update-definition.js +6 -6
- package/dist/wss/apply.js +1 -1
- package/dist/{project/wss-configs.d.ts → wss/configs.d.ts} +2 -2
- package/dist/{project/wss-configs.js → wss/configs.js} +2 -2
- package/dist/wss/incoming/decrypt.d.ts +1 -1
- package/dist/wss/incoming/index.js +1 -1
- package/dist/wss/incoming/verify.d.ts +1 -1
- package/dist/wss/incoming/verify.js +1 -1
- package/dist/wss/key-identifiers.js +1 -1
- package/dist/wss/model.d.ts +1 -1
- package/dist/wss/outgoing/encryption.d.ts +1 -1
- package/dist/wss/outgoing/signature.d.ts +1 -1
- package/dist/xml/decode.d.ts +15 -0
- package/dist/xml/decode.js +22 -0
- package/dist/xml/entitize.d.ts +17 -0
- package/dist/xml/entitize.js +19 -0
- package/dist/xml/index.d.ts +1 -1
- package/dist/xml/index.js +1 -1
- package/dist/xml/locate.d.ts +39 -0
- package/dist/xml/locate.js +117 -0
- package/dist/xml/qname.d.ts +12 -0
- package/dist/xml/qname.js +8 -0
- package/dist/xpath/evaluate-async.d.ts +19 -0
- package/dist/xpath/evaluate-async.js +31 -11
- package/dist/xpath/evaluate.d.ts +1 -1
- package/dist/xpath/namespaces.js +1 -1
- package/dist/xpath/worker.d.ts +11 -5
- package/dist/xpath/worker.js +24 -7
- package/dist/xsd/form-model.d.ts +19 -2
- package/dist/xsd/form-model.js +14 -2
- package/dist/xsd/json-bridge.d.ts +152 -0
- package/dist/xsd/json-bridge.js +1213 -0
- package/dist/xsd/locate.d.ts +2 -30
- package/dist/xsd/locate.js +1 -109
- package/dist/xsd/xml-scan.d.ts +2 -0
- package/dist/xsd/xml-scan.js +1 -1
- package/dist/xsd/xml-writer.d.ts +2 -0
- package/dist/xsd/xml-writer.js +4 -0
- package/package.json +12 -1
- package/dist/generate.d.ts +0 -12
- package/dist/operations.d.ts +0 -12
- package/dist/run/effective-auth.d.ts +0 -10
- package/dist/run/effective-auth.js +0 -19
- package/dist/run/prepare.d.ts +0 -43
- package/dist/run/prepare.js +0 -280
- package/dist/send-options.d.ts +0 -141
- package/dist/wsdl/fetch.d.ts +0 -13
- /package/dist/{soap → http}/charset.d.ts +0 -0
- /package/dist/{soap → http}/charset.js +0 -0
- /package/dist/{wsdl → http}/ref-policy.d.ts +0 -0
- /package/dist/{wsdl → http}/ref-policy.js +0 -0
- /package/dist/{wss/keystore → keystore}/certificate.d.ts +0 -0
- /package/dist/{wss/keystore → keystore}/certificate.js +0 -0
- /package/dist/{wss/keystore → keystore}/index.d.ts +0 -0
- /package/dist/{wss/keystore → keystore}/model.d.ts +0 -0
- /package/dist/{wss/keystore → keystore}/model.js +0 -0
- /package/dist/{wss/keystore → keystore}/pem.d.ts +0 -0
- /package/dist/{wss/keystore → keystore}/pkcs12.d.ts +0 -0
- /package/dist/{wsdl → project}/cache-naming.d.ts +0 -0
- /package/dist/{types.js → soap/types.js} +0 -0
- /package/dist/{soap → xml}/prefixes.d.ts +0 -0
- /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
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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 (
|
|
263
|
-
skipped.push({ kind: 'operation', where: `${
|
|
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
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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 === '
|
|
303
|
-
skipped.push({ kind:
|
|
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
|
+
};
|