@wirebench/engine 2.1.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/LICENSE +201 -0
- package/README.md +3 -0
- package/dist/assert/contract.d.ts +3 -0
- package/dist/assert/contract.js +17 -0
- package/dist/assert/index.d.ts +4 -0
- package/dist/assert/index.js +27 -0
- package/dist/assert/match.d.ts +3 -0
- package/dist/assert/match.js +58 -0
- package/dist/assert/model.d.ts +73 -0
- package/dist/assert/model.js +8 -0
- package/dist/assert/schema.d.ts +34 -0
- package/dist/assert/schema.js +46 -0
- package/dist/assert/sla.d.ts +3 -0
- package/dist/assert/sla.js +8 -0
- package/dist/assert/soap-fault.d.ts +3 -0
- package/dist/assert/soap-fault.js +20 -0
- package/dist/assert/status.d.ts +3 -0
- package/dist/assert/status.js +14 -0
- package/dist/errors.d.ts +77 -0
- package/dist/errors.js +121 -0
- package/dist/fs.d.ts +35 -0
- package/dist/fs.js +64 -0
- package/dist/generate.d.ts +12 -0
- package/dist/generate.js +14 -0
- package/dist/grpc/browser.d.ts +11 -0
- package/dist/grpc/browser.js +9 -0
- package/dist/grpc/cache.d.ts +113 -0
- package/dist/grpc/cache.js +244 -0
- package/dist/grpc/call.d.ts +64 -0
- package/dist/grpc/call.js +72 -0
- package/dist/grpc/codec.d.ts +29 -0
- package/dist/grpc/codec.js +416 -0
- package/dist/grpc/command.d.ts +23 -0
- package/dist/grpc/command.js +91 -0
- package/dist/grpc/expand.d.ts +25 -0
- package/dist/grpc/expand.js +52 -0
- package/dist/grpc/framing.d.ts +28 -0
- package/dist/grpc/framing.js +61 -0
- package/dist/grpc/import.d.ts +47 -0
- package/dist/grpc/import.js +88 -0
- package/dist/grpc/model.d.ts +179 -0
- package/dist/grpc/model.js +91 -0
- package/dist/grpc/proto/describe.d.ts +92 -0
- package/dist/grpc/proto/describe.js +205 -0
- package/dist/grpc/proto/load.d.ts +35 -0
- package/dist/grpc/proto/load.js +112 -0
- package/dist/grpc/proto/sample.d.ts +21 -0
- package/dist/grpc/proto/sample.js +79 -0
- package/dist/grpc/proto/well-known.d.ts +42 -0
- package/dist/grpc/proto/well-known.js +143 -0
- package/dist/grpc/reconcile.d.ts +42 -0
- package/dist/grpc/reconcile.js +153 -0
- package/dist/grpc/reflection/client.d.ts +70 -0
- package/dist/grpc/reflection/client.js +197 -0
- package/dist/grpc/reflection/descriptors.d.ts +69 -0
- package/dist/grpc/reflection/descriptors.js +140 -0
- package/dist/grpc/reflection/proto.d.ts +33 -0
- package/dist/grpc/reflection/proto.js +144 -0
- package/dist/grpc/send.d.ts +132 -0
- package/dist/grpc/send.js +435 -0
- package/dist/grpc/shape.d.ts +29 -0
- package/dist/grpc/shape.js +36 -0
- package/dist/grpc/status.d.ts +21 -0
- package/dist/grpc/status.js +62 -0
- package/dist/grpc/target.d.ts +21 -0
- package/dist/grpc/target.js +66 -0
- package/dist/http/auth/apply.d.ts +37 -0
- package/dist/http/auth/apply.js +74 -0
- package/dist/http/auth/basic.d.ts +36 -0
- package/dist/http/auth/basic.js +69 -0
- package/dist/http/auth/md4.d.ts +13 -0
- package/dist/http/auth/md4.js +81 -0
- package/dist/http/auth/ntlm-transport.d.ts +61 -0
- package/dist/http/auth/ntlm-transport.js +97 -0
- package/dist/http/auth/ntlm.d.ts +190 -0
- package/dist/http/auth/ntlm.js +377 -0
- package/dist/http/client.d.ts +73 -0
- package/dist/http/client.js +403 -0
- package/dist/http/curl-flags.d.ts +15 -0
- package/dist/http/curl-flags.js +95 -0
- package/dist/http/curl.d.ts +94 -0
- package/dist/http/curl.js +245 -0
- package/dist/http/decompress.d.ts +7 -0
- package/dist/http/decompress.js +22 -0
- package/dist/http/errors.d.ts +22 -0
- package/dist/http/errors.js +144 -0
- package/dist/http/failed-request.d.ts +27 -0
- package/dist/http/failed-request.js +48 -0
- package/dist/http/headers.d.ts +15 -0
- package/dist/http/headers.js +50 -0
- package/dist/http/heredoc.d.ts +25 -0
- package/dist/http/heredoc.js +74 -0
- package/dist/http/proxy.d.ts +103 -0
- package/dist/http/proxy.js +168 -0
- package/dist/http/raw-capture.d.ts +23 -0
- package/dist/http/raw-capture.js +57 -0
- package/dist/http/timings.d.ts +79 -0
- package/dist/http/timings.js +212 -0
- package/dist/http/tls.d.ts +111 -0
- package/dist/http/tls.js +167 -0
- package/dist/http/types.d.ts +125 -0
- package/dist/http/types.js +6 -0
- package/dist/import-detect.d.ts +26 -0
- package/dist/import-detect.js +169 -0
- package/dist/import.d.ts +20 -0
- package/dist/import.js +163 -0
- package/dist/index.d.ts +272 -0
- package/dist/index.js +157 -0
- package/dist/json/cursor.d.ts +43 -0
- package/dist/json/cursor.js +168 -0
- package/dist/operations.d.ts +12 -0
- package/dist/operations.js +52 -0
- package/dist/project/attachments-cache.d.ts +80 -0
- package/dist/project/attachments-cache.js +186 -0
- package/dist/project/endpoints.d.ts +23 -0
- package/dist/project/endpoints.js +47 -0
- package/dist/project/environments.d.ts +68 -0
- package/dist/project/environments.js +124 -0
- package/dist/project/fs.d.ts +45 -0
- package/dist/project/fs.js +78 -0
- package/dist/project/history.d.ts +171 -0
- package/dist/project/history.js +179 -0
- package/dist/project/keystores.d.ts +24 -0
- package/dist/project/keystores.js +66 -0
- package/dist/project/load.d.ts +44 -0
- package/dist/project/load.js +634 -0
- package/dist/project/migrate.d.ts +27 -0
- package/dist/project/migrate.js +46 -0
- package/dist/project/model.d.ts +401 -0
- package/dist/project/model.js +126 -0
- package/dist/project/paths.d.ts +134 -0
- package/dist/project/paths.js +259 -0
- package/dist/project/preferences.d.ts +318 -0
- package/dist/project/preferences.js +239 -0
- package/dist/project/properties.d.ts +97 -0
- package/dist/project/properties.js +356 -0
- package/dist/project/save.d.ts +65 -0
- package/dist/project/save.js +295 -0
- package/dist/project/schema.d.ts +1329 -0
- package/dist/project/schema.js +737 -0
- package/dist/project/serialize.d.ts +42 -0
- package/dist/project/serialize.js +385 -0
- package/dist/project/wss-configs.d.ts +40 -0
- package/dist/project/wss-configs.js +142 -0
- package/dist/project/yaml.d.ts +17 -0
- package/dist/project/yaml.js +39 -0
- package/dist/redact/index.d.ts +77 -0
- package/dist/redact/index.js +328 -0
- package/dist/redact/literal.d.ts +12 -0
- package/dist/redact/literal.js +68 -0
- package/dist/rest/auth.d.ts +53 -0
- package/dist/rest/auth.js +80 -0
- package/dist/rest/body.d.ts +61 -0
- package/dist/rest/body.js +184 -0
- package/dist/rest/browser.d.ts +12 -0
- package/dist/rest/browser.js +11 -0
- package/dist/rest/cookies.d.ts +41 -0
- package/dist/rest/cookies.js +102 -0
- package/dist/rest/curl.d.ts +75 -0
- package/dist/rest/curl.js +417 -0
- package/dist/rest/expand.d.ts +35 -0
- package/dist/rest/expand.js +104 -0
- package/dist/rest/model.d.ts +247 -0
- package/dist/rest/model.js +118 -0
- package/dist/rest/oauth2.d.ts +118 -0
- package/dist/rest/oauth2.js +212 -0
- package/dist/rest/openapi/cache.d.ts +54 -0
- package/dist/rest/openapi/cache.js +128 -0
- package/dist/rest/openapi/import.d.ts +67 -0
- package/dist/rest/openapi/import.js +91 -0
- package/dist/rest/openapi/map.d.ts +102 -0
- package/dist/rest/openapi/map.js +477 -0
- package/dist/rest/openapi/model.d.ts +203 -0
- package/dist/rest/openapi/model.js +37 -0
- package/dist/rest/openapi/parse.d.ts +44 -0
- package/dist/rest/openapi/parse.js +1530 -0
- package/dist/rest/openapi/refs.d.ts +63 -0
- package/dist/rest/openapi/refs.js +258 -0
- package/dist/rest/openapi/sample.d.ts +68 -0
- package/dist/rest/openapi/sample.js +336 -0
- package/dist/rest/postman/import.d.ts +21 -0
- package/dist/rest/postman/import.js +47 -0
- package/dist/rest/postman/index.d.ts +7 -0
- package/dist/rest/postman/index.js +7 -0
- package/dist/rest/postman/map.d.ts +28 -0
- package/dist/rest/postman/map.js +427 -0
- package/dist/rest/postman/model.d.ts +118 -0
- package/dist/rest/postman/model.js +7 -0
- package/dist/rest/postman/parse.d.ts +29 -0
- package/dist/rest/postman/parse.js +518 -0
- package/dist/rest/response.d.ts +72 -0
- package/dist/rest/response.js +221 -0
- package/dist/rest/send.d.ts +102 -0
- package/dist/rest/send.js +148 -0
- package/dist/rest/url.d.ts +92 -0
- package/dist/rest/url.js +213 -0
- package/dist/run/effective-auth.d.ts +10 -0
- package/dist/run/effective-auth.js +19 -0
- package/dist/run/index.d.ts +8 -0
- package/dist/run/index.js +4 -0
- package/dist/run/prepare.d.ts +43 -0
- package/dist/run/prepare.js +280 -0
- package/dist/run/run.d.ts +53 -0
- package/dist/run/run.js +223 -0
- package/dist/run/secret-needs.d.ts +13 -0
- package/dist/run/secret-needs.js +125 -0
- package/dist/run/select.d.ts +34 -0
- package/dist/run/select.js +76 -0
- package/dist/secrets/env-names.d.ts +27 -0
- package/dist/secrets/env-names.js +40 -0
- package/dist/secrets/resolve.d.ts +58 -0
- package/dist/secrets/resolve.js +136 -0
- package/dist/send-options.d.ts +141 -0
- package/dist/send-options.js +228 -0
- package/dist/send.d.ts +53 -0
- package/dist/send.js +210 -0
- package/dist/soap/body-builder.d.ts +38 -0
- package/dist/soap/body-builder.js +250 -0
- package/dist/soap/build-problems.d.ts +12 -0
- package/dist/soap/build-problems.js +2 -0
- package/dist/soap/charset.d.ts +23 -0
- package/dist/soap/charset.js +47 -0
- package/dist/soap/envelope.d.ts +44 -0
- package/dist/soap/envelope.js +76 -0
- package/dist/soap/fault.d.ts +46 -0
- package/dist/soap/fault.js +129 -0
- package/dist/soap/form-request.d.ts +34 -0
- package/dist/soap/form-request.js +251 -0
- package/dist/soap/legacy-project/definition-fetcher.d.ts +21 -0
- package/dist/soap/legacy-project/definition-fetcher.js +43 -0
- package/dist/soap/legacy-project/format.d.ts +18 -0
- package/dist/soap/legacy-project/format.js +24 -0
- package/dist/soap/legacy-project/import.d.ts +21 -0
- package/dist/soap/legacy-project/import.js +46 -0
- package/dist/soap/legacy-project/index.d.ts +9 -0
- package/dist/soap/legacy-project/index.js +5 -0
- package/dist/soap/legacy-project/map.d.ts +91 -0
- package/dist/soap/legacy-project/map.js +290 -0
- package/dist/soap/legacy-project/model.d.ts +98 -0
- package/dist/soap/legacy-project/model.js +5 -0
- package/dist/soap/legacy-project/parse.d.ts +16 -0
- package/dist/soap/legacy-project/parse.js +325 -0
- package/dist/soap/mime/cid-scan.d.ts +36 -0
- package/dist/soap/mime/cid-scan.js +52 -0
- package/dist/soap/mime/inline-files.d.ts +39 -0
- package/dist/soap/mime/inline-files.js +71 -0
- package/dist/soap/mime/mtom.d.ts +74 -0
- package/dist/soap/mime/mtom.js +134 -0
- package/dist/soap/mime/multipart.d.ts +66 -0
- package/dist/soap/mime/multipart.js +329 -0
- package/dist/soap/mime/send-pipeline.d.ts +61 -0
- package/dist/soap/mime/send-pipeline.js +145 -0
- package/dist/soap/mime/swa.d.ts +45 -0
- package/dist/soap/mime/swa.js +62 -0
- package/dist/soap/mime/types.d.ts +69 -0
- package/dist/soap/mime/types.js +10 -0
- package/dist/soap/namespace-scope.d.ts +32 -0
- package/dist/soap/namespace-scope.js +85 -0
- package/dist/soap/prefixes.d.ts +24 -0
- package/dist/soap/prefixes.js +70 -0
- package/dist/soap/recreate.d.ts +28 -0
- package/dist/soap/recreate.js +168 -0
- package/dist/soap/request-builder.d.ts +63 -0
- package/dist/soap/request-builder.js +161 -0
- package/dist/soap/response-parser.d.ts +29 -0
- package/dist/soap/response-parser.js +71 -0
- package/dist/soap/soap-action.d.ts +31 -0
- package/dist/soap/soap-action.js +28 -0
- package/dist/soap/transforms.d.ts +52 -0
- package/dist/soap/transforms.js +164 -0
- package/dist/types.d.ts +307 -0
- package/dist/types.js +6 -0
- package/dist/validate/index.d.ts +61 -0
- package/dist/validate/index.js +72 -0
- package/dist/validate/schema-file-set.d.ts +51 -0
- package/dist/validate/schema-file-set.js +288 -0
- package/dist/validate/schema-validator.d.ts +53 -0
- package/dist/validate/schema-validator.js +251 -0
- package/dist/validate/soap-structure.d.ts +34 -0
- package/dist/validate/soap-structure.js +255 -0
- package/dist/validate/types.d.ts +47 -0
- package/dist/validate/types.js +8 -0
- package/dist/validate/wsi/assertions/helpers.d.ts +145 -0
- package/dist/validate/wsi/assertions/helpers.js +387 -0
- package/dist/validate/wsi/assertions/index.d.ts +44 -0
- package/dist/validate/wsi/assertions/index.js +77 -0
- package/dist/validate/wsi/assertions/message/helpers.d.ts +63 -0
- package/dist/validate/wsi/assertions/message/helpers.js +168 -0
- package/dist/validate/wsi/assertions/message/index.d.ts +39 -0
- package/dist/validate/wsi/assertions/message/index.js +62 -0
- package/dist/validate/wsi/assertions/message/r1001.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1001.js +38 -0
- package/dist/validate/wsi/assertions/message/r1003.d.ts +14 -0
- package/dist/validate/wsi/assertions/message/r1003.js +45 -0
- package/dist/validate/wsi/assertions/message/r1005.d.ts +12 -0
- package/dist/validate/wsi/assertions/message/r1005.js +37 -0
- package/dist/validate/wsi/assertions/message/r1006.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1006.js +49 -0
- package/dist/validate/wsi/assertions/message/r1007.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1007.js +30 -0
- package/dist/validate/wsi/assertions/message/r1011.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1011.js +33 -0
- package/dist/validate/wsi/assertions/message/r1012.d.ts +13 -0
- package/dist/validate/wsi/assertions/message/r1012.js +37 -0
- package/dist/validate/wsi/assertions/message/r1013.d.ts +9 -0
- package/dist/validate/wsi/assertions/message/r1013.js +42 -0
- package/dist/validate/wsi/assertions/message/r1014.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1014.js +30 -0
- package/dist/validate/wsi/assertions/message/r1015.d.ts +12 -0
- package/dist/validate/wsi/assertions/message/r1015.js +36 -0
- package/dist/validate/wsi/assertions/message/r1017.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1017.js +30 -0
- package/dist/validate/wsi/assertions/message/r1100.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1100.js +39 -0
- package/dist/validate/wsi/assertions/message/r1101.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1101.js +37 -0
- package/dist/validate/wsi/assertions/message/r1102.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1102.js +41 -0
- package/dist/validate/wsi/assertions/message/r1103.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1103.js +28 -0
- package/dist/validate/wsi/assertions/message/r1107.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1107.js +38 -0
- package/dist/validate/wsi/assertions/message/r1109.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1109.js +32 -0
- package/dist/validate/wsi/assertions/message/r1124.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1124.js +31 -0
- package/dist/validate/wsi/assertions/message/r1132.d.ts +9 -0
- package/dist/validate/wsi/assertions/message/r1132.js +23 -0
- package/dist/validate/wsi/assertions/message/r1140.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1140.js +42 -0
- package/dist/validate/wsi/assertions/message/r1141.d.ts +10 -0
- package/dist/validate/wsi/assertions/message/r1141.js +32 -0
- package/dist/validate/wsi/assertions/message/r2113.d.ts +11 -0
- package/dist/validate/wsi/assertions/message/r2113.js +33 -0
- package/dist/validate/wsi/assertions/message/r2211.d.ts +7 -0
- package/dist/validate/wsi/assertions/message/r2211.js +42 -0
- package/dist/validate/wsi/assertions/r2001.d.ts +15 -0
- package/dist/validate/wsi/assertions/r2001.js +47 -0
- package/dist/validate/wsi/assertions/r2002.d.ts +11 -0
- package/dist/validate/wsi/assertions/r2002.js +38 -0
- package/dist/validate/wsi/assertions/r2003.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2003.js +32 -0
- package/dist/validate/wsi/assertions/r2005.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2005.js +40 -0
- package/dist/validate/wsi/assertions/r2101.d.ts +14 -0
- package/dist/validate/wsi/assertions/r2101.js +65 -0
- package/dist/validate/wsi/assertions/r2102.d.ts +10 -0
- package/dist/validate/wsi/assertions/r2102.js +41 -0
- package/dist/validate/wsi/assertions/r2105.d.ts +8 -0
- package/dist/validate/wsi/assertions/r2105.js +39 -0
- package/dist/validate/wsi/assertions/r2110.d.ts +8 -0
- package/dist/validate/wsi/assertions/r2110.js +38 -0
- package/dist/validate/wsi/assertions/r2111.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2111.js +30 -0
- package/dist/validate/wsi/assertions/r2112.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2112.js +35 -0
- package/dist/validate/wsi/assertions/r2201.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2201.js +28 -0
- package/dist/validate/wsi/assertions/r2203.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2203.js +30 -0
- package/dist/validate/wsi/assertions/r2204.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2204.js +29 -0
- package/dist/validate/wsi/assertions/r2205.d.ts +8 -0
- package/dist/validate/wsi/assertions/r2205.js +46 -0
- package/dist/validate/wsi/assertions/r2206.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2206.js +36 -0
- package/dist/validate/wsi/assertions/r2209.d.ts +12 -0
- package/dist/validate/wsi/assertions/r2209.js +37 -0
- package/dist/validate/wsi/assertions/r2210.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2210.js +30 -0
- package/dist/validate/wsi/assertions/r2303.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2303.js +44 -0
- package/dist/validate/wsi/assertions/r2304.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2304.js +32 -0
- package/dist/validate/wsi/assertions/r2401.d.ts +12 -0
- package/dist/validate/wsi/assertions/r2401.js +31 -0
- package/dist/validate/wsi/assertions/r2701.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2701.js +28 -0
- package/dist/validate/wsi/assertions/r2702.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2702.js +26 -0
- package/dist/validate/wsi/assertions/r2705.d.ts +11 -0
- package/dist/validate/wsi/assertions/r2705.js +31 -0
- package/dist/validate/wsi/assertions/r2706.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2706.js +29 -0
- package/dist/validate/wsi/assertions/r2710.d.ts +13 -0
- package/dist/validate/wsi/assertions/r2710.js +37 -0
- package/dist/validate/wsi/assertions/r2716.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2716.js +29 -0
- package/dist/validate/wsi/assertions/r2717.d.ts +9 -0
- package/dist/validate/wsi/assertions/r2717.js +31 -0
- package/dist/validate/wsi/assertions/r2718.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2718.js +41 -0
- package/dist/validate/wsi/assertions/r2720.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2720.js +29 -0
- package/dist/validate/wsi/assertions/r2721.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2721.js +27 -0
- package/dist/validate/wsi/assertions/r2722.d.ts +6 -0
- package/dist/validate/wsi/assertions/r2722.js +29 -0
- package/dist/validate/wsi/assertions/r2801.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2801.js +39 -0
- package/dist/validate/wsi/assertions/r2803.d.ts +7 -0
- package/dist/validate/wsi/assertions/r2803.js +29 -0
- package/dist/validate/wsi/docs.d.ts +29 -0
- package/dist/validate/wsi/docs.js +167 -0
- package/dist/validate/wsi/index.d.ts +16 -0
- package/dist/validate/wsi/index.js +11 -0
- package/dist/validate/wsi/report-html.d.ts +36 -0
- package/dist/validate/wsi/report-html.js +135 -0
- package/dist/validate/wsi/run-message.d.ts +50 -0
- package/dist/validate/wsi/run-message.js +190 -0
- package/dist/validate/wsi/run-wsdl.d.ts +48 -0
- package/dist/validate/wsi/run-wsdl.js +99 -0
- package/dist/validate/wsi/types.d.ts +173 -0
- package/dist/validate/wsi/types.js +17 -0
- package/dist/workspace/commit-message.d.ts +47 -0
- package/dist/workspace/commit-message.js +195 -0
- package/dist/workspace/environments.d.ts +79 -0
- package/dist/workspace/environments.js +115 -0
- package/dist/workspace/index.d.ts +28 -0
- package/dist/workspace/index.js +19 -0
- package/dist/workspace/load.d.ts +45 -0
- package/dist/workspace/load.js +155 -0
- package/dist/workspace/local-state.d.ts +37 -0
- package/dist/workspace/local-state.js +59 -0
- package/dist/workspace/migrate.d.ts +38 -0
- package/dist/workspace/migrate.js +50 -0
- package/dist/workspace/model.d.ts +86 -0
- package/dist/workspace/model.js +54 -0
- package/dist/workspace/paths.d.ts +64 -0
- package/dist/workspace/paths.js +97 -0
- package/dist/workspace/reidentify.d.ts +22 -0
- package/dist/workspace/reidentify.js +122 -0
- package/dist/workspace/save.d.ts +31 -0
- package/dist/workspace/save.js +84 -0
- package/dist/workspace/schema.d.ts +93 -0
- package/dist/workspace/schema.js +115 -0
- package/dist/workspace/serialize.d.ts +24 -0
- package/dist/workspace/serialize.js +60 -0
- package/dist/workspace/share.d.ts +52 -0
- package/dist/workspace/share.js +89 -0
- package/dist/ws/browser.d.ts +13 -0
- package/dist/ws/browser.js +11 -0
- package/dist/ws/call.d.ts +53 -0
- package/dist/ws/call.js +106 -0
- package/dist/ws/command.d.ts +19 -0
- package/dist/ws/command.js +28 -0
- package/dist/ws/expand.d.ts +38 -0
- package/dist/ws/expand.js +76 -0
- package/dist/ws/model.d.ts +191 -0
- package/dist/ws/model.js +83 -0
- package/dist/ws/pretty.d.ts +12 -0
- package/dist/ws/pretty.js +25 -0
- package/dist/ws/session.d.ts +50 -0
- package/dist/ws/session.js +333 -0
- package/dist/ws/shape.d.ts +18 -0
- package/dist/ws/shape.js +28 -0
- package/dist/ws/transcript.d.ts +14 -0
- package/dist/ws/transcript.js +29 -0
- package/dist/ws/url.d.ts +3 -0
- package/dist/ws/url.js +44 -0
- package/dist/wsa/headers.d.ts +78 -0
- package/dist/wsa/headers.js +244 -0
- package/dist/wsa/model.d.ts +66 -0
- package/dist/wsa/model.js +52 -0
- package/dist/wsa/policy-detect.d.ts +81 -0
- package/dist/wsa/policy-detect.js +245 -0
- package/dist/wsdl/cache-naming.d.ts +39 -0
- package/dist/wsdl/cache-naming.js +90 -0
- package/dist/wsdl/cache.d.ts +48 -0
- package/dist/wsdl/cache.js +141 -0
- package/dist/wsdl/docs-generator.d.ts +47 -0
- package/dist/wsdl/docs-generator.js +439 -0
- package/dist/wsdl/dom-utils.d.ts +15 -0
- package/dist/wsdl/dom-utils.js +50 -0
- package/dist/wsdl/export-definition.d.ts +38 -0
- package/dist/wsdl/export-definition.js +100 -0
- package/dist/wsdl/fetch.d.ts +13 -0
- package/dist/wsdl/fetch.js +60 -0
- package/dist/wsdl/merge.d.ts +17 -0
- package/dist/wsdl/merge.js +57 -0
- package/dist/wsdl/model.d.ts +176 -0
- package/dist/wsdl/model.js +17 -0
- package/dist/wsdl/parse-binding.d.ts +6 -0
- package/dist/wsdl/parse-binding.js +150 -0
- package/dist/wsdl/parse-wsdl.d.ts +47 -0
- package/dist/wsdl/parse-wsdl.js +161 -0
- package/dist/wsdl/qname.d.ts +28 -0
- package/dist/wsdl/qname.js +41 -0
- package/dist/wsdl/ref-policy.d.ts +54 -0
- package/dist/wsdl/ref-policy.js +87 -0
- package/dist/wsdl/resolver.d.ts +81 -0
- package/dist/wsdl/resolver.js +276 -0
- package/dist/wsdl/update-definition.d.ts +106 -0
- package/dist/wsdl/update-definition.js +314 -0
- package/dist/wss/apply.d.ts +40 -0
- package/dist/wss/apply.js +212 -0
- package/dist/wss/c14n-prefixes.d.ts +27 -0
- package/dist/wss/c14n-prefixes.js +95 -0
- package/dist/wss/incoming/decrypt.d.ts +35 -0
- package/dist/wss/incoming/decrypt.js +57 -0
- package/dist/wss/incoming/index.d.ts +56 -0
- package/dist/wss/incoming/index.js +189 -0
- package/dist/wss/incoming/verify.d.ts +74 -0
- package/dist/wss/incoming/verify.js +440 -0
- package/dist/wss/key-identifiers.d.ts +76 -0
- package/dist/wss/key-identifiers.js +139 -0
- package/dist/wss/keystore/certificate.d.ts +45 -0
- package/dist/wss/keystore/certificate.js +134 -0
- package/dist/wss/keystore/index.d.ts +50 -0
- package/dist/wss/keystore/index.js +80 -0
- package/dist/wss/keystore/model.d.ts +83 -0
- package/dist/wss/keystore/model.js +27 -0
- package/dist/wss/keystore/pem.d.ts +21 -0
- package/dist/wss/keystore/pem.js +140 -0
- package/dist/wss/keystore/pkcs12.d.ts +21 -0
- package/dist/wss/keystore/pkcs12.js +125 -0
- package/dist/wss/model.d.ts +160 -0
- package/dist/wss/model.js +37 -0
- package/dist/wss/outgoing/encryption.d.ts +76 -0
- package/dist/wss/outgoing/encryption.js +618 -0
- package/dist/wss/outgoing/signature.d.ts +73 -0
- package/dist/wss/outgoing/signature.js +239 -0
- package/dist/wss/outgoing/timestamp.d.ts +29 -0
- package/dist/wss/outgoing/timestamp.js +39 -0
- package/dist/wss/outgoing/username-token.d.ts +36 -0
- package/dist/wss/outgoing/username-token.js +68 -0
- package/dist/wss/security-header.d.ts +31 -0
- package/dist/wss/security-header.js +83 -0
- package/dist/xml/index.d.ts +7 -0
- package/dist/xml/index.js +7 -0
- package/dist/xml/namespaces.d.ts +36 -0
- package/dist/xml/namespaces.js +60 -0
- package/dist/xml/parse.d.ts +79 -0
- package/dist/xml/parse.js +109 -0
- package/dist/xml/positions.d.ts +26 -0
- package/dist/xml/positions.js +71 -0
- package/dist/xml/pretty.d.ts +37 -0
- package/dist/xml/pretty.js +137 -0
- package/dist/xml/serialize.d.ts +6 -0
- package/dist/xml/serialize.js +8 -0
- package/dist/xml/tolerant-tree.d.ts +56 -0
- package/dist/xml/tolerant-tree.js +134 -0
- package/dist/xpath/evaluate-async.d.ts +31 -0
- package/dist/xpath/evaluate-async.js +81 -0
- package/dist/xpath/evaluate.d.ts +98 -0
- package/dist/xpath/evaluate.js +340 -0
- package/dist/xpath/jsonpath.d.ts +40 -0
- package/dist/xpath/jsonpath.js +109 -0
- package/dist/xpath/namespaces.d.ts +29 -0
- package/dist/xpath/namespaces.js +101 -0
- package/dist/xpath/worker.d.ts +7 -0
- package/dist/xpath/worker.js +26 -0
- package/dist/xsd/builtins.d.ts +36 -0
- package/dist/xsd/builtins.js +108 -0
- package/dist/xsd/check-references.d.ts +25 -0
- package/dist/xsd/check-references.js +145 -0
- package/dist/xsd/form-edits.d.ts +57 -0
- package/dist/xsd/form-edits.js +153 -0
- package/dist/xsd/form-model.d.ts +153 -0
- package/dist/xsd/form-model.js +691 -0
- package/dist/xsd/locate.d.ts +42 -0
- package/dist/xsd/locate.js +249 -0
- package/dist/xsd/model.d.ts +249 -0
- package/dist/xsd/model.js +1 -0
- package/dist/xsd/parse-particles.d.ts +48 -0
- package/dist/xsd/parse-particles.js +320 -0
- package/dist/xsd/parse-schema.d.ts +21 -0
- package/dist/xsd/parse-schema.js +143 -0
- package/dist/xsd/resolve-content.d.ts +18 -0
- package/dist/xsd/resolve-content.js +242 -0
- package/dist/xsd/sample-generator.d.ts +51 -0
- package/dist/xsd/sample-generator.js +291 -0
- package/dist/xsd/sample-types.d.ts +21 -0
- package/dist/xsd/sample-types.js +69 -0
- package/dist/xsd/sample-values.d.ts +54 -0
- package/dist/xsd/sample-values.js +267 -0
- package/dist/xsd/schema-set.d.ts +51 -0
- package/dist/xsd/schema-set.js +203 -0
- package/dist/xsd/xml-scan.d.ts +64 -0
- package/dist/xsd/xml-scan.js +286 -0
- package/dist/xsd/xml-writer.d.ts +56 -0
- package/dist/xsd/xml-writer.js +103 -0
- package/package.json +69 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A REST request as a `curl` command, and a pasted `curl` command as a REST request.
|
|
3
|
+
*
|
|
4
|
+
* Both directions are conveniences with a sharp edge: what is exported must be *exactly* what the app
|
|
5
|
+
* would send, or a user debugging a difference between the two chases a ghost. So the exporter takes
|
|
6
|
+
* the resolved {@link RestSendInput} — the same value the send path uses, with the URL composed, the
|
|
7
|
+
* credentials applied and the settings decided — rather than the saved request, which still has
|
|
8
|
+
* properties to expand and a chain of auth to walk.
|
|
9
|
+
*
|
|
10
|
+
* The importer is the looser half by nature: a command in the wild may use flags this client has no
|
|
11
|
+
* field for. Anything understood becomes a field, everything else becomes a problem the dialog shows,
|
|
12
|
+
* and nothing is guessed at.
|
|
13
|
+
*/
|
|
14
|
+
import { toCurl } from '../http/curl.js';
|
|
15
|
+
import { entry, RAW_LANGUAGE_CONTENT_TYPES } from './model.js';
|
|
16
|
+
import { applyAuth } from './auth.js';
|
|
17
|
+
import { findHeredoc, findHereString } from '../http/heredoc.js';
|
|
18
|
+
import { expandBundles, takesNoValue } from '../http/curl-flags.js';
|
|
19
|
+
import { composeUrl, splitQuery, trimTrailingSlashes } from './url.js';
|
|
20
|
+
/** What a redacted secret reads as in an exported command. Matches the host's own marker. */
|
|
21
|
+
export const CURL_REDACTED = '<redacted>';
|
|
22
|
+
/** A stand-in that survives URL encoding untouched, swapped for {@link CURL_REDACTED} afterwards. */
|
|
23
|
+
const QUERY_STAND_IN = 'wirebenchRedactedValue';
|
|
24
|
+
/** The body of an exported command, per kind. */
|
|
25
|
+
function curlBody(body) {
|
|
26
|
+
switch (body.kind) {
|
|
27
|
+
case 'raw':
|
|
28
|
+
return { kind: 'raw', text: body.text };
|
|
29
|
+
case 'form':
|
|
30
|
+
return {
|
|
31
|
+
kind: 'form',
|
|
32
|
+
fields: body.fields.filter((field) => field.enabled).map((field) => ({ name: field.name, value: field.value })),
|
|
33
|
+
};
|
|
34
|
+
case 'multipart':
|
|
35
|
+
return {
|
|
36
|
+
kind: 'multipart',
|
|
37
|
+
parts: body.parts
|
|
38
|
+
.filter((part) => part.enabled)
|
|
39
|
+
.map((part) => part.kind === 'file'
|
|
40
|
+
? {
|
|
41
|
+
kind: 'file',
|
|
42
|
+
name: part.name,
|
|
43
|
+
path: part.source.kind === 'path' ? part.source.path : '',
|
|
44
|
+
...(part.contentType !== undefined ? { contentType: part.contentType } : {}),
|
|
45
|
+
}
|
|
46
|
+
: {
|
|
47
|
+
kind: 'text',
|
|
48
|
+
name: part.name,
|
|
49
|
+
value: part.value,
|
|
50
|
+
...(part.contentType !== undefined ? { contentType: part.contentType } : {}),
|
|
51
|
+
}),
|
|
52
|
+
};
|
|
53
|
+
case 'binary':
|
|
54
|
+
return { kind: 'binary', path: body.source.kind === 'path' ? body.source.path : '' };
|
|
55
|
+
default:
|
|
56
|
+
return { kind: 'none' };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Builds a `curl` command for one resolved REST send.
|
|
61
|
+
*
|
|
62
|
+
* Credentials go on as they will go on the wire: a bearer token, an OAuth2 access token and a header
|
|
63
|
+
* API key as `--header`, a query API key in the URL, and Basic as `--user` — which is what `curl`
|
|
64
|
+
* users expect, and which also keeps a non-preemptive Basic credential behaving as it does here (curl
|
|
65
|
+
* waits for the challenge too).
|
|
66
|
+
*/
|
|
67
|
+
export function restToCurl(input, options = {}) {
|
|
68
|
+
const redact = options.redactSecrets !== false;
|
|
69
|
+
const applied = applyAuth(input.auth);
|
|
70
|
+
// A credential in the query is composed under an encoding-safe stand-in and swapped afterwards:
|
|
71
|
+
// `composeUrl` would otherwise percent-encode the marker's own angle brackets, leaving the user
|
|
72
|
+
// reading `%3Credacted%3E` where the point was to be legible.
|
|
73
|
+
const composed = composeUrl(input.baseUrl, input.request.url, input.request.pathParams, [...input.request.query, ...applied.query.map((row) => (redact ? { ...row, value: QUERY_STAND_IN } : row))], { encode: input.settings.encodeUrl ?? true });
|
|
74
|
+
const url = redact ? composed.url.split(QUERY_STAND_IN).join(CURL_REDACTED) : composed.url;
|
|
75
|
+
const headers = [];
|
|
76
|
+
for (const row of input.request.headers) {
|
|
77
|
+
if (row.enabled) {
|
|
78
|
+
headers.push({ name: row.name, value: row.value });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for (const [name, value] of Object.entries(applied.headers)) {
|
|
82
|
+
headers.push({ name, value: redact ? CURL_REDACTED : value });
|
|
83
|
+
}
|
|
84
|
+
const transport = applied.transportAuth;
|
|
85
|
+
const basic = transport?.type === 'basic'
|
|
86
|
+
? { username: transport.username, password: redact ? CURL_REDACTED : transport.password }
|
|
87
|
+
: undefined;
|
|
88
|
+
const command = {
|
|
89
|
+
method: input.request.method,
|
|
90
|
+
url,
|
|
91
|
+
headers,
|
|
92
|
+
body: curlBody(input.request.body),
|
|
93
|
+
...(basic !== undefined ? { basic } : {}),
|
|
94
|
+
...(input.tls?.rejectUnauthorized === false ? { insecure: true } : {}),
|
|
95
|
+
...(input.settings.followRedirects ? { followRedirects: true } : {}),
|
|
96
|
+
...(input.settings.followRedirects && input.settings.maxRedirects !== undefined
|
|
97
|
+
? { maxRedirects: input.settings.maxRedirects }
|
|
98
|
+
: {}),
|
|
99
|
+
};
|
|
100
|
+
return toCurl(command, options.shell !== undefined ? { shell: options.shell } : {});
|
|
101
|
+
}
|
|
102
|
+
/** The raw-body language a content type implies. */
|
|
103
|
+
function languageOf(contentType) {
|
|
104
|
+
if (contentType === undefined) {
|
|
105
|
+
return 'text';
|
|
106
|
+
}
|
|
107
|
+
const type = contentType.split(';')[0]?.trim().toLowerCase() ?? '';
|
|
108
|
+
if (type === 'application/json' || type.endsWith('+json')) {
|
|
109
|
+
return 'json';
|
|
110
|
+
}
|
|
111
|
+
if (type === 'application/xml' || type === 'text/xml' || type.endsWith('+xml')) {
|
|
112
|
+
return 'xml';
|
|
113
|
+
}
|
|
114
|
+
if (type === 'text/html') {
|
|
115
|
+
return 'html';
|
|
116
|
+
}
|
|
117
|
+
if (type === 'application/javascript' || type === 'text/javascript') {
|
|
118
|
+
return 'javascript';
|
|
119
|
+
}
|
|
120
|
+
return 'text';
|
|
121
|
+
}
|
|
122
|
+
/** One `name=value` argument, as `-F` and `--data-urlencode` both spell a field. */
|
|
123
|
+
function splitField(argument) {
|
|
124
|
+
const equals = argument.indexOf('=');
|
|
125
|
+
return equals === -1
|
|
126
|
+
? { name: argument, value: '' }
|
|
127
|
+
: { name: argument.slice(0, equals), value: argument.slice(equals + 1) };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Reads a pasted `curl` command as a REST request.
|
|
131
|
+
*
|
|
132
|
+
* The body is decided by the most specific flag present, because a command may carry several: `-F`
|
|
133
|
+
* means multipart, `--data-urlencode` means a form, and a plain `-d` means raw in whatever the
|
|
134
|
+
* `Content-Type` says. A `-d` naming a file (`@path`) becomes a binary body pointing at that file,
|
|
135
|
+
* which is the reading that loses nothing.
|
|
136
|
+
*/
|
|
137
|
+
export function fromRestCurl(text, options = {}) {
|
|
138
|
+
const problems = [];
|
|
139
|
+
const tokenized = tokenizeCommand(text);
|
|
140
|
+
const tokens = expandBundles(tokenized.tokens);
|
|
141
|
+
const { heredoc } = tokenized;
|
|
142
|
+
let method;
|
|
143
|
+
let url;
|
|
144
|
+
const headers = [];
|
|
145
|
+
const formFields = [];
|
|
146
|
+
const parts = [];
|
|
147
|
+
let rawData;
|
|
148
|
+
let binaryPath;
|
|
149
|
+
let basic;
|
|
150
|
+
const settings = {};
|
|
151
|
+
// `-G` sends the `-d` data as the query of a GET; `-I` asks for HEAD. Both are read after the loop,
|
|
152
|
+
// because the flag may come before or after the data it changes.
|
|
153
|
+
let dataInQuery = false;
|
|
154
|
+
let head = false;
|
|
155
|
+
let index = tokens[0] === 'curl' || tokens[0] === 'curl.exe' ? 1 : 0;
|
|
156
|
+
while (index < tokens.length) {
|
|
157
|
+
const token = tokens[index];
|
|
158
|
+
const next = tokens[index + 1] ?? '';
|
|
159
|
+
if (token === '-X' || token === '--request') {
|
|
160
|
+
method = next.toUpperCase();
|
|
161
|
+
index += 2;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (token === '-H' || token === '--header') {
|
|
165
|
+
const colon = next.indexOf(':');
|
|
166
|
+
if (colon !== -1) {
|
|
167
|
+
headers.push(entry(next.slice(0, colon).trim(), next.slice(colon + 1).trim()));
|
|
168
|
+
}
|
|
169
|
+
index += 2;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (token === '--url') {
|
|
173
|
+
url = next;
|
|
174
|
+
index += 2;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (token === '-u' || token === '--user') {
|
|
178
|
+
const colon = next.indexOf(':');
|
|
179
|
+
basic = colon === -1 ? { username: next } : { username: next.slice(0, colon), password: next.slice(colon + 1) };
|
|
180
|
+
index += 2;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (token === '-F' || token === '--form') {
|
|
184
|
+
const field = splitField(next);
|
|
185
|
+
if (field.value.startsWith('@') || field.value.startsWith('<')) {
|
|
186
|
+
parts.push({
|
|
187
|
+
kind: 'file',
|
|
188
|
+
name: field.name,
|
|
189
|
+
source: { kind: 'path', path: field.value.slice(1) },
|
|
190
|
+
enabled: true,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
parts.push({ kind: 'text', name: field.name, value: field.value, enabled: true });
|
|
195
|
+
}
|
|
196
|
+
index += 2;
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
if (token === '--data-urlencode') {
|
|
200
|
+
const field = splitField(next);
|
|
201
|
+
formFields.push(entry(field.name, field.value));
|
|
202
|
+
index += 2;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (token === '-d' || token === '--data' || token === '--data-raw' || token === '--data-binary') {
|
|
206
|
+
if ((next === '@-' || next === '') && heredoc !== undefined) {
|
|
207
|
+
rawData = heredoc;
|
|
208
|
+
}
|
|
209
|
+
else if (next.startsWith('@')) {
|
|
210
|
+
binaryPath = next.slice(1);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
rawData = next;
|
|
214
|
+
}
|
|
215
|
+
index += 2;
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (token === '--json') {
|
|
219
|
+
// curl's shorthand for a JSON body: `-d` plus the two headers, unless the command sets its own.
|
|
220
|
+
rawData = next;
|
|
221
|
+
for (const [name, value] of [
|
|
222
|
+
['Content-Type', 'application/json'],
|
|
223
|
+
['Accept', 'application/json'],
|
|
224
|
+
]) {
|
|
225
|
+
if (!headers.some((row) => row.name.toLowerCase() === name.toLowerCase())) {
|
|
226
|
+
headers.push(entry(name, value));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
index += 2;
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
if (token === '-G' || token === '--get') {
|
|
233
|
+
dataInQuery = true;
|
|
234
|
+
index += 1;
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
if (token === '-I' || token === '--head') {
|
|
238
|
+
head = true;
|
|
239
|
+
index += 1;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (token === '-k' || token === '--insecure') {
|
|
243
|
+
settings.trustInvalid = true;
|
|
244
|
+
index += 1;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (token === '-L' || token === '--location') {
|
|
248
|
+
settings.followRedirects = true;
|
|
249
|
+
index += 1;
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
if (token === '--max-redirs') {
|
|
253
|
+
const limit = Number.parseInt(next, 10);
|
|
254
|
+
if (!Number.isNaN(limit)) {
|
|
255
|
+
settings.maxRedirects = limit;
|
|
256
|
+
}
|
|
257
|
+
index += 2;
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
if (token.startsWith('-')) {
|
|
261
|
+
// A flag with no field here. Boolean ones are simply dropped; one that takes a value must also
|
|
262
|
+
// consume it, or its argument would be read as the URL.
|
|
263
|
+
problems.push(`Ignored ${token}`);
|
|
264
|
+
index += takesNoValue(token) ? 1 : 2;
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
if (url === undefined) {
|
|
268
|
+
url = token;
|
|
269
|
+
}
|
|
270
|
+
index += 1;
|
|
271
|
+
}
|
|
272
|
+
if (url === undefined) {
|
|
273
|
+
problems.push('No URL in the command');
|
|
274
|
+
}
|
|
275
|
+
// Rows, not text appended to the URL: `--data-urlencode` values are unencoded, as the table holds
|
|
276
|
+
// them, and the `-d` text is read the way a URL's own query string is.
|
|
277
|
+
const dataQuery = [];
|
|
278
|
+
if (dataInQuery) {
|
|
279
|
+
if (rawData !== undefined) {
|
|
280
|
+
dataQuery.push(...splitQuery(`?${rawData}`).query);
|
|
281
|
+
}
|
|
282
|
+
dataQuery.push(...formFields);
|
|
283
|
+
rawData = undefined;
|
|
284
|
+
formFields.length = 0;
|
|
285
|
+
method ??= 'GET';
|
|
286
|
+
}
|
|
287
|
+
if (head) {
|
|
288
|
+
method ??= 'HEAD';
|
|
289
|
+
}
|
|
290
|
+
const body = bodyFrom({ parts, formFields, rawData, binaryPath, headers });
|
|
291
|
+
const split = url === undefined ? undefined : splitAgainstBase(url, options.baseUrl);
|
|
292
|
+
const pathParams = split === undefined ? [] : paramRows(split.path);
|
|
293
|
+
return {
|
|
294
|
+
request: {
|
|
295
|
+
// A command with no `-X` sends a GET, unless it carries a body, which makes it a POST — the
|
|
296
|
+
// same rule curl itself applies.
|
|
297
|
+
method: method ?? (body.kind === 'none' ? 'GET' : 'POST'),
|
|
298
|
+
...(split !== undefined ? { url: split.path, query: [...split.query, ...dataQuery] } : {}),
|
|
299
|
+
...(pathParams.length > 0 ? { pathParams } : {}),
|
|
300
|
+
...(headers.length > 0 ? { headers } : {}),
|
|
301
|
+
body,
|
|
302
|
+
...(Object.keys(settings).length > 0 ? { settings } : {}),
|
|
303
|
+
},
|
|
304
|
+
...(basic !== undefined ? { basic } : {}),
|
|
305
|
+
problems,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
/** The body the flags add up to, most specific first. */
|
|
309
|
+
function bodyFrom(input) {
|
|
310
|
+
if (input.parts.length > 0) {
|
|
311
|
+
return { kind: 'multipart', parts: input.parts };
|
|
312
|
+
}
|
|
313
|
+
if (input.formFields.length > 0) {
|
|
314
|
+
return { kind: 'form', fields: input.formFields };
|
|
315
|
+
}
|
|
316
|
+
if (input.binaryPath !== undefined) {
|
|
317
|
+
const declared = input.headers.find((row) => row.name.toLowerCase() === 'content-type')?.value;
|
|
318
|
+
return {
|
|
319
|
+
kind: 'binary',
|
|
320
|
+
source: { kind: 'path', path: input.binaryPath },
|
|
321
|
+
contentType: declared ?? 'application/octet-stream',
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
if (input.rawData !== undefined) {
|
|
325
|
+
const declared = input.headers.find((row) => row.name.toLowerCase() === 'content-type')?.value;
|
|
326
|
+
const language = languageOf(declared);
|
|
327
|
+
return {
|
|
328
|
+
kind: 'raw',
|
|
329
|
+
language,
|
|
330
|
+
// A declared type that the language's own default does not cover has to be kept, or the
|
|
331
|
+
// request would go out as something the server was never offered.
|
|
332
|
+
...(declared !== undefined && declared !== RAW_LANGUAGE_CONTENT_TYPES[language] ? { contentType: declared } : {}),
|
|
333
|
+
text: input.rawData,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
return { kind: 'none' };
|
|
337
|
+
}
|
|
338
|
+
/** A URL split into a path (relative to `baseUrl` when it matches) and its query rows. */
|
|
339
|
+
function splitAgainstBase(url, baseUrl) {
|
|
340
|
+
const { path, query } = splitQuery(url);
|
|
341
|
+
if (baseUrl === undefined || baseUrl === '') {
|
|
342
|
+
return { path, query };
|
|
343
|
+
}
|
|
344
|
+
const base = trimTrailingSlashes(baseUrl);
|
|
345
|
+
if (path === base) {
|
|
346
|
+
return { path: '/', query };
|
|
347
|
+
}
|
|
348
|
+
if (path.startsWith(`${base}/`)) {
|
|
349
|
+
return { path: path.slice(base.length), query };
|
|
350
|
+
}
|
|
351
|
+
return { path, query };
|
|
352
|
+
}
|
|
353
|
+
/** One row per `{param}` the path names, so the table is filled in as the editor expects. */
|
|
354
|
+
function paramRows(path) {
|
|
355
|
+
const rows = [];
|
|
356
|
+
for (const match of path.matchAll(/\{([^{}/?#]+)\}/g)) {
|
|
357
|
+
const name = match[1];
|
|
358
|
+
if (!rows.some((row) => row.name === name)) {
|
|
359
|
+
rows.push(entry(name, ''));
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return rows;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Splits a command into tokens, pulling out a heredoc or here-string body first.
|
|
366
|
+
*
|
|
367
|
+
* Shared shape with the SOAP parser in `http/curl.ts`, but its own implementation: that one folds a
|
|
368
|
+
* heredoc into `envelopeXml`, and the two would drift into one function with a mode flag.
|
|
369
|
+
*/
|
|
370
|
+
function tokenizeCommand(text) {
|
|
371
|
+
let heredoc;
|
|
372
|
+
let remainder = text;
|
|
373
|
+
const embedded = findHeredoc(text) ?? findHereString(text);
|
|
374
|
+
if (embedded !== undefined) {
|
|
375
|
+
heredoc = embedded.body;
|
|
376
|
+
remainder = text.slice(0, embedded.start) + text.slice(embedded.end);
|
|
377
|
+
}
|
|
378
|
+
const normalized = remainder
|
|
379
|
+
.replace(/\\\r?\n/g, ' ')
|
|
380
|
+
.replace(/`\r?\n/g, ' ')
|
|
381
|
+
.trim();
|
|
382
|
+
const tokens = [];
|
|
383
|
+
let index = 0;
|
|
384
|
+
while (index < normalized.length) {
|
|
385
|
+
while (index < normalized.length && /\s/.test(normalized[index])) {
|
|
386
|
+
index += 1;
|
|
387
|
+
}
|
|
388
|
+
if (index >= normalized.length) {
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
let token = '';
|
|
392
|
+
while (index < normalized.length && !/\s/.test(normalized[index])) {
|
|
393
|
+
const character = normalized[index];
|
|
394
|
+
if (character === "'" || character === '"') {
|
|
395
|
+
index += 1;
|
|
396
|
+
const start = index;
|
|
397
|
+
while (index < normalized.length && normalized[index] !== character) {
|
|
398
|
+
index += 1;
|
|
399
|
+
}
|
|
400
|
+
token += normalized.slice(start, index);
|
|
401
|
+
index += 1;
|
|
402
|
+
}
|
|
403
|
+
else if (character === '\\' && index + 1 < normalized.length) {
|
|
404
|
+
token += normalized[index + 1];
|
|
405
|
+
index += 2;
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
token += character;
|
|
409
|
+
index += 1;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (token.length > 0) {
|
|
413
|
+
tokens.push(token);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return { tokens, heredoc };
|
|
417
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property expansion for a REST send: every `${…}` reference in the base URL, the URL, the tables
|
|
3
|
+
* and the body, resolved against the same scopes a SOAP send uses.
|
|
4
|
+
*
|
|
5
|
+
* Separate from `project/properties.ts`'s `expandSendInput` because the two inputs share no fields,
|
|
6
|
+
* but the rules are deliberately the same ones: names as well as values are expanded, an
|
|
7
|
+
* unresolved reference is reported rather than guessed at, and escaping is applied to the body
|
|
8
|
+
* alone — escaping a header value or a URL would corrupt it.
|
|
9
|
+
*/
|
|
10
|
+
import type { PropertyScopes, UnresolvedRef } from '../project/properties.js';
|
|
11
|
+
import type { RestSendInput } from './send.js';
|
|
12
|
+
/** Options for {@link expandRestSendInput}. */
|
|
13
|
+
export interface ExpandRestOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Escape substituted values for the body's own language — JSON string escaping, or the five XML
|
|
16
|
+
* entities — which is the request's *escape properties* setting. Off by default.
|
|
17
|
+
*/
|
|
18
|
+
readonly escape?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Expands every property reference in a REST send input.
|
|
22
|
+
*
|
|
23
|
+
* What is expanded: the base URL, the URL (including its `{param}` names' values), every path,
|
|
24
|
+
* query and header row's name and value, a raw body's text, form field and multipart text values,
|
|
25
|
+
* and a file part's path — the two places a property can reasonably appear in a file reference, as
|
|
26
|
+
* for a SOAP attachment. What is not: a file's cache hash, which is content-addressed rather than
|
|
27
|
+
* authored.
|
|
28
|
+
*
|
|
29
|
+
* Escaping is applied only to values substituted *into the body*, and only when asked. A header or
|
|
30
|
+
* a URL is never escaped: `&` in a query string is a different request.
|
|
31
|
+
*/
|
|
32
|
+
export declare function expandRestSendInput(input: RestSendInput, scopes: PropertyScopes, options?: ExpandRestOptions): {
|
|
33
|
+
readonly input: RestSendInput;
|
|
34
|
+
readonly unresolved: UnresolvedRef[];
|
|
35
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property expansion for a REST send: every `${…}` reference in the base URL, the URL, the tables
|
|
3
|
+
* and the body, resolved against the same scopes a SOAP send uses.
|
|
4
|
+
*
|
|
5
|
+
* Separate from `project/properties.ts`'s `expandSendInput` because the two inputs share no fields,
|
|
6
|
+
* but the rules are deliberately the same ones: names as well as values are expanded, an
|
|
7
|
+
* unresolved reference is reported rather than guessed at, and escaping is applied to the body
|
|
8
|
+
* alone — escaping a header value or a URL would corrupt it.
|
|
9
|
+
*/
|
|
10
|
+
import { expand } from '../project/properties.js';
|
|
11
|
+
import { escapeForLanguage } from './body.js';
|
|
12
|
+
/**
|
|
13
|
+
* Expands every property reference in a REST send input.
|
|
14
|
+
*
|
|
15
|
+
* What is expanded: the base URL, the URL (including its `{param}` names' values), every path,
|
|
16
|
+
* query and header row's name and value, a raw body's text, form field and multipart text values,
|
|
17
|
+
* and a file part's path — the two places a property can reasonably appear in a file reference, as
|
|
18
|
+
* for a SOAP attachment. What is not: a file's cache hash, which is content-addressed rather than
|
|
19
|
+
* authored.
|
|
20
|
+
*
|
|
21
|
+
* Escaping is applied only to values substituted *into the body*, and only when asked. A header or
|
|
22
|
+
* a URL is never escaped: `&` in a query string is a different request.
|
|
23
|
+
*/
|
|
24
|
+
export function expandRestSendInput(input, scopes, options = {}) {
|
|
25
|
+
const unresolved = [];
|
|
26
|
+
const run = (text) => {
|
|
27
|
+
const result = expand(text, scopes);
|
|
28
|
+
unresolved.push(...result.unresolved);
|
|
29
|
+
return result.text;
|
|
30
|
+
};
|
|
31
|
+
/** A body value: expanded, then escaped for the body's language when the request asks for it. */
|
|
32
|
+
const runBody = (text, language) => {
|
|
33
|
+
const result = expand(text, scopes);
|
|
34
|
+
unresolved.push(...result.unresolved);
|
|
35
|
+
if (options.escape !== true || language === undefined) {
|
|
36
|
+
return result.text;
|
|
37
|
+
}
|
|
38
|
+
// Escaping has to happen per substituted value, not over the finished text, or the body's own
|
|
39
|
+
// punctuation would be escaped too. `expand` reports which references it replaced, so the
|
|
40
|
+
// cheapest correct thing is to re-expand with an escaping substitution.
|
|
41
|
+
return expand(text, escapedScopes(scopes, language)).text;
|
|
42
|
+
};
|
|
43
|
+
const rows = (entries) => entries.map((entry) => ({ ...entry, name: run(entry.name), value: run(entry.value) }));
|
|
44
|
+
const request = {
|
|
45
|
+
method: input.request.method,
|
|
46
|
+
url: run(input.request.url),
|
|
47
|
+
pathParams: rows(input.request.pathParams),
|
|
48
|
+
query: rows(input.request.query),
|
|
49
|
+
headers: rows(input.request.headers),
|
|
50
|
+
body: expandBody(input.request.body, run, runBody),
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
input: { ...input, baseUrl: run(input.baseUrl), request },
|
|
54
|
+
unresolved,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** The same scopes with every value escaped for `language`, so substitution escapes as it goes. */
|
|
58
|
+
function escapedScopes(scopes, language) {
|
|
59
|
+
const escapeMap = (map) => {
|
|
60
|
+
const out = {};
|
|
61
|
+
for (const [name, value] of Object.entries(map ?? {})) {
|
|
62
|
+
if (value !== undefined) {
|
|
63
|
+
out[name] = escapeForLanguage(value, language);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
...scopes,
|
|
70
|
+
project: escapeMap(scopes.project),
|
|
71
|
+
global: escapeMap(scopes.global),
|
|
72
|
+
system: escapeMap(scopes.system),
|
|
73
|
+
...(scopes.env !== undefined ? { env: escapeMap(scopes.env) } : {}),
|
|
74
|
+
...(scopes.workspace !== undefined ? { workspace: escapeMap(scopes.workspace) } : {}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function expandBody(body, run, runBody) {
|
|
78
|
+
switch (body.kind) {
|
|
79
|
+
case 'raw':
|
|
80
|
+
return { ...body, text: runBody(body.text, body.language) };
|
|
81
|
+
case 'form':
|
|
82
|
+
return {
|
|
83
|
+
kind: 'form',
|
|
84
|
+
fields: body.fields.map((field) => ({ ...field, name: run(field.name), value: runBody(field.value, 'form') })),
|
|
85
|
+
};
|
|
86
|
+
case 'multipart':
|
|
87
|
+
return { kind: 'multipart', parts: body.parts.map((part) => expandPart(part, run)) };
|
|
88
|
+
case 'binary':
|
|
89
|
+
return body.source.kind === 'path' ? { ...body, source: { kind: 'path', path: run(body.source.path) } } : body;
|
|
90
|
+
default:
|
|
91
|
+
return body;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function expandPart(part, run) {
|
|
95
|
+
if (part.kind === 'text') {
|
|
96
|
+
return { ...part, name: run(part.name), value: run(part.value) };
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
...part,
|
|
100
|
+
name: run(part.name),
|
|
101
|
+
...(part.fileName !== undefined ? { fileName: run(part.fileName) } : {}),
|
|
102
|
+
source: part.source.kind === 'path' ? { kind: 'path', path: run(part.source.path) } : part.source,
|
|
103
|
+
};
|
|
104
|
+
}
|