From dd88b92a46ce33af52b21480d7c656f691641249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodolfo=20Pietro=20Calabr=C3=B2?= <33911400+rodolfopietro97@users.noreply.github.com> Date: Tue, 14 Nov 2023 12:22:36 +0100 Subject: [PATCH] 86 transaction online (#228) * fix: change endpoint structure in order to improve readability * fix: adapt to new urls * fix: move simulateTransactionCall to transaction-client.ts * fix: add transaction client to merge * fix: add missing exports * fix: remove redundant * fix: remove unuseful * fix: change standard accounts names (group by tests) and create accounts for transaction tests * feat: transaction client * feat: tests. Missing simulate transaction call * fix: yarn.lock update and format better errorTypes.ts * fix: simulate transaction call in a separated task * fix: add check on result of transaction send * feat: test sending of delegated transactions and multiclauses * refactor: linting * refactor: restored linting due to prettier update * fix: typo * fix: typo 2 * fix: typo for block_ref * feat: transaction utils for check transaction data * fix: typo * fix: types * fix: import * fix: check transaction * fix: change approach with using isThorId * fix: 100% coverage * fix: last version * fix: tsdoc and handle null * fix: handle null for block * fix: missing types inference * fix: tests * fix: add data into errors --------- Co-authored-by: Piero Bassa --- packages/core/src/transaction/transaction.ts | 4 +- packages/core/src/utils/const/data.ts | 10 +- packages/core/src/utils/const/transaction.ts | 6 +- packages/core/src/utils/data/data.ts | 27 +- packages/core/src/utils/data/index.ts | 1 + packages/core/tests/utils/data/data.test.ts | 23 +- packages/core/tests/utils/data/fixture.ts | 36 ++ packages/errors/src/types/errorTypes.ts | 124 ++--- .../client/thor/accounts/account-client.ts | 6 +- .../src/client/thor/blocks/block-client.ts | 13 +- packages/network/src/client/thor/index.ts | 3 + .../network/src/client/thor/thor-client.ts | 11 +- .../src/client/thor/transactions/index.ts | 2 + .../thor/transactions/transaction-client.ts | 175 ++++++ .../src/client/thor/transactions/types.d.ts | 120 +++++ packages/network/src/client/thor/types.d.ts | 0 packages/network/src/utils/index.ts | 1 - packages/network/src/utils/thorest/account.ts | 33 -- packages/network/src/utils/thorest/block.ts | 12 - packages/network/src/utils/thorest/index.ts | 8 +- packages/network/src/utils/thorest/thorest.ts | 50 ++ .../accounts/accounts.solo.test.ts | 24 +- .../thor-client/transactions/fixture.ts | 209 ++++++++ .../transactions/transaction.solo.test.ts | 134 +++++ .../transactions/transactions.testnet.test.ts | 93 ++++ packages/network/tests/fixture.ts | 13 +- yarn.lock | 501 +++++++++--------- 27 files changed, 1252 insertions(+), 387 deletions(-) create mode 100644 packages/network/src/client/thor/transactions/index.ts create mode 100644 packages/network/src/client/thor/transactions/transaction-client.ts create mode 100644 packages/network/src/client/thor/transactions/types.d.ts delete mode 100644 packages/network/src/client/thor/types.d.ts delete mode 100644 packages/network/src/utils/thorest/account.ts delete mode 100644 packages/network/src/utils/thorest/block.ts create mode 100644 packages/network/src/utils/thorest/thorest.ts create mode 100644 packages/network/tests/client/thor-client/transactions/fixture.ts create mode 100644 packages/network/tests/client/thor-client/transactions/transaction.solo.test.ts create mode 100644 packages/network/tests/client/thor-client/transactions/transactions.testnet.test.ts diff --git a/packages/core/src/transaction/transaction.ts b/packages/core/src/transaction/transaction.ts index 2a367f205..e3b147b30 100644 --- a/packages/core/src/transaction/transaction.ts +++ b/packages/core/src/transaction/transaction.ts @@ -3,7 +3,7 @@ import { type RLPValidObject } from '../encoding'; import { blake2b256 } from '../hash'; import { secp256k1 } from '../secp256k1'; import { - BLOCKREF_LENGTH, + BLOCK_REF_LENGTH, dataUtils, SIGNATURE_LENGTH, SIGNED_TRANSACTION_RLP, @@ -417,7 +417,7 @@ class Transaction { body.blockRef !== undefined && dataUtils.isHexString(body.blockRef) && Buffer.from(body.blockRef.slice(2), 'hex').length === - BLOCKREF_LENGTH && + BLOCK_REF_LENGTH && // Expiration body.expiration !== undefined && // Clauses diff --git a/packages/core/src/utils/const/data.ts b/packages/core/src/utils/const/data.ts index 2a3052cff..5c11ceb14 100644 --- a/packages/core/src/utils/const/data.ts +++ b/packages/core/src/utils/const/data.ts @@ -35,11 +35,19 @@ const DECIMAL_INTEGER_REGEX = /^\d+$/; */ const NUMERIC_REGEX = /^-?\d*(\.\d+)?$/; +/** + * Default length of thor id hex string. + * Thor id is a 64 characters long hexadecimal string. + * This is used to validate thor id strings (block ids, transaction ids, ...). + */ +const THOR_ID_LENGTH = 64; + export { ZERO_BUFFER, HEX_REGEX, HEX_ADDRESS_REGEX, HEX_REGEX_OPTIONAL_PREFIX, DECIMAL_INTEGER_REGEX, - NUMERIC_REGEX + NUMERIC_REGEX, + THOR_ID_LENGTH }; diff --git a/packages/core/src/utils/const/transaction.ts b/packages/core/src/utils/const/transaction.ts index 2867ade95..a0fb6ca05 100644 --- a/packages/core/src/utils/const/transaction.ts +++ b/packages/core/src/utils/const/transaction.ts @@ -137,9 +137,9 @@ const SIGNED_TRANSACTION_RLP = new RLP.Profiler({ const SIGNATURE_LENGTH = 65; /** - * Blockref field length + * Block ref field length */ -const BLOCKREF_LENGTH = 8; +const BLOCK_REF_LENGTH = 8; export { TRANSACTIONS_GAS_CONSTANTS, @@ -148,5 +148,5 @@ export { TRANSACTION_FEATURES_KIND, TRANSACTION_SIGNATURE_KIND, SIGNATURE_LENGTH, - BLOCKREF_LENGTH + BLOCK_REF_LENGTH }; diff --git a/packages/core/src/utils/data/data.ts b/packages/core/src/utils/data/data.ts index 9bbaf17a6..06fdee20c 100644 --- a/packages/core/src/utils/data/data.ts +++ b/packages/core/src/utils/data/data.ts @@ -2,7 +2,8 @@ import { DECIMAL_INTEGER_REGEX, HEX_REGEX, HEX_REGEX_OPTIONAL_PREFIX, - NUMERIC_REGEX + NUMERIC_REGEX, + THOR_ID_LENGTH } from '../const'; import { type HexString } from '../types'; import { type HexConfig } from './types'; @@ -83,10 +84,32 @@ const isNumeric = (value: string): boolean => { return NUMERIC_REGEX.test(value); }; +/** + * Checks whether the provided data is a valid transaction thor id. + * Thor id is a 64 characters long hexadecimal string. + * It is used to identify a transaction id, a block id, .... + * + * @remarks + * The check can optionally validate the presence of a '0x' prefix. + * + * @param data - The string data to check. + * @param checkPrefix - A boolean determining whether to validate the '0x' prefix (default: false). + * @returns A boolean indicating whether the input is a valid hexadecimal string. + */ +const isThorId = (data: string, checkPrefix: boolean = false): boolean => { + return ( + isHexString(data, checkPrefix) && + (checkPrefix + ? data.length === THOR_ID_LENGTH + 2 // +2 for '0x' + : data.length === THOR_ID_LENGTH) + ); +}; + export const dataUtils = { toHexString, isHexString, removePrefix, isDecimalString, - isNumeric + isNumeric, + isThorId }; diff --git a/packages/core/src/utils/data/index.ts b/packages/core/src/utils/data/index.ts index 370767922..91f3146df 100644 --- a/packages/core/src/utils/data/index.ts +++ b/packages/core/src/utils/data/index.ts @@ -1 +1,2 @@ export * from './data'; +export * from './types.d'; diff --git a/packages/core/tests/utils/data/data.test.ts b/packages/core/tests/utils/data/data.test.ts index 3215900d2..31a3e629a 100644 --- a/packages/core/tests/utils/data/data.test.ts +++ b/packages/core/tests/utils/data/data.test.ts @@ -2,9 +2,11 @@ import { describe, expect, test } from '@jest/globals'; import { dataUtils } from '../../../src'; import { invalidHexStrings, + invalidThorIDs, isNumericTestCases, prefixedAndUnprefixedStrings, - validHexStrings + validHexStrings, + validThorIDs } from './fixture'; /** @@ -61,6 +63,25 @@ describe('utils/hex', () => { }); }); + /** + * Thor id verification + */ + describe('Thor id verification', () => { + validThorIDs.forEach((id) => { + test(`Should return true for valid thor id string: ${id.value}`, () => { + expect(dataUtils.isThorId(id.value, id.checkPrefix)).toBe(true); + }); + }); + + invalidThorIDs.forEach((id) => { + test(`Should return false for valid thor id string: ${id.value}`, () => { + expect(dataUtils.isThorId(id.value, id.checkPrefix)).toBe( + false + ); + }); + }); + }); + /** * Hex prefixes */ diff --git a/packages/core/tests/utils/data/fixture.ts b/packages/core/tests/utils/data/fixture.ts index 18405e97d..6cb926aec 100644 --- a/packages/core/tests/utils/data/fixture.ts +++ b/packages/core/tests/utils/data/fixture.ts @@ -13,6 +13,40 @@ const invalidHexStrings = [ '0x48656c6c6fz' ]; +/** + * Valid thor IDs. + */ +const validThorIDs = [ + { + value: '0x271f7db20141001975f71deb8fca90d6b22b8d6610dfb5a3e0bbeaf78b5a4891', + checkPrefix: true + }, + { + value: '271f7db20141001975f71deb8fca90d6b22b8d6610dfb5a3e0bbeaf78b5a4891' + }, + { + value: '271f7db20141001975f71deb8fca90d6b22b8d6610dfb5a3e0bbeaf78b5a4891', + checkPrefix: false + } +]; + +/** + * Invalid thor IDs. + */ +const invalidThorIDs = [ + { + value: '0x271f7db20141001975f71deb8fca90d6b22b8d6610d', + checkPrefix: true + }, + { + value: '0xInvalidThorID', + checkPrefix: false + }, + { + value: '0xInvalidThorID' + } +]; + /** * Prefixd and unprefixed strings */ @@ -132,6 +166,8 @@ const isNumericTestCases = [ export { validHexStrings, invalidHexStrings, + validThorIDs, + invalidThorIDs, prefixedAndUnprefixedStrings, isNumericTestCases }; diff --git a/packages/errors/src/types/errorTypes.ts b/packages/errors/src/types/errorTypes.ts index 5291c817b..856b16bab 100644 --- a/packages/errors/src/types/errorTypes.ts +++ b/packages/errors/src/types/errorTypes.ts @@ -86,8 +86,8 @@ type ErrorCode = type DataType = ErrorCodeT extends RLP.INVALID_RLP ? InvalidRLPErrorData : ErrorCodeT extends HTTP_CLIENT.INVALID_HTTP_REQUEST - ? HTTPClientErrorData - : DefaultErrorData; + ? HTTPClientErrorData + : DefaultErrorData; /** * Default error codes. @@ -122,66 +122,66 @@ type ErrorType = ErrorCodeT extends SECP256K1.INVALID_SECP256k1_PRIVATE_KEY ? InvalidSecp256k1PrivateKeyError : ErrorCodeT extends SECP256K1.INVALID_SECP256k1_MESSAGE_HASH - ? InvalidSecp256k1MessageHashError - : ErrorCodeT extends SECP256K1.INVALID_SECP256k1_SIGNATURE - ? InvalidSecp256k1SignatureError - : ErrorCodeT extends SECP256K1.INVALID_SECP256k1_SIGNATURE_RECOVERY - ? InvalidSecp256k1SignatureRecoveryError - : ErrorCodeT extends ADDRESS.INVALID_ADDRESS - ? InvalidAddressError - : ErrorCodeT extends KEYSTORE.INVALID_KEYSTORE - ? InvalidKeystoreError - : ErrorCodeT extends KEYSTORE.INVALID_PASSWORD - ? InvalidKeystorePasswordError - : ErrorCodeT extends HDNODE.INVALID_HDNODE_CHAIN_CODE - ? InvalidHDNodeChaincodeError - : ErrorCodeT extends HDNODE.INVALID_HDNODE_MNEMONICS - ? InvalidHDNodeMnemonicsError - : ErrorCodeT extends HDNODE.INVALID_HDNODE_PRIVATE_KEY - ? InvalidHDNodePrivateKeyError - : ErrorCodeT extends HDNODE.INVALID_HDNODE_PUBLIC_KEY - ? InvalidHDNodePublicKeyError - : ErrorCodeT extends HDNODE.INVALID_HDNODE_DERIVATION_PATH - ? InvalidHDNodeDerivationPathError - : ErrorCodeT extends BLOOM.INVALID_BLOOM - ? InvalidBloomError - : ErrorCodeT extends BLOOM.INVALID_K - ? InvalidKError - : ErrorCodeT extends CERTIFICATE.CERTIFICATE_NOT_SIGNED - ? CertificateNotSignedError - : ErrorCodeT extends CERTIFICATE.CERTIFICATE_INVALID_SIGNATURE_FORMAT - ? CertificateInvalidSignatureFormatError - : ErrorCodeT extends CERTIFICATE.CERTIFICATE_INVALID_SIGNER - ? CertificateInvalidSignerError - : ErrorCodeT extends ABI.INVALID_EVENT - ? InvalidAbiEventError - : ErrorCodeT extends ABI.INVALID_DATA_TO_DECODE - ? InvalidAbiDataToDecodeError - : ErrorCodeT extends ABI.INVALID_DATA_TO_ENCODE - ? InvalidAbiDataToEncodeError - : ErrorCodeT extends ABI.INVALID_FORMAT_TYPE - ? InvalidAbiFormatTypeError - : ErrorCodeT extends ABI.INVALID_FUNCTION - ? InvalidAbiFunctionError - : ErrorCodeT extends ABI.CONTRACT_INTERFACE_ERROR - ? ContractInterfaceError - : ErrorCodeT extends RLP.INVALID_RLP - ? InvalidRLPError - : ErrorCodeT extends DATA.INVALID_DATA_TYPE - ? InvalidDataTypeError - : ErrorCodeT extends DATA.INVALID_DATA_RETURN_TYPE - ? InvalidDataReturnTypeError - : ErrorCodeT extends TRANSACTION.ALREADY_SIGNED - ? TransactionAlreadySignedError - : ErrorCodeT extends TRANSACTION.NOT_SIGNED - ? TransactionNotSignedError - : ErrorCodeT extends TRANSACTION.INVALID_TRANSACTION_BODY - ? TransactionBodyError - : ErrorCodeT extends TRANSACTION.INVALID_DELEGATION - ? TransactionDelegationError - : ErrorCodeT extends HTTP_CLIENT.INVALID_HTTP_REQUEST - ? HTTPClientError - : never; + ? InvalidSecp256k1MessageHashError + : ErrorCodeT extends SECP256K1.INVALID_SECP256k1_SIGNATURE + ? InvalidSecp256k1SignatureError + : ErrorCodeT extends SECP256K1.INVALID_SECP256k1_SIGNATURE_RECOVERY + ? InvalidSecp256k1SignatureRecoveryError + : ErrorCodeT extends ADDRESS.INVALID_ADDRESS + ? InvalidAddressError + : ErrorCodeT extends KEYSTORE.INVALID_KEYSTORE + ? InvalidKeystoreError + : ErrorCodeT extends KEYSTORE.INVALID_PASSWORD + ? InvalidKeystorePasswordError + : ErrorCodeT extends HDNODE.INVALID_HDNODE_CHAIN_CODE + ? InvalidHDNodeChaincodeError + : ErrorCodeT extends HDNODE.INVALID_HDNODE_MNEMONICS + ? InvalidHDNodeMnemonicsError + : ErrorCodeT extends HDNODE.INVALID_HDNODE_PRIVATE_KEY + ? InvalidHDNodePrivateKeyError + : ErrorCodeT extends HDNODE.INVALID_HDNODE_PUBLIC_KEY + ? InvalidHDNodePublicKeyError + : ErrorCodeT extends HDNODE.INVALID_HDNODE_DERIVATION_PATH + ? InvalidHDNodeDerivationPathError + : ErrorCodeT extends BLOOM.INVALID_BLOOM + ? InvalidBloomError + : ErrorCodeT extends BLOOM.INVALID_K + ? InvalidKError + : ErrorCodeT extends CERTIFICATE.CERTIFICATE_NOT_SIGNED + ? CertificateNotSignedError + : ErrorCodeT extends CERTIFICATE.CERTIFICATE_INVALID_SIGNATURE_FORMAT + ? CertificateInvalidSignatureFormatError + : ErrorCodeT extends CERTIFICATE.CERTIFICATE_INVALID_SIGNER + ? CertificateInvalidSignerError + : ErrorCodeT extends ABI.INVALID_EVENT + ? InvalidAbiEventError + : ErrorCodeT extends ABI.INVALID_DATA_TO_DECODE + ? InvalidAbiDataToDecodeError + : ErrorCodeT extends ABI.INVALID_DATA_TO_ENCODE + ? InvalidAbiDataToEncodeError + : ErrorCodeT extends ABI.INVALID_FORMAT_TYPE + ? InvalidAbiFormatTypeError + : ErrorCodeT extends ABI.INVALID_FUNCTION + ? InvalidAbiFunctionError + : ErrorCodeT extends ABI.CONTRACT_INTERFACE_ERROR + ? ContractInterfaceError + : ErrorCodeT extends RLP.INVALID_RLP + ? InvalidRLPError + : ErrorCodeT extends DATA.INVALID_DATA_TYPE + ? InvalidDataTypeError + : ErrorCodeT extends DATA.INVALID_DATA_RETURN_TYPE + ? InvalidDataReturnTypeError + : ErrorCodeT extends TRANSACTION.ALREADY_SIGNED + ? TransactionAlreadySignedError + : ErrorCodeT extends TRANSACTION.NOT_SIGNED + ? TransactionNotSignedError + : ErrorCodeT extends TRANSACTION.INVALID_TRANSACTION_BODY + ? TransactionBodyError + : ErrorCodeT extends TRANSACTION.INVALID_DELEGATION + ? TransactionDelegationError + : ErrorCodeT extends HTTP_CLIENT.INVALID_HTTP_REQUEST + ? HTTPClientError + : never; /** * Map to get the error class from the error code. diff --git a/packages/network/src/client/thor/accounts/account-client.ts b/packages/network/src/client/thor/accounts/account-client.ts index 1faac14c2..0331045b4 100644 --- a/packages/network/src/client/thor/accounts/account-client.ts +++ b/packages/network/src/client/thor/accounts/account-client.ts @@ -50,7 +50,7 @@ class AccountClient { return (await this.httpClient.http( 'GET', - thorest.account.ACCOUNT_DETAIL(address), + thorest.accounts.get.ACCOUNT_DETAIL(address), { query: buildQuery({ revision }) } @@ -86,7 +86,7 @@ class AccountClient { const result = (await this.httpClient.http( 'GET', - thorest.account.ACCOUNT_BYTECODE(address), + thorest.accounts.get.ACCOUNT_BYTECODE(address), { query: buildQuery({ revision }) } @@ -133,7 +133,7 @@ class AccountClient { const result = (await this.httpClient.http( 'GET', - thorest.account.STORAGE_AT(address, position), + thorest.accounts.get.STORAGE_AT(address, position), { query: buildQuery({ position, revision }) } diff --git a/packages/network/src/client/thor/blocks/block-client.ts b/packages/network/src/client/thor/blocks/block-client.ts index 5ad3dda2a..ba8910426 100644 --- a/packages/network/src/client/thor/blocks/block-client.ts +++ b/packages/network/src/client/thor/blocks/block-client.ts @@ -24,21 +24,22 @@ class BlockClient { public async getBlock( revision: string | number, expanded?: boolean - ): Promise { + ): Promise { if (revision != null && !revisionUtils.isRevisionBlock(revision)) { throw buildError( DATA.INVALID_DATA_TYPE, - 'Invalid revision. The revision must be a string representing a block number or block id.' + 'Invalid revision. The revision must be a string representing a block number or block id.', + { revision } ); } return (await this.httpClient.http( 'GET', - thorest.blocks.BLOCK_DETAIL(revision), + thorest.blocks.get.BLOCK_DETAIL(revision), { query: buildQuery({ expanded }) } - )) as BlockDetail; + )) as BlockDetail | null; } /** @@ -46,7 +47,7 @@ class BlockClient { * * @returns A promise that resolves to an object containing the block details. */ - public async getBestBlock(): Promise { + public async getBestBlock(): Promise { return await this.getBlock('best'); } @@ -55,7 +56,7 @@ class BlockClient { * * @returns A promise that resolves to an object containing the block details. */ - public async getFinalBlock(): Promise { + public async getFinalBlock(): Promise { return await this.getBlock('finalized'); } } diff --git a/packages/network/src/client/thor/index.ts b/packages/network/src/client/thor/index.ts index 826b79337..e899c7d7c 100644 --- a/packages/network/src/client/thor/index.ts +++ b/packages/network/src/client/thor/index.ts @@ -1,2 +1,5 @@ export * from './accounts'; +export * from './blocks'; +export * from './logs'; +export * from './transactions'; export * from './thor-client'; diff --git a/packages/network/src/client/thor/thor-client.ts b/packages/network/src/client/thor/thor-client.ts index 5f061fd01..44722dac1 100644 --- a/packages/network/src/client/thor/thor-client.ts +++ b/packages/network/src/client/thor/thor-client.ts @@ -2,6 +2,7 @@ import { type HttpClient } from '../http'; import { AccountClient } from './accounts'; import { BlockClient } from './blocks'; import { LogsClient } from './logs'; +import { TransactionClient } from './transactions'; /** * The `ThorClient` class serves as an interface to interact with the Vechain Thor blockchain. @@ -12,15 +13,22 @@ class ThorClient { * The `AccountClient` instance used for interacting with account-related endpoints. */ public readonly accounts: AccountClient; + /** * The `BlockClient` instance used for interacting with block-related endpoints. */ public readonly blocks: BlockClient; + /** - * The `LogsClient` instance used for interacting with block-related endpoints. + * The `LogsClient` instance used for interacting with log-related endpoints. */ public readonly logs: LogsClient; + /** + * The `TransactionClient` instance used for interacting with transaction-related endpoints. + */ + public readonly transactions: TransactionClient; + /** * Constructs a new `ThorClient` instance with a given HTTP client. * @param httpClient - The HTTP client instance used for making network requests. @@ -29,6 +37,7 @@ class ThorClient { this.accounts = new AccountClient(httpClient); this.blocks = new BlockClient(httpClient); this.logs = new LogsClient(httpClient); + this.transactions = new TransactionClient(httpClient); } } diff --git a/packages/network/src/client/thor/transactions/index.ts b/packages/network/src/client/thor/transactions/index.ts new file mode 100644 index 000000000..a0476105e --- /dev/null +++ b/packages/network/src/client/thor/transactions/index.ts @@ -0,0 +1,2 @@ +export * from './types.d'; +export * from './transaction-client'; diff --git a/packages/network/src/client/thor/transactions/transaction-client.ts b/packages/network/src/client/thor/transactions/transaction-client.ts new file mode 100644 index 000000000..cc761bf04 --- /dev/null +++ b/packages/network/src/client/thor/transactions/transaction-client.ts @@ -0,0 +1,175 @@ +import { type HttpClient } from '../../http'; +import { buildQuery, thorest } from '../../../utils'; +import { dataUtils, TransactionHandler } from '@vechain-sdk/core'; +import { + type TransactionDetail, + type TransactionReceipt, + type TransactionSendResult +} from './types'; +import { buildError, DATA } from '@vechain-sdk/errors'; + +class TransactionClient { + /** + * Initializes a new instance of the `TransactionClient` class. + * @param httpClient - The HTTP client instance used for making HTTP requests. + */ + constructor(protected readonly httpClient: HttpClient) {} + + /** + * Retrieves the details of a transaction. + * + * @param id - Transaction ID of the transaction to retrieve. + * @param raw - (Optional) If true, returns the raw transaction data instead of the parsed transaction object. + * @param head - (Optional) The block number or ID to reference the transaction. + * @param pending - (Optional) If true, returns the pending transaction details instead of the final transaction details. + * @returns A promise that resolves to the details of the transaction. + */ + public async getTransaction( + id: string, + raw?: boolean, + head?: string, + pending?: boolean + ): Promise { + // Invalid transaction ID + if (!dataUtils.isThorId(id, true)) + throw buildError( + DATA.INVALID_DATA_TYPE, + 'Invalid transaction ID given as input. Input must be an hex string of length 64.', + { id } + ); + + // Invalid head + if (head !== undefined && !dataUtils.isThorId(head, true)) + throw buildError( + DATA.INVALID_DATA_TYPE, + 'Invalid head given as input. Input must be an hex string of length 64.', + { head } + ); + + return (await this.httpClient.http( + 'GET', + thorest.transactions.get.TRANSACTION(id), + { + query: buildQuery({ raw, head, pending }) + } + )) as TransactionDetail | null; + } + + /** + * Retrieves the receipt of a transaction. + * + * @param id - Transaction ID of the transaction to retrieve. + * @param head - (Optional) The block number or ID to reference the transaction. + * @returns A promise that resolves to the receipt of the transaction. + */ + public async getTransactionReceipt( + id: string, + head?: string + ): Promise { + // Invalid transaction ID + if (!dataUtils.isThorId(id, true)) + throw buildError( + DATA.INVALID_DATA_TYPE, + 'Invalid transaction ID given as input. Input must be an hex string of length 64.', + { id } + ); + + // Invalid head + if (head !== undefined && !dataUtils.isThorId(head, true)) + throw buildError( + DATA.INVALID_DATA_TYPE, + 'Invalid head given as input. Input must be an hex string of length 64.', + { head } + ); + + return (await this.httpClient.http( + 'GET', + thorest.transactions.get.TRANSACTION_RECEIPT(id), + { + query: buildQuery({ head }) + } + )) as TransactionReceipt | null; + } + + /** + * Retrieves the receipt of a transaction. + * + * @param raw - The raw transaction. + * @returns The transaction id of send transaction. + */ + public async sendTransaction(raw: string): Promise { + // Validate raw transaction + if (!dataUtils.isHexString(raw)) + throw buildError( + DATA.INVALID_DATA_TYPE, + 'Invalid raw transaction given as input. Input must be an hex string', + { raw } + ); + + // Decode raw transaction to check if raw is ok + try { + TransactionHandler.decode(Buffer.from(raw.slice(2), 'hex'), true); + } catch (error) { + throw buildError( + DATA.INVALID_DATA_TYPE, + 'Invalid raw transaction given as input. Input must be a valid raw transaction. Error occurs while decoding the transaction.', + { raw } + ); + } + + return (await this.httpClient.http( + 'POST', + thorest.transactions.post.TRANSACTION(), + { + body: { raw } + } + )) as TransactionSendResult; + } + + /** + * Simulates a transaction call and returns the result. + * + * @param revision - The block number or ID to reference the state of the account. + * @param clauses - The clauses to simulate. + * @param gas - The gas limit for the transaction. + * @param gasPrice - The gas price for the transaction. + * @param caller - The caller address. + * @param provedWork - The proved work. + * @param gasPayer - The gas payer address. + * @param expiration - The expiration of transaction. + * @param blockRef - The block reference. + * @returns A promise that resolves to the result of the simulated transaction. + * + * @NOTE: Define better parameters and gas estimation + */ + // public async simulateTransactionCall( + // revision: string, + // clauses: TransactionClause[], + // gas: string | number, + // gasPrice: string | number, + // caller: string, + // provedWork: string | number, + // gasPayer: string, + // expiration: number, + // blockRef: string + // ): Promise { + // return (await this.httpClient.http( + // 'POST', + // thorest.accounts.post.ACCOUNT(revision), + // { + // body: { + // clauses, + // gas, + // gasPrice, + // caller, + // provedWork, + // gasPayer, + // expiration, + // blockRef + // } + // } + // )) as TransactionCallSimulation; + // } +} + +export { TransactionClient }; diff --git a/packages/network/src/client/thor/transactions/types.d.ts b/packages/network/src/client/thor/transactions/types.d.ts new file mode 100644 index 000000000..822716be1 --- /dev/null +++ b/packages/network/src/client/thor/transactions/types.d.ts @@ -0,0 +1,120 @@ +import { type TransactionBody } from '@vechain-sdk/core/src'; + +/** + * Transaction Metadata interface. + * + * @private + */ +interface TransactionMetadata { + blockID: string; + blockNumber: number; + blockTimestamp: number; + txID?: string; + txOrigin?: string; +} + +/** + * Type for transaction events. + * + * @private + */ +type TransactionEventsType = Array<{ + address: string; + topics: string[]; + data: string; +}>; + +/** + * Type for transaction transfers. + * + * @private + */ +type TransactionTransfersType = Array<{ + sender: string; + recipient: string; + amount: string; +}>; +/** + * Type for RAW transaction detail. + * It is the response of `getTransaction` with `raw` set to `true`. + * + * @private + */ +interface TransactionDetailRaw { + raw: string; + meta: Omit; +} + +/** + * Type for NO RAW transaction detail. + * It is the response of `getTransaction` with `raw` set to `false`. + * + * @private + */ +type TransactionDetailNoRaw = TransactionBody & { + id: string; + origin: string; + delegator: string | null; + size: number; + meta: TransactionMetadata; +}; + +/** + * Type for transaction detail. + * + * @public + */ +type TransactionDetail = TransactionDetailRaw | TransactionDetailNoRaw; + +/** + * Type for transaction receipt. + * + * @public + */ +interface TransactionReceipt { + gasUsed: number; + gasPayer: string; + paid: string; + reward: string; + reverted: boolean; + outputs: [ + { + contractAddress: string | null; + events: TransactionEventsType; + transfers: TransactionTransfersType; + } + ]; + meta: TransactionMetadata; +} + +/** + * Type for transaction call simulation. + * + * @public + */ +type TransactionCallSimulation = [ + { + data: string; + events: TransactionEventsType; + transfers: TransactionTransfersType; + gasUsed: number; + reverted: boolean; + vmError: string; + } +]; + +/** + * Type for transaction send result. + * + * @public + */ +interface TransactionSendResult { + id: string; +} + +export { + type TransactionReceipt, + type TransactionDetail, + type TransactionCallSimulation, + type TransactionSendResult +}; diff --git a/packages/network/src/client/thor/types.d.ts b/packages/network/src/client/thor/types.d.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/network/src/utils/index.ts b/packages/network/src/utils/index.ts index b1ecf58b5..af4f86fc5 100644 --- a/packages/network/src/utils/index.ts +++ b/packages/network/src/utils/index.ts @@ -1,4 +1,3 @@ -export * from './revision'; export * from './const'; export * from './helpers'; export * from './revision'; diff --git a/packages/network/src/utils/thorest/account.ts b/packages/network/src/utils/thorest/account.ts deleted file mode 100644 index 56f80bd75..000000000 --- a/packages/network/src/utils/thorest/account.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Constructs the endpoint URL for retrieving account details. - * - * @param address - The account address. - * @returns The URL endpoint to fetch account details. - */ -const ACCOUNT_DETAIL = (address: string): string => `/accounts/${address}`; - -/** - * Constructs the endpoint URL for retrieving the bytecode of a smart contract. - * - * @param address - The account address. - * @returns The URL endpoint to fetch the smart contract's bytecode. - */ -const ACCOUNT_BYTECODE = (address: string): string => - `/accounts/${address}/code`; - -/** - * Constructs the endpoint URL for retrieving the storage at a specific position of a smart contract. - * This is usually used for querying the state of smart contracts. - * - * @param address - The account address. - * @param position - The specified position in the contract's storage. - * @returns The URL endpoint to fetch the storage data at the given position. - */ -const STORAGE_AT = (address: string, position: string): string => - `/accounts/${address}/storage/${position}`; - -export const account = { - ACCOUNT_DETAIL, - ACCOUNT_BYTECODE, - STORAGE_AT -}; diff --git a/packages/network/src/utils/thorest/block.ts b/packages/network/src/utils/thorest/block.ts deleted file mode 100644 index 587158e27..000000000 --- a/packages/network/src/utils/thorest/block.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Constructs the endpoint URL for retrieving block details based on block revision. - * - * @param revision - The block number or ID for which to fetch details. - * @returns The URL endpoint to fetch block details. - */ -const BLOCK_DETAIL = (revision: string | number): string => - `/blocks/${revision}`; - -export const blocks = { - BLOCK_DETAIL -}; diff --git a/packages/network/src/utils/thorest/index.ts b/packages/network/src/utils/thorest/index.ts index c7aa4ae00..f15d78b2e 100644 --- a/packages/network/src/utils/thorest/index.ts +++ b/packages/network/src/utils/thorest/index.ts @@ -1,7 +1 @@ -import { account } from './account'; -import { blocks } from './block'; - -export const thorest = { - account, - blocks -}; +export * from './thorest'; diff --git a/packages/network/src/utils/thorest/thorest.ts b/packages/network/src/utils/thorest/thorest.ts new file mode 100644 index 000000000..4bbe70b74 --- /dev/null +++ b/packages/network/src/utils/thorest/thorest.ts @@ -0,0 +1,50 @@ +/** + * Endpoints for the REST API. + * + * @public + */ +const thorest = { + /** + * Account related endpoints. + */ + accounts: { + get: { + ACCOUNT_DETAIL: (address: string): string => `/accounts/${address}`, + ACCOUNT_BYTECODE: (address: string): string => + `/accounts/${address}/code`, + STORAGE_AT: (address: string, position: string): string => + `/accounts/${address}/storage/${position}` + } + // @NOTE: Define better parameters and gas estimation + // post: { + // ACCOUNT: (revision: string): string => + // `/accounts/*?revision=${revision}` + // } + }, + + /** + * Block related endpoints. + */ + blocks: { + get: { + BLOCK_DETAIL: (revision: string | number): string => + `/blocks/${revision}` + } + }, + + /** + * Transaction related endpoints. + */ + transactions: { + get: { + TRANSACTION: (id: string): string => `/transactions/${id}`, + TRANSACTION_RECEIPT: (id: string): string => + `/transactions/${id}/receipt` + }, + post: { + TRANSACTION: (): string => `/transactions` + } + } +}; + +export { thorest }; diff --git a/packages/network/tests/client/thor-client/accounts/accounts.solo.test.ts b/packages/network/tests/client/thor-client/accounts/accounts.solo.test.ts index 4f41263df..b8171c036 100644 --- a/packages/network/tests/client/thor-client/accounts/accounts.solo.test.ts +++ b/packages/network/tests/client/thor-client/accounts/accounts.solo.test.ts @@ -25,7 +25,7 @@ describe('ThorClient - Accounts', () => { 'Get account returns fixed VET balance and increased VTHO balance with block number increase', async () => { const accountBefore = await thorSoloClient.accounts.getAccount( - TEST_ACCOUNTS.account.address + TEST_ACCOUNTS.ACCOUNT.SIMPLE_ACCOUNT.address ); expect(accountBefore).toBeDefined(); @@ -42,16 +42,24 @@ describe('ThorClient - Accounts', () => { const currentBlock = await thorSoloClient.blocks.getBlock('best'); - let latestBlock; + if (currentBlock !== null) { + let latestBlock; - // Wait for a block greater than currentBlock - do { - latestBlock = await thorSoloClient.blocks.getBlock('best'); - await new Promise((resolve) => setTimeout(resolve, 1000)); - } while (currentBlock.number === latestBlock.number); + // Wait for a block greater than currentBlock + do { + latestBlock = + await thorSoloClient.blocks.getBlock('best'); + await new Promise((resolve) => + setTimeout(resolve, 1000) + ); + } while ( + latestBlock !== null && + currentBlock.number === latestBlock.number + ); + } const accountAfter = await thorSoloClient.accounts.getAccount( - TEST_ACCOUNTS.account.address + TEST_ACCOUNTS.ACCOUNT.SIMPLE_ACCOUNT.address ); expect(accountAfter).toBeDefined(); diff --git a/packages/network/tests/client/thor-client/transactions/fixture.ts b/packages/network/tests/client/thor-client/transactions/fixture.ts new file mode 100644 index 000000000..72982cea8 --- /dev/null +++ b/packages/network/tests/client/thor-client/transactions/fixture.ts @@ -0,0 +1,209 @@ +import { InvalidDataTypeError } from '@vechain-sdk/errors'; +import { TEST_ACCOUNTS } from '../../../fixture'; + +/** + * Transaction details function fixture. + */ +const transactionDetails = { + correct: [ + { + testName: + 'Should be able to retrieve a transaction - NO RAW FORMAT', + transaction: { + id: '0x46d195f69e1ac3922d42c207e4705a3d1642883d97e58f7efc72f179ea326adb', + raw: false, + pending: false + }, + expected: { + id: '0x46d195f69e1ac3922d42c207e4705a3d1642883d97e58f7efc72f179ea326adb', + chainTag: 39, + blockRef: '0x010284a0b704e751', + expiration: 2000, + clauses: [ + { + to: '0x5d57f07dfeb8c224121433d5b1b401c82bd88f3d', + value: '0x2ea11e32ad50000', + data: '0x' + } + ], + gasPriceCoef: 0, + gas: 41192, + origin: '0x2d4ed6b8abd00bc2ef0bdb2258a946c214d9d0af', + delegator: null, + nonce: '0x76eed751cef0e52d', + dependsOn: null, + size: 130, + meta: { + blockID: + '0x010284a1fea0635a2e47dd21f8a1761406df1013e5f4af79e311d8a27373980d', + blockNumber: 16942241, + blockTimestamp: 1699453780 + } + } + }, + { + testName: 'Should be able to retrieve a transaction - RAW FORMAT', + transaction: { + id: '0x46d195f69e1ac3922d42c207e4705a3d1642883d97e58f7efc72f179ea326adb', + raw: true, + pending: true + }, + expected: { + raw: '0xf8802788010284a0b704e7518207d0e0df945d57f07dfeb8c224121433d5b1b401c82bd88f3d8802ea11e32ad50000808082a0e8808876eed751cef0e52dc0b841b2bb1ba31c7b78383bf7e01097038d26e6f1c685bdc73fce981f574eb7bb3abd6e59660e522c4870f1d033c0f82420448f44139e0fb2254a36d98ed387964c3c00', + meta: { + blockID: + '0x010284a1fea0635a2e47dd21f8a1761406df1013e5f4af79e311d8a27373980d', + blockNumber: 16942241, + blockTimestamp: 1699453780 + } + } + } + ], + errors: [ + { + testName: 'Should throw error when invalid transaction id is given', + transaction: { + id: 'WRONG_ID' + }, + expected: InvalidDataTypeError + }, + { + testName: 'Should throw error when invalid head of block is given', + transaction: { + id: '0x46d195f69e1ac3922d42c207e4705a3d1642883d97e58f7efc72f179ea326adb', + raw: false, + pending: false, + head: 'WRONG_HEAD' + }, + expected: InvalidDataTypeError + } + ] +}; + +/** + * Transaction receipts function fixture. + */ +const transactionReceipts = { + correct: [ + { + testName: 'Should be able to retrieve a transaction receipt', + transaction: { + id: '0x46d195f69e1ac3922d42c207e4705a3d1642883d97e58f7efc72f179ea326adb' + }, + expected: { + gasUsed: 21000, + gasPayer: '0x2d4ed6b8abd00bc2ef0bdb2258a946c214d9d0af', + paid: '0x2ea11e32ad50000', + reward: '0xdfd22a8cd98000', + reverted: false, + meta: { + blockID: + '0x010284a1fea0635a2e47dd21f8a1761406df1013e5f4af79e311d8a27373980d', + blockNumber: 16942241, + blockTimestamp: 1699453780, + txID: '0x46d195f69e1ac3922d42c207e4705a3d1642883d97e58f7efc72f179ea326adb', + txOrigin: '0x2d4ed6b8abd00bc2ef0bdb2258a946c214d9d0af' + }, + outputs: [ + { + contractAddress: null, + events: [], + transfers: [ + { + sender: '0x2d4ed6b8abd00bc2ef0bdb2258a946c214d9d0af', + recipient: + '0x5d57f07dfeb8c224121433d5b1b401c82bd88f3d', + amount: '0x2ea11e32ad50000' + } + ] + } + ] + } + } + ], + errors: [ + { + testName: 'Should throw error when invalid transaction id is given', + transaction: { + id: 'WRONG_ID' + }, + expected: InvalidDataTypeError + }, + { + testName: 'Should throw error when invalid head of block is given', + transaction: { + id: '0x46d195f69e1ac3922d42c207e4705a3d1642883d97e58f7efc72f179ea326adb', + head: 'WRONG_HEAD' + }, + expected: InvalidDataTypeError + }, + { + testName: + 'Should throw error when invalid head of block hex string length is given', + transaction: { + id: '0x46d195f69e1ac3922d42c207e4705a3d1642883d97e58f7efc72f179ea326adb', + head: '0x1234' + }, + expected: InvalidDataTypeError + } + ] +}; + +/** + * Send transaction function errors fixture. + */ +const sendTransactionErrors = { + correct: [ + { + testName: 'Should be able to send a transaction with 1 clause', + transaction: { + clauses: [ + { + to: TEST_ACCOUNTS.TRANSACTION.TRANSACTION_RECEIVER + .address, + value: 1000000, + data: '0x' + } + ] + } + }, + { + testName: 'Should be able to send a transaction with more clauses', + transaction: { + clauses: [ + { + to: TEST_ACCOUNTS.TRANSACTION.TRANSACTION_RECEIVER + .address, + value: 1000000, + data: '0x' + }, + { + to: TEST_ACCOUNTS.TRANSACTION.DELEGATOR.address, + value: 1000000, + data: '0x' + } + ] + } + } + ], + errors: [ + { + testName: + 'Should throw error when invalid encoded raw transaction hex string is given', + transaction: { + raw: 'INVALID_HEX_STRING' + }, + expected: InvalidDataTypeError + }, + { + testName: + 'Should throw error when invalid encoded raw transaction is given', + transaction: { + raw: '0x123456789abcdef' + }, + expected: InvalidDataTypeError + } + ] +}; + +export { transactionDetails, transactionReceipts, sendTransactionErrors }; diff --git a/packages/network/tests/client/thor-client/transactions/transaction.solo.test.ts b/packages/network/tests/client/thor-client/transactions/transaction.solo.test.ts new file mode 100644 index 000000000..90e62f9cf --- /dev/null +++ b/packages/network/tests/client/thor-client/transactions/transaction.solo.test.ts @@ -0,0 +1,134 @@ +import { describe, expect, test } from '@jest/globals'; +import { TEST_ACCOUNTS, thorSoloClient } from '../../../fixture'; +import { + dataUtils, + Transaction, + TransactionHandler, + TransactionUtils +} from '@vechain-sdk/core'; +import { sendTransactionErrors } from './fixture'; + +/** + * ThorClient class tests. + * + * @NOTE: This test suite run on solo network because it requires to send transactions. + * + * @group integration/client/thor/transactions + */ +describe('ThorClient - Transactions', () => { + /** + * sendTransaction tests + */ + describe('sendTransaction', () => { + /** + * SendTransaction - correct cases + */ + sendTransactionErrors.correct.forEach((testCase) => { + test(testCase.testName, async () => { + // 1- Init transaction + + // Get latest block + const latestBlock = + await thorSoloClient.blocks.getBlock('best'); + + // Get gas @NOTE it is approximation. This part must be improved. + const gas = + 5000 + + TransactionUtils.intrinsicGas( + testCase.transaction.clauses + ) * + 5; + + // Create transactions + const transaction = new Transaction({ + chainTag: 0xf6, + blockRef: + latestBlock !== null + ? latestBlock.id.slice(0, 18) + : '0x0', + expiration: 32, + clauses: testCase.transaction.clauses, + gasPriceCoef: 128, + gas, + dependsOn: null, + nonce: 12345678 + }); + + const delegatedTransaction = new Transaction({ + chainTag: 0xf6, + blockRef: + latestBlock !== null + ? latestBlock.id.slice(0, 18) + : '0x0', + expiration: 32, + clauses: testCase.transaction.clauses, + gasPriceCoef: 128, + gas, + dependsOn: null, + nonce: 12345678, + reserved: { + features: 1 + } + }); + + // Normal signature and delegation signature + const rawNormalSigned = TransactionHandler.sign( + transaction, + Buffer.from( + TEST_ACCOUNTS.TRANSACTION.TRANSACTION_SENDER.privateKey, + 'hex' + ) + ).encoded; + + const rawDelegatedSigned = TransactionHandler.signWithDelegator( + delegatedTransaction, + Buffer.from( + TEST_ACCOUNTS.TRANSACTION.TRANSACTION_SENDER.privateKey, + 'hex' + ), + Buffer.from( + TEST_ACCOUNTS.TRANSACTION.DELEGATOR.privateKey, + 'hex' + ) + ).encoded; + + // 2 - Send transaction + for (const raw of [rawNormalSigned, rawDelegatedSigned]) { + const send = + await thorSoloClient.transactions.sendTransaction( + `0x${raw.toString('hex')}` + ); + expect(send).toBeDefined(); + expect(send).toHaveProperty('id'); + expect(dataUtils.isHexString(send.id)).toBe(true); + + // 3 - Get transaction AND transaction receipt + const transaction = + await thorSoloClient.transactions.getTransaction( + send.id + ); + const transactionReceipt = + await thorSoloClient.transactions.getTransactionReceipt( + send.id + ); + + expect(transaction).toBeDefined(); + expect(transactionReceipt).toBeDefined(); + } + }); + }); + + /** + * SendTransaction - error cases + */ + sendTransactionErrors.errors.forEach((testCase) => { + test(testCase.testName, async () => { + await expect( + thorSoloClient.transactions.sendTransaction( + testCase.transaction.raw + ) + ).rejects.toThrow(testCase.expected); + }); + }); + }); +}); diff --git a/packages/network/tests/client/thor-client/transactions/transactions.testnet.test.ts b/packages/network/tests/client/thor-client/transactions/transactions.testnet.test.ts new file mode 100644 index 000000000..01f510827 --- /dev/null +++ b/packages/network/tests/client/thor-client/transactions/transactions.testnet.test.ts @@ -0,0 +1,93 @@ +import { describe, expect, test } from '@jest/globals'; +import { thorClient } from '../../../fixture'; +import { transactionDetails, transactionReceipts } from './fixture'; + +/** + * ThorClient class tests + * + * @NOTE: This test suite run on testnet network because it contains read only tests. + * + * @group integration/client/thor/transactions + */ +describe('ThorClient - Transactions', () => { + /** + * getTransaction tests + */ + describe('getTransaction', () => { + /** + * getTransaction - correct cases + */ + transactionDetails.correct.forEach((testCase) => { + test(testCase.testName, async () => { + // Check block number + const latestBlock = await thorClient.blocks.getFinalBlock(); + + // Check transaction block. If undefined, it is the 'best' block. + for (const blockNumber of [latestBlock, undefined]) { + const transaction = + await thorClient.transactions.getTransaction( + testCase.transaction.id, + testCase.transaction.raw, + blockNumber?.id, + testCase.transaction.pending + ); + expect(transaction).toEqual(testCase.expected); + } + }); + }); + + /** + * getTransaction - error cases + */ + transactionDetails.errors.forEach((testCase) => { + test(testCase.testName, async () => { + await expect( + thorClient.transactions.getTransaction( + testCase.transaction.id, + testCase.transaction.raw, + testCase.transaction.head + ) + ).rejects.toThrow(testCase.expected); + }); + }); + }); + + /** + * getTransactionReceipt tests + */ + describe('getTransactionReceipt', () => { + /** + * getTransactionReceipt - correct cases + */ + transactionReceipts.correct.forEach((testCase) => { + test(testCase.testName, async () => { + // Check block number + const latestBlock = await thorClient.blocks.getFinalBlock(); + + // Check transaction block. If undefined, it is the 'best' block. + for (const blockNumber of [latestBlock, undefined]) { + const transaction = + await thorClient.transactions.getTransactionReceipt( + testCase.transaction.id, + blockNumber?.id + ); + expect(transaction).toEqual(testCase.expected); + } + }); + }); + + /** + * getTransactionReceipt - error cases + */ + transactionReceipts.errors.forEach((testCase) => { + test(testCase.testName, async () => { + await expect( + thorClient.transactions.getTransactionReceipt( + testCase.transaction.id, + testCase.transaction.head + ) + ).rejects.toThrow(testCase.expected); + }); + }); + }); +}); diff --git a/packages/network/tests/fixture.ts b/packages/network/tests/fixture.ts index cfc101f46..5e9d60bd3 100644 --- a/packages/network/tests/fixture.ts +++ b/packages/network/tests/fixture.ts @@ -165,7 +165,18 @@ const TEST_ACCOUNTS = { /** * Accounts dedicated for testing account related operations. */ - account: ALL_ACCOUNTS[0] + ACCOUNT: { + SIMPLE_ACCOUNT: ALL_ACCOUNTS[0] + }, + + /** + * Accounts dedicated for testing transaction related operations. + */ + TRANSACTION: { + TRANSACTION_SENDER: ALL_ACCOUNTS[1], + TRANSACTION_RECEIVER: ALL_ACCOUNTS[2], + DELEGATOR: ALL_ACCOUNTS[3] + } }; export { diff --git a/yarn.lock b/yarn.lock index 9988bb021..9177eba76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -46,37 +46,37 @@ chalk "^2.4.2" "@babel/compat-data@^7.22.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" - integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" + integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.7.5": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" - integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" + integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/generator" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.0" + "@babel/parser" "^7.23.3" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.3" + "@babel/types" "^7.23.3" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.23.3", "@babel/generator@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" + integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.3" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -119,10 +119,10 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -182,10 +182,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" + integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -223,9 +223,9 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -279,9 +279,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -294,26 +294,26 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== +"@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" + integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== dependencies: "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/generator" "^7.23.3" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/parser" "^7.23.3" + "@babel/types" "^7.23.3" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.3.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" + integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" @@ -330,15 +330,15 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@commitlint/cli@^18.2.0": - version "18.2.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-18.2.0.tgz#c2dc8f0a834b5c4befa48cad6396f694f28d2b5f" - integrity sha512-F/DCG791kMFmWg5eIdogakuGeg4OiI2kD430ed1a1Hh3epvrJdeIAgcGADAMIOmF+m0S1+VlIYUKG2dvQQ1Izw== - dependencies: - "@commitlint/format" "^18.1.0" - "@commitlint/lint" "^18.1.0" - "@commitlint/load" "^18.2.0" - "@commitlint/read" "^18.1.0" - "@commitlint/types" "^18.1.0" + version "18.4.1" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-18.4.1.tgz#b008ff325f112da260ed92605ca9d9290e53ba81" + integrity sha512-4+jljfd29Udw9RDDyigavLO9LvdbmB8O9xjDzVZ0R3lJuG7nCeyHgnKWIVpFaN590isZMV/cMeQK0gH7hRF40A== + dependencies: + "@commitlint/format" "^18.4.0" + "@commitlint/lint" "^18.4.0" + "@commitlint/load" "^18.4.1" + "@commitlint/read" "^18.4.0" + "@commitlint/types" "^18.4.0" execa "^5.0.0" lodash.isfunction "^3.0.9" resolve-from "5.0.0" @@ -346,145 +346,145 @@ yargs "^17.0.0" "@commitlint/config-conventional@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-18.1.0.tgz#f8f37b0de4090ebd3f9418672184814fab520205" - integrity sha512-8vvvtV3GOLEMHeKc8PjRL1lfP1Y4B6BG0WroFd9PJeRiOc3nFX1J0wlJenLURzl9Qus6YXVGWf+a/ZlbCKT3AA== + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-18.4.0.tgz#8d2cab9e6ea62c90cade345c4c5a4db73fe9b694" + integrity sha512-vArwCZopsZs0FnGsh9AR7uUTPZ5oVGk8+qnEZWq2KTsMjrE0k80b+oZ32GSQmXQT2iMKVrDC8pKX5uKNkCe9Sw== dependencies: conventional-changelog-conventionalcommits "^7.0.2" -"@commitlint/config-validator@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-18.1.0.tgz#e717151ab99206bdf70d2b526a32e530cec72512" - integrity sha512-kbHkIuItXn93o2NmTdwi5Mk1ujyuSIysRE/XHtrcps/27GuUKEIqBJp6TdJ4Sq+ze59RlzYSHMKuDKZbfg9+uQ== +"@commitlint/config-validator@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-18.4.0.tgz#7197d7ab3248dd936782b319cafc0480ab9732d5" + integrity sha512-1y6qHMU3o4cYQSK+Y9EnmH6H1GRiwQGjnLIUOIKlekrmfc8MrMk1ByNmb8od4vK3qHJAaL/77/5n+1uyyIF5dA== dependencies: - "@commitlint/types" "^18.1.0" + "@commitlint/types" "^18.4.0" ajv "^8.11.0" -"@commitlint/ensure@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-18.1.0.tgz#3342fdaf42210166a6ca8779c0028298dd60b4b7" - integrity sha512-CkPzJ9UBumIo54VDcpmBlaVX81J++wzEhN3DJH9+6PaLeiIG+gkSx8t7C2gfwG7PaiW4HzQtdQlBN5ab+c4vFQ== +"@commitlint/ensure@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-18.4.0.tgz#4f9ed3900a98c28c2991a07a6b1c6b1611c85892" + integrity sha512-N5cJo/n61ULSwz3W5Iz/IZJ0I9H/PaHc+OMcF2XcRVbLa6B3YwzEW66XGCRKVULlsBNSrIH6tk5un9ayXAXIdw== dependencies: - "@commitlint/types" "^18.1.0" + "@commitlint/types" "^18.4.0" lodash.camelcase "^4.3.0" lodash.kebabcase "^4.1.1" lodash.snakecase "^4.1.1" lodash.startcase "^4.4.0" lodash.upperfirst "^4.3.1" -"@commitlint/execute-rule@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-18.1.0.tgz#1dcacf8da1981dd2e6da76988fdac9f48cdccd46" - integrity sha512-w3Vt4K+O7+nSr9/gFSEfZ1exKUOPSlJaRpnk7Y+XowEhvwT7AIk1HNANH+gETf0zGZ020+hfiMW/Ome+SNCUsg== +"@commitlint/execute-rule@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-18.4.0.tgz#a19bdac0195738e264e7dc2028db673a62087b9e" + integrity sha512-g013SWki6ZWhURBLOSXTaVQGWHdA0QlPJGiW4a+YpThezmJOemvc4LiKVpn13AjSKQ40QnmBqpBrxujOaSo+3A== -"@commitlint/format@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-18.1.0.tgz#fe0d03b47cf2eda98a5bd9819d595935f53576de" - integrity sha512-So/w217tGWMZZb1yXcUFNF2qFLyYtSVqbnGoMbX8a+JKcG4oB11Gc1adS0ssUOMivtiNpaLtkSHFynyiwtJtiQ== +"@commitlint/format@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-18.4.0.tgz#4f76466a7cafef5a5c9e7ad2c609b81a6b77cd09" + integrity sha512-MiAe4D5/ahty38CzULdQbpRa3ReKZtx0kyigOWcntq+N5uqez+Ac4/MO7H+3j1kC4G7nfJVfBu6TqcXeyNvhCQ== dependencies: - "@commitlint/types" "^18.1.0" + "@commitlint/types" "^18.4.0" chalk "^4.1.0" -"@commitlint/is-ignored@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-18.1.0.tgz#f43501fcf853a35d5d1062c63694b2fbb88a72d6" - integrity sha512-fa1fY93J/Nx2GH6r6WOLdBOiL7x9Uc1N7wcpmaJ1C5Qs6P+rPSUTkofe2IOhSJIJoboHfAH6W0ru4xtK689t0Q== +"@commitlint/is-ignored@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-18.4.0.tgz#a8cb3cbc49dc9460ada9ba0694f54ef12dafe712" + integrity sha512-vyBKBj3Q4N3Xe4ZQcJXW9ef6gVrDL9Fl2HXnnC3F0Qt/F6E4runhJkEuUh5DB3WCXTJUHIJkByKPqrnz4RNrZw== dependencies: - "@commitlint/types" "^18.1.0" + "@commitlint/types" "^18.4.0" semver "7.5.4" -"@commitlint/lint@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-18.1.0.tgz#fb4a93340224e44fff4b5e7fc703d1dac390a32e" - integrity sha512-LGB3eI5UYu5LLayibNrRM4bSbowr1z9uyqvp0c7+0KaSJi+xHxy/QEhb6fy4bMAtbXEvygY0sUu9HxSWg41rVQ== - dependencies: - "@commitlint/is-ignored" "^18.1.0" - "@commitlint/parse" "^18.1.0" - "@commitlint/rules" "^18.1.0" - "@commitlint/types" "^18.1.0" - -"@commitlint/load@^18.2.0": - version "18.2.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-18.2.0.tgz#ca2428c306d0b7f5ae9bac91991efaa359ba0ad6" - integrity sha512-xjX3d3CRlOALwImhOsmLYZh14/+gW/KxsY7+bPKrzmGuFailf9K7ckhB071oYZVJdACnpY4hDYiosFyOC+MpAA== - dependencies: - "@commitlint/config-validator" "^18.1.0" - "@commitlint/execute-rule" "^18.1.0" - "@commitlint/resolve-extends" "^18.1.0" - "@commitlint/types" "^18.1.0" +"@commitlint/lint@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-18.4.0.tgz#bd865bbb25d3d44b4bacccc946d60b157693efdd" + integrity sha512-Wkkf1DPVeLdHYGqtzMBfWoMbUtCojvlzDR89OKVic1rid41iZbb0FzTcwgMYs/1TNWNxoIq9PVVwY7ovLX1aJQ== + dependencies: + "@commitlint/is-ignored" "^18.4.0" + "@commitlint/parse" "^18.4.0" + "@commitlint/rules" "^18.4.0" + "@commitlint/types" "^18.4.0" + +"@commitlint/load@^18.4.1": + version "18.4.1" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-18.4.1.tgz#41097fe3b0eed33e61fab6ab6015e9c4bd17de1a" + integrity sha512-o/plBiPJQgbSq/4ipDpsq4HCmURjBAEjr1EO/p2falr3VhwV0WGXTvb8NlihgI8xtSyO6lHvtycrE535GMLQbA== + dependencies: + "@commitlint/config-validator" "^18.4.0" + "@commitlint/execute-rule" "^18.4.0" + "@commitlint/resolve-extends" "^18.4.0" + "@commitlint/types" "^18.4.0" "@types/node" "^18.11.9" chalk "^4.1.0" - cosmiconfig "^8.0.0" + cosmiconfig "^8.3.6" cosmiconfig-typescript-loader "^5.0.0" lodash.isplainobject "^4.0.6" lodash.merge "^4.6.2" lodash.uniq "^4.5.0" resolve-from "^5.0.0" -"@commitlint/message@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-18.1.0.tgz#841f5b3a72922407ca3e3a1668568c2cf22e2cd0" - integrity sha512-8dT/jJg73wf3o2Mut/fqEDTpBYSIEVtX5PWyuY/0uviEYeheZAczFo/VMIkeGzhJJn1IrcvAwWsvJ1lVGY2I/w== +"@commitlint/message@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-18.4.0.tgz#501e020c92d461f56f73d8359a79961b44eeb61c" + integrity sha512-3kg6NQO6pJ+VdBTWi51KInT8ngkxPJaW+iI7URtUALjKcO9K4XY3gf80ZPmS1hDessrjb7qCr1lau8eWMINAQw== -"@commitlint/parse@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-18.1.0.tgz#d5b019f47f090b0f82931a5ea1d5eeb0fc2a140e" - integrity sha512-23yv8uBweXWYn8bXk4PjHIsmVA+RkbqPh2h7irupBo2LthVlzMRc4LM6UStasScJ4OlXYYaWOmuP7jcExUF50Q== +"@commitlint/parse@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-18.4.0.tgz#40d45efd248dd0f540419f3fdb19f1165b46484f" + integrity sha512-SxTCSUZH8CJNYWOlFg18YUQ2RLz8ubXKbpHUIiSNwCbiQx7UDCydp1JnhoB4sOYOxgV8d3nuDwYluRU5KnEY4A== dependencies: - "@commitlint/types" "^18.1.0" + "@commitlint/types" "^18.4.0" conventional-changelog-angular "^6.0.0" conventional-commits-parser "^5.0.0" -"@commitlint/read@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-18.1.0.tgz#646dc66b0784f864f663b5ad82fabf8789fb41d8" - integrity sha512-rzfzoKUwxmvYO81tI5o1371Nwt3vhcQR36oTNfupPdU1jgSL3nzBIS3B93LcZh3IYKbCIMyMPN5WZ10BXdeoUg== +"@commitlint/read@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-18.4.0.tgz#8d3bd35041f56510a64ce351e79cc568d36a1c41" + integrity sha512-IpnABCbDeOw5npZ09SZZGLfd3T7cFtsxUYm6wT3aGmIB2fXKE3fMeuj3jxXjMibiGIyA3Z5voCMuOcKWpkNySA== dependencies: - "@commitlint/top-level" "^18.1.0" - "@commitlint/types" "^18.1.0" + "@commitlint/top-level" "^18.4.0" + "@commitlint/types" "^18.4.0" fs-extra "^11.0.0" git-raw-commits "^2.0.11" minimist "^1.2.6" -"@commitlint/resolve-extends@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-18.1.0.tgz#f134b679c3dfdd4006d2d6c9ace36237b7b0ffed" - integrity sha512-3mZpzOEJkELt7BbaZp6+bofJyxViyObebagFn0A7IHaLARhPkWTivXdjvZHS12nAORftv88Yhbh8eCPKfSvB7g== +"@commitlint/resolve-extends@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-18.4.0.tgz#69b04efb5253564c773a18241305ddb31b04d8af" + integrity sha512-qhgU6ach+S6sJMD9NjCYiEycOObGhxzWQLQzqlScJCv9zkPs15Bg0ffLXTQ3z7ipXv46XEKYMnSJzjLRw2Tlkg== dependencies: - "@commitlint/config-validator" "^18.1.0" - "@commitlint/types" "^18.1.0" + "@commitlint/config-validator" "^18.4.0" + "@commitlint/types" "^18.4.0" import-fresh "^3.0.0" lodash.mergewith "^4.6.2" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-18.1.0.tgz#772fe47c5ff78482881f5238b17f129027f06cdb" - integrity sha512-VJNQ674CRv4znI0DbsjZLVnn647J+BTxHGcrDIsYv7c99gW7TUGeIe5kL80G7l8+5+N0se8v9yn+Prr8xEy6Yw== +"@commitlint/rules@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-18.4.0.tgz#a156e357893c25b09d3a7ec5ee1a9f2c3168df4a" + integrity sha512-T3ChRxQZ6g0iNCpVLc6KeQId0/86TnyQA8PFkng+dWElO2DAA5km/yirgKZV1Xlc+gF7Rf6d+a0ottxdKpOY+w== dependencies: - "@commitlint/ensure" "^18.1.0" - "@commitlint/message" "^18.1.0" - "@commitlint/to-lines" "^18.1.0" - "@commitlint/types" "^18.1.0" + "@commitlint/ensure" "^18.4.0" + "@commitlint/message" "^18.4.0" + "@commitlint/to-lines" "^18.4.0" + "@commitlint/types" "^18.4.0" execa "^5.0.0" -"@commitlint/to-lines@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-18.1.0.tgz#6dc3784cd49843e05bc5939696aaa0cd2f4b58a1" - integrity sha512-aHIoSDjG0ckxPLYDpODUeSLbEKmF6Jrs1B5JIssbbE9eemBtXtjm9yzdiAx9ZXcwoHlhbTp2fbndDb3YjlvJag== +"@commitlint/to-lines@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-18.4.0.tgz#006c2be09a5ce322024bc3025d1fbb4478ea4ec5" + integrity sha512-bZXuCtfBPjNgtEnG3gwJrveIgfKK2UdhIhFvKpMTrQl/gAwoto/3mzmE7qGAHwmuP4eZ2U8X7iwMnqIlWmv2Tw== -"@commitlint/top-level@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-18.1.0.tgz#ddbfa15baecac424f3d64bf0a29eed9ac4e48eb1" - integrity sha512-1/USHlolIxJlsfLKecSXH+6PDojIvnzaJGPYwF7MtnTuuXCNQ4izkeqDsRuNMe9nU2VIKpK9OT8Q412kGNmgGw== +"@commitlint/top-level@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-18.4.0.tgz#b5210c35cf2942da9786d8fcab80bcddf2a952de" + integrity sha512-TfulcA8UHF7MZ6tm4Ci3aqZgMBZa1OoCg4prccWHvwG/hsHujZ7+0FKbeKqDbcSli/YWm4NJwEjl4uh5itIJeA== dependencies: find-up "^5.0.0" -"@commitlint/types@^18.1.0": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-18.1.0.tgz#7d0d0227ee28b5bacbafa648601ee51e8604f03e" - integrity sha512-65vGxZmbs+2OVwEItxhp3Ul7X2m2LyLfifYI/NdPwRqblmuES2w2aIRhIjb7cwUIBHHSTT8WXj4ixVHQibmvLQ== +"@commitlint/types@^18.4.0": + version "18.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-18.4.0.tgz#482393d587a86fdf0d98ed17d2efd598d5021049" + integrity sha512-MKeaFxt0I9fhqUb2E+YIzX/gZtmkuodJET/XKiZIMvXUff8Ee4Ih86eLg+yAm2jf1pwGBmU02uNOp0y094w2Uw== dependencies: chalk "^4.1.0" @@ -1033,9 +1033,9 @@ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/babel__core@^7.1.14": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.3.tgz#d5625a50b6f18244425a1359a858c73d70340778" - integrity sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA== + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.4.tgz#26a87347e6c6f753b3668398e34496d6d9ac6ac0" + integrity sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -1044,38 +1044,38 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.6" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.6.tgz#676f89f67dc8ddaae923f70ebc5f1fa800c031a8" - integrity sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.3" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.3.tgz#db9ac539a2fe05cfe9e168b24f360701bde41f5f" - integrity sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.3.tgz#a971aa47441b28ef17884ff945d0551265a2d058" - integrity sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw== + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" "@types/bn.js@*": - version "5.1.4" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.4.tgz#0853d5f92dfdbc8fe1ae60700411a60845fa7d27" - integrity sha512-ZtBd9L8hVtoBpPMSWfbwjC4dhQtJdlPS+e1A0Rydb7vg7bDcUwiRklPx24sMYtXcmAMST/k0Wze7JLbNU/5SkA== + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== dependencies: "@types/node" "*" "@types/elliptic@^6.4.16": - version "6.4.16" - resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.16.tgz#3a28a7d14e26f9e786d71f2a895ac493e7c8a3be" - integrity sha512-MSN6m9BR51W1/umzcsX0K9dAmJ59ECKxOjZ3XsjvsZAt+q0mTmKlzEdwtU+u4i+Om231d8TuY3xK6FAGIs5MbA== + version "6.4.17" + resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.17.tgz#6c9ff6ba137670c8bc3c65da2e23995b22ec3607" + integrity sha512-+NOzUIq9aenYuaIFS+8Gmv72r72zb12jttZsAsu4zEJ3QmQfGo958Kh0jQ+GJp5+uflE14KI4BcZqcsGCxTNFA== dependencies: "@types/bn.js" "*" @@ -1088,35 +1088,35 @@ "@types/node" "*" "@types/graceful-fs@^4.1.3": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.8.tgz#417e461e4dc79d957dc3107f45fe4973b09c2915" - integrity sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#fdfdd69fa16d530047d9963635bd77c71a08c068" - integrity sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz#394798d5f727402eb5ec99eb9618ffcd2b7645a1" - integrity sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz#0313e2608e6d6955d195f55361ddeebd4b74c6e7" - integrity sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/json-schema@^7.0.12": - version "7.0.14" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" - integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -1124,21 +1124,21 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/jsonfile@*": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@types/jsonfile/-/jsonfile-6.1.3.tgz#683d447b413119393e913ecd414a2bc0e5d0f4b9" - integrity sha512-/yqTk2SZ1wIezK0hiRZD7RuSf4B3whFxFamB1kGStv+8zlWScTMcHanzfc0XKWs5vA1TkHeckBlOyM8jxU8nHA== + version "6.1.4" + resolved "https://registry.yarnpkg.com/@types/jsonfile/-/jsonfile-6.1.4.tgz#614afec1a1164e7d670b4a7ad64df3e7beb7b702" + integrity sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ== dependencies: "@types/node" "*" "@types/minimist@^1.2.0": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.4.tgz#81f886786411c45bba3f33e781ab48bd56bfca2e" - integrity sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*": - version "20.8.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e" - integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w== + version "20.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" + integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== dependencies: undici-types "~5.26.4" @@ -1153,26 +1153,26 @@ integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^18.11.9": - version "18.18.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.8.tgz#2b285361f2357c8c8578ec86b5d097c7f464cfd6" - integrity sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ== + version "18.18.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.9.tgz#5527ea1832db3bba8eb8023ce8497b7d3f299592" + integrity sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ== dependencies: undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz#291c243e4b94dbfbc0c0ee26b7666f1d5c030e2c" - integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/semver@^7.5.0": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" - integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== + version "7.5.5" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" + integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== "@types/ssh2-streams@*": - version "0.1.11" - resolved "https://registry.yarnpkg.com/@types/ssh2-streams/-/ssh2-streams-0.1.11.tgz#b95834f8b7b8e7f7c53edbdf1b6861a336e815ea" - integrity sha512-UVM27UaKdWpkO96VfA4A5v0fViRoiO5VzAMiYi+z66tAobfWBA8VbEKCGZpmZRkZpUIr8XnnoHpzsNPFWaEP8w== + version "0.1.12" + resolved "https://registry.yarnpkg.com/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz#e68795ba2bf01c76b93f9c9809e1f42f0eaaec5f" + integrity sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg== dependencies: "@types/node" "*" @@ -1185,19 +1185,19 @@ "@types/ssh2-streams" "*" "@types/stack-utils@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.2.tgz#01284dde9ef4e6d8cef6422798d9a3ad18a66f8b" - integrity sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/yargs-parser@*": - version "21.0.2" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.2.tgz#7bd04c5da378496ef1695a1008bf8f71847a8b8b" - integrity sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.29" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.29.tgz#06aabc72497b798c643c812a8b561537fea760cf" - integrity sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA== + version "17.0.31" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.31.tgz#8fd0089803fd55d8a285895a18b88cb71a99683c" + integrity sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg== dependencies: "@types/yargs-parser" "*" @@ -1582,9 +1582,9 @@ async-lock@^1.4.0: integrity sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ== async@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -1605,9 +1605,9 @@ axios@^0.27.2: form-data "^4.0.0" axios@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" - integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== + version "1.6.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.1.tgz#76550d644bf0a2d469a01f9244db6753208397d7" + integrity sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -1838,6 +1838,11 @@ buildcheck@~0.0.6: resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + builtins@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" @@ -1913,9 +1918,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001541: - version "1.0.30001559" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz#95a982440d3d314c471db68d02664fb7536c5a30" - integrity sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA== + version "1.0.30001561" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da" + integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw== chainsaw@~0.1.0: version "0.1.0" @@ -2129,7 +2134,7 @@ cosmiconfig-typescript-loader@^5.0.0: dependencies: jiti "^1.19.1" -cosmiconfig@^8.0.0: +cosmiconfig@^8.3.6: version "8.3.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== @@ -2369,9 +2374,9 @@ duplexer2@~0.1.4: readable-stream "^2.0.2" electron-to-chromium@^1.4.535: - version "1.4.574" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.574.tgz#6de04d7c6e244e5ffcae76d2e2a33b02cab66781" - integrity sha512-bg1m8L0n02xRzx4LsTTMbBPiUd9yIR+74iPtS/Ao65CuXvhVZHP0ym1kSdDG3yHFDXqHQQBKujlN1AQ8qZnyFg== + version "1.4.581" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz#23b684c67bf56d4284e95598c05a5d266653b6d8" + integrity sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw== elliptic@6.5.4, elliptic@^6.5.4: version "6.5.4" @@ -2599,15 +2604,16 @@ eslint-plugin-import@^2.25.2: tsconfig-paths "^3.14.2" eslint-plugin-n@^16.3.0: - version "16.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.3.0.tgz#8ad04e0c52b311d58bd9b6b59532e26a19d3911b" - integrity sha512-/XZLH5CUXGK3laz3xYFNza8ZxLCq8ZNW6MsVw5z3d5hc2AwZzi0fPiySFZHQTdVDOHGs2cGv91aqzWmgBdq2gQ== + version "16.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz#6cd377d1349fed10854b6535392e91fb4123193b" + integrity sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" builtins "^5.0.1" eslint-plugin-es-x "^7.1.0" get-tsconfig "^4.7.0" ignore "^5.2.4" + is-builtin-module "^3.2.1" is-core-module "^2.12.1" minimatch "^3.1.2" resolve "^1.22.2" @@ -2809,9 +2815,9 @@ fast-fifo@^1.1.0, fast-fifo@^1.2.0: integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2891,9 +2897,9 @@ find-up@^5.0.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" - integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" keyv "^4.5.3" @@ -3373,6 +3379,13 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -3556,9 +3569,9 @@ isexe@^2.0.0: integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-hook@^3.0.0: version "3.0.0" @@ -4015,7 +4028,7 @@ jiti@^1.19.1: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== -joi@^17.7.0: +joi@^17.11.0: version "17.11.0" resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== @@ -4455,7 +4468,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.7: +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -4857,9 +4870,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" + integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== pretty-format@^29.7.0: version "29.7.0" @@ -5150,7 +5163,7 @@ runme@^3.0.2: unzipper "^0.10.14" wait-on "^7.0.1" -rxjs@^7.8.0: +rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== @@ -5413,9 +5426,9 @@ stack-utils@^2.0.3: escape-string-regexp "^2.0.0" streamx@^2.15.0: - version "2.15.2" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.2.tgz#680eacebdc9c43ede7362c2e6695b34dd413c741" - integrity sha512-b62pAV/aeMjUoRN2C/9F0n+G8AfcJjNC0zw/ZmOHeFsIe4m4GzjVW9m6VHXVjk536NbdU9JRwKMJRfkc+zUFTg== + version "2.15.4" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.4.tgz#497b8102d076ae12b43c456e0bb16940d1ba0999" + integrity sha512-uSXKl88bibiUCQ1eMpItRljCzDENcDx18rsfDmV79r0e/ThfrAwxG4Y2FarQZ2G4/21xcOKmFFd1Hue+ZIDwHw== dependencies: fast-fifo "^1.1.0" queue-tick "^1.0.1" @@ -6094,15 +6107,15 @@ vscode-textmate@^8.0.0: integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== wait-on@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9" - integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog== + version "7.1.0" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.1.0.tgz#3184ccfff7eb8a4d62ef3dfa6a4ff3675617ff60" + integrity sha512-U7TF/OYYzAg+OoiT/B8opvN48UHt0QYMi4aD3PjRFpybQ+o6czQF8Ig3SKCCMJdxpBrCalIJ4O00FBof27Fu9Q== dependencies: axios "^0.27.2" - joi "^17.7.0" + joi "^17.11.0" lodash "^4.17.21" - minimist "^1.2.7" - rxjs "^7.8.0" + minimist "^1.2.8" + rxjs "^7.8.1" walker@^1.0.8: version "1.0.8" @@ -6254,9 +6267,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.1.1, yaml@^2.2.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9" - integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ== + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== yargs-parser@^18.1.2: version "18.1.3"