├── .gitignore ├── .npmignore ├── src ├── RPCResponse.ts ├── Transaction.ts ├── Peer.ts ├── index.ts ├── ClientOption.ts ├── Block.ts ├── WalletInfo.ts ├── RPCErrorCode.ts ├── Client.ts └── API.ts ├── tsconfig.json ├── package.json ├── .github └── workflows │ ├── node.js.yml │ └── npm-publish.yml ├── LICENSE ├── README.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | dist -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | tsconfig.json 2 | src 3 | lib 4 | node_modules -------------------------------------------------------------------------------- /src/RPCResponse.ts: -------------------------------------------------------------------------------- 1 | export interface RPCResponse { 2 | data: any 3 | error: any 4 | result: any 5 | id: number 6 | } 7 | -------------------------------------------------------------------------------- /src/Transaction.ts: -------------------------------------------------------------------------------- 1 | export interface Transaction { 2 | /** 3 | * The transaction id 4 | */ 5 | txid: string 6 | /** 7 | * the output number 8 | */ 9 | vout: string 10 | } 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "declaration": true, 6 | "outDir": "./dist", 7 | "types": ["node"], 8 | "lib": ["es5", "es2015.promise"] 9 | }, 10 | "include": ["src/**/*"] 11 | } 12 | -------------------------------------------------------------------------------- /src/Peer.ts: -------------------------------------------------------------------------------- 1 | export interface Peer { 2 | addr: string 3 | services: string 4 | lastsend: number 5 | lastrecv: number 6 | conntime: number 7 | version: number 8 | subver: string 9 | inbound: boolean 10 | releasetime: number 11 | startingheight: number 12 | banscore: number 13 | } 14 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | // import { Client } from './Client' 2 | export { Client } from './Client' 3 | 4 | /* for testing with a local maschine. 5 | to prove that this is working :) 6 | 7 | const myClient: Client = new Client({ 8 | pass: 'lolcat', 9 | user: 'kyon', 10 | }) 11 | 12 | myClient.unlockWallet('')*/ 13 | -------------------------------------------------------------------------------- /src/ClientOption.ts: -------------------------------------------------------------------------------- 1 | export interface ClientOption { 2 | host?: string 3 | port?: number 4 | method?: string 5 | user?: string 6 | pass?: string 7 | headers?: HeaderOption 8 | passphrasecallback?: Function 9 | https?: boolean 10 | ca?: string 11 | } 12 | 13 | export interface HeaderOption { 14 | Host?: string 15 | Authorization?: string 16 | } 17 | -------------------------------------------------------------------------------- /src/Block.ts: -------------------------------------------------------------------------------- 1 | export interface Block { 2 | hash: string 3 | confirmations: string 4 | size: string 5 | height: string 6 | version: string 7 | algo_id: string 8 | algo: string 9 | mined_hash: string 10 | merkleroot: string 11 | mint: string 12 | time: string 13 | nonce: string 14 | bits: string 15 | difficulty: string 16 | previousblockhash?: string 17 | nextblockhash?: string 18 | flags: string 19 | proofhash: string 20 | entropybit: string 21 | modifier: string 22 | modifierchecksum: string 23 | tx: string 24 | signature: string 25 | } 26 | -------------------------------------------------------------------------------- /src/WalletInfo.ts: -------------------------------------------------------------------------------- 1 | export interface WalletInfo { 2 | version: string 3 | protocolversion: number 4 | walletversion: number 5 | balance: number 6 | newmint: number 7 | stake: number 8 | blocks: number 9 | moneysupply: number 10 | connections: number 11 | proxy: string 12 | ip: string 13 | pow_algo_id: number 14 | pow_algo: string 15 | difficulty: number 16 | difficulty_x17: number 17 | difficulty_scrypt: number 18 | difficulty_groestl: number 19 | difficulty_lyra2re: number 20 | difficulty_blake: number 21 | testnet: boolean 22 | keypoololdest: number 23 | keypoolsize: number 24 | paytxfee: number 25 | errors: string 26 | } 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs-verge", 3 | "version": "0.0.4", 4 | "description": "NodeJS typescript RPC client for VERGE currency", 5 | "keywords": [ 6 | "verge" 7 | ], 8 | "repository": "git://github.com/vergecurrency/nodejs-verge.git", 9 | "author": "VERGE", 10 | "main": "dist/index.js", 11 | "types": "dist/index.d.ts", 12 | "engines": { 13 | "node": ">=20.0.0" 14 | }, 15 | "dependencies": { 16 | "@types/node": "^20.14.11", 17 | "global": "^4.4.0", 18 | "typescript": "^5.5.3" 19 | }, 20 | "scripts": { 21 | "dist": "tsc", 22 | "watch": "tsc -w", 23 | "start": "tsc && node ./dist/index.js", 24 | "lint": "eslint 'src/**/*.ts'" 25 | }, 26 | "devDependencies": { 27 | "codelyzer": "^6.0.2", 28 | "eslint": "^9.0.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [ "master" ] 9 | pull_request: 10 | branches: [ "master" ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | matrix: 19 | node-version: [20.x] 20 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 21 | 22 | steps: 23 | - uses: actions/checkout@v4 24 | - name: Use Node.js ${{ matrix.node-version }} 25 | uses: actions/setup-node@v4 26 | with: 27 | node-version: ${{ matrix.node-version }} 28 | cache: 'npm' 29 | - run: npm install . 30 | - run: npm run build --if-present 31 | -------------------------------------------------------------------------------- /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created 2 | # For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages 3 | 4 | name: nodejs-verge 5 | 6 | on: 7 | release: 8 | types: [created] 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - uses: actions/setup-node@v3 16 | with: 17 | node-version: 16 18 | - run: npm ci 19 | - run: npm test 20 | 21 | publish-npm: 22 | needs: build 23 | runs-on: ubuntu-latest 24 | steps: 25 | - uses: actions/checkout@v4 26 | - uses: actions/setup-node@v3 27 | with: 28 | node-version: 16 29 | registry-url: https://registry.npmjs.org/ 30 | - run: npm ci 31 | - run: npm publish 32 | env: 33 | NODE_AUTH_TOKEN: ${{secrets.npm_token}} 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright 2012-2013 Brandon Wilson 4 | Copyright 2013-2014 Clark Van Oyen and other contributors 5 | Copyright 2019 VERGE 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | -------------------------------------------------------------------------------- /src/RPCErrorCode.ts: -------------------------------------------------------------------------------- 1 | export enum RPCErrorCode { 2 | /** 3 | * Your Request wasn't invalid 4 | */ 5 | RPC_INVALID_REQUEST = -32600, 6 | /** 7 | * The method doesn't exisit 8 | */ 9 | RPC_METHOD_NOT_FOUND = -32601, 10 | /** 11 | * Your called method have wrong/invalid parameters 12 | */ 13 | RPC_INVALID_PARAMS = -32602, 14 | /** 15 | * There was an error while processing your request 16 | */ 17 | RPC_INTERNAL_ERROR = -32603, 18 | /** 19 | * Your inputs couldn't be parsed internally 20 | */ 21 | RPC_PARSE_ERROR = -32700, 22 | 23 | // --- Genearl client errors --- 24 | /** 25 | * std::exception thrown in command handling 26 | */ 27 | RPC_MISC_ERROR = -1, 28 | /** 29 | * Server is in safe mode, and command is not allowed in safe mode 30 | */ 31 | RPC_FORBIDDEN_BY_SAFE_MODE = -2, 32 | /** 33 | * Unexpected type was passed as parameter 34 | */ 35 | RPC_TYPE_ERROR = -3, 36 | /** 37 | * Invalid address or key 38 | */ 39 | RPC_INVALID_ADDRESS_OR_KEY = -5, 40 | /** 41 | * Ran out of memory during operation 42 | */ 43 | RPC_OUT_OF_MEMORY = -7, 44 | /** 45 | * Invalid, missing or duplicate parameter 46 | */ 47 | RPC_INVALID_PARAMETER = -8, 48 | /** 49 | * Database error 50 | */ 51 | RPC_DATABASE_ERROR = -20, 52 | /** 53 | * Error parsing or validating structure in raw format 54 | */ 55 | RPC_DESERIALIZATION_ERROR = -22, 56 | 57 | // --- P2P client errors --- 58 | /** 59 | * Bitcoin is not connected 60 | */ 61 | RPC_CLIENT_NOT_CONNECTED = -9, 62 | /** 63 | * Still downloading initial blocks 64 | */ 65 | RPC_CLIENT_IN_INITIAL_DOWNLOAD = -10, 66 | 67 | // Wallet errors 68 | /** 69 | * Unspecified problem with wallet (key not found etc.) 70 | */ 71 | RPC_WALLET_ERROR = -4, 72 | /** 73 | * Not enough funds in wallet or account 74 | */ 75 | RPC_WALLET_INSUFFICIENT_FUNDS = -6, 76 | /** 77 | * Invalid account name 78 | */ 79 | RPC_WALLET_INVALID_ACCOUNT_NAME = -11, 80 | /** 81 | * Keypool ran out, call keypoolrefill first 82 | */ 83 | RPC_WALLET_KEYPOOL_RAN_OUT = -12, 84 | /** 85 | * Enter the wallet passphrase with walletpassphrase first 86 | */ 87 | RPC_WALLET_UNLOCK_NEEDED = -13, 88 | /** 89 | * The wallet passphrase entered was incorrect 90 | */ 91 | RPC_WALLET_PASSPHRASE_INCORRECT = -14, 92 | /** 93 | * Command given in wrong wallet encryption state (encrypting an encrypted wallet etc.) 94 | */ 95 | RPC_WALLET_WRONG_ENC_STATE = -15, 96 | /** 97 | * Failed to encrypt the wallet 98 | */ 99 | RPC_WALLET_ENCRYPTION_FAILED = -16, 100 | /** 101 | * Wallet is already unlocked 102 | */ 103 | RPC_WALLET_ALREADY_UNLOCKED = -17, 104 | } 105 | -------------------------------------------------------------------------------- /src/Client.ts: -------------------------------------------------------------------------------- 1 | import { API } from './API' 2 | import * as http from 'http' 3 | import { RPCErrorCode } from './RPCErrorCode' 4 | import { ClientOption } from './ClientOption' 5 | import * as https from 'https' 6 | import { RPCResponse } from './RPCResponse' 7 | import { Transaction } from './Transaction' 8 | import { Block } from './Block' 9 | import { Peer } from './Peer' 10 | import { WalletInfo } from './WalletInfo' 11 | 12 | export class Client extends API { 13 | options: ClientOption 14 | errors: RPCErrorCode[] 15 | 16 | constructor(options: ClientOption) { 17 | super() 18 | this.options = { 19 | host: 'localhost', 20 | port: 20102, 21 | method: 'POST', 22 | user: '', 23 | pass: '', 24 | headers: { 25 | Host: 'localhost', 26 | Authorization: '', 27 | }, 28 | passphrasecallback: null, 29 | https: false, 30 | ca: null, 31 | ...options, 32 | } 33 | 34 | if (this.options.user && this.options.pass) { 35 | this.options.headers.Authorization = `Basic ${new Buffer( 36 | this.options.user + ':' + this.options.pass 37 | ).toString('base64')}` 38 | } 39 | } 40 | 41 | private send(command: string, ...args: any[]): Promise { 42 | var rpcData = { 43 | id: new Date().getTime(), 44 | method: command.toLowerCase(), 45 | params: args.filter(item => !!item), 46 | } 47 | 48 | var options = this.options 49 | options.headers['Content-Length'] = JSON.stringify(rpcData).length 50 | 51 | var request 52 | if (this.options.https === true) { 53 | request = https.request 54 | } else { 55 | request = http.request 56 | } 57 | 58 | const promisedRequest = new Promise((resolve, reject) => { 59 | const rpcRequest = request(options, function(res) { 60 | let data = '' 61 | 62 | res.setEncoding('utf8') 63 | 64 | res.on('data', chunk => { 65 | data += chunk 66 | }) 67 | 68 | res.on('end', () => { 69 | try { 70 | const rpcResponse: RPCResponse = JSON.parse(data) 71 | if (rpcResponse.id != rpcData.id) { 72 | throw new Error( 73 | 'Possible Man-in-the-middle Attack!!!' 74 | ) 75 | } 76 | if (rpcResponse.error) { 77 | if ( 78 | rpcResponse.error.code === 79 | RPCErrorCode.RPC_WALLET_UNLOCK_NEEDED && 80 | options.passphrasecallback 81 | ) { 82 | //TODO: Handle special case :thinking: 83 | return this.unlock(command, args, () => {}) 84 | } else { 85 | var err = JSON.stringify(rpcResponse) 86 | return reject(err) 87 | } 88 | } 89 | 90 | resolve( 91 | rpcResponse.result !== null 92 | ? rpcResponse.result 93 | : rpcResponse 94 | ) 95 | } catch (exception) { 96 | var errMsg = 97 | res.statusCode !== 200 98 | ? 'Invalid params ' + res.statusCode 99 | : 'Failed to parse JSON' 100 | errMsg += ' : ' + JSON.stringify(data) 101 | return reject(new Error(errMsg)) 102 | } 103 | }) 104 | }) 105 | 106 | rpcRequest.on('error', error => reject(error)) 107 | rpcRequest.end(JSON.stringify(rpcData)) 108 | }) 109 | 110 | return promisedRequest 111 | } 112 | 113 | private auth(user: string, pass: string) { 114 | if (user && pass) { 115 | var authString = 116 | 'Basic ' + new Buffer(user + ':' + pass).toString('base64') 117 | this.options.headers['Authorization'] = authString 118 | } 119 | return this 120 | } 121 | 122 | public unlockWallet(passphrase, timeout = 1): Promise { 123 | return this.send('walletpassphrase', passphrase, timeout).catch( 124 | console.error 125 | ) 126 | } 127 | 128 | getBalance(account?: string): Promise { 129 | return this.send('getbalance', account).catch(console.error) 130 | } 131 | 132 | getInfo(): Promise { 133 | return this.send('getinfo').catch(console.error) 134 | } 135 | 136 | getPeerInfo(): Promise> { 137 | return this.send('getPeerInfo').catch(console.error) 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /src/API.ts: -------------------------------------------------------------------------------- 1 | import { Client } from './Client' 2 | import { Transaction } from './Transaction' 3 | import { Block } from './Block' 4 | import { WalletInfo } from './WalletInfo' 5 | import { Peer } from './Peer' 6 | 7 | export abstract class API { 8 | commands: Array = new Array( 9 | 'addMultiSigAddress', 10 | 'backupWallet', 11 | 'createRawTransaction', 12 | 'decodeRawTransaction', 13 | 'dumpPrivKey', 14 | 'dumpWallet', 15 | 'encryptWallet', 16 | 'exportStealthAddress', 17 | 'getAccount', 18 | 'getAccountAddress', 19 | 'getAddressesByAccount', 20 | 'getAddressInfo', 21 | 'getBalance', 22 | 'getBlock', 23 | 'getBlockCount', 24 | 'getBlockHash', 25 | 'getConnectionCount', 26 | 'getDifficulty', 27 | 'getGenerate', 28 | 'getHashesPerSec', 29 | 'getInfo', 30 | 'getMemoryPool', 31 | 'getMiningInfo', 32 | 'getNewAddress', 33 | 'getRawTransaction', 34 | 'getReceivedByAccount', 35 | 'getReceivedByAddress', 36 | 'getTransaction', 37 | 'getWork', 38 | 'help', 39 | 'importPubKey', 40 | 'importPrivKey', 41 | 'importAddress', 42 | 'importStealthAddress', 43 | 'keyPoolRefill', 44 | 'listAccounts', 45 | 'listReceivedByAccount', 46 | 'listReceivedByAddress', 47 | 'listSinceBlock', 48 | 'listTransactions', 49 | 'listUnspent', 50 | 'listWallets', 51 | 'move', 52 | 'sendFrom', 53 | 'sendMany', 54 | 'sendRawTransaction', 55 | 'sendToAddress', 56 | 'sendToStealthAddress', 57 | 'setAccount', 58 | 'setGenerate', 59 | 'setTxFee', 60 | 'signMessage', 61 | 'signRawTransaction', 62 | 'stop', 63 | 'validateAddress', 64 | 'verifyMessage', 65 | 'walletLock', 66 | 'walletPassphrase', 67 | 'walletPassphraseChange' 68 | ) 69 | 70 | isCommand(command: string): boolean { 71 | const lowerCommand: string = command.toLowerCase() 72 | 73 | var lowerCaseCommands = this.getCommands().map((item: string) => 74 | item.toLowerCase() 75 | ) 76 | 77 | return lowerCaseCommands.indexOf(lowerCommand) !== -1 78 | } 79 | 80 | getCommands(): Array { 81 | return this.commands 82 | } 83 | 84 | /*abstract addMultiSigAddress( 85 | nrequire: string, 86 | keys: string[], 87 | account: string 88 | ): Promise 89 | 90 | abstract backupWallet(destination: string): Promise 91 | 92 | abstract createRawTransaction( 93 | transactions: Transaction[], 94 | sendAddressAndAmount: any 95 | ): Promise 96 | 97 | abstract decodeRawTransaction(hexString: string): Promise 98 | 99 | abstract dumpPrivKey(address: string): Promise 100 | 101 | abstract encryptWallet(passphrase: string): Promise 102 | 103 | abstract getAccount(address: string): Promise 104 | abstract getAccountAddress(account: string): Promise 105 | abstract getAddressesByAccount(account: string): Promise*/ 106 | 107 | abstract getBalance(account?: string): Promise 108 | 109 | /*abstract getBlock(hash: string, txinfo?: string): Promise 110 | 111 | abstract getBlockCount(): Client 112 | 113 | abstract getBlockHash(): Client 114 | 115 | abstract getConnectionCount(): Client 116 | 117 | abstract getDifficulty(): Client 118 | 119 | abstract getGenerate(): Client 120 | 121 | abstract getHashesPerSec(): Client*/ 122 | 123 | abstract getInfo(): Promise 124 | 125 | abstract getPeerInfo(): Promise> 126 | 127 | /*abstract getMemoryPool(): Client 128 | 129 | abstract getMiningInfo(): Client 130 | 131 | abstract getNewAddress(): Client 132 | 133 | abstract getRawTransaction(): Client 134 | 135 | abstract getReceivedByAccount(): Client 136 | 137 | abstract getReceivedByAddress(): Client 138 | 139 | abstract getTransaction(): Client 140 | 141 | abstract getWork(): Client 142 | 143 | abstract help(): Client 144 | 145 | abstract importPrivKey(): Client 146 | 147 | abstract importAddress(): Client 148 | 149 | abstract keyPoolRefill(): Client 150 | 151 | abstract listAccounts(): Client 152 | 153 | abstract listReceivedByAccount(): Client 154 | 155 | abstract listReceivedByAddress(): Client 156 | 157 | abstract listSinceBlock(): Client 158 | 159 | abstract listTransactions(): Client 160 | 161 | abstract listUnspent(): Client 162 | 163 | abstract move(): Client 164 | 165 | abstract sendFrom(): Client 166 | 167 | abstract sendMany(): Client 168 | 169 | abstract sendRawTransaction(): Client 170 | 171 | abstract sendToAddress(): Client 172 | 173 | abstract setAccount(): Client 174 | 175 | abstract setGenerate(): Client 176 | 177 | abstract setTxFee(): Client 178 | 179 | abstract signMessage(): Client 180 | 181 | abstract signRawTransaction(): Client 182 | 183 | abstract stop(): Client 184 | 185 | abstract validateAddress(): Client 186 | 187 | abstract verifyMessage(): Client 188 | 189 | abstract walletLock(): Client 190 | 191 | abstract walletPassphrase(): Client 192 | 193 | abstract walletPassphraseChange(): Client*/ 194 | } 195 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ``` 2 | ____ _________________________ ________ ___________ 3 | \ \ / /\_ _____/\______ \ / _____/ \_ _____/ 4 | \ Y / | __)_ | _// \ ___ | __)_ 5 | \ / | \ | | \\ \_\ \ | \ 2025 VERGE 6 | \___/ /_______ / |____|_ / \______ //_______ / 7 | \/ \/ \/ \/ 8 | ``` 9 | # A Node.js VERGE Client 10 | nodejs-verge is a VERGE client for node.js 11 | 12 |

13 | 14 | 15 | 16 |

17 | 18 | It is a fork of the excellent Kapitalize Bitcoin Client (now removed from GitHub) intended for use with VERGE. The purpose of this repository is: 19 | 20 | * Provide a one-stop resource for the Node.js developer to get started with VERGE integration. 21 | * Prevent would-be VERGE web developers worrying whether a VERGE client will work out of the box, or have to construct their own. 22 | * Promote Node.js development of VERGE web apps. 23 | * Identify and address any incompatibilities with the VERGE APIs that exist now, and/or in the future. 24 | 25 | ## Dependencies
26 | @types/node: "^20.14.11"
27 | global: "^4.4.0"
28 | typescript: "^5.5.3"
29 | You'll need a running instance of [verged](https://github.com/vergecurrency/verge) to connect with.
30 | 31 | Then, install the node-verge NPM package. 32 | 33 | `npm install nodejs-verge` 34 | 35 | ## Examples 36 | 37 | Some code examples follow below 38 | 39 | ```js 40 | var verge = require('nodejs-verge')() 41 | 42 | verge.auth('myusername', 'mypassword') 43 | 44 | verge.getDifficulty(function() { 45 | console.log(arguments); 46 | }) 47 | 48 | ``` 49 | 50 | ## Chaining 51 | 52 | Pretty much everything is chainable. 53 | 54 | ```js 55 | var verge = require('nodejs-verge')() 56 | 57 | verge 58 | .auth('MyUserName', 'mypassword') 59 | .getNewAddress() 60 | .getBalance() 61 | ``` 62 | 63 | 64 | 65 | ### .set(key [string, object], value [optional]) 66 | 67 | Accepts either key & value strings or an Object containing settings, returns `this` for chainability. 68 | 69 | ```js 70 | verge.set('host', '127.0.0.1') 71 | ``` 72 | 73 | ### .get(key [string]) 74 | 75 | Returns the specified option's value 76 | 77 | ```js 78 | verge.get('user') 79 | ``` 80 | 81 | ### .auth(user [string], pass [string]) 82 | 83 | Generates authorization header, returns `this` for chainability 84 | 85 | ## Commands 86 | 87 | TODO: Write tests for these. 88 | 89 | 90 | 91 | 92 | 93 | 94 | 96 | 97 | 98 | 99 | 100 | 102 | 103 | 104 | 105 | 106 | 108 | 109 | 110 | 111 | 114 | 115 | 116 | 117 | 120 | 121 | 122 | 123 | 124 | 126 | 127 | 128 | 129 | 130 | 132 | 133 | 134 | 135 | 136 | 138 | 139 | 140 | 141 | 142 | 144 | 145 | 146 | 147 | 148 | 150 | 151 | 152 | 153 | 154 | 156 | 157 | 158 | 159 | 162 | 163 | 164 | 165 | 166 | 168 | 169 | 170 | 171 | 172 | 174 | 175 | 176 | 177 | 178 | 180 | 181 | 182 | 183 | 184 | 186 | 187 | 188 | 189 | 190 | 192 | 193 | 194 | 195 | 196 | 198 | 199 | 200 | 201 | 212 | 214 | 215 | 216 | 217 | 230 | 232 | 233 | 234 | 235 | 236 | 238 | 239 | 240 | 241 | 242 | 244 | 245 | 246 | 247 | 250 | 251 | 252 | 253 | 266 | 268 | 269 | 270 | 271 | 280 | 282 | 283 | 284 | 285 | 286 | 288 | 289 | 290 | 291 | 292 | 294 | 295 | 296 | 297 | 298 | 300 | 301 | 302 | 303 | 304 | 306 | 307 | 308 | 309 | 315 | 317 | 318 | 319 | 320 | 329 | 331 | 332 | 333 | 334 | 335 | 337 | 338 | 339 | 340 | 342 | 344 | 345 | 346 | 347 | 348 | 350 | 351 | 352 | 353 | 356 | 357 | 358 | 359 | 360 | 362 | 363 | 364 | 365 | 368 | 369 | 370 | 371 | 372 | 374 | 375 | 376 | 377 | 380 | 382 | 383 | 384 | 385 | 386 | 388 | 389 | 390 | 391 | 392 | 394 | 395 | 396 | 397 | 398 | 400 | 401 | 402 | 403 | 404 | 406 | 407 | 408 | 409 | 410 | 412 | 413 | 414 | 415 | 416 | 418 | 419 | 420 | 421 | 424 | 425 | 426 | 427 |
Command Parameters Description Requires unlocked wallet? 95 |
addmultisigaddress [nrequired] ["key","key"] [account] Currently only available on testnet Add a nrequired-to-sign multisignature address to the wallet. Each key is a verge address or hex-encoded public key. If [account] is specified, assign address to [account]. N 101 |
backupwallet [destination] Safely copies wallet.dat to destination, which can be a directory or a path with filename. N 107 |
dumpprivkey [vergeaddress] Reveals the private key corresponding to 112 | Y 113 |
encryptwallet [passphrase] Encrypts the wallet with 118 | N 119 |
getaccount [vergeaddress] Returns the account associated with the given address. N 125 |
getaccountaddress [account] Returns the current verge address for receiving payments to this account. N 131 |
getaddressesbyaccount [account] Returns the list of addresses for the given account. N 137 |
getbalance [account] [minconf=1] If [account] is not specified, returns the server's total available balance.
If [account] is specified, returns the balance in the account.
N 143 |
getblock [hash] Returns information about the given block hash. N 149 |
getblockcount Returns the number of blocks in the longest block chain. N 155 |
getblockhash [index] Returns hash of block in best-block-chain at 160 | N 161 |
getblocknumber Deprecated. Use getblockcount. N 167 |
getconnectioncount Returns the number of connections to other nodes. N 173 |
getdifficulty Returns the proof-of-work difficulty as a multiple of the minimum difficulty. N 179 |
getgenerate Returns true or false whether verged is currently generating hashes N 185 |
gethashespersec Returns a recent hashes per second performance measurement while generating. N 191 |
getinfo Returns an object containing various state info. N 197 |
getmemorypool [data] If [data] is not specified, returns data needed to construct a block to work on: 202 |
  • "version": block version 203 |
  • "previousblockhash": hash of current highest block 204 |
  • "transactions": contents of non-coinbase transactions that should be included in the next block 205 |
  • "coinbasevalue": maximum allowable input to coinbase transaction, including the generation award and transaction fees 206 |
  • "time": timestamp appropriate for next block 207 |
  • "bits": compressed target of next block 208 |
209 |

If [data] is specified, tries to solve the block and returns true if it was successful. 210 |

211 |
N 213 |
getmininginfo Returns an object containing mining-related information: 218 |
  • blocks 219 |
  • currentblocksize 220 |
  • currentblocktx 221 |
  • difficulty 222 |
  • errors 223 |
  • generate 224 |
  • genproclimit 225 |
  • hashespersec 226 |
  • pooledtx 227 |
  • testnet 228 |
229 |
N 231 |
getnewaddress [account] Returns a new verge address for receiving payments. If [account] is specified (recommended), it is added to the address book so payments received with the address will be credited to [account]. N 237 |
getreceivedbyaccount [account] [minconf=1] Returns the total amount received by addresses with [account] in transactions with at least [minconf] confirmations. If [account] not provided return will include all transactions to all accounts. (version 0.3.24-beta) N 243 |
getreceivedbyaddress [vergeaddress] [minconf=1] Returns the total amount received by 248 | N 249 |
gettransaction [txid] Returns an object about the given transaction containing: 254 |
  • "amount": total amount of the transaction 255 |
  • "confirmations": number of confirmations of the transaction 256 |
  • "txid": the transaction ID 257 |
  • "time": time the transaction occurred 258 |
  • "details" - An array of objects containing: 259 |
    • "account" 260 |
    • "address" 261 |
    • "category" 262 |
    • "amount" 263 |
    264 |
265 |
N 267 |
getwork [data] If [data] is not specified, returns formatted hash data to work on: 272 |
  • "midstate": precomputed hash state after hashing the first half of the data 273 |
  • "data": block data 274 |
  • "hash1": formatted hash buffer for second hash 275 |
  • "target": little endian hash target 276 |
277 |

If [data] is specified, tries to solve the block and returns true if it was successful. 278 |

279 |
N 281 |
help [command] List commands, or get help for a command. N 287 |
importprivkey [vergeprivkey] [label] Adds a private key (as returned by dumpprivkey) to your wallet. Y 293 |
keypoolrefill Fills the keypool, requires wallet passphrase to be set. Y 299 |
listaccounts [minconf=1] Returns Object that has account names as keys, account balances as values. N 305 |
listreceivedbyaccount [minconf=1] [includeempty=false] Returns an array of objects containing: 310 |
  • "account": the account of the receiving addresses 311 |
  • "amount": total amount received by addresses with this account 312 |
  • "confirmations": number of confirmations of the most recent transaction included 313 |
314 |
N 316 |
listreceivedbyaddress [minconf=1] [includeempty=false] Returns an array of objects containing: 321 |
  • "address": receiving address 322 |
  • "account": the account of the receiving address 323 |
  • "amount": total amount received by the address 324 |
  • "confirmations": number of confirmations of the most recent transaction included 325 |
326 |

To get a list of accounts on the system, execute verged listreceivedbyaddress 0 true 327 |

328 |
N 330 |
listsinceblock [blockhash] [target-confirmations] Get all transactions in blocks since block [blockhash], or all transactions if omitted. N 336 |
listtransactions [account] [count=10] [from=0] Returns up to [count] most recent transactions skipping the first [from] transactions for account [account]. If [account] not provided will return recent transaction from all accounts. 341 | N 343 |
move [fromaccount] [toaccount] [amount] [minconf=1] [comment] Move from one account in your wallet to another N 349 |
sendfrom [fromaccount] [tovergeaddress] [amount] [minconf=1] [comment] [comment-to] 354 | Y 355 |
sendmany [fromaccount] [address:amount,...] [minconf=1] [comment] amounts are double-precision floating point numbers Y 361 |
sendtoaddress [vergeaddress] [amount] [comment] [comment-to] 366 | Y 367 |
setaccount [vergeaddress] [account] Sets the account associated with the given address. Assigning address that is already assigned to the same account will create a new address associated with that account. N 373 |
setgenerate [generate] [genproclimit] [generate] is true or false to turn generation on or off. 378 | 379 | Generation is limited to [genproclimit] processors, -1 is unlimited. N 381 |
signmessage [vergeaddress] [message] Sign a message with the private key of an address. Y 387 |
settxfee [amount] [amount] is a real and is rounded to the nearest 0.00000001 N 393 |
stop Stop verge server. N 399 |
validateaddress [vergeaddress] Return information about [vergeaddress]. N 405 |
verifymessage [vergeaddress] [signature] [message] Verify a signed message. N 411 |
walletlock Removes the wallet encryption key from memory, locking the wallet. After calling this method, you will need to call walletpassphrase again before being able to call any methods which require the wallet to be unlocked. N 417 |
walletpassphrase [passphrase] [timeout] Stores the wallet decryption key in memory for 422 | N 423 |
walletpassphrasechange [oldpassphrase] [newpassphrase] Changes the wallet passphrase from 428 | N 429 |
430 | 431 | ## Options 432 | 433 | You may pass options to the initialization function or to the `set` method. 434 | 435 | ```js 436 | 437 | var verge = require('verge')({ 438 | user:'user' 439 | }) 440 | 441 | verge.set('pass', 'somn') 442 | verge.set({port:20102}) 443 | 444 | ``` 445 | 446 | Available options and default values: 447 | 448 | + host *localhost* 449 | + port *20102* 450 | + user 451 | + pass 452 | + passphrasecallback 453 | + https 454 | + ca 455 | 456 | ### Passphrase Callback 457 | 458 | With an encryped wallet, any operation that accesses private keys requires a wallet unlock. A wallet is unlocked using the `walletpassphrase ` JSON-RPC method: the wallet will relock after `timeout` seconds. 459 | 460 | You may pass an optional function `passphrasecallback` to the `node-verge` initialization function to manage wallet unlocks. `passphrasecallback` should be a function accepting three arguments: 461 | 462 | function(command, args, callback) {} 463 | 464 | + **command** is the command that failed due to a locked wallet. 465 | + **args** is the arguments for the failed command. 466 | + **callback** is a typical node-style continuation callback of the form `function(err, passphrase, timeout) {}`. Call callback with the wallet passphrase and desired timeout from within your passphrasecallback to unlock the wallet. 467 | 468 | You may hard code your passphrase (not recommended) as follows: 469 | 470 | ```js 471 | var verge = require('nodejs-verge')({ 472 | passphrasecallback: function(command, args, callback) { 473 | callback(null, 'passphrase', 30); 474 | } 475 | }) 476 | ``` 477 | 478 | Because `passphrasecallback` is a continuation, you can retrieve the passphrase in an asynchronous manner. For example, by prompting the user: 479 | 480 | ```js 481 | var readline = require('readline') 482 | 483 | var rl = readline.createInterface({ 484 | input: process.stdin, 485 | output: process.stdout 486 | }) 487 | 488 | var verge = require('nodejs-verge')({ 489 | passphrasecallback: function(command, args, callback) { 490 | rl.question('Enter passphrase for "' + command + '" operation: ', function(passphrase) { 491 | if (passphrase) { 492 | callback(null, passphrase, 1) 493 | } else { 494 | callback(new Error('no passphrase entered')) 495 | } 496 | }) 497 | } 498 | }) 499 | ``` 500 | 501 | ### Secure RPC with SSL 502 | 503 | By default `verged` exposes its JSON-RPC interface via HTTP; that is, all RPC commands are transmitted in plain text across the network! To secure the JSON-RPC channel you can supply `verged` with a self-signed SSL certificate and an associated private key to enable HTTPS. For example, in your `verge.conf`: 504 | 505 | rpcssl=1 506 | rpcsslcertificatechainfile=/etc/ssl/certs/verged.crt 507 | rpcsslprivatekeyfile=/etc/ssl/private/verged.pem 508 | 509 | In order to securely access an SSL encrypted JSON-RPC interface you need a copy of the self-signed certificate from the server: in this case `verged.crt`. Pass your self-signed certificate in the `ca` option and set `https: true` and node-verge is secured! 510 | 511 | ```js 512 | var fs = require('fs') 513 | 514 | var ca = fs.readFileSync('verged.crt') 515 | 516 | var verge = require('nodejs-verge')({ 517 | user: 'rpcusername', 518 | pass: 'rpcpassword', 519 | https: true, 520 | ca: ca 521 | }) 522 | ``` 523 | 524 | ## Testing 525 | 526 | ``` 527 | npm install -g nodeunit 528 | 529 | nodeunit test/test-nodejs-verge.js 530 | ``` 531 | 532 | ## Donate 533 | 534 | [VERGE](https://vergecurrency.com) donation address is DHe3mTNQztY1wWokdtMprdeCKNoMxyThoV 535 | 536 | Donations in [verge](https://vergecurrency.com) will be used for bounties, and holding. 537 | As a side note: I encourage all GitHub repository owners to post a donation address so 538 | their community can easily support development financially. 539 | 540 | 541 | 542 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@angular/compiler@9.0.0": 6 | version "9.0.0" 7 | resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.0.0.tgz#87e0bef4c369b6cadae07e3a4295778fc93799d5" 8 | integrity sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ== 9 | 10 | "@angular/core@9.0.0": 11 | version "9.0.0" 12 | resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.0.0.tgz#227dc53e1ac81824f998c6e76000b7efc522641e" 13 | integrity sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w== 14 | 15 | "@eslint-community/eslint-utils@^4.2.0": 16 | version "4.4.0" 17 | resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" 18 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 19 | dependencies: 20 | eslint-visitor-keys "^3.3.0" 21 | 22 | "@eslint-community/regexpp@^4.11.0": 23 | version "4.11.0" 24 | resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz" 25 | integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== 26 | 27 | "@eslint/config-array@^0.17.0": 28 | version "0.17.0" 29 | resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.0.tgz" 30 | integrity sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA== 31 | dependencies: 32 | "@eslint/object-schema" "^2.1.4" 33 | debug "^4.3.1" 34 | minimatch "^3.1.2" 35 | 36 | "@eslint/eslintrc@^3.1.0": 37 | version "3.1.0" 38 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz" 39 | integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== 40 | dependencies: 41 | ajv "^6.12.4" 42 | debug "^4.3.2" 43 | espree "^10.0.1" 44 | globals "^14.0.0" 45 | ignore "^5.2.0" 46 | import-fresh "^3.2.1" 47 | js-yaml "^4.1.0" 48 | minimatch "^3.1.2" 49 | strip-json-comments "^3.1.1" 50 | 51 | "@eslint/js@9.7.0": 52 | version "9.7.0" 53 | resolved "https://registry.npmjs.org/@eslint/js/-/js-9.7.0.tgz" 54 | integrity sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng== 55 | 56 | "@eslint/object-schema@^2.1.4": 57 | version "2.1.4" 58 | resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz" 59 | integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== 60 | 61 | "@humanwhocodes/module-importer@^1.0.1": 62 | version "1.0.1" 63 | resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" 64 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 65 | 66 | "@humanwhocodes/retry@^0.3.0": 67 | version "0.3.0" 68 | resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz" 69 | integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== 70 | 71 | "@nodelib/fs.scandir@2.1.5": 72 | version "2.1.5" 73 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 74 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 75 | dependencies: 76 | "@nodelib/fs.stat" "2.0.5" 77 | run-parallel "^1.1.9" 78 | 79 | "@nodelib/fs.stat@2.0.5": 80 | version "2.0.5" 81 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 82 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 83 | 84 | "@nodelib/fs.walk@^1.2.8": 85 | version "1.2.8" 86 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 87 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 88 | dependencies: 89 | "@nodelib/fs.scandir" "2.1.5" 90 | fastq "^1.6.0" 91 | 92 | "@types/node@^20.14.11": 93 | version "20.14.11" 94 | resolved "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz" 95 | integrity sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA== 96 | dependencies: 97 | undici-types "~5.26.4" 98 | 99 | acorn-jsx@^5.3.2: 100 | version "5.3.2" 101 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 102 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 103 | 104 | acorn@^8.12.0: 105 | version "8.12.1" 106 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz" 107 | integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== 108 | 109 | ajv@^6.12.4: 110 | version "6.12.6" 111 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 112 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 113 | dependencies: 114 | fast-deep-equal "^3.1.1" 115 | fast-json-stable-stringify "^2.0.0" 116 | json-schema-traverse "^0.4.1" 117 | uri-js "^4.2.2" 118 | 119 | ansi-regex@^5.0.1: 120 | version "5.0.1" 121 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 122 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 123 | 124 | ansi-styles@^4.1.0: 125 | version "4.3.0" 126 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 127 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 128 | dependencies: 129 | color-convert "^2.0.1" 130 | 131 | app-root-path@^3.0.0: 132 | version "3.1.0" 133 | resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" 134 | integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== 135 | 136 | argparse@^2.0.1: 137 | version "2.0.1" 138 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 139 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 140 | 141 | aria-query@^3.0.0: 142 | version "3.0.0" 143 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" 144 | integrity sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw== 145 | dependencies: 146 | ast-types-flow "0.0.7" 147 | commander "^2.11.0" 148 | 149 | ast-types-flow@0.0.7: 150 | version "0.0.7" 151 | resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" 152 | integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== 153 | 154 | axobject-query@2.0.2: 155 | version "2.0.2" 156 | resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" 157 | integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== 158 | dependencies: 159 | ast-types-flow "0.0.7" 160 | 161 | balanced-match@^1.0.0: 162 | version "1.0.2" 163 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 164 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 165 | 166 | brace-expansion@^1.1.7: 167 | version "1.1.11" 168 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 169 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 170 | dependencies: 171 | balanced-match "^1.0.0" 172 | concat-map "0.0.1" 173 | 174 | callsites@^3.0.0: 175 | version "3.1.0" 176 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 177 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 178 | 179 | chalk@^4.0.0: 180 | version "4.1.2" 181 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 182 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 183 | dependencies: 184 | ansi-styles "^4.1.0" 185 | supports-color "^7.1.0" 186 | 187 | codelyzer@^6.0.2: 188 | version "6.0.2" 189 | resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-6.0.2.tgz#25d72eae641e8ff13ffd7d99b27c9c7ad5d7e135" 190 | integrity sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g== 191 | dependencies: 192 | "@angular/compiler" "9.0.0" 193 | "@angular/core" "9.0.0" 194 | app-root-path "^3.0.0" 195 | aria-query "^3.0.0" 196 | axobject-query "2.0.2" 197 | css-selector-tokenizer "^0.7.1" 198 | cssauron "^1.4.0" 199 | damerau-levenshtein "^1.0.4" 200 | rxjs "^6.5.3" 201 | semver-dsl "^1.0.1" 202 | source-map "^0.5.7" 203 | sprintf-js "^1.1.2" 204 | tslib "^1.10.0" 205 | zone.js "~0.10.3" 206 | 207 | color-convert@^2.0.1: 208 | version "2.0.1" 209 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 210 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 211 | dependencies: 212 | color-name "~1.1.4" 213 | 214 | color-name@~1.1.4: 215 | version "1.1.4" 216 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 217 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 218 | 219 | commander@^2.11.0: 220 | version "2.20.3" 221 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 222 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 223 | 224 | concat-map@0.0.1: 225 | version "0.0.1" 226 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 227 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 228 | 229 | cross-spawn@^7.0.2: 230 | version "7.0.3" 231 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 232 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 233 | dependencies: 234 | path-key "^3.1.0" 235 | shebang-command "^2.0.0" 236 | which "^2.0.1" 237 | 238 | css-selector-tokenizer@^0.7.1: 239 | version "0.7.3" 240 | resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" 241 | integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== 242 | dependencies: 243 | cssesc "^3.0.0" 244 | fastparse "^1.1.2" 245 | 246 | cssauron@^1.4.0: 247 | version "1.4.0" 248 | resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" 249 | integrity sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw== 250 | dependencies: 251 | through X.X.X 252 | 253 | cssesc@^3.0.0: 254 | version "3.0.0" 255 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" 256 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 257 | 258 | damerau-levenshtein@^1.0.4: 259 | version "1.0.8" 260 | resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" 261 | integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== 262 | 263 | debug@^4.3.1, debug@^4.3.2: 264 | version "4.3.5" 265 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz" 266 | integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== 267 | dependencies: 268 | ms "2.1.2" 269 | 270 | deep-is@^0.1.3: 271 | version "0.1.4" 272 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 273 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 274 | 275 | dom-walk@^0.1.0: 276 | version "0.1.2" 277 | resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" 278 | integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== 279 | 280 | escape-string-regexp@^4.0.0: 281 | version "4.0.0" 282 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 283 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 284 | 285 | eslint-scope@^8.0.2: 286 | version "8.0.2" 287 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz" 288 | integrity sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA== 289 | dependencies: 290 | esrecurse "^4.3.0" 291 | estraverse "^5.2.0" 292 | 293 | eslint-visitor-keys@^3.3.0: 294 | version "3.4.3" 295 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" 296 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 297 | 298 | eslint-visitor-keys@^4.0.0: 299 | version "4.0.0" 300 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz" 301 | integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== 302 | 303 | eslint@^9.0.0: 304 | version "9.7.0" 305 | resolved "https://registry.npmjs.org/eslint/-/eslint-9.7.0.tgz" 306 | integrity sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw== 307 | dependencies: 308 | "@eslint-community/eslint-utils" "^4.2.0" 309 | "@eslint-community/regexpp" "^4.11.0" 310 | "@eslint/config-array" "^0.17.0" 311 | "@eslint/eslintrc" "^3.1.0" 312 | "@eslint/js" "9.7.0" 313 | "@humanwhocodes/module-importer" "^1.0.1" 314 | "@humanwhocodes/retry" "^0.3.0" 315 | "@nodelib/fs.walk" "^1.2.8" 316 | ajv "^6.12.4" 317 | chalk "^4.0.0" 318 | cross-spawn "^7.0.2" 319 | debug "^4.3.2" 320 | escape-string-regexp "^4.0.0" 321 | eslint-scope "^8.0.2" 322 | eslint-visitor-keys "^4.0.0" 323 | espree "^10.1.0" 324 | esquery "^1.5.0" 325 | esutils "^2.0.2" 326 | fast-deep-equal "^3.1.3" 327 | file-entry-cache "^8.0.0" 328 | find-up "^5.0.0" 329 | glob-parent "^6.0.2" 330 | ignore "^5.2.0" 331 | imurmurhash "^0.1.4" 332 | is-glob "^4.0.0" 333 | is-path-inside "^3.0.3" 334 | json-stable-stringify-without-jsonify "^1.0.1" 335 | levn "^0.4.1" 336 | lodash.merge "^4.6.2" 337 | minimatch "^3.1.2" 338 | natural-compare "^1.4.0" 339 | optionator "^0.9.3" 340 | strip-ansi "^6.0.1" 341 | text-table "^0.2.0" 342 | 343 | espree@^10.0.1, espree@^10.1.0: 344 | version "10.1.0" 345 | resolved "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz" 346 | integrity sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA== 347 | dependencies: 348 | acorn "^8.12.0" 349 | acorn-jsx "^5.3.2" 350 | eslint-visitor-keys "^4.0.0" 351 | 352 | esquery@^1.5.0: 353 | version "1.6.0" 354 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" 355 | integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== 356 | dependencies: 357 | estraverse "^5.1.0" 358 | 359 | esrecurse@^4.3.0: 360 | version "4.3.0" 361 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 362 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 363 | dependencies: 364 | estraverse "^5.2.0" 365 | 366 | estraverse@^5.1.0, estraverse@^5.2.0: 367 | version "5.3.0" 368 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 369 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 370 | 371 | esutils@^2.0.2: 372 | version "2.0.3" 373 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 374 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 375 | 376 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 377 | version "3.1.3" 378 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 379 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 380 | 381 | fast-json-stable-stringify@^2.0.0: 382 | version "2.1.0" 383 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 384 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 385 | 386 | fast-levenshtein@^2.0.6: 387 | version "2.0.6" 388 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 389 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 390 | 391 | fastparse@^1.1.2: 392 | version "1.1.2" 393 | resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" 394 | integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== 395 | 396 | fastq@^1.6.0: 397 | version "1.17.1" 398 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" 399 | integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== 400 | dependencies: 401 | reusify "^1.0.4" 402 | 403 | file-entry-cache@^8.0.0: 404 | version "8.0.0" 405 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" 406 | integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== 407 | dependencies: 408 | flat-cache "^4.0.0" 409 | 410 | find-up@^5.0.0: 411 | version "5.0.0" 412 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 413 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 414 | dependencies: 415 | locate-path "^6.0.0" 416 | path-exists "^4.0.0" 417 | 418 | flat-cache@^4.0.0: 419 | version "4.0.1" 420 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" 421 | integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== 422 | dependencies: 423 | flatted "^3.2.9" 424 | keyv "^4.5.4" 425 | 426 | flatted@^3.2.9: 427 | version "3.3.1" 428 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" 429 | integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== 430 | 431 | glob-parent@^6.0.2: 432 | version "6.0.2" 433 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 434 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 435 | dependencies: 436 | is-glob "^4.0.3" 437 | 438 | global@^4.4.0: 439 | version "4.4.0" 440 | resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" 441 | integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== 442 | dependencies: 443 | min-document "^2.19.0" 444 | process "^0.11.10" 445 | 446 | globals@^14.0.0: 447 | version "14.0.0" 448 | resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" 449 | integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== 450 | 451 | has-flag@^4.0.0: 452 | version "4.0.0" 453 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 454 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 455 | 456 | ignore@^5.2.0: 457 | version "5.3.1" 458 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" 459 | integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== 460 | 461 | import-fresh@^3.2.1: 462 | version "3.3.0" 463 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 464 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 465 | dependencies: 466 | parent-module "^1.0.0" 467 | resolve-from "^4.0.0" 468 | 469 | imurmurhash@^0.1.4: 470 | version "0.1.4" 471 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 472 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 473 | 474 | is-extglob@^2.1.1: 475 | version "2.1.1" 476 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 477 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 478 | 479 | is-glob@^4.0.0, is-glob@^4.0.3: 480 | version "4.0.3" 481 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 482 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 483 | dependencies: 484 | is-extglob "^2.1.1" 485 | 486 | is-path-inside@^3.0.3: 487 | version "3.0.3" 488 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" 489 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 490 | 491 | isexe@^2.0.0: 492 | version "2.0.0" 493 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 494 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 495 | 496 | js-yaml@^4.1.0: 497 | version "4.1.1" 498 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" 499 | integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== 500 | dependencies: 501 | argparse "^2.0.1" 502 | 503 | json-buffer@3.0.1: 504 | version "3.0.1" 505 | resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" 506 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 507 | 508 | json-schema-traverse@^0.4.1: 509 | version "0.4.1" 510 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 511 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 512 | 513 | json-stable-stringify-without-jsonify@^1.0.1: 514 | version "1.0.1" 515 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 516 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 517 | 518 | keyv@^4.5.4: 519 | version "4.5.4" 520 | resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" 521 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 522 | dependencies: 523 | json-buffer "3.0.1" 524 | 525 | levn@^0.4.1: 526 | version "0.4.1" 527 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 528 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 529 | dependencies: 530 | prelude-ls "^1.2.1" 531 | type-check "~0.4.0" 532 | 533 | locate-path@^6.0.0: 534 | version "6.0.0" 535 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 536 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 537 | dependencies: 538 | p-locate "^5.0.0" 539 | 540 | lodash.merge@^4.6.2: 541 | version "4.6.2" 542 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 543 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 544 | 545 | min-document@^2.19.0: 546 | version "2.19.2" 547 | resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.2.tgz#f95db44639eaae3ac8ea85ae6809ae85ff7e3b81" 548 | integrity sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A== 549 | dependencies: 550 | dom-walk "^0.1.0" 551 | 552 | minimatch@^3.1.2: 553 | version "3.1.2" 554 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 555 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 556 | dependencies: 557 | brace-expansion "^1.1.7" 558 | 559 | ms@2.1.2: 560 | version "2.1.2" 561 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 562 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 563 | 564 | natural-compare@^1.4.0: 565 | version "1.4.0" 566 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 567 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 568 | 569 | optionator@^0.9.3: 570 | version "0.9.4" 571 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" 572 | integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== 573 | dependencies: 574 | deep-is "^0.1.3" 575 | fast-levenshtein "^2.0.6" 576 | levn "^0.4.1" 577 | prelude-ls "^1.2.1" 578 | type-check "^0.4.0" 579 | word-wrap "^1.2.5" 580 | 581 | p-limit@^3.0.2: 582 | version "3.1.0" 583 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 584 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 585 | dependencies: 586 | yocto-queue "^0.1.0" 587 | 588 | p-locate@^5.0.0: 589 | version "5.0.0" 590 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 591 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 592 | dependencies: 593 | p-limit "^3.0.2" 594 | 595 | parent-module@^1.0.0: 596 | version "1.0.1" 597 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 598 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 599 | dependencies: 600 | callsites "^3.0.0" 601 | 602 | path-exists@^4.0.0: 603 | version "4.0.0" 604 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 605 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 606 | 607 | path-key@^3.1.0: 608 | version "3.1.1" 609 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 610 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 611 | 612 | prelude-ls@^1.2.1: 613 | version "1.2.1" 614 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 615 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 616 | 617 | process@^0.11.10: 618 | version "0.11.10" 619 | resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" 620 | integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== 621 | 622 | punycode@^2.1.0: 623 | version "2.3.1" 624 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" 625 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 626 | 627 | queue-microtask@^1.2.2: 628 | version "1.2.3" 629 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 630 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 631 | 632 | resolve-from@^4.0.0: 633 | version "4.0.0" 634 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 635 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 636 | 637 | reusify@^1.0.4: 638 | version "1.0.4" 639 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 640 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 641 | 642 | run-parallel@^1.1.9: 643 | version "1.2.0" 644 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 645 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 646 | dependencies: 647 | queue-microtask "^1.2.2" 648 | 649 | rxjs@^6.5.3: 650 | version "6.6.7" 651 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" 652 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 653 | dependencies: 654 | tslib "^1.9.0" 655 | 656 | semver-dsl@^1.0.1: 657 | version "1.0.1" 658 | resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" 659 | integrity sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng== 660 | dependencies: 661 | semver "^5.3.0" 662 | 663 | semver@^5.3.0: 664 | version "5.7.2" 665 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" 666 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== 667 | 668 | shebang-command@^2.0.0: 669 | version "2.0.0" 670 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 671 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 672 | dependencies: 673 | shebang-regex "^3.0.0" 674 | 675 | shebang-regex@^3.0.0: 676 | version "3.0.0" 677 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 678 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 679 | 680 | source-map@^0.5.7: 681 | version "0.5.7" 682 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 683 | integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== 684 | 685 | sprintf-js@^1.1.2: 686 | version "1.1.3" 687 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" 688 | integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== 689 | 690 | strip-ansi@^6.0.1: 691 | version "6.0.1" 692 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 693 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 694 | dependencies: 695 | ansi-regex "^5.0.1" 696 | 697 | strip-json-comments@^3.1.1: 698 | version "3.1.1" 699 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 700 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 701 | 702 | supports-color@^7.1.0: 703 | version "7.2.0" 704 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 705 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 706 | dependencies: 707 | has-flag "^4.0.0" 708 | 709 | text-table@^0.2.0: 710 | version "0.2.0" 711 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 712 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 713 | 714 | through@X.X.X: 715 | version "2.3.8" 716 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 717 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 718 | 719 | tslib@^1.10.0, tslib@^1.9.0: 720 | version "1.14.1" 721 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 722 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 723 | 724 | type-check@^0.4.0, type-check@~0.4.0: 725 | version "0.4.0" 726 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 727 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 728 | dependencies: 729 | prelude-ls "^1.2.1" 730 | 731 | typescript@^5.5.3: 732 | version "5.5.3" 733 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz" 734 | integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== 735 | 736 | undici-types@~5.26.4: 737 | version "5.26.5" 738 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" 739 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 740 | 741 | uri-js@^4.2.2: 742 | version "4.4.1" 743 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 744 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 745 | dependencies: 746 | punycode "^2.1.0" 747 | 748 | which@^2.0.1: 749 | version "2.0.2" 750 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 751 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 752 | dependencies: 753 | isexe "^2.0.0" 754 | 755 | word-wrap@^1.2.5: 756 | version "1.2.5" 757 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" 758 | integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== 759 | 760 | yocto-queue@^0.1.0: 761 | version "0.1.0" 762 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 763 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 764 | 765 | zone.js@~0.10.3: 766 | version "0.10.3" 767 | resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" 768 | integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== 769 | --------------------------------------------------------------------------------