@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,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TypeScript language service behind script checking and editing (spec §Type-checking).
|
|
3
|
+
*
|
|
4
|
+
* Each script model gets a service of its own over two virtual files: the declarations (the API and
|
|
5
|
+
* the request's generated types) and the script. Services cannot share a program, because each
|
|
6
|
+
* model's declarations are ambient globals that would clash; they share a document registry, so the
|
|
7
|
+
* standard library is parsed once. Models are kept most-recently-used first, and the oldest is
|
|
8
|
+
* dropped past {@link MAX_MODELS}.
|
|
9
|
+
*
|
|
10
|
+
* Options: `strict`, no emit, ES2023 with no DOM, no `@types`, and `erasableSyntaxOnly`, so that
|
|
11
|
+
* whatever passes the check can be stripped (`../strip.ts`) and run as it is.
|
|
12
|
+
*/
|
|
13
|
+
import { dirname } from 'node:path';
|
|
14
|
+
import ts from 'typescript';
|
|
15
|
+
/** Most script models kept at once. */
|
|
16
|
+
export const MAX_MODELS = 32;
|
|
17
|
+
/** The file names each model's two files have. */
|
|
18
|
+
const DECLARATIONS = '/wb/types.d.ts';
|
|
19
|
+
const SCRIPT_TS = '/wb/script.ts';
|
|
20
|
+
const SCRIPT_JS = '/wb/script.js';
|
|
21
|
+
export const COMPILER_OPTIONS = {
|
|
22
|
+
strict: true,
|
|
23
|
+
noEmit: true,
|
|
24
|
+
target: ts.ScriptTarget.ES2023,
|
|
25
|
+
lib: ['lib.es2023.d.ts'],
|
|
26
|
+
types: [],
|
|
27
|
+
erasableSyntaxOnly: true,
|
|
28
|
+
allowJs: true,
|
|
29
|
+
checkJs: false,
|
|
30
|
+
noLib: false,
|
|
31
|
+
skipLibCheck: true,
|
|
32
|
+
};
|
|
33
|
+
const registry = ts.createDocumentRegistry();
|
|
34
|
+
const models = new Map();
|
|
35
|
+
function scriptFile(model) {
|
|
36
|
+
return model.api === 'postman' ? SCRIPT_JS : SCRIPT_TS;
|
|
37
|
+
}
|
|
38
|
+
function createService(entry) {
|
|
39
|
+
const libDir = dirname(ts.getDefaultLibFilePath(COMPILER_OPTIONS));
|
|
40
|
+
const host = {
|
|
41
|
+
getCompilationSettings: () => COMPILER_OPTIONS,
|
|
42
|
+
getScriptFileNames: () => [DECLARATIONS, scriptFile(entry().model)],
|
|
43
|
+
getScriptVersion: () => String(entry().version),
|
|
44
|
+
getScriptSnapshot: (name) => {
|
|
45
|
+
const { model } = entry();
|
|
46
|
+
if (name === DECLARATIONS)
|
|
47
|
+
return ts.ScriptSnapshot.fromString(model.declarations);
|
|
48
|
+
if (name === SCRIPT_TS || name === SCRIPT_JS)
|
|
49
|
+
return ts.ScriptSnapshot.fromString(model.source);
|
|
50
|
+
const text = ts.sys.readFile(name);
|
|
51
|
+
return text === undefined ? undefined : ts.ScriptSnapshot.fromString(text);
|
|
52
|
+
},
|
|
53
|
+
getCurrentDirectory: () => '/wb',
|
|
54
|
+
getDefaultLibFileName: (options) => ts.getDefaultLibFilePath(options),
|
|
55
|
+
// Only the virtual files and the standard library exist; nothing else on disk is read.
|
|
56
|
+
fileExists: (name) => name === DECLARATIONS || name === SCRIPT_TS || name === SCRIPT_JS || name.startsWith(libDir),
|
|
57
|
+
readFile: (name) => (name.startsWith(libDir) ? ts.sys.readFile(name) : undefined),
|
|
58
|
+
readDirectory: () => [],
|
|
59
|
+
directoryExists: (name) => name === '/wb' || name.startsWith(libDir),
|
|
60
|
+
getDirectories: () => [],
|
|
61
|
+
};
|
|
62
|
+
return ts.createLanguageService(host, registry);
|
|
63
|
+
}
|
|
64
|
+
/** Sets a model's text, creating its service if it is new. */
|
|
65
|
+
export function updateModel(id, model) {
|
|
66
|
+
const existing = models.get(id);
|
|
67
|
+
if (existing !== undefined) {
|
|
68
|
+
models.delete(id);
|
|
69
|
+
const same = existing.model.source === model.source &&
|
|
70
|
+
existing.model.declarations === model.declarations &&
|
|
71
|
+
existing.model.api === model.api;
|
|
72
|
+
if (!same) {
|
|
73
|
+
existing.model = model;
|
|
74
|
+
existing.version += 1;
|
|
75
|
+
}
|
|
76
|
+
models.set(id, existing);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const entry = { model, version: 1, service: undefined };
|
|
80
|
+
entry.service = createService(() => entry);
|
|
81
|
+
models.set(id, entry);
|
|
82
|
+
while (models.size > MAX_MODELS) {
|
|
83
|
+
const oldest = models.keys().next().value;
|
|
84
|
+
if (oldest === undefined)
|
|
85
|
+
break;
|
|
86
|
+
models.get(oldest)?.service.dispose();
|
|
87
|
+
models.delete(oldest);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function removeModel(id) {
|
|
91
|
+
models.get(id)?.service.dispose();
|
|
92
|
+
models.delete(id);
|
|
93
|
+
}
|
|
94
|
+
function entryOf(id) {
|
|
95
|
+
const entry = models.get(id);
|
|
96
|
+
if (entry === undefined)
|
|
97
|
+
throw new Error(`No script model "${id}"`);
|
|
98
|
+
return entry;
|
|
99
|
+
}
|
|
100
|
+
function lineColumn(source, offset) {
|
|
101
|
+
let line = 1;
|
|
102
|
+
let lastBreak = -1;
|
|
103
|
+
for (let i = 0; i < offset && i < source.length; i++) {
|
|
104
|
+
if (source.charCodeAt(i) === 10) {
|
|
105
|
+
line += 1;
|
|
106
|
+
lastBreak = i;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { line, column: offset - lastBreak };
|
|
110
|
+
}
|
|
111
|
+
function offsetOf(source, line, column) {
|
|
112
|
+
let offset = 0;
|
|
113
|
+
for (let current = 1; current < line; current++) {
|
|
114
|
+
const next = source.indexOf('\n', offset);
|
|
115
|
+
if (next === -1)
|
|
116
|
+
return source.length;
|
|
117
|
+
offset = next + 1;
|
|
118
|
+
}
|
|
119
|
+
return Math.min(source.length, offset + column - 1);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The script's diagnostics. A Postman script (JavaScript) gets only its syntax errors; a typed one
|
|
123
|
+
* gets syntax and type errors. Errors in the declarations themselves are not the script's and are
|
|
124
|
+
* left out.
|
|
125
|
+
*/
|
|
126
|
+
export function diagnosticsOf(id) {
|
|
127
|
+
const { model, service } = entryOf(id);
|
|
128
|
+
const file = scriptFile(model);
|
|
129
|
+
const found = [
|
|
130
|
+
...service.getSyntacticDiagnostics(file),
|
|
131
|
+
...(model.api === 'postman' ? [] : service.getSemanticDiagnostics(file)),
|
|
132
|
+
];
|
|
133
|
+
return found.map((d) => {
|
|
134
|
+
const start = d.start ?? 0;
|
|
135
|
+
const from = lineColumn(model.source, start);
|
|
136
|
+
const to = lineColumn(model.source, start + (d.length ?? 0));
|
|
137
|
+
return {
|
|
138
|
+
line: from.line,
|
|
139
|
+
column: from.column,
|
|
140
|
+
endLine: to.line,
|
|
141
|
+
endColumn: to.column,
|
|
142
|
+
message: ts.flattenDiagnosticMessageText(d.messageText, '\n'),
|
|
143
|
+
code: d.code,
|
|
144
|
+
severity: d.category === ts.DiagnosticCategory.Error ? 'error' : 'warning',
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/** Completions at a 1-based position, at most 200. */
|
|
149
|
+
export function completionsAt(id, line, column) {
|
|
150
|
+
const { model, service } = entryOf(id);
|
|
151
|
+
const info = service.getCompletionsAtPosition(scriptFile(model), offsetOf(model.source, line, column), {
|
|
152
|
+
includeCompletionsWithInsertText: true,
|
|
153
|
+
});
|
|
154
|
+
return (info?.entries ?? [])
|
|
155
|
+
.filter((entry) => !entry.name.startsWith('__') && !entry.name.startsWith('Wb'))
|
|
156
|
+
.slice(0, 200)
|
|
157
|
+
.map((entry) => ({ name: entry.name, kind: entry.kind }));
|
|
158
|
+
}
|
|
159
|
+
export function quickInfoAt(id, line, column) {
|
|
160
|
+
const { model, service } = entryOf(id);
|
|
161
|
+
const info = service.getQuickInfoAtPosition(scriptFile(model), offsetOf(model.source, line, column));
|
|
162
|
+
if (info === undefined)
|
|
163
|
+
return undefined;
|
|
164
|
+
const documentation = ts.displayPartsToString(info.documentation);
|
|
165
|
+
return {
|
|
166
|
+
text: ts.displayPartsToString(info.displayParts),
|
|
167
|
+
...(documentation !== '' ? { documentation } : {}),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export function signatureHelpAt(id, line, column) {
|
|
171
|
+
const { model, service } = entryOf(id);
|
|
172
|
+
const help = service.getSignatureHelpItems(scriptFile(model), offsetOf(model.source, line, column), undefined);
|
|
173
|
+
const item = help?.items[help.selectedItemIndex];
|
|
174
|
+
if (help === undefined || item === undefined)
|
|
175
|
+
return undefined;
|
|
176
|
+
const parameters = item.parameters.map((p) => ts.displayPartsToString(p.displayParts));
|
|
177
|
+
const documentation = ts.displayPartsToString(item.documentation);
|
|
178
|
+
return {
|
|
179
|
+
label: `${ts.displayPartsToString(item.prefixDisplayParts)}${parameters.join(ts.displayPartsToString(item.separatorDisplayParts))}${ts.displayPartsToString(item.suffixDisplayParts)}`,
|
|
180
|
+
parameters,
|
|
181
|
+
activeParameter: help.argumentIndex,
|
|
182
|
+
...(documentation !== '' ? { documentation } : {}),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/** One-shot check of a script against declarations, without keeping a model. */
|
|
186
|
+
export function checkOnce(model) {
|
|
187
|
+
const id = `once:${String(Math.random())}`;
|
|
188
|
+
updateModel(id, model);
|
|
189
|
+
try {
|
|
190
|
+
return diagnosticsOf(id);
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
removeModel(id);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry point run inside a `node:worker_threads` Worker by {@link createScriptChecker}. Each message
|
|
3
|
+
* is one request (`{ id, request }`) answered with `{ id, result }` or `{ id, error }`, one at a time.
|
|
4
|
+
*/
|
|
5
|
+
import { parentPort } from 'node:worker_threads';
|
|
6
|
+
import { checkOnce, completionsAt, diagnosticsOf, quickInfoAt, removeModel, signatureHelpAt, updateModel, } from './service.js';
|
|
7
|
+
function answer(request) {
|
|
8
|
+
switch (request.op) {
|
|
9
|
+
case 'check':
|
|
10
|
+
return checkOnce(request.model);
|
|
11
|
+
case 'remove':
|
|
12
|
+
removeModel(request.modelId);
|
|
13
|
+
return null;
|
|
14
|
+
case 'diagnostics':
|
|
15
|
+
updateModel(request.modelId, request.model);
|
|
16
|
+
return diagnosticsOf(request.modelId);
|
|
17
|
+
case 'completions':
|
|
18
|
+
updateModel(request.modelId, request.model);
|
|
19
|
+
return completionsAt(request.modelId, request.line, request.column);
|
|
20
|
+
case 'quickInfo':
|
|
21
|
+
updateModel(request.modelId, request.model);
|
|
22
|
+
return quickInfoAt(request.modelId, request.line, request.column) ?? null;
|
|
23
|
+
case 'signatureHelp':
|
|
24
|
+
updateModel(request.modelId, request.model);
|
|
25
|
+
return signatureHelpAt(request.modelId, request.line, request.column) ?? null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/* v8 ignore start -- runs only inside a real worker thread; covered end to end by check.test.ts. */
|
|
29
|
+
if (parentPort !== null) {
|
|
30
|
+
const port = parentPort;
|
|
31
|
+
port.on('message', ({ id, request }) => {
|
|
32
|
+
try {
|
|
33
|
+
port.postMessage({ id, result: answer(request) });
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
port.postMessage({ id, error: error instanceof Error ? error.message : String(error) });
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/* v8 ignore stop */
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Typed scripting (#63): the sandbox, the checker, the API's types and a request's scripts in a send. */
|
|
2
|
+
export { createScriptSandbox, clampTimeout, SCRIPT_QUEUE_LIMIT } from './sandbox/host.js';
|
|
3
|
+
export type { ScriptSandbox, ScriptSandboxOptions } from './sandbox/host.js';
|
|
4
|
+
export { SCRIPT_LIMITS } from './sandbox/model.js';
|
|
5
|
+
export type { SandboxLog, ScriptPosition } from './sandbox/model.js';
|
|
6
|
+
export { createScriptChecker, CHECK_DEADLINE_MS, ScriptCheckerError } from './check/host.js';
|
|
7
|
+
export type { ScriptChecker, ScriptCheckerOptions, ScriptCompletion, ScriptDiagnostic, ScriptModel, ScriptQuickInfo, ScriptSignatureHelp, } from './check/host.js';
|
|
8
|
+
export { isScriptFileOf, SCRIPT_OUTPUT_LIMITS, scriptFileName } from './model.js';
|
|
9
|
+
export type { HeaderPair, RequestScripts, ScriptApi, ScriptErrorCode, ScriptFailure, ScriptLog, ScriptOutcome, ScriptPhase, ScriptSource, ScriptTest, ScriptValue, } from './model.js';
|
|
10
|
+
export { activeScripts, assertScriptsUsable, RequestScripting, scriptError, typeCheckError, } from './request-scripts.js';
|
|
11
|
+
export type { RequestScriptingOptions, RequestScriptTypes, ScriptedRequest, ScriptRunValues, } from './request-scripts.js';
|
|
12
|
+
export { SecretPlaceholders } from './send.js';
|
|
13
|
+
export { scriptProperties } from './props.js';
|
|
14
|
+
export { apiDeclarations, apiReference, scriptDeclarations, secretNameType } from './types/api.js';
|
|
15
|
+
export type { ApiReferenceSection } from './types/api.js';
|
|
16
|
+
export { stripTypes, StripError } from './strip.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Typed scripting (#63): the sandbox, the checker, the API's types and a request's scripts in a send. */
|
|
2
|
+
export { createScriptSandbox, clampTimeout, SCRIPT_QUEUE_LIMIT } from './sandbox/host.js';
|
|
3
|
+
export { SCRIPT_LIMITS } from './sandbox/model.js';
|
|
4
|
+
export { createScriptChecker, CHECK_DEADLINE_MS, ScriptCheckerError } from './check/host.js';
|
|
5
|
+
export { isScriptFileOf, SCRIPT_OUTPUT_LIMITS, scriptFileName } from './model.js';
|
|
6
|
+
export { activeScripts, assertScriptsUsable, RequestScripting, scriptError, typeCheckError, } from './request-scripts.js';
|
|
7
|
+
export { SecretPlaceholders } from './send.js';
|
|
8
|
+
export { scriptProperties } from './props.js';
|
|
9
|
+
export { apiDeclarations, apiReference, scriptDeclarations, secretNameType } from './types/api.js';
|
|
10
|
+
export { stripTypes, StripError } from './strip.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ProtocolScripting } from '../protocol/module.js';
|
|
2
|
+
import type { ProtocolRegistry } from '../protocol/registry.js';
|
|
3
|
+
/** The scripting facet of `protocol` in `registry` (the built-in one when absent), if it has one. */
|
|
4
|
+
export declare function scriptingOf(protocol: string, registry?: ProtocolRegistry): ProtocolScripting | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* A facet as given, or the facet of the protocol a `kind` names.
|
|
7
|
+
*
|
|
8
|
+
* @throws WirebenchError `script-unsupported` when the protocol has no scripting facet
|
|
9
|
+
*/
|
|
10
|
+
export declare function requireScripting(scripting: ProtocolScripting | string, registry?: ProtocolRegistry): ProtocolScripting;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Finds the scripting facet of a protocol (spec §5.5). */
|
|
2
|
+
import { WirebenchError } from '../errors.js';
|
|
3
|
+
import { defaultRegistry } from '../protocols.js';
|
|
4
|
+
/** The scripting facet of `protocol` in `registry` (the built-in one when absent), if it has one. */
|
|
5
|
+
export function scriptingOf(protocol, registry = defaultRegistry()) {
|
|
6
|
+
return registry.find(protocol)?.scripting;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A facet as given, or the facet of the protocol a `kind` names.
|
|
10
|
+
*
|
|
11
|
+
* @throws WirebenchError `script-unsupported` when the protocol has no scripting facet
|
|
12
|
+
*/
|
|
13
|
+
export function requireScripting(scripting, registry) {
|
|
14
|
+
if (typeof scripting !== 'string')
|
|
15
|
+
return scripting;
|
|
16
|
+
const found = scriptingOf(scripting, registry);
|
|
17
|
+
if (found === undefined) {
|
|
18
|
+
throw new WirebenchError('script-unsupported', `Requests of the "${scripting}" protocol cannot have scripts`, {
|
|
19
|
+
details: { protocol: scripting },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return found;
|
|
23
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a script sees and hands back (spec §API). A request and a response cross into the sandbox as
|
|
3
|
+
* a JSON snapshot; a pre-request script hands back the snapshot it changed, which the host checks and
|
|
4
|
+
* applies (`apply.ts`) — nothing a script returns is trusted as it stands.
|
|
5
|
+
*/
|
|
6
|
+
import type { RequestSnapshotBase } from '../protocol/module.js';
|
|
7
|
+
import type { ScriptPosition } from './sandbox/model.js';
|
|
8
|
+
export type ScriptPhase = 'pre' | 'post';
|
|
9
|
+
/** Which API a script is written against: the typed one, or the Postman layer (§Postman). */
|
|
10
|
+
export type ScriptApi = 'wirebench' | 'postman';
|
|
11
|
+
/** A header or metadata entry, in order; names may repeat. */
|
|
12
|
+
export type HeaderPair = readonly [name: string, value: string];
|
|
13
|
+
/** One `test(...)` a script recorded. */
|
|
14
|
+
export interface ScriptTest {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly passed: boolean;
|
|
17
|
+
readonly message?: string;
|
|
18
|
+
}
|
|
19
|
+
/** One `vars.set(...)` a script made. Held to ADR-0015 wherever it is used. */
|
|
20
|
+
export interface ScriptValue {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly value: string;
|
|
23
|
+
readonly secret: boolean;
|
|
24
|
+
}
|
|
25
|
+
export type ScriptErrorCode = 'script-error' | 'script-timeout' | 'script-memory' | 'script-syntax-error' | 'script-origin-change' | 'script-value-invalid' | 'script-secret-denied' | 'script-unsupported';
|
|
26
|
+
export interface ScriptFailure {
|
|
27
|
+
readonly code: ScriptErrorCode;
|
|
28
|
+
readonly message: string;
|
|
29
|
+
readonly position?: ScriptPosition;
|
|
30
|
+
}
|
|
31
|
+
export interface ScriptLog {
|
|
32
|
+
readonly lines: readonly string[];
|
|
33
|
+
readonly truncated: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** What running one script produced. `request` is set only for a pre-request script that succeeded. */
|
|
36
|
+
export type ScriptOutcome = {
|
|
37
|
+
readonly ok: true;
|
|
38
|
+
readonly request?: RequestSnapshotBase;
|
|
39
|
+
readonly tests: readonly ScriptTest[];
|
|
40
|
+
readonly values: readonly ScriptValue[];
|
|
41
|
+
readonly log: ScriptLog;
|
|
42
|
+
} | {
|
|
43
|
+
readonly ok: false;
|
|
44
|
+
readonly error: ScriptFailure;
|
|
45
|
+
readonly tests: readonly ScriptTest[];
|
|
46
|
+
readonly values: readonly ScriptValue[];
|
|
47
|
+
readonly log: ScriptLog;
|
|
48
|
+
};
|
|
49
|
+
/** Caps on what a script hands back (spec §Sandbox). */
|
|
50
|
+
export declare const SCRIPT_OUTPUT_LIMITS: {
|
|
51
|
+
readonly tests: 1000;
|
|
52
|
+
readonly values: 100;
|
|
53
|
+
readonly valueBytes: number;
|
|
54
|
+
};
|
|
55
|
+
/** A script file as loaded. `problem` is set when it could not be used; such a request refuses to send. */
|
|
56
|
+
export interface ScriptSource {
|
|
57
|
+
readonly text: string;
|
|
58
|
+
readonly problem?: 'script-file-missing' | 'script-too-large';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A request's scripts (spec §Storage): the `scripts` key of a SOAP, REST or gRPC request file, with
|
|
62
|
+
* the text of each script file beside it.
|
|
63
|
+
*/
|
|
64
|
+
export interface RequestScripts {
|
|
65
|
+
readonly pre?: ScriptSource;
|
|
66
|
+
readonly post?: ScriptSource;
|
|
67
|
+
readonly api: ScriptApi;
|
|
68
|
+
/** False keeps the scripts but runs none of them; the Postman importer writes false (§Postman). */
|
|
69
|
+
readonly enabled: boolean;
|
|
70
|
+
/** The secrets a script may read with `secrets.get` (§Secrets). */
|
|
71
|
+
readonly secrets: readonly string[];
|
|
72
|
+
/** Per script; absent means {@link SCRIPT_LIMITS.defaultTimeoutMs}. */
|
|
73
|
+
readonly timeoutMs?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The file a request's script lives in, beside the request file: `<slug>.pre.ts` for the typed API,
|
|
77
|
+
* `<slug>.pre.js` for the Postman layer. Always derived from the slug, never read from the request
|
|
78
|
+
* file, so a hand-edited name cannot point outside the request's directory.
|
|
79
|
+
*/
|
|
80
|
+
export declare function scriptFileName(slug: string, phase: ScriptPhase, api: ScriptApi): string;
|
|
81
|
+
/** True for `<slug>.pre.ts`, `<slug>.post.ts`, `<slug>.pre.js` or `<slug>.post.js` of this slug. */
|
|
82
|
+
export declare function isScriptFileOf(name: string, slug: string): boolean;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Caps on what a script hands back (spec §Sandbox). */
|
|
2
|
+
export const SCRIPT_OUTPUT_LIMITS = {
|
|
3
|
+
tests: 1_000,
|
|
4
|
+
values: 100,
|
|
5
|
+
valueBytes: 64 * 1024,
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* The file a request's script lives in, beside the request file: `<slug>.pre.ts` for the typed API,
|
|
9
|
+
* `<slug>.pre.js` for the Postman layer. Always derived from the slug, never read from the request
|
|
10
|
+
* file, so a hand-edited name cannot point outside the request's directory.
|
|
11
|
+
*/
|
|
12
|
+
export function scriptFileName(slug, phase, api) {
|
|
13
|
+
return `${slug}.${phase}.${api === 'postman' ? 'js' : 'ts'}`;
|
|
14
|
+
}
|
|
15
|
+
/** True for `<slug>.pre.ts`, `<slug>.post.ts`, `<slug>.pre.js` or `<slug>.post.js` of this slug. */
|
|
16
|
+
export function isScriptFileOf(name, slug) {
|
|
17
|
+
return /^\.(pre|post)\.(ts|js)$/.test(name.startsWith(slug) ? name.slice(slug.length) : '');
|
|
18
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The properties a script's `props.get` reads (spec §API): every name the `${name}` shorthand can
|
|
3
|
+
* reach, resolved as the shorthand would resolve it, with secrets left out. A property whose value
|
|
4
|
+
* is, or leads to, a secret does not resolve without the secrets, so it is simply absent: a script
|
|
5
|
+
* reads a secret only through `secrets.get`, and only when its request lists it.
|
|
6
|
+
*/
|
|
7
|
+
import { type PropertyScopes } from '../project/properties.js';
|
|
8
|
+
export declare function scriptProperties(scopes: PropertyScopes): Record<string, string>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The properties a script's `props.get` reads (spec §API): every name the `${name}` shorthand can
|
|
3
|
+
* reach, resolved as the shorthand would resolve it, with secrets left out. A property whose value
|
|
4
|
+
* is, or leads to, a secret does not resolve without the secrets, so it is simply absent: a script
|
|
5
|
+
* reads a secret only through `secrets.get`, and only when its request lists it.
|
|
6
|
+
*/
|
|
7
|
+
import { expand } from '../project/properties.js';
|
|
8
|
+
/** At most this many properties are handed to a script. */
|
|
9
|
+
const MAX_PROPERTIES = 2_000;
|
|
10
|
+
export function scriptProperties(scopes) {
|
|
11
|
+
const withoutSecrets = { ...scopes, secrets: {} };
|
|
12
|
+
const names = new Set();
|
|
13
|
+
for (const map of [scopes.env, scopes.workspace, scopes.project, scopes.global]) {
|
|
14
|
+
for (const name of Object.keys(map ?? {}))
|
|
15
|
+
names.add(name);
|
|
16
|
+
}
|
|
17
|
+
const out = {};
|
|
18
|
+
for (const name of names) {
|
|
19
|
+
if (Object.keys(out).length >= MAX_PROPERTIES)
|
|
20
|
+
break;
|
|
21
|
+
if (!/^[A-Za-z_][\w.-]*$/.test(name))
|
|
22
|
+
continue;
|
|
23
|
+
const result = expand(`\${${name}}`, withoutSecrets);
|
|
24
|
+
if (result.unresolved.length === 0)
|
|
25
|
+
out[name] = result.text;
|
|
26
|
+
}
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { WirebenchError } from '../errors.js';
|
|
2
|
+
import type { RequestSnapshotBase, ResponseSnapshotBase } from '../protocol/module.js';
|
|
3
|
+
import type { ProtocolRegistry } from '../protocol/registry.js';
|
|
4
|
+
import type { ScriptChecker, ScriptDiagnostic } from './check/host.js';
|
|
5
|
+
import { type RequestScripts, type ScriptFailure, type ScriptOutcome, type ScriptPhase } from './model.js';
|
|
6
|
+
import type { ScriptSandbox } from './sandbox/host.js';
|
|
7
|
+
/** The generated half of a request's script types, and what its module needs for typed views. */
|
|
8
|
+
export interface RequestScriptTypes {
|
|
9
|
+
readonly generated: string;
|
|
10
|
+
/**
|
|
11
|
+
* Opaque to everything but the module that produced it, which reads it back in its scripting
|
|
12
|
+
* facet's `views` (SOAP: `SoapScriptBinding`).
|
|
13
|
+
*/
|
|
14
|
+
readonly binding?: unknown;
|
|
15
|
+
}
|
|
16
|
+
/** The scripts of a request that will run: none when there are none or they are switched off. */
|
|
17
|
+
export declare function activeScripts(scripts: RequestScripts | undefined): RequestScripts | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Refuses a request whose script file is missing or too large: sending it without that script
|
|
20
|
+
* would be sending something other than what the request says.
|
|
21
|
+
*
|
|
22
|
+
* @throws WirebenchError `script-file-missing` | `script-too-large`
|
|
23
|
+
*/
|
|
24
|
+
export declare function assertScriptsUsable(scripts: RequestScripts, path: string): void;
|
|
25
|
+
/** A script failure as the error a send reports, with the script's file and position in it. */
|
|
26
|
+
export declare function scriptError(failure: ScriptFailure, filename: string): WirebenchError;
|
|
27
|
+
/** A type-check failure: every error, as `file:line:column: message`. */
|
|
28
|
+
export declare function typeCheckError(path: string, errors: readonly {
|
|
29
|
+
file: string;
|
|
30
|
+
diagnostic: ScriptDiagnostic;
|
|
31
|
+
}[]): WirebenchError;
|
|
32
|
+
export interface RequestScriptingOptions {
|
|
33
|
+
readonly sandbox: ScriptSandbox;
|
|
34
|
+
/** Absent: scripts run without a type check (a host that checks them another way). */
|
|
35
|
+
readonly checker?: ScriptChecker;
|
|
36
|
+
/** Told every secret value a script may read, before it runs. */
|
|
37
|
+
readonly onSecretValue?: (value: string) => void;
|
|
38
|
+
/** Where a request's protocol is looked up; the built-in registry when absent. */
|
|
39
|
+
readonly registry?: ProtocolRegistry;
|
|
40
|
+
}
|
|
41
|
+
/** One request's scripts, with the facts every run of them shares. */
|
|
42
|
+
export interface ScriptedRequest {
|
|
43
|
+
readonly protocol: string;
|
|
44
|
+
/** The request's path, for messages. */
|
|
45
|
+
readonly path: string;
|
|
46
|
+
readonly name: string;
|
|
47
|
+
readonly slug: string;
|
|
48
|
+
readonly scripts: RequestScripts;
|
|
49
|
+
readonly types: RequestScriptTypes;
|
|
50
|
+
}
|
|
51
|
+
export interface ScriptRunValues {
|
|
52
|
+
readonly vars: Readonly<Record<string, string>>;
|
|
53
|
+
readonly props: Readonly<Record<string, string>>;
|
|
54
|
+
/** The values of the secrets `scripts.secrets` lists. */
|
|
55
|
+
readonly secrets: Readonly<Record<string, string>>;
|
|
56
|
+
}
|
|
57
|
+
/** Runs requests' scripts, caching each script's type check by its text and its types. */
|
|
58
|
+
export declare class RequestScripting {
|
|
59
|
+
private readonly options;
|
|
60
|
+
private readonly checked;
|
|
61
|
+
constructor(options: RequestScriptingOptions);
|
|
62
|
+
private filename;
|
|
63
|
+
private diagnostics;
|
|
64
|
+
/**
|
|
65
|
+
* Type-checks a request's scripts (syntax only for a Postman one).
|
|
66
|
+
*
|
|
67
|
+
* @throws WirebenchError `script-type-error` (or `script-syntax-error` for a Postman script)
|
|
68
|
+
*/
|
|
69
|
+
check(request: ScriptedRequest): Promise<void>;
|
|
70
|
+
private run;
|
|
71
|
+
/**
|
|
72
|
+
* The pre-request script's outcome. A failure is thrown: the request is not sent.
|
|
73
|
+
*
|
|
74
|
+
* @throws WirebenchError with the script's error code
|
|
75
|
+
*/
|
|
76
|
+
pre(request: ScriptedRequest, snapshot: RequestSnapshotBase, values: ScriptRunValues, layer?: string): Promise<Extract<ScriptOutcome, {
|
|
77
|
+
ok: true;
|
|
78
|
+
}>>;
|
|
79
|
+
/** The post-response script's outcome; a failure is returned, since the response is kept. */
|
|
80
|
+
post(request: ScriptedRequest, sent: RequestSnapshotBase, response: ResponseSnapshotBase, values: ScriptRunValues, layer?: string): Promise<ScriptOutcome>;
|
|
81
|
+
/** The file name errors in a phase's script are reported against. */
|
|
82
|
+
fileOf(request: ScriptedRequest, phase: ScriptPhase): string;
|
|
83
|
+
}
|