From a537493cf94da9298e66129adf036014dfd65639 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Mon, 24 Apr 2023 19:47:44 -0400 Subject: [PATCH 01/27] feat: implement light client verification methods --- packages/near-api-js/src/common-index.ts | 2 + packages/near-api-js/src/light-client.ts | 511 ++++++++++++++++++++ packages/near-api-js/test/providers.test.js | 57 ++- 3 files changed, 560 insertions(+), 10 deletions(-) create mode 100644 packages/near-api-js/src/light-client.ts diff --git a/packages/near-api-js/src/common-index.ts b/packages/near-api-js/src/common-index.ts index 6b0dd99bd4..878b837c5a 100644 --- a/packages/near-api-js/src/common-index.ts +++ b/packages/near-api-js/src/common-index.ts @@ -3,6 +3,7 @@ import * as providers from './providers'; import * as utils from './utils'; import * as transactions from './transaction'; import * as validators from './validators'; +import * as lightClient from './light-client'; import { Account } from './account'; import * as multisig from './account_multisig'; @@ -24,6 +25,7 @@ export { utils, transactions, validators, + lightClient, multisig, Account, diff --git a/packages/near-api-js/src/light-client.ts b/packages/near-api-js/src/light-client.ts new file mode 100644 index 0000000000..b78a8c9649 --- /dev/null +++ b/packages/near-api-js/src/light-client.ts @@ -0,0 +1,511 @@ +import bs58 from "bs58"; +import crypto from "crypto"; +import { + BlockHeaderInnerLiteView, + ExecutionOutcomeWithIdView, + ExecutionStatus, + ExecutionStatusBasic, + LightClientBlockLiteView, + LightClientProof, + MerklePath, + NextLightClientBlockResponse, + ValidatorStakeView, +} from "./providers/provider"; +import { Assignable, Enum } from "./utils/enums"; +import BN from "bn.js"; +import { serialize } from "./utils/serialize"; +import { PublicKey } from "./utils"; + +const ED_PREFIX = "ed25519:"; + +class BorshBlockHeaderInnerLite extends Assignable { + height: BN; + epoch_id: Uint8Array; + next_epoch_id: Uint8Array; + prev_state_root: Uint8Array; + outcome_root: Uint8Array; + timestamp: BN; + next_bp_hash: Uint8Array; + block_merkle_root: Uint8Array; +} + +class BorshApprovalInner extends Enum { + endorsement?: Uint8Array; + skip?: BN; +} + +class BorshValidatorStakeViewV1 extends Assignable { + account_id: string; + public_key: PublicKey; + stake: BN; +} + +class BorshValidatorStakeView extends Enum { + v1?: BorshValidatorStakeViewV1; +} + +class BorshValidatorStakeViewWrapper extends Assignable { + bps: BorshValidatorStakeView[]; +} + +class BorshEmpty extends Assignable {} + +class BorshPartialExecutionStatus extends Enum { + unknown?: BorshEmpty; + failure?: BorshEmpty; + successValue?: Uint8Array; + successReceiptId?: Uint8Array; +} + +class BorshPartialExecutionOutcome extends Assignable { + receiptIds: Uint8Array[]; + gasBurnt: BN; + tokensBurnt: BN; + executorId: string; + status: BorshPartialExecutionStatus; +} + +class BorshCryptoHash extends Assignable { + array: Uint8Array; +} + +class BorshCryptoHashes extends Assignable { + hashes: Uint8Array[]; +} + +type Class = new (...args: any[]) => T; +const SCHEMA = new Map([ + [ + BorshBlockHeaderInnerLite, + { + kind: "struct", + fields: [ + ["height", "u64"], + ["epoch_id", [32]], + ["next_epoch_id", [32]], + ["prev_state_root", [32]], + ["outcome_root", [32]], + ["timestamp", "u64"], + ["next_bp_hash", [32]], + ["block_merkle_root", [32]], + ], + }, + ], + [ + BorshApprovalInner, + { + kind: "enum", + field: "enum", + values: [ + ["endorsement", [32]], + ["skip", "u64"], + ], + }, + ], + [ + BorshValidatorStakeViewV1, + { + kind: "struct", + fields: [ + ["account_id", "string"], + ["public_key", PublicKey], + ["stake", "u128"], + ], + }, + ], + [ + BorshValidatorStakeView, + { + kind: "enum", + field: "enum", + values: [["v1", BorshValidatorStakeViewV1]], + }, + ], + [ + BorshValidatorStakeViewWrapper, + { + kind: "struct", + fields: [["bps", [BorshValidatorStakeView]]], + }, + ], + [ + BorshEmpty, + { + kind: "struct", + fields: [], + }, + ], + [ + BorshCryptoHash, + { + kind: "struct", + fields: [["hash", [32]]], + }, + ], + [ + BorshCryptoHashes, + { + kind: "struct", + fields: [["hashes", [[32]]]], + }, + ], + [ + BorshPartialExecutionStatus, + { + kind: "enum", + field: "enum", + values: [ + ["unknown", BorshEmpty], + ["failure", BorshEmpty], + ["successValue", ["u8"]], + ["successReceiptId", [32]], + ], + }, + ], + [ + BorshPartialExecutionOutcome, + { + kind: "struct", + fields: [ + ["receiptIds", [[32]]], + ["gasBurnt", "u64"], + ["tokensBurnt", "u128"], + ["executorId", "string"], + ["status", BorshPartialExecutionStatus], + ], + }, + ], + // Note: Copied from transactions schema + [ + PublicKey, + { + kind: "struct", + fields: [ + ["keyType", "u8"], + ["data", [32]], + ], + }, + ], +]); + +function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { + const borshBps: BorshValidatorStakeView[] = bps.map((bp) => { + if (bp.validator_stake_struct_version) { + const version = parseInt( + bp.validator_stake_struct_version.slice(1) + ); + if (version !== 1) { + throw new Error( + "Only version 1 of the validator stake struct is supported" + ); + } + } + return new BorshValidatorStakeView({ + v1: new BorshValidatorStakeViewV1({ + account_id: bp.account_id, + public_key: PublicKey.fromString(bp.public_key), + stake: bp.stake, + }), + }); + }); + const serializedBps = serialize( + SCHEMA, + // NOTE: just wrapping because borsh-js requires this type to be in the schema for some reason + new BorshValidatorStakeViewWrapper({ bps: borshBps }) + ); + return crypto.createHash("sha256").update(serializedBps).digest(); +} + +function combineHash(h1: Uint8Array, h2: Uint8Array): Buffer { + const hash = crypto.createHash("sha256"); + hash.update(h1); + hash.update(h2); + return hash.digest(); +} + +export function computeBlockHash(block: LightClientBlockLiteView): Buffer { + const header = block.inner_lite; + const borshHeader = new BorshBlockHeaderInnerLite({ + height: new BN(header.height), + epoch_id: bs58.decode(header.epoch_id), + next_epoch_id: bs58.decode(header.next_epoch_id), + prev_state_root: bs58.decode(header.prev_state_root), + outcome_root: bs58.decode(header.outcome_root), + timestamp: new BN(header.timestamp_nanosec), + next_bp_hash: bs58.decode(header.next_bp_hash), + block_merkle_root: bs58.decode(header.block_merkle_root), + }); + const msg = serialize(SCHEMA, borshHeader); + const innerRestHash = bs58.decode(block.inner_rest_hash); + const prevHash = bs58.decode(block.prev_block_hash); + const innerLiteHash = crypto.createHash("sha256").update(msg).digest(); + const innerHash = combineHash(innerLiteHash, innerRestHash); + const finalHash = combineHash(innerHash, prevHash); + + return finalHash; +} + +export function validateLightClientBlock( + lastKnownBlock: LightClientBlockLiteView, + currentBlockProducers: ValidatorStakeView[], + newBlock: NextLightClientBlockResponse +) { + // Numbers for each step references the spec: + // https://github.com/near/NEPs/blob/c7d72138117ed0ab86629a27d1f84e9cce80848f/specs/ChainSpec/LightClient.md + const newBlockHash = computeBlockHash(lastKnownBlock); + const nextBlockHashDecoded = combineHash( + bs58.decode(newBlock.next_block_inner_hash), + newBlockHash + ); + + // (1) + if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { + throw new Error( + "New block must be at least the height of the last known block" + ); + } + + // (2) + if ( + newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.epoch_id && + newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id + ) { + throw new Error( + "New block must either be in the same epoch or the next epoch from the last known block" + ); + } + + const blockProducers: ValidatorStakeView[] = currentBlockProducers; + if (newBlock.approvals_after_next.length < blockProducers.length) { + throw new Error( + "Number of approvals for next epoch must be at least the number of current block producers" + ); + } + + // (4) and (5) + const totalStake = new BN(0); + const approvedStake = new BN(0); + + for (let i = 0; i < blockProducers.length; i++) { + const approval = newBlock.approvals_after_next[i]; + const stake = blockProducers[i].stake; + + totalStake.iadd(new BN(stake)); + + if (approval === null) { + continue; + } + + approvedStake.iadd(new BN(stake)); + + const publicKey = PublicKey.fromString(blockProducers[i].public_key); + const signature = bs58.decode(approval.slice(ED_PREFIX.length)); + + const approvalEndorsement = serialize( + SCHEMA, + new BorshApprovalInner({ endorsement: nextBlockHashDecoded }) + ); + + const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); + const approvalHeightLe = approvalHeight.toArrayLike(Buffer, "le", 8); + const approvalMessage = new Uint8Array([ + ...approvalEndorsement, + ...approvalHeightLe, + ]); + + publicKey.verify(approvalMessage, signature); + } + + // (5) + const threshold = totalStake.mul(new BN(2)).div(new BN(3)); + if (approvedStake <= threshold) { + throw new Error("Approved stake does not exceed the 2/3 threshold"); + } + + // (6) + if ( + newBlock.inner_lite.epoch_id === lastKnownBlock.inner_lite.next_epoch_id + ) { + // (3) + if (!newBlock.next_bps) { + throw new Error( + "New block must include next block producers if a new epoch starts" + ); + } + + const bpsHash = hashBlockProducers(newBlock.next_bps); + + if (!bpsHash.equals(bs58.decode(newBlock.inner_lite.next_bp_hash))) { + throw new Error("Next block producers hash doesn't match"); + } + } +} + +function blockHeaderInnerLiteHash(data: BlockHeaderInnerLiteView): Buffer { + const hash = crypto.createHash("sha256"); + hash.update(new BN(data.height).toArrayLike(Buffer, "le", 8)); + hash.update(bs58.decode(data.epoch_id)); + hash.update(bs58.decode(data.next_epoch_id)); + hash.update(bs58.decode(data.prev_state_root)); + hash.update(bs58.decode(data.outcome_root)); + hash.update( + new BN(data.timestamp_nanosec || data.timestamp).toArrayLike( + Buffer, + "le", + 8 + ) + ); + hash.update(bs58.decode(data.next_bp_hash)); + hash.update(bs58.decode(data.block_merkle_root)); + return hash.digest(); +} + +function computeRoot(node: Buffer, proof: MerklePath): Buffer { + proof.forEach((step) => { + if (step.direction == "Left") { + node = combineHash(bs58.decode(step.hash), node); + } else { + node = combineHash(node, bs58.decode(step.hash)); + } + }); + return node; +} + +function computeMerkleRoot(proof: LightClientProof): Buffer { + const innerLiteHash = blockHeaderInnerLiteHash( + proof.block_header_lite.inner_lite + ); + + const headerHash = combineHash( + combineHash( + innerLiteHash, + bs58.decode(proof.block_header_lite.inner_rest_hash) + ), + bs58.decode(proof.block_header_lite.prev_block_hash) + ); + + return computeRoot(headerHash, proof.block_proof); +} + +function computeOutcomeRoot( + outcomeWithId: ExecutionOutcomeWithIdView, + outcomeRootProof: MerklePath +) { + // Generate outcome proof hash through borsh encoding + const receiptIds = outcomeWithId.outcome.receipt_ids.map((id) => + bs58.decode(id) + ); + + const borshStatus = ( + status: ExecutionStatus | ExecutionStatusBasic + ): BorshPartialExecutionStatus => { + if (status === ExecutionStatusBasic.Pending) { + throw new Error("Pending status is not supported"); + } else if (status === ExecutionStatusBasic.Unknown) { + return new BorshPartialExecutionStatus({ + unknown: new BorshEmpty({}), + }); + } else if ( + status === ExecutionStatusBasic.Failure || + "Failure" in status + ) { + return new BorshPartialExecutionStatus({ + failure: new BorshEmpty({}), + }); + } else if ( + status.SuccessValue !== undefined && + status.SuccessValue !== null + ) { + return new BorshPartialExecutionStatus({ + successValue: Buffer.from(status.SuccessValue, "base64"), + }); + } else if ( + status.SuccessReceiptId !== undefined && + status.SuccessReceiptId !== null + ) { + return new BorshPartialExecutionStatus({ + successReceiptId: bs58.decode(status.SuccessReceiptId), + }); + } else { + throw new Error(`Unexpected execution status ${status}`); + } + }; + const partialExecOutcome: BorshPartialExecutionOutcome = + new BorshPartialExecutionOutcome({ + receiptIds: receiptIds, + gasBurnt: new BN(outcomeWithId.outcome.gas_burnt), + // TODO update with types once https://github.com/near/near-api-js/pull/1113 comes in + tokensBurnt: new BN((outcomeWithId.outcome as any).tokens_burnt), + executorId: (outcomeWithId.outcome as any).executor_id, + status: borshStatus(outcomeWithId.outcome.status), + }); + const serializedPartialOutcome = serialize(SCHEMA, partialExecOutcome); + const partialOutcomeHash = crypto + .createHash("sha256") + .update(serializedPartialOutcome) + .digest(); + + const logsHashes: Uint8Array[] = outcomeWithId.outcome.logs.map((log) => { + return crypto.createHash("sha256").update(log).digest(); + }); + const outcomeHashes: Uint8Array[] = [ + bs58.decode(outcomeWithId.id), + partialOutcomeHash, + ...logsHashes, + ]; + + const outcomeSerialized = serialize( + SCHEMA, + new BorshCryptoHashes({ hashes: outcomeHashes }) + ); + const outcomeHash = crypto + .createHash("sha256") + .update(outcomeSerialized) + .digest(); + + // Generate shard outcome root + // computeRoot(sha256(borsh(outcome)), outcome.proof) + const outcomeShardRoot = computeRoot(outcomeHash, outcomeWithId.proof); + + // Generate block outcome root + // computeRoot(sha256(borsh(shardOutcomeRoot)), outcomeRootProof) + const shardRootBorsh = serialize( + SCHEMA, + new BorshCryptoHash({ hash: outcomeShardRoot }) + ); + const shardRootHash = crypto + .createHash("sha256") + .update(shardRootBorsh) + .digest(); + + return computeRoot(shardRootHash, outcomeRootProof); +} + +export function validateExecutionProof( + proof: LightClientProof, + merkleRoot: Uint8Array +) { + // Execution outcome root verification + const blockOutcomeRoot = computeOutcomeRoot( + proof.outcome_proof, + proof.outcome_root_proof + ); + const proofRoot = proof.block_header_lite.inner_lite.outcome_root; + if (!blockOutcomeRoot.equals(bs58.decode(proofRoot))) { + throw new Error( + `Block outcome root (${bs58.encode( + blockOutcomeRoot + )}) doesn't match proof (${proofRoot})}` + ); + } + + // Block merkle root verification + const blockMerkleRoot = computeMerkleRoot(proof); + if (!blockMerkleRoot.equals(merkleRoot)) { + throw new Error( + `Block merkle root (${bs58.encode( + blockMerkleRoot + )}) doesn't match proof (${bs58.encode(merkleRoot)})}` + ); + } +} diff --git a/packages/near-api-js/test/providers.test.js b/packages/near-api-js/test/providers.test.js index 1ec4c3ddc9..f026979140 100644 --- a/packages/near-api-js/test/providers.test.js +++ b/packages/near-api-js/test/providers.test.js @@ -1,7 +1,8 @@ const nearApi = require('../src/index'); -const testUtils = require('./test-utils'); +const testUtils = require('./test-utils'); const BN = require('bn.js'); const base58 = require('bs58'); +const { lightClient } = require('../src/index'); jest.setTimeout(30000); @@ -61,7 +62,7 @@ test('json rpc fetch validators info', withProvider(async (provider) => { expect(validators.current_validators.length).toBeGreaterThanOrEqual(1); })); -test('txStatus with string hash and buffer hash', withProvider(async(provider) => { +test('txStatus with string hash and buffer hash', withProvider(async (provider) => { const near = await testUtils.setUpTestConnection(); const sender = await testUtils.createAccount(near); const receiver = await testUtils.createAccount(near); @@ -73,7 +74,7 @@ test('txStatus with string hash and buffer hash', withProvider(async(provider) = expect(responseWithUint8Array).toMatchObject(outcome); })); -test('txStatusReciept with string hash and buffer hash', withProvider(async(provider) => { +test('txStatusReciept with string hash and buffer hash', withProvider(async (provider) => { const near = await testUtils.setUpTestConnection(); const sender = await testUtils.createAccount(near); const receiver = await testUtils.createAccount(near); @@ -86,7 +87,7 @@ test('txStatusReciept with string hash and buffer hash', withProvider(async(prov expect(responseWithUint8Array).toMatchObject(reciepts); })); -test('json rpc query with block_id', withProvider(async(provider) => { +test('json rpc query with block_id', withProvider(async (provider) => { const stat = await provider.status(); let block_id = stat.sync_info.latest_block_height - 1; @@ -121,7 +122,7 @@ test('json rpc query view_state', withProvider(async (provider) => { await contract.setValue({ args: { value: 'hello' } }); - return testUtils.waitFor(async() => { + return testUtils.waitFor(async () => { const response = await provider.query({ request_type: 'view_state', finality: 'final', @@ -162,7 +163,7 @@ test('json rpc query view_code', withProvider(async (provider) => { const account = await testUtils.createAccount(near); const contract = await testUtils.deployContract(account, testUtils.generateUniqueString('test')); - return testUtils.waitFor(async() => { + return testUtils.waitFor(async () => { const response = await provider.query({ request_type: 'view_code', finality: 'final', @@ -185,7 +186,7 @@ test('json rpc query call_function', withProvider(async (provider) => { await contract.setValue({ args: { value: 'hello' } }); - return testUtils.waitFor(async() => { + return testUtils.waitFor(async () => { const response = await provider.query({ request_type: 'call_function', finality: 'final', @@ -210,7 +211,7 @@ test('json rpc query call_function', withProvider(async (provider) => { }); })); -test('final tx result', async() => { +test('final tx result', async () => { const result = { status: { SuccessValue: 'e30=' }, transaction: { id: '11111', outcome: { status: { SuccessReceiptId: '11112' }, logs: [], receipt_ids: ['11112'], gas_burnt: 1 } }, @@ -222,7 +223,7 @@ test('final tx result', async() => { expect(nearApi.providers.getTransactionLastResult(result)).toEqual({}); }); -test('final tx result with null', async() => { +test('final tx result with null', async () => { const result = { status: 'Failure', transaction: { id: '11111', outcome: { status: { SuccessReceiptId: '11112' }, logs: [], receipt_ids: ['11112'], gas_burnt: 1 } }, @@ -234,7 +235,7 @@ test('final tx result with null', async() => { expect(nearApi.providers.getTransactionLastResult(result)).toEqual(null); }); -test('json rpc light client proof', async() => { +test('json rpc light client proof', async () => { const near = await testUtils.setUpTestConnection(); const workingAccount = await testUtils.createAccount(near); const executionOutcome = await workingAccount.sendMoney(workingAccount.accountId, new BN(10000)); @@ -260,6 +261,7 @@ test('json rpc light client proof', async() => { const block = await provider.block({ blockId: finalizedStatus.sync_info.latest_block_hash }); const lightClientHead = block.header.last_final_block; + const finalBlock = await provider.block({ blockId: lightClientHead }); let lightClientRequest = { type: 'transaction', light_client_head: lightClientHead, @@ -276,6 +278,9 @@ test('json rpc light client proof', async() => { expect(lightClientProof.outcome_root_proof).toEqual([]); expect(lightClientProof.block_proof.length).toBeGreaterThan(0); + // Validate the proof against the finalized block + lightClient.validateExecutionProof(lightClientProof, base58.decode(finalBlock.header.block_merkle_root)); + // pass nonexistent hash for light client head will fail lightClientRequest = { type: 'transaction', @@ -296,6 +301,38 @@ test('json rpc light client proof', async() => { await expect(provider.lightClientProof(lightClientRequest)).rejects.toThrow(/.+ block .+ is ahead of head block .+/); }); +test('json rpc get next light client block with validation', withProvider(async (provider) => { + const stat = await provider.status(); + + // Get block in at least the last epoch (epoch duration 43,200 blocks on mainnet and testnet) + const height = stat.sync_info.latest_block_height; + const protocolConfig = await provider.experimental_protocolConfig({ finality: 'final' }); + + // NOTE: This will underflow if the network used has not produced an epoch yet. If a new network + // config is required, can retrieve a block a few height behind (1+buffer for indexing). If run + // on a fresh network, would need to wait for blocks to be produced and indexed. + const firstBlockHeight = height - protocolConfig.epoch_length * 2; + const firstBlock = await provider.block({ blockId: firstBlockHeight }); + const prevBlock = await provider.nextLightClientBlock({ last_block_hash: firstBlock.header.hash }); + const nextBlock = await provider.nextLightClientBlock({ last_block_hash: base58.encode(lightClient.computeBlockHash(prevBlock)) }); + expect('inner_lite' in nextBlock).toBeTruthy(); + // Verify that requesting from previous epoch includes the set of new block producers. + expect('next_bps' in nextBlock).toBeTruthy(); + + // Greater than or equal check because a block could have been produced during the test. + // There is a buffer of 10 given to the height, because this seems to be lagging behind the + // latest finalized block by a few seconds. This delay might just be due to slow or delayed + // indexing in a node's db. If this fails in the future, we can increase the buffer. + expect(nextBlock.inner_lite.height).toBeGreaterThanOrEqual(height - 10); + expect(nextBlock.inner_lite.height).toBeGreaterThan(prevBlock.inner_lite.height); + expect('prev_block_hash' in nextBlock).toBeTruthy(); + expect('next_block_inner_hash' in nextBlock).toBeTruthy(); + expect('inner_rest_hash' in nextBlock).toBeTruthy(); + expect('approvals_after_next' in nextBlock).toBeTruthy(); + + lightClient.validateLightClientBlock(prevBlock, prevBlock.next_bps, nextBlock); +})); + test('json rpc fetch protocol config', withProvider(async (provider) => { const status = await provider.status(); const blockHeight = status.sync_info.latest_block_height; From 39b457565a6653169dad28193f0ccaf2367abc63 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Mon, 24 Apr 2023 20:00:25 -0400 Subject: [PATCH 02/27] chore: docs --- packages/near-api-js/src/light-client.ts | 37 +++++++++++++++++++----- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/packages/near-api-js/src/light-client.ts b/packages/near-api-js/src/light-client.ts index b78a8c9649..a5499b430a 100644 --- a/packages/near-api-js/src/light-client.ts +++ b/packages/near-api-js/src/light-client.ts @@ -223,6 +223,12 @@ function combineHash(h1: Uint8Array, h2: Uint8Array): Buffer { return hash.digest(); } +/** + * Computes the block hash given a `LightClientBlockLiteView`. Unlike the regular block header, + * the hash has to be calculated since it is not included in the response. + * + * @param block The block to compute the hash for. + */ export function computeBlockHash(block: LightClientBlockLiteView): Buffer { const header = block.inner_lite; const borshHeader = new BorshBlockHeaderInnerLite({ @@ -245,6 +251,14 @@ export function computeBlockHash(block: LightClientBlockLiteView): Buffer { return finalHash; } +/** + * Validates a light client block response from the RPC against the last known block and block + * producer set. + * + * @param lastKnownBlock The last light client block retrieved. This must be the block at the epoch before newBlock. + * @param currentBlockProducers The block producer set for the epoch of the last known block. + * @param newBlock The new block to validate. + */ export function validateLightClientBlock( lastKnownBlock: LightClientBlockLiteView, currentBlockProducers: ValidatorStakeView[], @@ -481,31 +495,38 @@ function computeOutcomeRoot( return computeRoot(shardRootHash, outcomeRootProof); } +/** + * Validates the execution proof returned from the RPC. This will validate that the proof itself, + * and ensure that the block merkle root matches the one passed in. + * + * @param proof The proof given by the RPC. + * @param blockMerkleRoot The block merkle root for the block that was used to generate the proof. + */ export function validateExecutionProof( proof: LightClientProof, - merkleRoot: Uint8Array + blockMerkleRoot: Uint8Array ) { // Execution outcome root verification - const blockOutcomeRoot = computeOutcomeRoot( + const computedOutcomeRoot = computeOutcomeRoot( proof.outcome_proof, proof.outcome_root_proof ); const proofRoot = proof.block_header_lite.inner_lite.outcome_root; - if (!blockOutcomeRoot.equals(bs58.decode(proofRoot))) { + if (!computedOutcomeRoot.equals(bs58.decode(proofRoot))) { throw new Error( `Block outcome root (${bs58.encode( - blockOutcomeRoot + computedOutcomeRoot )}) doesn't match proof (${proofRoot})}` ); } // Block merkle root verification - const blockMerkleRoot = computeMerkleRoot(proof); - if (!blockMerkleRoot.equals(merkleRoot)) { + const computedBlockRoot = computeMerkleRoot(proof); + if (!computedBlockRoot.equals(blockMerkleRoot)) { throw new Error( `Block merkle root (${bs58.encode( - blockMerkleRoot - )}) doesn't match proof (${bs58.encode(merkleRoot)})}` + computedBlockRoot + )}) doesn't match proof (${bs58.encode(blockMerkleRoot)})}` ); } } From 879a7ab26e6eef3da61b3f8d96ee1bf68651003c Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Tue, 25 Apr 2023 23:01:48 -0400 Subject: [PATCH 03/27] refactor: move light-client APIs to own crate, migrate sha impl --- packages/light-client/CHANGELOG.md | 17 + packages/light-client/README.md | 8 + packages/light-client/package.json | 34 ++ packages/light-client/src/index.ts | 542 +++++++++++++++++++++++ packages/light-client/tsconfig.json | 9 + packages/near-api-js/package.json | 1 + packages/near-api-js/src/light-client.ts | 537 +--------------------- pnpm-lock.yaml | 35 +- 8 files changed, 649 insertions(+), 534 deletions(-) create mode 100644 packages/light-client/CHANGELOG.md create mode 100644 packages/light-client/README.md create mode 100644 packages/light-client/package.json create mode 100644 packages/light-client/src/index.ts create mode 100644 packages/light-client/tsconfig.json diff --git a/packages/light-client/CHANGELOG.md b/packages/light-client/CHANGELOG.md new file mode 100644 index 0000000000..a0202b5f7d --- /dev/null +++ b/packages/light-client/CHANGELOG.md @@ -0,0 +1,17 @@ +# @near-js/types + +## 0.0.3 + +### Patch Changes + +- [#1103](https://github.com/near/near-api-js/pull/1103) [`b713ae78`](https://github.com/near/near-api-js/commit/b713ae78969d530e7e69e21e315e3d3fdb5e68e9) Thanks [@austinabell](https://github.com/austinabell)! - Implement light client block retrieval and relevant types + +- [#1106](https://github.com/near/near-api-js/pull/1106) [`bc53c32c`](https://github.com/near/near-api-js/commit/bc53c32c80694e6f22d9be97db44603591f0026b) Thanks [@austinabell](https://github.com/austinabell)! - Adds missing timestamp_nanosec field to light client proof header + +- [#1105](https://github.com/near/near-api-js/pull/1105) [`8c6bf391`](https://github.com/near/near-api-js/commit/8c6bf391a01af9adb81cb8731c45bdb17f5291c0) Thanks [@austinabell](https://github.com/austinabell)! - Adds missing version field in ValidatorStakeView + +## 0.0.2 + +### Patch Changes + +- [#1091](https://github.com/near/near-api-js/pull/1091) [`ca458cac`](https://github.com/near/near-api-js/commit/ca458cac683fab614b77eb5daa160e03b0640350) Thanks [@andy-haynes](https://github.com/andy-haynes)! - Only include contents of lib/ in NPM packages diff --git a/packages/light-client/README.md b/packages/light-client/README.md new file mode 100644 index 0000000000..c8a781265a --- /dev/null +++ b/packages/light-client/README.md @@ -0,0 +1,8 @@ +# @near-js/light-client + +NEAR light client verification utilities. Based on the [Light Client spec](https://github.com/near/NEPs/blob/master/specs/ChainSpec/LightClient.md) + +# License + +This repository is distributed under the terms of both the MIT license and the Apache License (Version 2.0). +See [LICENSE](https://github.com/near/near-api-js/blob/master/LICENSE) and [LICENSE-APACHE](https://github.com/near/near-api-js/blob/master/LICENSE-APACHE) for details. diff --git a/packages/light-client/package.json b/packages/light-client/package.json new file mode 100644 index 0000000000..0769e912d5 --- /dev/null +++ b/packages/light-client/package.json @@ -0,0 +1,34 @@ +{ + "name": "@near-js/light-client", + "version": "0.0.1", + "description": "TypeScript API for NEAR light client verification", + "main": "lib/index.js", + "scripts": { + "build": "pnpm compile", + "compile": "tsc -p tsconfig.json", + "lint": "eslint -c ../../.eslintrc.ts.yml src/**/*.ts", + "lint:fix": "eslint **/*.ts" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1", + "@near-js/crypto": "workspace:*", + "@near-js/types": "workspace:*", + "@near-js/providers": "workspace:*", + "@near-js/utils": "workspace:*", + "bs58": "^4.0.0", + "borsh": "^0.7.0", + "js-sha256": "^0.9.0" + }, + "devDependencies": { + "@types/node": "^18.11.18", + "jest": "^26.0.1", + "ts-jest": "^26.5.6", + "typescript": "^4.9.4" + }, + "files": [ + "lib" + ] +} diff --git a/packages/light-client/src/index.ts b/packages/light-client/src/index.ts new file mode 100644 index 0000000000..e2725ffe3a --- /dev/null +++ b/packages/light-client/src/index.ts @@ -0,0 +1,542 @@ +import bs58 from "bs58"; +import { sha256 } from "js-sha256"; +import { + BlockHeaderInnerLiteView, + ExecutionOutcomeWithIdView, + ExecutionStatus, + ExecutionStatusBasic, + LightClientBlockLiteView, + LightClientProof, + MerklePath, + NextLightClientBlockResponse, + ValidatorStakeView, +} from "@near-js/types"; +import { Assignable } from "@near-js/types"; +import { PublicKey } from "@near-js/crypto"; +import BN from "bn.js"; +import { serialize } from "borsh"; + +// TODO this abstract class exists in NAJ and seems unused. It is also copied in the transactions +// TODO ..package. This should probably exist in utils and shared. +abstract class Enum { + enum: string; + + constructor(properties: any) { + if (Object.keys(properties).length !== 1) { + throw new Error("Enum can only take single value"); + } + Object.keys(properties).map((key: string) => { + (this as any)[key] = properties[key]; + this.enum = key; + }); + } +} + +// TODO: refactor this into separate files + +const ED_PREFIX = "ed25519:"; + +class BorshBlockHeaderInnerLite extends Assignable { + height: BN; + epoch_id: Uint8Array; + next_epoch_id: Uint8Array; + prev_state_root: Uint8Array; + outcome_root: Uint8Array; + timestamp: BN; + next_bp_hash: Uint8Array; + block_merkle_root: Uint8Array; +} + +class BorshApprovalInner extends Enum { + endorsement?: Uint8Array; + skip?: BN; +} + +class BorshValidatorStakeViewV1 extends Assignable { + account_id: string; + public_key: PublicKey; + stake: BN; +} + +class BorshValidatorStakeView extends Enum { + v1?: BorshValidatorStakeViewV1; +} + +class BorshValidatorStakeViewWrapper extends Assignable { + bps: BorshValidatorStakeView[]; +} + +class BorshEmpty extends Assignable {} + +class BorshPartialExecutionStatus extends Enum { + unknown?: BorshEmpty; + failure?: BorshEmpty; + successValue?: Uint8Array; + successReceiptId?: Uint8Array; +} + +class BorshPartialExecutionOutcome extends Assignable { + receiptIds: Uint8Array[]; + gasBurnt: BN; + tokensBurnt: BN; + executorId: string; + status: BorshPartialExecutionStatus; +} + +class BorshCryptoHash extends Assignable { + array: Uint8Array; +} + +class BorshCryptoHashes extends Assignable { + hashes: Uint8Array[]; +} + +type Class = new (...args: any[]) => T; +const SCHEMA = new Map([ + [ + BorshBlockHeaderInnerLite, + { + kind: "struct", + fields: [ + ["height", "u64"], + ["epoch_id", [32]], + ["next_epoch_id", [32]], + ["prev_state_root", [32]], + ["outcome_root", [32]], + ["timestamp", "u64"], + ["next_bp_hash", [32]], + ["block_merkle_root", [32]], + ], + }, + ], + [ + BorshApprovalInner, + { + kind: "enum", + field: "enum", + values: [ + ["endorsement", [32]], + ["skip", "u64"], + ], + }, + ], + [ + BorshValidatorStakeViewV1, + { + kind: "struct", + fields: [ + ["account_id", "string"], + ["public_key", PublicKey], + ["stake", "u128"], + ], + }, + ], + [ + BorshValidatorStakeView, + { + kind: "enum", + field: "enum", + values: [["v1", BorshValidatorStakeViewV1]], + }, + ], + [ + BorshValidatorStakeViewWrapper, + { + kind: "struct", + fields: [["bps", [BorshValidatorStakeView]]], + }, + ], + [ + BorshEmpty, + { + kind: "struct", + fields: [], + }, + ], + [ + BorshCryptoHash, + { + kind: "struct", + fields: [["hash", [32]]], + }, + ], + [ + BorshCryptoHashes, + { + kind: "struct", + fields: [["hashes", [[32]]]], + }, + ], + [ + BorshPartialExecutionStatus, + { + kind: "enum", + field: "enum", + values: [ + ["unknown", BorshEmpty], + ["failure", BorshEmpty], + ["successValue", ["u8"]], + ["successReceiptId", [32]], + ], + }, + ], + [ + BorshPartialExecutionOutcome, + { + kind: "struct", + fields: [ + ["receiptIds", [[32]]], + ["gasBurnt", "u64"], + ["tokensBurnt", "u128"], + ["executorId", "string"], + ["status", BorshPartialExecutionStatus], + ], + }, + ], + // Note: Copied from transactions schema + [ + PublicKey, + { + kind: "struct", + fields: [ + ["keyType", "u8"], + ["data", [32]], + ], + }, + ], +]); + +function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { + const borshBps: BorshValidatorStakeView[] = bps.map((bp) => { + if (bp.validator_stake_struct_version) { + const version = parseInt( + bp.validator_stake_struct_version.slice(1) + ); + if (version !== 1) { + throw new Error( + "Only version 1 of the validator stake struct is supported" + ); + } + } + return new BorshValidatorStakeView({ + v1: new BorshValidatorStakeViewV1({ + account_id: bp.account_id, + public_key: PublicKey.fromString(bp.public_key), + stake: bp.stake, + }), + }); + }); + const serializedBps = serialize( + SCHEMA, + // NOTE: just wrapping because borsh-js requires this type to be in the schema for some reason + new BorshValidatorStakeViewWrapper({ bps: borshBps }) + ); + return Buffer.from(sha256.array(serializedBps)); +} + +function combineHash(h1: Uint8Array, h2: Uint8Array): Buffer { + const hash = sha256.create(); + hash.update(h1); + hash.update(h2); + return Buffer.from(hash.digest()); +} + +/** + * Computes the block hash given a `LightClientBlockLiteView`. Unlike the regular block header, + * the hash has to be calculated since it is not included in the response. + * + * @param block The block to compute the hash for. + */ +export function computeBlockHash(block: LightClientBlockLiteView): Buffer { + const header = block.inner_lite; + const borshHeader = new BorshBlockHeaderInnerLite({ + height: new BN(header.height), + epoch_id: bs58.decode(header.epoch_id), + next_epoch_id: bs58.decode(header.next_epoch_id), + prev_state_root: bs58.decode(header.prev_state_root), + outcome_root: bs58.decode(header.outcome_root), + timestamp: new BN(header.timestamp_nanosec), + next_bp_hash: bs58.decode(header.next_bp_hash), + block_merkle_root: bs58.decode(header.block_merkle_root), + }); + const msg = serialize(SCHEMA, borshHeader); + const innerRestHash = bs58.decode(block.inner_rest_hash); + const prevHash = bs58.decode(block.prev_block_hash); + const innerLiteHash = Buffer.from(sha256.array(msg)); + const innerHash = combineHash(innerLiteHash, innerRestHash); + const finalHash = combineHash(innerHash, prevHash); + + return finalHash; +} + +/** + * Validates a light client block response from the RPC against the last known block and block + * producer set. + * + * @param lastKnownBlock The last light client block retrieved. This must be the block at the epoch before newBlock. + * @param currentBlockProducers The block producer set for the epoch of the last known block. + * @param newBlock The new block to validate. + */ +export function validateLightClientBlock( + lastKnownBlock: LightClientBlockLiteView, + currentBlockProducers: ValidatorStakeView[], + newBlock: NextLightClientBlockResponse +) { + // Numbers for each step references the spec: + // https://github.com/near/NEPs/blob/c7d72138117ed0ab86629a27d1f84e9cce80848f/specs/ChainSpec/LightClient.md + const newBlockHash = computeBlockHash(lastKnownBlock); + const nextBlockHashDecoded = combineHash( + bs58.decode(newBlock.next_block_inner_hash), + newBlockHash + ); + + // (1) + if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { + throw new Error( + "New block must be at least the height of the last known block" + ); + } + + // (2) + if ( + newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.epoch_id && + newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id + ) { + throw new Error( + "New block must either be in the same epoch or the next epoch from the last known block" + ); + } + + const blockProducers: ValidatorStakeView[] = currentBlockProducers; + if (newBlock.approvals_after_next.length < blockProducers.length) { + throw new Error( + "Number of approvals for next epoch must be at least the number of current block producers" + ); + } + + // (4) and (5) + const totalStake = new BN(0); + const approvedStake = new BN(0); + + for (let i = 0; i < blockProducers.length; i++) { + const approval = newBlock.approvals_after_next[i]; + const stake = blockProducers[i].stake; + + totalStake.iadd(new BN(stake)); + + if (approval === null) { + continue; + } + + approvedStake.iadd(new BN(stake)); + + const publicKey = PublicKey.fromString(blockProducers[i].public_key); + const signature = bs58.decode(approval.slice(ED_PREFIX.length)); + + const approvalEndorsement = serialize( + SCHEMA, + new BorshApprovalInner({ endorsement: nextBlockHashDecoded }) + ); + + const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); + const approvalHeightLe = approvalHeight.toArrayLike(Buffer, "le", 8); + const approvalMessage = new Uint8Array([ + ...approvalEndorsement, + ...approvalHeightLe, + ]); + + publicKey.verify(approvalMessage, signature); + } + + // (5) + const threshold = totalStake.mul(new BN(2)).div(new BN(3)); + if (approvedStake <= threshold) { + throw new Error("Approved stake does not exceed the 2/3 threshold"); + } + + // (6) + if ( + newBlock.inner_lite.epoch_id === lastKnownBlock.inner_lite.next_epoch_id + ) { + // (3) + if (!newBlock.next_bps) { + throw new Error( + "New block must include next block producers if a new epoch starts" + ); + } + + const bpsHash = hashBlockProducers(newBlock.next_bps); + + if (!bpsHash.equals(bs58.decode(newBlock.inner_lite.next_bp_hash))) { + throw new Error("Next block producers hash doesn't match"); + } + } +} + +function blockHeaderInnerLiteHash(data: BlockHeaderInnerLiteView): Buffer { + const hash = sha256.create(); + hash.update(new BN(data.height).toArrayLike(Buffer, "le", 8)); + hash.update(bs58.decode(data.epoch_id)); + hash.update(bs58.decode(data.next_epoch_id)); + hash.update(bs58.decode(data.prev_state_root)); + hash.update(bs58.decode(data.outcome_root)); + hash.update( + new BN(data.timestamp_nanosec || data.timestamp).toArrayLike( + Buffer, + "le", + 8 + ) + ); + hash.update(bs58.decode(data.next_bp_hash)); + hash.update(bs58.decode(data.block_merkle_root)); + return Buffer.from(hash.digest()); +} + +function computeRoot(node: Buffer, proof: MerklePath): Buffer { + proof.forEach((step) => { + if (step.direction == "Left") { + node = combineHash(bs58.decode(step.hash), node); + } else { + node = combineHash(node, bs58.decode(step.hash)); + } + }); + return node; +} + +function computeMerkleRoot(proof: LightClientProof): Buffer { + const innerLiteHash = blockHeaderInnerLiteHash( + proof.block_header_lite.inner_lite + ); + + const headerHash = combineHash( + combineHash( + innerLiteHash, + bs58.decode(proof.block_header_lite.inner_rest_hash) + ), + bs58.decode(proof.block_header_lite.prev_block_hash) + ); + + return computeRoot(headerHash, proof.block_proof); +} + +function computeOutcomeRoot( + outcomeWithId: ExecutionOutcomeWithIdView, + outcomeRootProof: MerklePath +) { + // Generate outcome proof hash through borsh encoding + const receiptIds = outcomeWithId.outcome.receipt_ids.map((id) => + bs58.decode(id) + ); + + const borshStatus = ( + status: ExecutionStatus | ExecutionStatusBasic + ): BorshPartialExecutionStatus => { + if (status === ExecutionStatusBasic.Pending) { + throw new Error("Pending status is not supported"); + } else if (status === ExecutionStatusBasic.Unknown) { + return new BorshPartialExecutionStatus({ + unknown: new BorshEmpty({}), + }); + } else if ( + status === ExecutionStatusBasic.Failure || + "Failure" in status + ) { + return new BorshPartialExecutionStatus({ + failure: new BorshEmpty({}), + }); + } else if ( + status.SuccessValue !== undefined && + status.SuccessValue !== null + ) { + return new BorshPartialExecutionStatus({ + successValue: Buffer.from(status.SuccessValue, "base64"), + }); + } else if ( + status.SuccessReceiptId !== undefined && + status.SuccessReceiptId !== null + ) { + return new BorshPartialExecutionStatus({ + successReceiptId: bs58.decode(status.SuccessReceiptId), + }); + } else { + throw new Error(`Unexpected execution status ${status}`); + } + }; + const partialExecOutcome: BorshPartialExecutionOutcome = + new BorshPartialExecutionOutcome({ + receiptIds: receiptIds, + gasBurnt: new BN(outcomeWithId.outcome.gas_burnt), + // TODO update with types once https://github.com/near/near-api-js/pull/1113 comes in + tokensBurnt: new BN((outcomeWithId.outcome as any).tokens_burnt), + executorId: (outcomeWithId.outcome as any).executor_id, + status: borshStatus(outcomeWithId.outcome.status), + }); + const serializedPartialOutcome = serialize(SCHEMA, partialExecOutcome); + const partialOutcomeHash = Buffer.from( + sha256.array(serializedPartialOutcome) + ); + const logsHashes: Uint8Array[] = outcomeWithId.outcome.logs.map((log) => { + return Buffer.from(sha256.array(log)); + }); + const outcomeHashes: Uint8Array[] = [ + bs58.decode(outcomeWithId.id), + partialOutcomeHash, + ...logsHashes, + ]; + + const outcomeSerialized = serialize( + SCHEMA, + new BorshCryptoHashes({ hashes: outcomeHashes }) + ); + const outcomeHash = Buffer.from(sha256.array(outcomeSerialized)); + + // Generate shard outcome root + // computeRoot(sha256(borsh(outcome)), outcome.proof) + const outcomeShardRoot = computeRoot(outcomeHash, outcomeWithId.proof); + + // Generate block outcome root + // computeRoot(sha256(borsh(shardOutcomeRoot)), outcomeRootProof) + const shardRootBorsh = serialize( + SCHEMA, + new BorshCryptoHash({ hash: outcomeShardRoot }) + ); + const shardRootHash = Buffer.from(sha256.array(shardRootBorsh)); + + return computeRoot(shardRootHash, outcomeRootProof); +} + +/** + * Validates the execution proof returned from the RPC. This will validate that the proof itself, + * and ensure that the block merkle root matches the one passed in. + * + * @param proof The proof given by the RPC. + * @param blockMerkleRoot The block merkle root for the block that was used to generate the proof. + */ +export function validateExecutionProof( + proof: LightClientProof, + blockMerkleRoot: Uint8Array +) { + // Execution outcome root verification + const computedOutcomeRoot = computeOutcomeRoot( + proof.outcome_proof, + proof.outcome_root_proof + ); + const proofRoot = proof.block_header_lite.inner_lite.outcome_root; + if (!computedOutcomeRoot.equals(bs58.decode(proofRoot))) { + throw new Error( + `Block outcome root (${bs58.encode( + computedOutcomeRoot + )}) doesn't match proof (${proofRoot})}` + ); + } + + // Block merkle root verification + const computedBlockRoot = computeMerkleRoot(proof); + if (!computedBlockRoot.equals(blockMerkleRoot)) { + throw new Error( + `Block merkle root (${bs58.encode( + computedBlockRoot + )}) doesn't match proof (${bs58.encode(blockMerkleRoot)})}` + ); + } +} diff --git a/packages/light-client/tsconfig.json b/packages/light-client/tsconfig.json new file mode 100644 index 0000000000..ae42955e48 --- /dev/null +++ b/packages/light-client/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.node.json", + "compilerOptions": { + "outDir": "./lib", + }, + "files": [ + "src/index.ts" + ] +} diff --git a/packages/near-api-js/package.json b/packages/near-api-js/package.json index 6b2dbe3aac..3232922123 100644 --- a/packages/near-api-js/package.json +++ b/packages/near-api-js/package.json @@ -22,6 +22,7 @@ "@near-js/types": "workspace:*", "@near-js/utils": "workspace:*", "@near-js/wallet-account": "workspace:*", + "@near-js/light-client": "workspace:*", "ajv": "^8.11.2", "ajv-formats": "^2.1.1", "bn.js": "5.2.1", diff --git a/packages/near-api-js/src/light-client.ts b/packages/near-api-js/src/light-client.ts index a5499b430a..87d6e77c84 100644 --- a/packages/near-api-js/src/light-client.ts +++ b/packages/near-api-js/src/light-client.ts @@ -1,532 +1,5 @@ -import bs58 from "bs58"; -import crypto from "crypto"; -import { - BlockHeaderInnerLiteView, - ExecutionOutcomeWithIdView, - ExecutionStatus, - ExecutionStatusBasic, - LightClientBlockLiteView, - LightClientProof, - MerklePath, - NextLightClientBlockResponse, - ValidatorStakeView, -} from "./providers/provider"; -import { Assignable, Enum } from "./utils/enums"; -import BN from "bn.js"; -import { serialize } from "./utils/serialize"; -import { PublicKey } from "./utils"; - -const ED_PREFIX = "ed25519:"; - -class BorshBlockHeaderInnerLite extends Assignable { - height: BN; - epoch_id: Uint8Array; - next_epoch_id: Uint8Array; - prev_state_root: Uint8Array; - outcome_root: Uint8Array; - timestamp: BN; - next_bp_hash: Uint8Array; - block_merkle_root: Uint8Array; -} - -class BorshApprovalInner extends Enum { - endorsement?: Uint8Array; - skip?: BN; -} - -class BorshValidatorStakeViewV1 extends Assignable { - account_id: string; - public_key: PublicKey; - stake: BN; -} - -class BorshValidatorStakeView extends Enum { - v1?: BorshValidatorStakeViewV1; -} - -class BorshValidatorStakeViewWrapper extends Assignable { - bps: BorshValidatorStakeView[]; -} - -class BorshEmpty extends Assignable {} - -class BorshPartialExecutionStatus extends Enum { - unknown?: BorshEmpty; - failure?: BorshEmpty; - successValue?: Uint8Array; - successReceiptId?: Uint8Array; -} - -class BorshPartialExecutionOutcome extends Assignable { - receiptIds: Uint8Array[]; - gasBurnt: BN; - tokensBurnt: BN; - executorId: string; - status: BorshPartialExecutionStatus; -} - -class BorshCryptoHash extends Assignable { - array: Uint8Array; -} - -class BorshCryptoHashes extends Assignable { - hashes: Uint8Array[]; -} - -type Class = new (...args: any[]) => T; -const SCHEMA = new Map([ - [ - BorshBlockHeaderInnerLite, - { - kind: "struct", - fields: [ - ["height", "u64"], - ["epoch_id", [32]], - ["next_epoch_id", [32]], - ["prev_state_root", [32]], - ["outcome_root", [32]], - ["timestamp", "u64"], - ["next_bp_hash", [32]], - ["block_merkle_root", [32]], - ], - }, - ], - [ - BorshApprovalInner, - { - kind: "enum", - field: "enum", - values: [ - ["endorsement", [32]], - ["skip", "u64"], - ], - }, - ], - [ - BorshValidatorStakeViewV1, - { - kind: "struct", - fields: [ - ["account_id", "string"], - ["public_key", PublicKey], - ["stake", "u128"], - ], - }, - ], - [ - BorshValidatorStakeView, - { - kind: "enum", - field: "enum", - values: [["v1", BorshValidatorStakeViewV1]], - }, - ], - [ - BorshValidatorStakeViewWrapper, - { - kind: "struct", - fields: [["bps", [BorshValidatorStakeView]]], - }, - ], - [ - BorshEmpty, - { - kind: "struct", - fields: [], - }, - ], - [ - BorshCryptoHash, - { - kind: "struct", - fields: [["hash", [32]]], - }, - ], - [ - BorshCryptoHashes, - { - kind: "struct", - fields: [["hashes", [[32]]]], - }, - ], - [ - BorshPartialExecutionStatus, - { - kind: "enum", - field: "enum", - values: [ - ["unknown", BorshEmpty], - ["failure", BorshEmpty], - ["successValue", ["u8"]], - ["successReceiptId", [32]], - ], - }, - ], - [ - BorshPartialExecutionOutcome, - { - kind: "struct", - fields: [ - ["receiptIds", [[32]]], - ["gasBurnt", "u64"], - ["tokensBurnt", "u128"], - ["executorId", "string"], - ["status", BorshPartialExecutionStatus], - ], - }, - ], - // Note: Copied from transactions schema - [ - PublicKey, - { - kind: "struct", - fields: [ - ["keyType", "u8"], - ["data", [32]], - ], - }, - ], -]); - -function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { - const borshBps: BorshValidatorStakeView[] = bps.map((bp) => { - if (bp.validator_stake_struct_version) { - const version = parseInt( - bp.validator_stake_struct_version.slice(1) - ); - if (version !== 1) { - throw new Error( - "Only version 1 of the validator stake struct is supported" - ); - } - } - return new BorshValidatorStakeView({ - v1: new BorshValidatorStakeViewV1({ - account_id: bp.account_id, - public_key: PublicKey.fromString(bp.public_key), - stake: bp.stake, - }), - }); - }); - const serializedBps = serialize( - SCHEMA, - // NOTE: just wrapping because borsh-js requires this type to be in the schema for some reason - new BorshValidatorStakeViewWrapper({ bps: borshBps }) - ); - return crypto.createHash("sha256").update(serializedBps).digest(); -} - -function combineHash(h1: Uint8Array, h2: Uint8Array): Buffer { - const hash = crypto.createHash("sha256"); - hash.update(h1); - hash.update(h2); - return hash.digest(); -} - -/** - * Computes the block hash given a `LightClientBlockLiteView`. Unlike the regular block header, - * the hash has to be calculated since it is not included in the response. - * - * @param block The block to compute the hash for. - */ -export function computeBlockHash(block: LightClientBlockLiteView): Buffer { - const header = block.inner_lite; - const borshHeader = new BorshBlockHeaderInnerLite({ - height: new BN(header.height), - epoch_id: bs58.decode(header.epoch_id), - next_epoch_id: bs58.decode(header.next_epoch_id), - prev_state_root: bs58.decode(header.prev_state_root), - outcome_root: bs58.decode(header.outcome_root), - timestamp: new BN(header.timestamp_nanosec), - next_bp_hash: bs58.decode(header.next_bp_hash), - block_merkle_root: bs58.decode(header.block_merkle_root), - }); - const msg = serialize(SCHEMA, borshHeader); - const innerRestHash = bs58.decode(block.inner_rest_hash); - const prevHash = bs58.decode(block.prev_block_hash); - const innerLiteHash = crypto.createHash("sha256").update(msg).digest(); - const innerHash = combineHash(innerLiteHash, innerRestHash); - const finalHash = combineHash(innerHash, prevHash); - - return finalHash; -} - -/** - * Validates a light client block response from the RPC against the last known block and block - * producer set. - * - * @param lastKnownBlock The last light client block retrieved. This must be the block at the epoch before newBlock. - * @param currentBlockProducers The block producer set for the epoch of the last known block. - * @param newBlock The new block to validate. - */ -export function validateLightClientBlock( - lastKnownBlock: LightClientBlockLiteView, - currentBlockProducers: ValidatorStakeView[], - newBlock: NextLightClientBlockResponse -) { - // Numbers for each step references the spec: - // https://github.com/near/NEPs/blob/c7d72138117ed0ab86629a27d1f84e9cce80848f/specs/ChainSpec/LightClient.md - const newBlockHash = computeBlockHash(lastKnownBlock); - const nextBlockHashDecoded = combineHash( - bs58.decode(newBlock.next_block_inner_hash), - newBlockHash - ); - - // (1) - if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { - throw new Error( - "New block must be at least the height of the last known block" - ); - } - - // (2) - if ( - newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.epoch_id && - newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id - ) { - throw new Error( - "New block must either be in the same epoch or the next epoch from the last known block" - ); - } - - const blockProducers: ValidatorStakeView[] = currentBlockProducers; - if (newBlock.approvals_after_next.length < blockProducers.length) { - throw new Error( - "Number of approvals for next epoch must be at least the number of current block producers" - ); - } - - // (4) and (5) - const totalStake = new BN(0); - const approvedStake = new BN(0); - - for (let i = 0; i < blockProducers.length; i++) { - const approval = newBlock.approvals_after_next[i]; - const stake = blockProducers[i].stake; - - totalStake.iadd(new BN(stake)); - - if (approval === null) { - continue; - } - - approvedStake.iadd(new BN(stake)); - - const publicKey = PublicKey.fromString(blockProducers[i].public_key); - const signature = bs58.decode(approval.slice(ED_PREFIX.length)); - - const approvalEndorsement = serialize( - SCHEMA, - new BorshApprovalInner({ endorsement: nextBlockHashDecoded }) - ); - - const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); - const approvalHeightLe = approvalHeight.toArrayLike(Buffer, "le", 8); - const approvalMessage = new Uint8Array([ - ...approvalEndorsement, - ...approvalHeightLe, - ]); - - publicKey.verify(approvalMessage, signature); - } - - // (5) - const threshold = totalStake.mul(new BN(2)).div(new BN(3)); - if (approvedStake <= threshold) { - throw new Error("Approved stake does not exceed the 2/3 threshold"); - } - - // (6) - if ( - newBlock.inner_lite.epoch_id === lastKnownBlock.inner_lite.next_epoch_id - ) { - // (3) - if (!newBlock.next_bps) { - throw new Error( - "New block must include next block producers if a new epoch starts" - ); - } - - const bpsHash = hashBlockProducers(newBlock.next_bps); - - if (!bpsHash.equals(bs58.decode(newBlock.inner_lite.next_bp_hash))) { - throw new Error("Next block producers hash doesn't match"); - } - } -} - -function blockHeaderInnerLiteHash(data: BlockHeaderInnerLiteView): Buffer { - const hash = crypto.createHash("sha256"); - hash.update(new BN(data.height).toArrayLike(Buffer, "le", 8)); - hash.update(bs58.decode(data.epoch_id)); - hash.update(bs58.decode(data.next_epoch_id)); - hash.update(bs58.decode(data.prev_state_root)); - hash.update(bs58.decode(data.outcome_root)); - hash.update( - new BN(data.timestamp_nanosec || data.timestamp).toArrayLike( - Buffer, - "le", - 8 - ) - ); - hash.update(bs58.decode(data.next_bp_hash)); - hash.update(bs58.decode(data.block_merkle_root)); - return hash.digest(); -} - -function computeRoot(node: Buffer, proof: MerklePath): Buffer { - proof.forEach((step) => { - if (step.direction == "Left") { - node = combineHash(bs58.decode(step.hash), node); - } else { - node = combineHash(node, bs58.decode(step.hash)); - } - }); - return node; -} - -function computeMerkleRoot(proof: LightClientProof): Buffer { - const innerLiteHash = blockHeaderInnerLiteHash( - proof.block_header_lite.inner_lite - ); - - const headerHash = combineHash( - combineHash( - innerLiteHash, - bs58.decode(proof.block_header_lite.inner_rest_hash) - ), - bs58.decode(proof.block_header_lite.prev_block_hash) - ); - - return computeRoot(headerHash, proof.block_proof); -} - -function computeOutcomeRoot( - outcomeWithId: ExecutionOutcomeWithIdView, - outcomeRootProof: MerklePath -) { - // Generate outcome proof hash through borsh encoding - const receiptIds = outcomeWithId.outcome.receipt_ids.map((id) => - bs58.decode(id) - ); - - const borshStatus = ( - status: ExecutionStatus | ExecutionStatusBasic - ): BorshPartialExecutionStatus => { - if (status === ExecutionStatusBasic.Pending) { - throw new Error("Pending status is not supported"); - } else if (status === ExecutionStatusBasic.Unknown) { - return new BorshPartialExecutionStatus({ - unknown: new BorshEmpty({}), - }); - } else if ( - status === ExecutionStatusBasic.Failure || - "Failure" in status - ) { - return new BorshPartialExecutionStatus({ - failure: new BorshEmpty({}), - }); - } else if ( - status.SuccessValue !== undefined && - status.SuccessValue !== null - ) { - return new BorshPartialExecutionStatus({ - successValue: Buffer.from(status.SuccessValue, "base64"), - }); - } else if ( - status.SuccessReceiptId !== undefined && - status.SuccessReceiptId !== null - ) { - return new BorshPartialExecutionStatus({ - successReceiptId: bs58.decode(status.SuccessReceiptId), - }); - } else { - throw new Error(`Unexpected execution status ${status}`); - } - }; - const partialExecOutcome: BorshPartialExecutionOutcome = - new BorshPartialExecutionOutcome({ - receiptIds: receiptIds, - gasBurnt: new BN(outcomeWithId.outcome.gas_burnt), - // TODO update with types once https://github.com/near/near-api-js/pull/1113 comes in - tokensBurnt: new BN((outcomeWithId.outcome as any).tokens_burnt), - executorId: (outcomeWithId.outcome as any).executor_id, - status: borshStatus(outcomeWithId.outcome.status), - }); - const serializedPartialOutcome = serialize(SCHEMA, partialExecOutcome); - const partialOutcomeHash = crypto - .createHash("sha256") - .update(serializedPartialOutcome) - .digest(); - - const logsHashes: Uint8Array[] = outcomeWithId.outcome.logs.map((log) => { - return crypto.createHash("sha256").update(log).digest(); - }); - const outcomeHashes: Uint8Array[] = [ - bs58.decode(outcomeWithId.id), - partialOutcomeHash, - ...logsHashes, - ]; - - const outcomeSerialized = serialize( - SCHEMA, - new BorshCryptoHashes({ hashes: outcomeHashes }) - ); - const outcomeHash = crypto - .createHash("sha256") - .update(outcomeSerialized) - .digest(); - - // Generate shard outcome root - // computeRoot(sha256(borsh(outcome)), outcome.proof) - const outcomeShardRoot = computeRoot(outcomeHash, outcomeWithId.proof); - - // Generate block outcome root - // computeRoot(sha256(borsh(shardOutcomeRoot)), outcomeRootProof) - const shardRootBorsh = serialize( - SCHEMA, - new BorshCryptoHash({ hash: outcomeShardRoot }) - ); - const shardRootHash = crypto - .createHash("sha256") - .update(shardRootBorsh) - .digest(); - - return computeRoot(shardRootHash, outcomeRootProof); -} - -/** - * Validates the execution proof returned from the RPC. This will validate that the proof itself, - * and ensure that the block merkle root matches the one passed in. - * - * @param proof The proof given by the RPC. - * @param blockMerkleRoot The block merkle root for the block that was used to generate the proof. - */ -export function validateExecutionProof( - proof: LightClientProof, - blockMerkleRoot: Uint8Array -) { - // Execution outcome root verification - const computedOutcomeRoot = computeOutcomeRoot( - proof.outcome_proof, - proof.outcome_root_proof - ); - const proofRoot = proof.block_header_lite.inner_lite.outcome_root; - if (!computedOutcomeRoot.equals(bs58.decode(proofRoot))) { - throw new Error( - `Block outcome root (${bs58.encode( - computedOutcomeRoot - )}) doesn't match proof (${proofRoot})}` - ); - } - - // Block merkle root verification - const computedBlockRoot = computeMerkleRoot(proof); - if (!computedBlockRoot.equals(blockMerkleRoot)) { - throw new Error( - `Block merkle root (${bs58.encode( - computedBlockRoot - )}) doesn't match proof (${bs58.encode(blockMerkleRoot)})}` - ); - } -} +export { + computeBlockHash, + validateLightClientBlock, + validateExecutionProof, +} from "@near-js/light-client"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f95700c62..0ed610d2bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -188,6 +188,35 @@ importers: ts-jest: 26.5.6_vxa7amr3o4p5wmsiameezakoli typescript: 4.9.4 + packages/light-client: + specifiers: + '@near-js/crypto': workspace:* + '@near-js/providers': workspace:* + '@near-js/types': workspace:* + '@near-js/utils': workspace:* + '@types/node': ^18.11.18 + bn.js: 5.2.1 + borsh: ^0.7.0 + bs58: ^4.0.0 + jest: ^26.0.1 + js-sha256: ^0.9.0 + ts-jest: ^26.5.6 + typescript: ^4.9.4 + dependencies: + '@near-js/crypto': link:../crypto + '@near-js/providers': link:../providers + '@near-js/types': link:../types + '@near-js/utils': link:../utils + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + js-sha256: 0.9.0 + devDependencies: + '@types/node': 18.11.18 + jest: 26.6.3 + ts-jest: 26.5.6_vxa7amr3o4p5wmsiameezakoli + typescript: 4.9.4 + packages/near-api-js: specifiers: '@near-js/accounts': workspace:* @@ -195,6 +224,7 @@ importers: '@near-js/keystores': workspace:* '@near-js/keystores-browser': workspace:* '@near-js/keystores-node': workspace:* + '@near-js/light-client': workspace:* '@near-js/providers': workspace:* '@near-js/signers': workspace:* '@near-js/transactions': workspace:* @@ -234,6 +264,7 @@ importers: '@near-js/keystores': link:../keystores '@near-js/keystores-browser': link:../keystores-browser '@near-js/keystores-node': link:../keystores-node + '@near-js/light-client': link:../light-client '@near-js/providers': link:../providers '@near-js/signers': link:../signers '@near-js/transactions': link:../transactions @@ -7612,7 +7643,7 @@ packages: lodash: 4.17.21 make-error: 1.3.6 mkdirp: 1.0.4 - semver: 7.3.7 + semver: 7.3.8 yargs-parser: 20.2.9 dev: true @@ -7633,7 +7664,7 @@ packages: lodash: 4.17.21 make-error: 1.3.6 mkdirp: 1.0.4 - semver: 7.3.7 + semver: 7.3.8 typescript: 4.9.4 yargs-parser: 20.2.9 dev: true From 17f0cf3f7eb1bbc6b2654ea5331550e8bb59ed1f Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Tue, 25 Apr 2023 23:02:01 -0400 Subject: [PATCH 04/27] chore: changeset --- .changeset/four-toys-cough.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/four-toys-cough.md diff --git a/.changeset/four-toys-cough.md b/.changeset/four-toys-cough.md new file mode 100644 index 0000000000..6a389e5c82 --- /dev/null +++ b/.changeset/four-toys-cough.md @@ -0,0 +1,5 @@ +--- +"@near-js/light-client": patch +--- + +Implement light client block and proof verification From f47b4fa1f84d33f063bc28464ef52dc5a76ef148 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Wed, 26 Apr 2023 11:26:54 -0400 Subject: [PATCH 05/27] chore: add docs to validation steps --- packages/light-client/src/index.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/light-client/src/index.ts b/packages/light-client/src/index.ts index e2725ffe3a..d36c6c22f3 100644 --- a/packages/light-client/src/index.ts +++ b/packages/light-client/src/index.ts @@ -290,14 +290,15 @@ export function validateLightClientBlock( newBlockHash ); - // (1) + // (1) Verify that the block height is greater than the last known block. if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { throw new Error( "New block must be at least the height of the last known block" ); } - // (2) + // (2) Verify that the new block is in the same epoch or in the next epoch known to the last + // known block. if ( newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.epoch_id && newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id @@ -315,6 +316,8 @@ export function validateLightClientBlock( } // (4) and (5) + // (4) `approvals_after_next` contains valid signatures on the block producer approval messages. + // (5) The signatures present represent more than 2/3 of the total stake. const totalStake = new BN(0); const approvedStake = new BN(0); @@ -348,17 +351,19 @@ export function validateLightClientBlock( publicKey.verify(approvalMessage, signature); } - // (5) + // (5) Calculates the 2/3 threshold and checks that the approved stake accumulated above + // exceeds it. const threshold = totalStake.mul(new BN(2)).div(new BN(3)); if (approvedStake <= threshold) { throw new Error("Approved stake does not exceed the 2/3 threshold"); } - // (6) + // (6) Verify that if the new block is in the next epoch, the hash of the next block producers + // equals the `next_bp_hash` provided in that block. if ( newBlock.inner_lite.epoch_id === lastKnownBlock.inner_lite.next_epoch_id ) { - // (3) + // (3) If the block is in a new epoch, then `next_bps` must be present. if (!newBlock.next_bps) { throw new Error( "New block must include next block producers if a new epoch starts" From f8612ff22809fb8dacbedaa1c078a748c401e8bb Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Wed, 26 Apr 2023 11:29:43 -0400 Subject: [PATCH 06/27] refactor: switch function params to be an object rather than positional --- packages/light-client/src/index.ts | 29 ++++++++++++++++-------- packages/near-api-js/src/light-client.ts | 2 ++ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/packages/light-client/src/index.ts b/packages/light-client/src/index.ts index d36c6c22f3..bfe8d8da93 100644 --- a/packages/light-client/src/index.ts +++ b/packages/light-client/src/index.ts @@ -269,6 +269,12 @@ export function computeBlockHash(block: LightClientBlockLiteView): Buffer { return finalHash; } +export interface ValidateLightClientBlockParams { + lastKnownBlock: LightClientBlockLiteView; + currentBlockProducers: ValidatorStakeView[]; + newBlock: NextLightClientBlockResponse; +} + /** * Validates a light client block response from the RPC against the last known block and block * producer set. @@ -277,11 +283,11 @@ export function computeBlockHash(block: LightClientBlockLiteView): Buffer { * @param currentBlockProducers The block producer set for the epoch of the last known block. * @param newBlock The new block to validate. */ -export function validateLightClientBlock( - lastKnownBlock: LightClientBlockLiteView, - currentBlockProducers: ValidatorStakeView[], - newBlock: NextLightClientBlockResponse -) { +export function validateLightClientBlock({ + lastKnownBlock, + currentBlockProducers, + newBlock, +}: ValidateLightClientBlockParams) { // Numbers for each step references the spec: // https://github.com/near/NEPs/blob/c7d72138117ed0ab86629a27d1f84e9cce80848f/specs/ChainSpec/LightClient.md const newBlockHash = computeBlockHash(lastKnownBlock); @@ -510,6 +516,11 @@ function computeOutcomeRoot( return computeRoot(shardRootHash, outcomeRootProof); } +export interface ValidateExecutionProofParams { + proof: LightClientProof; + blockMerkleRoot: Uint8Array; +} + /** * Validates the execution proof returned from the RPC. This will validate that the proof itself, * and ensure that the block merkle root matches the one passed in. @@ -517,10 +528,10 @@ function computeOutcomeRoot( * @param proof The proof given by the RPC. * @param blockMerkleRoot The block merkle root for the block that was used to generate the proof. */ -export function validateExecutionProof( - proof: LightClientProof, - blockMerkleRoot: Uint8Array -) { +export function validateExecutionProof({ + proof, + blockMerkleRoot, +}: ValidateExecutionProofParams) { // Execution outcome root verification const computedOutcomeRoot = computeOutcomeRoot( proof.outcome_proof, diff --git a/packages/near-api-js/src/light-client.ts b/packages/near-api-js/src/light-client.ts index 87d6e77c84..57d020a693 100644 --- a/packages/near-api-js/src/light-client.ts +++ b/packages/near-api-js/src/light-client.ts @@ -1,5 +1,7 @@ export { computeBlockHash, + ValidateLightClientBlockParams, validateLightClientBlock, + ValidateExecutionProofParams, validateExecutionProof, } from "@near-js/light-client"; From b280d8ef6eacf4cf59f8dcdc5e606df364070fd3 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Wed, 26 Apr 2023 13:01:37 -0400 Subject: [PATCH 07/27] chore: revert naj test changes --- packages/near-api-js/test/providers.test.js | 57 ++++----------------- 1 file changed, 10 insertions(+), 47 deletions(-) diff --git a/packages/near-api-js/test/providers.test.js b/packages/near-api-js/test/providers.test.js index f026979140..1ec4c3ddc9 100644 --- a/packages/near-api-js/test/providers.test.js +++ b/packages/near-api-js/test/providers.test.js @@ -1,8 +1,7 @@ const nearApi = require('../src/index'); -const testUtils = require('./test-utils'); +const testUtils = require('./test-utils'); const BN = require('bn.js'); const base58 = require('bs58'); -const { lightClient } = require('../src/index'); jest.setTimeout(30000); @@ -62,7 +61,7 @@ test('json rpc fetch validators info', withProvider(async (provider) => { expect(validators.current_validators.length).toBeGreaterThanOrEqual(1); })); -test('txStatus with string hash and buffer hash', withProvider(async (provider) => { +test('txStatus with string hash and buffer hash', withProvider(async(provider) => { const near = await testUtils.setUpTestConnection(); const sender = await testUtils.createAccount(near); const receiver = await testUtils.createAccount(near); @@ -74,7 +73,7 @@ test('txStatus with string hash and buffer hash', withProvider(async (provider) expect(responseWithUint8Array).toMatchObject(outcome); })); -test('txStatusReciept with string hash and buffer hash', withProvider(async (provider) => { +test('txStatusReciept with string hash and buffer hash', withProvider(async(provider) => { const near = await testUtils.setUpTestConnection(); const sender = await testUtils.createAccount(near); const receiver = await testUtils.createAccount(near); @@ -87,7 +86,7 @@ test('txStatusReciept with string hash and buffer hash', withProvider(async (pro expect(responseWithUint8Array).toMatchObject(reciepts); })); -test('json rpc query with block_id', withProvider(async (provider) => { +test('json rpc query with block_id', withProvider(async(provider) => { const stat = await provider.status(); let block_id = stat.sync_info.latest_block_height - 1; @@ -122,7 +121,7 @@ test('json rpc query view_state', withProvider(async (provider) => { await contract.setValue({ args: { value: 'hello' } }); - return testUtils.waitFor(async () => { + return testUtils.waitFor(async() => { const response = await provider.query({ request_type: 'view_state', finality: 'final', @@ -163,7 +162,7 @@ test('json rpc query view_code', withProvider(async (provider) => { const account = await testUtils.createAccount(near); const contract = await testUtils.deployContract(account, testUtils.generateUniqueString('test')); - return testUtils.waitFor(async () => { + return testUtils.waitFor(async() => { const response = await provider.query({ request_type: 'view_code', finality: 'final', @@ -186,7 +185,7 @@ test('json rpc query call_function', withProvider(async (provider) => { await contract.setValue({ args: { value: 'hello' } }); - return testUtils.waitFor(async () => { + return testUtils.waitFor(async() => { const response = await provider.query({ request_type: 'call_function', finality: 'final', @@ -211,7 +210,7 @@ test('json rpc query call_function', withProvider(async (provider) => { }); })); -test('final tx result', async () => { +test('final tx result', async() => { const result = { status: { SuccessValue: 'e30=' }, transaction: { id: '11111', outcome: { status: { SuccessReceiptId: '11112' }, logs: [], receipt_ids: ['11112'], gas_burnt: 1 } }, @@ -223,7 +222,7 @@ test('final tx result', async () => { expect(nearApi.providers.getTransactionLastResult(result)).toEqual({}); }); -test('final tx result with null', async () => { +test('final tx result with null', async() => { const result = { status: 'Failure', transaction: { id: '11111', outcome: { status: { SuccessReceiptId: '11112' }, logs: [], receipt_ids: ['11112'], gas_burnt: 1 } }, @@ -235,7 +234,7 @@ test('final tx result with null', async () => { expect(nearApi.providers.getTransactionLastResult(result)).toEqual(null); }); -test('json rpc light client proof', async () => { +test('json rpc light client proof', async() => { const near = await testUtils.setUpTestConnection(); const workingAccount = await testUtils.createAccount(near); const executionOutcome = await workingAccount.sendMoney(workingAccount.accountId, new BN(10000)); @@ -261,7 +260,6 @@ test('json rpc light client proof', async () => { const block = await provider.block({ blockId: finalizedStatus.sync_info.latest_block_hash }); const lightClientHead = block.header.last_final_block; - const finalBlock = await provider.block({ blockId: lightClientHead }); let lightClientRequest = { type: 'transaction', light_client_head: lightClientHead, @@ -278,9 +276,6 @@ test('json rpc light client proof', async () => { expect(lightClientProof.outcome_root_proof).toEqual([]); expect(lightClientProof.block_proof.length).toBeGreaterThan(0); - // Validate the proof against the finalized block - lightClient.validateExecutionProof(lightClientProof, base58.decode(finalBlock.header.block_merkle_root)); - // pass nonexistent hash for light client head will fail lightClientRequest = { type: 'transaction', @@ -301,38 +296,6 @@ test('json rpc light client proof', async () => { await expect(provider.lightClientProof(lightClientRequest)).rejects.toThrow(/.+ block .+ is ahead of head block .+/); }); -test('json rpc get next light client block with validation', withProvider(async (provider) => { - const stat = await provider.status(); - - // Get block in at least the last epoch (epoch duration 43,200 blocks on mainnet and testnet) - const height = stat.sync_info.latest_block_height; - const protocolConfig = await provider.experimental_protocolConfig({ finality: 'final' }); - - // NOTE: This will underflow if the network used has not produced an epoch yet. If a new network - // config is required, can retrieve a block a few height behind (1+buffer for indexing). If run - // on a fresh network, would need to wait for blocks to be produced and indexed. - const firstBlockHeight = height - protocolConfig.epoch_length * 2; - const firstBlock = await provider.block({ blockId: firstBlockHeight }); - const prevBlock = await provider.nextLightClientBlock({ last_block_hash: firstBlock.header.hash }); - const nextBlock = await provider.nextLightClientBlock({ last_block_hash: base58.encode(lightClient.computeBlockHash(prevBlock)) }); - expect('inner_lite' in nextBlock).toBeTruthy(); - // Verify that requesting from previous epoch includes the set of new block producers. - expect('next_bps' in nextBlock).toBeTruthy(); - - // Greater than or equal check because a block could have been produced during the test. - // There is a buffer of 10 given to the height, because this seems to be lagging behind the - // latest finalized block by a few seconds. This delay might just be due to slow or delayed - // indexing in a node's db. If this fails in the future, we can increase the buffer. - expect(nextBlock.inner_lite.height).toBeGreaterThanOrEqual(height - 10); - expect(nextBlock.inner_lite.height).toBeGreaterThan(prevBlock.inner_lite.height); - expect('prev_block_hash' in nextBlock).toBeTruthy(); - expect('next_block_inner_hash' in nextBlock).toBeTruthy(); - expect('inner_rest_hash' in nextBlock).toBeTruthy(); - expect('approvals_after_next' in nextBlock).toBeTruthy(); - - lightClient.validateLightClientBlock(prevBlock, prevBlock.next_bps, nextBlock); -})); - test('json rpc fetch protocol config', withProvider(async (provider) => { const status = await provider.status(); const blockHeight = status.sync_info.latest_block_height; From 4e81faeb53b67902bb99435cae780d3eb5ac22c9 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Wed, 26 Apr 2023 13:02:20 -0400 Subject: [PATCH 08/27] test: adds back light client block verification test --- packages/light-client/jest.config.js | 5 +++ packages/light-client/package.json | 7 ++- packages/light-client/test/config.js | 44 +++++++++++++++++++ .../test/light-client-block.test.js | 43 ++++++++++++++++++ 4 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 packages/light-client/jest.config.js create mode 100644 packages/light-client/test/config.js create mode 100644 packages/light-client/test/light-client-block.test.js diff --git a/packages/light-client/jest.config.js b/packages/light-client/jest.config.js new file mode 100644 index 0000000000..749b7fcb2d --- /dev/null +++ b/packages/light-client/jest.config.js @@ -0,0 +1,5 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + collectCoverage: true +}; diff --git a/packages/light-client/package.json b/packages/light-client/package.json index 0769e912d5..1f5d1ae70f 100644 --- a/packages/light-client/package.json +++ b/packages/light-client/package.json @@ -6,8 +6,11 @@ "scripts": { "build": "pnpm compile", "compile": "tsc -p tsconfig.json", - "lint": "eslint -c ../../.eslintrc.ts.yml src/**/*.ts", - "lint:fix": "eslint **/*.ts" + "lint:js": "eslint -c ../../.eslintrc.js.yml test/**/*.js --no-eslintrc", + "lint:js:fix": "eslint -c ../../.eslintrc.js.yml test/**/*.js --no-eslintrc --fix", + "lint:ts": "eslint -c ../../.eslintrc.ts.yml src/**/*.ts --no-eslintrc", + "lint:ts:fix": "eslint -c ../../.eslintrc.ts.yml src/**/*.ts --no-eslintrc --fix", + "test": "jest test" }, "keywords": [], "author": "", diff --git a/packages/light-client/test/config.js b/packages/light-client/test/config.js new file mode 100644 index 0000000000..1734592c63 --- /dev/null +++ b/packages/light-client/test/config.js @@ -0,0 +1,44 @@ +module.exports = function getConfig(env) { + switch (env) { + case 'production': + case 'mainnet': + return { + networkId: 'mainnet', + nodeUrl: 'https://rpc.mainnet.near.org', + walletUrl: 'https://wallet.near.org', + helperUrl: 'https://helper.mainnet.near.org', + }; + case 'development': + case 'testnet': + return { + networkId: 'default', + nodeUrl: 'https://rpc.testnet.near.org', + walletUrl: 'https://wallet.testnet.near.org', + helperUrl: 'https://helper.testnet.near.org', + masterAccount: 'test.near', + }; + case 'betanet': + return { + networkId: 'betanet', + nodeUrl: 'https://rpc.betanet.near.org', + walletUrl: 'https://wallet.betanet.near.org', + helperUrl: 'https://helper.betanet.near.org', + }; + case 'local': + return { + networkId: 'local', + nodeUrl: 'http://localhost:3030', + keyPath: `${process.env.HOME}/.near/validator_key.json`, + walletUrl: 'http://localhost:4000/wallet', + }; + case 'test': + case 'ci': + return { + networkId: 'shared-test', + nodeUrl: 'https://rpc.ci-testnet.near.org', + masterAccount: 'test.near', + }; + default: + throw Error(`Unconfigured environment '${env}'. Can be configured in src/config.js.`); + } +}; diff --git a/packages/light-client/test/light-client-block.test.js b/packages/light-client/test/light-client-block.test.js new file mode 100644 index 0000000000..ffc23b9581 --- /dev/null +++ b/packages/light-client/test/light-client-block.test.js @@ -0,0 +1,43 @@ +const { JsonRpcProvider } = require('@near-js/providers'); +const { validateLightClientBlock, computeBlockHash } = require("../src/index"); +const base58 = require('bs58'); + +jest.setTimeout(20000); + +const withProvider = (fn) => { + const config = Object.assign(require('./config')(process.env.NODE_ENV || 'test')); + const provider = new JsonRpcProvider(config.nodeUrl); + return () => fn(provider); +}; + +test('json rpc get next light client block with validation', withProvider(async (provider) => { + const stat = await provider.status(); + + // Get block in at least the last epoch (epoch duration 43,200 blocks on mainnet and testnet) + const height = stat.sync_info.latest_block_height; + const protocolConfig = await provider.experimental_protocolConfig({ finality: 'final' }); + + // NOTE: This will underflow if the network used has not produced an epoch yet. If a new network + // config is required, can retrieve a block a few height behind (1+buffer for indexing). If run + // on a fresh network, would need to wait for blocks to be produced and indexed. + const firstBlockHeight = height - protocolConfig.epoch_length * 2; + const firstBlock = await provider.block({ blockId: firstBlockHeight }); + const prevBlock = await provider.nextLightClientBlock({ last_block_hash: firstBlock.header.hash }); + const nextBlock = await provider.nextLightClientBlock({ last_block_hash: base58.encode(computeBlockHash(prevBlock)) }); + expect('inner_lite' in nextBlock).toBeTruthy(); + // Verify that requesting from previous epoch includes the set of new block producers. + expect('next_bps' in nextBlock).toBeTruthy(); + + // Greater than or equal check because a block could have been produced during the test. + // There is a buffer of 10 given to the height, because this seems to be lagging behind the + // latest finalized block by a few seconds. This delay might just be due to slow or delayed + // indexing in a node's db. If this fails in the future, we can increase the buffer. + expect(nextBlock.inner_lite.height).toBeGreaterThanOrEqual(height - 10); + expect(nextBlock.inner_lite.height).toBeGreaterThan(prevBlock.inner_lite.height); + expect('prev_block_hash' in nextBlock).toBeTruthy(); + expect('next_block_inner_hash' in nextBlock).toBeTruthy(); + expect('inner_rest_hash' in nextBlock).toBeTruthy(); + expect('approvals_after_next' in nextBlock).toBeTruthy(); + + validateLightClientBlock({ lastKnownBlock: prevBlock, currentBlockProducers: prevBlock.next_bps, newBlock: nextBlock }); +})); \ No newline at end of file From 09f957fd332fed08542b8ddcd8d42b47e9979fd9 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Wed, 26 Apr 2023 13:03:01 -0400 Subject: [PATCH 09/27] chore: lint --- packages/light-client/src/index.ts | 130 +++++++++--------- .../test/light-client-block.test.js | 2 +- 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/packages/light-client/src/index.ts b/packages/light-client/src/index.ts index bfe8d8da93..1a44a0cf99 100644 --- a/packages/light-client/src/index.ts +++ b/packages/light-client/src/index.ts @@ -1,5 +1,5 @@ -import bs58 from "bs58"; -import { sha256 } from "js-sha256"; +import bs58 from 'bs58'; +import { sha256 } from 'js-sha256'; import { BlockHeaderInnerLiteView, ExecutionOutcomeWithIdView, @@ -10,11 +10,11 @@ import { MerklePath, NextLightClientBlockResponse, ValidatorStakeView, -} from "@near-js/types"; -import { Assignable } from "@near-js/types"; -import { PublicKey } from "@near-js/crypto"; -import BN from "bn.js"; -import { serialize } from "borsh"; +} from '@near-js/types'; +import { Assignable } from '@near-js/types'; +import { PublicKey } from '@near-js/crypto'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; // TODO this abstract class exists in NAJ and seems unused. It is also copied in the transactions // TODO ..package. This should probably exist in utils and shared. @@ -23,7 +23,7 @@ abstract class Enum { constructor(properties: any) { if (Object.keys(properties).length !== 1) { - throw new Error("Enum can only take single value"); + throw new Error('Enum can only take single value'); } Object.keys(properties).map((key: string) => { (this as any)[key] = properties[key]; @@ -34,7 +34,7 @@ abstract class Enum { // TODO: refactor this into separate files -const ED_PREFIX = "ed25519:"; +const ED_PREFIX = 'ed25519:'; class BorshBlockHeaderInnerLite extends Assignable { height: BN; @@ -96,100 +96,100 @@ const SCHEMA = new Map([ [ BorshBlockHeaderInnerLite, { - kind: "struct", + kind: 'struct', fields: [ - ["height", "u64"], - ["epoch_id", [32]], - ["next_epoch_id", [32]], - ["prev_state_root", [32]], - ["outcome_root", [32]], - ["timestamp", "u64"], - ["next_bp_hash", [32]], - ["block_merkle_root", [32]], + ['height', 'u64'], + ['epoch_id', [32]], + ['next_epoch_id', [32]], + ['prev_state_root', [32]], + ['outcome_root', [32]], + ['timestamp', 'u64'], + ['next_bp_hash', [32]], + ['block_merkle_root', [32]], ], }, ], [ BorshApprovalInner, { - kind: "enum", - field: "enum", + kind: 'enum', + field: 'enum', values: [ - ["endorsement", [32]], - ["skip", "u64"], + ['endorsement', [32]], + ['skip', 'u64'], ], }, ], [ BorshValidatorStakeViewV1, { - kind: "struct", + kind: 'struct', fields: [ - ["account_id", "string"], - ["public_key", PublicKey], - ["stake", "u128"], + ['account_id', 'string'], + ['public_key', PublicKey], + ['stake', 'u128'], ], }, ], [ BorshValidatorStakeView, { - kind: "enum", - field: "enum", - values: [["v1", BorshValidatorStakeViewV1]], + kind: 'enum', + field: 'enum', + values: [['v1', BorshValidatorStakeViewV1]], }, ], [ BorshValidatorStakeViewWrapper, { - kind: "struct", - fields: [["bps", [BorshValidatorStakeView]]], + kind: 'struct', + fields: [['bps', [BorshValidatorStakeView]]], }, ], [ BorshEmpty, { - kind: "struct", + kind: 'struct', fields: [], }, ], [ BorshCryptoHash, { - kind: "struct", - fields: [["hash", [32]]], + kind: 'struct', + fields: [['hash', [32]]], }, ], [ BorshCryptoHashes, { - kind: "struct", - fields: [["hashes", [[32]]]], + kind: 'struct', + fields: [['hashes', [[32]]]], }, ], [ BorshPartialExecutionStatus, { - kind: "enum", - field: "enum", + kind: 'enum', + field: 'enum', values: [ - ["unknown", BorshEmpty], - ["failure", BorshEmpty], - ["successValue", ["u8"]], - ["successReceiptId", [32]], + ['unknown', BorshEmpty], + ['failure', BorshEmpty], + ['successValue', ['u8']], + ['successReceiptId', [32]], ], }, ], [ BorshPartialExecutionOutcome, { - kind: "struct", + kind: 'struct', fields: [ - ["receiptIds", [[32]]], - ["gasBurnt", "u64"], - ["tokensBurnt", "u128"], - ["executorId", "string"], - ["status", BorshPartialExecutionStatus], + ['receiptIds', [[32]]], + ['gasBurnt', 'u64'], + ['tokensBurnt', 'u128'], + ['executorId', 'string'], + ['status', BorshPartialExecutionStatus], ], }, ], @@ -197,10 +197,10 @@ const SCHEMA = new Map([ [ PublicKey, { - kind: "struct", + kind: 'struct', fields: [ - ["keyType", "u8"], - ["data", [32]], + ['keyType', 'u8'], + ['data', [32]], ], }, ], @@ -214,7 +214,7 @@ function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { ); if (version !== 1) { throw new Error( - "Only version 1 of the validator stake struct is supported" + 'Only version 1 of the validator stake struct is supported' ); } } @@ -299,7 +299,7 @@ export function validateLightClientBlock({ // (1) Verify that the block height is greater than the last known block. if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { throw new Error( - "New block must be at least the height of the last known block" + 'New block must be at least the height of the last known block' ); } @@ -310,14 +310,14 @@ export function validateLightClientBlock({ newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id ) { throw new Error( - "New block must either be in the same epoch or the next epoch from the last known block" + 'New block must either be in the same epoch or the next epoch from the last known block' ); } const blockProducers: ValidatorStakeView[] = currentBlockProducers; if (newBlock.approvals_after_next.length < blockProducers.length) { throw new Error( - "Number of approvals for next epoch must be at least the number of current block producers" + 'Number of approvals for next epoch must be at least the number of current block producers' ); } @@ -348,7 +348,7 @@ export function validateLightClientBlock({ ); const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); - const approvalHeightLe = approvalHeight.toArrayLike(Buffer, "le", 8); + const approvalHeightLe = approvalHeight.toArrayLike(Buffer, 'le', 8); const approvalMessage = new Uint8Array([ ...approvalEndorsement, ...approvalHeightLe, @@ -361,7 +361,7 @@ export function validateLightClientBlock({ // exceeds it. const threshold = totalStake.mul(new BN(2)).div(new BN(3)); if (approvedStake <= threshold) { - throw new Error("Approved stake does not exceed the 2/3 threshold"); + throw new Error('Approved stake does not exceed the 2/3 threshold'); } // (6) Verify that if the new block is in the next epoch, the hash of the next block producers @@ -372,21 +372,21 @@ export function validateLightClientBlock({ // (3) If the block is in a new epoch, then `next_bps` must be present. if (!newBlock.next_bps) { throw new Error( - "New block must include next block producers if a new epoch starts" + 'New block must include next block producers if a new epoch starts' ); } const bpsHash = hashBlockProducers(newBlock.next_bps); if (!bpsHash.equals(bs58.decode(newBlock.inner_lite.next_bp_hash))) { - throw new Error("Next block producers hash doesn't match"); + throw new Error('Next block producers hash doesn\'t match'); } } } function blockHeaderInnerLiteHash(data: BlockHeaderInnerLiteView): Buffer { const hash = sha256.create(); - hash.update(new BN(data.height).toArrayLike(Buffer, "le", 8)); + hash.update(new BN(data.height).toArrayLike(Buffer, 'le', 8)); hash.update(bs58.decode(data.epoch_id)); hash.update(bs58.decode(data.next_epoch_id)); hash.update(bs58.decode(data.prev_state_root)); @@ -394,7 +394,7 @@ function blockHeaderInnerLiteHash(data: BlockHeaderInnerLiteView): Buffer { hash.update( new BN(data.timestamp_nanosec || data.timestamp).toArrayLike( Buffer, - "le", + 'le', 8 ) ); @@ -405,7 +405,7 @@ function blockHeaderInnerLiteHash(data: BlockHeaderInnerLiteView): Buffer { function computeRoot(node: Buffer, proof: MerklePath): Buffer { proof.forEach((step) => { - if (step.direction == "Left") { + if (step.direction == 'Left') { node = combineHash(bs58.decode(step.hash), node); } else { node = combineHash(node, bs58.decode(step.hash)); @@ -443,14 +443,14 @@ function computeOutcomeRoot( status: ExecutionStatus | ExecutionStatusBasic ): BorshPartialExecutionStatus => { if (status === ExecutionStatusBasic.Pending) { - throw new Error("Pending status is not supported"); + throw new Error('Pending status is not supported'); } else if (status === ExecutionStatusBasic.Unknown) { return new BorshPartialExecutionStatus({ unknown: new BorshEmpty({}), }); } else if ( status === ExecutionStatusBasic.Failure || - "Failure" in status + 'Failure' in status ) { return new BorshPartialExecutionStatus({ failure: new BorshEmpty({}), @@ -460,7 +460,7 @@ function computeOutcomeRoot( status.SuccessValue !== null ) { return new BorshPartialExecutionStatus({ - successValue: Buffer.from(status.SuccessValue, "base64"), + successValue: Buffer.from(status.SuccessValue, 'base64'), }); } else if ( status.SuccessReceiptId !== undefined && diff --git a/packages/light-client/test/light-client-block.test.js b/packages/light-client/test/light-client-block.test.js index ffc23b9581..0b1f9a978b 100644 --- a/packages/light-client/test/light-client-block.test.js +++ b/packages/light-client/test/light-client-block.test.js @@ -1,5 +1,5 @@ const { JsonRpcProvider } = require('@near-js/providers'); -const { validateLightClientBlock, computeBlockHash } = require("../src/index"); +const { validateLightClientBlock, computeBlockHash } = require('../src/index'); const base58 = require('bs58'); jest.setTimeout(20000); From 8ad77aef6087b7416809bcf6dd734322a0573f82 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Wed, 26 Apr 2023 13:06:13 -0400 Subject: [PATCH 10/27] test: add back execution proof verification in NAJ test --- packages/near-api-js/test/providers.test.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/near-api-js/test/providers.test.js b/packages/near-api-js/test/providers.test.js index 1ec4c3ddc9..1917b112fd 100644 --- a/packages/near-api-js/test/providers.test.js +++ b/packages/near-api-js/test/providers.test.js @@ -260,6 +260,7 @@ test('json rpc light client proof', async() => { const block = await provider.block({ blockId: finalizedStatus.sync_info.latest_block_hash }); const lightClientHead = block.header.last_final_block; + const finalBlock = await provider.block({ blockId: lightClientHead }); let lightClientRequest = { type: 'transaction', light_client_head: lightClientHead, @@ -276,6 +277,9 @@ test('json rpc light client proof', async() => { expect(lightClientProof.outcome_root_proof).toEqual([]); expect(lightClientProof.block_proof.length).toBeGreaterThan(0); + // Validate the proof against the finalized block + nearApi.lightClient.validateExecutionProof(lightClientProof, base58.decode(finalBlock.header.block_merkle_root)); + // pass nonexistent hash for light client head will fail lightClientRequest = { type: 'transaction', From 153dfa74d74a1d4ac4b964cf22602d0d4d40216e Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Wed, 26 Apr 2023 15:37:16 -0400 Subject: [PATCH 11/27] test: add execution proof test vectors --- .../light-client/test/execution-proof.test.js | 16 ++++ packages/light-client/test/proofs/proof2.json | 78 +++++++++++++++++++ packages/light-client/test/proofs/proof3.json | 73 +++++++++++++++++ packages/light-client/test/proofs/proof4.json | 46 +++++++++++ packages/light-client/test/proofs/proof5.json | 69 ++++++++++++++++ packages/light-client/test/proofs/proof6.json | 69 ++++++++++++++++ packages/light-client/test/proofs/proof7.json | 58 ++++++++++++++ 7 files changed, 409 insertions(+) create mode 100644 packages/light-client/test/execution-proof.test.js create mode 100644 packages/light-client/test/proofs/proof2.json create mode 100644 packages/light-client/test/proofs/proof3.json create mode 100644 packages/light-client/test/proofs/proof4.json create mode 100644 packages/light-client/test/proofs/proof5.json create mode 100644 packages/light-client/test/proofs/proof6.json create mode 100644 packages/light-client/test/proofs/proof7.json diff --git a/packages/light-client/test/execution-proof.test.js b/packages/light-client/test/execution-proof.test.js new file mode 100644 index 0000000000..b4a3cbfc21 --- /dev/null +++ b/packages/light-client/test/execution-proof.test.js @@ -0,0 +1,16 @@ +const { validateExecutionProof } = require('../src/index'); + +async function testProof(merkleRoot, proofPath) { + let proof = require(proofPath); + const root = Uint8Array.from(Buffer.from(merkleRoot.substring(2), 'hex')); + validateExecutionProof({ proof, blockMerkleRoot: root }); +} + +test('Proof test vectors', async () => { + await testProof('0x22f00dd154366d758cd3e4fe81c1caed8e0db6227fe4b2b52a8e5a468aa0a723', './proofs/proof2.json'); + await testProof('0x0d0776820a9a81481a559c36fd5d69c33718fb7d7fd3be7564a446e043e2cb35', './proofs/proof3.json'); + await testProof('0x1f7129496c461c058fb3daf258d89bf7dacb4efad5742351f66098a00bb6fa53', './proofs/proof4.json'); + await testProof('0xa9cd8eb4dd92ba5f2fef47d68e1d73ac8c57047959f6f8a2dcc664419e74e4b8', './proofs/proof5.json'); + await testProof('0xcc3954a51b7c1a86861df8809f79c2bf839741e3e380e28360b8b3970a5d90bd', './proofs/proof6.json'); + await testProof('0x8298c9cd1048df03e9ccefac4b022636a30a2f7e6a8c33cc4104901b92e08dfd', './proofs/proof7.json'); +}); diff --git a/packages/light-client/test/proofs/proof2.json b/packages/light-client/test/proofs/proof2.json new file mode 100644 index 0000000000..cf65e5a033 --- /dev/null +++ b/packages/light-client/test/proofs/proof2.json @@ -0,0 +1,78 @@ +{ + "outcome_proof":{ + "proof":[ + + ], + "block_hash":"821YJSshC7kFcUQfst93ABh2KN3FSWG2jdouNYk9mtUW", + "id":"CLWtv8qVCoJpTMTLYVkJmxL9YgNFtfViAZ1Tb61DnhQB", + "outcome":{ + "logs":[ + + ], + "receipt_ids":[ + "8Si6FJg2KzUevnHb71DJtZgeEz8Yr2rDzpNHPmZvLEFQ" + ], + "gas_burnt":3633100297168, + "tokens_burnt":"18165501485840000", + "executor_id":"nearfuntoken", + "status":{ + "SuccessValue":"WyIxIixbMTk2LDE5OSw3MywxMjcsMTkwLDI2LDEzNiwxMDQsNjUsMTYxLDE0OSwxNjUsMjE0LDM0LDIwNSw5Niw1LDYwLDE5LDExOF1d" + } + } + }, + "outcome_root_proof":[ + + ], + "block_header_lite":{ + "prev_block_hash":"HX2u2p4XPLPMiBydcF9riFKoh6vqwsamzms25fyncQ1r", + "inner_rest_hash":"97zbp3ivM3bgN78ia1gGquqKtGyGtJWPr6z2uhav1EzQ", + "inner_lite":{ + "height":478, + "epoch_id":"EcHTYYC85Du4Ec6Ge9wHSq2YovoYHjbrKbWjDXxtQv2V", + "next_epoch_id":"ABcfZDpvJb2z14Kg5Xwt9ucwQYdtXguQhBZrRhQnX94A", + "prev_state_root":"4sLNs8wnMTciYDiz2cJFYHGCgE8UWSPiT2ejp4Pidtzt", + "outcome_root":"6erBQFcckMkm9r5UnyfzpDuhhDYnKeomcK94oPjRWZ7b", + "timestamp":"1593378592795392000", + "next_bp_hash":"FuHdRu2F7F1u79Xc1RnGkF24haAAEJRywbJznVuZpPVu", + "block_merkle_root":"EjsmRcH8Xnk6nCRAGz6Mqf4zBQvALrVDuonvSi8BTmH5" + } + }, + "block_proof":[ + { + "hash":"HX2u2p4XPLPMiBydcF9riFKoh6vqwsamzms25fyncQ1r", + "direction":"Left" + }, + { + "hash":"811Zje7UUQhRoYYsZCj4t71reETSBgQ7o6GYqCK4PSb6", + "direction":"Right" + }, + { + "hash":"CQq9wqQ5bdAKjFM1AjAz8UFGmSZfQp5wxdLBTUsKUPkg", + "direction":"Left" + }, + { + "hash":"5JHR5e66KRasgGAveg9eK3iLvDuuTZ3A85jKtCndSPJV", + "direction":"Left" + }, + { + "hash":"G2Y2Dw5zie84v4UF7XLvcXMGnUMCjzsh9YChYvPh1gn", + "direction":"Left" + }, + { + "hash":"7An3RU7j9paDzTpHtrXK8vy1cW41mYChrfVoGw88CKc7", + "direction":"Right" + }, + { + "hash":"4ahKTDTi7XHxP1huLnaa48hJxCzZLRQSgiACv8zjHAUv", + "direction":"Left" + }, + { + "hash":"QNpRL2pUBjQ95QRcFdeDUMF2hAxRtHG2ZuihWB5NMCJ", + "direction":"Left" + }, + { + "hash":"3EcETmaAgoj8ZGQQs66MMUMcLnj459iaMYEssafrdQRG", + "direction":"Left" + } + ] +} \ No newline at end of file diff --git a/packages/light-client/test/proofs/proof3.json b/packages/light-client/test/proofs/proof3.json new file mode 100644 index 0000000000..7a80a8fc66 --- /dev/null +++ b/packages/light-client/test/proofs/proof3.json @@ -0,0 +1,73 @@ +{ + "outcome_proof":{ + "proof":[ + { + "hash":"5yzGvaYdHfq4kZeoV6vnygvQd4Z683LXRkAXH1KDeG3U", + "direction":"Right" + } + ], + "block_hash":"BUCRNeND73mVaFbwmLg7zduM95LHtN2vzK2HHvJNWEGM", + "id":"64J1o71ngkx2urRxj5UYa64v9fWT7yf1HxGHUYgthoSC", + "outcome":{ + "logs":[ + + ], + "receipt_ids":[ + "DzFs47QNEdibR1MTjAhUmigeJL5wo9sNdG8zgpGVN9B3" + ], + "gas_burnt":3633100297168, + "tokens_burnt":"18165501485840000", + "executor_id":"nearfuntoken", + "status":{ + "SuccessValue":"WyIxIixbMTk2LDE5OSw3MywxMjcsMTkwLDI2LDEzNiwxMDQsNjUsMTYxLDE0OSwxNjUsMjE0LDM0LDIwNSw5Niw1LDYwLDE5LDExOF1d" + } + } + }, + "outcome_root_proof":[ + + ], + "block_header_lite":{ + "prev_block_hash":"65WBPSVpqtfSrLypahveYzxs1C52AGexKVjqBrMoxWRn", + "inner_rest_hash":"22fymMDcV7YdKZHwvxH8kxbZVFdHh3MEmNXT4t9eWMFf", + "inner_lite":{ + "height":1699, + "epoch_id":"8zEcgopfVM1xbkd5jfYu9Mpyd7GF76RPBXKshheqXBMX", + "next_epoch_id":"4VGtNxYqDFfgKSQ7b6VjYAFSzN17sKNm8pFhHnL2H8vJ", + "prev_state_root":"BWChofcus3fmDTj5zJWZxRbdaUiBWLUGWDpyaRXfQjui", + "outcome_root":"EPVTqyz9tKwcCXcyENZNZaBzcrN5mR1PrH2vHEZCJJkr", + "timestamp":"1593379656945908000", + "next_bp_hash":"BKD5rntrpPTgf9FtfVgdz9cDkFJCrwag77pGDAJtynu1", + "block_merkle_root":"FvvEfD3e7r3YkVKNMWHqB1QwvmnXg53Y4aVcW2fhnCkZ" + } + }, + "block_proof":[ + { + "hash":"J2CZD4NxihHFKG52U2yKuxgk6DnYcgwQhXfEy9j9HAeM", + "direction":"Right" + }, + { + "hash":"3eHf57igSgyiFLHFauyMPiR6hEps7WZZGPVDunskYE9n", + "direction":"Left" + }, + { + "hash":"Ad9aFkPwy6bavwEwrH8oRz9WAbofJMqp7XGrGyuHLmnj", + "direction":"Right" + }, + { + "hash":"Ekn1Ze5UoYJsnxnJQeXZdvgtaVZG8mPubsftTEBSKr72", + "direction":"Left" + }, + { + "hash":"9JRBfCoM37tGoeYzW5r31xhjajQouXhXFLozSCLShXQZ", + "direction":"Left" + }, + { + "hash":"5PrDip98cCtboHfLXG53waLHHVLpmMA4jEwAH22dqECa", + "direction":"Left" + }, + { + "hash":"8U29oeQgdyQ2dRfuQ6vnZMyxYuX4UbCoT4bwL44XC93U", + "direction":"Left" + } + ] +} \ No newline at end of file diff --git a/packages/light-client/test/proofs/proof4.json b/packages/light-client/test/proofs/proof4.json new file mode 100644 index 0000000000..55fce5ca1e --- /dev/null +++ b/packages/light-client/test/proofs/proof4.json @@ -0,0 +1,46 @@ +{ + "outcome_proof":{ + "proof":[ + { + "hash":"765xoBEaDoGv3GGZo72WjSg7e8ZJdkLam5zTtX6osWcK", + "direction":"Right" + } + ], + "block_hash":"37jihqoUDFY3agpY6Z5fQt43DUmAu2XfKDMuLC6T93Wz", + "id":"9dPJ2s3uTVWo8p48KLJ6YgJW5tJeFTzJf5R3wtzCtPZ2", + "outcome":{ + "logs":[ + + ], + "receipt_ids":[ + "7Jkh8hBpM9NRq9YpWVXG7rJQmrELHSkdBpc4Y1uj7s9" + ], + "gas_burnt":3633015402031, + "tokens_burnt":"18165077010155000", + "executor_id":"nearfuntoken", + "status":{ + "SuccessValue":"WyIxIixbMjM2LDEzOSwyMjUsMTY1LDk5LDMsMTAwLDQxLDQ2LDg2LDIwOCwxNyw0MSwyMzIsMjM4LDEzOCwxNDksMTIwLDIxNSwyMTZdXQ==" + } + } + }, + "outcome_root_proof":[ + + ], + "block_header_lite":{ + "prev_block_hash":"8neByRWy6wqoBpPGz46VdszEr7XhfLmBw3QSmvzVVELp", + "inner_rest_hash":"3kJvpH91eZrLheYATduYUjmVkceuLksrRhaLqgXoKkmt", + "inner_lite":{ + "height":5563, + "epoch_id":"89ja3wyoPQC2Jkhe7prY1Z7dEh7zW5552jBVcefSwTTQ", + "next_epoch_id":"9yUKBU6NhwLf5VRaifRcSFeczSXSf2LSfCoMWTBwdRNf", + "prev_state_root":"5evKCqhiXFSxUBPy288QVvJFRm8ecibCNf8P1EGZZFjV", + "outcome_root":"9bMTQhvq2Jk2yz6UcZaotQTy5v3eKntSwxdfa7ur73gU", + "timestamp":"1593387441646721000", + "next_bp_hash":"5vpAs3FW6qcg8LL8iDN1Qpy93xEh1Hu116K5S5o6LNzx", + "block_merkle_root":"9mToyaNyNYqzn5bj3WcGmEmgToeCuaHvhiPZjW1CMCuW" + } + }, + "block_proof":[ + + ] +} \ No newline at end of file diff --git a/packages/light-client/test/proofs/proof5.json b/packages/light-client/test/proofs/proof5.json new file mode 100644 index 0000000000..63be48630e --- /dev/null +++ b/packages/light-client/test/proofs/proof5.json @@ -0,0 +1,69 @@ +{ + "outcome_proof": { + "proof": [], + "block_hash": "836bGij79WLpoGTJfMS7wHyeNDzcrR6Fjcnv7k5s35Zs", + "id": "C7bVNak4z9JQgXrQLS5ZAotqyJHCfD8ntgHorMaLVCFN", + "outcome": { + "logs": [], + "receipt_ids": [ + "Bt88L3Zw5HiKd21VQJHBtPMqNk62CEbomD6zzJRQrFrG" + ], + "gas_burnt": 4328442536275, + "tokens_burnt": "4328442536275000000000", + "executor_id": "nearfuntoken", + "status": { + "SuccessValue": "AQAAAAAAAAAAAAAAAAAAAOyL4aVjA2QpLlbQESno7oqVeNfY" + } + } + }, + "outcome_root_proof": [], + "block_header_lite": { + "prev_block_hash": "3Ygc9DBL6L3eZkfqjC39yoqpLdtrFa73v1Pij8WaLMXP", + "inner_rest_hash": "CDu5ma6FyugzXNJFgZLvrqJ6QchmnEsuC9ybjx8uf4Ve", + "inner_lite": { + "height": 382, + "epoch_id": "JAHuDz5JnQ8AR2bsX8iYjRMR6GUh66qsa4ikUCkmJVKF", + "next_epoch_id": "3eBVUeAYLVNQCQGiQLX7m4VSdYr8L17m5ZtMoHLtsJTi", + "prev_state_root": "GctVMceieDngovPKdnGwza1pDjX3L6c4XB9Gg72QdtUr", + "outcome_root": "9gu8iYjW89gw9HC2Y3gh74mt8h1i6WXkxGyHyGRQnXgD", + "timestamp": 1595963616139902200, + "timestamp_nanosec": "1595963616139902322", + "next_bp_hash": "HV5FPYQ9sPbB6MrtKcpjyiTfpLRMRqH8YLL2VQ9FrGU4", + "block_merkle_root": "CxbeXAcVWyygiQzojvHER832pxrZ9KLcSZNF7rLnkN1T" + } + }, + "block_proof": [ + { + "hash": "3fzvjNT4ZHrMwXg5nweVoEsLrRfHwXcb7Q5bEKpsfEHo", + "direction": "Right" + }, + { + "hash": "5vMJodboQKRgrtFb2pGaKDfHC5kAPTxKtnHoxVNm2oAk", + "direction": "Left" + }, + { + "hash": "7xgpkyrDo61vUTzZz2jjF4HogGrUsaTG4fo26jUj3p83", + "direction": "Left" + }, + { + "hash": "8nTpPqjbLKadmGszN4WffFscYAfEYPq796nprPNXUAjn", + "direction": "Left" + }, + { + "hash": "G5XQf9jzSuwmHGqJfoapDjZBkeQ7mBH7vS8dGfusRQqG", + "direction": "Left" + }, + { + "hash": "HdNY8yxMyZM2nxxV3XF5FbbiR6J5AoA2CxNbyYWEe4aG", + "direction": "Left" + }, + { + "hash": "76idRjn59X54cnSKUxqUtRygeqzaxDsCE7frJ57avbT9", + "direction": "Left" + }, + { + "hash": "ArxmcYkRzQaKEPGTFE4mySbzPu6qPQ7X5gtbNEiWtKb6", + "direction": "Left" + } + ] +} \ No newline at end of file diff --git a/packages/light-client/test/proofs/proof6.json b/packages/light-client/test/proofs/proof6.json new file mode 100644 index 0000000000..e47f9c3bef --- /dev/null +++ b/packages/light-client/test/proofs/proof6.json @@ -0,0 +1,69 @@ +{ + "outcome_proof": { + "proof": [], + "block_hash": "DJ7CrNVFWG9xRUddbDB2N3o1tgFzqh2zL9PyjVgWhTr1", + "id": "7UGbrQMEmhCUS5uSitiqDLBYpnuu13hzxJVDBRMU33JK", + "outcome": { + "logs": [], + "receipt_ids": [ + "2NJvxcFsUmYtfecMe5dAsYbK27efj7gMx5btq6UvWhrh" + ], + "gas_burnt": 4326379475896, + "tokens_burnt": "4326379475896000000000", + "executor_id": "nearfuntoken", + "status": { + "SuccessValue": "AQAAAAAAAAAAAAAAAAAAAOyL4aVjA2QpLlbQESno7oqVeNfY" + } + } + }, + "outcome_root_proof": [], + "block_header_lite": { + "prev_block_hash": "3xGtPdbfL6JbJ2qxf83GVjfuVgjhnUxGryz3RDjo9DGw", + "inner_rest_hash": "C4RVt5Vfp6AJvuM43Q4PaM3RCD9VGoXFCS7Q9DyR4LWF", + "inner_lite": { + "height": 358, + "epoch_id": "G2zVpfirbS8mDpkqhQXvkWfn2BPyJK7AyGtdkbfmmWSC", + "next_epoch_id": "FUJuQchgouiJVgdQmnXb2eXHY2ZwLKc4iJmUTGaZ1CEA", + "prev_state_root": "4Xi5gd345XM3KXmUKL7JB8zuWEzhEnNdt69kq91Fwcxw", + "outcome_root": "9gbMSq8kPPvnrUjPEqMVq6vMSP12scW4vnHY3cn5uXsP", + "timestamp": 1595961718661674000, + "timestamp_nanosec": "1595961718661674000", + "next_bp_hash": "DBqtF8zBxVgR9xpu9uVr3fikjwasUmntV6aruR3u8CYe", + "block_merkle_root": "8BLeevKH5iWxmWyGwKwghFkxG9TxYqucD72BitMvzDZD" + } + }, + "block_proof": [ + { + "hash": "7MHvRCw9YCptNxpcYNvnfnndygQniNsKC2nTgeusArcV", + "direction": "Right" + }, + { + "hash": "7Cyx5oWucX6pz5GRXPEneBCHSezCaG5Zq26nkp8zSbUb", + "direction": "Left" + }, + { + "hash": "AZFaMDqLKEUe5qmzWyaw4CV4z3VMWbtE4BmbJhpRn6jy", + "direction": "Left" + }, + { + "hash": "7Y3YueQZS2X21DocNsQcXXtSxcjEjawxgxd4o6xu9M2E", + "direction": "Right" + }, + { + "hash": "9GoDSqLs53L5KY5KRuJRK8D39MCJvcdD3JzzAwwXR91q", + "direction": "Right" + }, + { + "hash": "DcGqQCdBUkGS8xxarpZSyCiWCKTzLKQtPydkXeBsvQxf", + "direction": "Left" + }, + { + "hash": "9gVqrMoPeTqWFCXxZp8gBDXpsvCdqLiE3V3DjZUXEw2a", + "direction": "Left" + }, + { + "hash": "BqrgC11cz1TKZdX76FRXEhuZLL7NkyXg48PSkxJJh1yM", + "direction": "Left" + } + ] +} \ No newline at end of file diff --git a/packages/light-client/test/proofs/proof7.json b/packages/light-client/test/proofs/proof7.json new file mode 100644 index 0000000000..c26cb8db4f --- /dev/null +++ b/packages/light-client/test/proofs/proof7.json @@ -0,0 +1,58 @@ +{ + "block_header_lite": { + "inner_lite": { + "block_merkle_root": "4a2WszqBELxvAofktYKEyBbWd5nmk6d7cVVQjpw6n1Du", + "epoch_id": "97xWJUp824sUqU1yDRafh4s8skEPbuQFH8vZCNjt42rW", + "height": 93700916, + "next_bp_hash": "Ac4KGViamyvyDpr24WbRicbBXsX5QJBDWCPNQFBwewT6", + "next_epoch_id": "FXat5DZJXpbvDxRgmVzNWvs2d912qEecDLpQE5MVnvvN", + "outcome_root": "CiNqbgEuJYYnzBakmRTe96QtWrLQHCYDtTXGSnuftwPD", + "prev_state_root": "Aok5ArFiAnvQXF3JAwpP8cR1osVjqZNqdgcVqpiNhiEB", + "timestamp": 1656592785165079445, + "timestamp_nanosec": "1656592785165079445" + }, + "inner_rest_hash": "GA98ZMw2NpAx8nywwuYWgjRojhFXDeCGabcmAocFKsCp", + "prev_block_hash": "DVoSRXYr6Jv9txKV9dRrG9CtBSosTZbiNHq2FrWKuXcd" + }, + "block_proof": [], + "outcome_proof": { + "block_hash": "9no8PifBxHHaQKeFuCKuXsqjp5UkkvGKBtMsyuJ5nwLp", + "id": "FKTMosGgNGiDZtk7mTj94oXjwDWqWSNbUBCMrntqzi6Q", + "outcome": { + "executor_id": "relay.aurora", + "gas_burnt": 2428249682298, + "logs": [], + "metadata": { + "gas_profile": null, + "version": 1 + }, + "receipt_ids": [ + "HG6KENeJALh3csgmNFwMazonwo7c4hBddW3uQeuGJT3p" + ], + "status": { + "SuccessReceiptId": "HG6KENeJALh3csgmNFwMazonwo7c4hBddW3uQeuGJT3p" + }, + "tokens_burnt": "242824968229800000000" + }, + "proof": [ + { + "direction": "Right", + "hash": "EtB1m4bgTioP5ErdbLSGR3xxtMTH5YEUtELE9YBGxwdp" + }, + { + "direction": "Right", + "hash": "6MqdtZgQiMzFDgDiG7uP4kYsehJohSbSRfmkGV6oiuja" + } + ] + }, + "outcome_root_proof": [ + { + "direction": "Left", + "hash": "AEp6nNheh3aw11fU2fcydbPsLoNpcxHSERbk8XvaprSc" + }, + { + "direction": "Left", + "hash": "9iXnsvK56hm1DDegqom4vJBRQ3iKmM6HF1b1FY57bVjV" + } + ] +} \ No newline at end of file From 59b4f1434b314e56f8b532c0db9269471f28e0f1 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Thu, 27 Apr 2023 12:08:17 -0400 Subject: [PATCH 12/27] chore: address comments before refactoring --- packages/light-client/CHANGELOG.md | 17 ----------------- packages/light-client/package.json | 3 +-- pnpm-lock.yaml | 4 ---- 3 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 packages/light-client/CHANGELOG.md diff --git a/packages/light-client/CHANGELOG.md b/packages/light-client/CHANGELOG.md deleted file mode 100644 index a0202b5f7d..0000000000 --- a/packages/light-client/CHANGELOG.md +++ /dev/null @@ -1,17 +0,0 @@ -# @near-js/types - -## 0.0.3 - -### Patch Changes - -- [#1103](https://github.com/near/near-api-js/pull/1103) [`b713ae78`](https://github.com/near/near-api-js/commit/b713ae78969d530e7e69e21e315e3d3fdb5e68e9) Thanks [@austinabell](https://github.com/austinabell)! - Implement light client block retrieval and relevant types - -- [#1106](https://github.com/near/near-api-js/pull/1106) [`bc53c32c`](https://github.com/near/near-api-js/commit/bc53c32c80694e6f22d9be97db44603591f0026b) Thanks [@austinabell](https://github.com/austinabell)! - Adds missing timestamp_nanosec field to light client proof header - -- [#1105](https://github.com/near/near-api-js/pull/1105) [`8c6bf391`](https://github.com/near/near-api-js/commit/8c6bf391a01af9adb81cb8731c45bdb17f5291c0) Thanks [@austinabell](https://github.com/austinabell)! - Adds missing version field in ValidatorStakeView - -## 0.0.2 - -### Patch Changes - -- [#1091](https://github.com/near/near-api-js/pull/1091) [`ca458cac`](https://github.com/near/near-api-js/commit/ca458cac683fab614b77eb5daa160e03b0640350) Thanks [@andy-haynes](https://github.com/andy-haynes)! - Only include contents of lib/ in NPM packages diff --git a/packages/light-client/package.json b/packages/light-client/package.json index 1f5d1ae70f..fdba95b7c5 100644 --- a/packages/light-client/package.json +++ b/packages/light-client/package.json @@ -19,14 +19,13 @@ "bn.js": "5.2.1", "@near-js/crypto": "workspace:*", "@near-js/types": "workspace:*", - "@near-js/providers": "workspace:*", - "@near-js/utils": "workspace:*", "bs58": "^4.0.0", "borsh": "^0.7.0", "js-sha256": "^0.9.0" }, "devDependencies": { "@types/node": "^18.11.18", + "@near-js/providers": "workspace:*", "jest": "^26.0.1", "ts-jest": "^26.5.6", "typescript": "^4.9.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ed610d2bc..ece3a2e9e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -191,9 +191,7 @@ importers: packages/light-client: specifiers: '@near-js/crypto': workspace:* - '@near-js/providers': workspace:* '@near-js/types': workspace:* - '@near-js/utils': workspace:* '@types/node': ^18.11.18 bn.js: 5.2.1 borsh: ^0.7.0 @@ -204,9 +202,7 @@ importers: typescript: ^4.9.4 dependencies: '@near-js/crypto': link:../crypto - '@near-js/providers': link:../providers '@near-js/types': link:../types - '@near-js/utils': link:../utils bn.js: 5.2.1 borsh: 0.7.0 bs58: 4.0.1 From 68601e59564159f84c5aeb713ff152cd36f98fed Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Thu, 27 Apr 2023 12:15:06 -0400 Subject: [PATCH 13/27] refactor: move Enum class to types --- packages/light-client/src/index.ts | 18 +----------------- packages/near-api-js/src/utils/enums.ts | 17 +---------------- packages/transactions/src/actions.ts | 16 +--------------- packages/types/src/assignable.ts | 14 ++++++++++++++ 4 files changed, 17 insertions(+), 48 deletions(-) diff --git a/packages/light-client/src/index.ts b/packages/light-client/src/index.ts index 1a44a0cf99..1bc6f36db7 100644 --- a/packages/light-client/src/index.ts +++ b/packages/light-client/src/index.ts @@ -11,27 +11,11 @@ import { NextLightClientBlockResponse, ValidatorStakeView, } from '@near-js/types'; -import { Assignable } from '@near-js/types'; +import { Assignable, Enum } from '@near-js/types'; import { PublicKey } from '@near-js/crypto'; import BN from 'bn.js'; import { serialize } from 'borsh'; -// TODO this abstract class exists in NAJ and seems unused. It is also copied in the transactions -// TODO ..package. This should probably exist in utils and shared. -abstract class Enum { - enum: string; - - constructor(properties: any) { - if (Object.keys(properties).length !== 1) { - throw new Error('Enum can only take single value'); - } - Object.keys(properties).map((key: string) => { - (this as any)[key] = properties[key]; - this.enum = key; - }); - } -} - // TODO: refactor this into separate files const ED_PREFIX = 'ed25519:'; diff --git a/packages/near-api-js/src/utils/enums.ts b/packages/near-api-js/src/utils/enums.ts index d2000e9296..6ddd68d3e9 100644 --- a/packages/near-api-js/src/utils/enums.ts +++ b/packages/near-api-js/src/utils/enums.ts @@ -1,16 +1 @@ -export { Assignable } from '@near-js/types'; - -/** @hidden @module */ -export abstract class Enum { - enum: string; - - constructor(properties: any) { - if (Object.keys(properties).length !== 1) { - throw new Error('Enum can only take single value'); - } - Object.keys(properties).map((key: string) => { - (this as any)[key] = properties[key]; - this.enum = key; - }); - } -} +export { Assignable, Enum } from '@near-js/types'; diff --git a/packages/transactions/src/actions.ts b/packages/transactions/src/actions.ts index 4367024842..d88ae8b6c8 100644 --- a/packages/transactions/src/actions.ts +++ b/packages/transactions/src/actions.ts @@ -1,24 +1,10 @@ import { PublicKey } from '@near-js/crypto'; -import { Assignable } from '@near-js/types'; +import { Assignable, Enum } from '@near-js/types'; import BN from 'bn.js'; import { DelegateAction } from './delegate'; import { Signature } from './signature'; -abstract class Enum { - enum: string; - - constructor(properties: any) { - if (Object.keys(properties).length !== 1) { - throw new Error('Enum can only take single value'); - } - Object.keys(properties).map((key: string) => { - (this as any)[key] = properties[key]; - this.enum = key; - }); - } -} - export class FunctionCallPermission extends Assignable { allowance?: BN; receiverId: string; diff --git a/packages/types/src/assignable.ts b/packages/types/src/assignable.ts index f73132943a..89fb5eb27f 100644 --- a/packages/types/src/assignable.ts +++ b/packages/types/src/assignable.ts @@ -5,3 +5,17 @@ export abstract class Assignable { }); } } + +export abstract class Enum { + enum: string; + + constructor(properties: any) { + if (Object.keys(properties).length !== 1) { + throw new Error('Enum can only take single value'); + } + Object.keys(properties).map((key: string) => { + (this as any)[key] = properties[key]; + this.enum = key; + }); + } +} From 73644e23165942a227d4293f3163e9016a39415b Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Thu, 27 Apr 2023 12:42:29 -0400 Subject: [PATCH 14/27] refactor: move light client logic into separate files --- packages/light-client/src/block.ts | 162 ++++++++ packages/light-client/src/execution.ts | 194 +++++++++ packages/light-client/src/index.ts | 551 +------------------------ packages/light-client/src/utils.ts | 214 ++++++++++ 4 files changed, 579 insertions(+), 542 deletions(-) create mode 100644 packages/light-client/src/block.ts create mode 100644 packages/light-client/src/execution.ts create mode 100644 packages/light-client/src/utils.ts diff --git a/packages/light-client/src/block.ts b/packages/light-client/src/block.ts new file mode 100644 index 0000000000..1f02f2fe4e --- /dev/null +++ b/packages/light-client/src/block.ts @@ -0,0 +1,162 @@ +import { + computeBlockHash, + combineHash, + SCHEMA, + BorshApprovalInner, + BorshValidatorStakeView, + BorshValidatorStakeViewV1, + BorshValidatorStakeViewWrapper, +} from './utils'; +import bs58 from 'bs58'; +import { sha256 } from 'js-sha256'; +import { + LightClientBlockLiteView, + NextLightClientBlockResponse, + ValidatorStakeView, +} from '@near-js/types'; +import { PublicKey } from '@near-js/crypto'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; + +export interface ValidateLightClientBlockParams { + lastKnownBlock: LightClientBlockLiteView; + currentBlockProducers: ValidatorStakeView[]; + newBlock: NextLightClientBlockResponse; +} + +/** + * Validates a light client block response from the RPC against the last known block and block + * producer set. + * + * @param lastKnownBlock The last light client block retrieved. This must be the block at the epoch before newBlock. + * @param currentBlockProducers The block producer set for the epoch of the last known block. + * @param newBlock The new block to validate. + */ +export function validateLightClientBlock({ + lastKnownBlock, + currentBlockProducers, + newBlock, +}: ValidateLightClientBlockParams) { + // Numbers for each step references the spec: + // https://github.com/near/NEPs/blob/c7d72138117ed0ab86629a27d1f84e9cce80848f/specs/ChainSpec/LightClient.md + const newBlockHash = computeBlockHash(lastKnownBlock); + const nextBlockHashDecoded = combineHash( + bs58.decode(newBlock.next_block_inner_hash), + newBlockHash + ); + + // (1) Verify that the block height is greater than the last known block. + if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { + throw new Error( + 'New block must be at least the height of the last known block' + ); + } + + // (2) Verify that the new block is in the same epoch or in the next epoch known to the last + // known block. + if ( + newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.epoch_id && + newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id + ) { + throw new Error( + 'New block must either be in the same epoch or the next epoch from the last known block' + ); + } + + const blockProducers: ValidatorStakeView[] = currentBlockProducers; + if (newBlock.approvals_after_next.length < blockProducers.length) { + throw new Error( + 'Number of approvals for next epoch must be at least the number of current block producers' + ); + } + + // (4) and (5) + // (4) `approvals_after_next` contains valid signatures on the block producer approval messages. + // (5) The signatures present represent more than 2/3 of the total stake. + const totalStake = new BN(0); + const approvedStake = new BN(0); + + for (let i = 0; i < blockProducers.length; i++) { + const approval = newBlock.approvals_after_next[i]; + const stake = blockProducers[i].stake; + + totalStake.iadd(new BN(stake)); + + if (approval === null) { + continue; + } + + approvedStake.iadd(new BN(stake)); + + const publicKey = PublicKey.fromString(blockProducers[i].public_key); + const signature = bs58.decode(approval.split(':')[1]); + + const approvalEndorsement = serialize( + SCHEMA, + new BorshApprovalInner({ endorsement: nextBlockHashDecoded }) + ); + + const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); + const approvalHeightLe = approvalHeight.toArrayLike(Buffer, 'le', 8); + const approvalMessage = new Uint8Array([ + ...approvalEndorsement, + ...approvalHeightLe, + ]); + + publicKey.verify(approvalMessage, signature); + } + + // (5) Calculates the 2/3 threshold and checks that the approved stake accumulated above + // exceeds it. + const threshold = totalStake.mul(new BN(2)).div(new BN(3)); + if (approvedStake <= threshold) { + throw new Error('Approved stake does not exceed the 2/3 threshold'); + } + + // (6) Verify that if the new block is in the next epoch, the hash of the next block producers + // equals the `next_bp_hash` provided in that block. + if ( + newBlock.inner_lite.epoch_id === lastKnownBlock.inner_lite.next_epoch_id + ) { + // (3) If the block is in a new epoch, then `next_bps` must be present. + if (!newBlock.next_bps) { + throw new Error( + 'New block must include next block producers if a new epoch starts' + ); + } + + const bpsHash = hashBlockProducers(newBlock.next_bps); + + if (!bpsHash.equals(bs58.decode(newBlock.inner_lite.next_bp_hash))) { + throw new Error('Next block producers hash doesn\'t match'); + } + } +} + +function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { + const borshBps: BorshValidatorStakeView[] = bps.map((bp) => { + if (bp.validator_stake_struct_version) { + const version = parseInt( + bp.validator_stake_struct_version.slice(1) + ); + if (version !== 1) { + throw new Error( + 'Only version 1 of the validator stake struct is supported' + ); + } + } + return new BorshValidatorStakeView({ + v1: new BorshValidatorStakeViewV1({ + account_id: bp.account_id, + public_key: PublicKey.fromString(bp.public_key), + stake: bp.stake, + }), + }); + }); + const serializedBps = serialize( + SCHEMA, + // NOTE: just wrapping because borsh-js requires this type to be in the schema for some reason + new BorshValidatorStakeViewWrapper({ bps: borshBps }) + ); + return Buffer.from(sha256.array(serializedBps)); +} diff --git a/packages/light-client/src/execution.ts b/packages/light-client/src/execution.ts new file mode 100644 index 0000000000..191e1f82ac --- /dev/null +++ b/packages/light-client/src/execution.ts @@ -0,0 +1,194 @@ +import bs58 from 'bs58'; +import { sha256 } from 'js-sha256'; +import { + BlockHeaderInnerLiteView, + ExecutionOutcomeWithIdView, + ExecutionStatus, + ExecutionStatusBasic, + LightClientProof, + MerklePath, +} from '@near-js/types'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; +import { + BorshCryptoHash, + BorshCryptoHashes, + BorshEmpty, + BorshPartialExecutionOutcome, + BorshPartialExecutionStatus, + combineHash, + SCHEMA, +} from './utils'; + +export interface ValidateExecutionProofParams { + proof: LightClientProof; + blockMerkleRoot: Uint8Array; +} + +/** + * Validates the execution proof returned from the RPC. This will validate that the proof itself, + * and ensure that the block merkle root matches the one passed in. + * + * @param proof The proof given by the RPC. + * @param blockMerkleRoot The block merkle root for the block that was used to generate the proof. + */ +export function validateExecutionProof({ + proof, + blockMerkleRoot, +}: ValidateExecutionProofParams) { + // Execution outcome root verification + const computedOutcomeRoot = computeOutcomeRoot( + proof.outcome_proof, + proof.outcome_root_proof + ); + const proofRoot = proof.block_header_lite.inner_lite.outcome_root; + if (!computedOutcomeRoot.equals(bs58.decode(proofRoot))) { + throw new Error( + `Block outcome root (${bs58.encode( + computedOutcomeRoot + )}) doesn't match proof (${proofRoot})}` + ); + } + + // Block merkle root verification + const computedBlockRoot = computeMerkleRoot(proof); + if (!computedBlockRoot.equals(blockMerkleRoot)) { + throw new Error( + `Block merkle root (${bs58.encode( + computedBlockRoot + )}) doesn't match proof (${bs58.encode(blockMerkleRoot)})}` + ); + } +} + +function computeRoot(node: Buffer, proof: MerklePath): Buffer { + proof.forEach((step) => { + if (step.direction == 'Left') { + node = combineHash(bs58.decode(step.hash), node); + } else { + node = combineHash(node, bs58.decode(step.hash)); + } + }); + return node; +} + +function blockHeaderInnerLiteHash(data: BlockHeaderInnerLiteView): Buffer { + const hash = sha256.create(); + hash.update(new BN(data.height).toArrayLike(Buffer, 'le', 8)); + hash.update(bs58.decode(data.epoch_id)); + hash.update(bs58.decode(data.next_epoch_id)); + hash.update(bs58.decode(data.prev_state_root)); + hash.update(bs58.decode(data.outcome_root)); + hash.update( + new BN(data.timestamp_nanosec || data.timestamp).toArrayLike( + Buffer, + 'le', + 8 + ) + ); + hash.update(bs58.decode(data.next_bp_hash)); + hash.update(bs58.decode(data.block_merkle_root)); + return Buffer.from(hash.digest()); +} + +function computeMerkleRoot(proof: LightClientProof): Buffer { + const innerLiteHash = blockHeaderInnerLiteHash( + proof.block_header_lite.inner_lite + ); + + const headerHash = combineHash( + combineHash( + innerLiteHash, + bs58.decode(proof.block_header_lite.inner_rest_hash) + ), + bs58.decode(proof.block_header_lite.prev_block_hash) + ); + + return computeRoot(headerHash, proof.block_proof); +} + +function computeOutcomeRoot( + outcomeWithId: ExecutionOutcomeWithIdView, + outcomeRootProof: MerklePath +) { + // Generate outcome proof hash through borsh encoding + const receiptIds = outcomeWithId.outcome.receipt_ids.map((id) => + bs58.decode(id) + ); + + const borshStatus = ( + status: ExecutionStatus | ExecutionStatusBasic + ): BorshPartialExecutionStatus => { + if (status === ExecutionStatusBasic.Pending) { + throw new Error('Pending status is not supported'); + } else if (status === ExecutionStatusBasic.Unknown) { + return new BorshPartialExecutionStatus({ + unknown: new BorshEmpty({}), + }); + } else if ( + status === ExecutionStatusBasic.Failure || + 'Failure' in status + ) { + return new BorshPartialExecutionStatus({ + failure: new BorshEmpty({}), + }); + } else if ( + status.SuccessValue !== undefined && + status.SuccessValue !== null + ) { + return new BorshPartialExecutionStatus({ + successValue: Buffer.from(status.SuccessValue, 'base64'), + }); + } else if ( + status.SuccessReceiptId !== undefined && + status.SuccessReceiptId !== null + ) { + return new BorshPartialExecutionStatus({ + successReceiptId: bs58.decode(status.SuccessReceiptId), + }); + } else { + throw new Error(`Unexpected execution status ${status}`); + } + }; + const partialExecOutcome: BorshPartialExecutionOutcome = + new BorshPartialExecutionOutcome({ + receiptIds: receiptIds, + gasBurnt: new BN(outcomeWithId.outcome.gas_burnt), + // TODO update with types once https://github.com/near/near-api-js/pull/1113 comes in + tokensBurnt: new BN((outcomeWithId.outcome as any).tokens_burnt), + executorId: (outcomeWithId.outcome as any).executor_id, + status: borshStatus(outcomeWithId.outcome.status), + }); + const serializedPartialOutcome = serialize(SCHEMA, partialExecOutcome); + const partialOutcomeHash = Buffer.from( + sha256.array(serializedPartialOutcome) + ); + const logsHashes: Uint8Array[] = outcomeWithId.outcome.logs.map((log) => { + return Buffer.from(sha256.array(log)); + }); + const outcomeHashes: Uint8Array[] = [ + bs58.decode(outcomeWithId.id), + partialOutcomeHash, + ...logsHashes, + ]; + + const outcomeSerialized = serialize( + SCHEMA, + new BorshCryptoHashes({ hashes: outcomeHashes }) + ); + const outcomeHash = Buffer.from(sha256.array(outcomeSerialized)); + + // Generate shard outcome root + // computeRoot(sha256(borsh(outcome)), outcome.proof) + const outcomeShardRoot = computeRoot(outcomeHash, outcomeWithId.proof); + + // Generate block outcome root + // computeRoot(sha256(borsh(shardOutcomeRoot)), outcomeRootProof) + const shardRootBorsh = serialize( + SCHEMA, + new BorshCryptoHash({ hash: outcomeShardRoot }) + ); + const shardRootHash = Buffer.from(sha256.array(shardRootBorsh)); + + return computeRoot(shardRootHash, outcomeRootProof); +} diff --git a/packages/light-client/src/index.ts b/packages/light-client/src/index.ts index 1bc6f36db7..c3567df66b 100644 --- a/packages/light-client/src/index.ts +++ b/packages/light-client/src/index.ts @@ -1,542 +1,9 @@ -import bs58 from 'bs58'; -import { sha256 } from 'js-sha256'; -import { - BlockHeaderInnerLiteView, - ExecutionOutcomeWithIdView, - ExecutionStatus, - ExecutionStatusBasic, - LightClientBlockLiteView, - LightClientProof, - MerklePath, - NextLightClientBlockResponse, - ValidatorStakeView, -} from '@near-js/types'; -import { Assignable, Enum } from '@near-js/types'; -import { PublicKey } from '@near-js/crypto'; -import BN from 'bn.js'; -import { serialize } from 'borsh'; - -// TODO: refactor this into separate files - -const ED_PREFIX = 'ed25519:'; - -class BorshBlockHeaderInnerLite extends Assignable { - height: BN; - epoch_id: Uint8Array; - next_epoch_id: Uint8Array; - prev_state_root: Uint8Array; - outcome_root: Uint8Array; - timestamp: BN; - next_bp_hash: Uint8Array; - block_merkle_root: Uint8Array; -} - -class BorshApprovalInner extends Enum { - endorsement?: Uint8Array; - skip?: BN; -} - -class BorshValidatorStakeViewV1 extends Assignable { - account_id: string; - public_key: PublicKey; - stake: BN; -} - -class BorshValidatorStakeView extends Enum { - v1?: BorshValidatorStakeViewV1; -} - -class BorshValidatorStakeViewWrapper extends Assignable { - bps: BorshValidatorStakeView[]; -} - -class BorshEmpty extends Assignable {} - -class BorshPartialExecutionStatus extends Enum { - unknown?: BorshEmpty; - failure?: BorshEmpty; - successValue?: Uint8Array; - successReceiptId?: Uint8Array; -} - -class BorshPartialExecutionOutcome extends Assignable { - receiptIds: Uint8Array[]; - gasBurnt: BN; - tokensBurnt: BN; - executorId: string; - status: BorshPartialExecutionStatus; -} - -class BorshCryptoHash extends Assignable { - array: Uint8Array; -} - -class BorshCryptoHashes extends Assignable { - hashes: Uint8Array[]; -} - -type Class = new (...args: any[]) => T; -const SCHEMA = new Map([ - [ - BorshBlockHeaderInnerLite, - { - kind: 'struct', - fields: [ - ['height', 'u64'], - ['epoch_id', [32]], - ['next_epoch_id', [32]], - ['prev_state_root', [32]], - ['outcome_root', [32]], - ['timestamp', 'u64'], - ['next_bp_hash', [32]], - ['block_merkle_root', [32]], - ], - }, - ], - [ - BorshApprovalInner, - { - kind: 'enum', - field: 'enum', - values: [ - ['endorsement', [32]], - ['skip', 'u64'], - ], - }, - ], - [ - BorshValidatorStakeViewV1, - { - kind: 'struct', - fields: [ - ['account_id', 'string'], - ['public_key', PublicKey], - ['stake', 'u128'], - ], - }, - ], - [ - BorshValidatorStakeView, - { - kind: 'enum', - field: 'enum', - values: [['v1', BorshValidatorStakeViewV1]], - }, - ], - [ - BorshValidatorStakeViewWrapper, - { - kind: 'struct', - fields: [['bps', [BorshValidatorStakeView]]], - }, - ], - [ - BorshEmpty, - { - kind: 'struct', - fields: [], - }, - ], - [ - BorshCryptoHash, - { - kind: 'struct', - fields: [['hash', [32]]], - }, - ], - [ - BorshCryptoHashes, - { - kind: 'struct', - fields: [['hashes', [[32]]]], - }, - ], - [ - BorshPartialExecutionStatus, - { - kind: 'enum', - field: 'enum', - values: [ - ['unknown', BorshEmpty], - ['failure', BorshEmpty], - ['successValue', ['u8']], - ['successReceiptId', [32]], - ], - }, - ], - [ - BorshPartialExecutionOutcome, - { - kind: 'struct', - fields: [ - ['receiptIds', [[32]]], - ['gasBurnt', 'u64'], - ['tokensBurnt', 'u128'], - ['executorId', 'string'], - ['status', BorshPartialExecutionStatus], - ], - }, - ], - // Note: Copied from transactions schema - [ - PublicKey, - { - kind: 'struct', - fields: [ - ['keyType', 'u8'], - ['data', [32]], - ], - }, - ], -]); - -function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { - const borshBps: BorshValidatorStakeView[] = bps.map((bp) => { - if (bp.validator_stake_struct_version) { - const version = parseInt( - bp.validator_stake_struct_version.slice(1) - ); - if (version !== 1) { - throw new Error( - 'Only version 1 of the validator stake struct is supported' - ); - } - } - return new BorshValidatorStakeView({ - v1: new BorshValidatorStakeViewV1({ - account_id: bp.account_id, - public_key: PublicKey.fromString(bp.public_key), - stake: bp.stake, - }), - }); - }); - const serializedBps = serialize( - SCHEMA, - // NOTE: just wrapping because borsh-js requires this type to be in the schema for some reason - new BorshValidatorStakeViewWrapper({ bps: borshBps }) - ); - return Buffer.from(sha256.array(serializedBps)); -} - -function combineHash(h1: Uint8Array, h2: Uint8Array): Buffer { - const hash = sha256.create(); - hash.update(h1); - hash.update(h2); - return Buffer.from(hash.digest()); -} - -/** - * Computes the block hash given a `LightClientBlockLiteView`. Unlike the regular block header, - * the hash has to be calculated since it is not included in the response. - * - * @param block The block to compute the hash for. - */ -export function computeBlockHash(block: LightClientBlockLiteView): Buffer { - const header = block.inner_lite; - const borshHeader = new BorshBlockHeaderInnerLite({ - height: new BN(header.height), - epoch_id: bs58.decode(header.epoch_id), - next_epoch_id: bs58.decode(header.next_epoch_id), - prev_state_root: bs58.decode(header.prev_state_root), - outcome_root: bs58.decode(header.outcome_root), - timestamp: new BN(header.timestamp_nanosec), - next_bp_hash: bs58.decode(header.next_bp_hash), - block_merkle_root: bs58.decode(header.block_merkle_root), - }); - const msg = serialize(SCHEMA, borshHeader); - const innerRestHash = bs58.decode(block.inner_rest_hash); - const prevHash = bs58.decode(block.prev_block_hash); - const innerLiteHash = Buffer.from(sha256.array(msg)); - const innerHash = combineHash(innerLiteHash, innerRestHash); - const finalHash = combineHash(innerHash, prevHash); - - return finalHash; -} - -export interface ValidateLightClientBlockParams { - lastKnownBlock: LightClientBlockLiteView; - currentBlockProducers: ValidatorStakeView[]; - newBlock: NextLightClientBlockResponse; -} - -/** - * Validates a light client block response from the RPC against the last known block and block - * producer set. - * - * @param lastKnownBlock The last light client block retrieved. This must be the block at the epoch before newBlock. - * @param currentBlockProducers The block producer set for the epoch of the last known block. - * @param newBlock The new block to validate. - */ -export function validateLightClientBlock({ - lastKnownBlock, - currentBlockProducers, - newBlock, -}: ValidateLightClientBlockParams) { - // Numbers for each step references the spec: - // https://github.com/near/NEPs/blob/c7d72138117ed0ab86629a27d1f84e9cce80848f/specs/ChainSpec/LightClient.md - const newBlockHash = computeBlockHash(lastKnownBlock); - const nextBlockHashDecoded = combineHash( - bs58.decode(newBlock.next_block_inner_hash), - newBlockHash - ); - - // (1) Verify that the block height is greater than the last known block. - if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { - throw new Error( - 'New block must be at least the height of the last known block' - ); - } - - // (2) Verify that the new block is in the same epoch or in the next epoch known to the last - // known block. - if ( - newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.epoch_id && - newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id - ) { - throw new Error( - 'New block must either be in the same epoch or the next epoch from the last known block' - ); - } - - const blockProducers: ValidatorStakeView[] = currentBlockProducers; - if (newBlock.approvals_after_next.length < blockProducers.length) { - throw new Error( - 'Number of approvals for next epoch must be at least the number of current block producers' - ); - } - - // (4) and (5) - // (4) `approvals_after_next` contains valid signatures on the block producer approval messages. - // (5) The signatures present represent more than 2/3 of the total stake. - const totalStake = new BN(0); - const approvedStake = new BN(0); - - for (let i = 0; i < blockProducers.length; i++) { - const approval = newBlock.approvals_after_next[i]; - const stake = blockProducers[i].stake; - - totalStake.iadd(new BN(stake)); - - if (approval === null) { - continue; - } - - approvedStake.iadd(new BN(stake)); - - const publicKey = PublicKey.fromString(blockProducers[i].public_key); - const signature = bs58.decode(approval.slice(ED_PREFIX.length)); - - const approvalEndorsement = serialize( - SCHEMA, - new BorshApprovalInner({ endorsement: nextBlockHashDecoded }) - ); - - const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); - const approvalHeightLe = approvalHeight.toArrayLike(Buffer, 'le', 8); - const approvalMessage = new Uint8Array([ - ...approvalEndorsement, - ...approvalHeightLe, - ]); - - publicKey.verify(approvalMessage, signature); - } - - // (5) Calculates the 2/3 threshold and checks that the approved stake accumulated above - // exceeds it. - const threshold = totalStake.mul(new BN(2)).div(new BN(3)); - if (approvedStake <= threshold) { - throw new Error('Approved stake does not exceed the 2/3 threshold'); - } - - // (6) Verify that if the new block is in the next epoch, the hash of the next block producers - // equals the `next_bp_hash` provided in that block. - if ( - newBlock.inner_lite.epoch_id === lastKnownBlock.inner_lite.next_epoch_id - ) { - // (3) If the block is in a new epoch, then `next_bps` must be present. - if (!newBlock.next_bps) { - throw new Error( - 'New block must include next block producers if a new epoch starts' - ); - } - - const bpsHash = hashBlockProducers(newBlock.next_bps); - - if (!bpsHash.equals(bs58.decode(newBlock.inner_lite.next_bp_hash))) { - throw new Error('Next block producers hash doesn\'t match'); - } - } -} - -function blockHeaderInnerLiteHash(data: BlockHeaderInnerLiteView): Buffer { - const hash = sha256.create(); - hash.update(new BN(data.height).toArrayLike(Buffer, 'le', 8)); - hash.update(bs58.decode(data.epoch_id)); - hash.update(bs58.decode(data.next_epoch_id)); - hash.update(bs58.decode(data.prev_state_root)); - hash.update(bs58.decode(data.outcome_root)); - hash.update( - new BN(data.timestamp_nanosec || data.timestamp).toArrayLike( - Buffer, - 'le', - 8 - ) - ); - hash.update(bs58.decode(data.next_bp_hash)); - hash.update(bs58.decode(data.block_merkle_root)); - return Buffer.from(hash.digest()); -} - -function computeRoot(node: Buffer, proof: MerklePath): Buffer { - proof.forEach((step) => { - if (step.direction == 'Left') { - node = combineHash(bs58.decode(step.hash), node); - } else { - node = combineHash(node, bs58.decode(step.hash)); - } - }); - return node; -} - -function computeMerkleRoot(proof: LightClientProof): Buffer { - const innerLiteHash = blockHeaderInnerLiteHash( - proof.block_header_lite.inner_lite - ); - - const headerHash = combineHash( - combineHash( - innerLiteHash, - bs58.decode(proof.block_header_lite.inner_rest_hash) - ), - bs58.decode(proof.block_header_lite.prev_block_hash) - ); - - return computeRoot(headerHash, proof.block_proof); -} - -function computeOutcomeRoot( - outcomeWithId: ExecutionOutcomeWithIdView, - outcomeRootProof: MerklePath -) { - // Generate outcome proof hash through borsh encoding - const receiptIds = outcomeWithId.outcome.receipt_ids.map((id) => - bs58.decode(id) - ); - - const borshStatus = ( - status: ExecutionStatus | ExecutionStatusBasic - ): BorshPartialExecutionStatus => { - if (status === ExecutionStatusBasic.Pending) { - throw new Error('Pending status is not supported'); - } else if (status === ExecutionStatusBasic.Unknown) { - return new BorshPartialExecutionStatus({ - unknown: new BorshEmpty({}), - }); - } else if ( - status === ExecutionStatusBasic.Failure || - 'Failure' in status - ) { - return new BorshPartialExecutionStatus({ - failure: new BorshEmpty({}), - }); - } else if ( - status.SuccessValue !== undefined && - status.SuccessValue !== null - ) { - return new BorshPartialExecutionStatus({ - successValue: Buffer.from(status.SuccessValue, 'base64'), - }); - } else if ( - status.SuccessReceiptId !== undefined && - status.SuccessReceiptId !== null - ) { - return new BorshPartialExecutionStatus({ - successReceiptId: bs58.decode(status.SuccessReceiptId), - }); - } else { - throw new Error(`Unexpected execution status ${status}`); - } - }; - const partialExecOutcome: BorshPartialExecutionOutcome = - new BorshPartialExecutionOutcome({ - receiptIds: receiptIds, - gasBurnt: new BN(outcomeWithId.outcome.gas_burnt), - // TODO update with types once https://github.com/near/near-api-js/pull/1113 comes in - tokensBurnt: new BN((outcomeWithId.outcome as any).tokens_burnt), - executorId: (outcomeWithId.outcome as any).executor_id, - status: borshStatus(outcomeWithId.outcome.status), - }); - const serializedPartialOutcome = serialize(SCHEMA, partialExecOutcome); - const partialOutcomeHash = Buffer.from( - sha256.array(serializedPartialOutcome) - ); - const logsHashes: Uint8Array[] = outcomeWithId.outcome.logs.map((log) => { - return Buffer.from(sha256.array(log)); - }); - const outcomeHashes: Uint8Array[] = [ - bs58.decode(outcomeWithId.id), - partialOutcomeHash, - ...logsHashes, - ]; - - const outcomeSerialized = serialize( - SCHEMA, - new BorshCryptoHashes({ hashes: outcomeHashes }) - ); - const outcomeHash = Buffer.from(sha256.array(outcomeSerialized)); - - // Generate shard outcome root - // computeRoot(sha256(borsh(outcome)), outcome.proof) - const outcomeShardRoot = computeRoot(outcomeHash, outcomeWithId.proof); - - // Generate block outcome root - // computeRoot(sha256(borsh(shardOutcomeRoot)), outcomeRootProof) - const shardRootBorsh = serialize( - SCHEMA, - new BorshCryptoHash({ hash: outcomeShardRoot }) - ); - const shardRootHash = Buffer.from(sha256.array(shardRootBorsh)); - - return computeRoot(shardRootHash, outcomeRootProof); -} - -export interface ValidateExecutionProofParams { - proof: LightClientProof; - blockMerkleRoot: Uint8Array; -} - -/** - * Validates the execution proof returned from the RPC. This will validate that the proof itself, - * and ensure that the block merkle root matches the one passed in. - * - * @param proof The proof given by the RPC. - * @param blockMerkleRoot The block merkle root for the block that was used to generate the proof. - */ -export function validateExecutionProof({ - proof, - blockMerkleRoot, -}: ValidateExecutionProofParams) { - // Execution outcome root verification - const computedOutcomeRoot = computeOutcomeRoot( - proof.outcome_proof, - proof.outcome_root_proof - ); - const proofRoot = proof.block_header_lite.inner_lite.outcome_root; - if (!computedOutcomeRoot.equals(bs58.decode(proofRoot))) { - throw new Error( - `Block outcome root (${bs58.encode( - computedOutcomeRoot - )}) doesn't match proof (${proofRoot})}` - ); - } - - // Block merkle root verification - const computedBlockRoot = computeMerkleRoot(proof); - if (!computedBlockRoot.equals(blockMerkleRoot)) { - throw new Error( - `Block merkle root (${bs58.encode( - computedBlockRoot - )}) doesn't match proof (${bs58.encode(blockMerkleRoot)})}` - ); - } -} +export { computeBlockHash } from './utils'; +export { + ValidateLightClientBlockParams, + validateLightClientBlock, +} from './block'; +export { + ValidateExecutionProofParams, + validateExecutionProof, +} from './execution'; diff --git a/packages/light-client/src/utils.ts b/packages/light-client/src/utils.ts new file mode 100644 index 0000000000..a7817e00c1 --- /dev/null +++ b/packages/light-client/src/utils.ts @@ -0,0 +1,214 @@ +import bs58 from 'bs58'; +import { sha256 } from 'js-sha256'; +import { + LightClientBlockLiteView, +} from '@near-js/types'; +import { Assignable, Enum } from '@near-js/types'; +import { PublicKey } from '@near-js/crypto'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; + +export class BorshBlockHeaderInnerLite extends Assignable { + height: BN; + epoch_id: Uint8Array; + next_epoch_id: Uint8Array; + prev_state_root: Uint8Array; + outcome_root: Uint8Array; + timestamp: BN; + next_bp_hash: Uint8Array; + block_merkle_root: Uint8Array; +} + +export class BorshApprovalInner extends Enum { + endorsement?: Uint8Array; + skip?: BN; +} + +export class BorshValidatorStakeViewV1 extends Assignable { + account_id: string; + public_key: PublicKey; + stake: BN; +} + +export class BorshValidatorStakeView extends Enum { + v1?: BorshValidatorStakeViewV1; +} + +export class BorshValidatorStakeViewWrapper extends Assignable { + bps: BorshValidatorStakeView[]; +} + +export class BorshEmpty extends Assignable {} + +export class BorshPartialExecutionStatus extends Enum { + unknown?: BorshEmpty; + failure?: BorshEmpty; + successValue?: Uint8Array; + successReceiptId?: Uint8Array; +} + +export class BorshPartialExecutionOutcome extends Assignable { + receiptIds: Uint8Array[]; + gasBurnt: BN; + tokensBurnt: BN; + executorId: string; + status: BorshPartialExecutionStatus; +} + +export class BorshCryptoHash extends Assignable { + array: Uint8Array; +} + +export class BorshCryptoHashes extends Assignable { + hashes: Uint8Array[]; +} + +type Class = new (...args: any[]) => T; +export const SCHEMA = new Map([ + [ + BorshBlockHeaderInnerLite, + { + kind: 'struct', + fields: [ + ['height', 'u64'], + ['epoch_id', [32]], + ['next_epoch_id', [32]], + ['prev_state_root', [32]], + ['outcome_root', [32]], + ['timestamp', 'u64'], + ['next_bp_hash', [32]], + ['block_merkle_root', [32]], + ], + }, + ], + [ + BorshApprovalInner, + { + kind: 'enum', + field: 'enum', + values: [ + ['endorsement', [32]], + ['skip', 'u64'], + ], + }, + ], + [ + BorshValidatorStakeViewV1, + { + kind: 'struct', + fields: [ + ['account_id', 'string'], + ['public_key', PublicKey], + ['stake', 'u128'], + ], + }, + ], + [ + BorshValidatorStakeView, + { + kind: 'enum', + field: 'enum', + values: [['v1', BorshValidatorStakeViewV1]], + }, + ], + [ + BorshValidatorStakeViewWrapper, + { + kind: 'struct', + fields: [['bps', [BorshValidatorStakeView]]], + }, + ], + [ + BorshEmpty, + { + kind: 'struct', + fields: [], + }, + ], + [ + BorshCryptoHash, + { + kind: 'struct', + fields: [['hash', [32]]], + }, + ], + [ + BorshCryptoHashes, + { + kind: 'struct', + fields: [['hashes', [[32]]]], + }, + ], + [ + BorshPartialExecutionStatus, + { + kind: 'enum', + field: 'enum', + values: [ + ['unknown', BorshEmpty], + ['failure', BorshEmpty], + ['successValue', ['u8']], + ['successReceiptId', [32]], + ], + }, + ], + [ + BorshPartialExecutionOutcome, + { + kind: 'struct', + fields: [ + ['receiptIds', [[32]]], + ['gasBurnt', 'u64'], + ['tokensBurnt', 'u128'], + ['executorId', 'string'], + ['status', BorshPartialExecutionStatus], + ], + }, + ], + // Note: Copied from transactions schema + [ + PublicKey, + { + kind: 'struct', + fields: [ + ['keyType', 'u8'], + ['data', [32]], + ], + }, + ], +]); + +export function combineHash(h1: Uint8Array, h2: Uint8Array): Buffer { + const hash = sha256.create(); + hash.update(h1); + hash.update(h2); + return Buffer.from(hash.digest()); +} + +/** + * Computes the block hash given a `LightClientBlockLiteView`. Unlike the regular block header, + * the hash has to be calculated since it is not included in the response. + * + * @param block The block to compute the hash for. + */ +export function computeBlockHash(block: LightClientBlockLiteView): Buffer { + const header = block.inner_lite; + const borshHeader = new BorshBlockHeaderInnerLite({ + height: new BN(header.height), + epoch_id: bs58.decode(header.epoch_id), + next_epoch_id: bs58.decode(header.next_epoch_id), + prev_state_root: bs58.decode(header.prev_state_root), + outcome_root: bs58.decode(header.outcome_root), + timestamp: new BN(header.timestamp_nanosec), + next_bp_hash: bs58.decode(header.next_bp_hash), + block_merkle_root: bs58.decode(header.block_merkle_root), + }); + const msg = serialize(SCHEMA, borshHeader); + const innerRestHash = bs58.decode(block.inner_rest_hash); + const prevHash = bs58.decode(block.prev_block_hash); + const innerLiteHash = Buffer.from(sha256.array(msg)); + const innerHash = combineHash(innerLiteHash, innerRestHash); + const finalHash = combineHash(innerHash, prevHash); + + return finalHash; +} From ab94d181ac1ee58091f89342ea285d281a9b7a1d Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Thu, 27 Apr 2023 12:48:17 -0400 Subject: [PATCH 15/27] refactor: move borsh utils to own file --- packages/light-client/src/block.ts | 5 +- packages/light-client/src/borsh.ts | 173 +++++++++++++++++++++++++ packages/light-client/src/execution.ts | 4 +- packages/light-client/src/utils.ts | 173 +------------------------ 4 files changed, 178 insertions(+), 177 deletions(-) create mode 100644 packages/light-client/src/borsh.ts diff --git a/packages/light-client/src/block.ts b/packages/light-client/src/block.ts index 1f02f2fe4e..dbecd861f8 100644 --- a/packages/light-client/src/block.ts +++ b/packages/light-client/src/block.ts @@ -1,12 +1,11 @@ +import { computeBlockHash, combineHash } from './utils'; import { - computeBlockHash, - combineHash, SCHEMA, BorshApprovalInner, BorshValidatorStakeView, BorshValidatorStakeViewV1, BorshValidatorStakeViewWrapper, -} from './utils'; +} from './borsh'; import bs58 from 'bs58'; import { sha256 } from 'js-sha256'; import { diff --git a/packages/light-client/src/borsh.ts b/packages/light-client/src/borsh.ts new file mode 100644 index 0000000000..a733856c43 --- /dev/null +++ b/packages/light-client/src/borsh.ts @@ -0,0 +1,173 @@ +import { Assignable, Enum } from '@near-js/types'; +import { PublicKey } from '@near-js/crypto'; +import BN from 'bn.js'; + +export class BorshBlockHeaderInnerLite extends Assignable { + height: BN; + epoch_id: Uint8Array; + next_epoch_id: Uint8Array; + prev_state_root: Uint8Array; + outcome_root: Uint8Array; + timestamp: BN; + next_bp_hash: Uint8Array; + block_merkle_root: Uint8Array; +} + +export class BorshApprovalInner extends Enum { + endorsement?: Uint8Array; + skip?: BN; +} + +export class BorshValidatorStakeViewV1 extends Assignable { + account_id: string; + public_key: PublicKey; + stake: BN; +} + +export class BorshValidatorStakeView extends Enum { + v1?: BorshValidatorStakeViewV1; +} + +export class BorshValidatorStakeViewWrapper extends Assignable { + bps: BorshValidatorStakeView[]; +} + +export class BorshEmpty extends Assignable {} + +export class BorshPartialExecutionStatus extends Enum { + unknown?: BorshEmpty; + failure?: BorshEmpty; + successValue?: Uint8Array; + successReceiptId?: Uint8Array; +} + +export class BorshPartialExecutionOutcome extends Assignable { + receiptIds: Uint8Array[]; + gasBurnt: BN; + tokensBurnt: BN; + executorId: string; + status: BorshPartialExecutionStatus; +} + +export class BorshCryptoHash extends Assignable { + array: Uint8Array; +} + +export class BorshCryptoHashes extends Assignable { + hashes: Uint8Array[]; +} + +type Class = new (...args: any[]) => T; +export const SCHEMA = new Map([ + [ + BorshBlockHeaderInnerLite, + { + kind: 'struct', + fields: [ + ['height', 'u64'], + ['epoch_id', [32]], + ['next_epoch_id', [32]], + ['prev_state_root', [32]], + ['outcome_root', [32]], + ['timestamp', 'u64'], + ['next_bp_hash', [32]], + ['block_merkle_root', [32]], + ], + }, + ], + [ + BorshApprovalInner, + { + kind: 'enum', + field: 'enum', + values: [ + ['endorsement', [32]], + ['skip', 'u64'], + ], + }, + ], + [ + BorshValidatorStakeViewV1, + { + kind: 'struct', + fields: [ + ['account_id', 'string'], + ['public_key', PublicKey], + ['stake', 'u128'], + ], + }, + ], + [ + BorshValidatorStakeView, + { + kind: 'enum', + field: 'enum', + values: [['v1', BorshValidatorStakeViewV1]], + }, + ], + [ + BorshValidatorStakeViewWrapper, + { + kind: 'struct', + fields: [['bps', [BorshValidatorStakeView]]], + }, + ], + [ + BorshEmpty, + { + kind: 'struct', + fields: [], + }, + ], + [ + BorshCryptoHash, + { + kind: 'struct', + fields: [['hash', [32]]], + }, + ], + [ + BorshCryptoHashes, + { + kind: 'struct', + fields: [['hashes', [[32]]]], + }, + ], + [ + BorshPartialExecutionStatus, + { + kind: 'enum', + field: 'enum', + values: [ + ['unknown', BorshEmpty], + ['failure', BorshEmpty], + ['successValue', ['u8']], + ['successReceiptId', [32]], + ], + }, + ], + [ + BorshPartialExecutionOutcome, + { + kind: 'struct', + fields: [ + ['receiptIds', [[32]]], + ['gasBurnt', 'u64'], + ['tokensBurnt', 'u128'], + ['executorId', 'string'], + ['status', BorshPartialExecutionStatus], + ], + }, + ], + // Note: Copied from transactions schema + [ + PublicKey, + { + kind: 'struct', + fields: [ + ['keyType', 'u8'], + ['data', [32]], + ], + }, + ], +]); \ No newline at end of file diff --git a/packages/light-client/src/execution.ts b/packages/light-client/src/execution.ts index 191e1f82ac..de6c1ae3c1 100644 --- a/packages/light-client/src/execution.ts +++ b/packages/light-client/src/execution.ts @@ -16,9 +16,9 @@ import { BorshEmpty, BorshPartialExecutionOutcome, BorshPartialExecutionStatus, - combineHash, SCHEMA, -} from './utils'; +} from './borsh'; +import { combineHash } from './utils'; export interface ValidateExecutionProofParams { proof: LightClientProof; diff --git a/packages/light-client/src/utils.ts b/packages/light-client/src/utils.ts index a7817e00c1..5dc03c00f1 100644 --- a/packages/light-client/src/utils.ts +++ b/packages/light-client/src/utils.ts @@ -3,180 +3,9 @@ import { sha256 } from 'js-sha256'; import { LightClientBlockLiteView, } from '@near-js/types'; -import { Assignable, Enum } from '@near-js/types'; -import { PublicKey } from '@near-js/crypto'; import BN from 'bn.js'; import { serialize } from 'borsh'; - -export class BorshBlockHeaderInnerLite extends Assignable { - height: BN; - epoch_id: Uint8Array; - next_epoch_id: Uint8Array; - prev_state_root: Uint8Array; - outcome_root: Uint8Array; - timestamp: BN; - next_bp_hash: Uint8Array; - block_merkle_root: Uint8Array; -} - -export class BorshApprovalInner extends Enum { - endorsement?: Uint8Array; - skip?: BN; -} - -export class BorshValidatorStakeViewV1 extends Assignable { - account_id: string; - public_key: PublicKey; - stake: BN; -} - -export class BorshValidatorStakeView extends Enum { - v1?: BorshValidatorStakeViewV1; -} - -export class BorshValidatorStakeViewWrapper extends Assignable { - bps: BorshValidatorStakeView[]; -} - -export class BorshEmpty extends Assignable {} - -export class BorshPartialExecutionStatus extends Enum { - unknown?: BorshEmpty; - failure?: BorshEmpty; - successValue?: Uint8Array; - successReceiptId?: Uint8Array; -} - -export class BorshPartialExecutionOutcome extends Assignable { - receiptIds: Uint8Array[]; - gasBurnt: BN; - tokensBurnt: BN; - executorId: string; - status: BorshPartialExecutionStatus; -} - -export class BorshCryptoHash extends Assignable { - array: Uint8Array; -} - -export class BorshCryptoHashes extends Assignable { - hashes: Uint8Array[]; -} - -type Class = new (...args: any[]) => T; -export const SCHEMA = new Map([ - [ - BorshBlockHeaderInnerLite, - { - kind: 'struct', - fields: [ - ['height', 'u64'], - ['epoch_id', [32]], - ['next_epoch_id', [32]], - ['prev_state_root', [32]], - ['outcome_root', [32]], - ['timestamp', 'u64'], - ['next_bp_hash', [32]], - ['block_merkle_root', [32]], - ], - }, - ], - [ - BorshApprovalInner, - { - kind: 'enum', - field: 'enum', - values: [ - ['endorsement', [32]], - ['skip', 'u64'], - ], - }, - ], - [ - BorshValidatorStakeViewV1, - { - kind: 'struct', - fields: [ - ['account_id', 'string'], - ['public_key', PublicKey], - ['stake', 'u128'], - ], - }, - ], - [ - BorshValidatorStakeView, - { - kind: 'enum', - field: 'enum', - values: [['v1', BorshValidatorStakeViewV1]], - }, - ], - [ - BorshValidatorStakeViewWrapper, - { - kind: 'struct', - fields: [['bps', [BorshValidatorStakeView]]], - }, - ], - [ - BorshEmpty, - { - kind: 'struct', - fields: [], - }, - ], - [ - BorshCryptoHash, - { - kind: 'struct', - fields: [['hash', [32]]], - }, - ], - [ - BorshCryptoHashes, - { - kind: 'struct', - fields: [['hashes', [[32]]]], - }, - ], - [ - BorshPartialExecutionStatus, - { - kind: 'enum', - field: 'enum', - values: [ - ['unknown', BorshEmpty], - ['failure', BorshEmpty], - ['successValue', ['u8']], - ['successReceiptId', [32]], - ], - }, - ], - [ - BorshPartialExecutionOutcome, - { - kind: 'struct', - fields: [ - ['receiptIds', [[32]]], - ['gasBurnt', 'u64'], - ['tokensBurnt', 'u128'], - ['executorId', 'string'], - ['status', BorshPartialExecutionStatus], - ], - }, - ], - // Note: Copied from transactions schema - [ - PublicKey, - { - kind: 'struct', - fields: [ - ['keyType', 'u8'], - ['data', [32]], - ], - }, - ], -]); +import { BorshBlockHeaderInnerLite, SCHEMA } from './borsh'; export function combineHash(h1: Uint8Array, h2: Uint8Array): Buffer { const hash = sha256.create(); From 206df23c6aaca0fc9109b0293a1f3ad89d9a0f65 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Thu, 27 Apr 2023 12:52:33 -0400 Subject: [PATCH 16/27] chore: remove todo from updated types --- packages/light-client/src/execution.ts | 5 ++--- pnpm-lock.yaml | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/light-client/src/execution.ts b/packages/light-client/src/execution.ts index de6c1ae3c1..392fa2aad2 100644 --- a/packages/light-client/src/execution.ts +++ b/packages/light-client/src/execution.ts @@ -154,9 +154,8 @@ function computeOutcomeRoot( new BorshPartialExecutionOutcome({ receiptIds: receiptIds, gasBurnt: new BN(outcomeWithId.outcome.gas_burnt), - // TODO update with types once https://github.com/near/near-api-js/pull/1113 comes in - tokensBurnt: new BN((outcomeWithId.outcome as any).tokens_burnt), - executorId: (outcomeWithId.outcome as any).executor_id, + tokensBurnt: new BN(outcomeWithId.outcome.tokens_burnt), + executorId: outcomeWithId.outcome.executor_id, status: borshStatus(outcomeWithId.outcome.status), }); const serializedPartialOutcome = serialize(SCHEMA, partialExecOutcome); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e3e99280c..c5617d3561 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,6 +200,7 @@ importers: packages/light-client: specifiers: '@near-js/crypto': workspace:* + '@near-js/providers': workspace:* '@near-js/types': workspace:* '@types/node': ^18.11.18 bn.js: 5.2.1 @@ -217,6 +218,7 @@ importers: bs58: 4.0.1 js-sha256: 0.9.0 devDependencies: + '@near-js/providers': link:../providers '@types/node': 18.11.18 jest: 26.6.3 ts-jest: 26.5.6_vxa7amr3o4p5wmsiameezakoli From de393fb48ba99aad7baa9548728a463d87cf43c4 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Thu, 27 Apr 2023 12:56:22 -0400 Subject: [PATCH 17/27] chore: update changeset --- .changeset/forty-pets-film.md | 7 +++++++ .changeset/four-toys-cough.md | 5 ----- 2 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 .changeset/forty-pets-film.md delete mode 100644 .changeset/four-toys-cough.md diff --git a/.changeset/forty-pets-film.md b/.changeset/forty-pets-film.md new file mode 100644 index 0000000000..487355985f --- /dev/null +++ b/.changeset/forty-pets-film.md @@ -0,0 +1,7 @@ +--- +"@near-js/light-client": patch +"near-api-js": patch +"@near-js/types": patch +--- + +Implement light client block and execution validation diff --git a/.changeset/four-toys-cough.md b/.changeset/four-toys-cough.md deleted file mode 100644 index 6a389e5c82..0000000000 --- a/.changeset/four-toys-cough.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@near-js/light-client": patch ---- - -Implement light client block and proof verification From daca5d200c87cb3b6af1f4eaa9a11e5b20d7ba71 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Thu, 27 Apr 2023 13:08:52 -0400 Subject: [PATCH 18/27] test: move execution verification providers check into accounts --- packages/accounts/package.json | 1 + packages/accounts/test/providers.test.js | 5 +++++ packages/near-api-js/test/providers.test.js | 4 ---- pnpm-lock.yaml | 2 ++ 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/accounts/package.json b/packages/accounts/package.json index 11b63891de..60058180e4 100644 --- a/packages/accounts/package.json +++ b/packages/accounts/package.json @@ -31,6 +31,7 @@ }, "devDependencies": { "@near-js/keystores": "workspace:*", + "@near-js/light-client": "workspace:*", "@types/node": "^18.11.18", "bs58": "^4.0.0", "jest": "^26.0.1", diff --git a/packages/accounts/test/providers.test.js b/packages/accounts/test/providers.test.js index 68ad1d5dfe..3159ce8746 100644 --- a/packages/accounts/test/providers.test.js +++ b/packages/accounts/test/providers.test.js @@ -1,4 +1,5 @@ const { JsonRpcProvider } = require('@near-js/providers'); +const { validateExecutionProof } = require('@near-js/light-client'); const BN = require('bn.js'); const base58 = require('bs58'); @@ -155,6 +156,7 @@ test('json rpc light client proof', async () => { const block = await provider.block({ blockId: finalizedStatus.sync_info.latest_block_hash }); const lightClientHead = block.header.last_final_block; + const finalBlock = await provider.block({ blockId: lightClientHead }); let lightClientRequest = { type: 'transaction', light_client_head: lightClientHead, @@ -171,6 +173,9 @@ test('json rpc light client proof', async () => { expect(lightClientProof.outcome_root_proof).toEqual([]); expect(lightClientProof.block_proof.length).toBeGreaterThan(0); + // Validate the proof against the finalized block + validateExecutionProof(lightClientProof, base58.decode(finalBlock.header.block_merkle_root)); + // pass nonexistent hash for light client head will fail lightClientRequest = { type: 'transaction', diff --git a/packages/near-api-js/test/providers.test.js b/packages/near-api-js/test/providers.test.js index 1917b112fd..1ec4c3ddc9 100644 --- a/packages/near-api-js/test/providers.test.js +++ b/packages/near-api-js/test/providers.test.js @@ -260,7 +260,6 @@ test('json rpc light client proof', async() => { const block = await provider.block({ blockId: finalizedStatus.sync_info.latest_block_hash }); const lightClientHead = block.header.last_final_block; - const finalBlock = await provider.block({ blockId: lightClientHead }); let lightClientRequest = { type: 'transaction', light_client_head: lightClientHead, @@ -277,9 +276,6 @@ test('json rpc light client proof', async() => { expect(lightClientProof.outcome_root_proof).toEqual([]); expect(lightClientProof.block_proof.length).toBeGreaterThan(0); - // Validate the proof against the finalized block - nearApi.lightClient.validateExecutionProof(lightClientProof, base58.decode(finalBlock.header.block_merkle_root)); - // pass nonexistent hash for light client head will fail lightClientRequest = { type: 'transaction', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5617d3561..b8f2fe1638 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,6 +34,7 @@ importers: specifiers: '@near-js/crypto': workspace:* '@near-js/keystores': workspace:* + '@near-js/light-client': workspace:* '@near-js/providers': workspace:* '@near-js/signers': workspace:* '@near-js/transactions': workspace:* @@ -66,6 +67,7 @@ importers: near-abi: 0.1.1 devDependencies: '@near-js/keystores': link:../keystores + '@near-js/light-client': link:../light-client '@types/node': 18.11.18 bs58: 4.0.1 jest: 26.6.3 From 29c9ea6ee00ead154f099a4108dcf83901605560 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Fri, 5 May 2023 15:23:25 -0400 Subject: [PATCH 19/27] fix: bug with bp signature validation --- packages/light-client/src/block.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/light-client/src/block.ts b/packages/light-client/src/block.ts index dbecd861f8..575d6ded4e 100644 --- a/packages/light-client/src/block.ts +++ b/packages/light-client/src/block.ts @@ -38,10 +38,10 @@ export function validateLightClientBlock({ }: ValidateLightClientBlockParams) { // Numbers for each step references the spec: // https://github.com/near/NEPs/blob/c7d72138117ed0ab86629a27d1f84e9cce80848f/specs/ChainSpec/LightClient.md - const newBlockHash = computeBlockHash(lastKnownBlock); - const nextBlockHashDecoded = combineHash( + const currentBlockHash = computeBlockHash(newBlock); + const nextBlockHash = combineHash( bs58.decode(newBlock.next_block_inner_hash), - newBlockHash + currentBlockHash ); // (1) Verify that the block height is greater than the last known block. @@ -92,7 +92,7 @@ export function validateLightClientBlock({ const approvalEndorsement = serialize( SCHEMA, - new BorshApprovalInner({ endorsement: nextBlockHashDecoded }) + new BorshApprovalInner({ endorsement: nextBlockHash }) ); const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); @@ -102,7 +102,9 @@ export function validateLightClientBlock({ ...approvalHeightLe, ]); - publicKey.verify(approvalMessage, signature); + if (!publicKey.verify(approvalMessage, signature)) { + throw new Error(`Invalid approval message signature for validator ${blockProducers[i].account_id}`); + } } // (5) Calculates the 2/3 threshold and checks that the approved stake accumulated above From fe45242acf99a1cff52319b7204be2575c4b959f Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Fri, 5 May 2023 15:32:48 -0400 Subject: [PATCH 20/27] refactor: move block hash generation to after trivial validation --- packages/light-client/src/block.ts | 50 ++++++++++++++++-------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/packages/light-client/src/block.ts b/packages/light-client/src/block.ts index 575d6ded4e..6876a4256d 100644 --- a/packages/light-client/src/block.ts +++ b/packages/light-client/src/block.ts @@ -1,21 +1,21 @@ -import { computeBlockHash, combineHash } from './utils'; +import { computeBlockHash, combineHash } from "./utils"; import { SCHEMA, BorshApprovalInner, BorshValidatorStakeView, BorshValidatorStakeViewV1, BorshValidatorStakeViewWrapper, -} from './borsh'; -import bs58 from 'bs58'; -import { sha256 } from 'js-sha256'; +} from "./borsh"; +import bs58 from "bs58"; +import { sha256 } from "js-sha256"; import { LightClientBlockLiteView, NextLightClientBlockResponse, ValidatorStakeView, -} from '@near-js/types'; -import { PublicKey } from '@near-js/crypto'; -import BN from 'bn.js'; -import { serialize } from 'borsh'; +} from "@near-js/types"; +import { PublicKey } from "@near-js/crypto"; +import BN from "bn.js"; +import { serialize } from "borsh"; export interface ValidateLightClientBlockParams { lastKnownBlock: LightClientBlockLiteView; @@ -38,16 +38,10 @@ export function validateLightClientBlock({ }: ValidateLightClientBlockParams) { // Numbers for each step references the spec: // https://github.com/near/NEPs/blob/c7d72138117ed0ab86629a27d1f84e9cce80848f/specs/ChainSpec/LightClient.md - const currentBlockHash = computeBlockHash(newBlock); - const nextBlockHash = combineHash( - bs58.decode(newBlock.next_block_inner_hash), - currentBlockHash - ); - // (1) Verify that the block height is greater than the last known block. if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { throw new Error( - 'New block must be at least the height of the last known block' + "New block must be at least the height of the last known block" ); } @@ -58,14 +52,14 @@ export function validateLightClientBlock({ newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id ) { throw new Error( - 'New block must either be in the same epoch or the next epoch from the last known block' + "New block must either be in the same epoch or the next epoch from the last known block" ); } const blockProducers: ValidatorStakeView[] = currentBlockProducers; if (newBlock.approvals_after_next.length < blockProducers.length) { throw new Error( - 'Number of approvals for next epoch must be at least the number of current block producers' + "Number of approvals for next epoch must be at least the number of current block producers" ); } @@ -75,6 +69,12 @@ export function validateLightClientBlock({ const totalStake = new BN(0); const approvedStake = new BN(0); + const currentBlockHash = computeBlockHash(newBlock); + const nextBlockHash = combineHash( + bs58.decode(newBlock.next_block_inner_hash), + currentBlockHash + ); + for (let i = 0; i < blockProducers.length; i++) { const approval = newBlock.approvals_after_next[i]; const stake = blockProducers[i].stake; @@ -88,7 +88,7 @@ export function validateLightClientBlock({ approvedStake.iadd(new BN(stake)); const publicKey = PublicKey.fromString(blockProducers[i].public_key); - const signature = bs58.decode(approval.split(':')[1]); + const signature = bs58.decode(approval.split(":")[1]); const approvalEndorsement = serialize( SCHEMA, @@ -96,14 +96,16 @@ export function validateLightClientBlock({ ); const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); - const approvalHeightLe = approvalHeight.toArrayLike(Buffer, 'le', 8); + const approvalHeightLe = approvalHeight.toArrayLike(Buffer, "le", 8); const approvalMessage = new Uint8Array([ ...approvalEndorsement, ...approvalHeightLe, ]); if (!publicKey.verify(approvalMessage, signature)) { - throw new Error(`Invalid approval message signature for validator ${blockProducers[i].account_id}`); + throw new Error( + `Invalid approval message signature for validator ${blockProducers[i].account_id}` + ); } } @@ -111,7 +113,7 @@ export function validateLightClientBlock({ // exceeds it. const threshold = totalStake.mul(new BN(2)).div(new BN(3)); if (approvedStake <= threshold) { - throw new Error('Approved stake does not exceed the 2/3 threshold'); + throw new Error("Approved stake does not exceed the 2/3 threshold"); } // (6) Verify that if the new block is in the next epoch, the hash of the next block producers @@ -122,14 +124,14 @@ export function validateLightClientBlock({ // (3) If the block is in a new epoch, then `next_bps` must be present. if (!newBlock.next_bps) { throw new Error( - 'New block must include next block producers if a new epoch starts' + "New block must include next block producers if a new epoch starts" ); } const bpsHash = hashBlockProducers(newBlock.next_bps); if (!bpsHash.equals(bs58.decode(newBlock.inner_lite.next_bp_hash))) { - throw new Error('Next block producers hash doesn\'t match'); + throw new Error("Next block producers hash doesn't match"); } } } @@ -142,7 +144,7 @@ function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { ); if (version !== 1) { throw new Error( - 'Only version 1 of the validator stake struct is supported' + "Only version 1 of the validator stake struct is supported" ); } } From 20bff2edf3040a5a500ccb25346e7d85394ea108 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Fri, 5 May 2023 17:00:48 -0400 Subject: [PATCH 21/27] chore: lint fix --- packages/light-client/src/block.ts | 34 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/light-client/src/block.ts b/packages/light-client/src/block.ts index 6876a4256d..57142917e6 100644 --- a/packages/light-client/src/block.ts +++ b/packages/light-client/src/block.ts @@ -1,21 +1,21 @@ -import { computeBlockHash, combineHash } from "./utils"; +import { computeBlockHash, combineHash } from './utils'; import { SCHEMA, BorshApprovalInner, BorshValidatorStakeView, BorshValidatorStakeViewV1, BorshValidatorStakeViewWrapper, -} from "./borsh"; -import bs58 from "bs58"; -import { sha256 } from "js-sha256"; +} from './borsh'; +import bs58 from 'bs58'; +import { sha256 } from 'js-sha256'; import { LightClientBlockLiteView, NextLightClientBlockResponse, ValidatorStakeView, -} from "@near-js/types"; -import { PublicKey } from "@near-js/crypto"; -import BN from "bn.js"; -import { serialize } from "borsh"; +} from '@near-js/types'; +import { PublicKey } from '@near-js/crypto'; +import BN from 'bn.js'; +import { serialize } from 'borsh'; export interface ValidateLightClientBlockParams { lastKnownBlock: LightClientBlockLiteView; @@ -41,7 +41,7 @@ export function validateLightClientBlock({ // (1) Verify that the block height is greater than the last known block. if (newBlock.inner_lite.height <= lastKnownBlock.inner_lite.height) { throw new Error( - "New block must be at least the height of the last known block" + 'New block must be at least the height of the last known block' ); } @@ -52,14 +52,14 @@ export function validateLightClientBlock({ newBlock.inner_lite.epoch_id !== lastKnownBlock.inner_lite.next_epoch_id ) { throw new Error( - "New block must either be in the same epoch or the next epoch from the last known block" + 'New block must either be in the same epoch or the next epoch from the last known block' ); } const blockProducers: ValidatorStakeView[] = currentBlockProducers; if (newBlock.approvals_after_next.length < blockProducers.length) { throw new Error( - "Number of approvals for next epoch must be at least the number of current block producers" + 'Number of approvals for next epoch must be at least the number of current block producers' ); } @@ -88,7 +88,7 @@ export function validateLightClientBlock({ approvedStake.iadd(new BN(stake)); const publicKey = PublicKey.fromString(blockProducers[i].public_key); - const signature = bs58.decode(approval.split(":")[1]); + const signature = bs58.decode(approval.split(':')[1]); const approvalEndorsement = serialize( SCHEMA, @@ -96,7 +96,7 @@ export function validateLightClientBlock({ ); const approvalHeight: BN = new BN(newBlock.inner_lite.height + 2); - const approvalHeightLe = approvalHeight.toArrayLike(Buffer, "le", 8); + const approvalHeightLe = approvalHeight.toArrayLike(Buffer, 'le', 8); const approvalMessage = new Uint8Array([ ...approvalEndorsement, ...approvalHeightLe, @@ -113,7 +113,7 @@ export function validateLightClientBlock({ // exceeds it. const threshold = totalStake.mul(new BN(2)).div(new BN(3)); if (approvedStake <= threshold) { - throw new Error("Approved stake does not exceed the 2/3 threshold"); + throw new Error('Approved stake does not exceed the 2/3 threshold'); } // (6) Verify that if the new block is in the next epoch, the hash of the next block producers @@ -124,14 +124,14 @@ export function validateLightClientBlock({ // (3) If the block is in a new epoch, then `next_bps` must be present. if (!newBlock.next_bps) { throw new Error( - "New block must include next block producers if a new epoch starts" + 'New block must include next block producers if a new epoch starts' ); } const bpsHash = hashBlockProducers(newBlock.next_bps); if (!bpsHash.equals(bs58.decode(newBlock.inner_lite.next_bp_hash))) { - throw new Error("Next block producers hash doesn't match"); + throw new Error('Next block producers hash doesn\'t match'); } } } @@ -144,7 +144,7 @@ function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { ); if (version !== 1) { throw new Error( - "Only version 1 of the validator stake struct is supported" + 'Only version 1 of the validator stake struct is supported' ); } } From 0559e2391290c2a79de4a27ce8c6e99a685e284c Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Tue, 23 May 2023 19:44:44 -0400 Subject: [PATCH 22/27] fix: bn comparison bug --- packages/light-client/src/block.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/light-client/src/block.ts b/packages/light-client/src/block.ts index 57142917e6..baab3cda67 100644 --- a/packages/light-client/src/block.ts +++ b/packages/light-client/src/block.ts @@ -112,7 +112,7 @@ export function validateLightClientBlock({ // (5) Calculates the 2/3 threshold and checks that the approved stake accumulated above // exceeds it. const threshold = totalStake.mul(new BN(2)).div(new BN(3)); - if (approvedStake <= threshold) { + if (approvedStake.lte(threshold)) { throw new Error('Approved stake does not exceed the 2/3 threshold'); } From d867179e7952a87dc5e3734ab1825a890cb6d84f Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Tue, 23 May 2023 20:11:03 -0400 Subject: [PATCH 23/27] fix: execution test parameter format from changes --- packages/accounts/test/providers.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts/test/providers.test.js b/packages/accounts/test/providers.test.js index 3159ce8746..2b38bffa5b 100644 --- a/packages/accounts/test/providers.test.js +++ b/packages/accounts/test/providers.test.js @@ -174,7 +174,7 @@ test('json rpc light client proof', async () => { expect(lightClientProof.block_proof.length).toBeGreaterThan(0); // Validate the proof against the finalized block - validateExecutionProof(lightClientProof, base58.decode(finalBlock.header.block_merkle_root)); + validateExecutionProof({ proof: lightClientProof, blockMerkleRoot: base58.decode(finalBlock.header.block_merkle_root) }); // pass nonexistent hash for light client head will fail lightClientRequest = { From f766671ecdb9089981758c54d90bf76baa8b03c5 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Fri, 2 Jun 2023 12:42:43 -0400 Subject: [PATCH 24/27] fix: changes based on review comments --- packages/light-client/src/block.ts | 5 +---- packages/light-client/src/borsh.ts | 2 +- packages/types/src/assignable.ts | 3 +++ 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/light-client/src/block.ts b/packages/light-client/src/block.ts index baab3cda67..4603047a5b 100644 --- a/packages/light-client/src/block.ts +++ b/packages/light-client/src/block.ts @@ -139,10 +139,7 @@ export function validateLightClientBlock({ function hashBlockProducers(bps: ValidatorStakeView[]): Buffer { const borshBps: BorshValidatorStakeView[] = bps.map((bp) => { if (bp.validator_stake_struct_version) { - const version = parseInt( - bp.validator_stake_struct_version.slice(1) - ); - if (version !== 1) { + if (bp.validator_stake_struct_version !== 'V1') { throw new Error( 'Only version 1 of the validator stake struct is supported' ); diff --git a/packages/light-client/src/borsh.ts b/packages/light-client/src/borsh.ts index a733856c43..2a6a53fdb3 100644 --- a/packages/light-client/src/borsh.ts +++ b/packages/light-client/src/borsh.ts @@ -170,4 +170,4 @@ export const SCHEMA = new Map([ ], }, ], -]); \ No newline at end of file +]); diff --git a/packages/types/src/assignable.ts b/packages/types/src/assignable.ts index 89fb5eb27f..fe0aaf9723 100644 --- a/packages/types/src/assignable.ts +++ b/packages/types/src/assignable.ts @@ -14,6 +14,9 @@ export abstract class Enum { throw new Error('Enum can only take single value'); } Object.keys(properties).map((key: string) => { + if (key === 'enum') { + throw new Error('Enum can not take key named enum'); + } (this as any)[key] = properties[key]; this.enum = key; }); From a8e19d890f57d7494ab87a3690a4f8c57d34d96b Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Fri, 2 Jun 2023 12:58:02 -0400 Subject: [PATCH 25/27] chore: empty commit to re-trigger flaky CI From d97a80118a44fbca5bf63162a3d0c7edc59901f7 Mon Sep 17 00:00:00 2001 From: vikinatora Date: Mon, 26 Feb 2024 16:04:46 +0200 Subject: [PATCH 26/27] fix: pnpm-lock.yaml --- pnpm-lock.yaml | 3653 ++++++++++++++++++++++++------------------------ 1 file changed, 1794 insertions(+), 1859 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82d922a0cc..eaf2a74986 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,668 +1,487 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false +lockfileVersion: 5.4 importers: .: + specifiers: + '@changesets/changelog-github': 0.4.6 + '@changesets/cli': 2.24.4 + '@commitlint/cli': 17.0.3 + '@commitlint/config-conventional': 17.0.3 + '@typescript-eslint/eslint-plugin': 5.31.0 + '@typescript-eslint/parser': 5.31.0 + commitlint: 17.0.3 + eslint: 8.20.0 + husky: 7.0.4 + rimraf: 3.0.2 + turbo: 1.4.5 + typedoc: 0.25.3 + typescript: 4.9.4 devDependencies: - '@changesets/changelog-github': - specifier: 0.4.6 - version: 0.4.6 - '@changesets/cli': - specifier: 2.24.4 - version: 2.24.4 - '@commitlint/cli': - specifier: 17.0.3 - version: 17.0.3 - '@commitlint/config-conventional': - specifier: 17.0.3 - version: 17.0.3 - '@typescript-eslint/eslint-plugin': - specifier: 5.31.0 - version: 5.31.0(@typescript-eslint/parser@5.31.0)(eslint@8.20.0)(typescript@4.9.4) - '@typescript-eslint/parser': - specifier: 5.31.0 - version: 5.31.0(eslint@8.20.0)(typescript@4.9.4) - commitlint: - specifier: 17.0.3 - version: 17.0.3 - eslint: - specifier: 8.20.0 - version: 8.20.0 - husky: - specifier: 7.0.4 - version: 7.0.4 - rimraf: - specifier: 3.0.2 - version: 3.0.2 - turbo: - specifier: 1.4.5 - version: 1.4.5 - typedoc: - specifier: 0.25.3 - version: 0.25.3(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@changesets/changelog-github': 0.4.6 + '@changesets/cli': 2.24.4 + '@commitlint/cli': 17.0.3 + '@commitlint/config-conventional': 17.0.3 + '@typescript-eslint/eslint-plugin': 5.31.0_xge7lzmu5bkowl5j34qyhhv7sm + '@typescript-eslint/parser': 5.31.0_et63c6hdcbxumioq5v75e5l7ca + commitlint: 17.0.3 + eslint: 8.20.0 + husky: 7.0.4 + rimraf: 3.0.2 + turbo: 1.4.5 + typedoc: 0.25.3_typescript@4.9.4 + typescript: 4.9.4 packages/accounts: + specifiers: + '@near-js/crypto': workspace:* + '@near-js/keystores': workspace:* + '@near-js/light-client': workspace:* + '@near-js/providers': workspace:* + '@near-js/signers': workspace:* + '@near-js/transactions': workspace:* + '@near-js/types': workspace:* + '@near-js/utils': workspace:* + '@types/node': 18.11.18 + ajv: 8.11.2 + ajv-formats: 2.1.1 + bn.js: 5.2.1 + borsh: 1.0.0 + bs58: 4.0.0 + depd: 2.0.0 + jest: 26.0.1 + lru_map: 0.4.1 + near-abi: 0.1.1 + near-hello: 0.5.1 + near-workspaces: 3.4.0 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/providers': - specifier: workspace:* - version: link:../providers - '@near-js/signers': - specifier: workspace:* - version: link:../signers - '@near-js/transactions': - specifier: workspace:* - version: link:../transactions - '@near-js/types': - specifier: workspace:* - version: link:../types - '@near-js/utils': - specifier: workspace:* - version: link:../utils - ajv: - specifier: 8.11.2 - version: 8.11.2 - ajv-formats: - specifier: 2.1.1 - version: 2.1.1(ajv@8.11.2) - bn.js: - specifier: 5.2.1 - version: 5.2.1 - borsh: - specifier: 1.0.0 - version: 1.0.0 - depd: - specifier: 2.0.0 - version: 2.0.0 - lru_map: - specifier: 0.4.1 - version: 0.4.1 - near-abi: - specifier: 0.1.1 - version: 0.1.1 + '@near-js/crypto': link:../crypto + '@near-js/providers': link:../providers + '@near-js/signers': link:../signers + '@near-js/transactions': link:../transactions + '@near-js/types': link:../types + '@near-js/utils': link:../utils + ajv: 8.11.2 + ajv-formats: 2.1.1_ajv@8.11.2 + bn.js: 5.2.1 + borsh: 1.0.0 + depd: 2.0.0 + lru_map: 0.4.1 + near-abi: 0.1.1 devDependencies: - '@near-js/keystores': - specifier: workspace:* - version: link:../keystores - '@near-js/light-client': - specifier: workspace:* - version: link:../light-client - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - bs58: - specifier: 4.0.0 - version: 4.0.0 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - near-hello: - specifier: 0.5.1 - version: 0.5.1 - near-workspaces: - specifier: 3.4.0 - version: 3.4.0 - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@near-js/keystores': link:../keystores + '@near-js/light-client': link:../light-client + '@types/node': 18.11.18 + bs58: 4.0.0 + jest: 26.0.1 + near-hello: 0.5.1 + near-workspaces: 3.4.0 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/biometric-ed25519: + specifiers: + '@aws-crypto/sha256-js': 4.0.0 + '@aws-sdk/types': 3.329.0 + '@hexagon/base64': 1.1.26 + '@near-js/crypto': workspace:* + '@near-js/utils': workspace:* + '@noble/curves': 1.2.0 + '@types/node': 18.11.18 + asn1-parser: 1.1.8 + bn.js: 5.2.1 + borsh: 1.0.0 + buffer: 6.0.3 + fido2-lib: 3.4.1 dependencies: - '@aws-crypto/sha256-js': - specifier: 4.0.0 - version: 4.0.0 - '@hexagon/base64': - specifier: 1.1.26 - version: 1.1.26 - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/utils': - specifier: workspace:* - version: link:../utils - '@noble/curves': - specifier: 1.2.0 - version: 1.2.0 - asn1-parser: - specifier: 1.1.8 - version: 1.1.8 - bn.js: - specifier: 5.2.1 - version: 5.2.1 - borsh: - specifier: 1.0.0 - version: 1.0.0 - buffer: - specifier: 6.0.3 - version: 6.0.3 - fido2-lib: - specifier: 3.4.1 - version: 3.4.1 + '@aws-crypto/sha256-js': 4.0.0 + '@hexagon/base64': 1.1.26 + '@near-js/crypto': link:../crypto + '@near-js/utils': link:../utils + '@noble/curves': 1.2.0 + asn1-parser: 1.1.8 + bn.js: 5.2.1 + borsh: 1.0.0 + buffer: 6.0.3 + fido2-lib: 3.4.1 devDependencies: - '@aws-sdk/types': - specifier: 3.329.0 - version: 3.329.0 - '@types/node': - specifier: 18.11.18 - version: 18.11.18 + '@aws-sdk/types': 3.329.0 + '@types/node': 18.11.18 packages/cookbook: - dependencies: - '@near-js/accounts': - specifier: workspace:* - version: link:../accounts - '@near-js/keystores-node': - specifier: workspace:* - version: link:../keystores-node - '@near-js/providers': - specifier: workspace:* - version: link:../providers - '@near-js/signers': - specifier: workspace:* - version: link:../signers - '@near-js/transactions': - specifier: workspace:* - version: link:../transactions - bn.js: - specifier: 5.2.1 - version: 5.2.1 - chalk: - specifier: 4.1.1 - version: 4.1.1 - homedir: - specifier: 0.6.0 - version: 0.6.0 - near-api-js: - specifier: workspace:* - version: link:../near-api-js + specifiers: + '@near-js/accounts': workspace:* + '@near-js/keystores-node': workspace:* + '@near-js/providers': workspace:* + '@near-js/signers': workspace:* + '@near-js/transactions': workspace:* + bn.js: 5.2.1 + chalk: 4.1.1 + homedir: 0.6.0 + near-api-js: workspace:* + dependencies: + '@near-js/accounts': link:../accounts + '@near-js/keystores-node': link:../keystores-node + '@near-js/providers': link:../providers + '@near-js/signers': link:../signers + '@near-js/transactions': link:../transactions + bn.js: 5.2.1 + chalk: 4.1.1 + homedir: 0.6.0 + near-api-js: link:../near-api-js packages/crypto: + specifiers: + '@near-js/types': workspace:* + '@near-js/utils': workspace:* + '@noble/curves': 1.2.0 + '@types/node': 18.11.18 + bn.js: 5.2.1 + borsh: 1.0.0 + jest: 26.0.1 + randombytes: 2.1.0 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/types': - specifier: workspace:* - version: link:../types - '@near-js/utils': - specifier: workspace:* - version: link:../utils - '@noble/curves': - specifier: 1.2.0 - version: 1.2.0 - bn.js: - specifier: 5.2.1 - version: 5.2.1 - borsh: - specifier: 1.0.0 - version: 1.0.0 - randombytes: - specifier: 2.1.0 - version: 2.1.0 + '@near-js/types': link:../types + '@near-js/utils': link:../utils + '@noble/curves': 1.2.0 + bn.js: 5.2.1 + borsh: 1.0.0 + randombytes: 2.1.0 devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/iframe-rpc: + specifiers: + '@types/node': 18.11.18 + events: 3.3.0 dependencies: - events: - specifier: 3.3.0 - version: 3.3.0 + events: 3.3.0 devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 + '@types/node': 18.11.18 packages/keystores: + specifiers: + '@near-js/crypto': workspace:* + '@near-js/types': workspace:* + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/types': - specifier: workspace:* - version: link:../types + '@near-js/crypto': link:../crypto + '@near-js/types': link:../types devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/keystores-browser: + specifiers: + '@near-js/crypto': workspace:* + '@near-js/keystores': workspace:* + jest: 26.0.1 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/keystores': - specifier: workspace:* - version: link:../keystores + '@near-js/crypto': link:../crypto + '@near-js/keystores': link:../keystores devDependencies: - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/keystores-node: + specifiers: + '@near-js/crypto': workspace:* + '@near-js/keystores': workspace:* + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/keystores': - specifier: workspace:* - version: link:../keystores + '@near-js/crypto': link:../crypto + '@near-js/keystores': link:../keystores devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/light-client: - dependencies: - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/types': - specifier: workspace:* - version: link:../types - bn.js: - specifier: 5.2.1 - version: 5.2.1 - borsh: - specifier: ^0.7.0 - version: 0.7.0 - bs58: - specifier: ^4.0.0 - version: 4.0.0 - js-sha256: - specifier: ^0.9.0 - version: 0.9.0 + specifiers: + '@near-js/crypto': workspace:* + '@near-js/providers': workspace:* + '@near-js/types': workspace:* + '@types/node': ^18.11.18 + bn.js: 5.2.1 + borsh: ^0.7.0 + bs58: ^4.0.0 + jest: ^26.0.1 + js-sha256: ^0.9.0 + ts-jest: ^26.5.6 + typescript: ^4.9.4 + dependencies: + '@near-js/crypto': link:../crypto + '@near-js/types': link:../types + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + js-sha256: 0.9.0 devDependencies: - '@near-js/providers': - specifier: workspace:* - version: link:../providers - '@types/node': - specifier: ^18.11.18 - version: 18.11.18 - jest: - specifier: ^26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: ^26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: ^4.9.4 - version: 4.9.4 + '@near-js/providers': link:../providers + '@types/node': 18.19.18 + jest: 26.6.3 + ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai + typescript: 4.9.5 packages/near-api-js: - dependencies: - '@near-js/accounts': - specifier: workspace:* - version: link:../accounts - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/keystores': - specifier: workspace:* - version: link:../keystores - '@near-js/keystores-browser': - specifier: workspace:* - version: link:../keystores-browser - '@near-js/keystores-node': - specifier: workspace:* - version: link:../keystores-node - '@near-js/light-client': - specifier: workspace:* - version: link:../light-client - '@near-js/providers': - specifier: workspace:* - version: link:../providers - '@near-js/signers': - specifier: workspace:* - version: link:../signers - '@near-js/transactions': - specifier: workspace:* - version: link:../transactions - '@near-js/types': - specifier: workspace:* - version: link:../types - '@near-js/utils': - specifier: workspace:* - version: link:../utils - '@near-js/wallet-account': - specifier: workspace:* - version: link:../wallet-account - '@noble/curves': - specifier: 1.2.0 - version: 1.2.0 - ajv: - specifier: 8.11.2 - version: 8.11.2 - ajv-formats: - specifier: 2.1.1 - version: 2.1.1(ajv@8.11.2) - bn.js: - specifier: 5.2.1 - version: 5.2.1 - borsh: - specifier: 1.0.0 - version: 1.0.0 - depd: - specifier: 2.0.0 - version: 2.0.0 - http-errors: - specifier: 1.7.2 - version: 1.7.2 - near-abi: - specifier: 0.1.1 - version: 0.1.1 - node-fetch: - specifier: 2.6.7 - version: 2.6.7 + specifiers: + '@near-js/accounts': workspace:* + '@near-js/crypto': workspace:* + '@near-js/keystores': workspace:* + '@near-js/keystores-browser': workspace:* + '@near-js/keystores-node': workspace:* + '@near-js/light-client': workspace:* + '@near-js/providers': workspace:* + '@near-js/signers': workspace:* + '@near-js/transactions': workspace:* + '@near-js/types': workspace:* + '@near-js/utils': workspace:* + '@near-js/wallet-account': workspace:* + '@noble/curves': 1.2.0 + '@types/bn.js': 5.1.0 + '@types/http-errors': 1.6.1 + '@types/node': 18.11.18 + ajv: 8.11.2 + ajv-formats: 2.1.1 + bn.js: 5.2.1 + borsh: 1.0.0 + browserify: 16.2.3 + bs58: 4.0.0 + bundlewatch: 0.3.1 + concurrently: 7.3.0 + danger: 11.1.1 + danger-plugin-yarn: 1.3.2 + depd: 2.0.0 + http-errors: 1.7.2 + in-publish: 2.0.0 + jest: 26.0.1 + localstorage-memory: 1.0.3 + near-abi: 0.1.1 + near-hello: 0.5.1 + near-workspaces: 3.4.0 + node-fetch: 2.6.7 + rimraf: 3.0.2 + semver: 7.1.1 + ts-jest: 26.5.6 + uglifyify: 5.0.1 + dependencies: + '@near-js/accounts': link:../accounts + '@near-js/crypto': link:../crypto + '@near-js/keystores': link:../keystores + '@near-js/keystores-browser': link:../keystores-browser + '@near-js/keystores-node': link:../keystores-node + '@near-js/light-client': link:../light-client + '@near-js/providers': link:../providers + '@near-js/signers': link:../signers + '@near-js/transactions': link:../transactions + '@near-js/types': link:../types + '@near-js/utils': link:../utils + '@near-js/wallet-account': link:../wallet-account + '@noble/curves': 1.2.0 + ajv: 8.11.2 + ajv-formats: 2.1.1_ajv@8.11.2 + bn.js: 5.2.1 + borsh: 1.0.0 + depd: 2.0.0 + http-errors: 1.7.2 + near-abi: 0.1.1 + node-fetch: 2.6.7 devDependencies: - '@types/bn.js': - specifier: 5.1.0 - version: 5.1.0 - '@types/http-errors': - specifier: 1.6.1 - version: 1.6.1 - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - browserify: - specifier: 16.2.3 - version: 16.2.3 - bs58: - specifier: 4.0.0 - version: 4.0.0 - bundlewatch: - specifier: 0.3.1 - version: 0.3.1 - concurrently: - specifier: 7.3.0 - version: 7.3.0 - danger: - specifier: 11.1.1 - version: 11.1.1 - danger-plugin-yarn: - specifier: 1.3.2 - version: 1.3.2 - in-publish: - specifier: 2.0.0 - version: 2.0.0 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - localstorage-memory: - specifier: 1.0.3 - version: 1.0.3 - near-hello: - specifier: 0.5.1 - version: 0.5.1 - near-workspaces: - specifier: 3.4.0 - version: 3.4.0 - rimraf: - specifier: 3.0.2 - version: 3.0.2 - semver: - specifier: 7.1.1 - version: 7.1.1 - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - uglifyify: - specifier: 5.0.1 - version: 5.0.1 + '@types/bn.js': 5.1.0 + '@types/http-errors': 1.6.1 + '@types/node': 18.11.18 + browserify: 16.2.3 + bs58: 4.0.0 + bundlewatch: 0.3.1 + concurrently: 7.3.0 + danger: 11.1.1 + danger-plugin-yarn: 1.3.2 + in-publish: 2.0.0 + jest: 26.0.1 + localstorage-memory: 1.0.3 + near-hello: 0.5.1 + near-workspaces: 3.4.0 + rimraf: 3.0.2 + semver: 7.1.1 + ts-jest: 26.5.6_jest@26.0.1 + uglifyify: 5.0.1 packages/providers: + specifiers: + '@near-js/transactions': workspace:* + '@near-js/types': workspace:* + '@near-js/utils': workspace:* + '@types/node': 18.11.18 + bn.js: 5.2.1 + borsh: 1.0.0 + http-errors: 1.7.2 + jest: 26.0.1 + near-workspaces: 3.4.0 + node-fetch: 2.6.7 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/transactions': - specifier: workspace:* - version: link:../transactions - '@near-js/types': - specifier: workspace:* - version: link:../types - '@near-js/utils': - specifier: workspace:* - version: link:../utils - bn.js: - specifier: 5.2.1 - version: 5.2.1 - borsh: - specifier: 1.0.0 - version: 1.0.0 - http-errors: - specifier: 1.7.2 - version: 1.7.2 + '@near-js/transactions': link:../transactions + '@near-js/types': link:../types + '@near-js/utils': link:../utils + bn.js: 5.2.1 + borsh: 1.0.0 + http-errors: 1.7.2 optionalDependencies: - node-fetch: - specifier: 2.6.7 - version: 2.6.7 + node-fetch: 2.6.7 devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - near-workspaces: - specifier: 3.4.0 - version: 3.4.0 - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@types/node': 18.11.18 + jest: 26.0.1 + near-workspaces: 3.4.0 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/signers: + specifiers: + '@near-js/crypto': workspace:* + '@near-js/keystores': workspace:* + '@noble/hashes': 1.3.3 + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/keystores': - specifier: workspace:* - version: link:../keystores - '@noble/hashes': - specifier: 1.3.3 - version: 1.3.3 + '@near-js/crypto': link:../crypto + '@near-js/keystores': link:../keystores + '@noble/hashes': 1.3.3 devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/transactions: + specifiers: + '@near-js/crypto': workspace:* + '@near-js/keystores': workspace:* + '@near-js/signers': workspace:* + '@near-js/types': workspace:* + '@near-js/utils': workspace:* + '@noble/hashes': 1.3.3 + '@types/node': 18.11.18 + bn.js: 5.2.1 + borsh: 1.0.0 + jest: 26.0.1 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/signers': - specifier: workspace:* - version: link:../signers - '@near-js/types': - specifier: workspace:* - version: link:../types - '@near-js/utils': - specifier: workspace:* - version: link:../utils - '@noble/hashes': - specifier: 1.3.3 - version: 1.3.3 - bn.js: - specifier: 5.2.1 - version: 5.2.1 - borsh: - specifier: 1.0.0 - version: 1.0.0 + '@near-js/crypto': link:../crypto + '@near-js/signers': link:../signers + '@near-js/types': link:../types + '@near-js/utils': link:../utils + '@noble/hashes': 1.3.3 + bn.js: 5.2.1 + borsh: 1.0.0 devDependencies: - '@near-js/keystores': - specifier: workspace:* - version: link:../keystores - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@near-js/keystores': link:../keystores + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/types: + specifiers: + '@types/node': 18.11.18 + bn.js: 5.2.1 + jest: 26.0.1 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - bn.js: - specifier: 5.2.1 - version: 5.2.1 + bn.js: 5.2.1 devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/utils: + specifiers: + '@near-js/types': workspace:* + '@types/node': 18.11.18 + bn.js: 5.2.1 + bs58: 4.0.0 + depd: 2.0.0 + jest: 26.0.1 + mustache: 4.0.0 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/types': - specifier: workspace:* - version: link:../types - bn.js: - specifier: 5.2.1 - version: 5.2.1 - bs58: - specifier: 4.0.0 - version: 4.0.0 - depd: - specifier: 2.0.0 - version: 2.0.0 - mustache: - specifier: 4.0.0 - version: 4.0.0 + '@near-js/types': link:../types + bn.js: 5.2.1 + bs58: 4.0.0 + depd: 2.0.0 + mustache: 4.0.0 devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/wallet-account: + specifiers: + '@near-js/accounts': workspace:* + '@near-js/crypto': workspace:* + '@near-js/keystores': workspace:* + '@near-js/signers': workspace:* + '@near-js/transactions': workspace:* + '@near-js/types': workspace:* + '@near-js/utils': workspace:* + '@types/node': 18.11.18 + bn.js: 5.2.1 + borsh: 1.0.0 + jest: 26.0.1 + localstorage-memory: 1.0.3 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: - '@near-js/accounts': - specifier: workspace:* - version: link:../accounts - '@near-js/crypto': - specifier: workspace:* - version: link:../crypto - '@near-js/keystores': - specifier: workspace:* - version: link:../keystores - '@near-js/signers': - specifier: workspace:* - version: link:../signers - '@near-js/transactions': - specifier: workspace:* - version: link:../transactions - '@near-js/types': - specifier: workspace:* - version: link:../types - '@near-js/utils': - specifier: workspace:* - version: link:../utils - bn.js: - specifier: 5.2.1 - version: 5.2.1 - borsh: - specifier: 1.0.0 - version: 1.0.0 + '@near-js/accounts': link:../accounts + '@near-js/crypto': link:../crypto + '@near-js/keystores': link:../keystores + '@near-js/signers': link:../signers + '@near-js/transactions': link:../transactions + '@near-js/types': link:../types + '@near-js/utils': link:../utils + bn.js: 5.2.1 + borsh: 1.0.0 devDependencies: - '@types/node': - specifier: 18.11.18 - version: 18.11.18 - jest: - specifier: 26.0.1 - version: 26.0.1(ts-node@10.9.2) - localstorage-memory: - specifier: 1.0.3 - version: 1.0.3 - ts-jest: - specifier: 26.5.6 - version: 26.5.6(jest@26.0.1)(typescript@4.9.4) - typescript: - specifier: 4.9.4 - version: 4.9.4 + '@types/node': 18.11.18 + jest: 26.0.1 + localstorage-memory: 1.0.3 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages: - /@aashutoshrathi/word-wrap@1.2.6: + /@aashutoshrathi/word-wrap/1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} dev: true - /@ampproject/remapping@2.2.1: + /@ampproject/remapping/2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: @@ -670,7 +489,7 @@ packages: '@jridgewell/trace-mapping': 0.3.23 dev: true - /@aws-crypto/sha256-js@4.0.0: + /@aws-crypto/sha256-js/4.0.0: resolution: {integrity: sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==} dependencies: '@aws-crypto/util': 4.0.0 @@ -678,7 +497,7 @@ packages: tslib: 1.14.1 dev: false - /@aws-crypto/util@4.0.0: + /@aws-crypto/util/4.0.0: resolution: {integrity: sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==} dependencies: '@aws-sdk/types': 3.329.0 @@ -686,19 +505,19 @@ packages: tslib: 1.14.1 dev: false - /@aws-sdk/types@3.329.0: + /@aws-sdk/types/3.329.0: resolution: {integrity: sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - /@aws-sdk/util-utf8-browser@3.259.0: + /@aws-sdk/util-utf8-browser/3.259.0: resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} dependencies: tslib: 2.6.2 dev: false - /@babel/code-frame@7.23.5: + /@babel/code-frame/7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: @@ -706,12 +525,12 @@ packages: chalk: 2.4.2 dev: true - /@babel/compat-data@7.23.5: + /@babel/compat-data/7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.9: + /@babel/core/7.23.9: resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} engines: {node: '>=6.9.0'} dependencies: @@ -719,7 +538,7 @@ packages: '@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/core@7.23.9) + '@babel/helper-module-transforms': 7.23.3_@babel+core@7.23.9 '@babel/helpers': 7.23.9 '@babel/parser': 7.23.9 '@babel/template': 7.23.9 @@ -734,7 +553,7 @@ packages: - supports-color dev: true - /@babel/generator@7.23.6: + /@babel/generator/7.23.6: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: @@ -744,7 +563,7 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets@7.23.6: + /@babel/helper-compilation-targets/7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: @@ -755,12 +574,12 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-environment-visitor@7.22.20: + /@babel/helper-environment-visitor/7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-function-name@7.23.0: + /@babel/helper-function-name/7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: @@ -768,21 +587,21 @@ packages: '@babel/types': 7.23.9 dev: true - /@babel/helper-hoist-variables@7.22.5: + /@babel/helper-hoist-variables/7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.9 dev: true - /@babel/helper-module-imports@7.22.15: + /@babel/helper-module-imports/7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.9 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + /@babel/helper-module-transforms/7.23.3_@babel+core@7.23.9: resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -796,41 +615,41 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/helper-plugin-utils@7.22.5: + /@babel/helper-plugin-utils/7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-simple-access@7.22.5: + /@babel/helper-simple-access/7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.9 dev: true - /@babel/helper-split-export-declaration@7.22.6: + /@babel/helper-split-export-declaration/7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.9 dev: true - /@babel/helper-string-parser@7.23.4: + /@babel/helper-string-parser/7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.22.20: + /@babel/helper-validator-identifier/7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.23.5: + /@babel/helper-validator-option/7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.23.9: + /@babel/helpers/7.23.9: resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} engines: {node: '>=6.9.0'} dependencies: @@ -841,7 +660,7 @@ packages: - supports-color dev: true - /@babel/highlight@7.23.4: + /@babel/highlight/7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: @@ -850,7 +669,7 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.23.9: + /@babel/parser/7.23.9: resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} engines: {node: '>=6.0.0'} hasBin: true @@ -858,7 +677,7 @@ packages: '@babel/types': 7.23.9 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.23.9: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -867,7 +686,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.23.9: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -876,7 +695,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.23.9: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -885,7 +704,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.23.9: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -894,7 +713,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.23.9: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -903,7 +722,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.23.9: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -912,7 +731,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.23.9: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -921,7 +740,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.23.9: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -930,7 +749,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.23.9: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -939,7 +758,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.23.9: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -948,7 +767,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.23.9: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -957,7 +776,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.23.9: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -967,14 +786,14 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/runtime@7.23.9: + /@babel/runtime/7.23.9: resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: true - /@babel/template@7.23.9: + /@babel/template/7.23.9: resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} engines: {node: '>=6.9.0'} dependencies: @@ -983,7 +802,7 @@ packages: '@babel/types': 7.23.9 dev: true - /@babel/traverse@7.23.9: + /@babel/traverse/7.23.9: resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} engines: {node: '>=6.9.0'} dependencies: @@ -1001,7 +820,7 @@ packages: - supports-color dev: true - /@babel/types@7.23.9: + /@babel/types/7.23.9: resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} engines: {node: '>=6.9.0'} dependencies: @@ -1010,11 +829,11 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage@0.2.3: + /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@cbor-extract/cbor-extract-darwin-arm64@2.2.0: + /@cbor-extract/cbor-extract-darwin-arm64/2.2.0: resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==} cpu: [arm64] os: [darwin] @@ -1022,7 +841,7 @@ packages: dev: false optional: true - /@cbor-extract/cbor-extract-darwin-x64@2.2.0: + /@cbor-extract/cbor-extract-darwin-x64/2.2.0: resolution: {integrity: sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==} cpu: [x64] os: [darwin] @@ -1030,23 +849,23 @@ packages: dev: false optional: true - /@cbor-extract/cbor-extract-linux-arm64@2.2.0: - resolution: {integrity: sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==} - cpu: [arm64] + /@cbor-extract/cbor-extract-linux-arm/2.2.0: + resolution: {integrity: sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==} + cpu: [arm] os: [linux] requiresBuild: true dev: false optional: true - /@cbor-extract/cbor-extract-linux-arm@2.2.0: - resolution: {integrity: sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==} - cpu: [arm] + /@cbor-extract/cbor-extract-linux-arm64/2.2.0: + resolution: {integrity: sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==} + cpu: [arm64] os: [linux] requiresBuild: true dev: false optional: true - /@cbor-extract/cbor-extract-linux-x64@2.2.0: + /@cbor-extract/cbor-extract-linux-x64/2.2.0: resolution: {integrity: sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==} cpu: [x64] os: [linux] @@ -1054,7 +873,7 @@ packages: dev: false optional: true - /@cbor-extract/cbor-extract-win32-x64@2.2.0: + /@cbor-extract/cbor-extract-win32-x64/2.2.0: resolution: {integrity: sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==} cpu: [x64] os: [win32] @@ -1062,7 +881,7 @@ packages: dev: false optional: true - /@changesets/apply-release-plan@6.1.4: + /@changesets/apply-release-plan/6.1.4: resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} dependencies: '@babel/runtime': 7.23.9 @@ -1080,7 +899,7 @@ packages: semver: 7.6.0 dev: true - /@changesets/assemble-release-plan@5.2.4: + /@changesets/assemble-release-plan/5.2.4: resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} dependencies: '@babel/runtime': 7.23.9 @@ -1091,13 +910,13 @@ packages: semver: 7.6.0 dev: true - /@changesets/changelog-git@0.1.14: + /@changesets/changelog-git/0.1.14: resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} dependencies: '@changesets/types': 5.2.1 dev: true - /@changesets/changelog-github@0.4.6: + /@changesets/changelog-github/0.4.6: resolution: {integrity: sha512-ahR/+o3OPodzfG9kucEMU/tEtBgwy6QoJiWi1sDBPme8n3WjT6pBlbhqNYpWAJKilomwfjBGY0MTUTs6r9d1RQ==} dependencies: '@changesets/get-github-info': 0.5.2 @@ -1107,7 +926,7 @@ packages: - encoding dev: true - /@changesets/cli@2.24.4: + /@changesets/cli/2.24.4: resolution: {integrity: sha512-87JSwMv38zS3QW3062jXZYLsCNRtA08wa7vt3VnMmkGLfUMn2TTSfD+eSGVnKPJ/ycDCvAcCDnrv/B+gSX5KVA==} hasBin: true dependencies: @@ -1146,7 +965,7 @@ packages: tty-table: 4.2.3 dev: true - /@changesets/config@2.3.1: + /@changesets/config/2.3.1: resolution: {integrity: sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==} dependencies: '@changesets/errors': 0.1.4 @@ -1158,13 +977,13 @@ packages: micromatch: 4.0.5 dev: true - /@changesets/errors@0.1.4: + /@changesets/errors/0.1.4: resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} dependencies: extendable-error: 0.1.7 dev: true - /@changesets/get-dependents-graph@1.3.6: + /@changesets/get-dependents-graph/1.3.6: resolution: {integrity: sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==} dependencies: '@changesets/types': 5.2.1 @@ -1174,16 +993,16 @@ packages: semver: 7.6.0 dev: true - /@changesets/get-github-info@0.5.2: + /@changesets/get-github-info/0.5.2: resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==} dependencies: dataloader: 1.4.0 - node-fetch: 2.6.7 + node-fetch: 2.7.0 transitivePeerDependencies: - encoding dev: true - /@changesets/get-release-plan@3.0.17: + /@changesets/get-release-plan/3.0.17: resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} dependencies: '@babel/runtime': 7.23.9 @@ -1195,11 +1014,11 @@ packages: '@manypkg/get-packages': 1.1.3 dev: true - /@changesets/get-version-range-type@0.3.2: + /@changesets/get-version-range-type/0.3.2: resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} dev: true - /@changesets/git@1.5.0: + /@changesets/git/1.5.0: resolution: {integrity: sha512-Xo8AT2G7rQJSwV87c8PwMm6BAc98BnufRMsML7m7Iw8Or18WFvFmxqG5aOL5PBvhgq9KrKvaeIBNIymracSuHg==} dependencies: '@babel/runtime': 7.23.9 @@ -1210,7 +1029,7 @@ packages: spawndamnit: 2.0.0 dev: true - /@changesets/git@2.0.0: + /@changesets/git/2.0.0: resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} dependencies: '@babel/runtime': 7.23.9 @@ -1222,20 +1041,20 @@ packages: spawndamnit: 2.0.0 dev: true - /@changesets/logger@0.0.5: + /@changesets/logger/0.0.5: resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} dependencies: chalk: 2.4.2 dev: true - /@changesets/parse@0.3.16: + /@changesets/parse/0.3.16: resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} dependencies: '@changesets/types': 5.2.1 js-yaml: 3.14.1 dev: true - /@changesets/pre@1.0.14: + /@changesets/pre/1.0.14: resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} dependencies: '@babel/runtime': 7.23.9 @@ -1245,7 +1064,7 @@ packages: fs-extra: 7.0.1 dev: true - /@changesets/read@0.5.9: + /@changesets/read/0.5.9: resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} dependencies: '@babel/runtime': 7.23.9 @@ -1258,15 +1077,15 @@ packages: p-filter: 2.1.0 dev: true - /@changesets/types@4.1.0: + /@changesets/types/4.1.0: resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} dev: true - /@changesets/types@5.2.1: + /@changesets/types/5.2.1: resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} dev: true - /@changesets/write@0.2.3: + /@changesets/write/0.2.3: resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} dependencies: '@babel/runtime': 7.23.9 @@ -1276,7 +1095,7 @@ packages: prettier: 2.8.8 dev: true - /@cnakazawa/watch@1.0.4: + /@cnakazawa/watch/1.0.4: resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} hasBin: true @@ -1285,7 +1104,7 @@ packages: minimist: 1.2.8 dev: true - /@commitlint/cli@17.0.3: + /@commitlint/cli/17.0.3: resolution: {integrity: sha512-oAo2vi5d8QZnAbtU5+0cR2j+A7PO8zuccux65R/EycwvsZrDVyW518FFrnJK2UQxbRtHFFIG+NjQ6vOiJV0Q8A==} engines: {node: '>=v14'} hasBin: true @@ -1305,22 +1124,22 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional@17.0.3: + /@commitlint/config-conventional/17.0.3: resolution: {integrity: sha512-HCnzTm5ATwwwzNVq5Y57poS0a1oOOcd5pc1MmBpLbGmSysc4i7F/++JuwtdFPu16sgM3H9J/j2zznRLOSGVO2A==} engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 5.0.0 dev: true - /@commitlint/config-validator@17.8.1: + /@commitlint/config-validator/17.8.1: resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.8.1 - ajv: 8.11.2 + ajv: 8.12.0 dev: true - /@commitlint/ensure@17.8.1: + /@commitlint/ensure/17.8.1: resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} engines: {node: '>=v14'} dependencies: @@ -1332,20 +1151,20 @@ packages: lodash.upperfirst: 4.3.1 dev: true - /@commitlint/execute-rule@17.8.1: + /@commitlint/execute-rule/17.8.1: resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} engines: {node: '>=v14'} dev: true - /@commitlint/format@17.8.1: + /@commitlint/format/17.8.1: resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.8.1 - chalk: 4.1.1 + chalk: 4.1.2 dev: true - /@commitlint/is-ignored@17.8.1: + /@commitlint/is-ignored/17.8.1: resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} engines: {node: '>=v14'} dependencies: @@ -1353,7 +1172,7 @@ packages: semver: 7.5.4 dev: true - /@commitlint/lint@17.8.1: + /@commitlint/lint/17.8.1: resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} engines: {node: '>=v14'} dependencies: @@ -1363,7 +1182,7 @@ packages: '@commitlint/types': 17.8.1 dev: true - /@commitlint/load@17.8.1: + /@commitlint/load/17.8.1: resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} engines: {node: '>=v14'} dependencies: @@ -1372,26 +1191,26 @@ packages: '@commitlint/resolve-extends': 17.8.1 '@commitlint/types': 17.8.1 '@types/node': 20.5.1 - chalk: 4.1.1 - cosmiconfig: 8.3.6(typescript@4.9.4) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@4.9.4) + chalk: 4.1.2 + cosmiconfig: 8.3.6_typescript@4.9.4 + cosmiconfig-typescript-loader: 4.4.0_sqne5mrtqj3bfk6ujmz665hnfa lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@4.9.4) + ts-node: 10.9.2_q7cveed3dsfobzxjkbw6gtmsda typescript: 4.9.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /@commitlint/message@17.8.1: + /@commitlint/message/17.8.1: resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} engines: {node: '>=v14'} dev: true - /@commitlint/parse@17.8.1: + /@commitlint/parse/17.8.1: resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} engines: {node: '>=v14'} dependencies: @@ -1400,7 +1219,7 @@ packages: conventional-commits-parser: 4.0.0 dev: true - /@commitlint/read@17.8.1: + /@commitlint/read/17.8.1: resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} engines: {node: '>=v14'} dependencies: @@ -1411,7 +1230,7 @@ packages: minimist: 1.2.8 dev: true - /@commitlint/resolve-extends@17.8.1: + /@commitlint/resolve-extends/17.8.1: resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} engines: {node: '>=v14'} dependencies: @@ -1423,7 +1242,7 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/rules@17.8.1: + /@commitlint/rules/17.8.1: resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} engines: {node: '>=v14'} dependencies: @@ -1434,33 +1253,33 @@ packages: execa: 5.1.1 dev: true - /@commitlint/to-lines@17.8.1: + /@commitlint/to-lines/17.8.1: resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} engines: {node: '>=v14'} dev: true - /@commitlint/top-level@17.8.1: + /@commitlint/top-level/17.8.1: resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} engines: {node: '>=v14'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types@17.8.1: + /@commitlint/types/17.8.1: resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} engines: {node: '>=v14'} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 dev: true - /@cspotcode/source-map-support@0.8.1: + /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@eslint/eslintrc@1.4.1: + /@eslint/eslintrc/1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -1477,11 +1296,11 @@ packages: - supports-color dev: true - /@hexagon/base64@1.1.26: + /@hexagon/base64/1.1.26: resolution: {integrity: sha512-9HYANYWJAwBbxjkz5P0ZB+JXX7kH7HhUG0FmIBcF7GUmnl6mXnAHFuGOkssW7v2RLNnVvjcKIeOqywSHfw21Qg==} dev: false - /@humanwhocodes/config-array@0.9.5: + /@humanwhocodes/config-array/0.9.5: resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} dependencies: @@ -1492,11 +1311,11 @@ packages: - supports-color dev: true - /@humanwhocodes/object-schema@1.2.1: + /@humanwhocodes/object-schema/1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config@1.1.0: + /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -1507,24 +1326,24 @@ packages: resolve-from: 5.0.0 dev: true - /@istanbuljs/schema@0.1.3: + /@istanbuljs/schema/0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: true - /@jest/console@26.6.2: + /@jest/console/26.6.2: resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/node': 18.11.18 - chalk: 4.1.1 + chalk: 4.1.2 jest-message-util: 26.6.2 jest-util: 26.6.2 slash: 3.0.0 dev: true - /@jest/core@26.6.3(ts-node@10.9.2): + /@jest/core/26.6.3: resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} engines: {node: '>= 10.14.2'} dependencies: @@ -1535,18 +1354,18 @@ packages: '@jest/types': 26.6.2 '@types/node': 18.11.18 ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 26.6.2 - jest-config: 26.6.3(ts-node@10.9.2) + jest-config: 26.6.3 jest-haste-map: 26.6.2 jest-message-util: 26.6.2 jest-regex-util: 26.0.0 jest-resolve: 26.6.2 jest-resolve-dependencies: 26.6.3 - jest-runner: 26.6.3(ts-node@10.9.2) - jest-runtime: 26.6.3(ts-node@10.9.2) + jest-runner: 26.6.3 + jest-runtime: 26.6.3 jest-snapshot: 26.6.2 jest-util: 26.6.2 jest-validate: 26.6.2 @@ -1564,7 +1383,7 @@ packages: - utf-8-validate dev: true - /@jest/environment@26.6.2: + /@jest/environment/26.6.2: resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} engines: {node: '>= 10.14.2'} dependencies: @@ -1574,7 +1393,7 @@ packages: jest-mock: 26.6.2 dev: true - /@jest/fake-timers@26.6.2: + /@jest/fake-timers/26.6.2: resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} engines: {node: '>= 10.14.2'} dependencies: @@ -1586,7 +1405,7 @@ packages: jest-util: 26.6.2 dev: true - /@jest/globals@26.6.2: + /@jest/globals/26.6.2: resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==} engines: {node: '>= 10.14.2'} dependencies: @@ -1595,7 +1414,7 @@ packages: expect: 26.6.2 dev: true - /@jest/reporters@26.6.2: + /@jest/reporters/26.6.2: resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} engines: {node: '>= 10.14.2'} dependencies: @@ -1604,7 +1423,7 @@ packages: '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - chalk: 4.1.1 + chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 @@ -1629,7 +1448,7 @@ packages: - supports-color dev: true - /@jest/source-map@26.6.2: + /@jest/source-map/26.6.2: resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} engines: {node: '>= 10.14.2'} dependencies: @@ -1638,7 +1457,7 @@ packages: source-map: 0.6.1 dev: true - /@jest/test-result@26.6.2: + /@jest/test-result/26.6.2: resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} engines: {node: '>= 10.14.2'} dependencies: @@ -1648,15 +1467,15 @@ packages: collect-v8-coverage: 1.0.2 dev: true - /@jest/test-sequencer@26.6.3(ts-node@10.9.2): + /@jest/test-sequencer/26.6.3: resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} engines: {node: '>= 10.14.2'} dependencies: '@jest/test-result': 26.6.2 graceful-fs: 4.2.11 jest-haste-map: 26.6.2 - jest-runner: 26.6.3(ts-node@10.9.2) - jest-runtime: 26.6.3(ts-node@10.9.2) + jest-runner: 26.6.3 + jest-runtime: 26.6.3 transitivePeerDependencies: - bufferutil - canvas @@ -1665,14 +1484,14 @@ packages: - utf-8-validate dev: true - /@jest/transform@26.6.2: + /@jest/transform/26.6.2: resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} dependencies: '@babel/core': 7.23.9 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 - chalk: 4.1.1 + chalk: 4.1.2 convert-source-map: 1.9.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 @@ -1688,7 +1507,7 @@ packages: - supports-color dev: true - /@jest/types@26.6.2: + /@jest/types/26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} dependencies: @@ -1696,10 +1515,10 @@ packages: '@types/istanbul-reports': 3.0.4 '@types/node': 18.11.18 '@types/yargs': 15.0.19 - chalk: 4.1.1 + chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping@0.3.4: + /@jridgewell/gen-mapping/0.3.4: resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} engines: {node: '>=6.0.0'} dependencies: @@ -1708,35 +1527,35 @@ packages: '@jridgewell/trace-mapping': 0.3.23 dev: true - /@jridgewell/resolve-uri@3.1.2: + /@jridgewell/resolve-uri/3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: + /@jridgewell/set-array/1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec@1.4.15: + /@jridgewell/sourcemap-codec/1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.23: + /@jridgewell/trace-mapping/0.3.23: resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@jridgewell/trace-mapping@0.3.9: + /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@manypkg/find-root@1.1.0: + /@manypkg/find-root/1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: '@babel/runtime': 7.23.9 @@ -1745,7 +1564,7 @@ packages: fs-extra: 8.1.0 dev: true - /@manypkg/get-packages@1.1.3: + /@manypkg/get-packages/1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: '@babel/runtime': 7.23.9 @@ -1756,7 +1575,7 @@ packages: read-yaml-file: 1.1.0 dev: true - /@near-js/accounts@0.1.4: + /@near-js/accounts/0.1.4: resolution: {integrity: sha512-zHFmL4OUZ4qHXOE+dDBkYgTNHLWC5RmYUVp9LiuGciO5zFPp7WlxmowJL0QjgXqV1w+dNXq3mgmkfAgYVS8Xjw==} dependencies: '@near-js/crypto': 0.0.5 @@ -1766,7 +1585,7 @@ packages: '@near-js/types': 0.0.4 '@near-js/utils': 0.0.4 ajv: 8.11.2 - ajv-formats: 2.1.1(ajv@8.11.2) + ajv-formats: 2.1.1_ajv@8.11.2 bn.js: 5.2.1 borsh: 0.7.0 depd: 2.0.0 @@ -1775,7 +1594,7 @@ packages: - encoding dev: true - /@near-js/crypto@0.0.5: + /@near-js/crypto/0.0.5: resolution: {integrity: sha512-nbQ971iYES5Spiolt+p568gNuZ//HeMHm3qqT3xT+i8ZzgbC//l6oRf48SUVTPAboQ1TJ5dW/NqcxOY0pe7b4g==} dependencies: '@near-js/types': 0.0.4 @@ -1784,28 +1603,28 @@ packages: tweetnacl: 1.0.3 dev: true - /@near-js/keystores-browser@0.0.5: + /@near-js/keystores-browser/0.0.5: resolution: {integrity: sha512-mHF3Vcvsr7xnkaM/reOyxtykbE3OWKV6vQzqyTH2tZYT2OTEnj0KhRT9BCFC0Ra67K1zQLbg49Yc/kDCc5qupA==} dependencies: '@near-js/crypto': 0.0.5 '@near-js/keystores': 0.0.5 dev: true - /@near-js/keystores-node@0.0.5: + /@near-js/keystores-node/0.0.5: resolution: {integrity: sha512-BYmWyGNydfAqi7eYA1Jo8zULL13cxejD2VBr0BBIXx5bJ+BO4TLecsY1xdTBEq06jyWXHa7kV4h8BJzAjvpTLg==} dependencies: '@near-js/crypto': 0.0.5 '@near-js/keystores': 0.0.5 dev: true - /@near-js/keystores@0.0.5: + /@near-js/keystores/0.0.5: resolution: {integrity: sha512-kxqV+gw/3L8/axe9prhlU+M0hfybkxX54xfI0EEpWP2QiUV+qw+jkKolYIbdk5tdEZrGf9jHawh1yFtwP7APPQ==} dependencies: '@near-js/crypto': 0.0.5 '@near-js/types': 0.0.4 dev: true - /@near-js/providers@0.0.7: + /@near-js/providers/0.0.7: resolution: {integrity: sha512-qj16Ey+vSw7lHE85xW+ykYJoLPr4A6Q/TsfpwhJLS6zBInSC6sKVqPO1L8bK4VA/yB7V7JJPor9UVCWgRXdNEA==} dependencies: '@near-js/transactions': 0.2.1 @@ -1813,14 +1632,14 @@ packages: '@near-js/utils': 0.0.4 bn.js: 5.2.1 borsh: 0.7.0 - http-errors: 1.7.2 + http-errors: 1.8.1 optionalDependencies: - node-fetch: 2.6.7 + node-fetch: 2.7.0 transitivePeerDependencies: - encoding dev: true - /@near-js/signers@0.0.5: + /@near-js/signers/0.0.5: resolution: {integrity: sha512-XJjYYatehxHakHa7WAoiQ8uIBSWBR2EnO4GzlIe8qpWL+LoH4t68MSezC1HwT546y9YHIvePjwDrBeYk8mg20w==} dependencies: '@near-js/crypto': 0.0.5 @@ -1828,7 +1647,7 @@ packages: js-sha256: 0.9.0 dev: true - /@near-js/transactions@0.2.1: + /@near-js/transactions/0.2.1: resolution: {integrity: sha512-V9tXzkICDPruSxihKXkBhUgsI4uvW7TwXlnZS2GZpPsFFiIUeGrso0wo4uiQwB6miFA5q6fKaAtQa4F2v1s+zg==} dependencies: '@near-js/crypto': 0.0.5 @@ -1840,22 +1659,22 @@ packages: js-sha256: 0.9.0 dev: true - /@near-js/types@0.0.4: + /@near-js/types/0.0.4: resolution: {integrity: sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==} dependencies: bn.js: 5.2.1 dev: true - /@near-js/utils@0.0.4: + /@near-js/utils/0.0.4: resolution: {integrity: sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==} dependencies: '@near-js/types': 0.0.4 bn.js: 5.2.1 depd: 2.0.0 - mustache: 4.0.0 + mustache: 4.2.0 dev: true - /@near-js/wallet-account@0.0.7: + /@near-js/wallet-account/0.0.7: resolution: {integrity: sha512-tmRyieG/wHmuNkg/WGFyKD6iH6atHPbY0rZ5OjOIiteuhZEPgp+z8OBpiQ4qumTa63q46aj/QVSQL0J3+JmBfw==} dependencies: '@near-js/accounts': 0.1.4 @@ -1871,23 +1690,23 @@ packages: - encoding dev: true - /@noble/curves@1.2.0: + /@noble/curves/1.2.0: resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} dependencies: '@noble/hashes': 1.3.2 dev: false - /@noble/hashes@1.3.2: + /@noble/hashes/1.3.2: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} dev: false - /@noble/hashes@1.3.3: + /@noble/hashes/1.3.3: resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} engines: {node: '>= 16'} dev: false - /@nodelib/fs.scandir@2.1.5: + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -1895,12 +1714,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat@2.0.5: + /@nodelib/fs.stat/2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk@1.2.8: + /@nodelib/fs.walk/1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -1908,13 +1727,13 @@ packages: fastq: 1.17.1 dev: true - /@octokit/auth-token@2.5.0: + /@octokit/auth-token/2.5.0: resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} dependencies: '@octokit/types': 6.41.0 dev: true - /@octokit/core@3.6.0: + /@octokit/core/3.6.0: resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} dependencies: '@octokit/auth-token': 2.5.0 @@ -1928,7 +1747,7 @@ packages: - encoding dev: true - /@octokit/endpoint@6.0.12: + /@octokit/endpoint/6.0.12: resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} dependencies: '@octokit/types': 6.41.0 @@ -1936,7 +1755,7 @@ packages: universal-user-agent: 6.0.1 dev: true - /@octokit/graphql@4.8.0: + /@octokit/graphql/4.8.0: resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} dependencies: '@octokit/request': 5.6.3 @@ -1946,11 +1765,11 @@ packages: - encoding dev: true - /@octokit/openapi-types@12.11.0: + /@octokit/openapi-types/12.11.0: resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} dev: true - /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): + /@octokit/plugin-paginate-rest/2.21.3_@octokit+core@3.6.0: resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} peerDependencies: '@octokit/core': '>=2' @@ -1959,7 +1778,7 @@ packages: '@octokit/types': 6.41.0 dev: true - /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): + /@octokit/plugin-request-log/1.0.4_@octokit+core@3.6.0: resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} peerDependencies: '@octokit/core': '>=3' @@ -1967,7 +1786,7 @@ packages: '@octokit/core': 3.6.0 dev: true - /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): + /@octokit/plugin-rest-endpoint-methods/5.16.2_@octokit+core@3.6.0: resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} peerDependencies: '@octokit/core': '>=3' @@ -1977,7 +1796,7 @@ packages: deprecation: 2.3.1 dev: true - /@octokit/request-error@2.1.0: + /@octokit/request-error/2.1.0: resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} dependencies: '@octokit/types': 6.41.0 @@ -1985,7 +1804,7 @@ packages: once: 1.4.0 dev: true - /@octokit/request@5.6.3: + /@octokit/request/5.6.3: resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} dependencies: '@octokit/endpoint': 6.0.12 @@ -1998,24 +1817,24 @@ packages: - encoding dev: true - /@octokit/rest@18.12.0: + /@octokit/rest/18.12.0: resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} dependencies: '@octokit/core': 3.6.0 - '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) - '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) - '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) + '@octokit/plugin-paginate-rest': 2.21.3_@octokit+core@3.6.0 + '@octokit/plugin-request-log': 1.0.4_@octokit+core@3.6.0 + '@octokit/plugin-rest-endpoint-methods': 5.16.2_@octokit+core@3.6.0 transitivePeerDependencies: - encoding dev: true - /@octokit/types@6.41.0: + /@octokit/types/6.41.0: resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} dependencies: '@octokit/openapi-types': 12.11.0 dev: true - /@peculiar/asn1-schema@2.3.8: + /@peculiar/asn1-schema/2.3.8: resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==} dependencies: asn1js: 3.0.5 @@ -2023,14 +1842,14 @@ packages: tslib: 2.6.2 dev: false - /@peculiar/json-schema@1.1.12: + /@peculiar/json-schema/1.1.12: resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} engines: {node: '>=8.0.0'} dependencies: tslib: 2.6.2 dev: false - /@peculiar/webcrypto@1.4.5: + /@peculiar/webcrypto/1.4.5: resolution: {integrity: sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==} engines: {node: '>=10.12.0'} dependencies: @@ -2041,52 +1860,52 @@ packages: webcrypto-core: 1.7.8 dev: false - /@sindresorhus/is@4.6.0: + /@sindresorhus/is/4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} dev: true - /@sinonjs/commons@1.8.6: + /@sinonjs/commons/1.8.6: resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@6.0.1: + /@sinonjs/fake-timers/6.0.1: resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==} dependencies: '@sinonjs/commons': 1.8.6 dev: true - /@szmarczak/http-timer@4.0.6: + /@szmarczak/http-timer/4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} dependencies: defer-to-connect: 2.0.1 dev: true - /@tootallnate/once@1.1.2: + /@tootallnate/once/1.1.2: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} dev: true - /@tsconfig/node10@1.0.9: + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true - /@tsconfig/node12@1.0.11: + /@tsconfig/node12/1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} dev: true - /@tsconfig/node14@1.0.3: + /@tsconfig/node14/1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16@1.0.4: + /@tsconfig/node16/1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@types/babel__core@7.20.5: + /@types/babel__core/7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: '@babel/parser': 7.23.9 @@ -2096,32 +1915,32 @@ packages: '@types/babel__traverse': 7.20.5 dev: true - /@types/babel__generator@7.6.8: + /@types/babel__generator/7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: '@babel/types': 7.23.9 dev: true - /@types/babel__template@7.4.4: + /@types/babel__template/7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: '@babel/parser': 7.23.9 '@babel/types': 7.23.9 dev: true - /@types/babel__traverse@7.20.5: + /@types/babel__traverse/7.20.5: resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: '@babel/types': 7.23.9 dev: true - /@types/bn.js@5.1.0: + /@types/bn.js/5.1.0: resolution: {integrity: sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==} dependencies: '@types/node': 18.11.18 dev: true - /@types/cacheable-request@6.0.3: + /@types/cacheable-request/6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: '@types/http-cache-semantics': 4.0.4 @@ -2130,100 +1949,106 @@ packages: '@types/responselike': 1.0.3 dev: true - /@types/graceful-fs@4.1.9: + /@types/graceful-fs/4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: '@types/node': 18.11.18 dev: true - /@types/http-cache-semantics@4.0.4: + /@types/http-cache-semantics/4.0.4: resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} dev: true - /@types/http-errors@1.6.1: + /@types/http-errors/1.6.1: resolution: {integrity: sha512-s+RHKSGc3r0m3YEE2UXomJYrpQaY9cDmNDLU2XvG1/LAZsQ7y8emYkTLfcw/ByDtcsTyRQKwr76Bj4PkN2hfWg==} dev: true - /@types/is-ci@3.0.4: + /@types/is-ci/3.0.4: resolution: {integrity: sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw==} dependencies: ci-info: 3.9.0 dev: true - /@types/istanbul-lib-coverage@2.0.6: + /@types/istanbul-lib-coverage/2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true - /@types/istanbul-lib-report@3.0.3: + /@types/istanbul-lib-report/3.0.3: resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: '@types/istanbul-lib-coverage': 2.0.6 dev: true - /@types/istanbul-reports@3.0.4: + /@types/istanbul-reports/3.0.4: resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/json-schema@7.0.15: + /@types/json-schema/7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - /@types/keyv@3.1.4: + /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 18.11.18 dev: true - /@types/minimist@1.2.5: + /@types/minimist/1.2.5: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true - /@types/node@12.20.55: + /@types/node/12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@18.11.18: + /@types/node/18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} dev: true - /@types/node@20.5.1: + /@types/node/18.19.18: + resolution: {integrity: sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/node/20.5.1: resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} dev: true - /@types/normalize-package-data@2.4.4: + /@types/normalize-package-data/2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true - /@types/prettier@2.7.3: + /@types/prettier/2.7.3: resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true - /@types/responselike@1.0.3: + /@types/responselike/1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: '@types/node': 18.11.18 dev: true - /@types/semver@6.2.7: + /@types/semver/6.2.7: resolution: {integrity: sha512-blctEWbzUFzQx799RZjzzIdBJOXmE37YYEyDtKkx5Dg+V7o/zyyAxLPiI98A2jdTtDgxZleMdfV+7p8WbRJ1OQ==} dev: true - /@types/stack-utils@2.0.3: + /@types/stack-utils/2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true - /@types/yargs-parser@21.0.3: + /@types/yargs-parser/21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true - /@types/yargs@15.0.19: + /@types/yargs/15.0.19: resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} dependencies: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@5.31.0(@typescript-eslint/parser@5.31.0)(eslint@8.20.0)(typescript@4.9.4): + /@typescript-eslint/eslint-plugin/5.31.0_xge7lzmu5bkowl5j34qyhhv7sm: resolution: {integrity: sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2234,23 +2059,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.31.0(eslint@8.20.0)(typescript@4.9.4) + '@typescript-eslint/parser': 5.31.0_et63c6hdcbxumioq5v75e5l7ca '@typescript-eslint/scope-manager': 5.31.0 - '@typescript-eslint/type-utils': 5.31.0(eslint@8.20.0)(typescript@4.9.4) - '@typescript-eslint/utils': 5.31.0(eslint@8.20.0)(typescript@4.9.4) + '@typescript-eslint/type-utils': 5.31.0_et63c6hdcbxumioq5v75e5l7ca + '@typescript-eslint/utils': 5.31.0_et63c6hdcbxumioq5v75e5l7ca debug: 4.3.4 eslint: 8.20.0 functional-red-black-tree: 1.0.1 ignore: 5.3.1 regexpp: 3.2.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@4.9.4) + tsutils: 3.21.0_typescript@4.9.4 typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.31.0(eslint@8.20.0)(typescript@4.9.4): + /@typescript-eslint/parser/5.31.0_et63c6hdcbxumioq5v75e5l7ca: resolution: {integrity: sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2262,7 +2087,7 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.31.0 '@typescript-eslint/types': 5.31.0 - '@typescript-eslint/typescript-estree': 5.31.0(typescript@4.9.4) + '@typescript-eslint/typescript-estree': 5.31.0_typescript@4.9.4 debug: 4.3.4 eslint: 8.20.0 typescript: 4.9.4 @@ -2270,7 +2095,7 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@5.31.0: + /@typescript-eslint/scope-manager/5.31.0: resolution: {integrity: sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -2278,7 +2103,7 @@ packages: '@typescript-eslint/visitor-keys': 5.31.0 dev: true - /@typescript-eslint/type-utils@5.31.0(eslint@8.20.0)(typescript@4.9.4): + /@typescript-eslint/type-utils/5.31.0_et63c6hdcbxumioq5v75e5l7ca: resolution: {integrity: sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2288,21 +2113,21 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.31.0(eslint@8.20.0)(typescript@4.9.4) + '@typescript-eslint/utils': 5.31.0_et63c6hdcbxumioq5v75e5l7ca debug: 4.3.4 eslint: 8.20.0 - tsutils: 3.21.0(typescript@4.9.4) + tsutils: 3.21.0_typescript@4.9.4 typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.31.0: + /@typescript-eslint/types/5.31.0: resolution: {integrity: sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.31.0(typescript@4.9.4): + /@typescript-eslint/typescript-estree/5.31.0_typescript@4.9.4: resolution: {integrity: sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2317,13 +2142,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@4.9.4) + tsutils: 3.21.0_typescript@4.9.4 typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.31.0(eslint@8.20.0)(typescript@4.9.4): + /@typescript-eslint/utils/5.31.0_et63c6hdcbxumioq5v75e5l7ca: resolution: {integrity: sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2332,16 +2157,16 @@ packages: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 5.31.0 '@typescript-eslint/types': 5.31.0 - '@typescript-eslint/typescript-estree': 5.31.0(typescript@4.9.4) + '@typescript-eslint/typescript-estree': 5.31.0_typescript@4.9.4 eslint: 8.20.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.20.0) + eslint-utils: 3.0.0_eslint@8.20.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.31.0: + /@typescript-eslint/visitor-keys/5.31.0: resolution: {integrity: sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -2349,7 +2174,7 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /JSONStream@1.3.5: + /JSONStream/1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: @@ -2357,26 +2182,26 @@ packages: through: 2.3.8 dev: true - /abab@2.0.6: + /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead dev: true - /abort-controller@3.0.0: + /abort-controller/3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} dependencies: event-target-shim: 5.0.1 dev: true - /acorn-globals@6.0.0: + /acorn-globals/6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx/5.3.2_acorn@8.11.3: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2384,7 +2209,7 @@ packages: acorn: 8.11.3 dev: true - /acorn-node@1.8.2: + /acorn-node/1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 @@ -2392,36 +2217,36 @@ packages: xtend: 4.0.2 dev: true - /acorn-walk@7.2.0: + /acorn-walk/7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} dev: true - /acorn-walk@8.3.2: + /acorn-walk/8.3.2: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: true - /acorn@7.4.1: + /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn@8.11.3: + /acorn/8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /agent-base@4.3.0: + /agent-base/4.3.0: resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==} engines: {node: '>= 4.0.0'} dependencies: es6-promisify: 5.0.0 dev: true - /agent-base@6.0.2: + /agent-base/6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: @@ -2430,7 +2255,7 @@ packages: - supports-color dev: true - /ajv-formats@2.1.1(ajv@8.11.2): + /ajv-formats/2.1.1_ajv@8.11.2: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -2440,7 +2265,7 @@ packages: dependencies: ajv: 8.11.2 - /ajv@6.12.6: + /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -2449,7 +2274,7 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.11.2: + /ajv/8.11.2: resolution: {integrity: sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==} dependencies: fast-deep-equal: 3.1.3 @@ -2457,41 +2282,50 @@ packages: require-from-string: 2.0.2 uri-js: 4.4.1 - /ansi-colors@4.1.3: + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-colors/4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true - /ansi-escapes@4.3.2: + /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 dev: true - /ansi-regex@5.0.1: + /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true - /ansi-sequence-parser@1.1.1: + /ansi-sequence-parser/1.1.1: resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} dev: true - /ansi-styles@3.2.1: + /ansi-styles/3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles@4.3.0: + /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /anymatch@2.0.0: + /anymatch/2.0.0: resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} dependencies: micromatch: 3.1.10 @@ -2500,7 +2334,7 @@ packages: - supports-color dev: true - /anymatch@3.1.3: + /anymatch/3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: @@ -2508,36 +2342,36 @@ packages: picomatch: 2.3.1 dev: true - /arg@4.1.3: + /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /argparse@1.0.10: + /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - /argparse@2.0.1: + /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /arr-diff@4.0.0: + /arr-diff/4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} dev: true - /arr-flatten@1.1.0: + /arr-flatten/1.1.0: resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} engines: {node: '>=0.10.0'} dev: true - /arr-union@3.1.0: + /arr-union/3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} dev: true - /array-buffer-byte-length@1.0.1: + /array-buffer-byte-length/1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} dependencies: @@ -2545,21 +2379,21 @@ packages: is-array-buffer: 3.0.4 dev: true - /array-ify@1.0.0: + /array-ify/1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-union@2.1.0: + /array-union/2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array-unique@0.3.2: + /array-unique/0.3.2: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} dev: true - /array.prototype.flat@1.3.2: + /array.prototype.flat/1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: @@ -2569,7 +2403,7 @@ packages: es-shim-unscopables: 1.0.2 dev: true - /arraybuffer.prototype.slice@1.0.3: + /arraybuffer.prototype.slice/1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: @@ -2583,16 +2417,16 @@ packages: is-shared-array-buffer: 1.0.3 dev: true - /arrify@1.0.1: + /arrify/1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true - /asn1-parser@1.1.8: + /asn1-parser/1.1.8: resolution: {integrity: sha512-3aYtVA7yzCK7r+qbBzpvzcq53kz7IRfGWTObbAGZieTj+By8wbSGSncZO7TztQ5UXrHELCesUIlJGD4JJcUAsA==} dev: false - /asn1.js@5.4.1: + /asn1.js/5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: bn.js: 4.12.0 @@ -2601,7 +2435,7 @@ packages: safer-buffer: 2.1.2 dev: true - /asn1js@3.0.5: + /asn1js/3.0.5: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} dependencies: @@ -2610,42 +2444,42 @@ packages: tslib: 2.6.2 dev: false - /assert@1.5.1: + /assert/1.5.1: resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} dependencies: object.assign: 4.1.5 util: 0.10.4 dev: true - /assign-symbols@1.0.0: + /assign-symbols/1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} dev: true - /async-retry@1.2.3: + /async-retry/1.2.3: resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==} dependencies: retry: 0.12.0 dev: true - /asynckit@0.4.0: + /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /atob@2.1.2: + /atob/2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true - /available-typed-arrays@1.0.7: + /available-typed-arrays/1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} dependencies: possible-typed-array-names: 1.0.0 dev: true - /axios@0.19.2: + /axios/0.19.2: resolution: {integrity: sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==} deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 dependencies: @@ -2654,7 +2488,7 @@ packages: - supports-color dev: true - /babel-jest@26.6.3(@babel/core@7.23.9): + /babel-jest/26.6.3_@babel+core@7.23.9: resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} engines: {node: '>= 10.14.2'} peerDependencies: @@ -2665,15 +2499,15 @@ packages: '@jest/types': 26.6.2 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 26.6.2(@babel/core@7.23.9) - chalk: 4.1.1 + babel-preset-jest: 26.6.2_@babel+core@7.23.9 + chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-istanbul@6.1.1: + /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: @@ -2686,7 +2520,7 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist@26.6.2: + /babel-plugin-jest-hoist/26.6.2: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} dependencies: @@ -2696,27 +2530,27 @@ packages: '@types/babel__traverse': 7.20.5 dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.9): + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.23.9: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.23.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - dev: true - - /babel-preset-jest@26.6.2(@babel/core@7.23.9): + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.23.9 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.23.9 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.23.9 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.23.9 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.23.9 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.23.9 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.23.9 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.23.9 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.23.9 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.23.9 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.23.9 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.23.9 + dev: true + + /babel-preset-jest/26.6.2_@babel+core@7.23.9: resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} engines: {node: '>= 10.14.2'} peerDependencies: @@ -2724,35 +2558,26 @@ packages: dependencies: '@babel/core': 7.23.9 babel-plugin-jest-hoist: 26.6.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.23.9 dev: true - /balanced-match@1.0.2: + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base-x@2.0.6: + /base-x/2.0.6: resolution: {integrity: sha512-UAmjxz9KbK+YIi66xej+pZVo/vxUOh49ubEvZW5egCbxhur05pBb+hwuireQwKO4nDpsNm64/jEei17LEpsr5g==} engines: {node: '>=4.5.0'} deprecated: use 3.0.0 instead, safe-buffer has been merged and release for compatability dependencies: safe-buffer: 5.2.1 - /base-x@3.0.9: + /base-x/3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} dependencies: safe-buffer: 5.2.1 - dev: true - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - /base64url@3.0.1: - resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} - engines: {node: '>=6.0.0'} - dev: true - /base@0.11.2: + /base/0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} dependencies: @@ -2765,57 +2590,65 @@ packages: pascalcase: 0.1.1 dev: true - /before-after-hook@2.2.3: + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /base64url/3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + dev: true + + /before-after-hook/2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: true - /better-path-resolve@1.0.0: + /better-path-resolve/1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} dependencies: is-windows: 1.0.2 dev: true - /bn.js@4.12.0: + /bn.js/4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true - /bn.js@5.2.1: + /bn.js/5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - /borsh@0.5.0: + /borsh/0.5.0: resolution: {integrity: sha512-p9w/qGBeeFdUf2GPBPHdX5JQyez8K5VtoFN7PqSfmR+cVUMSmcwAKhP9n2aXoDSKbtS7xZlZt3MVnrJL7GdYhg==} dependencies: bn.js: 5.2.1 - bs58: 4.0.0 + bs58: 4.0.1 text-encoding-utf-8: 1.0.2 dev: true - /borsh@0.7.0: + /borsh/0.7.0: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} dependencies: bn.js: 5.2.1 - bs58: 4.0.0 + bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - /borsh@1.0.0: + /borsh/1.0.0: resolution: {integrity: sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==} dev: false - /brace-expansion@1.1.11: + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /brace-expansion@2.0.1: + /brace-expansion/2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces@2.3.2: + /braces/2.3.2: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} dependencies: @@ -2833,24 +2666,24 @@ packages: - supports-color dev: true - /braces@3.0.2: + /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - /breakword@1.0.6: + /breakword/1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} dependencies: wcwidth: 1.0.1 dev: true - /brorand@1.1.0: + /brorand/1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true - /browser-pack@6.1.0: + /browser-pack/6.1.0: resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} hasBin: true dependencies: @@ -2862,23 +2695,23 @@ packages: umd: 3.0.3 dev: true - /browser-process-hrtime@1.0.0: + /browser-process-hrtime/1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} dev: true - /browser-resolve@1.11.3: + /browser-resolve/1.11.3: resolution: {integrity: sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==} dependencies: resolve: 1.1.7 dev: true - /browser-resolve@2.0.0: + /browser-resolve/2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} dependencies: resolve: 1.22.8 dev: true - /browserify-aes@1.2.0: + /browserify-aes/1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 @@ -2889,7 +2722,7 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-cipher@1.0.1: + /browserify-cipher/1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} dependencies: browserify-aes: 1.2.0 @@ -2897,7 +2730,7 @@ packages: evp_bytestokey: 1.0.3 dev: true - /browserify-des@1.0.2: + /browserify-des/1.0.2: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 @@ -2906,14 +2739,14 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-rsa@4.1.0: + /browserify-rsa/4.1.0: resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} dependencies: bn.js: 5.2.1 randombytes: 2.1.0 dev: true - /browserify-sign@4.2.2: + /browserify-sign/4.2.2: resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} engines: {node: '>= 4'} dependencies: @@ -2928,13 +2761,13 @@ packages: safe-buffer: 5.2.1 dev: true - /browserify-zlib@0.2.0: + /browserify-zlib/0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} dependencies: pako: 1.0.11 dev: true - /browserify@16.2.3: + /browserify/16.2.3: resolution: {integrity: sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==} engines: {node: '>= 0.8'} hasBin: true @@ -2989,7 +2822,7 @@ packages: xtend: 4.0.2 dev: true - /browserslist@4.23.0: + /browserslist/4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2997,71 +2830,70 @@ packages: caniuse-lite: 1.0.30001589 electron-to-chromium: 1.4.681 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) + update-browserslist-db: 1.0.13_browserslist@4.23.0 dev: true - /bs-logger@0.2.6: + /bs-logger/0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} dependencies: fast-json-stable-stringify: 2.1.0 dev: true - /bs58@4.0.0: + /bs58/4.0.0: resolution: {integrity: sha512-/jcGuUuSebyxwLLfKrbKnCJttxRf9PM51EnHTwmFKBxl4z1SGkoAhrfd6uZKE0dcjQTfm6XzTP8DPr1tzE4KIw==} dependencies: base-x: 2.0.6 - /bs58@4.0.1: + /bs58/4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} dependencies: base-x: 3.0.9 - dev: true - /bser@2.1.1: + /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true - /buffer-equal-constant-time@1.0.1: + /buffer-equal-constant-time/1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} dev: true - /buffer-from@1.1.2: + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-xor@1.0.3: + /buffer-xor/1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} dev: true - /buffer@5.7.1: + /buffer/5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /buffer@6.0.3: + /buffer/6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: false - /builtin-status-codes@3.0.0: + /builtin-status-codes/3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} dev: true - /bundlewatch@0.3.1: + /bundlewatch/0.3.1: resolution: {integrity: sha512-yVuOHljZCxRrDgujRn7GED+7Ms8G7hQJmP8vtQWIquDwDfocJH6RdRX42mqDWhMXGdsT3qhB1GYJ5q5zFZ0AEA==} engines: {node: '>=10'} hasBin: true dependencies: axios: 0.19.2 bytes: 3.1.2 - chalk: 4.1.1 + chalk: 4.1.2 ci-env: 1.17.0 commander: 5.1.0 glob: 7.2.3 @@ -3073,17 +2905,17 @@ packages: - supports-color dev: true - /bytes@3.1.2: + /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: true - /bytestreamjs@2.0.1: + /bytestreamjs/2.0.1: resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} dev: false - /cache-base@1.0.1: + /cache-base/1.0.1: resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} engines: {node: '>=0.10.0'} dependencies: @@ -3098,12 +2930,12 @@ packages: unset-value: 1.0.0 dev: true - /cacheable-lookup@5.0.4: + /cacheable-lookup/5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} dev: true - /cacheable-request@7.0.4: + /cacheable-request/7.0.4: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} dependencies: @@ -3116,11 +2948,11 @@ packages: responselike: 2.0.1 dev: true - /cached-path-relative@1.1.0: + /cached-path-relative/1.1.0: resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} dev: true - /call-bind@1.0.7: + /call-bind/1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} dependencies: @@ -3131,17 +2963,17 @@ packages: set-function-length: 1.2.1 dev: true - /callsites@3.1.0: + /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /callsites@4.1.0: + /callsites/4.1.0: resolution: {integrity: sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==} engines: {node: '>=12.20'} dev: true - /camelcase-keys@6.2.2: + /camelcase-keys/6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} dependencies: @@ -3150,32 +2982,32 @@ packages: quick-lru: 4.0.1 dev: true - /camelcase@5.3.1: + /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: true - /camelcase@6.3.0: + /camelcase/6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001589: + /caniuse-lite/1.0.30001589: resolution: {integrity: sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==} dev: true - /capability@0.2.5: + /capability/0.2.5: resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==} dev: true - /capture-exit@2.0.0: + /capture-exit/2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} dependencies: rsvp: 4.8.5 dev: true - /cbor-extract@2.2.0: + /cbor-extract/2.2.0: resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==} hasBin: true requiresBuild: true @@ -3191,13 +3023,13 @@ packages: dev: false optional: true - /cbor-x@1.5.8: + /cbor-x/1.5.8: resolution: {integrity: sha512-gc3bHBsvG6GClCY6c0/iip+ghlqizkVp+TtaL927lwvP4VP9xBdi1HmqPR5uj/Mj/0TOlngMkIYa25wKg+VNrQ==} optionalDependencies: cbor-extract: 2.2.0 dev: false - /chalk@2.4.2: + /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -3206,14 +3038,15 @@ packages: supports-color: 5.5.0 dev: true - /chalk@4.1.1: + /chalk/4.1.1: resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: false - /chalk@4.1.2: + /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: @@ -3221,45 +3054,45 @@ packages: supports-color: 7.2.0 dev: true - /char-regex@1.0.2: + /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true - /chardet@0.7.0: + /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /chownr@2.0.0: + /chownr/2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} dev: true - /ci-env@1.17.0: + /ci-env/1.17.0: resolution: {integrity: sha512-NtTjhgSEqv4Aj90TUYHQLxHdnCPXnjdtuGG1X8lTfp/JqeXTdw0FTWl/vUAPuvbWZTF8QVpv6ASe/XacE+7R2A==} dev: true - /ci-info@2.0.0: + /ci-info/2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true - /ci-info@3.9.0: + /ci-info/3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} dev: true - /cipher-base@1.0.4: + /cipher-base/1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 dev: true - /cjs-module-lexer@0.6.0: + /cjs-module-lexer/0.6.0: resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==} dev: true - /class-utils@0.3.6: + /class-utils/0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} dependencies: @@ -3269,7 +3102,7 @@ packages: static-extend: 0.1.2 dev: true - /cliui@6.0.0: + /cliui/6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 @@ -3277,7 +3110,7 @@ packages: wrap-ansi: 6.2.0 dev: true - /cliui@8.0.1: + /cliui/8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -3286,27 +3119,27 @@ packages: wrap-ansi: 7.0.0 dev: true - /clone-response@1.0.3: + /clone-response/1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: mimic-response: 1.0.1 dev: true - /clone@1.0.4: + /clone/1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} dev: true - /co@4.6.0: + /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collect-v8-coverage@1.0.2: + /collect-v8-coverage/1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} dev: true - /collection-visit@1.0.0: + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} dependencies: @@ -3314,31 +3147,31 @@ packages: object-visit: 1.0.1 dev: true - /color-convert@1.9.3: + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert@2.0.1: + /color-convert/2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name@1.1.3: + /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name@1.1.4: + /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /colors@1.4.0: + /colors/1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} dev: true - /combine-source-map@0.8.0: + /combine-source-map/0.8.0: resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} dependencies: convert-source-map: 1.1.3 @@ -3347,23 +3180,23 @@ packages: source-map: 0.5.7 dev: true - /combined-stream@1.0.8: + /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true - /commander@2.20.3: + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander@5.1.0: + /commander/5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} dev: true - /commitlint@17.0.3: + /commitlint/17.0.3: resolution: {integrity: sha512-/KbIyrd6nmrRvu5zj8KKrjoC4z5V6hBmYphHgCFu75kPjHODg1XTtGFgbnb0AdSGBHlGMzmDvykO7ETs8wBKFg==} engines: {node: '>=v14'} hasBin: true @@ -3375,22 +3208,22 @@ packages: - '@swc/wasm' dev: true - /compare-func@2.0.0: + /compare-func/2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true - /component-emitter@1.3.1: + /component-emitter/1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} dev: true - /concat-map@0.0.1: + /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concat-stream@1.6.2: + /concat-stream/1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} dependencies: @@ -3400,12 +3233,12 @@ packages: typedarray: 0.0.6 dev: true - /concurrently@7.3.0: + /concurrently/7.3.0: resolution: {integrity: sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==} engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} hasBin: true dependencies: - chalk: 4.1.1 + chalk: 4.1.2 date-fns: 2.30.0 lodash: 4.17.21 rxjs: 7.8.1 @@ -3416,22 +3249,22 @@ packages: yargs: 17.7.2 dev: true - /console-browserify@1.2.0: + /console-browserify/1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} dev: true - /constants-browserify@1.0.0: + /constants-browserify/1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true - /conventional-changelog-angular@6.0.0: + /conventional-changelog-angular/6.0.0: resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} engines: {node: '>=14'} dependencies: compare-func: 2.0.0 dev: true - /conventional-changelog-conventionalcommits@5.0.0: + /conventional-changelog-conventionalcommits/5.0.0: resolution: {integrity: sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==} engines: {node: '>=10'} dependencies: @@ -3440,7 +3273,7 @@ packages: q: 1.5.1 dev: true - /conventional-commits-parser@4.0.0: + /conventional-commits-parser/4.0.0: resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} engines: {node: '>=14'} hasBin: true @@ -3451,33 +3284,33 @@ packages: split2: 3.2.2 dev: true - /convert-source-map@1.1.3: + /convert-source-map/1.1.3: resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} dev: true - /convert-source-map@1.9.0: + /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /convert-source-map@2.0.0: + /convert-source-map/2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /copy-descriptor@0.1.1: + /copy-descriptor/0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} dev: true - /core-js@3.36.0: + /core-js/3.36.0: resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} requiresBuild: true dev: true - /core-util-is@1.0.3: + /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@4.9.4): + /cosmiconfig-typescript-loader/4.4.0_sqne5mrtqj3bfk6ujmz665hnfa: resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} engines: {node: '>=v14.21.3'} peerDependencies: @@ -3487,12 +3320,12 @@ packages: typescript: '>=4' dependencies: '@types/node': 20.5.1 - cosmiconfig: 8.3.6(typescript@4.9.4) - ts-node: 10.9.2(@types/node@20.5.1)(typescript@4.9.4) + cosmiconfig: 8.3.6_typescript@4.9.4 + ts-node: 10.9.2_q7cveed3dsfobzxjkbw6gtmsda typescript: 4.9.4 dev: true - /cosmiconfig@8.3.6(typescript@4.9.4): + /cosmiconfig/8.3.6_typescript@4.9.4: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -3508,14 +3341,14 @@ packages: typescript: 4.9.4 dev: true - /create-ecdh@4.0.4: + /create-ecdh/4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.0 elliptic: 6.5.4 dev: true - /create-hash@1.2.0: + /create-hash/1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 @@ -3525,7 +3358,7 @@ packages: sha.js: 2.4.11 dev: true - /create-hmac@1.1.7: + /create-hmac/1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 @@ -3536,11 +3369,11 @@ packages: sha.js: 2.4.11 dev: true - /create-require@1.1.1: + /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-spawn@5.1.0: + /cross-spawn/5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: lru-cache: 4.1.5 @@ -3548,7 +3381,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn@6.0.5: + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} dependencies: @@ -3559,7 +3392,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn@7.0.3: + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -3568,7 +3401,7 @@ packages: which: 2.0.2 dev: true - /crypto-browserify@3.12.0: + /crypto-browserify/3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 @@ -3584,34 +3417,34 @@ packages: randomfill: 1.0.4 dev: true - /cssom@0.3.8: + /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true - /cssom@0.4.4: + /cssom/0.4.4: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} dev: true - /cssstyle@2.3.0: + /cssstyle/2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true - /csv-generate@3.4.3: + /csv-generate/3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} dev: true - /csv-parse@4.16.3: + /csv-parse/4.16.3: resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} dev: true - /csv-stringify@5.6.5: + /csv-stringify/5.6.5: resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} dev: true - /csv@5.5.3: + /csv/5.5.3: resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} engines: {node: '>= 0.1.90'} dependencies: @@ -3621,7 +3454,7 @@ packages: stream-transform: 2.1.3 dev: true - /danger-plugin-yarn@1.3.2: + /danger-plugin-yarn/1.3.2: resolution: {integrity: sha512-g+7guMig986giNyUxM15sFH32HKBGzHcKHMrAojvGOU9lpB53KwxX5yrYnokRlfW0aSaAwm9GCInXTQc9MoW3w==} engines: {node: '>=4.0.0'} dependencies: @@ -3632,7 +3465,7 @@ packages: semver: 5.7.2 dev: true - /danger@11.1.1: + /danger/11.1.1: resolution: {integrity: sha512-kQX1/Rggut/KFgArOloAdw6paB7hkoznRaUhpPFKVHKRgc6FtlhC8zpb480jVE71Z6eI7rrHVDGEYLv8x96yyA==} engines: {node: '>=14.13.1'} hasBin: true @@ -3679,16 +3512,16 @@ packages: - supports-color dev: true - /dargs@7.0.0: + /dargs/7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true - /dash-ast@1.0.0: + /dash-ast/1.0.0: resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} dev: true - /data-urls@2.0.0: + /data-urls/2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} dependencies: @@ -3697,22 +3530,22 @@ packages: whatwg-url: 8.7.0 dev: true - /dataloader@1.4.0: + /dataloader/1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true - /date-fns@1.30.1: + /date-fns/1.30.1: resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} dev: true - /date-fns@2.30.0: + /date-fns/2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: '@babel/runtime': 7.23.9 dev: true - /debug@2.6.9: + /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' @@ -3723,7 +3556,7 @@ packages: ms: 2.0.0 dev: true - /debug@3.1.0: + /debug/3.1.0: resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} peerDependencies: supports-color: '*' @@ -3734,7 +3567,7 @@ packages: ms: 2.0.0 dev: true - /debug@3.2.7: + /debug/3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -3745,7 +3578,7 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4: + /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -3757,7 +3590,7 @@ packages: ms: 2.1.2 dev: true - /decamelize-keys@1.1.1: + /decamelize-keys/1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: @@ -3765,48 +3598,48 @@ packages: map-obj: 1.0.1 dev: true - /decamelize@1.2.0: + /decamelize/1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /decimal.js@10.4.3: + /decimal.js/10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /decode-uri-component@0.2.2: + /decode-uri-component/0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} dev: true - /decompress-response@6.0.0: + /decompress-response/6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} dependencies: mimic-response: 3.1.0 dev: true - /deep-is@0.1.4: + /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge@4.3.1: + /deepmerge/4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true - /defaults@1.0.4: + /defaults/1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 dev: true - /defer-to-connect@2.0.1: + /defer-to-connect/2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} dev: true - /define-data-property@1.1.4: + /define-data-property/1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: @@ -3815,7 +3648,7 @@ packages: gopd: 1.0.1 dev: true - /define-properties@1.2.1: + /define-properties/1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: @@ -3824,21 +3657,21 @@ packages: object-keys: 1.1.1 dev: true - /define-property@0.2.5: + /define-property/0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 0.1.7 dev: true - /define-property@1.0.0: + /define-property/1.0.0: resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} engines: {node: '>=0.10.0'} dependencies: is-descriptor: 1.0.3 dev: true - /define-property@2.0.2: + /define-property/2.0.2: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} dependencies: @@ -3846,28 +3679,28 @@ packages: isobject: 3.0.1 dev: true - /defined@1.0.1: + /defined/1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} dev: true - /delayed-stream@1.0.0: + /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /depd@1.1.2: + /depd/1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} - /depd@2.0.0: + /depd/2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - /deprecation@2.3.1: + /deprecation/2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} dev: true - /deps-sort@2.0.1: + /deps-sort/2.0.1: resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} hasBin: true dependencies: @@ -3877,31 +3710,30 @@ packages: through2: 2.0.5 dev: true - /des.js@1.1.0: + /des.js/1.1.0: resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /detect-indent@6.1.0: + /detect-indent/6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true - /detect-libc@2.0.2: + /detect-libc/2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} - requiresBuild: true dev: false optional: true - /detect-newline@3.1.0: + /detect-newline/3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true - /detective@5.2.1: + /detective/5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} hasBin: true @@ -3911,17 +3743,17 @@ packages: minimist: 1.2.8 dev: true - /diff-sequences@26.6.2: + /diff-sequences/26.6.2: resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} engines: {node: '>= 10.14.2'} dev: true - /diff@4.0.2: + /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true - /diffie-hellman@5.0.3: + /diffie-hellman/5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} dependencies: bn.js: 4.12.0 @@ -3929,26 +3761,26 @@ packages: randombytes: 2.1.0 dev: true - /dir-glob@3.0.1: + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /doctrine@3.0.0: + /doctrine/3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /domain-browser@1.2.0: + /domain-browser/1.2.0: resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} engines: {node: '>=0.4', npm: '>=1.2'} dev: true - /domexception@2.0.1: + /domexception/2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} engines: {node: '>=8'} deprecated: Use your platform's native DOMException instead @@ -3956,39 +3788,39 @@ packages: webidl-conversions: 5.0.0 dev: true - /dot-prop@5.3.0: + /dot-prop/5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true - /dotenv@8.6.0: + /dotenv/8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} dev: true - /duplexer2@0.1.4: + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /duplexer2/0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.8 dev: true - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - - /ecdsa-sig-formatter@1.0.11: + /ecdsa-sig-formatter/1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: safe-buffer: 5.2.1 dev: true - /electron-to-chromium@1.4.681: + /electron-to-chromium/1.4.681: resolution: {integrity: sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==} dev: true - /elliptic@6.5.4: + /elliptic/6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: bn.js: 4.12.0 @@ -4000,28 +3832,28 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /emittery@0.7.2: + /emittery/0.7.2: resolution: {integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==} engines: {node: '>=10'} dev: true - /emoji-regex@8.0.0: + /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true - /encoding@0.1.13: + /encoding/0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} dependencies: iconv-lite: 0.6.3 dev: true - /end-of-stream@1.4.4: + /end-of-stream/1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /enquirer@2.4.1: + /enquirer/2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} dependencies: @@ -4029,13 +3861,13 @@ packages: strip-ansi: 6.0.1 dev: true - /error-ex@1.3.2: + /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /error-polyfill@0.1.3: + /error-polyfill/0.1.3: resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==} dependencies: capability: 0.2.5 @@ -4043,7 +3875,7 @@ packages: u3: 0.1.1 dev: true - /es-abstract@1.22.4: + /es-abstract/1.22.4: resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} engines: {node: '>= 0.4'} dependencies: @@ -4090,19 +3922,19 @@ packages: which-typed-array: 1.1.14 dev: true - /es-define-property@1.0.0: + /es-define-property/1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 dev: true - /es-errors@1.3.0: + /es-errors/1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} dev: true - /es-set-tostringtag@2.0.3: + /es-set-tostringtag/2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: @@ -4111,13 +3943,13 @@ packages: hasown: 2.0.1 dev: true - /es-shim-unscopables@1.0.2: + /es-shim-unscopables/1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: hasown: 2.0.1 dev: true - /es-to-primitive@1.2.1: + /es-to-primitive/1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -4126,37 +3958,37 @@ packages: is-symbol: 1.0.4 dev: true - /es6-promise@4.2.8: + /es6-promise/4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} dev: true - /es6-promisify@5.0.0: + /es6-promisify/5.0.0: resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} dependencies: es6-promise: 4.2.8 dev: true - /escalade@3.1.2: + /escalade/3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true - /escape-string-regexp@1.0.5: + /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} dev: true - /escape-string-regexp@2.0.0: + /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: true - /escape-string-regexp@4.0.0: + /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /escodegen@2.1.0: + /escodegen/2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true @@ -4168,7 +4000,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-scope@5.1.1: + /eslint-scope/5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -4176,7 +4008,7 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope@7.2.2: + /eslint-scope/7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -4184,7 +4016,7 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.20.0): + /eslint-utils/3.0.0_eslint@8.20.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: @@ -4194,17 +4026,17 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-visitor-keys@2.1.0: + /eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint-visitor-keys@3.4.3: + /eslint-visitor-keys/3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.20.0: + /eslint/8.20.0: resolution: {integrity: sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true @@ -4212,13 +4044,13 @@ packages: '@eslint/eslintrc': 1.4.1 '@humanwhocodes/config-array': 0.9.5 ajv: 6.12.6 - chalk: 4.1.1 + chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 - eslint-utils: 3.0.0(eslint@8.20.0) + eslint-utils: 3.0.0_eslint@8.20.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 esquery: 1.5.0 @@ -4248,77 +4080,77 @@ packages: - supports-color dev: true - /espree@9.6.1: + /espree/9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn-jsx: 5.3.2_acorn@8.11.3 eslint-visitor-keys: 3.4.3 dev: true - /esprima@4.0.1: + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true - /esquery@1.5.0: + /esquery/1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse@4.3.0: + /esrecurse/4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse@4.3.0: + /estraverse/4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse@5.3.0: + /estraverse/5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /esutils@2.0.3: + /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /event-target-shim@5.0.1: + /event-target-shim/5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} dev: true - /events@2.1.0: + /events/2.1.0: resolution: {integrity: sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==} engines: {node: '>=0.4.x'} dev: true - /events@3.3.0: + /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: false - /evp_bytestokey@1.0.3: + /evp_bytestokey/1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 dev: true - /exec-sh@0.3.6: + /exec-sh/0.3.6: resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==} dev: true - /execa@1.0.0: + /execa/1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} dependencies: @@ -4331,7 +4163,7 @@ packages: strip-eof: 1.0.0 dev: true - /execa@4.1.0: + /execa/4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} dependencies: @@ -4346,7 +4178,7 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@5.1.1: + /execa/5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -4361,12 +4193,12 @@ packages: strip-final-newline: 2.0.0 dev: true - /exit@0.1.2: + /exit/0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: true - /expand-brackets@2.1.4: + /expand-brackets/2.1.4: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} dependencies: @@ -4381,14 +4213,14 @@ packages: - supports-color dev: true - /expand-tilde@2.0.2: + /expand-tilde/2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 dev: true - /expect@26.6.2: + /expect/26.6.2: resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==} engines: {node: '>= 10.14.2'} dependencies: @@ -4400,14 +4232,14 @@ packages: jest-regex-util: 26.0.0 dev: true - /extend-shallow@2.0.1: + /extend-shallow/2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 dev: true - /extend-shallow@3.0.2: + /extend-shallow/3.0.2: resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} engines: {node: '>=0.10.0'} dependencies: @@ -4415,15 +4247,15 @@ packages: is-extendable: 1.0.1 dev: true - /extend@1.3.0: + /extend/1.3.0: resolution: {integrity: sha512-hT3PRBs1qm4P8g2keUBZ9bPaFHAcS78o5aCd9WhFTluHZZgBEkI08R+zYrpRpImyRTH+dw7IlqxrOp9iartTkw==} dev: true - /extendable-error@0.1.7: + /extendable-error/0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true - /external-editor@3.1.0: + /external-editor/3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} dependencies: @@ -4432,7 +4264,7 @@ packages: tmp: 0.0.33 dev: true - /extglob@2.0.4: + /extglob/2.0.4: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} dependencies: @@ -4448,10 +4280,10 @@ packages: - supports-color dev: true - /fast-deep-equal@3.1.3: + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - /fast-glob@3.3.2: + /fast-glob/3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: @@ -4462,35 +4294,35 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-patch@3.1.1: + /fast-json-patch/3.1.1: resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} dev: true - /fast-json-stable-stringify@2.1.0: + /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein@2.0.6: + /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-safe-stringify@2.1.1: + /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true - /fastq@1.17.1: + /fastq/1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true - /fb-watchman@2.0.2: + /fb-watchman/2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true - /fido2-lib@3.4.1: + /fido2-lib/3.4.1: resolution: {integrity: sha512-efNrRbckp48AW7Q43o6gcp8/wnoBM7hwKikQntdiR2/NqVMPaCXFQs8kJ9wQqfv5V3PxZdg4kD9DpxdqYl6jxQ==} engines: {node: '>=10'} dependencies: @@ -4503,14 +4335,14 @@ packages: tldts: 6.0.23 dev: false - /file-entry-cache@6.0.1: + /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.2.0 dev: true - /fill-range@4.0.0: + /fill-range/4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4520,19 +4352,19 @@ packages: to-regex-range: 2.1.1 dev: true - /fill-range@7.0.1: + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - /filter-obj@1.1.0: + /filter-obj/1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} dev: true - /find-up@4.1.0: + /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -4540,7 +4372,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up@5.0.0: + /find-up/5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -4548,14 +4380,14 @@ packages: path-exists: 4.0.0 dev: true - /find-yarn-workspace-root2@1.2.16: + /find-yarn-workspace-root2/1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 dev: true - /flat-cache@3.2.0: + /flat-cache/3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -4564,11 +4396,11 @@ packages: rimraf: 3.0.2 dev: true - /flatted@3.3.1: + /flatted/3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true - /follow-redirects@1.5.10: + /follow-redirects/1.5.10: resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==} engines: {node: '>=4.0'} dependencies: @@ -4577,18 +4409,18 @@ packages: - supports-color dev: true - /for-each@0.3.3: + /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /for-in@1.0.2: + /for-in/1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} dev: true - /form-data@2.5.1: + /form-data/2.5.1: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} engines: {node: '>= 0.12'} dependencies: @@ -4597,7 +4429,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data@3.0.1: + /form-data/3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} dependencies: @@ -4606,19 +4438,19 @@ packages: mime-types: 2.1.35 dev: true - /fragment-cache@0.2.1: + /fragment-cache/0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} dependencies: map-cache: 0.2.2 dev: true - /fs-exists-sync@0.1.0: + /fs-exists-sync/0.1.0: resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} engines: {node: '>=0.10.0'} dev: true - /fs-extra@10.1.0: + /fs-extra/10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: @@ -4627,7 +4459,7 @@ packages: universalify: 2.0.1 dev: true - /fs-extra@11.2.0: + /fs-extra/11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} dependencies: @@ -4636,7 +4468,7 @@ packages: universalify: 2.0.1 dev: true - /fs-extra@7.0.1: + /fs-extra/7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} dependencies: @@ -4645,7 +4477,7 @@ packages: universalify: 0.1.2 dev: true - /fs-extra@8.1.0: + /fs-extra/8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: @@ -4654,18 +4486,18 @@ packages: universalify: 0.1.2 dev: true - /fs-minipass@2.1.0: + /fs-minipass/2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} dependencies: minipass: 3.3.6 dev: true - /fs.realpath@1.0.0: + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.3.3: + /fsevents/2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -4673,11 +4505,11 @@ packages: dev: true optional: true - /function-bind@1.1.2: + /function-bind/1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /function.prototype.name@1.1.6: + /function.prototype.name/1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: @@ -4687,29 +4519,29 @@ packages: functions-have-names: 1.2.3 dev: true - /functional-red-black-tree@1.0.1: + /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true - /functions-have-names@1.2.3: + /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensync@1.0.0-beta.2: + /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: true - /get-assigned-identifiers@1.2.0: + /get-assigned-identifiers/1.2.0: resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} dev: true - /get-caller-file@2.0.5: + /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.4: + /get-intrinsic/1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} dependencies: @@ -4720,36 +4552,36 @@ packages: hasown: 2.0.1 dev: true - /get-package-type@0.1.0: + /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true - /get-stdin@6.0.0: + /get-stdin/6.0.0: resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} engines: {node: '>=4'} dev: true - /get-stream@4.1.0: + /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} dependencies: pump: 3.0.0 dev: true - /get-stream@5.2.0: + /get-stream/5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: pump: 3.0.0 dev: true - /get-stream@6.0.1: + /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /get-symbol-description@1.0.2: + /get-symbol-description/1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: @@ -4758,12 +4590,12 @@ packages: get-intrinsic: 1.2.4 dev: true - /get-value@2.0.6: + /get-value/2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} dev: true - /git-config-path@1.0.1: + /git-config-path/1.0.1: resolution: {integrity: sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==} engines: {node: '>=0.10.0'} dependencies: @@ -4772,7 +4604,7 @@ packages: homedir-polyfill: 1.0.3 dev: true - /git-raw-commits@2.0.11: + /git-raw-commits/2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} hasBin: true @@ -4784,7 +4616,7 @@ packages: through2: 4.0.2 dev: true - /gitlab@10.2.1: + /gitlab/10.2.1: resolution: {integrity: sha512-z+DxRF1C9uayVbocs9aJkJz+kGy14TSm1noB/rAIEBbXOkOYbjKxyuqJzt+0zeFpXFdgA0yq6DVVbvM7HIfGwg==} engines: {node: '>=10.0.0'} deprecated: 'This package has found a new home in the @gitbeaker organization. For the latest GitLab API library for node, browser, and deno usage, check out @gitbeaker/rest. A full list of the features can be found here: https://github.com/jdalrymple/gitbeaker#readme' @@ -4792,7 +4624,7 @@ packages: form-data: 2.5.1 humps: 2.0.1 ky: 0.12.0 - ky-universal: 0.3.0(ky@0.12.0) + ky-universal: 0.3.0_ky@0.12.0 li: 1.3.0 query-string: 6.14.1 universal-url: 2.0.0 @@ -4800,21 +4632,21 @@ packages: - encoding dev: true - /glob-parent@5.1.2: + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true - /glob-parent@6.0.2: + /glob-parent/6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true - /glob@7.2.3: + /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -4825,33 +4657,33 @@ packages: path-is-absolute: 1.0.1 dev: true - /global-dirs@0.1.1: + /global-dirs/0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} dependencies: ini: 1.3.8 dev: true - /globals@11.12.0: + /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals@13.24.0: + /globals/13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: + /globalthis/1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 dev: true - /globby@11.1.0: + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -4863,13 +4695,13 @@ packages: slash: 3.0.0 dev: true - /gopd@1.0.1: + /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.4 dev: true - /got@11.8.6: + /got/11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} dependencies: @@ -4886,21 +4718,20 @@ packages: responselike: 2.0.1 dev: true - /graceful-fs@4.2.11: + /graceful-fs/4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true - /grapheme-splitter@1.0.4: + /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /growly@1.3.0: + /growly/1.3.0: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} - requiresBuild: true dev: true optional: true - /gzip-size@5.1.1: + /gzip-size/5.1.1: resolution: {integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==} engines: {node: '>=6'} dependencies: @@ -4908,53 +4739,53 @@ packages: pify: 4.0.1 dev: true - /hard-rejection@2.1.0: + /hard-rejection/2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} dev: true - /has-bigints@1.0.2: + /has-bigints/1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag@2.0.0: + /has-flag/2.0.0: resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} engines: {node: '>=0.10.0'} dev: true - /has-flag@3.0.0: + /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} dev: true - /has-flag@4.0.0: + /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.2: + /has-property-descriptors/1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 dev: true - /has-proto@1.0.3: + /has-proto/1.0.3: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} dev: true - /has-symbols@1.0.3: + /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.2: + /has-tostringtag/1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has-value@0.3.1: + /has-value/0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} dependencies: @@ -4963,7 +4794,7 @@ packages: isobject: 2.1.0 dev: true - /has-value@1.0.0: + /has-value/1.0.0: resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} engines: {node: '>=0.10.0'} dependencies: @@ -4972,12 +4803,12 @@ packages: isobject: 3.0.1 dev: true - /has-values@0.1.4: + /has-values/0.1.4: resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} engines: {node: '>=0.10.0'} dev: true - /has-values@1.0.0: + /has-values/1.0.0: resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} engines: {node: '>=0.10.0'} dependencies: @@ -4985,12 +4816,12 @@ packages: kind-of: 4.0.0 dev: true - /has@1.0.4: + /has/1.0.4: resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} dev: true - /hash-base@3.1.0: + /hash-base/3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} dependencies: @@ -4999,26 +4830,26 @@ packages: safe-buffer: 5.2.1 dev: true - /hash.js@1.1.7: + /hash.js/1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /hasown@2.0.1: + /hasown/2.0.1: resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 dev: true - /hasurl@1.0.0: + /hasurl/1.0.0: resolution: {integrity: sha512-43ypUd3DbwyCT01UYpA99AEZxZ4aKtRxWGBHEIbjcOsUghd9YUON0C+JF6isNjaiwC/UF5neaUudy6JS9jZPZQ==} engines: {node: '>= 4'} dev: true - /hmac-drbg@1.0.1: + /hmac-drbg/1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 @@ -5026,49 +4857,49 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /homedir-polyfill@1.0.3: + /homedir-polyfill/1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 dev: true - /homedir@0.6.0: + /homedir/0.6.0: resolution: {integrity: sha512-KZFBHenkVuyyG4uaqRSXqWJr3HTxcaPguM7rU1BlH/mtbDlzaXNSXTa9AhV+fXEjrNemHu9vtLRIaM8/8OW0xA==} dev: false - /hosted-git-info@2.8.9: + /hosted-git-info/2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info@4.1.0: + /hosted-git-info/4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true - /html-encoding-sniffer@2.0.1: + /html-encoding-sniffer/2.0.1: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} engines: {node: '>=10'} dependencies: whatwg-encoding: 1.0.5 dev: true - /html-escaper@2.0.2: + /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /htmlescape@1.1.1: + /htmlescape/1.1.1: resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} engines: {node: '>=0.10'} dev: true - /http-cache-semantics@4.1.1: + /http-cache-semantics/4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true - /http-errors@1.7.2: + /http-errors/1.7.2: resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} engines: {node: '>= 0.6'} dependencies: @@ -5077,8 +4908,20 @@ packages: setprototypeof: 1.1.1 statuses: 1.5.0 toidentifier: 1.0.0 + dev: false + + /http-errors/1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: true - /http-proxy-agent@2.1.0: + /http-proxy-agent/2.1.0: resolution: {integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==} engines: {node: '>= 4.5.0'} dependencies: @@ -5088,7 +4931,7 @@ packages: - supports-color dev: true - /http-proxy-agent@4.0.1: + /http-proxy-agent/4.0.1: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} dependencies: @@ -5099,7 +4942,7 @@ packages: - supports-color dev: true - /http2-wrapper@1.0.3: + /http2-wrapper/1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} dependencies: @@ -5107,11 +4950,11 @@ packages: resolve-alpn: 1.2.1 dev: true - /https-browserify@1.0.0: + /https-browserify/1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} dev: true - /https-proxy-agent@2.2.4: + /https-proxy-agent/2.2.4: resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==} engines: {node: '>= 4.5.0'} dependencies: @@ -5121,7 +4964,7 @@ packages: - supports-color dev: true - /https-proxy-agent@5.0.1: + /https-proxy-agent/5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: @@ -5131,58 +4974,58 @@ packages: - supports-color dev: true - /human-id@1.0.2: + /human-id/1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true - /human-signals@1.1.1: + /human-signals/1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} dev: true - /human-signals@2.1.0: + /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true - /humps@2.0.1: + /humps/2.0.1: resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} dev: true - /husky@7.0.4: + /husky/7.0.4: resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==} engines: {node: '>=12'} hasBin: true dev: true - /hyperlinker@1.0.0: + /hyperlinker/1.0.0: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} dev: true - /iconv-lite@0.4.24: + /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /iconv-lite@0.6.3: + /iconv-lite/0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /ieee754@1.2.1: + /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore@5.3.1: + /ignore/5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} dev: true - /import-fresh@3.3.0: + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -5190,7 +5033,7 @@ packages: resolve-from: 4.0.0 dev: true - /import-local@3.1.0: + /import-local/3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -5199,46 +5042,46 @@ packages: resolve-cwd: 3.0.0 dev: true - /imurmurhash@0.1.4: + /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /in-publish@2.0.0: + /in-publish/2.0.0: resolution: {integrity: sha512-S/Qt3SBbP15k2Yll5xaguu2c5E1LZnhwERvHt/FqUx+Ae/lYHVf2ZE96hUgcXJkcCbXoxkkSRohsG/YXXMNOCQ==} hasBin: true dev: true - /indent-string@4.0.0: + /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /inflight@1.0.6: + /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits@2.0.3: + /inherits/2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - /inherits@2.0.4: + /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /ini@1.3.8: + /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /inline-source-map@0.6.3: + /inline-source-map/0.6.3: resolution: {integrity: sha512-1aVsPEsJWMJq/pdMU61CDlm1URcW702MTB4w9/zUjMus6H/Py8o7g68Pr9D4I6QluWGt/KdmswuRhaA05xVR1w==} dependencies: source-map: 0.5.7 dev: true - /insert-module-globals@7.2.1: + /insert-module-globals/7.2.1: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true dependencies: @@ -5254,7 +5097,7 @@ packages: xtend: 4.0.2 dev: true - /internal-slot@1.0.7: + /internal-slot/1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: @@ -5263,14 +5106,14 @@ packages: side-channel: 1.0.5 dev: true - /is-accessor-descriptor@1.0.1: + /is-accessor-descriptor/1.0.1: resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} engines: {node: '>= 0.10'} dependencies: hasown: 2.0.1 dev: true - /is-array-buffer@3.0.4: + /is-array-buffer/3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} dependencies: @@ -5278,17 +5121,17 @@ packages: get-intrinsic: 1.2.4 dev: true - /is-arrayish@0.2.1: + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint@1.0.4: + /is-bigint/1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-boolean-object@1.1.2: + /is-boolean-object/1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -5296,50 +5139,50 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-buffer@1.1.6: + /is-buffer/1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-callable@1.2.7: + /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-ci@2.0.0: + /is-ci/2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} hasBin: true dependencies: ci-info: 2.0.0 dev: true - /is-ci@3.0.1: + /is-ci/3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: ci-info: 3.9.0 dev: true - /is-core-module@2.13.1: + /is-core-module/2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.1 dev: true - /is-data-descriptor@1.0.1: + /is-data-descriptor/1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} engines: {node: '>= 0.4'} dependencies: hasown: 2.0.1 dev: true - /is-date-object@1.0.5: + /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 dev: true - /is-descriptor@0.1.7: + /is-descriptor/0.1.7: resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} engines: {node: '>= 0.4'} dependencies: @@ -5347,7 +5190,7 @@ packages: is-data-descriptor: 1.0.1 dev: true - /is-descriptor@1.0.3: + /is-descriptor/1.0.3: resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} engines: {node: '>= 0.4'} dependencies: @@ -5355,99 +5198,98 @@ packages: is-data-descriptor: 1.0.1 dev: true - /is-docker@2.2.1: + /is-docker/2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - requiresBuild: true dev: true optional: true - /is-extendable@0.1.1: + /is-extendable/0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} dev: true - /is-extendable@1.0.1: + /is-extendable/1.0.1: resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} engines: {node: '>=0.10.0'} dependencies: is-plain-object: 2.0.4 dev: true - /is-extglob@2.1.1: + /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-fullwidth-code-point@3.0.0: + /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true - /is-generator-fn@2.1.0: + /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true - /is-glob@4.0.3: + /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-negative-zero@2.0.3: + /is-negative-zero/2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true - /is-number-object@1.0.7: + /is-number-object/1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 dev: true - /is-number@3.0.0: + /is-number/3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /is-number@7.0.0: + /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-obj@2.0.0: + /is-obj/2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true - /is-plain-obj@1.1.0: + /is-plain-obj/1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} dev: true - /is-plain-object@2.0.4: + /is-plain-object/2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /is-plain-object@5.0.0: + /is-plain-object/5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} dev: true - /is-potential-custom-element-name@1.0.1: + /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-regex@1.1.4: + /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -5455,112 +5297,111 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-shared-array-buffer@1.0.3: + /is-shared-array-buffer/1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 dev: true - /is-stream@1.1.0: + /is-stream/1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} dev: true - /is-stream@2.0.1: + /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-string@1.0.7: + /is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 dev: true - /is-subdir@1.2.0: + /is-subdir/1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} dependencies: better-path-resolve: 1.0.0 dev: true - /is-symbol@1.0.4: + /is-symbol/1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-text-path@1.0.1: + /is-text-path/1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true - /is-typed-array@1.1.13: + /is-typed-array/1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.14 dev: true - /is-typedarray@1.0.0: + /is-typedarray/1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true - /is-weakref@1.0.2: + /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.7 dev: true - /is-windows@1.0.2: + /is-windows/1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true - /is-wsl@2.2.0: + /is-wsl/2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - requiresBuild: true dependencies: is-docker: 2.2.1 dev: true optional: true - /isarray@1.0.0: + /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isarray@2.0.5: + /isarray/2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true - /isexe@2.0.0: + /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isobject@2.1.0: + /isobject/2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} engines: {node: '>=0.10.0'} dependencies: isarray: 1.0.0 dev: true - /isobject@3.0.1: + /isobject/3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: true - /istanbul-lib-coverage@3.2.2: + /istanbul-lib-coverage/3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument@4.0.3: + /istanbul-lib-instrument/4.0.3: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: @@ -5572,7 +5413,7 @@ packages: - supports-color dev: true - /istanbul-lib-instrument@5.2.1: + /istanbul-lib-instrument/5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: @@ -5585,7 +5426,7 @@ packages: - supports-color dev: true - /istanbul-lib-report@3.0.1: + /istanbul-lib-report/3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} dependencies: @@ -5594,7 +5435,7 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-lib-source-maps@4.0.1: + /istanbul-lib-source-maps/4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: @@ -5605,7 +5446,7 @@ packages: - supports-color dev: true - /istanbul-reports@3.1.7: + /istanbul-reports/3.1.7: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: @@ -5613,7 +5454,7 @@ packages: istanbul-lib-report: 3.0.1 dev: true - /jest-changed-files@26.6.2: + /jest-changed-files/26.6.2: resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} engines: {node: '>= 10.14.2'} dependencies: @@ -5622,20 +5463,20 @@ packages: throat: 5.0.0 dev: true - /jest-cli@26.6.3(ts-node@10.9.2): + /jest-cli/26.6.3: resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} engines: {node: '>= 10.14.2'} hasBin: true dependencies: - '@jest/core': 26.6.3(ts-node@10.9.2) + '@jest/core': 26.6.3 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - chalk: 4.1.1 + chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 is-ci: 2.0.0 - jest-config: 26.6.3(ts-node@10.9.2) + jest-config: 26.6.3 jest-util: 26.6.2 jest-validate: 26.6.2 prompts: 2.4.2 @@ -5648,7 +5489,7 @@ packages: - utf-8-validate dev: true - /jest-config@26.6.3(ts-node@10.9.2): + /jest-config/26.6.3: resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} engines: {node: '>= 10.14.2'} peerDependencies: @@ -5658,24 +5499,23 @@ packages: optional: true dependencies: '@babel/core': 7.23.9 - '@jest/test-sequencer': 26.6.3(ts-node@10.9.2) + '@jest/test-sequencer': 26.6.3 '@jest/types': 26.6.2 - babel-jest: 26.6.3(@babel/core@7.23.9) - chalk: 4.1.1 + babel-jest: 26.6.3_@babel+core@7.23.9 + chalk: 4.1.2 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 jest-environment-jsdom: 26.6.2 jest-environment-node: 26.6.2 jest-get-type: 26.3.0 - jest-jasmine2: 26.6.3(ts-node@10.9.2) + jest-jasmine2: 26.6.3 jest-regex-util: 26.0.0 jest-resolve: 26.6.2 jest-util: 26.6.2 jest-validate: 26.6.2 micromatch: 4.0.5 pretty-format: 26.6.2 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@4.9.4) transitivePeerDependencies: - bufferutil - canvas @@ -5683,35 +5523,35 @@ packages: - utf-8-validate dev: true - /jest-diff@26.6.2: + /jest-diff/26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 diff-sequences: 26.6.2 jest-get-type: 26.3.0 pretty-format: 26.6.2 dev: true - /jest-docblock@26.0.0: + /jest-docblock/26.0.0: resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} engines: {node: '>= 10.14.2'} dependencies: detect-newline: 3.1.0 dev: true - /jest-each@26.6.2: + /jest-each/26.6.2: resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - chalk: 4.1.1 + chalk: 4.1.2 jest-get-type: 26.3.0 jest-util: 26.6.2 pretty-format: 26.6.2 dev: true - /jest-environment-jsdom@26.6.2: + /jest-environment-jsdom/26.6.2: resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} engines: {node: '>= 10.14.2'} dependencies: @@ -5729,7 +5569,7 @@ packages: - utf-8-validate dev: true - /jest-environment-node@26.6.2: + /jest-environment-node/26.6.2: resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} engines: {node: '>= 10.14.2'} dependencies: @@ -5741,12 +5581,12 @@ packages: jest-util: 26.6.2 dev: true - /jest-get-type@26.3.0: + /jest-get-type/26.3.0: resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} engines: {node: '>= 10.14.2'} dev: true - /jest-haste-map@26.6.2: + /jest-haste-map/26.6.2: resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} engines: {node: '>= 10.14.2'} dependencies: @@ -5769,7 +5609,7 @@ packages: - supports-color dev: true - /jest-jasmine2@26.6.3(ts-node@10.9.2): + /jest-jasmine2/26.6.3: resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} engines: {node: '>= 10.14.2'} dependencies: @@ -5779,14 +5619,14 @@ packages: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.11.18 - chalk: 4.1.1 + chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 is-generator-fn: 2.1.0 jest-each: 26.6.2 jest-matcher-utils: 26.6.2 jest-message-util: 26.6.2 - jest-runtime: 26.6.3(ts-node@10.9.2) + jest-runtime: 26.6.3 jest-snapshot: 26.6.2 jest-util: 26.6.2 pretty-format: 26.6.2 @@ -5799,7 +5639,7 @@ packages: - utf-8-validate dev: true - /jest-leak-detector@26.6.2: + /jest-leak-detector/26.6.2: resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} engines: {node: '>= 10.14.2'} dependencies: @@ -5807,24 +5647,24 @@ packages: pretty-format: 26.6.2 dev: true - /jest-matcher-utils@26.6.2: + /jest-matcher-utils/26.6.2: resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} engines: {node: '>= 10.14.2'} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 jest-diff: 26.6.2 jest-get-type: 26.3.0 pretty-format: 26.6.2 dev: true - /jest-message-util@26.6.2: + /jest-message-util/26.6.2: resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} engines: {node: '>= 10.14.2'} dependencies: '@babel/code-frame': 7.23.5 '@jest/types': 26.6.2 '@types/stack-utils': 2.0.3 - chalk: 4.1.1 + chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 pretty-format: 26.6.2 @@ -5832,7 +5672,7 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock@26.6.2: + /jest-mock/26.6.2: resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} engines: {node: '>= 10.14.2'} dependencies: @@ -5840,7 +5680,7 @@ packages: '@types/node': 18.11.18 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@26.6.2): + /jest-pnp-resolver/1.2.3_jest-resolve@26.6.2: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -5852,12 +5692,12 @@ packages: jest-resolve: 26.6.2 dev: true - /jest-regex-util@26.0.0: + /jest-regex-util/26.0.0: resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} engines: {node: '>= 10.14.2'} dev: true - /jest-resolve-dependencies@26.6.3: + /jest-resolve-dependencies/26.6.3: resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} engines: {node: '>= 10.14.2'} dependencies: @@ -5868,21 +5708,21 @@ packages: - supports-color dev: true - /jest-resolve@26.6.2: + /jest-resolve/26.6.2: resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - chalk: 4.1.1 + chalk: 4.1.2 graceful-fs: 4.2.11 - jest-pnp-resolver: 1.2.3(jest-resolve@26.6.2) + jest-pnp-resolver: 1.2.3_jest-resolve@26.6.2 jest-util: 26.6.2 read-pkg-up: 7.0.1 resolve: 1.22.8 slash: 3.0.0 dev: true - /jest-runner@26.6.3(ts-node@10.9.2): + /jest-runner/26.6.3: resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} engines: {node: '>= 10.14.2'} dependencies: @@ -5891,17 +5731,17 @@ packages: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 '@types/node': 18.11.18 - chalk: 4.1.1 + chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 26.6.3(ts-node@10.9.2) + jest-config: 26.6.3 jest-docblock: 26.0.0 jest-haste-map: 26.6.2 jest-leak-detector: 26.6.2 jest-message-util: 26.6.2 jest-resolve: 26.6.2 - jest-runtime: 26.6.3(ts-node@10.9.2) + jest-runtime: 26.6.3 jest-util: 26.6.2 jest-worker: 26.6.2 source-map-support: 0.5.21 @@ -5914,7 +5754,7 @@ packages: - utf-8-validate dev: true - /jest-runtime@26.6.3(ts-node@10.9.2): + /jest-runtime/26.6.3: resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} engines: {node: '>= 10.14.2'} hasBin: true @@ -5928,13 +5768,13 @@ packages: '@jest/transform': 26.6.2 '@jest/types': 26.6.2 '@types/yargs': 15.0.19 - chalk: 4.1.1 + chalk: 4.1.2 cjs-module-lexer: 0.6.0 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - jest-config: 26.6.3(ts-node@10.9.2) + jest-config: 26.6.3 jest-haste-map: 26.6.2 jest-message-util: 26.6.2 jest-mock: 26.6.2 @@ -5954,7 +5794,7 @@ packages: - utf-8-validate dev: true - /jest-serializer@26.6.2: + /jest-serializer/26.6.2: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: @@ -5962,7 +5802,7 @@ packages: graceful-fs: 4.2.11 dev: true - /jest-snapshot@26.6.2: + /jest-snapshot/26.6.2: resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==} engines: {node: '>= 10.14.2'} dependencies: @@ -5970,7 +5810,7 @@ packages: '@jest/types': 26.6.2 '@types/babel__traverse': 7.20.5 '@types/prettier': 2.7.3 - chalk: 4.1.1 + chalk: 4.1.2 expect: 26.6.2 graceful-fs: 4.2.11 jest-diff: 26.6.2 @@ -5986,31 +5826,31 @@ packages: - supports-color dev: true - /jest-util@26.6.2: + /jest-util/26.6.2: resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 '@types/node': 18.11.18 - chalk: 4.1.1 + chalk: 4.1.2 graceful-fs: 4.2.11 is-ci: 2.0.0 micromatch: 4.0.5 dev: true - /jest-validate@26.6.2: + /jest-validate/26.6.2: resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 camelcase: 6.3.0 - chalk: 4.1.1 + chalk: 4.1.2 jest-get-type: 26.3.0 leven: 3.1.0 pretty-format: 26.6.2 dev: true - /jest-watcher@26.6.2: + /jest-watcher/26.6.2: resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} engines: {node: '>= 10.14.2'} dependencies: @@ -6018,12 +5858,12 @@ packages: '@jest/types': 26.6.2 '@types/node': 18.11.18 ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 jest-util: 26.6.2 string-length: 4.0.2 dev: true - /jest-worker@26.6.2: + /jest-worker/26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: @@ -6032,14 +5872,30 @@ packages: supports-color: 7.2.0 dev: true - /jest@26.0.1(ts-node@10.9.2): + /jest/26.0.1: resolution: {integrity: sha512-29Q54kn5Bm7ZGKIuH2JRmnKl85YRigp0o0asTc6Sb6l2ch1DCXIeZTLLFy9ultJvhkTqbswF5DEx4+RlkmCxWg==} engines: {node: '>= 10.14.2'} hasBin: true dependencies: - '@jest/core': 26.6.3(ts-node@10.9.2) + '@jest/core': 26.6.3 + import-local: 3.1.0 + jest-cli: 26.6.3 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /jest/26.6.3: + resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} + engines: {node: '>= 10.14.2'} + hasBin: true + dependencies: + '@jest/core': 26.6.3 import-local: 3.1.0 - jest-cli: 26.6.3(ts-node@10.9.2) + jest-cli: 26.6.3 transitivePeerDependencies: - bufferutil - canvas @@ -6048,18 +5904,18 @@ packages: - utf-8-validate dev: true - /jose@4.15.4: + /jose/4.15.4: resolution: {integrity: sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==} dev: false - /js-sha256@0.9.0: + /js-sha256/0.9.0: resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} - /js-tokens@4.0.0: + /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml@3.14.1: + /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -6067,14 +5923,14 @@ packages: esprima: 4.0.1 dev: true - /js-yaml@4.1.0: + /js-yaml/4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true - /jsdom@16.7.0: + /jsdom/16.7.0: resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} peerDependencies: @@ -6116,54 +5972,54 @@ packages: - utf-8-validate dev: true - /jsesc@2.5.2: + /jsesc/2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true dev: true - /json-buffer@3.0.1: + /json-buffer/3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true - /json-parse-even-better-errors@2.3.1: + /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-schema-traverse@0.4.1: + /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse@1.0.0: + /json-schema-traverse/1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - /json-stable-stringify-without-jsonify@1.0.1: + /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json-stable-stringify@0.0.1: + /json-stable-stringify/0.0.1: resolution: {integrity: sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw==} dependencies: jsonify: 0.0.1 dev: true - /json5@2.2.3: + /json5/2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true - /jsonc-parser@3.2.1: + /jsonc-parser/3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true - /jsonfile@4.0.0: + /jsonfile/4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 dev: true - /jsonfile@6.1.0: + /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.1 @@ -6171,25 +6027,25 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonify@0.0.1: + /jsonify/0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} dev: true - /jsonpack@1.1.5: + /jsonpack/1.1.5: resolution: {integrity: sha512-d2vwomK605ks7Q+uCpbwGyoIF5j+UZuJjlYcugISBt3CxM+eBo/W6y63yVPIyIvbYON+pvJYsYZjCYbzqJj/xQ==} dev: true - /jsonparse@1.3.1: + /jsonparse/1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} dev: true - /jsonpointer@5.0.1: + /jsonpointer/5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} dev: true - /jsonwebtoken@8.5.1: + /jsonwebtoken/8.5.1: resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} engines: {node: '>=4', npm: '>=1.4.28'} dependencies: @@ -6205,7 +6061,7 @@ packages: semver: 5.7.2 dev: true - /jwa@1.4.1: + /jwa/1.4.1: resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} dependencies: buffer-equal-constant-time: 1.0.1 @@ -6213,49 +6069,49 @@ packages: safe-buffer: 5.2.1 dev: true - /jws@3.2.2: + /jws/3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 dev: true - /keyv@4.5.4: + /keyv/4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 dev: true - /kind-of@3.2.2: + /kind-of/3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of@4.0.0: + /kind-of/4.0.0: resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} engines: {node: '>=0.10.0'} dependencies: is-buffer: 1.1.6 dev: true - /kind-of@6.0.3: + /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /kleur@3.0.3: + /kleur/3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true - /kleur@4.1.5: + /kleur/4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} dev: true - /ky-universal@0.3.0(ky@0.12.0): + /ky-universal/0.3.0_ky@0.12.0: resolution: {integrity: sha512-CM4Bgb2zZZpsprcjI6DNYTaH3oGHXL2u7BU4DK+lfCuC4snkt9/WRpMYeKbBbXscvKkeqBwzzjFX2WwmKY5K/A==} engines: {node: '>=8'} peerDependencies: @@ -6268,24 +6124,24 @@ packages: - encoding dev: true - /ky@0.12.0: + /ky/0.12.0: resolution: {integrity: sha512-t9b7v3V2fGwAcQnnDDQwKQGF55eWrf4pwi1RN08Fy8b/9GEwV7Ea0xQiaSW6ZbeghBHIwl8kgnla4vVo9seepQ==} engines: {node: '>=8'} dev: true - /labeled-stream-splicer@2.0.2: + /labeled-stream-splicer/2.0.2: resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} dependencies: inherits: 2.0.4 stream-splicer: 2.0.1 dev: true - /leven@3.1.0: + /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn@0.4.1: + /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -6293,15 +6149,15 @@ packages: type-check: 0.4.0 dev: true - /li@1.3.0: + /li/1.3.0: resolution: {integrity: sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==} dev: true - /lines-and-columns@1.2.4: + /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /load-yaml-file@0.2.0: + /load-yaml-file/0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} dependencies: @@ -6311,199 +6167,199 @@ packages: strip-bom: 3.0.0 dev: true - /localstorage-memory@1.0.3: + /localstorage-memory/1.0.3: resolution: {integrity: sha512-t9P8WB6DcVttbw/W4PIE8HOqum8Qlvx5SjR6oInwR9Uia0EEmyUeBh7S+weKByW+l/f45Bj4L/dgZikGFDM6ng==} dev: true - /locate-path@5.0.0: + /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path@6.0.0: + /locate-path/6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash.camelcase@4.3.0: + /lodash.camelcase/4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.find@4.6.0: + /lodash.find/4.6.0: resolution: {integrity: sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==} dev: true - /lodash.flatten@4.4.0: + /lodash.flatten/4.4.0: resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} dev: true - /lodash.includes@4.3.0: + /lodash.includes/4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} dev: true - /lodash.isboolean@3.0.3: + /lodash.isboolean/3.0.3: resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} dev: true - /lodash.isinteger@4.0.4: + /lodash.isinteger/4.0.4: resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} dev: true - /lodash.isnumber@3.0.3: + /lodash.isnumber/3.0.3: resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} dev: true - /lodash.isobject@3.0.2: + /lodash.isobject/3.0.2: resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} dev: true - /lodash.isplainobject@4.0.6: + /lodash.isplainobject/4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true - /lodash.isstring@4.0.1: + /lodash.isstring/4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: true - /lodash.kebabcase@4.1.1: + /lodash.kebabcase/4.1.1: resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} dev: true - /lodash.keys@4.2.0: + /lodash.keys/4.2.0: resolution: {integrity: sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==} dev: true - /lodash.mapvalues@4.6.0: + /lodash.mapvalues/4.6.0: resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} dev: true - /lodash.memoize@3.0.4: + /lodash.memoize/3.0.4: resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} dev: true - /lodash.memoize@4.1.2: + /lodash.memoize/4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true - /lodash.merge@4.6.2: + /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.mergewith@4.6.2: + /lodash.mergewith/4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: true - /lodash.once@4.1.1: + /lodash.once/4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} dev: true - /lodash.snakecase@4.1.1: + /lodash.snakecase/4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} dev: true - /lodash.sortby@4.7.0: + /lodash.sortby/4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true - /lodash.startcase@4.4.0: + /lodash.startcase/4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true - /lodash.uniq@4.5.0: + /lodash.uniq/4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true - /lodash.upperfirst@4.3.1: + /lodash.upperfirst/4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} dev: true - /lodash@4.17.21: + /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /lowercase-keys@2.0.0: + /lowercase-keys/2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} dev: true - /lru-cache@4.1.5: + /lru-cache/4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: pseudomap: 1.0.2 yallist: 2.1.2 dev: true - /lru-cache@5.1.1: + /lru-cache/5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 dev: true - /lru-cache@6.0.0: + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /lru_map@0.4.1: + /lru_map/0.4.1: resolution: {integrity: sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==} dev: false - /lunr@2.3.9: + /lunr/2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} dev: true - /make-dir@4.0.0: + /make-dir/4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: semver: 7.6.0 dev: true - /make-error@1.3.6: + /make-error/1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror@1.0.12: + /makeerror/1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: true - /map-cache@0.2.2: + /map-cache/0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} dev: true - /map-obj@1.0.1: + /map-obj/1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} dev: true - /map-obj@4.3.0: + /map-obj/4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} dev: true - /map-visit@1.0.0: + /map-visit/1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 dev: true - /marked@4.3.0: + /marked/4.3.0: resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} engines: {node: '>= 12'} hasBin: true dev: true - /md5.js@1.3.5: + /md5.js/1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 @@ -6511,7 +6367,7 @@ packages: safe-buffer: 5.2.1 dev: true - /memfs-or-file-map-to-github-branch@1.2.1: + /memfs-or-file-map-to-github-branch/1.2.1: resolution: {integrity: sha512-I/hQzJ2a/pCGR8fkSQ9l5Yx+FQ4e7X6blNHyWBm2ojeFLT3GVzGkTj7xnyWpdclrr7Nq4dmx3xrvu70m3ypzAQ==} dependencies: '@octokit/rest': 18.12.0 @@ -6519,7 +6375,7 @@ packages: - encoding dev: true - /meow@6.1.1: + /meow/6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} dependencies: @@ -6536,7 +6392,7 @@ packages: yargs-parser: 18.1.3 dev: true - /meow@8.1.2: + /meow/8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} dependencies: @@ -6553,16 +6409,16 @@ packages: yargs-parser: 20.2.9 dev: true - /merge-stream@2.0.0: + /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge2@1.4.1: + /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /micromatch@3.1.10: + /micromatch/3.1.10: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} dependencies: @@ -6583,7 +6439,7 @@ packages: - supports-color dev: true - /micromatch@4.0.5: + /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: @@ -6591,7 +6447,7 @@ packages: picomatch: 2.3.1 dev: true - /miller-rabin@4.0.1: + /miller-rabin/4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true dependencies: @@ -6599,60 +6455,60 @@ packages: brorand: 1.1.0 dev: true - /mime-db@1.52.0: + /mime-db/1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: true - /mime-types@2.1.35: + /mime-types/2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /mimic-fn@2.1.0: + /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} dev: true - /mimic-response@1.0.1: + /mimic-response/1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} dev: true - /mimic-response@3.1.0: + /mimic-response/3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} dev: true - /min-indent@1.0.1: + /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true - /minimalistic-assert@1.0.1: + /minimalistic-assert/1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimalistic-crypto-utils@1.0.1: + /minimalistic-crypto-utils/1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} dev: true - /minimatch@3.1.2: + /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch@9.0.3: + /minimatch/9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist-options@4.1.0: + /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} dependencies: @@ -6661,23 +6517,23 @@ packages: kind-of: 6.0.3 dev: true - /minimist@1.2.8: + /minimist/1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@3.3.6: + /minipass/3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 dev: true - /minipass@5.0.0: + /minipass/5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} dev: true - /minizlib@2.1.2: + /minizlib/2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} dependencies: @@ -6685,7 +6541,7 @@ packages: yallist: 4.0.0 dev: true - /mixin-deep@1.3.2: + /mixin-deep/1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} dependencies: @@ -6693,25 +6549,25 @@ packages: is-extendable: 1.0.1 dev: true - /mixme@0.5.10: + /mixme/0.5.10: resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} engines: {node: '>= 8.0.0'} dev: true - /mkdirp@0.5.6: + /mkdirp/0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /mkdirp@1.0.4: + /mkdirp/1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true dev: true - /module-deps@6.2.3: + /module-deps/6.2.3: resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} engines: {node: '>= 0.8.0'} hasBin: true @@ -6733,24 +6589,30 @@ packages: xtend: 4.0.2 dev: true - /ms@2.0.0: + /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /ms@2.1.2: + /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /ms@2.1.3: + /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /mustache@4.0.0: + /mustache/4.0.0: resolution: {integrity: sha512-FJgjyX/IVkbXBXYUwH+OYwQKqWpFPLaLVESd70yHjSDunwzV2hZOoTBvPf4KLoxesUzzyfTH6F784Uqd7Wm5yA==} engines: {npm: '>=1.4.0'} hasBin: true + dev: false + + /mustache/4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + dev: true - /nanomatch@1.2.13: + /nanomatch/1.2.13: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} dependencies: @@ -6769,16 +6631,16 @@ packages: - supports-color dev: true - /natural-compare@1.4.0: + /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /near-abi@0.1.1: + /near-abi/0.1.1: resolution: {integrity: sha512-RVDI8O+KVxRpC3KycJ1bpfVj9Zv+xvq9PlW1yIFl46GhrnLw83/72HqHGjGDjQ8DtltkcpSjY9X3YIGZ+1QyzQ==} dependencies: '@types/json-schema': 7.0.15 - /near-api-js@2.1.4: + /near-api-js/2.1.4: resolution: {integrity: sha512-e1XicyvJvQMtu7qrG8oWyAdjHJJCoy+cvbW6h2Dky4yj7vC85omQz/x7IgKl71VhzDj2/TGUwjTVESp6NSe75A==} dependencies: '@near-js/accounts': 0.1.4 @@ -6793,24 +6655,24 @@ packages: '@near-js/utils': 0.0.4 '@near-js/wallet-account': 0.0.7 ajv: 8.11.2 - ajv-formats: 2.1.1(ajv@8.11.2) + ajv-formats: 2.1.1_ajv@8.11.2 bn.js: 5.2.1 borsh: 0.7.0 depd: 2.0.0 error-polyfill: 0.1.3 - http-errors: 1.7.2 + http-errors: 1.8.1 near-abi: 0.1.1 - node-fetch: 2.6.7 + node-fetch: 2.7.0 tweetnacl: 1.0.3 transitivePeerDependencies: - encoding dev: true - /near-hello@0.5.1: + /near-hello/0.5.1: resolution: {integrity: sha512-k7S8VFyESWgkKYDso99B4XbxAdo0VX9b3+GAaO5PvMgQjNr/6o09PHRywg/NkBQpf+ZYj7nNpJcyrNJGQsvA3w==} dev: true - /near-sandbox@0.0.15: + /near-sandbox/0.0.15: resolution: {integrity: sha512-scFdPDoT8G0GteHJID8KLZQNGtg7zpjBnRZUZTjXVO8atKzHYw8iawpc+ekylErn5bbWG49Tv4KySBUv4chIRA==} hasBin: true requiresBuild: true @@ -6819,14 +6681,14 @@ packages: tar: 6.2.0 dev: true - /near-units@0.1.9: + /near-units/0.1.9: resolution: {integrity: sha512-xiuBjpNsi+ywiu7P6iWRZdgFm7iCr/cfWlVO6+e5uaAqH4mE1rrurElyrL91llNDSnMwogd9XmlZOw5KbbHNsA==} hasBin: true dependencies: bn.js: 5.2.1 dev: true - /near-workspaces@3.4.0: + /near-workspaces/3.4.0: resolution: {integrity: sha512-OjBUXtNaYCRgUTyAw1rarDVElzggYszAGDR62x9gHscSNhAkLiCLP0jF8BHnuF0CL/XWuQtNeLS9m91KdieytQ==} engines: {node: '>= 14.0.0', npm: '>= 6.0.0'} requiresBuild: true @@ -6851,22 +6713,22 @@ packages: - encoding dev: true - /nice-try@1.0.5: + /nice-try/1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /node-cleanup@2.1.2: + /node-cleanup/2.1.2: resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} dev: true - /node-fetch@1.7.3: + /node-fetch/1.7.3: resolution: {integrity: sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==} dependencies: encoding: 0.1.13 is-stream: 1.1.0 dev: true - /node-fetch@2.6.7: + /node-fetch/2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -6877,20 +6739,31 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-gyp-build-optional-packages@5.1.1: + /node-fetch/2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-gyp-build-optional-packages/5.1.1: resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} hasBin: true - requiresBuild: true dependencies: detect-libc: 2.0.2 dev: false optional: true - /node-int64@0.4.0: + /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-notifier@8.0.2: + /node-notifier/8.0.2: resolution: {integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==} requiresBuild: true dependencies: @@ -6903,15 +6776,15 @@ packages: dev: true optional: true - /node-port-check@2.0.1: + /node-port-check/2.0.1: resolution: {integrity: sha512-PV1tj5OPbWwxvhPcChXxwCIKl/IfVEdPP4u/gQz2lao/VGoeIUXb/4U72KSHLZpTVBmgTnMm0me7yR0wUsIuPg==} dev: true - /node-releases@2.0.14: + /node-releases/2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true - /normalize-package-data@2.5.0: + /normalize-package-data/2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 @@ -6920,7 +6793,7 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data@3.0.3: + /normalize-package-data/3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: @@ -6930,48 +6803,48 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path@2.1.1: + /normalize-path/2.1.1: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} dependencies: remove-trailing-separator: 1.1.0 dev: true - /normalize-path@3.0.0: + /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /normalize-url@6.1.0: + /normalize-url/6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} dev: true - /npm-run-path@2.0.2: + /npm-run-path/2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} dependencies: path-key: 2.0.1 dev: true - /npm-run-path@4.0.1: + /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true - /nwsapi@2.2.7: + /nwsapi/2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true - /o3@1.0.3: + /o3/1.0.3: resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==} dependencies: capability: 0.2.5 dev: true - /object-copy@0.1.0: + /object-copy/0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} dependencies: @@ -6980,23 +6853,23 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect@1.13.1: + /object-inspect/1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true - /object-keys@1.1.1: + /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object-visit@1.0.1: + /object-visit/1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /object.assign@4.1.5: + /object.assign/4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: @@ -7006,27 +6879,27 @@ packages: object-keys: 1.1.1 dev: true - /object.pick@1.3.0: + /object.pick/1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 dev: true - /once@1.4.0: + /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /onetime@5.1.2: + /onetime/5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 dev: true - /optionator@0.9.3: + /optionator/0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: @@ -7038,101 +6911,101 @@ packages: type-check: 0.4.0 dev: true - /os-browserify@0.3.0: + /os-browserify/0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} dev: true - /os-tmpdir@1.0.2: + /os-tmpdir/1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} dev: true - /outdent@0.5.0: + /outdent/0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} dev: true - /override-require@1.1.1: + /override-require/1.1.1: resolution: {integrity: sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==} dev: true - /p-cancelable@2.1.1: + /p-cancelable/2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} dev: true - /p-each-series@2.2.0: + /p-each-series/2.2.0: resolution: {integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==} engines: {node: '>=8'} dev: true - /p-filter@2.1.0: + /p-filter/2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} dependencies: p-map: 2.1.0 dev: true - /p-finally@1.0.0: + /p-finally/1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} dev: true - /p-limit@2.3.0: + /p-limit/2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit@3.1.0: + /p-limit/3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate@4.1.0: + /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate@5.0.0: + /p-locate/5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map@2.1.0: + /p-map/2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-try@2.2.0: + /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /pako@1.0.11: + /pako/1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true - /parent-module@1.0.1: + /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parents@1.0.1: + /parents/1.0.1: resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} dependencies: path-platform: 0.11.15 dev: true - /parse-asn1@5.1.6: + /parse-asn1/5.1.6: resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} dependencies: asn1.js: 5.4.1 @@ -7142,11 +7015,11 @@ packages: safe-buffer: 5.2.1 dev: true - /parse-diff@0.7.1: + /parse-diff/0.7.1: resolution: {integrity: sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg==} dev: true - /parse-git-config@2.0.3: + /parse-git-config/2.0.3: resolution: {integrity: sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A==} engines: {node: '>=6'} dependencies: @@ -7155,13 +7028,13 @@ packages: ini: 1.3.8 dev: true - /parse-github-url@1.0.2: + /parse-github-url/1.0.2: resolution: {integrity: sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==} engines: {node: '>=0.10.0'} hasBin: true dev: true - /parse-json@5.2.0: + /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -7171,65 +7044,65 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-link-header@2.0.0: + /parse-link-header/2.0.0: resolution: {integrity: sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==} dependencies: xtend: 4.0.2 dev: true - /parse-passwd@1.0.0: + /parse-passwd/1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} dev: true - /parse5@6.0.1: + /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /pascalcase@0.1.1: + /pascalcase/0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} dev: true - /path-browserify@0.0.1: + /path-browserify/0.0.1: resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} dev: true - /path-exists@4.0.0: + /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute@1.0.1: + /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-key@2.0.1: + /path-key/2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} dev: true - /path-key@3.1.1: + /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-parse@1.0.7: + /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-platform@0.11.15: + /path-platform/0.11.15: resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} engines: {node: '>= 0.8.0'} dev: true - /path-type@4.0.0: + /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /pbkdf2@3.1.2: + /pbkdf2/3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} dependencies: @@ -7240,37 +7113,37 @@ packages: sha.js: 2.4.11 dev: true - /picocolors@1.0.0: + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true - /picomatch@2.3.1: + /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true - /pify@4.0.1: + /pify/4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pinpoint@1.1.0: + /pinpoint/1.1.0: resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} dev: true - /pirates@4.0.6: + /pirates/4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} dev: true - /pkg-dir@4.2.0: + /pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true - /pkijs@3.0.15: + /pkijs/3.0.15: resolution: {integrity: sha512-n7nAl9JpqdeQsjy+rPmswkmZ3oO/Fu5uN9me45PPQVdWjd0X7HKfL8+HYwfxihqoDSSPUIajkOcqFxEUxMqhwQ==} engines: {node: '>=12.0.0'} dependencies: @@ -7281,17 +7154,17 @@ packages: tslib: 2.6.2 dev: false - /posix-character-classes@0.1.1: + /posix-character-classes/0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} dev: true - /possible-typed-array-names@1.0.0: + /possible-typed-array-names/1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} dev: true - /preferred-pm@3.1.3: + /preferred-pm/3.1.3: resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} engines: {node: '>=10'} dependencies: @@ -7301,18 +7174,18 @@ packages: which-pm: 2.0.0 dev: true - /prelude-ls@1.2.1: + /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier@2.8.8: + /prettier/2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format@26.6.2: + /pretty-format/26.6.2: resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} engines: {node: '>= 10'} dependencies: @@ -7322,7 +7195,7 @@ packages: react-is: 17.0.2 dev: true - /prettyjson@1.2.5: + /prettyjson/1.2.5: resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} hasBin: true dependencies: @@ -7330,21 +7203,21 @@ packages: minimist: 1.2.8 dev: true - /process-nextick-args@2.0.1: + /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process@0.11.10: + /process/0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /promisify-child-process@4.1.2: + /promisify-child-process/4.1.2: resolution: {integrity: sha512-APnkIgmaHNJpkAn7k+CrJSi9WMuff5ctYFbD0CO2XIPkM8yO7d/ShouU2clywbpHV/DUsyc4bpJCsNgddNtx4g==} engines: {node: '>=8'} dev: true - /prompts@2.4.2: + /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: @@ -7352,7 +7225,7 @@ packages: sisteransi: 1.0.5 dev: true - /proper-lockfile@4.1.2: + /proper-lockfile/4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} dependencies: graceful-fs: 4.2.11 @@ -7360,15 +7233,15 @@ packages: signal-exit: 3.0.7 dev: true - /pseudomap@1.0.2: + /pseudomap/1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true - /psl@1.9.0: + /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /public-encrypt@4.0.3: + /public-encrypt/4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: bn.js: 4.12.0 @@ -7379,50 +7252,50 @@ packages: safe-buffer: 5.2.1 dev: true - /pump@3.0.0: + /pump/3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode@1.4.1: + /punycode/1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /punycode@2.3.1: + /punycode/2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - /pure-uuid@1.8.1: + /pure-uuid/1.8.1: resolution: {integrity: sha512-PIwHXU7NZb/wTBwUfzCSjI85tfwx6DQOm74sRLtNLH8KHsFZEvAQbBQdz7E5ij8SNSv9WGdQPWiiM6NpNIeNfA==} engines: {node: '>=8.0.0'} dev: true - /pvtsutils@1.3.5: + /pvtsutils/1.3.5: resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} dependencies: tslib: 2.6.2 dev: false - /pvutils@1.1.3: + /pvutils/1.1.3: resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} engines: {node: '>=6.0.0'} dev: false - /q@1.5.1: + /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true - /qs@6.11.2: + /qs/6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.5 dev: true - /query-string@6.14.1: + /query-string/6.14.1: resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} engines: {node: '>=6'} dependencies: @@ -7432,52 +7305,52 @@ packages: strict-uri-encode: 2.0.0 dev: true - /querystring-es3@0.2.1: + /querystring-es3/0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} dev: true - /querystringify@2.2.0: + /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true - /queue-microtask@1.2.3: + /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-lru@4.0.1: + /quick-lru/4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true - /quick-lru@5.1.1: + /quick-lru/5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} dev: true - /randombytes@2.1.0: + /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 - /randomfill@1.0.4: + /randomfill/1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} dependencies: randombytes: 2.1.0 safe-buffer: 5.2.1 dev: true - /react-is@17.0.2: + /react-is/17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true - /read-only-stream@2.0.0: + /read-only-stream/2.0.0: resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} dependencies: readable-stream: 2.3.8 dev: true - /read-pkg-up@7.0.1: + /read-pkg-up/7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: @@ -7486,7 +7359,7 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg@5.2.0: + /read-pkg/5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: @@ -7496,7 +7369,7 @@ packages: type-fest: 0.6.0 dev: true - /read-yaml-file@1.1.0: + /read-yaml-file/1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} dependencies: @@ -7506,7 +7379,7 @@ packages: strip-bom: 3.0.0 dev: true - /readable-stream@2.3.8: + /readable-stream/2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 @@ -7518,7 +7391,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream@3.6.2: + /readable-stream/3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: @@ -7527,12 +7400,12 @@ packages: util-deprecate: 1.0.2 dev: true - /readline-sync@1.4.10: + /readline-sync/1.4.10: resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} engines: {node: '>= 0.8.0'} dev: true - /redent@3.0.0: + /redent/3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} dependencies: @@ -7540,15 +7413,15 @@ packages: strip-indent: 3.0.0 dev: true - /regenerator-runtime@0.13.11: + /regenerator-runtime/0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true - /regenerator-runtime@0.14.1: + /regenerator-runtime/0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true - /regex-not@1.0.2: + /regex-not/1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} dependencies: @@ -7556,7 +7429,7 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags@1.5.2: + /regexp.prototype.flags/1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: @@ -7566,80 +7439,80 @@ packages: set-function-name: 2.0.2 dev: true - /regexpp@3.2.0: + /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /remove-trailing-separator@1.1.0: + /remove-trailing-separator/1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} dev: true - /repeat-element@1.1.4: + /repeat-element/1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} dev: true - /repeat-string@1.6.1: + /repeat-string/1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} dev: true - /require-directory@2.1.1: + /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true - /require-from-string@2.0.2: + /require-from-string/2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - /require-main-filename@2.0.0: + /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /requires-port@1.0.0: + /requires-port/1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true - /resolve-alpn@1.2.1: + /resolve-alpn/1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true - /resolve-cwd@3.0.0: + /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true - /resolve-from@4.0.0: + /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-from@5.0.0: + /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: true - /resolve-global@1.0.0: + /resolve-global/1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} engines: {node: '>=8'} dependencies: global-dirs: 0.1.1 dev: true - /resolve-url@0.2.1: + /resolve-url/0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated dev: true - /resolve@1.1.7: + /resolve/1.1.7: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} dev: true - /resolve@1.22.8: + /resolve/1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: @@ -7648,59 +7521,59 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /responselike@2.0.1: + /responselike/2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} dependencies: lowercase-keys: 2.0.0 dev: true - /ret@0.1.15: + /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} dev: true - /retry@0.12.0: + /retry/0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} dev: true - /reusify@1.0.4: + /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rimraf@3.0.2: + /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /ripemd160@2.0.2: + /ripemd160/2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 dev: true - /rsvp@4.8.5: + /rsvp/4.8.5: resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} engines: {node: 6.* || >= 7.*} dev: true - /run-parallel@1.2.0: + /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rxjs@7.8.1: + /rxjs/7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: tslib: 2.6.2 dev: true - /safe-array-concat@1.1.0: + /safe-array-concat/1.1.0: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: @@ -7710,14 +7583,14 @@ packages: isarray: 2.0.5 dev: true - /safe-buffer@5.1.2: + /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer@5.2.1: + /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test@1.0.3: + /safe-regex-test/1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: @@ -7726,17 +7599,17 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex@1.1.0: + /safe-regex/1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: ret: 0.1.15 dev: true - /safer-buffer@2.1.2: + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sane@4.1.0: + /sane/4.1.0: resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} engines: {node: 6.* || 8.* || >= 10.*} deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added @@ -7755,30 +7628,30 @@ packages: - supports-color dev: true - /saxes@5.0.1: + /saxes/5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} dependencies: xmlchars: 2.2.0 dev: true - /semver@5.7.2: + /semver/5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true dev: true - /semver@6.3.1: + /semver/6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true dev: true - /semver@7.1.1: + /semver/7.1.1: resolution: {integrity: sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==} engines: {node: '>=10'} hasBin: true dev: true - /semver@7.5.4: + /semver/7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true @@ -7786,7 +7659,7 @@ packages: lru-cache: 6.0.0 dev: true - /semver@7.6.0: + /semver/7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} hasBin: true @@ -7794,11 +7667,11 @@ packages: lru-cache: 6.0.0 dev: true - /set-blocking@2.0.0: + /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.2.1: + /set-function-length/1.2.1: resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} dependencies: @@ -7810,7 +7683,7 @@ packages: has-property-descriptors: 1.0.2 dev: true - /set-function-name@2.0.2: + /set-function-name/2.0.2: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: @@ -7820,7 +7693,7 @@ packages: has-property-descriptors: 1.0.2 dev: true - /set-value@2.0.1: + /set-value/2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} dependencies: @@ -7830,10 +7703,15 @@ packages: split-string: 3.1.0 dev: true - /setprototypeof@1.1.1: + /setprototypeof/1.1.1: resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + dev: false + + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: true - /sha.js@2.4.11: + /sha.js/2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true dependencies: @@ -7841,54 +7719,53 @@ packages: safe-buffer: 5.2.1 dev: true - /shasum-object@1.0.0: + /shasum-object/1.0.0: resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} dependencies: fast-safe-stringify: 2.1.1 dev: true - /shasum@1.0.2: + /shasum/1.0.2: resolution: {integrity: sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw==} dependencies: json-stable-stringify: 0.0.1 sha.js: 2.4.11 dev: true - /shebang-command@1.2.0: + /shebang-command/1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true - /shebang-command@2.0.0: + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex@1.0.0: + /shebang-regex/1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true - /shebang-regex@3.0.0: + /shebang-regex/3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /shell-quote@1.8.1: + /shell-quote/1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true - /shellwords@0.1.1: + /shellwords/0.1.1: resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} - requiresBuild: true dev: true optional: true - /shiki@0.14.7: + /shiki/0.14.7: resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} dependencies: ansi-sequence-parser: 1.1.1 @@ -7897,7 +7774,7 @@ packages: vscode-textmate: 8.0.0 dev: true - /side-channel@1.0.5: + /side-channel/1.0.5: resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} engines: {node: '>= 0.4'} dependencies: @@ -7907,24 +7784,24 @@ packages: object-inspect: 1.13.1 dev: true - /signal-exit@3.0.7: + /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /simple-concat@1.0.1: + /simple-concat/1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: true - /sisteransi@1.0.5: + /sisteransi/1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slash@3.0.0: + /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /smartwrap@2.0.2: + /smartwrap/2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} hasBin: true @@ -7937,7 +7814,7 @@ packages: yargs: 15.4.1 dev: true - /snapdragon-node@2.1.1: + /snapdragon-node/2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} dependencies: @@ -7946,14 +7823,14 @@ packages: snapdragon-util: 3.0.1 dev: true - /snapdragon-util@3.0.1: + /snapdragon-util/3.0.1: resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /snapdragon@0.8.2: + /snapdragon/0.8.2: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} dependencies: @@ -7969,7 +7846,7 @@ packages: - supports-color dev: true - /source-map-resolve@0.5.3: + /source-map-resolve/0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: @@ -7980,96 +7857,96 @@ packages: urix: 0.1.0 dev: true - /source-map-support@0.5.21: + /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-url@0.4.1: + /source-map-url/0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true - /source-map@0.5.7: + /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true - /source-map@0.6.1: + /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /source-map@0.7.4: + /source-map/0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} dev: true - /spawn-command@0.0.2-1: + /spawn-command/0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} dev: true - /spawndamnit@2.0.0: + /spawndamnit/2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 dev: true - /spdx-correct@3.2.0: + /spdx-correct/3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.17 dev: true - /spdx-exceptions@2.5.0: + /spdx-exceptions/2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} dev: true - /spdx-expression-parse@3.0.1: + /spdx-expression-parse/3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.17 dev: true - /spdx-license-ids@3.0.17: + /spdx-license-ids/3.0.17: resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} dev: true - /split-on-first@1.1.0: + /split-on-first/1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} dev: true - /split-string@3.1.0: + /split-string/3.1.0: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} dependencies: extend-shallow: 3.0.2 dev: true - /split2@3.2.2: + /split2/3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.2 dev: true - /sprintf-js@1.0.3: + /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stack-utils@2.0.6: + /stack-utils/2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true - /static-extend@0.1.2: + /static-extend/0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} dependencies: @@ -8077,25 +7954,25 @@ packages: object-copy: 0.1.0 dev: true - /statuses@1.5.0: + /statuses/1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} - /stream-browserify@2.0.2: + /stream-browserify/2.0.2: resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} dependencies: inherits: 2.0.4 readable-stream: 2.3.8 dev: true - /stream-combiner2@1.1.1: + /stream-combiner2/1.1.1: resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} dependencies: duplexer2: 0.1.4 readable-stream: 2.3.8 dev: true - /stream-http@2.8.3: + /stream-http/2.8.3: resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} dependencies: builtin-status-codes: 3.0.0 @@ -8105,25 +7982,25 @@ packages: xtend: 4.0.2 dev: true - /stream-splicer@2.0.1: + /stream-splicer/2.0.1: resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} dependencies: inherits: 2.0.4 readable-stream: 2.3.8 dev: true - /stream-transform@2.1.3: + /stream-transform/2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: mixme: 0.5.10 dev: true - /strict-uri-encode@2.0.0: + /strict-uri-encode/2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} dev: true - /string-length@4.0.2: + /string-length/4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: @@ -8131,7 +8008,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width@4.2.3: + /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -8140,7 +8017,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string.prototype.trim@1.2.8: + /string.prototype.trim/1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: @@ -8149,7 +8026,7 @@ packages: es-abstract: 1.22.4 dev: true - /string.prototype.trimend@1.0.7: + /string.prototype.trimend/1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: call-bind: 1.0.7 @@ -8157,7 +8034,7 @@ packages: es-abstract: 1.22.4 dev: true - /string.prototype.trimstart@1.0.7: + /string.prototype.trimstart/1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.7 @@ -8165,84 +8042,84 @@ packages: es-abstract: 1.22.4 dev: true - /string_decoder@1.1.1: + /string_decoder/1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder@1.3.0: + /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /strip-ansi@6.0.1: + /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true - /strip-bom@3.0.0: + /strip-bom/3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} dev: true - /strip-bom@4.0.0: + /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: true - /strip-eof@1.0.0: + /strip-eof/1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} dev: true - /strip-final-newline@2.0.0: + /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true - /strip-indent@3.0.0: + /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true - /strip-json-comments@3.1.1: + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /subarg@1.0.0: + /subarg/1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} dependencies: minimist: 1.2.8 dev: true - /supports-color@5.5.0: + /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color@7.2.0: + /supports-color/7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: + /supports-color/8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-hyperlinks@1.0.1: + /supports-hyperlinks/1.0.1: resolution: {integrity: sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==} engines: {node: '>=4'} dependencies: @@ -8250,7 +8127,7 @@ packages: supports-color: 5.5.0 dev: true - /supports-hyperlinks@2.3.0: + /supports-hyperlinks/2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} dependencies: @@ -8258,22 +8135,22 @@ packages: supports-color: 7.2.0 dev: true - /supports-preserve-symlinks-flag@1.0.0: + /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /symbol-tree@3.2.4: + /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /syntax-error@1.4.0: + /syntax-error/1.4.0: resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} dependencies: acorn-node: 1.8.2 dev: true - /tar@6.2.0: + /tar/6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} dependencies: @@ -8285,17 +8162,17 @@ packages: yallist: 4.0.0 dev: true - /temp-dir@2.0.0: + /temp-dir/2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} dev: true - /term-size@2.2.1: + /term-size/2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} dev: true - /terminal-link@2.1.1: + /terminal-link/2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} dependencies: @@ -8303,7 +8180,7 @@ packages: supports-hyperlinks: 2.3.0 dev: true - /terser@3.17.0: + /terser/3.17.0: resolution: {integrity: sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -8314,7 +8191,7 @@ packages: source-map-support: 0.5.21 dev: true - /test-exclude@6.0.0: + /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -8323,85 +8200,85 @@ packages: minimatch: 3.1.2 dev: true - /text-encoding-utf-8@1.0.2: + /text-encoding-utf-8/1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - /text-extensions@1.9.0: + /text-extensions/1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} dev: true - /text-table@0.2.0: + /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /throat@5.0.0: + /throat/5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} dev: true - /through2@2.0.5: + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.8 xtend: 4.0.2 dev: true - /through2@4.0.2: + /through2/4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.2 dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /timers-browserify@1.4.2: + /timers-browserify/1.4.2: resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} engines: {node: '>=0.6.0'} dependencies: process: 0.11.10 dev: true - /tldts-core@6.1.11: + /tldts-core/6.1.11: resolution: {integrity: sha512-ZFcT+/fdEc5VRndQIJtArNBHsaq4udRoeE4E6cwLzGaH0dq7Ng2L7cAoea6riM2uhNFD09EDa1bN8lrfrOBCLg==} dev: false - /tldts@6.0.23: + /tldts/6.0.23: resolution: {integrity: sha512-LaA60X7J9mts1EliB7Nq/OBqicaI7TgsheWeQ8RR1uqwcVLjvRVHTGOkWjKAPa/XF+0t2ZBy1oF6OW8ufqOsKA==} hasBin: true dependencies: tldts-core: 6.1.11 dev: false - /tmp@0.0.33: + /tmp/0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 dev: true - /tmpl@1.0.5: + /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true - /to-arraybuffer@1.0.1: + /to-arraybuffer/1.0.1: resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} dev: true - /to-fast-properties@2.0.0: + /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: true - /to-object-path@0.3.0: + /to-object-path/0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} dependencies: kind-of: 3.2.2 dev: true - /to-regex-range@2.1.1: + /to-regex-range/2.1.1: resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} engines: {node: '>=0.10.0'} dependencies: @@ -8409,14 +8286,14 @@ packages: repeat-string: 1.6.1 dev: true - /to-regex-range@5.0.1: + /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - /to-regex@3.0.2: + /to-regex/3.0.2: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} engines: {node: '>=0.10.0'} dependencies: @@ -8426,11 +8303,17 @@ packages: safe-regex: 1.1.0 dev: true - /toidentifier@1.0.0: + /toidentifier/1.0.0: resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} engines: {node: '>=0.6'} + dev: false + + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: true - /tough-cookie@4.1.3: + /tough-cookie/4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: @@ -8440,33 +8323,33 @@ packages: url-parse: 1.5.10 dev: true - /tr46@0.0.3: + /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46@1.0.1: + /tr46/1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.1 dev: true - /tr46@2.1.0: + /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} dependencies: punycode: 2.3.1 dev: true - /tree-kill@1.2.2: + /tree-kill/1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true - /trim-newlines@3.0.1: + /trim-newlines/3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /ts-jest@26.5.6(jest@26.0.1)(typescript@4.9.4): + /ts-jest/26.5.6_jest@26.0.1: resolution: {integrity: sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==} engines: {node: '>= 10'} hasBin: true @@ -8477,18 +8360,61 @@ packages: bs-logger: 0.2.6 buffer-from: 1.1.2 fast-json-stable-stringify: 2.1.0 - jest: 26.0.1(ts-node@10.9.2) + jest: 26.0.1 jest-util: 26.6.2 json5: 2.2.3 lodash: 4.17.21 make-error: 1.3.6 mkdirp: 1.0.4 - semver: 7.1.1 + semver: 7.6.0 + yargs-parser: 20.2.9 + dev: true + + /ts-jest/26.5.6_mz556kj7zhgdghaetpuduwsbgq: + resolution: {integrity: sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==} + engines: {node: '>= 10'} + hasBin: true + peerDependencies: + jest: '>=26 <27' + typescript: '>=3.8 <5.0' + dependencies: + bs-logger: 0.2.6 + buffer-from: 1.1.2 + fast-json-stable-stringify: 2.1.0 + jest: 26.0.1 + jest-util: 26.6.2 + json5: 2.2.3 + lodash: 4.17.21 + make-error: 1.3.6 + mkdirp: 1.0.4 + semver: 7.6.0 typescript: 4.9.4 yargs-parser: 20.2.9 dev: true - /ts-node@10.9.2(@types/node@20.5.1)(typescript@4.9.4): + /ts-jest/26.5.6_xuote2qreek47x2di7kesslrai: + resolution: {integrity: sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==} + engines: {node: '>= 10'} + hasBin: true + peerDependencies: + jest: '>=26 <27' + typescript: '>=3.8 <5.0' + dependencies: + bs-logger: 0.2.6 + buffer-from: 1.1.2 + fast-json-stable-stringify: 2.1.0 + jest: 26.6.3 + jest-util: 26.6.2 + json5: 2.2.3 + lodash: 4.17.21 + make-error: 1.3.6 + mkdirp: 1.0.4 + semver: 7.6.0 + typescript: 4.9.5 + yargs-parser: 20.2.9 + dev: true + + /ts-node/10.9.2_q7cveed3dsfobzxjkbw6gtmsda: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -8519,13 +8445,13 @@ packages: yn: 3.1.1 dev: true - /tslib@1.14.1: + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.6.2: + /tslib/2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@4.9.4): + /tsutils/3.21.0_typescript@4.9.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -8535,11 +8461,11 @@ packages: typescript: 4.9.4 dev: true - /tty-browserify@0.0.1: + /tty-browserify/0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: true - /tty-table@4.2.3: + /tty-table/4.2.3: resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} engines: {node: '>=8.0.0'} hasBin: true @@ -8553,7 +8479,7 @@ packages: yargs: 17.7.2 dev: true - /turbo-android-arm64@1.4.5: + /turbo-android-arm64/1.4.5: resolution: {integrity: sha512-cKPJVyS1A2BBVbcH8XVeBArtEjHxioEm9zQa3Hv68usQOOFW+KOjH+0fGvjqMrWztLVFhE+npeVsnyu/6AmRew==} cpu: [arm64] os: [android] @@ -8561,7 +8487,7 @@ packages: dev: true optional: true - /turbo-darwin-64@1.4.5: + /turbo-darwin-64/1.4.5: resolution: {integrity: sha512-cK6LjkziSfopTznpfx3EdW/C11xFlK01tYxNj0XPoBW4vNb1zLsfrI/HIwp0SzdNLqzCBwOJBK0VB07Q1MmlxQ==} cpu: [x64] os: [darwin] @@ -8569,7 +8495,7 @@ packages: dev: true optional: true - /turbo-darwin-arm64@1.4.5: + /turbo-darwin-arm64/1.4.5: resolution: {integrity: sha512-hnixteVmfllup0//mGr2AZOff8oJ9dEydRU/EvbyIJ7PdkSct8758YnP5l2yMyxxipHHALSwchOKcySoaPBLRw==} cpu: [arm64] os: [darwin] @@ -8577,7 +8503,7 @@ packages: dev: true optional: true - /turbo-freebsd-64@1.4.5: + /turbo-freebsd-64/1.4.5: resolution: {integrity: sha512-DDNSDiKJF/F1qbSNlvRs2UO79iMPlKFw/ZcVCDKXRjMI5uMRujMIfNnoStAg6kifYZJ0KIxnzdsbbJFtCTgPhQ==} cpu: [x64] os: [freebsd] @@ -8585,7 +8511,7 @@ packages: dev: true optional: true - /turbo-freebsd-arm64@1.4.5: + /turbo-freebsd-arm64/1.4.5: resolution: {integrity: sha512-pFU8ujUp7XU527NM04P4foDjOKfi8f0rNJqREU6AMxawiMI6y0oyHc3W4VNKm0Y9IsjcfguZKZRMPeQ0n7LgJA==} cpu: [arm64] os: [freebsd] @@ -8593,7 +8519,7 @@ packages: dev: true optional: true - /turbo-linux-32@1.4.5: + /turbo-linux-32/1.4.5: resolution: {integrity: sha512-Y5pnIetm4CwxbG1YQbvnTmjROPjQjX03ktHvmoekBleU1coYGShGPd9iarQZ96XkeaRevfwfSJ90AnDGwc3/QQ==} cpu: [ia32] os: [linux] @@ -8601,7 +8527,7 @@ packages: dev: true optional: true - /turbo-linux-64@1.4.5: + /turbo-linux-64/1.4.5: resolution: {integrity: sha512-tiTusM7mYib3iLmVOWmxhsg6xU3EArjOL4l3yh9rYBdArhDJk+DrhXkbJkYOYgNSWUEfPeBs0lzSkfTIQ2H21g==} cpu: [x64] os: [linux] @@ -8609,23 +8535,23 @@ packages: dev: true optional: true - /turbo-linux-arm64@1.4.5: - resolution: {integrity: sha512-R03HPqb0tJtqsGF4P3oPWsggdpTe9CZiBEtzATFpL7WVzm/Dsimy1Wcj07v6gCWdgi/mWmRt+OcZfGhnf7mibQ==} - cpu: [arm64] + /turbo-linux-arm/1.4.5: + resolution: {integrity: sha512-5BsTRsoZeUWXWau4t4CNdL6NjlDdXrh8suhj5YolXUVCe039A5IutS7Dgd4i8dV1BovFCU3bz38dqQI2Qst5eQ==} + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm@1.4.5: - resolution: {integrity: sha512-5BsTRsoZeUWXWau4t4CNdL6NjlDdXrh8suhj5YolXUVCe039A5IutS7Dgd4i8dV1BovFCU3bz38dqQI2Qst5eQ==} - cpu: [arm] + /turbo-linux-arm64/1.4.5: + resolution: {integrity: sha512-R03HPqb0tJtqsGF4P3oPWsggdpTe9CZiBEtzATFpL7WVzm/Dsimy1Wcj07v6gCWdgi/mWmRt+OcZfGhnf7mibQ==} + cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-mips64le@1.4.5: + /turbo-linux-mips64le/1.4.5: resolution: {integrity: sha512-08+WhWCx2Bp6wKH8im4Z2iEBCgiWJLZbNbZ8YHxamwlIk1JsklyCCMikMSWb0GmpKi7EIjdmtPRQY2CyoBefpg==} cpu: [mipsel] os: [linux] @@ -8633,7 +8559,7 @@ packages: dev: true optional: true - /turbo-linux-ppc64le@1.4.5: + /turbo-linux-ppc64le/1.4.5: resolution: {integrity: sha512-feGjTOYcCbg12Y6JzL8nxaUOzjqqYtO6vtxrJy16yVCd2k2htd18iZ1kLjWKDZA94vdyW5lfyAGsAQik2eAC4A==} cpu: [ppc64] os: [linux] @@ -8641,7 +8567,7 @@ packages: dev: true optional: true - /turbo-windows-32@1.4.5: + /turbo-windows-32/1.4.5: resolution: {integrity: sha512-O4tOnGmVJrR1JOKepuUvx/kqgaU6eMEjYUihJlvQmz9pTA/ecs8HrTGyXrabbmp5YdUmF2qsXaAcOvEuJaNPmQ==} cpu: [ia32] os: [win32] @@ -8649,7 +8575,7 @@ packages: dev: true optional: true - /turbo-windows-64@1.4.5: + /turbo-windows-64/1.4.5: resolution: {integrity: sha512-3W9gGq9h2szhestsoA1XqN9hV0wCRpGCEV6fbb3q9EaJY8K9Tff8By0mi+fE31OKHY4om+PHg595q7kybcyG/Q==} cpu: [x64] os: [win32] @@ -8657,7 +8583,7 @@ packages: dev: true optional: true - /turbo-windows-arm64@1.4.5: + /turbo-windows-arm64/1.4.5: resolution: {integrity: sha512-/77f6OJM/4MqYEoCMER5MZTbfJZuVN22R9mc7iJDFOrNJrwvAWiAx98Fvo7WEVpMjGFUEq4Wi0UV5SpMAGU3bA==} cpu: [arm64] os: [win32] @@ -8665,7 +8591,7 @@ packages: dev: true optional: true - /turbo@1.4.5: + /turbo/1.4.5: resolution: {integrity: sha512-imAyc1kZusjzMWY4RO572FWws8x6CoM5mX7D3qtMjdGuqOBNBhPTIaJ0LmQLu+xzuKIOlJ5m/2587CsHOJTdgw==} hasBin: true requiresBuild: true @@ -8686,53 +8612,53 @@ packages: turbo-windows-arm64: 1.4.5 dev: true - /tweetnacl@1.0.3: + /tweetnacl/1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} dev: true - /type-check@0.4.0: + /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect@4.0.8: + /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest@0.13.1: + /type-fest/0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} dev: true - /type-fest@0.18.1: + /type-fest/0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} dev: true - /type-fest@0.20.2: + /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest@0.21.3: + /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} dev: true - /type-fest@0.6.0: + /type-fest/0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true - /type-fest@0.8.1: + /type-fest/0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /typed-array-buffer@1.0.2: + /typed-array-buffer/1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: @@ -8741,7 +8667,7 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.1: + /typed-array-byte-length/1.0.1: resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: @@ -8752,7 +8678,7 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.2: + /typed-array-byte-offset/1.0.2: resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: @@ -8764,7 +8690,7 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.5: + /typed-array-length/1.0.5: resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} engines: {node: '>= 0.4'} dependencies: @@ -8776,17 +8702,17 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /typedarray-to-buffer@3.1.5: + /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true - /typedarray@0.0.6: + /typedarray/0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typedoc@0.25.3(typescript@4.9.4): + /typedoc/0.25.3_typescript@4.9.4: resolution: {integrity: sha512-Ow8Bo7uY1Lwy7GTmphRIMEo6IOZ+yYUyrc8n5KXIZg1svpqhZSWgni2ZrDhe+wLosFS8yswowUzljTAV/3jmWw==} engines: {node: '>= 16'} hasBin: true @@ -8800,17 +8726,23 @@ packages: typescript: 4.9.4 dev: true - /typescript@4.9.4: + /typescript/4.9.4: resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /u3@0.1.1: + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /u3/0.1.1: resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==} dev: true - /uglifyify@5.0.1: + /uglifyify/5.0.1: resolution: {integrity: sha512-PO44rgExvwj3rkK0UzenHVnPU18drBy9x9HOUmgkuRh6K2KIsDqrB5LqxGtjybgGTOS1JeP8SBc+TN5rhiva6w==} dependencies: convert-source-map: 1.1.3 @@ -8820,12 +8752,12 @@ packages: through: 2.3.8 dev: true - /umd@3.0.3: + /umd/3.0.3: resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} hasBin: true dev: true - /unbox-primitive@1.0.2: + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.7 @@ -8834,7 +8766,7 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undeclared-identifiers@1.1.3: + /undeclared-identifiers/1.1.3: resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} hasBin: true dependencies: @@ -8845,7 +8777,11 @@ packages: xtend: 4.0.2 dev: true - /union-value@1.0.1: + /undici-types/5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /union-value/1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} dependencies: @@ -8855,7 +8791,7 @@ packages: set-value: 2.0.1 dev: true - /universal-url@2.0.0: + /universal-url/2.0.0: resolution: {integrity: sha512-3DLtXdm/G1LQMCnPj+Aw7uDoleQttNHp2g5FnNQKR6cP6taNWS1b/Ehjjx4PVyvejKi3TJyu8iBraKM4q3JQPg==} engines: {node: '>= 6'} dependencies: @@ -8863,26 +8799,26 @@ packages: whatwg-url: 7.1.0 dev: true - /universal-user-agent@6.0.1: + /universal-user-agent/6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} dev: true - /universalify@0.1.2: + /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} dev: true - /universalify@0.2.0: + /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true - /universalify@2.0.1: + /universalify/2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} dev: true - /unset-value@1.0.0: + /unset-value/1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} dependencies: @@ -8890,7 +8826,7 @@ packages: isobject: 3.0.1 dev: true - /update-browserslist-db@1.0.13(browserslist@4.23.0): + /update-browserslist-db/1.0.13_browserslist@4.23.0: resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: @@ -8901,61 +8837,60 @@ packages: picocolors: 1.0.0 dev: true - /uri-js@4.4.1: + /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 - /urix@0.1.0: + /urix/0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} deprecated: Please see https://github.com/lydell/urix#deprecated dev: true - /url-parse@1.5.10: + /url-parse/1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true - /url@0.11.3: + /url/0.11.3: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 qs: 6.11.2 dev: true - /use@3.1.1: + /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} dev: true - /util-deprecate@1.0.2: + /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util@0.10.4: + /util/0.10.4: resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} dependencies: inherits: 2.0.3 dev: true - /uuid@8.3.2: + /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - requiresBuild: true dev: true optional: true - /v8-compile-cache-lib@3.0.1: + /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache@2.4.0: + /v8-compile-cache/2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} dev: true - /v8-to-istanbul@7.1.2: + /v8-to-istanbul/7.1.2: resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} engines: {node: '>=10.10.0'} dependencies: @@ -8964,52 +8899,52 @@ packages: source-map: 0.7.4 dev: true - /validate-npm-package-license@3.0.4: + /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true - /vm-browserify@1.1.2: + /vm-browserify/1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true - /vscode-oniguruma@1.7.0: + /vscode-oniguruma/1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} dev: true - /vscode-textmate@8.0.0: + /vscode-textmate/8.0.0: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /w3c-hr-time@1.0.2: + /w3c-hr-time/1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. dependencies: browser-process-hrtime: 1.0.0 dev: true - /w3c-xmlserializer@2.0.0: + /w3c-xmlserializer/2.0.0: resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} engines: {node: '>=10'} dependencies: xml-name-validator: 3.0.0 dev: true - /walker@1.0.8: + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true - /wcwidth@1.0.1: + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 dev: true - /webcrypto-core@1.7.8: + /webcrypto-core/1.7.8: resolution: {integrity: sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==} dependencies: '@peculiar/asn1-schema': 2.3.8 @@ -9019,40 +8954,40 @@ packages: tslib: 2.6.2 dev: false - /webidl-conversions@3.0.1: + /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions@4.0.2: + /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions@5.0.0: + /webidl-conversions/5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} dev: true - /webidl-conversions@6.1.0: + /webidl-conversions/6.1.0: resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} engines: {node: '>=10.4'} dev: true - /whatwg-encoding@1.0.5: + /whatwg-encoding/1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: iconv-lite: 0.4.24 dev: true - /whatwg-mimetype@2.3.0: + /whatwg-mimetype/2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true - /whatwg-url@5.0.0: + /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url@7.1.0: + /whatwg-url/7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 @@ -9060,7 +8995,7 @@ packages: webidl-conversions: 4.0.2 dev: true - /whatwg-url@8.7.0: + /whatwg-url/8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} dependencies: @@ -9069,7 +9004,7 @@ packages: webidl-conversions: 6.1.0 dev: true - /which-boxed-primitive@1.0.2: + /which-boxed-primitive/1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -9079,11 +9014,11 @@ packages: is-symbol: 1.0.4 dev: true - /which-module@2.0.1: + /which-module/2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-pm@2.0.0: + /which-pm/2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} engines: {node: '>=8.15'} dependencies: @@ -9091,7 +9026,7 @@ packages: path-exists: 4.0.0 dev: true - /which-typed-array@1.1.14: + /which-typed-array/1.1.14: resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} dependencies: @@ -9102,14 +9037,14 @@ packages: has-tostringtag: 1.0.2 dev: true - /which@1.3.1: + /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which@2.0.2: + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -9117,7 +9052,7 @@ packages: isexe: 2.0.0 dev: true - /wrap-ansi@6.2.0: + /wrap-ansi/6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -9126,7 +9061,7 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi@7.0.0: + /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -9135,11 +9070,11 @@ packages: strip-ansi: 6.0.1 dev: true - /wrappy@1.0.2: + /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic@3.0.3: + /write-file-atomic/3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 @@ -9148,7 +9083,7 @@ packages: typedarray-to-buffer: 3.1.5 dev: true - /ws@7.5.9: + /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -9161,41 +9096,41 @@ packages: optional: true dev: true - /xml-name-validator@3.0.0: + /xml-name-validator/3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} dev: true - /xmlchars@2.2.0: + /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xtend@4.0.2: + /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n@4.0.3: + /y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - /y18n@5.0.8: + /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true - /yallist@2.1.2: + /yallist/2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} dev: true - /yallist@3.1.1: + /yallist/3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist@4.0.0: + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yargs-parser@18.1.3: + /yargs-parser/18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} dependencies: @@ -9203,17 +9138,17 @@ packages: decamelize: 1.2.0 dev: true - /yargs-parser@20.2.9: + /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true - /yargs-parser@21.1.1: + /yargs-parser/21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: true - /yargs@15.4.1: + /yargs/15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} dependencies: @@ -9230,7 +9165,7 @@ packages: yargs-parser: 18.1.3 dev: true - /yargs@17.7.2: + /yargs/17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} dependencies: @@ -9243,12 +9178,12 @@ packages: yargs-parser: 21.1.1 dev: true - /yn@3.1.1: + /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} dev: true - /yocto-queue@0.1.0: + /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true From 35c12da82c4f8f22da23191323d6b9a2b5650444 Mon Sep 17 00:00:00 2001 From: vikinatora Date: Mon, 26 Feb 2024 16:10:28 +0200 Subject: [PATCH 27/27] chore: lock package version --- packages/light-client/package.json | 16 ++-- pnpm-lock.yaml | 136 ++++++++++------------------- 2 files changed, 52 insertions(+), 100 deletions(-) diff --git a/packages/light-client/package.json b/packages/light-client/package.json index fdba95b7c5..a015c85a8a 100644 --- a/packages/light-client/package.json +++ b/packages/light-client/package.json @@ -16,19 +16,19 @@ "author": "", "license": "ISC", "dependencies": { - "bn.js": "5.2.1", "@near-js/crypto": "workspace:*", "@near-js/types": "workspace:*", - "bs58": "^4.0.0", - "borsh": "^0.7.0", - "js-sha256": "^0.9.0" + "bn.js": "5.2.1", + "bs58": "4.0.0", + "borsh": "0.7.0", + "js-sha256": "0.9.0" }, "devDependencies": { - "@types/node": "^18.11.18", "@near-js/providers": "workspace:*", - "jest": "^26.0.1", - "ts-jest": "^26.5.6", - "typescript": "^4.9.4" + "@types/node": "18.11.18", + "jest": "26.0.1", + "ts-jest": "26.5.6", + "typescript": "4.9.4" }, "files": [ "lib" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eaf2a74986..f685cf7709 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -220,27 +220,27 @@ importers: '@near-js/crypto': workspace:* '@near-js/providers': workspace:* '@near-js/types': workspace:* - '@types/node': ^18.11.18 + '@types/node': 18.11.18 bn.js: 5.2.1 - borsh: ^0.7.0 - bs58: ^4.0.0 - jest: ^26.0.1 - js-sha256: ^0.9.0 - ts-jest: ^26.5.6 - typescript: ^4.9.4 + borsh: 0.7.0 + bs58: 4.0.0 + jest: 26.0.1 + js-sha256: 0.9.0 + ts-jest: 26.5.6 + typescript: 4.9.4 dependencies: '@near-js/crypto': link:../crypto '@near-js/types': link:../types bn.js: 5.2.1 borsh: 0.7.0 - bs58: 4.0.1 + bs58: 4.0.0 js-sha256: 0.9.0 devDependencies: '@near-js/providers': link:../providers - '@types/node': 18.19.18 - jest: 26.6.3 - ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai - typescript: 4.9.5 + '@types/node': 18.11.18 + jest: 26.0.1 + ts-jest: 26.5.6_mz556kj7zhgdghaetpuduwsbgq + typescript: 4.9.4 packages/near-api-js: specifiers: @@ -1192,14 +1192,14 @@ packages: '@commitlint/types': 17.8.1 '@types/node': 20.5.1 chalk: 4.1.2 - cosmiconfig: 8.3.6_typescript@4.9.4 - cosmiconfig-typescript-loader: 4.4.0_sqne5mrtqj3bfk6ujmz665hnfa + cosmiconfig: 8.3.6_typescript@4.9.5 + cosmiconfig-typescript-loader: 4.4.0_un7ichfgdifpkcfxo3cvasqeyy lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2_q7cveed3dsfobzxjkbw6gtmsda - typescript: 4.9.4 + ts-node: 10.9.2_kiquteiudr3tzl53hv2lrtxx6q + typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -1336,7 +1336,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 chalk: 4.1.2 jest-message-util: 26.6.2 jest-util: 26.6.2 @@ -1352,7 +1352,7 @@ packages: '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 ansi-escapes: 4.3.2 chalk: 4.1.2 exit: 0.1.2 @@ -1389,7 +1389,7 @@ packages: dependencies: '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 jest-mock: 26.6.2 dev: true @@ -1399,7 +1399,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@sinonjs/fake-timers': 6.0.1 - '@types/node': 18.11.18 + '@types/node': 20.5.1 jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 @@ -1513,7 +1513,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.11.18 + '@types/node': 20.5.1 '@types/yargs': 15.0.19 chalk: 4.1.2 dev: true @@ -1937,7 +1937,7 @@ packages: /@types/bn.js/5.1.0: resolution: {integrity: sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.5.1 dev: true /@types/cacheable-request/6.0.3: @@ -1945,14 +1945,14 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 18.11.18 + '@types/node': 20.5.1 '@types/responselike': 1.0.3 dev: true /@types/graceful-fs/4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.5.1 dev: true /@types/http-cache-semantics/4.0.4: @@ -1991,7 +1991,7 @@ packages: /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.5.1 dev: true /@types/minimist/1.2.5: @@ -2006,12 +2006,6 @@ packages: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} dev: true - /@types/node/18.19.18: - resolution: {integrity: sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==} - dependencies: - undici-types: 5.26.5 - dev: true - /@types/node/20.5.1: resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} dev: true @@ -2027,7 +2021,7 @@ packages: /@types/responselike/1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.5.1 dev: true /@types/semver/6.2.7: @@ -3310,7 +3304,7 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig-typescript-loader/4.4.0_sqne5mrtqj3bfk6ujmz665hnfa: + /cosmiconfig-typescript-loader/4.4.0_un7ichfgdifpkcfxo3cvasqeyy: resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} engines: {node: '>=v14.21.3'} peerDependencies: @@ -3320,12 +3314,12 @@ packages: typescript: '>=4' dependencies: '@types/node': 20.5.1 - cosmiconfig: 8.3.6_typescript@4.9.4 - ts-node: 10.9.2_q7cveed3dsfobzxjkbw6gtmsda - typescript: 4.9.4 + cosmiconfig: 8.3.6_typescript@4.9.5 + ts-node: 10.9.2_kiquteiudr3tzl53hv2lrtxx6q + typescript: 4.9.5 dev: true - /cosmiconfig/8.3.6_typescript@4.9.4: + /cosmiconfig/8.3.6_typescript@4.9.5: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -3338,7 +3332,7 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 4.9.4 + typescript: 4.9.5 dev: true /create-ecdh/4.0.4: @@ -5558,7 +5552,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 jest-mock: 26.6.2 jest-util: 26.6.2 jsdom: 16.7.0 @@ -5576,7 +5570,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 jest-mock: 26.6.2 jest-util: 26.6.2 dev: true @@ -5592,7 +5586,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.9 - '@types/node': 18.11.18 + '@types/node': 20.5.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -5618,7 +5612,7 @@ packages: '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 @@ -5677,7 +5671,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 dev: true /jest-pnp-resolver/1.2.3_jest-resolve@26.6.2: @@ -5730,7 +5724,7 @@ packages: '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 @@ -5798,7 +5792,7 @@ packages: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.5.1 graceful-fs: 4.2.11 dev: true @@ -5831,7 +5825,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 chalk: 4.1.2 graceful-fs: 4.2.11 is-ci: 2.0.0 @@ -5856,7 +5850,7 @@ packages: dependencies: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.5.1 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 26.6.2 @@ -5867,7 +5861,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.5.1 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -5888,22 +5882,6 @@ packages: - utf-8-validate dev: true - /jest/26.6.3: - resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} - engines: {node: '>= 10.14.2'} - hasBin: true - dependencies: - '@jest/core': 26.6.3 - import-local: 3.1.0 - jest-cli: 26.6.3 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - /jose/4.15.4: resolution: {integrity: sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==} dev: false @@ -8392,29 +8370,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-jest/26.5.6_xuote2qreek47x2di7kesslrai: - resolution: {integrity: sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==} - engines: {node: '>= 10'} - hasBin: true - peerDependencies: - jest: '>=26 <27' - typescript: '>=3.8 <5.0' - dependencies: - bs-logger: 0.2.6 - buffer-from: 1.1.2 - fast-json-stable-stringify: 2.1.0 - jest: 26.6.3 - jest-util: 26.6.2 - json5: 2.2.3 - lodash: 4.17.21 - make-error: 1.3.6 - mkdirp: 1.0.4 - semver: 7.6.0 - typescript: 4.9.5 - yargs-parser: 20.2.9 - dev: true - - /ts-node/10.9.2_q7cveed3dsfobzxjkbw6gtmsda: + /ts-node/10.9.2_kiquteiudr3tzl53hv2lrtxx6q: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -8440,7 +8396,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.9.4 + typescript: 4.9.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -8777,10 +8733,6 @@ packages: xtend: 4.0.2 dev: true - /undici-types/5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - /union-value/1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'}