From 5eefcd42d59de0751b767f8cc6ef11bab2be4395 Mon Sep 17 00:00:00 2001 From: Ken Date: Thu, 2 Apr 2020 22:48:20 -0400 Subject: [PATCH 01/23] feature: send_tokens builds stacks 2.0 transactions --- src/argparse.ts | 16 ++++---- src/cli.ts | 98 +++++++------------------------------------------ 2 files changed, 22 insertions(+), 92 deletions(-) diff --git a/src/argparse.ts b/src/argparse.ts index 6908083..175b890 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -1990,25 +1990,25 @@ export const CLI_ARGS = { pattern: STACKS_ADDRESS_PATTERN }, { - name: 'type', + name: 'amount', type: 'string', - realtype: 'token-type', - pattern: `^${NAMESPACE_PATTERN}$|^STACKS$` + realtype: 'integer', + pattern: '^[0-9]+$' }, { - name: 'amount', + name: 'feerate', type: 'string', realtype: 'integer', pattern: '^[0-9]+$' }, { - name: 'payment_key', + name: 'nonce', type: 'string', - realtype: 'private_key', - pattern: `${PRIVATE_KEY_PATTERN_ANY}` + realtype: 'integer', + pattern: '^[0-9]+$' }, { - name: 'bitcoin_fee_key', + name: 'payment_key', type: 'string', realtype: 'private_key', pattern: `${PRIVATE_KEY_PATTERN_ANY}` diff --git a/src/cli.ts b/src/cli.ts index e3ada47..79ea517 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -12,6 +12,7 @@ import * as bip39 from 'bip39'; import * as express from 'express'; import * as path from 'path'; import fetch from 'node-fetch'; +import { makeSTXTokenTransfer } from '@blockstack/stacks-transactions' const c32check = require('c32check'); @@ -2576,104 +2577,33 @@ function sendBTC(network: CLINetworkAdapter, args: string[]) : Promise { * Send tokens from one account private key to another account's address. * args: * @recipientAddress (string) the recipient's account address - * @tokenType (string) the type of tokens to send * @tokenAmount (int) the number of tokens to send + * @feeRate (int) the fee rate to pay + * @nonce (int) integer nonce needs to be incremented after each transaction from an account * @privateKey (string) the hex-encoded private key to use to send the tokens - * @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 { - const recipientAddress = c32check.c32ToB58(args[0]); - const tokenType = args[1]; - const tokenAmount = new BN(args[2]); - const privateKey = decodePrivateKey(args[3]); - const privateKeyBTC = decodePrivateKey(args[4]); + const recipientAddress = args[0]; + const tokenAmount = new BN(args[1]); + const feeRate = new BN(args[2]); + const nonce = new BN(args[3]); + const privateKey = args[4]; + let memo = ''; if (args.length > 4 && !!args[5]) { memo = args[5]; } - const senderAddress = getPrivateKeyAddress(network, privateKey); - const senderUTXOsPromise = network.getUTXOs(senderAddress); - - const txPromise = blockstack.transactions.makeTokenTransfer( - recipientAddress, tokenType, tokenAmount, memo, privateKey, privateKeyBTC, !hasKeys(privateKey)); - - const estimatePromise = senderUTXOsPromise.then((utxos) => { - const numUTXOs = utxos.length; - return blockstack.transactions.estimateTokenTransfer( - recipientAddress, tokenType, tokenAmount, memo, numUTXOs); - }); - - if (estimateOnly) { - return estimatePromise - .then((cost: number) => String(cost)); - } - - if (!safetyChecks) { - if (txOnly) { - return txPromise; - } - else { - return txPromise.then((tx) => { - return network.broadcastTransaction(tx); - }); - } + const options = { + nonce, + memo } - const btcBalancePromise = senderUTXOsPromise.then((utxos) => { - return sumUTXOs(utxos); - }); - - const receiverIsDistinctPromise = Promise.resolve().then(() => { - return recipientAddress != senderAddress - }); - - const accountStatePromise = network.getAccountStatus(senderAddress, tokenType); - const tokenBalancePromise = network.getAccountBalance(senderAddress, tokenType); - const blockHeightPromise = network.getBlockHeight(); - - const safetyChecksPromise = Promise.all( - [tokenBalancePromise, estimatePromise, btcBalancePromise, - accountStatePromise, blockHeightPromise, receiverIsDistinctPromise]) - .then(([tokenBalance, estimate, btcBalance, - accountState, blockHeight, receiverIsDistinct]) => { - if (btcBalance >= estimate && tokenBalance.cmp(tokenAmount) >= 0 && - accountState.lock_transfer_block_id <= blockHeight && receiverIsDistinct) { - return {'status': true}; - } - else { - return { - 'status': false, - 'error': 'TokenTransfer cannot be safely sent', - 'lockTransferBlockHeight': accountState.lock_transfer_block_id, - 'senderBalanceBTC': btcBalance, - 'estimateCostBTC': estimate, - 'tokenBalance': tokenBalance.toString(), - 'blockHeight': blockHeight, - 'receiverIsDistinctFromSender': receiverIsDistinct - }; - } - }); - - return safetyChecksPromise - .then((safetyChecksResult) => { - if (!safetyChecksResult.status) { - return new Promise((resolve) => resolve(JSONStringify(safetyChecksResult, true))); - } - - if (txOnly) { - return txPromise; - } + const tx = makeSTXTokenTransfer(recipientAddress, tokenAmount, feeRate, privateKey, options); - return txPromise.then((tx) => { - return network.broadcastTransaction(tx); - }) - .then((txidHex) => { - return txidHex; - }); - }); + return Promise.resolve(tx.serialize().toString('hex')); } /* From e8a1767e68bff8fc9f5c810f9b3b1a486333f87a Mon Sep 17 00:00:00 2001 From: Ken Date: Thu, 2 Apr 2020 22:48:53 -0400 Subject: [PATCH 02/23] build: add build watch script for dev --- package-lock.json | 135 ++++++++++++++++++++++++++++------------------ package.json | 7 +-- 2 files changed, 86 insertions(+), 56 deletions(-) diff --git a/package-lock.json b/package-lock.json index 27e5eb8..0be26b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,67 @@ "js-tokens": "^4.0.0" } }, + "@blockstack/stacks-transactions": { + "version": "0.2.0-alpha.2", + "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.2.0-alpha.2.tgz", + "integrity": "sha512-1K7kUYVD6rCaq/k4bJWG+d5kDrequ4GEM8QZa+JPoijcC2z1PZ7BqwH+NGVgWKAFj7fKYJZG+UUMDPCKMYy8VA==", + "requires": { + "@types/bn.js": "^4.11.6", + "@types/elliptic": "^6.4.12", + "@types/lodash": "^4.14.149", + "@types/randombytes": "^2.0.0", + "@types/ripemd160": "^2.0.0", + "@types/sha.js": "^2.4.0", + "bn.js": "^4.11.8", + "c32check": "^1.0.1", + "elliptic": "^6.5.2", + "lodash": "^4.17.15", + "randombytes": "^2.1.0", + "ripemd160": "^2.0.2", + "sha.js": "^2.4.11" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, + "@types/elliptic": { + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", + "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", + "requires": { + "@types/bn.js": "*" + } + }, + "c32check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.0.1.tgz", + "integrity": "sha512-0e1+39uLNLyRm9sNoPUCg38LOELUqiBDZXD9kpUUAFNBq21gY3VaNImp1rfznQOsqK27ArvQ2JaZmfokZznqHg==", + "requires": { + "base58check": "^2.0.0", + "ripemd160": "^2.0.1" + } + }, + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "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" + } + } + } + }, "@types/bn.js": { "version": "4.11.5", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz", @@ -106,6 +167,11 @@ "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", "dev": true }, + "@types/lodash": { + "version": "4.14.149", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", + "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==" + }, "@types/logform": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/logform/-/logform-1.2.0.tgz", @@ -129,6 +195,14 @@ "@types/node": "*" } }, + "@types/randombytes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/randombytes/-/randombytes-2.0.0.tgz", + "integrity": "sha512-bz8PhAVlwN72vqefzxa14DKNT8jK/mV66CSjwdVQM/k3Th3EPKfUtdMniwZgMedQTFuywAsfjnZsg+pEnltaMA==", + "requires": { + "@types/node": "*" + } + }, "@types/range-parser": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", @@ -151,6 +225,14 @@ "@types/mime": "*" } }, + "@types/sha.js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/sha.js/-/sha.js-2.4.0.tgz", + "integrity": "sha512-amxKgPy6WJTKuw8mpUwjX2BSxuBtBmZfRwIUDIuPJKNwGN8CWDli8JTg5ONTWOtcTkHIstvT7oAhhYXqEjStHQ==", + "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", @@ -255,12 +337,6 @@ "color-convert": "^1.9.0" } }, - "arg": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", - "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -586,12 +662,6 @@ "safe-buffer": "^5.1.2" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -920,12 +990,6 @@ "kuler": "1.0.x" } }, - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1897,12 +1961,6 @@ "triple-beam": "^1.3.0" } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -2479,16 +2537,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "split-on-first": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", @@ -2705,19 +2753,6 @@ "uglify-js": "^3.1.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==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - } - }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -2938,12 +2973,6 @@ "mkdirp": "^0.5.1" } }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, "zone-file": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/zone-file/-/zone-file-0.2.3.tgz", diff --git a/package.json b/package.json index 13e2f9c..5f4596d 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ }, "scripts": { "build": "tsc -b ./tsconfig.json", + "build:watch": "rimraf lib && tsc --watch", "prepare": "npm run build", "test": "npm run lint", "lint": "eslint src --ext .ts -f unix" @@ -65,11 +66,11 @@ "@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", - "minimist": ">=1.2.3" + "minimist": ">=1.2.3", + "typescript": "^3.5.3" }, "dependencies": { + "@blockstack/stacks-transactions": "^0.2.0-alpha.2", "@types/bn.js": "^4.11.5", "@types/cors": "^2.8.5", "@types/express": "^4.16.1", From 5786762a26a4e591d6e71f2f8fde4475ef88b31d Mon Sep 17 00:00:00 2001 From: yknl Date: Sun, 12 Apr 2020 23:00:05 -0400 Subject: [PATCH 03/23] feat: update help and broadcast transactions. --- src/argparse.ts | 22 +++------------------- src/cli.ts | 6 +++++- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/argparse.ts b/src/argparse.ts index 175b890..731fcc5 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -1996,7 +1996,7 @@ export const CLI_ARGS = { pattern: '^[0-9]+$' }, { - name: 'feerate', + name: 'fee rate', type: 'string', realtype: 'integer', pattern: '^[0-9]+$' @@ -2029,48 +2029,32 @@ export const CLI_ARGS = { 'via the `get_confirmations` command. Once the transaction has 7 confirmations, the Blockstack peer network ' + 'will have processed it, and your payment key balance and recipient balance will be updated.\n' + '\n' + - 'At this time, token transfers are encoded as Bitcoin transactions. As such, you will need to pay a transaction ' + - 'fee in Bitcoin. Your payment key should have both a Bitcoin balance and a Stacks balance (you can check with ' + - 'the "balance" command).\n' + - '\n' + 'Example:\n' + '\n' + ' $ # check balances of sender and recipient before sending.\n' + ' $ # address of the key below is SP2SC16ASH76GX549PT7J5WQZA4GHMFBKYMBQFF9V\n' + ' $ export PAYMENT="bfeffdf57f29b0cc1fab9ea197bb1413da2561fe4b83e962c7f02fbbe2b1cd5401"\n' + - ' $ export BTC_PAYMENT="4be95a5987ec727c033aa48a3fb1dbadb750446c1c63a02707a0b1c28e7ec17801"\n' + ' $ blockstack-cli balance SP2SC16ASH76GX549PT7J5WQZA4GHMFBKYMBQFF9V\n' + ' {\n' + - ' "BTC": "125500"\n' + ' "STACKS": "10000000"\n' + ' }\n' + ' $ blockstack-cli balance SP1P10PS2T517S4SQGZT5WNX8R00G1ECTRKYCPMHY\n' + ' {\n' + - ' "BTC": "0"\n' + ' "STACKS": "0"\n' + ' }\n' + '\n' + ' $ # send tokens\n' + - ' $ blockstack-cli send_tokens SP1P10PS2T517S4SQGZT5WNX8R00G1ECTRKYCPMHY STACKS 12345 "$PAYMENT" "$BTC_PAYMENT"\n' + + ' $ blockstack-cli send_tokens SP1P10PS2T517S4SQGZT5WNX8R00G1ECTRKYCPMHY 12345 1 0 "$PAYMENT"\n' + ' a9d387a925fb0ba7a725fb1e11f2c3f1647473699dd5a147c312e6453d233456\n' + '\n' + - ' $ # wait 7 confirmations\n' + - ' $ blockstack-cli get_confirmations a9d387a925fb0ba7a725fb1e11f2c3f1647473699dd5a147c312e6453d233456\n' + - ' {\n' + - ' "blockHeight": 567890,\n' + - ' "confirmations": 7,\n' + - ' }\n' + + ' $ # wait for transaction to be confirmed\n' + '\n' + - ' $ # check balance again. The recipient receives some dust to encode the Stacks transfer,\n' + - ' $ # and the sender pays for the transaction fee.\n' + ' $ blockstack-cli balance SP2SC16ASH76GX549PT7J5WQZA4GHMFBKYMBQFF9V\n' + ' {\n' + - ' "BTC": "117000"\n' + ' "STACKS": "9987655"\n' + ' }\n' + ' $ blockstack-cli balance SP1P10PS2T517S4SQGZT5WNX8R00G1ECTRKYCPMHY\n' + ' {\n' + - ' "BTC": "5500"\n' + ' "STACKS": "12345"\n' + ' }\n' + '\n', diff --git a/src/cli.ts b/src/cli.ts index 79ea517..bffe5ee 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -2603,7 +2603,11 @@ function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise { + return tx.txid(); + }).catch((error) => { + return error.toString(); + }); } /* From fada4d11e03a4e72d01b7254e88564c5bd4063f3 Mon Sep 17 00:00:00 2001 From: yknl Date: Mon, 13 Apr 2020 23:39:03 -0400 Subject: [PATCH 04/23] feat: stacks only make_keychain and 24 word seed phrases for wallet compatbility --- src/cli.ts | 17 ++++++++++------- src/keys.ts | 17 +++++++++++------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index bffe5ee..75071d4 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -31,8 +31,10 @@ import { getApplicationKeyInfo, extractAppKey, STRENGTH, + STX_WALLET_COMPATIBLE_SEED_STRENGTH, PaymentKeyInfoType, - OwnerKeyInfoType + OwnerKeyInfoType, + StacksKeyInfoType } from './keys'; import { @@ -2355,7 +2357,7 @@ async function getStacksWalletKey(network: CLINetworkAdapter, args: string[]) : const mnemonic = await getBackupPhrase(args[0]); // keep the return value consistent with getOwnerKeys const keyObj = await getStacksWalletKeyInfo(network, mnemonic); - const keyInfo: PaymentKeyInfoType[] = []; + const keyInfo: StacksKeyInfoType[] = []; keyInfo.push(keyObj); return JSONStringify(keyInfo); } @@ -2370,15 +2372,16 @@ async function makeKeychain(network: CLINetworkAdapter, args: string[]) : Promis if (args[0]) { mnemonic = await getBackupPhrase(args[0]); } else { - mnemonic = await bip39.generateMnemonic(STRENGTH, crypto.randomBytes); + mnemonic = await bip39.generateMnemonic( + STX_WALLET_COMPATIBLE_SEED_STRENGTH, + crypto.randomBytes + ); } - const ownerKeyInfo = await getOwnerKeyInfo(network, mnemonic, 0); - const paymentKeyInfo = await getPaymentKeyInfo(network, mnemonic); + const stacksKeyInfo = await getStacksWalletKeyInfo(network, mnemonic); return JSONStringify({ 'mnemonic': mnemonic, - 'ownerKeyInfo': ownerKeyInfo, - 'paymentKeyInfo': paymentKeyInfo + 'keyInfo': stacksKeyInfo }); } diff --git a/src/keys.ts b/src/keys.ts index 8ebc64e..b3f333e 100644 --- a/src/keys.ts +++ b/src/keys.ts @@ -23,6 +23,8 @@ import * as bip32 from 'bip32'; import { BIP32Interface } from 'bip32'; export const STRENGTH = 128; // 12 words +export const STX_WALLET_COMPATIBLE_SEED_STRENGTH = 256; +export const DERIVATION_PATH = `m/44'/5757'/0'/0/0`; export type OwnerKeyInfoType = { privateKey: string; @@ -40,6 +42,12 @@ export type PaymentKeyInfoType = { index: number }; +export type StacksKeyInfoType = { + privateKey: string; + address: string; + index: number; +} + export type AppKeyInfoType = { keyInfo: { privateKey: string; @@ -123,7 +131,7 @@ export async function getPaymentKeyInfo(network: CLINetworkAdapter, mnemonic : s * .privateKey (string) the hex private key * .address (string) the address of the private key */ -export async function getStacksWalletKeyInfo(network: CLINetworkAdapter, mnemonic : string): Promise { +export async function getStacksWalletKeyInfo(network: CLINetworkAdapter, mnemonic : string): Promise { const seed = await bip39.mnemonicToSeed(mnemonic) const master = bip32.fromSeed(seed) const child = master.derivePath(`m/44'/5757'/0'/0/0`) // taken from stacks-wallet. See https://github.com/blockstack/stacks-wallet @@ -131,12 +139,9 @@ export async function getStacksWalletKeyInfo(network: CLINetworkAdapter, mnemoni const privkey = blockstack.ecPairToHexString(ecPair) const addr = getPrivateKeyAddress(network, privkey); - const result: PaymentKeyInfoType = { + const result: StacksKeyInfoType = { privateKey: privkey, - address: { - BTC: addr, - STACKS: c32check.b58ToC32(addr) - }, + address: c32check.b58ToC32(addr), index: 0 }; return result; From d40b1fedd96fe38525e9855146ca75dd12b05fcd Mon Sep 17 00:00:00 2001 From: yknl Date: Tue, 14 Apr 2020 00:15:17 -0400 Subject: [PATCH 05/23] fix: send_tokens network and help --- src/argparse.ts | 13 ++----------- src/cli.ts | 5 +++-- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/argparse.ts b/src/argparse.ts index 731fcc5..b000aec 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -1224,17 +1224,8 @@ export const CLI_ARGS = { ' $ blockstack-cli make_keychain\n' + ' {\n' + ' "mnemonic": "apart spin rich leader siren foil dish sausage fee pipe ethics bundle",\n' + - ' "ownerKeyInfo": {\n' + - ' "idAddress": "ID-192yxWSvZrss3f4ZY48tUMJJxQvuB6DcXE",\n' + - ' "index": 0,\n' + - ' "privateKey": "c0a1c606bf509059be1be27aeb88a60bb530910e16e2e605c7ef9e20a0d6bbb001",\n' + - ' "version": "v0.10-current"\n' + - ' },\n' + - ' "paymentKeyInfo": {\n' + - ' "address": {\n' + - ' "BTC": "1MRq8Vzb2pCVx9fcrBThWaV7reHhudt3ix",\n' + - ' "STACKS": "SP3G19B6J50FH6JGXAKS06N6WA1XPJCKKM4JCHC2D"\n' + - ' },\n' + + ' "keyInfo": {\n' + + ' "address": "SP3G19B6J50FH6JGXAKS06N6WA1XPJCKKM4JCHC2D"\n' + ' "index": 0,\n' + ' "privateKey": "56d30f2b605ed114c7dc45599ae521c525d07e1286fbab67452a6586ea49332a01"\n' + ' }\n' + diff --git a/src/cli.ts b/src/cli.ts index 75071d4..1e579b6 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -12,7 +12,7 @@ import * as bip39 from 'bip39'; import * as express from 'express'; import * as path from 'path'; import fetch from 'node-fetch'; -import { makeSTXTokenTransfer } from '@blockstack/stacks-transactions' +import { makeSTXTokenTransfer, TransactionVersion } from '@blockstack/stacks-transactions' const c32check = require('c32check'); @@ -2601,7 +2601,8 @@ function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise Date: Thu, 16 Apr 2020 21:23:48 -0400 Subject: [PATCH 06/23] fix: option for alternate broadcast endpoint URL and print tx only --- src/cli.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cli.ts b/src/cli.ts index 1e579b6..99226b7 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -114,6 +114,7 @@ let receiveFeesPeriod = 52595; let gracePeriod = 5000; let noExit = false; let maxIDSearchIndex = DEFAULT_MAX_ID_SEARCH_INDEX; +let defaultV2BroadcastUrl = 'https://core.blockstack.org/v2/transactions'; let BLOCKSTACK_TEST = process.env.BLOCKSTACK_TEST ? true : false; @@ -2607,7 +2608,11 @@ function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise { + if (txOnly) { + return Promise.resolve(tx.serialize().toString('hex')); + } + + return tx.broadcast(defaultV2BroadcastUrl).then(() => { return tx.txid(); }).catch((error) => { return error.toString(); @@ -3449,6 +3454,7 @@ export function CLIMain() { const magicBytes = CLIOptAsString(opts, 'm'); const apiUrl = CLIOptAsString(opts, 'H'); const transactionBroadcasterUrl = CLIOptAsString(opts, 'T'); + defaultV2BroadcastUrl = opts['T'] ? CLIOptAsString(opts, 'T') : defaultV2BroadcastUrl; const nodeAPIUrl = CLIOptAsString(opts, 'I'); const utxoUrl = CLIOptAsString(opts, 'X'); From 9589b7b281df74675b4d94e80cb4d25961d1f718 Mon Sep 17 00:00:00 2001 From: Ken Date: Thu, 23 Apr 2020 00:27:10 -0400 Subject: [PATCH 07/23] fix: update balance command. --- src/cli.ts | 54 +++++++++++------------------------------------------- 1 file changed, 11 insertions(+), 43 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index 99226b7..e362782 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -2394,57 +2394,25 @@ async function makeKeychain(network: CLINetworkAdapter, args: string[]) : Promis */ function balance(network: CLINetworkAdapter, args: string[]) : Promise { let address = args[0]; - if (address.match(STACKS_ADDRESS_PATTERN)) { - address = c32check.c32ToB58(address); - } if (BLOCKSTACK_TEST) { // force testnet address if we're in regtest or testnet mode address = network.coerceAddress(address); } - return Promise.resolve().then(() => { - return network.getAccountTokens(address); - }) - .then((tokenList) => { - let tokenAndBTC = tokenList.tokens; - if (!tokenAndBTC) { - tokenAndBTC = []; + return fetch(`${network.blockstackAPIUrl}/v2/accounts/${address}?proof=0`) + .then((response) => response.json()) + .then((response) => { + var balanceHex = response.balance; + if(balanceHex.startsWith('0x')) { + balanceHex = balanceHex.substr(2); } - - tokenAndBTC.push('BTC'); - - return Promise.all(tokenAndBTC.map((tokenType : string) => { - if (tokenType === 'BTC') { - return Promise.resolve().then(() => { - return network.getUTXOs(address); - }) - .then((utxoList : UTXO[]) => { - return { - 'token': 'BTC', - 'amount': `${sumUTXOs(utxoList)}` - }; - }); - } - else { - return Promise.resolve().then(() => { - return network.getAccountBalance(address, tokenType); - }) - .then((tokenBalance : import('bn.js')) => { - return { - 'token': tokenType, - 'amount': tokenBalance.toString() - }; - }); - } - })); - }) - .then((tokenBalances : [{token: string, amount: string}]) => { - const ret : Record = {}; - for (const tokenInfo of tokenBalances) { - ret[tokenInfo.token] = tokenInfo.amount; + const balance = new BN(balanceHex, 16); + const res = { + balance: balance.toString(10), + nonce: response.nonce } - return JSONStringify(ret); + return Promise.resolve(JSONStringify(res)); }); } From f4854c05bd55a3105327cb8714cb55fe2b9794c6 Mon Sep 17 00:00:00 2001 From: Ken Date: Thu, 23 Apr 2020 10:01:17 -0400 Subject: [PATCH 08/23] fix: update to latest transaction lib version. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5f4596d..347f473 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "typescript": "^3.5.3" }, "dependencies": { - "@blockstack/stacks-transactions": "^0.2.0-alpha.2", + "@blockstack/stacks-transactions": "^0.3.0-alpha.2", "@types/bn.js": "^4.11.5", "@types/cors": "^2.8.5", "@types/express": "^4.16.1", From bfca6bda60bd613bdf8f433f299192eaceae55f9 Mon Sep 17 00:00:00 2001 From: Ken Date: Thu, 23 Apr 2020 13:09:39 -0400 Subject: [PATCH 09/23] fix: add back ts-node dependency. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 347f473..4b9292a 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "@typescript-eslint/eslint-plugin": "^2.0.0", "@typescript-eslint/parser": "^2.0.0", "eslint": "^6.1.0", + "ts-node": "^8.3.0", "minimist": ">=1.2.3", "typescript": "^3.5.3" }, From e8f52f5019736c615798a2e3e8e5447c4faa528f Mon Sep 17 00:00:00 2001 From: Ken Date: Thu, 23 Apr 2020 14:51:47 -0400 Subject: [PATCH 10/23] build: update transaction lib version. --- package-lock.json | 94 ++++++++++++++++++++++++++++++++++++++++++----- package.json | 4 +- 2 files changed, 86 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0be26b2..ea153f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,9 +25,9 @@ } }, "@blockstack/stacks-transactions": { - "version": "0.2.0-alpha.2", - "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.2.0-alpha.2.tgz", - "integrity": "sha512-1K7kUYVD6rCaq/k4bJWG+d5kDrequ4GEM8QZa+JPoijcC2z1PZ7BqwH+NGVgWKAFj7fKYJZG+UUMDPCKMYy8VA==", + "version": "0.3.0-alpha.5", + "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.3.0-alpha.5.tgz", + "integrity": "sha512-kq4FlQ4XWqacuPqkMS1mtA3m4BZ6d7ajJqKyZnDeTajDPbuP2cKZrzg40Gu/M4ixzvXB5CGMhfMmBpL773WM+A==", "requires": { "@types/bn.js": "^4.11.6", "@types/elliptic": "^6.4.12", @@ -37,11 +37,13 @@ "@types/sha.js": "^2.4.0", "bn.js": "^4.11.8", "c32check": "^1.0.1", + "cross-fetch": "^3.0.4", "elliptic": "^6.5.2", "lodash": "^4.17.15", "randombytes": "^2.1.0", "ripemd160": "^2.0.2", - "sha.js": "^2.4.11" + "sha.js": "^2.4.11", + "smart-buffer": "^4.1.0" }, "dependencies": { "@types/bn.js": { @@ -69,6 +71,15 @@ "ripemd160": "^2.0.1" } }, + "cross-fetch": { + "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.6.0", + "whatwg-fetch": "3.0.0" + } + }, "elliptic": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", @@ -82,6 +93,11 @@ "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" } } }, @@ -168,9 +184,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.149", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", - "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==" + "version": "4.14.150", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.150.tgz", + "integrity": "sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==" }, "@types/logform": { "version": "1.2.0", @@ -337,6 +353,12 @@ "color-convert": "^1.9.0" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -662,6 +684,12 @@ "safe-buffer": "^5.1.2" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -990,6 +1018,12 @@ "kuler": "1.0.x" } }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1961,6 +1995,12 @@ "triple-beam": "^1.3.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -2532,11 +2572,26 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-support": { + "version": "0.5.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.18.tgz", + "integrity": "sha512-9luZr/BZ2QeU6tO2uG8N2aZpVSli4TSAOAqFOyTO51AJcD9P99c0K1h6dD6r6qo5dyT44BR5exweOaLLeldTkQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "split-on-first": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", @@ -2753,6 +2808,19 @@ "uglify-js": "^3.1.9" } }, + "ts-node": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.9.0.tgz", + "integrity": "sha512-rwkXfOs9zmoHrV8xE++dmNd6ZIS+nmHHCxcV53ekGJrxFLMbp+pizpPS07ARvhwneCIECPppOwbZHvw9sQtU4w==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -2805,9 +2873,9 @@ "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.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", "dev": true }, "uglify-js": { @@ -2973,6 +3041,12 @@ "mkdirp": "^0.5.1" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "zone-file": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/zone-file/-/zone-file-0.2.3.tgz", diff --git a/package.json b/package.json index 4b9292a..d7c2431 100644 --- a/package.json +++ b/package.json @@ -68,10 +68,10 @@ "eslint": "^6.1.0", "ts-node": "^8.3.0", "minimist": ">=1.2.3", - "typescript": "^3.5.3" + "typescript": "^3.6.3" }, "dependencies": { - "@blockstack/stacks-transactions": "^0.3.0-alpha.2", + "@blockstack/stacks-transactions": "^0.3.0-alpha.5", "@types/bn.js": "^4.11.5", "@types/cors": "^2.8.5", "@types/express": "^4.16.1", From c603759c0d5b81f8de0ed3e5ec50bccf489e5bb4 Mon Sep 17 00:00:00 2001 From: Ken Date: Thu, 23 Apr 2020 19:02:44 -0400 Subject: [PATCH 11/23] fix: temp fix for chainId. --- src/cli.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cli.ts b/src/cli.ts index e362782..8a94725 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -2571,7 +2571,8 @@ function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise Date: Wed, 6 May 2020 11:29:59 -0700 Subject: [PATCH 12/23] feat: allow auth params for bitcoind --- src/argparse.ts | 16 ++++++++++++---- src/cli.ts | 33 +++++++++++++++++++++------------ src/network.ts | 2 +- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/argparse.ts b/src/argparse.ts index b000aec..bf231c8 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -74,7 +74,9 @@ export interface CLI_CONFIG_TYPE { blockstackNodeUrl: string, broadcastServiceUrl: string, utxoServiceUrl: string, - logConfig: CLI_LOG_CONFIG_TYPE + logConfig: CLI_LOG_CONFIG_TYPE, + bitcoindUsername?: string, + bitcoindPassword?: string, }; const LOG_CONFIG_DEFAULTS : CLI_LOG_CONFIG_TYPE = { @@ -99,7 +101,9 @@ const CONFIG_REGTEST_DEFAULTS : CLI_CONFIG_TYPE = { blockstackNodeUrl: 'http://localhost:16264', broadcastServiceUrl: 'http://localhost:16269', utxoServiceUrl: 'http://localhost:18332', - logConfig: LOG_CONFIG_DEFAULTS + logConfig: LOG_CONFIG_DEFAULTS, + bitcoindPassword: 'blockstacksystem', + bitcoindUsername: 'blockstack' }; const PUBLIC_TESTNET_HOST = 'testnet.blockstack.org'; @@ -2341,7 +2345,7 @@ export const CLI_ARGS = { type: 'string', realtype: 'private_key', pattern: `${PRIVATE_KEY_PATTERN}` - }, + } ], minItems: 3, maxItems: 3, @@ -2436,6 +2440,10 @@ Options can be: -T URL Use an alternative Blockstack transaction broadcaster. -X URL Use an alternative UTXO service endpoint. + + -u USERNAME A username to be passed to bitcoind RPC endpoints + + -p PASSWORD A password to be passed to bitcoind RPC endpoints `; /* @@ -2715,7 +2723,7 @@ interface CLI_OPTS { }; export function getCLIOpts(argv: string[], - opts: string = 'deitUxC:F:B:P:D:G:N:H:T:I:m:M:X:') : CLI_OPTS { + opts: string = 'deitUxC:F:B:P:D:G:N:H:T:I:m:M:X:u:p:') : CLI_OPTS { const optsTable : CLI_OPTS = {}; const remainingArgv = []; const argvBuff = argv.slice(0); diff --git a/src/cli.ts b/src/cli.ts index 8a94725..0efa80b 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -12,7 +12,7 @@ import * as bip39 from 'bip39'; import * as express from 'express'; import * as path from 'path'; import fetch from 'node-fetch'; -import { makeSTXTokenTransfer, TransactionVersion } from '@blockstack/stacks-transactions' +import { makeSTXTokenTransfer, TransactionVersion } from '@blockstack/stacks-transactions'; const c32check = require('c32check'); @@ -105,6 +105,7 @@ import { handleAuth, handleSignIn } from './auth'; +import { TokenTransferOptions } from '@blockstack/stacks-transactions/lib/src/builders'; // global CLI options let txOnly = false; @@ -1812,18 +1813,18 @@ function register(network: CLINetworkAdapter, args: string[]) : Promise .then(([preorderSafetyChecks, registerSafetyChecks]) => { if (!checkTxStatus(preorderSafetyChecks) || !checkTxStatus(registerSafetyChecks)) { try { - preorderSafetyChecks = JSON.parse(preorderSafetyChecks); + preorderSafetyChecks = JSON.parse(preorderSafetyChecks); } catch (e) { } try { - registerSafetyChecks = JSON.parse(registerSafetyChecks); + registerSafetyChecks = JSON.parse(registerSafetyChecks); } catch (e) { } - // one or both safety checks failed + // one or both safety checks failed throw new SafetyError({ 'status': false, 'error': 'Failed to generate one or more transactions', @@ -2403,7 +2404,7 @@ function balance(network: CLINetworkAdapter, args: string[]) : Promise { return fetch(`${network.blockstackAPIUrl}/v2/accounts/${address}?proof=0`) .then((response) => response.json()) .then((response) => { - var balanceHex = response.balance; + let balanceHex = response.balance; if(balanceHex.startsWith('0x')) { balanceHex = balanceHex.substr(2); } @@ -2411,7 +2412,7 @@ function balance(network: CLINetworkAdapter, args: string[]) : Promise { const res = { balance: balance.toString(10), nonce: response.nonce - } + }; return Promise.resolve(JSONStringify(res)); }); } @@ -2568,12 +2569,12 @@ function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise { const privateKey = decodePrivateKey(args[2]); return makeDIDConfiguration(network, args[0], args[1], args[2]).then(didConfiguration => { - return JSONStringify(didConfiguration) - }) + return JSONStringify(didConfiguration); + }); } /* @@ -3426,6 +3427,8 @@ export function CLIMain() { defaultV2BroadcastUrl = opts['T'] ? CLIOptAsString(opts, 'T') : defaultV2BroadcastUrl; const nodeAPIUrl = CLIOptAsString(opts, 'I'); const utxoUrl = CLIOptAsString(opts, 'X'); + const bitcoindUsername = CLIOptAsString(opts, 'u'); + const bitcoindPassword = CLIOptAsString(opts, 'p'); if (integration_test) { BLOCKSTACK_TEST = integration_test; @@ -3449,9 +3452,15 @@ export function CLIMain() { else { configData.logConfig.level = 'info'; } + if (bitcoindUsername) { + configData.bitcoindUsername = bitcoindUsername; + } + if (bitcoindPassword) { + configData.bitcoindPassword = bitcoindPassword; + } if (utxoUrl) { - configData.utxoServiceUrl = utxoUrl; + configData.utxoServiceUrl = utxoUrl; } winston.configure({ level: configData.logConfig.level, transports: [new winston.transports.Console(configData.logConfig)] }); @@ -3468,7 +3477,7 @@ export function CLIMain() { altTransactionBroadcasterUrl: (transactionBroadcasterUrl ? transactionBroadcasterUrl : configData.broadcastServiceUrl), - nodeAPIUrl: (nodeAPIUrl ? nodeAPIUrl : configData.blockstackNodeUrl), + nodeAPIUrl: (nodeAPIUrl ? nodeAPIUrl : configData.blockstackNodeUrl) }; // wrap command-line options diff --git a/src/network.ts b/src/network.ts index c93ae00..fcaa169 100644 --- a/src/network.ts +++ b/src/network.ts @@ -308,7 +308,7 @@ export function getNetwork(configData: CLI_CONFIG_TYPE, regTest: boolean) : Bloc const network = new blockstack.network.LocalRegtest( configData.blockstackAPIUrl, configData.broadcastServiceUrl, new blockstack.network.BitcoindAPI(configData.utxoServiceUrl, - { username: 'blockstack', password: 'blockstacksystem' })); + { username: configData.bitcoindUsername || 'blockstack', password: configData.bitcoindPassword || 'blockstacksystem' })); return network; } else { From 15efce89b8c13205e46087afe8d0d39bfaed7cd2 Mon Sep 17 00:00:00 2001 From: Hank Stoever Date: Fri, 8 May 2020 08:15:52 -0700 Subject: [PATCH 13/23] feat: adds BTC address to `make_keychain` --- src/keys.ts | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/keys.ts b/src/keys.ts index b3f333e..520645a 100644 --- a/src/keys.ts +++ b/src/keys.ts @@ -24,7 +24,7 @@ import { BIP32Interface } from 'bip32'; export const STRENGTH = 128; // 12 words export const STX_WALLET_COMPATIBLE_SEED_STRENGTH = 256; -export const DERIVATION_PATH = `m/44'/5757'/0'/0/0`; +export const DERIVATION_PATH = 'm/44\'/5757\'/0\'/0/0'; export type OwnerKeyInfoType = { privateKey: string; @@ -45,8 +45,9 @@ export type PaymentKeyInfoType = { export type StacksKeyInfoType = { privateKey: string; address: string; + btcAddress: string; index: number; -} +}; export type AppKeyInfoType = { keyInfo: { @@ -132,16 +133,26 @@ export async function getPaymentKeyInfo(network: CLINetworkAdapter, mnemonic : s * .address (string) the address of the private key */ export async function getStacksWalletKeyInfo(network: CLINetworkAdapter, mnemonic : string): Promise { - const seed = await bip39.mnemonicToSeed(mnemonic) - const master = bip32.fromSeed(seed) - const child = master.derivePath(`m/44'/5757'/0'/0/0`) // taken from stacks-wallet. See https://github.com/blockstack/stacks-wallet - const ecPair = bitcoin.ECPair.fromPrivateKey(child.privateKey) - const privkey = blockstack.ecPairToHexString(ecPair) + const seed = await bip39.mnemonicToSeed(mnemonic); + const master = bip32.fromSeed(seed); + const child = master.derivePath('m/44\'/5757\'/0\'/0/0'); // taken from stacks-wallet. See https://github.com/blockstack/stacks-wallet + const ecPair = bitcoin.ECPair.fromPrivateKey(child.privateKey); + const privkey = blockstack.ecPairToHexString(ecPair); const addr = getPrivateKeyAddress(network, privkey); + let btcAddress: string; + if (network.isTestnet()) { + // btcAddress = const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey }); + const { address } = bitcoin.payments.p2pkh({ pubkey: ecPair.publicKey, network: bitcoin.networks.regtest }); + btcAddress = address; + } else { + const { address } = bitcoin.payments.p2pkh({ pubkey: ecPair.publicKey, network: bitcoin.networks.bitcoin }); + btcAddress = address; + } const result: StacksKeyInfoType = { privateKey: privkey, address: c32check.b58ToC32(addr), + btcAddress, index: 0 }; return result; From c48a41fb647a712facf9697370f8839d4ef4fb84 Mon Sep 17 00:00:00 2001 From: Hank Stoever Date: Fri, 8 May 2020 08:17:21 -0700 Subject: [PATCH 14/23] build: beta version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d7c2431..8b31157 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "blockstack-cli", - "version": "1.0.0", + "version": "1.1.0-beta.1", "description": "Node.js Blockstack CLI", "main": "lib/index.js", "engines": { From 4c114268941d72630b5b31a9d25482f4d621b101 Mon Sep 17 00:00:00 2001 From: Ken Date: Fri, 8 May 2020 16:52:48 -0400 Subject: [PATCH 15/23] feat: use network config from stacks-transactions lib --- package.json | 2 +- src/argparse.ts | 16 ++++++++-------- src/cli.ts | 48 +++++++++++++++++++++++++++++++++++------------- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 8b31157..f1103fb 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "typescript": "^3.6.3" }, "dependencies": { - "@blockstack/stacks-transactions": "^0.3.0-alpha.5", + "@blockstack/stacks-transactions": "^0.4.0", "@types/bn.js": "^4.11.5", "@types/cors": "^2.8.5", "@types/express": "^4.16.1", diff --git a/src/argparse.ts b/src/argparse.ts index bf231c8..f82a602 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -89,9 +89,9 @@ const LOG_CONFIG_DEFAULTS : CLI_LOG_CONFIG_TYPE = { }; const CONFIG_DEFAULTS : CLI_CONFIG_TYPE = { - blockstackAPIUrl: 'https://core.blockstack.org', - blockstackNodeUrl: 'https://node.blockstack.org:6263', - broadcastServiceUrl: 'https://broadcast.blockstack.org', + blockstackAPIUrl: 'http://core.blockstack.org:20443', + blockstackNodeUrl: 'http://core.blockstack.org:20443', + broadcastServiceUrl: 'http://core.blockstack.org:20443/v2/transactions', utxoServiceUrl: 'https://blockchain.info', logConfig: LOG_CONFIG_DEFAULTS }; @@ -106,12 +106,12 @@ const CONFIG_REGTEST_DEFAULTS : CLI_CONFIG_TYPE = { bitcoindUsername: 'blockstack' }; -const PUBLIC_TESTNET_HOST = 'testnet.blockstack.org'; +const PUBLIC_TESTNET_HOST = 'neon.blockstack.org'; const CONFIG_TESTNET_DEFAULTS = { - blockstackAPIUrl: `http://${PUBLIC_TESTNET_HOST}:16268`, - blockstackNodeUrl: `http://${PUBLIC_TESTNET_HOST}:16264`, - broadcastServiceUrl: `http://${PUBLIC_TESTNET_HOST}:16269`, + blockstackAPIUrl: `http://${PUBLIC_TESTNET_HOST}:20443`, + blockstackNodeUrl: `http://${PUBLIC_TESTNET_HOST}:20443`, + broadcastServiceUrl: `http://${PUBLIC_TESTNET_HOST}:20443/v2/transactions`, utxoServiceUrl: `http://${PUBLIC_TESTNET_HOST}:18332`, logConfig: Object.assign({}, LOG_CONFIG_DEFAULTS, { level: 'debug' }) }; @@ -1991,7 +1991,7 @@ export const CLI_ARGS = { pattern: '^[0-9]+$' }, { - name: 'fee rate', + name: 'fee', type: 'string', realtype: 'integer', pattern: '^[0-9]+$' diff --git a/src/cli.ts b/src/cli.ts index 0efa80b..dbc08c6 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -12,7 +12,14 @@ import * as bip39 from 'bip39'; import * as express from 'express'; import * as path from 'path'; import fetch from 'node-fetch'; -import { makeSTXTokenTransfer, TransactionVersion } from '@blockstack/stacks-transactions'; +import { + makeSTXTokenTransfer, + broadcastTransaction, + estimateTransfer, + StacksMainnet, + StacksTestnet, + TokenTransferOptions +} from '@blockstack/stacks-transactions'; const c32check = require('c32check'); @@ -105,7 +112,6 @@ import { handleAuth, handleSignIn } from './auth'; -import { TokenTransferOptions } from '@blockstack/stacks-transactions/lib/src/builders'; // global CLI options let txOnly = false; @@ -115,7 +121,6 @@ let receiveFeesPeriod = 52595; let gracePeriod = 5000; let noExit = false; let maxIDSearchIndex = DEFAULT_MAX_ID_SEARCH_INDEX; -let defaultV2BroadcastUrl = 'https://core.blockstack.org/v2/transactions'; let BLOCKSTACK_TEST = process.env.BLOCKSTACK_TEST ? true : false; @@ -2401,7 +2406,11 @@ function balance(network: CLINetworkAdapter, args: string[]) : Promise { address = network.coerceAddress(address); } - return fetch(`${network.blockstackAPIUrl}/v2/accounts/${address}?proof=0`) + // temporary hack to use network config from stacks-transactions lib + const txNetwork = network.isMainnet() ? new StacksMainnet() : new StacksTestnet(); + txNetwork.coreApiUrl = network.blockstackAPIUrl; + + return fetch(txNetwork.getAccountApiUrl(address)) .then((response) => response.json()) .then((response) => { let balanceHex = response.balance; @@ -2551,15 +2560,15 @@ function sendBTC(network: CLINetworkAdapter, args: string[]) : Promise { * args: * @recipientAddress (string) the recipient's account address * @tokenAmount (int) the number of tokens to send - * @feeRate (int) the fee rate to pay + * @fee (int) the transaction fee to be paid * @nonce (int) integer nonce needs to be incremented after each transaction from an account * @privateKey (string) the hex-encoded private key to use to send the tokens * @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 = args[0]; const tokenAmount = new BN(args[1]); - const feeRate = new BN(args[2]); + const fee = new BN(args[2]); const nonce = new BN(args[3]); const privateKey = args[4]; @@ -2569,20 +2578,33 @@ function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise { + return cost.toString(10) + }) + } if (txOnly) { return Promise.resolve(tx.serialize().toString('hex')); } - return tx.broadcast(defaultV2BroadcastUrl).then(() => { + return broadcastTransaction(tx, txNetwork).then(() => { return tx.txid(); }).catch((error) => { return error.toString(); @@ -3424,7 +3446,6 @@ export function CLIMain() { const magicBytes = CLIOptAsString(opts, 'm'); const apiUrl = CLIOptAsString(opts, 'H'); const transactionBroadcasterUrl = CLIOptAsString(opts, 'T'); - defaultV2BroadcastUrl = opts['T'] ? CLIOptAsString(opts, 'T') : defaultV2BroadcastUrl; const nodeAPIUrl = CLIOptAsString(opts, 'I'); const utxoUrl = CLIOptAsString(opts, 'X'); const bitcoindUsername = CLIOptAsString(opts, 'u'); @@ -3446,6 +3467,7 @@ export function CLIMain() { const networkType = testnet ? 'testnet' : (integration_test ? 'regtest' : 'mainnet'); const configData = loadConfig(configPath, networkType); + if (debug) { configData.logConfig.level = 'debug'; } From 8bdda5dfe0b48ddc716470ad7b3a46680df3d69b Mon Sep 17 00:00:00 2001 From: Ken Date: Sun, 10 May 2020 22:01:08 -0400 Subject: [PATCH 16/23] feat: contract deploy command --- src/argparse.ts | 47 +++++++++++++++++++++++++++++++++++++++ src/cli.ts | 59 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/src/argparse.ts b/src/argparse.ts index f82a602..e0f7892 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -319,6 +319,53 @@ export const CLI_ARGS = { ' section amount spend resemble spray verify night immune tattoo best emotion parrot', group: 'Key Management' }, + deploy_contract: { + type: 'array', + items: [ + { + name: 'source_file', + type: 'string', + realtype: 'path', + pattern: '.+' + }, + { + name: 'contract_name', + type: 'string', + realtype: 'string', + pattern: '^[a-zA-Z]([a-zA-Z0-9]|[-_])*$', + }, + { + name: 'fee', + type: 'string', + realtype: 'integer', + pattern: '^[0-9]+$' + }, + { + name: 'nonce', + type: 'string', + realtype: 'integer', + pattern: '^[0-9]+$' + }, + { + name: 'payment_key', + type: 'string', + realtype: 'private_key', + pattern: `${PRIVATE_KEY_PATTERN_ANY}` + } + ], + minItems: 5, + maxItems: 5, + help: 'Deploys a Clarity smart contract on the network.\n' + + '\n' + + 'If the command succeeds, it prints out a transaction ID.' + + '\n' + + 'Example:\n' + + ' $ export PAYMENT="bfeffdf57f29b0cc1fab9ea197bb1413da2561fe4b83e962c7f02fbbe2b1cd5401"\n' + + ' $ blockstack-cli deploy_contract ./my_contract.clar my_contract 1 0 "$PAYMENT"\n' + + ' a9d387a925fb0ba7a725fb1e11f2c3f1647473699dd5a147c312e6453d233456\n' + + '\n', + group: 'Account Management' + }, docs: { type: 'array', items: [ diff --git a/src/cli.ts b/src/cli.ts index dbc08c6..26eb386 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -14,11 +14,17 @@ import * as path from 'path'; import fetch from 'node-fetch'; import { makeSTXTokenTransfer, + makeSmartContractDeploy, + makeContractCall, broadcastTransaction, estimateTransfer, + estimateContractDeploy, + estimateContractFunctionCall, StacksMainnet, StacksTestnet, - TokenTransferOptions + TokenTransferOptions, + ContractDeployOptions, + ContractCallOptions } from '@blockstack/stacks-transactions'; const c32check = require('c32check'); @@ -2611,6 +2617,56 @@ async function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise< }); } +/* + * Depoly a Clarity smart contract. + * args: + * @source (string) path to the contract source file + * @contractName (string) the name of the contract + * @fee (int) the transaction fee to be paid + * @nonce (int) integer nonce needs to be incremented after each transaction from an account + * @privateKey (string) the hex-encoded private key to use to send the tokens + */ +async function contractDeploy(network: CLINetworkAdapter, args: string[]) : Promise { + const sourceFile = args[0]; + const contractName = args[1]; + const fee = new BN(args[2]); + const nonce = new BN(args[3]); + const privateKey = args[4]; + + const source = fs.readFileSync(sourceFile).toString(); + + // temporary hack to use network config from stacks-transactions lib + const txNetwork = network.isMainnet() ? new StacksMainnet() : new StacksTestnet(); + txNetwork.coreApiUrl = network.blockstackAPIUrl; + + const options: ContractDeployOptions = { + contractName, + codeBody: source, + senderKey: privateKey, + fee, + nonce, + network: txNetwork + } + + const tx = await makeSmartContractDeploy(options); + + if (estimateOnly) { + return estimateContractDeploy(tx, txNetwork).then((cost) => { + return cost.toString(10) + }) + } + + if (txOnly) { + return Promise.resolve(tx.serialize().toString('hex')); + } + + return broadcastTransaction(tx, txNetwork).then(() => { + return tx.txid(); + }).catch((error) => { + return error.toString(); + }); +} + /* * Get the number of confirmations of a txid. * args: @@ -3354,6 +3410,7 @@ const COMMANDS : Record = { 'balance': balance, 'convert_address': addressConvert, 'decrypt_keychain': decryptMnemonic, + 'deploy_contract': contractDeploy, 'docs': printDocs, 'encrypt_keychain': encryptMnemonic, 'gaia_deletefile': gaiaDeleteFile, From 18ed25c8230683a2cf43135dce5d1bcbeeea2fc0 Mon Sep 17 00:00:00 2001 From: Ken Date: Mon, 18 May 2020 09:50:07 -0400 Subject: [PATCH 17/23] add call_contract_func command --- package-lock.json | 457 ++++++++++++++++++++++++++-------------------- package.json | 5 +- src/argparse.ts | 53 ++++++ src/cli.ts | 92 +++++++++- src/utils.ts | 132 +++++++++++++ 5 files changed, 541 insertions(+), 198 deletions(-) diff --git a/package-lock.json b/package-lock.json index ea153f1..2585dcb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "blockstack-cli", - "version": "1.0.0", + "version": "1.1.0-beta.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -24,83 +24,6 @@ "js-tokens": "^4.0.0" } }, - "@blockstack/stacks-transactions": { - "version": "0.3.0-alpha.5", - "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.3.0-alpha.5.tgz", - "integrity": "sha512-kq4FlQ4XWqacuPqkMS1mtA3m4BZ6d7ajJqKyZnDeTajDPbuP2cKZrzg40Gu/M4ixzvXB5CGMhfMmBpL773WM+A==", - "requires": { - "@types/bn.js": "^4.11.6", - "@types/elliptic": "^6.4.12", - "@types/lodash": "^4.14.149", - "@types/randombytes": "^2.0.0", - "@types/ripemd160": "^2.0.0", - "@types/sha.js": "^2.4.0", - "bn.js": "^4.11.8", - "c32check": "^1.0.1", - "cross-fetch": "^3.0.4", - "elliptic": "^6.5.2", - "lodash": "^4.17.15", - "randombytes": "^2.1.0", - "ripemd160": "^2.0.2", - "sha.js": "^2.4.11", - "smart-buffer": "^4.1.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/elliptic": { - "version": "6.4.12", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", - "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", - "requires": { - "@types/bn.js": "*" - } - }, - "c32check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.0.1.tgz", - "integrity": "sha512-0e1+39uLNLyRm9sNoPUCg38LOELUqiBDZXD9kpUUAFNBq21gY3VaNImp1rfznQOsqK27ArvQ2JaZmfokZznqHg==", - "requires": { - "base58check": "^2.0.0", - "ripemd160": "^2.0.1" - } - }, - "cross-fetch": { - "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.6.0", - "whatwg-fetch": "3.0.0" - } - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "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" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - } - } - }, "@types/bn.js": { "version": "4.11.5", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz", @@ -118,6 +41,11 @@ "@types/node": "*" } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, "@types/connect": { "version": "3.4.32", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", @@ -177,17 +105,22 @@ "winston": "^3.0.0" } }, + "@types/inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==", + "dev": true, + "requires": { + "@types/through": "*", + "rxjs": "^6.4.0" + } + }, "@types/json-schema": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", "dev": true }, - "@types/lodash": { - "version": "4.14.150", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.150.tgz", - "integrity": "sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==" - }, "@types/logform": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/logform/-/logform-1.2.0.tgz", @@ -211,14 +144,6 @@ "@types/node": "*" } }, - "@types/randombytes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/randombytes/-/randombytes-2.0.0.tgz", - "integrity": "sha512-bz8PhAVlwN72vqefzxa14DKNT8jK/mV66CSjwdVQM/k3Th3EPKfUtdMniwZgMedQTFuywAsfjnZsg+pEnltaMA==", - "requires": { - "@types/node": "*" - } - }, "@types/range-parser": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", @@ -241,10 +166,11 @@ "@types/mime": "*" } }, - "@types/sha.js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/sha.js/-/sha.js-2.4.0.tgz", - "integrity": "sha512-amxKgPy6WJTKuw8mpUwjX2BSxuBtBmZfRwIUDIuPJKNwGN8CWDli8JTg5ONTWOtcTkHIstvT7oAhhYXqEjStHQ==", + "@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, "requires": { "@types/node": "*" } @@ -334,16 +260,17 @@ } }, "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "requires": { + "type-fest": "^0.11.0" + } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { "version": "3.2.1", @@ -728,8 +655,7 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "cheerio": { "version": "0.22.0", @@ -764,19 +690,17 @@ } }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "co": { "version": "4.6.0", @@ -1196,6 +1120,27 @@ "uri-js": "^4.2.2" } }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -1215,17 +1160,99 @@ "estraverse": "^4.1.1" } }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "inquirer": { + "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", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } } } }, @@ -1376,7 +1403,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -1415,10 +1441,9 @@ "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" } @@ -1708,24 +1733,77 @@ "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==", - "dev": true, + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "ipaddr.js": { @@ -1759,12 +1837,6 @@ "is-extglob": "^2.1.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -2050,10 +2122,9 @@ } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "minimalistic-assert": { "version": "1.0.1", @@ -2111,10 +2182,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { "version": "2.14.0", @@ -2184,12 +2254,11 @@ "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "optionator": { @@ -2209,8 +2278,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "parent-module": { "version": "1.0.1", @@ -2404,12 +2472,11 @@ "dev": true }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -2432,19 +2499,14 @@ } }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", - "dev": true, + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "requires": { "tslib": "^1.9.0" } @@ -2548,10 +2610,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-swizzle": { "version": "0.2.2", @@ -2572,11 +2633,6 @@ "is-fullwidth-code-point": "^2.0.0" } }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2635,22 +2691,31 @@ "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } } } @@ -2745,8 +2810,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "tiny-secp256k1": { "version": "1.1.3", @@ -2764,7 +2828,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -2824,8 +2887,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", @@ -2858,6 +2920,11 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", diff --git a/package.json b/package.json index f1103fb..3e5b560 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ }, "license": "MIT", "bin": { + "blockstack": "./cmd/index.js", "blockstack-cli": "./cmd/index.js" }, "bugs": { @@ -63,11 +64,12 @@ } ], "devDependencies": { + "@types/inquirer": "^6.5.0", "@typescript-eslint/eslint-plugin": "^2.0.0", "@typescript-eslint/parser": "^2.0.0", "eslint": "^6.1.0", - "ts-node": "^8.3.0", "minimist": ">=1.2.3", + "ts-node": "^8.3.0", "typescript": "^3.6.3" }, "dependencies": { @@ -88,6 +90,7 @@ "cors": "^2.8.4", "express": "^4.16.0", "express-winston": "^3.1.0", + "inquirer": "^7.1.0", "jsontokens": "^2.0.2", "node-fetch": "^2.6.0", "ripemd160": "^2.0.1", diff --git a/src/argparse.ts b/src/argparse.ts index e0f7892..7cc7f9d 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -262,6 +262,59 @@ export const CLI_ARGS = { ' }\n', group: 'Account Management' }, + call_contract_func: { + type: 'array', + items: [ + { + name: 'contract_address', + type: 'string', + realtype: 'address', + pattern: `${STACKS_ADDRESS_PATTERN}` + }, + { + name: 'contract_name', + type: 'string', + realtype: 'string', + pattern: '^[a-zA-Z]([a-zA-Z0-9]|[-_])*$', + }, + { + name: 'function_name', + type: 'string', + realtype: 'string', + pattern: '^[a-zA-Z]([a-zA-Z0-9]|[-_])*$', + }, + { + name: 'fee', + type: 'string', + realtype: 'integer', + pattern: '^[0-9]+$' + }, + { + name: 'nonce', + type: 'string', + realtype: 'integer', + pattern: '^[0-9]+$' + }, + { + name: 'payment_key', + type: 'string', + realtype: 'private_key', + pattern: `${PRIVATE_KEY_PATTERN_ANY}` + } + ], + minItems: 6, + maxItems: 6, + help: 'Deploys a Clarity smart contract on the network.\n' + + '\n' + + 'If the command succeeds, it prints out a transaction ID.' + + '\n' + + 'Example:\n' + + ' $ export PAYMENT="bfeffdf57f29b0cc1fab9ea197bb1413da2561fe4b83e962c7f02fbbe2b1cd5401"\n' + + ' $ blockstack-cli deploy_contract ./my_contract.clar my_contract 1 0 "$PAYMENT"\n' + + ' a9d387a925fb0ba7a725fb1e11f2c3f1647473699dd5a147c312e6453d233456\n' + + '\n', + group: 'Account Management' + }, convert_address: { type: 'array', items: [ diff --git a/src/cli.ts b/src/cli.ts index 26eb386..980156c 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -11,6 +11,7 @@ import * as crypto from 'crypto'; import * as bip39 from 'bip39'; import * as express from 'express'; import * as path from 'path'; +import * as inquirer from 'inquirer'; import fetch from 'node-fetch'; import { makeSTXTokenTransfer, @@ -24,7 +25,12 @@ import { StacksTestnet, TokenTransferOptions, ContractDeployOptions, - ContractCallOptions + ContractCallOptions, + ContractCallPayload, + ClarityValue, + ClarityAbi, + getAbi, + validateContractCall } from '@blockstack/stacks-transactions'; const c32check = require('c32check'); @@ -111,7 +117,10 @@ import { getIDAppKeys, hasKeys, UTXO, - makeDIDConfiguration + makeDIDConfiguration, + makePromptsFromArgList, + parseClarityFunctionArgAnswers, + ClarityFunctionArg } from './utils'; import { @@ -2667,6 +2676,84 @@ async function contractDeploy(network: CLINetworkAdapter, args: string[]) : Prom }); } +/* + * Call a Clarity smart contract function. + * args: + * @source (string) path to the contract source file + * @contractName (string) the name of the contract + * @fee (int) the transaction fee to be paid + * @nonce (int) integer nonce needs to be incremented after each transaction from an account + * @privateKey (string) the hex-encoded private key to use to send the tokens + */ +async function contractFunctionCall(network: CLINetworkAdapter, args: string[]) : Promise { + const contractAddress = args[0]; + const contractName = args[1]; + const functionName = args[2]; + const fee = new BN(args[3]); + const nonce = new BN(args[4]); + const privateKey = args[5]; + + // temporary hack to use network config from stacks-transactions lib + const txNetwork = network.isMainnet() ? new StacksMainnet() : new StacksTestnet(); + txNetwork.coreApiUrl = network.blockstackAPIUrl; + + let abi: ClarityAbi; + let abiArgs: ClarityFunctionArg[]; + let functionArgs: ClarityValue[] = []; + + return getAbi( + contractAddress, + contractName, + txNetwork + ).then((responseAbi) => { + abi = responseAbi; + const filtered = abi.functions.filter(fn => fn.name === functionName); + if (filtered.length === 1) { + abiArgs = filtered[0].args; + return makePromptsFromArgList(abiArgs); + } else { + return null; + } + }) + .then((prompts) => inquirer.prompt(prompts)) + .then((answers) => { + functionArgs = parseClarityFunctionArgAnswers(answers, abiArgs); + + const options: ContractCallOptions = { + contractAddress, + contractName, + functionName, + functionArgs, + senderKey: privateKey, + fee, + nonce, + network: txNetwork + } + + return makeContractCall(options); + }).then((tx) => { + if (!validateContractCall(tx.payload as ContractCallPayload, abi)) { + throw new Error('Failed to validate function arguments against ABI'); + } + + if (estimateOnly) { + return estimateContractFunctionCall(tx, txNetwork).then((cost) => { + return cost.toString(10) + }) + } + + if (txOnly) { + return Promise.resolve(tx.serialize().toString('hex')); + } + + return broadcastTransaction(tx, txNetwork).then(() => { + return tx.txid(); + }).catch((error) => { + return error.toString(); + }); + }); +} + /* * Get the number of confirmations of a txid. * args: @@ -3408,6 +3495,7 @@ const COMMANDS : Record = { 'authenticator': authDaemon, 'announce': announce, 'balance': balance, + 'call_contract_func': contractFunctionCall, 'convert_address': addressConvert, 'decrypt_keychain': decryptMnemonic, 'deploy_contract': contractDeploy, diff --git a/src/utils.ts b/src/utils.ts index 2b1ad10..8c82869 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -6,6 +6,26 @@ import * as stream from 'stream'; import * as fs from 'fs'; import * as blockstack from 'blockstack'; import { decodeToken, SECP256K1Client, TokenSigner, TokenVerifier } from 'jsontokens' +import { + ClarityAbi, + getTypeUnion, + getTypeString, + ClarityAbiType, + isClarityAbiPrimitive, + isClarityAbiBuffer, + isClarityAbiResponse, + isClarityAbiOptional, + isClarityAbiTuple, + isClarityAbiList, + ClarityValue, + intCV, + uintCV, + bufferCVFromString, + trueCV, + falseCV, + standardPrincipalCV, + contractPrincipalCV, +} from '@blockstack/stacks-transactions'; const ZoneFile = require('zone-file'); @@ -736,3 +756,115 @@ export async function getIDAppKeys(network: CLINetworkAdapter, return ret; } +interface InquirerPrompt { + type: string; + name: string; + message: string; + choices?: string[]; +} + +export function makePromptsFromArgList(expectedArgs: ClarityFunctionArg[]): InquirerPrompt[] { + const prompts = []; + for (let i = 0; i < expectedArgs.length; i++) { + prompts.push(argToPrompt(expectedArgs[i])); + } + return prompts; +} + +export interface ClarityFunctionArg { + name: string; + type: ClarityAbiType; +} + +export function argToPrompt(arg: ClarityFunctionArg): InquirerPrompt { + const name = arg.name; + const type = arg.type; + const typeString = getTypeString(type); + if (isClarityAbiPrimitive(type)) { + if (type === 'uint128') { + return { + type: 'input', + name, + message: `Enter value for function argument "${name}" of type ${typeString}` + } + } else if (type === 'int128') { + return { + type: 'input', + name, + message: `Enter value for function argument "${name}" of type ${typeString}` + } + } else if (type === 'bool') { + return { + type: 'list', + name, + message: `Enter value for function argument "${name}" of type ${typeString}`, + choices: ['True', 'False'] + } + } else if (type === 'principal') { + return { + type: 'input', + name, + message: `Enter value for function argument "${name}" of type ${typeString}` + } + } else { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } + } else if (isClarityAbiBuffer(type)) { + return { + type: 'input', + name, + message: `Enter value for function argument "${name}" of type ${typeString}` + } + } else if (isClarityAbiResponse(type)) { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } else if (isClarityAbiOptional(type)) { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } else if (isClarityAbiTuple(type)) { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } else if (isClarityAbiList(type)) { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } else { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } +} + +export function parseClarityFunctionArgAnswers(answers: any, expectedArgs: ClarityFunctionArg[]): ClarityValue[] { + const functionArgs: ClarityValue[] = []; + for (let i = 0; i < expectedArgs.length; i++) { + const expectedArg = expectedArgs[i]; + const answer = answers[expectedArg.name]; + functionArgs.push(answerToClarityValue(answer, expectedArg)); + } + return functionArgs; +} + +export function answerToClarityValue(answer: any, arg: ClarityFunctionArg): ClarityValue { + const type = arg.type; + const typeString = getTypeString(type); + if (isClarityAbiPrimitive(type)) { + if (type === 'uint128') { + return uintCV(answer); + } else if (type === 'int128') { + return intCV(answer); + } else if (type === 'bool') { + return answer == 'True' ? trueCV() : falseCV(); + } else if (type === 'principal') { + // TODO handle contract principals + return standardPrincipalCV(answer); + } else { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } + } else if (isClarityAbiBuffer(type)) { + return bufferCVFromString(answer); + } else if (isClarityAbiResponse(type)) { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } else if (isClarityAbiOptional(type)) { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } else if (isClarityAbiTuple(type)) { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } else if (isClarityAbiList(type)) { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } else { + throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); + } +} From ce3bc27f6fc3656baeee3a23b859dc01f9af07e2 Mon Sep 17 00:00:00 2001 From: yknl Date: Mon, 1 Jun 2020 23:55:08 -0400 Subject: [PATCH 18/23] fix: post condition mode set to allow and return json from all 2.0 tx commands --- package-lock.json | 103 ++++++++++++++++++++++++++++++++++++++++++++++ src/cli.ts | 27 ++++++++---- src/utils.ts | 13 ++++-- 3 files changed, 133 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2585dcb..d73581e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,83 @@ "js-tokens": "^4.0.0" } }, + "@blockstack/stacks-transactions": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.4.4.tgz", + "integrity": "sha512-/ayC2EZBdIG4AKE/IsMViZPbjheIa7HqsFl8DgD7GG9X8I2SeqXf8eGMA5ngyNIBoE4VD2PsmmpXXUV0pdfE2g==", + "requires": { + "@types/bn.js": "^4.11.6", + "@types/elliptic": "^6.4.12", + "@types/lodash": "^4.14.149", + "@types/randombytes": "^2.0.0", + "@types/ripemd160": "^2.0.0", + "@types/sha.js": "^2.4.0", + "bn.js": "^4.11.8", + "c32check": "^1.0.1", + "cross-fetch": "^3.0.4", + "elliptic": "^6.5.2", + "lodash": "^4.17.15", + "randombytes": "^2.1.0", + "ripemd160": "^2.0.2", + "sha.js": "^2.4.11", + "smart-buffer": "^4.1.0" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "requires": { + "@types/node": "*" + } + }, + "@types/elliptic": { + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", + "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", + "requires": { + "@types/bn.js": "*" + } + }, + "c32check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.0.1.tgz", + "integrity": "sha512-0e1+39uLNLyRm9sNoPUCg38LOELUqiBDZXD9kpUUAFNBq21gY3VaNImp1rfznQOsqK27ArvQ2JaZmfokZznqHg==", + "requires": { + "base58check": "^2.0.0", + "ripemd160": "^2.0.1" + } + }, + "cross-fetch": { + "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.6.0", + "whatwg-fetch": "3.0.0" + } + }, + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "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" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + } + } + }, "@types/bn.js": { "version": "4.11.5", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz", @@ -121,6 +198,11 @@ "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", "dev": true }, + "@types/lodash": { + "version": "4.14.153", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.153.tgz", + "integrity": "sha512-lYniGRiRfZf2gGAR9cfRC3Pi5+Q1ziJCKqPmjZocigrSJUVPWf7st1BtSJ8JOeK0FLXVndQ1IjUjTco9CXGo/Q==" + }, "@types/logform": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/logform/-/logform-1.2.0.tgz", @@ -144,6 +226,14 @@ "@types/node": "*" } }, + "@types/randombytes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/randombytes/-/randombytes-2.0.0.tgz", + "integrity": "sha512-bz8PhAVlwN72vqefzxa14DKNT8jK/mV66CSjwdVQM/k3Th3EPKfUtdMniwZgMedQTFuywAsfjnZsg+pEnltaMA==", + "requires": { + "@types/node": "*" + } + }, "@types/range-parser": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", @@ -166,6 +256,14 @@ "@types/mime": "*" } }, + "@types/sha.js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/sha.js/-/sha.js-2.4.0.tgz", + "integrity": "sha512-amxKgPy6WJTKuw8mpUwjX2BSxuBtBmZfRwIUDIuPJKNwGN8CWDli8JTg5ONTWOtcTkHIstvT7oAhhYXqEjStHQ==", + "requires": { + "@types/node": "*" + } + }, "@types/through": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", @@ -2633,6 +2731,11 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/src/cli.ts b/src/cli.ts index 980156c..ff16c79 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -30,7 +30,8 @@ import { ClarityValue, ClarityAbi, getAbi, - validateContractCall + validateContractCall, + PostConditionMode } from '@blockstack/stacks-transactions'; const c32check = require('c32check'); @@ -120,7 +121,8 @@ import { makeDIDConfiguration, makePromptsFromArgList, parseClarityFunctionArgAnswers, - ClarityFunctionArg + ClarityFunctionArg, + generateExplorerTxPageUrl } from './utils'; import { @@ -2620,7 +2622,10 @@ async function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise< } return broadcastTransaction(tx, txNetwork).then(() => { - return tx.txid(); + return { + txid: tx.txid(), + transaction: generateExplorerTxPageUrl(tx.txid(), txNetwork), + }; }).catch((error) => { return error.toString(); }); @@ -2654,7 +2659,8 @@ async function contractDeploy(network: CLINetworkAdapter, args: string[]) : Prom senderKey: privateKey, fee, nonce, - network: txNetwork + network: txNetwork, + postConditionMode: PostConditionMode.Allow } const tx = await makeSmartContractDeploy(options); @@ -2670,7 +2676,10 @@ async function contractDeploy(network: CLINetworkAdapter, args: string[]) : Prom } return broadcastTransaction(tx, txNetwork).then(() => { - return tx.txid(); + return { + txid: tx.txid(), + transaction: generateExplorerTxPageUrl(tx.txid(), txNetwork), + }; }).catch((error) => { return error.toString(); }); @@ -2727,7 +2736,8 @@ async function contractFunctionCall(network: CLINetworkAdapter, args: string[]) senderKey: privateKey, fee, nonce, - network: txNetwork + network: txNetwork, + postConditionMode: PostConditionMode.Allow } return makeContractCall(options); @@ -2747,7 +2757,10 @@ async function contractFunctionCall(network: CLINetworkAdapter, args: string[]) } return broadcastTransaction(tx, txNetwork).then(() => { - return tx.txid(); + return { + txid: tx.txid(), + transaction: generateExplorerTxPageUrl(tx.txid(), txNetwork), + }; }).catch((error) => { return error.toString(); }); diff --git a/src/utils.ts b/src/utils.ts index 8c82869..38b2b62 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -7,8 +7,6 @@ import * as fs from 'fs'; import * as blockstack from 'blockstack'; import { decodeToken, SECP256K1Client, TokenSigner, TokenVerifier } from 'jsontokens' import { - ClarityAbi, - getTypeUnion, getTypeString, ClarityAbiType, isClarityAbiPrimitive, @@ -24,7 +22,8 @@ import { trueCV, falseCV, standardPrincipalCV, - contractPrincipalCV, + StacksNetwork, + TransactionVersion, } from '@blockstack/stacks-transactions'; const ZoneFile = require('zone-file'); @@ -868,3 +867,11 @@ export function answerToClarityValue(answer: any, arg: ClarityFunctionArg): Clar throw new Error(`Contract function contains unsupported Clarity ABI type: ${typeString}`); } } + +export function generateExplorerTxPageUrl(txid: string, network: StacksNetwork): string { + if (network.version === TransactionVersion.Mainnet) { + return `https://explorer.blockstack.org/txid/0x${txid}`; + } else if (network.version === TransactionVersion.Testnet) { + return `https://testnet-explorer.now.sh/txid/0x${txid}`; + } +} From 115ac8ee9f05b5268eb33db5f10aac84552fc4f8 Mon Sep 17 00:00:00 2001 From: yknl Date: Wed, 3 Jun 2020 10:37:19 -0400 Subject: [PATCH 19/23] fix: update default testnet URL --- src/argparse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/argparse.ts b/src/argparse.ts index 7cc7f9d..e30e2c2 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -106,7 +106,7 @@ const CONFIG_REGTEST_DEFAULTS : CLI_CONFIG_TYPE = { bitcoindUsername: 'blockstack' }; -const PUBLIC_TESTNET_HOST = 'neon.blockstack.org'; +const PUBLIC_TESTNET_HOST = 'testnet-master.blockstack.org'; const CONFIG_TESTNET_DEFAULTS = { blockstackAPIUrl: `http://${PUBLIC_TESTNET_HOST}:20443`, From 08e6f71535710633f10f5f357c13a0352a4df101 Mon Sep 17 00:00:00 2001 From: yknl Date: Wed, 3 Jun 2020 11:29:30 -0400 Subject: [PATCH 20/23] fix: update transaction lib to v0.4.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3e5b560..32ea65f 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "typescript": "^3.6.3" }, "dependencies": { - "@blockstack/stacks-transactions": "^0.4.0", + "@blockstack/stacks-transactions": "^0.4.6", "@types/bn.js": "^4.11.5", "@types/cors": "^2.8.5", "@types/express": "^4.16.1", From e5d0d7d70d280ca27456d07bd2a9564799f6ad14 Mon Sep 17 00:00:00 2001 From: yknl Date: Mon, 15 Jun 2020 16:58:52 -0400 Subject: [PATCH 21/23] feat: call read-only contract functions --- package-lock.json | 12 ++++----- src/argparse.ts | 47 +++++++++++++++++++++++++++++--- src/cli.ts | 68 ++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 115 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index d73581e..71e6cb2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,9 +25,9 @@ } }, "@blockstack/stacks-transactions": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.4.4.tgz", - "integrity": "sha512-/ayC2EZBdIG4AKE/IsMViZPbjheIa7HqsFl8DgD7GG9X8I2SeqXf8eGMA5ngyNIBoE4VD2PsmmpXXUV0pdfE2g==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.4.6.tgz", + "integrity": "sha512-3Hb+v0ZmG5bVZHasfM9KzlwK+2e5r6oKsKk0eRgavLb5bBMQy/cw0YYoUWmt+ipNqDP5ssZgoOA1KKRhoSWvXg==", "requires": { "@types/bn.js": "^4.11.6", "@types/elliptic": "^6.4.12", @@ -199,9 +199,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.153", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.153.tgz", - "integrity": "sha512-lYniGRiRfZf2gGAR9cfRC3Pi5+Q1ziJCKqPmjZocigrSJUVPWf7st1BtSJ8JOeK0FLXVndQ1IjUjTco9CXGo/Q==" + "version": "4.14.155", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.155.tgz", + "integrity": "sha512-vEcX7S7aPhsBCivxMwAANQburHBtfN9RdyXFk84IJmu2Z4Hkg1tOFgaslRiEqqvoLtbCBi6ika1EMspE+NZ9Lg==" }, "@types/logform": { "version": "1.2.0", diff --git a/src/argparse.ts b/src/argparse.ts index e30e2c2..5ada36a 100644 --- a/src/argparse.ts +++ b/src/argparse.ts @@ -281,7 +281,7 @@ export const CLI_ARGS = { name: 'function_name', type: 'string', realtype: 'string', - pattern: '^[a-zA-Z]([a-zA-Z0-9]|[-_])*$', + pattern: '^[a-zA-Z]([a-zA-Z0-9]|[-_!?])*$', }, { name: 'fee', @@ -304,17 +304,58 @@ export const CLI_ARGS = { ], minItems: 6, maxItems: 6, - help: 'Deploys a Clarity smart contract on the network.\n' + + help: 'Call a function in a deployed Clarity smart contract.\n' + '\n' + 'If the command succeeds, it prints out a transaction ID.' + '\n' + 'Example:\n' + ' $ export PAYMENT="bfeffdf57f29b0cc1fab9ea197bb1413da2561fe4b83e962c7f02fbbe2b1cd5401"\n' + - ' $ blockstack-cli deploy_contract ./my_contract.clar my_contract 1 0 "$PAYMENT"\n' + + ' $ blockstack-cli call_contract_func SPBMRFRPPGCDE3F384WCJPK8PQJGZ8K9QKK7F59X contract_name' + + ' contract_function 1 0 "$PAYMENT"\n' + ' a9d387a925fb0ba7a725fb1e11f2c3f1647473699dd5a147c312e6453d233456\n' + '\n', group: 'Account Management' }, + call_read_only_contract_func: { + type: 'array', + items: [ + { + name: 'contract_address', + type: 'string', + realtype: 'address', + pattern: `${STACKS_ADDRESS_PATTERN}` + }, + { + name: 'contract_name', + type: 'string', + realtype: 'string', + pattern: '^[a-zA-Z]([a-zA-Z0-9]|[-_])*$', + }, + { + name: 'function_name', + type: 'string', + realtype: 'string', + pattern: '^[a-zA-Z]([a-zA-Z0-9]|[-_!?])*$', + }, + { + name: 'sender_address', + type: 'string', + realtype: 'address', + pattern: `${STACKS_ADDRESS_PATTERN}` + } + ], + minItems: 4, + maxItems: 4, + help: 'Call a read-only function in a deployed Clarity smart contract.\n' + + '\n' + + 'If the command succeeds, it prints out a Clarity value.' + + '\n' + + 'Example:\n' + + ' $ blockstack-cli call_read_only_contract_func SPBMRFRPPGCDE3F384WCJPK8PQJGZ8K9QKK7F59X contract_name' + + ' contract_function SPBMRFRPPGCDE3F384WCJPK8PQJGZ8K9QKK7F59X\n' + + '\n', + group: 'Account Management' + }, convert_address: { type: 'array', items: [ diff --git a/src/cli.ts b/src/cli.ts index ff16c79..399a857 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -17,6 +17,7 @@ import { makeSTXTokenTransfer, makeSmartContractDeploy, makeContractCall, + callReadOnlyFunction, broadcastTransaction, estimateTransfer, estimateContractDeploy, @@ -26,12 +27,14 @@ import { TokenTransferOptions, ContractDeployOptions, ContractCallOptions, + ReadOnlyFunctionOptions, ContractCallPayload, ClarityValue, ClarityAbi, getAbi, validateContractCall, - PostConditionMode + PostConditionMode, + cvToString, } from '@blockstack/stacks-transactions'; const c32check = require('c32check'); @@ -2621,7 +2624,7 @@ async function sendTokens(network: CLINetworkAdapter, args: string[]) : Promise< return Promise.resolve(tx.serialize().toString('hex')); } - return broadcastTransaction(tx, txNetwork).then(() => { + return broadcastTransaction(tx, txNetwork).then((response) => { return { txid: tx.txid(), transaction: generateExplorerTxPageUrl(tx.txid(), txNetwork), @@ -2688,8 +2691,9 @@ async function contractDeploy(network: CLINetworkAdapter, args: string[]) : Prom /* * Call a Clarity smart contract function. * args: - * @source (string) path to the contract source file + * @contractAddress (string) the address of the contract * @contractName (string) the name of the contract + * @functionName (string) the name of the function to call * @fee (int) the transaction fee to be paid * @nonce (int) integer nonce needs to be incremented after each transaction from an account * @privateKey (string) the hex-encoded private key to use to send the tokens @@ -2767,6 +2771,63 @@ async function contractFunctionCall(network: CLINetworkAdapter, args: string[]) }); } +/* + * Call a read-only Clarity smart contract function. + * args: + * @contractAddress (string) the address of the contract + * @contractName (string) the name of the contract + * @functionName (string) the name of the function to call + * @senderAddress (string) the sender address + */ +async function readOnlyContractFunctionCall(network: CLINetworkAdapter, args: string[]) : Promise { + const contractAddress = args[0]; + const contractName = args[1]; + const functionName = args[2]; + const senderAddress = args[3]; + + // temporary hack to use network config from stacks-transactions lib + const txNetwork = network.isMainnet() ? new StacksMainnet() : new StacksTestnet(); + txNetwork.coreApiUrl = network.blockstackAPIUrl; + + let abi: ClarityAbi; + let abiArgs: ClarityFunctionArg[]; + let functionArgs: ClarityValue[] = []; + + return getAbi( + contractAddress, + contractName, + txNetwork + ).then((responseAbi) => { + abi = responseAbi; + const filtered = abi.functions.filter(fn => fn.name === functionName); + if (filtered.length === 1) { + abiArgs = filtered[0].args; + return makePromptsFromArgList(abiArgs); + } else { + return null; + } + }) + .then((prompts) => inquirer.prompt(prompts)) + .then((answers) => { + functionArgs = parseClarityFunctionArgAnswers(answers, abiArgs); + + const options: ReadOnlyFunctionOptions = { + contractAddress, + contractName, + functionName, + functionArgs, + senderAddress, + network: txNetwork, + } + + return callReadOnlyFunction(options); + }).then((returnValue) => { + return cvToString(returnValue); + }).catch((error) => { + return error.toString(); + }); +} + /* * Get the number of confirmations of a txid. * args: @@ -3509,6 +3570,7 @@ const COMMANDS : Record = { 'announce': announce, 'balance': balance, 'call_contract_func': contractFunctionCall, + 'call_read_only_contract_func': readOnlyContractFunctionCall, 'convert_address': addressConvert, 'decrypt_keychain': decryptMnemonic, 'deploy_contract': contractDeploy, From 347045a015ee2bb1dca0c9862a7722267b631095 Mon Sep 17 00:00:00 2001 From: yknl Date: Fri, 19 Jun 2020 13:29:30 -0400 Subject: [PATCH 22/23] fix: update to stacks-transaction v0.5.0 --- package-lock.json | 26 ++++++++++---------------- package.json | 2 +- src/cli.ts | 4 ++-- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 71e6cb2..1e46d43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,9 +25,9 @@ } }, "@blockstack/stacks-transactions": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.4.6.tgz", - "integrity": "sha512-3Hb+v0ZmG5bVZHasfM9KzlwK+2e5r6oKsKk0eRgavLb5bBMQy/cw0YYoUWmt+ipNqDP5ssZgoOA1KKRhoSWvXg==", + "version": "0.5.0-beta.1", + "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.5.0-beta.1.tgz", + "integrity": "sha512-k28LPvTuk/Ha4Id+ipSYQF3OwqIbJCWBmbBQoSB1q4ON1I7+mGHfq76BkSd/+JSnr31x0KrNRUGA0l6uzJYTXA==", "requires": { "@types/bn.js": "^4.11.6", "@types/elliptic": "^6.4.12", @@ -72,18 +72,17 @@ } }, "cross-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.4.tgz", - "integrity": "sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz", + "integrity": "sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==", "requires": { - "node-fetch": "2.6.0", - "whatwg-fetch": "3.0.0" + "node-fetch": "2.6.0" } }, "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -93,11 +92,6 @@ "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" } } }, diff --git a/package.json b/package.json index 32ea65f..1b98c12 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "typescript": "^3.6.3" }, "dependencies": { - "@blockstack/stacks-transactions": "^0.4.6", + "@blockstack/stacks-transactions": "^0.5.0-beta.1", "@types/bn.js": "^4.11.5", "@types/cors": "^2.8.5", "@types/express": "^4.16.1", diff --git a/src/cli.ts b/src/cli.ts index 399a857..a7d8a30 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -15,7 +15,7 @@ import * as inquirer from 'inquirer'; import fetch from 'node-fetch'; import { makeSTXTokenTransfer, - makeSmartContractDeploy, + makeContractDeploy, makeContractCall, callReadOnlyFunction, broadcastTransaction, @@ -2666,7 +2666,7 @@ async function contractDeploy(network: CLINetworkAdapter, args: string[]) : Prom postConditionMode: PostConditionMode.Allow } - const tx = await makeSmartContractDeploy(options); + const tx = await makeContractDeploy(options); if (estimateOnly) { return estimateContractDeploy(tx, txNetwork).then((cost) => { From 558152aa1d2d8e339fd018b559eececb3152d04d Mon Sep 17 00:00:00 2001 From: Matthew Little Date: Wed, 15 Jul 2020 14:25:12 +0200 Subject: [PATCH 23/23] fix: "Module not found" not working after global npm install using nodejs without node-version-manager --- bin.js | 4 + cmd/index.js | 3 - package-lock.json | 1312 ++++++++++++++++++++------------------------- package.json | 10 +- src/auth.ts | 4 +- src/utils.ts | 12 +- 6 files changed, 611 insertions(+), 734 deletions(-) create mode 100755 bin.js delete mode 100755 cmd/index.js diff --git a/bin.js b/bin.js new file mode 100755 index 0000000..9ae4755 --- /dev/null +++ b/bin.js @@ -0,0 +1,4 @@ +#!/usr/bin/env node + +require('ts-node').register({ dir: __dirname, transpileOnly: true }); +require('./src/index.ts'); diff --git a/cmd/index.js b/cmd/index.js deleted file mode 100755 index 4bd2d67..0000000 --- a/cmd/index.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node - -require('../lib/index'); diff --git a/package-lock.json b/package-lock.json index 1e46d43..065fcad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,29 +5,35 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.10.4" } }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@blockstack/stacks-transactions": { - "version": "0.5.0-beta.1", - "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.5.0-beta.1.tgz", - "integrity": "sha512-k28LPvTuk/Ha4Id+ipSYQF3OwqIbJCWBmbBQoSB1q4ON1I7+mGHfq76BkSd/+JSnr31x0KrNRUGA0l6uzJYTXA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@blockstack/stacks-transactions/-/stacks-transactions-0.5.1.tgz", + "integrity": "sha512-szzDyRBHnPDE7hoqm6TJbKvUPE5aHRapS4gqiDetOwZzq/aDqIrFVHSgU1GM7m1d2q2jlN1knW4IiRJUeCxw0Q==", "requires": { "@types/bn.js": "^4.11.6", "@types/elliptic": "^6.4.12", @@ -46,22 +52,6 @@ "smart-buffer": "^4.1.0" }, "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/elliptic": { - "version": "6.4.12", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", - "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", - "requires": { - "@types/bn.js": "*" - } - }, "c32check": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/c32check/-/c32check-1.0.1.tgz", @@ -70,43 +60,31 @@ "base58check": "^2.0.0", "ripemd160": "^2.0.1" } - }, - "cross-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz", - "integrity": "sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==", - "requires": { - "node-fetch": "2.6.0" - } - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "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" - } } } }, + "@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "@types/bn.js": { - "version": "4.11.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz", - "integrity": "sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng==", + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "requires": { "@types/node": "*" } }, "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", "requires": { "@types/connect": "*", "@types/node": "*" @@ -118,25 +96,25 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", "requires": { "@types/node": "*" } }, "@types/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg==", "requires": { "@types/express": "*" } }, "@types/elliptic": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.9.tgz", - "integrity": "sha512-Mn+OyENd6YHwJKgUSyCTUDunEDFMaFpCXt52JCA00sxtzEa1ji6H0doZHL3iXhqMTo1Ob53X+Dv0s4PAJ+IVlA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", + "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", "requires": { "@types/bn.js": "*" } @@ -148,28 +126,30 @@ "dev": true }, "@types/express": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz", - "integrity": "sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==", + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.7.tgz", + "integrity": "sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ==", "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "*", + "@types/qs": "*", "@types/serve-static": "*" } }, "@types/express-serve-static-core": { - "version": "4.16.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz", - "integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==", + "version": "4.17.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.8.tgz", + "integrity": "sha512-1SJZ+R3Q/7mLkOD9ewCBDYD2k0WyZQtWYqF/2VvoNN2/uhI49J9CDN4OAm+wGMA0DbArA4ef27xl4+JwMtGggw==", "requires": { "@types/node": "*", + "@types/qs": "*", "@types/range-parser": "*" } }, "@types/express-winston": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/express-winston/-/express-winston-3.0.3.tgz", - "integrity": "sha512-dSzZ0lHEpP2JxLubsLs3P+JWcFKiO4bKWnHAhPkpL0YdtmDrQU+JemVAAUvAIhn0RDuNcUDetQOA8NzHLzL1UQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/express-winston/-/express-winston-3.0.4.tgz", + "integrity": "sha512-fCvI4nTs/oYhq7jACnPurepOPMKz//bNuCwMIRCcESix9jEuky93H5KwkyKeEPGNZfQzR3zCUbeGWs6/jvV7Fg==", "requires": { "@types/express": "*", "@types/logform": "*", @@ -187,39 +167,48 @@ } }, "@types/json-schema": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", - "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", "dev": true }, "@types/lodash": { - "version": "4.14.155", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.155.tgz", - "integrity": "sha512-vEcX7S7aPhsBCivxMwAANQburHBtfN9RdyXFk84IJmu2Z4Hkg1tOFgaslRiEqqvoLtbCBi6ika1EMspE+NZ9Lg==" + "version": "4.14.157", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.157.tgz", + "integrity": "sha512-Ft5BNFmv2pHDgxV5JDsndOWTRJ+56zte0ZpYLowp03tW+K+t8u8YMOzAnpuqPgzX6WO1XpDIUm7u04M8vdDiVQ==" }, "@types/logform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/logform/-/logform-1.2.0.tgz", - "integrity": "sha512-E8cLzW+PmqHI//4HLR+ZvE3cyzqVjsncYBx1O14P07oVJj3ezhmiL/azlgkXKLFyCWAeKsPQdjHNg/NEhBF5Ow==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@types/logform/-/logform-1.10.1.tgz", + "integrity": "sha512-7PFeU3gNsaG80dNWIl9FafSCnc4oYRXlyJ4yM38i0hMuqJaIMGSARS16QKTKfN4nZmNkA2Yy1z3h1WkJxgGbmA==", + "requires": { + "logform": "*" + } }, "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.2.tgz", + "integrity": "sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q==" }, "@types/node": { - "version": "11.13.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.18.tgz", - "integrity": "sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA==" + "version": "11.15.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.18.tgz", + "integrity": "sha512-3p2M6moxwdDFyPia2ROI8CCkRa9ZzYjvCys2TOE1xgwYDQmY49Cj0cvkdBkzh/rY9gkvzgzYOeECYtB4f0/fDA==" }, "@types/node-fetch": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.0.tgz", - "integrity": "sha512-TLFRywthBgL68auWj+ziWu+vnmmcHCDFC/sqCOQf1xTz4hRq8cu79z8CtHU9lncExGBsB8fXA4TiLDLt6xvMzw==", + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", + "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", "requires": { - "@types/node": "*" + "@types/node": "*", + "form-data": "^3.0.0" } }, + "@types/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA==" + }, "@types/randombytes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/randombytes/-/randombytes-2.0.0.tgz", @@ -242,9 +231,9 @@ } }, "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.4.tgz", + "integrity": "sha512-jTDt0o/YbpNwZbQmE/+2e+lfjJEJJR0I3OFaKQKPWkASkCoW3i6fsUnqudSMcNAfbtmADGu8f4MV4q+GqULmug==", "requires": { "@types/express-serve-static-core": "*", "@types/mime": "*" @@ -268,56 +257,64 @@ } }, "@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.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "2.0.0", - "eslint-utils": "^1.4.0", + "@typescript-eslint/experimental-utils": "2.34.0", "functional-red-black-tree": "^1.0.1", - "regexpp": "^2.0.1", - "tsutils": "^3.14.0" + "regexpp": "^3.0.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.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", "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.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.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.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", "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.34.0", + "@typescript-eslint/typescript-estree": "2.34.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.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", "dev": true, "requires": { - "lodash.unescape": "4.0.1", - "semver": "^6.2.0" + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" }, "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 + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } } } }, @@ -331,15 +328,15 @@ } }, "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", "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.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, "ajv": { @@ -375,8 +372,7 @@ "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "argparse": { "version": "1.0.10", @@ -401,13 +397,14 @@ } }, "asn1.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.2.0.tgz", - "integrity": "sha512-Q7hnYGGNYbcmGrCPulXfkEw7oW7qjWeM4ZTALmgpuIcZLxyqqKYWxCZg2UBm8bklrnB4m2mGyJPWfoktdORD8A==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" } }, "assert-plus": { @@ -422,12 +419,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, "asynckit": { "version": "0.4.0", @@ -440,9 +434,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "balanced-match": { "version": "1.0.0", @@ -451,12 +445,9 @@ "dev": true }, "base-x": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.6.tgz", - "integrity": "sha512-4PaF8u2+AlViJxRVjurkLTxpp7CaFRD/jo5rPT9ONnKxyhQ8f59yzamEvq7EkriG56yn5On4ONyaG75HLqr46w==", - "requires": { - "safe-buffer": "^5.0.1" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", + "integrity": "sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w=" }, "base58check": { "version": "2.0.0", @@ -464,21 +455,6 @@ "integrity": "sha1-gEZlLRS8h/BjvRa+lKORNNO2EXM=", "requires": { "bs58": "^3.0.0" - }, - "dependencies": { - "base-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", - "integrity": "sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w=" - }, - "bs58": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", - "integrity": "sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=", - "requires": { - "base-x": "^1.1.0" - } - } } }, "base64url": { @@ -495,9 +471,9 @@ } }, "bech32": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.3.tgz", - "integrity": "sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, "bindings": { "version": "1.5.0", @@ -508,20 +484,20 @@ } }, "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", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.4.tgz", - "integrity": "sha512-ioPytarPDIrWckWMuK4RNUtvwhvWEc2fvuhnO0WEwu732k5OLjUXv4rXi2c/KJHw9ZMNQMkYRJrBw81RujShGQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.5.tgz", + "integrity": "sha512-zVY4VvJV+b2fS0/dcap/5XLlpqtgwyN8oRkuGgAS1uLOeEp0Yo6Tw2yUTozTtlrMJO3G8n4g/KX/XGFHW6Pq3g==", "requires": { "@types/node": "10.12.18", "bs58check": "^2.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.1.0", + "tiny-secp256k1": "^1.1.3", "typeforce": "^1.11.5", "wif": "^2.0.6" }, @@ -565,13 +541,12 @@ "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.10", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.1.10.tgz", + "integrity": "sha512-CesUqtBtnYc+SOMsYN9jWQWhdohW1MpklUkF7Ukn4HiAyN6yxykG+cIJogfRt6x5xcgH87K1Q+Mnoe/B+du1Iw==", "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", @@ -585,29 +560,24 @@ "typeforce": "^1.11.3", "varuint-bitcoin": "^1.0.4", "wif": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" - } } }, "blockstack": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/blockstack/-/blockstack-19.2.2.tgz", - "integrity": "sha512-jU2BW+uy6QH3PUpeHA+92AXzgSVMC7pX3YiHU0QCfRnKkd0/y41b3puCHBl1XPHNUVxHyb1Ewof0pv+xAMMcZA==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/blockstack/-/blockstack-19.3.0.tgz", + "integrity": "sha512-P/HRS5n+buTeIssxs1v479EpDZOFGpfiivRrv9UjbHj/FdSJLxC1onVD8Hiyfm0mB8y7Ah9qT2lGqKX9P6r7+g==", "requires": { + "@types/bn.js": "^4.11.5", + "@types/elliptic": "^6.4.9", "ajv": "^4.11.5", "bip39": "^3.0.2", - "bitcoinjs-lib": "^5.0.5", + "bitcoinjs-lib": "^5.1.2", "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", + "jsontokens": "^2.0.2", "query-string": "^6.3.0", "request": "^2.88.0", "ripemd160": "^2.0.2", @@ -617,18 +587,30 @@ "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==", + "cross-fetch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", + "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", + "requires": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + } + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "requires": { - "asn1.js": "^5.0.1", - "base64url": "^3.0.1", - "elliptic": "^6.4.1", - "key-encoder": "^1.1.7", - "validator": "^10.9.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, + "node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" + }, "zone-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/zone-file/-/zone-file-1.0.0.tgz", @@ -637,9 +619,9 @@ } }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" }, "body-parser": { "version": "1.19.0", @@ -686,11 +668,11 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", + "integrity": "sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=", "requires": { - "base-x": "^3.0.2" + "base-x": "^1.1.0" } }, "bs58check": { @@ -701,13 +683,30 @@ "bs58": "^4.0.0", "create-hash": "^1.1.0", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + } } }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "bytes": { "version": "3.1.0", @@ -790,9 +789,9 @@ } }, "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, "co": { "version": "4.6.0", @@ -830,15 +829,10 @@ "simple-swizzle": "^0.2.2" } }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" - }, "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "colorspace": { "version": "1.1.2", @@ -857,11 +851,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -874,6 +863,13 @@ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "content-type": { @@ -931,19 +927,11 @@ } }, "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.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.5.tgz", + "integrity": "sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==", "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" } }, "cross-spawn": { @@ -957,6 +945,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": { @@ -1024,21 +1020,10 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, "doctrine": { "version": "3.0.0", @@ -1103,9 +1088,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "elliptic": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", - "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -1117,18 +1102,14 @@ } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "encodeurl": { "version": "1.0.2", @@ -1140,11 +1121,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1156,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.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -1168,19 +1144,19 @@ "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.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^11.7.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.4.1", + "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -1189,7 +1165,7 @@ "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^6.1.2", @@ -1201,38 +1177,23 @@ }, "dependencies": { "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -1242,65 +1203,13 @@ "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" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "inquirer": { - "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", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "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==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "eslint-visitor-keys": "^1.1.0" } }, "progress": { @@ -1309,15 +1218,11 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true }, "semver": { "version": "6.3.0", @@ -1325,33 +1230,21 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "ansi-regex": "^4.1.0" } } } }, "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.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -1359,37 +1252,29 @@ } }, "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": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "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 - } } }, "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.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "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.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { @@ -1399,12 +1284,20 @@ "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } } }, "esrecurse": { @@ -1417,9 +1310,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": { @@ -1474,13 +1367,18 @@ "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, "express-winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/express-winston/-/express-winston-3.2.1.tgz", - "integrity": "sha512-yh49mpFcoLAFs4yuplIutTAqs+jgRQYB2bLoDTpMvQDARzQKHvABfj2PYMPfmk087+OsEBJmm96i6//q9RJnnw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/express-winston/-/express-winston-3.4.0.tgz", + "integrity": "sha512-CKo4ESwIV4BpNIsGVNiq2GcAwuomL4dVJRIIH/2K/jMpoRI2DakhkVTtaJACzV7n2I1v+knDJkkjZRCymJ7nmA==", "requires": { "chalk": "^2.4.1", "lodash": "^4.17.10" @@ -1507,14 +1405,14 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", @@ -1523,14 +1421,14 @@ "dev": true }, "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", + "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" }, "figures": { "version": "3.2.0", @@ -1580,23 +1478,28 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "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": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, @@ -1631,9 +1534,9 @@ } }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1645,19 +1548,30 @@ } }, "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.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } }, "har-schema": { "version": "2.0.0", @@ -1674,11 +1588,11 @@ }, "dependencies": { "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -1692,12 +1606,13 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, "hash.js": { @@ -1775,9 +1690,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", @@ -1794,9 +1709,9 @@ "dev": true }, "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -1825,20 +1740,20 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.2.tgz", + "integrity": "sha512-DF4osh1FM6l0RJc5YWYhSDB6TawiBRlbV9Cox8MWlidU218Tb7fm3lQTULyUJDfJ0tjbzl0W4q651mrCCEM55w==", "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.15", + "lodash": "^4.17.16", "mute-stream": "0.0.8", "run-async": "^2.4.0", - "rxjs": "^6.5.3", + "rxjs": "^6.6.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" @@ -1854,9 +1769,9 @@ } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1880,14 +1795,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -1899,9 +1806,9 @@ } }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-arrayish": { "version": "0.3.2", @@ -1915,10 +1822,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.1", @@ -1930,9 +1836,9 @@ } }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, "is-typedarray": { "version": "1.0.0", @@ -1962,9 +1868,9 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -2021,20 +1927,6 @@ "ecdsa-sig-formatter": "^1.0.11", "elliptic": "^6.4.1", "key-encoder": "^2.0.2" - }, - "dependencies": { - "key-encoder": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/key-encoder/-/key-encoder-2.0.2.tgz", - "integrity": "sha512-QgSbD+p0TehZAboWUnyjgMZd6E3cbcKbjzbqR9+MkW+gYpklOOkIgTsgVVoMT3syLWSkaIpvvjYOt4JYxGES1w==", - "requires": { - "@types/bn.js": "^4.11.5", - "@types/elliptic": "^6.4.9", - "asn1.js": "^5.0.1", - "bn.js": "^4.11.8", - "elliptic": "^6.4.1" - } - } } }, "jsprim": { @@ -2049,22 +1941,20 @@ } }, "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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/key-encoder/-/key-encoder-2.0.3.tgz", + "integrity": "sha512-fgBtpAGIr/Fy5/+ZLQZIPPhsZEcbSlYu/Wu96tNDFNSjSACw5lEIOFeaVdQ/iwrb8oxjlWi6wmWdH76hV6GZjg==", "requires": { + "@types/elliptic": "^6.4.9", "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", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "levn": { "version": "0.3.0", @@ -2077,9 +1967,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash.assignin": { "version": "4.2.0", @@ -2141,20 +2031,14 @@ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", "requires": { "colors": "^1.2.1", "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", + "fecha": "^4.2.0", "ms": "^2.1.1", "triple-beam": "^1.3.0" } @@ -2162,8 +2046,7 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "md5.js": { "version": "1.3.5", @@ -2201,16 +2084,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.40.0" + "mime-db": "1.44.0" } }, "mimic-fn": { @@ -2244,20 +2127,12 @@ "dev": true }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "minimist": "^1.2.5" } }, "more-entropy": { @@ -2279,9 +2154,9 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" }, "natural-compare": { "version": "1.4.0", @@ -2341,9 +2216,12 @@ } }, "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } }, "onetime": { "version": "5.1.0", @@ -2354,17 +2232,17 @@ } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "os-tmpdir": { @@ -2404,9 +2282,9 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -2437,18 +2315,18 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "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.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "punycode": { "version": "2.1.1", @@ -2469,9 +2347,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.13.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.1.tgz", + "integrity": "sha512-RfoButmcK+yCta1+FuU8REvisx1oEzhMKwhLUNcepQTPGcNMp1sIqjnfCtfnvGSQZQEhaBHvccujtWoUV3TTbA==", "requires": { "decode-uri-component": "^0.2.0", "split-on-first": "^1.0.0", @@ -2503,9 +2381,9 @@ } }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2513,15 +2391,15 @@ } }, "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.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2530,7 +2408,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -2540,7 +2418,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, @@ -2596,17 +2474,17 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz", + "integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==", "requires": { "tslib": "^1.9.0" } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -2614,24 +2492,27 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "schema-inspector": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/schema-inspector/-/schema-inspector-1.6.8.tgz", - "integrity": "sha1-ueU5g8xV/y29e2Xj2+CF2dEoXyo=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/schema-inspector/-/schema-inspector-1.7.0.tgz", + "integrity": "sha512-Cj4XP6O3QfDhOq7bIPpz3Ev+sjR++nqFsIggBVIk/8axqFc2p+XSwNBWih9Ut/p8k36f1uCyXB+TzumZUsxVBQ==", "requires": { - "async": "^1.5.0" + "async": "~2.6.3" }, "dependencies": { "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } } } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true }, "send": { @@ -2723,6 +2604,14 @@ "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } } }, "smart-buffer": { @@ -2736,10 +2625,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { - "version": "0.5.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.18.tgz", - "integrity": "sha512-9luZr/BZ2QeU6tO2uG8N2aZpVSli4TSAOAqFOyTO51AJcD9P99c0K1h6dD6r6qo5dyT44BR5exweOaLLeldTkQ==", - "dev": true, + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -2795,57 +2683,28 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } + "ansi-regex": "^5.0.0" } }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { @@ -2857,9 +2716,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", @@ -2869,17 +2728,35 @@ }, "dependencies": { "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -2890,6 +2767,15 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -2910,9 +2796,9 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "tiny-secp256k1": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.3.tgz", - "integrity": "sha512-ZpobrhOtHP98VYEN51IYQH1YcrbFpnxFhI6ceWa3OEbJn7eHvSd8YFjGPxbedGCy7PNYU1v/+BRsdvyr5uRd4g==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.5.tgz", + "integrity": "sha512-duE2hSLSQIpHGzmK48OgRrGTi+4OTkXLC6aa86uOYQ6LLCYZSarVKIAvEtY7MoXjoL6bOXMSerEGMzrvW4SkDw==", "requires": { "bindings": "^1.3.0", "bn.js": "^4.11.8", @@ -2935,19 +2821,12 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "triple-beam": { @@ -2969,10 +2848,9 @@ } }, "ts-node": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.9.0.tgz", - "integrity": "sha512-rwkXfOs9zmoHrV8xE++dmNd6ZIS+nmHHCxcV53ekGJrxFLMbp+pizpPS07ARvhwneCIECPppOwbZHvw9sQtU4w==", - "dev": true, + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "requires": { "arg": "^4.1.0", "diff": "^4.0.1", @@ -2982,9 +2860,9 @@ } }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, "tsutils": { "version": "3.17.1", @@ -3037,19 +2915,14 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", - "dev": true + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz", + "integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==" }, "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==", - "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - } + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.0.tgz", + "integrity": "sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA==" }, "unpipe": { "version": "1.0.0", @@ -3075,25 +2948,20 @@ "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.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "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.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "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", - "integrity": "sha512-jCEPG+COU/1Rp84neKTyDJQr478/hAfVp5xxYn09QEH0yBjbmPeMfuuQIrp+BUD83hybtYZKhr5elV3bvdV1bA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", "requires": { "safe-buffer": "^5.1.1" } @@ -3136,34 +3004,34 @@ } }, "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "requires": { + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" + "winston-transport": "^4.4.0" } }, "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", "requires": { - "readable-stream": "^2.3.6", + "readable-stream": "^2.3.7", "triple-beam": "^1.2.0" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3174,6 +3042,11 @@ "util-deprecate": "~1.0.1" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -3184,10 +3057,10 @@ } } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wrappy": { @@ -3208,8 +3081,7 @@ "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" }, "zone-file": { "version": "0.2.3", diff --git a/package.json b/package.json index 1b98c12..86e5eae 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ }, "license": "MIT", "bin": { - "blockstack": "./cmd/index.js", - "blockstack-cli": "./cmd/index.js" + "blockstack": "./bin.js", + "blockstack-cli": "./bin.js" }, "bugs": { "url": "https://github.com/blockstack/cli-blockstack/issues" @@ -68,9 +68,7 @@ "@typescript-eslint/eslint-plugin": "^2.0.0", "@typescript-eslint/parser": "^2.0.0", "eslint": "^6.1.0", - "minimist": ">=1.2.3", - "ts-node": "^8.3.0", - "typescript": "^3.6.3" + "minimist": ">=1.2.3" }, "dependencies": { "@blockstack/stacks-transactions": "^0.5.0-beta.1", @@ -94,6 +92,8 @@ "jsontokens": "^2.0.2", "node-fetch": "^2.6.0", "ripemd160": "^2.0.1", + "ts-node": "^8.10.2", + "typescript": "^3.9.6", "winston": "^3.2.1", "zone-file": "^0.2.2" } diff --git a/src/auth.ts b/src/auth.ts index 0fda72e..b538197 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -377,7 +377,7 @@ export async function handleAuth(network: CLINetworkAdapter, res: express.Response ) : Promise { - const authToken = req.query.authRequest; + const authToken = req.query.authRequest as string; if (!authToken) { return Promise.resolve().then(() => { sendJSON(res, { error: 'No authRequest given' }, 400); @@ -589,7 +589,7 @@ export async function handleSignIn(network: CLINetworkAdapter, res: express.Response ): Promise { - const authResponseQP = req.query.authResponse; + const authResponseQP = req.query.authResponse as string; if (!authResponseQP) { return Promise.resolve().then(() => { sendJSON(res, { error: 'No authResponse given' }, 400); diff --git a/src/utils.ts b/src/utils.ts index 38b2b62..c595769 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -371,9 +371,13 @@ export function decodePrivateKey(serializedPrivateKey: string) : string | CLITra throw new Error('Unparseable private key'); } -type AnyJson = boolean | number | string | null | JsonArray | JsonMap; -interface JsonMap { [key: string]: AnyJson; } -interface JsonArray extends Array {} +type AnyJson = + | string + | number + | boolean + | null + | { [property: string]: AnyJson } + | AnyJson[]; /* * JSON stringify helper @@ -471,7 +475,7 @@ export function makeProfileJWT(profileData: Object, privateKey: string) : string const signedToken = blockstack.signProfileToken(profileData, privateKey); const wrappedToken = blockstack.wrapProfileToken(signedToken); const tokenRecords = [wrappedToken]; - return JSONStringify(tokenRecords); + return JSONStringify(tokenRecords as unknown as AnyJson); } export async function makeDIDConfiguration(network:CLINetworkAdapter, blockstackID: string, domain: string, privateKey:string): Promise<{entries:{did:string, jwt:string}[]}> {