@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,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders a {@link WsiReport} as a self-contained HTML document.
|
|
3
|
+
*
|
|
4
|
+
* "Self-contained" is the whole point: the file a user exports has to open from a mail
|
|
5
|
+
* attachment, a ticket, or a shared drive years from now, so it carries its own inline CSS and
|
|
6
|
+
* nothing else — no script, no font, no stylesheet, no image, nothing that resolves over the
|
|
7
|
+
* network. Every value that reaches the markup goes through {@link escapeHtml} first: a finding
|
|
8
|
+
* quotes the offending element's name straight out of somebody else's message.
|
|
9
|
+
*/
|
|
10
|
+
/** Escapes the five characters that could otherwise close a tag or an attribute. */
|
|
11
|
+
export function escapeHtml(value) {
|
|
12
|
+
return value
|
|
13
|
+
.replace(/&/g, '&')
|
|
14
|
+
.replace(/</g, '<')
|
|
15
|
+
.replace(/>/g, '>')
|
|
16
|
+
.replace(/"/g, '"')
|
|
17
|
+
.replace(/'/g, ''');
|
|
18
|
+
}
|
|
19
|
+
/** How each result is labelled in the report. */
|
|
20
|
+
const RESULT_LABEL = {
|
|
21
|
+
passed: 'Passed',
|
|
22
|
+
failed: 'Failed',
|
|
23
|
+
warning: 'Warning',
|
|
24
|
+
notApplicable: 'Not applicable',
|
|
25
|
+
};
|
|
26
|
+
/** The stylesheet, inlined. Kept deliberately plain so the file prints and reads anywhere. */
|
|
27
|
+
const STYLE = `
|
|
28
|
+
:root { color-scheme: light dark; }
|
|
29
|
+
body { margin: 0; padding: 2rem; font: 14px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; }
|
|
30
|
+
h1 { font-size: 1.25rem; margin: 0 0 0.25rem; }
|
|
31
|
+
.target { color: #555; margin: 0 0 1.5rem; word-break: break-all; }
|
|
32
|
+
.summary { display: flex; flex-wrap: wrap; gap: 0.5rem; list-style: none; margin: 0 0 1.5rem; padding: 0; }
|
|
33
|
+
.summary li { border: 1px solid #ccc; border-radius: 999px; padding: 0.15rem 0.75rem; }
|
|
34
|
+
.summary .count { font-weight: 600; }
|
|
35
|
+
table { border-collapse: collapse; width: 100%; }
|
|
36
|
+
th, td { border-bottom: 1px solid #ddd; padding: 0.4rem 0.6rem; text-align: left; vertical-align: top; }
|
|
37
|
+
th { border-bottom-width: 2px; white-space: nowrap; }
|
|
38
|
+
td.id, td.level, td.result { white-space: nowrap; }
|
|
39
|
+
.findings { margin: 0.25rem 0 0; padding-left: 1.1rem; }
|
|
40
|
+
.findings li { color: #444; }
|
|
41
|
+
.where { color: #777; }
|
|
42
|
+
.r-failed { color: #a11; font-weight: 600; }
|
|
43
|
+
.r-warning { color: #a60; font-weight: 600; }
|
|
44
|
+
.r-passed { color: #161; }
|
|
45
|
+
.r-notApplicable { color: #777; }
|
|
46
|
+
.empty { color: #555; font-style: italic; }
|
|
47
|
+
.footnote { color: #777; font-size: 0.85em; margin: 0.75rem 0 0; }
|
|
48
|
+
@media (prefers-color-scheme: dark) {
|
|
49
|
+
body { background: #16181c; color: #e6e6e6; }
|
|
50
|
+
.target, .findings li, .empty { color: #b9b9b9; }
|
|
51
|
+
th, td { border-color: #333; }
|
|
52
|
+
.summary li { border-color: #444; }
|
|
53
|
+
.footnote { color: #999; }
|
|
54
|
+
.r-failed { color: #ff8b8b; } .r-warning { color: #f0b429; } .r-passed { color: #7fd08a; }
|
|
55
|
+
}
|
|
56
|
+
`;
|
|
57
|
+
/** One finding rendered as a list item, with its location when it has one. */
|
|
58
|
+
function findingHtml(assertion) {
|
|
59
|
+
if (assertion.findings.length === 0) {
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
const items = assertion.findings.map((finding) => {
|
|
63
|
+
const location = finding.location;
|
|
64
|
+
const where = location === undefined
|
|
65
|
+
? ''
|
|
66
|
+
: ` <span class="where">(${escapeHtml(location.document)}${location.line === undefined ? '' : `:${String(location.line)}`}${location.xpath === undefined ? '' : ` ${escapeHtml(location.xpath)}`})</span>`;
|
|
67
|
+
return `<li>${escapeHtml(finding.message)}${where}</li>`;
|
|
68
|
+
});
|
|
69
|
+
return `<ul class="findings">${items.join('')}</ul>`;
|
|
70
|
+
}
|
|
71
|
+
/** One assertion rendered as a table row. */
|
|
72
|
+
function rowHtml(assertion) {
|
|
73
|
+
const marker = assertion.unverifiedId === true ? '<sup>*</sup>' : '';
|
|
74
|
+
return [
|
|
75
|
+
'<tr>',
|
|
76
|
+
`<td class="id">${escapeHtml(assertion.id)}${marker}</td>`,
|
|
77
|
+
`<td class="level">${escapeHtml(assertion.level)}</td>`,
|
|
78
|
+
`<td class="result r-${assertion.result}">${RESULT_LABEL[assertion.result]}</td>`,
|
|
79
|
+
`<td>${escapeHtml(assertion.title)}${findingHtml(assertion)}</td>`,
|
|
80
|
+
`<td>${escapeHtml(assertion.section)}</td>`,
|
|
81
|
+
'</tr>',
|
|
82
|
+
].join('');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Renders one WS-I report as a standalone HTML document.
|
|
86
|
+
*
|
|
87
|
+
* @param report the report to render, from `runWsdlAssertions` or `runMessageAssertions`
|
|
88
|
+
* @param options the heading, the (injected) timestamp, and whether to keep non-failing rows
|
|
89
|
+
* @returns a complete HTML document with no external references of any kind
|
|
90
|
+
*/
|
|
91
|
+
export function renderWsiReportHtml(report, options) {
|
|
92
|
+
const rows = options.verbose === true
|
|
93
|
+
? report.assertions
|
|
94
|
+
: report.assertions.filter((assertion) => assertion.result === 'failed' || assertion.result === 'warning');
|
|
95
|
+
const summary = [
|
|
96
|
+
['Passed', report.summary.passed],
|
|
97
|
+
['Failed', report.summary.failed],
|
|
98
|
+
['Warning', report.summary.warning],
|
|
99
|
+
['Not applicable', report.summary.notApplicable],
|
|
100
|
+
];
|
|
101
|
+
const hasUnverifiedId = rows.some((assertion) => assertion.unverifiedId === true);
|
|
102
|
+
const body = rows.length === 0
|
|
103
|
+
? '<p class="empty">No assertions to show.</p>'
|
|
104
|
+
: [
|
|
105
|
+
'<table>',
|
|
106
|
+
'<thead><tr><th>Id</th><th>Level</th><th>Result</th><th>Assertion</th><th>Section</th></tr></thead>',
|
|
107
|
+
'<tbody>',
|
|
108
|
+
...rows.map(rowHtml),
|
|
109
|
+
'</tbody>',
|
|
110
|
+
'</table>',
|
|
111
|
+
hasUnverifiedId
|
|
112
|
+
? '<p class="footnote">* requirement number not verified against the published Basic Profile 1.1; quote the title.</p>'
|
|
113
|
+
: '',
|
|
114
|
+
].join('\n');
|
|
115
|
+
return [
|
|
116
|
+
'<!doctype html>',
|
|
117
|
+
'<html lang="en">',
|
|
118
|
+
'<head>',
|
|
119
|
+
'<meta charset="utf-8">',
|
|
120
|
+
'<meta name="viewport" content="width=device-width, initial-scale=1">',
|
|
121
|
+
`<title>WS-I ${escapeHtml(report.profile)} report — ${escapeHtml(options.title)}</title>`,
|
|
122
|
+
`<style>${STYLE}</style>`,
|
|
123
|
+
'</head>',
|
|
124
|
+
'<body>',
|
|
125
|
+
`<h1>WS-I ${escapeHtml(report.profile)} report — ${escapeHtml(options.title)}</h1>`,
|
|
126
|
+
`<p class="target">${escapeHtml(report.target)} · generated ${escapeHtml(options.generatedAt)}</p>`,
|
|
127
|
+
'<ul class="summary">',
|
|
128
|
+
...summary.map(([label, count]) => `<li>${label}: <span class="count">${String(count)}</span></li>`),
|
|
129
|
+
'</ul>',
|
|
130
|
+
body,
|
|
131
|
+
'</body>',
|
|
132
|
+
'</html>',
|
|
133
|
+
'',
|
|
134
|
+
].join('\n');
|
|
135
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs the WS-I Basic Profile 1.1 message assertion catalogue over one {@link SoapExchange}.
|
|
3
|
+
*
|
|
4
|
+
* Where `run-wsdl.ts` judges a *description*, this judges the bytes one send actually put on the
|
|
5
|
+
* wire — both halves of it. The report shape is the same {@link WsiReport}, so a single renderer
|
|
6
|
+
* (and a single HTML export) serves both.
|
|
7
|
+
*/
|
|
8
|
+
import type { SoapExchange } from '../../types.js';
|
|
9
|
+
import type { WsdlDefinition } from '../../wsdl/model.js';
|
|
10
|
+
import type { OperationRef } from '../../soap/request-builder.js';
|
|
11
|
+
import type { WsiMessageBinding, WsiMessageContext, WsiMessageDirection, WsiReport } from './types.js';
|
|
12
|
+
/** What {@link runMessageAssertions} needs besides the exchange itself. */
|
|
13
|
+
export interface RunMessageAssertionsOptions {
|
|
14
|
+
/** What the binding says about this operation's messages. */
|
|
15
|
+
readonly binding: WsiMessageBinding;
|
|
16
|
+
/** Which half the caller asked about; both are still analysed. */
|
|
17
|
+
readonly direction: WsiMessageDirection;
|
|
18
|
+
/**
|
|
19
|
+
* The request envelope text. `SoapExchange` keeps the request only as raw wire bytes, so a
|
|
20
|
+
* caller that still holds the envelope it sent should pass it rather than making this module
|
|
21
|
+
* re-split the HTTP frame.
|
|
22
|
+
*/
|
|
23
|
+
readonly requestEnvelopeXml?: string;
|
|
24
|
+
/** Run only these assertion ids (default: the whole catalogue). */
|
|
25
|
+
readonly ids?: readonly string[];
|
|
26
|
+
/** Include `passed`/`notApplicable` rows in `assertions` (the `wsi.verbose` preference). */
|
|
27
|
+
readonly verbose?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** Builds the context the message assertions run against. */
|
|
30
|
+
export declare function wsiMessageContext(exchange: SoapExchange, options: RunMessageAssertionsOptions): WsiMessageContext;
|
|
31
|
+
/**
|
|
32
|
+
* Evaluates the message assertion catalogue against one exchange.
|
|
33
|
+
*
|
|
34
|
+
* `summary` always counts every assertion that ran; `assertions` carries only the failing rows
|
|
35
|
+
* unless `verbose` is set. `target` names the endpoint the exchange went to, so a report can say
|
|
36
|
+
* what it is about without the caller re-deriving it.
|
|
37
|
+
*
|
|
38
|
+
* @param exchange the send to analyse, request and response alike
|
|
39
|
+
* @param options the binding facts, the half the caller asked about, and the usual id/verbose knobs
|
|
40
|
+
*/
|
|
41
|
+
export declare function runMessageAssertions(exchange: SoapExchange, options: RunMessageAssertionsOptions): WsiReport;
|
|
42
|
+
/**
|
|
43
|
+
* Derives the {@link WsiMessageBinding} one operation implies, so a caller holding an
|
|
44
|
+
* `ImportResult` does not have to walk the model itself. Returns `undefined` when the binding is
|
|
45
|
+
* not a SOAP binding, or has no such operation.
|
|
46
|
+
*
|
|
47
|
+
* @param definition the merged description
|
|
48
|
+
* @param op the binding and operation the message belongs to
|
|
49
|
+
*/
|
|
50
|
+
export declare function messageBindingFor(definition: WsdlDefinition, op: OperationRef): WsiMessageBinding | undefined;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs the WS-I Basic Profile 1.1 message assertion catalogue over one {@link SoapExchange}.
|
|
3
|
+
*
|
|
4
|
+
* Where `run-wsdl.ts` judges a *description*, this judges the bytes one send actually put on the
|
|
5
|
+
* wire — both halves of it. The report shape is the same {@link WsiReport}, so a single renderer
|
|
6
|
+
* (and a single HTML export) serves both.
|
|
7
|
+
*/
|
|
8
|
+
import { NS } from '../../xml/namespaces.js';
|
|
9
|
+
import { parseXml } from '../../xml/parse.js';
|
|
10
|
+
import { findBinding } from '../../wsdl/model.js';
|
|
11
|
+
import { WSI_MESSAGE_ASSERTIONS } from './assertions/message/index.js';
|
|
12
|
+
import { isNotApplicable } from './types.js';
|
|
13
|
+
/** The two envelope namespaces a message may legally use, mapped to their SOAP version. */
|
|
14
|
+
const ENVELOPE_VERSIONS = [
|
|
15
|
+
[NS.SOAP11_ENV, '1.1'],
|
|
16
|
+
[NS.SOAP12_ENV, '1.2'],
|
|
17
|
+
];
|
|
18
|
+
/** Parses one half's envelope, tolerating text that is not XML at all. */
|
|
19
|
+
function parsed(text) {
|
|
20
|
+
if (text === undefined || text.trim().length === 0) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
return parseXml(text);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Not well-formed: R1001 reports it, and every DOM-based assertion reports notApplicable.
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** The document element when it is a `soap:Envelope` in either SOAP envelope namespace. */
|
|
32
|
+
function envelopeOf(document) {
|
|
33
|
+
const root = document?.documentElement ?? null;
|
|
34
|
+
if (root === null || root.localName !== 'Envelope') {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const match = ENVELOPE_VERSIONS.find(([uri]) => uri === root.namespaceURI);
|
|
38
|
+
return match === undefined ? undefined : { element: root, soapNs: match[0] };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The only headers a message assertion may quote. Anything else — most importantly
|
|
42
|
+
* `Authorization`, but equally any custom or WSS credential header a description never declares
|
|
43
|
+
* — never reaches a {@link WsiMessageView}, so it cannot end up in a finding message or an
|
|
44
|
+
* exported HTML report.
|
|
45
|
+
*/
|
|
46
|
+
const HEADER_ALLOWLIST = new Set([
|
|
47
|
+
'content-type',
|
|
48
|
+
'soapaction',
|
|
49
|
+
'content-length',
|
|
50
|
+
'transfer-encoding',
|
|
51
|
+
'content-encoding',
|
|
52
|
+
'accept',
|
|
53
|
+
'host',
|
|
54
|
+
'connection',
|
|
55
|
+
]);
|
|
56
|
+
/** Lower-cases every header name and drops everything outside {@link HEADER_ALLOWLIST}. */
|
|
57
|
+
function lowerCased(headers) {
|
|
58
|
+
const out = {};
|
|
59
|
+
for (const [name, value] of Object.entries(headers)) {
|
|
60
|
+
const lower = name.toLowerCase();
|
|
61
|
+
if (HEADER_ALLOWLIST.has(lower)) {
|
|
62
|
+
out[lower] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/** Builds one half's view: HTTP metadata plus the parsed envelope, when there is one. */
|
|
68
|
+
function viewFor(direction, headers, envelopeXml, status) {
|
|
69
|
+
const document = parsed(envelopeXml);
|
|
70
|
+
const envelope = envelopeOf(document);
|
|
71
|
+
return {
|
|
72
|
+
direction,
|
|
73
|
+
headers: lowerCased(headers),
|
|
74
|
+
...(envelopeXml !== undefined ? { envelopeXml } : {}),
|
|
75
|
+
...(document !== undefined ? { document } : {}),
|
|
76
|
+
...(envelope !== undefined ? { envelope: envelope.element, soapNs: envelope.soapNs } : {}),
|
|
77
|
+
...(status !== undefined ? { status } : {}),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/** The text after the first blank line of a reconstructed HTTP frame — its entity body. */
|
|
81
|
+
function bodyOfFrame(raw) {
|
|
82
|
+
if (raw === undefined || raw.length === 0) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
const text = new TextDecoder('utf-8', { fatal: false }).decode(raw);
|
|
86
|
+
const separator = /\r?\n\r?\n/.exec(text);
|
|
87
|
+
if (separator === null || separator.index === undefined) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
const body = text.slice(separator.index + separator[0].length);
|
|
91
|
+
return body.length === 0 ? undefined : body;
|
|
92
|
+
}
|
|
93
|
+
/** Builds the context the message assertions run against. */
|
|
94
|
+
export function wsiMessageContext(exchange, options) {
|
|
95
|
+
const request = viewFor('request', exchange.http.request.headers, options.requestEnvelopeXml ?? bodyOfFrame(exchange.http.rawRequest));
|
|
96
|
+
const response = exchange.response === undefined && exchange.http.rawResponse.length === 0
|
|
97
|
+
? undefined
|
|
98
|
+
: viewFor('response', exchange.http.headers, exchange.response?.envelopeXml, exchange.http.status);
|
|
99
|
+
return {
|
|
100
|
+
exchange,
|
|
101
|
+
binding: options.binding,
|
|
102
|
+
direction: options.direction,
|
|
103
|
+
request,
|
|
104
|
+
...(response !== undefined ? { response } : {}),
|
|
105
|
+
messages: response === undefined ? [request] : [request, response],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Classifies one assertion's outcome; the mapping matches `run-wsdl.ts` exactly. */
|
|
109
|
+
function resultFor(assertion, context) {
|
|
110
|
+
const outcome = assertion.check(context);
|
|
111
|
+
const findings = isNotApplicable(outcome) ? [] : outcome;
|
|
112
|
+
let result;
|
|
113
|
+
if (isNotApplicable(outcome)) {
|
|
114
|
+
result = 'notApplicable';
|
|
115
|
+
}
|
|
116
|
+
else if (findings.length === 0) {
|
|
117
|
+
result = 'passed';
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
result = assertion.level === 'REQUIRED' ? 'failed' : 'warning';
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
id: assertion.id,
|
|
124
|
+
title: assertion.title,
|
|
125
|
+
level: assertion.level,
|
|
126
|
+
section: assertion.section,
|
|
127
|
+
result,
|
|
128
|
+
findings,
|
|
129
|
+
...(assertion.unverifiedId === true ? { unverifiedId: true } : {}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Evaluates the message assertion catalogue against one exchange.
|
|
134
|
+
*
|
|
135
|
+
* `summary` always counts every assertion that ran; `assertions` carries only the failing rows
|
|
136
|
+
* unless `verbose` is set. `target` names the endpoint the exchange went to, so a report can say
|
|
137
|
+
* what it is about without the caller re-deriving it.
|
|
138
|
+
*
|
|
139
|
+
* @param exchange the send to analyse, request and response alike
|
|
140
|
+
* @param options the binding facts, the half the caller asked about, and the usual id/verbose knobs
|
|
141
|
+
*/
|
|
142
|
+
export function runMessageAssertions(exchange, options) {
|
|
143
|
+
const context = wsiMessageContext(exchange, options);
|
|
144
|
+
const selected = options.ids === undefined
|
|
145
|
+
? WSI_MESSAGE_ASSERTIONS
|
|
146
|
+
: WSI_MESSAGE_ASSERTIONS.filter((assertion) => options.ids?.includes(assertion.id) === true);
|
|
147
|
+
const reports = selected.map((assertion) => resultFor(assertion, context));
|
|
148
|
+
const summary = {
|
|
149
|
+
passed: reports.filter((report) => report.result === 'passed').length,
|
|
150
|
+
failed: reports.filter((report) => report.result === 'failed').length,
|
|
151
|
+
warning: reports.filter((report) => report.result === 'warning').length,
|
|
152
|
+
notApplicable: reports.filter((report) => report.result === 'notApplicable').length,
|
|
153
|
+
};
|
|
154
|
+
return {
|
|
155
|
+
target: exchange.http.request.url,
|
|
156
|
+
profile: 'BP1.1',
|
|
157
|
+
summary,
|
|
158
|
+
assertions: options.verbose === true
|
|
159
|
+
? reports
|
|
160
|
+
: reports.filter((report) => report.result === 'failed' || report.result === 'warning'),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Derives the {@link WsiMessageBinding} one operation implies, so a caller holding an
|
|
165
|
+
* `ImportResult` does not have to walk the model itself. Returns `undefined` when the binding is
|
|
166
|
+
* not a SOAP binding, or has no such operation.
|
|
167
|
+
*
|
|
168
|
+
* @param definition the merged description
|
|
169
|
+
* @param op the binding and operation the message belongs to
|
|
170
|
+
*/
|
|
171
|
+
export function messageBindingFor(definition, op) {
|
|
172
|
+
const binding = findBinding(definition, op.bindingName);
|
|
173
|
+
if (binding === undefined || binding.soapVersion === 'none') {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
const operation = binding.operations.find((candidate) => candidate.name === op.operationName);
|
|
177
|
+
if (operation === undefined) {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
// The input side states the `use` for the request; a binding that differed between the two
|
|
181
|
+
// halves would be out of profile anyway (R2706), so the output is only the fallback.
|
|
182
|
+
const use = operation.input?.body.use ?? operation.output?.body.use ?? 'literal';
|
|
183
|
+
return {
|
|
184
|
+
soapVersion: binding.soapVersion,
|
|
185
|
+
style: operation.style ?? binding.style,
|
|
186
|
+
use,
|
|
187
|
+
operation: op.operationName,
|
|
188
|
+
...(operation.soapAction !== undefined ? { soapAction: operation.soapAction } : {}),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs the WS-I Basic Profile 1.1 WSDL assertion catalogue over one description.
|
|
3
|
+
*/
|
|
4
|
+
import type { WsdlDefinition } from '../../wsdl/model.js';
|
|
5
|
+
import type { DefinitionBundle } from '../../wsdl/resolver.js';
|
|
6
|
+
import type { SchemaSet } from '../../xsd/schema-set.js';
|
|
7
|
+
import type { ValidationProblem } from '../types.js';
|
|
8
|
+
import type { WsiReport, WsiWsdlContext } from './types.js';
|
|
9
|
+
/** What {@link wsiWsdlContext} needs: exactly the interesting half of an `ImportResult`. */
|
|
10
|
+
export interface WsiWsdlContextInput {
|
|
11
|
+
readonly definition: WsdlDefinition;
|
|
12
|
+
readonly bundle: DefinitionBundle;
|
|
13
|
+
readonly schemaSet: SchemaSet;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Builds the context the assertions run against, indexing the bundle's documents by location.
|
|
17
|
+
*
|
|
18
|
+
* @param input the parsed definition, its bundle and its schema set (an `ImportResult` fits)
|
|
19
|
+
*/
|
|
20
|
+
export declare function wsiWsdlContext(input: WsiWsdlContextInput): WsiWsdlContext;
|
|
21
|
+
/** Options accepted by {@link runWsdlAssertions}. */
|
|
22
|
+
export interface RunWsdlAssertionsOptions {
|
|
23
|
+
/** Run only these assertion ids (default: the whole catalogue). */
|
|
24
|
+
readonly ids?: readonly string[];
|
|
25
|
+
/** Include `passed`/`notApplicable` rows in `assertions` (the `wsi.verbose` preference). */
|
|
26
|
+
readonly verbose?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Evaluates the WSDL assertion catalogue against one description.
|
|
30
|
+
*
|
|
31
|
+
* Every assertion reports one of four results; `summary` always counts all of them, while
|
|
32
|
+
* `assertions` carries only the failing rows unless `verbose` is set.
|
|
33
|
+
*
|
|
34
|
+
* @param context the description to analyse, from {@link wsiWsdlContext}
|
|
35
|
+
* @param options an id subset to run, and whether to keep non-failing rows
|
|
36
|
+
*/
|
|
37
|
+
export declare function runWsdlAssertions(context: WsiWsdlContext, options?: RunWsdlAssertionsOptions): WsiReport;
|
|
38
|
+
/**
|
|
39
|
+
* Flattens a report's findings into the shared {@link ValidationProblem} shape, so a WS-I report
|
|
40
|
+
* can be shown in the same Problems panel as the message validators' output.
|
|
41
|
+
*
|
|
42
|
+
* Positions are document positions, not envelope positions: `path` carries the document location
|
|
43
|
+
* alongside the element path, as `<document>#<xpath>`, so a consumer can tell the two apart. A
|
|
44
|
+
* finding that has an xpath but no document (or neither) contributes no `path`.
|
|
45
|
+
*
|
|
46
|
+
* @param report the report to flatten
|
|
47
|
+
*/
|
|
48
|
+
export declare function wsiProblems(report: WsiReport): readonly ValidationProblem[];
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs the WS-I Basic Profile 1.1 WSDL assertion catalogue over one description.
|
|
3
|
+
*/
|
|
4
|
+
import { WSI_WSDL_ASSERTIONS } from './assertions/index.js';
|
|
5
|
+
import { isNotApplicable } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Builds the context the assertions run against, indexing the bundle's documents by location.
|
|
8
|
+
*
|
|
9
|
+
* @param input the parsed definition, its bundle and its schema set (an `ImportResult` fits)
|
|
10
|
+
*/
|
|
11
|
+
export function wsiWsdlContext(input) {
|
|
12
|
+
const documents = new Map();
|
|
13
|
+
for (const doc of input.bundle.documents) {
|
|
14
|
+
documents.set(doc.location, doc.document);
|
|
15
|
+
}
|
|
16
|
+
return { definition: input.definition, bundle: input.bundle, schemaSet: input.schemaSet, documents };
|
|
17
|
+
}
|
|
18
|
+
/** Classifies one assertion's outcome. */
|
|
19
|
+
function resultFor(assertion, context) {
|
|
20
|
+
const outcome = assertion.check(context);
|
|
21
|
+
const findings = isNotApplicable(outcome) ? [] : outcome;
|
|
22
|
+
let result;
|
|
23
|
+
if (isNotApplicable(outcome)) {
|
|
24
|
+
result = 'notApplicable';
|
|
25
|
+
}
|
|
26
|
+
else if (findings.length === 0) {
|
|
27
|
+
result = 'passed';
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
result = assertion.level === 'REQUIRED' ? 'failed' : 'warning';
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
id: assertion.id,
|
|
34
|
+
title: assertion.title,
|
|
35
|
+
level: assertion.level,
|
|
36
|
+
section: assertion.section,
|
|
37
|
+
result,
|
|
38
|
+
findings,
|
|
39
|
+
...(assertion.unverifiedId === true ? { unverifiedId: true } : {}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Evaluates the WSDL assertion catalogue against one description.
|
|
44
|
+
*
|
|
45
|
+
* Every assertion reports one of four results; `summary` always counts all of them, while
|
|
46
|
+
* `assertions` carries only the failing rows unless `verbose` is set.
|
|
47
|
+
*
|
|
48
|
+
* @param context the description to analyse, from {@link wsiWsdlContext}
|
|
49
|
+
* @param options an id subset to run, and whether to keep non-failing rows
|
|
50
|
+
*/
|
|
51
|
+
export function runWsdlAssertions(context, options = {}) {
|
|
52
|
+
const selected = options.ids === undefined
|
|
53
|
+
? WSI_WSDL_ASSERTIONS
|
|
54
|
+
: WSI_WSDL_ASSERTIONS.filter((assertion) => options.ids?.includes(assertion.id) === true);
|
|
55
|
+
const reports = selected.map((assertion) => resultFor(assertion, context));
|
|
56
|
+
const summary = {
|
|
57
|
+
passed: reports.filter((report) => report.result === 'passed').length,
|
|
58
|
+
failed: reports.filter((report) => report.result === 'failed').length,
|
|
59
|
+
warning: reports.filter((report) => report.result === 'warning').length,
|
|
60
|
+
notApplicable: reports.filter((report) => report.result === 'notApplicable').length,
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
target: context.bundle.root.location,
|
|
64
|
+
profile: 'BP1.1',
|
|
65
|
+
summary,
|
|
66
|
+
assertions: options.verbose === true
|
|
67
|
+
? reports
|
|
68
|
+
: reports.filter((report) => report.result === 'failed' || report.result === 'warning'),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Flattens a report's findings into the shared {@link ValidationProblem} shape, so a WS-I report
|
|
73
|
+
* can be shown in the same Problems panel as the message validators' output.
|
|
74
|
+
*
|
|
75
|
+
* Positions are document positions, not envelope positions: `path` carries the document location
|
|
76
|
+
* alongside the element path, as `<document>#<xpath>`, so a consumer can tell the two apart. A
|
|
77
|
+
* finding that has an xpath but no document (or neither) contributes no `path`.
|
|
78
|
+
*
|
|
79
|
+
* @param report the report to flatten
|
|
80
|
+
*/
|
|
81
|
+
export function wsiProblems(report) {
|
|
82
|
+
const problems = [];
|
|
83
|
+
for (const assertion of report.assertions) {
|
|
84
|
+
for (const finding of assertion.findings) {
|
|
85
|
+
problems.push({
|
|
86
|
+
severity: assertion.result === 'warning' ? 'warning' : 'error',
|
|
87
|
+
code: assertion.id,
|
|
88
|
+
message: `${assertion.id}: ${finding.message}`,
|
|
89
|
+
source: 'ws-i',
|
|
90
|
+
...(finding.location?.line !== undefined ? { line: finding.location.line } : {}),
|
|
91
|
+
...(finding.location?.column !== undefined ? { column: finding.location.column } : {}),
|
|
92
|
+
...(finding.location?.xpath !== undefined
|
|
93
|
+
? { path: `${finding.location.document}#${finding.location.xpath}` }
|
|
94
|
+
: {}),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return problems;
|
|
99
|
+
}
|