callman-core 1.16.0 → 1.17.0

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.
Files changed (73) hide show
  1. package/dist/contract/contractValidator.d.ts.map +1 -1
  2. package/dist/contract/contractValidator.js +19 -2
  3. package/dist/contract/contractValidator.js.map +1 -1
  4. package/dist/contract/xpathResolver.d.ts +7 -0
  5. package/dist/contract/xpathResolver.d.ts.map +1 -0
  6. package/dist/contract/xpathResolver.js +69 -0
  7. package/dist/contract/xpathResolver.js.map +1 -0
  8. package/dist/index.d.ts +4 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +5 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/scenario-runner/adapters/helpers/request-helpers.d.ts.map +1 -1
  13. package/dist/scenario-runner/adapters/helpers/request-helpers.js +8 -0
  14. package/dist/scenario-runner/adapters/helpers/request-helpers.js.map +1 -1
  15. package/dist/scenario-runner/adapters/request-executor.d.ts.map +1 -1
  16. package/dist/scenario-runner/adapters/request-executor.js +35 -0
  17. package/dist/scenario-runner/adapters/request-executor.js.map +1 -1
  18. package/dist/scenario-runner/adapters/types.d.ts +5 -0
  19. package/dist/scenario-runner/adapters/types.d.ts.map +1 -1
  20. package/dist/scenario-runner/condition.d.ts.map +1 -1
  21. package/dist/scenario-runner/condition.js +25 -2
  22. package/dist/scenario-runner/condition.js.map +1 -1
  23. package/dist/scenario-runner/graphTraversal.d.ts +3 -0
  24. package/dist/scenario-runner/graphTraversal.d.ts.map +1 -1
  25. package/dist/scenario-runner/graphTraversal.js +4 -0
  26. package/dist/scenario-runner/graphTraversal.js.map +1 -1
  27. package/dist/scenario-runner/nodePolicy.d.ts.map +1 -1
  28. package/dist/scenario-runner/nodePolicy.js +3 -0
  29. package/dist/scenario-runner/nodePolicy.js.map +1 -1
  30. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  31. package/dist/scenario-runner/runScenario.js +244 -2
  32. package/dist/scenario-runner/runScenario.js.map +1 -1
  33. package/dist/scenario-runner/types.d.ts +67 -4
  34. package/dist/scenario-runner/types.d.ts.map +1 -1
  35. package/dist/script/types.d.ts +4 -0
  36. package/dist/script/types.d.ts.map +1 -1
  37. package/dist/soap/envelope.d.ts +4 -0
  38. package/dist/soap/envelope.d.ts.map +1 -0
  39. package/dist/soap/envelope.js +25 -0
  40. package/dist/soap/envelope.js.map +1 -0
  41. package/dist/soap/transport.d.ts +22 -0
  42. package/dist/soap/transport.d.ts.map +1 -0
  43. package/dist/soap/transport.js +58 -0
  44. package/dist/soap/transport.js.map +1 -0
  45. package/dist/soap/wsSecurity.d.ts +19 -0
  46. package/dist/soap/wsSecurity.d.ts.map +1 -0
  47. package/dist/soap/wsSecurity.js +66 -0
  48. package/dist/soap/wsSecurity.js.map +1 -0
  49. package/dist-cjs/contract/contractValidator.js +19 -2
  50. package/dist-cjs/contract/contractValidator.js.map +1 -1
  51. package/dist-cjs/contract/xpathResolver.js +76 -0
  52. package/dist-cjs/contract/xpathResolver.js.map +1 -0
  53. package/dist-cjs/index.js +13 -1
  54. package/dist-cjs/index.js.map +1 -1
  55. package/dist-cjs/scenario-runner/adapters/helpers/request-helpers.js +8 -0
  56. package/dist-cjs/scenario-runner/adapters/helpers/request-helpers.js.map +1 -1
  57. package/dist-cjs/scenario-runner/adapters/request-executor.js +35 -0
  58. package/dist-cjs/scenario-runner/adapters/request-executor.js.map +1 -1
  59. package/dist-cjs/scenario-runner/condition.js +25 -2
  60. package/dist-cjs/scenario-runner/condition.js.map +1 -1
  61. package/dist-cjs/scenario-runner/graphTraversal.js +5 -1
  62. package/dist-cjs/scenario-runner/graphTraversal.js.map +1 -1
  63. package/dist-cjs/scenario-runner/nodePolicy.js +3 -0
  64. package/dist-cjs/scenario-runner/nodePolicy.js.map +1 -1
  65. package/dist-cjs/scenario-runner/runScenario.js +243 -1
  66. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  67. package/dist-cjs/soap/envelope.js +29 -0
  68. package/dist-cjs/soap/envelope.js.map +1 -0
  69. package/dist-cjs/soap/transport.js +62 -0
  70. package/dist-cjs/soap/transport.js.map +1 -0
  71. package/dist-cjs/soap/wsSecurity.js +74 -0
  72. package/dist-cjs/soap/wsSecurity.js.map +1 -0
  73. package/package.json +4 -2
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ // SOAP transport application: Content-Type / SOAPAction header rules and
3
+ // the WS-Security injection, applied to the ALREADY-normalized runtime
4
+ // request right before the HTTP driver. User-set headers always win —
5
+ // the same rule the raw-body auto Content-Type follows.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.applySoapRequestTransforms = void 0;
8
+ const wsSecurity_js_1 = require("./wsSecurity.js");
9
+ const findHeaderKey = (headers, name) => Object.keys(headers).find((key) => key.toLowerCase() === name.toLowerCase());
10
+ // Mutates headers/body per SOAP semantics. Returns an error message when the
11
+ // config demands work the body cannot support (non-string body with
12
+ // WS-Security enabled, or no Envelope to inject into).
13
+ const applySoapRequestTransforms = (request, soap, resolveValue, options) => {
14
+ if (!soap.enabled) {
15
+ return null;
16
+ }
17
+ const action = soap.action?.trim() ? resolveValue(soap.action).trim() : "";
18
+ const userProvidedContentType = options?.userProvidedContentType ?? Boolean(findHeaderKey(request.headers, "content-type"));
19
+ const setContentType = (value) => {
20
+ for (const key of Object.keys(request.headers)) {
21
+ if (key.toLowerCase() === "content-type") {
22
+ delete request.headers[key];
23
+ }
24
+ }
25
+ request.headers["Content-Type"] = value;
26
+ };
27
+ if (soap.version === "1.2") {
28
+ if (!userProvidedContentType) {
29
+ setContentType(action
30
+ ? `application/soap+xml; charset=utf-8; action="${action}"`
31
+ : "application/soap+xml; charset=utf-8");
32
+ }
33
+ }
34
+ else {
35
+ if (!userProvidedContentType) {
36
+ setContentType("text/xml; charset=utf-8");
37
+ }
38
+ if (action && !findHeaderKey(request.headers, "soapaction")) {
39
+ // SOAP 1.1 requires the value quoted.
40
+ request.headers.SOAPAction = `"${action}"`;
41
+ }
42
+ }
43
+ if (soap.wsSecurity?.enabled) {
44
+ if (typeof request.body !== "string" || !request.body.trim()) {
45
+ return "WS-Security requires a raw XML body with a SOAP Envelope.";
46
+ }
47
+ const resolvedSecurity = {
48
+ enabled: true,
49
+ username: resolveValue(soap.wsSecurity.username ?? ""),
50
+ password: resolveValue(soap.wsSecurity.password ?? ""),
51
+ passwordType: soap.wsSecurity.passwordType === "digest" ? "digest" : "text",
52
+ };
53
+ const injection = (0, wsSecurity_js_1.injectWsSecurityHeader)(request.body, resolvedSecurity);
54
+ if (!injection.injected) {
55
+ return "WS-Security could not find a SOAP Envelope in the request body.";
56
+ }
57
+ request.body = injection.xml;
58
+ }
59
+ return null;
60
+ };
61
+ exports.applySoapRequestTransforms = applySoapRequestTransforms;
62
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/soap/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ // WS-Security UsernameToken header injection — runtime string insertion
3
+ // into the user's raw XML envelope. Deliberately NOT parse-and-rebuild:
4
+ // re-serializing would reformat the document and can lose CDATA fidelity.
5
+ // Nonce/Created are freshly generated per call (per attempt), which is why
6
+ // this runs at send time, never in the editor.
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.injectWsSecurityHeader = exports.buildWsSecurityHeader = void 0;
12
+ const crypto_js_1 = __importDefault(require("crypto-js"));
13
+ const WSSE_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
14
+ const WSU_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
15
+ const PASSWORD_TEXT_TYPE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText";
16
+ const PASSWORD_DIGEST_TYPE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest";
17
+ const BASE64_ENCODING = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary";
18
+ const escapeXml = (value) => value
19
+ .replace(/&/g, "&")
20
+ .replace(/</g, "&lt;")
21
+ .replace(/>/g, "&gt;")
22
+ .replace(/"/g, "&quot;")
23
+ .replace(/'/g, "&apos;");
24
+ // Password_Digest = Base64(SHA-1(nonce-bytes + created + password)) per the
25
+ // UsernameToken profile. `nonce` is the RAW bytes, base64 only on the wire.
26
+ const buildWsSecurityHeader = (config, now = new Date()) => {
27
+ const nonce = crypto_js_1.default.lib.WordArray.random(16);
28
+ const created = now.toISOString();
29
+ const isDigest = config.passwordType === "digest";
30
+ const passwordValue = isDigest
31
+ ? crypto_js_1.default.SHA1(nonce.clone().concat(crypto_js_1.default.enc.Utf8.parse(created + config.password))).toString(crypto_js_1.default.enc.Base64)
32
+ : config.password;
33
+ const headerXml = `<wsse:Security xmlns:wsse="${WSSE_NS}" xmlns:wsu="${WSU_NS}">` +
34
+ `<wsse:UsernameToken>` +
35
+ `<wsse:Username>${escapeXml(config.username)}</wsse:Username>` +
36
+ `<wsse:Password Type="${isDigest ? PASSWORD_DIGEST_TYPE : PASSWORD_TEXT_TYPE}">${escapeXml(passwordValue)}</wsse:Password>` +
37
+ `<wsse:Nonce EncodingType="${BASE64_ENCODING}">${nonce.toString(crypto_js_1.default.enc.Base64)}</wsse:Nonce>` +
38
+ `<wsu:Created>${created}</wsu:Created>` +
39
+ `</wsse:UsernameToken>` +
40
+ `</wsse:Security>`;
41
+ return {
42
+ nonceBase64: nonce.toString(crypto_js_1.default.enc.Base64),
43
+ created,
44
+ passwordValue,
45
+ passwordTypeUri: isDigest ? PASSWORD_DIGEST_TYPE : PASSWORD_TEXT_TYPE,
46
+ headerXml,
47
+ };
48
+ };
49
+ exports.buildWsSecurityHeader = buildWsSecurityHeader;
50
+ const HEADER_OPEN = /<((?:[A-Za-z_][\w.-]*:)?)Header(\s[^>]*)?>/;
51
+ const ENVELOPE_OPEN = /<((?:[A-Za-z_][\w.-]*:)?)Envelope(\s[^>]*)?>/;
52
+ // Insert the wsse:Security block into the envelope: right after an existing
53
+ // <*:Header> open tag, else a synthesized Header (matching the Envelope's
54
+ // prefix) right after the Envelope open tag. Returns the input unchanged
55
+ // (with `injected: false`) when no Envelope is present — callers surface
56
+ // that as a node failure.
57
+ const injectWsSecurityHeader = (xml, config, now) => {
58
+ const parts = (0, exports.buildWsSecurityHeader)(config, now);
59
+ const headerMatch = HEADER_OPEN.exec(xml);
60
+ if (headerMatch && headerMatch.index >= 0) {
61
+ const insertAt = headerMatch.index + headerMatch[0].length;
62
+ return { xml: xml.slice(0, insertAt) + parts.headerXml + xml.slice(insertAt), injected: true };
63
+ }
64
+ const envelopeMatch = ENVELOPE_OPEN.exec(xml);
65
+ if (!envelopeMatch) {
66
+ return { xml, injected: false };
67
+ }
68
+ const prefix = envelopeMatch[1] ?? "";
69
+ const insertAt = envelopeMatch.index + envelopeMatch[0].length;
70
+ const header = `<${prefix}Header>${parts.headerXml}</${prefix}Header>`;
71
+ return { xml: xml.slice(0, insertAt) + header + xml.slice(insertAt), injected: true };
72
+ };
73
+ exports.injectWsSecurityHeader = injectWsSecurityHeader;
74
+ //# sourceMappingURL=wsSecurity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsSecurity.js","sourceRoot":"","sources":["../../src/soap/wsSecurity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "callman-core",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "main": "dist-cjs/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -30,13 +30,15 @@
30
30
  "test": "npm run build && node --test tests/*.test.mjs"
31
31
  },
32
32
  "dependencies": {
33
+ "@xmldom/xmldom": "^0.9.12",
33
34
  "ajv": "^8.20.0",
34
35
  "ajv-formats": "^3.0.1",
35
36
  "axios": "^1.6.0",
36
37
  "crypto-js": "^4.2.0",
37
38
  "fast-xml-parser": "^4.5.1",
38
39
  "jsonpath-plus": "^10.4.0",
39
- "lodash": "^4.18.1"
40
+ "lodash": "^4.18.1",
41
+ "xpath": "^0.0.34"
40
42
  },
41
43
  "optionalDependencies": {
42
44
  "ioredis": "^5.4.1",