From fa5bda10a2325f72ccd558c02431f65f0dd88d35 Mon Sep 17 00:00:00 2001 From: chmanie Date: Wed, 2 Aug 2023 21:28:51 +0200 Subject: [PATCH] WIP: ethers-6 migration --- .eslintrc | 5 +- package.json | 5 +- packages/contractor/package.json | 2 +- packages/contractor/src/contractor.ts | 2 +- packages/core/.eslintrc | 3 +- packages/core/package.json | 11 +- packages/core/src/contracts/MotionTarget.ts | 161 ++---- packages/core/src/contracts/Versioned.ts | 129 ++--- packages/core/src/contracts/common.ts | 127 ++++- .../factories/MotionTarget__factory.ts | 9 +- .../contracts/factories/Versioned__factory.ts | 12 +- packages/core/src/helpers/motions.ts | 29 +- packages/core/src/helpers/network.ts | 64 ++- packages/core/src/helpers/permissions.ts | 40 +- packages/core/src/helpers/reputation.ts | 41 +- packages/core/src/helpers/types.ts | 29 +- packages/core/src/types.ts | 3 +- packages/event-metadata/package.json | 2 +- packages/events/package.json | 10 +- packages/events/src/index.ts | 20 - packages/sdk/.eslintrc | 4 +- packages/sdk/package.json | 12 +- packages/sdk/src/ColonyNetwork/Colony.ts | 178 +++--- packages/sdk/src/TxCreator/ColonyTxCreator.ts | 46 +- .../sdk/src/TxCreator/EIP2612TxCreator.ts | 32 +- packages/sdk/src/TxCreator/MetaTxCreator.ts | 44 +- packages/sdk/src/TxCreator/TxCreator.ts | 86 ++- packages/sdk/src/TxCreator/index.ts | 1 - packages/sdk/src/index.ts | 9 +- packages/sdk/src/types.ts | 22 +- packages/sdk/src/utils.ts | 56 +- packages/sdk/tsconfig.json | 1 + packages/tokens/package.json | 12 +- packages/tokens/src/clients/TokenClient.ts | 9 +- packages/tokens/src/index.ts | 16 +- pnpm-lock.yaml | 511 +++++++++++------- 36 files changed, 943 insertions(+), 800 deletions(-) diff --git a/.eslintrc b/.eslintrc index 4ee00c4fb..3fcab507b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -17,11 +17,10 @@ "no-redeclare": "off", "no-shadow": "off", "no-unused-vars": "off", + "no-undef": "off", "no-use-before-define": "off", "@typescript-eslint/no-unused-vars": "error", - "@typescript-eslint/no-shadow": [ - "error" - ], + "@typescript-eslint/no-shadow": "error", "import/prefer-default-export": "off", "import/no-unresolved": "off", "import/extensions": [ diff --git a/package.json b/package.json index 9cf623c6d..75777e14f 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "homepage": "https://docs.colony.io/develop", "devDependencies": { + "@changesets/cli": "^2.26.1", "@colony/eslint-config-colony": "^9.2.0", "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", @@ -43,7 +44,5 @@ "rimraf": "^5.0.0", "typescript": "^5.0.4" }, - "dependencies": { - "@changesets/cli": "^2.26.1" - } + "dependencies": {} } diff --git a/packages/contractor/package.json b/packages/contractor/package.json index 100a5f90b..d1c605196 100644 --- a/packages/contractor/package.json +++ b/packages/contractor/package.json @@ -32,7 +32,7 @@ "dependencies": { "@colony/abis": "^1.0.1", "@typechain/ethers-v5": "^11.1.0", - "@typechain/ethers-v6": "^0.4.2", + "@typechain/ethers-v6": "link:../../../TypeChain/packages/target-ethers-v6", "@types/mkdirp": "^1.0.2", "@types/yargs": "^17.0.24", "mkdirp": "^1.0.4", diff --git a/packages/contractor/src/contractor.ts b/packages/contractor/src/contractor.ts index 6901a905d..2099870c6 100644 --- a/packages/contractor/src/contractor.ts +++ b/packages/contractor/src/contractor.ts @@ -67,7 +67,7 @@ const EVENTS_CONTRACTS = [ const CWD = process.cwd(); const TYPECHAIN_CONFIG_FLAGS = { - alwaysGenerateOverloads: true, + alwaysGenerateOverloads: false, discriminateTypes: false, node16Modules: true, environment: undefined, diff --git a/packages/core/.eslintrc b/packages/core/.eslintrc index 172b2b0cb..476139ef6 100644 --- a/packages/core/.eslintrc +++ b/packages/core/.eslintrc @@ -9,7 +9,8 @@ ".+__factory" ] } - ] + ], + "no-bitwise": "off" }, "overrides": [ { diff --git a/packages/core/package.json b/packages/core/package.json index c501bf8b7..cefcf6a02 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -30,9 +30,9 @@ }, "scripts": { "build": "npm run clean && npm run compile-cjs && npm run compile-esm && npm run compile-types && npm run create-pkg-json", - "build-contracts": "contractor core -o ./src/contracts", + "build-contracts": "contractor core -p ethers-v6 -o ./src/contracts", "clean": "rimraf ./dist", - "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2015 --outDir dist/cjs", + "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2020 --outDir dist/cjs", "compile-esm": "tsc -p tsconfig.build.json --module esnext --target es2022 --outDir dist/esm", "compile-types": "tsc -p tsconfig.build.json --target esnext --declaration --emitDeclarationOnly --outDir dist/types", "create-pkg-json": "../../scripts/create-pkg-json.sh", @@ -52,13 +52,10 @@ "homepage": "https://docs.colony.io/develop", "devDependencies": { "@colony/contractor": "1.1.0-next.2", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.2" + "ethers": "^6.6.7" }, "peerDependencies": { - "ethers": "^5.1.3" + "ethers": "^6" }, "dependencies": { "cross-fetch": "^3.1.5" diff --git a/packages/core/src/contracts/MotionTarget.ts b/packages/core/src/contracts/MotionTarget.ts index 065aa89b8..b51b444e0 100644 --- a/packages/core/src/contracts/MotionTarget.ts +++ b/packages/core/src/contracts/MotionTarget.ts @@ -3,135 +3,88 @@ /* eslint-disable */ import type { BaseContract, - BigNumber, BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, + FunctionFragment, + Result, + Interface, + ContractRunner, + ContractMethod, + Listener, } from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, + TypedContractMethod, } from "./common.js"; -export interface MotionTargetInterface extends utils.Interface { - functions: { - "getCapabilityRoles(bytes4)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "getCapabilityRoles" | "getCapabilityRoles(bytes4)" - ): FunctionFragment; +export interface MotionTargetInterface extends Interface { + getFunction(nameOrSignature: "getCapabilityRoles"): FunctionFragment; encodeFunctionData( functionFragment: "getCapabilityRoles", values: [BytesLike] ): string; - encodeFunctionData( - functionFragment: "getCapabilityRoles(bytes4)", - values: [BytesLike] - ): string; decodeFunctionResult( functionFragment: "getCapabilityRoles", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "getCapabilityRoles(bytes4)", - data: BytesLike - ): Result; - - events: {}; } export interface MotionTarget extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): MotionTarget; + waitForDeployment(): Promise; interface: MotionTargetInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - getCapabilityRoles( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise<[string] & { roles: string }>; - - "getCapabilityRoles(bytes4)"( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise<[string] & { roles: string }>; - }; - - getCapabilityRoles( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getCapabilityRoles(bytes4)"( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - getCapabilityRoles( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + getCapabilityRoles: TypedContractMethod<[_sig: BytesLike], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; - "getCapabilityRoles(bytes4)"( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise; - }; + getFunction( + nameOrSignature: "getCapabilityRoles" + ): TypedContractMethod<[_sig: BytesLike], [string], "view">; filters: {}; - - estimateGas: { - getCapabilityRoles( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getCapabilityRoles(bytes4)"( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - getCapabilityRoles( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getCapabilityRoles(bytes4)"( - _sig: BytesLike, - overrides?: CallOverrides - ): Promise; - }; } diff --git a/packages/core/src/contracts/Versioned.ts b/packages/core/src/contracts/Versioned.ts index 4737ec5bc..523deb0f1 100644 --- a/packages/core/src/contracts/Versioned.ts +++ b/packages/core/src/contracts/Versioned.ts @@ -3,97 +3,82 @@ /* eslint-disable */ import type { BaseContract, - BigNumber, BytesLike, - CallOverrides, - PopulatedTransaction, - Signer, - utils, + FunctionFragment, + Result, + Interface, + ContractRunner, + ContractMethod, + Listener, } from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; import type { - TypedEventFilter, - TypedEvent, + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, TypedListener, - OnEvent, + TypedContractMethod, } from "./common.js"; -export interface VersionedInterface extends utils.Interface { - functions: { - "version()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: "version" | "version()" - ): FunctionFragment; +export interface VersionedInterface extends Interface { + getFunction(nameOrSignature: "version"): FunctionFragment; encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData(functionFragment: "version()", values?: undefined): string; decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version()", data: BytesLike): Result; - - events: {}; } export interface Versioned extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; + connect(runner?: ContractRunner | null): Versioned; + waitForDeployment(): Promise; interface: VersionedInterface; - queryFilter( - event: TypedEventFilter, + queryFilter( + event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - version( - overrides?: CallOverrides - ): Promise<[BigNumber] & { _version: BigNumber }>; - - "version()"( - overrides?: CallOverrides - ): Promise<[BigNumber] & { _version: BigNumber }>; - }; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - callStatic: { - version(overrides?: CallOverrides): Promise; + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + version: TypedContractMethod<[], [bigint], "view">; + + getFunction( + key: string | FunctionFragment + ): T; - "version()"(overrides?: CallOverrides): Promise; - }; + getFunction( + nameOrSignature: "version" + ): TypedContractMethod<[], [bigint], "view">; filters: {}; - - estimateGas: { - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - }; } diff --git a/packages/core/src/contracts/common.ts b/packages/core/src/contracts/common.ts index 2fc40c7fb..192c895b7 100644 --- a/packages/core/src/contracts/common.ts +++ b/packages/core/src/contracts/common.ts @@ -1,33 +1,66 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -import type { Listener } from "@ethersproject/providers"; -import type { Event, EventFilter } from "ethers"; - -export interface TypedEvent< - TArgsArray extends Array = any, - TArgsObject = any -> extends Event { - args: TArgsArray & TArgsObject; -} +import type { + FunctionFragment, + Typed, + EventFragment, + ContractTransaction, + ContractTransactionResponse, + DeferredTopicFilter, + EventLog, + TransactionRequest, + LogDescription, +} from "ethers"; -export interface TypedEventFilter<_TEvent extends TypedEvent> - extends EventFilter {} +export interface TypedDeferredTopicFilter<_TCEvent extends TypedContractEvent> + extends DeferredTopicFilter {} -export interface TypedListener { - (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +export interface TypedContractEvent< + InputTuple extends Array = any, + OutputTuple extends Array = any, + OutputObject = any +> { + (...args: Partial): TypedDeferredTopicFilter< + TypedContractEvent + >; + name: string; + fragment: EventFragment; + getFragment(...args: Partial): EventFragment; } -type __TypechainArgsArray = T extends TypedEvent ? U : never; +type __TypechainAOutputTuple = T extends TypedContractEvent< + infer _U, + infer W +> + ? W + : never; +type __TypechainOutputObject = T extends TypedContractEvent< + infer _U, + infer _W, + infer V +> + ? V + : never; + +export interface TypedEventLog + extends Omit { + args: __TypechainAOutputTuple & __TypechainOutputObject; +} -export interface OnEvent { - ( - eventFilter: TypedEventFilter, - listener: TypedListener - ): TRes; - (eventName: string, listener: Listener): TRes; +export interface TypedLogDescription + extends Omit { + args: __TypechainAOutputTuple & __TypechainOutputObject; } +export type TypedListener = ( + ...listenerArg: [ + ...__TypechainAOutputTuple, + TypedEventLog, + ...undefined[] + ] +) => void; + export type MinEthersFactory = { deploy(...a: ARGS[]): Promise; }; @@ -38,7 +71,59 @@ export type GetContractTypeFromFactory = F extends MinEthersFactory< > ? C : never; - export type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; + +export type StateMutability = "nonpayable" | "payable" | "view"; + +export type BaseOverrides = Omit; +export type NonPayableOverrides = Omit< + BaseOverrides, + "value" | "blockTag" | "enableCcipRead" +>; +export type PayableOverrides = Omit< + BaseOverrides, + "blockTag" | "enableCcipRead" +>; +export type ViewOverrides = Omit; +export type Overrides = S extends "nonpayable" + ? NonPayableOverrides + : S extends "payable" + ? PayableOverrides + : ViewOverrides; + +export type PostfixOverrides, S extends StateMutability> = + | A + | [...A, Overrides]; +export type ContractMethodArgs< + A extends Array, + S extends StateMutability +> = PostfixOverrides<{ [I in keyof A]-?: A[I] | Typed }, S>; + +export type DefaultReturnType = R extends Array ? R[0] : R; + +// export interface ContractMethod = Array, R = any, D extends R | ContractTransactionResponse = R | ContractTransactionResponse> { +export interface TypedContractMethod< + A extends Array = Array, + R = any, + S extends StateMutability = "payable" +> { + (...args: ContractMethodArgs): S extends "view" + ? Promise> + : Promise; + + name: string; + + fragment: FunctionFragment; + + getFragment(...args: ContractMethodArgs): FunctionFragment; + + populateTransaction( + ...args: ContractMethodArgs + ): Promise; + staticCall(...args: ContractMethodArgs): Promise>; + send(...args: ContractMethodArgs): Promise; + estimateGas(...args: ContractMethodArgs): Promise; + staticCallResult(...args: ContractMethodArgs): Promise; +} diff --git a/packages/core/src/contracts/factories/MotionTarget__factory.ts b/packages/core/src/contracts/factories/MotionTarget__factory.ts index d8e999485..987e6b3af 100644 --- a/packages/core/src/contracts/factories/MotionTarget__factory.ts +++ b/packages/core/src/contracts/factories/MotionTarget__factory.ts @@ -2,8 +2,7 @@ /* tslint:disable */ /* eslint-disable */ -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; +import { Contract, Interface, type ContractRunner } from "ethers"; import type { MotionTarget, MotionTargetInterface } from "../MotionTarget.js"; const _abi = [ @@ -31,12 +30,12 @@ const _abi = [ export class MotionTarget__factory { static readonly abi = _abi; static createInterface(): MotionTargetInterface { - return new utils.Interface(_abi) as MotionTargetInterface; + return new Interface(_abi) as MotionTargetInterface; } static connect( address: string, - signerOrProvider: Signer | Provider + runner?: ContractRunner | null ): MotionTarget { - return new Contract(address, _abi, signerOrProvider) as MotionTarget; + return new Contract(address, _abi, runner) as unknown as MotionTarget; } } diff --git a/packages/core/src/contracts/factories/Versioned__factory.ts b/packages/core/src/contracts/factories/Versioned__factory.ts index a7111ae52..8917a567d 100644 --- a/packages/core/src/contracts/factories/Versioned__factory.ts +++ b/packages/core/src/contracts/factories/Versioned__factory.ts @@ -2,8 +2,7 @@ /* tslint:disable */ /* eslint-disable */ -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; +import { Contract, Interface, type ContractRunner } from "ethers"; import type { Versioned, VersionedInterface } from "../Versioned.js"; const _abi = [ @@ -25,12 +24,9 @@ const _abi = [ export class Versioned__factory { static readonly abi = _abi; static createInterface(): VersionedInterface { - return new utils.Interface(_abi) as VersionedInterface; + return new Interface(_abi) as VersionedInterface; } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Versioned { - return new Contract(address, _abi, signerOrProvider) as Versioned; + static connect(address: string, runner?: ContractRunner | null): Versioned { + return new Contract(address, _abi, runner) as unknown as Versioned; } } diff --git a/packages/core/src/helpers/motions.ts b/packages/core/src/helpers/motions.ts index ee1b61459..8ceb9a6d1 100644 --- a/packages/core/src/helpers/motions.ts +++ b/packages/core/src/helpers/motions.ts @@ -1,4 +1,11 @@ -import { BigNumber, BigNumberish, BytesLike, constants, utils } from 'ethers'; +import { + BigNumberish, + BytesLike, + MaxUint256, + toBigInt, + ZeroAddress, + zeroPadValue, +} from 'ethers'; import { ColonyRole, Id } from '../constants.js'; import { @@ -15,10 +22,6 @@ import { import { ReputationClient } from './reputation.js'; import { hex2ColonyRoles } from './network.js'; -const { MaxUint256 } = constants; - -const { AddressZero } = constants; - async function getCapabilityRolesAsArray( contract: MotionTarget, _sig: BytesLike, @@ -26,9 +29,7 @@ async function getCapabilityRolesAsArray( let rolesHexString: string; try { // This will work if the target has the getCapabilityRoles method - rolesHexString = await contract.getCapabilityRoles( - utils.hexZeroPad(_sig, 4), - ); + rolesHexString = await contract.getCapabilityRoles(zeroPadValue(_sig, 4)); return hex2ColonyRoles(rolesHexString); } catch (e) { // Otherwise we assume that the encoded method is not permissioned @@ -65,7 +66,7 @@ export async function getCreateMotionProofs( const motionTarget = MotionTargetFactory.connect( altTarget, - votingReputation.signer || votingReputation.provider, + votingReputation.runner, ); const capabilityRoles = await getCapabilityRolesAsArray(motionTarget, sig); @@ -74,7 +75,7 @@ export async function getCreateMotionProofs( capabilityRoles.includes(ColonyRole.Root) || capabilityRoles.length === 0 ) { - if (!BigNumber.from(domainId).eq(1)) { + if (!(toBigInt(domainId) === 1n)) { throw new Error( `On root or not permissioned actions, the domainId needs to be ${Id.RootDomain}`, ); @@ -92,23 +93,23 @@ export async function getCreateMotionProofs( childSkillIndex, ); // It's the same one, that's fine - if (actionSkillId.eq(skillId)) { + if (actionSkillId === skillId) { actionCid = MaxUint256; } else { // Find the relationship between the skill of the domain we want to create the motion in and the skill of the domain the action is taking place in const { children } = await network.getSkill(skillId); - const idx = children.findIndex((cid) => cid.eq(actionSkillId)); + const idx = children.findIndex((cid) => cid === actionSkillId); if (idx < 0) { throw new Error( `Could not find ${actionSkillId} as a child of ${skillId}`, ); } - actionCid = BigNumber.from(idx); + actionCid = toBigInt(idx); } } const { key, value, branchMask, siblings } = - await reputation.getReputationWithProofs(skillId, AddressZero); + await reputation.getReputationWithProofs(skillId, ZeroAddress); return { actionCid, diff --git a/packages/core/src/helpers/network.ts b/packages/core/src/helpers/network.ts index 62886dcce..09eea671d 100644 --- a/packages/core/src/helpers/network.ts +++ b/packages/core/src/helpers/network.ts @@ -1,7 +1,16 @@ -import type { Log, Provider } from '@ethersproject/abstract-provider'; -import type { Interface } from '@ethersproject/abi'; - -import { BigNumber, BigNumberish, constants, utils } from 'ethers'; +import { + type BigNumberish, + type Interface, + type Log, + type Provider, + formatEther, + keccak256, + parseEther, + toBigInt, + toUtf8Bytes, + zeroPadValue, + MaxUint256, +} from 'ethers'; import { ColonyRole, @@ -15,9 +24,6 @@ import { ContractVersion } from '../versions/index.js'; import { SignerOrProvider } from '../types.js'; import { Versioned__factory as VersionedFactory } from '../contracts/index.js'; -const { keccak256, toUtf8Bytes } = utils; -const { MaxUint256 } = constants; - /** * Check if two addresses are equal * @@ -43,7 +49,7 @@ export const addressesAreEqual = (a: string, b: string) => * console.log(toEth(oneEther)); // 1.0 * ``` */ -export const toEth = (num: BigNumberish) => utils.formatEther(num); +export const toEth = (num: BigNumberish) => formatEther(num); /** * Convert any number to wei (add 18 zeros) @@ -56,7 +62,7 @@ export const toEth = (num: BigNumberish) => utils.formatEther(num); * console.log(toWei(oneEther)); // { BigNumber: "1000000000000000000" } * ``` */ -export const toWei = (num: string) => utils.parseEther(num); +export const toWei = (num: string) => parseEther(num); /** * Short-hand method to convert a number to wei using JS tagged template strings @@ -93,7 +99,13 @@ export const colonyRoles2Hex = (roles: ColonyRole[]): string => { // eslint-disable-next-line no-bitwise .reduce((binRoles, roleNum) => binRoles | (1 << roleNum), 0) .toString(16); - return utils.hexZeroPad(`0x${hexRoles}`, 32); + return zeroPadValue(`0x${hexRoles}`, 32); +}; + +// Clear bits with indexes higher or equal to given index +const clearBits = (num: bigint, index: number) => { + const mask = (1n << BigInt(index)) - 1n; + return num & mask; }; /** @@ -109,11 +121,12 @@ export const colonyRoles2Hex = (roles: ColonyRole[]): string => { * * @returns An array of Colony roles */ +// FIXME: maybe write a test?? export const hex2ColonyRoles = (hexStr: string): ColonyRole[] => { - const rolesNum = BigNumber.from(hexStr); + const rolesNum = toBigInt(hexStr); return [...Array(ColonyRole.LAST_ROLE).keys()] .map((i) => { - if (rolesNum.shr(i).mask(1).eq(1)) { + if (clearBits(rolesNum >> BigInt(i), 1) === 1n) { return i as ColonyRole; } return null; @@ -148,20 +161,20 @@ export const getChildIndex = async ( colony: CommonColony, parentDomainId: BigNumberish, domainId: BigNumberish, -): Promise => { - if (BigNumber.from(parentDomainId).eq(BigNumber.from(domainId))) { +): Promise => { + if (toBigInt(parentDomainId) === toBigInt(domainId)) { return MaxUint256; } const { skillId: parentSkillId } = await colony.getDomain(parentDomainId); const { skillId } = await colony.getDomain(domainId); const { children } = await network.getSkill(parentSkillId); - const idx = children.findIndex((childSkillId) => childSkillId.eq(skillId)); + const idx = children.findIndex((childSkillId) => childSkillId === skillId); if (idx < 0) { throw new Error( `Could not find ${domainId} as a child of ${parentDomainId}`, ); } - return BigNumber.from(idx); + return BigInt(idx); }; /** @@ -197,7 +210,7 @@ export const getPotDomain = async ( if (colony.getDomainFromFundingPot) { return colony.getDomainFromFundingPot(potId); } - switch (associatedType as FundingPotAssociatedType) { + switch (Number(associatedType) as FundingPotAssociatedType) { case FundingPotAssociatedType.Unassigned: { // This is probably the reward pot return Id.RootDomain; @@ -231,9 +244,12 @@ export const getBlockTime = async ( blockHash: string, provider: Provider, ): Promise => { - const { timestamp } = await provider.getBlock(blockHash); + const block = await provider.getBlock(blockHash); + if (!block) { + throw new Error(`Could not find block ${blockHash}`); + } // timestamp is seconds, Date wants ms - return timestamp * 1000; + return block.timestamp * 1000; }; /** @@ -252,7 +268,7 @@ export const getContractVersion = async ( ) => { const versionedContract = VersionedFactory.connect(address, signerOrProvider); const version = await versionedContract.version(); - return version.toNumber() as ContractVersion; + return Number(version) as ContractVersion; }; /** @@ -267,12 +283,6 @@ export const getContractVersion = async ( */ export const parseLogs = (logs: Log[], iface: Interface) => { return logs - .map((log) => { - try { - return iface.parseLog(log); - } catch (e) { - return null; - } - }) + .map((log) => iface.parseLog({ topics: [...log.topics], data: log.data })) .filter(nonNullable); }; diff --git a/packages/core/src/helpers/permissions.ts b/packages/core/src/helpers/permissions.ts index 945ec6b6f..67658cc91 100644 --- a/packages/core/src/helpers/permissions.ts +++ b/packages/core/src/helpers/permissions.ts @@ -1,12 +1,16 @@ -import { BigNumber, BigNumberish, BytesLike, constants, utils } from 'ethers'; +import { + type BigNumberish, + type BytesLike, + type Signer, + dataSlice, + MaxUint256, + toBigInt, +} from 'ethers'; import { ColonyRole, Id } from '../constants.js'; import { CommonColony, CommonNetwork } from './types.js'; import { getChildIndex } from './network.js'; -const { hexDataSlice } = utils; -const { MaxUint256 } = constants; - /* * Parses a permissioned action that is supposed to be executed (e.g. in a motion) * @@ -17,9 +21,9 @@ const { MaxUint256 } = constants; * @returns Signature, domain the permissions exists in and the index on the children array of the parent domain */ export const parsePermissionedAction = (action: BytesLike) => { - const sig = hexDataSlice(action, 0, 3); - const permissionDomainId = BigNumber.from(hexDataSlice(action, 4, 35)); - const childSkillIndex = BigNumber.from(hexDataSlice(action, 36, 67)); + const sig = dataSlice(action, 0, 3); + const permissionDomainId = toBigInt(dataSlice(action, 4, 35)); + const childSkillIndex = toBigInt(dataSlice(action, 36, 67)); return { sig, permissionDomainId, childSkillIndex }; }; @@ -30,24 +34,24 @@ const getSinglePermissionProofs = async ( role: ColonyRole, customAddress?: string, /* [permissionDomainId, childSkillIndex, permissionAddress] */ -): Promise<[BigNumber, BigNumber, string]> => { - const permissionAddress = - customAddress || (await colony.signer?.getAddress()); - if (!permissionAddress) { +): Promise<[bigint, bigint, string]> => { + if (!customAddress || !colony.runner || !('getAddress' in colony.runner)) { throw new Error( `Could not determine address for permission proofs. Please use a signer or provide a custom address`, ); } + const permissionAddress = + customAddress || (await (colony.runner as Signer).getAddress()); const hasPermissionInDomain = await colony.hasUserRole( permissionAddress, domainId, role, ); if (hasPermissionInDomain) { - return [BigNumber.from(domainId), MaxUint256, permissionAddress]; + return [toBigInt(domainId), MaxUint256, permissionAddress]; } // TODO: once we allow nested domains on the network level, this needs to traverse down the skill/domain tree. Use binary search - const foundDomainId = BigNumber.from(Id.RootDomain); + const foundDomainId = BigInt(Id.RootDomain); const hasPermissionInAParentDomain = await colony.hasUserRole( permissionAddress, foundDomainId, @@ -59,7 +63,7 @@ const getSinglePermissionProofs = async ( ); } const idx = await getChildIndex(network, colony, foundDomainId, domainId); - if (idx.lt(0)) { + if (idx < 0) { throw new Error( `${permissionAddress} does not have the permission ${role} in any parent domain`, ); @@ -73,7 +77,7 @@ const getMultiPermissionProofs = async ( domainId: BigNumberish, roles: ColonyRole[], customAddress?: string, -): Promise<[BigNumber, BigNumber, string]> => { +): Promise<[bigint, bigint, string]> => { const proofs = await Promise.all( roles.map((role) => getSinglePermissionProofs(network, colony, domainId, role, customAddress), @@ -84,8 +88,8 @@ const getMultiPermissionProofs = async ( for (let idx = 0; idx < proofs.length; idx += 1) { const [permissionDomainId, childSkillIndex, address] = proofs[idx]; if ( - !permissionDomainId.eq(proofs[0][0]) || - !childSkillIndex.eq(proofs[0][1]) + !(permissionDomainId === proofs[0][0]) || + !(childSkillIndex === proofs[0][1]) ) { throw new Error( `${address} has to have all required roles (${roles}) in the same domain`, @@ -130,7 +134,7 @@ export const getPermissionProofs = async ( domainId: BigNumberish, roles: ColonyRole | ColonyRole[], customAddress?: string, -): Promise<[BigNumber, BigNumber, string]> => { +): Promise<[bigint, bigint, string]> => { if (Array.isArray(roles)) { if (roles.length === 1) { return getPermissionProofs( diff --git a/packages/core/src/helpers/reputation.ts b/packages/core/src/helpers/reputation.ts index 5f58ed1c9..6b99b0c84 100644 --- a/packages/core/src/helpers/reputation.ts +++ b/packages/core/src/helpers/reputation.ts @@ -1,5 +1,5 @@ import fetch from 'cross-fetch'; -import { BigNumber, BigNumberish, constants } from 'ethers'; +import { BigNumberish, ZeroAddress, toBigInt } from 'ethers'; import { Network, ReputationOracleEndpoint } from '../constants.js'; import { CommonColony, CommonNetwork } from './types.js'; @@ -31,8 +31,6 @@ interface MembersReputationResponse { addresses: string[]; } -const { AddressZero } = constants; - export class ReputationClient { static async fetchReputation(url: string) { const response = await fetch(url); @@ -64,7 +62,7 @@ export class ReputationClient { private async getRootHash(customRootHash?: string) { const rootHash = customRootHash || (await this.network.getReputationRootHash()); - if (BigNumber.from(rootHash).isZero()) { + if (toBigInt(rootHash) === 0n) { throw new Error('No reputation for given rootHash found (yet)'); } return rootHash; @@ -72,7 +70,8 @@ export class ReputationClient { private async getBaseEndpoint(customRootHash?: string) { const rootHash = await this.getRootHash(customRootHash); - return `${this.endpointUrl}/${rootHash}/${this.colony.address}`; + const address = await this.colony.getAddress(); + return `${this.endpointUrl}/${rootHash}/${address}`; } /** @@ -104,14 +103,14 @@ export class ReputationClient { customRootHash?: string, ) { const baseEndpoint = await this.getBaseEndpoint(customRootHash); - const skillIdString = BigNumber.from(skillId || 0).toString(); + const skillIdString = toBigInt(skillId || 0).toString(); const url = `${baseEndpoint}/${skillIdString}/${address}/noProof`; const result = await ReputationClient.fetchReputation( url, ); return { ...result, - reputationAmount: BigNumber.from(result.reputationAmount || 0), + reputationAmount: toBigInt(result.reputationAmount || 0), }; } @@ -130,13 +129,13 @@ export class ReputationClient { customRootHash?: string, ) { const baseEndpoint = await this.getBaseEndpoint(customRootHash); - const skillIdString = BigNumber.from(skillId || 0).toString(); + const skillIdString = toBigInt(skillId || 0).toString(); const url = `${baseEndpoint}/${skillIdString}/${address}`; const result = await ReputationClient.fetchReputation(url); return { ...result, - reputationAmount: BigNumber.from(result.reputationAmount || 0), + reputationAmount: toBigInt(result.reputationAmount || 0), }; } @@ -159,12 +158,12 @@ export class ReputationClient { const domainCount = await this.colony.getDomainCount(); const allColonyDomains = (await Promise.all( - Array.from(new Array(domainCount.toNumber())).map(async (_, index) => { + Array.from(new Array(domainCount)).map(async (_, index) => { const domainId = index + 1; const domain = await this.colony.getDomain(domainId); return { domainId, - skillId: domain.skillId.toNumber(), + skillId: domain.skillId, }; }), )) || []; @@ -172,7 +171,7 @@ export class ReputationClient { return allColonyDomains.map((domain) => { let reputationAmount; const skillAssignedToDomain = (result?.reputations || []).find( - ({ skill_id: skillId }) => skillId === domain.skillId, + ({ skill_id: skillId }) => BigInt(skillId) === domain.skillId, ); if (skillAssignedToDomain) { reputationAmount = skillAssignedToDomain?.reputationAmount; @@ -180,7 +179,7 @@ export class ReputationClient { return { ...domain, reputationAmount: reputationAmount - ? BigNumber.from(reputationAmount) + ? toBigInt(reputationAmount) : undefined, }; }); @@ -196,7 +195,7 @@ export class ReputationClient { */ async getMembersReputation(skillId: BigNumberish, customRootHash?: string) { const baseEndpoint = await this.getBaseEndpoint(customRootHash); - const skillIdString = BigNumber.from(skillId || 0).toString(); + const skillIdString = toBigInt(skillId || 0).toString(); const url = `${baseEndpoint}/${skillIdString}`; return ReputationClient.fetchReputation(url); } @@ -211,14 +210,14 @@ export class ReputationClient { */ async getTotalReputation(skillId: BigNumberish, customRootHash?: string) { const baseEndpoint = await this.getBaseEndpoint(customRootHash); - const skillIdString = BigNumber.from(skillId || 0).toString(); - const url = `${baseEndpoint}/${skillIdString}/${AddressZero}/noProof`; + const skillIdString = toBigInt(skillId || 0).toString(); + const url = `${baseEndpoint}/${skillIdString}/${ZeroAddress}/noProof`; const result = await ReputationClient.fetchReputation( url, ); return { ...result, - reputationAmount: BigNumber.from(result.reputationAmount || 0), + reputationAmount: toBigInt(result.reputationAmount || 0), }; } @@ -249,12 +248,8 @@ export class ReputationClient { customRootHash, ); - const repAmountScaled = reputationAmount.mul( - BigNumber.from(10).pow(decimalPoints), - ); + const repAmountScaled = reputationAmount * 10n ** BigInt(decimalPoints); - return ( - repAmountScaled.div(totalReputation).toNumber() / 10 ** decimalPoints - ); + return Number(repAmountScaled / totalReputation) / 10 ** decimalPoints; } } diff --git a/packages/core/src/helpers/types.ts b/packages/core/src/helpers/types.ts index c74bbc450..e5b9b84f1 100644 --- a/packages/core/src/helpers/types.ts +++ b/packages/core/src/helpers/types.ts @@ -1,49 +1,46 @@ -import type { Provider } from '@ethersproject/abstract-provider'; - -import { BigNumber, BigNumberish, Signer } from 'ethers'; +import type { BigNumberish, ContractRunner } from 'ethers'; export interface CommonDomain { - skillId: BigNumber; - fundingPotId: BigNumber; + skillId: bigint; + fundingPotId: bigint; } export interface CommonSkill { - children: BigNumber[]; + children: bigint[]; } export interface CommonFundingPot { - associatedType: number; - associatedTypeId: BigNumber; + associatedType: bigint; + associatedTypeId: bigint; } export interface CommonPayment { - domainId: BigNumber; + domainId: bigint; } export interface CommonTask { - domainId: BigNumber; + domainId: bigint; } // We are using the smallest possible types here to avoid conflicts with extended/modified types interface BaseContract { - address: string; - provider: Provider; - signer?: Signer; + getAddress: () => Promise; + runner: ContractRunner | null; } export interface CommonNetwork extends BaseContract { getChildSkillId( skillId: BigNumberish, childSkillIndex: BigNumberish, - ): Promise; + ): Promise; getReputationRootHash(): Promise; getSkill(id: BigNumberish): Promise; } export interface CommonColony extends BaseContract { getDomain(id: BigNumberish): Promise; - getDomainCount(): Promise; - getDomainFromFundingPot?(fundingPotId: BigNumberish): Promise; + getDomainCount(): Promise; + getDomainFromFundingPot?(fundingPotId: BigNumberish): Promise; getFundingPot(id: BigNumberish): Promise; getPayment(id: BigNumberish): Promise; getTask(id: BigNumberish): Promise; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 815a183e7..89ba2f31d 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,5 +1,4 @@ -import type { Overrides, Signer } from 'ethers'; -import type { Provider } from '@ethersproject/abstract-provider'; +import type { Overrides, Provider, Signer } from 'ethers'; export type SignerOrProvider = Signer | Provider; export type TxOverrides = Overrides & { from?: string | undefined }; diff --git a/packages/event-metadata/package.json b/packages/event-metadata/package.json index 16d47acd6..08366b9a4 100644 --- a/packages/event-metadata/package.json +++ b/packages/event-metadata/package.json @@ -27,7 +27,7 @@ "scripts": { "build": "npm run clean && npm run compile-cjs && npm run compile-esm && npm run compile-types && npm run create-pkg-json", "clean": "rimraf ./dist", - "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2015 --outDir dist/cjs", + "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2020 --outDir dist/cjs", "compile-esm": "tsc -p tsconfig.build.json --module esnext --target es2022 --outDir dist/esm", "compile-types": "tsc -p tsconfig.build.json --target esnext --declaration --emitDeclarationOnly --outDir dist/types", "create-pkg-json": "../../scripts/create-pkg-json.sh", diff --git a/packages/events/package.json b/packages/events/package.json index 9ab3b7be8..112e94ea1 100644 --- a/packages/events/package.json +++ b/packages/events/package.json @@ -35,9 +35,9 @@ "homepage": "https://docs.colony.io/develop", "scripts": { "build": "npm run clean && npm run compile-cjs && npm run compile-esm && npm run compile-types && npm run create-pkg-json", - "build-contracts": "contractor events -o ./src/contracts", + "build-contracts": "contractor events -p ethers-v6 -o ./src/contracts", "clean": "rimraf ./dist", - "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2015 --outDir dist/cjs", + "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2020 --outDir dist/cjs", "compile-esm": "tsc -p tsconfig.build.json --module esnext --target es2022 --outDir dist/esm", "compile-types": "tsc -p tsconfig.build.json --target esnext --declaration --emitDeclarationOnly --outDir dist/types", "create-pkg-json": "../../scripts/create-pkg-json.sh", @@ -47,11 +47,9 @@ }, "devDependencies": { "@colony/contractor": "^1.1.0-next.2", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.2" + "ethers": "^6.6.7" }, "peerDependencies": { - "ethers": "^5.1.3" + "ethers": "^6" } } diff --git a/packages/events/src/index.ts b/packages/events/src/index.ts index 658db2cd3..f1da8857f 100644 --- a/packages/events/src/index.ts +++ b/packages/events/src/index.ts @@ -3,39 +3,19 @@ export * from './contracts/index.js'; // We need to manually export those as they are ambiguous as they exist in multiple event contracts export type { MetaTransactionExecutedEvent, - MetaTransactionExecutedEventFilter, - MetaTransactionExecutedEventObject, RecoveryModeEnteredEvent, RecoveryRoleSetEvent, - RecoveryModeExitedEventObject, - RecoveryRoleSetEventFilter, RecoveryStorageSlotSetEvent, - RecoveryRoleSetEventObject, - RecoveryStorageSlotSetEventFilter, - RecoveryModeExitedEventFilter, - RecoveryModeExitApprovedEventObject, - RecoveryModeEnteredEventFilter, RecoveryModeExitedEvent, - RecoveryModeEnteredEventObject, - RecoveryModeExitApprovedEventFilter, RecoveryModeExitApprovedEvent, - RecoveryStorageSlotSetEventObject, ReputationMinerPenalisedEvent, - ReputationMinerPenalisedEventFilter, - ReputationMinerPenalisedEventObject, } from './contracts/IColonyNetworkEvents.js'; // All ColonyExtensions have those so we export them from the OG contract export type { ExtensionInitialisedEvent, - LogSetAuthorityEventObject, LogSetOwnerEvent, - LogSetOwnerEventFilter, - LogSetAuthorityEventFilter, - ExtensionInitialisedEventObject, LogSetAuthorityEvent, - ExtensionInitialisedEventFilter, - LogSetOwnerEventObject, } from './contracts/ColonyExtensionEvents.js'; export * from './contracts/CoinMachineEvents.js'; diff --git a/packages/sdk/.eslintrc b/packages/sdk/.eslintrc index 027bdf15e..cedcc6059 100644 --- a/packages/sdk/.eslintrc +++ b/packages/sdk/.eslintrc @@ -4,8 +4,8 @@ "error", { "allow": [ - ".+_EventFilter$", - ".+_EventObject$", + ".+EventFilter$", + ".+Event$", ".+__factory" ] } diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 5daffdd6e..384297933 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -33,12 +33,12 @@ "scripts": { "examples:node": "ts-node examples/node/index.ts", "examples:browser": "esbuild --bundle examples/browser/src/*.ts --servedir=examples/browser/web", - "build-contracts": "contractor colony -t 7 -o ./src/contracts", + "build-contracts": "contractor colony -t 7 -p ethers-v6 -o ./src/contracts", "build": "npm run clean && npm run compile-cjs && npm run compile-esm && npm run compile-types && npm run create-pkg-json", "build-docs": "typedoc", "build-examples": "esbuild --bundle examples/browser/src/*.ts --outdir=examples/browser/web --minify", "clean": "rimraf ./dist", - "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2015 --outDir dist/cjs", + "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2020 --outDir dist/cjs", "compile-esm": "tsc -p tsconfig.build.json --module esnext --target es2022 --outDir dist/esm", "compile-types": "tsc -p tsconfig.build.json --target esnext --declaration --emitDeclarationOnly --outDir dist/types", "create-pkg-json": "../../scripts/create-pkg-json.sh", @@ -61,17 +61,13 @@ "devDependencies": { "@colony/contractor": "^1.1.0-next.2", "@colony/events": "^0.2.1-next.1", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/providers": "^5.7.2", "@picocss/pico": "^1.5.7", "@types/inquirer": "^8.2.1", "@types/node": "^18.15.11", "@types/ws": "^8.5.3", "@types/yargs": "^17.0.10", "esbuild": "^0.14.27", - "ethers": "^5.7.1", + "ethers": "^6.6.7", "fast-glob": "^3.2.11", "inquirer": "^8.2.4", "prettier": "^2.6.1", @@ -82,6 +78,6 @@ "yargs": "^17.5.1" }, "peerDependencies": { - "ethers": "^5.1.3" + "ethers": "^6" } } diff --git a/packages/sdk/src/ColonyNetwork/Colony.ts b/packages/sdk/src/ColonyNetwork/Colony.ts index dab81be79..5b60eecf0 100644 --- a/packages/sdk/src/ColonyNetwork/Colony.ts +++ b/packages/sdk/src/ColonyNetwork/Colony.ts @@ -1,26 +1,31 @@ import type { - AnnotationEventObject, - ArbitraryReputationUpdateEventObject, - ArbitraryTransactionEventObject, - ColonyFundsClaimed_address_uint256_uint256_EventObject, + AnnotationEvent, + ArbitraryReputationUpdateEvent, + ArbitraryTransactionEvent, + ColonyFundsClaimed_address_uint256_uint256_Event, // eslint-disable-next-line max-len - ColonyFundsMovedBetweenFundingPots_address_uint256_uint256_uint256_address_EventObject, - ColonyMetadataEventObject, - ColonyRoleSet_address_address_uint256_uint8_bool_EventObject, - ColonyUpgraded_uint256_uint256_EventObject, - DomainAdded_uint256_EventObject, - DomainDeprecatedEventObject, - DomainMetadataEventObject, - ExtensionInstalledEventObject, - FundingPotAddedEventObject, - RecoveryModeEnteredEventObject, - RecoveryModeExitedEventObject, - RecoveryRoleSetEventObject, - TokenAuthorityDeployedEventObject, - TokensMintedEventObject, + ColonyFundsMovedBetweenFundingPots_address_uint256_uint256_uint256_address_Event, + ColonyMetadataEvent, + ColonyRoleSet_address_address_uint256_uint8_bool_Event, + ColonyUpgraded_uint256_uint256_Event, + DomainAdded_uint256_Event, + DomainDeprecatedEvent, + DomainMetadataEvent, + ExtensionInstalledEvent, + FundingPotAddedEvent, + RecoveryModeEnteredEvent, + RecoveryModeExitedEvent, + RecoveryRoleSetEvent, + TokenAuthorityDeployedEvent, + TokensMintedEvent, } from '@colony/events'; -import { BigNumber, BigNumberish, BytesLike, ContractReceipt } from 'ethers'; +import { + type BigNumberish, + type BytesLike, + ContractTransactionReceipt, + toBigInt, +} from 'ethers'; import { type ColonyVersion, Id, @@ -41,7 +46,12 @@ import { MetadataType, } from '@colony/event-metadata'; -import type { Expand, Parameters, ParametersFrom2 } from '../types.js'; +import type { + Expand, + Parameters, + ParametersFrom2, + ParsedLogTransactionReceipt, +} from '../types.js'; import type { ColonyDataTypes as ColonyDataTypes10 } from '../contracts/IColony/10/IColony.js'; import type { ColonyDataTypes as ColonyDataTypes11 } from '../contracts/IColony/11/IColony.js'; import type { ColonyDataTypes as ColonyDataTypes12 } from '../contracts/IColony/12/IColony.js'; @@ -74,7 +84,6 @@ export type SupportedColonyContract = | ColonyContract11 | ColonyContract12 | ColonyContract13; -export type SupportedColonyMethods = SupportedColonyContract['functions']; export type Domain = | ColonyDataTypes10.DomainStructOutput @@ -143,7 +152,13 @@ export class Colony { const tokenAddress = await colonyContract.getToken(); const token = await getToken(colonyNetwork, tokenAddress); - const colony = new Colony(colonyNetwork, colonyContract, token, version); + const colony = new Colony( + colonyNetwork, + address, + colonyContract, + token, + version, + ); await colony.updateExtensions(); return colony; } @@ -221,13 +236,14 @@ export class Colony { */ constructor( colonyNetwork: ColonyNetwork, + address: string, colony: SupportedColonyContract, token: Token, deployedVersion: ColonyVersion, ) { this.colony = colony; this.colonyNetwork = colonyNetwork; - this.address = colony.address; + this.address = address; this.ext = {}; this.reputation = new ReputationClient( colonyNetwork.getInternalNetworkContract(), @@ -253,16 +269,16 @@ export class Colony { */ createColonyTxCreator< C extends IBasicMetaTransaction, - F extends keyof C['functions'], + F extends keyof C, D extends Record, M extends MetadataType, >( contract: C, method: F, - args: - | Parameters - | (() => Promise>), - eventData?: (receipt: ContractReceipt) => Promise, + args: Parameters | (() => Promise>), + eventData?: ( + receipt: ContractTransactionReceipt | ParsedLogTransactionReceipt, + ) => Promise, txConfig?: TxConfig, ) { return new ColonyTxCreator({ @@ -292,17 +308,17 @@ export class Colony { */ createPermissionedColonyTxCreator< C extends IBasicMetaTransaction, - F extends keyof C['functions'], + F extends keyof C, D extends Record, M extends MetadataType, >( contract: C, method: F, - args: - | ParametersFrom2 - | (() => Promise>), + args: ParametersFrom2 | (() => Promise>), permissionConfig: PermissionConfig, - eventData?: (receipt: ContractReceipt) => Promise, + eventData?: ( + receipt: ContractTransactionReceipt | ParsedLogTransactionReceipt, + ) => Promise, txConfig?: TxConfig, ) { return new ColonyTxCreator({ @@ -451,7 +467,10 @@ export class Colony { return [cid] as [string]; }, async (receipt) => ({ - ...extractEvent('ColonyMetadata', receipt), + ...extractEvent( + 'ColonyMetadata', + receipt, + ), }), { metadataType: MetadataType.Colony, @@ -514,8 +533,8 @@ export class Colony { SupportedColonyContract, 'addDomain(uint256,uint256,uint256,string)', Expand< - DomainAdded_uint256_EventObject & - FundingPotAddedEventObject & { metadata: string } + DomainAdded_uint256_Event.OutputObject & + FundingPotAddedEvent.OutputObject & { metadata: string } >, MetadataType.Domain >; @@ -544,8 +563,8 @@ export class Colony { SupportedColonyContract, 'addDomain(uint256,uint256,uint256,string)', Expand< - DomainAdded_uint256_EventObject & - FundingPotAddedEventObject & { metadata: undefined } + DomainAdded_uint256_Event.OutputObject & + FundingPotAddedEvent.OutputObject & { metadata: undefined } >, MetadataType >; @@ -561,11 +580,11 @@ export class Colony { domain: Id.RootDomain, }, async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'DomainAdded', receipt, ), - ...extractEvent( + ...extractEvent( 'FundingPotAdded', receipt, ), @@ -593,12 +612,18 @@ export class Colony { domain: Id.RootDomain, }, async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'DomainAdded', receipt, ), - ...extractEvent('FundingPotAdded', receipt), - ...extractEvent('DomainMetadata', receipt), + ...extractEvent( + 'FundingPotAdded', + receipt, + ), + ...extractEvent( + 'DomainMetadata', + receipt, + ), }), { metadataType: MetadataType.Domain }, ); @@ -672,7 +697,10 @@ export class Colony { domain: Id.RootDomain, }, async (receipt) => ({ - ...extractEvent('DomainMetadata', receipt), + ...extractEvent( + 'DomainMetadata', + receipt, + ), }), { metadataType: MetadataType.Domain }, ); @@ -709,7 +737,7 @@ export class Colony { domain: teamId, }, async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'DomainDeprecated', receipt, ), @@ -726,7 +754,7 @@ export class Colony { */ async getTeam(teamId: BigNumberish): Promise { const teamCount = await this.colony.getDomainCount(); - if (teamCount.lt(teamId)) { + if (teamCount < toBigInt(teamId)) { throw new Error(`Team with id ${teamId} does not exist`); } return this.colony.getDomain(teamId); @@ -762,7 +790,8 @@ export class Colony { 'claimColonyFunds', [token], async (receipt) => ({ - ...extractEvent( + // eslint-disable-next-line max-len + ...extractEvent( 'ColonyFundsClaimed', receipt, ), @@ -827,10 +856,8 @@ export class Colony { 'moveFundsBetweenPots(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)', async () => { const domain = await this.colony.getDomain(toTeam); - if (domain.fundingPotId.isZero()) { - throw new Error( - `Team with id ${BigNumber.from(toTeam).toString()} does not exist`, - ); + if (domain.fundingPotId === 0n) { + throw new Error(`Team with id ${toBigInt(toTeam)} does not exist`); } // Manual permission proofs are needed here const [permissionDomainId, childSkillIndex] = await getPermissionProofs( @@ -885,7 +912,7 @@ export class Colony { }, async (receipt) => ({ // eslint-disable-next-line max-len - ...extractEvent( + ...extractEvent( 'ColonyFundsMovedBetweenFundingPots', receipt, ), @@ -997,7 +1024,7 @@ export class Colony { 'makeArbitraryTransactions', [[target], [action], false], async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'ArbitraryTransaction', receipt, ), @@ -1066,7 +1093,7 @@ export class Colony { return [txHash, cid] as [string, string]; }, async (receipt) => ({ - ...extractEvent('Annotation', receipt), + ...extractEvent('Annotation', receipt), }), { metadataType: MetadataType.Annotation }, ); @@ -1124,7 +1151,7 @@ export class Colony { 'installExtension', [getExtensionHash(extensionType), Extension.getLatestSupportedVersion()], async (receipt) => ({ - ...extractCustomEvent( + ...extractCustomEvent( 'ExtensionInstalled', receipt, networkClient.interface, @@ -1213,7 +1240,7 @@ export class Colony { new Set([...oldRoles, ...([] as ColonyRole[]).concat(roles)]), ); const hexRoles = colonyRoles2Hex(newRoles); - return [address, teamId, hexRoles] as [string, BigNumber, string]; + return [address, teamId, hexRoles] as [string, bigint, string]; }, { roles: ColonyRole.Architecture, @@ -1221,11 +1248,14 @@ export class Colony { }, async (receipt) => ({ // eslint-disable-next-line max-len - ...extractEvent( + ...extractEvent( 'ColonyRoleSet', receipt, ), - ...extractEvent('RecoveryRoleSet', receipt), + ...extractEvent( + 'RecoveryRoleSet', + receipt, + ), }), ); } @@ -1269,7 +1299,7 @@ export class Colony { (role) => !([] as ColonyRole[]).concat(roles).includes(role), ); const hexRoles = colonyRoles2Hex(newRoles); - return [address, teamId, hexRoles] as [string, BigNumber, string]; + return [address, teamId, hexRoles] as [string, bigint, string]; }, { roles: ColonyRole.Architecture, @@ -1277,11 +1307,14 @@ export class Colony { }, async (receipt) => ({ // eslint-disable-next-line max-len - ...extractEvent( + ...extractEvent( 'ColonyRoleSet', receipt, ), - ...extractEvent('RecoveryRoleSet', receipt), + ...extractEvent( + 'RecoveryRoleSet', + receipt, + ), }), ); } @@ -1329,7 +1362,10 @@ export class Colony { 'mintTokens', [amount], async (receipt) => ({ - ...extractEvent('TokensMinted', receipt), + ...extractEvent( + 'TokensMinted', + receipt, + ), }), ); } @@ -1377,7 +1413,7 @@ export class Colony { ]; }, async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'TokenAuthorityDeployed', receipt, ), @@ -1411,7 +1447,7 @@ export class Colony { 'enterRecoveryMode', [], async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'RecoveryModeEntered', receipt, ), @@ -1442,7 +1478,7 @@ export class Colony { 'exitRecoveryMode', [], async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'RecoveryModeExited', receipt, ), @@ -1481,7 +1517,7 @@ export class Colony { 'upgrade', [version], async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'ColonyUpgraded', receipt, ), @@ -1521,7 +1557,7 @@ export class Colony { amount: BigNumberish, team: BigNumberish = Id.RootDomain, ) { - if (BigNumber.from(amount).lte(0)) { + if (toBigInt(amount) <= 0n) { throw new Error('Reputation award must be bigger than 0'); } return this.createColonyTxCreator( @@ -1529,7 +1565,7 @@ export class Colony { 'emitDomainReputationReward', [team, address, amount], async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'ArbitraryReputationUpdate', receipt, ), @@ -1569,19 +1605,19 @@ export class Colony { amount: BigNumberish, team: BigNumberish = Id.RootDomain, ) { - if (BigNumber.from(amount).lte(0)) { + if (toBigInt(amount) <= 0n) { throw new Error('Reputation smite must be bigger than 0'); } return this.createPermissionedColonyTxCreator( this.colony, 'emitDomainReputationPenalty', - [team, address, BigNumber.from(0).sub(amount)], + [team, address, 0n - toBigInt(amount)], { domain: team, roles: ColonyRole.Arbitration, }, async (receipt) => ({ - ...extractEvent( + ...extractEvent( 'ArbitraryReputationUpdate', receipt, ), diff --git a/packages/sdk/src/TxCreator/ColonyTxCreator.ts b/packages/sdk/src/TxCreator/ColonyTxCreator.ts index 3aee2c0fc..234deae9e 100644 --- a/packages/sdk/src/TxCreator/ColonyTxCreator.ts +++ b/packages/sdk/src/TxCreator/ColonyTxCreator.ts @@ -1,6 +1,12 @@ -import type { MotionCreatedEventObject } from '@colony/events'; +import type { MotionCreatedEvent } from '@colony/events'; +import type { + BigNumberish, + ContractTransactionReceipt, + ContractTransactionResponse, + ContractTransaction, + TransactionResponse, +} from 'ethers'; -import { BigNumberish, ContractReceipt, ContractTransaction } from 'ethers'; import { ColonyRole, getPermissionProofs, @@ -9,7 +15,6 @@ import { } from '@colony/core'; import { MetadataType } from '@colony/event-metadata'; -import type { TransactionResponse } from '@ethersproject/abstract-provider'; import { Colony } from '../ColonyNetwork/index.js'; import { extractEvent } from '../utils.js'; import { @@ -51,7 +56,7 @@ interface MetaMotionsConfig extends TxCreatorConfig { */ export class ColonyTxCreator< C extends MetaTxBaseContract, - M extends keyof C['functions'], + M extends keyof C, E extends EventData, MD extends MetadataType, > extends MetaTxCreator { @@ -114,11 +119,18 @@ export class ColonyTxCreator< } // eslint-disable-next-line class-methods-use-this - private async getMotionMined(tx: ContractTransaction) { + private async getMotionMined(tx: ContractTransactionResponse) { const receipt = await tx.wait(); + if (!receipt) { + throw new Error('No receipt returned'); + } + const data = { - ...extractEvent('MotionCreated', receipt), + ...extractEvent( + 'MotionCreated', + receipt, + ), }; return [data, receipt] as [typeof data, typeof receipt]; @@ -142,15 +154,16 @@ export class ColonyTxCreator< args, ); + const altAddress = await this.contract.getAddress(); + // If the contract for this TxCreator is the colony, use 0x0, otherwise use the extension's address - const altTarget = - this.contract.address === this.colony.address - ? '0x0' - : this.contract.address; + const altTarget = altAddress === this.colony.address ? '0x0' : altAddress; const votingReputationClient = this.colony.ext.motions.getInternalVotingReputationContract(); + const address = await votingReputationClient.getAddress(); + const { actionCid, key, value, branchMask, siblings } = await getCreateMotionProofs( this.colonyNetwork.getInternalNetworkContract(), @@ -173,7 +186,7 @@ export class ColonyTxCreator< branchMask, siblings, ]), - votingReputationClient.address, + address, ]; } @@ -189,7 +202,10 @@ export class ColonyTxCreator< const receipt = await this.waitForMetaTx(tx); const data = { - ...extractEvent('MotionCreated', receipt), + ...extractEvent( + 'MotionCreated', + receipt, + ), }; return [data, receipt] as [typeof data, typeof receipt]; @@ -252,8 +268,8 @@ export class ColonyTxCreator< }, } as ColonyTransaction< ContractTransaction, - MotionCreatedEventObject, - ContractReceipt, + MotionCreatedEvent.OutputObject, + ContractTransactionReceipt, MD >; } @@ -282,7 +298,7 @@ export class ColonyTxCreator< }, } as ColonyMetaTransaction< TransactionResponse, - MotionCreatedEventObject, + MotionCreatedEvent.OutputObject, ParsedLogTransactionReceipt, MD >; diff --git a/packages/sdk/src/TxCreator/EIP2612TxCreator.ts b/packages/sdk/src/TxCreator/EIP2612TxCreator.ts index cd4fe40fa..a61b1a9a4 100644 --- a/packages/sdk/src/TxCreator/EIP2612TxCreator.ts +++ b/packages/sdk/src/TxCreator/EIP2612TxCreator.ts @@ -1,7 +1,4 @@ -import type { TypedDataSigner } from '@ethersproject/abstract-signer'; -import type { TransactionResponse } from '@ethersproject/abstract-provider'; - -import { BigNumberish, Signer, utils } from 'ethers'; +import { type BigNumberish, type TransactionResponse, Signature } from 'ethers'; import { Network } from '@colony/core'; import { MetadataType } from '@colony/event-metadata'; import { ERC2612Token as ERC2612TokenType } from '@colony/tokens'; @@ -9,11 +6,6 @@ import { ERC2612Token as ERC2612TokenType } from '@colony/tokens'; import { ColonyMetaTransaction, EventData, TxCreator } from './TxCreator.js'; import { ParsedLogTransactionReceipt } from '../types.js'; -const { splitSignature } = utils; - -// Little fix until ethers exposes this function -interface TDSigner extends Signer, TypedDataSigner {} - /** * An umbrella API for all kinds of transactions * @@ -32,10 +24,8 @@ export class EIP2612TxCreator< > extends TxCreator { private async getMetaTx() { const args = await this.getArgs(); - return this.sendMetaTransaction( - this.contract.address, - args as [string, BigNumberish], - ); + const address = await this.contract.getAddress(); + return this.sendMetaTransaction(address, args as [string, BigNumberish]); } private async getMetaMined(tx: TransactionResponse) { @@ -53,24 +43,24 @@ export class EIP2612TxCreator< ); } - const signer = this.colonyNetwork.getSigner() as TDSigner; + const signer = this.colonyNetwork.getSigner(); const { provider } = signer; if (!provider) { throw new Error('No provider found'); } - let chainId: number; + let chainId: bigint; if (this.colonyNetwork.network === Network.Custom) { - chainId = 1; + chainId = 1n; } else { const networkInfo = await provider.getNetwork(); chainId = networkInfo.chainId; } const userAddress = await signer.getAddress(); - const nonce = await this.contract.functions.nonces(userAddress); + const nonce = await this.contract.nonces(userAddress); const tokenName = await this.contract.name(); /* * @NOTE One hour in the future from now @@ -78,13 +68,15 @@ export class EIP2612TxCreator< */ const deadline = Math.floor(Date.now() / 1000) + 3600; + const address = await this.contract.getAddress(); + // eslint-disable-next-line no-underscore-dangle - const signature = await signer._signTypedData( + const signature = await signer.signTypedData( { name: tokenName, // token.name() version: '1', chainId, - verifyingContract: this.contract.address, + verifyingContract: address, }, { Permit: [ @@ -104,7 +96,7 @@ export class EIP2612TxCreator< }, ); - const { r, s, v } = splitSignature(signature); + const { r, s, v } = Signature.from(signature); const broadcastData = { target, diff --git a/packages/sdk/src/TxCreator/MetaTxCreator.ts b/packages/sdk/src/TxCreator/MetaTxCreator.ts index 19f4018c2..07683574c 100644 --- a/packages/sdk/src/TxCreator/MetaTxCreator.ts +++ b/packages/sdk/src/TxCreator/MetaTxCreator.ts @@ -1,35 +1,28 @@ -import { utils } from 'ethers'; +import { + type BaseContract, + type TransactionResponse, + getBytes, + solidityPackedKeccak256, + Signature, +} from 'ethers'; import { Network } from '@colony/core'; import { MetadataType } from '@colony/event-metadata'; -import type { TransactionResponse } from '@ethersproject/abstract-provider'; import type { IBasicMetaTransaction } from '../contracts/index.js'; -import { - BaseContract, - ColonyMetaTransaction, - EventData, - TxCreator, -} from './TxCreator.js'; +import { ColonyMetaTransaction, EventData, TxCreator } from './TxCreator.js'; import { ParsedLogTransactionReceipt } from '../types.js'; -const { arrayify, solidityKeccak256, splitSignature } = utils; - -type MetaTxFunctions = IBasicMetaTransaction['functions']; type MetaTxInterface = IBasicMetaTransaction['interface']; -interface Functions extends MetaTxFunctions { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: (...args: any[]) => Promise; -} interface Interface extends MetaTxInterface { // eslint-disable-next-line @typescript-eslint/no-explicit-any encodeFunctionData(functionFragment: string, values: any[]): string; } export interface MetaTxBaseContract extends BaseContract { - functions: Functions; interface: Interface; + getMetatransactionNonce: IBasicMetaTransaction['getMetatransactionNonce']; } /** @@ -46,7 +39,7 @@ export interface MetaTxBaseContract extends BaseContract { */ export class MetaTxCreator< C extends MetaTxBaseContract, - M extends keyof C['functions'], + M extends keyof C, E extends EventData, MD extends MetadataType, > extends TxCreator { @@ -67,27 +60,25 @@ export class MetaTxCreator< throw new Error('No provider found'); } - let chainId: number; + let chainId: bigint; if (this.colonyNetwork.network === Network.Custom) { - chainId = 1; + chainId = 1n; } else { const networkInfo = await provider.getNetwork(); chainId = networkInfo.chainId; } const userAddress = await signer.getAddress(); - const nonce = await this.contract.functions.getMetatransactionNonce( - userAddress, - ); + const nonce = await this.contract.getMetatransactionNonce(userAddress); - const message = solidityKeccak256( + const message = solidityPackedKeccak256( ['uint256', 'address', 'uint256', 'bytes'], [nonce.toString(), target, chainId, encodedTransaction], ); - const buf = arrayify(message); + const buf = getBytes(message); const signature = await signer.signMessage(buf); - const { r, s, v } = splitSignature(signature); + const { r, s, v } = Signature.from(signature); const broadcastData = { target, @@ -107,7 +98,8 @@ export class MetaTxCreator< this.method, args, ); - return this.sendMetaTransaction(encodedTransaction, this.contract.address); + const address = await this.contract.getAddress(); + return this.sendMetaTransaction(encodedTransaction, address); } private async getMetaMined(tx: TransactionResponse) { diff --git a/packages/sdk/src/TxCreator/TxCreator.ts b/packages/sdk/src/TxCreator/TxCreator.ts index ed65a6688..d50c1d4c4 100644 --- a/packages/sdk/src/TxCreator/TxCreator.ts +++ b/packages/sdk/src/TxCreator/TxCreator.ts @@ -1,10 +1,15 @@ -import { Contract, ContractReceipt, ContractTransaction } from 'ethers'; +import { + BaseContract, + ContractTransactionReceipt, + ContractTransactionResponse, + ContractTransaction, + TransactionResponse, +} from 'ethers'; import { fetch } from 'cross-fetch'; import { parseLogs } from '@colony/core'; import { MetadataType, MetadataTypeMap } from '@colony/event-metadata'; -import type { TransactionResponse } from '@ethersproject/abstract-provider'; -import type { MotionCreatedEventObject } from '@colony/events'; +import type { MotionCreatedEvent } from '@colony/events'; import { ParsedLogTransactionReceipt } from '../types.js'; import { IpfsMetadataEvents } from '../ipfs/IpfsMetadata.js'; @@ -23,20 +28,22 @@ export interface TxCreatorConfig { contract: C; method: M; args: unknown[] | (() => Promise); - eventData?: (receipt: ContractReceipt) => Promise; + eventData?: ( + receipt: ContractTransactionReceipt | ParsedLogTransactionReceipt, + ) => Promise; metadataType?: MD; txConfig?: TxConfig; } -// I really just wanted to use the ethers' `BaseContract` but that seemed to have been to specific -export interface BaseContract { - address: string; - functions: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: (...args: any[]) => Promise; - }; - interface: Contract['interface']; -} +// // I really just wanted to use the ethers' `BaseContract` but that seemed to have been to specific +// export interface BaseContract { +// address: string; +// functions: { +// // eslint-disable-next-line @typescript-eslint/no-explicit-any +// [key: string]: (...args: any[]) => Promise; +// }; +// interface: Contract['interface']; +// } /** * A standard gasless MetaTransaction ("force" in dApp) @@ -62,7 +69,7 @@ export interface BaseContract { */ export interface ColonyMetaTransaction< C extends TransactionResponse, - E extends EventData | MotionCreatedEventObject, + E extends EventData | MotionCreatedEvent.OutputObject, R extends ParsedLogTransactionReceipt, MD extends MetadataType, > { @@ -110,8 +117,8 @@ export interface ColonyMetaTransaction< */ export interface ColonyTransaction< C extends ContractTransaction, - E extends EventData | MotionCreatedEventObject, - R extends ContractReceipt, + E extends EventData | MotionCreatedEvent.OutputObject, + R extends ContractTransactionReceipt, MD extends MetadataType, > { /** @@ -148,7 +155,7 @@ export interface ColonyTransaction< */ export class TxCreator< C extends BaseContract, - M extends keyof C['functions'], + M extends keyof C, E extends EventData, MD extends MetadataType, > { @@ -160,7 +167,9 @@ export class TxCreator< protected args: unknown[] | (() => Promise); - private eventData?: (receipt: ContractReceipt) => Promise; + private eventData?: ( + receipt: ContractTransactionReceipt | ParsedLogTransactionReceipt, + ) => Promise; protected txConfig?: TxConfig; @@ -176,7 +185,9 @@ export class TxCreator< contract: C; method: M; args: unknown[] | (() => Promise); - eventData?: (receipt: ContractReceipt) => Promise; + eventData?: ( + receipt: ContractTransactionReceipt | ParsedLogTransactionReceipt, + ) => Promise; metadataType?: MD; txConfig?: TxConfig; }) { @@ -202,20 +213,24 @@ export class TxCreator< private async getTx() { const args = await this.getArgs(); - const tx = (await this.contract.functions[this.method].apply( - this.contract, - args, - )) as ContractTransaction; + const tx = (await this.contract[this.method as keyof BaseContract]( + ...args, + )) as ContractTransactionResponse; return tx; } - private async getMined(tx: ContractTransaction) { + private async getMined(tx: ContractTransactionResponse) { const receipt = await tx.wait(); + + if (!receipt) { + throw new Error('No receipt returned'); + } + return this.getEventData(receipt); } protected async getEventData< - R extends ContractReceipt | ParsedLogTransactionReceipt, + R extends ContractTransactionReceipt | ParsedLogTransactionReceipt, >(receipt: R): Promise<[E, R, () => Promise] | [E, R]> { if (this.eventData) { const data = await this.eventData(receipt); @@ -236,7 +251,9 @@ export class TxCreator< return [{} as E, receipt as R]; } - protected async broadcastMetaTx(broadcastData: Record) { + protected async broadcastMetaTx( + broadcastData: Record, + ): Promise { const signer = this.colonyNetwork.getSigner(); const { provider } = signer; @@ -268,12 +285,18 @@ export class TxCreator< ); } - return provider.getTransaction(parsed.data.txHash); + const tx = await provider.getTransaction(parsed.data.txHash); + + if (!tx) { + throw new Error('Could not get transaction from provider'); + } + + return tx; } protected async waitForMetaTx(tx: TransactionResponse) { const receipt = (await tx.wait()) as ParsedLogTransactionReceipt; - receipt.parsedLogs = parseLogs(receipt.logs, this.contract.interface); + receipt.parsedLogs = parseLogs([...receipt.logs], this.contract.interface); return receipt; } @@ -301,6 +324,11 @@ export class TxCreator< const args = await this.getArgs(); return this.contract.interface.encodeFunctionData(this.method, args); }, - } as ColonyTransaction; + } as ColonyTransaction< + ContractTransaction, + E, + ContractTransactionReceipt, + MD + >; } } diff --git a/packages/sdk/src/TxCreator/index.ts b/packages/sdk/src/TxCreator/index.ts index 6e63c28a0..2efd184e3 100644 --- a/packages/sdk/src/TxCreator/index.ts +++ b/packages/sdk/src/TxCreator/index.ts @@ -1,5 +1,4 @@ export { - type BaseContract, type ColonyTransaction, type ColonyMetaTransaction, type EventData, diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index a83f8945a..345700592 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -1,7 +1,8 @@ -export type { ContractReceipt, ContractTransaction } from 'ethers'; -// This is a type and only used for TypeScript compilation -// eslint-disable-next-line import/no-extraneous-dependencies -export type { TransactionResponse } from '@ethersproject/abstract-provider'; +export type { + TransactionReceipt, + TransactionResponse, + ContractTransaction, +} from 'ethers'; export { AnnotationData, diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index 8559a8b97..e57782a3f 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -1,9 +1,4 @@ -import type { - Filter, - FilterByBlockHash, - TransactionReceipt, -} from '@ethersproject/abstract-provider'; -import type { LogDescription } from '@ethersproject/abi'; +import type { LogDescription, TransactionReceipt } from 'ethers'; /** * Custom Transaction receipt for when we manually have to parse logs (metatransactions) @@ -12,21 +7,6 @@ export interface ParsedLogTransactionReceipt extends TransactionReceipt { parsedLogs: LogDescription[]; } -/** - * Ethers 6 supports mulitple addresses in a filter. Until then we have this - */ -export interface Ethers6Filter extends Omit { - address?: string | string[]; -} - -/** - * Ethers 6 supports mulitple addresses in a filter. Until then we have this - */ -export interface Ethers6FilterByBlockHash - extends Omit { - address?: string | string[]; -} - /** * @internal * Type helper. Extracts all parameter types diff --git a/packages/sdk/src/utils.ts b/packages/sdk/src/utils.ts index cfe52e017..8ad970224 100644 --- a/packages/sdk/src/utils.ts +++ b/packages/sdk/src/utils.ts @@ -1,30 +1,33 @@ -import { ContractReceipt } from 'ethers'; - -import type { Log } from '@ethersproject/abstract-provider'; -import type { JsonRpcProvider } from '@ethersproject/providers'; -import type { Interface } from '@ethersproject/abi'; - import { - Ethers6Filter, - Ethers6FilterByBlockHash, - ParsedLogTransactionReceipt, -} from './types.js'; + ContractTransactionReceipt, + EventLog, + Filter, + FilterByBlockHash, + Interface, + Log, + JsonRpcProvider, + Result, +} from 'ethers'; + +import { ParsedLogTransactionReceipt } from './types.js'; /** Extract event args from a contract receipt */ // TODO: Make it possible to retrieve multiple events of the same kind export const extractEvent = ( eventName: string, - receipt: ContractReceipt | ParsedLogTransactionReceipt, + receipt: ContractTransactionReceipt | ParsedLogTransactionReceipt, ): T | undefined => { - if ('events' in receipt && receipt.events) { - const event = receipt.events.find((ev) => ev.event === eventName); + if ('logs' in receipt && receipt.logs) { + const event = receipt.logs.find( + (ev) => ev instanceof EventLog && ev.eventName === eventName, + ) as EventLog | undefined; if (event?.args) { - return event.args as ReadonlyArray & T; + return event.args as Result & T; } } else if ('parsedLogs' in receipt && receipt.parsedLogs) { const event = receipt.parsedLogs.find((ev) => ev.name === eventName); if (event?.args) { - return event.args as ReadonlyArray & T; + return event.args as Result & T; } } return undefined; @@ -33,24 +36,16 @@ export const extractEvent = ( /** Manually extract an event using the interface (e.g. if emitting contract is a different one than the calling contract) */ export const extractCustomEvent = ( eventName: string, - receipt: ContractReceipt | ParsedLogTransactionReceipt, + receipt: ContractTransactionReceipt | ParsedLogTransactionReceipt, iface: Interface, ): T | undefined => { - let events: { data: string; topics: string[] }[]; - if ('events' in receipt && receipt.events) { - events = receipt.events; - } else if ('logs' in receipt && receipt.logs) { - events = receipt.logs; - } else { - events = []; - } - for (let i = 0; i < events.length; i += 1) { + for (let i = 0; i < receipt.logs.length; i += 1) { try { return iface.decodeEventLog( eventName, - events[i].data, - events[i].topics, - ) as ReadonlyArray & T; + receipt.logs[i].data, + receipt.logs[i].topics, + ) as Result & T; } catch (e) { // ignore } @@ -60,10 +55,7 @@ export const extractCustomEvent = ( /** Version of `getLogs` that also supports filtering for multiple addresses */ export const getLogs = async ( - filter: - | Ethers6Filter - | Ethers6FilterByBlockHash - | Promise, + filter: Filter | FilterByBlockHash | Promise, provider: JsonRpcProvider, ): Promise => { const usedFilter = await filter; diff --git a/packages/sdk/tsconfig.json b/packages/sdk/tsconfig.json index ee47bea72..703372a89 100644 --- a/packages/sdk/tsconfig.json +++ b/packages/sdk/tsconfig.json @@ -20,6 +20,7 @@ "skipLibCheck": true, "strictNullChecks": true, "strict": true, + "target": "esnext", "traceResolution": false }, "include": [ diff --git a/packages/tokens/package.json b/packages/tokens/package.json index dc36ec1f2..37f2ccd58 100644 --- a/packages/tokens/package.json +++ b/packages/tokens/package.json @@ -35,9 +35,9 @@ "homepage": "https://docs.colony.io/develop", "scripts": { "build": "npm run clean && npm run compile-cjs && npm run compile-esm && npm run compile-types && npm run create-pkg-json", - "build-contracts": "contractor tokens -o ./src/contracts", + "build-contracts": "contractor tokens -p ethers-v6 -o ./src/contracts", "clean": "rimraf ./dist", - "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2015 --outDir dist/cjs", + "compile-cjs": "tsc -p tsconfig.build.json --module commonjs --target es2020 --outDir dist/cjs", "compile-esm": "tsc -p tsconfig.build.json --module esnext --target es2022 --outDir dist/esm", "compile-types": "tsc -p tsconfig.build.json --target esnext --declaration --emitDeclarationOnly --outDir dist/types", "create-pkg-json": "../../scripts/create-pkg-json.sh", @@ -46,13 +46,11 @@ "prepare": "npm run build-contracts" }, "devDependencies": { - "@colony/core": "^1.2.0-next.2", "@colony/contractor": "^1.1.0-next.2", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "ethers": "^5.7.2" + "@colony/core": "^1.2.0-next.2", + "ethers": "^6.6.7" }, "peerDependencies": { - "ethers": "^5.1.3" + "ethers": "^6" } } diff --git a/packages/tokens/src/clients/TokenClient.ts b/packages/tokens/src/clients/TokenClient.ts index d49fc49de..3e1a86b76 100644 --- a/packages/tokens/src/clients/TokenClient.ts +++ b/packages/tokens/src/clients/TokenClient.ts @@ -1,7 +1,6 @@ +import { ZeroAddress } from 'ethers'; import type { SignerOrProvider } from '@colony/core'; -import { constants } from 'ethers'; - import { ClientType, TokenClientType } from '../constants.js'; import { MetaTxToken__factory as MetaTxTokenFactory, @@ -16,8 +15,6 @@ import { TokenERC2612, } from '../contracts/static/index.js'; -const { AddressZero } = constants; - /** A ColonyToken has special abilities that go beyond the capabilities of an ERC20 token */ export interface ColonyTokenClient extends MetaTxToken { clientType: ClientType.TokenClient; @@ -93,14 +90,14 @@ const getTokenClient = async ( } try { - await tokenClient.getMetatransactionNonce(AddressZero); + await tokenClient.getMetatransactionNonce(ZeroAddress); } catch { isMetaTxToken = false; } try { // NOTE: Casting will be unnecessary when MetaTxToken supports "nonces" - await (tokenClient as unknown as Erc2612TokenClient).nonces(AddressZero); + await (tokenClient as unknown as Erc2612TokenClient).nonces(ZeroAddress); } catch { isEip2612Token = false; } diff --git a/packages/tokens/src/index.ts b/packages/tokens/src/index.ts index 09af6cdab..bdc6688f2 100644 --- a/packages/tokens/src/index.ts +++ b/packages/tokens/src/index.ts @@ -1,4 +1,4 @@ -import { constants, providers } from 'ethers'; +import { AbstractProvider, ZeroAddress } from 'ethers'; import { TokenERC20__factory as TokenERC20Factory, @@ -6,22 +6,20 @@ import { TokenERC721__factory as TokenERC721Factory, } from './contracts/static/index.js'; -const { AddressZero } = constants; - // Initialize dummy ethers contracts in order to get their (typed) interfaces export const ERC20 = TokenERC20Factory.connect( - AddressZero, - new providers.BaseProvider(3656691), + ZeroAddress, + new AbstractProvider(), ).interface; export const ERC721 = TokenERC721Factory.connect( - AddressZero, - new providers.BaseProvider(3656691), + ZeroAddress, + new AbstractProvider(3656691), ).interface; export const ERC2612 = TokenERC2612Factory.connect( - AddressZero, - new providers.BaseProvider(3656691), + ZeroAddress, + new AbstractProvider(3656691), ).interface; // Some nice aliases for the important token factories diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fe3691a77..41be289f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,11 +3,10 @@ lockfileVersion: '6.0' importers: .: - dependencies: + devDependencies: '@changesets/cli': specifier: ^2.26.1 version: 2.26.1 - devDependencies: '@colony/eslint-config-colony': specifier: ^9.2.0 version: 9.2.0(eslint-config-airbnb-base@15.0.0)(eslint-config-prettier@8.8.0)(eslint-plugin-eslint-comments@3.2.0)(eslint-plugin-import@2.27.5)(eslint-plugin-prettier@4.2.1)(eslint@8.39.0)(prettier@2.8.8) @@ -109,10 +108,10 @@ importers: version: 1.0.1 '@typechain/ethers-v5': specifier: ^11.1.0 - version: 11.1.0(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(typechain@8.3.0)(typescript@5.0.4) + version: 11.1.0(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.3.0)(typescript@5.0.4) '@typechain/ethers-v6': - specifier: ^0.4.2 - version: 0.4.2(typechain@8.3.0)(typescript@5.0.4) + specifier: link:../../../TypeChain/packages/target-ethers-v6 + version: link:../../../TypeChain/packages/target-ethers-v6 '@types/mkdirp': specifier: ^1.0.2 version: 1.0.2 @@ -148,18 +147,9 @@ importers: '@colony/contractor': specifier: 1.1.0-next.2 version: link:../contractor - '@ethersproject/abi': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/abstract-provider': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/providers': - specifier: ^5.7.2 - version: 5.7.2 ethers: - specifier: ^5.7.2 - version: 5.7.2 + specifier: ^6.6.7 + version: 6.6.7 packages/event-metadata: dependencies: @@ -169,7 +159,7 @@ importers: devDependencies: ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@5.0.4) + version: 10.9.1(@types/node@18.15.13)(typescript@5.0.4) ts-patch: specifier: ^2.1.0 version: 2.1.0(typescript@5.0.4) @@ -179,15 +169,9 @@ importers: '@colony/contractor': specifier: ^1.1.0-next.2 version: link:../contractor - '@ethersproject/abi': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/providers': - specifier: ^5.7.2 - version: 5.7.2 ethers: - specifier: ^5.7.2 - version: 5.7.2 + specifier: ^6.6.7 + version: 6.6.7 packages/sdk: dependencies: @@ -214,7 +198,7 @@ importers: version: 16.6.0 isomorphic-ws: specifier: ^4.0.1 - version: 4.0.1(ws@7.5.9) + version: 4.0.1(ws@8.5.0) subscriptions-transport-ws: specifier: ^0.11.0 version: 0.11.0(graphql@16.6.0) @@ -225,18 +209,6 @@ importers: '@colony/events': specifier: ^0.2.1-next.1 version: link:../events - '@ethersproject/abi': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/abstract-provider': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/abstract-signer': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/providers': - specifier: ^5.7.2 - version: 5.7.2 '@picocss/pico': specifier: ^1.5.7 version: 1.5.10 @@ -256,8 +228,8 @@ importers: specifier: ^0.14.27 version: 0.14.54 ethers: - specifier: ^5.7.1 - version: 5.7.2 + specifier: ^6.6.7 + version: 6.6.7 fast-glob: specifier: ^3.2.11 version: 3.2.12 @@ -291,18 +263,16 @@ importers: '@colony/core': specifier: ^1.2.0-next.2 version: link:../core - '@ethersproject/abi': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/providers': - specifier: ^5.7.2 - version: 5.7.2 ethers: - specifier: ^5.7.2 - version: 5.7.2 + specifier: ^6.6.7 + version: 6.6.7 packages: + /@adraffy/ens-normalize@1.9.2: + resolution: {integrity: sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==} + dev: true + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -316,6 +286,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 + dev: true /@babel/compat-data@7.21.4: resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} @@ -439,6 +410,7 @@ packages: /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} @@ -463,6 +435,7 @@ packages: '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true /@babel/parser@7.21.4: resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} @@ -606,7 +579,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 - dev: false + dev: true /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} @@ -664,7 +637,7 @@ packages: prettier: 2.8.8 resolve-from: 5.0.0 semver: 5.7.1 - dev: false + dev: true /@changesets/assemble-release-plan@5.2.3: resolution: {integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==} @@ -675,13 +648,13 @@ packages: '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 semver: 5.7.1 - dev: false + dev: true /@changesets/changelog-git@0.1.14: resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} dependencies: '@changesets/types': 5.2.1 - dev: false + dev: true /@changesets/cli@2.26.1: resolution: {integrity: sha512-XnTa+b51vt057fyAudvDKGB0Sh72xutQZNAdXkCqPBKO2zvs2yYZx5hFZj1u9cbtpwM6Sxtcr02/FQJfZOzemQ==} @@ -720,7 +693,7 @@ packages: spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.2.1 - dev: false + dev: true /@changesets/config@2.3.0: resolution: {integrity: sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==} @@ -732,13 +705,13 @@ packages: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.5 - dev: false + dev: true /@changesets/errors@0.1.4: resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} dependencies: extendable-error: 0.1.7 - dev: false + dev: true /@changesets/get-dependents-graph@1.3.5: resolution: {integrity: sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==} @@ -748,7 +721,7 @@ packages: chalk: 2.4.2 fs-extra: 7.0.1 semver: 5.7.1 - dev: false + dev: true /@changesets/get-release-plan@3.0.16: resolution: {integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==} @@ -760,11 +733,11 @@ packages: '@changesets/read': 0.5.9 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 - dev: false + dev: true /@changesets/get-version-range-type@0.3.2: resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} - dev: false + dev: true /@changesets/git@2.0.0: resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} @@ -776,20 +749,20 @@ packages: is-subdir: 1.2.0 micromatch: 4.0.5 spawndamnit: 2.0.0 - dev: false + dev: true /@changesets/logger@0.0.5: resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} dependencies: chalk: 2.4.2 - dev: false + dev: true /@changesets/parse@0.3.16: resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} dependencies: '@changesets/types': 5.2.1 js-yaml: 3.14.1 - dev: false + dev: true /@changesets/pre@1.0.14: resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} @@ -799,7 +772,7 @@ packages: '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - dev: false + dev: true /@changesets/read@0.5.9: resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} @@ -812,15 +785,15 @@ packages: chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 - dev: false + dev: true /@changesets/types@4.1.0: resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: false + dev: true /@changesets/types@5.2.1: resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} - dev: false + dev: true /@changesets/write@0.2.3: resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} @@ -830,7 +803,7 @@ packages: fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 - dev: false + dev: true /@colony/abis@1.0.1: resolution: {integrity: sha512-fbEy+PLJu2LXEXAECgj/rBGFJSV0TruI1K7b6kKpTYpZPGx7BlYLWHuYy4MiTf4u8S5sTzsQnIk5y7BfCLnMqA==} @@ -993,7 +966,6 @@ packages: '@ethersproject/logger': 5.7.0 '@ethersproject/properties': 5.7.0 '@ethersproject/transactions': 5.7.0 - dev: true /@ethersproject/hash@5.7.0: resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} @@ -1023,7 +995,6 @@ packages: '@ethersproject/strings': 5.7.0 '@ethersproject/transactions': 5.7.0 '@ethersproject/wordlists': 5.7.0 - dev: true /@ethersproject/json-wallets@5.7.0: resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} @@ -1041,7 +1012,6 @@ packages: '@ethersproject/transactions': 5.7.0 aes-js: 3.0.0 scrypt-js: 3.0.1 - dev: true /@ethersproject/keccak256@5.7.0: resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} @@ -1062,7 +1032,6 @@ packages: dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/sha2': 5.7.0 - dev: true /@ethersproject/properties@5.7.0: resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} @@ -1134,7 +1103,6 @@ packages: '@ethersproject/logger': 5.7.0 '@ethersproject/sha2': 5.7.0 '@ethersproject/strings': 5.7.0 - dev: true /@ethersproject/strings@5.7.0: resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} @@ -1162,7 +1130,6 @@ packages: '@ethersproject/bignumber': 5.7.0 '@ethersproject/constants': 5.7.0 '@ethersproject/logger': 5.7.0 - dev: true /@ethersproject/wallet@5.7.0: resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} @@ -1182,7 +1149,6 @@ packages: '@ethersproject/signing-key': 5.7.0 '@ethersproject/transactions': 5.7.0 '@ethersproject/wordlists': 5.7.0 - dev: true /@ethersproject/web@5.7.1: resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} @@ -1201,7 +1167,6 @@ packages: '@ethersproject/logger': 5.7.0 '@ethersproject/properties': 5.7.0 '@ethersproject/strings': 5.7.0 - dev: true /@graphql-typed-document-node/core@3.2.0(graphql@16.6.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} @@ -1252,7 +1217,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -1273,14 +1238,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.15.11) + jest-config: 29.5.0(@types/node@18.15.13) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -1307,7 +1272,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 jest-mock: 29.5.0 dev: true @@ -1334,7 +1299,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.15.11 + '@types/node': 18.15.13 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -1367,7 +1332,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 18.15.11 + '@types/node': 18.15.13 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -1454,7 +1419,7 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.11 + '@types/node': 18.15.13 '@types/yargs': 17.0.24 chalk: 4.1.2 @@ -1511,7 +1476,7 @@ packages: '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - dev: false + dev: true /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} @@ -1522,7 +1487,7 @@ packages: fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - dev: false + dev: true /@microsoft/tsdoc-config@0.16.2: resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} @@ -1554,16 +1519,26 @@ packages: uuid: 7.0.3 dev: false + /@noble/hashes@1.1.2: + resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} + dev: true + + /@noble/secp256k1@1.7.1: + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + dev: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} + dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -1571,6 +1546,7 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + dev: true /@picocss/pico@1.5.10: resolution: {integrity: sha512-+LafMsrwPxXQMk6sI///TmSInCwwZmq+K7SikyL3N/4GhhwzyPC+TQLUEqmrLyjluR+uIpFFcqjty30Rtr6GxQ==} @@ -1613,7 +1589,7 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@typechain/ethers-v5@11.1.0(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(typechain@8.3.0)(typescript@5.0.4): + /@typechain/ethers-v5@11.1.0(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.3.0)(typescript@5.0.4): resolution: {integrity: sha512-7P+fLol3faUi/WPFwUo9tfo+IHSsvMBvSM/ECNU9mFHcF8eFI84ygauCdwPgP41k8bhsPb29XhwZiYDTUDXU8Q==} peerDependencies: '@ethersproject/abi': ^5.0.0 @@ -1624,19 +1600,7 @@ packages: dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/providers': 5.7.2 - lodash: 4.17.21 - ts-essentials: 7.0.3(typescript@5.0.4) - typechain: 8.3.0(typescript@5.0.4) - typescript: 5.0.4 - dev: false - - /@typechain/ethers-v6@0.4.2(typechain@8.3.0)(typescript@5.0.4): - resolution: {integrity: sha512-LPC4BBknGkWGR1TLM0d19zZ9/iXIyp2tf6+TDYMYCSbxoaP0F3jNvKVMboU1gDfr2MHaPB+fE/7ExLQ5t9RDwg==} - peerDependencies: - ethers: 6.x - typechain: ^8.3.0 - typescript: '>=4.7.0' - dependencies: + ethers: 5.7.2 lodash: 4.17.21 ts-essentials: 7.0.3(typescript@5.0.4) typechain: 8.3.0(typescript@5.0.4) @@ -1675,7 +1639,7 @@ packages: /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.13 /@types/inquirer@8.2.6: resolution: {integrity: sha512-3uT88kxg8lNzY8ay2ZjP44DKcRaTGztqeIvN2zHvhzIBH/uAPaL75aBtdNRKbA7xXoMbBt5kX0M00VKAnfOYlA==} @@ -1688,7 +1652,7 @@ packages: resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} dependencies: ci-info: 3.8.0 - dev: false + dev: true /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} @@ -1720,7 +1684,7 @@ packages: /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - dev: false + dev: true /@types/mkdirp@1.0.2: resolution: {integrity: sha512-o0K1tSO0Dx5X6xlU5F1D6625FawhC3dU3iqr25lluNv/+/QIVH8RLNEiVokgIZo+mz+87w/3Mkg/VvQS+J51fQ==} @@ -1730,21 +1694,24 @@ packages: /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: false + dev: true /@types/node@18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} + /@types/node@18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - dev: false + dev: true /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} /@types/semver@6.2.3: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} - dev: false + dev: true /@types/semver@7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} @@ -1757,7 +1724,7 @@ packages: /@types/through@0.0.30: resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.13 dev: true /@types/ws@8.5.4: @@ -1935,6 +1902,9 @@ packages: /aes-js@3.0.0: resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + /aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} dev: true /aggregate-error@3.1.0: @@ -1957,7 +1927,7 @@ packages: /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - dev: false + dev: true /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -2014,6 +1984,7 @@ packages: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 + dev: true /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -2034,6 +2005,7 @@ packages: dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 + dev: true /array-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} @@ -2053,6 +2025,7 @@ packages: /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + dev: true /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} @@ -2062,6 +2035,7 @@ packages: define-properties: 1.2.0 es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 + dev: true /array.prototype.flatmap@1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} @@ -2076,7 +2050,7 @@ packages: /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} - dev: false + dev: true /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -2086,6 +2060,7 @@ packages: /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + dev: true /babel-jest@29.5.0(@babel/core@7.21.4): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} @@ -2177,7 +2152,7 @@ packages: engines: {node: '>=4'} dependencies: is-windows: 1.0.2 - dev: false + dev: true /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -2213,7 +2188,7 @@ packages: resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==} dependencies: wcwidth: 1.0.1 - dev: false + dev: true /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -2256,6 +2231,7 @@ packages: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 + dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -2269,11 +2245,12 @@ packages: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 - dev: false + dev: true /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} + dev: true /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} @@ -2360,7 +2337,7 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: false + dev: true /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -2483,7 +2460,7 @@ packages: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 - dev: false + dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -2495,15 +2472,15 @@ packages: /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - dev: false + dev: true /csv-parse@4.16.3: resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - dev: false + dev: true /csv-stringify@5.6.5: resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - dev: false + dev: true /csv@5.5.3: resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} @@ -2513,7 +2490,7 @@ packages: csv-parse: 4.16.3 csv-stringify: 5.6.5 stream-transform: 2.1.3 - dev: false + dev: true /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} @@ -2543,12 +2520,12 @@ packages: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: false + dev: true /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - dev: false + dev: true /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} @@ -2579,11 +2556,12 @@ packages: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + dev: true /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - dev: false + dev: true /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} @@ -2605,6 +2583,7 @@ packages: engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: true /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} @@ -2661,12 +2640,13 @@ packages: engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 - dev: false + dev: true /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: true /es-abstract@1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} @@ -2706,6 +2686,7 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.9 + dev: true /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} @@ -2714,11 +2695,13 @@ packages: get-intrinsic: 1.2.0 has: 1.0.3 has-tostringtag: 1.0.0 + dev: true /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: has: 1.0.3 + dev: true /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -2727,6 +2710,7 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 + dev: true /esbuild-android-64@0.14.54: resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} @@ -3235,6 +3219,21 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate + + /ethers@6.6.7: + resolution: {integrity: sha512-1SdT3W5/IPAcx9l5/+9qKRYR/iqVIdNQIct18yeh+XvN+I4RK44mvOsAerMwJYCAwdQfsOgf3OkfozeuMInbtQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.9.2 + '@noble/hashes': 1.1.2 + '@noble/secp256k1': 1.7.1 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: true /eventemitter3@3.1.2: @@ -3289,7 +3288,7 @@ packages: /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: false + dev: true /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -3316,6 +3315,7 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 + dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -3329,6 +3329,7 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 + dev: true /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -3371,6 +3372,7 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + dev: true /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -3378,13 +3380,14 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + dev: true /find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 - dev: false + dev: true /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} @@ -3402,6 +3405,7 @@ packages: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 + dev: true /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -3417,7 +3421,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: false /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} @@ -3426,7 +3429,7 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: false + dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -3449,9 +3452,11 @@ packages: define-properties: 1.2.0 es-abstract: 1.21.2 functions-have-names: 1.2.3 + dev: true /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -3468,6 +3473,7 @@ packages: function-bind: 1.1.1 has: 1.0.3 has-symbols: 1.0.3 + dev: true /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -3485,12 +3491,14 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 + dev: true /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: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} @@ -3570,6 +3578,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 + dev: true /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -3581,17 +3590,20 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 + dev: true /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 + dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true /graphql@16.6.0: resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} @@ -3614,10 +3626,11 @@ packages: /hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} - dev: false + dev: true /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -3636,20 +3649,24 @@ packages: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 + dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} + dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + dev: true /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} @@ -3672,7 +3689,7 @@ packages: /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: false + dev: true /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -3680,7 +3697,7 @@ packages: /human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: false + dev: true /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -3710,6 +3727,7 @@ packages: /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + dev: true /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -3736,6 +3754,7 @@ packages: /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + dev: true /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -3777,6 +3796,7 @@ packages: get-intrinsic: 1.2.0 has: 1.0.3 side-channel: 1.0.4 + dev: true /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} @@ -3789,14 +3809,17 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.0 is-typed-array: 1.1.10 + dev: true /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 + dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -3804,17 +3827,19 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 + dev: true /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + dev: true /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: ci-info: 3.8.0 - dev: false + dev: true /is-core-module@2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} @@ -3826,10 +3851,12 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 + dev: true /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + dev: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -3850,6 +3877,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: true /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} @@ -3858,12 +3886,14 @@ packages: /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} + dev: true /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 + dev: true /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} @@ -3877,7 +3907,7 @@ packages: /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - dev: false + dev: true /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} @@ -3885,11 +3915,13 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 + dev: true /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 + dev: true /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} @@ -3906,19 +3938,21 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 + dev: true /is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} dependencies: better-path-resolve: 1.0.0 - dev: false + dev: true /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true /is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} @@ -3929,6 +3963,7 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 + dev: true /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} @@ -3938,21 +3973,22 @@ packages: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 + dev: true /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - dev: false + dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /isomorphic-ws@4.0.1(ws@7.5.9): + /isomorphic-ws@4.0.1(ws@8.5.0): resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: ws: '*' dependencies: - ws: 7.5.9 + ws: 8.5.0 dev: false /istanbul-lib-coverage@3.2.0: @@ -4029,7 +4065,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -4066,7 +4102,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@18.15.11) + jest-config: 29.5.0(@types/node@18.15.13) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -4077,7 +4113,7 @@ packages: - ts-node dev: true - /jest-config@29.5.0(@types/node@18.15.11): + /jest-config@29.5.0(@types/node@18.15.13): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4092,7 +4128,7 @@ packages: '@babel/core': 7.21.4 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 babel-jest: 29.5.0(@babel/core@7.21.4) chalk: 4.1.2 ci-info: 3.8.0 @@ -4151,7 +4187,7 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 jest-mock: 29.5.0 jest-util: 29.5.0 dev: true @@ -4166,7 +4202,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.11 + '@types/node': 18.15.13 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -4216,7 +4252,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 jest-util: 29.5.0 dev: true @@ -4268,7 +4304,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4299,7 +4335,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -4354,7 +4390,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -4377,7 +4413,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.13 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -4389,7 +4425,7 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.13 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -4427,6 +4463,7 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -4434,6 +4471,7 @@ packages: dependencies: argparse: 1.0.10 esprima: 4.0.1 + dev: true /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} @@ -4450,6 +4488,7 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -4480,11 +4519,11 @@ packages: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 - dev: false /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + dev: true /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} @@ -4494,7 +4533,7 @@ packages: /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - dev: false + dev: true /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} @@ -4515,6 +4554,7 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true /lint-staged@13.2.1: resolution: {integrity: sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==} @@ -4566,19 +4606,21 @@ packages: js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: false + dev: true /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: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 + dev: true /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -4594,7 +4636,7 @@ packages: /lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: false + dev: true /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -4621,7 +4663,7 @@ packages: dependencies: pseudomap: 1.0.2 yallist: 2.1.2 - dev: false + dev: true /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -4663,12 +4705,12 @@ packages: /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} - dev: false + dev: true /map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} - dev: false + dev: true /marked@4.3.0: resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} @@ -4691,7 +4733,7 @@ packages: trim-newlines: 3.0.1 type-fest: 0.13.1 yargs-parser: 18.1.3 - dev: false + dev: true /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4699,6 +4741,7 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + dev: true /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -4719,7 +4762,7 @@ packages: /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - dev: false + dev: true /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -4752,7 +4795,7 @@ packages: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: false + dev: true /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -4765,7 +4808,7 @@ packages: /mixme@0.5.9: resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} engines: {node: '>= 8.0.0'} - dev: false + dev: true /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -4821,7 +4864,7 @@ packages: resolve: 1.22.2 semver: 5.7.1 validate-npm-package-license: 3.0.4 - dev: false + dev: true /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -4843,10 +4886,12 @@ packages: /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + dev: true /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} @@ -4856,6 +4901,7 @@ packages: define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 + dev: true /object.entries@1.1.6: resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} @@ -4925,43 +4971,47 @@ packages: /outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: false + dev: true /p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} dependencies: p-map: 2.1.0 - dev: false + dev: true /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: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true /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: 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: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} - dev: false + dev: true /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} @@ -4973,6 +5023,7 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + dev: true /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -4989,10 +5040,12 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: true /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + dev: true /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -5020,6 +5073,7 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + dev: true /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -5038,7 +5092,7 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - dev: false + dev: true /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} @@ -5050,6 +5104,7 @@ packages: engines: {node: '>=8'} dependencies: find-up: 4.1.0 + dev: true /preferred-pm@3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} @@ -5059,7 +5114,7 @@ packages: find-yarn-workspace-root2: 1.2.16 path-exists: 4.0.0 which-pm: 2.0.0 - dev: false + dev: true /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -5102,7 +5157,7 @@ packages: /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: false + dev: true /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} @@ -5115,11 +5170,12 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} - dev: false + dev: true /randexp@0.5.3: resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==} @@ -5139,7 +5195,7 @@ packages: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: false + dev: true /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} @@ -5149,7 +5205,7 @@ packages: normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: false + dev: true /read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} @@ -5159,7 +5215,7 @@ packages: js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: false + dev: true /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -5182,7 +5238,7 @@ packages: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: false + dev: true /reduce-flatten@2.0.0: resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} @@ -5191,7 +5247,7 @@ packages: /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: false + dev: true /regexp.prototype.flags@1.5.0: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} @@ -5200,6 +5256,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 functions-have-names: 1.2.3 + dev: true /repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} @@ -5212,7 +5269,7 @@ packages: /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: false + dev: true /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} @@ -5229,6 +5286,7 @@ packages: /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + dev: true /resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} @@ -5264,6 +5322,7 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true /rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} @@ -5291,6 +5350,7 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} @@ -5306,18 +5366,18 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.0 is-regex: 1.1.4 + dev: true /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} /scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - dev: true /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true - dev: false + dev: true /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} @@ -5334,14 +5394,14 @@ packages: /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: false + dev: true /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 - dev: false + dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -5352,7 +5412,7 @@ packages: /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - dev: false + dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} @@ -5383,6 +5443,7 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.0 object-inspect: 1.12.3 + dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -5436,7 +5497,7 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 15.4.1 - dev: false + dev: true /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -5455,32 +5516,33 @@ packages: dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 - dev: false + dev: true /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.13 - dev: false + dev: true /spdx-exceptions@2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: false + dev: true /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 - dev: false + dev: true /spdx-license-ids@3.0.13: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} - dev: false + dev: true /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} @@ -5493,7 +5555,7 @@ packages: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: mixme: 0.5.9 - dev: false + dev: true /string-argv@0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} @@ -5536,6 +5598,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 + dev: true /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} @@ -5543,6 +5606,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 + dev: true /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} @@ -5550,6 +5614,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 + dev: true /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -5572,6 +5637,7 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + dev: true /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} @@ -5593,7 +5659,7 @@ packages: engines: {node: '>=8'} dependencies: min-indent: 1.0.1 - dev: false + dev: true /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -5657,7 +5723,7 @@ packages: /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - dev: false + dev: true /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} @@ -5702,7 +5768,7 @@ packages: /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} - dev: false + dev: true /ts-command-line-args@2.5.0(typescript@5.0.4): resolution: {integrity: sha512-Ff7Xt04WWCjj/cmPO9eWTJX3qpBZWuPWyQYG1vnxJao+alWWYjwJBc5aYz3h5p5dE08A6AnpkgiCtP/0KXXBYw==} @@ -5798,6 +5864,37 @@ packages: yn: 3.1.1 dev: true + /ts-node@10.9.1(@types/node@18.15.13)(typescript@5.0.4): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.15.13 + acorn: 8.8.2 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.0.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-patch@2.1.0(typescript@5.0.4): resolution: {integrity: sha512-+6LbQSGgHUnK+grgk9nvKhesc0/dDNxms0IL1XPZeTfmPFCx/QSuwz9k+9yFe0xYDD7xBlHYK0Zp0qrTCaJcAw==} hasBin: true @@ -5827,6 +5924,10 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true + /tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: true + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} @@ -5852,7 +5953,7 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 17.7.1 - dev: false + dev: true /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -5869,7 +5970,7 @@ packages: /type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - dev: false + dev: true /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} @@ -5883,12 +5984,12 @@ packages: /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} - dev: false + dev: true /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - dev: false + dev: true /typechain@8.3.0(typescript@5.0.4): resolution: {integrity: sha512-AxtAYyOA7f2p28/JkcqrF+gnzam94VNTIbXcaUKodkrKzMX6P/XqBaP6d/OPuBZOi0WgOOmkg1zOSojX8uGkOg==} @@ -5919,6 +6020,7 @@ packages: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.10 + dev: true /typedoc-plugin-markdown@3.15.3(typedoc@0.24.8): resolution: {integrity: sha512-idntFYu3vfaY3eaD+w9DeRd0PmNGqGuNLKihPU9poxFGnATJYGn9dPtEhn2QrTdishFMg7jPXAhos+2T6YCWRQ==} @@ -5986,11 +6088,11 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + dev: true /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - dev: false /update-browserslist-db@1.0.11(browserslist@4.21.5): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} @@ -6035,7 +6137,7 @@ packages: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: false + dev: true /vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} @@ -6074,10 +6176,11 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 + dev: true /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: false + dev: true /which-pm@2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} @@ -6085,7 +6188,7 @@ packages: dependencies: load-yaml-file: 0.2.0 path-exists: 4.0.0 - dev: false + dev: true /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} @@ -6097,12 +6200,14 @@ packages: gopd: 1.0.1 has-tostringtag: 1.0.0 is-typed-array: 1.1.10 + dev: true /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 + dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -6138,6 +6243,7 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -6183,9 +6289,21 @@ packages: optional: true dev: false + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: false + dev: true /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} @@ -6193,7 +6311,7 @@ packages: /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: false + dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -6214,7 +6332,7 @@ packages: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: false + dev: true /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} @@ -6235,7 +6353,7 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: false + dev: true /yargs@17.7.1: resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} @@ -6257,6 +6375,7 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + dev: true settings: autoInstallPeers: true