├── .editorconfig ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── build-binaries ├── package.json ├── src ├── command │ ├── create.ts │ ├── delete.ts │ ├── export.ts │ ├── import.ts │ ├── importRaw.ts │ └── list.ts ├── error.ts ├── index.ts ├── types.ts └── util.ts ├── tsconfig.json ├── tslint.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | charset = utf-8 6 | insert_final_newline = true 7 | 8 | [*.yml] 9 | indent_style = space 10 | indent_size = 2 11 | 12 | [*.{ts,json,js}] 13 | trim_trailing_whitespace = true 14 | indent_style = space 15 | indent_size = 4 16 | 17 | # npm inserts a final newline. 18 | [package.json] 19 | trim_trailing_whitespace = false 20 | indent_size = 2 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.vscode/ 2 | /build/ 3 | node_modules/ 4 | .DS_Store 5 | yarn-error.log 6 | /binaries/ 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "10" 4 | before_install: 5 | - yarn install 6 | script: 7 | - yarn build 8 | - yarn test 9 | cache: yarn 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # codechain-keystore-cli [![Build Status](https://travis-ci.org/CodeChain-io/codechain-keystore-cli.svg?branch=master)](https://travis-ci.org/CodeChain-io/codechain-keystore-cli) 2 | 3 | A command line for CodeChain's key management tool 4 | 5 | ## How to install 6 | 7 | ### Binary install 8 | 9 | You can download the latest binaries from [here](https://github.com/CodeChain-io/codechain-keystore-cli/releases/tag/0.1.1) 10 | 11 | ### Install using the npm package manager 12 | 13 | ```sh 14 | npm install -g codechain-keystore-cli 15 | ``` 16 | 17 | ### Install using the yarn package manager 18 | 19 | ```sh 20 | yarn global add codechain-keystore-cli 21 | ``` 22 | 23 | ## How to use 24 | 25 | ```sh 26 | Usage: cckey [options] [command] 27 | 28 | Options: 29 | 30 | -V, --version output the version number 31 | -t, --account-type 'platform' or 'asset'. The type of the key (default: platform) 32 | --keys-path the path to store the keys (default: keystore.db) 33 | --network-id the id of the network (use 'cc' for mainnet, use 'wc' for corgi) (default: cc) 34 | -h, --help output usage information 35 | 36 | Commands: 37 | 38 | list list keys 39 | create [options] create a new key 40 | delete [options] delete a key 41 | import [options] import a key 42 | import-raw [options] import a raw private key (32 byte hexadecimal string) 43 | export [options] export the key 44 | 45 | Examples: 46 | 47 | cckey create -t platform --passphrase "my password" 48 | 49 | cckey list -t asset 50 | 51 | cckey delete -t platform --address "ccc..." 52 | 53 | cckey import UTC--2018-08-14T06-30-23Z--bbb6685e-7165-819d-0988-fc1a7d2d0523 -t platform --passphrase "satoshi" 54 | 55 | cckey export -t platform --address cccq8ah0efv5ckpx6wy5mwva2aklzwsdw027sqfksrr --passphrase "satoshi" 56 | 57 | cckey import-raw -t platform a05f81608217738d99da8fd227897b87e8890d3c9159b559c7c8bbd408e5fb6e --passphrase "satoshi" 58 | ``` 59 | -------------------------------------------------------------------------------- /build-binaries: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const { execSync } = require("child_process"); 4 | const { version } = require("./package.json"); 5 | 6 | try { 7 | execSync("rm -r binaries/"); 8 | } catch (err) { 9 | // ignore 10 | } 11 | 12 | execSync("yarn pkg -t node12-linux-x64,node12-macos-x64,node12-win-x64 --out-path binaries/ package.json"); 13 | console.log("Build done"); 14 | 15 | const files = [ 16 | "codechain-keystore-cli-linux", 17 | "codechain-keystore-cli-macos", 18 | "codechain-keystore-cli-win.exe" 19 | ]; 20 | 21 | process.chdir("binaries"); 22 | for (const file of files) { 23 | const distFile = getDistFile(file); 24 | execSync(`mv ${file} ${distFile}`); 25 | const dir = removeExe(file); 26 | execSync(`mkdir -p ${dir}`); 27 | execSync(`mv ${distFile} ${dir}/`); 28 | 29 | execSync(`zip -r ${dir}-${version}.zip ${dir}`); 30 | } 31 | 32 | /** 33 | * @param {string} fileName 34 | */ 35 | function removeExe(fileName) { 36 | if (fileName.indexOf("exe") !== -1) { 37 | return fileName.slice(0, fileName.length - 4); 38 | } else { 39 | return fileName; 40 | } 41 | } 42 | 43 | function getDistFile(fileName) { 44 | if (fileName.indexOf("exe") !== -1) { 45 | return "cckey.exe"; 46 | } else { 47 | return "cckey"; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codechain-keystore-cli", 3 | "version": "0.8.3", 4 | "description": "A cli tool which manages CodeChain accounts", 5 | "main": "build/index.js", 6 | "bin": { 7 | "cckey": "build/index.js" 8 | }, 9 | "repository": "git@github.com:CodeChain-io/codechain-keystore-cli.git", 10 | "author": "CodeChain Team ", 11 | "bugs": { 12 | "url": "https://github.com/codechain-io/codechain-keystore-cli/issues" 13 | }, 14 | "homepage": "https://github.com/CodeChain-io/codechain-keystore-cli#readme", 15 | "license": "Apache-2.0", 16 | "scripts": { 17 | "build": "tsc -p .", 18 | "test": "yarn lint", 19 | "lint": "tslint -p . && prettier 'src/**/*.{ts,json,js}' -l", 20 | "fmt": "tslint -p . --fix && prettier 'src/**/*.{ts,json,js}' --write" 21 | }, 22 | "files": [ 23 | "build" 24 | ], 25 | "devDependencies": { 26 | "@types/commander": "^2.12.2", 27 | "@types/lodash": "^4.14.116", 28 | "@types/node": "^10.7.1", 29 | "pkg": "^4.4.0", 30 | "prettier": "1.14.2", 31 | "ts-node": "^7.0.1", 32 | "tslint": "^5.17.0", 33 | "tslint-config-prettier": "^1.10.0", 34 | "typescript": "^3.0.1" 35 | }, 36 | "dependencies": { 37 | "codechain-keystore": "^0.6.3", 38 | "codechain-primitives": "^1.0.4", 39 | "commander": "^2.17.1", 40 | "enquirer": "^2.3.1", 41 | "lodash": "^4.17.14" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/command/create.ts: -------------------------------------------------------------------------------- 1 | import { Context } from "../types"; 2 | import { getAddressFromKey } from "../util"; 3 | 4 | export async function createKey( 5 | { cckey, accountType, networkId }: Context, 6 | passphrase: string 7 | ): Promise { 8 | const key = await cckey[accountType].createKey({ 9 | passphrase 10 | }); 11 | 12 | console.log(getAddressFromKey(accountType, key, networkId)); 13 | } 14 | -------------------------------------------------------------------------------- /src/command/delete.ts: -------------------------------------------------------------------------------- 1 | import { prompt } from "enquirer"; 2 | 3 | import { CLIError, CLIErrorType } from "../error"; 4 | import { Context } from "../types"; 5 | import { findMatchingKey } from "../util"; 6 | 7 | export async function deleteKey( 8 | { cckey, accountType, networkId }: Context, 9 | address: string 10 | ): Promise { 11 | const keys = await cckey[accountType].getKeys(); 12 | const key = findMatchingKey(accountType, keys, address, networkId); 13 | 14 | const question = { 15 | type: "confirm", 16 | name: "delete", 17 | message: "Do you really want to delete the key?" 18 | }; 19 | 20 | const answer: any = await prompt(question); 21 | if (answer.delete) { 22 | const result = await cckey[accountType].deleteKey({ key }); 23 | if (!result) { 24 | throw new CLIError(CLIErrorType.Unknown, { 25 | message: "Delete failed" 26 | }); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/command/export.ts: -------------------------------------------------------------------------------- 1 | import { SecretStorage } from "codechain-keystore"; 2 | 3 | import { Context } from "../types"; 4 | import { findMatchingKey } from "../util"; 5 | 6 | export async function exportKey( 7 | { cckey, accountType, networkId }: Context, 8 | address: string, 9 | passphrase: string 10 | ): Promise { 11 | const keys = await cckey[accountType].getKeys(); 12 | const key = findMatchingKey(accountType, keys, address, networkId); 13 | return cckey[accountType].exportKey({ 14 | key, 15 | passphrase 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /src/command/import.ts: -------------------------------------------------------------------------------- 1 | import { SecretStorage } from "codechain-keystore"; 2 | 3 | import { Context } from "../types"; 4 | import { getAddressFromKey } from "../util"; 5 | 6 | export async function importKey( 7 | { cckey, accountType, networkId }: Context, 8 | secret: SecretStorage, 9 | passphrase: string 10 | ): Promise { 11 | const key = await cckey[accountType].importKey({ 12 | secret, 13 | passphrase 14 | }); 15 | 16 | console.log(getAddressFromKey(accountType, key, networkId)); 17 | } 18 | -------------------------------------------------------------------------------- /src/command/importRaw.ts: -------------------------------------------------------------------------------- 1 | import { PrivateKey } from "codechain-keystore/lib/types"; 2 | 3 | import { Context } from "../types"; 4 | import { getAddressFromKey } from "../util"; 5 | 6 | export async function importRawKey( 7 | { cckey, accountType, networkId }: Context, 8 | privateKey: PrivateKey, 9 | passphrase: string 10 | ): Promise { 11 | const key = await cckey[accountType].importRaw({ 12 | privateKey, 13 | passphrase 14 | }); 15 | 16 | console.log(getAddressFromKey(accountType, key, networkId)); 17 | } 18 | -------------------------------------------------------------------------------- /src/command/list.ts: -------------------------------------------------------------------------------- 1 | import * as _ from "lodash"; 2 | 3 | import { Context } from "../types"; 4 | import { getAddressFromKey } from "../util"; 5 | 6 | export async function listKeys({ 7 | cckey, 8 | accountType, 9 | networkId 10 | }: Context): Promise { 11 | let keys = await cckey[accountType].getKeys(); 12 | keys = _.map(keys, key => getAddressFromKey(accountType, key, networkId)); 13 | if (keys.length === 0) { 14 | console.log(""); 15 | } else { 16 | console.log(_.join(keys, "\n")); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/error.ts: -------------------------------------------------------------------------------- 1 | import { Action } from "./types"; 2 | 3 | export enum CLIErrorType { 4 | InvalidAccountType, 5 | InvalidAction, 6 | InvalidAddress, 7 | OptionRequired, 8 | NoSuchAddress, 9 | Unknown 10 | } 11 | 12 | export class CLIError extends Error { 13 | constructor(type: CLIErrorType, args?: any) { 14 | super(getErrorMessage(type, args)); 15 | } 16 | } 17 | 18 | function getErrorMessage(type: CLIErrorType, args: any = {}) { 19 | const actions: Action[] = ["list", "create", "delete"]; 20 | 21 | switch (type) { 22 | case CLIErrorType.InvalidAccountType: 23 | return "Account-type should be 'platform' or 'asset'"; 24 | case CLIErrorType.InvalidAction: 25 | return `Action should one of the ${JSON.stringify(actions)}`; 26 | case CLIErrorType.InvalidAddress: 27 | return `Address error: ${args.message}`; 28 | case CLIErrorType.OptionRequired: 29 | return `Option --${args.optionName} is required`; 30 | case CLIErrorType.NoSuchAddress: 31 | return `${args.address} is not found`; 32 | case CLIErrorType.Unknown: 33 | return `Internal error ${args.message}`; 34 | default: 35 | return `Internal error ${type}`; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import { CCKey } from "codechain-keystore"; 4 | import { AssetAddress, PlatformAddress } from "codechain-primitives"; 5 | import * as program from "commander"; 6 | import { prompt } from "enquirer"; 7 | import * as fs from "fs"; 8 | import * as _ from "lodash"; 9 | import * as process from "process"; 10 | 11 | import { createKey } from "./command/create"; 12 | import { deleteKey } from "./command/delete"; 13 | import { exportKey } from "./command/export"; 14 | import { importKey } from "./command/import"; 15 | import { importRawKey } from "./command/importRaw"; 16 | import { listKeys } from "./command/list"; 17 | import { CLIError, CLIErrorType } from "./error"; 18 | import { 19 | AccountType, 20 | CreateOption, 21 | DeleteOption, 22 | ExportOption, 23 | ImportOption, 24 | ListOption 25 | } from "./types"; 26 | import { getAddressFromKey } from "./util"; 27 | 28 | const VERSION = "0.8.2"; 29 | 30 | const DEFAULT_KEYS_PATH = "keystore.db"; 31 | 32 | program 33 | .version(VERSION) 34 | .option( 35 | "-t, --account-type ", 36 | "'platform' or 'asset'. The type of the key", 37 | "platform" 38 | ) 39 | .option( 40 | "--keys-path ", 41 | "the path to store the keys", 42 | DEFAULT_KEYS_PATH 43 | ) 44 | .option( 45 | "--network-id ", 46 | "the id of the network (use 'cc' for mainnet, use 'wc' for corgi)", 47 | "cc" 48 | ); 49 | 50 | program 51 | .command("list") 52 | .description("list keys") 53 | .action(handleError(listCommand)); 54 | 55 | program 56 | .command("create") 57 | .description("create a new key") 58 | .option("-p, --passphrase ", "passphrase") 59 | .action(handleError(createCommand)); 60 | 61 | program 62 | .command("delete") 63 | .description("delete a key") 64 | .option("-a, --address
", "address") 65 | .action(handleError(deleteCommand)); 66 | 67 | program 68 | .command("import ") 69 | .description("import a key") 70 | .option("-p, --passphrase ", "passphrase") 71 | .action(handleError(importCommand)); 72 | 73 | program 74 | .command("import-raw ") 75 | .description("import a raw private key (32 byte hexadecimal string)") 76 | .option("-p, --passphrase ", "passphrase") 77 | .action(handleError(importRawCommand)); 78 | 79 | program 80 | .command("export") 81 | .description("export the key") 82 | .option("-a, --address
", "address") 83 | .option("-p, --passphrase ", "passphrase") 84 | .option("--pretty", "pretty-print the output") 85 | .action(handleError(exportCommand)); 86 | 87 | // error on unknown commands 88 | program.on("command:*", () => { 89 | console.error( 90 | "Invalid command: %s\nSee --help for a list of available commands.", 91 | program.args.join(" ") 92 | ); 93 | process.exit(1); 94 | }); 95 | 96 | function handleError( 97 | f: (...args: any[]) => Promise 98 | ): (...args: any[]) => Promise { 99 | return async (...args: any[]) => { 100 | try { 101 | const option = args.pop(); 102 | await f(args, option); 103 | } catch (err) { 104 | console.error(err.toString()); 105 | process.exit(1); 106 | } 107 | }; 108 | } 109 | 110 | async function listCommand(args: any[], option: ListOption) { 111 | const cckey = await CCKey.create({ dbPath: option.parent.keysPath }); 112 | const accountType = parseAccountType(option.parent.accountType); 113 | const networkId = option.parent.networkId; 114 | await listKeys({ 115 | cckey, 116 | accountType, 117 | networkId 118 | }); 119 | } 120 | 121 | async function createCommand(args: any[], option: CreateOption) { 122 | const cckey = await CCKey.create({ dbPath: option.parent.keysPath }); 123 | const accountType = parseAccountType(option.parent.accountType); 124 | const passphrase = await parsePassphrase(option.passphrase); 125 | const networkId = option.parent.networkId; 126 | await createKey( 127 | { 128 | cckey, 129 | accountType, 130 | networkId 131 | }, 132 | passphrase 133 | ); 134 | } 135 | 136 | async function deleteCommand(args: any[], option: DeleteOption) { 137 | const cckey = await CCKey.create({ dbPath: option.parent.keysPath }); 138 | const accountType = parseAccountType(option.parent.accountType); 139 | const networkId = option.parent.networkId; 140 | if (_.isUndefined(option.address) && process.stdout.isTTY) { 141 | option.address = await selectAddress(cckey, networkId, accountType); 142 | } 143 | const address = parseAddress(accountType, option.address); 144 | await deleteKey( 145 | { 146 | cckey, 147 | accountType, 148 | networkId 149 | }, 150 | address 151 | ); 152 | } 153 | 154 | async function importCommand([path]: any[], option: ImportOption) { 155 | const cckey = await CCKey.create({ dbPath: option.parent.keysPath }); 156 | const accountType = parseAccountType(option.parent.accountType); 157 | const passphrase = await parsePassphrase(option.passphrase); 158 | const contents = fs.readFileSync(path, { encoding: "utf8" }); 159 | const networkId = option.parent.networkId; 160 | await importKey( 161 | { 162 | cckey, 163 | accountType, 164 | networkId 165 | }, 166 | JSON.parse(contents), 167 | passphrase 168 | ); 169 | } 170 | 171 | async function importRawCommand([privateKey]: any[], option: ImportOption) { 172 | const cckey = await CCKey.create({ dbPath: option.parent.keysPath }); 173 | const accountType = parseAccountType(option.parent.accountType); 174 | const passphrase = await parsePassphrase(option.passphrase); 175 | const networkId = option.parent.networkId; 176 | await importRawKey( 177 | { 178 | cckey, 179 | accountType, 180 | networkId 181 | }, 182 | privateKey, 183 | passphrase 184 | ); 185 | } 186 | 187 | async function exportCommand(args: any[], option: ExportOption) { 188 | const cckey = await CCKey.create({ dbPath: option.parent.keysPath }); 189 | const accountType = parseAccountType(option.parent.accountType); 190 | const networkId = option.parent.networkId; 191 | if (_.isUndefined(option.address) && process.stdout.isTTY) { 192 | option.address = await selectAddress(cckey, networkId, accountType); 193 | } 194 | const address = parseAddress(accountType, option.address); 195 | const passphrase = await parsePassphrase(option.passphrase); 196 | const secret = await exportKey( 197 | { 198 | cckey, 199 | accountType, 200 | networkId 201 | }, 202 | address, 203 | passphrase 204 | ); 205 | const res = option.pretty 206 | ? JSON.stringify(secret, null, 2) 207 | : JSON.stringify(secret); 208 | console.log(res); 209 | } 210 | 211 | program.on("--help", () => { 212 | console.log(` Examples: 213 | 214 | cckey create -t platform --passphrase "my password" 215 | 216 | cckey list -t asset 217 | 218 | cckey delete -t platform --address "ccc..." 219 | 220 | cckey import UTC--2018-08-14T06-30-23Z--bbb6685e-7165-819d-0988-fc1a7d2d0523 -t platform --passphrase "satoshi" 221 | 222 | cckey export -t platform --address cccq8ah0efv5ckpx6wy5mwva2aklzwsdw027sqfksrr --passphrase "satoshi" 223 | 224 | cckey import-raw -t platform a05f81608217738d99da8fd227897b87e8890d3c9159b559c7c8bbd408e5fb6e --passphrase "satoshi" 225 | `); 226 | }); 227 | 228 | program.parse(process.argv); 229 | if (program.args.length === 0) { 230 | program.outputHelp(); 231 | process.exit(1); 232 | } 233 | 234 | function parseAccountType(accountType: string): AccountType { 235 | if (_.isUndefined(accountType)) { 236 | throw new CLIError(CLIErrorType.OptionRequired, { 237 | optionName: "account-type" 238 | }); 239 | } 240 | if (!_.includes(["platform", "asset"], accountType)) { 241 | throw new CLIError(CLIErrorType.InvalidAccountType); 242 | } 243 | return accountType as AccountType; 244 | } 245 | 246 | function parseAddress(accountType: AccountType, address: string): string { 247 | if (_.isUndefined(address)) { 248 | throw new CLIError(CLIErrorType.OptionRequired, { 249 | optionName: "address" 250 | }); 251 | } 252 | try { 253 | if (accountType === "platform") { 254 | PlatformAddress.fromString(address); 255 | } else { 256 | AssetAddress.fromString(address); 257 | } 258 | } catch (err) { 259 | throw new CLIError(CLIErrorType.InvalidAddress, { 260 | message: err.message 261 | }); 262 | } 263 | return address; 264 | } 265 | 266 | async function parsePassphrase(passphrase: string): Promise { 267 | if (!_.isUndefined(passphrase)) { 268 | return passphrase; 269 | } 270 | 271 | const question = { 272 | type: "password", 273 | message: "Enter your passphrase please", 274 | name: "passphrase" 275 | }; 276 | 277 | const answer: any = await prompt(question); 278 | if (_.isUndefined(answer.passphrase)) { 279 | return ""; 280 | } 281 | return answer.passphrase; 282 | } 283 | 284 | async function selectAddress( 285 | cckey: CCKey, 286 | networkId: string, 287 | accountType: AccountType 288 | ): Promise { 289 | let keys = await cckey[accountType].getKeys(); 290 | keys = _.map(keys, key => getAddressFromKey(accountType, key, networkId)); 291 | const question = { 292 | type: "select", 293 | name: "address", 294 | message: "Select your address please", 295 | choices: keys 296 | }; 297 | const answer: any = await prompt(question); 298 | return answer.address; 299 | } 300 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import { CCKey } from "codechain-keystore"; 2 | 3 | export type AccountType = "platform" | "asset"; 4 | export type Action = "list" | "create" | "delete"; 5 | 6 | export interface CommonOption { 7 | accountType: string; 8 | keysPath: string; 9 | networkId: string; 10 | } 11 | 12 | export interface ListOption { 13 | parent: CommonOption; 14 | } 15 | 16 | export interface CreateOption { 17 | parent: CommonOption; 18 | passphrase: string; 19 | } 20 | 21 | export interface DeleteOption { 22 | parent: CommonOption; 23 | address: string; 24 | } 25 | 26 | export interface ImportOption { 27 | parent: CommonOption; 28 | passphrase: string; 29 | } 30 | 31 | export interface ExportOption { 32 | parent: CommonOption; 33 | address: string; 34 | passphrase: string; 35 | pretty: boolean; 36 | } 37 | 38 | export interface Context { 39 | cckey: CCKey; 40 | accountType: AccountType; 41 | networkId: string; 42 | } 43 | -------------------------------------------------------------------------------- /src/util.ts: -------------------------------------------------------------------------------- 1 | import { Key } from "codechain-keystore/lib/types"; 2 | import { AssetAddress, PlatformAddress } from "codechain-primitives"; 3 | import * as _ from "lodash"; 4 | 5 | import { CLIError, CLIErrorType } from "./error"; 6 | import { AccountType } from "./types"; 7 | 8 | export function getAddressFromKey( 9 | accountType: AccountType, 10 | key: Key, 11 | networkId: string 12 | ): string { 13 | if (accountType === "platform") { 14 | const platformAddress = PlatformAddress.fromAccountId(key, { 15 | networkId 16 | }); 17 | return platformAddress.toString(); 18 | } else if (accountType === "asset") { 19 | const assetAddress = AssetAddress.fromTypeAndPayload(1, key, { 20 | networkId 21 | }); 22 | return assetAddress.toString(); 23 | } else { 24 | throw new CLIError(CLIErrorType.InvalidAccountType); 25 | } 26 | } 27 | 28 | export function findMatchingKey( 29 | accountType: AccountType, 30 | keys: Key[], 31 | address: string, 32 | networkId: string 33 | ): string { 34 | const addresses = _.map(keys, key => 35 | getAddressFromKey(accountType, key, networkId) 36 | ); 37 | const index = _.indexOf(addresses, address); 38 | if (index === -1) { 39 | throw new CLIError(CLIErrorType.NoSuchAddress, { address }); 40 | } 41 | 42 | return keys[index]; 43 | } 44 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "build", 4 | "module": "commonjs", 5 | "target": "es5", 6 | "lib": [ 7 | "es6", 8 | "dom" 9 | ], 10 | "baseUrl": ".", 11 | "sourceMap": true, 12 | "allowJs": true, 13 | "moduleResolution": "node", 14 | "rootDir": "src", 15 | "forceConsistentCasingInFileNames": true, 16 | "noImplicitReturns": true, 17 | "noImplicitThis": true, 18 | "noImplicitAny": true, 19 | "strictNullChecks": true, 20 | "suppressImplicitAnyIndexErrors": true, 21 | "noUnusedLocals": true 22 | }, 23 | "exclude": [ 24 | "node_modules", 25 | "build" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["tslint:recommended", "tslint-config-prettier"], 3 | "rules": { 4 | "interface-name": false, 5 | "no-console": false, 6 | "object-literal-sort-keys": false, 7 | "no-var-requires": false, 8 | "array-type": false 9 | }, 10 | "jsRules": { 11 | "no-console": false, 12 | "object-literal-sort-keys": false 13 | }, 14 | "linterOptions": { 15 | "exclude": ["node_modules/**/*.ts"] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.8.3" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" 8 | integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== 9 | dependencies: 10 | "@babel/highlight" "^7.8.3" 11 | 12 | "@babel/helper-validator-identifier@^7.9.0": 13 | version "7.9.5" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" 15 | integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== 16 | 17 | "@babel/highlight@^7.8.3": 18 | version "7.9.0" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" 20 | integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.9.0" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@babel/parser@^7.9.4": 27 | version "7.9.4" 28 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" 29 | integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== 30 | 31 | "@babel/runtime@^7.9.2": 32 | version "7.9.2" 33 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" 34 | integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== 35 | dependencies: 36 | regenerator-runtime "^0.13.4" 37 | 38 | "@nodelib/fs.scandir@2.1.3": 39 | version "2.1.3" 40 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" 41 | integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== 42 | dependencies: 43 | "@nodelib/fs.stat" "2.0.3" 44 | run-parallel "^1.1.9" 45 | 46 | "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": 47 | version "2.0.3" 48 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" 49 | integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== 50 | 51 | "@nodelib/fs.walk@^1.2.3": 52 | version "1.2.4" 53 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" 54 | integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== 55 | dependencies: 56 | "@nodelib/fs.scandir" "2.1.3" 57 | fastq "^1.6.0" 58 | 59 | "@types/color-name@^1.1.1": 60 | version "1.1.1" 61 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" 62 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== 63 | 64 | "@types/commander@^2.12.2": 65 | version "2.12.2" 66 | resolved "https://registry.yarnpkg.com/@types/commander/-/commander-2.12.2.tgz#183041a23842d4281478fa5d23c5ca78e6fd08ae" 67 | integrity sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q== 68 | dependencies: 69 | commander "*" 70 | 71 | "@types/lodash@^4.14.116": 72 | version "4.14.149" 73 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" 74 | integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== 75 | 76 | "@types/node@^10.7.1": 77 | version "10.17.19" 78 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.19.tgz#1d31ddd5503dba2af7a901aafef3392e4955620e" 79 | integrity sha512-46/xThm3zvvc9t9/7M3AaLEqtOpqlYYYcCZbpYVAQHG20+oMZBkae/VMrn4BTi6AJ8cpack0mEXhGiKmDNbLrQ== 80 | 81 | ajv@^6.5.5: 82 | version "6.12.0" 83 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" 84 | integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== 85 | dependencies: 86 | fast-deep-equal "^3.1.1" 87 | fast-json-stable-stringify "^2.0.0" 88 | json-schema-traverse "^0.4.1" 89 | uri-js "^4.2.2" 90 | 91 | ansi-colors@^3.2.1: 92 | version "3.2.4" 93 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" 94 | integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== 95 | 96 | ansi-styles@^3.2.1: 97 | version "3.2.1" 98 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 99 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 100 | dependencies: 101 | color-convert "^1.9.0" 102 | 103 | ansi-styles@^4.1.0: 104 | version "4.2.1" 105 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 106 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 107 | dependencies: 108 | "@types/color-name" "^1.1.1" 109 | color-convert "^2.0.1" 110 | 111 | argparse@^1.0.7: 112 | version "1.0.10" 113 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 114 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 115 | dependencies: 116 | sprintf-js "~1.0.2" 117 | 118 | array-union@^2.1.0: 119 | version "2.1.0" 120 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 121 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 122 | 123 | arrify@^1.0.0: 124 | version "1.0.1" 125 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 126 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 127 | 128 | asn1@~0.2.3: 129 | version "0.2.4" 130 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 131 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 132 | dependencies: 133 | safer-buffer "~2.1.0" 134 | 135 | assert-plus@1.0.0, assert-plus@^1.0.0: 136 | version "1.0.0" 137 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 138 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 139 | 140 | asynckit@^0.4.0: 141 | version "0.4.0" 142 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 143 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 144 | 145 | aws-sign2@~0.7.0: 146 | version "0.7.0" 147 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 148 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 149 | 150 | aws4@^1.8.0: 151 | version "1.9.1" 152 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" 153 | integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== 154 | 155 | balanced-match@^1.0.0: 156 | version "1.0.0" 157 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 158 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 159 | 160 | base-x@^3.0.2: 161 | version "3.0.8" 162 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" 163 | integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== 164 | dependencies: 165 | safe-buffer "^5.0.1" 166 | 167 | base64-js@^1.0.2: 168 | version "1.3.1" 169 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" 170 | integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== 171 | 172 | bcrypt-pbkdf@^1.0.0: 173 | version "1.0.2" 174 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 175 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 176 | dependencies: 177 | tweetnacl "^0.14.3" 178 | 179 | bech32@=1.1.3: 180 | version "1.1.3" 181 | resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.3.tgz#bd47a8986bbb3eec34a56a097a84b8d3e9a2dfcd" 182 | integrity sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg== 183 | 184 | bignumber.js@^7.2.1: 185 | version "7.2.1" 186 | resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" 187 | integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== 188 | 189 | bitcore-lib@^8.17.0: 190 | version "8.17.0" 191 | resolved "https://registry.yarnpkg.com/bitcore-lib/-/bitcore-lib-8.17.0.tgz#081eb72d069a71c8aedceb3461353335a998a18b" 192 | integrity sha512-H6aMM7d5VXIDoPiJgWxmkYsGwycnh13PRnv5djmNQpqTYAGYYwZUHCC2JiRfBZbFFpNsuH2HT106DGd91BV3SQ== 193 | dependencies: 194 | bech32 "=1.1.3" 195 | bn.js "=4.11.8" 196 | bs58 "^4.0.1" 197 | buffer-compare "=1.1.1" 198 | elliptic "=6.4.0" 199 | inherits "=2.0.1" 200 | lodash "=4.17.15" 201 | 202 | bitcore-mnemonic@^8.6.0: 203 | version "8.17.0" 204 | resolved "https://registry.yarnpkg.com/bitcore-mnemonic/-/bitcore-mnemonic-8.17.0.tgz#582a794e4115eb71ad0509403dd3f0ee3d0adc42" 205 | integrity sha512-eAhqsN1S+cZOtrlsB+ksu8iW5sRkH0hk0LrhILSYAJXCnzQbQ+Um5oEGDOPCQQJmwQbnQyZaotnWGnIjOvi4FA== 206 | dependencies: 207 | bitcore-lib "^8.17.0" 208 | unorm "^1.4.1" 209 | 210 | blakejs@^1.1.0: 211 | version "1.1.0" 212 | resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" 213 | integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= 214 | 215 | bn.js@=4.11.8, bn.js@^4.11.1, bn.js@^4.11.8, bn.js@^4.4.0: 216 | version "4.11.8" 217 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" 218 | integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== 219 | 220 | brace-expansion@^1.1.7: 221 | version "1.1.11" 222 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 223 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 224 | dependencies: 225 | balanced-match "^1.0.0" 226 | concat-map "0.0.1" 227 | 228 | braces@^3.0.1: 229 | version "3.0.2" 230 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 231 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 232 | dependencies: 233 | fill-range "^7.0.1" 234 | 235 | brorand@^1.0.1: 236 | version "1.1.0" 237 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 238 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 239 | 240 | bs58@^4.0.1: 241 | version "4.0.1" 242 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 243 | integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= 244 | dependencies: 245 | base-x "^3.0.2" 246 | 247 | buffer-compare@=1.1.1: 248 | version "1.1.1" 249 | resolved "https://registry.yarnpkg.com/buffer-compare/-/buffer-compare-1.1.1.tgz#5be7be853af89198d1f4ddc090d1d66a48aef596" 250 | integrity sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY= 251 | 252 | buffer-from@^1.0.0, buffer-from@^1.1.0: 253 | version "1.1.1" 254 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 255 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 256 | 257 | buffer@^5.2.1: 258 | version "5.5.0" 259 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" 260 | integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== 261 | dependencies: 262 | base64-js "^1.0.2" 263 | ieee754 "^1.1.4" 264 | 265 | builtin-modules@^1.1.1: 266 | version "1.1.1" 267 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 268 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= 269 | 270 | byline@^5.0.0: 271 | version "5.0.0" 272 | resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" 273 | integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= 274 | 275 | caseless@~0.12.0: 276 | version "0.12.0" 277 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 278 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 279 | 280 | chalk@^2.0.0, chalk@^2.3.0: 281 | version "2.4.2" 282 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 283 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 284 | dependencies: 285 | ansi-styles "^3.2.1" 286 | escape-string-regexp "^1.0.5" 287 | supports-color "^5.3.0" 288 | 289 | chalk@^3.0.0: 290 | version "3.0.0" 291 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" 292 | integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== 293 | dependencies: 294 | ansi-styles "^4.1.0" 295 | supports-color "^7.1.0" 296 | 297 | codechain-keystore@^0.6.3: 298 | version "0.6.3" 299 | resolved "https://registry.yarnpkg.com/codechain-keystore/-/codechain-keystore-0.6.3.tgz#9042169dd03c9b67ff8e73253a009515dd1e58a5" 300 | integrity sha512-bSUhuv9UIXoAKwSWhnylIhnU+BOypd7aqL0E8rPumS5qmsqUZgwMoKCfQBasCVpH+Hm+4fR0CSfVK/J7s/Hvfw== 301 | dependencies: 302 | bitcore-mnemonic "^8.6.0" 303 | codechain-primitives "^1.0.0" 304 | config "^2.0.1" 305 | lodash "^4.17.10" 306 | lowdb "^1.0.0" 307 | lowdb-session-storage-adapter "^1.0.0" 308 | uuid "^3.3.2" 309 | 310 | codechain-primitives@^1.0.0, codechain-primitives@^1.0.4: 311 | version "1.0.4" 312 | resolved "https://registry.yarnpkg.com/codechain-primitives/-/codechain-primitives-1.0.4.tgz#26918fc5229c3fa0cc8c2d6ecda1ad3740292a4a" 313 | integrity sha512-BOA+NL/iHuzp05DC8vLxC2vIMvIHPzREH4sgwcrQKKsnvTMf5frVdBQKBWl6Me2A4M7aa6T+wDe6pAD3WEoJ3w== 314 | dependencies: 315 | bignumber.js "^7.2.1" 316 | blakejs "^1.1.0" 317 | bn.js "^4.11.8" 318 | buffer "^5.2.1" 319 | crypto-js "^3.1.9-1" 320 | elliptic "^6.4.1" 321 | hmac-drbg "^1.0.1" 322 | lodash "^4.17.14" 323 | node-forge "^0.7.6" 324 | rlp "^2.1.0" 325 | 326 | color-convert@^1.9.0: 327 | version "1.9.3" 328 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 329 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 330 | dependencies: 331 | color-name "1.1.3" 332 | 333 | color-convert@^2.0.1: 334 | version "2.0.1" 335 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 336 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 337 | dependencies: 338 | color-name "~1.1.4" 339 | 340 | color-name@1.1.3: 341 | version "1.1.3" 342 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 343 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 344 | 345 | color-name@~1.1.4: 346 | version "1.1.4" 347 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 348 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 349 | 350 | combined-stream@^1.0.6, combined-stream@~1.0.6: 351 | version "1.0.8" 352 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 353 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 354 | dependencies: 355 | delayed-stream "~1.0.0" 356 | 357 | commander@*: 358 | version "5.0.0" 359 | resolved "https://registry.yarnpkg.com/commander/-/commander-5.0.0.tgz#dbf1909b49e5044f8fdaf0adc809f0c0722bdfd0" 360 | integrity sha512-JrDGPAKjMGSP1G0DUoaceEJ3DZgAfr/q6X7FVk4+U5KxUSKviYGM2k6zWkfyyBHy5rAtzgYJFa1ro2O9PtoxwQ== 361 | 362 | commander@^2.12.1, commander@^2.17.1: 363 | version "2.20.3" 364 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 365 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 366 | 367 | concat-map@0.0.1: 368 | version "0.0.1" 369 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 370 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 371 | 372 | config@^2.0.1: 373 | version "2.0.2" 374 | resolved "https://registry.yarnpkg.com/config/-/config-2.0.2.tgz#b81c8f4e05203e1da7752864c19a11604ca923d7" 375 | integrity sha512-duIbkKb0gls0bOtGwd1vaD4236MwepQlZcrMheOGrn3/9Px7oYFh8G4LB3ylGOlPr5wGoJRm8Grb2RihJZxuHQ== 376 | dependencies: 377 | json5 "^1.0.1" 378 | 379 | core-util-is@1.0.2, core-util-is@~1.0.0: 380 | version "1.0.2" 381 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 382 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 383 | 384 | crypto-js@^3.1.9-1: 385 | version "3.3.0" 386 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" 387 | integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== 388 | 389 | dashdash@^1.12.0: 390 | version "1.14.1" 391 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 392 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 393 | dependencies: 394 | assert-plus "^1.0.0" 395 | 396 | deep-is@~0.1.3: 397 | version "0.1.3" 398 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 399 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 400 | 401 | delayed-stream@~1.0.0: 402 | version "1.0.0" 403 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 404 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 405 | 406 | diff@^3.1.0: 407 | version "3.5.0" 408 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 409 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 410 | 411 | diff@^4.0.1: 412 | version "4.0.2" 413 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 414 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 415 | 416 | dir-glob@^3.0.1: 417 | version "3.0.1" 418 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 419 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 420 | dependencies: 421 | path-type "^4.0.0" 422 | 423 | ecc-jsbn@~0.1.1: 424 | version "0.1.2" 425 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 426 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 427 | dependencies: 428 | jsbn "~0.1.0" 429 | safer-buffer "^2.1.0" 430 | 431 | elliptic@=6.4.0: 432 | version "6.4.0" 433 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" 434 | integrity sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8= 435 | dependencies: 436 | bn.js "^4.4.0" 437 | brorand "^1.0.1" 438 | hash.js "^1.0.0" 439 | hmac-drbg "^1.0.0" 440 | inherits "^2.0.1" 441 | minimalistic-assert "^1.0.0" 442 | minimalistic-crypto-utils "^1.0.0" 443 | 444 | elliptic@^6.4.1: 445 | version "6.5.2" 446 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" 447 | integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== 448 | dependencies: 449 | bn.js "^4.4.0" 450 | brorand "^1.0.1" 451 | hash.js "^1.0.0" 452 | hmac-drbg "^1.0.0" 453 | inherits "^2.0.1" 454 | minimalistic-assert "^1.0.0" 455 | minimalistic-crypto-utils "^1.0.0" 456 | 457 | enquirer@^2.3.1: 458 | version "2.3.5" 459 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.5.tgz#3ab2b838df0a9d8ab9e7dff235b0e8712ef92381" 460 | integrity sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA== 461 | dependencies: 462 | ansi-colors "^3.2.1" 463 | 464 | escape-string-regexp@^1.0.5: 465 | version "1.0.5" 466 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 467 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 468 | 469 | escodegen@^1.14.1: 470 | version "1.14.1" 471 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" 472 | integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== 473 | dependencies: 474 | esprima "^4.0.1" 475 | estraverse "^4.2.0" 476 | esutils "^2.0.2" 477 | optionator "^0.8.1" 478 | optionalDependencies: 479 | source-map "~0.6.1" 480 | 481 | esprima@^4.0.0, esprima@^4.0.1: 482 | version "4.0.1" 483 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 484 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 485 | 486 | estraverse@^4.2.0: 487 | version "4.3.0" 488 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 489 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 490 | 491 | esutils@^2.0.2: 492 | version "2.0.3" 493 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 494 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 495 | 496 | expand-template@^2.0.3: 497 | version "2.0.3" 498 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" 499 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== 500 | 501 | extend@~3.0.2: 502 | version "3.0.2" 503 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 504 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 505 | 506 | extsprintf@1.3.0: 507 | version "1.3.0" 508 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 509 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 510 | 511 | extsprintf@^1.2.0: 512 | version "1.4.0" 513 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 514 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 515 | 516 | fast-deep-equal@^3.1.1: 517 | version "3.1.1" 518 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" 519 | integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== 520 | 521 | fast-glob@^3.1.1: 522 | version "3.2.2" 523 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" 524 | integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== 525 | dependencies: 526 | "@nodelib/fs.stat" "^2.0.2" 527 | "@nodelib/fs.walk" "^1.2.3" 528 | glob-parent "^5.1.0" 529 | merge2 "^1.3.0" 530 | micromatch "^4.0.2" 531 | picomatch "^2.2.1" 532 | 533 | fast-json-stable-stringify@^2.0.0: 534 | version "2.1.0" 535 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 536 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 537 | 538 | fast-levenshtein@~2.0.6: 539 | version "2.0.6" 540 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 541 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 542 | 543 | fastq@^1.6.0: 544 | version "1.7.0" 545 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" 546 | integrity sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ== 547 | dependencies: 548 | reusify "^1.0.4" 549 | 550 | fill-range@^7.0.1: 551 | version "7.0.1" 552 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 553 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 554 | dependencies: 555 | to-regex-range "^5.0.1" 556 | 557 | forever-agent@~0.6.1: 558 | version "0.6.1" 559 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 560 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 561 | 562 | form-data@~2.3.2: 563 | version "2.3.3" 564 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 565 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 566 | dependencies: 567 | asynckit "^0.4.0" 568 | combined-stream "^1.0.6" 569 | mime-types "^2.1.12" 570 | 571 | from2@^2.3.0: 572 | version "2.3.0" 573 | resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" 574 | integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= 575 | dependencies: 576 | inherits "^2.0.1" 577 | readable-stream "^2.0.0" 578 | 579 | fs-extra@^8.1.0: 580 | version "8.1.0" 581 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" 582 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 583 | dependencies: 584 | graceful-fs "^4.2.0" 585 | jsonfile "^4.0.0" 586 | universalify "^0.1.0" 587 | 588 | fs.realpath@^1.0.0: 589 | version "1.0.0" 590 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 591 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 592 | 593 | getpass@^0.1.1: 594 | version "0.1.7" 595 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 596 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 597 | dependencies: 598 | assert-plus "^1.0.0" 599 | 600 | glob-parent@^5.1.0: 601 | version "5.1.1" 602 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 603 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 604 | dependencies: 605 | is-glob "^4.0.1" 606 | 607 | glob@^7.1.1: 608 | version "7.1.6" 609 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 610 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 611 | dependencies: 612 | fs.realpath "^1.0.0" 613 | inflight "^1.0.4" 614 | inherits "2" 615 | minimatch "^3.0.4" 616 | once "^1.3.0" 617 | path-is-absolute "^1.0.0" 618 | 619 | globby@^11.0.0: 620 | version "11.0.0" 621 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.0.tgz#56fd0e9f0d4f8fb0c456f1ab0dee96e1380bc154" 622 | integrity sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg== 623 | dependencies: 624 | array-union "^2.1.0" 625 | dir-glob "^3.0.1" 626 | fast-glob "^3.1.1" 627 | ignore "^5.1.4" 628 | merge2 "^1.3.0" 629 | slash "^3.0.0" 630 | 631 | graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: 632 | version "4.2.3" 633 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" 634 | integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== 635 | 636 | har-schema@^2.0.0: 637 | version "2.0.0" 638 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 639 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 640 | 641 | har-validator@~5.1.3: 642 | version "5.1.3" 643 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 644 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 645 | dependencies: 646 | ajv "^6.5.5" 647 | har-schema "^2.0.0" 648 | 649 | has-flag@^3.0.0: 650 | version "3.0.0" 651 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 652 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 653 | 654 | has-flag@^4.0.0: 655 | version "4.0.0" 656 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 657 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 658 | 659 | hash.js@^1.0.0, hash.js@^1.0.3: 660 | version "1.1.7" 661 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 662 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 663 | dependencies: 664 | inherits "^2.0.3" 665 | minimalistic-assert "^1.0.1" 666 | 667 | hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: 668 | version "1.0.1" 669 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 670 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= 671 | dependencies: 672 | hash.js "^1.0.3" 673 | minimalistic-assert "^1.0.0" 674 | minimalistic-crypto-utils "^1.0.1" 675 | 676 | http-signature@~1.2.0: 677 | version "1.2.0" 678 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 679 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 680 | dependencies: 681 | assert-plus "^1.0.0" 682 | jsprim "^1.2.2" 683 | sshpk "^1.7.0" 684 | 685 | ieee754@^1.1.4: 686 | version "1.1.13" 687 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 688 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== 689 | 690 | ignore@^5.1.4: 691 | version "5.1.4" 692 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" 693 | integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== 694 | 695 | inflight@^1.0.4: 696 | version "1.0.6" 697 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 698 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 699 | dependencies: 700 | once "^1.3.0" 701 | wrappy "1" 702 | 703 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 704 | version "2.0.4" 705 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 706 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 707 | 708 | inherits@=2.0.1: 709 | version "2.0.1" 710 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 711 | integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= 712 | 713 | into-stream@^5.1.1: 714 | version "5.1.1" 715 | resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-5.1.1.tgz#f9a20a348a11f3c13face22763f2d02e127f4db8" 716 | integrity sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA== 717 | dependencies: 718 | from2 "^2.3.0" 719 | p-is-promise "^3.0.0" 720 | 721 | is-extglob@^2.1.1: 722 | version "2.1.1" 723 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 724 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 725 | 726 | is-glob@^4.0.1: 727 | version "4.0.1" 728 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 729 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 730 | dependencies: 731 | is-extglob "^2.1.1" 732 | 733 | is-number@^7.0.0: 734 | version "7.0.0" 735 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 736 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 737 | 738 | is-promise@^2.1.0: 739 | version "2.1.0" 740 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 741 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 742 | 743 | is-typedarray@~1.0.0: 744 | version "1.0.0" 745 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 746 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 747 | 748 | isarray@~1.0.0: 749 | version "1.0.0" 750 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 751 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 752 | 753 | isstream@~0.1.2: 754 | version "0.1.2" 755 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 756 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 757 | 758 | js-tokens@^4.0.0: 759 | version "4.0.0" 760 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 761 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 762 | 763 | js-yaml@^3.13.1: 764 | version "3.13.1" 765 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 766 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 767 | dependencies: 768 | argparse "^1.0.7" 769 | esprima "^4.0.0" 770 | 771 | jsbn@~0.1.0: 772 | version "0.1.1" 773 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 774 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 775 | 776 | json-schema-traverse@^0.4.1: 777 | version "0.4.1" 778 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 779 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 780 | 781 | json-schema@0.2.3: 782 | version "0.2.3" 783 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 784 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 785 | 786 | json-stringify-safe@~5.0.1: 787 | version "5.0.1" 788 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 789 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 790 | 791 | json5@^1.0.1: 792 | version "1.0.1" 793 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 794 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 795 | dependencies: 796 | minimist "^1.2.0" 797 | 798 | jsonfile@^4.0.0: 799 | version "4.0.0" 800 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 801 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 802 | optionalDependencies: 803 | graceful-fs "^4.1.6" 804 | 805 | jsprim@^1.2.2: 806 | version "1.4.1" 807 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 808 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 809 | dependencies: 810 | assert-plus "1.0.0" 811 | extsprintf "1.3.0" 812 | json-schema "0.2.3" 813 | verror "1.10.0" 814 | 815 | levn@~0.3.0: 816 | version "0.3.0" 817 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 818 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 819 | dependencies: 820 | prelude-ls "~1.1.2" 821 | type-check "~0.3.2" 822 | 823 | lodash@4, lodash@^4.17.10, lodash@^4.17.14: 824 | version "4.17.19" 825 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 826 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== 827 | 828 | lodash@=4.17.15: 829 | version "4.17.15" 830 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 831 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 832 | 833 | lowdb-session-storage-adapter@^1.0.0: 834 | version "1.0.0" 835 | resolved "https://registry.yarnpkg.com/lowdb-session-storage-adapter/-/lowdb-session-storage-adapter-1.0.0.tgz#6f5e563adbf482ac39c6937f55db6757eb01c0f3" 836 | integrity sha512-mcS4LC3pJ4Vtp3iebm6gZ5069lPq+dEk2RxQ8+N9Y23bEjGjN+WFbjxYIoEpTNVmihwW6vGuRq/MH5zIyruQYA== 837 | dependencies: 838 | lowdb "^1.0.0" 839 | 840 | lowdb@^1.0.0: 841 | version "1.0.0" 842 | resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-1.0.0.tgz#5243be6b22786ccce30e50c9a33eac36b20c8064" 843 | integrity sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ== 844 | dependencies: 845 | graceful-fs "^4.1.3" 846 | is-promise "^2.1.0" 847 | lodash "4" 848 | pify "^3.0.0" 849 | steno "^0.4.1" 850 | 851 | make-error@^1.1.1: 852 | version "1.3.6" 853 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 854 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 855 | 856 | merge2@^1.3.0: 857 | version "1.3.0" 858 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" 859 | integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== 860 | 861 | micromatch@^4.0.2: 862 | version "4.0.2" 863 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 864 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 865 | dependencies: 866 | braces "^3.0.1" 867 | picomatch "^2.0.5" 868 | 869 | mime-db@1.43.0: 870 | version "1.43.0" 871 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" 872 | integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== 873 | 874 | mime-types@^2.1.12, mime-types@~2.1.19: 875 | version "2.1.26" 876 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" 877 | integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== 878 | dependencies: 879 | mime-db "1.43.0" 880 | 881 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 882 | version "1.0.1" 883 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 884 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 885 | 886 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: 887 | version "1.0.1" 888 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 889 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 890 | 891 | minimatch@^3.0.4: 892 | version "3.0.4" 893 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 894 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 895 | dependencies: 896 | brace-expansion "^1.1.7" 897 | 898 | minimist@^1.2.0, minimist@^1.2.5: 899 | version "1.2.5" 900 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 901 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 902 | 903 | mkdirp@^0.5.1: 904 | version "0.5.5" 905 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 906 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 907 | dependencies: 908 | minimist "^1.2.5" 909 | 910 | multistream@^2.1.1: 911 | version "2.1.1" 912 | resolved "https://registry.yarnpkg.com/multistream/-/multistream-2.1.1.tgz#629d3a29bd76623489980d04519a2c365948148c" 913 | integrity sha512-xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ== 914 | dependencies: 915 | inherits "^2.0.1" 916 | readable-stream "^2.0.5" 917 | 918 | node-forge@^0.7.6: 919 | version "0.7.6" 920 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.6.tgz#fdf3b418aee1f94f0ef642cd63486c77ca9724ac" 921 | integrity sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw== 922 | 923 | oauth-sign@~0.9.0: 924 | version "0.9.0" 925 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 926 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 927 | 928 | once@^1.3.0: 929 | version "1.4.0" 930 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 931 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 932 | dependencies: 933 | wrappy "1" 934 | 935 | optionator@^0.8.1: 936 | version "0.8.3" 937 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 938 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 939 | dependencies: 940 | deep-is "~0.1.3" 941 | fast-levenshtein "~2.0.6" 942 | levn "~0.3.0" 943 | prelude-ls "~1.1.2" 944 | type-check "~0.3.2" 945 | word-wrap "~1.2.3" 946 | 947 | os-tmpdir@^1.0.1: 948 | version "1.0.2" 949 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 950 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 951 | 952 | p-is-promise@^3.0.0: 953 | version "3.0.0" 954 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" 955 | integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== 956 | 957 | path-is-absolute@^1.0.0: 958 | version "1.0.1" 959 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 960 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 961 | 962 | path-parse@^1.0.6: 963 | version "1.0.6" 964 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 965 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 966 | 967 | path-type@^4.0.0: 968 | version "4.0.0" 969 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 970 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 971 | 972 | performance-now@^2.1.0: 973 | version "2.1.0" 974 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 975 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 976 | 977 | picomatch@^2.0.5, picomatch@^2.2.1: 978 | version "2.2.2" 979 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 980 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 981 | 982 | pify@^3.0.0: 983 | version "3.0.0" 984 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 985 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 986 | 987 | pkg-fetch@^2.6.6: 988 | version "2.6.6" 989 | resolved "https://registry.yarnpkg.com/pkg-fetch/-/pkg-fetch-2.6.6.tgz#8cec66bb7c80d8149a55765e317ac554ad834b72" 990 | integrity sha512-PdL6lpoSryzP6rMZD1voZQX0LHx6q4pOaD1djaFphmBfYPoQzLalF2+St+wdYxbZ37xRNHACTeQIKNEKA0xdbA== 991 | dependencies: 992 | "@babel/runtime" "^7.9.2" 993 | byline "^5.0.0" 994 | chalk "^3.0.0" 995 | expand-template "^2.0.3" 996 | fs-extra "^8.1.0" 997 | minimist "^1.2.5" 998 | progress "^2.0.3" 999 | request "^2.88.0" 1000 | request-progress "^3.0.0" 1001 | semver "^6.3.0" 1002 | unique-temp-dir "^1.0.0" 1003 | 1004 | pkg@^4.4.0: 1005 | version "4.4.7" 1006 | resolved "https://registry.yarnpkg.com/pkg/-/pkg-4.4.7.tgz#8efbf392009339a3fa1cf552beefcb4a6b9ebe65" 1007 | integrity sha512-yDGEg2k09AOxV3KfJpKoEQkhckVN2woV/4Cm2iNnRUgJeSHcodxylertz49ePcJyknUyUFjTYDkogfK/188mag== 1008 | dependencies: 1009 | "@babel/parser" "^7.9.4" 1010 | "@babel/runtime" "^7.9.2" 1011 | chalk "^3.0.0" 1012 | escodegen "^1.14.1" 1013 | fs-extra "^8.1.0" 1014 | globby "^11.0.0" 1015 | into-stream "^5.1.1" 1016 | minimist "^1.2.5" 1017 | multistream "^2.1.1" 1018 | pkg-fetch "^2.6.6" 1019 | progress "^2.0.3" 1020 | resolve "^1.15.1" 1021 | stream-meter "^1.0.4" 1022 | 1023 | prelude-ls@~1.1.2: 1024 | version "1.1.2" 1025 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1026 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1027 | 1028 | prettier@1.14.2: 1029 | version "1.14.2" 1030 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9" 1031 | integrity sha512-McHPg0n1pIke+A/4VcaS2en+pTNjy4xF+Uuq86u/5dyDO59/TtFZtQ708QIRkEZ3qwKz3GVkVa6mpxK/CpB8Rg== 1032 | 1033 | process-nextick-args@~2.0.0: 1034 | version "2.0.1" 1035 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1036 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1037 | 1038 | progress@^2.0.3: 1039 | version "2.0.3" 1040 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1041 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1042 | 1043 | psl@^1.1.28: 1044 | version "1.8.0" 1045 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 1046 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 1047 | 1048 | punycode@^2.1.0, punycode@^2.1.1: 1049 | version "2.1.1" 1050 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1051 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1052 | 1053 | qs@~6.5.2: 1054 | version "6.5.2" 1055 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1056 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1057 | 1058 | readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.1.4: 1059 | version "2.3.7" 1060 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1061 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1062 | dependencies: 1063 | core-util-is "~1.0.0" 1064 | inherits "~2.0.3" 1065 | isarray "~1.0.0" 1066 | process-nextick-args "~2.0.0" 1067 | safe-buffer "~5.1.1" 1068 | string_decoder "~1.1.1" 1069 | util-deprecate "~1.0.1" 1070 | 1071 | regenerator-runtime@^0.13.4: 1072 | version "0.13.5" 1073 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" 1074 | integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== 1075 | 1076 | request-progress@^3.0.0: 1077 | version "3.0.0" 1078 | resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" 1079 | integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= 1080 | dependencies: 1081 | throttleit "^1.0.0" 1082 | 1083 | request@^2.88.0: 1084 | version "2.88.2" 1085 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 1086 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 1087 | dependencies: 1088 | aws-sign2 "~0.7.0" 1089 | aws4 "^1.8.0" 1090 | caseless "~0.12.0" 1091 | combined-stream "~1.0.6" 1092 | extend "~3.0.2" 1093 | forever-agent "~0.6.1" 1094 | form-data "~2.3.2" 1095 | har-validator "~5.1.3" 1096 | http-signature "~1.2.0" 1097 | is-typedarray "~1.0.0" 1098 | isstream "~0.1.2" 1099 | json-stringify-safe "~5.0.1" 1100 | mime-types "~2.1.19" 1101 | oauth-sign "~0.9.0" 1102 | performance-now "^2.1.0" 1103 | qs "~6.5.2" 1104 | safe-buffer "^5.1.2" 1105 | tough-cookie "~2.5.0" 1106 | tunnel-agent "^0.6.0" 1107 | uuid "^3.3.2" 1108 | 1109 | resolve@^1.15.1, resolve@^1.3.2: 1110 | version "1.15.1" 1111 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" 1112 | integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== 1113 | dependencies: 1114 | path-parse "^1.0.6" 1115 | 1116 | reusify@^1.0.4: 1117 | version "1.0.4" 1118 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1119 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1120 | 1121 | rlp@^2.1.0: 1122 | version "2.2.4" 1123 | resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.4.tgz#d6b0e1659e9285fc509a5d169a9bd06f704951c1" 1124 | integrity sha512-fdq2yYCWpAQBhwkZv+Z8o/Z4sPmYm1CUq6P7n6lVTOdb949CnqA0sndXal5C1NleSVSZm6q5F3iEbauyVln/iw== 1125 | dependencies: 1126 | bn.js "^4.11.1" 1127 | 1128 | run-parallel@^1.1.9: 1129 | version "1.1.9" 1130 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" 1131 | integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== 1132 | 1133 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 1134 | version "5.2.0" 1135 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 1136 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 1137 | 1138 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1139 | version "5.1.2" 1140 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1141 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1142 | 1143 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1144 | version "2.1.2" 1145 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1146 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1147 | 1148 | semver@^5.3.0: 1149 | version "5.7.1" 1150 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1151 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1152 | 1153 | semver@^6.3.0: 1154 | version "6.3.0" 1155 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1156 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1157 | 1158 | slash@^3.0.0: 1159 | version "3.0.0" 1160 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1161 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1162 | 1163 | source-map-support@^0.5.6: 1164 | version "0.5.16" 1165 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" 1166 | integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== 1167 | dependencies: 1168 | buffer-from "^1.0.0" 1169 | source-map "^0.6.0" 1170 | 1171 | source-map@^0.6.0, source-map@~0.6.1: 1172 | version "0.6.1" 1173 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1174 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1175 | 1176 | sprintf-js@~1.0.2: 1177 | version "1.0.3" 1178 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1179 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1180 | 1181 | sshpk@^1.7.0: 1182 | version "1.16.1" 1183 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1184 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1185 | dependencies: 1186 | asn1 "~0.2.3" 1187 | assert-plus "^1.0.0" 1188 | bcrypt-pbkdf "^1.0.0" 1189 | dashdash "^1.12.0" 1190 | ecc-jsbn "~0.1.1" 1191 | getpass "^0.1.1" 1192 | jsbn "~0.1.0" 1193 | safer-buffer "^2.0.2" 1194 | tweetnacl "~0.14.0" 1195 | 1196 | steno@^0.4.1: 1197 | version "0.4.4" 1198 | resolved "https://registry.yarnpkg.com/steno/-/steno-0.4.4.tgz#071105bdfc286e6615c0403c27e9d7b5dcb855cb" 1199 | integrity sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs= 1200 | dependencies: 1201 | graceful-fs "^4.1.3" 1202 | 1203 | stream-meter@^1.0.4: 1204 | version "1.0.4" 1205 | resolved "https://registry.yarnpkg.com/stream-meter/-/stream-meter-1.0.4.tgz#52af95aa5ea760a2491716704dbff90f73afdd1d" 1206 | integrity sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0= 1207 | dependencies: 1208 | readable-stream "^2.1.4" 1209 | 1210 | string_decoder@~1.1.1: 1211 | version "1.1.1" 1212 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1213 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1214 | dependencies: 1215 | safe-buffer "~5.1.0" 1216 | 1217 | supports-color@^5.3.0: 1218 | version "5.5.0" 1219 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1220 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1221 | dependencies: 1222 | has-flag "^3.0.0" 1223 | 1224 | supports-color@^7.1.0: 1225 | version "7.1.0" 1226 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" 1227 | integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== 1228 | dependencies: 1229 | has-flag "^4.0.0" 1230 | 1231 | throttleit@^1.0.0: 1232 | version "1.0.0" 1233 | resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" 1234 | integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= 1235 | 1236 | to-regex-range@^5.0.1: 1237 | version "5.0.1" 1238 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1239 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1240 | dependencies: 1241 | is-number "^7.0.0" 1242 | 1243 | tough-cookie@~2.5.0: 1244 | version "2.5.0" 1245 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 1246 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 1247 | dependencies: 1248 | psl "^1.1.28" 1249 | punycode "^2.1.1" 1250 | 1251 | ts-node@^7.0.1: 1252 | version "7.0.1" 1253 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" 1254 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== 1255 | dependencies: 1256 | arrify "^1.0.0" 1257 | buffer-from "^1.1.0" 1258 | diff "^3.1.0" 1259 | make-error "^1.1.1" 1260 | minimist "^1.2.0" 1261 | mkdirp "^0.5.1" 1262 | source-map-support "^0.5.6" 1263 | yn "^2.0.0" 1264 | 1265 | tslib@^1.8.0, tslib@^1.8.1: 1266 | version "1.11.1" 1267 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" 1268 | integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== 1269 | 1270 | tslint-config-prettier@^1.10.0: 1271 | version "1.18.0" 1272 | resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" 1273 | integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== 1274 | 1275 | tslint@^5.17.0: 1276 | version "5.20.1" 1277 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" 1278 | integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== 1279 | dependencies: 1280 | "@babel/code-frame" "^7.0.0" 1281 | builtin-modules "^1.1.1" 1282 | chalk "^2.3.0" 1283 | commander "^2.12.1" 1284 | diff "^4.0.1" 1285 | glob "^7.1.1" 1286 | js-yaml "^3.13.1" 1287 | minimatch "^3.0.4" 1288 | mkdirp "^0.5.1" 1289 | resolve "^1.3.2" 1290 | semver "^5.3.0" 1291 | tslib "^1.8.0" 1292 | tsutils "^2.29.0" 1293 | 1294 | tsutils@^2.29.0: 1295 | version "2.29.0" 1296 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" 1297 | integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== 1298 | dependencies: 1299 | tslib "^1.8.1" 1300 | 1301 | tunnel-agent@^0.6.0: 1302 | version "0.6.0" 1303 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1304 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1305 | dependencies: 1306 | safe-buffer "^5.0.1" 1307 | 1308 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1309 | version "0.14.5" 1310 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1311 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 1312 | 1313 | type-check@~0.3.2: 1314 | version "0.3.2" 1315 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1316 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1317 | dependencies: 1318 | prelude-ls "~1.1.2" 1319 | 1320 | typescript@^3.0.1: 1321 | version "3.8.3" 1322 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" 1323 | integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== 1324 | 1325 | uid2@0.0.3: 1326 | version "0.0.3" 1327 | resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" 1328 | integrity sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I= 1329 | 1330 | unique-temp-dir@^1.0.0: 1331 | version "1.0.0" 1332 | resolved "https://registry.yarnpkg.com/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz#6dce95b2681ca003eebfb304a415f9cbabcc5385" 1333 | integrity sha1-bc6VsmgcoAPuv7MEpBX5y6vMU4U= 1334 | dependencies: 1335 | mkdirp "^0.5.1" 1336 | os-tmpdir "^1.0.1" 1337 | uid2 "0.0.3" 1338 | 1339 | universalify@^0.1.0: 1340 | version "0.1.2" 1341 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 1342 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 1343 | 1344 | unorm@^1.4.1: 1345 | version "1.6.0" 1346 | resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" 1347 | integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== 1348 | 1349 | uri-js@^4.2.2: 1350 | version "4.2.2" 1351 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1352 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1353 | dependencies: 1354 | punycode "^2.1.0" 1355 | 1356 | util-deprecate@~1.0.1: 1357 | version "1.0.2" 1358 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1359 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1360 | 1361 | uuid@^3.3.2: 1362 | version "3.4.0" 1363 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 1364 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 1365 | 1366 | verror@1.10.0: 1367 | version "1.10.0" 1368 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1369 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1370 | dependencies: 1371 | assert-plus "^1.0.0" 1372 | core-util-is "1.0.2" 1373 | extsprintf "^1.2.0" 1374 | 1375 | word-wrap@~1.2.3: 1376 | version "1.2.3" 1377 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1378 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1379 | 1380 | wrappy@1: 1381 | version "1.0.2" 1382 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1383 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1384 | 1385 | yn@^2.0.0: 1386 | version "2.0.0" 1387 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 1388 | integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= 1389 | --------------------------------------------------------------------------------