From 90f59155e13cf153c75330e0c74441843077616e Mon Sep 17 00:00:00 2001 From: woodser Date: Mon, 2 Oct 2023 08:16:54 -0400 Subject: [PATCH] update to monero-ts v0.9.2 with typescript --- dist/utils/HavenoUtils.d.ts | 8 +- dist/utils/HavenoUtils.js | 10 +- dist/utils/HavenoUtils.js.map | 2 +- dist/utils/TaskLooper.js | 2 + dist/utils/TaskLooper.js.map | 2 +- package-lock.json | 534 ++++++++++++++++++---------------- package.json | 2 +- src/HavenoClient.test.ts | 130 ++++----- src/utils/HavenoUtils.ts | 16 +- src/utils/TaskLooper.ts | 1 + tsconfig.json | 3 +- 11 files changed, 365 insertions(+), 345 deletions(-) diff --git a/dist/utils/HavenoUtils.d.ts b/dist/utils/HavenoUtils.d.ts index 17b23915..9026c566 100644 --- a/dist/utils/HavenoUtils.d.ts +++ b/dist/utils/HavenoUtils.d.ts @@ -74,17 +74,17 @@ export default class HavenoUtils { /** * Convert XMR to atomic units. * - * @param {number|string} amountXmr - amount in XMR to convert to atomic units - * @return {BigInt} amount in atomic units + * @param {number | string} amountXmr - amount in XMR to convert to atomic units + * @return {bigint} amount in atomic units */ static xmrToAtomicUnits(amountXmr: number | string): bigint; /** * Convert atomic units to XMR. * - * @param {BigInt|string} amountAtomicUnits - amount in atomic units to convert to XMR + * @param {bigint | string} amountAtomicUnits - amount in atomic units to convert to XMR * @return {number} amount in XMR */ - static atomicUnitsToXmr(amountAtomicUnits: BigInt | string): number; + static atomicUnitsToXmr(amountAtomicUnits: bigint | string): number; /** * Get a validated payment method id from a string or form id. * diff --git a/dist/utils/HavenoUtils.js b/dist/utils/HavenoUtils.js index a8dea599..8491105a 100644 --- a/dist/utils/HavenoUtils.js +++ b/dist/utils/HavenoUtils.js @@ -107,14 +107,12 @@ class HavenoUtils { /** * Convert XMR to atomic units. * - * @param {number|string} amountXmr - amount in XMR to convert to atomic units - * @return {BigInt} amount in atomic units + * @param {number | string} amountXmr - amount in XMR to convert to atomic units + * @return {bigint} amount in atomic units */ static xmrToAtomicUnits(amountXmr) { if (typeof amountXmr === "number") amountXmr = "" + amountXmr; - else if (typeof amountXmr !== "string") - throw new Error("Must provide XMR amount as a string or js number to convert to atomic units"); let decimalDivisor = 1; let decimalIdx = amountXmr.indexOf('.'); if (decimalIdx > -1) { @@ -126,14 +124,12 @@ class HavenoUtils { /** * Convert atomic units to XMR. * - * @param {BigInt|string} amountAtomicUnits - amount in atomic units to convert to XMR + * @param {bigint | string} amountAtomicUnits - amount in atomic units to convert to XMR * @return {number} amount in XMR */ static atomicUnitsToXmr(amountAtomicUnits) { if (typeof amountAtomicUnits === "string") amountAtomicUnits = BigInt(amountAtomicUnits); - else if (typeof amountAtomicUnits !== "bigint") - throw new Error("Must provide atomic units as BigInt or string to convert to XMR"); const quotient = amountAtomicUnits / HavenoUtils.AU_PER_XMR; const remainder = amountAtomicUnits % HavenoUtils.AU_PER_XMR; return Number(quotient) + Number(remainder) / Number(HavenoUtils.AU_PER_XMR); diff --git a/dist/utils/HavenoUtils.js.map b/dist/utils/HavenoUtils.js.map index 8391e8d9..0daecabf 100644 --- a/dist/utils/HavenoUtils.js.map +++ b/dist/utils/HavenoUtils.js.map @@ -1 +1 @@ -{"version":3,"file":"HavenoUtils.js","sourceRoot":"","sources":["../../src/utils/HavenoUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"HavenoUtils.js","sourceRoot":"","sources":["../../src/utils/HavenoUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/TaskLooper.js b/dist/utils/TaskLooper.js index 5ba6823b..b5c021d8 100644 --- a/dist/utils/TaskLooper.js +++ b/dist/utils/TaskLooper.js @@ -20,6 +20,8 @@ class TaskLooper { * @param {int} periodInMs the loop period in milliseconds */ start(periodInMs) { + if (periodInMs <= 0) + throw new Error("Looper period must be greater than 0 ms"); if (this._isStarted) return; this._isStarted = true; diff --git a/dist/utils/TaskLooper.js.map b/dist/utils/TaskLooper.js.map index 392095fe..e4f57625 100644 --- a/dist/utils/TaskLooper.js.map +++ b/dist/utils/TaskLooper.js.map @@ -1 +1 @@ -{"version":3,"file":"TaskLooper.js","sourceRoot":"","sources":["../../src/utils/TaskLooper.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,MAAqB,UAAU;IAO7B;;;;OAIG;IACH,YAAY,EAAuB;QACjC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAkB;QACtB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACzF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAkB;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,UAAU,EAAE;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtI;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;CACF;AAhDD,6BAgDC"} \ No newline at end of file +{"version":3,"file":"TaskLooper.js","sourceRoot":"","sources":["../../src/utils/TaskLooper.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,MAAqB,UAAU;IAO7B;;;;OAIG;IACH,YAAY,EAAuB;QACjC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAkB;QACtB,IAAI,UAAU,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACzF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAkB;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,UAAU,EAAE;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtI;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;CACF;AAjDD,6BAiDC"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2e5187fb..83429de9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsx-a11y": "^6.7.1", "jest": "^26.6.0", - "monero-javascript": "^0.8.0", + "monero-ts": "0.9.2", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-rename-defaults": "^0.6.4", @@ -80,22 +80,22 @@ } }, "node_modules/@babel/core": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz", - "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", + "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", + "@babel/generator": "^7.23.0", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.20", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.0", + "@babel/parser": "^7.23.0", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.20", - "@babel/types": "^7.22.19", - "convert-source-map": "^1.7.0", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -110,12 +110,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -230,13 +230,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -255,12 +255,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", - "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -279,9 +279,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", - "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -430,14 +430,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -458,9 +458,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -856,9 +856,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", - "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", + "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -943,9 +943,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", - "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", + "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1131,12 +1131,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", + "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1147,12 +1147,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", - "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", + "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1164,15 +1164,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", + "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1312,9 +1312,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", - "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", + "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1689,15 +1689,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", - "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.0.tgz", + "integrity": "sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", "@babel/plugin-transform-typescript": "^7.22.15" }, "engines": { @@ -1714,9 +1714,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1740,19 +1740,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz", - "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", + "@babel/generator": "^7.23.0", "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.19", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1761,13 +1761,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1812,9 +1812,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -1850,9 +1850,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1889,9 +1889,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1989,9 +1989,9 @@ } }, "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -2207,9 +2207,9 @@ } }, "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -2264,6 +2264,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/@jest/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2423,9 +2429,9 @@ } }, "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -2547,9 +2553,9 @@ } }, "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -2714,9 +2720,9 @@ } }, "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -2988,9 +2994,9 @@ } }, "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3045,6 +3051,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/@jest/reporters/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/@jest/reporters/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3204,9 +3216,9 @@ } }, "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3315,9 +3327,9 @@ } }, "node_modules/@jest/test-sequencer/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -3521,12 +3533,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3793,9 +3799,9 @@ } }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dev": true, "dependencies": { "@types/node": "*" @@ -3808,18 +3814,18 @@ "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" @@ -3848,14 +3854,14 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.17.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.17.tgz", - "integrity": "sha512-cOxcXsQ2sxiwkykdJqvyFS+MLQPLvIdwh5l6gNg8qF6s+C7XSkEWOZjK+XhUZd+mYvHV/180g2cnCcIl4l06Pw==" + "version": "18.18.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.1.tgz", + "integrity": "sha512-3G42sxmm0fF2+Vtb9TJQpnjmP+uKlWvFa8KoEGquh4gqRmoUG/N0ufuhikw6HEsdG2G2oIKhog1GCTfz9v5NdQ==" }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", "dev": true }, "node_modules/@types/prettier": { @@ -3865,9 +3871,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "dev": true }, "node_modules/@types/stack-utils": { @@ -3877,18 +3883,18 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.26", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.26.tgz", + "integrity": "sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -4768,9 +4774,9 @@ "dev": true }, "node_modules/axe-core": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", - "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", + "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", "dev": true, "engines": { "node": ">=4" @@ -4922,13 +4928,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz", + "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" + "core-js-compat": "^3.32.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -5065,9 +5071,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -5084,10 +5090,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -5163,9 +5169,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001535", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001535.tgz", - "integrity": "sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg==", + "version": "1.0.30001542", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001542.tgz", + "integrity": "sha512-UrtAXVcj1mvPBFQ4sKd38daP8dEcXXr5sQe6QNNinaPd0iA/cxg9/l3VrSdL73jgw5sKyuQ6jNgiKO12W3SsVA==", "dev": true, "funding": [ { @@ -5418,9 +5424,9 @@ "integrity": "sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==" }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/copy-descriptor": { @@ -5433,12 +5439,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", - "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", + "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", "dev": true, "dependencies": { - "browserslist": "^4.21.10" + "browserslist": "^4.22.1" }, "funding": { "type": "opencollective", @@ -5719,9 +5725,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.523", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz", - "integrity": "sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg==", + "version": "1.4.537", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.537.tgz", + "integrity": "sha512-W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA==", "dev": true }, "node_modules/emittery": { @@ -5915,15 +5921,15 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.50.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -6001,9 +6007,9 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", - "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -6294,9 +6300,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -7060,9 +7066,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -8124,9 +8130,9 @@ } }, "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -8246,9 +8252,9 @@ } }, "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -8421,9 +8427,9 @@ } }, "node_modules/jest-config/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -8531,6 +8537,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/jest-config/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/jest-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8777,9 +8789,9 @@ } }, "node_modules/jest-each/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -8937,9 +8949,9 @@ } }, "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -9066,9 +9078,9 @@ } }, "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -9280,9 +9292,9 @@ } }, "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -9520,9 +9532,9 @@ } }, "node_modules/jest-leak-detector/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -9833,9 +9845,9 @@ } }, "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -9987,9 +9999,9 @@ } }, "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -10091,9 +10103,9 @@ } }, "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -10234,9 +10246,9 @@ } }, "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -10490,9 +10502,9 @@ } }, "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -10547,6 +10559,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/jest-runtime/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/jest-runtime/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -10731,9 +10749,9 @@ } }, "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -11137,9 +11155,9 @@ } }, "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -11292,9 +11310,9 @@ } }, "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.16", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.16.tgz", + "integrity": "sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -11886,12 +11904,13 @@ "node": ">=0.10.0" } }, - "node_modules/monero-javascript": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/monero-javascript/-/monero-javascript-0.8.4.tgz", - "integrity": "sha512-hvZfmP0hZAjtYx0wMqKETcOGnDm8m0nP5sItGLCd2c0KQ4ut0d7vqUmCq71QTQR97IhfR04yD9yhR5/eK12ZYQ==", + "node_modules/monero-ts": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/monero-ts/-/monero-ts-0.9.2.tgz", + "integrity": "sha512-8dMl2j+jn0nQVMqgQ4UsHVaKmIU5wA1jXVwhyAcLygaLxZ6kBUGKC3+iM2wBKOwCTydQZWurpgbsiYRrp+rPVA==", "dev": true, "dependencies": { + "@types/node": "^20.6.0", "ajv": "^6.12.6", "async": "2.6.4", "crypto-js": "^4.0.0", @@ -11903,12 +11922,19 @@ "serialize-javascript": "^3.1.0", "text-encoding": "^0.7.0", "tls": "0.0.1", - "web-worker": "^1.0.0" + "uuid": "3.3.2", + "web-worker": "^1.2.0" }, "engines": { "node": ">=10.0.0" } }, + "node_modules/monero-ts/node_modules/@types/node": { + "version": "20.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.0.tgz", + "integrity": "sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==", + "dev": true + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -12011,6 +12037,16 @@ "node": ">=10" } }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/node-notifier/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -12947,16 +12983,6 @@ "node": ">=0.8" } }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13884,9 +13910,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", + "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", "dev": true }, "node_modules/split-string": { @@ -14806,9 +14832,9 @@ "dev": true }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -14871,13 +14897,13 @@ } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "optional": true, "bin": { - "uuid": "dist/bin/uuid" + "uuid": "bin/uuid" } }, "node_modules/v8-to-istanbul": { @@ -14894,6 +14920,12 @@ "node": ">=10.10.0" } }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/v8-to-istanbul/node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", diff --git a/package.json b/package.json index 7d1ac1d4..ba828169 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsx-a11y": "^6.7.1", "jest": "^26.6.0", - "monero-javascript": "^0.8.0", + "monero-ts": "0.9.2", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-rename-defaults": "^0.6.4", diff --git a/src/HavenoClient.test.ts b/src/HavenoClient.test.ts index 6d157e25..3c71f776 100644 --- a/src/HavenoClient.test.ts +++ b/src/HavenoClient.test.ts @@ -1,6 +1,6 @@ // --------------------------------- IMPORTS ---------------------------------- -// import haveno types +// haveno imports import HavenoClient from "./HavenoClient"; import HavenoError from "./utils/HavenoError"; import HavenoUtils from "./utils/HavenoUtils"; @@ -10,15 +10,6 @@ import { XmrDestination, XmrTx, XmrIncomingTransfer, XmrOutgoingTransfer } from import AuthenticationStatus = UrlConnection.AuthenticationStatus; import OnlineStatus = UrlConnection.OnlineStatus; -// import monero-javascript -const monerojs = require("monero-javascript"); // TODO (woodser): support typescript and `npm install @types/monero-javascript` in monero-javascript -const GenUtils = monerojs.GenUtils; -const BigInteger = monerojs.BigInteger; -const MoneroTxConfig = monerojs.MoneroTxConfig; -const MoneroDestination = monerojs.MoneroDestination; -const MoneroUtils = monerojs.MoneroUtils; -const TaskLooper = monerojs.TaskLooper; - // other imports import fs from "fs"; import path from "path"; @@ -26,6 +17,7 @@ import net from "net"; import assert from "assert"; import console from "console"; // import console because jest swallows messages in real time import * as os from 'os'; +import * as moneroTs from "monero-ts"; // ------------------------------ TEST CONFIG --------------------------------- @@ -40,16 +32,16 @@ const startupHavenods: HavenoClient[] = []; let arbitrator: HavenoClient; let user1: HavenoClient; let user2: HavenoClient; -let monerod: any; -let fundingWallet: any; -let user1Wallet: any; -let user2Wallet: any; +let monerod: moneroTs.MoneroDaemon; +let fundingWallet: moneroTs.MoneroWalletRpc; +let user1Wallet: moneroTs.MoneroWalletRpc; +let user2Wallet: moneroTs.MoneroWalletRpc; // default test configuration const TestConfig = { logLevel: 2, baseCurrencyNetwork: getBaseCurrencyNetwork(), - networkType: getBaseCurrencyNetwork() == BaseCurrencyNetwork.XMR_MAINNET ? monerojs.MoneroNetworkType.MAINNET : getBaseCurrencyNetwork() == BaseCurrencyNetwork.XMR_LOCAL ? monerojs.MoneroNetworkType.TESTNET : monerojs.MoneroNetworkType.STAGENET, + networkType: getBaseCurrencyNetwork() == BaseCurrencyNetwork.XMR_MAINNET ? moneroTs.MoneroNetworkType.MAINNET : getBaseCurrencyNetwork() == BaseCurrencyNetwork.XMR_LOCAL ? moneroTs.MoneroNetworkType.TESTNET : moneroTs.MoneroNetworkType.STAGENET, moneroBinsDir: "../haveno/.localnet", testDataDir: "./testdata", haveno: { @@ -113,7 +105,7 @@ const TestConfig = { } ], maxFee: HavenoUtils.xmrToAtomicUnits(0.5), // local testnet fees can be relatively high - minSecurityDeposit: MoneroUtils.xmrToAtomicUnits(0.1), + minSecurityDeposit: moneroTs.MoneroUtils.xmrToAtomicUnits(0.1), maxAdjustmentPct: 0.2, daemonPollPeriodMs: 5000, maxWalletStartupMs: 10000, // TODO (woodser): make shorter by switching to jni @@ -322,7 +314,7 @@ beforeAll(async () => { // initialize monerod try { - monerod = await monerojs.connectToDaemonRpc(TestConfig.monerod.url, TestConfig.monerod.username, TestConfig.monerod.password); + monerod = await moneroTs.connectToDaemonRpc(TestConfig.monerod.url, TestConfig.monerod.username, TestConfig.monerod.password); await mineToHeight(160); // initialize blockchain to latest block type } catch (err) { HavenoUtils.log(0, "Error initializing internal monerod: " + err.message); // allowed in order to test starting and stopping local node @@ -347,8 +339,8 @@ beforeAll(async () => { TestConfig.trade.taker = user2; // connect client wallets - user1Wallet = await monerojs.connectToWalletRpc(TestConfig.startupHavenods[1].walletUrl, TestConfig.defaultHavenod.walletUsername, TestConfig.startupHavenods[1].accountPasswordRequired ? TestConfig.startupHavenods[1].accountPassword : TestConfig.defaultHavenod.walletDefaultPassword); - user2Wallet = await monerojs.connectToWalletRpc(TestConfig.startupHavenods[2].walletUrl, TestConfig.defaultHavenod.walletUsername, TestConfig.startupHavenods[2].accountPasswordRequired ? TestConfig.startupHavenods[2].accountPassword : TestConfig.defaultHavenod.walletDefaultPassword); + user1Wallet = await moneroTs.connectToWalletRpc(TestConfig.startupHavenods[1].walletUrl!, TestConfig.defaultHavenod.walletUsername, TestConfig.startupHavenods[1].accountPasswordRequired ? TestConfig.startupHavenods[1].accountPassword : TestConfig.defaultHavenod.walletDefaultPassword); + user2Wallet = await moneroTs.connectToWalletRpc(TestConfig.startupHavenods[2].walletUrl!, TestConfig.defaultHavenod.walletUsername, TestConfig.startupHavenods[2].accountPasswordRequired ? TestConfig.startupHavenods[2].accountPassword : TestConfig.defaultHavenod.walletDefaultPassword); // register arbitrator dispute agent await arbitrator.registerDisputeAgent("arbitrator", getArbitratorPrivKey(0)); @@ -379,7 +371,7 @@ async function shutDown() { await Promise.all(promises); // terminate monero-javascript worker - await monerojs.LibraryUtils.terminateWorker(); + await moneroTs.LibraryUtils.terminateWorker(); } // ----------------------------------- TESTS ---------------------------------- @@ -531,7 +523,7 @@ test("Can manage an account (CI)", async () => { }); test("Can manage Monero daemon connections (CI)", async () => { - let monerod2: any; + let monerod2: moneroTs.MoneroDaemonRpc | undefined = undefined; let user3: HavenoClient|undefined; let err: any; try { @@ -578,9 +570,9 @@ test("Can manage Monero daemon connections (CI)", async () => { "--rpc-bind-port", TestConfig.monerod2.rpcBindPort, "--no-zmq" ]; - if (getBaseCurrencyNetwork() !== BaseCurrencyNetwork.XMR_MAINNET) cmd.push("--" + monerojs.MoneroNetworkType.toString(TestConfig.networkType).toLowerCase()); + if (getBaseCurrencyNetwork() !== BaseCurrencyNetwork.XMR_MAINNET) cmd.push("--" + moneroTs.MoneroNetworkType.toString(TestConfig.networkType).toLowerCase()); if (TestConfig.monerod2.username) cmd.push("--rpc-login", TestConfig.monerod2.username + ":" + TestConfig.monerod2.password); - monerod2 = await monerojs.connectToDaemonRpc(cmd); + monerod2 = await moneroTs.connectToDaemonRpc(cmd); // connection is online and not authenticated connection = await user3.checkMoneroConnection(); @@ -624,7 +616,7 @@ test("Can manage Monero daemon connections (CI)", async () => { // stop monerod //await monerod2.stopProcess(); // TODO (monero-javascript): monerod remains available after await monerod.stopProcess() for up to 40 seconds - await GenUtils.killProcess(monerod2.process, "SIGKILL"); + await moneroTs.GenUtils.killProcess(monerod2.getProcess(), "SIGKILL"); // test auto switch after periodic connection check await wait(TestConfig.daemonPollPeriodMs * 2); @@ -744,7 +736,7 @@ test("Can start and stop a local Monero node (CI)", async() => { // expect connection to local monero node to succeed const rpcUrl = "http://127.0.0.1:" + rpcPort.toString(); - let daemon = await monerojs.connectToDaemonRpc(rpcUrl, "superuser", "abctesting123"); + let daemon = await moneroTs.connectToDaemonRpc(rpcUrl, "superuser", "abctesting123"); let height = await daemon.getHeight(); assert(height >= 0); @@ -762,7 +754,7 @@ test("Can start and stop a local Monero node (CI)", async() => { isMoneroNodeOnline = await user1.isMoneroNodeOnline(); assert(!isMoneroNodeOnline); try { - daemon = await monerojs.connectToDaemonRpc(rpcUrl); + daemon = await moneroTs.connectToDaemonRpc(rpcUrl); height = await daemon.getHeight(); throw new Error("should have thrown"); } catch (err: any) { @@ -776,11 +768,11 @@ test("Has a Monero wallet (CI)", async () => { // get seed phrase const seed = await user1.getXmrSeed(); - await MoneroUtils.validateMnemonic(seed); + await moneroTs.MoneroUtils.validateMnemonic(seed); // get primary address const primaryAddress = await user1.getXmrPrimaryAddress(); - await MoneroUtils.validateAddress(primaryAddress, TestConfig.networkType); + await moneroTs.MoneroUtils.validateAddress(primaryAddress, TestConfig.networkType); // wait for user1 to have unlocked balance const tradeAmount = BigInt("250000000000"); @@ -801,7 +793,7 @@ test("Has a Monero wallet (CI)", async () => { // get new subaddresses for (let i = 0; i < 0; i++) { const address = await user1.getXmrNewSubaddress(); - await MoneroUtils.validateAddress(address, TestConfig.networkType); + await moneroTs.MoneroUtils.validateAddress(address, TestConfig.networkType); } // create withdraw tx @@ -1051,7 +1043,7 @@ test("Can validate payment account forms (CI, sanity check)", async () => { const paymentMethods = await user1.getPaymentMethods(); expect(paymentMethods.length).toEqual(expectedPaymentMethods.length); for (const paymentMethod of paymentMethods) { - assert(GenUtils.arrayContains(expectedPaymentMethods, paymentMethod.getId()), "Payment method is not expected: " + paymentMethod.getId()); + assert(moneroTs.GenUtils.arrayContains(expectedPaymentMethods, paymentMethod.getId()), "Payment method is not expected: " + paymentMethod.getId()); } // test form for each payment method @@ -1105,7 +1097,7 @@ test("Can create fiat payment accounts (CI)", async () => { const accountForm = await user1.getPaymentAccountForm(paymentMethodId); // edit form - HavenoUtils.setFormValue(PaymentAccountFormField.FieldId.ACCOUNT_NAME, "Revolut account " + GenUtils.getUUID(), accountForm); + HavenoUtils.setFormValue(PaymentAccountFormField.FieldId.ACCOUNT_NAME, "Revolut account " + moneroTs.GenUtils.getUUID(), accountForm); HavenoUtils.setFormValue(PaymentAccountFormField.FieldId.USER_NAME, "user123", accountForm); HavenoUtils.setFormValue(PaymentAccountFormField.FieldId.TRADE_CURRENCIES, "gbp,eur,usd", accountForm); @@ -1134,7 +1126,7 @@ test("Can create crypto payment accounts (CI)", async () => { for (const testAccount of TestConfig.cryptoAddresses) { // create payment account - const name = testAccount.currencyCode + " " + testAccount.address.substr(0, 8) + "... " + GenUtils.getUUID(); + const name = testAccount.currencyCode + " " + testAccount.address.substr(0, 8) + "... " + moneroTs.GenUtils.getUUID(); const paymentAccount: PaymentAccount = await user1.createCryptoPaymentAccount(name, testAccount.currencyCode, testAccount.address); testCryptoPaymentAccount(paymentAccount); testCryptoPaymentAccountEquals(paymentAccount, testAccount, name); @@ -1163,7 +1155,7 @@ test("Can create crypto payment accounts (CI)", async () => { .toThrow('123 is not a valid eth address'); // test address duplicity - let uid = "Unique account name " + GenUtils.getUUID(); + let uid = "Unique account name " + moneroTs.GenUtils.getUUID(); await user1.createCryptoPaymentAccount(uid, TestConfig.cryptoAddresses[0].currencyCode, TestConfig.cryptoAddresses[0].address) await expect(async () => { await user1.createCryptoPaymentAccount(uid, TestConfig.cryptoAddresses[0].currencyCode, TestConfig.cryptoAddresses[0].address); }) .rejects @@ -1250,7 +1242,7 @@ test("Can schedule offers with locked funds (CI)", async () => { // start user3 user3 = await initHaveno(); - const user3Wallet = await monerojs.connectToWalletRpc("http://127.0.0.1:" + user3.getWalletRpcPort(), TestConfig.defaultHavenod.walletUsername, TestConfig.defaultHavenod.accountPassword); + const user3Wallet = await moneroTs.connectToWalletRpc("http://127.0.0.1:" + user3.getWalletRpcPort(), TestConfig.defaultHavenod.walletUsername, TestConfig.defaultHavenod.accountPassword); // fund user3 with 2 outputs of 0.5 XMR const outputAmt = BigInt("500000000000"); @@ -1708,7 +1700,7 @@ test("Can handle unexpected errors during trade initialization", async () => { let paymentAccount = await createCryptoPaymentAccount(traders[1]); wait(3000).then(async function() { try { - const traderWallet = await monerojs.connectToWalletRpc("http://localhost:" + traders[1].getWalletRpcPort(), TestConfig.defaultHavenod.walletUsername, TestConfig.defaultHavenod.accountPassword); + const traderWallet = await moneroTs.connectToWalletRpc("http://localhost:" + traders[1].getWalletRpcPort(), TestConfig.defaultHavenod.walletUsername, TestConfig.defaultHavenod.accountPassword); for (const frozenOutput of await traderWallet.getOutputs({isFrozen: true})) await traderWallet.thawOutput(frozenOutput.getKeyImage().getHex()); HavenoUtils.log(1, "Sweeping trade funds"); await traderWallet.sweepUnlocked({address: await traderWallet.getPrimaryAddress(), relay: true}); @@ -1742,7 +1734,7 @@ test("Can handle unexpected errors during trade initialization", async () => { // trader 0 spends trade funds after trader 2 takes offer wait(3000).then(async function() { try { - const traderWallet = await monerojs.connectToWalletRpc("http://localhost:" + traders[0].getWalletRpcPort(), TestConfig.defaultHavenod.walletUsername, TestConfig.defaultHavenod.accountPassword); + const traderWallet = await moneroTs.connectToWalletRpc("http://localhost:" + traders[0].getWalletRpcPort(), TestConfig.defaultHavenod.walletUsername, TestConfig.defaultHavenod.accountPassword); for (const frozenOutput of await traderWallet.getOutputs({isFrozen: true})) await traderWallet.thawOutput(frozenOutput.getKeyImage().getHex()); HavenoUtils.log(1, "Sweeping offer funds"); await traderWallet.sweepUnlocked({address: await traderWallet.getPrimaryAddress(), relay: true}); @@ -1972,7 +1964,7 @@ async function executeTrades(ctxs: TradeContext[], executionCtx?: TradeContext): // execute trades in thread pool unless serial if (executionCtx.concurrentTrades) { const tradePromises: Promise[] = []; - const pool = new monerojs.ThreadPool(executionCtx.maxConcurrency!); + const pool = new moneroTs.ThreadPool(executionCtx.maxConcurrency!); for (const ctx of ctxs) tradePromises.push(pool.submit(() => executeTrade(Object.assign(ctx, {concurrentTrades: executionCtx!.concurrentTrades})))); try { offerIds = await Promise.all(tradePromises); @@ -2299,7 +2291,7 @@ async function testTradePayoutUnlock(ctx: TradeContext) { async function testTradeState(trade: TradeInfo, ctx: TradeContext) { assert.equal(trade.getPhase(), ctx.phase, "expected trade phase to be " + ctx.phase + " but was " + trade.getPhase() + " for trade " + trade.getTradeId()); - assert(GenUtils.arrayContains(ctx.payoutState, trade.getPayoutState()), "expected one of payout state " + ctx.payoutState + " but was " + trade.getPayoutState() + " for trade " + trade.getTradeId()); + assert(moneroTs.GenUtils.arrayContains(ctx.payoutState, trade.getPayoutState()), "expected one of payout state " + ctx.payoutState + " but was " + trade.getPayoutState() + " for trade " + trade.getTradeId()); if (ctx.disputeState) expect(trade.getDisputeState()).toEqual(ctx.disputeState); if (ctx.isCompleted !== undefined) expect(trade.getIsCompleted()).toEqual(ctx.isCompleted); if (ctx.isPayoutPublished !== undefined) expect(trade.getIsPayoutPublished()).toEqual(ctx.isPayoutPublished); @@ -2423,7 +2415,7 @@ async function takeOffer(ctx: TradeContext): Promise { await wait(ctx.maxTimePeerNoticeMs!); const tradeNotifications = getNotifications(makerNotifications, NotificationMessage.NotificationType.TRADE_UPDATE, trade.getTradeId()); expect(tradeNotifications.length).toBe(1); - assert(GenUtils.arrayContains(["DEPOSITS_PUBLISHED", "DEPOSITS_CONFIRMED", "DEPOSITS_UNLOCKED"], tradeNotifications[0].getTrade()!.getPhase(), "Unexpected trade phase: " + tradeNotifications[0].getTrade()!.getPhase())); + assert(moneroTs.GenUtils.arrayContains(["DEPOSITS_PUBLISHED", "DEPOSITS_CONFIRMED", "DEPOSITS_UNLOCKED"], tradeNotifications[0].getTrade()!.getPhase()), "Unexpected trade phase: " + tradeNotifications[0].getTrade()!.getPhase()); expect(tradeNotifications[0].getTitle()).toEqual("Offer Taken"); expect(tradeNotifications[0].getMessage()).toEqual("Your offer " + ctx.offerId + " has been accepted"); @@ -2431,7 +2423,7 @@ async function takeOffer(ctx: TradeContext): Promise { // taker can get trade let fetchedTrade: TradeInfo = await ctx.taker!.getTrade(trade.getTradeId()); - assert(GenUtils.arrayContains(["DEPOSITS_PUBLISHED", "DEPOSITS_CONFIRMED", "DEPOSITS_UNLOCKED"], fetchedTrade.getPhase()), "Unexpected trade phase: " + fetchedTrade.getPhase()); + assert(moneroTs.GenUtils.arrayContains(["DEPOSITS_PUBLISHED", "DEPOSITS_CONFIRMED", "DEPOSITS_UNLOCKED"], fetchedTrade.getPhase()), "Unexpected trade phase: " + fetchedTrade.getPhase()); // TODO: more fetched trade tests // market-priced offer amounts are unadjusted, fixed-priced offer amounts are adjusted (e.g. cash at atm is $10 increments) @@ -2445,7 +2437,7 @@ async function takeOffer(ctx: TradeContext): Promise { // maker can get trade fetchedTrade = await ctx.maker!.getTrade(trade.getTradeId()); - assert(GenUtils.arrayContains(["DEPOSITS_PUBLISHED", "DEPOSITS_CONFIRMED", "DEPOSITS_UNLOCKED"], fetchedTrade.getPhase()), "Unexpected trade phase: " + fetchedTrade.getPhase()); + assert(moneroTs.GenUtils.arrayContains(["DEPOSITS_PUBLISHED", "DEPOSITS_CONFIRMED", "DEPOSITS_UNLOCKED"], fetchedTrade.getPhase()), "Unexpected trade phase: " + fetchedTrade.getPhase()); return trade; } @@ -2802,7 +2794,7 @@ async function initHavenos(numDaemons: number, config?: any) { async function initHaveno(ctx?: HavenodContext): Promise { if (!ctx) ctx = {}; Object.assign(ctx, TestConfig.defaultHavenod, Object.assign({}, ctx)); - if (!ctx.appName) ctx.appName = "haveno-" + TestConfig.baseCurrencyNetwork + "_instance_" + GenUtils.getUUID(); + if (!ctx.appName) ctx.appName = "haveno-" + TestConfig.baseCurrencyNetwork + "_instance_" + moneroTs.GenUtils.getUUID(); // connect to existing server or start new process let havenod: HavenoClient; @@ -2818,7 +2810,7 @@ async function initHaveno(ctx?: HavenodContext): Promise { if (!ctx.port) { for (const httpPort of Array.from(TestConfig.ports.keys())) { if (httpPort === "8079" || httpPort === "8080" || httpPort === "8081") continue; // reserved for arbitrator, user1, and user2 - if (!GenUtils.arrayContains(HAVENO_PROCESS_PORTS, httpPort) && (!ctx.excludePorts || !GenUtils.arrayContains(ctx.excludePorts, httpPort))) { + if (!moneroTs.GenUtils.arrayContains(HAVENO_PROCESS_PORTS, httpPort) && (!ctx.excludePorts || !moneroTs.GenUtils.arrayContains(ctx.excludePorts, httpPort))) { HAVENO_PROCESS_PORTS.push(httpPort); ctx.port = httpPort; break; @@ -2876,8 +2868,8 @@ async function initHaveno(ctx?: HavenodContext): Promise { * Release a Haveno process for reuse and try to shutdown. */ async function releaseHavenoProcess(havenod: HavenoClient, deleteAppDir?: boolean) { - GenUtils.remove(HAVENO_PROCESSES, havenod); - GenUtils.remove(HAVENO_PROCESS_PORTS, getPort(havenod.getUrl())); + moneroTs.GenUtils.remove(HAVENO_PROCESSES, havenod); + moneroTs.GenUtils.remove(HAVENO_PROCESS_PORTS, getPort(havenod.getUrl())); try { await havenod.shutdownServer(); } catch (err: any) { @@ -2916,7 +2908,7 @@ async function initHavenoAccount(havenod: HavenoClient, password: string) { async function initFundingWallet() { // init client connected to monero-wallet-rpc - fundingWallet = await monerojs.connectToWalletRpc(TestConfig.fundingWallet.url, TestConfig.fundingWallet.username, TestConfig.fundingWallet.password); + fundingWallet = await moneroTs.connectToWalletRpc(TestConfig.fundingWallet.url, TestConfig.fundingWallet.username, TestConfig.fundingWallet.password); // check if wallet is open let walletIsOpen = false @@ -2934,7 +2926,7 @@ async function initFundingWallet() { try { await fundingWallet.openWallet({path: TestConfig.fundingWallet.defaultPath, password: TestConfig.fundingWallet.walletPassword}); } catch (err: any) { - if (!(err instanceof monerojs.MoneroRpcError)) throw err; + if (!(err instanceof moneroTs.MoneroRpcError)) throw err; // -1 returned when wallet does not exist or fails to open e.g. it's already open by another application if (err.getCode() === -1) { @@ -2976,7 +2968,7 @@ async function getWallet(havenod: HavenoClient) { let wallet: any; if (havenod === user1) wallet = user1Wallet; else if (havenod === user2) wallet = user2Wallet; - else wallet = await monerojs.connectToWalletRpc("http://127.0.0.1:" + havenod.getWalletRpcPort(), TestConfig.defaultHavenod.walletUsername, TestConfig.defaultHavenod.accountPassword); + else wallet = await moneroTs.connectToWalletRpc("http://127.0.0.1:" + havenod.getWalletRpcPort(), TestConfig.defaultHavenod.walletUsername, TestConfig.defaultHavenod.accountPassword); HAVENO_WALLETS.set(havenod, wallet); } return HAVENO_WALLETS.get(havenod); @@ -3008,7 +3000,7 @@ async function mineToHeight(height: number) { if (await monerod.getHeight() >= height) return; const miningStarted = await startMining(); while (await monerod.getHeight() < height) { - await GenUtils.waitFor(TestConfig.trade.walletSyncPeriodMs); + await moneroTs.GenUtils.waitFor(TestConfig.trade.walletSyncPeriodMs); } if (miningStarted) await stopMining(); } @@ -3048,7 +3040,7 @@ async function waitForAvailableBalance(amount: bigint, ...wallets: any[]) { // fund wallets with insufficient balance let miningNeeded = false; - const fundConfig = new MoneroTxConfig().setAccountIndex(0).setRelay(true); + const fundConfig: moneroTs.MoneroTxConfig = new moneroTs.MoneroTxConfig({accountIndex: 0, relay: true}); for (const wallet of wallets) { const availableBalance = await wallet.getAvailableBalance(); if (availableBalance < amount) miningNeeded = true; @@ -3079,7 +3071,7 @@ async function waitForAvailableBalance(amount: bigint, ...wallets: any[]) { } // eslint-disable-next-line no-async-promise-executor promises.push(new Promise(async (resolve) => { - const taskLooper: any = new TaskLooper(async function() { + const taskLooper: any = new moneroTs.TaskLooper(async function() { if (await wallet.getAvailableBalance() >= amount) { taskLooper.stop(); resolve(); @@ -3101,10 +3093,10 @@ async function waitForUnlockedTxs(...txHashes: string[]) { for (const txHash of txHashes) { // eslint-disable-next-line no-async-promise-executor promises.push(new Promise(async (resolve) => { - const taskLooper = new TaskLooper(async function() { + const taskLooper = new moneroTs.TaskLooper(async function() { const tx = await monerod.getTx(txHash); if (!tx) HavenoUtils.log(1, "WARNING: tx hash " + txHash + " not found"); - else if (tx.isConfirmed() && tx.getBlock().getHeight() <= await monerod.getHeight() - 10) { + else if (tx.getIsConfirmed() && tx.getBlock().getHeight() <= await monerod.getHeight() - 10) { taskLooper.stop(); resolve(); } @@ -3128,7 +3120,7 @@ async function waitForUnlockedTxs(...txHashes: string[]) { async function hasUnspentOutputs(wallets: any[], amt: BigInt, numOutputs?: number, isLocked?: boolean): Promise { if (numOutputs === undefined) numOutputs = 1; for (const wallet of wallets) { - const unspentOutputs = await wallet.getOutputs({isSpent: false, isFrozen: false, minAmount: monerojs.BigInteger(amt.toString()), txQuery: {isLocked: isLocked}}); + const unspentOutputs = await wallet.getOutputs({isSpent: false, isFrozen: false, minAmount: BigInt(amt.toString()), txQuery: {isLocked: isLocked}}); if (unspentOutputs.length < numOutputs) return false; } return true; @@ -3139,36 +3131,36 @@ async function hasUnspentOutputs(wallets: any[], amt: BigInt, numOutputs?: numbe * * @param {MoneroWallet} wallets - monerojs wallets * @param {BigInt} amt - the amount to fund - * @param {number?} numOutputs - the number of outputs of the given amount (default 1) - * @param {boolean?} waitForUnlock - wait for outputs to unlock (default false) + * @param {number} [numOutputs] - the number of outputs of the given amount (default 1) + * @param {boolean} [waitForUnlock] - wait for outputs to unlock (default false) */ async function fundOutputs(wallets: any[], amt: bigint, numOutputs?: number, waitForUnlock?: boolean): Promise { if (numOutputs === undefined) numOutputs = 1; if (waitForUnlock === undefined) waitForUnlock = true; // collect destinations - const destinations: any[] = []; + const destinations: moneroTs.MoneroDestination[] = []; for (const wallet of wallets) { if (await hasUnspentOutputs([wallet], amt, numOutputs, undefined)) continue; for (let i = 0; i < numOutputs; i++) { - destinations.push(new MoneroDestination((await wallet.createSubaddress()).getAddress(), monerojs.BigInteger(amt.toString()))); + destinations.push(new moneroTs.MoneroDestination((await wallet.createSubaddress()).getAddress(), BigInt(amt.toString()))); } } if (!destinations.length) return; // fund destinations - let txConfig = new MoneroTxConfig().setAccountIndex(0).setRelay(true); + let txConfig = new moneroTs.MoneroTxConfig().setAccountIndex(0).setRelay(true); const txHashes: string[] = []; - let sendAmt = BigInteger("0"); + let sendAmt = 0n; for (let i = 0; i < destinations.length; i++) { - txConfig.addDestination(destinations[i]); - sendAmt = sendAmt.add(destinations[i].getAmount()); + txConfig.addDestination(destinations[i], undefined); // TODO: remove once converted to MoneroTxConfig.ts + sendAmt = sendAmt + destinations[i].getAmount(); if (i === destinations.length - 1 || (i > 0 && i % 15 === 0)) { await waitForAvailableBalance(toBigInt(sendAmt), fundingWallet); const txs = await fundingWallet.createTxs(txConfig); for (const tx of txs) txHashes.push(tx.getHash()); - txConfig = new MoneroTxConfig().setAccountIndex(0).setRelay(true); - sendAmt = BigInteger("0"); + txConfig = new moneroTs.MoneroTxConfig().setAccountIndex(0).setRelay(true); + sendAmt = 0n; } } @@ -3296,7 +3288,7 @@ function testDestination(destination: XmrDestination) { } function getRandomAssetCode() { - return TestConfig.assetCodes[GenUtils.getRandomInt(0, TestConfig.assetCodes.length - 1)]; + return TestConfig.assetCodes[moneroTs.GenUtils.getRandomInt(0, TestConfig.assetCodes.length - 1)]; } async function hasPaymentAccount(trader: HavenoClient, assetCode: string): Promise { @@ -3328,7 +3320,7 @@ async function createCryptoPaymentAccount(trader: HavenoClient, currencyCode = " for (const cryptoAddress of TestConfig.cryptoAddresses) { if (cryptoAddress.currencyCode.toLowerCase() !== currencyCode.toLowerCase()) continue; return trader.createCryptoPaymentAccount( - cryptoAddress.currencyCode + " " + cryptoAddress.address.substr(0, 8) + "... " + GenUtils.getUUID(), + cryptoAddress.currencyCode + " " + cryptoAddress.address.substr(0, 8) + "... " + moneroTs.GenUtils.getUUID(), cryptoAddress.currencyCode, cryptoAddress.address); } @@ -3402,7 +3394,7 @@ function getValidFormInput(form: PaymentAccountForm, fieldId: PaymentAccountForm case PaymentAccountFormField.FieldId.ACCOUNT_ID: return "jdoe@no.com"; case PaymentAccountFormField.FieldId.ACCOUNT_NAME: - return "Form_" + form.getId() + " " + GenUtils.getUUID(); // TODO: rename to form.getPaymentMethodId() + return "Form_" + form.getId() + " " + moneroTs.GenUtils.getUUID(); // TODO: rename to form.getPaymentMethodId() case PaymentAccountFormField.FieldId.ACCOUNT_NR: return "12345678"; case PaymentAccountFormField.FieldId.ACCOUNT_OWNER: @@ -3503,7 +3495,7 @@ function getValidFormInput(form: PaymentAccountForm, fieldId: PaymentAccountForm return "asap plz"; case PaymentAccountFormField.FieldId.STATE: const country = HavenoUtils.getFormValue(form, PaymentAccountFormField.FieldId.COUNTRY); - return GenUtils.arrayContains(field.getRequiredForCountriesList(), country) ? "My state" : ""; + return moneroTs.GenUtils.arrayContains(field.getRequiredForCountriesList(), country) ? "My state" : ""; case PaymentAccountFormField.FieldId.TRADE_CURRENCIES: if (field.getComponent() === PaymentAccountFormField.Component.SELECT_ONE) { if (form.getId() === PaymentAccountForm.FormId.F2F) return "XAU"; @@ -3638,7 +3630,7 @@ function getInvalidFormInput(form: PaymentAccountForm, fieldId: PaymentAccountFo throw new Error("Special instructions have no invalid input"); case PaymentAccountFormField.FieldId.STATE: { const country = HavenoUtils.getFormValue(form, PaymentAccountFormField.FieldId.COUNTRY); - return GenUtils.arrayContains(field.getRequiredForCountriesList(), country) ? "" : "My state"; + return moneroTs.GenUtils.arrayContains(field.getRequiredForCountriesList(), country) ? "" : "My state"; } case PaymentAccountFormField.FieldId.TRADE_CURRENCIES: return "abc,def"; diff --git a/src/utils/HavenoUtils.ts b/src/utils/HavenoUtils.ts index 4745f4ce..964a0965 100644 --- a/src/utils/HavenoUtils.ts +++ b/src/utils/HavenoUtils.ts @@ -118,12 +118,11 @@ export default class HavenoUtils { /** * Convert XMR to atomic units. * - * @param {number|string} amountXmr - amount in XMR to convert to atomic units - * @return {BigInt} amount in atomic units + * @param {number | string} amountXmr - amount in XMR to convert to atomic units + * @return {bigint} amount in atomic units */ - static xmrToAtomicUnits(amountXmr: number|string): bigint { + static xmrToAtomicUnits(amountXmr: number | string): bigint { if (typeof amountXmr === "number") amountXmr = "" + amountXmr; - else if (typeof amountXmr !== "string") throw new Error("Must provide XMR amount as a string or js number to convert to atomic units"); let decimalDivisor = 1; let decimalIdx = amountXmr.indexOf('.'); if (decimalIdx > -1) { @@ -136,14 +135,13 @@ export default class HavenoUtils { /** * Convert atomic units to XMR. * - * @param {BigInt|string} amountAtomicUnits - amount in atomic units to convert to XMR + * @param {bigint | string} amountAtomicUnits - amount in atomic units to convert to XMR * @return {number} amount in XMR */ - static atomicUnitsToXmr(amountAtomicUnits: BigInt|string) { + static atomicUnitsToXmr(amountAtomicUnits: bigint | string) { if (typeof amountAtomicUnits === "string") amountAtomicUnits = BigInt(amountAtomicUnits); - else if (typeof amountAtomicUnits !== "bigint") throw new Error("Must provide atomic units as BigInt or string to convert to XMR"); - const quotient: bigint = amountAtomicUnits as bigint / HavenoUtils.AU_PER_XMR; - const remainder: bigint = amountAtomicUnits as bigint % HavenoUtils.AU_PER_XMR; + const quotient: bigint = amountAtomicUnits / HavenoUtils.AU_PER_XMR; + const remainder: bigint = amountAtomicUnits % HavenoUtils.AU_PER_XMR; return Number(quotient) + Number(remainder) / Number(HavenoUtils.AU_PER_XMR); } diff --git a/src/utils/TaskLooper.ts b/src/utils/TaskLooper.ts index 0e1c7ab8..ba7d871f 100644 --- a/src/utils/TaskLooper.ts +++ b/src/utils/TaskLooper.ts @@ -25,6 +25,7 @@ export default class TaskLooper { * @param {int} periodInMs the loop period in milliseconds */ start(periodInMs: number) { + if (periodInMs <= 0) throw new Error("Looper period must be greater than 0 ms"); if (this._isStarted) return; this._isStarted = true; this._runLoop(periodInMs); diff --git a/tsconfig.json b/tsconfig.json index 056693ab..fccfc12f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,8 +19,7 @@ "module": "commonjs", "moduleResolution": "node", "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "react-jsx" + "isolatedModules": true }, "include": ["src"], "exclude": ["node_modules", "**/*.test.ts"]