From a78e426960ad6566f716db89cf3b503e4c94308d Mon Sep 17 00:00:00 2001 From: Matthew Little Date: Mon, 14 Oct 2019 18:37:17 -0400 Subject: [PATCH 1/2] Fixes for use with async crypto blockstack.js branch --- package-lock.json | 480 +++++++++++++++++++++++++++++----------------- package.json | 16 +- src/auth.ts | 2 +- src/cli.ts | 128 ++++++------- src/data.ts | 16 +- src/encrypt.ts | 3 +- src/keys.ts | 8 +- src/utils.ts | 67 +++---- 8 files changed, 417 insertions(+), 303 deletions(-) diff --git a/package-lock.json b/package-lock.json index 257371a..4eb7ff3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -151,58 +151,61 @@ "@types/mime": "*" } }, + "@types/triplesec": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/triplesec/-/triplesec-3.0.0.tgz", + "integrity": "sha512-8tFHnI6FEOcUh2NpUwxjEwrtLDmybKpnvWYe09DQ52O21yphEZCdzDsjzd8NMysqmeOqGoQEIokMJP92Hvz1Bg==", + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.0.0.tgz", - "integrity": "sha512-Mo45nxTTELODdl7CgpZKJISvLb+Fu64OOO2ZFc2x8sYSnUpFrBUW3H+H/ZGYmEkfnL6VkdtOSxgdt+Av79j0sA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.4.0.tgz", + "integrity": "sha512-se/YCk7PUoyMwSm/u3Ii9E+BgDUc736uw/lXCDpXEqRgPGsoBTtS8Mntue/vZX8EGyzGplYuePBuVyhZDM9EpQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "2.0.0", - "eslint-utils": "^1.4.0", + "@typescript-eslint/experimental-utils": "2.4.0", + "eslint-utils": "^1.4.2", "functional-red-black-tree": "^1.0.1", "regexpp": "^2.0.1", - "tsutils": "^3.14.0" + "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.0.0.tgz", - "integrity": "sha512-XGJG6GNBXIEx/mN4eTRypN/EUmsd0VhVGQ1AG+WTgdvjHl0G8vHhVBHrd/5oI6RRYBRnedNymSYWW1HAdivtmg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.4.0.tgz", + "integrity": "sha512-2cvhNaJoWavgTtnC7e1jUSPZQ7e4U2X9Yoy5sQmkS7lTESuyuZrlRcaoNuFfYEd6hgrmMU7+QoSp8Ad+kT1nfA==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.0.0", - "eslint-scope": "^4.0.0" + "@typescript-eslint/typescript-estree": "2.4.0", + "eslint-scope": "^5.0.0" } }, "@typescript-eslint/parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.0.0.tgz", - "integrity": "sha512-ibyMBMr0383ZKserIsp67+WnNVoM402HKkxqXGlxEZsXtnGGurbnY90pBO3e0nBUM7chEEOcxUhgw9aPq7fEBA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.4.0.tgz", + "integrity": "sha512-IouAKi/grJ4MFrwdXIJ1GHAwbPWYgkT3b/x8Q49F378c9nwgxVkO76e0rZeUVpwHMaUuoKG2sUeK0XGkwdlwkw==", "dev": true, "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.0.0", - "@typescript-eslint/typescript-estree": "2.0.0", - "eslint-visitor-keys": "^1.0.0" + "@typescript-eslint/experimental-utils": "2.4.0", + "@typescript-eslint/typescript-estree": "2.4.0", + "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.0.0.tgz", - "integrity": "sha512-NXbmzA3vWrSgavymlzMWNecgNOuiMMp62MO3kI7awZRLRcsA1QrYWo6q08m++uuAGVbXH/prZi2y1AWuhSu63w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.4.0.tgz", + "integrity": "sha512-/DzDAtMqF5d9IlXrrvu/Id/uoKjnSxf/3FbtKK679a/T7lbDM8qQuirtGvFy6Uh+x0hALuCMwnMfUf0P24/+Iw==", "dev": true, "requires": { + "chokidar": "^3.0.2", + "glob": "^7.1.4", + "is-glob": "^4.0.1", "lodash.unescape": "4.0.1", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "semver": "^6.3.0" } }, "accepts": { @@ -215,15 +218,15 @@ } }, "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", "dev": true }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", "dev": true }, "ajv": { @@ -255,6 +258,16 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "arg": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", @@ -382,6 +395,12 @@ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.3.tgz", "integrity": "sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg==" }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -391,9 +410,9 @@ } }, "bip174": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.0.tgz", - "integrity": "sha512-AaoWrkYtv6A2y8H+qzs6NvRWypzNbADT8PQGpM9rnP+jLzeol+uzhe3Myeuq/dwrHYtmsW8V71HmX2oXhQGagw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz", + "integrity": "sha512-Mq2aFs1TdMfxBpYPg7uzjhsiXbAtoVq44TNjEWtvuZBiBgc3m7+n55orYMtTAxdg7jWbL4DtH0MKocJER4xERQ==" }, "bip32": { "version": "2.0.4", @@ -448,13 +467,13 @@ "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" }, "bitcoinjs-lib": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.2.tgz", - "integrity": "sha512-Qa1TY8xaFRaLPD2YunfQX1vhHAh0387SJ/Zu7lNSRyzpg8lDru8gv+w6pqxOkcdj4dm4Fn1JmWb0m8Oy+8TfiA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.6.tgz", + "integrity": "sha512-NgvnA8XXUuzpuBnVs1plzZvVOYsuont4KPzaGcVIwjktYQbCk1hUkXnt4wujIOBscNsXuu+plVbPYvtMosZI/w==", "requires": { "@types/node": "10.12.18", "bech32": "^1.1.2", - "bip174": "^1.0.0", + "bip174": "^1.0.1", "bip32": "^2.0.4", "bip66": "^1.1.0", "bitcoin-ops": "^1.4.0", @@ -478,38 +497,83 @@ } }, "blockstack": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/blockstack/-/blockstack-19.2.2.tgz", - "integrity": "sha512-jU2BW+uy6QH3PUpeHA+92AXzgSVMC7pX3YiHU0QCfRnKkd0/y41b3puCHBl1XPHNUVxHyb1Ewof0pv+xAMMcZA==", + "version": "github:blockstack/blockstack.js#518ca14145e956bfd54aba8339395745130fd869", + "from": "github:blockstack/blockstack.js#feature/crypto-isolation", "requires": { + "@types/bn.js": "^4.11.5", + "@types/elliptic": "^6.4.10", "ajv": "^4.11.5", "bip39": "^3.0.2", - "bitcoinjs-lib": "^5.0.5", + "bitcoinjs-lib": "^5.1.6", "bn.js": "^4.11.8", "cheerio": "^0.22.0", - "cross-fetch": "^2.2.2", - "elliptic": "^6.4.1", - "form-data": "^2.3.3", - "jsontokens": "^1.0.0", - "query-string": "^6.3.0", + "cross-fetch": "^3.0.4", + "elliptic": "^6.5.1", + "form-data": "^2.5.1", + "jsontokens": "^2.0.2", + "query-string": "^6.8.3", + "randombytes": "^2.1.0", "request": "^2.88.0", - "ripemd160": "^2.0.2", + "ripemd160-min": "0.0.5", "schema-inspector": "^1.6.8", - "triplesec": "^3.0.26", - "uuid": "^3.3.2", + "tslib": "^1.10.0", + "uuid": "^3.3.3", "zone-file": "^1.0.0" }, "dependencies": { - "jsontokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-1.0.0.tgz", - "integrity": "sha512-cC5q2qnJfwFQfN/P30Lo/m2v3x2D/JLUxli5tGP2367yRY5ZyEZSFpu+HQEBf2C8xlHL6DjQMYNFPdCFgQTmgA==", + "@types/elliptic": { + "version": "6.4.10", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.10.tgz", + "integrity": "sha512-9h+Bw+aNiLzcq9DGstHccNxSsJ5iNId7mzruid7+kwm7F1IGvb4rBOOPo3+twt9ZPhI3y+JJ2m1UfgU8cOEJuQ==", "requires": { - "asn1.js": "^5.0.1", - "base64url": "^3.0.1", - "elliptic": "^6.4.1", - "key-encoder": "^1.1.7", - "validator": "^10.9.0" + "@types/bn.js": "*" + } + }, + "@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + }, + "bip174": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-1.0.1.tgz", + "integrity": "sha512-Mq2aFs1TdMfxBpYPg7uzjhsiXbAtoVq44TNjEWtvuZBiBgc3m7+n55orYMtTAxdg7jWbL4DtH0MKocJER4xERQ==" + }, + "bitcoinjs-lib": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.6.tgz", + "integrity": "sha512-NgvnA8XXUuzpuBnVs1plzZvVOYsuont4KPzaGcVIwjktYQbCk1hUkXnt4wujIOBscNsXuu+plVbPYvtMosZI/w==", + "requires": { + "@types/node": "10.12.18", + "bech32": "^1.1.2", + "bip174": "^1.0.1", + "bip32": "^2.0.4", + "bip66": "^1.1.0", + "bitcoin-ops": "^1.4.0", + "bs58check": "^2.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.3", + "merkle-lib": "^2.0.10", + "pushdata-bitcoin": "^1.0.1", + "randombytes": "^2.0.1", + "tiny-secp256k1": "^1.1.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.0.4", + "wif": "^2.0.1" + } + }, + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "zone-file": { @@ -563,6 +627,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -656,6 +729,22 @@ "lodash.some": "^4.4.0" } }, + "chokidar": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.2.1.tgz", + "integrity": "sha512-/j5PPkb5Feyps9e+jo07jUZGvkB5Aj953NrI4s8xSVScrAo/RHeILrtdb4uzR7N6aaFFxxJ+gt8mA8HfNpw76w==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.0", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.1.3" + } + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -817,19 +906,12 @@ } }, "cross-fetch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", - "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.4.tgz", + "integrity": "sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw==", "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - }, - "dependencies": { - "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" - } + "node-fetch": "2.6.0", + "whatwg-fetch": "3.0.0" } }, "cross-spawn": { @@ -843,6 +925,14 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "css-select": { @@ -1042,9 +1132,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", - "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.1.tgz", + "integrity": "sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -1054,9 +1144,9 @@ "debug": "^4.0.1", "doctrine": "^3.0.0", "eslint-scope": "^5.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^6.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", @@ -1107,34 +1197,18 @@ "ms": "^2.1.1" } }, - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -1142,29 +1216,29 @@ } }, "eslint-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.0.tgz", - "integrity": "sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", "dev": true, "requires": { "eslint-visitor-keys": "^1.0.0" } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, "espree": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", - "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { @@ -1192,9 +1266,9 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -1331,6 +1405,15 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -1368,9 +1451,9 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.0.tgz", - "integrity": "sha512-WXieX3G/8side6VIqx44ablyULoGruSde5PNTxoUyo5CeyAMX6nVWUd0rgist/EuX655cjhUhTo1Fo3tRYqbcA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -1393,6 +1476,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.1.tgz", + "integrity": "sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw==", + "dev": true, + "optional": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -1422,9 +1512,9 @@ } }, "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -1552,9 +1642,9 @@ } }, "iced-runtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/iced-runtime/-/iced-runtime-1.0.3.tgz", - "integrity": "sha1-LU9PuZmreqVDCxk8d6f85BGDGc4=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/iced-runtime/-/iced-runtime-1.0.4.tgz", + "integrity": "sha512-rgiJXNF6ZgF2Clh/TKUlBDW3q51YPDJUXmxGQXx1b8tbZpVpTn+1RX9q1sjNkujXIIaVxZByQzPHHORg7KV51g==" }, "iconv-lite": { "version": "0.4.24", @@ -1602,9 +1692,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "inquirer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", - "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -1632,6 +1722,15 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1653,6 +1752,12 @@ "is-extglob": "^2.1.1" } }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -1778,16 +1883,6 @@ "verror": "1.10.0" } }, - "key-encoder": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/key-encoder/-/key-encoder-1.1.7.tgz", - "integrity": "sha512-7qjnX+t+l1kPeozKAm3/UO216/HseXw7xxXd8WkT2i/moFIZIN46RzoaCeScBoEwGF2mUUuPRu4j8EHP0BGfpg==", - "requires": { - "asn1.js": "^5.0.1", - "bn.js": "^4.11.8", - "elliptic": "^6.4.1" - } - }, "kuler": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", @@ -2029,6 +2124,12 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -2146,6 +2247,12 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -2172,9 +2279,9 @@ } }, "psl": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", - "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" }, "punycode": { "version": "2.1.1", @@ -2195,9 +2302,9 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.2.tgz", - "integrity": "sha512-J3Qi8XZJXh93t2FiKyd/7Ec6GNifsjKXUsVFkSBj/kjLsDylWhnCz4NT1bkPcKotttPW+QbKGqqPH8OoI2pdqw==", + "version": "6.8.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.3.tgz", + "integrity": "sha512-llcxWccnyaWlODe7A9hRjkvdCKamEKTh+wH8ITdTc3OhchaqUZteiSCX/2ablWHVrkVIe04dntnaZJ7BdyW0lQ==", "requires": { "decode-uri-component": "^0.2.0", "split-on-first": "^1.0.0", @@ -2238,6 +2345,15 @@ "util-deprecate": "^1.0.1" } }, + "readdirp": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.3.tgz", + "integrity": "sha512-ZOsfTGkjO2kqeR5Mzr5RYDbTGYneSkdNKX2fOX2P5jF7vMrd/GNnIAUtDldeHHumHUCQ3V05YfWUdxMPAsRu9Q==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -2317,6 +2433,11 @@ "inherits": "^2.0.1" } }, + "ripemd160-min": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.5.tgz", + "integrity": "sha512-lcz1Gkecuq0zvAeRZUIWE8bJA2PE8F7VfdmRUcIWhXuDtvLQJJJStHi9ZrDlb4mH8JPGDbNDBdDLtIsNrEYARg==" + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -2327,9 +2448,9 @@ } }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -2361,9 +2482,9 @@ } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "send": { @@ -2576,9 +2697,9 @@ } }, "table": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz", - "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { "ajv": "^6.10.2", @@ -2650,6 +2771,15 @@ "os-tmpdir": "~1.0.2" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -2690,9 +2820,9 @@ } }, "ts-node": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", - "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.4.1.tgz", + "integrity": "sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw==", "dev": true, "requires": { "arg": "^4.1.0", @@ -2705,8 +2835,7 @@ "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tsutils": { "version": "3.17.1", @@ -2754,17 +2883,17 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", + "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", "dev": true }, "uglify-js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", - "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.1.tgz", + "integrity": "sha512-+dSJLJpXBb6oMHP+Yvw8hUgElz4gLTh82XuX68QiJVTXaE5ibl6buzhNkQdYhBlIhozWOC9ge16wyRmjG4TwVQ==", "requires": { - "commander": "~2.20.0", + "commander": "2.20.0", "source-map": "~0.6.1" } }, @@ -2792,21 +2921,16 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" }, "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", "dev": true }, - "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" - }, "varuint-bitcoin": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.0.tgz", @@ -2831,9 +2955,9 @@ } }, "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" }, "which": { "version": "1.3.1", diff --git a/package.json b/package.json index ec0add0..c596c4a 100644 --- a/package.json +++ b/package.json @@ -62,11 +62,11 @@ } ], "devDependencies": { - "@typescript-eslint/eslint-plugin": "^2.0.0", - "@typescript-eslint/parser": "^2.0.0", - "eslint": "^6.1.0", - "ts-node": "^8.3.0", - "typescript": "^3.5.3" + "@typescript-eslint/eslint-plugin": "^2.4.0", + "@typescript-eslint/parser": "^2.4.0", + "eslint": "^6.5.1", + "ts-node": "^8.4.1", + "typescript": "^3.6.4" }, "dependencies": { "@types/bn.js": "^4.11.5", @@ -76,11 +76,12 @@ "@types/node": "^11.13.8", "@types/node-fetch": "^2.5.0", "@types/ripemd160": "^2.0.0", + "@types/triplesec": "^3.0.0", "ajv": "^4.11.5", "bip32": "^2.0.4", "bip39": "^3.0.2", - "bitcoinjs-lib": "^5.1.2", - "blockstack": "^19.2.2", + "bitcoinjs-lib": "^5.1.6", + "blockstack": "github:blockstack/blockstack.js#feature/crypto-isolation", "c32check": "^0.0.6", "cors": "^2.8.4", "express": "^4.16.0", @@ -88,6 +89,7 @@ "jsontokens": "^2.0.2", "node-fetch": "^2.6.0", "ripemd160": "^2.0.1", + "triplesec": "^3.0.27", "winston": "^3.2.1", "zone-file": "^0.2.2" } diff --git a/src/auth.ts b/src/auth.ts index 0fda72e..b093cae 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -138,7 +138,7 @@ async function makeSignInLink(network: CLINetworkAdapter, const appPrivateKey = await getAppPrivateKey(network, mnemonic, id, appOrigin); const associationToken = makeAssociationToken(appPrivateKey, id.privateKey); - const authResponseTmp = blockstack.makeAuthResponse( + const authResponseTmp = await blockstack.makeAuthResponse( id.privateKey, {}, id.name, diff --git a/src/cli.ts b/src/cli.ts index e267af7..8848532 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -360,11 +360,11 @@ function getZonefile(network: CLINetworkAdapter, args: string[]) : Promise { +async function txPreorder(network: CLINetworkAdapter, args: string[], preorderTxOnly: boolean = false) : Promise { const name = args[0]; const IDaddress = args[1]; const paymentKey = decodePrivateKey(args[2]); - const paymentAddress = getPrivateKeyAddress(network, paymentKey); + const paymentAddress = await getPrivateKeyAddress(network, paymentKey); if (!IDaddress.startsWith('ID-')) { throw new Error('Recipient ID-address must start with ID-'); @@ -496,7 +496,7 @@ function txPreorder(network: CLINetworkAdapter, args: string[], preorderTxOnly: * (in which case, @zonefile will be ignored) * @registerTxOnly (boolean) OPTIONAL: used internally to coerce returning only the tx */ -function txRegister(network: CLINetworkAdapter, args: string[], registerTxOnly: boolean = false) : Promise { +async function txRegister(network: CLINetworkAdapter, args: string[], registerTxOnly: boolean = false) : Promise { const name = args[0]; const IDaddress = args[1]; const paymentKey = decodePrivateKey(args[2]); @@ -532,7 +532,7 @@ function txRegister(network: CLINetworkAdapter, args: string[], registerTxOnly: } } - const paymentAddress = getPrivateKeyAddress(network, paymentKey); + const paymentAddress = await getPrivateKeyAddress(network, paymentKey); const paymentUTXOsPromise = network.getUTXOs(paymentAddress); const estimatePromise = paymentUTXOsPromise.then((utxos : UTXO[]) => { @@ -704,7 +704,7 @@ function makeZonefile(network: CLINetworkAdapter, args: string[]) : Promise { +async function update(network: CLINetworkAdapter, args: string[]) : Promise { const name = args[0]; let zonefilePath = args[1]; const ownerKey = decodePrivateKey(args[2]); @@ -723,8 +723,8 @@ function update(network: CLINetworkAdapter, args: string[]) : Promise { zonefile = fs.readFileSync(zonefilePath).toString(); } - const ownerAddress = getPrivateKeyAddress(network, ownerKey); - const paymentAddress = getPrivateKeyAddress(network, paymentKey); + const ownerAddress = await getPrivateKeyAddress(network, ownerKey); + const paymentAddress = await getPrivateKeyAddress(network, paymentKey); const ownerUTXOsPromise = network.getUTXOs(ownerAddress); const paymentUTXOsPromise = network.getUTXOs(paymentAddress); @@ -816,14 +816,14 @@ function update(network: CLINetworkAdapter, args: string[]) : Promise { * @ownerKey (string) the owner private key * @paymentKey (string) the payment private key */ -function transfer(network: CLINetworkAdapter, args: string[]) : Promise { +async function transfer(network: CLINetworkAdapter, args: string[]) : Promise { const name = args[0]; const IDaddress = args[1]; const keepZoneFile = (args[2].toLowerCase() === 'true'); const ownerKey = decodePrivateKey(args[3]); const paymentKey = decodePrivateKey(args[4]); - const ownerAddress = getPrivateKeyAddress(network, ownerKey); - const paymentAddress = getPrivateKeyAddress(network, paymentKey); + const ownerAddress = await getPrivateKeyAddress(network, ownerKey); + const paymentAddress = await getPrivateKeyAddress(network, paymentKey); if (!IDaddress.startsWith('ID-')) { throw new Error('Recipient ID-address must start with ID-'); @@ -961,8 +961,8 @@ async function renew(network: CLINetworkAdapter, args: string[]) : Promise= 5 && !!args[4]) { @@ -1119,12 +1119,12 @@ async function renew(network: CLINetworkAdapter, args: string[]) : Promise { +async function revoke(network: CLINetworkAdapter, args: string[]) : Promise { const name = args[0]; const ownerKey = decodePrivateKey(args[1]); const paymentKey = decodePrivateKey(args[2]); - const paymentAddress = getPrivateKeyAddress(network, paymentKey); - const ownerAddress = getPrivateKeyAddress(network, ownerKey); + const paymentAddress = await getPrivateKeyAddress(network, paymentKey); + const ownerAddress = await getPrivateKeyAddress(network, ownerKey); const ownerUTXOsPromise = network.getUTXOs(ownerAddress); const paymentUTXOsPromise = network.getUTXOs(paymentAddress); @@ -1214,11 +1214,11 @@ function revoke(network: CLINetworkAdapter, args: string[]) : Promise { * @address (string) the address to reveal the namespace * @paymentKey (string) the payment private key */ -function namespacePreorder(network: CLINetworkAdapter, args: string[]) : Promise { +async function namespacePreorder(network: CLINetworkAdapter, args: string[]) : Promise { const namespaceID = args[0]; const address = args[1]; const paymentKey = decodePrivateKey(args[2]); - const paymentAddress = getPrivateKeyAddress(network, paymentKey); + const paymentAddress = await getPrivateKeyAddress(network, paymentKey); const txPromise = blockstack.transactions.makeNamespacePreorder( namespaceID, address, paymentKey, !hasKeys(paymentKey)); @@ -1288,7 +1288,7 @@ function namespacePreorder(network: CLINetworkAdapter, args: string[]) : Promise return safetyChecksPromise .then((safetyChecksResult : any) => { if (!safetyChecksResult.status) { - return new Promise((resolve : any) => resolve(JSONStringify(safetyChecksResult))); + return JSONStringify(safetyChecksResult); } if (txOnly) { @@ -1318,7 +1318,7 @@ function namespacePreorder(network: CLINetworkAdapter, args: string[]) : Promise * @noVowelDiscount (int) the no-vowel price discount * @paymentKey (string) the payment private key */ -function namespaceReveal(network: CLINetworkAdapter, args: string[]) : Promise { +async function namespaceReveal(network: CLINetworkAdapter, args: string[]) : Promise { const namespaceID = args[0]; const revealAddr = args[1]; const version = parseInt(args[2]); @@ -1355,7 +1355,7 @@ function namespaceReveal(network: CLINetworkAdapter, args: string[]) : Promise { @@ -1417,7 +1417,7 @@ function namespaceReveal(network: CLINetworkAdapter, args: string[]) : Promise { if (!safetyChecksResult.status) { - return new Promise((resolve : any) => resolve(JSONStringify(safetyChecksResult, true))); + return JSONStringify(safetyChecksResult, true); } if (txOnly) { @@ -1439,10 +1439,10 @@ function namespaceReveal(network: CLINetworkAdapter, args: string[]) : Promise { +async function namespaceReady(network: CLINetworkAdapter, args: string[]) : Promise { const namespaceID = args[0]; const revealKey = decodePrivateKey(args[1]); - const revealAddress = getPrivateKeyAddress(network, revealKey); + const revealAddress = await getPrivateKeyAddress(network, revealKey); const txPromise = blockstack.transactions.makeNamespaceReady( namespaceID, revealKey, !hasKeys(revealKey)); @@ -1531,7 +1531,7 @@ function namespaceReady(network: CLINetworkAdapter, args: string[]) : Promise { +async function nameImport(network: CLINetworkAdapter, args: string[]) : Promise { const name = args[0]; const IDrecipientAddr = args[1]; const gaiaHubUrl = args[2]; @@ -1563,14 +1563,14 @@ function nameImport(network: CLINetworkAdapter, args: string[]) : Promise JSONStringify({ + return JSONStringify({ 'status': false, 'error': e.message, 'hints': [ 'Make sure the Gaia hub URL does not have any trailing /\'s', 'Make sure the Gaia hub URL scheme is present and well-formed' ] - }, true)); + }, true); } zonefile = blockstack.makeProfileZoneFile(name, profileUrl); @@ -1578,7 +1578,7 @@ function nameImport(network: CLINetworkAdapter, args: string[]) : Promise { if (!safetyChecksResult.status) { - return new Promise((resolve : any) => resolve(JSONStringify(safetyChecksResult, true))); + return JSONStringify(safetyChecksResult, true); } if (txOnly) { @@ -1681,11 +1681,11 @@ function nameImport(network: CLINetworkAdapter, args: string[]) : Promise { +async function announce(network: CLINetworkAdapter, args: string[]) : Promise { const messageHash = args[0]; const senderKey = decodePrivateKey(args[1]); - const senderAddress = getPrivateKeyAddress(network, senderKey); + const senderAddress = await getPrivateKeyAddress(network, senderKey); const txPromise = blockstack.transactions.makeAnnounce( messageHash, senderKey, !hasKeys(senderKey)); @@ -1766,13 +1766,13 @@ function announce(network: CLINetworkAdapter, args: string[]) : Promise * @arg zonefile (string) OPTIONAL the path to the zone file to give this name. * supercedes gaiaHubUrl */ -function register(network: CLINetworkAdapter, args: string[]) : Promise { +async function register(network: CLINetworkAdapter, args: string[]) : Promise { const name = args[0]; const ownerKey = args[1]; const paymentKey = decodePrivateKey(args[2]); const gaiaHubUrl = args[3]; - const address = getPrivateKeyAddress(network, ownerKey); + const address = await getPrivateKeyAddress(network, ownerKey); const emptyProfile : any = {type: '@Person', account: []}; let zonefilePromise : Promise; @@ -2021,13 +2021,13 @@ function registerAddr(network: CLINetworkAdapter, args: string[]) : Promise { +async function registerSubdomain(network: CLINetworkAdapter, args: string[]) : Promise { const name = args[0]; const ownerKey = decodePrivateKey(args[1]); const gaiaHubUrl = args[2]; const registrarUrl = args[3]; - const address = getPrivateKeyAddress(network, ownerKey); + const address = await getPrivateKeyAddress(network, ownerKey); const mainnetAddress = network.coerceMainnetAddress(address); const emptyProfile : any = {type: '@Person', account: []}; const onChainName = name.split('.').slice(-2).join('.'); @@ -2168,7 +2168,7 @@ function profileSign(network: CLINetworkAdapter, args: string[]) : Promise { +async function profileVerify(network: CLINetworkAdapter, args: string[]) : Promise { const profilePath = args[0]; let publicKeyOrAddress = args[1]; @@ -2179,25 +2179,23 @@ function profileVerify(network: CLINetworkAdapter, args: string[]) : Promise { - let profileToken = null; - - try { - const profileTokens = JSON.parse(profileString); - profileToken = profileTokens[0].token; - } - catch (e) { - // might be a raw token - profileToken = profileString; - } + let profileToken = null; + + try { + const profileTokens = JSON.parse(profileString); + profileToken = profileTokens[0].token; + } + catch (e) { + // might be a raw token + profileToken = profileString; + } - if (!profileToken) { - throw new Error(`Data at ${profilePath} does not appear to be a signed profile`); - } - - const profile = blockstack.extractProfile(profileToken, publicKeyOrAddress); - return JSONStringify(profile); - }); + if (!profileToken) { + throw new Error(`Data at ${profilePath} does not appear to be a signed profile`); + } + + const profile = await blockstack.extractProfile(profileToken, publicKeyOrAddress); + return JSONStringify(profile); } @@ -2213,7 +2211,7 @@ function profileVerify(network: CLINetworkAdapter, args: string[]) : Promise { +async function profileStore(network: CLINetworkAdapter, args: string[]) : Promise { const nameOrAddress = args[0]; const signedProfilePath = args[1]; const privateKey = decodePrivateKey(args[2]); @@ -2221,7 +2219,7 @@ function profileStore(network: CLINetworkAdapter, args: string[]) : Promise; @@ -2558,7 +2556,7 @@ function sendBTC(network: CLINetworkAdapter, args: string[]) : Promise { * @privateKeyBTC (string) the hex-encoded private key to use to fund the BTC fee * @memo (string) OPTIONAL: a 34-byte memo to include */ -function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise { +async function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise { const recipientAddress = c32check.c32ToB58(args[0]); const tokenType = args[1]; const tokenAmount = new BN(args[2]); @@ -2570,7 +2568,7 @@ function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise { +async function getKeyAddress(network: CLINetworkAdapter, args: string[]) : Promise { const privateKey = decodePrivateKey(args[0]); - return Promise.resolve().then(() => { - const addr = getPrivateKeyAddress(network, privateKey); - return JSONStringify({ - 'BTC': addr, - 'STACKS': c32check.b58ToC32(addr) - }); + const addr = await getPrivateKeyAddress(network, privateKey); + return JSONStringify({ + 'BTC': addr, + 'STACKS': c32check.b58ToC32(addr) }); } @@ -3055,7 +3051,7 @@ async function gaiaSetHub(network: CLINetworkAdapter, args: string[]) : Promise< } appPrivateKey = `${canonicalPrivateKey(appPrivateKey)}01`; - const appAddress = network.coerceMainnetAddress(getPrivateKeyAddress(network, appPrivateKey)); + const appAddress = network.coerceMainnetAddress(await getPrivateKeyAddress(network, appPrivateKey)); if (existingAppAddress && appAddress !== existingAppAddress) { throw new Error(`BUG: ${existingAppAddress} !== ${appAddress}`); diff --git a/src/data.ts b/src/data.ts index a5c40b7..09778e0 100644 --- a/src/data.ts +++ b/src/data.ts @@ -85,7 +85,7 @@ export function makeAssociationToken(appPrivateKey: string, identityKey: string) * Process a (fake) session token and set up a Gaia hub connection. * Returns a Promise that resolves to the (fake) userData */ -export function gaiaAuth(network: CLINetworkAdapter, +export async function gaiaAuth(network: CLINetworkAdapter, appPrivateKey: string | null, hubUrl: string | null, ownerPrivateKey?: string) : Promise { @@ -99,7 +99,7 @@ export function gaiaAuth(network: CLINetworkAdapter, associationToken = makeAssociationToken(appPrivateKey, ownerPrivateKey); } - const authSessionToken = makeFakeAuthResponseToken(appPrivateKey, hubUrl, associationToken); + const authSessionToken = await makeFakeAuthResponseToken(appPrivateKey, hubUrl, associationToken); const nameLookupUrl = `${network.blockstackAPIUrl}/v1/names/`; const transitPrivateKey = 'f33fb466154023aba2003c17158985aa6603db68db0f1afc0fcf1d641ea6c2cb'; // same as above return blockstack.handlePendingSignIn(nameLookupUrl, authSessionToken, transitPrivateKey); @@ -112,15 +112,15 @@ export function gaiaAuth(network: CLINetworkAdapter, * Make sure we use a mainnet address always, even in test mode. * Returns a Promise that resolves to a GaiaHubConfig */ -export function gaiaConnect(network: CLINetworkAdapter, +export async function gaiaConnect(network: CLINetworkAdapter, gaiaHubUrl: string, privateKey: string, ownerPrivateKey?: string ) { const addressMainnet = network.coerceMainnetAddress( - getPrivateKeyAddress(network, `${canonicalPrivateKey(privateKey)}01`)); + await getPrivateKeyAddress(network, `${canonicalPrivateKey(privateKey)}01`)); const addressMainnetCanonical = network.coerceMainnetAddress( - getPrivateKeyAddress(network, canonicalPrivateKey(privateKey))); + await getPrivateKeyAddress(network, canonicalPrivateKey(privateKey))); let associationToken; if (ownerPrivateKey) { @@ -283,10 +283,10 @@ export function gaiaUploadProfileAll(network: CLINetworkAdapter, * * Returns a promise that resolves to the zone file with the profile URL */ -export function makeZoneFileFromGaiaUrl(network: CLINetworkAdapter, name: string, - gaiaHubUrl: string, ownerKey: string) { +export async function makeZoneFileFromGaiaUrl(network: CLINetworkAdapter, name: string, + gaiaHubUrl: string, ownerKey: string): Promise { - const address = getPrivateKeyAddress(network, ownerKey); + const address = await getPrivateKeyAddress(network, ownerKey); const mainnetAddress = network.coerceMainnetAddress(address); return gaiaConnect(network, gaiaHubUrl, ownerKey) diff --git a/src/encrypt.ts b/src/encrypt.ts index 100b677..b059d67 100644 --- a/src/encrypt.ts +++ b/src/encrypt.ts @@ -1,10 +1,11 @@ import * as blockstack from 'blockstack'; +import * as triplesec from 'triplesec'; export function encryptBackupPhrase(plaintextBuffer: string, password: string) : Promise { return blockstack.encryptMnemonic(plaintextBuffer, password); } export function decryptBackupPhrase(dataBuffer: string | Buffer, password: string) : Promise { - return blockstack.decryptMnemonic(dataBuffer, password); + return blockstack.decryptMnemonic(dataBuffer, password, triplesec.decrypt); } diff --git a/src/keys.ts b/src/keys.ts index 13def00..afb7cb1 100644 --- a/src/keys.ts +++ b/src/keys.ts @@ -102,7 +102,7 @@ export async function getOwnerKeyInfo(network: CLINetworkAdapter, export async function getPaymentKeyInfo(network: CLINetworkAdapter, mnemonic : string): Promise { const wallet = await walletFromMnemonic(mnemonic); const privkey = wallet.getBitcoinPrivateKey(0); - const addr = getPrivateKeyAddress(network, privkey); + const addr = await getPrivateKeyAddress(network, privkey); const result: PaymentKeyInfoType = { privateKey: privkey, address: { @@ -179,8 +179,8 @@ export async function getApplicationKeyInfo(network: CLINetworkAdapter, //const appPrivateKey = blockstack.BlockstackWallet.getAppPrivateKey( // appsNode.toBase58(), wallet.getIdentitySalt(), appDomain); - const legacyAppPrivateKey = blockstack.BlockstackWallet.getLegacyAppPrivateKey( - appsNode.toBase58(), wallet.getIdentitySalt(), appDomain); + const legacyAppPrivateKey = await blockstack.BlockstackWallet.getLegacyAppPrivateKey( + appsNode.toBase58(), await wallet.getIdentitySalt(), appDomain); // TODO: figure out when we can start using the new derivation path const res : AppKeyInfoType = { @@ -190,7 +190,7 @@ export async function getApplicationKeyInfo(network: CLINetworkAdapter, }, legacyKeyInfo: { privateKey: legacyAppPrivateKey, - address: getPrivateKeyAddress(network, `${legacyAppPrivateKey}01`) + address: await getPrivateKeyAddress(network, `${legacyAppPrivateKey}01`) }, ownerKeyIndex: idIndex }; diff --git a/src/utils.ts b/src/utils.ts index 6cec32d..781486d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -55,8 +55,8 @@ class CLITransactionSigner implements TransactionSigner { return Promise.resolve().then(() => this.address); } - signTransaction(_txIn: bitcoinjs.TransactionBuilder, _signingIndex: number) : Promise { - return Promise.resolve().then(() => {}); + async signTransaction(_txIn: bitcoinjs.TransactionBuilder, _signingIndex: number) : Promise { + return Promise.resolve(); } signerVersion() : number { return 0; } @@ -382,7 +382,7 @@ export function getPublicKeyFromPrivateKey(privateKey: string) : string { * Get a private key's address. Honor the 01 to compress the public key * @privateKey (string) the hex-encoded private key */ -export function getPrivateKeyAddress(network: CLINetworkAdapter, privateKey: string | CLITransactionSigner) : string { +export async function getPrivateKeyAddress(network: CLINetworkAdapter, privateKey: string | CLITransactionSigner) : Promise { if (isCLITransactionSigner(privateKey)) { const pkts = privateKey as CLITransactionSigner; return pkts.address; @@ -390,7 +390,7 @@ export function getPrivateKeyAddress(network: CLINetworkAdapter, privateKey: str else { const pk = privateKey as string; const ecKeyPair = blockstack.hexStringToECPair(pk); - return network.coerceAddress(blockstack.ecPairToAddress(ecKeyPair)); + return network.coerceAddress(await blockstack.ecPairToAddress(ecKeyPair)); } } @@ -449,7 +449,7 @@ export function checkUrl(url: string) : string { */ export function makeProfileJWT(profileData: Object, privateKey: string) : string { const signedToken = blockstack.signProfileToken(profileData, privateKey); - const wrappedToken = blockstack.wrapProfileToken(signedToken); + const wrappedToken: {token: string; decodedToken: {}} = blockstack.wrapProfileToken(signedToken); const tokenRecords = [wrappedToken]; return JSONStringify(tokenRecords); } @@ -462,42 +462,33 @@ export function makeProfileJWT(profileData: Object, privateKey: string) : string export async function broadcastTransactionAndZoneFile(network: CLINetworkAdapter, tx: string, zonefile?: string) { - let txid : string; - return Promise.resolve().then(() => { - return network.broadcastTransaction(tx); - }) - .then((_txid : string) => { - txid = _txid; - if (zonefile) { - return network.broadcastZoneFile(zonefile, txid); - } - else { - return { 'status': true }; - } - }) - .then((resp) => { - if (!resp.status) { - return { - 'status': false, - 'error': 'Failed to broadcast zone file', - 'txid': txid - }; - } - else { - return { - 'status': true, - 'txid': txid - }; - } - }) - .catch((e) => { + try { + const txid: string = await network.broadcastTransaction(tx); + let resp = { 'status': true }; + if (zonefile) { + resp = await network.broadcastZoneFile(zonefile, txid); + } + if (!resp.status) { return { 'status': false, - 'error': 'Caught exception sending transaction or zone file', - 'message': e.message, - 'stacktrace': e.stack + 'error': 'Failed to broadcast zone file', + 'txid': txid }; - }); + } + else { + return { + 'status': true, + 'txid': txid + }; + } + } catch(e) { + return { + 'status': false, + 'error': 'Caught exception sending transaction or zone file', + 'message': e.message, + 'stacktrace': e.stack + }; + } } From 89932ba0ba4423476e0be53a454dbb9d35ad4d75 Mon Sep 17 00:00:00 2001 From: Matthew Little Date: Tue, 15 Oct 2019 10:52:55 -0400 Subject: [PATCH 2/2] Fix linting errors --- src/argparse.ts | 12 +++++++----- src/cli.ts | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/argparse.ts b/src/argparse.ts index 33d7211..354b1fa 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -2813,14 +2813,16 @@ export function getCommandArgs(command: string, argsList: Array) { export interface CheckArgsSuccessType { success: true; command: string; - args: Array + args: Array; + error?: false; + usage?: false; }; export interface CheckArgsFailType { success: false; error: string; command: string; - usage: boolean + usage: boolean; }; export function checkArgs(argList: Array) @@ -2876,10 +2878,10 @@ export function checkArgs(argList: Array) const ajv = Ajv(); const valid = ajv.validate(commandSchema, commandArgs); if (!valid) { - let errorMsg = ""; + let errorMsg = ''; for (let i = 0; i < ajv.errors.length; i++) { - const msg = `Invalid command arguments: Schema "${ajv.errors[0].schemaPath}" failed validation (problem: "${ajv.errors[0].message}", cause: "${JSON.stringify(ajv.errors[0].params)}")\n`; - errorMsg += msg; + const msg = `Invalid command arguments: Schema "${ajv.errors[0].schemaPath}" failed validation (problem: "${ajv.errors[0].message}", cause: "${JSON.stringify(ajv.errors[0].params)}")\n`; + errorMsg += msg; } return { 'success': false, diff --git a/src/cli.ts b/src/cli.ts index 78c88a8..be5b312 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -3404,10 +3404,10 @@ export function CLIMain() { const argv = process.argv; const opts = getCLIOpts(argv); - const cmdArgs : any = checkArgs(CLIOptAsStringArray(opts, '_') ? CLIOptAsStringArray(opts, '_') : []); + const cmdArgs = checkArgs(CLIOptAsStringArray(opts, '_') ? CLIOptAsStringArray(opts, '_') : []); if (!cmdArgs.success) { if (cmdArgs.error) { - console.log(cmdArgs.error); + console.log(cmdArgs.error); } if (cmdArgs.usage) { if (cmdArgs.command) {