@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
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turns a saved request plus the settings around it into the {@link SoapSendInput} the
|
|
3
|
+
* transport actually receives.
|
|
4
|
+
*
|
|
5
|
+
* This is the single place the three layers of configuration meet, and the precedence between
|
|
6
|
+
* them is fixed here rather than in the desktop app: the request's own property wins, then the
|
|
7
|
+
* project's setting, then the user's preference (which is also the engine default). A property
|
|
8
|
+
* left unset in the request is therefore never "off" — it is "inherit".
|
|
9
|
+
*/
|
|
10
|
+
import type { Preferences } from '../project/preferences.js';
|
|
11
|
+
import type { Attachment, HeaderEntry, ProjectSettings, RequestProperties } from '../project/model.js';
|
|
12
|
+
import type { AttachmentResolver } from './mime/types.js';
|
|
13
|
+
import type { SoapSendInput } from './types.js';
|
|
14
|
+
/** The parts of a request {@link toSoapSendInput} reads. */
|
|
15
|
+
export interface SoapSendRequestInput {
|
|
16
|
+
readonly properties: RequestProperties;
|
|
17
|
+
readonly soapVersion: '1.1' | '1.2';
|
|
18
|
+
readonly soapAction?: string;
|
|
19
|
+
readonly headers: readonly HeaderEntry[];
|
|
20
|
+
readonly envelopeXml: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* How the send is to read attachment and inline-file bytes. The engine never opens a file
|
|
24
|
+
* on its own, so without this the request's attachments (and its inline-file property) are
|
|
25
|
+
* left inert; the desktop main process supplies `createFileAttachmentResolver`.
|
|
26
|
+
*/
|
|
27
|
+
export interface AttachmentResolvers {
|
|
28
|
+
readonly resolver: AttachmentResolver;
|
|
29
|
+
/** Reads one file for "Enable Inline Files". */
|
|
30
|
+
readonly resolveFile?: (path: string) => Promise<Uint8Array>;
|
|
31
|
+
/** The project's resource root, for relative inline-file references. */
|
|
32
|
+
readonly resourceRoot?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Everything {@link toSoapSendInput} needs beyond the request itself. */
|
|
35
|
+
export interface ToSoapSendInputArgs {
|
|
36
|
+
readonly request: SoapSendRequestInput;
|
|
37
|
+
/** The already-resolved endpoint URL (environment overrides applied). */
|
|
38
|
+
readonly endpoint: string;
|
|
39
|
+
readonly preferences?: Preferences;
|
|
40
|
+
readonly projectSettings?: Pick<ProjectSettings, 'defaultTimeoutMs'>;
|
|
41
|
+
/** The request's attachments; only acted on together with {@link attachmentResolvers}. */
|
|
42
|
+
readonly attachments?: readonly Attachment[];
|
|
43
|
+
readonly attachmentResolvers?: AttachmentResolvers;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Builds the send input for one request.
|
|
47
|
+
*
|
|
48
|
+
* Timeout precedence is request > project > preference. The TLS floor (`ssl.minVersion`) and
|
|
49
|
+
* the HTTP/2 offer come from preferences alone. Headers are the request's own, plus a
|
|
50
|
+
* `User-Agent` from preferences when the request does not set one, plus `Accept-Encoding` when
|
|
51
|
+
* response compression is enabled and `Connection: close` when connection reuse is disabled.
|
|
52
|
+
* Request-body gzip is requested via `compressBody`; the transport does the compressing so the
|
|
53
|
+
* `Content-Length` it computes describes the bytes that are actually sent.
|
|
54
|
+
*
|
|
55
|
+
* The MTOM/attachment properties are mapped only when `attachmentResolvers` says how bytes
|
|
56
|
+
* can be read; without a resolver there is nothing the transport could do with them, and a
|
|
57
|
+
* half-configured send would silently drop parts.
|
|
58
|
+
*
|
|
59
|
+
* @param args the request, its resolved endpoint, and the preferences/project settings around it
|
|
60
|
+
*/
|
|
61
|
+
export declare function toSoapSendInput(args: ToSoapSendInputArgs): SoapSendInput;
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* project's setting, then the user's preference (which is also the engine default). A property
|
|
8
8
|
* left unset in the request is therefore never "off" — it is "inherit".
|
|
9
9
|
*/
|
|
10
|
-
import { DEFAULT_PREFERENCES } from '
|
|
11
|
-
import { soapActionHeaders } from './soap
|
|
12
|
-
import { prettyPrint, removeEmptyContent, stripWhitespaces } from './
|
|
10
|
+
import { DEFAULT_PREFERENCES } from '../project/preferences.js';
|
|
11
|
+
import { soapActionHeaders } from './soap-action.js';
|
|
12
|
+
import { prettyPrint, removeEmptyContent, stripWhitespaces } from './transforms.js';
|
|
13
13
|
/** Case-insensitive lookup over a header map. */
|
|
14
14
|
function hasHeader(headers, name) {
|
|
15
15
|
const lower = name.toLowerCase();
|
|
@@ -55,7 +55,7 @@ function transformEnvelope(xml, properties, indentWidth) {
|
|
|
55
55
|
*
|
|
56
56
|
* @param args the request, its resolved endpoint, and the preferences/project settings around it
|
|
57
57
|
*/
|
|
58
|
-
export function
|
|
58
|
+
export function toSoapSendInput(args) {
|
|
59
59
|
const preferences = args.preferences ?? DEFAULT_PREFERENCES;
|
|
60
60
|
const { properties } = args.request;
|
|
61
61
|
const headers = {};
|
|
@@ -72,7 +72,7 @@ export function toSendInput(args) {
|
|
|
72
72
|
headers['Connection'] = 'close';
|
|
73
73
|
}
|
|
74
74
|
// A non-default `encoding` property changes what bytes actually go on the wire (see
|
|
75
|
-
// `encodeBody` in `
|
|
75
|
+
// `encodeBody` in `http/charset.ts`), so the `Content-Type` charset must say the same thing — a
|
|
76
76
|
// request sent as ISO-8859-1 but declared UTF-8 would decode wrong at the far end. This is
|
|
77
77
|
// skipped for the default encoding so a request with no opinion keeps getting the transport's
|
|
78
78
|
// own `UTF-8` charset, computed downstream exactly as it always has been.
|
|
@@ -122,107 +122,3 @@ export function toSendInput(args) {
|
|
|
122
122
|
...(attachmentOptions !== undefined ? { attachments: args.attachments ?? [], attachmentOptions } : {}),
|
|
123
123
|
};
|
|
124
124
|
}
|
|
125
|
-
/** The first of `values` that is not `undefined`, which is what "inherit" means. */
|
|
126
|
-
function inherited(...values) {
|
|
127
|
-
return values.find((value) => value !== undefined);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Builds the send input for one REST request.
|
|
131
|
-
*
|
|
132
|
-
* Precedence is request → API → project → preference, the same ladder a SOAP request's properties
|
|
133
|
-
* climb, and for the same reason: a setting the request leaves unset means *inherit*, never *off*.
|
|
134
|
-
* The headers the host adds on the request's behalf — `User-Agent`, `Accept-Encoding`, `Connection`,
|
|
135
|
-
* a default `Accept` — are passed separately from the request's own, so `rest/send.ts` can let the
|
|
136
|
-
* user's typed header win without having to guess which came from where.
|
|
137
|
-
*/
|
|
138
|
-
export function toRestSendInput(args) {
|
|
139
|
-
const preferences = args.preferences ?? DEFAULT_PREFERENCES;
|
|
140
|
-
const request = args.request;
|
|
141
|
-
const api = args.apiSettings ?? {};
|
|
142
|
-
const defaultHeaders = {};
|
|
143
|
-
if (preferences.http.userAgent.length > 0) {
|
|
144
|
-
defaultHeaders['User-Agent'] = preferences.http.userAgent;
|
|
145
|
-
}
|
|
146
|
-
if (preferences.http.responseCompression) {
|
|
147
|
-
defaultHeaders['Accept-Encoding'] = 'gzip, deflate, br';
|
|
148
|
-
}
|
|
149
|
-
if (preferences.http.closeConnections) {
|
|
150
|
-
defaultHeaders.Connection = 'close';
|
|
151
|
-
}
|
|
152
|
-
if (preferences.rest.defaultAccept.length > 0) {
|
|
153
|
-
defaultHeaders.Accept = preferences.rest.defaultAccept;
|
|
154
|
-
}
|
|
155
|
-
const timeoutMs = inherited(request.settings.timeoutMs, api.timeoutMs, args.projectSettings?.defaultTimeoutMs) ??
|
|
156
|
-
preferences.http.socketTimeoutMs;
|
|
157
|
-
const followRedirects = inherited(request.settings.followRedirects, api.followRedirects) ?? preferences.rest.followRedirects;
|
|
158
|
-
const maxRedirects = inherited(request.settings.maxRedirects, api.maxRedirects) ?? preferences.rest.maxRedirects;
|
|
159
|
-
const keepBodyOnRedirect = inherited(request.settings.keepBodyOnRedirect, api.keepBodyOnRedirect);
|
|
160
|
-
const encodeUrl = inherited(request.settings.encodeUrl, api.encodeUrl);
|
|
161
|
-
const maxSizeBytes = inherited(request.settings.maxSizeBytes, api.maxSizeBytes);
|
|
162
|
-
const bindAddress = inherited(request.settings.bindAddress, api.bindAddress);
|
|
163
|
-
return {
|
|
164
|
-
baseUrl: args.baseUrl,
|
|
165
|
-
request: {
|
|
166
|
-
method: request.method,
|
|
167
|
-
url: request.url,
|
|
168
|
-
pathParams: request.pathParams,
|
|
169
|
-
query: request.query,
|
|
170
|
-
headers: request.headers,
|
|
171
|
-
body: request.body,
|
|
172
|
-
},
|
|
173
|
-
settings: {
|
|
174
|
-
timeoutMs,
|
|
175
|
-
followRedirects,
|
|
176
|
-
maxRedirects,
|
|
177
|
-
...(keepBodyOnRedirect !== undefined ? { keepBodyOnRedirect } : {}),
|
|
178
|
-
...(encodeUrl !== undefined ? { encodeUrl } : {}),
|
|
179
|
-
...(maxSizeBytes !== undefined ? { maxSizeBytes } : {}),
|
|
180
|
-
...(bindAddress !== undefined && bindAddress.length > 0 ? { localAddress: bindAddress } : {}),
|
|
181
|
-
...(preferences.http.allowH2 ? { allowH2: true } : {}),
|
|
182
|
-
},
|
|
183
|
-
defaultHeaders,
|
|
184
|
-
...(args.auth !== undefined ? { auth: args.auth } : {}),
|
|
185
|
-
...(args.cookies !== undefined ? { cookies: args.cookies } : {}),
|
|
186
|
-
// As for SOAP: the TLS floor is the user's one-off choice, and everything else in `tls` is
|
|
187
|
-
// resolved by the host, which reads files and secrets, and merged onto this.
|
|
188
|
-
tls: { minVersion: preferences.ssl.minVersion, ...args.tls },
|
|
189
|
-
...(args.proxy !== undefined ? { proxy: args.proxy } : {}),
|
|
190
|
-
...(args.resolveFile !== undefined ? { resolveFile: args.resolveFile } : {}),
|
|
191
|
-
...(args.signal !== undefined ? { signal: args.signal } : {}),
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Builds the transport input for one gRPC call, everything but the encoded messages.
|
|
196
|
-
*
|
|
197
|
-
* The same request → API → project → preference ladder as a REST request, and the same TLS rule:
|
|
198
|
-
* the floor comes from preferences, and the host merges trust anchors, the client identity and the
|
|
199
|
-
* per-request trust decision on top. Metadata rows are the API's first and then the request's, so
|
|
200
|
-
* a repeated key resolves to the request's value on the wire.
|
|
201
|
-
*/
|
|
202
|
-
export function toGrpcSendInput(args) {
|
|
203
|
-
const preferences = args.preferences ?? DEFAULT_PREFERENCES;
|
|
204
|
-
const request = args.request;
|
|
205
|
-
const api = args.apiSettings ?? {};
|
|
206
|
-
const defaultMetadata = {};
|
|
207
|
-
if (preferences.http.userAgent.length > 0) {
|
|
208
|
-
defaultMetadata['user-agent'] = preferences.http.userAgent;
|
|
209
|
-
}
|
|
210
|
-
const timeoutMs = inherited(request.settings.timeoutMs, api.timeoutMs, args.projectSettings?.defaultTimeoutMs) ??
|
|
211
|
-
preferences.http.socketTimeoutMs;
|
|
212
|
-
const maxSizeBytes = inherited(request.settings.maxSizeBytes, api.maxSizeBytes);
|
|
213
|
-
const bindAddress = inherited(request.settings.bindAddress, api.bindAddress);
|
|
214
|
-
return {
|
|
215
|
-
target: args.target,
|
|
216
|
-
tls: args.tls,
|
|
217
|
-
service: request.service,
|
|
218
|
-
method: request.method,
|
|
219
|
-
metadata: [...(args.apiMetadata ?? []), ...request.metadata],
|
|
220
|
-
defaultMetadata,
|
|
221
|
-
timeoutMs,
|
|
222
|
-
...(maxSizeBytes !== undefined ? { maxSizeBytes } : {}),
|
|
223
|
-
...(bindAddress !== undefined && bindAddress.length > 0 ? { localAddress: bindAddress } : {}),
|
|
224
|
-
...(args.auth !== undefined ? { auth: args.auth } : {}),
|
|
225
|
-
tlsOptions: { minVersion: preferences.ssl.minVersion, ...args.tlsOptions },
|
|
226
|
-
...(args.signal !== undefined ? { signal: args.signal } : {}),
|
|
227
|
-
};
|
|
228
|
-
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* response: SOAP version, fault, or "not actually SOAP" detection.
|
|
4
4
|
*/
|
|
5
5
|
import type { Dispatcher } from 'undici';
|
|
6
|
-
import type { PropertyScopes } from '
|
|
6
|
+
import type { PropertyScopes } from '../project/properties.js';
|
|
7
7
|
import type { SoapExchange, SoapSendInput } from './types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Sends `input.envelopeXml` to `input.endpoint` over HTTP, computing the
|
|
@@ -4,17 +4,18 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { randomUUID } from 'node:crypto';
|
|
6
6
|
import { gzipSync } from 'node:zlib';
|
|
7
|
-
import { WirebenchError } from '
|
|
8
|
-
import { expandSendInput } from './
|
|
9
|
-
import { sendWithAuth } from '
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
7
|
+
import { WirebenchError } from '../errors.js';
|
|
8
|
+
import { expandSendInput } from './expand.js';
|
|
9
|
+
import { sendWithAuth } from '../http/auth/apply.js';
|
|
10
|
+
import { applySoapAuth } from './auth.js';
|
|
11
|
+
import { headerValue, mergeHeaders } from '../http/headers.js';
|
|
12
|
+
import { charsetOf } from '../http/charset.js';
|
|
13
|
+
import { packageRequestBody, readResponseBody, substituteInlineFiles } from './mime/send-pipeline.js';
|
|
14
|
+
import { parseSoapResponse } from './response-parser.js';
|
|
15
|
+
import { soapActionHeaders } from './soap-action.js';
|
|
16
|
+
import { applyWsaHeaders, effectiveAction } from '../wsa/headers.js';
|
|
17
|
+
import { applyOutgoingWss } from '../wss/apply.js';
|
|
18
|
+
import { processIncomingWss } from '../wss/incoming/index.js';
|
|
18
19
|
/**
|
|
19
20
|
* Sends `input.envelopeXml` to `input.endpoint` over HTTP, computing the
|
|
20
21
|
* `Content-Type`/`SOAPAction` headers for `input.soapVersion` and merging in
|
|
@@ -64,6 +65,12 @@ export async function sendSoapRequest(input, options) {
|
|
|
64
65
|
effectiveInput = expanded.input;
|
|
65
66
|
unresolved = expanded.unresolved;
|
|
66
67
|
}
|
|
68
|
+
// Token credentials become headers or a query parameter now, after expansion so a `${token}`
|
|
69
|
+
// has resolved. The keyed endpoint is used only on the wire: WS-Addressing's `wsa:To` below
|
|
70
|
+
// keeps the configured endpoint, so an API key never lands inside the envelope.
|
|
71
|
+
const authApplied = applySoapAuth(effectiveInput.endpoint, effectiveInput.headers, effectiveInput.auth);
|
|
72
|
+
const wireEndpoint = authApplied.endpoint;
|
|
73
|
+
effectiveInput = withTransportAuth({ ...effectiveInput, headers: authApplied.headers }, authApplied.transportAuth);
|
|
67
74
|
const problems = [];
|
|
68
75
|
// Inline `file:` references are substituted first, with property expansion: both are envelope
|
|
69
76
|
// *text* preparation, and the envelope every later stage sees must be the one that goes on
|
|
@@ -137,7 +144,7 @@ export async function sendSoapRequest(input, options) {
|
|
|
137
144
|
}
|
|
138
145
|
const timeoutMs = effectiveInput.timeoutMs ?? 60_000;
|
|
139
146
|
const request = {
|
|
140
|
-
url:
|
|
147
|
+
url: wireEndpoint,
|
|
141
148
|
method: 'POST',
|
|
142
149
|
headers,
|
|
143
150
|
body,
|
|
@@ -208,3 +215,12 @@ export async function sendSoapRequest(input, options) {
|
|
|
208
215
|
: {}),
|
|
209
216
|
};
|
|
210
217
|
}
|
|
218
|
+
/** The input with `auth` replaced by only what the transport handles (Basic/NTLM), or removed. */
|
|
219
|
+
function withTransportAuth(input, transportAuth) {
|
|
220
|
+
if (transportAuth !== undefined) {
|
|
221
|
+
return { ...input, auth: transportAuth };
|
|
222
|
+
}
|
|
223
|
+
const copy = { ...input };
|
|
224
|
+
delete copy.auth;
|
|
225
|
+
return copy;
|
|
226
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How SOAP interfaces are stored in a project folder (spec §3.2): `interfaces/<slug>/interface.yaml`,
|
|
3
|
+
* and under `operations/<operation slug>/` one `<slug>.request.yaml` with its envelope in the sibling
|
|
4
|
+
* `<slug>.xml` and its scripts beside it.
|
|
5
|
+
*/
|
|
6
|
+
import type { Interface } from '../project/model.js';
|
|
7
|
+
import type { ProtocolStorage } from '../protocol/module.js';
|
|
8
|
+
/** SOAP's storage facet. */
|
|
9
|
+
export declare const soapStorage: ProtocolStorage<Interface>;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How SOAP interfaces are stored in a project folder (spec §3.2): `interfaces/<slug>/interface.yaml`,
|
|
3
|
+
* and under `operations/<operation slug>/` one `<slug>.request.yaml` with its envelope in the sibling
|
|
4
|
+
* `<slug>.xml` and its scripts beside it.
|
|
5
|
+
*/
|
|
6
|
+
import { toCallbackAssertion } from '../assert/schema.js';
|
|
7
|
+
import { readFileIfExists, readdirIfExists } from '../project/fs.js';
|
|
8
|
+
import { abs, authConfig, byOrder, exact, loadScripts, optional, readYaml } from '../project/load-helpers.js';
|
|
9
|
+
import { assertPathSegment, INTERFACES_DIR, OPERATIONS_DIR, REQUEST_SUFFIX } from '../project/paths.js';
|
|
10
|
+
import { assertSupportedKind, parseFile } from '../project/schema-parts.js';
|
|
11
|
+
import { authDocument, scriptsDocument, writeScriptFiles } from '../project/serialize-helpers.js';
|
|
12
|
+
import { compact, stringifyYaml } from '../project/yaml.js';
|
|
13
|
+
import { isScriptFileOf } from '../script/model.js';
|
|
14
|
+
import { normalizeWsa } from '../wsa/model.js';
|
|
15
|
+
import { interfaceFileSchema, requestFileSchema } from './files.js';
|
|
16
|
+
/**
|
|
17
|
+
* Authentication at one of the three SOAP owner sites (interface, endpoint, request), loaded
|
|
18
|
+
* through {@link authConfig} so OAuth2 defaults (`scopes`, `clientAuth`, `pkce`) are filled
|
|
19
|
+
* exactly as for REST, then narrowed to {@link SoapOwnerAuth}: the schema (`soapOwnerAuthSchema`)
|
|
20
|
+
* already refuses `inherit` at these sites, so the narrowing cast only restates what parsing
|
|
21
|
+
* proved.
|
|
22
|
+
*/
|
|
23
|
+
function soapOwnerAuth(parsed) {
|
|
24
|
+
return parsed === undefined ? undefined : authConfig(parsed);
|
|
25
|
+
}
|
|
26
|
+
async function loadRequests(fs, root, dir, problems) {
|
|
27
|
+
const requests = [];
|
|
28
|
+
const entries = await readdirIfExists(fs, abs(root, dir));
|
|
29
|
+
const names = new Set(entries.filter((e) => e.isFile).map((e) => e.name));
|
|
30
|
+
for (const entry of [...entries].sort((a, b) => a.name.localeCompare(b.name))) {
|
|
31
|
+
if (!entry.isFile || !entry.name.endsWith(REQUEST_SUFFIX)) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const slug = entry.name.slice(0, -REQUEST_SUFFIX.length);
|
|
35
|
+
const relative = `${dir}/${entry.name}`;
|
|
36
|
+
const document = await readYaml(fs, root, relative);
|
|
37
|
+
assertSupportedKind(document, relative);
|
|
38
|
+
const parsed = parseFile(requestFileSchema, document, relative);
|
|
39
|
+
const xmlRelative = `${dir}/${slug}.xml`;
|
|
40
|
+
const envelope = await readFileIfExists(fs, abs(root, xmlRelative));
|
|
41
|
+
if (envelope === undefined) {
|
|
42
|
+
problems.push({
|
|
43
|
+
code: 'missing-envelope',
|
|
44
|
+
message: `Request "${parsed.name}" has no envelope file; loaded with an empty body`,
|
|
45
|
+
file: xmlRelative,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
names.delete(entry.name);
|
|
49
|
+
names.delete(`${slug}.xml`);
|
|
50
|
+
const scripts = await loadScripts(fs, root, dir, slug, parsed.scripts, parsed.name, problems, (name) => names.delete(name));
|
|
51
|
+
requests.push({
|
|
52
|
+
kind: 'soap',
|
|
53
|
+
id: parsed.id,
|
|
54
|
+
name: parsed.name,
|
|
55
|
+
slug,
|
|
56
|
+
order: parsed.order,
|
|
57
|
+
...optional('description', parsed.description),
|
|
58
|
+
...optional('endpointId', parsed.endpointId),
|
|
59
|
+
...optional('endpointUrl', parsed.endpointUrl),
|
|
60
|
+
soapVersion: parsed.soapVersion,
|
|
61
|
+
...optional('soapAction', parsed.soapAction),
|
|
62
|
+
headers: parsed.headers,
|
|
63
|
+
attachments: parsed.attachments.map((a) => exact(a)),
|
|
64
|
+
...optional('auth', soapOwnerAuth(parsed.auth)),
|
|
65
|
+
...(parsed.wsa !== undefined ? { wsa: normalizeWsa(parsed.wsa) } : {}),
|
|
66
|
+
...optional('wssOutgoingRef', parsed.wssOutgoingRef),
|
|
67
|
+
...optional('wssIncomingRef', parsed.wssIncomingRef),
|
|
68
|
+
properties: exact(parsed.properties),
|
|
69
|
+
assertions: parsed.assertions.map((a) => (a.type === 'callback' ? toCallbackAssertion(a) : exact(a))),
|
|
70
|
+
...(parsed.orphaned === true ? { orphaned: true } : {}),
|
|
71
|
+
...(scripts !== undefined ? { scripts } : {}),
|
|
72
|
+
envelopeXml: envelope === undefined ? '' : envelope.toString('utf8'),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
for (const orphan of [...names].sort()) {
|
|
76
|
+
problems.push({
|
|
77
|
+
code: 'orphan-request-file',
|
|
78
|
+
message: `"${orphan}" does not belong to any request`,
|
|
79
|
+
file: `${dir}/${orphan}`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return requests.sort(byOrder);
|
|
83
|
+
}
|
|
84
|
+
function requestDocument(request) {
|
|
85
|
+
return compact({
|
|
86
|
+
kind: request.kind,
|
|
87
|
+
id: request.id,
|
|
88
|
+
name: request.name,
|
|
89
|
+
order: request.order,
|
|
90
|
+
description: request.description,
|
|
91
|
+
endpointId: request.endpointId,
|
|
92
|
+
endpointUrl: request.endpointUrl,
|
|
93
|
+
soapVersion: request.soapVersion,
|
|
94
|
+
soapAction: request.soapAction,
|
|
95
|
+
headers: request.headers.map((h) => ({ name: h.name, value: h.value })),
|
|
96
|
+
attachments: request.attachments.map((a) => compact({ ...a })),
|
|
97
|
+
auth: request.auth === undefined ? undefined : authDocument(request.auth),
|
|
98
|
+
wsa: request.wsa === undefined ? undefined : compact({ ...request.wsa }),
|
|
99
|
+
wssOutgoingRef: request.wssOutgoingRef,
|
|
100
|
+
wssIncomingRef: request.wssIncomingRef,
|
|
101
|
+
properties: compact({ ...request.properties }),
|
|
102
|
+
assertions: request.assertions.length > 0 ? request.assertions.map((a) => compact({ ...a })) : undefined,
|
|
103
|
+
orphaned: request.orphaned === true ? true : undefined,
|
|
104
|
+
scripts: scriptsDocument(request.scripts, request.slug).document,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function interfaceDocument(iface) {
|
|
108
|
+
return compact({
|
|
109
|
+
kind: iface.kind,
|
|
110
|
+
id: iface.id,
|
|
111
|
+
name: iface.name,
|
|
112
|
+
order: iface.order,
|
|
113
|
+
definitionUrl: iface.definitionUrl,
|
|
114
|
+
cacheDefinition: iface.cacheDefinition,
|
|
115
|
+
targetNamespace: iface.targetNamespace,
|
|
116
|
+
endpoints: iface.endpoints.map((e) => compact({ ...e, auth: e.auth === undefined ? undefined : authDocument(e.auth) })),
|
|
117
|
+
defaultEndpointId: iface.defaultEndpointId,
|
|
118
|
+
wsa: compact({ ...iface.wsa }),
|
|
119
|
+
auth: iface.auth === undefined ? undefined : authDocument(iface.auth),
|
|
120
|
+
operations: iface.operations.map((op) => ({
|
|
121
|
+
name: op.name,
|
|
122
|
+
bindingName: op.bindingName,
|
|
123
|
+
slug: op.slug,
|
|
124
|
+
order: op.order,
|
|
125
|
+
})),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/** SOAP's storage facet. */
|
|
129
|
+
export const soapStorage = {
|
|
130
|
+
dir: INTERFACES_DIR,
|
|
131
|
+
async load(ctx, slug, document) {
|
|
132
|
+
const { fs, root, problems } = ctx;
|
|
133
|
+
const relative = `${INTERFACES_DIR}/${slug}/interface.yaml`;
|
|
134
|
+
const parsed = parseFile(interfaceFileSchema, document, relative);
|
|
135
|
+
const operationsDir = `${INTERFACES_DIR}/${slug}/${OPERATIONS_DIR}`;
|
|
136
|
+
const folders = new Set((await readdirIfExists(fs, abs(root, operationsDir))).filter((e) => e.isDirectory).map((e) => e.name));
|
|
137
|
+
const operations = [];
|
|
138
|
+
for (const entry of parsed.operations) {
|
|
139
|
+
folders.delete(entry.slug);
|
|
140
|
+
operations.push({
|
|
141
|
+
name: entry.name,
|
|
142
|
+
bindingName: entry.bindingName,
|
|
143
|
+
slug: entry.slug,
|
|
144
|
+
order: entry.order,
|
|
145
|
+
requests: await loadRequests(fs, root, `${operationsDir}/${entry.slug}`, problems),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
for (const orphan of [...folders].sort()) {
|
|
149
|
+
problems.push({
|
|
150
|
+
code: 'orphan-operation-folder',
|
|
151
|
+
message: `Operation folder "${orphan}" is not listed in interface.yaml`,
|
|
152
|
+
file: `${operationsDir}/${orphan}`,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const endpoints = parsed.endpoints.map((e) => ({
|
|
156
|
+
id: e.id,
|
|
157
|
+
name: e.name,
|
|
158
|
+
url: e.url,
|
|
159
|
+
...optional('auth', soapOwnerAuth(e.auth)),
|
|
160
|
+
authMode: e.authMode,
|
|
161
|
+
}));
|
|
162
|
+
return {
|
|
163
|
+
kind: 'soap',
|
|
164
|
+
id: parsed.id,
|
|
165
|
+
name: parsed.name,
|
|
166
|
+
slug,
|
|
167
|
+
order: parsed.order,
|
|
168
|
+
definitionUrl: parsed.definitionUrl,
|
|
169
|
+
cacheDefinition: parsed.cacheDefinition,
|
|
170
|
+
...optional('targetNamespace', parsed.targetNamespace),
|
|
171
|
+
endpoints,
|
|
172
|
+
...optional('defaultEndpointId', parsed.defaultEndpointId),
|
|
173
|
+
wsa: normalizeWsa(parsed.wsa),
|
|
174
|
+
...optional('auth', soapOwnerAuth(parsed.auth)),
|
|
175
|
+
operations: operations.sort(byOrder),
|
|
176
|
+
};
|
|
177
|
+
},
|
|
178
|
+
files(iface) {
|
|
179
|
+
const files = new Map();
|
|
180
|
+
assertPathSegment(iface.slug);
|
|
181
|
+
const base = `${INTERFACES_DIR}/${iface.slug}`;
|
|
182
|
+
files.set(`${base}/interface.yaml`, stringifyYaml(interfaceDocument(iface)));
|
|
183
|
+
for (const operation of iface.operations) {
|
|
184
|
+
assertPathSegment(operation.slug);
|
|
185
|
+
const dir = `${base}/${OPERATIONS_DIR}/${operation.slug}`;
|
|
186
|
+
for (const request of operation.requests) {
|
|
187
|
+
assertPathSegment(request.slug);
|
|
188
|
+
files.set(`${dir}/${request.slug}${REQUEST_SUFFIX}`, stringifyYaml(requestDocument(request)));
|
|
189
|
+
files.set(`${dir}/${request.slug}.xml`, request.envelopeXml);
|
|
190
|
+
writeScriptFiles(files, dir, request.scripts, request.slug);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return files;
|
|
194
|
+
},
|
|
195
|
+
/**
|
|
196
|
+
* `interface.yaml`, every `operations/<slug>/*.request.yaml`, and the `.xml` and script files
|
|
197
|
+
* that sit beside a request file of the same slug. An envelope with no request file, the
|
|
198
|
+
* definition cache and anything else in the folder are not Wirebench's to delete.
|
|
199
|
+
*/
|
|
200
|
+
async managed(fs, root, slug) {
|
|
201
|
+
const managed = [];
|
|
202
|
+
const base = `${INTERFACES_DIR}/${slug}`;
|
|
203
|
+
const ifaceFile = `${base}/interface.yaml`;
|
|
204
|
+
if ((await readFileIfExists(fs, abs(root, ifaceFile))) !== undefined) {
|
|
205
|
+
managed.push(ifaceFile);
|
|
206
|
+
}
|
|
207
|
+
const opsDir = `${base}/${OPERATIONS_DIR}`;
|
|
208
|
+
for (const opEntry of await readdirIfExists(fs, abs(root, opsDir))) {
|
|
209
|
+
if (!opEntry.isDirectory) {
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
const opDir = `${opsDir}/${opEntry.name}`;
|
|
213
|
+
const requestSlugs = new Set();
|
|
214
|
+
const opFiles = await readdirIfExists(fs, abs(root, opDir));
|
|
215
|
+
for (const fileEntry of opFiles) {
|
|
216
|
+
if (fileEntry.isFile && fileEntry.name.endsWith(REQUEST_SUFFIX)) {
|
|
217
|
+
requestSlugs.add(fileEntry.name.slice(0, -REQUEST_SUFFIX.length));
|
|
218
|
+
managed.push(`${opDir}/${fileEntry.name}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
for (const fileEntry of opFiles) {
|
|
222
|
+
if (fileEntry.isFile && fileEntry.name.endsWith('.xml')) {
|
|
223
|
+
const requestSlug = fileEntry.name.slice(0, -'.xml'.length);
|
|
224
|
+
if (requestSlugs.has(requestSlug)) {
|
|
225
|
+
managed.push(`${opDir}/${fileEntry.name}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else if (fileEntry.isFile && [...requestSlugs].some((known) => isScriptFileOf(fileEntry.name, known))) {
|
|
229
|
+
managed.push(`${opDir}/${fileEntry.name}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return managed;
|
|
234
|
+
},
|
|
235
|
+
containers: (project) => project.interfaces,
|
|
236
|
+
withContainers: (project, interfaces) => ({ ...project, interfaces }),
|
|
237
|
+
};
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* Entitizing is the odd one out. It escapes the values substituted by property expansion,
|
|
11
11
|
* which cannot be identified after the fact — by the time an envelope is a string, a `&` that
|
|
12
12
|
* came from a property is indistinguishable from one the user typed. So {@link entitizeValue}
|
|
13
|
-
* is applied *during* expansion instead (see `project/properties.ts`'s `entitize` option)
|
|
14
|
-
* lives here
|
|
13
|
+
* is applied *during* expansion instead (see `project/properties.ts`'s `entitize` option). It
|
|
14
|
+
* lives in `xml/entitize.ts`, which core can import, and is re-exported here beside its siblings.
|
|
15
15
|
*/
|
|
16
16
|
/**
|
|
17
17
|
* "Remove Empty Content": drops every element that has no attributes and whose whole
|
|
@@ -40,13 +40,4 @@ export declare function stripWhitespaces(xml: string): string;
|
|
|
40
40
|
* @returns the formatted envelope, or `xml` unchanged when it could not be formatted
|
|
41
41
|
*/
|
|
42
42
|
export declare function prettyPrint(xml: string, indentWidth?: number): string;
|
|
43
|
-
|
|
44
|
-
* "Entitize Properties", applied to one substituted property value: escapes the three
|
|
45
|
-
* characters that would otherwise be read as markup once the value lands inside an envelope.
|
|
46
|
-
*
|
|
47
|
-
* `"` and `'` are deliberately left alone: expansion targets element content far more often
|
|
48
|
-
* than an attribute value, and escaping quotes there would show up as `"` in the payload.
|
|
49
|
-
*
|
|
50
|
-
* @param value the expanded property value
|
|
51
|
-
*/
|
|
52
|
-
export declare function entitizeValue(value: string): string;
|
|
43
|
+
export { entitizeValue } from '../xml/entitize.js';
|
package/dist/soap/transforms.js
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* Entitizing is the odd one out. It escapes the values substituted by property expansion,
|
|
11
11
|
* which cannot be identified after the fact — by the time an envelope is a string, a `&` that
|
|
12
12
|
* came from a property is indistinguishable from one the user typed. So {@link entitizeValue}
|
|
13
|
-
* is applied *during* expansion instead (see `project/properties.ts`'s `entitize` option)
|
|
14
|
-
* lives here
|
|
13
|
+
* is applied *during* expansion instead (see `project/properties.ts`'s `entitize` option). It
|
|
14
|
+
* lives in `xml/entitize.ts`, which core can import, and is re-exported here beside its siblings.
|
|
15
15
|
*/
|
|
16
16
|
import { formatXml } from '../xml/pretty.js';
|
|
17
17
|
import { buildRangeTree, localNameOf, tokenizeXml } from '../xml/tolerant-tree.js';
|
|
@@ -150,15 +150,4 @@ export function prettyPrint(xml, indentWidth = 3) {
|
|
|
150
150
|
const result = formatXml(xml, { indent: ' '.repeat(Math.max(0, indentWidth)) });
|
|
151
151
|
return result.problem === undefined ? result.text : xml;
|
|
152
152
|
}
|
|
153
|
-
|
|
154
|
-
* "Entitize Properties", applied to one substituted property value: escapes the three
|
|
155
|
-
* characters that would otherwise be read as markup once the value lands inside an envelope.
|
|
156
|
-
*
|
|
157
|
-
* `"` and `'` are deliberately left alone: expansion targets element content far more often
|
|
158
|
-
* than an attribute value, and escaping quotes there would show up as `"` in the payload.
|
|
159
|
-
*
|
|
160
|
-
* @param value the expanded property value
|
|
161
|
-
*/
|
|
162
|
-
export function entitizeValue(value) {
|
|
163
|
-
return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
164
|
-
}
|
|
153
|
+
export { entitizeValue } from '../xml/entitize.js';
|