diff --git a/.gitignore b/.gitignore index d24e4aa..e918bd7 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,13 @@ rococo-local.json rococo-local-raw.json configLocal.json bin + +# Ignore file for non-zero install +# ref: https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/README.md b/README.md index 75ea697..f56eb0d 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,36 @@ cargo build --release -p polkadot-collator cp ./target/release/polkadot-collator ../polkadot-launch/bin/polkadot-collator ``` -## Use +## Usage + +Help + +``` +polkadot-launch [options] + +Launching Polkadot network locally + +Options: + -h, --help Show help [boolean] + --version Show version number [boolean] + -v, --verbose Verbose logging [count] + -o, --out Folder that assets and logs output to [string] +``` + +Examples ```bash -polkadot-launch config.json +# Launch relay chain - parachains networks locally +polkadot-launch examples/config.json + +# Show the help text +polkadot-launch --help + +# Launch the networks with all asset output to the specified folder +polkadot-launch -o out examples/config.json + +# In addition to the above, the actual commands used to launch the networks are displayed +polkadot-launch -vo out examples/config.json ``` ### Configuration File @@ -50,21 +76,23 @@ The required configuration file defines the properties of the network you want t You may use a json or a js file. You can see the examples: -- [config.json](config.json) -- [config.js](config.js) +- [examples/config.json](examples/config.json) +- [examples/config.js](examples/config.js) -You may find the .js alternative more convenient if you need comments, trailing commas or if you prefer do dedup some portions of the config. +You may find the .js alternative more convenient if you need comments, trailing commas, or if you prefer do dedup some portions of the config. #### `relaychain` - `bin`: The path of the [Polkadot relay chain binary](https://github.com/paritytech/polkadot/) used - to setup your test network. For example `/target/release/polkadot`. + to setup your test network. For example `/target/release/polkadot`. + A relative path used here is resolved relative to the config file location. - `chain`: The chain you want to use to generate your spec (probably `rococo-local`). - `nodes`: An array of nodes that will be validators on the relay chain. - `name`: Must be one of `alice`, `bob`, `charlie`, or `dave`. - `wsPort`: The websocket port for this node. + - `rpcPort`: The RPC port for this node. - `port`: The TCP port for this node. - - `nodeKey`: a secret key used for generating libp2p peer identifier. Optional. + - `nodeKey`: (Optional) A secret key used for generating libp2p peer identifier. - `basePath`: The directory used for the blockchain db and other outputs. When unspecified, we use `--tmp`. - `flags`: Any additional command line flags you want to add when starting your node. @@ -75,11 +103,12 @@ These variable are fed directly into the Polkadot binary and used to spawn a nod ```bash \ - --chain=-raw.json \ - --tmp \ - --ws-port= \ - --port= \ - -- \ + --chain=-raw.json \ + --tmp \ + --ws-port= \ + --rpc-port= \ + --port= \ + -- \ ``` An example of `genesis` is: @@ -116,10 +145,13 @@ All `genesis` properties can be found in the chainspec output: - `bin`: The path of the [collator node binary](https://github.com/substrate-developer-hub/substrate-parachain-template) used to create blocks for your parachain. For example - `/target/release/polkadot-collator`. -- `id`: The id to assign to this parachain. Must be unique. + `/target/release/polkadot-collator`. + A relative path used here is resolved relative to the config file location. +- `id`: The ParaId to assign to this parachain. Must be unique. +- `protocolId`: (Optional) The chain protocol ID. - `wsPort`: The websocket port for this node. - `port`: The TCP port for this node. +- `rpcPort`: The RPC port for this node. - `balance`: (Optional) Configure a starting amount of balance on the relay chain for this chain's account ID. - `chain`: (Optional) Configure an alternative chain specification to be used for launching the @@ -132,14 +164,15 @@ These variables are fed directly into the collator binary and used to spawn a no ```bash \ - --tmp \ - --ws-port= \ - --port= \ - --parachain-id= \ - --validator \ - --chain= - -- \ - --chain=-raw.json \ + --tmp \ + --ws-port= \ + --rpc-port= \ + --port= \ + --parachain-id= \ + --validator \ + --chain= + -- \ + --chain=-raw.json \ ``` #### `simpleParachains` @@ -162,35 +195,15 @@ ways you need to open channels in both directions. ```json "hrmpChannels": [ - { - "sender": "200", - "recipient": "300", - "maxCapacity": 8, - "maxMessageSize": 512 - } + { + "sender": "200", + "recipient": "300", + "maxCapacity": 8, + "maxMessageSize": 512 + } ] ``` -#### `types` - -These are the Polkadot JS types you might need to include so that Polkadot JS will be able to -interface properly with your runtime. - -```json -"types": { - "HrmpChannelId": { - "sender": "u32", - "receiver": "u32" - } -} -``` - -Or you can specify a path to the type definition json file instead: - -```json -"types": "./typedefs.json" -``` - #### `finalization` A simple boolean flag for whether you want to make sure all of the transactions submitted in diff --git a/config.js b/examples/config.js similarity index 59% rename from config.js rename to examples/config.js index 237f609..8949c56 100644 --- a/config.js +++ b/examples/config.js @@ -1,29 +1,33 @@ // Collator flags -var flags = ["--force-authoring", "--", "--execution=wasm"]; +const flags = ["--", "--execution=wasm"]; -var config = { +const config = { relaychain: { - bin: "./bin/polkadot", + bin: "../bin/polkadot", chain: "rococo-local", nodes: [ { name: "alice", wsPort: 9944, + rpcPort: 9844, port: 30444, }, { name: "bob", wsPort: 9955, + rpcPort: 9855, port: 30555, }, { name: "charlie", wsPort: 9966, + rpcPort: 9866, port: 30666, }, { name: "dave", wsPort: 9977, + rpcPort: 9877, port: 30777, }, ], @@ -42,40 +46,53 @@ var config = { }, parachains: [ { - bin: "./bin/polkadot-collator", - id: "200", + bin: "../bin/polkadot-collator", + id: 200, + protocolId: "para-first", balance: "1000000000000000000000", nodes: [ { + name: "alice", wsPort: 9988, + rpcPort: 9888, port: 31200, - name: "alice", + flags, + }, + { + name: "bob", + wsPort: 9989, + rpcPort: 9889, + port: 31201, flags, }, ], }, { - bin: "./bin/polkadot-collator", - id: "300", + bin: "../bin/polkadot-collator", + id: 300, + protocolId: "para-second", balance: "1000000000000000000000", nodes: [ { - wsPort: 9999, - port: 31300, name: "alice", + wsPort: 9990, + rpcPort: 9890, + port: 31300, flags, }, ], }, ], simpleParachains: [ - { - bin: "./bin/adder-collator", - id: "400", - port: "31400", - name: "alice", - balance: "1000000000000000000000", - }, + // { + // bin: "../bin/adder-collator", + // id: 400, + // name: "alice", + // balance: "1000000000000000000000", + // // no `wsPort` for simpleParachains + // // no `rpcPort` for simpleParachains + // port: 31400, + // }, ], hrmpChannels: [ { @@ -85,7 +102,6 @@ var config = { maxMessageSize: 512, }, ], - types: {}, finalization: false, }; diff --git a/config.json b/examples/config.json similarity index 72% rename from config.json rename to examples/config.json index 7c0e32c..7dd3e91 100644 --- a/config.json +++ b/examples/config.json @@ -1,26 +1,30 @@ { "relaychain": { - "bin": "./bin/polkadot", + "bin": "../bin/polkadot", "chain": "rococo-local", "nodes": [ { "name": "alice", "wsPort": 9944, + "rpcPort": 9844, "port": 30444 }, { "name": "bob", "wsPort": 9955, + "rpcPort": 9855, "port": 30555 }, { "name": "charlie", "wsPort": 9966, + "rpcPort": 9866, "port": 30666 }, { "name": "dave", "wsPort": 9977, + "rpcPort": 9877, "port": 30777 } ], @@ -39,27 +43,31 @@ }, "parachains": [ { - "bin": "./bin/polkadot-collator", - "id": "200", + "bin": "../bin/polkadot-collator", + "id": 200, + "protocolId": "para-first", "balance": "1000000000000000000000", "nodes": [ { + "name": "alice", "wsPort": 9988, + "rpcPort": 9888, "port": 31200, - "name": "alice", "flags": ["--", "--execution=wasm"] } ] }, { - "bin": "./bin/polkadot-collator", - "id": "300", + "bin": "../bin/polkadot-collator", + "id": 300, + "protocolId": "para-second", "balance": "1000000000000000000000", "nodes": [ { + "name": "alice", "wsPort": 9999, + "rpcPort": 9899, "port": 31300, - "name": "alice", "flags": ["--", "--execution=wasm"] } ] @@ -67,11 +75,11 @@ ], "simpleParachains": [ { - "bin": "./bin/adder-collator", - "id": "400", - "port": "31400", + "bin": "../bin/adder-collator", + "id": 400, "name": "alice", - "balance": "1000000000000000000000" + "balance": "1000000000000000000000", + "port": 31400 } ], "hrmpChannels": [ @@ -82,6 +90,5 @@ "maxMessageSize": 512 } ], - "types": {}, "finalization": false } diff --git a/package.json b/package.json index dfb7081..fb47112 100644 --- a/package.json +++ b/package.json @@ -8,43 +8,44 @@ "scripts": { "prepare": "tsc", "build": "tsc", - "start": "yarn build && node dist/cli.js", + "start": "ts-node src/cli.ts", + "start:debug": "node --inspect-brk -r ts-node/register src/cli.ts", "lint": "prettier -v && prettier --check .", "lint:write": "prettier --write .", "para-test": "mocha -r ts-node/register 'test/tests/**/test-*.ts'", "para-test-no-ci": "mocha -r ts-node/register 'test/tests-no-ci/**/test-*.ts'" }, + "files": [ + "dist" + ], + "bin": "dist/cli.js", "dependencies": { - "@polkadot/api": "^6.10.3", - "@polkadot/keyring": "^8.0.5", - "@polkadot/types": "^6.10.3", - "@polkadot/util": "^8.0.5", - "@polkadot/util-crypto": "^8.0.5", + "@polkadot/api": "^6.12.1", + "@polkadot/keyring": "^8.1.2", + "@polkadot/types": "^6.12.1", + "@polkadot/util": "^8.1.2", + "@polkadot/util-crypto": "^8.1.2", "@types/chai": "^4.2.22", "@types/mocha": "^9.0.0", - "chai": "^4.3.4", + "chalk": "^4.1.2", "ethers": "^5.4.7", "filter-console": "^0.1.1", "libp2p-crypto": "^0.20.0", - "mocha": "^9.1.2", "peer-id": "^0.15.3", - "tcp-port-used": "^1.0.2", - "ts-node": "^10.3.0", - "web3": "^1.6.0", - "web3-core": "^1.6.0", - "web3-eth": "^1.6.0", - "yargs": "^15.4.1" - }, - "files": [ - "dist" - ], - "bin": { - "polkadot-launch": "dist/cli.js" + "yargs": "^17.3.0" }, "devDependencies": { "@types/node": "^16.4.12", "@types/tcp-port-used": "^1.0.0", + "@types/yargs": "^17.0.7", + "chai": "^4.3.4", + "mocha": "^9.1.2", "prettier": "^2.4.1", - "typescript": "^4.1.5" + "tcp-port-used": "^1.0.2", + "ts-node": "^10.4.0", + "typescript": "^4.1.5", + "web3": "^1.6.0", + "web3-core": "^1.6.0", + "web3-eth": "^1.6.0" } } diff --git a/src/cli.ts b/src/cli.ts index b5c549f..78c690d 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,28 +1,72 @@ #!/usr/bin/env node - -import { killAll } from "./spawn"; import { resolve, dirname } from "path"; import fs from "fs"; -import { LaunchConfig } from "./types"; +import path from "path"; +import yargs from "yargs"; +import { hideBin } from "yargs/helpers"; + +import { killAll } from "./spawn"; +import { LaunchConfig, RunConfig } from "./types"; import { run } from "./runner"; // Special care is needed to handle paths to various files (binaries, spec, config, etc...) // The user passes the path to `config.json`, and we use that as the starting point for any other // relative path. So the `config.json` file is what we will be our starting point. -const { argv } = require("yargs"); -const config_file = argv._[0] ? argv._[0] : null; -if (!config_file) { - console.error("Missing config file argument..."); - process.exit(); -} -let config_path = resolve(process.cwd(), config_file); -let config_dir = dirname(config_path); -if (!fs.existsSync(config_path)) { - console.error("Config file does not exist: ", config_path); - process.exit(); -} -let config: LaunchConfig = require(config_path); +yargs(hideBin(process.argv)) + .command( + "$0 [options] ", + "Launching Polkadot network locally", + () => {}, + (argv) => { + const { verbose, config_file: configFile } = argv; + const configPath = resolve(process.cwd(), configFile as string); + const configDir = dirname(configPath); + if (!fs.existsSync(configPath)) { + console.error("Config file does not exist: ", configPath); + process.exit(); + } + + const launchConfig: LaunchConfig = require(configPath); + + // runConfig initialization + const runConfig: RunConfig = { + verbose: (verbose as number) || 0, + out: (argv.out as string) || process.cwd(), + }; + + // folder creation. Creating the inner folder `./logs` also create the parent folder. + const folderPath = path.resolve(runConfig.out, "logs"); + try { + createFolder(folderPath); + } catch (err) { + console.error( + `Cannot create output folder at ${runConfig.out}. Err: ${( + err as Error + ).toString()}` + ); + process.exit(); + } + + // Run the main process + run(configDir, launchConfig, runConfig); + } + ) + .option("verbose", { + alias: "v", + describe: "Verbose logging", + count: true, + }) + .option("out", { + alias: "o", + describe: "Folder that assets and logs output to", + normalize: true, + }) + .option("help", { + alias: "h", + describe: "Show help", + help: true, + }).argv; // Kill all processes when exiting. process.on("exit", function () { @@ -34,4 +78,14 @@ process.on("SIGINT", function () { process.exit(2); }); -run(config_dir, config); +function createFolder(folderPath: string) { + if (fs.existsSync(folderPath)) { + // check if it is a directory + if (!fs.lstatSync(folderPath).isDirectory()) { + throw new Error(`\`${folderPath}\` exists but is not a folder.`); + } + } else { + // Create the output folder + fs.mkdirSync(folderPath, { recursive: true }); + } +} diff --git a/src/parachain.ts b/src/parachain.ts index 2aae1bc..2a1cb71 100644 --- a/src/parachain.ts +++ b/src/parachain.ts @@ -1,9 +1,9 @@ import { bnToHex, stringToHex, hexStripPrefix } from "@polkadot/util"; import { encodeAddress } from "@polkadot/util-crypto"; -export function parachainAccount(id: string) { +export function parachainAccount(id: number) { let prefix = stringToHex("para"); - let encoded_id = bnToHex(parseInt(id), { isLe: true }); + let encoded_id = bnToHex(id, { isLe: true }); let address_bytes = (prefix + hexStripPrefix(encoded_id)).padEnd(64 + 2, "0"); let address = encodeAddress(address_bytes); diff --git a/src/rpc.ts b/src/rpc.ts index 70a2883..0a910f4 100644 --- a/src/rpc.ts +++ b/src/rpc.ts @@ -7,7 +7,7 @@ const filterConsole = require("filter-console"); // Hide some warning messages that are coming from Polkadot JS API. // TODO: Make configurable. filterConsole([ - `code: '1006' reason: 'connection failed'`, + `1006:: connection failed`, `Unhandled promise rejections`, `UnhandledPromiseRejectionWarning:`, `Unknown types found`, @@ -15,11 +15,10 @@ filterConsole([ // Connect to a local Substrate node. This function wont resolve until connected. // TODO: Add a timeout where we know something went wrong so we don't wait forever. -export async function connect(port: number, types: any) { +export async function connect(port: number) { const provider = new WsProvider("ws://127.0.0.1:" + port); const api = await ApiPromise.create({ provider, - types, throwOnConnect: false, }); return api; diff --git a/src/runner.ts b/src/runner.ts index 59142b7..61be405 100644 --- a/src/runner.ts +++ b/src/runner.ts @@ -1,4 +1,11 @@ #!/usr/bin/env node +import path from "path"; +import process from "process"; +import fs from "fs"; +import { keys as libp2pKeys } from "libp2p-crypto"; +import { hexAddPrefix, hexStripPrefix, hexToU8a } from "@polkadot/util"; +import PeerId from "peer-id"; +import chalk from "chalk"; import { startNode, @@ -19,86 +26,98 @@ import { addGenesisParachain, addGenesisHrmpChannel, addBootNodes, + updateParachainGenesis, } from "./spec"; import { parachainAccount } from "./parachain"; import { ApiPromise } from "@polkadot/api"; import { randomAsHex } from "@polkadot/util-crypto"; - -import { resolve } from "path"; -import fs from "fs"; import type { LaunchConfig, + RunConfig, ResolvedParachainConfig, ResolvedSimpleParachainConfig, HrmpChannelsConfig, ResolvedLaunchConfig, + GenesisParachain, } from "./types"; -import { keys as libp2pKeys } from "libp2p-crypto"; -import { hexAddPrefix, hexStripPrefix, hexToU8a } from "@polkadot/util"; -import PeerId from "peer-id"; - -function loadTypeDef(types: string | object): object { - if (typeof types === "string") { - // Treat types as a json file path - try { - const rawdata = fs.readFileSync(types, { encoding: "utf-8" }); - return JSON.parse(rawdata); - } catch { - console.error("failed to load parachain typedef file"); - process.exit(1); - } - } else { - return types; - } -} // keep track of registered parachains let registeredParachains: { [key: string]: boolean } = {}; -export async function run(config_dir: string, rawConfig: LaunchConfig) { +export async function run( + configDir: string, + rawConfig: LaunchConfig, + runConfig: RunConfig +) { // We need to reset that variable when running a new network registeredParachains = {}; // Verify that the `config.json` has all the expected properties. if (!checkConfig(rawConfig)) { return; } - const config = await resolveParachainId(config_dir, rawConfig); + const config = await resolveParachainId(configDir, rawConfig, runConfig); var bootnodes = await generateNodeKeys(config); - const relay_chain_bin = resolve(config_dir, config.relaychain.bin); + // If `bin` is a relative path, the path is resolved from the config file location + const relay_chain_bin = path.resolve(configDir, config.relaychain.bin); if (!fs.existsSync(relay_chain_bin)) { console.error("Relay chain binary does not exist: ", relay_chain_bin); process.exit(); } - const chain = config.relaychain.chain; - await generateChainSpec(relay_chain_bin, chain); + const relayChainType = config.relaychain.chain; + const relayChainSpecPath = path.resolve( + runConfig.out, + `${relayChainType}.json` + ); + + await generateChainSpec( + relay_chain_bin, + relayChainType, + relayChainSpecPath, + runConfig + ); + // -- Start Chain Spec Modify -- - clearAuthorities(`${chain}.json`); + clearAuthorities(relayChainSpecPath); for (const node of config.relaychain.nodes) { - await addAuthority(`${chain}.json`, node.name); + await addAuthority(relayChainSpecPath, node.name); } + if (config.relaychain.genesis) { - await changeGenesisConfig(`${chain}.json`, config.relaychain.genesis); + await changeGenesisConfig(relayChainSpecPath, config.relaychain.genesis); } - await addParachainsToGenesis( - config_dir, - `${chain}.json`, + + const paraChainSpecRawPaths = await addParachainsToGenesis( + configDir, + relayChainSpecPath, config.parachains, - config.simpleParachains + config.simpleParachains, + runConfig ); + if (config.hrmpChannels) { - await addHrmpChannelsToGenesis(`${chain}.json`, config.hrmpChannels); + await addHrmpChannelsToGenesis(relayChainSpecPath, config.hrmpChannels); } - addBootNodes(`${chain}.json`, bootnodes); + + addBootNodes(relayChainSpecPath, bootnodes); + // -- End Chain Spec Modify -- - await generateChainSpecRaw(relay_chain_bin, chain); - const spec = resolve(`${chain}-raw.json`); + const relayChainSpecRawPath = path.resolve( + runConfig.out, + `${relayChainType}-raw.json` + ); + await generateChainSpecRaw( + relay_chain_bin, + { type: "path", chain: relayChainSpecPath }, + relayChainSpecRawPath, + runConfig + ); // First we launch each of the validators for the relay chain. for (const node of config.relaychain.nodes) { - const { name, wsPort, rpcPort, port, flags, basePath, nodeKey } = node; + const { name, wsPort, rpcPort, port, flags = [], basePath, nodeKey } = node; console.log( - `Starting Relaychain Node ${name}... wsPort: ${wsPort} rpcPort: ${rpcPort} port: ${port} nodeKey: ${nodeKey}` + `Starting a Relaychain Node ${name}... wsPort: ${wsPort}, rpcPort: ${rpcPort}, port: ${port}, nodeKey: ${nodeKey}` ); // We spawn a `child_process` starting a node, and then wait until we // able to connect to it using PolkadotJS in order to know its running. @@ -109,42 +128,47 @@ export async function run(config_dir: string, rawConfig: LaunchConfig) { rpcPort, port, nodeKey!, // by the time the control flow gets here it should be assigned. - spec, + relayChainSpecRawPath, flags, - basePath + basePath, + runConfig ); } // Connect to the first relay chain node to submit the extrinsic. let relayChainApi: ApiPromise = await connect( - config.relaychain.nodes[0].wsPort, - loadTypeDef(config.types) + config.relaychain.nodes[0].wsPort ); // Then launch each parachain for (const parachain of config.parachains) { - const { resolvedId, balance, chain: paraChain } = parachain; - - const bin = resolve(config_dir, parachain.bin); + const { id, resolvedId, balance } = parachain; + const bin = path.resolve(configDir, parachain.bin); if (!fs.existsSync(bin)) { console.error("Parachain binary does not exist: ", bin); process.exit(); } - let account = parachainAccount(resolvedId); - + const account = parachainAccount(resolvedId); for (const node of parachain.nodes) { const { wsPort, port, flags, name, basePath, rpcPort } = node; console.log( - `Starting a Collator for parachain ${resolvedId}: ${account}, Collator port : ${port} wsPort : ${wsPort} rpcPort : ${rpcPort}` + `Starting a Collator for Parachain ${resolvedId} (${account}) - wsPort: ${wsPort}, rpcPort: ${rpcPort}, port: ${port}` + ); + await startCollator( + bin, + wsPort, + rpcPort, + port, + { + name, + paraChainSpecRawPath: paraChainSpecRawPaths.get(resolvedId) as string, + relayChainSpecRawPath, + flags, + basePath, + onlyOneParachainNode: parachain.nodes.length === 1, + }, + runConfig ); - await startCollator(bin, wsPort, rpcPort, port, { - name, - spec, - flags, - chain: paraChain, - basePath, - onlyOneParachainNode: config.parachains.length === 1, - }); } // Allow time for the TX to complete, avoiding nonce issues. @@ -158,16 +182,25 @@ export async function run(config_dir: string, rawConfig: LaunchConfig) { if (config.simpleParachains) { for (const simpleParachain of config.simpleParachains) { const { id, resolvedId, port, balance } = simpleParachain; - const bin = resolve(config_dir, simpleParachain.bin); + const bin = path.resolve(configDir, simpleParachain.bin); if (!fs.existsSync(bin)) { console.error("Simple parachain binary does not exist: ", bin); process.exit(); } let account = parachainAccount(resolvedId); - console.log(`Starting Parachain ${resolvedId}: ${account}`); + console.log( + `Starting Simple Parachain ${resolvedId}: ${account} - port: ${port}` + ); const skipIdArg = !id; - await startSimpleCollator(bin, resolvedId, spec, port, skipIdArg); + await startSimpleCollator( + bin, + resolvedId, + "local", + port, + skipIdArg, + runConfig + ); // Allow time for the TX to complete, avoiding nonce issues. // TODO: Handle nonce directly instead of this. @@ -180,22 +213,18 @@ export async function run(config_dir: string, rawConfig: LaunchConfig) { // We don't need the PolkadotJs API anymore await relayChainApi.disconnect(); - console.log("๐Ÿš€ POLKADOT LAUNCH COMPLETE ๐Ÿš€"); -} - -interface GenesisParachain { - isSimple: boolean; - resolvedId: string; - chain?: string; - bin: string; + console.log( + `๐Ÿš€ === ${chalk.yellow.inverse.bold("POLKADOT LAUNCH COMPLETE")} === ๐Ÿš€` + ); } async function addParachainsToGenesis( - config_dir: string, + configDir: string, spec: string, parachains: ResolvedParachainConfig[], - simpleParachains: ResolvedSimpleParachainConfig[] -) { + simpleParachains: ResolvedSimpleParachainConfig[], + runConfig: RunConfig +): Promise> { console.log("\nโ›“ Adding Genesis Parachains"); // Collect all paras into a single list @@ -206,22 +235,54 @@ async function addParachainsToGenesis( return { isSimple: true, ...p }; }); let paras = x.concat(y); + let paraChainSpecRawPaths = new Map(); for (const parachain of paras) { - const { resolvedId, chain } = parachain; - const bin = resolve(config_dir, parachain.bin); + const { isSimple, id, resolvedId, protocolId, chain } = parachain; + const bin = path.resolve(configDir, parachain.bin); if (!fs.existsSync(bin)) { console.error("Parachain binary does not exist: ", bin); process.exit(); } // If it isn't registered yet, register the parachain in genesis if (!registeredParachains[resolvedId]) { + let paraChainSpecPath; + let paraChainSpecRawPath; + + if (!isSimple) { + // Build the genesis + paraChainSpecPath = path.resolve(runConfig.out, `${resolvedId}.json`); + paraChainSpecRawPath = path.resolve( + runConfig.out, + `${resolvedId}-raw.json` + ); + await generateChainSpec(bin, chain, paraChainSpecPath, runConfig); + // Need to read the generated spec file and update the paraID inside + await updateParachainGenesis(paraChainSpecPath, resolvedId, protocolId); + await generateChainSpecRaw( + bin, + { type: "path", chain: paraChainSpecPath }, + paraChainSpecRawPath, + runConfig + ); + } + // Get the information required to register the parachain in genesis. let genesisState: string; let genesisWasm: string; try { - genesisState = await exportGenesisState(bin, chain); - genesisWasm = await exportGenesisWasm(bin, chain); + // adder-collator does not support `--parachain-id` for export-genesis-state (and it is + // not necessary for it anyway), so we don't pass it here. + genesisState = await exportGenesisState( + bin, + paraChainSpecRawPath, + runConfig + ); + genesisWasm = await exportGenesisWasm( + bin, + paraChainSpecRawPath, + runConfig + ); } catch (err) { console.error(err); process.exit(1); @@ -234,9 +295,13 @@ async function addParachainsToGenesis( genesisWasm, true ); + + // Some data keeping registeredParachains[resolvedId] = true; + paraChainSpecRawPaths.set(resolvedId, paraChainSpecRawPath); } } + return paraChainSpecRawPaths; } async function addHrmpChannelsToGenesis( @@ -251,8 +316,9 @@ async function addHrmpChannelsToGenesis( // Resolves parachain id from chain spec if not specified async function resolveParachainId( - config_dir: string, - config: LaunchConfig + configDir: string, + config: LaunchConfig, + runConfig: RunConfig ): Promise { console.log(`\n๐Ÿงน Resolving parachain id...`); const resolvedConfig = config as ResolvedLaunchConfig; @@ -260,10 +326,15 @@ async function resolveParachainId( if (parachain.id) { parachain.resolvedId = parachain.id; } else { - const bin = resolve(config_dir, parachain.bin); - const paraId = await getParachainIdFromSpec(bin, parachain.chain); + const bin = path.resolve(configDir, parachain.bin); + const paraChainType = parachain.chain || "local"; + const paraId = await getParachainIdFromSpec( + bin, + paraChainType, + runConfig + ); console.log(` โœ“ Read parachain id for ${parachain.bin}: ${paraId}`); - parachain.resolvedId = paraId.toString(); + parachain.resolvedId = paraId; } } for (const parachain of resolvedConfig.simpleParachains) { diff --git a/src/spawn.ts b/src/spawn.ts index 1fc4f40..c4e6dc0 100644 --- a/src/spawn.ts +++ b/src/spawn.ts @@ -5,21 +5,26 @@ import { } from "child_process"; import util from "util"; import fs from "fs"; -import { CollatorOptions } from "./types"; +import path from "path"; +import chalk from "chalk"; +import { CollatorOptions, RunConfig } from "./types"; // This tracks all the processes that we spawn from this file. // Used to clean up processes when exiting this program. const p: { [key: string]: ChildProcessWithoutNullStreams } = {}; -const execFile = util.promisify(ex); - // Output the chainspec of a node. -export async function generateChainSpec(bin: string, chain: string) { +export async function generateChainSpec( + bin: string, + chainType: string | undefined | null, + outPath: string, + runConfig: RunConfig +) { return new Promise(function (resolve, reject) { - let args = ["build-spec", "--chain=" + chain, "--disable-default-bootnode"]; - - p["spec"] = spawn(bin, args); - let spec = fs.createWriteStream(`${chain}.json`); + let args = ["build-spec", "--disable-default-bootnode"]; + typeof chainType === "string" && args.push(`--chain=${chainType}`); + p["spec"] = spawnCmd(bin, args, runConfig.verbose); + let spec = fs.createWriteStream(path.resolve(outPath)); // `pipe` since it deals with flushing and we need to guarantee that the data is flushed // before we resolve the promise. @@ -38,15 +43,26 @@ export async function generateChainSpec(bin: string, chain: string) { } // Output the chainspec of a node using `--raw` from a JSON file. -export async function generateChainSpecRaw(bin: string, chain: string) { +interface GenerateChainSpecRawIn { + type: "path" | "chainType"; + chain: string; +} + +export async function generateChainSpecRaw( + bin: string, + chainIn: GenerateChainSpecRawIn, + chainOut: string, + runConfig: RunConfig +) { console.log(); // Add a newline in output return new Promise(function (resolve, reject) { - let args = ["build-spec", "--chain=" + chain + ".json", "--raw"]; - - p["spec"] = spawn(bin, args); - let spec = fs.createWriteStream(`${chain}-raw.json`); + const rsChainIn = + chainIn.type === "chainType" ? `${chainIn.chain}.json` : chainIn.chain; + let args = ["build-spec", `--chain=${rsChainIn}`, "--raw"]; + p["spec"] = spawnCmd(bin, args, runConfig.verbose); + let spec = fs.createWriteStream(chainOut); - // `pipe` since it deals with flushing and we need to guarantee that the data is flushed + // `pipe` since it deals with flushing and we need to guarantee that the data is flushed // before we resolve the promise. p["spec"].stdout.pipe(spec); p["spec"].stderr.pipe(process.stderr); @@ -63,7 +79,8 @@ export async function generateChainSpecRaw(bin: string, chain: string) { export async function getParachainIdFromSpec( bin: string, - chain?: string + chain: string, + runConfig: RunConfig ): Promise { const data = await new Promise(function (resolve, reject) { let args = ["build-spec"]; @@ -73,7 +90,7 @@ export async function getParachainIdFromSpec( let data = ""; - p["spec"] = spawn(bin, args); + p["spec"] = spawnCmd(bin, args, runConfig.verbose); p["spec"].stdout.on("data", (chunk) => { data += chunk; }); @@ -90,7 +107,7 @@ export async function getParachainIdFromSpec( }); const spec = JSON.parse(data); - + // Some parachains are still using snake_case format return spec.paraId || spec.para_id; } @@ -105,8 +122,9 @@ export function startNode( port: number, nodeKey: string, spec: string, - flags?: string[], - basePath?: string + flags: string[], + basePath: string | undefined, + runConfig: RunConfig ) { // TODO: Make DB directory configurable rather than just `tmp` let args = [ @@ -116,71 +134,59 @@ export function startNode( "--node-key=" + nodeKey, "--" + name.toLowerCase(), ]; - if (rpcPort) { - args.push("--rpc-port=" + rpcPort); - } - - if (basePath) { - args.push("--base-path=" + basePath); - } else { - args.push("--tmp"); - } + typeof rpcPort === "number" && args.push(`--rpc-port=${rpcPort}`); - if (flags) { - // Add any additional flags to the CLI - args = args.concat(flags); - console.log(`Added ${flags}`); - } + typeof basePath === "string" + ? args.push("--base-path=" + basePath) + : args.push("--tmp"); - p[name] = spawn(bin, args); + // Add any additional flags to the CLI + flags.length > 0 && (args = args.concat(flags)); - let log = fs.createWriteStream(`${name}.log`); + p[name] = spawnCmd(bin, args, runConfig.verbose); + const logPath = path.resolve(runConfig.out, "logs", `${name}.log`); + const log = fs.createWriteStream(logPath); p[name].stdout.pipe(log); p[name].stderr.pipe(log); } +async function execFile(file: string, args: Array, verbose: number) { + verbose > 0 && + console.debug(`Running: ${chalk.green(`${file} ${args.join(" ")}`)}`); + + // wasm files are typically large and `exec` requires us to supply the maximum buffer size in + // advance. Hopefully, this generous limit will be enough. + const opts = { maxBuffer: 10 * 1024 * 1024 }; + const execOut = await util.promisify(ex)(file, args, opts); + const stdout = execOut.stdout.toString().trim(); + const stderr = execOut.stderr.toString().trim(); + + stderr.length > 0 && console.error(stderr); + return stdout; +} + // Export the genesis wasm for a parachain and return it as a hex encoded string starting with 0x. // Used for registering the parachain on the relay chain. export async function exportGenesisWasm( bin: string, - chain?: string + chain: string | undefined, + runConfig: RunConfig ): Promise { - let args = ["export-genesis-wasm"]; - - if (chain) { - args.push("--chain=" + chain); - } - - // wasm files are typically large and `exec` requires us to supply the maximum buffer size in - // advance. Hopefully, this generous limit will be enough. - let opts = { maxBuffer: 10 * 1024 * 1024 }; - let { stdout, stderr } = await execFile(bin, args, opts); - if (stderr) { - console.error(stderr); - } - return stdout.trim(); + const args = ["export-genesis-wasm"]; + chain && args.push("--chain=" + chain); + return execFile(bin, args, runConfig.verbose); } /// Export the genesis state aka genesis head. export async function exportGenesisState( bin: string, - chain?: string + chain: string | undefined, + runConfig: RunConfig ): Promise { let args = ["export-genesis-state"]; - - if (chain) { - args.push("--chain=" + chain); - } - - // wasm files are typically large and `exec` requires us to supply the maximum buffer size in - // advance. Hopefully, this generous limit will be enough. - let opts = { maxBuffer: 5 * 1024 * 1024 }; - let { stdout, stderr } = await execFile(bin, args, opts); - if (stderr) { - console.error(stderr); - } - return stdout.trim(); + chain && args.push("--chain=" + chain); + return execFile(bin, args, runConfig.verbose); } // Start a collator node for a parachain. @@ -189,44 +195,35 @@ export function startCollator( wsPort: number, rpcPort: number | undefined, port: number, - options: CollatorOptions + options: CollatorOptions, + runConfig: RunConfig ) { return new Promise(function (resolve) { // TODO: Make DB directory configurable rather than just `tmp` - let args = ["--ws-port=" + wsPort, "--port=" + port]; - const { basePath, name, onlyOneParachainNode, flags, spec, chain } = - options; - - if (rpcPort) { - args.push("--rpc-port=" + rpcPort); - console.log(`Added --rpc-port=" + ${rpcPort}`); - } + let args = [`--ws-port=${wsPort}`, `--port=${port}`]; + const { + basePath, + name, + onlyOneParachainNode, + paraChainSpecRawPath, + relayChainSpecRawPath, + flags, + } = options; + + rpcPort && args.push("--rpc-port=" + rpcPort); args.push("--collator"); - - if (basePath) { - args.push("--base-path=" + basePath); - } else { - args.push("--tmp"); - } - - if (chain) { - args.push("--chain=" + chain); - } - - if (name) { - args.push(`--${name.toLowerCase()}`); - console.log(`Added --${name.toLowerCase()}`); - } - - if (onlyOneParachainNode) { - args.push("--force-authoring"); - console.log(`Added --force-authoring`); - } + args.push(basePath ? `--base-path=${basePath}` : "--tmp"); + name && args.push(`--${name.toLowerCase()}`); + onlyOneParachainNode && args.push("--force-authoring"); + paraChainSpecRawPath && args.push("--chain=" + paraChainSpecRawPath); let flags_collator = null; let flags_parachain = null; + // `flags` can be undefined or a string array let split_index = flags ? flags.findIndex((value) => value == "--") : -1; + // Logics for splitting flags into two parts: flags before the `--`, and those after that + // symbol. if (split_index < 0) { flags_parachain = flags; } else { @@ -234,24 +231,19 @@ export function startCollator( flags_collator = flags ? flags.slice(split_index + 1) : null; } - if (flags_parachain) { - // Add any additional flags to the CLI - args = args.concat(flags_parachain); - console.log(`Added ${flags_parachain} to parachain`); - } + // Add any additional flags to the CLI + flags_parachain && (args = args.concat(flags_parachain)); // Arguments for the relay chain node part of the collator binary. - args = args.concat(["--", "--chain=" + spec]); + args = args.concat(["--", `--chain=${relayChainSpecRawPath}`]); - if (flags_collator) { - // Add any additional flags to the CLI - args = args.concat(flags_collator); - console.log(`Added ${flags_collator} to collator`); - } + // Add any additional flags to the CLI + flags_collator && (args = args.concat(flags_collator)); - p[wsPort] = spawn(bin, args); + p[wsPort] = spawnCmd(bin, args, runConfig.verbose); - let log = fs.createWriteStream(`${wsPort}.log`); + const logPath = path.resolve(runConfig.out, "logs", `${wsPort}.log`); + const log = fs.createWriteStream(logPath); p[wsPort].stdout.pipe(log); p[wsPort].stderr.on("data", function (chunk) { @@ -266,27 +258,21 @@ export function startCollator( export function startSimpleCollator( bin: string, - id: string, - spec: string, + id: number, + chainType: string, port: string, - skip_id_arg?: boolean + skip_id_arg: boolean, + runConfig: RunConfig ) { return new Promise(function (resolve) { - let args = [ - "--tmp", - "--port=" + port, - "--chain=" + spec, - "--execution=wasm", - ]; - - if (!skip_id_arg) { - args.push("--parachain-id=" + id); - console.log(`Added --parachain-id=${id}`); - } + let args = ["--tmp", `--port=${port}`, "--execution=wasm"]; - p[port] = spawn(bin, args); + !skip_id_arg && args.push(`--parachain-id=${id}`); - let log = fs.createWriteStream(`${port}.log`); + p[port] = spawnCmd(bin, args, runConfig.verbose); + + const logPath = path.resolve(runConfig.out, "logs", `${port}.log`); + const log = fs.createWriteStream(logPath); p[port].stdout.pipe(log); p[port].stderr.on("data", function (chunk) { @@ -302,7 +288,7 @@ export function startSimpleCollator( // Purge the chain for any node. // You shouldn't need to use this function since every node starts with `--tmp` // TODO: Make DB directory configurable rather than just `tmp` -export function purgeChain(bin: string, spec: string) { +export function purgeChain(bin: string, spec: string, runConfig: RunConfig) { console.log("Purging Chain..."); let args = ["purge-chain"]; @@ -313,7 +299,7 @@ export function purgeChain(bin: string, spec: string) { // Avoid prompt to confirm. args.push("-y"); - p["purge"] = spawn(bin, args); + p["purge"] = spawnCmd(bin, args, runConfig.verbose); p["purge"].stdout.on("data", function (chunk) { let message = chunk.toString(); @@ -333,3 +319,9 @@ export function killAll() { p[key].kill(); } } + +function spawnCmd(cmd: string, args: Array, verbose: number) { + verbose > 0 && + console.debug(`Running: ${chalk.green(`${cmd} ${args.join(" ")}`)}`); + return spawn(cmd, args); +} diff --git a/src/spec.ts b/src/spec.ts index 90e5bda..dd3eb7b 100644 --- a/src/spec.ts +++ b/src/spec.ts @@ -23,7 +23,7 @@ function getAuthorityKeys(chainSpec: ChainSpec) { return runtimeConfig.palletSession.keys; } - console.error(" โš  session not found in runtimeConfig"); + console.error(" โš ๏ธ session not found in runtimeConfig"); process.exit(1); } @@ -34,7 +34,7 @@ export function clearAuthorities(spec: string) { try { chainSpec = JSON.parse(rawdata); } catch { - console.error(" โš  failed to parse the chain spec"); + console.error(" โš ๏ธ failed to parse the chain spec"); process.exit(1); } @@ -89,7 +89,7 @@ export async function addAuthority(spec: string, name: string) { // Add parachains to the chain spec at genesis. export async function addGenesisParachain( spec: string, - para_id: string, + para_id: number, head: string, wasm: string, parachain: boolean @@ -111,7 +111,7 @@ export async function addGenesisParachain( } if (paras) { let new_para = [ - parseInt(para_id), + para_id, { genesis_head: head, validation_code: wasm, @@ -124,9 +124,9 @@ export async function addGenesisParachain( let data = JSON.stringify(chainSpec, null, 2); fs.writeFileSync(spec, data); - console.log(` โœ“ Added Genesis Parachain ${para_id}`); + console.log(` โœ… Added Genesis Parachain ${para_id}`); } else { - console.error(" โš  paras not found in runtimeConfig"); + console.error(" โš ๏ธ paras not found in runtimeConfig"); process.exit(1); } } @@ -167,10 +167,10 @@ export async function addGenesisHrmpChannel( let data = JSON.stringify(chainSpec, null, 2); fs.writeFileSync(spec, data); console.log( - ` โœ“ Added HRMP channel ${hrmpChannel.sender} -> ${hrmpChannel.recipient}` + ` โœ… Added HRMP channel ${hrmpChannel.sender} -> ${hrmpChannel.recipient}` ); } else { - console.error(" โš  hrmp not found in runtimeConfig"); + console.error(" โš ๏ธ hrmp not found in runtimeConfig"); process.exit(1); } } @@ -181,7 +181,7 @@ export async function changeGenesisConfig(spec: string, updates: any) { let rawdata = fs.readFileSync(spec); let chainSpec = JSON.parse(rawdata); - console.log(`\nโš™ Updating Relay Chain Genesis Configuration`); + console.log(`\nโš™๏ธ Updating Relay Chain Genesis Configuration`); if (chainSpec.genesis) { let config = chainSpec.genesis; @@ -208,11 +208,11 @@ function findAndReplaceConfig(obj1: any, obj2: any) { } else { obj2[key] = obj1[key]; console.log( - ` โœ“ Updated Genesis Configuration [ ${key}: ${obj2[key]} ]` + ` โœ… Updated Genesis Configuration [ ${key}: ${obj2[key]} ]` ); } } else { - console.error(` โš  Bad Genesis Configuration [ ${key}: ${obj1[key]} ]`); + console.error(` โš ๏ธ Bad Genesis Configuration [ ${key}: ${obj1[key]} ]`); } }); } @@ -225,3 +225,31 @@ export async function addBootNodes(spec: any, addresses: any) { fs.writeFileSync(spec, data); console.log(`Added Boot Nodes: ${addresses}`); } + +export async function updateParachainGenesis( + specPath: string, + paraId: number, + protocolId?: string +) { + console.log(`specPath: ${specPath}, paraId: ${paraId}`); + let rawdata = fs.readFileSync(specPath); + let chainSpec = JSON.parse(rawdata); + + // Update the ParaId + chainSpec["para_id"] = paraId; + chainSpec.genesis.runtime.parachainInfo.parachainId = paraId; + + // Update the protocolId + if (protocolId) { + chainSpec["protocolId"] = protocolId; + } + + let data = JSON.stringify(chainSpec, null, 2); + fs.writeFileSync(specPath, data); + + const protocolIdPrompt = protocolId ? ` and protocolId: ${protocolId}` : ""; + + console.log( + `Updated Parachain Genesis for ParaId: ${paraId}${protocolIdPrompt}` + ); +} diff --git a/src/types.d.ts b/src/types.d.ts index 297601d..abd7862 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,20 +1,22 @@ export interface CollatorOptions { name?: string; - spec?: string; + relayChainSpecRawPath: string; + paraChainSpecRawPath: string; flags?: string[]; basePath?: string; - chain?: string; onlyOneParachainNode?: boolean; } - export interface LaunchConfig { relaychain: RelayChainConfig; parachains: ParachainConfig[]; simpleParachains: SimpleParachainConfig[]; hrmpChannels: HrmpChannelsConfig[]; - types: any; finalization: boolean; } +export interface RunConfig { + verbose: number; + out: string; +} export interface ParachainNodeConfig { rpcPort?: number; wsPort: number; @@ -25,14 +27,14 @@ export interface ParachainNodeConfig { } export interface ParachainConfig { bin: string; - id?: string; + id?: number; balance: string; chain?: string; nodes: ParachainNodeConfig[]; } export interface SimpleParachainConfig { bin: string; - id: string; + id: number; port: string; balance: string; } @@ -82,11 +84,20 @@ export interface ChainSpec { }; } +export interface GenesisParachain { + isSimple: boolean; + id?: number; + resolvedId: number; + chain?: string; + protocolId?: string; + bin: string; +} + export interface ResolvedParachainConfig extends ParachainConfig { - resolvedId: string; + resolvedId: number; } export interface ResolvedSimpleParachainConfig extends SimpleParachainConfig { - resolvedId: string; + resolvedId: number; } export interface ResolvedLaunchConfig extends LaunchConfig { parachains: ResolvedParachainConfig[]; diff --git a/test/test-utils/para-node.ts b/test/test-utils/para-node.ts index 89c06cd..3ccd019 100644 --- a/test/test-utils/para-node.ts +++ b/test/test-utils/para-node.ts @@ -152,7 +152,7 @@ export async function startParachainNodes(options: ParachainOptions): Promise<{ parachains: parachainArray.map((_, i) => { return { bin: BINARY_PATH, - id: (1000 * (i + 1)).toString(), + id: 1000 * (i + 1), balance: "1000000000000000000000", nodes: [ { @@ -200,7 +200,10 @@ export async function startParachainNodes(options: ParachainOptions): Promise<{ process.once("exit", onProcessExit); process.once("SIGINT", onProcessInterrupt); - await run(path.join(__dirname, "../"), launchConfig); + await run(path.join(__dirname, "../"), launchConfig, { + verbose: 0, + out: process.cwd(), + }); return { relayPorts: new Array(numberOfParachains + 1).fill(0).map((_, i) => { diff --git a/test/test-utils/setup-para-tests.ts b/test/test-utils/setup-para-tests.ts index b0d9793..fc2540a 100644 --- a/test/test-utils/setup-para-tests.ts +++ b/test/test-utils/setup-para-tests.ts @@ -55,7 +55,7 @@ export function describeParachain( // Making sure the Moonbeam node has started before("Starting Moonbeam Test Node", async function () { - this.timeout(300000); + this.timeout(180000); const init = !DEBUG_MODE ? await startParachainNodes(options) : { diff --git a/yarn.lock b/yarn.lock index 96cc70f..b0a15e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"@babel/runtime@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" - integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== +"@babel/runtime@^7.16.3", "@babel/runtime@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" + integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== dependencies: regenerator-runtime "^0.13.4" @@ -392,203 +392,218 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@noble/hashes@0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-0.4.1.tgz#ef8ef347cfb3a03692f16ed31fda717f8e78d392" - integrity sha512-Qxy9mZoDf5SyFrQ8hpWHeMZ2Scmb9BAz/lt23sKdr/QHnACW9dD6S+/WVJHd3R/BPoNHcUYWXoXXe74cxSEYoA== +"@noble/hashes@^0.4.5": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-0.4.5.tgz#f69a963b0c59c1145bc5aca1f3eef58a48bf9a59" + integrity sha512-oK/2b9gHb1CfiFwpPHQs010WgROn4ioilT7TFwxMVwuDaXEJP3QPhyedYbOpgM4JDBgT9n5gaispBQlkaAgT6g== + +"@noble/secp256k1@^1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.3.4.tgz#158ded712d09237c0d3428be60dc01ce8ebab9fb" + integrity sha512-ZVRouDO5mbdCiDg4zCd3ZZABduRtpy4tCnB33Gh9upHe9tRzpiqbRSN1VTjrj/2g8u2c6MBi0YLNnNQpBYOiWg== -"@polkadot/api-derive@6.10.3": - version "6.10.3" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-6.10.3.tgz#7f743129cb8d2de2a3a7b91468e761a2d6ee5a80" - integrity sha512-NBg3xi9n+QceCnRAimCa7pfXA2ONSa6LtKFpsXJns2AXhHjaAZr7H//VPztVvglZ23Vxpr7sq8ApeA/tgYm2zg== +"@polkadot/api-derive@6.12.1": + version "6.12.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-6.12.1.tgz#f5356104d4cb1bed8f0dcac32afc4b0a5c05c232" + integrity sha512-5LOVlG5EBCT+ytY6aHmQ4RdEWZovZQqRoc6DLd5BLhkR7BFTHKSkLQW+89so8jd0zEtmSXBVPPnsrXS8joM35Q== dependencies: "@babel/runtime" "^7.16.3" - "@polkadot/api" "6.10.3" - "@polkadot/rpc-core" "6.10.3" - "@polkadot/types" "6.10.3" - "@polkadot/util" "^8.0.4" - "@polkadot/util-crypto" "^8.0.4" + "@polkadot/api" "6.12.1" + "@polkadot/rpc-core" "6.12.1" + "@polkadot/types" "6.12.1" + "@polkadot/util" "^8.1.2" + "@polkadot/util-crypto" "^8.1.2" rxjs "^7.4.0" -"@polkadot/api@6.10.3", "@polkadot/api@^6.10.3": - version "6.10.3" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-6.10.3.tgz#e0b2e66df108f7dec7ab03f0a4e67695cff81501" - integrity sha512-ueduq+sR43PyFr3mzcfKZMrmVo9MBKCJGre3EUvH0XgLmao3GbH+LvJNpOCs5tqaD0eCiIX1SpxVDXHGe0GpWg== +"@polkadot/api@6.12.1", "@polkadot/api@^6.12.1": + version "6.12.1" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-6.12.1.tgz#685a2727eb532fdacd9b86f9ddf595d58be71ee4" + integrity sha512-RVdTiA2WaEvproM3i6E9TKS1bfXpPd9Ly9lUG/kVLaspjKoIot9DJUDTl97TJ+7xr8LXGbXqm448Ud0hsEBV8Q== dependencies: "@babel/runtime" "^7.16.3" - "@polkadot/api-derive" "6.10.3" - "@polkadot/keyring" "^8.0.4" - "@polkadot/rpc-core" "6.10.3" - "@polkadot/rpc-provider" "6.10.3" - "@polkadot/types" "6.10.3" - "@polkadot/types-known" "6.10.3" - "@polkadot/util" "^8.0.4" - "@polkadot/util-crypto" "^8.0.4" + "@polkadot/api-derive" "6.12.1" + "@polkadot/keyring" "^8.1.2" + "@polkadot/rpc-core" "6.12.1" + "@polkadot/rpc-provider" "6.12.1" + "@polkadot/types" "6.12.1" + "@polkadot/types-known" "6.12.1" + "@polkadot/util" "^8.1.2" + "@polkadot/util-crypto" "^8.1.2" eventemitter3 "^4.0.7" rxjs "^7.4.0" -"@polkadot/keyring@^8.0.4", "@polkadot/keyring@^8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-8.0.5.tgz#8ffae9fa5d828f51faee565705d43e38fd71c496" - integrity sha512-w1R7+V4uu2zQ6Xzxk/8Xj2XS6fpIKL5YtjAXa9luOR4vAgQH56ztJBKq5Yw4oW2E776oW9BtnyHk8yLyyuewYQ== +"@polkadot/keyring@^8.1.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-8.2.2.tgz#7c5abaca88e8fa1a16c90be8fe74c1813c28997c" + integrity sha512-GK8puQVtQJ67sVyq0WIWHPeRXfIcqz2ztgRHnGP4JEptS9NSFByQNq1EEpQnEUZwXu9CQfHz90eiLZc1BpC8lQ== dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/util" "8.0.5" - "@polkadot/util-crypto" "8.0.5" + "@babel/runtime" "^7.16.5" + "@polkadot/util" "8.2.2" + "@polkadot/util-crypto" "8.2.2" -"@polkadot/networks@8.0.5", "@polkadot/networks@^8.0.4": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-8.0.5.tgz#b33bd51523e1e16d0d6e75e10d8682c2386907eb" - integrity sha512-Zchr4PzXIH3PkSTK6ki3M+1jnxI+1kSYIhzasSZKx3MjAdXKV2kYOvN9MyUn1obi+OS47nYp54L9Z7n618Ipyg== +"@polkadot/networks@8.2.2", "@polkadot/networks@^8.1.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-8.2.2.tgz#75a0f4ffd13d790a0990cdb0ff0a251377104a46" + integrity sha512-PshHrf5wBXib63l03YISnHMf5/fS1/Jv2rEN58EgYy9VK87HBXjT7qQ1Ea/d1cFI2EmfEDvhFsP+u3i6AlejQQ== dependencies: - "@babel/runtime" "^7.16.3" + "@babel/runtime" "^7.16.5" -"@polkadot/rpc-core@6.10.3": - version "6.10.3" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-6.10.3.tgz#0348cd8daa64cf0061eff12fe94b8848190eece9" - integrity sha512-wJy2czDa4LP+4tGCzw1g5TSzScMVrCL6WVye36jgy2h1VazOM+xzMocUP6YFTq0FBg/4Z1NlxUM7gkvdF7KkNg== +"@polkadot/rpc-core@6.12.1": + version "6.12.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-6.12.1.tgz#b5d65589349a0db6edb25fdfd141707a3a5698fa" + integrity sha512-Hb08D9zho3SB1UNlUCmG5q0gdgbOx25JKGLDfSYpD/wtD0Y1Sf2X5cfgtMoSYE3USWiRdCu4BxQkXTiRjPjzJg== dependencies: "@babel/runtime" "^7.16.3" - "@polkadot/rpc-provider" "6.10.3" - "@polkadot/types" "6.10.3" - "@polkadot/util" "^8.0.4" + "@polkadot/rpc-provider" "6.12.1" + "@polkadot/types" "6.12.1" + "@polkadot/util" "^8.1.2" rxjs "^7.4.0" -"@polkadot/rpc-provider@6.10.3": - version "6.10.3" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-6.10.3.tgz#42fc5d4693620b5010c37d84cc2e494b3a1be29c" - integrity sha512-7z3t7byNoYoCN4jd/ul3lBEjmmHexVDUkhX90vkxzzTDT5uVbfwx8h6J2h3mp2LbVoLvjAo8V1Q+0OrN7c3zQA== +"@polkadot/rpc-provider@6.12.1": + version "6.12.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-6.12.1.tgz#1b5b7ceffefa8735010b61ace04f3eece6145622" + integrity sha512-uUHD3fLTOeZYWJoc6DQlhz+MJR33rVelasV+OxFY2nSD9MSNXRwQh+9UKDQBnyxw5B4BZ2QaEGfucDeavXmVDw== dependencies: "@babel/runtime" "^7.16.3" - "@polkadot/types" "6.10.3" - "@polkadot/util" "^8.0.4" - "@polkadot/util-crypto" "^8.0.4" - "@polkadot/x-fetch" "^8.0.4" - "@polkadot/x-global" "^8.0.4" - "@polkadot/x-ws" "^8.0.4" + "@polkadot/types" "6.12.1" + "@polkadot/util" "^8.1.2" + "@polkadot/util-crypto" "^8.1.2" + "@polkadot/x-fetch" "^8.1.2" + "@polkadot/x-global" "^8.1.2" + "@polkadot/x-ws" "^8.1.2" eventemitter3 "^4.0.7" -"@polkadot/types-known@6.10.3": - version "6.10.3" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-6.10.3.tgz#2700687fb369ac36b6d43075043fb23e63595709" - integrity sha512-AWZJ7zZQAeYQlmJxOgsIFIJZ0M50WyVTGGqfhPbvV3ioPTaKebxjcJEU8r35BfFS7LhLMsjGfqw/DF8m7lJ9Eg== +"@polkadot/types-known@6.12.1": + version "6.12.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-6.12.1.tgz#2dd3ca4e4aa20b86ef182eb75672690f8c14a84e" + integrity sha512-Z8bHpPQy+mqUm0uR1tai6ra0bQIoPmgRcGFYUM+rJtW1kx/6kZLh10HAICjLpPeA1cwLRzaxHRDqH5MCU6OgXw== dependencies: "@babel/runtime" "^7.16.3" - "@polkadot/networks" "^8.0.4" - "@polkadot/types" "6.10.3" - "@polkadot/util" "^8.0.4" + "@polkadot/networks" "^8.1.2" + "@polkadot/types" "6.12.1" + "@polkadot/util" "^8.1.2" -"@polkadot/types@6.10.3", "@polkadot/types@^6.10.3": - version "6.10.3" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-6.10.3.tgz#65f71909149f087c3dc523aa4dec4cb72f0f4052" - integrity sha512-HcgK9uqTaVjuTW20K+vMgOULURJjosKK2drbiXAxf/rrlGDJ29HCP4XhUI8x1Vp0ZAUt+V0LqMIfA9eTHBCr8w== +"@polkadot/types@6.12.1", "@polkadot/types@^6.12.1": + version "6.12.1" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-6.12.1.tgz#e5d6dff997740c3da947fa67abe2e1ec144c4757" + integrity sha512-O37cAGUL0xiXTuO3ySweVh0OuFUD6asrd0TfuzGsEp3jAISWdElEHV5QDiftWq8J9Vf8BMgTcP2QLFbmSusxqA== dependencies: "@babel/runtime" "^7.16.3" - "@polkadot/types-known" "6.10.3" - "@polkadot/util" "^8.0.4" - "@polkadot/util-crypto" "^8.0.4" + "@polkadot/types-known" "6.12.1" + "@polkadot/util" "^8.1.2" + "@polkadot/util-crypto" "^8.1.2" rxjs "^7.4.0" -"@polkadot/util-crypto@8.0.5", "@polkadot/util-crypto@^8.0.4", "@polkadot/util-crypto@^8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-8.0.5.tgz#7da94112e316a65057b12703cef87bb25acae193" - integrity sha512-G9R5ksqh9FMXKQyPgxuc5IbjoyMTEAvHj2CRUMGU0uA3n0yJ89s0vi0x0YtfwTlCbf3CQm0aMult/xkaoBfRUA== - dependencies: - "@babel/runtime" "^7.16.3" - "@noble/hashes" "0.4.1" - "@polkadot/networks" "8.0.5" - "@polkadot/util" "8.0.5" - "@polkadot/wasm-crypto" "^4.4.1" - "@polkadot/x-randomvalues" "8.0.5" - bn.js "^4.12.0" +"@polkadot/util-crypto@8.2.2", "@polkadot/util-crypto@^8.1.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-8.2.2.tgz#ccc5e5abec2431622dd5a2a885286633c2deb371" + integrity sha512-bKFE6j1q2Dnz1o1QFvhX2QzkMLi9QHU4a5T7+El5J7OsOxGqssMAVHAmB+YoAuSLqPSQBmZa9CN23IiuJnfsbw== + dependencies: + "@babel/runtime" "^7.16.5" + "@noble/hashes" "^0.4.5" + "@noble/secp256k1" "^1.3.4" + "@polkadot/networks" "8.2.2" + "@polkadot/util" "8.2.2" + "@polkadot/wasm-crypto" "^4.5.1" + "@polkadot/x-bigint" "8.2.2" + "@polkadot/x-randomvalues" "8.2.2" ed2curve "^0.3.0" - elliptic "^6.5.4" - micro-base "^0.9.0" + micro-base "^0.10.0" tweetnacl "^1.0.3" -"@polkadot/util@8.0.5", "@polkadot/util@^8.0.4", "@polkadot/util@^8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-8.0.5.tgz#35370a5480b4abc5a995f7bc2defa9b181051111" - integrity sha512-g21+po0sz1eeDItE8NPhFN7Ad9HFbmeVJZaw3o+T5WMZfxuC3QP1/ynLrv+YLs0HUF0l4jLZUjky0paLucLh6w== +"@polkadot/util@8.2.2", "@polkadot/util@^8.1.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-8.2.2.tgz#e3b30b90ade18032a28ac237dfa939adce43f2f4" + integrity sha512-tiHe0rcQvofd3vUVCRmvfULAv9yBG7s/huv1ZLVY/JGT1JBDonc1HWU3Vdb5MvWpx2R+HHv19ORHyD/LiROE9A== dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-textdecoder" "8.0.5" - "@polkadot/x-textencoder" "8.0.5" + "@babel/runtime" "^7.16.5" + "@polkadot/x-bigint" "8.2.2" + "@polkadot/x-global" "8.2.2" + "@polkadot/x-textdecoder" "8.2.2" + "@polkadot/x-textencoder" "8.2.2" "@types/bn.js" "^4.11.6" bn.js "^4.12.0" ip-regex "^4.3.0" -"@polkadot/wasm-crypto-asmjs@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.4.1.tgz#a9cee2343dffe7fc19003e78dcb09cfdce9c62a4" - integrity sha512-qeMQfybpLe04reBIyHx6GwyRl9jdQdTC/cdtuEdkRzljZ7/8rIY/rLCt6Hs6vo866E+w2p92swQLZGl0snEBWQ== +"@polkadot/wasm-crypto-asmjs@^4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.5.1.tgz#e1025a49e106db11d1187caf65f56c960ea2ad2b" + integrity sha512-DOdRiWhxVvmqTvp+E9z1j+Yr0zDOGsDvqnT/eNw0Dl1FVUOImsEa7FKns/urASmcxCVEE1jtUWSnij29jrORMQ== dependencies: "@babel/runtime" "^7.16.3" -"@polkadot/wasm-crypto-wasm@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.4.1.tgz#6c23fad9a9476b2c083564996fb1076f435c8887" - integrity sha512-FduItUfsNhkH8I4cQvBsowhw1KzcNdma96x+KDQYuB6iDUfQa+NpicuLZozhmVBDRQsmZkU90wWNiUjf126OXA== +"@polkadot/wasm-crypto-wasm@^4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.5.1.tgz#063a58ff7ddd939b7886a6a238109a8d2c416e46" + integrity sha512-hPwke85HxpgG/RAlwdCE8u5w7bThvWg399mlB+XjogXMxOUWBZSgq2XYbgzROUXx27inK9nStF4Pnc4zJnqs9A== dependencies: "@babel/runtime" "^7.16.3" -"@polkadot/wasm-crypto@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.4.1.tgz#728bf9d2f6ff8716fdc395b51d14e0dd16eb4236" - integrity sha512-AeOOuuh04QlkTgXswC+bUT/ftELki58JGu/buZondvCCsPLw9Eu2KloE03ElgX0GmDlPA/MRkEzjQp3fchfydQ== +"@polkadot/wasm-crypto@^4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.5.1.tgz#e1ac6d846a0ad8e991cec128994524183ef6e8fd" + integrity sha512-Cr21ais3Kq3aedIHZ3J1tjgeD/+K8FCiwEawr0oRywNBSJR8wyuZMePs4swR/6xm8wbBkpqoBVHz/UQHqqQJmA== dependencies: "@babel/runtime" "^7.16.3" - "@polkadot/wasm-crypto-asmjs" "^4.4.1" - "@polkadot/wasm-crypto-wasm" "^4.4.1" + "@polkadot/wasm-crypto-asmjs" "^4.5.1" + "@polkadot/wasm-crypto-wasm" "^4.5.1" -"@polkadot/x-fetch@^8.0.4": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-8.0.5.tgz#1318bdccf08aadb9966cfd228117fe7e1b0c8f18" - integrity sha512-nUFHVwO7VcN0c/crzDIy1VT4xyJA+8tgBCtghajvoBv5HwSFMwhAFkUrdVqz3hdBF7ye2IHg4hLYU90ol2MS1g== +"@polkadot/x-bigint@8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-8.2.2.tgz#24f4e1b889a1ee899ac9c98fee526e44e2130c14" + integrity sha512-fX3o3FhfQNxdpA5PV4L9PrjjSKG2ZmfFOfv3TrKwsDNtZMktDDcpmW3up53LJ53FszB/WHH6WwKsehmcqAYDIw== dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "8.0.5" + "@babel/runtime" "^7.16.5" + "@polkadot/x-global" "8.2.2" + +"@polkadot/x-fetch@^8.1.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-8.2.2.tgz#33cf2993fe93b9013302a8fdd328295a9eb8a3ae" + integrity sha512-ou8d1Ccf7lt7mssr64ixXYIWOZ4I4ED5sYBeFZg7BJB+MsZnuDOVvuMlItQWh01phMCOxtHWowmh+gOI4w5IWA== + dependencies: + "@babel/runtime" "^7.16.5" + "@polkadot/x-global" "8.2.2" "@types/node-fetch" "^2.5.12" node-fetch "^2.6.6" -"@polkadot/x-global@8.0.5", "@polkadot/x-global@^8.0.4": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-8.0.5.tgz#b4998ee0a0a30381d731e93e1c1776e7a7083394" - integrity sha512-xnJL76/pN9boTe8baPh8ta2IzLDnZ1YOtBnl82qNwIYAXm2Gr2YTxVWZgx8HYZbjNg6BVieTxluOEtJgfshN+g== +"@polkadot/x-global@8.2.2", "@polkadot/x-global@^8.1.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-8.2.2.tgz#0640ba4b52df445d50b0ae1aab08327a3dd2f08f" + integrity sha512-eTJ6edgoIKzjfdYN3Y6ZuJUGRAAc8Uc5X8r4/1QmhOy427QbfRKRL/cbcLat1XbyM52aplOvZf31KXTAkMREdQ== dependencies: - "@babel/runtime" "^7.16.3" + "@babel/runtime" "^7.16.5" -"@polkadot/x-randomvalues@8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-8.0.5.tgz#1668490404868c834c41991c2fee36097ef3d078" - integrity sha512-JBlienn+qwnUXdEPfJm73OgFNysdwjFKQxr7ZhXvxcjkj7yT0d+0aMMPDXmpFnx5vWmMNRx7DUr/MgDneEIIRw== +"@polkadot/x-randomvalues@8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-8.2.2.tgz#32eb424a642c19c8d7ce3be8713061a1a0003efd" + integrity sha512-v3dx0xvWHd5t6e41Fte63WFX/t1Fu9ug3tOr/QE6yMFrDSeDW9TzFJKklakc0tXryqW0cL4qZzUdSvguGC2TPA== dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "8.0.5" + "@babel/runtime" "^7.16.5" + "@polkadot/x-global" "8.2.2" -"@polkadot/x-textdecoder@8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-8.0.5.tgz#b275f9b9523639592e210d6011da01c7baebdeae" - integrity sha512-7HNfSmOro2+lOzQAb5GbNCtsNhTSw4IfiA05FpmsTHLH0J1ySzF7iEb5YwVYI0XAcNK4jPJ9G4sWwNor8RIKog== +"@polkadot/x-textdecoder@8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-8.2.2.tgz#e6b161ff3d1f8e55aac2de1bc855d1d2d482d6e3" + integrity sha512-HQ/pSl4FREnxK0V7nvEdTwI08Erh6KPLwHZ0rSfUJKVDZ+NwfeW4BW/8xCEJOQIRB948Dqerl0XjEn4xCA+OPg== dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "8.0.5" + "@babel/runtime" "^7.16.5" + "@polkadot/x-global" "8.2.2" -"@polkadot/x-textencoder@8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-8.0.5.tgz#ae712dfa7fbe03f3c465d182ce7fa7bc5da2f4b4" - integrity sha512-0pFXp4PYDohZHPDADqtGlEPL8AR3lrmczIFGvQ6RCdBZv6CsxUrH3rZp/7pJeDas4IA6mGgb28HAAEPO4jjFVw== +"@polkadot/x-textencoder@8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-8.2.2.tgz#b18c9360d7b311619cf91df4c2af67f0824498a4" + integrity sha512-ZAOwYi/y1wRYb3WoWZMDfYPrmbPSasog2uknt8p9u2WELrrfj4zF/fRnSuMjLUNtvJuKSzj4LUCKHwTY+peSrQ== dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "8.0.5" + "@babel/runtime" "^7.16.5" + "@polkadot/x-global" "8.2.2" -"@polkadot/x-ws@^8.0.4": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-8.0.5.tgz#2fd2e5bbff632a314baecf5b3e208419e553f4a0" - integrity sha512-rbg+AvChD32BrQN4N3IOLZRS91VNR9XkFRHcYseKjR4U00Z+eSuGzYV8WY9BAp65QSV1mKGDV+ZpI+fVtKRuFA== +"@polkadot/x-ws@^8.1.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-8.2.2.tgz#c05b21a433ce22ecee61383630fc9acd03dd3312" + integrity sha512-qsHzmtoFXIN59qKSkycxQ3GGyzUMlvhl+d7yU1NMaoOudJGfniTbIcDFPtee27Ydamb1DwBvkRbKw5IO8Domdg== dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "8.0.5" + "@babel/runtime" "^7.16.5" + "@polkadot/x-global" "8.2.2" "@types/websocket" "^1.0.4" websocket "^1.0.34" @@ -692,9 +707,9 @@ "@types/node" "*" "@types/chai@^4.2.22": - version "4.2.22" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.22.tgz#47020d7e4cf19194d43b5202f35f75bd2ad35ce7" - integrity sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" + integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== "@types/long@^4.0.1": version "4.0.1" @@ -714,16 +729,21 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>=13.7.0", "@types/node@^16.4.12": - version "16.11.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.11.tgz#6ea7342dfb379ea1210835bada87b3c512120234" - integrity sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw== +"@types/node@*", "@types/node@>=13.7.0": + version "17.0.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.1.tgz#88d501e84b6185f6489ecee4ba9e8fcec7f29bb2" + integrity sha512-NXKvBVUzIbs6ylBwmOwHFkZS2EXCcjnqr8ZCRNaXBkHAf+3mn/rPcJxwrzuc6movh8fxQAsUUfYklJ/EG+hZqQ== "@types/node@^12.12.6": version "12.20.37" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed" integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== +"@types/node@^16.4.12": + version "16.11.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.14.tgz#4939fb42e5b0ffb3ea7e193c28244fe7414977a6" + integrity sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw== + "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -750,6 +770,18 @@ dependencies: "@types/node" "*" +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + +"@types/yargs@^17.0.7": + version "17.0.7" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.7.tgz#44a484c634761da4391477515a98772b82b5060f" + integrity sha512-OvLKmpKdea1aWtqHv9bxVVcMoT6syAeK+198dfETIFkAevYRGwqh4H+KFxfjUETZuUuE5sQCAFwdOdoHUdo8eg== + dependencies: + "@types/yargs-parser" "*" + "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" @@ -910,9 +942,9 @@ bech32@1.1.4: integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== bignumber.js@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" - integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== binary-extensions@^2.0.0: version "2.2.0" @@ -951,21 +983,21 @@ bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== -body-parser@1.19.0, body-parser@^1.16.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +body-parser@1.19.1, body-parser@^1.16.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" + integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== dependencies: - bytes "3.1.0" + bytes "3.1.1" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" - http-errors "1.7.2" + http-errors "1.8.1" iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" + qs "6.9.6" + raw-body "2.4.2" + type-is "~1.6.18" brace-expansion@^1.1.7: version "1.1.11" @@ -1087,10 +1119,10 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.3.0" -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" + integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg== cacheable-request@^6.0.0: version "6.1.0" @@ -1113,11 +1145,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - camelcase@^6.0.0: version "6.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" @@ -1140,7 +1167,7 @@ chai@^4.3.4: pathval "^1.1.1" type-detect "^4.0.5" -chalk@^4.1.0: +chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1197,15 +1224,6 @@ class-is@^1.1.0: resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -1246,12 +1264,12 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - safe-buffer "5.1.2" + safe-buffer "5.2.1" content-hash@^2.5.2: version "2.5.2" @@ -1272,10 +1290,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== cookiejar@^2.1.1: version "2.1.3" @@ -1392,11 +1410,6 @@ debug@4.3.2: dependencies: ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" @@ -1510,7 +1523,7 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -1767,16 +1780,16 @@ exit-on-epipe@~1.0.1: integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== express@^4.14.0: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + version "4.17.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" + integrity sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg== dependencies: accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.19.1" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.0" + cookie "0.4.1" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" @@ -1790,13 +1803,13 @@ express@^4.14.0: on-finished "~2.3.0" parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + proxy-addr "~2.0.7" + qs "6.9.6" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" + safe-buffer "5.2.1" + send "0.17.2" + serve-static "1.14.2" + setprototypeof "1.2.0" statuses "~1.5.0" type-is "~1.6.18" utils-merge "1.0.1" @@ -1872,14 +1885,6 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -1954,7 +1959,7 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -2171,27 +2176,16 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== dependencies: depd "~1.1.2" inherits "2.0.4" - setprototypeof "1.1.1" + setprototypeof "1.2.0" statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + toidentifier "1.0.1" http-https@^1.0.0: version "1.0.0" @@ -2239,11 +2233,6 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -2340,9 +2329,9 @@ is-hex-prefixed@1.0.0: integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.6" @@ -2435,11 +2424,11 @@ is-url@^1.2.4: integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== is-weakref@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" - integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" is2@^2.0.6: version "2.0.7" @@ -2456,9 +2445,9 @@ isexe@^2.0.0: integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= iso-random-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/iso-random-stream/-/iso-random-stream-2.0.1.tgz#277c0f773768411be0853a2445345e918ed8b38b" - integrity sha512-3zQF5p7x4PNU1nrnsl3JfHsVwPaVhqPB/t86rMNJ8RDWBJ65EBlFq+eoZC9RDaa7zdinCOjWYVhTcxQsmMpMew== + version "2.0.2" + resolved "https://registry.yarnpkg.com/iso-random-stream/-/iso-random-stream-2.0.2.tgz#a24f77c34cfdad9d398707d522a6a0cc640ff27d" + integrity sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ== dependencies: events "^3.3.0" readable-stream "^3.4.0" @@ -2573,13 +2562,6 @@ libp2p-crypto@^0.20.0: uint8arrays "^3.0.0" ursa-optional "^0.10.1" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -2639,10 +2621,10 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micro-base@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/micro-base/-/micro-base-0.9.0.tgz#09cfe20285bec0ea97f41dc3d10e3fba3d0266ee" - integrity sha512-4+tOMKidYT5nQ6/UNmYrGVO5PMcnJdfuR4NC8HK8s2H61B4itOhA9yrsjBdqGV7ecdtej36x3YSIfPLRmPrspg== +micro-base@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/micro-base/-/micro-base-0.10.0.tgz#2a324c7836920b2cbca674f46d0644b7e56e4012" + integrity sha512-huKVznyEDZVO7pcYoVZMBR6prkxzkJSTT96T2tyHY1Wk3Sywcpb7NwxHAwKf/fmfqsdFuY2rDRR3UYkY6Uh9LQ== miller-rabin@^4.0.0: version "4.0.1" @@ -2777,11 +2759,6 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -2824,9 +2801,9 @@ multicodec@^1.0.0: varint "^5.0.0" multiformats@^9.4.2, multiformats@^9.4.5: - version "9.5.2" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.5.2.tgz#14256e49bac8b6a5ecb558c4d3c347bb94873d65" - integrity sha512-nLQ9s7YOVtZdeNOVvCkNyFiZdS3wyq0gvCIvdm7Zy1zw3zBoColJKjMkIPXNdTqT7ruuq+G7HrezIN0cXiAZ0w== + version "9.5.4" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.5.4.tgz#bf60eee834f7bcbd3a61b1c61d7e8d6b158a0f63" + integrity sha512-MFT8e8BOLX7OZKfSBGm13FwYvJVI6MEcZ7hujUCpyJwvYyrC1anul50A0Ee74GdeJ77aYTO6YU1vO+oF8NqSIw== multihashes@^0.4.15, multihashes@~0.4.15: version "0.4.21" @@ -2923,9 +2900,9 @@ object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -2978,13 +2955,6 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -2992,13 +2962,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -3013,11 +2976,6 @@ p-timeout@^1.1.1: dependencies: p-finally "^1.0.0" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" @@ -3110,9 +3068,9 @@ prepend-http@^2.0.0: integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= prettier@^2.4.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.0.tgz#a6370e2d4594e093270419d9cc47f7670488f893" - integrity sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg== + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== printj@~1.1.0: version "1.1.2" @@ -3143,7 +3101,7 @@ protobufjs@^6.10.2, protobufjs@^6.11.2: "@types/node" ">=13.7.0" long "^4.0.0" -proxy-addr@~2.0.5: +proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== @@ -3186,10 +3144,10 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@6.9.6: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== qs@~6.5.2: version "6.5.2" @@ -3225,13 +3183,13 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== +raw-body@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" + integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ== dependencies: - bytes "3.1.0" - http-errors "1.7.2" + bytes "3.1.1" + http-errors "1.8.1" iconv-lite "0.4.24" unpipe "1.0.0" @@ -3287,11 +3245,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -3321,16 +3274,16 @@ rxjs@^7.4.0: dependencies: tslib "~2.1.0" -safe-buffer@5.1.2, safe-buffer@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -3350,10 +3303,10 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== dependencies: debug "2.6.9" depd "~1.1.2" @@ -3362,9 +3315,9 @@ send@0.17.1: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "1.8.1" mime "1.6.0" - ms "2.1.1" + ms "2.1.3" on-finished "~2.3.0" range-parser "~1.2.1" statuses "~1.5.0" @@ -3376,15 +3329,15 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.17.2" servify@^0.1.12: version "0.1.12" @@ -3397,20 +3350,15 @@ servify@^0.1.12: request "^2.79.0" xhr "^2.3.3" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" @@ -3468,7 +3416,7 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3588,10 +3536,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@~2.5.0: version "2.5.0" @@ -3606,7 +3554,7 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -ts-node@^10.3.0: +ts-node@^10.4.0: version "10.4.0" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== @@ -3651,7 +3599,7 @@ type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-is@~1.6.17, type-is@~1.6.18: +type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -3677,9 +3625,9 @@ typedarray-to-buffer@^3.1.5: is-typedarray "^1.0.0" typescript@^4.1.5: - version "4.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998" - integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== + version "4.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" + integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== uint8arrays@^3.0.0: version "3.0.0" @@ -4079,11 +4027,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - which-typed-array@^1.1.2: version "1.1.7" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" @@ -4108,15 +4051,6 @@ workerpool@6.1.5: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw== -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -4187,11 +4121,6 @@ xtend@^4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -4212,19 +4141,16 @@ yargs-parser@20.2.4: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" + integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== + yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -4248,22 +4174,18 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== +yargs@^17.3.0: + version "17.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.0.tgz#295c4ffd0eef148ef3e48f7a2e0f58d0e4f26b1c" + integrity sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew== dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" yn@3.1.1: version "3.1.1"