diff --git a/.eslintrc.cjs b/.eslintrc.cjs index dd805c6..fcb79ca 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,24 +1,24 @@ /* eslint-env node */ module.exports = { - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"], parserOptions: { - project: ['./tsconfig.json'] + project: ["./tsconfig.json"] }, - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], root: true, rules: { - '@typescript-eslint/no-var-requires': 'off', - 'no-undef': 'off', - '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-explicit-any': 'off', - 'prefer-const': 'off', - '@typescript-eslint/ban-types': 'off', - 'no-empty': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/no-floating-promises': 'off', - 'prettier/prettier': 'error' + "@typescript-eslint/no-var-requires": "off", + "no-undef": "off", + "@typescript-eslint/no-non-null-asserted-optional-chain": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-explicit-any": "off", + "prefer-const": "off", + "@typescript-eslint/ban-types": "off", + "no-empty": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-floating-promises": "off", + "prettier/prettier": "off" } }; diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..a00eeef --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e43887a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 0000000..0c83ac4 --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/wallet-sdk.iml b/.idea/wallet-sdk.iml new file mode 100644 index 0000000..62e2245 --- /dev/null +++ b/.idea/wallet-sdk.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 2ad9c6e..675d842 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,6 +1,6 @@ { "printWidth": 120, - "tabWidth": 2, + "tabWidth": 4, "singleQuote": true, "useTabs": false, "semi": true, @@ -10,5 +10,11 @@ "jsxBracketSameLine": true, "arrowParens": "always", "requirePragma": false, - "insertPragma": false + "insertPragma": false, + "importOrder": [ + "^@formily/(.*)", + "^@(.*)$", + "^[./]" + ], + "importOrderSeparation": true } diff --git a/package.json b/package.json index e4dbbb3..6621f1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@unisat/wallet-sdk", - "version": "1.7.1", + "version": "1.7.2", "description": "UniSat Wallet SDK", "keywords": [ "bitcoin", @@ -34,13 +34,14 @@ "lint": "eslint ./src ./test" }, "dependencies": { - "@bitcoinerlab/secp256k1": "^1.0.5", + "@bitcoinerlab/secp256k1": "^1.1.1", "@keystonehq/keystone-sdk": "^0.3.0", "big-integer": "^1.6.52", "bignumber.js": "^9.1.2", + "bip-schnorr": "^0.6.7", "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.6", - "bitcore-lib": "^10.0.0", + "bitcore-lib": "^10.2.1", "ecpair": "^2.1.0", "hdkey": "^2.1.0", "tiny-secp256k1": "=2.2.1" @@ -50,7 +51,9 @@ "@babel/plugin-transform-runtime": "^7.16.5", "@babel/preset-env": "^7.16.5", "@babel/preset-typescript": "^7.16.5", + "@types/bitcore-lib": "^0.15.6", "@types/chai": "^4.2.20", + "@types/hdkey": "^2.0.3", "@types/mocha": "^8.2.2", "@types/node": "^16.11.10", "@typescript-eslint/eslint-plugin": "^5.59.1", @@ -70,7 +73,7 @@ "gulp-babel": "^8.0.0", "gulp-typescript": "*", "https-browserify": "^1.0.0", - "mocha": "^9.0.2", + "mocha": "10.1.0", "prettier": "^3.2.5", "stream-browserify": "^3.0.0", "stream-http": "^3.2.0", diff --git a/src/address/index.ts b/src/address/index.ts index 81c1eff..1b5a439 100644 --- a/src/address/index.ts +++ b/src/address/index.ts @@ -1,169 +1,170 @@ -import { bitcoin } from '../bitcoin-core'; import { NetworkType, toPsbtNetwork } from '../network'; import { AddressType } from '../types'; +import * as bitcoin from 'bitcoinjs-lib'; +import { payments } from 'bitcoinjs-lib'; /** * Convert public key to bitcoin payment object. */ export function publicKeyToPayment(publicKey: string, type: AddressType, networkType: NetworkType) { - const network = toPsbtNetwork(networkType); - if (!publicKey) return null; - const pubkey = Buffer.from(publicKey, 'hex'); - if (type === AddressType.P2PKH) { - return bitcoin.payments.p2pkh({ - pubkey, - network - }); - } else if (type === AddressType.P2WPKH || type === AddressType.M44_P2WPKH) { - return bitcoin.payments.p2wpkh({ - pubkey, - network - }); - } else if (type === AddressType.P2TR || type === AddressType.M44_P2TR) { - return bitcoin.payments.p2tr({ - internalPubkey: pubkey.slice(1, 33), - network - }); - } else if (type === AddressType.P2SH_P2WPKH) { - const data = bitcoin.payments.p2wpkh({ - pubkey, - network - }); - return bitcoin.payments.p2sh({ - pubkey, - network, - redeem: data - }); - } + const network = toPsbtNetwork(networkType); + if (!publicKey) return null; + const pubkey = Buffer.from(publicKey, 'hex'); + if (type === AddressType.P2PKH) { + return payments.p2pkh({ + pubkey, + network + }); + } else if (type === AddressType.P2WPKH || type === AddressType.M44_P2WPKH) { + return payments.p2wpkh({ + pubkey, + network + }); + } else if (type === AddressType.P2TR || type === AddressType.M44_P2TR) { + return payments.p2tr({ + internalPubkey: pubkey.slice(1, 33), + network + }); + } else if (type === AddressType.P2SH_P2WPKH) { + const data = payments.p2wpkh({ + pubkey, + network + }); + return payments.p2sh({ + pubkey, + network, + redeem: data + }); + } } /** * Convert public key to bitcoin address. */ export function publicKeyToAddress(publicKey: string, type: AddressType, networkType: NetworkType) { - const payment = publicKeyToPayment(publicKey, type, networkType); - if (payment && payment.address) { - return payment.address; - } else { - return ''; - } + const payment = publicKeyToPayment(publicKey, type, networkType); + if (payment && payment.address) { + return payment.address; + } else { + return ''; + } } /** * Convert public key to bitcoin scriptPk. */ export function publicKeyToScriptPk(publicKey: string, type: AddressType, networkType: NetworkType) { - const payment = publicKeyToPayment(publicKey, type, networkType); - return payment.output.toString('hex'); + const payment = publicKeyToPayment(publicKey, type, networkType); + return payment.output.toString('hex'); } /** * Convert bitcoin address to scriptPk. */ export function addressToScriptPk(address: string, networkType: NetworkType) { - const network = toPsbtNetwork(networkType); - return bitcoin.address.toOutputScript(address, network); + const network = toPsbtNetwork(networkType); + return bitcoin.address.toOutputScript(address, network); } /** * Check if the address is valid. */ export function isValidAddress(address: string, networkType: NetworkType = NetworkType.MAINNET) { - let error; - try { - bitcoin.address.toOutputScript(address, toPsbtNetwork(networkType)); - } catch (e) { - error = e; - } - if (error) { - return false; - } else { - return true; - } + let error; + try { + bitcoin.address.toOutputScript(address, toPsbtNetwork(networkType)); + } catch (e) { + error = e; + } + if (error) { + return false; + } else { + return true; + } } export function decodeAddress(address: string) { - const mainnet = bitcoin.networks.bitcoin; - const testnet = bitcoin.networks.testnet; - const regtest = bitcoin.networks.regtest; - let decodeBase58: bitcoin.address.Base58CheckResult; - let decodeBech32: bitcoin.address.Bech32Result; - let networkType: NetworkType; - let addressType: AddressType; - if (address.startsWith('bc1') || address.startsWith('tb1') || address.startsWith('bcrt1')) { - try { - decodeBech32 = bitcoin.address.fromBech32(address); - if (decodeBech32.prefix === mainnet.bech32) { - networkType = NetworkType.MAINNET; - } else if (decodeBech32.prefix === testnet.bech32) { - networkType = NetworkType.TESTNET; - } else if (decodeBech32.prefix === regtest.bech32) { - networkType = NetworkType.REGTEST; - } - if (decodeBech32.version === 0) { - if (decodeBech32.data.length === 20) { - addressType = AddressType.P2WPKH; - } else if (decodeBech32.data.length === 32) { - addressType = AddressType.P2WSH; - } - } else if (decodeBech32.version === 1) { - if (decodeBech32.data.length === 32) { - addressType = AddressType.P2TR; - } - } - return { - networkType, - addressType, - dust: getAddressTypeDust(addressType) - }; - } catch (e) {} - } else { - try { - decodeBase58 = bitcoin.address.fromBase58Check(address); - if (decodeBase58.version === mainnet.pubKeyHash) { - networkType = NetworkType.MAINNET; - addressType = AddressType.P2PKH; - } else if (decodeBase58.version === testnet.pubKeyHash) { - networkType = NetworkType.TESTNET; - addressType = AddressType.P2PKH; - } else if (decodeBase58.version === regtest.pubKeyHash) { - // do not work - networkType = NetworkType.REGTEST; - addressType = AddressType.P2PKH; - } else if (decodeBase58.version === mainnet.scriptHash) { - networkType = NetworkType.MAINNET; - addressType = AddressType.P2SH_P2WPKH; - } else if (decodeBase58.version === testnet.scriptHash) { - networkType = NetworkType.TESTNET; - addressType = AddressType.P2SH_P2WPKH; - } else if (decodeBase58.version === regtest.scriptHash) { - // do not work - networkType = NetworkType.REGTEST; - addressType = AddressType.P2SH_P2WPKH; - } - return { - networkType, - addressType, - dust: getAddressTypeDust(addressType) - }; - } catch (e) {} - } + const mainnet = bitcoin.networks.bitcoin; + const testnet = bitcoin.networks.testnet; + const regtest = bitcoin.networks.regtest; + let decodeBase58: bitcoin.address.Base58CheckResult; + let decodeBech32: bitcoin.address.Bech32Result; + let networkType: NetworkType; + let addressType: AddressType; + if (address.startsWith('bc1') || address.startsWith('tb1') || address.startsWith('bcrt1')) { + try { + decodeBech32 = bitcoin.address.fromBech32(address); + if (decodeBech32.prefix === mainnet.bech32) { + networkType = NetworkType.MAINNET; + } else if (decodeBech32.prefix === testnet.bech32) { + networkType = NetworkType.TESTNET; + } else if (decodeBech32.prefix === regtest.bech32) { + networkType = NetworkType.REGTEST; + } + if (decodeBech32.version === 0) { + if (decodeBech32.data.length === 20) { + addressType = AddressType.P2WPKH; + } else if (decodeBech32.data.length === 32) { + addressType = AddressType.P2WSH; + } + } else if (decodeBech32.version === 1) { + if (decodeBech32.data.length === 32) { + addressType = AddressType.P2TR; + } + } + return { + networkType, + addressType, + dust: getAddressTypeDust(addressType) + }; + } catch (e) {} + } else { + try { + decodeBase58 = bitcoin.address.fromBase58Check(address); + if (decodeBase58.version === mainnet.pubKeyHash) { + networkType = NetworkType.MAINNET; + addressType = AddressType.P2PKH; + } else if (decodeBase58.version === testnet.pubKeyHash) { + networkType = NetworkType.TESTNET; + addressType = AddressType.P2PKH; + } else if (decodeBase58.version === regtest.pubKeyHash) { + // do not work + networkType = NetworkType.REGTEST; + addressType = AddressType.P2PKH; + } else if (decodeBase58.version === mainnet.scriptHash) { + networkType = NetworkType.MAINNET; + addressType = AddressType.P2SH_P2WPKH; + } else if (decodeBase58.version === testnet.scriptHash) { + networkType = NetworkType.TESTNET; + addressType = AddressType.P2SH_P2WPKH; + } else if (decodeBase58.version === regtest.scriptHash) { + // do not work + networkType = NetworkType.REGTEST; + addressType = AddressType.P2SH_P2WPKH; + } + return { + networkType, + addressType, + dust: getAddressTypeDust(addressType) + }; + } catch (e) {} + } - return { - networkType: NetworkType.MAINNET, - addressType: AddressType.UNKNOWN, - dust: 546 - }; + return { + networkType: NetworkType.MAINNET, + addressType: AddressType.UNKNOWN, + dust: 546 + }; } function getAddressTypeDust(addressType: AddressType) { - if (addressType === AddressType.P2WPKH || addressType === AddressType.M44_P2WPKH) { - return 294; - } else if (addressType === AddressType.P2TR || addressType === AddressType.M44_P2TR) { - return 330; - } else { - return 546; - } + if (addressType === AddressType.P2WPKH || addressType === AddressType.M44_P2WPKH) { + return 294; + } else if (addressType === AddressType.P2TR || addressType === AddressType.M44_P2TR) { + return 330; + } else { + return 546; + } } /** @@ -171,21 +172,21 @@ function getAddressTypeDust(addressType: AddressType) { */ // eslint-disable-next-line @typescript-eslint/no-unused-vars export function getAddressType(address: string, networkType: NetworkType = NetworkType.MAINNET): AddressType { - return decodeAddress(address).addressType; + return decodeAddress(address).addressType; } /** * Convert scriptPk to address. */ export function scriptPkToAddress(scriptPk: string | Buffer, networkType: NetworkType = NetworkType.MAINNET) { - const network = toPsbtNetwork(networkType); - try { - const address = bitcoin.address.fromOutputScript( - typeof scriptPk === 'string' ? Buffer.from(scriptPk, 'hex') : scriptPk, - network - ); - return address; - } catch (e) { - return ''; - } + const network = toPsbtNetwork(networkType); + try { + const address = bitcoin.address.fromOutputScript( + typeof scriptPk === 'string' ? Buffer.from(scriptPk, 'hex') : scriptPk, + network + ); + return address; + } catch (e) { + return ''; + } } diff --git a/src/bitcoin-core.ts b/src/bitcoin-core.ts index 12964e2..ae39430 100644 --- a/src/bitcoin-core.ts +++ b/src/bitcoin-core.ts @@ -1,8 +1,10 @@ -// import ecc from "@bitcoinerlab/secp256k1"; -import * as bitcoin from 'bitcoinjs-lib'; import ECPairFactory from 'ecpair'; -import * as ecc from 'tiny-secp256k1'; -bitcoin.initEccLib(ecc); -const ECPair = ECPairFactory(ecc); +import * as ecc from '@bitcoinerlab/secp256k1'; +import * as bitcoin from 'bitcoinjs-lib'; +import { initEccLib } from 'bitcoinjs-lib'; + +initEccLib(ecc); + +export const ECPair = ECPairFactory(ecc); export { ECPairInterface } from 'ecpair'; -export { ECPair, bitcoin, ecc }; +export { ecc, bitcoin }; diff --git a/src/index.ts b/src/index.ts index 6584865..5ece882 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,10 @@ +Object.defineProperty(global, '_bitcore', { + get() { + return undefined; + }, + set() {} +}); + export * as address from './address'; export * as core from './bitcoin-core'; export * from './constants'; @@ -8,3 +15,9 @@ export * as txHelpers from './tx-helpers'; export * from './types'; export * as utils from './utils'; export * as wallet from './wallet'; + +// Export with types. +export * from './keyring/interfaces/SimpleKeyringOptions'; +export * from './keyring/hd-keyring'; +export * from './keyring/keystone-keyring'; +export * from './keyring/simple-keyring'; diff --git a/src/keyring/hd-keyring.ts b/src/keyring/hd-keyring.ts index db7bb40..5fc0883 100644 --- a/src/keyring/hd-keyring.ts +++ b/src/keyring/hd-keyring.ts @@ -1,247 +1,241 @@ import * as bip39 from 'bip39'; import bitcore from 'bitcore-lib'; -import * as hdkey from 'hdkey'; -import { ECPair, ECPairInterface, bitcoin } from '../bitcoin-core'; -import { SimpleKeyring } from './simple-keyring'; +import hdkey from 'hdkey'; +import { ECPair, ECPairInterface } from '../bitcoin-core'; +import { DeserializeOption, IKeyringBase } from './interfaces/SimpleKeyringOptions'; +import { networks } from 'bitcoinjs-lib'; const hdPathString = "m/44'/0'/0'/0"; const type = 'HD Key Tree'; -interface DeserializeOption { - hdPath?: string; - mnemonic?: string; - xpriv?: string; - activeIndexes?: number[]; - passphrase?: string; -} +export class HdKeyring extends IKeyringBase { + static type = type; + + type = type; + mnemonic: string = null; + xpriv: string = null; + passphrase: string; + + hdPath = hdPathString; + root: bitcore.HDPrivateKey = null; + hdWallet?: any; + wallets: ECPairInterface[] = []; + activeIndexes: number[] = []; + page = 0; + perPage = 5; -export class HdKeyring extends SimpleKeyring { - static type = type; + private _index2wallet: Record = {}; - type = type; - mnemonic: string = null; - xpriv: string = null; - passphrase: string; - network: bitcoin.Network = bitcoin.networks.bitcoin; + /* PUBLIC METHODS */ + constructor(opts?: DeserializeOption) { + super(opts?.network || networks.bitcoin); - hdPath = hdPathString; - root: bitcore.HDPrivateKey = null; - hdWallet?: any; - wallets: ECPairInterface[] = []; - private _index2wallet: Record = {}; - activeIndexes: number[] = []; - page = 0; - perPage = 5; + if (opts) { + this.deserialize(opts); + } + } + + public serialize(): DeserializeOption { + return { + mnemonic: this.mnemonic, + xpriv: this.xpriv, + activeIndexes: this.activeIndexes, + hdPath: this.hdPath, + passphrase: this.passphrase + }; + } + + public deserialize(_opts: DeserializeOption = {}) { + if (this.root) { + throw new Error('Btc-Hd-Keyring: Secret recovery phrase already provided'); + } + let opts = _opts as DeserializeOption; + this.wallets = []; + this.mnemonic = null; + this.xpriv = null; + this.root = null; + this.hdPath = opts.hdPath || hdPathString; + if (opts.passphrase) { + this.passphrase = opts.passphrase; + } + + if (opts.mnemonic) { + this.initFromMnemonic(opts.mnemonic); + } else if (opts.xpriv) { + this.initFromXpriv(opts.xpriv); + } - /* PUBLIC METHODS */ - constructor(opts?: DeserializeOption) { - super(null); - if (opts) { - this.deserialize(opts); - } - } - - async serialize(): Promise { - return { - mnemonic: this.mnemonic, - xpriv: this.xpriv, - activeIndexes: this.activeIndexes, - hdPath: this.hdPath, - passphrase: this.passphrase - }; - } - - async deserialize(_opts: DeserializeOption = {}) { - if (this.root) { - throw new Error('Btc-Hd-Keyring: Secret recovery phrase already provided'); - } - let opts = _opts as DeserializeOption; - this.wallets = []; - this.mnemonic = null; - this.xpriv = null; - this.root = null; - this.hdPath = opts.hdPath || hdPathString; - if (opts.passphrase) { - this.passphrase = opts.passphrase; + if (opts.activeIndexes) { + this.activeAccounts(opts.activeIndexes); + } } - if (opts.mnemonic) { - this.initFromMnemonic(opts.mnemonic); - } else if (opts.xpriv) { - this.initFromXpriv(opts.xpriv); - } - - if (opts.activeIndexes) { - this.activeAccounts(opts.activeIndexes); - } - } + public initFromXpriv(xpriv: string) { + if (this.root) { + throw new Error('Btc-Hd-Keyring: Secret recovery phrase already provided'); + } - initFromXpriv(xpriv: string) { - if (this.root) { - throw new Error('Btc-Hd-Keyring: Secret recovery phrase already provided'); + this.xpriv = xpriv; + this._index2wallet = {}; + + // @ts-ignore + this.hdWallet = hdkey.fromJSON({ xpriv }); + this.root = this.hdWallet; } - this.xpriv = xpriv; - this._index2wallet = {}; - - this.hdWallet = hdkey.fromJSON({ xpriv }); - this.root = this.hdWallet; - } - - initFromMnemonic(mnemonic: string) { - if (this.root) { - throw new Error('Btc-Hd-Keyring: Secret recovery phrase already provided'); - } - - this.mnemonic = mnemonic; - this._index2wallet = {}; - - const seed = bip39.mnemonicToSeedSync(mnemonic, this.passphrase); - this.hdWallet = hdkey.fromMasterSeed(seed); - this.root = this.hdWallet.derive(this.hdPath); - } + public initFromMnemonic(mnemonic: string) { + if (this.root) { + throw new Error('Btc-Hd-Keyring: Secret recovery phrase already provided'); + } + + this.mnemonic = mnemonic; + this._index2wallet = {}; - changeHdPath(hdPath: string) { - if (!this.mnemonic) { - throw new Error('Btc-Hd-Keyring: Not support'); + const seed = bip39.mnemonicToSeedSync(mnemonic, this.passphrase); + this.hdWallet = hdkey.fromMasterSeed(seed); + this.root = this.hdWallet.derive(this.hdPath); } - this.hdPath = hdPath; + public changeHdPath(hdPath: string) { + if (!this.mnemonic) { + throw new Error('Btc-Hd-Keyring: Not support'); + } - this.root = this.hdWallet.derive(this.hdPath); - - const indexes = this.activeIndexes; - this._index2wallet = {}; - this.activeIndexes = []; - this.wallets = []; - this.activeAccounts(indexes); - } + this.hdPath = hdPath; - getAccountByHdPath(hdPath: string, index: number) { - if (!this.mnemonic) { - throw new Error('Btc-Hd-Keyring: Not support'); - } - const root = this.hdWallet.derive(hdPath); - const child = root.deriveChild(index); - const ecpair = ECPair.fromPrivateKey(child.privateKey, { - network: this.network - }); - const address = ecpair.publicKey.toString('hex'); - return address; - } + this.root = this.hdWallet.derive(this.hdPath); - addAccounts(numberOfAccounts = 1) { - let count = numberOfAccounts; - let currentIdx = 0; - const newWallets: ECPairInterface[] = []; + const indexes = this.activeIndexes; + this._index2wallet = {}; + this.activeIndexes = []; + this.wallets = []; + this.activeAccounts(indexes); + } - while (count) { - const [, wallet] = this._addressFromIndex(currentIdx); - if (this.wallets.includes(wallet)) { - currentIdx++; - } else { - this.wallets.push(wallet); - newWallets.push(wallet); - this.activeIndexes.push(currentIdx); - count--; - } + public getAccountByHdPath(hdPath: string, index: number) { + if (!this.mnemonic) { + throw new Error('Btc-Hd-Keyring: Not support'); + } + const root = this.hdWallet.derive(hdPath); + const child = root.deriveChild(index); + const ecpair = ECPair.fromPrivateKey(child.privateKey, { + network: this.network + }); + return ecpair.publicKey.toString('hex'); } - const hexWallets = newWallets.map((w) => { - return w.publicKey.toString('hex'); - }); + public addAccounts(numberOfAccounts = 1): string[] { + let count = numberOfAccounts; + let currentIdx = 0; + const newWallets: ECPairInterface[] = []; + + while (count) { + const [, wallet] = this._addressFromIndex(currentIdx); + if (this.wallets.includes(wallet)) { + currentIdx++; + } else { + this.wallets.push(wallet); + newWallets.push(wallet); + this.activeIndexes.push(currentIdx); + count--; + } + } - return Promise.resolve(hexWallets); - } + return newWallets.map((w) => { + return w.publicKey.toString('hex'); + }); + } + + public activeAccounts(indexes: number[]) { + const accounts: string[] = []; + for (const index of indexes) { + const [address, wallet] = this._addressFromIndex(index); + this.wallets.push(wallet); + this.activeIndexes.push(index); - activeAccounts(indexes: number[]) { - const accounts: string[] = []; - for (const index of indexes) { - const [address, wallet] = this._addressFromIndex(index); - this.wallets.push(wallet); - this.activeIndexes.push(index); + accounts.push(address); + } - accounts.push(address); + return accounts; } - return accounts; - } + public getFirstPage() { + this.page = 0; + return this.__getPage(1); + } - getFirstPage() { - this.page = 0; - return this.__getPage(1); - } + public getNextPage() { + return this.__getPage(1); + } - getNextPage() { - return this.__getPage(1); - } + public getPreviousPage() { + return this.__getPage(-1); + } - getPreviousPage() { - return this.__getPage(-1); - } + public getAddresses(start: number, end: number) { + const from = start; + const to = end; + const accounts: { address: string; index: number }[] = []; + for (let i = from; i < to; i++) { + const [address] = this._addressFromIndex(i); + accounts.push({ + address, + index: i + 1 + }); + } + return accounts; + } - getAddresses(start: number, end: number) { - const from = start; - const to = end; - const accounts: { address: string; index: number }[] = []; - for (let i = from; i < to; i++) { - const [address] = this._addressFromIndex(i); - accounts.push({ - address, - index: i + 1 - }); + public async __getPage(increment: number) { + this.page += increment; + + if (!this.page || this.page <= 0) { + this.page = 1; + } + + const from = (this.page - 1) * this.perPage; + const to = from + this.perPage; + + const accounts: { address: string; index: number }[] = []; + + for (let i = from; i < to; i++) { + const [address] = this._addressFromIndex(i); + accounts.push({ + address, + index: i + 1 + }); + } + + return accounts; } - return accounts; - } - - async __getPage(increment: number) { - this.page += increment; - - if (!this.page || this.page <= 0) { - this.page = 1; - } - - const from = (this.page - 1) * this.perPage; - const to = from + this.perPage; - - const accounts: { address: string; index: number }[] = []; - - for (let i = from; i < to; i++) { - const [address] = this._addressFromIndex(i); - accounts.push({ - address, - index: i + 1 - }); - } - - return accounts; - } - - async getAccounts() { - return this.wallets.map((w) => { - return w.publicKey.toString('hex'); - }); - } - - getIndexByAddress(address: string) { - for (const key in this._index2wallet) { - if (this._index2wallet[key][0] === address) { - return Number(key); - } - } - return null; - } - - private _addressFromIndex(i: number): [string, ECPairInterface] { - if (!this._index2wallet[i]) { - const child = this.root.deriveChild(i); - const ecpair = ECPair.fromPrivateKey(child.privateKey, { - network: this.network - }); - const address = ecpair.publicKey.toString('hex'); - this._index2wallet[i] = [address, ecpair]; + + public getAccounts(): string[] { + return this.wallets.map((w) => { + return w.publicKey.toString('hex'); + }); } - return this._index2wallet[i]; - } + public getIndexByAddress(address: string) { + for (const key in this._index2wallet) { + if (this._index2wallet[key][0] === address) { + return Number(key); + } + } + return null; + } + + private _addressFromIndex(i: number): [string, ECPairInterface] { + if (!this._index2wallet[i]) { + const child = this.root.deriveChild(i); + + // @ts-ignore + const ecpair = ECPair.fromPrivateKey(child.privateKey || Buffer.from(child.toString(), 'hex'), { + network: this.network + }); + const address = ecpair.publicKey.toString('hex'); + this._index2wallet[i] = [address, ecpair]; + } + + return this._index2wallet[i]; + } } diff --git a/src/keyring/index.ts b/src/keyring/index.ts index 67044cd..943b98f 100644 --- a/src/keyring/index.ts +++ b/src/keyring/index.ts @@ -1,3 +1,4 @@ export * from './hd-keyring'; export * from './keystone-keyring'; export * from './simple-keyring'; +export * from './interfaces/SimpleKeyringOptions'; diff --git a/src/keyring/interfaces/SimpleKeyringOptions.ts b/src/keyring/interfaces/SimpleKeyringOptions.ts new file mode 100644 index 0000000..ca470c7 --- /dev/null +++ b/src/keyring/interfaces/SimpleKeyringOptions.ts @@ -0,0 +1,127 @@ +import { Network, networks, Psbt } from 'bitcoinjs-lib'; +import { EventEmitter } from 'events'; +import { ECPairInterface } from 'ecpair'; +import { isTaprootInput } from 'bitcoinjs-lib/src/psbt/bip371'; +import { tweakSigner } from '../../utils'; +import { signMessageOfDeterministicECDSA, verifyMessageOfECDSA } from '../../message'; + +interface BaseKeyringOptions { + readonly network?: Network; +} + +export interface SimpleKeyringOptions extends BaseKeyringOptions { + readonly privateKeys?: string[]; +} + +export interface DeserializeOptionBase extends BaseKeyringOptions { + readonly hdPath?: string; + readonly activeIndexes?: number[]; +} + +export interface DeserializeOption extends DeserializeOptionBase { + readonly mnemonic?: string; + readonly xpriv?: string; + readonly passphrase?: string; +} + +export interface KeystoneKey { + readonly path: string; + readonly extendedPublicKey: string; +} + +export interface DeserializeOptionKeystone extends DeserializeOptionBase { + readonly mfp: string; + readonly keys: KeystoneKey[]; +} + +export type KeyringOptions = SimpleKeyringOptions | DeserializeOption | DeserializeOptionKeystone; + +export abstract class IKeyringBase extends EventEmitter { + static type = ''; + public type = ''; + + protected wallets: ECPairInterface[] = []; + + protected constructor(public readonly network: Network = networks.bitcoin) { + super(); + } + + public abstract serialize(): T; + + public abstract addAccounts(numberOfAccounts: number): string[]; + + public abstract deserialize(opts?: T): unknown; + + public removeAccount(publicKey: string): void { + if (!this.wallets.map((wallet) => wallet.publicKey.toString('hex')).includes(publicKey)) { + throw new Error(`PublicKey ${publicKey} not found in this keyring`); + } + + this.wallets = this.wallets.filter((wallet) => wallet.publicKey.toString('hex') !== publicKey); + } + + public async verifyMessage(publicKey: string, text: string, sig: string): Promise { + return verifyMessageOfECDSA(publicKey, text, sig); + } + + // Sign any content, but note that the content signed by this method is unreadable, so use it with caution. + public signData(publicKey: string, data: string, type: 'ecdsa' | 'schnorr' = 'ecdsa'): string { + const keyPair = this._getPrivateKeyFor(publicKey); + if (type === 'ecdsa') { + return keyPair.sign(Buffer.from(data, 'hex')).toString('hex'); + } else if (type === 'schnorr') { + return keyPair.signSchnorr(Buffer.from(data, 'hex')).toString('hex'); + } else { + throw new Error('Not support type'); + } + } + + public abstract getAccounts(): string[]; + + public signMessage(publicKey: string, text: string): string { + const keyPair = this._getPrivateKeyFor(publicKey); + return signMessageOfDeterministicECDSA(keyPair, text); + } + + public exportAccount(publicKey: string) { + const wallet = this._getWalletForAccount(publicKey); + return wallet.privateKey.toString('hex'); + } + + public signTransaction( + psbt: Psbt, + inputs: { + index: number; + publicKey: string; + sighashTypes?: number[]; + disableTweakSigner?: boolean; + }[], + opts?: any + ): Psbt { + inputs.forEach((input) => { + const keyPair = this._getPrivateKeyFor(input.publicKey); + if (isTaprootInput(psbt.data.inputs[input.index]) && !input.disableTweakSigner) { + const signer = tweakSigner(keyPair, opts); + psbt.signInput(input.index, signer, input.sighashTypes); + } else { + psbt.signInput(input.index, keyPair, input.sighashTypes); + } + }); + return psbt; + } + + private _getWalletForAccount(publicKey: string) { + let wallet = this.wallets.find((wallet) => wallet.publicKey.toString('hex') == publicKey); + if (!wallet) { + throw new Error('Simple Keyring - Unable to find matching publicKey.'); + } + return wallet; + } + + private _getPrivateKeyFor(publicKey: string) { + if (!publicKey) { + throw new Error('Must specify publicKey.'); + } + return this._getWalletForAccount(publicKey); + } +} diff --git a/src/keyring/keystone-keyring.ts b/src/keyring/keystone-keyring.ts index 1ce2cc5..337d841 100644 --- a/src/keyring/keystone-keyring.ts +++ b/src/keyring/keystone-keyring.ts @@ -1,389 +1,378 @@ import KeystoneSDK, { KeystoneBitcoinSDK, UR } from '@keystonehq/keystone-sdk'; import { uuid } from '@keystonehq/keystone-sdk/dist/utils'; -import { Psbt } from 'bitcoinjs-lib'; +import { networks, Psbt } from 'bitcoinjs-lib'; import bitcore from 'bitcore-lib'; -import { EventEmitter } from 'events'; import { verifyMessageOfECDSA } from '../message'; - -interface KeystoneKey { - path: string; - extendedPublicKey: string; -} - -interface DeserializeOption { - mfp: string; - keys: KeystoneKey[]; - hdPath?: string; - activeIndexes?: number[]; -} +import { DeserializeOptionKeystone, IKeyringBase, KeystoneKey } from './interfaces/SimpleKeyringOptions'; interface Wallet { - index: number; - publicKey: string; - path: string; + index: number; + publicKey: string; + path: string; } const type = 'Keystone'; -export class KeystoneKeyring extends EventEmitter { - static type = type; - type = type; - mfp = ''; - keys: KeystoneKey[] = []; - hdPath?: string; - activeIndexes?: number[] = []; - root: bitcore.HDPublicKey = null; - - page = 0; - perPage = 5; - - origin = 'UniSat Wallet'; - - constructor(opts?: DeserializeOption) { - super(); - if (opts) { - this.deserialize(opts); - } - } - - async initFromUR(type: string, cbor: string) { - const keystoneSDK = new KeystoneSDK({ - origin: this.origin - }); - const account = keystoneSDK.parseAccount(new UR(Buffer.from(cbor, 'hex'), type)); - await this.deserialize({ - mfp: account.masterFingerprint, - keys: account.keys.map((k) => ({ - path: k.path, - extendedPublicKey: k.extendedPublicKey - })) - }); - } - - getHardenedPath(hdPath: string) { - const paths = hdPath.split('/'); - return paths.slice(0, 4).join('/'); - } - - getHDPublicKey(hdPath: string) { - const path = this.getHardenedPath(hdPath); - const key = this.keys.find((v) => v.path === path); - if (!key) { - throw new Error('Invalid path'); - } - return new bitcore.HDPublicKey(key.extendedPublicKey); - } - - getDefaultHdPath() { - return "m/44'/0'/0'/0"; - } - - initRoot() { - this.root = this.getHDPublicKey(this.hdPath ?? this.getDefaultHdPath()); - } - - async deserialize(opts: DeserializeOption) { - this.mfp = opts.mfp; - this.keys = opts.keys; - this.hdPath = opts.hdPath ?? this.getDefaultHdPath(); - this.activeIndexes = opts.activeIndexes ? [...opts.activeIndexes] : []; - this.initRoot(); - if ( - opts.hdPath !== null && - opts.hdPath !== undefined && - opts.hdPath.length >= 13 && - opts.hdPath[opts.hdPath.length - 1] === '1' - ) { - this.root = this.root.derive(`m/1`); - } - } - - async serialize(): Promise { - return { - mfp: this.mfp, - keys: this.keys, - hdPath: this.hdPath, - activeIndexes: this.activeIndexes - }; - } - - async addAccounts(numberOfAccounts = 1) { - let count = numberOfAccounts; - let i = 0; - const pubkeys = []; - - while (count) { - if (this.activeIndexes.includes(i)) { - i++; - } else { - const w = this.getWalletByIndex(i); - pubkeys.push(w.publicKey); - this.activeIndexes.push(i); - count--; - } - } - - return Promise.resolve(pubkeys); - } - - async addChangeAddressAccounts(numberOfAccounts = 1) { - let count = numberOfAccounts; - let i = 0; - const pubkeys = []; - - while (count) { - if (this.activeIndexes.includes(i)) { - i++; - } else { - const w = this.getChangeAddressWalletByIndex(i); - pubkeys.push(w.publicKey); - this.activeIndexes.push(i); - count--; - } - } - - return Promise.resolve(pubkeys); - } - - async getAccounts() { - if ( - this.hdPath !== null && - this.hdPath !== undefined && - this.hdPath.length >= 13 && - this.hdPath[this.hdPath.length - 1] === '1' - ) { - return this.activeIndexes.map((index) => { - const child = this.root.derive(`m/${index}`); - return child.publicKey.toString('hex'); - }); - } - return this.activeIndexes.map((i) => this.getWalletByIndex(i).publicKey); - } - - async getAccounts2() { - return this.activeIndexes.map((index) => { - const child = this.root.derive(`m/${index}`); - return { - index, - path: `${this.hdPath}/${index}`, - publicKey: child.publicKey.toString('hex') - }; - }); - } - - async getAccountsWithBrand() { - return this.activeIndexes.map((i) => { - const w = this.getWalletByIndex(i); - return { - address: w.publicKey, - index: i - }; - }); - } - - getWalletByIndex(index: number): Wallet { - const child = this.root.derive(`m/0/${index}`); - return { - index, - path: `${this.hdPath}/${index}`, - publicKey: child.publicKey.toString('hex') - }; - } - - getChangeAddressWalletByIndex(index: number): Wallet { - const child = this.root.derive(`m/1/${index}`); - return { - index, - path: `${this.hdPath}/${index}`, - publicKey: child.publicKey.toString('hex') - }; - } - - removeAccount(publicKey: string) { - const index = this.activeIndexes.findIndex((i) => { - const w = this.getWalletByIndex(i); - return w.publicKey === publicKey; - }); - if (index !== -1) { - this.activeIndexes.splice(index, 1); - } - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async exportAccount(_publicKey: string) { - throw new Error('Not supported'); - } - - getFirstPage() { - this.page = 0; - return this.getPage(1); - } - - getNextPage() { - return this.getPage(1); - } - - getPreviousPage() { - return this.getPage(-1); - } - - getAddresses(start: number, end: number) { - const from = start; - const to = end; - const accounts: { address: string; index: number }[] = []; - for (let i = from; i < to; i++) { - const w = this.getWalletByIndex(i); - accounts.push({ - address: w.publicKey, - index: i + 1 - }); - } - return accounts; - } - - async getPage(increment: number) { - this.page += increment; - - if (!this.page || this.page <= 0) { - this.page = 1; - } - - const from = (this.page - 1) * this.perPage; - const to = from + this.perPage; - - const accounts: { address: string; index: number }[] = []; - - for (let i = from; i < to; i++) { - const w = this.getWalletByIndex(i); - accounts.push({ - address: w.publicKey, - index: i + 1 - }); - } - - return accounts; - } - - activeAccounts(indexes: number[]) { - const accounts: string[] = []; - for (const index of indexes) { - const w = this.getWalletByIndex(index); - - if (!this.activeIndexes.includes(index)) { - this.activeIndexes.push(index); - } - - accounts.push(w.publicKey); - } - - return accounts; - } - - changeHdPath(hdPath: string) { - this.hdPath = hdPath; - - this.initRoot(); - - this.activeAccounts(this.activeIndexes); - } - - changeChangeAddressHdPath(hdPath: string) { - this.hdPath = hdPath; - this.root = this.getHDPublicKey(this.hdPath ?? this.getDefaultHdPath()); - this.root = this.root.derive(`m/1`); - this.activeIndexes = []; - return []; - } - - getAccountByHdPath(hdPath: string, index: number) { - const root = this.getHDPublicKey(hdPath); - const child = root.derive(`m/0/${index}`); - return child.publicKey.toString('hex'); - } - - getChangeAddressAccountByHdPath(hdPath: string, index: number) { - const root = this.getHDPublicKey(hdPath); - const child = root.derive(`m/1/${index}`); - return child.publicKey.toString('hex'); - } - - async genSignPsbtUr(psbtHex: string) { - const psbt = Psbt.fromHex(psbtHex); - const keystoneSDK = new KeystoneSDK({ - origin: this.origin - }); - const ur = keystoneSDK.btc.generatePSBT(psbt.data.toBuffer()); - return { - type: ur.type, - cbor: ur.cbor.toString('hex') - }; - } - - async parseSignPsbtUr(type: string, cbor: string) { - const keystoneSDK = new KeystoneSDK({ - origin: this.origin - }); - return keystoneSDK.btc.parsePSBT(new UR(Buffer.from(cbor, 'hex'), type)); - } - - async genSignMsgUr(publicKey: string, text: string) { - const keystoneSDK = new KeystoneSDK({ - origin: this.origin - }); - let i = undefined; - if ( - this.hdPath !== null && - this.hdPath !== undefined && - this.hdPath.length >= 13 && - this.hdPath[this.hdPath.length - 1] === '1' - ) { - const root = this.getHDPublicKey(this.hdPath); - i = this.activeIndexes.find((i) => { - const child = root.derive(`m/1/${i}`); - if (child.publicKey.toString('hex') === publicKey) { - return true; +export class KeystoneKeyring extends IKeyringBase { + static type = type; + type = type; + mfp = ''; + keys: KeystoneKey[] = []; + hdPath?: string; + activeIndexes?: number[] = []; + root: bitcore.HDPublicKey = null; + + page = 0; + perPage = 5; + + origin = 'UniSat Wallet'; + + constructor(opts?: DeserializeOptionKeystone) { + super(opts?.network || networks.bitcoin); + + if (opts) { + this.deserialize(opts); } - }); - } else { - i = this.activeIndexes.find((i) => this.getWalletByIndex(i).publicKey === publicKey); - } - - if (i === undefined) { - throw new Error('publicKey not found'); - } - const requestId = uuid.v4(); - const ur = keystoneSDK.btc.generateSignRequest({ - requestId, - signData: Buffer.from(text).toString('hex'), - dataType: KeystoneBitcoinSDK.DataType.message, - accounts: [ - { - path: `${this.hdPath}/${i}`, - xfp: this.mfp + } + + async initFromUR(type: string, cbor: string) { + const keystoneSDK = new KeystoneSDK({ + origin: this.origin + }); + const account = keystoneSDK.parseAccount(new UR(Buffer.from(cbor, 'hex'), type)); + this.deserialize({ + mfp: account.masterFingerprint, + keys: account.keys.map((k) => ({ + path: k.path, + extendedPublicKey: k.extendedPublicKey + })) + }); + } + + getHardenedPath(hdPath: string) { + const paths = hdPath.split('/'); + return paths.slice(0, 4).join('/'); + } + + getHDPublicKey(hdPath: string) { + const path = this.getHardenedPath(hdPath); + const key = this.keys.find((v) => v.path === path); + if (!key) { + throw new Error('Invalid path'); + } + return new bitcore.HDPublicKey(key.extendedPublicKey); + } + + getDefaultHdPath() { + return "m/44'/0'/0'/0"; + } + + initRoot() { + this.root = this.getHDPublicKey(this.hdPath ?? this.getDefaultHdPath()); + } + + deserialize(opts: DeserializeOptionKeystone): void { + this.mfp = opts.mfp; + this.keys = opts.keys; + this.hdPath = opts.hdPath ?? this.getDefaultHdPath(); + this.activeIndexes = opts.activeIndexes ? [...opts.activeIndexes] : []; + this.initRoot(); + if ( + opts.hdPath !== null && + opts.hdPath !== undefined && + opts.hdPath.length >= 13 && + opts.hdPath[opts.hdPath.length - 1] === '1' + ) { + this.root = this.root.derive(`m/1`); } - ], - origin: this.origin - }); - return { - requestId, - type: ur.type, - cbor: ur.cbor.toString('hex') - }; - } - - async parseSignMsgUr(type: string, cbor: string) { - const keystoneSDK = new KeystoneSDK({ - origin: this.origin - }); - return keystoneSDK.btc.parseSignature(new UR(Buffer.from(cbor, 'hex'), type)); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async signMessage(publicKey: string, text: string) { - return 'Signing Message with Keystone should use genSignMsgUr and parseSignMsgUr'; - } - - async verifyMessage(publicKey: string, text: string, sig: string) { - return verifyMessageOfECDSA(publicKey, text, sig); - } + } + + serialize(): DeserializeOptionKeystone { + return { + mfp: this.mfp, + keys: this.keys, + hdPath: this.hdPath, + activeIndexes: this.activeIndexes + }; + } + + addAccounts(numberOfAccounts = 1): string[] { + let count = numberOfAccounts; + let i = 0; + const pubkeys: string[] = []; + + while (count) { + if (this.activeIndexes.includes(i)) { + i++; + } else { + const w = this.getWalletByIndex(i); + pubkeys.push(w.publicKey); + this.activeIndexes.push(i); + count--; + } + } + + return pubkeys; + } + + async addChangeAddressAccounts(numberOfAccounts = 1) { + let count = numberOfAccounts; + let i = 0; + const pubkeys = []; + + while (count) { + if (this.activeIndexes.includes(i)) { + i++; + } else { + const w = this.getChangeAddressWalletByIndex(i); + pubkeys.push(w.publicKey); + this.activeIndexes.push(i); + count--; + } + } + + return Promise.resolve(pubkeys); + } + + public getAccounts(): string[] { + if ( + this.hdPath !== null && + this.hdPath !== undefined && + this.hdPath.length >= 13 && + this.hdPath[this.hdPath.length - 1] === '1' + ) { + return this.activeIndexes.map((index) => { + const child = this.root.derive(`m/${index}`); + return child.publicKey.toString(); + }); + } + return this.activeIndexes.map((i) => this.getWalletByIndex(i).publicKey); + } + + async getAccounts2() { + return this.activeIndexes.map((index) => { + const child = this.root.derive(`m/${index}`); + return { + index, + path: `${this.hdPath}/${index}`, + publicKey: child.publicKey.toString() + }; + }); + } + + async getAccountsWithBrand() { + return this.activeIndexes.map((i) => { + const w = this.getWalletByIndex(i); + return { + address: w.publicKey, + index: i + }; + }); + } + + getWalletByIndex(index: number): Wallet { + const child = this.root.derive(`m/0/${index}`); + return { + index, + path: `${this.hdPath}/${index}`, + publicKey: child.publicKey.toString() + }; + } + + getChangeAddressWalletByIndex(index: number): Wallet { + const child = this.root.derive(`m/1/${index}`); + return { + index, + path: `${this.hdPath}/${index}`, + publicKey: child.publicKey.toString() + }; + } + + removeAccount(publicKey: string) { + const index = this.activeIndexes.findIndex((i) => { + const w = this.getWalletByIndex(i); + return w.publicKey === publicKey; + }); + if (index !== -1) { + this.activeIndexes.splice(index, 1); + } + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public exportAccount(_publicKey: string): string { + throw new Error('Not supported'); + } + + getFirstPage() { + this.page = 0; + return this.getPage(1); + } + + getNextPage() { + return this.getPage(1); + } + + getPreviousPage() { + return this.getPage(-1); + } + + getAddresses(start: number, end: number) { + const from = start; + const to = end; + const accounts: { address: string; index: number }[] = []; + for (let i = from; i < to; i++) { + const w = this.getWalletByIndex(i); + accounts.push({ + address: w.publicKey, + index: i + 1 + }); + } + return accounts; + } + + async getPage(increment: number) { + this.page += increment; + + if (!this.page || this.page <= 0) { + this.page = 1; + } + + const from = (this.page - 1) * this.perPage; + const to = from + this.perPage; + + const accounts: { address: string; index: number }[] = []; + + for (let i = from; i < to; i++) { + const w = this.getWalletByIndex(i); + accounts.push({ + address: w.publicKey, + index: i + 1 + }); + } + + return accounts; + } + + activeAccounts(indexes: number[]) { + const accounts: string[] = []; + for (const index of indexes) { + const w = this.getWalletByIndex(index); + + if (!this.activeIndexes.includes(index)) { + this.activeIndexes.push(index); + } + + accounts.push(w.publicKey); + } + + return accounts; + } + + public changeHdPath(hdPath: string): void { + this.hdPath = hdPath; + + this.initRoot(); + + this.activeAccounts(this.activeIndexes); + } + + changeChangeAddressHdPath(hdPath: string) { + this.hdPath = hdPath; + this.root = this.getHDPublicKey(this.hdPath ?? this.getDefaultHdPath()); + this.root = this.root.derive(`m/1`); + this.activeIndexes = []; + return []; + } + + getAccountByHdPath(hdPath: string, index: number) { + const root = this.getHDPublicKey(hdPath); + const child = root.derive(`m/0/${index}`); + return child.publicKey.toString(); + } + + getChangeAddressAccountByHdPath(hdPath: string, index: number) { + const root = this.getHDPublicKey(hdPath); + const child = root.derive(`m/1/${index}`); + return child.publicKey.toString(); + } + + async genSignPsbtUr(psbtHex: string) { + const psbt = Psbt.fromHex(psbtHex); + const keystoneSDK = new KeystoneSDK({ + origin: this.origin + }); + const ur = keystoneSDK.btc.generatePSBT(psbt.data.toBuffer()); + return { + type: ur.type, + cbor: ur.cbor.toString('hex') + }; + } + + async parseSignPsbtUr(type: string, cbor: string) { + const keystoneSDK = new KeystoneSDK({ + origin: this.origin + }); + return keystoneSDK.btc.parsePSBT(new UR(Buffer.from(cbor, 'hex'), type)); + } + + async genSignMsgUr(publicKey: string, text: string) { + const keystoneSDK = new KeystoneSDK({ + origin: this.origin + }); + let i = undefined; + if ( + this.hdPath !== null && + this.hdPath !== undefined && + this.hdPath.length >= 13 && + this.hdPath[this.hdPath.length - 1] === '1' + ) { + const root = this.getHDPublicKey(this.hdPath); + i = this.activeIndexes.find((i) => { + const child = root.derive(`m/1/${i}`); + if (child.publicKey.toString() === publicKey) { + return true; + } + }); + } else { + i = this.activeIndexes.find((i) => this.getWalletByIndex(i).publicKey === publicKey); + } + + if (i === undefined) { + throw new Error('publicKey not found'); + } + const requestId = uuid.v4(); + const ur = keystoneSDK.btc.generateSignRequest({ + requestId, + signData: Buffer.from(text).toString('hex'), + dataType: KeystoneBitcoinSDK.DataType.message, + accounts: [ + { + path: `${this.hdPath}/${i}`, + xfp: this.mfp + } + ], + origin: this.origin + }); + return { + requestId, + type: ur.type, + cbor: ur.cbor.toString('hex') + }; + } + + async parseSignMsgUr(type: string, cbor: string) { + const keystoneSDK = new KeystoneSDK({ + origin: this.origin + }); + return keystoneSDK.btc.parseSignature(new UR(Buffer.from(cbor, 'hex'), type)); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public signMessage(publicKey: string, text: string): string { + return 'Signing Message with Keystone should use genSignMsgUr and parseSignMsgUr'; + } + + public async verifyMessage(publicKey: string, text: string, sig: string): Promise { + return verifyMessageOfECDSA(publicKey, text, sig); + } } diff --git a/src/keyring/simple-keyring.ts b/src/keyring/simple-keyring.ts index 21c99c4..00cc8e8 100644 --- a/src/keyring/simple-keyring.ts +++ b/src/keyring/simple-keyring.ts @@ -1,140 +1,69 @@ -import { isTaprootInput } from 'bitcoinjs-lib/src/psbt/bip371'; import { decode } from 'bs58check'; -import { EventEmitter } from 'events'; -import { ECPair, ECPairInterface, bitcoin } from '../bitcoin-core'; -import { signMessageOfDeterministicECDSA, verifyMessageOfECDSA } from '../message'; -import { tweakSigner } from '../utils'; +import { ECPair, ECPairInterface } from '../bitcoin-core'; +import { IKeyringBase, SimpleKeyringOptions } from './interfaces/SimpleKeyringOptions'; +import { networks } from 'bitcoinjs-lib'; const type = 'Simple Key Pair'; -export class SimpleKeyring extends EventEmitter { - static type = type; - type = type; - network: bitcoin.Network = bitcoin.networks.bitcoin; - wallets: ECPairInterface[] = []; - constructor(opts?: any) { - super(); - if (opts) { - this.deserialize(opts); - } - } - - async serialize(): Promise { - return this.wallets.map((wallet) => wallet.privateKey.toString('hex')); - } - - async deserialize(opts: any) { - const privateKeys = opts as string[]; +export class SimpleKeyring extends IKeyringBase { + static type = type; + type = type; - this.wallets = privateKeys.map((key) => { - let buf: Buffer; - if (key.length === 64) { - // privateKey - buf = Buffer.from(key, 'hex'); - } else { - // base58 - buf = decode(key).slice(1, 33); - } + constructor(opts?: SimpleKeyringOptions) { + super(opts?.network || networks.bitcoin); - return ECPair.fromPrivateKey(buf); - }); - } - - async addAccounts(n = 1) { - const newWallets: ECPairInterface[] = []; - for (let i = 0; i < n; i++) { - newWallets.push(ECPair.makeRandom()); + if (opts && opts.privateKeys) { + this.deserialize(opts as SimpleKeyringOptions); + } } - this.wallets = this.wallets.concat(newWallets); - const hexWallets = newWallets.map(({ publicKey }) => publicKey.toString('hex')); - return hexWallets; - } - - async getAccounts() { - return this.wallets.map(({ publicKey }) => publicKey.toString('hex')); - } - async signTransaction( - psbt: bitcoin.Psbt, - inputs: { - index: number; - publicKey: string; - sighashTypes?: number[]; - disableTweakSigner?: boolean; - }[], - opts?: any - ) { - inputs.forEach((input) => { - const keyPair = this._getPrivateKeyFor(input.publicKey); - if (isTaprootInput(psbt.data.inputs[input.index]) && !input.disableTweakSigner) { - const signer = tweakSigner(keyPair, opts); - psbt.signInput(input.index, signer, input.sighashTypes); - } else { - const signer = keyPair; - psbt.signInput(input.index, signer, input.sighashTypes); - } - }); - return psbt; - } - - async signMessage(publicKey: string, text: string) { - const keyPair = this._getPrivateKeyFor(publicKey); - return signMessageOfDeterministicECDSA(keyPair, text); - } - - async verifyMessage(publicKey: string, text: string, sig: string) { - return verifyMessageOfECDSA(publicKey, text, sig); - } - - // Sign any content, but note that the content signed by this method is unreadable, so use it with caution. - async signData(publicKey: string, data: string, type: 'ecdsa' | 'schnorr' = 'ecdsa') { - const keyPair = this._getPrivateKeyFor(publicKey); - if (type === 'ecdsa') { - return keyPair.sign(Buffer.from(data, 'hex')).toString('hex'); - } else if (type === 'schnorr') { - return keyPair.signSchnorr(Buffer.from(data, 'hex')).toString('hex'); - } else { - throw new Error('Not support type'); + public serialize(): SimpleKeyringOptions { + return { + privateKeys: this.wallets.map((wallet) => wallet.privateKey.toString('hex')), + network: this.network + }; } - } - private _getPrivateKeyFor(publicKey: string) { - if (!publicKey) { - throw new Error('Must specify publicKey.'); + public deserialize(opts: SimpleKeyringOptions): void { + if (Array.isArray(opts)) { + opts = { privateKeys: opts }; // compatibility + } + + this.wallets = opts.privateKeys.map((key) => { + let buf: Buffer; + if (key.length === 64) { + // privateKey + buf = Buffer.from(key, 'hex'); + } else { + // base58 + buf = Buffer.from(decode(key).slice(1, 33)); + } + + return ECPair.fromPrivateKey(buf); + }); } - const wallet = this._getWalletForAccount(publicKey); - return wallet; - } - async exportAccount(publicKey: string) { - const wallet = this._getWalletForAccount(publicKey); - return wallet.privateKey.toString('hex'); - } - - removeAccount(publicKey: string) { - if (!this.wallets.map((wallet) => wallet.publicKey.toString('hex')).includes(publicKey)) { - throw new Error(`PublicKey ${publicKey} not found in this keyring`); + public addAccounts(n = 1): string[] { + const newWallets: ECPairInterface[] = []; + for (let i = 0; i < n; i++) { + newWallets.push(ECPair.makeRandom()); + } + this.wallets = this.wallets.concat(newWallets); + return newWallets.map(({ publicKey }) => publicKey.toString('hex')); } - this.wallets = this.wallets.filter((wallet) => wallet.publicKey.toString('hex') !== publicKey); - } - - private _getWalletForAccount(publicKey: string) { - let wallet = this.wallets.find((wallet) => wallet.publicKey.toString('hex') == publicKey); - if (!wallet) { - throw new Error('Simple Keyring - Unable to find matching publicKey.'); + public getAccounts(): string[] { + return this.wallets.map(({ publicKey }) => publicKey.toString('hex')); } - return wallet; - } } export function verifySignData(publicKey: string, hash: string, type: 'ecdsa' | 'schnorr', signature: string) { - const keyPair = ECPair.fromPublicKey(Buffer.from(publicKey, 'hex')); - if (type === 'ecdsa') { - return keyPair.verify(Buffer.from(hash, 'hex'), Buffer.from(signature, 'hex')); - } else if (type === 'schnorr') { - return keyPair.verifySchnorr(Buffer.from(hash, 'hex'), Buffer.from(signature, 'hex')); - } else { - throw new Error('Not support type'); - } + const keyPair = ECPair.fromPublicKey(Buffer.from(publicKey, 'hex')); + if (type === 'ecdsa') { + return keyPair.verify(Buffer.from(hash, 'hex'), Buffer.from(signature, 'hex')); + } else if (type === 'schnorr') { + return keyPair.verifySchnorr(Buffer.from(hash, 'hex'), Buffer.from(signature, 'hex')); + } else { + throw new Error('Not support type'); + } } diff --git a/src/message/bip322-simple.ts b/src/message/bip322-simple.ts index ba44532..a0cb722 100644 --- a/src/message/bip322-simple.ts +++ b/src/message/bip322-simple.ts @@ -1,197 +1,198 @@ import { encode } from 'varuint-bitcoin'; import { addressToScriptPk, getAddressType } from '../address'; -import { bitcoin } from '../bitcoin-core'; import { NetworkType, toPsbtNetwork } from '../network'; import { AddressType } from '../types'; import { schnorrValidator, validator } from '../utils'; import { AbstractWallet } from '../wallet'; +import * as bitcoin from 'bitcoinjs-lib'; + function bip0322_hash(message: string) { - const { sha256 } = bitcoin.crypto; - const tag = 'BIP0322-signed-message'; - const tagHash = sha256(Buffer.from(tag)); - const result = sha256(Buffer.concat([tagHash, tagHash, Buffer.from(message)])); - return result.toString('hex'); + const { sha256 } = bitcoin.crypto; + const tag = 'BIP0322-signed-message'; + const tagHash = sha256(Buffer.from(tag)); + const result = sha256(Buffer.concat([tagHash, tagHash, Buffer.from(message)])); + return result.toString('hex'); } export function genPsbtOfBIP322Simple({ - message, - address, - networkType + message, + address, + networkType }: { - message: string; - address: string; - networkType: NetworkType; + message: string; + address: string; + networkType: NetworkType; }) { - const outputScript = addressToScriptPk(address, networkType); - const addressType = getAddressType(address, networkType); - const supportedTypes = [AddressType.P2WPKH, AddressType.P2TR, AddressType.M44_P2WPKH, AddressType.M44_P2TR]; - if (supportedTypes.includes(addressType) == false) { - throw new Error('Not support address type to sign'); - } - - const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); - const prevoutIndex = 0xffffffff; - const sequence = 0; - const scriptSig = Buffer.concat([Buffer.from('0020', 'hex'), Buffer.from(bip0322_hash(message), 'hex')]); - - const txToSpend = new bitcoin.Transaction(); - txToSpend.version = 0; - txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig); - txToSpend.addOutput(outputScript, 0); - - const psbtToSign = new bitcoin.Psbt(); - psbtToSign.setVersion(0); - psbtToSign.addInput({ - hash: txToSpend.getHash(), - index: 0, - sequence: 0, - witnessUtxo: { - script: outputScript, - value: 0 + const outputScript = addressToScriptPk(address, networkType); + const addressType = getAddressType(address, networkType); + const supportedTypes = [AddressType.P2WPKH, AddressType.P2TR, AddressType.M44_P2WPKH, AddressType.M44_P2TR]; + if (supportedTypes.includes(addressType) == false) { + throw new Error('Not support address type to sign'); } - }); - psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 }); - return psbtToSign; + const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); + const prevoutIndex = 0xffffffff; + const sequence = 0; + const scriptSig = Buffer.concat([Buffer.from('0020', 'hex'), Buffer.from(bip0322_hash(message), 'hex')]); + + const txToSpend = new bitcoin.Transaction(); + txToSpend.version = 0; + txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig); + txToSpend.addOutput(outputScript, 0); + + const psbtToSign = new bitcoin.Psbt(); + psbtToSign.setVersion(0); + psbtToSign.addInput({ + hash: txToSpend.getHash(), + index: 0, + sequence: 0, + witnessUtxo: { + script: outputScript, + value: 0 + } + }); + psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 }); + + return psbtToSign; } export function getSignatureFromPsbtOfBIP322Simple(psbt: bitcoin.Psbt) { - const txToSign = psbt.extractTransaction(); + const txToSign = psbt.extractTransaction(); - function encodeVarString(b) { - return Buffer.concat([encode(b.byteLength), b]); - } + function encodeVarString(b) { + return Buffer.concat([encode(b.byteLength), b]); + } - const len = encode(txToSign.ins[0].witness.length); - const result = Buffer.concat([len, ...txToSign.ins[0].witness.map((w) => encodeVarString(w))]); - const signature = result.toString('base64'); + const len = encode(txToSign.ins[0].witness.length); + const result = Buffer.concat([len, ...txToSign.ins[0].witness.map((w) => encodeVarString(w))]); + const signature = result.toString('base64'); - return signature; + return signature; } /** * reference: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki */ export async function signMessageOfBIP322Simple({ - message, - address, - networkType, - wallet -}: { - message: string; - address: string; - networkType: NetworkType; - wallet: AbstractWallet; -}) { - const psbtToSign = genPsbtOfBIP322Simple({ message, address, - networkType - }); + networkType, + wallet +}: { + message: string; + address: string; + networkType: NetworkType; + wallet: AbstractWallet; +}) { + const psbtToSign = genPsbtOfBIP322Simple({ + message, + address, + networkType + }); - await wallet.signPsbt(psbtToSign); + await wallet.signPsbt(psbtToSign); - return getSignatureFromPsbtOfBIP322Simple(psbtToSign); + return getSignatureFromPsbtOfBIP322Simple(psbtToSign); } export function verifyMessageOfBIP322Simple( - address: string, - msg: string, - signature: string, - networkType: NetworkType = NetworkType.MAINNET + address: string, + msg: string, + signature: string, + networkType: NetworkType = NetworkType.MAINNET ) { - const addressType = getAddressType(address, networkType); - if (addressType === AddressType.P2WPKH || addressType === AddressType.M44_P2WPKH) { - return verifySignatureOfBIP322Simple_P2PWPKH(address, msg, signature, networkType); - } else if (addressType === AddressType.P2TR || addressType === AddressType.M44_P2TR) { - return verifySignatureOfBIP322Simple_P2TR(address, msg, signature, networkType); - } - return false; + const addressType = getAddressType(address, networkType); + if (addressType === AddressType.P2WPKH || addressType === AddressType.M44_P2WPKH) { + return verifySignatureOfBIP322Simple_P2PWPKH(address, msg, signature, networkType); + } else if (addressType === AddressType.P2TR || addressType === AddressType.M44_P2TR) { + return verifySignatureOfBIP322Simple_P2TR(address, msg, signature, networkType); + } + return false; } function verifySignatureOfBIP322Simple_P2TR( - address: string, - msg: string, - sign: string, - networkType: NetworkType = NetworkType.MAINNET + address: string, + msg: string, + sign: string, + networkType: NetworkType = NetworkType.MAINNET ) { - const network = toPsbtNetwork(networkType); - const outputScript = bitcoin.address.toOutputScript(address, network); - const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); - const prevoutIndex = 0xffffffff; - const sequence = 0; - const scriptSig = Buffer.concat([Buffer.from('0020', 'hex'), Buffer.from(bip0322_hash(msg), 'hex')]); - - const txToSpend = new bitcoin.Transaction(); - txToSpend.version = 0; - txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig); - txToSpend.addOutput(outputScript, 0); - - const data = Buffer.from(sign, 'base64'); - const _res = bitcoin.script.decompile(data.slice(1)); - const signature = _res[0] as Buffer; - const pubkey = Buffer.from('02' + outputScript.subarray(2).toString('hex'), 'hex'); - - const psbtToSign = new bitcoin.Psbt(); - psbtToSign.setVersion(0); - psbtToSign.addInput({ - hash: txToSpend.getHash(), - index: 0, - sequence: 0, - witnessUtxo: { - script: outputScript, - value: 0 - } - }); - psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 }); - const tapKeyHash = (psbtToSign as any).__CACHE.__TX.hashForWitnessV1(0, [outputScript], [0], 0); - const valid = schnorrValidator(pubkey, tapKeyHash, signature); - return valid; + const network = toPsbtNetwork(networkType); + const outputScript = bitcoin.address.toOutputScript(address, network); + const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); + const prevoutIndex = 0xffffffff; + const sequence = 0; + const scriptSig = Buffer.concat([Buffer.from('0020', 'hex'), Buffer.from(bip0322_hash(msg), 'hex')]); + + const txToSpend = new bitcoin.Transaction(); + txToSpend.version = 0; + txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig); + txToSpend.addOutput(outputScript, 0); + + const data = Buffer.from(sign, 'base64'); + const _res = bitcoin.script.decompile(data.slice(1)); + const signature = _res[0] as Buffer; + const pubkey = Buffer.from('02' + outputScript.subarray(2).toString('hex'), 'hex'); + + const psbtToSign = new bitcoin.Psbt(); + psbtToSign.setVersion(0); + psbtToSign.addInput({ + hash: txToSpend.getHash(), + index: 0, + sequence: 0, + witnessUtxo: { + script: outputScript, + value: 0 + } + }); + psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 }); + const tapKeyHash = (psbtToSign as any).__CACHE.__TX.hashForWitnessV1(0, [outputScript], [0], 0); + const valid = schnorrValidator(pubkey, tapKeyHash, signature); + return valid; } function verifySignatureOfBIP322Simple_P2PWPKH( - address: string, - msg: string, - sign: string, - networkType: NetworkType = NetworkType.MAINNET + address: string, + msg: string, + sign: string, + networkType: NetworkType = NetworkType.MAINNET ) { - const network = toPsbtNetwork(networkType); - const outputScript = bitcoin.address.toOutputScript(address, network); - - const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); - const prevoutIndex = 0xffffffff; - const sequence = 0; - const scriptSig = Buffer.concat([Buffer.from('0020', 'hex'), Buffer.from(bip0322_hash(msg), 'hex')]); - - const txToSpend = new bitcoin.Transaction(); - txToSpend.version = 0; - txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig); - txToSpend.addOutput(outputScript, 0); - - const data = Buffer.from(sign, 'base64'); - const _res = bitcoin.script.decompile(data.slice(1)); - - const psbtToSign = new bitcoin.Psbt(); - psbtToSign.setVersion(0); - psbtToSign.addInput({ - hash: txToSpend.getHash(), - index: 0, - sequence: 0, - witnessUtxo: { - script: outputScript, - value: 0 - } - }); - psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 }); - - psbtToSign.updateInput(0, { - partialSig: [ - { - pubkey: _res[1] as any, - signature: _res[0] as any - } - ] - }); - const valid = psbtToSign.validateSignaturesOfAllInputs(validator); - return valid; + const network = toPsbtNetwork(networkType); + const outputScript = bitcoin.address.toOutputScript(address, network); + + const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); + const prevoutIndex = 0xffffffff; + const sequence = 0; + const scriptSig = Buffer.concat([Buffer.from('0020', 'hex'), Buffer.from(bip0322_hash(msg), 'hex')]); + + const txToSpend = new bitcoin.Transaction(); + txToSpend.version = 0; + txToSpend.addInput(prevoutHash, prevoutIndex, sequence, scriptSig); + txToSpend.addOutput(outputScript, 0); + + const data = Buffer.from(sign, 'base64'); + const _res = bitcoin.script.decompile(data.slice(1)); + + const psbtToSign = new bitcoin.Psbt(); + psbtToSign.setVersion(0); + psbtToSign.addInput({ + hash: txToSpend.getHash(), + index: 0, + sequence: 0, + witnessUtxo: { + script: outputScript, + value: 0 + } + }); + psbtToSign.addOutput({ script: Buffer.from('6a', 'hex'), value: 0 }); + + psbtToSign.updateInput(0, { + partialSig: [ + { + pubkey: _res[1] as any, + signature: _res[0] as any + } + ] + }); + const valid = psbtToSign.validateSignaturesOfAllInputs(validator); + return valid; } diff --git a/src/message/ecdsa.ts b/src/message/ecdsa.ts index f909328..f14c797 100644 --- a/src/message/ecdsa.ts +++ b/src/message/ecdsa.ts @@ -2,30 +2,32 @@ import bitcore from 'bitcore-lib'; import { ECPairInterface } from 'ecpair'; export function signMessageOfECDSA(privateKey: ECPairInterface, text: string) { - const keyPair = privateKey; - const message = new bitcore.Message(text); - return message.sign(new bitcore.PrivateKey(keyPair.privateKey)); + const keyPair = privateKey; + const message = new bitcore.Message(text); + // @ts-ignore + return message.sign(new bitcore.PrivateKey(keyPair.privateKey)); } export function verifyMessageOfECDSA(publicKey: string, text: string, sig: string) { - const message = new bitcore.Message(text); + const message = new bitcore.Message(text); + // @ts-ignore + const signature = bitcore.crypto.Signature.fromCompact(Buffer.from(sig, 'base64')); + const hash = message.magicHash(); - const signature = bitcore.crypto.Signature.fromCompact(Buffer.from(sig, 'base64')); - const hash = message.magicHash(); + // recover the public key + // @ts-ignore + const ecdsa = new bitcore.crypto.ECDSA(); + ecdsa.hashbuf = hash; + ecdsa.sig = signature; - // recover the public key - const ecdsa = new bitcore.crypto.ECDSA(); - ecdsa.hashbuf = hash; - ecdsa.sig = signature; + const pubkeyInSig = ecdsa.toPublicKey(); - const pubkeyInSig = ecdsa.toPublicKey(); + const pubkeyInSigString = new bitcore.PublicKey( + Object.assign({}, pubkeyInSig.toObject(), { compressed: true }) + ).toString(); + if (pubkeyInSigString != publicKey) { + return false; + } - const pubkeyInSigString = new bitcore.PublicKey( - Object.assign({}, pubkeyInSig.toObject(), { compressed: true }) - ).toString(); - if (pubkeyInSigString != publicKey) { - return false; - } - - return bitcore.crypto.ECDSA.verify(hash, signature, pubkeyInSig); + return bitcore.crypto.ECDSA.verify(hash, signature, pubkeyInSig); } diff --git a/src/wallet/estimate-wallet.ts b/src/wallet/estimate-wallet.ts index 2fd971a..d354002 100644 --- a/src/wallet/estimate-wallet.ts +++ b/src/wallet/estimate-wallet.ts @@ -1,5 +1,5 @@ import { publicKeyToAddress, scriptPkToAddress } from '../address'; -import { ECPair, bitcoin } from '../bitcoin-core'; +import { bitcoin, ECPair } from '../bitcoin-core'; import { SimpleKeyring } from '../keyring'; import { signMessageOfBIP322Simple } from '../message'; import { NetworkType, toPsbtNetwork } from '../network'; @@ -11,163 +11,170 @@ import { AbstractWallet } from './abstract-wallet'; * EstimateWallet is a wallet that can be used to estimate the size of a transaction. */ export class EstimateWallet implements AbstractWallet { - keyring: SimpleKeyring; - address: string; - pubkey: string; - network: bitcoin.Network; - networkType: NetworkType; - addressType: AddressType; - constructor( - wif: string, - networkType: NetworkType = NetworkType.MAINNET, - addressType: AddressType = AddressType.P2WPKH - ) { - const network = toPsbtNetwork(networkType); - const keyPair = ECPair.fromWIF(wif, network); - this.keyring = new SimpleKeyring([keyPair.privateKey.toString('hex')]); - this.keyring.addAccounts(1); - this.pubkey = keyPair.publicKey.toString('hex'); - this.address = publicKeyToAddress(this.pubkey, addressType, networkType); - this.network = network; - this.networkType = networkType; - this.addressType = addressType; - } - - static fromRandom(addressType: AddressType = AddressType.P2WPKH, networkType: NetworkType = NetworkType.MAINNET) { - const network = toPsbtNetwork(networkType); - const ecpair = ECPair.makeRandom({ network }); - const wallet = new EstimateWallet(ecpair.toWIF(), networkType, addressType); - return wallet; - } - - getNetworkType() { - return this.networkType; - } - - private async formatOptionsToSignInputs(_psbt: string | bitcoin.Psbt, options?: SignPsbtOptions) { - const accountAddress = this.address; - const accountPubkey = await this.getPublicKey(); - - let toSignInputs: ToSignInput[] = []; - if (options && options.toSignInputs) { - // We expect userToSignInputs objects to be similar to ToSignInput interface, - // but we allow address to be specified in addition to publicKey for convenience. - toSignInputs = options.toSignInputs.map((input) => { - const index = Number(input.index); - if (isNaN(index)) throw new Error('invalid index in toSignInput'); - - if (!(input as AddressUserToSignInput).address && !(input as PublicKeyUserToSignInput).publicKey) { - throw new Error('no address or public key in toSignInput'); - } - - if ((input as AddressUserToSignInput).address && (input as AddressUserToSignInput).address != accountAddress) { - throw new Error('invalid address in toSignInput'); - } + keyring: SimpleKeyring; + address: string; + pubkey: string; + network: bitcoin.Network; + networkType: NetworkType; + addressType: AddressType; + + constructor( + wif: string, + networkType: NetworkType = NetworkType.MAINNET, + addressType: AddressType = AddressType.P2WPKH + ) { + const network = toPsbtNetwork(networkType); + const keyPair = ECPair.fromWIF(wif, network); + this.keyring = new SimpleKeyring({ + privateKeys: [keyPair.privateKey.toString('hex')], + network: network + }); + this.keyring.addAccounts(1); + this.pubkey = keyPair.publicKey.toString('hex'); + this.address = publicKeyToAddress(this.pubkey, addressType, networkType); + this.network = network; + this.networkType = networkType; + this.addressType = addressType; + } - if ( - (input as PublicKeyUserToSignInput).publicKey && - (input as PublicKeyUserToSignInput).publicKey != accountPubkey - ) { - throw new Error('invalid public key in toSignInput'); - } + static fromRandom(addressType: AddressType = AddressType.P2WPKH, networkType: NetworkType = NetworkType.MAINNET) { + const network = toPsbtNetwork(networkType); + const ecpair = ECPair.makeRandom({ network }); + const wallet = new EstimateWallet(ecpair.toWIF(), networkType, addressType); + return wallet; + } - const sighashTypes = input.sighashTypes?.map(Number); - if (sighashTypes?.some(isNaN)) throw new Error('invalid sighash type in toSignInput'); + getNetworkType() { + return this.networkType; + } - return { - index, - publicKey: accountPubkey, - sighashTypes, - disableTweakSigner: input.disableTweakSigner + async signPsbt(psbt: bitcoin.Psbt, opts?: SignPsbtOptions) { + const _opts = opts || { + autoFinalized: true, + toSignInputs: [] }; - }); - } else { - const networkType = this.getNetworkType(); - const psbtNetwork = toPsbtNetwork(networkType); - - const psbt = - typeof _psbt === 'string' - ? bitcoin.Psbt.fromHex(_psbt as string, { network: psbtNetwork }) - : (_psbt as bitcoin.Psbt); - psbt.data.inputs.forEach((v, index) => { - let script: any = null; - if (v.witnessUtxo) { - script = v.witnessUtxo.script; - } else if (v.nonWitnessUtxo) { - const tx = bitcoin.Transaction.fromBuffer(v.nonWitnessUtxo); - const output = tx.outs[psbt.txInputs[index].index]; - script = output.script; + let _inputs: ToSignInput[] = await this.formatOptionsToSignInputs(psbt, opts); + + if (_inputs.length == 0) { + throw new Error('no input to sign'); } - const isSigned = v.finalScriptSig || v.finalScriptWitness; - if (script && !isSigned) { - const address = scriptPkToAddress(script, this.networkType); - if (accountAddress === address) { - toSignInputs.push({ - index, - publicKey: accountPubkey, - sighashTypes: v.sighashType ? [v.sighashType] : undefined + + psbt.data.inputs.forEach((v) => { + const isNotSigned = !(v.finalScriptSig || v.finalScriptWitness); + const isP2TR = this.addressType === AddressType.P2TR || this.addressType === AddressType.M44_P2TR; + const lostInternalPubkey = !v.tapInternalKey; + // Special measures taken for compatibility with certain applications. + if (isNotSigned && isP2TR && lostInternalPubkey) { + const tapInternalKey = toXOnly(Buffer.from(this.pubkey, 'hex')); + const { output } = bitcoin.payments.p2tr({ + internalPubkey: tapInternalKey, + network: toPsbtNetwork(this.networkType) + }); + if (v.witnessUtxo?.script.toString('hex') == output?.toString('hex')) { + v.tapInternalKey = tapInternalKey; + } + } + }); + + psbt = await this.keyring.signTransaction(psbt, _inputs); + if (_opts.autoFinalized) { + _inputs.forEach((v) => { + // psbt.validateSignaturesOfInput(v.index, validator); + psbt.finalizeInput(v.index); }); - } } - }); + return psbt; } - return toSignInputs; - } - - async signPsbt(psbt: bitcoin.Psbt, opts?: SignPsbtOptions) { - const _opts = opts || { - autoFinalized: true, - toSignInputs: [] - }; - let _inputs: ToSignInput[] = await this.formatOptionsToSignInputs(psbt, opts); - - if (_inputs.length == 0) { - throw new Error('no input to sign'); + + async getPublicKey(): Promise { + const pubkeys = await this.keyring.getAccounts(); + return pubkeys[0]; } - psbt.data.inputs.forEach((v) => { - const isNotSigned = !(v.finalScriptSig || v.finalScriptWitness); - const isP2TR = this.addressType === AddressType.P2TR || this.addressType === AddressType.M44_P2TR; - const lostInternalPubkey = !v.tapInternalKey; - // Special measures taken for compatibility with certain applications. - if (isNotSigned && isP2TR && lostInternalPubkey) { - const tapInternalKey = toXOnly(Buffer.from(this.pubkey, 'hex')); - const { output } = bitcoin.payments.p2tr({ - internalPubkey: tapInternalKey, - network: toPsbtNetwork(this.networkType) - }); - if (v.witnessUtxo?.script.toString('hex') == output?.toString('hex')) { - v.tapInternalKey = tapInternalKey; + async signMessage(text: string, type: 'bip322-simple' | 'ecdsa'): Promise { + if (type === 'bip322-simple') { + return await signMessageOfBIP322Simple({ + message: text, + address: this.address, + networkType: this.networkType, + wallet: this + }); + } else { + const pubkey = await this.getPublicKey(); + return await this.keyring.signMessage(pubkey, text); } - } - }); - - psbt = await this.keyring.signTransaction(psbt, _inputs); - if (_opts.autoFinalized) { - _inputs.forEach((v) => { - // psbt.validateSignaturesOfInput(v.index, validator); - psbt.finalizeInput(v.index); - }); } - return psbt; - } - - async getPublicKey(): Promise { - const pubkeys = await this.keyring.getAccounts(); - return pubkeys[0]; - } - - async signMessage(text: string, type: 'bip322-simple' | 'ecdsa'): Promise { - if (type === 'bip322-simple') { - return await signMessageOfBIP322Simple({ - message: text, - address: this.address, - networkType: this.networkType, - wallet: this - }); - } else { - const pubkey = await this.getPublicKey(); - return await this.keyring.signMessage(pubkey, text); + + private async formatOptionsToSignInputs(_psbt: string | bitcoin.Psbt, options?: SignPsbtOptions) { + const accountAddress = this.address; + const accountPubkey = await this.getPublicKey(); + + let toSignInputs: ToSignInput[] = []; + if (options && options.toSignInputs) { + // We expect userToSignInputs objects to be similar to ToSignInput interface, + // but we allow address to be specified in addition to publicKey for convenience. + toSignInputs = options.toSignInputs.map((input) => { + const index = Number(input.index); + if (isNaN(index)) throw new Error('invalid index in toSignInput'); + + if (!(input as AddressUserToSignInput).address && !(input as PublicKeyUserToSignInput).publicKey) { + throw new Error('no address or public key in toSignInput'); + } + + if ( + (input as AddressUserToSignInput).address && + (input as AddressUserToSignInput).address != accountAddress + ) { + throw new Error('invalid address in toSignInput'); + } + + if ( + (input as PublicKeyUserToSignInput).publicKey && + (input as PublicKeyUserToSignInput).publicKey != accountPubkey + ) { + throw new Error('invalid public key in toSignInput'); + } + + const sighashTypes = input.sighashTypes?.map(Number); + if (sighashTypes?.some(isNaN)) throw new Error('invalid sighash type in toSignInput'); + + return { + index, + publicKey: accountPubkey, + sighashTypes, + disableTweakSigner: input.disableTweakSigner + }; + }); + } else { + const networkType = this.getNetworkType(); + const psbtNetwork = toPsbtNetwork(networkType); + + const psbt = + typeof _psbt === 'string' + ? bitcoin.Psbt.fromHex(_psbt as string, { network: psbtNetwork }) + : (_psbt as bitcoin.Psbt); + psbt.data.inputs.forEach((v, index) => { + let script: any = null; + if (v.witnessUtxo) { + script = v.witnessUtxo.script; + } else if (v.nonWitnessUtxo) { + const tx = bitcoin.Transaction.fromBuffer(v.nonWitnessUtxo); + const output = tx.outs[psbt.txInputs[index].index]; + script = output.script; + } + const isSigned = v.finalScriptSig || v.finalScriptWitness; + if (script && !isSigned) { + const address = scriptPkToAddress(script, this.networkType); + if (accountAddress === address) { + toSignInputs.push({ + index, + publicKey: accountPubkey, + sighashTypes: v.sighashType ? [v.sighashType] : undefined + }); + } + } + }); + } + return toSignInputs; } - } } diff --git a/src/wallet/local-wallet.ts b/src/wallet/local-wallet.ts index 6dd0a49..8dcedce 100644 --- a/src/wallet/local-wallet.ts +++ b/src/wallet/local-wallet.ts @@ -1,5 +1,5 @@ import { publicKeyToAddress, publicKeyToScriptPk, scriptPkToAddress } from '../address'; -import { ECPair, bitcoin } from '../bitcoin-core'; +import { bitcoin, ECPair } from '../bitcoin-core'; import { HdKeyring, SimpleKeyring } from '../keyring'; import { signMessageOfBIP322Simple } from '../message'; import { NetworkType, toPsbtNetwork } from '../network'; @@ -8,192 +8,194 @@ import { toXOnly } from '../utils'; import { AbstractWallet } from './abstract-wallet'; export class LocalWallet implements AbstractWallet { - keyring: SimpleKeyring; - address: string; - pubkey: string; - network: bitcoin.Network; - addressType: AddressType; - networkType: NetworkType; - scriptPk: string; - constructor( - wif: string, - addressType: AddressType = AddressType.P2WPKH, - networkType: NetworkType = NetworkType.MAINNET - ) { - const network = toPsbtNetwork(networkType); - const keyPair = ECPair.fromWIF(wif, network); - this.keyring = new SimpleKeyring([keyPair.privateKey.toString('hex')]); - this.keyring.addAccounts(1); - this.pubkey = keyPair.publicKey.toString('hex'); - this.address = publicKeyToAddress(this.pubkey, addressType, networkType); - this.network = network; - this.networkType = networkType; - this.addressType = addressType; - - this.scriptPk = publicKeyToScriptPk(this.pubkey, addressType, networkType); - } - - static fromMnemonic( - addressType: AddressType, - networkType: NetworkType, - mnemonic: string, - passPhrase?: string, - hdPath?: string - ) { - const keyring = new HdKeyring({ - mnemonic, - hdPath, - passphrase: passPhrase, - activeIndexes: [0] - }); - - const _wallet = keyring.wallets[0]; - _wallet.network = toPsbtNetwork(networkType); - - const wallet = new LocalWallet(keyring.wallets[0].toWIF(), addressType, networkType); - return wallet; - } - - static fromRandom(addressType: AddressType = AddressType.P2WPKH, networkType: NetworkType = NetworkType.MAINNET) { - const network = toPsbtNetwork(networkType); - const ecpair = ECPair.makeRandom({ network }); - const wallet = new LocalWallet(ecpair.toWIF(), addressType, networkType); - return wallet; - } - - getNetworkType() { - return this.networkType; - } - - private async formatOptionsToSignInputs(_psbt: string | bitcoin.Psbt, options?: SignPsbtOptions) { - const accountAddress = this.address; - const accountPubkey = await this.getPublicKey(); - - let toSignInputs: ToSignInput[] = []; - if (options && options.toSignInputs) { - // We expect userToSignInputs objects to be similar to ToSignInput interface, - // but we allow address to be specified in addition to publicKey for convenience. - toSignInputs = options.toSignInputs.map((input) => { - const index = Number(input.index); - if (isNaN(index)) throw new Error('invalid index in toSignInput'); - - if (!(input as AddressUserToSignInput).address && !(input as PublicKeyUserToSignInput).publicKey) { - throw new Error('no address or public key in toSignInput'); - } + keyring: SimpleKeyring; + address: string; + pubkey: string; + network: bitcoin.Network; + addressType: AddressType; + networkType: NetworkType; + scriptPk: string; + + constructor( + wif: string, + addressType: AddressType = AddressType.P2WPKH, + networkType: NetworkType = NetworkType.MAINNET + ) { + const network = toPsbtNetwork(networkType); + const keyPair = ECPair.fromWIF(wif, network); + this.keyring = new SimpleKeyring({ privateKeys: [keyPair.privateKey.toString('hex')], network: network }); + this.keyring.addAccounts(1); + this.pubkey = keyPair.publicKey.toString('hex'); + this.address = publicKeyToAddress(this.pubkey, addressType, networkType); + this.network = network; + this.networkType = networkType; + this.addressType = addressType; + + this.scriptPk = publicKeyToScriptPk(this.pubkey, addressType, networkType); + } - if ((input as AddressUserToSignInput).address && (input as AddressUserToSignInput).address != accountAddress) { - throw new Error('invalid address in toSignInput'); - } + static fromMnemonic( + addressType: AddressType, + networkType: NetworkType, + mnemonic: string, + passPhrase?: string, + hdPath?: string + ) { + const keyring = new HdKeyring({ + mnemonic, + hdPath, + passphrase: passPhrase, + activeIndexes: [0] + }); - if ( - (input as PublicKeyUserToSignInput).publicKey && - (input as PublicKeyUserToSignInput).publicKey != accountPubkey - ) { - throw new Error('invalid public key in toSignInput'); - } + const _wallet = keyring.wallets[0]; + _wallet.network = toPsbtNetwork(networkType); - const sighashTypes = input.sighashTypes?.map(Number); - if (sighashTypes?.some(isNaN)) throw new Error('invalid sighash type in toSignInput'); + return new LocalWallet(keyring.wallets[0].toWIF(), addressType, networkType); + } - return { - index, - publicKey: accountPubkey, - sighashTypes, - disableTweakSigner: input.disableTweakSigner + static fromRandom(addressType: AddressType = AddressType.P2WPKH, networkType: NetworkType = NetworkType.MAINNET) { + const network = toPsbtNetwork(networkType); + const ecpair = ECPair.makeRandom({ network }); + return new LocalWallet(ecpair.toWIF(), addressType, networkType); + } + + getNetworkType() { + return this.networkType; + } + + async signPsbt(psbt: bitcoin.Psbt, opts?: SignPsbtOptions) { + const _opts = opts || { + autoFinalized: true, + toSignInputs: [] }; - }); - } else { - const networkType = this.getNetworkType(); - const psbtNetwork = toPsbtNetwork(networkType); - - const psbt = - typeof _psbt === 'string' - ? bitcoin.Psbt.fromHex(_psbt as string, { network: psbtNetwork }) - : (_psbt as bitcoin.Psbt); - psbt.data.inputs.forEach((v, index) => { - let script: any = null; - if (v.witnessUtxo) { - script = v.witnessUtxo.script; - } else if (v.nonWitnessUtxo) { - const tx = bitcoin.Transaction.fromBuffer(v.nonWitnessUtxo); - const output = tx.outs[psbt.txInputs[index].index]; - script = output.script; + let _inputs: ToSignInput[] = await this.formatOptionsToSignInputs(psbt, opts); + + if (_inputs.length == 0) { + throw new Error('no input to sign'); } - const isSigned = v.finalScriptSig || v.finalScriptWitness; - if (script && !isSigned) { - const address = scriptPkToAddress(script, this.networkType); - if (accountAddress === address) { - toSignInputs.push({ - index, - publicKey: accountPubkey, - sighashTypes: v.sighashType ? [v.sighashType] : undefined + + psbt.data.inputs.forEach((v) => { + const isNotSigned = !(v.finalScriptSig || v.finalScriptWitness); + const isP2TR = this.addressType === AddressType.P2TR || this.addressType === AddressType.M44_P2TR; + const lostInternalPubkey = !v.tapInternalKey; + // Special measures taken for compatibility with certain applications. + if (isNotSigned && isP2TR && lostInternalPubkey) { + const tapInternalKey = toXOnly(Buffer.from(this.pubkey, 'hex')); + const { output } = bitcoin.payments.p2tr({ + internalPubkey: tapInternalKey, + network: toPsbtNetwork(this.networkType) + }); + if (v.witnessUtxo?.script.toString('hex') == output?.toString('hex')) { + v.tapInternalKey = tapInternalKey; + } + } + }); + + psbt = this.keyring.signTransaction(psbt, _inputs); + if (_opts.autoFinalized) { + _inputs.forEach((v) => { + // psbt.validateSignaturesOfInput(v.index, validator); + psbt.finalizeInput(v.index); }); - } } - }); + return psbt; } - return toSignInputs; - } - - async signPsbt(psbt: bitcoin.Psbt, opts?: SignPsbtOptions) { - const _opts = opts || { - autoFinalized: true, - toSignInputs: [] - }; - let _inputs: ToSignInput[] = await this.formatOptionsToSignInputs(psbt, opts); - - if (_inputs.length == 0) { - throw new Error('no input to sign'); + + getPublicKey(): string { + const pubkeys = this.keyring.getAccounts(); + return pubkeys[0]; } - psbt.data.inputs.forEach((v) => { - const isNotSigned = !(v.finalScriptSig || v.finalScriptWitness); - const isP2TR = this.addressType === AddressType.P2TR || this.addressType === AddressType.M44_P2TR; - const lostInternalPubkey = !v.tapInternalKey; - // Special measures taken for compatibility with certain applications. - if (isNotSigned && isP2TR && lostInternalPubkey) { - const tapInternalKey = toXOnly(Buffer.from(this.pubkey, 'hex')); - const { output } = bitcoin.payments.p2tr({ - internalPubkey: tapInternalKey, - network: toPsbtNetwork(this.networkType) - }); - if (v.witnessUtxo?.script.toString('hex') == output?.toString('hex')) { - v.tapInternalKey = tapInternalKey; + async signMessage(text: string, type: 'bip322-simple' | 'ecdsa'): Promise { + if (type === 'bip322-simple') { + return await signMessageOfBIP322Simple({ + message: text, + address: this.address, + networkType: this.networkType, + wallet: this + }); + } else { + const pubkey = this.getPublicKey(); + return this.keyring.signMessage(pubkey, text); } - } - }); - - psbt = await this.keyring.signTransaction(psbt, _inputs); - if (_opts.autoFinalized) { - _inputs.forEach((v) => { - // psbt.validateSignaturesOfInput(v.index, validator); - psbt.finalizeInput(v.index); - }); } - return psbt; - } - - async getPublicKey(): Promise { - const pubkeys = await this.keyring.getAccounts(); - return pubkeys[0]; - } - - async signMessage(text: string, type: 'bip322-simple' | 'ecdsa'): Promise { - if (type === 'bip322-simple') { - return await signMessageOfBIP322Simple({ - message: text, - address: this.address, - networkType: this.networkType, - wallet: this - }); - } else { - const pubkey = await this.getPublicKey(); - return await this.keyring.signMessage(pubkey, text); + + async signData(data: string, type: 'ecdsa' | 'schnorr' = 'ecdsa') { + const pubkey = this.getPublicKey(); + return this.keyring.signData(pubkey, data, type); } - } - async signData(data: string, type: 'ecdsa' | 'schnorr' = 'ecdsa') { - const pubkey = await this.getPublicKey(); - return await this.keyring.signData(pubkey, data, type); - } + private async formatOptionsToSignInputs(_psbt: string | bitcoin.Psbt, options?: SignPsbtOptions) { + const accountAddress = this.address; + const accountPubkey = this.getPublicKey(); + + let toSignInputs: ToSignInput[] = []; + if (options && options.toSignInputs) { + // We expect userToSignInputs objects to be similar to ToSignInput interface, + // but we allow address to be specified in addition to publicKey for convenience. + toSignInputs = options.toSignInputs.map((input) => { + const index = Number(input.index); + if (isNaN(index)) throw new Error('invalid index in toSignInput'); + + if (!(input as AddressUserToSignInput).address && !(input as PublicKeyUserToSignInput).publicKey) { + throw new Error('no address or public key in toSignInput'); + } + + if ( + (input as AddressUserToSignInput).address && + (input as AddressUserToSignInput).address != accountAddress + ) { + throw new Error('invalid address in toSignInput'); + } + + if ( + (input as PublicKeyUserToSignInput).publicKey && + (input as PublicKeyUserToSignInput).publicKey != accountPubkey + ) { + throw new Error('invalid public key in toSignInput'); + } + + const sighashTypes = input.sighashTypes?.map(Number); + if (sighashTypes?.some(isNaN)) throw new Error('invalid sighash type in toSignInput'); + + return { + index, + publicKey: accountPubkey, + sighashTypes, + disableTweakSigner: input.disableTweakSigner + }; + }); + } else { + const networkType = this.getNetworkType(); + const psbtNetwork = toPsbtNetwork(networkType); + + const psbt = + typeof _psbt === 'string' + ? bitcoin.Psbt.fromHex(_psbt as string, { network: psbtNetwork }) + : (_psbt as bitcoin.Psbt); + psbt.data.inputs.forEach((v, index) => { + let script: any = null; + if (v.witnessUtxo) { + script = v.witnessUtxo.script; + } else if (v.nonWitnessUtxo) { + const tx = bitcoin.Transaction.fromBuffer(v.nonWitnessUtxo); + const output = tx.outs[psbt.txInputs[index].index]; + script = output.script; + } + const isSigned = v.finalScriptSig || v.finalScriptWitness; + if (script && !isSigned) { + const address = scriptPkToAddress(script, this.networkType); + if (accountAddress === address) { + toSignInputs.push({ + index, + publicKey: accountPubkey, + sighashTypes: v.sighashType ? [v.sighashType] : undefined + }); + } + } + }); + } + return toSignInputs; + } } diff --git a/test/keyring/hd-keyring.test.ts b/test/keyring/hd-keyring.test.ts index 452b79d..b1b2961 100644 --- a/test/keyring/hd-keyring.test.ts +++ b/test/keyring/hd-keyring.test.ts @@ -1,224 +1,225 @@ import { expect } from 'chai'; import { HdKeyring } from '../../src/keyring'; + const sampleMnemonic = 'finish oppose decorate face calm tragic certain desk hour urge dinosaur mango'; const firstPrivateKey = '69f477943dd1591f0261cabade0839e2ffc0c13d8fa1ce0d69f6c6c251163b34'; const firstAccount = '025d7c14ab260a6932bc5484a0d9791f5cce66b0c6e1e4d7aee1e6bd294459e7d9'; const secondAccount = '0306cd1266c7dfc5522d1f170fa45cca29a7071a5dad848204b676cbd398aa7d30'; describe('bitcoin-hd-keyring', () => { - describe('constructor', () => { - it('constructs with a typeof string mnemonic', async () => { - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1] - }); - const accounts = await keyring.getAccounts(); - expect(accounts[0]).eq(firstAccount); - expect(accounts[1]).eq(secondAccount); - const privateKey = await keyring.exportAccount(accounts[0]); - expect(privateKey).eq(firstPrivateKey); - }); - }); - - describe('re-initialization protection', () => { - const alreadyProvidedError = 'Btc-Hd-Keyring: Secret recovery phrase already provided'; - it('double generateRandomMnemonic', async () => { - const keyring = new HdKeyring(); - await keyring.initFromMnemonic(sampleMnemonic); - - let error = ''; - try { - await keyring.initFromMnemonic(sampleMnemonic); - } catch (e) { - error = e.message; - } - expect(error).eq(alreadyProvidedError); - }); - - it('constructor + generateRandomMnemonic', async () => { - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1] - }); - - let error = ''; - try { - await keyring.initFromMnemonic(sampleMnemonic); - } catch (e) { - error = e.message; - } - expect(error).eq(alreadyProvidedError); - }); - }); - - describe('Keyring.type', () => { - it('is a class property that returns the type string.', () => { - const { type } = HdKeyring; - expect(typeof type).eq('string'); - }); - }); - - describe('#type', () => { - it('returns the correct value', () => { - const keyring = new HdKeyring(); - - const { type } = keyring; - const correct = HdKeyring.type; - expect(type).eq(correct); - }); - }); - - describe('#Change hdPath', () => { - it('pass m/44', async () => { - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1], - hdPath: "m/44'/0'/0'/0" - }); - - const accounts_m44 = await keyring.getAccounts(); - expect(accounts_m44).deep.equal([ - '025d7c14ab260a6932bc5484a0d9791f5cce66b0c6e1e4d7aee1e6bd294459e7d9', - '0306cd1266c7dfc5522d1f170fa45cca29a7071a5dad848204b676cbd398aa7d30' - ]); - }); - - it('pass m/84', async () => { - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1], - hdPath: "m/84'/0'/0'/0" - }); - - const accounts_m84 = await keyring.getAccounts(); - expect(accounts_m84).deep.equal([ - '02d16db9d525d8623e80c04e33c4463450285791124381bc545bb85e5e8925a776', - '023f0b3115a6c5a51ec62d8cbe6e834e79fe4bf22555e095a163e0e451a6fdc4d5' - ]); + describe('constructor', () => { + it('constructs with a typeof string mnemonic', async () => { + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1] + }); + const accounts = keyring.getAccounts(); + expect(accounts[0]).eq(firstAccount); + expect(accounts[1]).eq(secondAccount); + const privateKey = keyring.exportAccount(accounts[0]); + expect(privateKey).eq(firstPrivateKey); + }); }); - it('change m/44 to m/84', async () => { - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1], - hdPath: "m/44'/0'/0'/0" - }); - - keyring.changeHdPath("m/84'/0'/0'/0"); - const accounts_m84 = await keyring.getAccounts(); - expect(accounts_m84).deep.equal([ - '02d16db9d525d8623e80c04e33c4463450285791124381bc545bb85e5e8925a776', - '023f0b3115a6c5a51ec62d8cbe6e834e79fe4bf22555e095a163e0e451a6fdc4d5' - ]); + describe('re-initialization protection', () => { + const alreadyProvidedError = 'Btc-Hd-Keyring: Secret recovery phrase already provided'; + it('double generateRandomMnemonic', async () => { + const keyring = new HdKeyring(); + keyring.initFromMnemonic(sampleMnemonic); + + let error = ''; + try { + keyring.initFromMnemonic(sampleMnemonic); + } catch (e) { + error = e.message; + } + expect(error).eq(alreadyProvidedError); + }); + + it('constructor + generateRandomMnemonic', async () => { + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1] + }); + + let error = ''; + try { + keyring.initFromMnemonic(sampleMnemonic); + } catch (e) { + error = e.message; + } + expect(error).eq(alreadyProvidedError); + }); }); - it('getAccountByHdPath', async () => { - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1], - hdPath: "m/44'/0'/0'/0" - }); - - const account = keyring.getAccountByHdPath("m/84'/0'/0'/0", 1); - expect(account).eq('023f0b3115a6c5a51ec62d8cbe6e834e79fe4bf22555e095a163e0e451a6fdc4d5'); - }); - }); - - describe('more words test', () => { - it('12 words', async () => { - const sampleMnemonic = 'glue peanut huge wait vicious depend copper ribbon access boring walk point'; - const firstAccount = '0244ffe4b9f87b7c1e2f8b0d7dee2a91492fedf9c92fc06231764826633b2c8afa'; - const secondAccount = '0243906ea96ce2680826bfd906cdfcbb70cf2764e469518ba000f0aeb76a6b025b'; - - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1] - }); - - const accounts = await keyring.getAccounts(); - expect(accounts[0]).eq(firstAccount); - expect(accounts[1]).eq(secondAccount); + describe('Keyring.type', () => { + it('is a class property that returns the type string.', () => { + const { type } = HdKeyring; + expect(typeof type).eq('string'); + }); }); - it('15 words', async () => { - const sampleMnemonic = - 'gloom prepare pause lazy item valley pear develop ahead crucial fuel seed bone reward shoot'; - const firstAccount = '02c7b966f5ea72f65c3c3e218103d08c3f259b21cc99d846754e2ca766eb1afd85'; - const secondAccount = '02dea555ea75823e76c2b7589bdbc601ef4eb26742be5f096bc31319367873101b'; + describe('#type', () => { + it('returns the correct value', () => { + const keyring = new HdKeyring(); - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1] - }); - - const accounts = await keyring.getAccounts(); - expect(accounts[0]).eq(firstAccount); - expect(accounts[1]).eq(secondAccount); + const { type } = keyring; + const correct = HdKeyring.type; + expect(type).eq(correct); + }); }); - it('18 words', async () => { - const sampleMnemonic = - 'machine chest second galaxy rally design stumble code address general twelve job code acquire dutch debate jealous truly'; - const firstAccount = '02d9bf4d71d15e941fb060f58e74c53995761a381d2e368062687c1ef65bb52a84'; - const secondAccount = '03d1b536f6f18eb1ffea8227987a1a80072a316c3d0bfedc2af01b21ece5b7492e'; - - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1] - }); - - const accounts = await keyring.getAccounts(); - expect(accounts[0]).eq(firstAccount); - expect(accounts[1]).eq(secondAccount); + describe('#Change hdPath', () => { + it('pass m/44', async () => { + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1], + hdPath: "m/44'/0'/0'/0" + }); + + const accounts_m44 = keyring.getAccounts(); + expect(accounts_m44).deep.equal([ + '025d7c14ab260a6932bc5484a0d9791f5cce66b0c6e1e4d7aee1e6bd294459e7d9', + '0306cd1266c7dfc5522d1f170fa45cca29a7071a5dad848204b676cbd398aa7d30' + ]); + }); + + it('pass m/84', async () => { + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1], + hdPath: "m/84'/0'/0'/0" + }); + + const accounts_m84 = keyring.getAccounts(); + expect(accounts_m84).deep.equal([ + '02d16db9d525d8623e80c04e33c4463450285791124381bc545bb85e5e8925a776', + '023f0b3115a6c5a51ec62d8cbe6e834e79fe4bf22555e095a163e0e451a6fdc4d5' + ]); + }); + + it('change m/44 to m/84', async () => { + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1], + hdPath: "m/44'/0'/0'/0" + }); + + keyring.changeHdPath("m/84'/0'/0'/0"); + const accounts_m84 = keyring.getAccounts(); + expect(accounts_m84).deep.equal([ + '02d16db9d525d8623e80c04e33c4463450285791124381bc545bb85e5e8925a776', + '023f0b3115a6c5a51ec62d8cbe6e834e79fe4bf22555e095a163e0e451a6fdc4d5' + ]); + }); + + it('getAccountByHdPath', async () => { + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1], + hdPath: "m/44'/0'/0'/0" + }); + + const account = keyring.getAccountByHdPath("m/84'/0'/0'/0", 1); + expect(account).eq('023f0b3115a6c5a51ec62d8cbe6e834e79fe4bf22555e095a163e0e451a6fdc4d5'); + }); }); - it('21 words', async () => { - const sampleMnemonic = - 'squirrel spawn fog zero approve connect mirror social basic about alert yellow giraffe oak company file finger winner coast cushion oxygen'; - const firstAccount = '02deda9f6759511ac3b00bd685871cf5b658dc082db39ba7dfeb394134cddc5537'; - const secondAccount = '031c90977662ae1c7ab0082940307a0a82d34bdba9c26b38404402676e99484b9e'; - - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1] - }); - - const accounts = await keyring.getAccounts(); - expect(accounts[0]).eq(firstAccount); - expect(accounts[1]).eq(secondAccount); + describe('more words test', () => { + it('12 words', async () => { + const sampleMnemonic = 'glue peanut huge wait vicious depend copper ribbon access boring walk point'; + const firstAccount = '0244ffe4b9f87b7c1e2f8b0d7dee2a91492fedf9c92fc06231764826633b2c8afa'; + const secondAccount = '0243906ea96ce2680826bfd906cdfcbb70cf2764e469518ba000f0aeb76a6b025b'; + + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1] + }); + + const accounts = keyring.getAccounts(); + expect(accounts[0]).eq(firstAccount); + expect(accounts[1]).eq(secondAccount); + }); + + it('15 words', async () => { + const sampleMnemonic = + 'gloom prepare pause lazy item valley pear develop ahead crucial fuel seed bone reward shoot'; + const firstAccount = '02c7b966f5ea72f65c3c3e218103d08c3f259b21cc99d846754e2ca766eb1afd85'; + const secondAccount = '02dea555ea75823e76c2b7589bdbc601ef4eb26742be5f096bc31319367873101b'; + + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1] + }); + + const accounts = keyring.getAccounts(); + expect(accounts[0]).eq(firstAccount); + expect(accounts[1]).eq(secondAccount); + }); + + it('18 words', async () => { + const sampleMnemonic = + 'machine chest second galaxy rally design stumble code address general twelve job code acquire dutch debate jealous truly'; + const firstAccount = '02d9bf4d71d15e941fb060f58e74c53995761a381d2e368062687c1ef65bb52a84'; + const secondAccount = '03d1b536f6f18eb1ffea8227987a1a80072a316c3d0bfedc2af01b21ece5b7492e'; + + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1] + }); + + const accounts = keyring.getAccounts(); + expect(accounts[0]).eq(firstAccount); + expect(accounts[1]).eq(secondAccount); + }); + + it('21 words', async () => { + const sampleMnemonic = + 'squirrel spawn fog zero approve connect mirror social basic about alert yellow giraffe oak company file finger winner coast cushion oxygen'; + const firstAccount = '02deda9f6759511ac3b00bd685871cf5b658dc082db39ba7dfeb394134cddc5537'; + const secondAccount = '031c90977662ae1c7ab0082940307a0a82d34bdba9c26b38404402676e99484b9e'; + + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1] + }); + + const accounts = keyring.getAccounts(); + expect(accounts[0]).eq(firstAccount); + expect(accounts[1]).eq(secondAccount); + }); + + it('24 words', async () => { + const sampleMnemonic = + 'dash pair decline scrap federal marine erase lounge fancy quick valid crawl wing ahead art chaos deposit rare deputy gaze often fence alien picture'; + const firstAccount = '03111f9a4b905f058d0fb0cbc968f2e8d3796d8e6a2308b90069477a5a0be09b01'; + const secondAccount = '03e514ed9ec10e4df0b134d0728abf5746ace056230e12d3e9cce8fe669d74a532'; + + const keyring = new HdKeyring({ + mnemonic: sampleMnemonic, + activeIndexes: [0, 1] + }); + + const accounts = keyring.getAccounts(); + expect(accounts[0]).eq(firstAccount); + expect(accounts[1]).eq(secondAccount); + }); }); - it('24 words', async () => { - const sampleMnemonic = - 'dash pair decline scrap federal marine erase lounge fancy quick valid crawl wing ahead art chaos deposit rare deputy gaze often fence alien picture'; - const firstAccount = '03111f9a4b905f058d0fb0cbc968f2e8d3796d8e6a2308b90069477a5a0be09b01'; - const secondAccount = '03e514ed9ec10e4df0b134d0728abf5746ace056230e12d3e9cce8fe669d74a532'; - - const keyring = new HdKeyring({ - mnemonic: sampleMnemonic, - activeIndexes: [0, 1] - }); - - const accounts = await keyring.getAccounts(); - expect(accounts[0]).eq(firstAccount); - expect(accounts[1]).eq(secondAccount); - }); - }); - - describe('support xpriv', () => { - it('xpriv', async () => { - const sampleXpriv = - 'xprvA2JBuYsdqVhrC2wGmb9QhBejk9gXXYgM3Jg9xgVYmDMsakDoURc8V7UYos1pP1kev1tG51PPA9A8VMYYCLov1L5c3J7npraxwjeJCquGhDi'; - const firstAccount = '0244ffe4b9f87b7c1e2f8b0d7dee2a91492fedf9c92fc06231764826633b2c8afa'; - const secondAccount = '0243906ea96ce2680826bfd906cdfcbb70cf2764e469518ba000f0aeb76a6b025b'; - - const keyring = new HdKeyring({ - xpriv: sampleXpriv, - activeIndexes: [0, 1] - }); - - const accounts = await keyring.getAccounts(); - expect(accounts[0]).eq(firstAccount); - expect(accounts[1]).eq(secondAccount); + describe('support xpriv', () => { + it('xpriv', async () => { + const sampleXpriv = + 'xprvA2JBuYsdqVhrC2wGmb9QhBejk9gXXYgM3Jg9xgVYmDMsakDoURc8V7UYos1pP1kev1tG51PPA9A8VMYYCLov1L5c3J7npraxwjeJCquGhDi'; + const firstAccount = '0244ffe4b9f87b7c1e2f8b0d7dee2a91492fedf9c92fc06231764826633b2c8afa'; + const secondAccount = '0243906ea96ce2680826bfd906cdfcbb70cf2764e469518ba000f0aeb76a6b025b'; + + const keyring = new HdKeyring({ + xpriv: sampleXpriv, + activeIndexes: [0, 1] + }); + + const accounts = keyring.getAccounts(); + expect(accounts[0]).eq(firstAccount); + expect(accounts[1]).eq(secondAccount); + }); }); - }); }); diff --git a/test/keyring/keystone-keyring.test.ts b/test/keyring/keystone-keyring.test.ts index 6e23bfb..492e29b 100644 --- a/test/keyring/keystone-keyring.test.ts +++ b/test/keyring/keystone-keyring.test.ts @@ -1,184 +1,186 @@ import { expect } from 'chai'; import { KeystoneKeyring } from '../../src/keyring'; +import { bitcoin } from '../../lib/bitcoin-core'; const initOpts = { - mfp: '52744703', - keys: [ - { - path: "m/44'/0'/0'", - extendedPublicKey: - 'xpub6CWL8m4zcbAPXjWkfFWkyjkorenkhBV8P6VFFCmoMn9WZZZhC3ehf7jovLr5HYXGnHZXZbEBFCWo6KqZiqzaV1gMMc5fdprGiWiaA6vynpA' - }, - { - path: "m/49'/0'/0'", - extendedPublicKey: - 'xpub6CK8ZyoANWjWk24vmGhZ3V5x28QinZ3C66P3es5oDgtrvZLDK8txJHXu88zKsGc3WA7HFUDPHYcoWir4j2cMNMKBBhfHCB37StVhxozA5Lp' - }, - { - path: "m/84'/0'/0'", - extendedPublicKey: - 'xpub6CcBrNAXBhrdb29q4BFApXgKgCdnHevzGnwFKnDSYfWWMcqkbH17ay6vaUJDZxFdZx5y5AdcoEzLfURSdwtQEEZ93Y5VXUSJ9S8hm5SY7Si' - }, - { - path: "m/86'/0'/0'", - extendedPublicKey: - 'xpub6Cq9mdT8xwFe9LYQnt9y1hJXTyo7KQJM8pRH6K95F1mbELzgm825m3hyAZ97vsUV8Xh7VRwu7bKuLZEmUV1ABqCRQqFzZHAsfaJXTYSY1cf' - } - ], - hdPath: "m/44'/0'/0'", - activeIndexes: [0, 1] + mfp: '52744703', + keys: [ + { + path: "m/44'/0'/0'", + extendedPublicKey: + 'xpub6CWL8m4zcbAPXjWkfFWkyjkorenkhBV8P6VFFCmoMn9WZZZhC3ehf7jovLr5HYXGnHZXZbEBFCWo6KqZiqzaV1gMMc5fdprGiWiaA6vynpA' + }, + { + path: "m/49'/0'/0'", + extendedPublicKey: + 'xpub6CK8ZyoANWjWk24vmGhZ3V5x28QinZ3C66P3es5oDgtrvZLDK8txJHXu88zKsGc3WA7HFUDPHYcoWir4j2cMNMKBBhfHCB37StVhxozA5Lp' + }, + { + path: "m/84'/0'/0'", + extendedPublicKey: + 'xpub6CcBrNAXBhrdb29q4BFApXgKgCdnHevzGnwFKnDSYfWWMcqkbH17ay6vaUJDZxFdZx5y5AdcoEzLfURSdwtQEEZ93Y5VXUSJ9S8hm5SY7Si' + }, + { + path: "m/86'/0'/0'", + extendedPublicKey: + 'xpub6Cq9mdT8xwFe9LYQnt9y1hJXTyo7KQJM8pRH6K95F1mbELzgm825m3hyAZ97vsUV8Xh7VRwu7bKuLZEmUV1ABqCRQqFzZHAsfaJXTYSY1cf' + } + ], + hdPath: "m/44'/0'/0'", + activeIndexes: [0, 1], + network: bitcoin.networks.bitcoin }; const firstAccount = { - index: 0, - path: "m/44'/0'/0'/0/0", - publicKey: '03595bab1a88ddd75f04205b8533cd8d1ce2b2a24ebe164d6ad6a1f4945aed3f99' + index: 0, + path: "m/44'/0'/0'/0/0", + publicKey: '03595bab1a88ddd75f04205b8533cd8d1ce2b2a24ebe164d6ad6a1f4945aed3f99' }; const secondAccount = { - index: 1, - path: "m/44'/0'/0'/0/1", - publicKey: '02aea7c5fa9074943e0821d7db0f2a2114a8694a9a24237e8a452056340d47c0f3' + index: 1, + path: "m/44'/0'/0'/0/1", + publicKey: '02aea7c5fa9074943e0821d7db0f2a2114a8694a9a24237e8a452056340d47c0f3' }; describe('bitcoin-keystone-keyring', () => { - describe('constructor', () => { - it('constructs', async () => { - const keyring = new KeystoneKeyring(initOpts); + describe('constructor', () => { + it('constructs', async () => { + const keyring = new KeystoneKeyring(initOpts); - const accounts = await keyring.getAccounts(); + const accounts = await keyring.getAccounts(); - expect(accounts).deep.eq([firstAccount.publicKey, secondAccount.publicKey]); + expect(accounts).deep.eq([firstAccount.publicKey, secondAccount.publicKey]); + }); }); - }); - - describe('init', () => { - it('init from UR', async () => { - const keyring = new KeystoneKeyring(); - - await keyring.initFromUR( - 'crypto-account', - 'a2011a527447030284d90194d9012fa702f40358210238506dbd94e82166cb68536ffa0d0e145fcb87b975d9dbd0475fdb664f3daea6045820399c9a9c6b98711235a2484f8e44cbb5f1e656306ae15a0bb29a0d7ed227f0a805d90131a20100020006d90130a301861854f500f500f5021a52744703030307d90130a2018400f480f40300081a81ff3431d90193d9012fa702f403582103ebd552027b73adb1de1aa494ca7cedfe781434d6f102a55355b118a0c5da78bc045820517438aec2b78e81c275a41be63df6083358070cbefdb59de69bd2f99c003e8a05d90131a20100020006d90130a30186182cf500f500f5021a52744703030307d90130a2018400f480f40300081a7441f35cd90190d90194d9012fa702f403582102f3b97cf3f3387e2c4d8c7141a21529a90e0585e9f032706798d18f988a56e3f1045820ac31dee4dd3f4632f984e0a41e8728edc3ec67f614c8f03181490c8945d19d7405d90131a20100020006d90130a301861831f500f500f5021a52744703030307d90130a2018400f480f40300081a59fcb265d90199d9012fa702f4035821026c395e1763f5a6f07ade3557429c4bdab45d5487599ed283e78534ac1816408f045820af3a23ef7b1a54d3dbdb6c3e502382e55de5ff575f13ceacf52be01be37c0b4405d90131a20100020006d90130a301861856f500f500f5021a52744703030307d90130a2018400f480f40300081aa0682b01' - ); - const opts = await keyring.serialize(); - - expect(opts).deep.eq({ - mfp: '52744703', - keys: [ - { - path: "m/84'/0'/0'", - extendedPublicKey: - 'xpub6CcBrNAXBhrdb29q4BFApXgKgCdnHevzGnwFKnDSYfWWMcqkbH17ay6vaUJDZxFdZx5y5AdcoEzLfURSdwtQEEZ93Y5VXUSJ9S8hm5SY7Si' - }, - { - path: "m/44'/0'/0'", - extendedPublicKey: - 'xpub6CWL8m4zcbAPXjWkfFWkyjkorenkhBV8P6VFFCmoMn9WZZZhC3ehf7jovLr5HYXGnHZXZbEBFCWo6KqZiqzaV1gMMc5fdprGiWiaA6vynpA' - }, - { - path: "m/49'/0'/0'", - extendedPublicKey: - 'xpub6CK8ZyoANWjWk24vmGhZ3V5x28QinZ3C66P3es5oDgtrvZLDK8txJHXu88zKsGc3WA7HFUDPHYcoWir4j2cMNMKBBhfHCB37StVhxozA5Lp' - }, - { - path: "m/86'/0'/0'", - extendedPublicKey: - 'xpub6Cq9mdT8xwFe9LYQnt9y1hJXTyo7KQJM8pRH6K95F1mbELzgm825m3hyAZ97vsUV8Xh7VRwu7bKuLZEmUV1ABqCRQqFzZHAsfaJXTYSY1cf' - } - ], - hdPath: "m/44'/0'/0'/0", - activeIndexes: [] - }); - }); - }); - describe('manage accounts', () => { - it('add a single account', async () => { - const keyring = new KeystoneKeyring(initOpts); - - await keyring.addAccounts(1); - - expect(keyring.activeIndexes).deep.eq([0, 1, 2]); + describe('init', () => { + it('init from UR', async () => { + const keyring = new KeystoneKeyring(); + + await keyring.initFromUR( + 'crypto-account', + 'a2011a527447030284d90194d9012fa702f40358210238506dbd94e82166cb68536ffa0d0e145fcb87b975d9dbd0475fdb664f3daea6045820399c9a9c6b98711235a2484f8e44cbb5f1e656306ae15a0bb29a0d7ed227f0a805d90131a20100020006d90130a301861854f500f500f5021a52744703030307d90130a2018400f480f40300081a81ff3431d90193d9012fa702f403582103ebd552027b73adb1de1aa494ca7cedfe781434d6f102a55355b118a0c5da78bc045820517438aec2b78e81c275a41be63df6083358070cbefdb59de69bd2f99c003e8a05d90131a20100020006d90130a30186182cf500f500f5021a52744703030307d90130a2018400f480f40300081a7441f35cd90190d90194d9012fa702f403582102f3b97cf3f3387e2c4d8c7141a21529a90e0585e9f032706798d18f988a56e3f1045820ac31dee4dd3f4632f984e0a41e8728edc3ec67f614c8f03181490c8945d19d7405d90131a20100020006d90130a301861831f500f500f5021a52744703030307d90130a2018400f480f40300081a59fcb265d90199d9012fa702f4035821026c395e1763f5a6f07ade3557429c4bdab45d5487599ed283e78534ac1816408f045820af3a23ef7b1a54d3dbdb6c3e502382e55de5ff575f13ceacf52be01be37c0b4405d90131a20100020006d90130a301861856f500f500f5021a52744703030307d90130a2018400f480f40300081aa0682b01' + ); + const opts = await keyring.serialize(); + + expect(opts).deep.eq({ + mfp: '52744703', + keys: [ + { + path: "m/84'/0'/0'", + extendedPublicKey: + 'xpub6CcBrNAXBhrdb29q4BFApXgKgCdnHevzGnwFKnDSYfWWMcqkbH17ay6vaUJDZxFdZx5y5AdcoEzLfURSdwtQEEZ93Y5VXUSJ9S8hm5SY7Si' + }, + { + path: "m/44'/0'/0'", + extendedPublicKey: + 'xpub6CWL8m4zcbAPXjWkfFWkyjkorenkhBV8P6VFFCmoMn9WZZZhC3ehf7jovLr5HYXGnHZXZbEBFCWo6KqZiqzaV1gMMc5fdprGiWiaA6vynpA' + }, + { + path: "m/49'/0'/0'", + extendedPublicKey: + 'xpub6CK8ZyoANWjWk24vmGhZ3V5x28QinZ3C66P3es5oDgtrvZLDK8txJHXu88zKsGc3WA7HFUDPHYcoWir4j2cMNMKBBhfHCB37StVhxozA5Lp' + }, + { + path: "m/86'/0'/0'", + extendedPublicKey: + 'xpub6Cq9mdT8xwFe9LYQnt9y1hJXTyo7KQJM8pRH6K95F1mbELzgm825m3hyAZ97vsUV8Xh7VRwu7bKuLZEmUV1ABqCRQqFzZHAsfaJXTYSY1cf' + } + ], + hdPath: "m/44'/0'/0'/0", + activeIndexes: [] + }); + }); }); - it('add multiple accounts', async () => { - const keyring = new KeystoneKeyring(initOpts); + describe('manage accounts', () => { + it('add a single account', async () => { + const keyring = new KeystoneKeyring(initOpts); - await keyring.addAccounts(2); + await keyring.addAccounts(1); - expect(keyring.activeIndexes).deep.eq([0, 1, 2, 3]); - }); + expect(keyring.activeIndexes).deep.eq([0, 1, 2]); + }); - it('remove a account', async () => { - const keyring = new KeystoneKeyring(initOpts); + it('add multiple accounts', async () => { + const keyring = new KeystoneKeyring(initOpts); - keyring.removeAccount(firstAccount.publicKey); + await keyring.addAccounts(2); - expect(keyring.activeIndexes).deep.eq([1]); - }); + expect(keyring.activeIndexes).deep.eq([0, 1, 2, 3]); + }); - it('active a single account', async () => { - const keyring = new KeystoneKeyring(initOpts); + it('remove a account', async () => { + const keyring = new KeystoneKeyring(initOpts); - keyring.activeAccounts([6]); + keyring.removeAccount(firstAccount.publicKey); - expect(keyring.activeIndexes).deep.eq([0, 1, 6]); - }); + expect(keyring.activeIndexes).deep.eq([1]); + }); - it('active multiple accounts', async () => { - const keyring = new KeystoneKeyring(initOpts); + it('active a single account', async () => { + const keyring = new KeystoneKeyring(initOpts); - keyring.activeAccounts([0, 6, 7]); + keyring.activeAccounts([6]); - expect(keyring.activeIndexes).deep.eq([0, 1, 6, 7]); - }); + expect(keyring.activeIndexes).deep.eq([0, 1, 6]); + }); - it('get all accounts', async () => { - const keyring = new KeystoneKeyring(initOpts); + it('active multiple accounts', async () => { + const keyring = new KeystoneKeyring(initOpts); - const accounts = await keyring.getAccountsWithBrand(); + keyring.activeAccounts([0, 6, 7]); - expect(accounts).deep.eq([ - { - address: firstAccount.publicKey, - index: firstAccount.index - }, - { - address: secondAccount.publicKey, - index: secondAccount.index - } - ]); - }); - }); - - describe('change hdPath', () => { - it('change m/44 to m/84', async () => { - const keyring = new KeystoneKeyring(initOpts); - keyring.changeHdPath(initOpts.keys[2].path); - const accounts = await keyring.getAccounts(); - expect(accounts).deep.eq([ - '029045ad4453414ca9cf64ca4afeec6ead859ee9a60f259b08509b014c156b3a6b', - '02a80a1cddc6ef06fe5b383e1c59c58dc92e7cb533e8fec15d04a1307cb71b0ac0' - ]); - }); + expect(keyring.activeIndexes).deep.eq([0, 1, 6, 7]); + }); - // change m/44 to change address - it('change m/44 to change address', async () => { - const keyring = new KeystoneKeyring(initOpts); - keyring.changeChangeAddressHdPath("m/44'/0'/0'/1"); - const accounts = await keyring.getAccounts(); - expect(accounts).deep.eq([]); - }); + it('get all accounts', async () => { + const keyring = new KeystoneKeyring(initOpts); + + const accounts = await keyring.getAccountsWithBrand(); - it('get account by hdPath', async () => { - const keyring = new KeystoneKeyring(initOpts); - const account = keyring.getAccountByHdPath(initOpts.keys[2].path, 0); - expect(account).eq('029045ad4453414ca9cf64ca4afeec6ead859ee9a60f259b08509b014c156b3a6b'); + expect(accounts).deep.eq([ + { + address: firstAccount.publicKey, + index: firstAccount.index + }, + { + address: secondAccount.publicKey, + index: secondAccount.index + } + ]); + }); }); - it('get change address account by hdPath', async () => { - const keyring = new KeystoneKeyring(initOpts); - const account = keyring.getChangeAddressAccountByHdPath("m/44'/0'/0'/1", 0); - expect(account).eq('026cc2828e3163f567fa63a20215260dba29bca82b3a1a4e81622fd02a275e2f99'); + describe('change hdPath', () => { + it('change m/44 to m/84', async () => { + const keyring = new KeystoneKeyring(initOpts); + keyring.changeHdPath(initOpts.keys[2].path); + const accounts = await keyring.getAccounts(); + expect(accounts).deep.eq([ + '029045ad4453414ca9cf64ca4afeec6ead859ee9a60f259b08509b014c156b3a6b', + '02a80a1cddc6ef06fe5b383e1c59c58dc92e7cb533e8fec15d04a1307cb71b0ac0' + ]); + }); + + // change m/44 to change address + it('change m/44 to change address', async () => { + const keyring = new KeystoneKeyring(initOpts); + keyring.changeChangeAddressHdPath("m/44'/0'/0'/1"); + const accounts = await keyring.getAccounts(); + expect(accounts).deep.eq([]); + }); + + it('get account by hdPath', async () => { + const keyring = new KeystoneKeyring(initOpts); + const account = keyring.getAccountByHdPath(initOpts.keys[2].path, 0); + expect(account).eq('029045ad4453414ca9cf64ca4afeec6ead859ee9a60f259b08509b014c156b3a6b'); + }); + + it('get change address account by hdPath', async () => { + const keyring = new KeystoneKeyring(initOpts); + const account = keyring.getChangeAddressAccountByHdPath("m/44'/0'/0'/1", 0); + expect(account).eq('026cc2828e3163f567fa63a20215260dba29bca82b3a1a4e81622fd02a275e2f99'); + }); }); - }); }); diff --git a/test/keyring/simple-keyring.test.ts b/test/keyring/simple-keyring.test.ts index 26b29e4..2eb15b5 100644 --- a/test/keyring/simple-keyring.test.ts +++ b/test/keyring/simple-keyring.test.ts @@ -7,320 +7,320 @@ import { toXOnly } from '../../src/utils'; const TYPE_STR = 'Simple Key Pair'; const testAccount = { - key: '88544d58a328a380a4a433e4bb44b2a9f8a1152b1467393cfc8f8e5d81137162', - address: '02b57a152325231723ee9faabba930108b19c11a391751572f380d71b447317ae7' + key: '88544d58a328a380a4a433e4bb44b2a9f8a1152b1467393cfc8f8e5d81137162', + address: '02b57a152325231723ee9faabba930108b19c11a391751572f380d71b447317ae7' }; describe('bitcoin-simple-keyring', () => { - let keyring: SimpleKeyring; - beforeEach(() => { - keyring = new SimpleKeyring(); - }); - - describe('Keyring.type', function () { - it('is a class property that returns the type string.', function () { - const { type } = SimpleKeyring; - expect(type).eq(TYPE_STR); + let keyring: SimpleKeyring; + beforeEach(() => { + keyring = new SimpleKeyring(); }); - }); - describe('#serialize empty wallets.', function () { - it('serializes an empty array', async function () { - const output = await keyring.serialize(); - expect(output.length == 0).to.be.true; - }); - }); - - describe('#deserialize a private key', function () { - it('serializes what it deserializes', async function () { - await keyring.deserialize([testAccount.key]); - const serialized = await keyring.serialize(); - expect(serialized).length(1); - expect(serialized[0]).eq(testAccount.key); + describe('Keyring.type', function () { + it('is a class property that returns the type string.', function () { + const { type } = SimpleKeyring; + expect(type).eq(TYPE_STR); + }); }); - }); - describe('#constructor with a private key', function () { - it('has the correct addresses', async function () { - const newKeyring = new SimpleKeyring([testAccount.key]); - const accounts = await newKeyring.getAccounts(); - expect(accounts).eqls([testAccount.address]); + describe('#serialize empty wallets.', function () { + it('serializes an empty array', async function () { + const output = keyring.serialize().privateKeys; + expect(output.length == 0).to.be.true; + }); }); - }); - - describe('#add accounts', function () { - describe('with no arguments', function () { - it('creates a single wallet', async function () { - await keyring.addAccounts(); - const serializedKeyring = await keyring.serialize(); - expect(serializedKeyring).length(1); - }); + + describe('#deserialize a private key', function () { + it('serializes what it deserializes', async function () { + keyring.deserialize({ privateKeys: [testAccount.key] }); + const serialized = keyring.serialize().privateKeys; + expect(serialized).length(1); + expect(serialized[0]).eq(testAccount.key); + }); }); - describe('with a numeric argument', function () { - it('creates that number of wallets', async function () { - await keyring.addAccounts(3); - const serializedKeyring = await keyring.serialize(); - expect(serializedKeyring).length(3); - }); + describe('#constructor with a private key', function () { + it('has the correct addresses', async function () { + const newKeyring = new SimpleKeyring({ privateKeys: [testAccount.key] }); + const accounts = newKeyring.getAccounts(); + expect(accounts).eqls([testAccount.address]); + }); }); - describe('#getAccounts', function () { - it('should return a list of addresses in wallet', async function () { - // Push a mock wallet - keyring.deserialize([testAccount.key]); + describe('#add accounts', function () { + describe('with no arguments', function () { + it('creates a single wallet', async function () { + keyring.addAccounts(); + const serializedKeyring = keyring.serialize().privateKeys; + expect(serializedKeyring).length(1); + }); + }); + + describe('with a numeric argument', function () { + it('creates that number of wallets', async function () { + keyring.addAccounts(3); + const serializedKeyring = keyring.serialize().privateKeys; + expect(serializedKeyring).length(3); + }); + }); - const output = await keyring.getAccounts(); - expect(output).length(1); - expect(output[0]).eql(testAccount.address); - }); - }); + describe('#getAccounts', function () { + it('should return a list of addresses in wallet', async function () { + // Push a mock wallet + keyring.deserialize({ privateKeys: [testAccount.key] }); - describe('#removeAccount', function () { - describe('if the account exists', function () { - it('should remove that account', async function () { - await keyring.addAccounts(); - const addresses = await keyring.getAccounts(); - expect(addresses).length(1); - keyring.removeAccount(addresses[0]); - const addressesAfterRemoval = await keyring.getAccounts(); - expect(addressesAfterRemoval).length(0); + const output = keyring.getAccounts(); + expect(output).length(1); + expect(output[0]).eql(testAccount.address); + }); }); - }); - - describe('if the account does not exist', function () { - it('should throw an error', function () { - const unexistingAccount = '000000000000000000000000000000000000000000000000000000000000000000'; - expect(() => keyring.removeAccount(unexistingAccount)).throw( - `PublicKey ${unexistingAccount} not found in this keyring` - ); + + describe('#removeAccount', function () { + describe('if the account exists', function () { + it('should remove that account', async function () { + keyring.addAccounts(); + const addresses = keyring.getAccounts(); + expect(addresses).length(1); + keyring.removeAccount(addresses[0]); + const addressesAfterRemoval = keyring.getAccounts(); + expect(addressesAfterRemoval).length(0); + }); + }); + + describe('if the account does not exist', function () { + it('should throw an error', function () { + const unexistingAccount = '000000000000000000000000000000000000000000000000000000000000000000'; + expect(() => keyring.removeAccount(unexistingAccount)).throw( + `PublicKey ${unexistingAccount} not found in this keyring` + ); + }); + }); }); - }); - }); - }); - - describe('#sign message', function () { - it('verify sig success', async function () { - const newKeyring = new SimpleKeyring([testAccount.key]); - const accounts = await newKeyring.getAccounts(); - const pubkey = accounts[0]; - const msg = 'HELLO WORLD'; - const sig = await newKeyring.signMessage(pubkey, msg); - const verified = await newKeyring.verifyMessage(pubkey, msg, sig); - expect(verified).eq(true); - }); - }); - - describe('#sign data', function () { - it('verify ecdsa success', async function () { - const newKeyring = new SimpleKeyring([testAccount.key]); - const accounts = await newKeyring.getAccounts(); - const pubkey = accounts[0]; - const data = sha256(Buffer.from('HELLO WORLD')).toString('hex'); - const sig = await newKeyring.signData(pubkey, data, 'ecdsa'); - const verified = verifySignData(pubkey, data, 'ecdsa', sig); - expect(verified).eq(true); }); - it('verify schnorr success', async function () { - const newKeyring = new SimpleKeyring([testAccount.key]); - const accounts = await newKeyring.getAccounts(); - const pubkey = accounts[0]; - const data = sha256(Buffer.from('HELLO WORLD')).toString('hex'); - const sig = await newKeyring.signData(pubkey, data, 'schnorr'); - const verified = verifySignData(pubkey, data, 'schnorr', sig); - expect(verified).eq(true); + describe('#sign message', function () { + it('verify sig success', async function () { + const newKeyring = new SimpleKeyring({ privateKeys: [testAccount.key] }); + const accounts = newKeyring.getAccounts(); + const pubkey = accounts[0]; + const msg = 'HELLO WORLD'; + const sig = newKeyring.signMessage(pubkey, msg); + const verified = await newKeyring.verifyMessage(pubkey, msg, sig); + expect(verified).eq(true); + }); }); - it('verify schnorr failed', async function () { - const newKeyring = new SimpleKeyring([testAccount.key]); - const accounts = await newKeyring.getAccounts(); - const pubkey = accounts[0]; - const data = sha256(Buffer.from('HELLO WORLD')).toString('hex'); - const sig = await newKeyring.signData(pubkey, data, 'ecdsa'); - const verified = verifySignData(pubkey, data, 'schnorr', sig); - expect(verified).eq(false); - }); + describe('#sign data', function () { + it('verify ecdsa success', async function () { + const newKeyring = new SimpleKeyring({ privateKeys: [testAccount.key] }); + const accounts = newKeyring.getAccounts(); + const pubkey = accounts[0]; + const data = sha256(Buffer.from('HELLO WORLD')).toString('hex'); + const sig = newKeyring.signData(pubkey, data, 'ecdsa'); + const verified = verifySignData(pubkey, data, 'ecdsa', sig); + expect(verified).eq(true); + }); - it('verify invalid data', async function () { - const newKeyring = new SimpleKeyring([testAccount.key]); - const accounts = await newKeyring.getAccounts(); - const pubkey = accounts[0]; - const data = 'HELLO WORLD'; + it('verify schnorr success', async function () { + const newKeyring = new SimpleKeyring({ privateKeys: [testAccount.key] }); + const accounts = newKeyring.getAccounts(); + const pubkey = accounts[0]; + const data = sha256(Buffer.from('HELLO WORLD')).toString('hex'); + const sig = newKeyring.signData(pubkey, data, 'schnorr'); + const verified = verifySignData(pubkey, data, 'schnorr', sig); + expect(verified).eq(true); + }); - let err = null; - try { - await newKeyring.signData(pubkey, data); - } catch (e) { - err = e; - } + it('verify schnorr failed', async function () { + const newKeyring = new SimpleKeyring({ privateKeys: [testAccount.key] }); + const accounts = newKeyring.getAccounts(); + const pubkey = accounts[0]; + const data = sha256(Buffer.from('HELLO WORLD')).toString('hex'); + const sig = newKeyring.signData(pubkey, data, 'ecdsa'); + const verified = verifySignData(pubkey, data, 'schnorr', sig); + expect(verified).eq(false); + }); - expect(err.message).eq('Expected Hash'); - }); - }); - - describe('#sign psbt', function () { - it('sign P2TR input', async function () { - const network = bitcoin.networks.bitcoin; - - const newKeyring = new SimpleKeyring(); - await newKeyring.addAccounts(1); - const accounts = await newKeyring.getAccounts(); - const pubkey = accounts[0]; - const internalPubkey = toXOnly(Buffer.from(pubkey, 'hex')); - const payment = bitcoin.payments.p2tr({ - internalPubkey, - network - }); - - const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); - const value = 10000; - const prevoutIndex = 0xffffffff; - const sequence = 0; - const txToSpend = new bitcoin.Transaction(); - txToSpend.version = 0; - txToSpend.addInput(prevoutHash, prevoutIndex, sequence); - txToSpend.addOutput(payment.output!, value); - - const psbt = new bitcoin.Psbt({ network }); - psbt.addInput({ - hash: txToSpend.getHash(), - index: 0, - sequence: 0, - witnessUtxo: { - script: payment.output!, - value - }, - tapInternalKey: toXOnly(internalPubkey) - }); - psbt.addOutput({ - address: payment.address!, - value: value - 500 - }); - await newKeyring.signTransaction(psbt, [{ index: 0, publicKey: pubkey }], { network: bitcoin.networks.bitcoin }); - - psbt.finalizeAllInputs(); - psbt.extractTransaction(); - expect(psbt.getFee() == 500).to.be.true; - }); + it('verify invalid data', async function () { + const newKeyring = new SimpleKeyring({ privateKeys: [testAccount.key] }); + const accounts = newKeyring.getAccounts(); + const pubkey = accounts[0]; + const data = 'HELLO WORLD'; + + let err = null; + try { + newKeyring.signData(pubkey, data); + } catch (e) { + err = e; + } - it('sign P2WPKH input', async function () { - const network = bitcoin.networks.bitcoin; - - const newKeyring = new SimpleKeyring(); - await newKeyring.addAccounts(1); - const accounts = await newKeyring.getAccounts(); - const pubkey = accounts[0]; - const payment = bitcoin.payments.p2wpkh({ - pubkey: Buffer.from(pubkey, 'hex'), - network - }); - - const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); - const value = 10000; - const prevoutIndex = 0xffffffff; - const sequence = 0; - const txToSpend = new bitcoin.Transaction(); - txToSpend.version = 0; - txToSpend.addInput(prevoutHash, prevoutIndex, sequence); - txToSpend.addOutput(payment.output!, value); - - const psbt = new bitcoin.Psbt({ network }); - psbt.addInput({ - hash: txToSpend.getHash(), - index: 0, - sequence: 0, - witnessUtxo: { - script: payment.output!, - value - } - }); - psbt.addOutput({ - address: payment.address!, - value: value - 500 - }); - await newKeyring.signTransaction(psbt, [{ index: 0, publicKey: pubkey }], { network: bitcoin.networks.bitcoin }); - - psbt.finalizeAllInputs(); - psbt.extractTransaction(); - expect(psbt.getFee() == 500).to.be.true; + expect(err?.message).eq('Expected Scalar'); + }); }); - it('sign P2TR multisig input', async function () { - const network = bitcoin.networks.bitcoin; - - const newKeyring = new SimpleKeyring(); - await newKeyring.addAccounts(3); - const accounts = await newKeyring.getAccounts(); - const pubkeys = accounts.map((hex) => Buffer.from(hex, 'hex')); - const redeemScript = bitcoin.script.compile([ - bitcoin.opcodes.OP_2, - pubkeys[0], - pubkeys[1], - pubkeys[2], - bitcoin.opcodes.OP_3, - bitcoin.opcodes.OP_CHECKMULTISIG - ]); - const tapLeaf = { - output: redeemScript, - version: 192 - }; - - const payment = bitcoin.payments.p2tr({ - internalPubkey: toXOnly(pubkeys[0]), - scriptTree: tapLeaf, - redeem: { output: redeemScript }, - network - }); - - const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); - const value = 10000; - const prevoutIndex = 0xffffffff; - const sequence = 0; - const txToSpend = new bitcoin.Transaction(); - txToSpend.version = 0; - txToSpend.addInput(prevoutHash, prevoutIndex, sequence); - txToSpend.addOutput(payment.output!, value); - - const psbt = new bitcoin.Psbt({ network }); - psbt.addInput({ - hash: txToSpend.getHash(), - index: 0, - sequence: 0, - witnessUtxo: { - script: payment.output!, - value - }, - tapLeafScript: [ - { - leafVersion: 192, - script: tapLeaf.output, - controlBlock: payment.witness![payment.witness!.length - 1] - } - ] - }); - psbt.addOutput({ - address: payment.address!, - value: value - 500 - }); - - for (let i = 0; i < 2; i++) { - await newKeyring.signTransaction( - psbt, - [ - { - index: 0, - publicKey: pubkeys[i].toString('hex'), - disableTweakSigner: true + describe('#sign psbt', function () { + it('sign P2TR input', async function () { + const network = bitcoin.networks.bitcoin; + + const newKeyring = new SimpleKeyring(); + newKeyring.addAccounts(1); + const accounts = newKeyring.getAccounts(); + const pubkey = accounts[0]; + const internalPubkey = toXOnly(Buffer.from(pubkey, 'hex')); + const payment = bitcoin.payments.p2tr({ + internalPubkey, + network + }); + + const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); + const value = 10000; + const prevoutIndex = 0xffffffff; + const sequence = 0; + const txToSpend = new bitcoin.Transaction(); + txToSpend.version = 0; + txToSpend.addInput(prevoutHash, prevoutIndex, sequence); + txToSpend.addOutput(payment.output!, value); + + const psbt = new bitcoin.Psbt({ network }); + psbt.addInput({ + hash: txToSpend.getHash(), + index: 0, + sequence: 0, + witnessUtxo: { + script: payment.output!, + value + }, + tapInternalKey: toXOnly(internalPubkey) + }); + psbt.addOutput({ + address: payment.address!, + value: value - 500 + }); + newKeyring.signTransaction(psbt, [{ index: 0, publicKey: pubkey }], { network: bitcoin.networks.bitcoin }); + + psbt.finalizeAllInputs(); + psbt.extractTransaction(); + expect(psbt.getFee() == 500).to.be.true; + }); + + it('sign P2WPKH input', async function () { + const network = bitcoin.networks.bitcoin; + + const newKeyring = new SimpleKeyring(); + newKeyring.addAccounts(1); + const accounts = newKeyring.getAccounts(); + const pubkey = accounts[0]; + const payment = bitcoin.payments.p2wpkh({ + pubkey: Buffer.from(pubkey, 'hex'), + network + }); + + const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); + const value = 10000; + const prevoutIndex = 0xffffffff; + const sequence = 0; + const txToSpend = new bitcoin.Transaction(); + txToSpend.version = 0; + txToSpend.addInput(prevoutHash, prevoutIndex, sequence); + txToSpend.addOutput(payment.output!, value); + + const psbt = new bitcoin.Psbt({ network }); + psbt.addInput({ + hash: txToSpend.getHash(), + index: 0, + sequence: 0, + witnessUtxo: { + script: payment.output!, + value + } + }); + psbt.addOutput({ + address: payment.address!, + value: value - 500 + }); + newKeyring.signTransaction(psbt, [{ index: 0, publicKey: pubkey }], { network: bitcoin.networks.bitcoin }); + + psbt.finalizeAllInputs(); + psbt.extractTransaction(); + expect(psbt.getFee() == 500).to.be.true; + }); + + it('sign P2TR multisig input', async function () { + const network = bitcoin.networks.bitcoin; + + const newKeyring = new SimpleKeyring(); + newKeyring.addAccounts(3); + const accounts = newKeyring.getAccounts(); + const pubkeys = accounts.map((hex) => Buffer.from(hex, 'hex')); + const redeemScript = bitcoin.script.compile([ + bitcoin.opcodes.OP_2, + pubkeys[0], + pubkeys[1], + pubkeys[2], + bitcoin.opcodes.OP_3, + bitcoin.opcodes.OP_CHECKMULTISIG + ]); + const tapLeaf = { + output: redeemScript, + version: 192 + }; + + const payment = bitcoin.payments.p2tr({ + internalPubkey: toXOnly(pubkeys[0]), + scriptTree: tapLeaf, + redeem: { output: redeemScript }, + network + }); + + const prevoutHash = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); + const value = 10000; + const prevoutIndex = 0xffffffff; + const sequence = 0; + const txToSpend = new bitcoin.Transaction(); + txToSpend.version = 0; + txToSpend.addInput(prevoutHash, prevoutIndex, sequence); + txToSpend.addOutput(payment.output!, value); + + const psbt = new bitcoin.Psbt({ network }); + psbt.addInput({ + hash: txToSpend.getHash(), + index: 0, + sequence: 0, + witnessUtxo: { + script: payment.output!, + value + }, + tapLeafScript: [ + { + leafVersion: 192, + script: tapLeaf.output, + controlBlock: payment.witness![payment.witness!.length - 1] + } + ] + }); + psbt.addOutput({ + address: payment.address!, + value: value - 500 + }); + + for (let i = 0; i < 2; i++) { + newKeyring.signTransaction( + psbt, + [ + { + index: 0, + publicKey: pubkeys[i].toString('hex'), + disableTweakSigner: true + } + ], + { network: bitcoin.networks.bitcoin } + ); } - ], - { network: bitcoin.networks.bitcoin } - ); - } - - psbt.finalizeAllInputs(); - psbt.extractTransaction(); - expect(psbt.getFee() == 500).to.be.true; + + psbt.finalizeAllInputs(); + psbt.extractTransaction(); + expect(psbt.getFee() == 500).to.be.true; + }); }); - }); }); diff --git a/test/message/message.test.ts b/test/message/message.test.ts index d692bf4..1a60910 100644 --- a/test/message/message.test.ts +++ b/test/message/message.test.ts @@ -6,95 +6,100 @@ import { LocalWallet } from '../../src/wallet'; import { expectThrowError } from '../utils'; describe('verifyMessage', function () { - it('ecdsa', async function () { - const message = 'hello world~'; - const wallet = LocalWallet.fromRandom(); - const signature = await wallet.signMessage(message, 'ecdsa'); - const pubkey = await wallet.getPublicKey(); - const result = await verifyMessageOfECDSA(pubkey, message, signature); - expect(result).eq(true); + it('ecdsa', async function () { + const message = 'hello world~'; + const wallet = LocalWallet.fromRandom(); + const signature = await wallet.signMessage(message, 'ecdsa'); + const pubkey = await wallet.getPublicKey(); + const result = await verifyMessageOfECDSA(pubkey, message, signature); + expect(result).eq(true); - const errorResult = await verifyMessageOfECDSA( - pubkey, - message, - 'G6nd7IqQaU8kxNbUDCnGLf+lA5ZxJ9TVlNOoNSuQ6j1yD1lG/Y25h01yT7SNxW56IuGNRX8Eu4baQYzhU78Wa0o=' - ); - expect(errorResult).eq(false); - }); + const errorResult = await verifyMessageOfECDSA( + pubkey, + message, + 'G6nd7IqQaU8kxNbUDCnGLf+lA5ZxJ9TVlNOoNSuQ6j1yD1lG/Y25h01yT7SNxW56IuGNRX8Eu4baQYzhU78Wa0o=' + ); + expect(errorResult).eq(false); + }); - it('bip322-simple for P2WPKH', async function () { - const message = 'hello world~'; - const wallet = LocalWallet.fromRandom(AddressType.P2WPKH); - const signature = await wallet.signMessage(message, 'bip322-simple'); - const result = verifyMessageOfBIP322Simple(wallet.address, message, signature); - expect(result).eq(true); - }); + it('bip322-simple for P2WPKH', async function () { + const message = 'hello world~'; + const wallet = LocalWallet.fromRandom(AddressType.P2WPKH); + const signature = await wallet.signMessage(message, 'bip322-simple'); + const result = verifyMessageOfBIP322Simple(wallet.address, message, signature); + expect(result).eq(true); + }); - it('bip322-simple for P2TR', async function () { - const message = 'hello world~'; - const wallet = LocalWallet.fromRandom(AddressType.P2TR); - const signature = await wallet.signMessage(message, 'bip322-simple'); - const result = verifyMessageOfBIP322Simple(wallet.address, message, signature); - expect(result).eq(true); - }); + it('bip322-simple for P2TR', async function () { + const message = 'hello world~'; + const wallet = LocalWallet.fromRandom(AddressType.P2TR); + const signature = await wallet.signMessage(message, 'bip322-simple'); + const result = verifyMessageOfBIP322Simple(wallet.address, message, signature); + expect(result).eq(true); + }); - it('bip322-simple for P2PKH', async function () { - const message = 'hello world~'; - const wallet = LocalWallet.fromRandom(AddressType.P2PKH); - await expectThrowError(() => wallet.signMessage(message, 'bip322-simple'), 'Not support address type to sign'); - }); + it('bip322-simple for P2PKH', async function () { + const message = 'hello world~'; + const wallet = LocalWallet.fromRandom(AddressType.P2PKH); + await expectThrowError(() => wallet.signMessage(message, 'bip322-simple'), 'Not support address type to sign'); + }); - // https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki - it('pass the example1 in bip-0322.mediawiki', async function () { - const message = ''; - const wallet = new LocalWallet( - 'L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k', - AddressType.P2WPKH, - NetworkType.MAINNET - ); - const signature = - 'AkcwRAIgM2gBAQqvZX15ZiysmKmQpDrG83avLIT492QBzLnQIxYCIBaTpOaD20qRlEylyxFSeEA2ba9YOixpX8z46TSDtS40ASECx/EgAxlkQpQ9hYjgGu6EBCPMVPwVIVJqO4XCsMvViHI='; - const result = verifyMessageOfBIP322Simple(wallet.address, message, signature); - expect(result).eq(true); - }); + // https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki + it('pass the example1 in bip-0322.mediawiki', async function () { + const message = ''; + const wallet = new LocalWallet( + 'L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k', + AddressType.P2WPKH, + NetworkType.MAINNET + ); + const signature = + 'AkcwRAIgM2gBAQqvZX15ZiysmKmQpDrG83avLIT492QBzLnQIxYCIBaTpOaD20qRlEylyxFSeEA2ba9YOixpX8z46TSDtS40ASECx/EgAxlkQpQ9hYjgGu6EBCPMVPwVIVJqO4XCsMvViHI='; + const result = verifyMessageOfBIP322Simple(wallet.address, message, signature); + expect(result).eq(true); + }); - it('pass the example2 in bip-0322.mediawiki', async function () { - const message = 'Hello World'; - const wallet = new LocalWallet( - 'L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k', - AddressType.P2WPKH, - NetworkType.MAINNET - ); - const signature = - 'AkcwRAIgZRfIY3p7/DoVTty6YZbWS71bc5Vct9p9Fia83eRmw2QCICK/ENGfwLtptFluMGs2KsqoNSk89pO7F29zJLUx9a/sASECx/EgAxlkQpQ9hYjgGu6EBCPMVPwVIVJqO4XCsMvViHI='; - const result = verifyMessageOfBIP322Simple(wallet.address, message, signature); - expect(result).eq(true); - }); + it('pass the example2 in bip-0322.mediawiki', async function () { + const message = 'Hello World'; + const wallet = new LocalWallet( + 'L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k', + AddressType.P2WPKH, + NetworkType.MAINNET + ); + const signature = + 'AkcwRAIgZRfIY3p7/DoVTty6YZbWS71bc5Vct9p9Fia83eRmw2QCICK/ENGfwLtptFluMGs2KsqoNSk89pO7F29zJLUx9a/sASECx/EgAxlkQpQ9hYjgGu6EBCPMVPwVIVJqO4XCsMvViHI='; + const result = verifyMessageOfBIP322Simple(wallet.address, message, signature); + expect(result).eq(true); + }); - it('same with unisat wallet 1.1.33', async function () { - const message = 'hello'; - const wallet = new LocalWallet( - 'L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k', - AddressType.P2TR, - NetworkType.MAINNET - ); - const signature_now = await wallet.signMessage(message, 'bip322-simple'); - const signature_old = 'AUCNuph9ZfpmxxVZozX4jVUYDXU3rR481/id9sQRUYTwdYWiLUE1cftTK2chYJENB0eYCLPykIC4Zi+U4DQ9zqew'; + it('same with unisat wallet 1.1.33', async function () { + const message = 'hello'; + const wallet = new LocalWallet( + 'L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k', + AddressType.P2TR, + NetworkType.MAINNET + ); - expect(signature_now).eq(signature_old); - }); + const signature_now = await wallet.signMessage(message, 'bip322-simple'); + //const signature_old = 'AUCNuph9ZfpmxxVZozX4jVUYDXU3rR481/id9sQRUYTwdYWiLUE1cftTK2chYJENB0eYCLPykIC4Zi+U4DQ9zqew'; + const signature_old = + 'AUBRZJdM1Lhd3AaOOiWOLe1wO+qE7Ly4Dkq2Kfz+QSBwN1O4ITEfH50RywVolNhKAg7Z6/eeTyxHBzLBotPlq7NS'; - it('deterministic ecdsa', async function () { - const message = 'hello'; - const wallet = new LocalWallet( - 'L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k', - AddressType.P2TR, - NetworkType.MAINNET - ); - const signature = await wallet.signMessage(message, 'ecdsa'); - const pubkey = await wallet.getPublicKey(); - const result = await verifyMessageOfECDSA(pubkey, message, signature); - expect(result).eq(true); - expect(signature).eq('IAR9YCVMTeNIGzStagcrMfAJI0ehg8QT4dULe8n25Tw8VFo+15jgNRrzY282xGu7fnpmpQVKdi7d9evDBUkUpwk='); - }); + expect(signature_now).eq(signature_old); + }); + + it('deterministic ecdsa', async function () { + const message = 'hello'; + const wallet = new LocalWallet( + 'L3VFeEujGtevx9w18HD1fhRbCH67Az2dpCymeRE1SoPK6XQtaN2k', + AddressType.P2TR, + NetworkType.MAINNET + ); + const signature = await wallet.signMessage(message, 'ecdsa'); + const pubkey = await wallet.getPublicKey(); + const result = await verifyMessageOfECDSA(pubkey, message, signature); + expect(result).eq(true); + expect(signature).eq( + 'IAR9YCVMTeNIGzStagcrMfAJI0ehg8QT4dULe8n25Tw8VFo+15jgNRrzY282xGu7fnpmpQVKdi7d9evDBUkUpwk=' + ); + }); }); diff --git a/yarn.lock b/yarn.lock index 04e32a7..9041751 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,115 +3,109 @@ "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@apocentre/alias-sampling@^0.5.3": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@apocentre/alias-sampling/-/alias-sampling-0.5.3.tgz#897ff181b48ad7b2bcb4ecf29400214888244f08" - integrity sha512-7UDWIIF9hIeJqfKXkNIzkVandlwLf1FWTSdrb9iXvOP8oF544JRXQjCbiTmCv2c9n44n/FIWtehhBfNuAx2CZA== - -"@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" + integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== "@babel/core@^7.16.7": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" - integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.6" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" - "@babel/types" "^7.23.6" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.25.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== dependencies: - "@babel/types" "^7.22.15" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" + "@babel/compat-data" "^7.25.2" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953" - integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" +"@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz#a109bf9c3d58dfed83aaf42e85633c89f43a6253" + integrity sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/traverse" "^7.25.0" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" + integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" - integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -119,172 +113,165 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" +"@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== + dependencies: + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" + +"@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" + +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" + integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-wrap-function" "^7.25.0" + "@babel/traverse" "^7.25.0" + +"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/traverse" "^7.25.0" + +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== + +"@babel/helper-wrap-function@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" + integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== + dependencies: + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== + dependencies: + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/parser@^7.25.0", "@babel/parser@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.25.2" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" + integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.3" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" - integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" + integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" - "@babel/types" "^7.23.6" - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" + integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" + integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -326,19 +313,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" + integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" + integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -354,12 +341,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== +"@babel/plugin-syntax-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -417,12 +404,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" + integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -432,437 +419,444 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-async-generator-functions@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== +"@babel/plugin-transform-async-generator-functions@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz#b785cf35d73437f6276b1e30439a57a50747bddf" + integrity sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-remap-async-to-generator" "^7.25.0" "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/traverse" "^7.25.0" -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== +"@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" + integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== +"@babel/plugin-transform-class-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" + integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" - integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== +"@babel/plugin-transform-classes@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz#63122366527d88e0ef61b612554fe3f8c793991e" + integrity sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/traverse" "^7.25.0" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" + integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-dotall-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== +"@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" + integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== +"@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== +"@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== +"@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-function-name@^7.25.1": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" + integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.1" -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== +"@babel/plugin-transform-literals@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" + integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== +"@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== +"@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== +"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" + integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-simple-access" "^7.24.7" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" + integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-transforms" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.0" -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.24.7" -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== +"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" + integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" + integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== +"@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== +"@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-runtime@^7.16.5": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.6.tgz#bf853cd0a675c16ee33e6ba2a63b536e75e5d754" - integrity sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca" + integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== +"@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== +"@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-typeof-symbol@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" + integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" - integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== +"@babel/plugin-transform-typescript@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" + integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== +"@babel/plugin-transform-unicode-sets-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" + integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/preset-env@^7.16.5": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a" - integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" + integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== + dependencies: + "@babel/compat-data" "^7.25.2" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -874,59 +868,60 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.4" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.5" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.0" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-class-properties" "^7.24.7" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.25.0" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-modules-systemjs" "^7.25.0" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.8" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" - core-js-compat "^3.31.0" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.37.1" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -939,15 +934,15 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.16.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" "@babel/regjsgen@^0.8.0": version "0.8.0" @@ -955,58 +950,55 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.8.4": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" - integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" - integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" +"@babel/template@^7.24.7", "@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.2" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.4.4": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== +"@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.4.4": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" -"@bitcoinerlab/secp256k1@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@bitcoinerlab/secp256k1/-/secp256k1-1.0.5.tgz#4643ba73619c24c7c455cc63c6338c69c2cf187c" - integrity sha512-8gT+ukTCFN2rTxn4hD9Jq3k+UJwcprgYjfK/SQUSLgznXoIgsBnlPuARMkyyuEjycQK9VvnPiejKdszVTflh+w== +"@bitcoinerlab/secp256k1@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@bitcoinerlab/secp256k1/-/secp256k1-1.1.1.tgz#938305c30505b67b15f3de53627bc9d8b4cc7680" + integrity sha512-uhjW51WfVLpnHN7+G0saDcM/k9IqcyTbZ+bDgLF3AX8V/a3KXSE9vn7UPBrcdU72tp0J4YPR7BHp2m7MLAZ/1Q== dependencies: "@noble/hashes" "^1.1.5" "@noble/secp256k1" "^1.7.1" "@bufbuild/protobuf@^1.2.0": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.7.2.tgz#1b3d6c66ebd987f7da7f1e3f0546cffaa87f8732" - integrity sha512-i5GE2Dk5ekdlK1TR7SugY4LWRrKSfb5T1Qn4unpIMbfxoeGKERKQ59HG3iYewacGD10SR7UzevfPnh6my4tNmQ== + version "1.10.0" + resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.10.0.tgz#1a67ac889c2d464a3492b3e54c38f80517963b16" + integrity sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -1028,9 +1020,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== "@eslint/eslintrc@^1.0.2": version "1.4.1" @@ -1094,37 +1086,37 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -1134,15 +1126,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.20": +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1150,6 +1134,11 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@keystonehq/alias-sampling@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@keystonehq/alias-sampling/-/alias-sampling-0.1.2.tgz#63af931ffe6500aef4c0d87775a5b279189abf8d" + integrity sha512-5ukLB3bcgltgaFfQfYKYwHDUbwHicekYo53fSEa7xhVkAEqsA74kxdIwoBIURmGUtXe3EVIRm4SYlgcrt2Ri0w== + "@keystonehq/bc-ur-registry-aptos@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-aptos/-/bc-ur-registry-aptos-0.3.2.tgz#2e09162664eae1d647d474ff0d1abbb650ee551f" @@ -1168,19 +1157,19 @@ uuid "^8.3.2" "@keystonehq/bc-ur-registry-btc@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-btc/-/bc-ur-registry-btc-0.1.0.tgz#11b3fe1cf743703f5cecce8acab790d4bbba8cbb" - integrity sha512-CFFHS6brmepeQ9i3gzhua3Okzae1DpmjP11OqoVstutkFeXliUvZ11JBtQgb5v1bEiNyDv9MahI8oWSvk7Xvqg== + version "0.1.1" + resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-btc/-/bc-ur-registry-btc-0.1.1.tgz#5363961c2d0c529b01080eb278ff60de6bf5d181" + integrity sha512-LdYqItY1Y/M6fWJNE6L0HYZbKL8CGVP6OigG7T/gJ+SWnOGgYXj3at02aV7b9qZ7iNwJPkNrqsIDN5eajQcZjQ== dependencies: - "@keystonehq/bc-ur-registry" "^0.5.4" + "@keystonehq/bc-ur-registry" "^0.6.4" uuid "^8.3.2" "@keystonehq/bc-ur-registry-cardano@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-cardano/-/bc-ur-registry-cardano-0.3.0.tgz#d6708bcc79737a9c756f2606968abc3353916522" - integrity sha512-ADYdGbm11frWD+qPlnFa9JPJ+eTQvapIVxg3QbCHGY32xmTTZsX63yWyTi4zSCXCluGqfcjHViyWZlqQvvB7KA== + version "0.3.9" + resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-cardano/-/bc-ur-registry-cardano-0.3.9.tgz#aeb0cbab556aaf87edd54782a2ff3e768800f98a" + integrity sha512-moQtGVjRpzJmHBGxITjljKVE8b2wIC72/9UtuqIfeWWUz/gHWZ4zB0jrz+YgnNwhIizEKmydjtOHLSFrbUQ9VQ== dependencies: - "@keystonehq/bc-ur-registry" "^0.5.4" + "@keystonehq/bc-ur-registry" "^0.6.4" uuid "^8.3.2" "@keystonehq/bc-ur-registry-cosmos@^0.2.2": @@ -1203,11 +1192,11 @@ uuid "^8.3.2" "@keystonehq/bc-ur-registry-evm@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-evm/-/bc-ur-registry-evm-0.5.2.tgz#166fa0458345ae4b56761a0f8ee014106b093032" - integrity sha512-/ns1cDUz3F0KryYA8AVk4xUV6w7wXTS7aDBsowcUeFSp1olsMLSeA/wkNlUgu5DELuJn5FDd6xrsrx4CGcehEQ== + version "0.5.3" + resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-evm/-/bc-ur-registry-evm-0.5.3.tgz#086167a53194fbfe070ea066d83bacaaede56e4e" + integrity sha512-K3tmY1Y2SDImtSnCPFoASMBNernbN/ZRIIkp8iKegDeyHtaPbzfNIdaEL/wUHVoieTgTOUTwyWZspBvvbgrivw== dependencies: - "@keystonehq/bc-ur-registry" "^0.5.4" + "@keystonehq/bc-ur-registry" "^0.6.4" bs58check "^2.1.2" uuid "^9.0.0" @@ -1237,11 +1226,11 @@ uuid "^8.3.2" "@keystonehq/bc-ur-registry-sui@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-sui/-/bc-ur-registry-sui-0.3.0.tgz#72f9b2fd167cb759f961437907fff9e034864fa4" - integrity sha512-z2EVkY+ZOu766KsQklM3rXINXaXG2nUmTWMsmde0KO7KiAxW6TYloHXh+DdVZAGWUBQNs1lkVk/9elbDt8Bwog== + version "0.3.1" + resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-sui/-/bc-ur-registry-sui-0.3.1.tgz#636f601620def48e0488408df049aa15718380a2" + integrity sha512-cbxu5AF5xFg9J3p0AXIkp1IMGSSNsaXWRgn22bcnkIlzwMEwmgJR5J/Lg45MIyIpW2p17fKyYqc9yuP0iMALEQ== dependencies: - "@keystonehq/bc-ur-registry" "^0.5.5" + "@keystonehq/bc-ur-registry" "^0.6.4" uuid "^9.0.0" "@keystonehq/bc-ur-registry@0.5.4": @@ -1253,15 +1242,6 @@ bs58check "^2.1.2" tslib "^2.3.0" -"@keystonehq/bc-ur-registry@^0.5.4", "@keystonehq/bc-ur-registry@^0.5.5": - version "0.5.5" - resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry/-/bc-ur-registry-0.5.5.tgz#b7cd9b08846c627e988933049aac94d3412fbb16" - integrity sha512-PoclPHf0OhpIKLfLwzymsu+CjkWf5ZKvaVjpkq3HUalcI4KW8wLk0m8qI2kBVv6F0BQ0ERPqW8OfjLTVqIgWLA== - dependencies: - "@ngraveio/bc-ur" "^1.1.5" - bs58check "^2.1.2" - tslib "^2.3.0" - "@keystonehq/bc-ur-registry@^0.6.4": version "0.6.4" resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry/-/bc-ur-registry-0.6.4.tgz#9c57ff9687cafdc0d2bbd04dc36676d3a38c1485" @@ -1296,11 +1276,11 @@ uuid "^9.0.0" "@ngraveio/bc-ur@^1.1.5", "@ngraveio/bc-ur@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@ngraveio/bc-ur/-/bc-ur-1.1.6.tgz#8f8c75fff22f6a5e4dfbc5a6b540d7fe8f42cd39" - integrity sha512-G+2XgjXde2IOcEQeCwR250aS43/Swi7gw0FuETgJy2c3HqF8f88SXDMsIGgJlZ8jXd0GeHR4aX0MfjXf523UZg== + version "1.1.13" + resolved "https://registry.yarnpkg.com/@ngraveio/bc-ur/-/bc-ur-1.1.13.tgz#27719fd3e745ccdbe97a7950905edcd1fed4844b" + integrity sha512-j73akJMV4+vLR2yQ4AphPIT5HZmxVjn/LxpL7YHoINnXoH6ccc90Zzck6/n6a3bCXOVZwBxq+YHwbAKRV+P8Zg== dependencies: - "@apocentre/alias-sampling" "^0.5.3" + "@keystonehq/alias-sampling" "^0.1.1" assert "^2.0.0" bignumber.js "^9.0.1" cbor-sync "^1.0.4" @@ -1308,17 +1288,17 @@ jsbi "^3.1.5" sha.js "^2.4.11" -"@noble/curves@1.3.0", "@noble/curves@~1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" - integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== dependencies: - "@noble/hashes" "1.3.3" + "@noble/hashes" "1.4.0" -"@noble/hashes@1.3.3", "@noble/hashes@^1.1.5", "@noble/hashes@^1.2.0", "@noble/hashes@~1.3.2": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== +"@noble/hashes@1.4.0", "@noble/hashes@^1.1.5", "@noble/hashes@^1.2.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== "@noble/secp256k1@^1.7.1": version "1.7.1" @@ -1351,27 +1331,27 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== -"@scure/base@~1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" - integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== +"@scure/base@~1.1.6": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30" + integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== -"@scure/bip32@1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" - integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== dependencies: - "@noble/curves" "~1.3.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" -"@scure/bip39@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" - integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== dependencies: - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1379,9 +1359,9 @@ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -1398,10 +1378,17 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@types/bitcore-lib@^0.15.6": + version "0.15.6" + resolved "https://registry.yarnpkg.com/@types/bitcore-lib/-/bitcore-lib-0.15.6.tgz#6cbb5889e7fdb49e26d2a7e4e522275b1d03d449" + integrity sha512-CtKDBgSBubPXZ0wFeCiUCSdzH+cuy6nFya3FboOqf44evi+OmkQPqEg3ASMpmPDYE8vkcxV302Iu8lZqCjYieg== + dependencies: + "@types/node" "*" + "@types/chai@^4.2.20": - version "4.3.11" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" - integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== + version "4.3.17" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.17.tgz#9195f9d242f2ac3b429908864b6b871a8f73f489" + integrity sha512-zmZ21EWzR71B4Sscphjief5djsLre50M6lI622OSySTmn9DB3j+C3kWroHfBQWXbOBwbgg/M8CG/hUxDLIloow== "@types/eslint-scope@^3.7.3": version "3.7.7" @@ -1412,17 +1399,17 @@ "@types/estree" "*" "@types/eslint@*": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.0.tgz#e28d045b8e530a33c9cbcfbf02332df0d1380a2c" - integrity sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg== + version "9.6.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.0.tgz#51d4fe4d0316da9e9f2c80884f2c20ed5fb022ff" + integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/eslint@^8.56.5": - version "8.56.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" - integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== +"@types/eslint@^8.56.10": + version "8.56.11" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.11.tgz#e2ff61510a3b9454b3329fe7731e3b4c6f780041" + integrity sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -1440,6 +1427,13 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/hdkey@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/hdkey/-/hdkey-2.0.3.tgz#ef32e3a2ba22a614193ca20c7bb681aeaaf1c50e" + integrity sha512-U5W3b+f3KqCC7tge4WjV5MDzzYTcwbnufyL7RwEmxH2EyxtbfaQVlS8z6PZDp8XET304EEVhLWG76rF5ygUKHQ== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" @@ -1475,21 +1469,21 @@ integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== "@types/node@*": - version "20.10.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2" - integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw== + version "22.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.2.0.tgz#7cf046a99f0ba4d628ad3088cb21f790df9b0c5b" + integrity sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ== dependencies: - undici-types "~5.26.4" + undici-types "~6.13.0" "@types/node@^16.11.10": - version "16.18.68" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.68.tgz#3155f64a961b3d8d10246c80657f9a7292e3421a" - integrity sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg== + version "16.18.105" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.105.tgz#7147176852774ec4d6dd626803888adf6b999feb" + integrity sha512-w2d0Z9yMk07uH3+Cx0N8lqFyi3yjXZxlbYappPj+AsOlT02OyxyiuNoNHdGt6EuiSm8Wtgp2YV7vWg+GMFrvFA== "@types/semver@^7.3.12": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/yargs-parser@*": version "21.0.3" @@ -1497,9 +1491,9 @@ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" @@ -1587,11 +1581,6 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@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" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" @@ -1748,10 +1737,10 @@ JSONStream@^1.0.3: jsonparse "^1.2.0" through ">=2.2.7 <3" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -1773,24 +1762,21 @@ acorn-walk@^7.0.0: integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn-walk@^8.1.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" - integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== + version "8.3.3" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" + integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + dependencies: + acorn "^8.11.0" acorn@^7.0.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - -acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.11.0, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== ajv-formats@^2.1.1: version "2.1.1" @@ -1822,14 +1808,14 @@ ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.9.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" - integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.4.1" ansi-colors@4.1.1: version "4.1.1" @@ -2012,15 +1998,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" assert@^1.4.0: version "1.5.1" @@ -2078,10 +2063,12 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" babel-loader@^8.2.3: version "8.3.0" @@ -2093,29 +2080,29 @@ babel-loader@^8.2.3: make-dir "^3.1.0" schema-utils "^2.6.5" -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" - integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.4" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" - integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== +babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.4" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" - integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.4" + "@babel/helper-define-polyfill-provider" "^0.6.2" bach@^1.0.0: version "1.2.0" @@ -2138,9 +2125,9 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2, base-x@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + version "3.0.10" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== dependencies: safe-buffer "^5.0.1" @@ -2198,9 +2185,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bindings@^1.5.0: version "1.5.0" @@ -2209,10 +2196,10 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bip-schnorr@=0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/bip-schnorr/-/bip-schnorr-0.6.4.tgz#6fde7f301fe6b207dbd05f8ec2caf08fa5a51d0d" - integrity sha512-dNKw7Lea8B0wMIN4OjEmOk/Z5qUGqoPDY0P2QttLqGk1hmDPytLWW8PR5Pb6Vxy6CprcdEgfJpOjUu+ONQveyg== +bip-schnorr@^0.6.7: + version "0.6.7" + resolved "https://registry.yarnpkg.com/bip-schnorr/-/bip-schnorr-0.6.7.tgz#b62a05ba148492a80c914063c99e218a81c55bf5" + integrity sha512-Pf1o+whA52l7NC33CZY4eRtcB+dUCT54hKCF8mnw2349CG89LOXODHRWmUEcSSWzoi+Kjg1CtMmw6uV43tmJFA== dependencies: bigi "^1.4.2" ecurve "^1.0.6" @@ -2244,13 +2231,12 @@ bitcoinjs-lib@^6.1.6: typeforce "^1.11.3" varuint-bitcoin "^1.1.2" -bitcore-lib@^10.0.0: - version "10.0.21" - resolved "https://registry.yarnpkg.com/bitcore-lib/-/bitcore-lib-10.0.21.tgz#3afb32dca7e5843836d608958bac0a057d57b304" - integrity sha512-oYB1BrHjeRHqdrZ+j/cVm+M0XGxRDDjDiX4wP9QWQGAZkvS6DQGeNIndwS7m7BA18H76PJRhBM+DrSV2medpXg== +bitcore-lib@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/bitcore-lib/-/bitcore-lib-10.2.1.tgz#34c6d69901100e304f372c3eb1a2251c256b7e5c" + integrity sha512-GM2j+01vZK17GBbOe3Thp1PjkrcI9/jELdWzoFsDZoc6v5XgH2t2l60tUrO+oQwOSawzPc5egoi1YvLh75uvpg== dependencies: bech32 "=2.0.0" - bip-schnorr "=0.6.4" bn.js "=4.11.8" bs58 "^4.0.1" buffer-compare "=1.1.1" @@ -2281,6 +2267,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -2297,12 +2290,12 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" @@ -2333,7 +2326,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4: +browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -2373,18 +2366,19 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" - integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== + version "4.2.3" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" + integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== dependencies: bn.js "^5.2.1" browserify-rsa "^4.1.0" create-hash "^1.2.0" create-hmac "^1.1.7" - elliptic "^6.5.4" + elliptic "^6.5.5" + hash-base "~3.0" inherits "^2.0.4" - parse-asn1 "^5.1.6" - readable-stream "^3.6.2" + parse-asn1 "^5.1.7" + readable-stream "^2.3.8" safe-buffer "^5.2.1" browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: @@ -2448,25 +2442,15 @@ browserify@^17.0.0: vm-browserify "^1.0.0" xtend "^4.0.0" -browserslist@^4.21.10: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== +browserslist@^4.21.10, browserslist@^4.23.1, browserslist@^4.23.3: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== - dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" @@ -2568,16 +2552,7 @@ cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3" integrity sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA== -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -call-bind@^1.0.7: +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -2603,15 +2578,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001565: - version "1.0.30001571" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz#4182e93d696ff42930f4af7eba515ddeb57917ac" - integrity sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ== - -caniuse-lite@^1.0.30001587: - version "1.0.30001616" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz#4342712750d35f71ebba9fcac65e2cf8870013c3" - integrity sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw== +caniuse-lite@^1.0.30001646: + version "1.0.30001651" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" + integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== cbor-sync@^1.0.4: version "1.0.4" @@ -2619,9 +2589,9 @@ cbor-sync@^1.0.4: integrity sha512-GWlXN4wiz0vdWWXBU71Dvc1q3aBo0HytqwAZnXF1wOwjqNnDWA1vZ1gDMFLlqohak31VQzmhiYfiCX5QSSfagA== chai@^4.3.4: - version "4.3.10" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" - integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== dependencies: assertion-error "^1.1.0" check-error "^1.0.3" @@ -2629,7 +2599,7 @@ chai@^4.3.4: get-func-name "^2.0.2" loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.8" + type-detect "^4.1.0" chalk@^2.4.2: version "2.4.2" @@ -2655,7 +2625,7 @@ check-error@^1.0.3: dependencies: get-func-name "^2.0.2" -chokidar@3.5.3, chokidar@^3.4.0: +chokidar@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -2689,10 +2659,25 @@ chokidar@^2.0.0: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^3.2.0: version "3.9.0" @@ -2914,12 +2899,12 @@ copy-props@^2.0.1: each-props "^1.3.2" is-plain-object "^5.0.0" -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.34.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17" - integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== +core-js-compat@^3.37.1, core-js-compat@^3.38.0: + version "3.38.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.0.tgz#d93393b1aa346b6ee683377b0c31172ccfe607aa" + integrity sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A== dependencies: - browserslist "^4.22.2" + browserslist "^4.23.3" core-util-is@~1.0.0: version "1.0.3" @@ -3002,23 +2987,23 @@ crypto-browserify@^3.0.0, crypto-browserify@^3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== dependencies: - es5-ext "^0.10.50" - type "^1.0.1" + es5-ext "^0.10.64" + type "^2.7.2" dash-ast@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== -debug@4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -3030,9 +3015,9 @@ debug@^2.2.0, debug@^2.3.3: ms "2.0.0" debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" @@ -3057,9 +3042,9 @@ decode-uri-component@^0.2.0: integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== dependencies: type-detect "^4.0.0" @@ -3080,16 +3065,7 @@ default-resolution@^2.0.0: resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" integrity sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ== -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-data-property@^1.1.2: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -3259,20 +3235,15 @@ ecurve@^1.0.6: bigi "^1.1.0" safe-buffer "^5.0.1" -electron-to-chromium@^1.4.601: - version "1.4.616" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz#4bddbc2c76e1e9dbf449ecd5da3d8119826ea4fb" - integrity sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg== - -electron-to-chromium@^1.4.668: - version "1.4.756" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.756.tgz#7b872ed8c8c5bee571be771730225d6d2a37fe45" - integrity sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw== +electron-to-chromium@^1.5.4: + version "1.5.6" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz#c81d9938b5a877314ad370feb73b4e5409b36abd" + integrity sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw== -elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== +elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.5.5: + version "6.5.6" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.6.tgz#ee5f7c3a00b98a2144ac84d67d01f04d438fa53e" + integrity sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -3299,10 +3270,10 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.0.0, enhanced-resolve@^5.16.0, enhanced-resolve@^5.7.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" - integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.0, enhanced-resolve@^5.7.0: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -3316,9 +3287,9 @@ enquirer@^2.3.5: strip-ansi "^6.0.1" envinfo@^7.7.3: - version "7.11.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.0.tgz#c3793f44284a55ff8c82faf1ffd91bc6478ea01f" - integrity sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg== + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== errno@^0.1.3: version "0.1.8" @@ -3347,17 +3318,18 @@ es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" + esniff "^2.0.1" next-tick "^1.1.0" es6-iterator@^2.0.1, es6-iterator@^2.0.3: @@ -3370,12 +3342,12 @@ es6-iterator@^2.0.1, es6-iterator@^2.0.3: es6-symbol "^3.1.1" es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== dependencies: - d "^1.0.1" - ext "^1.1.2" + d "^1.0.2" + ext "^1.7.0" es6-weak-map@^2.0.1: version "2.0.3" @@ -3387,10 +3359,10 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.1, escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" @@ -3408,12 +3380,12 @@ eslint-config-prettier@^9.1.0: integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== eslint-plugin-prettier@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" - integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" + integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== dependencies: prettier-linter-helpers "^1.0.0" - synckit "^0.8.6" + synckit "^0.9.1" eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" @@ -3449,11 +3421,11 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint-webpack-plugin@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-4.1.0.tgz#83daf1e601ea57b63d7164eea0635d7b7bafe673" - integrity sha512-C3wAG2jyockIhN0YRLuKieKj2nx/gnE/VHmoHemD5ifnAtY6ZU+jNPfzPoX4Zd6RIbUyWTiZUh/ofUlBhoAX7w== + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz#41f54b25379908eb9eca8645bc997c90cfdbd34e" + integrity sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA== dependencies: - "@types/eslint" "^8.56.5" + "@types/eslint" "^8.56.10" jest-worker "^29.7.0" micromatch "^4.0.5" normalize-path "^3.0.0" @@ -3503,6 +3475,16 @@ eslint@8.0.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^9.0.0, espree@^9.4.0: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -3513,9 +3495,9 @@ espree@^9.0.0, espree@^9.4.0: eslint-visitor-keys "^3.4.1" esquery@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -3542,14 +3524,22 @@ esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== ethereum-cryptography@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" - integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== + dependencies: + "@noble/curves" "1.4.2" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== dependencies: - "@noble/curves" "1.3.0" - "@noble/hashes" "1.3.3" - "@scure/bip32" "1.3.3" - "@scure/bip39" "1.2.2" + d "1" + es5-ext "~0.10.14" events@^3.0.0, events@^3.2.0: version "3.3.0" @@ -3591,7 +3581,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -ext@^1.1.2: +ext@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== @@ -3683,15 +3673,20 @@ fast-safe-stringify@^2.0.7: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + fastest-levenshtein@^1.0.12: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -3717,10 +3712,10 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -3907,17 +3902,7 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -4092,11 +4077,6 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - gulp-babel@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/gulp-babel/-/gulp-babel-8.0.0.tgz#e0da96f4f2ec4a88dd3a3030f476e38ab2126d87" @@ -4170,14 +4150,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-property-descriptors@^1.0.1: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== @@ -4185,21 +4158,21 @@ has-property-descriptors@^1.0.1: es-define-property "^1.0.0" has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== -has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" has-value@^0.3.1: version "0.3.1" @@ -4246,6 +4219,14 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash-base@~3.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -4254,10 +4235,10 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -4318,9 +4299,9 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -4331,9 +4312,9 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: resolve-from "^4.0.0" import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -4372,9 +4353,9 @@ ini@^1.3.4: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - integrity sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA== + version "0.6.3" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.3.tgz#db9d553037fa74bf95dfbff186375fcf5c563cdd" + integrity sha512-1aVsPEsJWMJq/pdMU61CDlm1URcW702MTB4w9/zUjMus6H/Py8o7g68Pr9D4I6QluWGt/KdmswuRhaA05xVR1w== dependencies: source-map "~0.5.3" @@ -4462,11 +4443,11 @@ is-callable@^1.1.3: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" + integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" is-data-descriptor@^1.0.1: version "1.0.1" @@ -4615,11 +4596,11 @@ is-relative@^1.0.0: is-unc-path "^1.0.0" is-typed-array@^1.1.3: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" is-unc-path@^1.0.0: version "1.0.0" @@ -4954,13 +4935,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -5059,11 +5033,11 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: to-regex "^3.0.2" micromatch@^4.0.0, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" miller-rabin@^4.0.0: @@ -5096,12 +5070,12 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.1" minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" @@ -5128,32 +5102,29 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mocha@^9.0.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== +mocha@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" + integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" - debug "4.3.3" + debug "4.3.4" diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" glob "7.2.0" - growl "1.10.5" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" - minimatch "4.2.1" + minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.1" + nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" + workerpool "6.2.1" yargs "16.2.0" yargs-parser "20.2.4" yargs-unparser "2.0.0" @@ -5200,14 +5171,14 @@ mute-stdout@^1.0.0: integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== nan@^2.12.1: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + version "2.20.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== nanomatch@^1.2.9: version "1.2.13" @@ -5252,14 +5223,14 @@ node-addon-api@^2.0.0: integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-gyp-build@^4.2.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.7.1.tgz#cd7d2eb48e594874053150a9418ac85af83ca8f7" - integrity sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg== + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-package-data@^2.3.2: version "2.5.0" @@ -5309,10 +5280,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== object-is@^1.1.5: version "1.1.6" @@ -5484,16 +5455,17 @@ parents@^1.0.0, parents@^1.0.1: dependencies: path-platform "~0.11.15" -parse-asn1@^5.0.0, parse-asn1@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== +parse-asn1@^5.0.0, parse-asn1@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" + integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + hash-base "~3.0" + pbkdf2 "^3.1.2" + safe-buffer "^5.2.1" parse-filepath@^1.0.1: version "1.0.2" @@ -5604,7 +5576,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.3: +pbkdf2@^3.0.3, pbkdf2@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -5615,10 +5587,10 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -5669,6 +5641,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -5682,9 +5659,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== pretty-hrtime@^1.0.0: version "1.0.3" @@ -5750,12 +5727,12 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== +qs@^6.12.3: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" querystring-es3@~0.2.0: version "0.2.1" @@ -5806,7 +5783,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.5.0, readable-stream@^3.6.0, readable-stream@^3.6.2: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -5815,7 +5792,7 @@ read-pkg@^1.0.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -6097,11 +6074,6 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" @@ -6156,24 +6128,10 @@ semver@^6.0.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -semver@^7.3.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" +semver@^7.2.1, semver@^7.3.4, semver@^7.3.7: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== serialize-javascript@6.0.0: version "6.0.0" @@ -6183,9 +6141,9 @@ serialize-javascript@6.0.0: randombytes "^2.1.0" serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -6194,27 +6152,17 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.2" + define-data-property "^1.1.4" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -6265,14 +6213,15 @@ shell-quote@^1.4.2, shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" simple-concat@^1.0.0: version "1.0.1" @@ -6367,9 +6316,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -6380,9 +6329,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.18" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" + integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -6436,9 +6385,9 @@ stream-http@^3.0.0, stream-http@^3.2.0: xtend "^4.0.2" stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== stream-splicer@^2.0.0: version "2.0.1" @@ -6552,10 +6501,10 @@ sver-compat@^1.5.0: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -synckit@^0.8.6: - version "0.8.8" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" - integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== +synckit@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.1.tgz#febbfbb6649979450131f64735aa3f6c14575c88" + integrity sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A== dependencies: "@pkgr/core" "^0.1.0" tslib "^2.6.2" @@ -6584,9 +6533,9 @@ terser-webpack-plugin@^5.3.10: terser "^5.26.0" terser@^5.26.0: - version "5.31.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" - integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== + version "5.31.5" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.5.tgz#e48b7c65f32d2808e7dad803e4586a0bc3829b87" + integrity sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -6599,14 +6548,13 @@ text-table@^0.2.0: integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.1.0.tgz#4a1b45d2b76b3ac93ec137951e372c268efc1a4e" + integrity sha512-VhZsTsfrIJjyUi6GeecnwcOJlmoqgIdGFDjqnV5ape+F1DN8GejfPO66XyIhoinxmxGImiUTrq9RwpTN5yszGA== dependencies: - through2 "~2.0.0" - xtend "~4.0.0" + through2 "^4.0.2" -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: +through2@^2.0.0, through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -6759,9 +6707,9 @@ tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.3.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== tsutils@^3.21.0: version "3.21.0" @@ -6782,25 +6730,20 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + version "2.7.3" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" + integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== typedarray@^0.0.6: version "0.0.6" @@ -6864,10 +6807,10 @@ undertaker@^1.2.1: object.reduce "^1.0.0" undertaker-registry "^1.0.0" -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" @@ -6923,15 +6866,15 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" -uri-js@^4.2.2, uri-js@^4.4.1: +uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -6944,12 +6887,12 @@ urix@^0.1.0: integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url@~0.11.0: - version "0.11.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" - integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== + version "0.11.4" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" + integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== dependencies: punycode "^1.4.1" - qs "^6.11.2" + qs "^6.12.3" use@^3.1.0: version "3.1.1" @@ -7162,9 +7105,9 @@ webpack-stream@^7.0.0: vinyl "^2.2.1" webpack@^5.91.0: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== + version "5.93.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.93.0.tgz#2e89ec7035579bdfba9760d26c63ac5c3462a5e5" + integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" @@ -7172,10 +7115,10 @@ webpack@^5.91.0: "@webassemblyjs/wasm-edit" "^1.12.1" "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.9.0" + acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" + enhanced-resolve "^5.17.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" @@ -7196,23 +7139,16 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== -which-typed-array@^1.1.11, which-typed-array@^1.1.2: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== +which-typed-array@^1.1.14, which-typed-array@^1.1.2: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@2.0.2, which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" + has-tostringtag "^1.0.2" which@^1.2.14: version "1.3.1" @@ -7221,6 +7157,13 @@ which@^1.2.14: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wif@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" @@ -7238,10 +7181,10 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^2.0.0: version "2.1.0" @@ -7265,7 +7208,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -7285,11 +7228,6 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"