From 6f6ac58d997b95560f9485588691159f7c55abf2 Mon Sep 17 00:00:00 2001 From: e6c31d <90863725+e6c31d@users.noreply.github.com> Date: Sun, 11 Dec 2022 09:46:04 +0300 Subject: [PATCH 01/18] Fix build in Node.js 18 by re-encrypting test key The encrypted private key test/certs/agent2-key-with-password.pem was encrypted with DES, which is unsupported in Node.js 18. I re-encrypted it with AES, and now the build works in Node.js 18. --- test/certs/agent2-key-with-password.pem | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/test/certs/agent2-key-with-password.pem b/test/certs/agent2-key-with-password.pem index 7d47b552a..573a3e5dd 100644 --- a/test/certs/agent2-key-with-password.pem +++ b/test/certs/agent2-key-with-password.pem @@ -1,11 +1,12 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIBgTAbBgkqhkiG9w0BBQMwDgQICq+TjRaVRpYCAggABIIBYIW7b0BY6bWa1tcl -kW9xqSNyMI6C051rPqMzbN8jTrKneHSaegCCDd6fDDyH3vXJaxxzmgnGuRBHEv/6 -8tTTbQERI1VnjYAH3dgYIdi3k1YYCKHatPK7El1B3ffWhiW8t1jNOWRC6p00VbIN -SYKrTs8s1JGoMkeKp6N1jATbnPcuqPut3MdQjV/7cHMJJC2t8dDfiKspRB2x/bDY -6S665JLXUpAhTvSVehtBIoXA9BBGVanbhgT4vyx9T4PJKmsiylrz4cTDeoeXPkE/ -eWx0IDJr7uyllCkzY4nftEKRZdjUZa4dzvLlZpbW1bppPi0j8yjvt0YE5qEf+LNZ -8QvE3We5eOE76tYBfA44yUwUJJ8coTg4/mOomaZnW+LRdH9jxQdDIYesZkR4dosO -f3lqR5GTZGpr/qaI//Pf1r6nRCDw9Oqi+knPJUNqAJh13Y7jvFedIdAL6vJXFZxq -PsZxAOE= +MIIBvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIeCPjj50AYmgCAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCEkXowWEmMgYbOpWWJSoaKBIIB +YKP5Gj6LiydCZmU+leC8obpeaJMKllmtwh48TZzDvA52bBFqPIsahmRRfwDiTOSp +akc8VqxBIb4jYa71fIjKeserYZn+1hxbj3Cr6HcSPQZmCfQCFCDY52JF/44iaZqx +Yioh0XEacW+RZeLFf05sYZu/isoTKpANlbEc3fLds+CwM9lGCOgwOdkzO5CdvnoN +F3sq24CsZOKUT1fhfqAGhkv2zPyzC3lOQ8j8IsI8m1T/qC5/m4cJhu8roDvxTxRS +PhsONSuBUznYOeXnuY+9cTjaKDYLiFsbCCzncgp7xF22hNl5unMvDPk7ZARIPMC5 +0TQDiqbr4FRUPA4TbziRZixuzsMupkUoQe5mS0EmHfNbjOMIllj8BQFIXLIugX3h +eGua84R2u/Yh4SO/S8NkjNEH24Unvl+dn9u7rSaEC1acG41aKR3RYJYW4P02QCmN +QzVvyBz4irCA+6h3fNVXd6Q= -----END ENCRYPTED PRIVATE KEY----- From b93ea3780bbc942843b07f5105c206538b3bf728 Mon Sep 17 00:00:00 2001 From: e6c31d <90863725+e6c31d@users.noreply.github.com> Date: Sun, 18 Dec 2022 22:01:42 +0300 Subject: [PATCH 02/18] Try IPv4, IPv4-mapped IPv6, and IPv6 in test --- test/server-test.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/test/server-test.js b/test/server-test.js index 180c1ac30..6d82430cd 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -340,9 +340,14 @@ describe('SOAP Server', function () { soap.createClient(test.baseUrl + '/stockquote?wsdl', function (err, client) { assert.ifError(err); client.IsValidPrice({ price: 50000 }, function (err, result) { - // node V3.x+ reports addresses as IPV6 - var addressParts = lastReqAddress.split(':'); - assert.equal(addressParts[(addressParts.length - 1)], '127.0.0.1'); + // One of these should match, depending on the network configuration + // of the host + var localhostAddresses = [ + '127.0.0.1', + '::ffff:127.0.0.1', + '::1' + ]; + assert.notEqual(localhostAddresses.indexOf(lastReqAddress), -1); done(); }); }); From 88c21d41d5a92329f8f7a4758efa0eef77605fd5 Mon Sep 17 00:00:00 2001 From: Sorin Date: Fri, 10 Feb 2023 16:38:35 +0200 Subject: [PATCH 03/18] updated axios and axios-ntlm to latest --- package-lock.json | 152 +++++++++++++--------- package.json | 4 +- src/client.ts | 4 +- src/http.ts | 4 +- test/_socketStream.js | 2 +- test/client-customHttp-test.js | 4 +- test/client-customHttp-xsdinclude-test.js | 4 +- 7 files changed, 103 insertions(+), 71 deletions(-) diff --git a/package-lock.json b/package-lock.json index ded2302fc..14c4cb06d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "axios-ntlm": "^1.2.0", + "axios-ntlm": "^1.4.0", "debug": "^4.3.2", "formidable": "^3.2.4", "get-stream": "^6.0.1", @@ -58,7 +58,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "axios": "^0.27.2" + "axios": "^1.3.2" } }, "node_modules/@babel/code-frame": { @@ -515,8 +515,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "node_modules/available-typed-arrays": { "version": "1.0.2", @@ -549,36 +548,30 @@ "dev": true }, "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.2.tgz", + "integrity": "sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw==", "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/axios-ntlm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.2.0.tgz", - "integrity": "sha512-otkFsbkyx6OySjOSIM1ORbWTm5WSm2m1GZtGx/iQaFaKQ5CVWBy67Bt5KKyRsFQyOkLugVr8pb4q+Dv5XZeltg==", - "dependencies": { - "axios": "^0.21.3" - } - }, - "node_modules/axios-ntlm/node_modules/axios": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.3.tgz", - "integrity": "sha512-JtoZ3Ndke/+Iwt5n+BgSli/3idTvpt5OjKyoCmz4LX5+lPiY5l7C1colYezhlxThjNa/NhngCUWZSZFypIFuaA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.0.tgz", + "integrity": "sha512-4cs0KXSBveFjjWhwsSGOTsuqAovSwOimOpYVW4SEXZWFdQMu3BenxGB/QgHe9yjhXOsOblMDxTwFepKAbkcVow==", "dependencies": { - "follow-redirects": "^1.14.0" + "axios": "^1.3.2", + "des.js": "^1.0.1", + "dev-null": "^0.1.1", + "js-md4": "^0.3.2" } }, "node_modules/axios/node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -900,7 +893,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1114,7 +1106,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -1128,12 +1119,26 @@ "node": ">= 0.6" } }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, + "node_modules/dev-null": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dev-null/-/dev-null-0.1.1.tgz", + "integrity": "sha512-nMNZG0zfMgmdv8S5O0TM5cpwNbGKRGPCxVsr0SmA3NZZy9CYBbuNLL0PD3Acx9e5LIUgwONXtM9kM6RlawPxEQ==" + }, "node_modules/dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", @@ -2048,8 +2053,7 @@ "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -2468,6 +2472,11 @@ "node": ">=6" } }, + "node_modules/js-md4": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3127,7 +3136,6 @@ "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -3136,7 +3144,6 @@ "version": "2.1.27", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, "dependencies": { "mime-db": "1.44.0" }, @@ -3144,6 +3151,11 @@ "node": ">= 0.6" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -3644,6 +3656,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -5446,8 +5463,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "available-typed-arrays": { "version": "1.0.2", @@ -5471,20 +5487,19 @@ "dev": true }, "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.2.tgz", + "integrity": "sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw==", "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" }, "dependencies": { "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -5494,21 +5509,14 @@ } }, "axios-ntlm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.2.0.tgz", - "integrity": "sha512-otkFsbkyx6OySjOSIM1ORbWTm5WSm2m1GZtGx/iQaFaKQ5CVWBy67Bt5KKyRsFQyOkLugVr8pb4q+Dv5XZeltg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.0.tgz", + "integrity": "sha512-4cs0KXSBveFjjWhwsSGOTsuqAovSwOimOpYVW4SEXZWFdQMu3BenxGB/QgHe9yjhXOsOblMDxTwFepKAbkcVow==", "requires": { - "axios": "^0.21.3" - }, - "dependencies": { - "axios": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.3.tgz", - "integrity": "sha512-JtoZ3Ndke/+Iwt5n+BgSli/3idTvpt5OjKyoCmz4LX5+lPiY5l7C1colYezhlxThjNa/NhngCUWZSZFypIFuaA==", - "requires": { - "follow-redirects": "^1.14.0" - } - } + "axios": "^1.3.2", + "des.js": "^1.0.1", + "dev-null": "^0.1.1", + "js-md4": "^0.3.2" } }, "bail": { @@ -5767,7 +5775,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -5943,8 +5950,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "depd": { "version": "1.1.2", @@ -5952,12 +5958,26 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, + "dev-null": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dev-null/-/dev-null-0.1.1.tgz", + "integrity": "sha512-nMNZG0zfMgmdv8S5O0TM5cpwNbGKRGPCxVsr0SmA3NZZy9CYBbuNLL0PD3Acx9e5LIUgwONXtM9kM6RlawPxEQ==" + }, "dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", @@ -6662,8 +6682,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ipaddr.js": { "version": "1.9.1", @@ -6944,6 +6963,11 @@ "html-escaper": "^2.0.0" } }, + "js-md4": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7453,18 +7477,21 @@ "mime-db": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { "version": "2.1.27", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, "requires": { "mime-db": "1.44.0" } }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -7861,6 +7888,11 @@ "ipaddr.js": "1.9.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", diff --git a/package.json b/package.json index 091f81ea0..ff6bdb6b0 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "author": "Vinay Pulim ", "dependencies": { - "axios-ntlm": "^1.2.0", + "axios-ntlm": "^1.4.0", "debug": "^4.3.2", "formidable": "^3.2.4", "get-stream": "^6.0.1", @@ -19,7 +19,7 @@ "xml-crypto": "^3.0.0" }, "peerDependencies": { - "axios": "^0.27.2" + "axios": "^1.3.2" }, "repository": { "type": "git", diff --git a/src/client.ts b/src/client.ts index 7892b8baf..22c7a945f 100644 --- a/src/client.ts +++ b/src/client.ts @@ -4,10 +4,10 @@ */ import * as assert from 'assert'; +import { AxiosResponseHeaders, RawAxiosResponseHeaders } from 'axios'; import * as debugBuilder from 'debug'; import { EventEmitter } from 'events'; import getStream = require('get-stream'); -import { IncomingHttpHeaders } from 'http'; import * as _ from 'lodash'; import { v4 as uuidv4 } from 'uuid'; import { HttpClient } from './http'; @@ -51,7 +51,7 @@ export class Client extends EventEmitter { public lastEndpoint?: string; public lastRequestHeaders?: any; public lastResponse?: any; - public lastResponseHeaders?: IncomingHttpHeaders; + public lastResponseHeaders?: AxiosResponseHeaders | RawAxiosResponseHeaders; public lastElapsedTime?: number; public lastResponseAttachments: IMTOMAttachments; diff --git a/src/http.ts b/src/http.ts index ba5369815..15d0ac430 100644 --- a/src/http.ts +++ b/src/http.ts @@ -39,7 +39,7 @@ export class HttpClient implements IHttpClient { constructor(options?: IOptions) { options = options || {}; this.options = options; - this._request = options.request || req.default.create(); + this._request = options.request || req.create(); } /** @@ -226,7 +226,7 @@ export class HttpClient implements IHttpClient { if (err) { return callback(err); } - // first part is the soap response + // first part is the soap response const firstPart = multipartResponse.parts.shift(); if (!firstPart || !firstPart.body) { return callback(new Error('Cannot parse multipart response')); diff --git a/test/_socketStream.js b/test/_socketStream.js index 16a4c08cd..a00074f33 100644 --- a/test/_socketStream.js +++ b/test/_socketStream.js @@ -37,7 +37,7 @@ module.exports = function createSocketStream(file, length) { var chunk = socketStream.req.read(); should.exist(chunk); - var header = 'HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\nContent-Length: ' + length + '\r\n\r\n'; + var header = 'HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\nContent-Length: ' + (!length ? wsdl.length : length) + '\r\n\r\n'; //This is for compatibility with old node releases <= 0.10 //Hackish diff --git a/test/client-customHttp-test.js b/test/client-customHttp-test.js index 1d68a2725..0742ae860 100644 --- a/test/client-customHttp-test.js +++ b/test/client-customHttp-test.js @@ -94,9 +94,9 @@ it('should allow customization of httpClient and the wsdl file download should p }); } //Now write the response with the wsdl - var state = httpResStream.write('HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\nContent-Length: 1904\r\n\r\n'+wsdl); + var state = httpResStream.write('HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\nContent-Length: '+wsdl.length+'\r\n\r\n'+wsdl); }); - + var httpCustomClient = new MyHttpClient({}, socketStream); var url = 'http://localhost:50000/Platform.asmx?wsdl'; soap.createClient(url, diff --git a/test/client-customHttp-xsdinclude-test.js b/test/client-customHttp-xsdinclude-test.js index 652de366b..13da118c7 100644 --- a/test/client-customHttp-xsdinclude-test.js +++ b/test/client-customHttp-xsdinclude-test.js @@ -60,8 +60,8 @@ it('should allow customization of httpClient, the wsdl file, and associated data }; var httpCustomClient = new MyHttpClient({}, - createSocketStream(__dirname + '/wsdl/xsdinclude/xsd_include_http.wsdl', 2708), - createSocketStream(__dirname + '/wsdl/xsdinclude/types.xsd', 982) + createSocketStream(__dirname + '/wsdl/xsdinclude/xsd_include_http.wsdl'), + createSocketStream(__dirname + '/wsdl/xsdinclude/types.xsd') ); var url = 'http://localhost:50000/Dummy.asmx?wsdl'; soap.createClient(url, From bb8d9aeee584b64caac37f124af7ae5bd2b9e80a Mon Sep 17 00:00:00 2001 From: Markus Bong <2Fake1987@gmail.com> Date: Mon, 20 Mar 2023 17:18:14 +0100 Subject: [PATCH 04/18] Add missing closing bracket --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index da65e57c5..258c54441 100644 --- a/Readme.md +++ b/Readme.md @@ -915,6 +915,7 @@ WS-Security X509 Certificate support. existingPrefixes: { wsse: 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', } + } } var wsSecurity = new soap.WSSecurityCert(privateKey, publicKey, password, options); client.setSecurity(wsSecurity); From 499395a0aa5d3e98eac3997f6af5156ef905d77d Mon Sep 17 00:00:00 2001 From: Stephen Hellicar Date: Tue, 28 Mar 2023 12:58:29 +1000 Subject: [PATCH 05/18] Add tests surrounding trim function used in wsdl parsing. Use native string.trim instead of regex replace for performance. remove log line. fix quotes in tests. --- src/wsdl/index.ts | 7 ++----- test/trim-test.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 test/trim-test.js diff --git a/src/wsdl/index.ts b/src/wsdl/index.ts index 48b182f32..e4e15b7fc 100644 --- a/src/wsdl/index.ts +++ b/src/wsdl/index.ts @@ -23,11 +23,8 @@ const debug = debugBuilder('node-soap'); const XSI_URI = 'http://www.w3.org/2001/XMLSchema-instance'; -const trimLeft = /^[\s\xA0]+/; -const trimRight = /[\s\xA0]+$/; - -function trim(text) { - return text.replace(trimLeft, '').replace(trimRight, ''); +export function trim(text) { + return text.trim(); } function deepMerge(destination: A, source: B): A & B { diff --git a/test/trim-test.js b/test/trim-test.js new file mode 100644 index 000000000..6c5f4103e --- /dev/null +++ b/test/trim-test.js @@ -0,0 +1,30 @@ +trim = require('../lib/wsdl/index.js').trim +var assert = require('assert'); + +it('should trim correctly', async () => { + describe('removes whitespace', async () => { + const input = ' \n <> \n '; + const expected = '<>'; + + verify(input, expected); + }) + + describe('removes non breaking space', async () => { + const input = '\xA0<>'; + const expected = '<>'; + + verify(input, expected); + }); + + describe('removes all', async () => { + const input = '\xA0\n \t<\n\t\xA0>\t \n \xA0'; + const expected = '<\n\t\xA0>'; + + verify(input, expected); + }); +}) + +function verify(input, expected) { + const actual = trim(input); + assert(actual === expected, `${actual} != ${expected}`); +} From 95c464c5d745876a87859cd71932f81bbe8d577d Mon Sep 17 00:00:00 2001 From: Sorin Date: Fri, 14 Apr 2023 22:04:19 +0300 Subject: [PATCH 06/18] Fix build in Node.js 18 by re-encrypting test key --- test/certs/agent2-key-with-password.pem | 19 ++++++++++--------- test/server-test.js | 10 +++++++--- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/test/certs/agent2-key-with-password.pem b/test/certs/agent2-key-with-password.pem index 7d47b552a..573a3e5dd 100644 --- a/test/certs/agent2-key-with-password.pem +++ b/test/certs/agent2-key-with-password.pem @@ -1,11 +1,12 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIBgTAbBgkqhkiG9w0BBQMwDgQICq+TjRaVRpYCAggABIIBYIW7b0BY6bWa1tcl -kW9xqSNyMI6C051rPqMzbN8jTrKneHSaegCCDd6fDDyH3vXJaxxzmgnGuRBHEv/6 -8tTTbQERI1VnjYAH3dgYIdi3k1YYCKHatPK7El1B3ffWhiW8t1jNOWRC6p00VbIN -SYKrTs8s1JGoMkeKp6N1jATbnPcuqPut3MdQjV/7cHMJJC2t8dDfiKspRB2x/bDY -6S665JLXUpAhTvSVehtBIoXA9BBGVanbhgT4vyx9T4PJKmsiylrz4cTDeoeXPkE/ -eWx0IDJr7uyllCkzY4nftEKRZdjUZa4dzvLlZpbW1bppPi0j8yjvt0YE5qEf+LNZ -8QvE3We5eOE76tYBfA44yUwUJJ8coTg4/mOomaZnW+LRdH9jxQdDIYesZkR4dosO -f3lqR5GTZGpr/qaI//Pf1r6nRCDw9Oqi+knPJUNqAJh13Y7jvFedIdAL6vJXFZxq -PsZxAOE= +MIIBvTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIeCPjj50AYmgCAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCEkXowWEmMgYbOpWWJSoaKBIIB +YKP5Gj6LiydCZmU+leC8obpeaJMKllmtwh48TZzDvA52bBFqPIsahmRRfwDiTOSp +akc8VqxBIb4jYa71fIjKeserYZn+1hxbj3Cr6HcSPQZmCfQCFCDY52JF/44iaZqx +Yioh0XEacW+RZeLFf05sYZu/isoTKpANlbEc3fLds+CwM9lGCOgwOdkzO5CdvnoN +F3sq24CsZOKUT1fhfqAGhkv2zPyzC3lOQ8j8IsI8m1T/qC5/m4cJhu8roDvxTxRS +PhsONSuBUznYOeXnuY+9cTjaKDYLiFsbCCzncgp7xF22hNl5unMvDPk7ZARIPMC5 +0TQDiqbr4FRUPA4TbziRZixuzsMupkUoQe5mS0EmHfNbjOMIllj8BQFIXLIugX3h +eGua84R2u/Yh4SO/S8NkjNEH24Unvl+dn9u7rSaEC1acG41aKR3RYJYW4P02QCmN +QzVvyBz4irCA+6h3fNVXd6Q= -----END ENCRYPTED PRIVATE KEY----- diff --git a/test/server-test.js b/test/server-test.js index 180c1ac30..6efea2863 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -340,9 +340,13 @@ describe('SOAP Server', function () { soap.createClient(test.baseUrl + '/stockquote?wsdl', function (err, client) { assert.ifError(err); client.IsValidPrice({ price: 50000 }, function (err, result) { - // node V3.x+ reports addresses as IPV6 - var addressParts = lastReqAddress.split(':'); - assert.equal(addressParts[(addressParts.length - 1)], '127.0.0.1'); + // One of these should match, depending on the network configuration of the host + var localhostAddresses = [ + '127.0.0.1', + '::ffff:127.0.0.1', + '::1' + ]; + assert.notEqual(localhostAddresses.indexOf(lastReqAddress), -1); done(); }); }); From a5f047ae8afb6faa6859dc814612da5001d0c0b0 Mon Sep 17 00:00:00 2001 From: Allard van der Ouw Date: Tue, 23 May 2023 23:44:36 +0200 Subject: [PATCH 07/18] fix: update proxy docs in readme --- Readme.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index da65e57c5..b26b03b17 100644 --- a/Readme.md +++ b/Readme.md @@ -623,7 +623,17 @@ You must specify all of the namespaces and namespace prefixes yourself. The ele ``` javascript client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { // client.lastElapsedTime - the elapsed time of the last request in milliseconds - }, {proxy: 'http://localhost:8888'}) + }, { + proxy: { + protocol: 'https', + host: '127.0.0.1', + port: 9000, + auth: { + username: 'mikeymike', + password: 'rapunz3l' + } + } + }) ``` - You can modify xml (string) before call: From 904453a9b5faf8f9c9db3ae5e5a01946c69085d4 Mon Sep 17 00:00:00 2001 From: Sorin Date: Thu, 24 Aug 2023 18:02:45 +0300 Subject: [PATCH 08/18] update axios to 1.4.0 --- package-lock.json | 48 ++++++++++++++--------------------------------- package.json | 4 ++-- 2 files changed, 16 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index 14c4cb06d..4a6236d99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "axios-ntlm": "^1.4.0", + "axios-ntlm": "^1.4.1", "debug": "^4.3.2", "formidable": "^3.2.4", "get-stream": "^6.0.1", @@ -58,7 +58,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "axios": "^1.3.2" + "axios": "^1.4.0" } }, "node_modules/@babel/code-frame": { @@ -548,9 +548,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.2.tgz", - "integrity": "sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -558,9 +558,9 @@ } }, "node_modules/axios-ntlm": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.0.tgz", - "integrity": "sha512-4cs0KXSBveFjjWhwsSGOTsuqAovSwOimOpYVW4SEXZWFdQMu3BenxGB/QgHe9yjhXOsOblMDxTwFepKAbkcVow==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.1.tgz", + "integrity": "sha512-6dKPhsfxONR3PyXFMsUM5g55cYNKifgkV2NV+ZesAHryKLeO+WhNgSnJecDER6jGUCl13OEhu8tCOLUMJFMGEQ==", "dependencies": { "axios": "^1.3.2", "des.js": "^1.0.1", @@ -4562,18 +4562,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbox-primitive/node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/underscore": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", @@ -5487,9 +5475,9 @@ "dev": true }, "axios": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.2.tgz", - "integrity": "sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -5509,9 +5497,9 @@ } }, "axios-ntlm": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.0.tgz", - "integrity": "sha512-4cs0KXSBveFjjWhwsSGOTsuqAovSwOimOpYVW4SEXZWFdQMu3BenxGB/QgHe9yjhXOsOblMDxTwFepKAbkcVow==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.1.tgz", + "integrity": "sha512-6dKPhsfxONR3PyXFMsUM5g55cYNKifgkV2NV+ZesAHryKLeO+WhNgSnJecDER6jGUCl13OEhu8tCOLUMJFMGEQ==", "requires": { "axios": "^1.3.2", "des.js": "^1.0.1", @@ -8615,14 +8603,6 @@ "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } } }, "underscore": { diff --git a/package.json b/package.json index ff6bdb6b0..29bd4a6aa 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "author": "Vinay Pulim ", "dependencies": { - "axios-ntlm": "^1.4.0", + "axios-ntlm": "^1.4.1", "debug": "^4.3.2", "formidable": "^3.2.4", "get-stream": "^6.0.1", @@ -19,7 +19,7 @@ "xml-crypto": "^3.0.0" }, "peerDependencies": { - "axios": "^1.3.2" + "axios": "^1.4.0" }, "repository": { "type": "git", From a02704b43ae1958747af88fdd7e01e38039bccb4 Mon Sep 17 00:00:00 2001 From: Sorin Date: Mon, 28 Aug 2023 18:08:46 +0300 Subject: [PATCH 09/18] axios updates --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a6236d99..9821801db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "axios": "^1.4.0" + "axios": "^1.5.0" } }, "node_modules/@babel/code-frame": { @@ -548,9 +548,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -5475,9 +5475,9 @@ "dev": true }, "axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", diff --git a/package.json b/package.json index 29bd4a6aa..383a10be1 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "xml-crypto": "^3.0.0" }, "peerDependencies": { - "axios": "^1.4.0" + "axios": "^1.5.0" }, "repository": { "type": "git", From d1c96a694cd3472ea3c649afefa6db6bb308f99e Mon Sep 17 00:00:00 2001 From: Sorin Date: Mon, 13 Nov 2023 17:28:27 +0200 Subject: [PATCH 10/18] packages axios/axios-ntlm bump to latest --- package-lock.json | 48 +++++++++++++++++++++++------------------------ package.json | 4 ++-- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9821801db..b9096ca8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "axios-ntlm": "^1.4.1", + "axios-ntlm": "^1.4.2", "debug": "^4.3.2", "formidable": "^3.2.4", "get-stream": "^6.0.1", @@ -58,7 +58,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "axios": "^1.5.0" + "axios": "^1.6.1" } }, "node_modules/@babel/code-frame": { @@ -548,9 +548,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", + "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -558,12 +558,12 @@ } }, "node_modules/axios-ntlm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.1.tgz", - "integrity": "sha512-6dKPhsfxONR3PyXFMsUM5g55cYNKifgkV2NV+ZesAHryKLeO+WhNgSnJecDER6jGUCl13OEhu8tCOLUMJFMGEQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.2.tgz", + "integrity": "sha512-8mS/uhmSWiRBiFKQvysPbX1eDBp6e+eXskmasuAXRHrn1Zjgji3O/oGXzXLw7tOhyD9nho1vGjZ2OYOD3cCvHg==", "dependencies": { - "axios": "^1.3.2", - "des.js": "^1.0.1", + "axios": "^1.6.1", + "des.js": "^1.1.0", "dev-null": "^0.1.1", "js-md4": "^0.3.2" } @@ -1120,9 +1120,9 @@ } }, "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -5475,9 +5475,9 @@ "dev": true }, "axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", + "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -5497,12 +5497,12 @@ } }, "axios-ntlm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.1.tgz", - "integrity": "sha512-6dKPhsfxONR3PyXFMsUM5g55cYNKifgkV2NV+ZesAHryKLeO+WhNgSnJecDER6jGUCl13OEhu8tCOLUMJFMGEQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/axios-ntlm/-/axios-ntlm-1.4.2.tgz", + "integrity": "sha512-8mS/uhmSWiRBiFKQvysPbX1eDBp6e+eXskmasuAXRHrn1Zjgji3O/oGXzXLw7tOhyD9nho1vGjZ2OYOD3cCvHg==", "requires": { - "axios": "^1.3.2", - "des.js": "^1.0.1", + "axios": "^1.6.1", + "des.js": "^1.1.0", "dev-null": "^0.1.1", "js-md4": "^0.3.2" } @@ -5947,9 +5947,9 @@ "dev": true }, "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" diff --git a/package.json b/package.json index 383a10be1..5f3b29256 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "author": "Vinay Pulim ", "dependencies": { - "axios-ntlm": "^1.4.1", + "axios-ntlm": "^1.4.2", "debug": "^4.3.2", "formidable": "^3.2.4", "get-stream": "^6.0.1", @@ -19,7 +19,7 @@ "xml-crypto": "^3.0.0" }, "peerDependencies": { - "axios": "^1.5.0" + "axios": "^1.6.1" }, "repository": { "type": "git", From 5686bbc2afbcc2d2cd81455f9471a79f399097cb Mon Sep 17 00:00:00 2001 From: Sorin Date: Mon, 13 Nov 2023 17:38:06 +0200 Subject: [PATCH 11/18] test fix --- test/wsdl-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/wsdl-test.js b/test/wsdl-test.js index 22e8a474d..0c3cf4c8c 100644 --- a/test/wsdl-test.js +++ b/test/wsdl-test.js @@ -214,7 +214,7 @@ describe('WSDL Parser (non-strict)', () => { it('should not parse connection error', (done) => { soap.createClient(__dirname+'/wsdl/connection/econnrefused.wsdl', function(err, client) { - assert.ok(/EADDRNOTAVAIL|ECONNREFUSED/.test(err), err); + assert.ok(/EADDRNOTAVAIL|ECONNREFUSED/.test(err.code), err); done(); }); }); From de9dd258824afebb1d0e79751b9db9cc97b65c66 Mon Sep 17 00:00:00 2001 From: Vasily Martynov Date: Thu, 18 Apr 2024 18:29:25 +1200 Subject: [PATCH 12/18] Release v1.0.1 --- History.md | 5 +++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/History.md b/History.md index bb141fe12..dbb700d72 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,8 @@ +1.0.1 / 2024-04-18 +=================== +* [FIX] Upgrade axios to 1.6.1 and axios-ntlm to 1.4.2 (#1212) +* [FIX] Fix build in Node.js 18 by re-encrypting test key (#1206) + 1.0.0 / 2022-12-09 =================== * [ENHANCEMENT] allow soap.createClient to create a new SOAP client from a WSDL string (#1191) diff --git a/package-lock.json b/package-lock.json index b9096ca8e..10df1647f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "soap", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "soap", - "version": "1.0.0", + "version": "1.0.1", "license": "MIT", "dependencies": { "axios-ntlm": "^1.4.2", diff --git a/package.json b/package.json index 5f3b29256..4edaec387 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "soap", - "version": "1.0.0", + "version": "1.0.1", "description": "A minimal node SOAP client", "engines": { "node": ">=14.0.0" From 770674a15d52294cc0235a677a6f61581b1daae1 Mon Sep 17 00:00:00 2001 From: Vasily Martynov Date: Wed, 24 Apr 2024 18:16:31 +1200 Subject: [PATCH 13/18] Change axios back as dependency Bump Axios to 1.6.8 --- package-lock.json | 32 +++++++++++++++----------------- package.json | 4 +--- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 10df1647f..e88ecdd25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.1", "license": "MIT", "dependencies": { + "axios": "^1.6.8", "axios-ntlm": "^1.4.2", "debug": "^4.3.2", "formidable": "^3.2.4", @@ -56,9 +57,6 @@ }, "engines": { "node": ">=14.0.0" - }, - "peerDependencies": { - "axios": "^1.6.1" } }, "node_modules/@babel/code-frame": { @@ -548,11 +546,11 @@ "dev": true }, "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -1645,9 +1643,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -5475,11 +5473,11 @@ "dev": true }, "axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" }, @@ -6374,9 +6372,9 @@ } }, "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "foreach": { "version": "2.0.5", diff --git a/package.json b/package.json index 4edaec387..32b418320 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ }, "author": "Vinay Pulim ", "dependencies": { + "axios": "^1.6.8", "axios-ntlm": "^1.4.2", "debug": "^4.3.2", "formidable": "^3.2.4", @@ -18,9 +19,6 @@ "whatwg-mimetype": "3.0.0", "xml-crypto": "^3.0.0" }, - "peerDependencies": { - "axios": "^1.6.1" - }, "repository": { "type": "git", "url": "https://github.com/vpulim/node-soap.git" From 6f2253407167f0a82c8ae33aff41138a0156959d Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Sun, 28 Apr 2024 06:47:36 +0900 Subject: [PATCH 14/18] Preserves leading and trailing whitespace when preserveWhitespace option is true add test response-preserve-whitespace-test.js --- src/wsdl/index.ts | 10 +++- test/response-preserve-whitespace-test.js | 62 +++++++++++++++++++++++ 2 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 test/response-preserve-whitespace-test.js diff --git a/src/wsdl/index.ts b/src/wsdl/index.ts index e4e15b7fc..19656a0d2 100644 --- a/src/wsdl/index.ts +++ b/src/wsdl/index.ts @@ -353,7 +353,9 @@ export class WSDL { const name = splitQName(nsName).name; if (typeof cur.schema === 'string' && (cur.schema === 'string' || cur.schema.split(':')[1] === 'string')) { - if (typeof obj === 'object' && Object.keys(obj).length === 0) { obj = cur.object = ''; } + if (typeof obj === 'object' && Object.keys(obj).length === 0) { + obj = cur.object = (this.options.preserveWhitespace ? cur.text || '' : ''); + } } if (cur.nil === true) { @@ -420,13 +422,17 @@ export class WSDL { }; p.ontext = (text) => { + const top = stack[stack.length - 1]; + const originalText = text; text = trim(text); if (!text.length) { + if (this.options.preserveWhitespace) { + top.text = (top.text || '') + originalText; + } return; } - const top = stack[stack.length - 1]; const name = splitQName(top.schema).name; let value; diff --git a/test/response-preserve-whitespace-test.js b/test/response-preserve-whitespace-test.js new file mode 100644 index 000000000..802f1ef58 --- /dev/null +++ b/test/response-preserve-whitespace-test.js @@ -0,0 +1,62 @@ +'use strict'; + +var request = require('request'); +var assert = require('assert'); +var http = require('http'); +var soap = require('../'); +var server; +var port; + +describe('Preverse whitespace', function() { + var wsdl = __dirname + '/wsdl/hello.wsdl'; + + before(function(done) { + server = http.createServer(function(req, res) { + res.statusCode = 200; + res.end('" "'); + }).listen(51515, done); + }); + + after(function() { + server.close(); + }); + + it('preserves leading and trailing whitespace when preserveWhitespace option is true', + function(done) { + var url = 'http://' + server.address().address + ':' + server.address().port; + + if (server.address().address === '0.0.0.0' || server.address().address === '::') { + url = 'http://127.0.0.1:' + server.address().port; + } + + soap.createClient( + wsdl, + { + endpoint: url, + disableCache: true, // disable wsdl cache, otherwise 'mocha test/client-response-options-test.js test/response-preserve-whitespace-test.js' will fail. + preserveWhitespace: true + }, + function(err, client) { + if (err) { + console.log(err); + throw err; + } + + client.sayHello( + { + firstName: 'hello world' + }, + function(err, result, rawResponse, soapHeader, rawRequest) { + if (err) { + console.log(err); + throw err; + } + assert.equal(' ', result.greeting); + done(); + } + ); + } + ); + }); + +}); From 733d2f25e6f839f339040eceb8833d8412a7ff03 Mon Sep 17 00:00:00 2001 From: Vasily Martynov Date: Mon, 29 Apr 2024 20:54:34 +1200 Subject: [PATCH 15/18] Release v1.0.2 --- History.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- test/response-preserve-whitespace-test.js | 3 +-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/History.md b/History.md index dbb700d72..bb7706244 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,11 @@ +1.0.2 / 2024-04-29 +=================== +* [ENHANCEMENT] Preserves leading and trailing whitespace when preserveWhitespace option is true (#1211) +* [ENHANCEMENT] Improve trim speed during XML parsing (#1216) +* [FIX] Change axios back as a dependency, bump axios to 1.6.8 (#1237) +* [FIX] Update proxy example in docs (#1220) +* [FIX] Add missing closing bracket in docs example (#1214) + 1.0.1 / 2024-04-18 =================== * [FIX] Upgrade axios to 1.6.1 and axios-ntlm to 1.4.2 (#1212) diff --git a/package-lock.json b/package-lock.json index e88ecdd25..6133d12b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "soap", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "soap", - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "dependencies": { "axios": "^1.6.8", diff --git a/package.json b/package.json index 32b418320..634b50ff0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "soap", - "version": "1.0.1", + "version": "1.0.2", "description": "A minimal node SOAP client", "engines": { "node": ">=14.0.0" diff --git a/test/response-preserve-whitespace-test.js b/test/response-preserve-whitespace-test.js index 802f1ef58..f1dc6616d 100644 --- a/test/response-preserve-whitespace-test.js +++ b/test/response-preserve-whitespace-test.js @@ -5,9 +5,8 @@ var assert = require('assert'); var http = require('http'); var soap = require('../'); var server; -var port; -describe('Preverse whitespace', function() { +describe('Preserse whitespace', function() { var wsdl = __dirname + '/wsdl/hello.wsdl'; before(function(done) { From c08ae8e20b20cb52768d4eccd5a106e181c8670f Mon Sep 17 00:00:00 2001 From: Sandro Zbinden <104848678+sandrozbinden-axa@users.noreply.github.com> Date: Wed, 1 May 2024 10:13:48 +0200 Subject: [PATCH 16/18] Fix invalid multipart/related Content-Type (#1198) * Fix invalid multipart/related header * Add test to ensure there is exactly 1 type parameter in MTOM requests --------- Co-authored-by: tommyhtran Co-authored-by: TheDadi --- src/http.ts | 2 +- test/client-test.js | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/http.ts b/src/http.ts index 15d0ac430..d9c2b94ed 100644 --- a/src/http.ts +++ b/src/http.ts @@ -99,7 +99,7 @@ export class HttpClient implements IHttpClient { } } const boundary = uuidv4(); - headers['Content-Type'] = 'multipart/related; type="application/xop+xml"; start="<' + start + '>"; type="text/xml"; boundary=' + boundary; + headers['Content-Type'] = 'multipart/related; type="application/xop+xml"; start="<' + start + '>"; start-info="text/xml"; boundary=' + boundary; if (action) { headers['Content-Type'] = headers['Content-Type'] + '; ' + action; } diff --git a/test/client-test.js b/test/client-test.js index 50f509dbf..74ba50269 100644 --- a/test/client-test.js +++ b/test/client-test.js @@ -619,6 +619,23 @@ var fs = require('fs'), }); }, baseUrl); }); + + it('should have exactly 1 type parameter when the request uses MTOM', function (done) { + soap.createClient(__dirname + '/wsdl/attachments.wsdl', meta.options, function (err, client) { + assert.ifError(err); + + client.MyOperation({}, function (error, response, body, soapHeader, rawRequest) { + assert.ifError(error); + + const contentTypeSplit = client.lastRequestHeaders['Content-Type'].split(';'); + + assert.equal(contentTypeSplit[0], 'multipart/related'); + assert.ok(contentTypeSplit.filter(function(e) { return e.trim().startsWith('type=') }).length === 1); + + done(); + }, { forceMTOM: true }) + }, baseUrl) + }); }); it('should add soap headers', function (done) { From aef5e9280da266186f6677067ac4c0281b298a6f Mon Sep 17 00:00:00 2001 From: Simon Hanna <33220646+simhnna@users.noreply.github.com> Date: Wed, 1 May 2024 10:39:25 +0200 Subject: [PATCH 17/18] Prevent mutating $type in the schema while processing requests (#1238) * Add test to check for unchanging schema * Do not mutate $type during request processing --- src/wsdl/index.ts | 3 +- ...-schema-does-not-change-on-request-test.js | 125 ++++++++++++++++++ 2 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 test/client-schema-does-not-change-on-request-test.js diff --git a/src/wsdl/index.ts b/src/wsdl/index.ts index 19656a0d2..7a258c5e0 100644 --- a/src/wsdl/index.ts +++ b/src/wsdl/index.ts @@ -849,7 +849,7 @@ export class WSDL { let resolvedChildSchemaObject; if (childSchemaObject.$type) { const typeQName = splitQName(childSchemaObject.$type); - const typePrefix = typeQName.prefix; + const typePrefix = childSchemaObject.$baseNameSpace || typeQName.prefix; const typeURI = schema.xmlns[typePrefix] || this.definitions.xmlns[typePrefix]; childNsURI = typeURI; if (typeURI !== 'http://www.w3.org/2001/XMLSchema' && typePrefix !== TNS_PREFIX) { @@ -1102,7 +1102,6 @@ export class WSDL { if (found) { found.$baseNameSpace = childNameSpace; - found.$type = childNameSpace + ':' + childName; break; } } diff --git a/test/client-schema-does-not-change-on-request-test.js b/test/client-schema-does-not-change-on-request-test.js new file mode 100644 index 000000000..3b57d660c --- /dev/null +++ b/test/client-schema-does-not-change-on-request-test.js @@ -0,0 +1,125 @@ +const fs = require('fs'); +const soap = require('../'); +const path = require('path'); +var http = require('http'); +var jsdiff = require('diff'); +var assert = require('assert'); + +let server; +let port; + +function normalizeWhiteSpace(raw) +{ + var normalized = raw.replace(/\r\n|\r|\n/g, ''); // strip line endings + normalized = normalized.replace(/\s\s+/g, ' '); // convert whitespace to spaces + normalized = normalized.replace(/> <'); // get rid of spaces between elements + return normalized; +} + +var requestContext = { + //set these two within each test + expectedRequest:null, + responseToSend:null, + doneHandler:null, + requestHandler:function(req, res){ + var chunks = []; + req.on('data', function(chunk){ + // ignore eol on sample files. + chunks.push(chunk.toString().replace(/\r?\n$/m, '')); + }); + req.on('end', function(){ + if(!requestContext.expectedRequest)return res.end(requestContext.responseToSend); + + var actualRequest = normalizeWhiteSpace(chunks.join('')); + var expectedRequest = normalizeWhiteSpace(requestContext.expectedRequest); + + if (actualRequest !== expectedRequest) { + var diff = jsdiff.diffChars(actualRequest, expectedRequest); + var comparison = ''; + diff.forEach(function(part) { + var color = 'grey'; + if (part.added) { color = 'green'; } + if (part.removed) { color = 'red'; } + comparison += part.value[color]; + }); + console.log(comparison); + } + + assert.equal(actualRequest, expectedRequest); + + if(!requestContext.responseToSend)return requestContext.doneHandler(); + if(requestContext.responseHttpHeaders){ + for(const headerKey in requestContext.responseHttpHeaders ){ + res.setHeader(headerKey,requestContext.responseHttpHeaders[headerKey]); + } + } + res.end(requestContext.responseToSend); + + requestContext.expectedRequest = null; + requestContext.responseToSend = null; + }); + } +}; + +describe("SOAP Client schema does not change", () => { + + before(function(done){ + server = http.createServer(requestContext.requestHandler); + server.listen(0, function(e){ + if(e)return done(e); + port = server.address().port; + done(); + }); + }); + it("should not change the schema", (done) => { + + const tpath = path.join(__dirname, 'request-response-samples', "RetrieveFareQuoteDateRange__should_handle_child_namespaces"); + const wsdlPath = path.resolve(tpath, "soap.wsdl"); + const requestJSON = require(path.resolve(tpath, "request.json")); + const requestXML = fs.readFileSync(path.resolve(tpath, "request.xml"), {encoding: 'utf8'}); + const responseJSON = require(path.resolve(tpath, "response.json")); + const responseXML = fs.readFileSync(path.resolve(tpath, "response.xml"), {encoding: 'utf8'}); + const methodName = 'RetrieveFareQuoteDateRange'; + + requestContext.expectedRequest = requestXML; + requestContext.responseToSend = responseXML; + soap.createClient(wsdlPath, {disableCache: true}, function(err, client){ + if (err) { + throw err; + } + //throw more meaningful error + if(typeof client[methodName] !== 'function'){ + throw new Error('method ' + methodName + ' does not exists in wsdl specified in test wsdl: ' + wsdlPath); + } + const typeBefore = client?.wsdl?.definitions?.schemas?.['http://tempuri.org/Service/Request']?.complexTypes?.TransactionInfo?.children?.[0]?.children?.[2]?.$type; + + cbCaller(client, methodName, requestJSON, responseJSON, null, {}, null, done); + + const typeAfter = client?.wsdl?.definitions?.schemas?.['http://tempuri.org/Service/Request']?.complexTypes?.TransactionInfo?.children?.[0]?.children?.[2]?.$type; + assert.equal(typeBefore, typeAfter); + + }, 'http://localhost:'+port+'/Message/Message.dll?Handler=Default'); + }); +}); + +function cbCaller(client, methodName, requestJSON, responseJSON, responseSoapHeaderJSON, options, attachmentParts, done){ + client[methodName](requestJSON, function(err, json, body, soapHeader){ + if(requestJSON){ + if (err) { + assert.notEqual('undefined: undefined', err.message); + assert.deepEqual(err.root, responseJSON); + } else { + // assert.deepEqual(json, responseJSON); + assert.deepEqual(json ?? null, responseJSON); + if(responseSoapHeaderJSON){ + assert.deepEqual(soapHeader, responseSoapHeaderJSON); + } + if(client.lastResponseAttachments){ + assert.deepEqual(client.lastResponseAttachments.parts,attachmentParts) + } + } + } + done(); + }, options); + } + \ No newline at end of file From 497294652f5fb5b798d7cb5cfbb555b268fb5aab Mon Sep 17 00:00:00 2001 From: Sebastian Good <2230835+scagood@users.noreply.github.com> Date: Wed, 1 May 2024 11:00:32 +0200 Subject: [PATCH 18/18] Add space after `xmlns:wsu` to prevent xmldom warning (#1215) Co-authored-by: Sebastian Good --- src/security/WSSecurityCert.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/security/WSSecurityCert.ts b/src/security/WSSecurityCert.ts index 6d84d93c1..5354dc4e1 100644 --- a/src/security/WSSecurityCert.ts +++ b/src/security/WSSecurityCert.ts @@ -158,7 +158,7 @@ export class WSSecurityCert implements ISecurity { } else { const secHeader = `` + binarySecurityToken + ``;