diff --git a/package-lock.json b/package-lock.json index 30c5668..92ea5a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,20 +41,19 @@ "assert": "2.0.0", "chai": "4.1.2", "coveralls": "3.0.2", - "eslint": "^8.1.0", - "eslint-config-prettier": "6.0.0", - "eslint-config-standard": "14.1.0", - "eslint-plugin-node": "9.1.0", - "eslint-plugin-prettier": "3.1.0", + "eslint": "7.17.0", + "eslint-config-prettier": "7.1.0", + "eslint-config-standard": "16.0.3", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "3.3.1", "eslint-plugin-standard": "4.0.0", "husky": "^4.3.8", "lodash.clonedeep": "4.5.0", "mocha": "9.1.3", "node-mocks-http": "1.7.0", "nyc": "15.1.0", - "prettier": "1.18.2", "semantic-release": "18.0.0", - "sinon": "7.3.2", + "sinon": "9.2.2", "standard": "^16.0.4" } }, @@ -331,34 +330,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/acorn": { - "version": "7.4.1", - "resolved": "http://94.130.170.209:4873/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/espree": { - "version": "7.3.1", - "resolved": "http://94.130.170.209:4873/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "12.4.0", "resolved": "http://94.130.170.209:4873/globals/-/globals-12.4.0.tgz", @@ -388,28 +359,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "http://94.130.170.209:4873/@humanwhocodes%2fconfig-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "http://94.130.170.209:4873/@humanwhocodes%2fobject-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1008,40 +957,54 @@ } }, "node_modules/@sinonjs/commons": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", - "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", + "version": "1.8.3", + "resolved": "http://94.130.170.209:4873/@sinonjs%2fcommons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, - "node_modules/@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "http://94.130.170.209:4873/@sinonjs%2ffake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/formatio": { + "version": "5.0.1", + "resolved": "http://94.130.170.209:4873/@sinonjs%2fformatio/-/formatio-5.0.1.tgz", + "integrity": "sha512-KaiQ5pBf1MpS09MuA0kp6KBQt2JUOQycqVG1NZXvzeaXe5LGFqAKueIS0bw4w0P9r7KuBSVdUk5QjXsUdu2CxQ==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" + "@sinonjs/samsam": "^5.0.2" } }, "node_modules/@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "version": "5.3.1", + "resolved": "http://94.130.170.209:4873/@sinonjs%2fsamsam/-/samsam-5.3.1.tgz", + "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "resolved": "http://94.130.170.209:4873/@sinonjs%2ftext-encoding/-/text-encoding-0.7.1.tgz", "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true + "dev": true, + "license": "(Unlicense OR Apache-2.0)" }, "node_modules/@tootallnate/once": { "version": "2.0.0", @@ -1200,6 +1163,7 @@ "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1443,12 +1407,6 @@ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" }, - "node_modules/array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "http://94.130.170.209:4873/array-ify/-/array-ify-1.0.0.tgz", @@ -2617,10 +2575,11 @@ "license": "ISC" }, "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "http://94.130.170.209:4873/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -2956,48 +2915,47 @@ } }, "node_modules/eslint": { - "version": "8.1.0", - "resolved": "http://94.130.170.209:4873/eslint/-/eslint-8.1.0.tgz", - "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", + "version": "7.17.0", + "resolved": "http://94.130.170.209:4873/eslint/-/eslint-7.17.0.tgz", + "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.3.2", + "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.2.0", "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash.merge": "^4.6.2", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.2.0", + "regexpp": "^3.1.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -3005,40 +2963,50 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "6.0.0", - "resolved": "http://94.130.170.209:4873/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", - "integrity": "sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA==", + "version": "7.1.0", + "resolved": "http://94.130.170.209:4873/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA==", "dev": true, "license": "MIT", - "dependencies": { - "get-stdin": "^6.0.0" - }, "bin": { - "eslint-config-prettier-check": "bin/cli.js" + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { - "eslint": ">=3.14.1" + "eslint": ">=7.0.0" } }, "node_modules/eslint-config-standard": { - "version": "14.1.0", - "resolved": "http://94.130.170.209:4873/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz", - "integrity": "sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA==", + "version": "16.0.3", + "resolved": "http://94.130.170.209:4873/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", + "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "peerDependencies": { - "eslint": ">=6.2.2", - "eslint-plugin-import": ">=2.18.0", - "eslint-plugin-node": ">=9.1.0", - "eslint-plugin-promise": ">=4.2.1", - "eslint-plugin-standard": ">=4.0.0" + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1 || ^5.0.0" } }, "node_modules/eslint-import-resolver-node": { @@ -3167,16 +3135,23 @@ } }, "node_modules/eslint-plugin-es": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", - "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", + "version": "3.0.1", + "resolved": "http://94.130.170.209:4873/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-utils": "^1.4.2", - "regexpp": "^2.0.1" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" }, "engines": { - "node": ">=6.5.0" + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, "node_modules/eslint-plugin-import": { @@ -3228,14 +3203,14 @@ "peer": true }, "node_modules/eslint-plugin-node": { - "version": "9.1.0", - "resolved": "http://94.130.170.209:4873/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz", - "integrity": "sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw==", + "version": "11.1.0", + "resolved": "http://94.130.170.209:4873/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "license": "MIT", "dependencies": { - "eslint-plugin-es": "^1.4.0", - "eslint-utils": "^1.3.1", + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", "ignore": "^5.1.1", "minimatch": "^3.0.4", "resolve": "^1.10.1", @@ -3249,18 +3224,19 @@ } }, "node_modules/eslint-plugin-node/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.1.9", + "resolved": "http://94.130.170.209:4873/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/eslint-plugin-prettier": { - "version": "3.1.0", - "resolved": "http://94.130.170.209:4873/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", - "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", + "version": "3.3.1", + "resolved": "http://94.130.170.209:4873/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", + "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3270,8 +3246,13 @@ "node": ">=6.0.0" }, "peerDependencies": { - "eslint": ">= 5.0.0", - "prettier": ">= 1.13.0" + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, "node_modules/eslint-plugin-promise": { @@ -3296,29 +3277,43 @@ } }, "node_modules/eslint-scope": { - "version": "6.0.0", - "resolved": "http://94.130.170.209:4873/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "version": "5.1.1", + "resolved": "http://94.130.170.209:4873/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "http://94.130.170.209:4873/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, "node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.1.0", + "resolved": "http://94.130.170.209:4873/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/eslint-visitor-keys": { @@ -3331,38 +3326,25 @@ } }, "node_modules/eslint/node_modules/@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "http://94.130.170.209:4873/@eslint%2feslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + "version": "0.2.2", + "resolved": "http://94.130.170.209:4873/@eslint%2feslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "http://94.130.170.209:4873/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/eslint/node_modules/ansi-styles": { @@ -3430,39 +3412,7 @@ "node": ">=6.0.0" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "http://94.130.170.209:4873/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "http://94.130.170.209:4873/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "http://94.130.170.209:4873/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", @@ -3472,37 +3422,14 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "http://94.130.170.209:4873/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "http://94.130.170.209:4873/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/globals": { - "version": "13.12.0", - "resolved": "http://94.130.170.209:4873/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "12.4.0", + "resolved": "http://94.130.170.209:4873/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "type-fest": "^0.8.1" }, "engines": { "node": ">=8" @@ -3521,39 +3448,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "http://94.130.170.209:4873/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/js-yaml/node_modules/argparse": { - "version": "2.0.1", - "resolved": "http://94.130.170.209:4873/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/eslint/node_modules/regexpp": { - "version": "3.2.0", - "resolved": "http://94.130.170.209:4873/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/eslint/node_modules/semver": { "version": "7.3.5", "resolved": "http://94.130.170.209:4873/semver/-/semver-7.3.5.tgz", @@ -3596,42 +3490,32 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "http://94.130.170.209:4873/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.0.0", - "resolved": "http://94.130.170.209:4873/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "version": "7.3.1", + "resolved": "http://94.130.170.209:4873/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.5.0", + "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" + "eslint-visitor-keys": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "http://94.130.170.209:4873/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "resolved": "http://94.130.170.209:4873/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=0.4.0" } }, "node_modules/esprima": { @@ -4114,15 +3998,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "http://94.130.170.209:4873/get-stream/-/get-stream-6.0.1.tgz", @@ -5556,10 +5431,11 @@ } }, "node_modules/just-extend": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.1.tgz", - "integrity": "sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA==", - "dev": true + "version": "4.2.1", + "resolved": "http://94.130.170.209:4873/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true, + "license": "MIT" }, "node_modules/keccak": { "version": "3.0.1", @@ -5751,6 +5627,13 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "http://94.130.170.209:4873/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "http://94.130.170.209:4873/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", @@ -5772,13 +5655,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "http://94.130.170.209:4873/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -5916,12 +5792,6 @@ "triple-beam": "^1.3.0" } }, - "node_modules/lolex": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", - "dev": true - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "http://94.130.170.209:4873/loose-envify/-/loose-envify-1.4.0.tgz", @@ -6848,27 +6718,19 @@ "license": "MIT" }, "node_modules/nise": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", + "version": "4.1.0", + "resolved": "http://94.130.170.209:4873/nise/-/nise-4.1.0.tgz", + "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/formatio": "^3.2.1", + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^5.0.1", "path-to-regexp": "^1.7.0" } }, - "node_modules/nise/node_modules/lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", @@ -10351,18 +10213,20 @@ }, "node_modules/path-to-regexp": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "resolved": "http://94.130.170.209:4873/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, + "license": "MIT", "dependencies": { "isarray": "0.0.1" } }, "node_modules/path-to-regexp/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": "http://94.130.170.209:4873/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "3.0.0", @@ -10638,6 +10502,7 @@ "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -11011,12 +10876,16 @@ } }, "node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.2.0", + "resolved": "http://94.130.170.209:4873/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.5.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/registry-auth-token": { @@ -11622,19 +11491,46 @@ "dev": true }, "node_modules/sinon": { - "version": "7.3.2", - "resolved": "http://94.130.170.209:4873/sinon/-/sinon-7.3.2.tgz", - "integrity": "sha512-thErC1z64BeyGiPvF8aoSg0LEnptSaWE7YhdWWbWXgelOyThent7uKOnnEh9zBxDbKixtr5dEko+ws1sZMuFMA==", + "version": "9.2.2", + "resolved": "http://94.130.170.209:4873/sinon/-/sinon-9.2.2.tgz", + "integrity": "sha512-9Owi+RisvCZpB0bdOVFfL314I6I4YoRlz6Isi4+fr8q8YQsDPoCe5UnmNtKHRThX3negz2bXHWIuiPa42vM8EQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^1.4.0", - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.1", - "diff": "^3.5.0", - "lolex": "^4.0.1", - "nise": "^1.4.10", - "supports-color": "^5.5.0" + "@sinonjs/commons": "^1.8.1", + "@sinonjs/fake-timers": "^6.0.1", + "@sinonjs/formatio": "^5.0.1", + "@sinonjs/samsam": "^5.3.0", + "diff": "^4.0.2", + "nise": "^4.0.4", + "supports-color": "^7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://94.130.170.209:4873/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://94.130.170.209:4873/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/slash": { @@ -11890,19 +11786,6 @@ "node": ">=10.12.0" } }, - "node_modules/standard/node_modules/acorn": { - "version": "7.4.1", - "resolved": "http://94.130.170.209:4873/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/standard/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "http://94.130.170.209:4873/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12011,33 +11894,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/standard/node_modules/eslint-config-standard": { - "version": "16.0.3", - "resolved": "http://94.130.170.209:4873/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0" - } - }, "node_modules/standard/node_modules/eslint-config-standard-jsx": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", @@ -12137,57 +11993,6 @@ "node": ">=4" } }, - "node_modules/standard/node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "http://94.130.170.209:4873/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/standard/node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "http://94.130.170.209:4873/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/standard/node_modules/eslint-plugin-node/node_modules/ignore": { - "version": "5.1.8", - "resolved": "http://94.130.170.209:4873/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/standard/node_modules/eslint-plugin-promise": { "version": "5.1.1", "resolved": "http://94.130.170.209:4873/eslint-plugin-promise/-/eslint-plugin-promise-5.1.1.tgz", @@ -12243,46 +12048,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/standard/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "http://94.130.170.209:4873/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/standard/node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "http://94.130.170.209:4873/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/standard/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "http://94.130.170.209:4873/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/standard/node_modules/eslint/node_modules/doctrine": { "version": "3.0.0", "resolved": "http://94.130.170.209:4873/doctrine/-/doctrine-3.0.0.tgz", @@ -12322,21 +12087,6 @@ "node": ">=10" } }, - "node_modules/standard/node_modules/espree": { - "version": "7.3.1", - "resolved": "http://94.130.170.209:4873/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, "node_modules/standard/node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -12482,19 +12232,6 @@ "node": ">=6" } }, - "node_modules/standard/node_modules/regexpp": { - "version": "3.2.0", - "resolved": "http://94.130.170.209:4873/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/standard/node_modules/standard-engine": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", @@ -13888,23 +13625,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "http://94.130.170.209:4873/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "http://94.130.170.209:4873/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - } - }, "globals": { "version": "12.4.0", "resolved": "http://94.130.170.209:4873/globals/-/globals-12.4.0.tgz", @@ -13922,23 +13642,6 @@ } } }, - "@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "http://94.130.170.209:4873/@humanwhocodes%2fconfig-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "http://94.130.170.209:4873/@humanwhocodes%2fobject-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -14398,38 +14101,47 @@ } }, "@sinonjs/commons": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", - "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", + "version": "1.8.3", + "resolved": "http://94.130.170.209:4873/@sinonjs%2fcommons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "http://94.130.170.209:4873/@sinonjs%2ffake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "version": "5.0.1", + "resolved": "http://94.130.170.209:4873/@sinonjs%2fformatio/-/formatio-5.0.1.tgz", + "integrity": "sha512-KaiQ5pBf1MpS09MuA0kp6KBQt2JUOQycqVG1NZXvzeaXe5LGFqAKueIS0bw4w0P9r7KuBSVdUk5QjXsUdu2CxQ==", "dev": true, "requires": { "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" + "@sinonjs/samsam": "^5.0.2" } }, "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "version": "5.3.1", + "resolved": "http://94.130.170.209:4873/@sinonjs%2fsamsam/-/samsam-5.3.1.tgz", + "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", "dev": true, "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, "@sinonjs/text-encoding": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "resolved": "http://94.130.170.209:4873/@sinonjs%2ftext-encoding/-/text-encoding-0.7.1.tgz", "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, @@ -14573,7 +14285,8 @@ "version": "8.5.0", "resolved": "http://94.130.170.209:4873/acorn/-/acorn-8.5.0.tgz", "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true + "dev": true, + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -14757,12 +14470,6 @@ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, "array-ify": { "version": "1.0.0", "resolved": "http://94.130.170.209:4873/array-ify/-/array-ify-1.0.0.tgz", @@ -15697,9 +15404,9 @@ "dev": true }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "http://94.130.170.209:4873/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "dir-glob": { @@ -15985,78 +15692,66 @@ "dev": true }, "eslint": { - "version": "8.1.0", - "resolved": "http://94.130.170.209:4873/eslint/-/eslint-8.1.0.tgz", - "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", + "version": "7.17.0", + "resolved": "http://94.130.170.209:4873/eslint/-/eslint-7.17.0.tgz", + "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.3.2", + "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.2.0", "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash.merge": "^4.6.2", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.2.0", + "regexpp": "^3.1.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { "@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "http://94.130.170.209:4873/@eslint%2feslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + "version": "0.2.2", + "resolved": "http://94.130.170.209:4873/@eslint%2feslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "js-yaml": { - "version": "3.14.1", - "resolved": "http://94.130.170.209:4873/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } } }, "ansi-styles": { @@ -16102,51 +15797,19 @@ "esutils": "^2.0.2" } }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "http://94.130.170.209:4873/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "http://94.130.170.209:4873/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "http://94.130.170.209:4873/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "http://94.130.170.209:4873/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "version": "2.1.0", + "resolved": "http://94.130.170.209:4873/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, - "glob-parent": { - "version": "6.0.2", - "resolved": "http://94.130.170.209:4873/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, "globals": { - "version": "13.12.0", - "resolved": "http://94.130.170.209:4873/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "12.4.0", + "resolved": "http://94.130.170.209:4873/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "type-fest": "^0.8.1" } }, "has-flag": { @@ -16155,29 +15818,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "http://94.130.170.209:4873/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "http://94.130.170.209:4873/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - } - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "http://94.130.170.209:4873/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "semver": { "version": "7.3.5", "resolved": "http://94.130.170.209:4873/semver/-/semver-7.3.5.tgz", @@ -16201,28 +15841,20 @@ "requires": { "has-flag": "^4.0.0" } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "http://94.130.170.209:4873/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, "eslint-config-prettier": { - "version": "6.0.0", - "resolved": "http://94.130.170.209:4873/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", - "integrity": "sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA==", + "version": "7.1.0", + "resolved": "http://94.130.170.209:4873/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA==", "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } + "requires": {} }, "eslint-config-standard": { - "version": "14.1.0", - "resolved": "http://94.130.170.209:4873/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz", - "integrity": "sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA==", + "version": "16.0.3", + "resolved": "http://94.130.170.209:4873/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", + "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", "dev": true, "requires": {} }, @@ -16328,13 +15960,13 @@ } }, "eslint-plugin-es": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", - "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", + "version": "3.0.1", + "resolved": "http://94.130.170.209:4873/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "requires": { - "eslint-utils": "^1.4.2", - "regexpp": "^2.0.1" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" } }, "eslint-plugin-import": { @@ -16379,13 +16011,13 @@ } }, "eslint-plugin-node": { - "version": "9.1.0", - "resolved": "http://94.130.170.209:4873/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz", - "integrity": "sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw==", + "version": "11.1.0", + "resolved": "http://94.130.170.209:4873/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "requires": { - "eslint-plugin-es": "^1.4.0", - "eslint-utils": "^1.3.1", + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", "ignore": "^5.1.1", "minimatch": "^3.0.4", "resolve": "^1.10.1", @@ -16393,17 +16025,17 @@ }, "dependencies": { "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.1.9", + "resolved": "http://94.130.170.209:4873/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true } } }, "eslint-plugin-prettier": { - "version": "3.1.0", - "resolved": "http://94.130.170.209:4873/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", - "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", + "version": "3.3.1", + "resolved": "http://94.130.170.209:4873/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", + "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -16424,19 +16056,27 @@ "requires": {} }, "eslint-scope": { - "version": "6.0.0", - "resolved": "http://94.130.170.209:4873/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "version": "5.1.1", + "resolved": "http://94.130.170.209:4873/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "http://94.130.170.209:4873/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "2.1.0", + "resolved": "http://94.130.170.209:4873/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -16449,20 +16089,20 @@ "dev": true }, "espree": { - "version": "9.0.0", - "resolved": "http://94.130.170.209:4873/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "version": "7.3.1", + "resolved": "http://94.130.170.209:4873/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^8.5.0", + "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" + "eslint-visitor-keys": "^1.3.0" }, "dependencies": { - "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "http://94.130.170.209:4873/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "acorn": { + "version": "7.4.1", + "resolved": "http://94.130.170.209:4873/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true } } @@ -16834,12 +16474,6 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, "get-stream": { "version": "6.0.1", "resolved": "http://94.130.170.209:4873/get-stream/-/get-stream-6.0.1.tgz", @@ -17873,9 +17507,9 @@ } }, "just-extend": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.1.tgz", - "integrity": "sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA==", + "version": "4.2.1", + "resolved": "http://94.130.170.209:4873/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "keccak": { @@ -18038,6 +17672,12 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "http://94.130.170.209:4873/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, "lodash.ismatch": { "version": "4.4.0", "resolved": "http://94.130.170.209:4873/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", @@ -18056,12 +17696,6 @@ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "http://94.130.170.209:4873/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, "lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -18162,12 +17796,6 @@ "triple-beam": "^1.3.0" } }, - "lolex": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", - "dev": true - }, "loose-envify": { "version": "1.4.0", "resolved": "http://94.130.170.209:4873/loose-envify/-/loose-envify-1.4.0.tgz", @@ -18816,27 +18444,16 @@ "dev": true }, "nise": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", + "version": "4.1.0", + "resolved": "http://94.130.170.209:4873/nise/-/nise-4.1.0.tgz", + "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", "dev": true, "requires": { - "@sinonjs/formatio": "^3.2.1", + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^5.0.1", "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - } } }, "node-addon-api": { @@ -21344,7 +20961,7 @@ }, "path-to-regexp": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "resolved": "http://94.130.170.209:4873/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "requires": { @@ -21353,7 +20970,7 @@ "dependencies": { "isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": "http://94.130.170.209:4873/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true } @@ -21558,7 +21175,8 @@ "version": "1.18.2", "resolved": "http://94.130.170.209:4873/prettier/-/prettier-1.18.2.tgz", "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", - "dev": true + "dev": true, + "peer": true }, "prettier-linter-helpers": { "version": "1.0.0", @@ -21827,9 +21445,9 @@ } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.2.0", + "resolved": "http://94.130.170.209:4873/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "registry-auth-token": { @@ -22312,18 +21930,35 @@ } }, "sinon": { - "version": "7.3.2", - "resolved": "http://94.130.170.209:4873/sinon/-/sinon-7.3.2.tgz", - "integrity": "sha512-thErC1z64BeyGiPvF8aoSg0LEnptSaWE7YhdWWbWXgelOyThent7uKOnnEh9zBxDbKixtr5dEko+ws1sZMuFMA==", + "version": "9.2.2", + "resolved": "http://94.130.170.209:4873/sinon/-/sinon-9.2.2.tgz", + "integrity": "sha512-9Owi+RisvCZpB0bdOVFfL314I6I4YoRlz6Isi4+fr8q8YQsDPoCe5UnmNtKHRThX3negz2bXHWIuiPa42vM8EQ==", "dev": true, "requires": { - "@sinonjs/commons": "^1.4.0", - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.1", - "diff": "^3.5.0", - "lolex": "^4.0.1", - "nise": "^1.4.10", - "supports-color": "^5.5.0" + "@sinonjs/commons": "^1.8.1", + "@sinonjs/fake-timers": "^6.0.1", + "@sinonjs/formatio": "^5.0.1", + "@sinonjs/samsam": "^5.3.0", + "diff": "^4.0.2", + "nise": "^4.0.4", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "http://94.130.170.209:4873/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "http://94.130.170.209:4873/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "slash": { @@ -22519,12 +22154,6 @@ "standard-engine": "^14.0.1" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "http://94.130.170.209:4873/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "http://94.130.170.209:4873/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -22630,13 +22259,6 @@ } } }, - "eslint-config-standard": { - "version": "16.0.3", - "resolved": "http://94.130.170.209:4873/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", - "dev": true, - "requires": {} - }, "eslint-config-standard-jsx": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", @@ -22714,38 +22336,6 @@ } } }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "http://94.130.170.209:4873/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "dependencies": { - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "http://94.130.170.209:4873/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "http://94.130.170.209:4873/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } - } - }, "eslint-plugin-promise": { "version": "5.1.1", "resolved": "http://94.130.170.209:4873/eslint-plugin-promise/-/eslint-plugin-promise-5.1.1.tgz", @@ -22786,44 +22376,6 @@ } } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "http://94.130.170.209:4873/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "http://94.130.170.209:4873/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "http://94.130.170.209:4873/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "espree": { - "version": "7.3.1", - "resolved": "http://94.130.170.209:4873/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - } - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -22928,12 +22480,6 @@ "load-json-file": "^5.2.0" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "http://94.130.170.209:4873/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "standard-engine": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", diff --git a/package.json b/package.json index e8b6bbf..4e08577 100644 --- a/package.json +++ b/package.json @@ -68,20 +68,19 @@ "assert": "2.0.0", "chai": "4.1.2", "coveralls": "3.0.2", - "eslint": "^8.1.0", - "eslint-config-prettier": "6.0.0", - "eslint-config-standard": "14.1.0", - "eslint-plugin-node": "9.1.0", - "eslint-plugin-prettier": "3.1.0", + "eslint": "7.17.0", + "eslint-config-prettier": "7.1.0", + "eslint-config-standard": "16.0.3", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "3.3.1", "eslint-plugin-standard": "4.0.0", "husky": "^4.3.8", "lodash.clonedeep": "4.5.0", "mocha": "9.1.3", "node-mocks-http": "1.7.0", "nyc": "15.1.0", - "prettier": "1.18.2", "semantic-release": "18.0.0", - "sinon": "7.3.2", + "sinon": "9.2.2", "standard": "^16.0.4" }, "apidoc": { diff --git a/src/transaction.js b/src/transaction.js index acf0845..95527b2 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -225,8 +225,8 @@ class Transaction { } /** - * @api Transaction.get2() get2() - * @apiName get2 + * @api Transaction.get3() get3() + * @apiName get3 * @apiGroup Transaction * @apiDescription * Returns an object of transaction data, including addresses for input UTXOs. @@ -248,7 +248,7 @@ class Transaction { * } * })() */ - async get2 (txid) { + async get3 (txid) { try { if (typeof txid !== 'string') { throw new Error( @@ -256,6 +256,7 @@ class Transaction { ) } + // Get TX data const txDetails = await this.rawTransaction.getTxData(txid) // console.log(`txDetails: ${JSON.stringify(txDetails, null, 2)}`) @@ -264,35 +265,61 @@ class Transaction { txDetails.blockhash ) txDetails.blockheight = blockHeader.height + // console.log(`blockHeader: ${JSON.stringify(blockHeader, null, 2)}`) - // First get the token information for the output. If that fails, then - // this is not an SLP transaction, and this method can return false. - let outTokenData - try { - outTokenData = await this.slpUtils.decodeOpReturn(txid) - // console.log(`outTokenData: ${JSON.stringify(outTokenData, null, 2)}`) + // Set default as not an SLP tx + txDetails.isSlpTx = false - // Get Genesis data for this token. - const genesisData = await this.slpUtils.decodeOpReturn( - outTokenData.tokenId - // decodeOpReturnCache - // usrObj // pass user data when making an internal call. - ) - // console.log(`genesisData: ${JSON.stringify(genesisData, null, 2)}`) + // Get Token Data + const txTokenData = await this.getTokenInfo(txid) + // console.log(`txTokenData: ${JSON.stringify(txTokenData, null, 2)}`) - // Add token information to the tx details object. - txDetails.tokenTxType = outTokenData.txType - txDetails.tokenId = outTokenData.tokenId - txDetails.tokenTicker = genesisData.ticker - txDetails.tokenName = genesisData.name - txDetails.tokenDecimals = genesisData.decimals - txDetails.tokenUri = genesisData.documentUri - txDetails.tokenDocHash = genesisData.documentHash + // If not a token, return the tx data. Processing is complete. + if (!txTokenData) return txDetails - // Add the token quantity to each output. - for (let i = 0; i < outTokenData.amounts.length; i++) { - const rawQty = outTokenData.amounts[i] - // const realQty = Number(rawQty) / Math.pow(10, txDetails.tokenDecimals) + // Mark TX as an SLP tx. This does not mean it's valid, it just means + // the OP_RETURN passes a basic check. + txDetails.isSlpTx = true + + // Get Genesis data + const genesisData = await this.getTokenInfo(txTokenData.tokenId) + // console.log(`genesisData: ${JSON.stringify(genesisData, null, 2)}`) + + // Add token information to the tx details object. + txDetails.tokenTxType = txTokenData.txType + txDetails.tokenId = txTokenData.tokenId + txDetails.tokenTicker = genesisData.ticker + txDetails.tokenName = genesisData.name + txDetails.tokenDecimals = genesisData.decimals + txDetails.tokenUri = genesisData.documentUri + txDetails.tokenDocHash = genesisData.documentHash + // console.log(`txDetails before processing input and outputs: ${JSON.stringify(txDetails, null, 2)}`) + + // Process TX Outputs + // Add the token quantity to each output. + // 'i' starts at 1, because vout[0] is the OP_RETURN + for (let i = 0; i < txDetails.vout.length; i++) { + const thisVout = txDetails.vout[i] + if (txTokenData.txType === 'SEND') { + // console.log( + // `output txTokenData: ${JSON.stringify(txTokenData, null, 2)}` + // ) + + // First output is OP_RETURN, so tokenQty is null. + if (i === 0) { + thisVout.tokenQty = null + thisVout.tokenQtyStr = null + continue + } + + // Non SLP outputs. + if (i > txTokenData.amounts.length) { + thisVout.tokenQty = null + thisVout.tokenQtyStr = null + continue + } + + const rawQty = txTokenData.amounts[i - 1] // Calculate the real quantity using a BigNumber, then convert it to a // floating point number. @@ -302,110 +329,179 @@ class Transaction { realQty = realQty.toString() // realQty = parseFloat(realQty) - txDetails.vout[i + 1].tokenQtyStr = realQty - txDetails.vout[i + 1].tokenQty = parseFloat(realQty) - } + txDetails.vout[i].tokenQtyStr = realQty + txDetails.vout[i].tokenQty = parseFloat(realQty) - // Add tokenQty = null to any outputs that don't have a value. - for (let i = 0; i < txDetails.vout.length; i++) { - const thisVout = txDetails.vout[i] + // console.log( + // `thisVout ${i}: ${JSON.stringify(txDetails.vout[i], null, 2)}` + // ) + } else if ( + txTokenData.txType === 'GENESIS' || + txTokenData.txType === 'MINT' + ) { + // console.log( + // `output txTokenData: ${JSON.stringify(txTokenData, null, 2)}` + // ) - if (!thisVout.tokenQty && thisVout.tokenQty !== 0) { - thisVout.tokenQty = null + let tokenQty = 0 // Default value + + // Only vout[1] of a Genesis or Mint transaction represents the tokens. + // Any other outputs in that transaction are normal BCH UTXOs. + if (i === 1) { + tokenQty = txTokenData.qty + // console.log(`tokenQty: ${JSON.stringify(tokenQty, null, 2)}`) + + // Calculate the real quantity using a BigNumber, then convert it to a + // floating point number. + let realQty = new BigNumber(tokenQty).dividedBy( + 10 ** parseInt(txDetails.tokenDecimals) + ) + realQty = realQty.toString() + // realQty = parseFloat(realQty) + + thisVout.tokenQtyStr = realQty + thisVout.tokenQty = parseFloat(realQty) + // console.log(`thisVout[${i}]: ${JSON.stringify(thisVout, null, 2)}`) + } else if (i === txTokenData.mintBatonVout) { + // Optional Mint baton + thisVout.tokenQtyStr = '0' + thisVout.tokenQty = 0 + thisVout.isMintBaton = true + } else { + thisVout.tokenQtyStr = '0' + thisVout.tokenQty = 0 } + } else { + throw new Error('Unknown SLP TX type for TX') + } + } + + // Process TX inputs + for (let i = 0; i < txDetails.vin.length; i++) { + const thisVin = txDetails.vin[i] + // console.log(`thisVin[${i}]: ${JSON.stringify(thisVin, null, 2)}`) + + const vinTokenData = await this.getTokenInfo(thisVin.txid) + // console.log( + // `vinTokenData ${i}: ${JSON.stringify(vinTokenData, null, 2)}` + // ) + + // Corner case: Ensure the token ID is the same. + const vinTokenIdIsTheSame = vinTokenData.tokenId === txDetails.tokenId + + // If the input is not a token input, or if the tokenID is not the same, + // then mark the token output as null. + if (!vinTokenData || !vinTokenIdIsTheSame) { + thisVin.tokenQty = 0 + thisVin.tokenQtyStr = '0' + thisVin.tokenId = null + continue } - // Loop through each input and retrieve the token data. - for (let i = 0; i < txDetails.vin.length; i++) { - const thisVin = txDetails.vin[i] - // console.log(`thisVin: ${JSON.stringify(thisVin, null, 2)}`) + if (vinTokenData.txType === 'SEND') { + // console.log( + // `SEND vinTokenData ${i}: ${JSON.stringify(vinTokenData, null, 2)}` + // ) - try { - // If decodeOpReturn() throws an error, then this input is not - // from an SLP transaction and can be ignored. - const inTokenData = await this.slpUtils.decodeOpReturn(thisVin.txid) - // console.log( - // `vin[${i}] tokenData: ${JSON.stringify(inTokenData, null, 2)}` - // ) + const tokenQty = vinTokenData.amounts[thisVin.vout - 1] + // console.log(`tokenQty: ${JSON.stringify(tokenQty, null, 2)}`) - let tokenQty = 0 + // Calculate the real quantity using a BigNumber, then convert it to a + // floating point number. + let realQty = new BigNumber(tokenQty).dividedBy( + 10 ** parseInt(txDetails.tokenDecimals) + ) + realQty = realQty.toString() + // realQty = parseFloat(realQty) - if (inTokenData.txType === 'SEND') { - // Get the appropriate vout token amount. This may throw an error, - // which means this Vin is not actually a token UTXO, it was just - // associated with a previous token TX. - tokenQty = inTokenData.amounts[thisVin.vout - 1] - // console.log(`tokenQty: ${JSON.stringify(tokenQty, null, 2)}`) + thisVin.tokenQtyStr = realQty + thisVin.tokenQty = parseFloat(realQty) + thisVin.tokenId = vinTokenData.tokenId + } else if (vinTokenData.txType === 'MINT') { + // console.log( + // `MINT vinTokenData ${i}: ${JSON.stringify(vinTokenData, null, 2)}` + // ) - // - } else if (inTokenData.txType === 'GENESIS') { - // Only vout[1] of a Genesis transaction represents the tokens. - // Any other outputs in that transaction are normal BCH UTXOs. - if (thisVin.vout === 1) { - tokenQty = inTokenData.qty - // console.log(`tokenQty: ${JSON.stringify(tokenQty, null, 2)}`) - } - } else if (inTokenData.txType === 'MINT') { - // vout=1 (second output) recieves the newly minted tokens. - if (thisVin.vout === 1) { - tokenQty = inTokenData.qty - } else { - tokenQty = null - } + let tokenQty = 0 // Default value - // - } else { - console.log( - 'Unexpected code path in Transaction.get2(). What is the txType?' - ) - console.log(inTokenData) - throw new Error('Unexpected code path') - } + // Only vout[1] of a Genesis transaction represents the tokens. + // Any other outputs in that transaction are normal BCH UTXOs. + if (thisVin.vout === 1) { + tokenQty = vinTokenData.qty + // console.log(`tokenQty: ${JSON.stringify(tokenQty, null, 2)}`) - if (tokenQty) { - // Calculate the real quantity using a BigNumber, then convert it to a - // floating point number. - let realQty = new BigNumber(tokenQty).dividedBy( - 10 ** parseInt(txDetails.tokenDecimals) - ) - realQty = realQty.toString() - // realQty = parseFloat(realQty) + // Calculate the real quantity using a BigNumber, then convert it to a + // floating point number. + let realQty = new BigNumber(tokenQty).dividedBy( + 10 ** parseInt(txDetails.tokenDecimals) + ) + realQty = realQty.toString() + // realQty = parseFloat(realQty) - thisVin.tokenQtyStr = realQty - thisVin.tokenQty = parseFloat(realQty) - // txDetails.vin[i].tokenQty = tokenQty - - // Add token ID to input - thisVin.tokenId = inTokenData.tokenId - } else { - thisVin.tokenQty = null - thisVin.tokenQtyStr = null - } - } catch (err) { - // If decodeOpReturn() throws an error, then this input is not - // from an SLP transaction and can be ignored. - // thisVin.tokenQty = null - thisVin.tokenQty = null - thisVin.tokenQtyStr = null - continue + thisVin.tokenQtyStr = realQty + thisVin.tokenQty = parseFloat(realQty) + thisVin.tokenId = vinTokenData.tokenId + } else if (thisVin.vout === vinTokenData.mintBatonVout) { + // Optional Mint baton + thisVin.tokenQtyStr = '0' + thisVin.tokenQty = 0 + thisVin.tokenId = vinTokenData.tokenId + thisVin.isMintBaton = true + } else { + thisVin.tokenQtyStr = '0' + thisVin.tokenQty = 0 + thisVin.tokenId = null } - } - } catch (err) { - // console.log('Error: ', err) + } else if (vinTokenData.txType === 'GENESIS') { + // console.log( + // `GENESIS vinTokenData ${i}: ${JSON.stringify( + // vinTokenData, + // null, + // 2 + // )}` + // ) - // This case handles rate limit errors. - if (err.response && err.response.data && err.response.data.error) { - throw new Error(err.response.data.error) - } + let tokenQty = 0 // Default value - // If decoding the op_return fails, then it's not an SLP transaction, - // and the non-hyrated TX details can be returned. - return txDetails + // Only vout[1] of a Genesis transaction represents the tokens. + // Any other outputs in that transaction are normal BCH UTXOs. + if (thisVin.vout === 1) { + tokenQty = vinTokenData.qty + // console.log(`tokenQty: ${JSON.stringify(tokenQty, null, 2)}`) + + // Calculate the real quantity using a BigNumber, then convert it to a + // floating point number. + let realQty = new BigNumber(tokenQty).dividedBy( + 10 ** parseInt(txDetails.tokenDecimals) + ) + realQty = realQty.toString() + // realQty = parseFloat(realQty) + + thisVin.tokenQtyStr = realQty + thisVin.tokenQty = parseFloat(realQty) + thisVin.tokenId = vinTokenData.tokenId + } else if (thisVin.vout === vinTokenData.mintBatonVout) { + // Optional Mint baton + thisVin.tokenQtyStr = '0' + thisVin.tokenQty = 0 + thisVin.tokenId = vinTokenData.tokenId + thisVin.isMintBaton = true + } else { + thisVin.tokenQtyStr = '0' + thisVin.tokenQty = 0 + thisVin.tokenId = null + } + } else { + console.log( + `Unknown vinTokenData: ${JSON.stringify(vinTokenData, null, 2)}` + ) + throw new Error('Unknown token type in input') + } } return txDetails } catch (err) { - // console.error('Error in transactions.js/get(): ', err) + console.error('Error in get3()') // This case handles rate limit errors. if (err.response && err.response.data && err.response.data.error) { @@ -416,6 +512,17 @@ class Transaction { throw err } } + + // A wrapper for decodeOpReturn(). Returns false if txid is not an SLP tx. + // Returns the token data if the txid is an SLP tx. + async getTokenInfo (txid) { + try { + const tokenData = await this.slpUtils.decodeOpReturn(txid) + return tokenData + } catch (err) { + return false + } + } } module.exports = Transaction diff --git a/test/unit/fixtures/transaction-mock.js b/test/unit/fixtures/transaction-mock.js index 03bb852..fa2523c 100644 --- a/test/unit/fixtures/transaction-mock.js +++ b/test/unit/fixtures/transaction-mock.js @@ -277,8 +277,10 @@ const mintTestInputTx = { txid: '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8', vout: 1, scriptSig: { - asm: '3045022100e3d5f9a48f9aa1cf7e9ed1992e0281e7300b734ba0e4bd5bb9265b2be60bd71002200ccde53ce7ea9da9df3e834f234f3bea65c2e58c96f8436f93333fd8946a1db2[ALL|FORKID] 02056220984cc2cf5261a27d4f66d31c9ef601a688ca1a5ab81e55b6f0d311be74', - hex: '483045022100e3d5f9a48f9aa1cf7e9ed1992e0281e7300b734ba0e4bd5bb9265b2be60bd71002200ccde53ce7ea9da9df3e834f234f3bea65c2e58c96f8436f93333fd8946a1db2412102056220984cc2cf5261a27d4f66d31c9ef601a688ca1a5ab81e55b6f0d311be74' + asm: + '3045022100e3d5f9a48f9aa1cf7e9ed1992e0281e7300b734ba0e4bd5bb9265b2be60bd71002200ccde53ce7ea9da9df3e834f234f3bea65c2e58c96f8436f93333fd8946a1db2[ALL|FORKID] 02056220984cc2cf5261a27d4f66d31c9ef601a688ca1a5ab81e55b6f0d311be74', + hex: + '483045022100e3d5f9a48f9aa1cf7e9ed1992e0281e7300b734ba0e4bd5bb9265b2be60bd71002200ccde53ce7ea9da9df3e834f234f3bea65c2e58c96f8436f93333fd8946a1db2412102056220984cc2cf5261a27d4f66d31c9ef601a688ca1a5ab81e55b6f0d311be74' }, sequence: 4294967294, address: 'bitcoincash:qpaf9wltgmpjlg2vxwwu7zdw5y4z7m277ckxn8cufl', @@ -290,8 +292,10 @@ const mintTestInputTx = { txid: 'ee9d3cf5153599c134147e3fac9844c68e216843f4452a1ce15a29452af6db34', vout: 1, scriptSig: { - asm: '3045022100bb90d52be9b568f643fdb1a302e9f063be27a9f914e2a6b192cbabf2cbdeaf9302203c275fc8d1b82390bc1726390d361c5266056bddd54dec23efa207c79eacea4a[ALL|FORKID] 024146cfcd0c02e99d6451dc48ad0f97114aeda18fe55c52a10bfc0490f314e6a2', - hex: '483045022100bb90d52be9b568f643fdb1a302e9f063be27a9f914e2a6b192cbabf2cbdeaf9302203c275fc8d1b82390bc1726390d361c5266056bddd54dec23efa207c79eacea4a4121024146cfcd0c02e99d6451dc48ad0f97114aeda18fe55c52a10bfc0490f314e6a2' + asm: + '3045022100bb90d52be9b568f643fdb1a302e9f063be27a9f914e2a6b192cbabf2cbdeaf9302203c275fc8d1b82390bc1726390d361c5266056bddd54dec23efa207c79eacea4a[ALL|FORKID] 024146cfcd0c02e99d6451dc48ad0f97114aeda18fe55c52a10bfc0490f314e6a2', + hex: + '483045022100bb90d52be9b568f643fdb1a302e9f063be27a9f914e2a6b192cbabf2cbdeaf9302203c275fc8d1b82390bc1726390d361c5266056bddd54dec23efa207c79eacea4a4121024146cfcd0c02e99d6451dc48ad0f97114aeda18fe55c52a10bfc0490f314e6a2' }, sequence: 4294967294, address: 'bitcoincash:qqf89zzwd0fqc3npkks997r5l7dpfjf9kgx2rqu500', @@ -303,8 +307,10 @@ const mintTestInputTx = { txid: 'ee9d3cf5153599c134147e3fac9844c68e216843f4452a1ce15a29452af6db34', vout: 3, scriptSig: { - asm: '3044022029ab770c249f467b40bb90410429f6d657f9be299baa19a6838d04d972436b450220143660297e8e836bc16d317649fad8c310bdadb4fb61d4e9f6ba11203abe5dae[ALL|FORKID] 02eed4ac9dda3405d9b1ccbbf09f8056f3e7c615924274bd5643238b543d0a1d56', - hex: '473044022029ab770c249f467b40bb90410429f6d657f9be299baa19a6838d04d972436b450220143660297e8e836bc16d317649fad8c310bdadb4fb61d4e9f6ba11203abe5dae412102eed4ac9dda3405d9b1ccbbf09f8056f3e7c615924274bd5643238b543d0a1d56' + asm: + '3044022029ab770c249f467b40bb90410429f6d657f9be299baa19a6838d04d972436b450220143660297e8e836bc16d317649fad8c310bdadb4fb61d4e9f6ba11203abe5dae[ALL|FORKID] 02eed4ac9dda3405d9b1ccbbf09f8056f3e7c615924274bd5643238b543d0a1d56', + hex: + '473044022029ab770c249f467b40bb90410429f6d657f9be299baa19a6838d04d972436b450220143660297e8e836bc16d317649fad8c310bdadb4fb61d4e9f6ba11203abe5dae412102eed4ac9dda3405d9b1ccbbf09f8056f3e7c615924274bd5643238b543d0a1d56' }, sequence: 4294967294, address: 'bitcoincash:qqt30r33k0jx3sxe34tmupaujpaljnglmvqgrrfp2x', @@ -318,8 +324,10 @@ const mintTestInputTx = { value: 0, n: 0, scriptPubKey: { - asm: 'OP_RETURN 5262419 1 1145980243 938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8 0000000103907f11', - hex: '6a04534c500001010453454e4420938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8080000000103907f11', + asm: + 'OP_RETURN 5262419 1 1145980243 938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8 0000000103907f11', + hex: + '6a04534c500001010453454e4420938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8080000000103907f11', type: 'nulldata' }, tokenQty: null @@ -328,13 +336,12 @@ const mintTestInputTx = { value: 0.00000546, n: 1, scriptPubKey: { - asm: 'OP_DUP OP_HASH160 059775ff94f65c04e8a6847e74eb9809d8cd779b OP_EQUALVERIFY OP_CHECKSIG', + asm: + 'OP_DUP OP_HASH160 059775ff94f65c04e8a6847e74eb9809d8cd779b OP_EQUALVERIFY OP_CHECKSIG', hex: '76a914059775ff94f65c04e8a6847e74eb9809d8cd779b88ac', reqSigs: 1, type: 'pubkeyhash', - addresses: [ - 'bitcoincash:qqzewa0ljnm9cp8g56z8ua8tnqya3nthnvhv5hpu8y' - ] + addresses: ['bitcoincash:qqzewa0ljnm9cp8g56z8ua8tnqya3nthnvhv5hpu8y'] }, tokenQtyStr: '43547.68657', tokenQty: 43547.68657 @@ -343,18 +350,18 @@ const mintTestInputTx = { value: 0.00054808, n: 2, scriptPubKey: { - asm: 'OP_DUP OP_HASH160 0e330dc9009e1e07831f5a22d4ade8977ab674c8 OP_EQUALVERIFY OP_CHECKSIG', + asm: + 'OP_DUP OP_HASH160 0e330dc9009e1e07831f5a22d4ade8977ab674c8 OP_EQUALVERIFY OP_CHECKSIG', hex: '76a9140e330dc9009e1e07831f5a22d4ade8977ab674c888ac', reqSigs: 1, type: 'pubkeyhash', - addresses: [ - 'bitcoincash:qq8rxrwfqz0pupurradz949dazth4dn5eqs3mhrucv' - ] + addresses: ['bitcoincash:qq8rxrwfqz0pupurradz949dazth4dn5eqs3mhrucv'] }, tokenQty: null } ], - hex: '0100000003f8cda53b43b0ea49991a9bc6c74eb901d2a8b964bc7b8987d76789618ec18c93010000006b483045022100e3d5f9a48f9aa1cf7e9ed1992e0281e7300b734ba0e4bd5bb9265b2be60bd71002200ccde53ce7ea9da9df3e834f234f3bea65c2e58c96f8436f93333fd8946a1db2412102056220984cc2cf5261a27d4f66d31c9ef601a688ca1a5ab81e55b6f0d311be74feffffff34dbf62a45295ae11c2a45f44368218ec64498ac3f7e1434c1993515f53c9dee010000006b483045022100bb90d52be9b568f643fdb1a302e9f063be27a9f914e2a6b192cbabf2cbdeaf9302203c275fc8d1b82390bc1726390d361c5266056bddd54dec23efa207c79eacea4a4121024146cfcd0c02e99d6451dc48ad0f97114aeda18fe55c52a10bfc0490f314e6a2feffffff34dbf62a45295ae11c2a45f44368218ec64498ac3f7e1434c1993515f53c9dee030000006a473044022029ab770c249f467b40bb90410429f6d657f9be299baa19a6838d04d972436b450220143660297e8e836bc16d317649fad8c310bdadb4fb61d4e9f6ba11203abe5dae412102eed4ac9dda3405d9b1ccbbf09f8056f3e7c615924274bd5643238b543d0a1d56feffffff030000000000000000376a04534c500001010453454e4420938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8080000000103907f1122020000000000001976a914059775ff94f65c04e8a6847e74eb9809d8cd779b88ac18d60000000000001976a9140e330dc9009e1e07831f5a22d4ade8977ab674c888ac7d4b0800', + hex: + '0100000003f8cda53b43b0ea49991a9bc6c74eb901d2a8b964bc7b8987d76789618ec18c93010000006b483045022100e3d5f9a48f9aa1cf7e9ed1992e0281e7300b734ba0e4bd5bb9265b2be60bd71002200ccde53ce7ea9da9df3e834f234f3bea65c2e58c96f8436f93333fd8946a1db2412102056220984cc2cf5261a27d4f66d31c9ef601a688ca1a5ab81e55b6f0d311be74feffffff34dbf62a45295ae11c2a45f44368218ec64498ac3f7e1434c1993515f53c9dee010000006b483045022100bb90d52be9b568f643fdb1a302e9f063be27a9f914e2a6b192cbabf2cbdeaf9302203c275fc8d1b82390bc1726390d361c5266056bddd54dec23efa207c79eacea4a4121024146cfcd0c02e99d6451dc48ad0f97114aeda18fe55c52a10bfc0490f314e6a2feffffff34dbf62a45295ae11c2a45f44368218ec64498ac3f7e1434c1993515f53c9dee030000006a473044022029ab770c249f467b40bb90410429f6d657f9be299baa19a6838d04d972436b450220143660297e8e836bc16d317649fad8c310bdadb4fb61d4e9f6ba11203abe5dae412102eed4ac9dda3405d9b1ccbbf09f8056f3e7c615924274bd5643238b543d0a1d56feffffff030000000000000000376a04534c500001010453454e4420938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8080000000103907f1122020000000000001976a914059775ff94f65c04e8a6847e74eb9809d8cd779b88ac18d60000000000001976a9140e330dc9009e1e07831f5a22d4ade8977ab674c888ac7d4b0800', blockhash: '00000000000000000140f0d813052da59c811a936494a8d8b2d60b215d19e3dc', confirmations: 167007, time: 1534391953, @@ -393,9 +400,7 @@ const mintTestOpReturnData01 = { tokenType: 1, txType: 'SEND', tokenId: '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8', - amounts: [ - '4354768657' - ] + amounts: ['4354768657'] } const mintTestOpReturnData02 = { @@ -430,8 +435,10 @@ const sendTestInputTx01 = { txid: 'b36b0c7485ad569b98cc9b9614dc68a5208495f22ec3b00effcf963b135a5215', vout: 1, scriptSig: { - asm: '3045022100934ca9732bf6c1b146f09e6198142a79a80788b576c6b94e2052df5bcdc86ad902205ef6205192200ea93f6c97f966b838ee785529b694eb61e576e3452470613847[ALL|FORKID] 02b23484341cf36ec00184e045d54e6ffca97da7a8f8a6fd719cead192132306b1', - hex: '483045022100934ca9732bf6c1b146f09e6198142a79a80788b576c6b94e2052df5bcdc86ad902205ef6205192200ea93f6c97f966b838ee785529b694eb61e576e3452470613847412102b23484341cf36ec00184e045d54e6ffca97da7a8f8a6fd719cead192132306b1' + asm: + '3045022100934ca9732bf6c1b146f09e6198142a79a80788b576c6b94e2052df5bcdc86ad902205ef6205192200ea93f6c97f966b838ee785529b694eb61e576e3452470613847[ALL|FORKID] 02b23484341cf36ec00184e045d54e6ffca97da7a8f8a6fd719cead192132306b1', + hex: + '483045022100934ca9732bf6c1b146f09e6198142a79a80788b576c6b94e2052df5bcdc86ad902205ef6205192200ea93f6c97f966b838ee785529b694eb61e576e3452470613847412102b23484341cf36ec00184e045d54e6ffca97da7a8f8a6fd719cead192132306b1' }, sequence: 4294967294, address: 'bitcoincash:qqxj7p2jatt8h3tcpadyxw8a2mr7myqk2qm57u4rdf', @@ -441,8 +448,10 @@ const sendTestInputTx01 = { txid: 'b36b0c7485ad569b98cc9b9614dc68a5208495f22ec3b00effcf963b135a5215', vout: 3, scriptSig: { - asm: '3044022004d4a95658ef140561ae3a936fb01511778a5376a499bcd6f47b64074a6ca4430220273a4bf553ca17c7e10f393582f980e17a6a98ada867633faad9dbcc595dfd23[ALL|FORKID] 0324fe3b895cfa09523e8ec529eb15c681e3a20f96df85175c54a952b68ac018df', - hex: '473044022004d4a95658ef140561ae3a936fb01511778a5376a499bcd6f47b64074a6ca4430220273a4bf553ca17c7e10f393582f980e17a6a98ada867633faad9dbcc595dfd2341210324fe3b895cfa09523e8ec529eb15c681e3a20f96df85175c54a952b68ac018df' + asm: + '3044022004d4a95658ef140561ae3a936fb01511778a5376a499bcd6f47b64074a6ca4430220273a4bf553ca17c7e10f393582f980e17a6a98ada867633faad9dbcc595dfd23[ALL|FORKID] 0324fe3b895cfa09523e8ec529eb15c681e3a20f96df85175c54a952b68ac018df', + hex: + '473044022004d4a95658ef140561ae3a936fb01511778a5376a499bcd6f47b64074a6ca4430220273a4bf553ca17c7e10f393582f980e17a6a98ada867633faad9dbcc595dfd2341210324fe3b895cfa09523e8ec529eb15c681e3a20f96df85175c54a952b68ac018df' }, sequence: 4294967294, address: 'bitcoincash:qrcdncgpnv3s8lekcamv4yekp8sghnk37qtsxdyzla', @@ -452,8 +461,10 @@ const sendTestInputTx01 = { txid: '95d460512143b636bbc5780d8b27b04fca3bfd2f22003ab48da594e2bab9cfc1', vout: 2, scriptSig: { - asm: '3044022079f239216f8d806a084221e841227e55d23a1b90aaf5b5ab54d6f865fbeacf8b022053568f10afc00459af083e4c77d0b85229eb8973a1de406aaa699557f05c7fed[ALL|FORKID] 02035f98ff79d6f3a8ec5a2738c103bbb7796e94fcaffdfaae8f5b7a7fae5d93e3', - hex: '473044022079f239216f8d806a084221e841227e55d23a1b90aaf5b5ab54d6f865fbeacf8b022053568f10afc00459af083e4c77d0b85229eb8973a1de406aaa699557f05c7fed412102035f98ff79d6f3a8ec5a2738c103bbb7796e94fcaffdfaae8f5b7a7fae5d93e3' + asm: + '3044022079f239216f8d806a084221e841227e55d23a1b90aaf5b5ab54d6f865fbeacf8b022053568f10afc00459af083e4c77d0b85229eb8973a1de406aaa699557f05c7fed[ALL|FORKID] 02035f98ff79d6f3a8ec5a2738c103bbb7796e94fcaffdfaae8f5b7a7fae5d93e3', + hex: + '473044022079f239216f8d806a084221e841227e55d23a1b90aaf5b5ab54d6f865fbeacf8b022053568f10afc00459af083e4c77d0b85229eb8973a1de406aaa699557f05c7fed412102035f98ff79d6f3a8ec5a2738c103bbb7796e94fcaffdfaae8f5b7a7fae5d93e3' }, sequence: 4294967294, address: 'bitcoincash:qrcukahsm53lsywcdarehh73vqazpdu8zv547nym9g', @@ -465,8 +476,10 @@ const sendTestInputTx01 = { value: 0, n: 0, scriptPubKey: { - asm: 'OP_RETURN 5262419 1 1145980243 550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b35 00005af3107a4000 004657febe8d8000', - hex: '6a04534c500001010453454e4420550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b350800005af3107a400008004657febe8d8000', + asm: + 'OP_RETURN 5262419 1 1145980243 550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b35 00005af3107a4000 004657febe8d8000', + hex: + '6a04534c500001010453454e4420550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b350800005af3107a400008004657febe8d8000', type: 'nulldata' } }, @@ -474,43 +487,41 @@ const sendTestInputTx01 = { value: 0.00000546, n: 1, scriptPubKey: { - asm: 'OP_DUP OP_HASH160 268dadd7c7becc11782ad3d956342442d8eae92a OP_EQUALVERIFY OP_CHECKSIG', + asm: + 'OP_DUP OP_HASH160 268dadd7c7becc11782ad3d956342442d8eae92a OP_EQUALVERIFY OP_CHECKSIG', hex: '76a914268dadd7c7becc11782ad3d956342442d8eae92a88ac', reqSigs: 1, type: 'pubkeyhash', - addresses: [ - 'bitcoincash:qqngmtwhc7lvcytc9tfaj435y3pd36hf9gtdq8nsuu' - ] + addresses: ['bitcoincash:qqngmtwhc7lvcytc9tfaj435y3pd36hf9gtdq8nsuu'] } }, { value: 0.00000546, n: 2, scriptPubKey: { - asm: 'OP_DUP OP_HASH160 9fb45b370f9ff38a775ee95cabcad7615817924e OP_EQUALVERIFY OP_CHECKSIG', + asm: + 'OP_DUP OP_HASH160 9fb45b370f9ff38a775ee95cabcad7615817924e OP_EQUALVERIFY OP_CHECKSIG', hex: '76a9149fb45b370f9ff38a775ee95cabcad7615817924e88ac', reqSigs: 1, type: 'pubkeyhash', - addresses: [ - 'bitcoincash:qz0mgkehp70l8znhtm54e2726as4s9ujfc9s2szctr' - ] + addresses: ['bitcoincash:qz0mgkehp70l8znhtm54e2726as4s9ujfc9s2szctr'] } }, { value: 0.00153347, n: 3, scriptPubKey: { - asm: 'OP_DUP OP_HASH160 9fb45b370f9ff38a775ee95cabcad7615817924e OP_EQUALVERIFY OP_CHECKSIG', + asm: + 'OP_DUP OP_HASH160 9fb45b370f9ff38a775ee95cabcad7615817924e OP_EQUALVERIFY OP_CHECKSIG', hex: '76a9149fb45b370f9ff38a775ee95cabcad7615817924e88ac', reqSigs: 1, type: 'pubkeyhash', - addresses: [ - 'bitcoincash:qz0mgkehp70l8znhtm54e2726as4s9ujfc9s2szctr' - ] + addresses: ['bitcoincash:qz0mgkehp70l8znhtm54e2726as4s9ujfc9s2szctr'] } } ], - hex: '010000000315525a133b96cfff0eb0c32ef2958420a568dc14969bcc989b56ad85740c6bb3010000006b483045022100934ca9732bf6c1b146f09e6198142a79a80788b576c6b94e2052df5bcdc86ad902205ef6205192200ea93f6c97f966b838ee785529b694eb61e576e3452470613847412102b23484341cf36ec00184e045d54e6ffca97da7a8f8a6fd719cead192132306b1feffffff15525a133b96cfff0eb0c32ef2958420a568dc14969bcc989b56ad85740c6bb3030000006a473044022004d4a95658ef140561ae3a936fb01511778a5376a499bcd6f47b64074a6ca4430220273a4bf553ca17c7e10f393582f980e17a6a98ada867633faad9dbcc595dfd2341210324fe3b895cfa09523e8ec529eb15c681e3a20f96df85175c54a952b68ac018dffeffffffc1cfb9bae294a58db43a00222ffd3bca4fb0278b0d78c5bb36b643215160d495020000006a473044022079f239216f8d806a084221e841227e55d23a1b90aaf5b5ab54d6f865fbeacf8b022053568f10afc00459af083e4c77d0b85229eb8973a1de406aaa699557f05c7fed412102035f98ff79d6f3a8ec5a2738c103bbb7796e94fcaffdfaae8f5b7a7fae5d93e3feffffff040000000000000000406a04534c500001010453454e4420550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b350800005af3107a400008004657febe8d800022020000000000001976a914268dadd7c7becc11782ad3d956342442d8eae92a88ac22020000000000001976a9149fb45b370f9ff38a775ee95cabcad7615817924e88ac03570200000000001976a9149fb45b370f9ff38a775ee95cabcad7615817924e88acd44c0800', + hex: + '010000000315525a133b96cfff0eb0c32ef2958420a568dc14969bcc989b56ad85740c6bb3010000006b483045022100934ca9732bf6c1b146f09e6198142a79a80788b576c6b94e2052df5bcdc86ad902205ef6205192200ea93f6c97f966b838ee785529b694eb61e576e3452470613847412102b23484341cf36ec00184e045d54e6ffca97da7a8f8a6fd719cead192132306b1feffffff15525a133b96cfff0eb0c32ef2958420a568dc14969bcc989b56ad85740c6bb3030000006a473044022004d4a95658ef140561ae3a936fb01511778a5376a499bcd6f47b64074a6ca4430220273a4bf553ca17c7e10f393582f980e17a6a98ada867633faad9dbcc595dfd2341210324fe3b895cfa09523e8ec529eb15c681e3a20f96df85175c54a952b68ac018dffeffffffc1cfb9bae294a58db43a00222ffd3bca4fb0278b0d78c5bb36b643215160d495020000006a473044022079f239216f8d806a084221e841227e55d23a1b90aaf5b5ab54d6f865fbeacf8b022053568f10afc00459af083e4c77d0b85229eb8973a1de406aaa699557f05c7fed412102035f98ff79d6f3a8ec5a2738c103bbb7796e94fcaffdfaae8f5b7a7fae5d93e3feffffff040000000000000000406a04534c500001010453454e4420550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b350800005af3107a400008004657febe8d800022020000000000001976a914268dadd7c7becc11782ad3d956342442d8eae92a88ac22020000000000001976a9149fb45b370f9ff38a775ee95cabcad7615817924e88ac03570200000000001976a9149fb45b370f9ff38a775ee95cabcad7615817924e88acd44c0800', blockhash: '000000000000000001882548bbd9a41bc53a039634f2afa4a12d653434347d04', confirmations: 166670, time: 1534593905, @@ -521,10 +532,7 @@ const sendTestOpReturnData01 = { tokenType: 1, txType: 'SEND', tokenId: '550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b35', - amounts: [ - '100000000000000', - '19800000000000000' - ] + amounts: ['100000000000000', '19800000000000000'] } const sendTestOpReturnData02 = { @@ -533,8 +541,10 @@ const sendTestOpReturnData02 = { ticker: 'USDT', name: 'Tether Ltd. US dollar backed tokens', tokenId: '550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b35', - documentUri: 'https://tether.to/wp-content/uploads/2016/06/TetherWhitePaper.pdf', - documentHash: '�DQ�\u001e�3�\u0006p���pM�\u0001\u0017�pW(;\u0003,��wy19\u0016', + documentUri: + 'https://tether.to/wp-content/uploads/2016/06/TetherWhitePaper.pdf', + documentHash: + '�DQ�\u001e�3�\u0006p���pM�\u0001\u0017�pW(;\u0003,��wy19\u0016', decimals: 8, mintBatonVout: 2, qty: '10000000000000000' @@ -552,10 +562,211 @@ const sendTestOpReturnData04 = { tokenType: 1, txType: 'SEND', tokenId: '550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b35', - amounts: [ - '100000000000000', - '9900000000000000' - ] + amounts: ['100000000000000', '9900000000000000'] +} + +const mintTestInputTx02 = { + txid: 'ee9d3cf5153599c134147e3fac9844c68e216843f4452a1ce15a29452af6db34', + hash: 'ee9d3cf5153599c134147e3fac9844c68e216843f4452a1ce15a29452af6db34', + version: 1, + size: 473, + locktime: 543613, + vin: [ + { + txid: '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8', + vout: 3, + scriptSig: { + asm: + '3045022100ac43a871e0f84787001db745e4801b789fd9cd7efa247727ebb5c0c7b66d597302205316328b6501759e9a15ec65202219a433172d153f9f1b68f65f3a63494ba6f0[ALL|FORKID] 0345a5f5dd11c987b346c18c245f0df6d305369984b9b3c7ba465c29875466e374', + hex: + '483045022100ac43a871e0f84787001db745e4801b789fd9cd7efa247727ebb5c0c7b66d597302205316328b6501759e9a15ec65202219a433172d153f9f1b68f65f3a63494ba6f041210345a5f5dd11c987b346c18c245f0df6d305369984b9b3c7ba465c29875466e374' + }, + sequence: 4294967294, + address: 'bitcoincash:qqj0durd4qzdddvl2u6sen8n8h6mljtywugqctt9km', + value: 0.00056266 + }, + { + txid: '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8', + vout: 2, + scriptSig: { + asm: + '304402202ce2d9d63bc6ab7765d267540fd3429bf7a8d1b50e975391fff3a4506289461a02205daf3f761a9b02d141f22136a6fe019062182c9da1b1d3a5245ff745f1236e45[ALL|FORKID] 02c00b05bc633a48e074bc54dd195b19a470ad6252ac8d306c82a2bd729c1c4c69', + hex: + '47304402202ce2d9d63bc6ab7765d267540fd3429bf7a8d1b50e975391fff3a4506289461a02205daf3f761a9b02d141f22136a6fe019062182c9da1b1d3a5245ff745f1236e45412102c00b05bc633a48e074bc54dd195b19a470ad6252ac8d306c82a2bd729c1c4c69' + }, + sequence: 4294967294, + address: 'bitcoincash:qzf72qccdgjrpjpewq8dazlze6jyxzku8q3cauna4t', + value: 0.00000546 + } + ], + vout: [ + { + value: 0, + n: 0, + scriptPubKey: { + asm: + 'OP_RETURN 5262419 1 1414416717 938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8 2 000000000003928b', + hex: + '6a04534c50000101044d494e5420938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8010208000000000003928b', + type: 'nulldata' + } + }, + { + value: 0.00000546, + n: 1, + scriptPubKey: { + asm: + 'OP_DUP OP_HASH160 1272884e6bd20c4661b5a052f874ff9a14c925b2 OP_EQUALVERIFY OP_CHECKSIG', + hex: '76a9141272884e6bd20c4661b5a052f874ff9a14c925b288ac', + reqSigs: 1, + type: 'pubkeyhash', + addresses: ['bitcoincash:qqf89zzwd0fqc3npkks997r5l7dpfjf9kgx2rqu500'] + } + }, + { + value: 0.00000546, + n: 2, + scriptPubKey: { + asm: + 'OP_DUP OP_HASH160 d1eaebf8d1face5bd866e36bd94f43e2ffceef71 OP_EQUALVERIFY OP_CHECKSIG', + hex: '76a914d1eaebf8d1face5bd866e36bd94f43e2ffceef7188ac', + reqSigs: 1, + type: 'pubkeyhash', + addresses: ['bitcoincash:qrg746lc68avuk7cvm3khk20g030lnh0wy5h2k2fqr'] + } + }, + { + value: 0.00054848, + n: 3, + scriptPubKey: { + asm: + 'OP_DUP OP_HASH160 17178e31b3e468c0d98d57be07bc907bf94d1fdb OP_EQUALVERIFY OP_CHECKSIG', + hex: '76a91417178e31b3e468c0d98d57be07bc907bf94d1fdb88ac', + reqSigs: 1, + type: 'pubkeyhash', + addresses: ['bitcoincash:qqt30r33k0jx3sxe34tmupaujpaljnglmvqgrrfp2x'] + } + } + ], + hex: + '0100000002f8cda53b43b0ea49991a9bc6c74eb901d2a8b964bc7b8987d76789618ec18c93030000006b483045022100ac43a871e0f84787001db745e4801b789fd9cd7efa247727ebb5c0c7b66d597302205316328b6501759e9a15ec65202219a433172d153f9f1b68f65f3a63494ba6f041210345a5f5dd11c987b346c18c245f0df6d305369984b9b3c7ba465c29875466e374fefffffff8cda53b43b0ea49991a9bc6c74eb901d2a8b964bc7b8987d76789618ec18c93020000006a47304402202ce2d9d63bc6ab7765d267540fd3429bf7a8d1b50e975391fff3a4506289461a02205daf3f761a9b02d141f22136a6fe019062182c9da1b1d3a5245ff745f1236e45412102c00b05bc633a48e074bc54dd195b19a470ad6252ac8d306c82a2bd729c1c4c69feffffff040000000000000000396a04534c50000101044d494e5420938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8010208000000000003928b22020000000000001976a9141272884e6bd20c4661b5a052f874ff9a14c925b288ac22020000000000001976a914d1eaebf8d1face5bd866e36bd94f43e2ffceef7188ac40d60000000000001976a91417178e31b3e468c0d98d57be07bc907bf94d1fdb88ac7d4b0800', + blockhash: '00000000000000000140f0d813052da59c811a936494a8d8b2d60b215d19e3dc', + confirmations: 168436, + time: 1534391953, + blocktime: 1534391953 +} + +const mintTestOpReturnData04 = { + tokenType: 1, + txType: 'MINT', + tokenId: '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8', + mintBatonVout: 2, + qty: '234123' +} + +const mintTestOpReturnData05 = { + tokenType: 1, + txType: 'GENESIS', + ticker: 'Bubb2', + name: 'the new bubbles!', + tokenId: '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8', + documentUri: '', + documentHash: '', + decimals: 5, + mintBatonVout: 2, + qty: '4354534534' +} + +const genesisTestInputTx02 = { + txid: '4de69e374a8ed21cbddd47f2338cc0f479dc58daa2bbe11cd604ca488eca0ddf', + hash: '4de69e374a8ed21cbddd47f2338cc0f479dc58daa2bbe11cd604ca488eca0ddf', + version: 1, + size: 444, + locktime: 571211, + vin: [ + { + txid: 'f3e056874846b6f491a1ccac3da81a3411c61d8466835446a52efa68c0d11804', + vout: 0, + scriptSig: { + asm: + '3044022022fb67bd9b35810db3fa04da4014cc93063c5ed15e8febeca09d32c03397068502206fbb86498919ca8a9be6940c904c944cd923691391a4a7d92e0c841605d46b2e[ALL|FORKID] 03fbe2c56094dc336f6244eac2e45d3d25a8e97059f2cc7de31cbf179e73dcc9bf', + hex: + '473044022022fb67bd9b35810db3fa04da4014cc93063c5ed15e8febeca09d32c03397068502206fbb86498919ca8a9be6940c904c944cd923691391a4a7d92e0c841605d46b2e412103fbe2c56094dc336f6244eac2e45d3d25a8e97059f2cc7de31cbf179e73dcc9bf' + }, + sequence: 4294967294, + address: 'bitcoincash:qz6rcxjw34yuy5fngu7fngnyy55t0v802cmsmjvsp2', + value: 0.00001111 + }, + { + txid: '87bf0efc1630f5179b73496f9f885b141cb4c8366432a91ba678298432b197ea', + vout: 0, + scriptSig: { + asm: + '3045022100d5fbab461c19c7b56245287eb15510c86872ceb405ede7322f5266efa6cc32ea022074b557bcef9a129fb31cb2e7c2ada9fe51d5cf924ae55d1d2a29368ca1f15ef2[ALL|FORKID] 03fbe2c56094dc336f6244eac2e45d3d25a8e97059f2cc7de31cbf179e73dcc9bf', + hex: + '483045022100d5fbab461c19c7b56245287eb15510c86872ceb405ede7322f5266efa6cc32ea022074b557bcef9a129fb31cb2e7c2ada9fe51d5cf924ae55d1d2a29368ca1f15ef2412103fbe2c56094dc336f6244eac2e45d3d25a8e97059f2cc7de31cbf179e73dcc9bf' + }, + sequence: 4294967294, + address: 'bitcoincash:qz6rcxjw34yuy5fngu7fngnyy55t0v802cmsmjvsp2', + value: 0.007 + } + ], + vout: [ + { + value: 0, + n: 0, + scriptPubKey: { + asm: + 'OP_RETURN 5262419 1 47454e45534953 5350494345 5370696365 7370696365736c7040676d61696c2e636f6d 0 8 0 016345785d8a0000', + hex: + '6a04534c500001010747454e45534953055350494345055370696365127370696365736c7040676d61696c2e636f6d4c0001084c0008016345785d8a0000', + type: 'nulldata' + } + }, + { + value: 0.00000546, + n: 1, + scriptPubKey: { + asm: + 'OP_DUP OP_HASH160 70e5c384ae563b4fd6cfc5f7f8df43ea427d9e10 OP_EQUALVERIFY OP_CHECKSIG', + hex: '76a91470e5c384ae563b4fd6cfc5f7f8df43ea427d9e1088ac', + reqSigs: 1, + type: 'pubkeyhash', + addresses: ['bitcoincash:qpcwtsuy4etrkn7kelzl07xlg04yylv7zqru2cqwvm'] + } + }, + { + value: 0.0070012, + n: 2, + scriptPubKey: { + asm: + 'OP_DUP OP_HASH160 df305a87d98cd64e1bee825d2167a16445ecdfdd OP_EQUALVERIFY OP_CHECKSIG', + hex: '76a914df305a87d98cd64e1bee825d2167a16445ecdfdd88ac', + reqSigs: 1, + type: 'pubkeyhash', + addresses: ['bitcoincash:qr0nqk58mxxdvnsma6p96gt859jytmxlm5t0v7de4q'] + } + } + ], + hex: + '01000000020418d1c068fa2ea546548366841dc611341aa83daccca191f4b646488756e0f3000000006a473044022022fb67bd9b35810db3fa04da4014cc93063c5ed15e8febeca09d32c03397068502206fbb86498919ca8a9be6940c904c944cd923691391a4a7d92e0c841605d46b2e412103fbe2c56094dc336f6244eac2e45d3d25a8e97059f2cc7de31cbf179e73dcc9bffeffffffea97b132842978a61ba9326436c8b41c145b889f6f49739b17f53016fc0ebf87000000006b483045022100d5fbab461c19c7b56245287eb15510c86872ceb405ede7322f5266efa6cc32ea022074b557bcef9a129fb31cb2e7c2ada9fe51d5cf924ae55d1d2a29368ca1f15ef2412103fbe2c56094dc336f6244eac2e45d3d25a8e97059f2cc7de31cbf179e73dcc9bffeffffff0300000000000000003e6a04534c500001010747454e45534953055350494345055370696365127370696365736c7040676d61696c2e636f6d4c0001084c0008016345785d8a000022020000000000001976a91470e5c384ae563b4fd6cfc5f7f8df43ea427d9e1088acd8ae0a00000000001976a914df305a87d98cd64e1bee825d2167a16445ecdfdd88ac4bb70800', + blockhash: '000000000000000002278c188c52b536d4ed84a1970d8ff59043e082cef7748a', + confirmations: 141226, + time: 1551042875, + blocktime: 1551042875 +} + +const genesisTestOpReturn03 = { + tokenType: 1, + txType: 'GENESIS', + ticker: 'SPICE', + name: 'Spice', + tokenId: '4de69e374a8ed21cbddd47f2338cc0f479dc58daa2bbe11cd604ca488eca0ddf', + documentUri: 'spiceslp@gmail.com', + documentHash: '', + decimals: 8, + mintBatonVout: 0, + qty: '100000000000000000' } module.exports = { @@ -575,5 +786,10 @@ module.exports = { sendTestOpReturnData01, sendTestOpReturnData02, sendTestOpReturnData03, - sendTestOpReturnData04 + sendTestOpReturnData04, + mintTestInputTx02, + mintTestOpReturnData04, + mintTestOpReturnData05, + genesisTestInputTx02, + genesisTestOpReturn03 } diff --git a/test/unit/transaction-unit.js b/test/unit/transaction-unit.js index 3af41a4..7693ecc 100644 --- a/test/unit/transaction-unit.js +++ b/test/unit/transaction-unit.js @@ -5,15 +5,21 @@ // Public npm libraries const assert = require('chai').assert const sinon = require('sinon') +const cloneDeep = require('lodash.clonedeep') const BCHJS = require('../../src/bch-js') const bchjs = new BCHJS() -const mockData = require('./fixtures/transaction-mock.js') +const mockDataLib = require('./fixtures/transaction-mock.js') describe('#TransactionLib', () => { - let sandbox - beforeEach(() => (sandbox = sinon.createSandbox())) + let sandbox, mockData + + beforeEach(() => { + sandbox = sinon.createSandbox() + + mockData = cloneDeep(mockDataLib) + }) afterEach(() => sandbox.restore()) describe('#get', () => { @@ -266,10 +272,10 @@ describe('#TransactionLib', () => { }) }) - describe('#get2', () => { + describe('#get3', () => { it('should throw an error if txid is not specified', async () => { try { - await bchjs.Transaction.get2() + await bchjs.Transaction.get3() assert.fail('Unexpected code path!') } catch (err) { @@ -291,8 +297,9 @@ describe('#TransactionLib', () => { sandbox .stub(bchjs.Transaction.blockchain, 'getBlockHeader') .resolves({ height: 602405 }) + sandbox.stub(bchjs.Transaction, 'getTokenInfo').resolves(false) - const result = await bchjs.Transaction.get2(txid) + const result = await bchjs.Transaction.get3(txid) // console.log(`result: ${JSON.stringify(result, null, 2)}`) // Assert that there are stanardized properties. @@ -305,14 +312,13 @@ describe('#TransactionLib', () => { // Assert that added properties exist. assert.property(result.vin[0], 'address') assert.property(result.vin[0], 'value') - assert.property(result, 'isValidSLPTx') - assert.equal(result.isValidSLPTx, false) // Assert blockheight is added assert.equal(result.blockheight, 602405) + assert.equal(result.isSlpTx, false) }) - it('should get details about a SLP transaction', async () => { + it('should get details about a SLP SEND tx with SEND input', async () => { // Mock dependencies sandbox .stub(bchjs.Transaction.rawTransaction, 'getTxData') @@ -334,7 +340,7 @@ describe('#TransactionLib', () => { const txid = '266844d53e46bbd7dd37134688dffea6e54d944edff27a0add63dd0908839bc1' - const result = await bchjs.Transaction.get2(txid) + const result = await bchjs.Transaction.get3(txid) // console.log(`result: ${JSON.stringify(result, null, 2)}`) // Assert that there are stanardized properties. @@ -344,19 +350,30 @@ describe('#TransactionLib', () => { assert.property(result.vout[0], 'value') assert.property(result.vout[1].scriptPubKey, 'addresses') - // Assert that added properties exist. - assert.property(result.vout[0], 'tokenQty') + // Assert outputs have expected properties assert.equal(result.vout[0].tokenQty, null) - assert.property(result.vin[0], 'address') - assert.property(result.vin[0], 'value') - assert.property(result.vin[0], 'tokenQty') + assert.equal(result.vout[0].tokenQtyStr, null) + assert.equal(result.vout[1].tokenQty, 1) + assert.equal(result.vout[1].tokenQtyStr, '1') + assert.equal(result.vout[2].tokenQty, 998833) + assert.equal(result.vout[2].tokenQtyStr, '998833') + assert.equal(result.vout[3].tokenQty, null) + assert.equal(result.vout[3].tokenQtyStr, null) - // Assert that tokenIds and tokenQty are included in inputs. - assert.property(result.vin[0], 'tokenId') + // Assert that inputs have expected properties assert.equal(result.vin[0].tokenQtyStr, '998834') + assert.equal(result.vin[0].tokenQty, 998834) + assert.equal( + result.vin[0].tokenId, + '497291b8a1dfe69c8daea50677a3d31a5ef0e9484d8bebb610dac64bbc202fb7' + ) + assert.equal(result.vin[1].tokenQtyStr, '0') + assert.equal(result.vin[1].tokenQty, 0) + assert.equal(result.vin[1].tokenId, null) // Assert blockheight is added assert.equal(result.blockheight, 603424) + assert.equal(result.isSlpTx, true) }) it('should catch and throw error on network error', async () => { @@ -369,7 +386,7 @@ describe('#TransactionLib', () => { .stub(bchjs.Transaction.rawTransaction, 'getTxData') .rejects(new Error('test error')) - await bchjs.Transaction.get(txid) + await bchjs.Transaction.get3(txid) assert.fail('Unexpected code path') } catch (err) { @@ -380,7 +397,7 @@ describe('#TransactionLib', () => { // This test case was created in response to a bug. When the input TX // was a Genesis SLP transaction, the inputs of the transaction were not // being hydrated properly. - it('should get input details when input is a genesis tx', async () => { + it('should get details about a SLP SEND tx with GENSIS input', async () => { // Mock dependencies sandbox .stub(bchjs.Transaction.rawTransaction, 'getTxData') @@ -402,7 +419,7 @@ describe('#TransactionLib', () => { const txid = '874306bda204d3a5dd15e03ea5732cccdca4c33a52df35162cdd64e30ea7f04e' - const result = await bchjs.Transaction.get2(txid) + const result = await bchjs.Transaction.get3(txid) // console.log(`result: ${JSON.stringify(result, null, 2)}`) // Assert that there are stanardized properties. @@ -412,28 +429,33 @@ describe('#TransactionLib', () => { assert.property(result.vout[0], 'value') assert.property(result.vout[1].scriptPubKey, 'addresses') - // Assert that added properties exist. - assert.property(result.vout[0], 'tokenQty') + // Assert outputs have expected properties and values assert.equal(result.vout[0].tokenQty, null) - assert.property(result.vin[0], 'address') - assert.property(result.vin[0], 'value') - assert.property(result.vin[0], 'tokenQty') + assert.equal(result.vout[0].tokenQtyStr, null) + assert.equal(result.vout[1].tokenQty, 5000000) + assert.equal(result.vout[1].tokenQtyStr, '5000000') + assert.equal(result.vout[2].tokenQty, 5000000) + assert.equal(result.vout[2].tokenQtyStr, '5000000') + assert.equal(result.vout[3].tokenQty, null) + assert.equal(result.vout[3].tokenQtyStr, null) - // Assert inputs values unique to a Genesis input have the proper values. + // Assert inputs have expected properties and values assert.equal(result.vin[0].tokenQty, 10000000) - assert.equal(result.vin[1].tokenQty, null) - - // Assert that tokenIds and tokenQty are included in inputs. - assert.property(result.vin[0], 'tokenId') assert.equal(result.vin[0].tokenQtyStr, '10000000') - assert.equal(result.vin[1].tokenQty, null) - assert.equal(result.vin[1].tokenQtyStr, null) + assert.equal( + result.vin[0].tokenId, + '323a1e35ae0b356316093d20f2d9fbc995d19314b5c0148b78dc8d9c0dab9d35' + ) + assert.equal(result.vin[1].tokenQty, 0) + assert.equal(result.vin[1].tokenQtyStr, '0') + assert.equal(result.vin[1].tokenId, null) // Assert blockheight is added assert.equal(result.blockheight, 543409) + assert.equal(result.isSlpTx, true) }) - it('should get input details when input is a mint tx', async () => { + it('should get details about a SLP SEND tx with MINT (and GENESIS) input', async () => { // Mock dependencies sandbox .stub(bchjs.Transaction.rawTransaction, 'getTxData') @@ -457,7 +479,7 @@ describe('#TransactionLib', () => { const txid = '4640a734063ea79fa587a3cac38a70a2f6f3db0011e23514024185982110d0fa' - const result = await bchjs.Transaction.get2(txid) + const result = await bchjs.Transaction.get3(txid) // console.log(`result: ${JSON.stringify(result, null, 2)}`) // Assert that there are stanardized properties. @@ -467,25 +489,37 @@ describe('#TransactionLib', () => { assert.property(result.vout[0], 'value') assert.property(result.vout[1].scriptPubKey, 'addresses') - // Assert that added properties exist. - assert.property(result.vout[0], 'tokenQty') + // Assert expected output properties and values exist. assert.equal(result.vout[0].tokenQty, null) - assert.property(result.vin[0], 'address') - assert.property(result.vin[0], 'value') - assert.property(result.vin[0], 'tokenQty') + assert.equal(result.vout[1].tokenQty, 43547.68657) + assert.equal(result.vout[1].tokenQtyStr, '43547.68657') + assert.equal(result.vout[2].tokenQty, null) - // Assert inputs values unique to a Mint input have the proper values. + // Assert expected input properties and values exist. assert.equal(result.vin[0].tokenQty, 43545.34534) + assert.equal(result.vin[0].tokenQtyStr, '43545.34534') + assert.equal( + result.vin[0].tokenId, + '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8' + ) assert.equal(result.vin[1].tokenQty, 2.34123) - assert.equal(result.vin[2].tokenQty, null) + assert.equal(result.vin[1].tokenQtyStr, '2.34123') + assert.equal( + result.vin[1].tokenId, + '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8' + ) + assert.equal(result.vin[2].tokenQty, 0) + assert.equal(result.vin[2].tokenQtyStr, '0') + assert.equal(result.vin[2].tokenId, null) // Assert blockheight is added assert.equal(result.blockheight, 543614) + assert.equal(result.isSlpTx, true) }) // This test case was generated from the problematic transaction that // used inputs in a 'non-standard' way. - it('should correctly assign quantities to mixed mint inputs', async () => { + it('should get details about a SLP SEND tx with MINT (and SEND) input', async () => { // Mock dependencies sandbox .stub(bchjs.Transaction.rawTransaction, 'getTxData') @@ -509,7 +543,7 @@ describe('#TransactionLib', () => { const txid = '6bc111fbf5b118021d68355ca19a0e77fa358dd931f284b2550f79a51ab4792a' - const result = await bchjs.Transaction.get2(txid) + const result = await bchjs.Transaction.get3(txid) // console.log(`result: ${JSON.stringify(result, null, 2)}`) // Assert that there are stanardized properties. @@ -519,20 +553,156 @@ describe('#TransactionLib', () => { assert.property(result.vout[0], 'value') assert.property(result.vout[1].scriptPubKey, 'addresses') - // Assert that added properties exist. - assert.property(result.vout[0], 'tokenQty') + // Assert the outputs have expected properties and values. assert.equal(result.vout[0].tokenQty, null) - assert.property(result.vin[0], 'address') - assert.property(result.vin[0], 'value') - assert.property(result.vin[0], 'tokenQty') + assert.equal(result.vout[1].tokenQty, 1000000) + assert.equal(result.vout[1].tokenQtyStr, '1000000') + assert.equal(result.vout[2].tokenQty, 198000000) + assert.equal(result.vout[2].tokenQtyStr, '198000000') + assert.equal(result.vout[3].tokenQty, null) - // Assert inputs values unique to a Mint input have the proper values. + // Assert the inputs have expected properties and values. assert.equal(result.vin[0].tokenQty, 100000000) - assert.equal(result.vin[1].tokenQty, null) + assert.equal(result.vin[0].tokenQtyStr, '100000000') + assert.equal( + result.vin[0].tokenId, + '550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b35' + ) + assert.equal(result.vin[1].tokenQty, 0) + assert.equal(result.vin[1].tokenQtyStr, 0) + assert.equal(result.vin[1].tokenId, null) assert.equal(result.vin[2].tokenQty, 99000000) + assert.equal(result.vin[2].tokenQtyStr, '99000000') + assert.equal( + result.vin[2].tokenId, + '550d19eb820e616a54b8a73372c4420b5a0567d8dc00f613b71c5234dc884b35' + ) // Assert blockheight is added assert.equal(result.blockheight, 543957) + assert.equal(result.isSlpTx, true) + }) + + // This was a problematic TX + it('should process MINT TX with GENESIS input', async () => { + // Mock dependencies + sandbox + .stub(bchjs.Transaction.rawTransaction, 'getTxData') + .resolves(mockData.mintTestInputTx02) + sandbox + .stub(bchjs.Transaction.blockchain, 'getBlockHeader') + .resolves({ height: 543614 }) + sandbox + .stub(bchjs.Transaction.slpUtils, 'decodeOpReturn') + .onCall(0) + .resolves(mockData.mintTestOpReturnData04) + .onCall(1) + .resolves(mockData.mintTestOpReturnData05) + .onCall(2) + .resolves(mockData.mintTestOpReturnData05) + .onCall(3) + .resolves(mockData.mintTestOpReturnData05) + .onCall(4) + .resolves(mockData.mintTestOpReturnData05) + .onCall(5) + .resolves(mockData.mintTestOpReturnData05) + + const txid = + 'ee9d3cf5153599c134147e3fac9844c68e216843f4452a1ce15a29452af6db34' + + const result = await bchjs.Transaction.get3(txid) + // console.log(`result: ${JSON.stringify(result, null, 2)}`) + + // Assert that there are stanardized properties. + assert.property(result, 'txid') + assert.property(result, 'vin') + assert.property(result, 'vout') + assert.property(result.vout[0], 'value') + assert.property(result.vout[1].scriptPubKey, 'addresses') + + // Assert outputs have expected properties and values + assert.equal(result.vout[0].tokenQty, 0) + assert.equal(result.vout[0].tokenQty, '0') + assert.equal(result.vout[1].tokenQty, 2.34123) + assert.equal(result.vout[1].tokenQty, '2.34123') + assert.equal(result.vout[2].tokenQty, 0) + assert.equal(result.vout[2].tokenQty, '0') + assert.equal(result.vout[2].isMintBaton, true) + assert.equal(result.vout[3].tokenQty, 0) + assert.equal(result.vout[3].tokenQty, '0') + + // Assert inputs have expected properties and values + assert.equal(result.vin[0].tokenQty, 0) + assert.equal(result.vin[0].tokenQtyStr, '0') + assert.equal(result.vin[0].tokenId, null) + assert.equal(result.vin[1].tokenQty, 0) + assert.equal(result.vin[1].tokenQtyStr, '0') + assert.equal( + result.vin[1].tokenId, + '938cc18e618967d787897bbc64b9a8d201b94ec7c69b1a9949eab0433ba5cdf8' + ) + assert.equal(result.vin[1].isMintBaton, true) + + // Assert added TX data exists. + assert.equal(result.blockheight, 543614) + assert.equal(result.isSlpTx, true) + }) + + // It should process a GENESIS tx + it('should process a GENESIS tx', async () => { + // Mock dependencies + sandbox + .stub(bchjs.Transaction.rawTransaction, 'getTxData') + .resolves(mockData.genesisTestInputTx02) + sandbox + .stub(bchjs.Transaction.blockchain, 'getBlockHeader') + .resolves({ height: 571212 }) + sandbox + .stub(bchjs.Transaction, 'getTokenInfo') + .onCall(0) + .resolves(mockData.genesisTestOpReturn03) + .onCall(1) + .resolves(mockData.genesisTestOpReturn03) + .onCall(2) + .resolves(false) + .onCall(3) + .resolves(false) + .onCall(4) + .resolves(false) + + const txid = + '4de69e374a8ed21cbddd47f2338cc0f479dc58daa2bbe11cd604ca488eca0ddf' + + const result = await bchjs.Transaction.get3(txid) + // console.log(`result: ${JSON.stringify(result, null, 2)}`) + + // Assert that there are stanardized properties. + assert.property(result, 'txid') + assert.property(result, 'vin') + assert.property(result, 'vout') + assert.property(result.vout[0], 'value') + assert.property(result.vout[1].scriptPubKey, 'addresses') + + // Assert output have expected properties and values + assert.equal(result.vout[0].tokenQty, 0) + assert.equal(result.vout[0].tokenQtyStr, '0') + assert.equal(result.vout[0].isMintBaton, true) + assert.equal(result.vout[1].tokenQty, 1000000000) + assert.equal(result.vout[1].tokenQtyStr, '1000000000') + assert.equal(result.vout[2].tokenQty, 0) + assert.equal(result.vout[2].tokenQtyStr, '0') + + // Assert input have expected properties and values + assert.equal(result.vin[0].tokenQty, 0) + assert.equal(result.vin[0].tokenQtyStr, '0') + assert.equal(result.vin[0].tokenId, null) + assert.equal(result.vin[1].tokenQty, 0) + assert.equal(result.vin[1].tokenQtyStr, '0') + assert.equal(result.vin[1].tokenId, null) + + // Assert added TX data exists. + assert.equal(result.blockheight, 571212) + assert.equal(result.isSlpTx, true) }) }) })