2
0
mirror of https://github.com/node-ebics/node-ebics-client.git synced 2025-04-27 17:31:42 +00:00

Replace libxmljs with xmllint-wasm to fix installation and tests on node 22.

This commit is contained in:
Maik Marschner 2025-03-26 13:17:45 +01:00
parent 138a2a2e6e
commit bf64593440
4 changed files with 60 additions and 428 deletions

@ -216,26 +216,25 @@ module.exports = class Client {
.persist();
rock({
method: 'POST',
url: this.url,
body: r,
headers: { 'content-type': 'text/xml;charset=UTF-8' },
},
(err, res, data) => {
if (err) reject(err);
method: 'POST',
url: this.url,
body: r,
headers: { 'content-type': 'text/xml;charset=UTF-8' },
},
(err, res, data) => {
if (err) reject(err);
const ebicsResponse = response.version(version)(data.toString('utf-8'), keys);
const ebicsResponse = response.version(version)(data.toString('utf-8'), keys);
if (this.tracesStorage)
this.tracesStorage
.label(`RESPONSE.${order.orderDetails.OrderType}`)
.connect()
.data(ebicsResponse.toXML())
.persist();
if (this.tracesStorage)
this.tracesStorage
.label(`RESPONSE.${order.orderDetails.OrderType}`)
.connect()
.data(ebicsResponse.toXML())
.persist();
resolve(ebicsResponse);
},
);
resolve(ebicsResponse);
});
});
}

402
package-lock.json generated

@ -1,12 +1,12 @@
{
"name": "ebics-client",
"version": "4.1.0",
"version": "4.2.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ebics-client",
"version": "4.1.0",
"version": "4.2.0",
"license": "MIT",
"dependencies": {
"@xmldom/xmldom": "^0.8.10",
@ -25,9 +25,9 @@
"eslint": "^6.7.2",
"eslint-config-ecollect-base": "^0.1.2",
"eslint-plugin-import": "^2.28.1",
"libxmljs": "^1.0.10",
"mocha": "^10.2.0",
"nyc": "^15.1.0"
"nyc": "^15.1.0",
"xmllint-wasm": "^4.0.2"
}
},
"node_modules/@babel/code-frame": {
@ -490,40 +490,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@mapbox/node-pre-gyp": {
"version": "1.0.9",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"detect-libc": "^2.0.0",
"https-proxy-agent": "^5.0.0",
"make-dir": "^3.1.0",
"node-fetch": "^2.6.7",
"nopt": "^5.0.0",
"npmlog": "^5.0.1",
"rimraf": "^3.0.2",
"semver": "^7.3.5",
"tar": "^6.1.11"
},
"bin": {
"node-pre-gyp": "bin/node-pre-gyp"
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/@types/json5": {
"version": "0.0.29",
"dev": true,
@ -544,11 +510,6 @@
"node": ">=10.0.0"
}
},
"node_modules/abbrev": {
"version": "1.1.1",
"dev": true,
"license": "ISC"
},
"node_modules/acorn": {
"version": "7.4.1",
"dev": true,
@ -568,33 +529,6 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/agent-base": {
"version": "6.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "4"
},
"engines": {
"node": ">= 6.0.0"
}
},
"node_modules/agent-base/node_modules/debug": {
"version": "4.3.4",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/aggregate-error": {
"version": "3.1.0",
"dev": true,
@ -716,28 +650,11 @@
"node": ">=8"
}
},
"node_modules/aproba": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"node_modules/archy": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/are-we-there-yet": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"delegates": "^1.0.0",
"readable-stream": "^3.6.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/argparse": {
"version": "1.0.10",
"dev": true,
@ -962,11 +879,6 @@
"node": ">=8"
}
},
"node_modules/bindings": {
"version": "1.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
@ -1186,14 +1098,6 @@
"fsevents": "~2.3.2"
}
},
"node_modules/chownr": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"node_modules/clean-stack": {
"version": "2.2.0",
"dev": true,
@ -1265,14 +1169,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/color-support": {
"version": "1.1.3",
"dev": true,
"license": "ISC",
"bin": {
"color-support": "bin.js"
}
},
"node_modules/combined-stream": {
"version": "1.0.8",
"dev": true,
@ -1307,11 +1203,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/console-control-strings": {
"version": "1.1.0",
"dev": true,
"license": "ISC"
},
"node_modules/convert-source-map": {
"version": "1.7.0",
"dev": true,
@ -1460,19 +1351,6 @@
"node": ">=0.4.0"
}
},
"node_modules/delegates": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/detect-libc": {
"version": "2.0.1",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=8"
}
},
"node_modules/diff": {
"version": "5.0.0",
"dev": true,
@ -2241,17 +2119,6 @@
],
"license": "MIT"
},
"node_modules/fs-minipass": {
"version": "2.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"minipass": "^3.0.0"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"dev": true,
@ -2304,46 +2171,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gauge": {
"version": "3.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"aproba": "^1.0.3 || ^2.0.0",
"color-support": "^1.1.2",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.1",
"object-assign": "^4.1.1",
"signal-exit": "^3.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
"wide-align": "^1.1.2"
},
"engines": {
"node": ">=10"
}
},
"node_modules/gauge/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/gauge/node_modules/string-width": {
"version": "4.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"dev": true,
@ -2594,11 +2421,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-unicode": {
"version": "2.0.1",
"dev": true,
"license": "ISC"
},
"node_modules/hasha": {
"version": "5.2.2",
"dev": true,
@ -2641,34 +2463,6 @@
"npm": ">=1.3.7"
}
},
"node_modules/https-proxy-agent": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/https-proxy-agent/node_modules/debug": {
"version": "4.3.4",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"dev": true,
@ -3344,21 +3138,6 @@
"node": ">= 0.8.0"
}
},
"node_modules/libxmljs": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/libxmljs/-/libxmljs-1.0.11.tgz",
"integrity": "sha512-ChqXkhZuvhbjariwPakKs/h+dF5Pe7j+QJ/PmTidzx7mDiFa5chhy7806PQiO+VnBJZ5mVLVq4Dk+W7fZP6luw==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
"@mapbox/node-pre-gyp": "^1.0.9",
"bindings": "~1.3.0",
"nan": "^2.17.0"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/locate-path": {
"version": "6.0.0",
"dev": true,
@ -3519,29 +3298,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/minipass": {
"version": "3.3.4",
"dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/minizlib": {
"version": "2.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"minipass": "^3.0.0",
"yallist": "^4.0.0"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/mkdirp": {
"version": "0.5.6",
"dev": true,
@ -3674,11 +3430,6 @@
"dev": true,
"license": "ISC"
},
"node_modules/nan": {
"version": "2.18.0",
"dev": true,
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.3",
"dev": true,
@ -3747,20 +3498,6 @@
"integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
"dev": true
},
"node_modules/nopt": {
"version": "5.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"abbrev": "1"
},
"bin": {
"nopt": "bin/nopt.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/normalize-path": {
"version": "3.0.0",
"dev": true,
@ -3769,17 +3506,6 @@
"node": ">=0.10.0"
}
},
"node_modules/npmlog": {
"version": "5.0.1",
"dev": true,
"license": "ISC",
"dependencies": {
"are-we-there-yet": "^2.0.0",
"console-control-strings": "^1.1.0",
"gauge": "^3.0.0",
"set-blocking": "^2.0.0"
}
},
"node_modules/nyc": {
"version": "15.1.0",
"dev": true,
@ -3969,14 +3695,6 @@
"node": "*"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-inspect": {
"version": "1.12.3",
"dev": true,
@ -4289,19 +4007,6 @@
"safe-buffer": "^5.1.0"
}
},
"node_modules/readable-stream": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"dev": true,
@ -4663,46 +4368,6 @@
"node": ">=0.10.0"
}
},
"node_modules/string_decoder": {
"version": "1.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.2.0"
}
},
"node_modules/string-width": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/string-width/node_modules/ansi-regex": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
"integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/string-width/node_modules/strip-ansi": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/string.prototype.trim": {
"version": "1.2.8",
"dev": true,
@ -4859,43 +4524,6 @@
"node": ">=6"
}
},
"node_modules/tar": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
"integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"dev": true,
"dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
"minipass": "^5.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/tar/node_modules/minipass": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
"integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/tar/node_modules/mkdirp": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"bin": {
"mkdirp": "bin/cmd.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/test-exclude": {
"version": "6.0.0",
"dev": true,
@ -5169,11 +4797,6 @@
"punycode": "^2.1.0"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/uuid": {
"version": "9.0.1",
"funding": [
@ -5269,14 +4892,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/wide-align": {
"version": "1.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^1.0.2 || 2"
}
},
"node_modules/word-wrap": {
"version": "1.2.5",
"dev": true,
@ -5382,6 +4997,15 @@
"version": "2.0.4",
"license": "Apache-2.0"
},
"node_modules/xmllint-wasm": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xmllint-wasm/-/xmllint-wasm-4.0.2.tgz",
"integrity": "sha512-tJxQzA9krv9gaQxYFJ/NVrpLf/wpWYPKjweCLMNbjooBTsW7/O26pyc3Pd0Lp0oTLUMFir/MEX3ybY/hhRjIpw==",
"dev": true,
"engines": {
"node": ">=12.4.0"
}
},
"node_modules/xpath": {
"version": "0.0.32",
"license": "MIT",

@ -79,8 +79,8 @@
"eslint": "^6.7.2",
"eslint-config-ecollect-base": "^0.1.2",
"eslint-plugin-import": "^2.28.1",
"libxmljs": "^1.0.10",
"mocha": "^10.2.0",
"nyc": "^15.1.0"
"nyc": "^15.1.0",
"xmllint-wasm": "^4.0.2"
}
}

@ -9,27 +9,36 @@ const fs = require('fs');
const ebics = require('../../');
const libxml = require('libxmljs');
const xmlLintWasm = require('xmllint-wasm');
const schemaPath = path.resolve(__dirname, '../xsd/ebics_H004.xsd');
const schemaDoc = libxml.parseXml(
fs.readFileSync(schemaPath, { encoding: 'utf8' }),
);
const validateXML = (() => {
const xsdDir = path.resolve(__dirname, '../xsd');
const schemaPath = path.resolve(xsdDir, 'ebics_H004.xsd');
const schemaDoc = fs.readFileSync(schemaPath, { encoding: 'utf8' });
const preload = fs
.readdirSync(xsdDir)
.filter(file => file.endsWith('.xsd') && file !== 'ebics_H004.xsd')
.map(file => ({
fileName: file,
contents: fs.readFileSync(path.join(xsdDir, file), {
encoding: 'utf8',
}),
}));
const schemaDir = path.dirname(schemaPath);
const cwd = process.cwd();
const validateXML = (str) => {
try {
process.chdir(schemaDir);
const isValid = libxml.parseXml(str).validate(schemaDoc);
process.chdir(cwd);
return isValid;
} catch (e) {
process.chdir(cwd);
return false;
}
};
return async (str) => {
const results = await xmlLintWasm.validateXML({
xml: { fileName: 'ebics.xml', contents: str },
schema: [
{
fileName: 'ebics_H004.xsd',
contents: schemaDoc,
},
],
preload,
});
return results.valid;
};
})();
const client = new ebics.Client({
url: 'https://iso20022test.credit-suisse.com/ebicsweb/ebicsweb',
@ -103,7 +112,7 @@ describe('H004 order generation', () => {
it(`[${operation}] ${type} order generation`, async () => {
const signedOrder = await client.signOrder(order);
assert.isTrue(validateXML(signedOrder));
assert.isTrue(await validateXML(signedOrder));
});
}
});