From 4a328db27aa1d576b8e7ac0fe5de98bffdf865e4 Mon Sep 17 00:00:00 2001 From: Denis Pingin <2085934+denis-pingin@users.noreply.github.com> Date: Thu, 11 May 2023 12:23:08 +0200 Subject: [PATCH 1/6] chore: use new GelatoRelayERC2771 and GelatoRelay1BalanceERC2771 contracts (#25) --- package.json | 32 +- src/constants/index.ts | 9 +- src/index.ts | 17 +- .../erc2771/callWithSyncFeeERC2771/index.ts | 25 +- .../index.ts | 1 + .../erc2771/getSignatureDataERC2771/index.ts | 20 +- src/lib/erc2771/sponsoredCallERC2771/index.ts | 23 +- .../index.ts | 1 + src/lib/erc2771/utils/getPayloadToSign.ts | 5 +- src/lib/erc2771/utils/mapRequestToStruct.ts | 2 + src/lib/types/index.ts | 3 + src/utils/eip712.ts | 43 +- src/utils/getProviderChainId.ts | 18 + src/utils/getUserNonce.ts | 13 +- src/utils/index.ts | 3 + src/utils/isZkSync.ts | 3 + src/utils/populateOptionalUserParameters.ts | 5 +- src/utils/relayAddress.ts | 30 + yarn.lock | 1258 ++++++++++------- 19 files changed, 967 insertions(+), 544 deletions(-) create mode 100644 src/utils/getProviderChainId.ts create mode 100644 src/utils/isZkSync.ts create mode 100644 src/utils/relayAddress.ts diff --git a/package.json b/package.json index e825aa1..968660b 100644 --- a/package.json +++ b/package.json @@ -18,24 +18,24 @@ "author": "", "license": "ISC", "devDependencies": { - "@tsconfig/recommended": "1.0.1", - "@types/node": "16.11.12", - "@typescript-eslint/eslint-plugin": "^5.30.0", - "@typescript-eslint/parser": "^5.30.0", - "dotenv": "^16.0.2", - "eslint": "^8.18.0", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.1.3", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-prettier": "^4.1.0", - "husky": "^8.0.1", - "lint-staged": "^13.0.3", - "minimize-js": "^1.3.0", - "prettier": "^2.7.1", - "typescript": "4.5.3" + "@tsconfig/recommended": "1.0.2", + "@types/node": "16.18.25", + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "dotenv": "^16.0.3", + "eslint": "^8.39.0", + "eslint-config-prettier": "^8.8.0", + "eslint-import-resolver-typescript": "^3.5.5", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-prettier": "^4.2.1", + "husky": "^8.0.3", + "lint-staged": "^13.2.2", + "minimize-js": "^1.3.1", + "prettier": "^2.8.8", + "typescript": "5.0.4" }, "dependencies": { - "axios": "0.24.0", + "axios": "1.4.0", "ethers": "5.7.2" }, "lint-staged": { diff --git a/src/constants/index.ts b/src/constants/index.ts index ca816f5..c47ad5d 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -10,4 +10,11 @@ export const USER_NONCE_ABI = [ ]; export const GELATO_RELAY_ERC2771_ADDRESS = - "0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d"; + "0xb539068872230f20456CF38EC52EF2f91AF4AE49"; +export const GELATO_RELAY_1BALANCE_ERC2771_ADDRESS = + "0xd8253782c45a12053594b9deB72d8e8aB2Fca54c"; + +export const GELATO_RELAY_ERC2771_ZKSYNC_ADDRESS = + "0x22DCC39b2AC376862183dd35A1664798dafC7Da6"; +export const GELATO_RELAY_1BALANCE_ERC2771_ZKSYNC_ADDRESS = + "0x97015cD4C3d456997DD1C40e2a18c79108FCc412"; diff --git a/src/index.ts b/src/index.ts index eabd418..69cf677 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,7 +16,13 @@ import { RelayRequestOptions, RelayResponse, } from "./lib/types"; -import { GELATO_RELAY_ERC2771_ADDRESS, GELATO_RELAY_URL } from "./constants"; +import { + GELATO_RELAY_1BALANCE_ERC2771_ADDRESS, + GELATO_RELAY_1BALANCE_ERC2771_ZKSYNC_ADDRESS, + GELATO_RELAY_ERC2771_ADDRESS, + GELATO_RELAY_ERC2771_ZKSYNC_ADDRESS, + GELATO_RELAY_URL, +} from "./constants"; export { CallWithSyncFeeRequest, @@ -51,6 +57,15 @@ export class GelatoRelay { contract: { relayERC2771: config?.contract?.relayERC2771 ?? GELATO_RELAY_ERC2771_ADDRESS, + relay1BalanceERC2771: + config?.contract?.relay1BalanceERC2771 ?? + GELATO_RELAY_1BALANCE_ERC2771_ADDRESS, + relayERC2771zkSync: + config?.contract?.relayERC2771zkSync ?? + GELATO_RELAY_ERC2771_ZKSYNC_ADDRESS, + relay1BalanceERC2771zkSync: + config?.contract?.relay1BalanceERC2771zkSync ?? + GELATO_RELAY_1BALANCE_ERC2771_ZKSYNC_ADDRESS, }, }; }; diff --git a/src/lib/erc2771/callWithSyncFeeERC2771/index.ts b/src/lib/erc2771/callWithSyncFeeERC2771/index.ts index 271552a..95429bb 100644 --- a/src/lib/erc2771/callWithSyncFeeERC2771/index.ts +++ b/src/lib/erc2771/callWithSyncFeeERC2771/index.ts @@ -1,6 +1,7 @@ import { ethers } from "ethers"; import { + getProviderChainId, isWallet, populateOptionalUserParameters, post, @@ -37,29 +38,41 @@ export const relayWithCallWithSyncFeeERC2771 = async ( if (!walletOrProvider.provider) { throw new Error(`Missing provider`); } - const isSupported = await isNetworkSupported( - { chainId: Number(request.chainId) }, - config - ); + + const chainId = Number(request.chainId); + const isSupported = await isNetworkSupported({ chainId }, config); if (!isSupported) { throw new Error(`Chain id [${request.chainId}] is not supported`); } + + const providerChainId = await getProviderChainId(walletOrProvider); + if (chainId !== providerChainId) { + throw new Error( + `Request and provider chain id mismatch. Request: [${chainId}], provider: [${providerChainId}]` + ); + } + const { isRelayContext, feeToken, ...callWithSyncFeeRequest } = request; + + const type = ERC2771Type.CallWithSyncFee; + const parametersToOverride = await populateOptionalUserParameters< CallWithERC2771Request, CallWithERC2771RequestOptionalParameters - >({ request: callWithSyncFeeRequest, walletOrProvider }, config); + >({ request: callWithSyncFeeRequest, type, walletOrProvider }, config); + const struct = await mapRequestToStruct( callWithSyncFeeRequest, parametersToOverride ); + const signature = await signTypedDataV4( walletOrProvider, callWithSyncFeeRequest.user as string, getPayloadToSign( { struct, - type: ERC2771Type.CallWithSyncFee, + type, isWallet: isWallet(walletOrProvider), }, config diff --git a/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts b/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts index 896c4ed..aa592f1 100644 --- a/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts +++ b/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts @@ -20,6 +20,7 @@ export const callWithSyncFeeERC2771WithSignature = async ( ): Promise => { try { const { signature, struct, syncFeeParams, options } = payload; + const isSupported = await isNetworkSupported( { chainId: Number(struct.chainId) }, config diff --git a/src/lib/erc2771/getSignatureDataERC2771/index.ts b/src/lib/erc2771/getSignatureDataERC2771/index.ts index 227bdc0..9b46224 100644 --- a/src/lib/erc2771/getSignatureDataERC2771/index.ts +++ b/src/lib/erc2771/getSignatureDataERC2771/index.ts @@ -1,6 +1,7 @@ import { ethers } from "ethers"; import { + getProviderChainId, isWallet, populateOptionalUserParameters, signTypedDataV4, @@ -28,19 +29,27 @@ export const getSignatureDataERC2771 = async ( if (!walletOrProvider.provider) { throw new Error(`Missing provider`); } - const isSupported = await isNetworkSupported( - { chainId: Number(request.chainId) }, - config - ); + + const chainId = Number(request.chainId); + const isSupported = await isNetworkSupported({ chainId }, config); if (!isSupported) { throw new Error(`Chain id [${request.chainId}] is not supported`); } + const providerChainId = await getProviderChainId(walletOrProvider); + if (chainId !== providerChainId) { + throw new Error( + `Request and provider chain id mismatch. Request: [${chainId}], provider: [${providerChainId}]` + ); + } + const parametersToOverride = await populateOptionalUserParameters< CallWithERC2771Request, CallWithERC2771RequestOptionalParameters - >({ request, walletOrProvider }, config); + >({ request, type, walletOrProvider }, config); + const struct = await mapRequestToStruct(request, parametersToOverride); + const signature = await signTypedDataV4( walletOrProvider, request.user as string, @@ -49,6 +58,7 @@ export const getSignatureDataERC2771 = async ( config ) ); + return { struct, signature, diff --git a/src/lib/erc2771/sponsoredCallERC2771/index.ts b/src/lib/erc2771/sponsoredCallERC2771/index.ts index 7c55689..518125f 100644 --- a/src/lib/erc2771/sponsoredCallERC2771/index.ts +++ b/src/lib/erc2771/sponsoredCallERC2771/index.ts @@ -1,6 +1,7 @@ import { ethers } from "ethers"; import { + getProviderChainId, isWallet, populateOptionalUserParameters, post, @@ -49,26 +50,36 @@ const sponsoredCallERC2771 = async ( if (!walletOrProvider.provider) { throw new Error(`Missing provider`); } - const isSupported = await isNetworkSupported( - { chainId: Number(request.chainId) }, - config - ); + + const chainId = Number(request.chainId); + const isSupported = await isNetworkSupported({ chainId }, config); if (!isSupported) { throw new Error(`Chain id [${request.chainId}] is not supported`); } + const providerChainId = await getProviderChainId(walletOrProvider); + if (chainId !== providerChainId) { + throw new Error( + `Request and provider chain id mismatch. Request: [${chainId}], provider: [${providerChainId}]` + ); + } + + const type = ERC2771Type.SponsoredCall; + const parametersToOverride = await populateOptionalUserParameters< CallWithERC2771Request, CallWithERC2771RequestOptionalParameters - >({ request, walletOrProvider }, config); + >({ request, type, walletOrProvider }, config); + const struct = await mapRequestToStruct(request, parametersToOverride); + const signature = await signTypedDataV4( walletOrProvider, request.user as string, getPayloadToSign( { struct, - type: ERC2771Type.SponsoredCall, + type, isWallet: isWallet(walletOrProvider), }, config diff --git a/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts b/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts index c230d96..48c2dcf 100644 --- a/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts +++ b/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts @@ -20,6 +20,7 @@ export const sponsoredCallERC2771WithSignature = async ( ): Promise => { try { const { signature, sponsorApiKey, struct, options } = payload; + const isSupported = await isNetworkSupported( { chainId: Number(struct.chainId) }, config diff --git a/src/lib/erc2771/utils/getPayloadToSign.ts b/src/lib/erc2771/utils/getPayloadToSign.ts index c313d45..c1ab951 100644 --- a/src/lib/erc2771/utils/getPayloadToSign.ts +++ b/src/lib/erc2771/utils/getPayloadToSign.ts @@ -18,7 +18,10 @@ export const getPayloadToSign = ( config: Config ): SponsoredCallERC2771PayloadToSign | CallWithSyncFeeERC2771PayloadToSign => { const { isWallet, struct, type } = payload; - const domain = getEIP712Domain({ chainId: struct.chainId as number }, config); + const domain = getEIP712Domain( + { chainId: struct.chainId as number, type }, + config + ); switch (type) { case ERC2771Type.SponsoredCall: diff --git a/src/lib/erc2771/utils/mapRequestToStruct.ts b/src/lib/erc2771/utils/mapRequestToStruct.ts index 064f95f..5d1f1db 100644 --- a/src/lib/erc2771/utils/mapRequestToStruct.ts +++ b/src/lib/erc2771/utils/mapRequestToStruct.ts @@ -14,9 +14,11 @@ export const mapRequestToStruct = async ( if (!override.userNonce && !request.userNonce) { throw new Error(`userNonce is not found in the request, nor fetched`); } + if (!override.userDeadline && !request.userDeadline) { throw new Error(`userDeadline is not found in the request, nor fetched`); } + return { userNonce: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion diff --git a/src/lib/types/index.ts b/src/lib/types/index.ts index 3170a1b..545a9d0 100644 --- a/src/lib/types/index.ts +++ b/src/lib/types/index.ts @@ -53,5 +53,8 @@ export type Config = { url: string; contract: { relayERC2771: string; + relay1BalanceERC2771: string; + relayERC2771zkSync: string; + relay1BalanceERC2771zkSync: string; }; }; diff --git a/src/utils/eip712.ts b/src/utils/eip712.ts index 803a656..e929dba 100644 --- a/src/utils/eip712.ts +++ b/src/utils/eip712.ts @@ -1,15 +1,40 @@ -import { getAddress } from "ethers/lib/utils"; - import { Config, EIP712Domain } from "../lib/types"; +import { ERC2771Type } from "../lib/erc2771/types"; + +import { getGelatoRelayERC2771Address } from "./relayAddress"; export const getEIP712Domain = ( - payload: { chainId: number }, + payload: { + chainId: number; + type: ERC2771Type; + }, config: Config ): EIP712Domain => { - return { - name: "GelatoRelayERC2771", - version: "1", - chainId: payload.chainId, - verifyingContract: getAddress(config.contract.relayERC2771), - }; + const { chainId, type } = payload; + switch (type) { + case ERC2771Type.CallWithSyncFee: + return { + name: "GelatoRelayERC2771", + version: "1", + chainId: chainId, + verifyingContract: getGelatoRelayERC2771Address( + { chainId, type }, + config + ), + }; + case ERC2771Type.SponsoredCall: + return { + name: "GelatoRelay1BalanceERC2771", + version: "1", + chainId: chainId, + verifyingContract: getGelatoRelayERC2771Address( + { chainId, type }, + config + ), + }; + default: + // eslint-disable-next-line no-case-declarations + const _exhaustiveCheck: never = type; + return _exhaustiveCheck; + } }; diff --git a/src/utils/getProviderChainId.ts b/src/utils/getProviderChainId.ts new file mode 100644 index 0000000..632a628 --- /dev/null +++ b/src/utils/getProviderChainId.ts @@ -0,0 +1,18 @@ +import { ethers } from "ethers"; + +import { isWallet } from "./isWallet"; + +export const getProviderChainId = async ( + walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet +): Promise => { + let provider: ethers.providers.Provider; + if (isWallet(walletOrProvider)) { + provider = walletOrProvider.provider; + } else { + provider = walletOrProvider; + } + + const { chainId } = await provider.getNetwork(); + + return chainId; +}; diff --git a/src/utils/getUserNonce.ts b/src/utils/getUserNonce.ts index 0d86d89..0ee8622 100644 --- a/src/utils/getUserNonce.ts +++ b/src/utils/getUserNonce.ts @@ -1,19 +1,26 @@ import { ethers } from "ethers"; -import { getAddress } from "ethers/lib/utils"; import { USER_NONCE_ABI } from "../constants"; import { Config } from "../lib/types"; +import { ERC2771Type } from "../lib/erc2771/types"; + +import { getGelatoRelayERC2771Address } from "./relayAddress"; +import { getProviderChainId } from "./getProviderChainId"; export const getUserNonce = async ( payload: { account: string; + type: ERC2771Type; walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet; }, config: Config ) => { - const { account, walletOrProvider } = payload; + const { account, type, walletOrProvider } = payload; + + const chainId = await getProviderChainId(walletOrProvider); + const contract = new ethers.Contract( - getAddress(config.contract.relayERC2771), + getGelatoRelayERC2771Address({ chainId, type }, config), USER_NONCE_ABI, walletOrProvider ); diff --git a/src/utils/index.ts b/src/utils/index.ts index d5544ce..36e50bd 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -6,3 +6,6 @@ export * from "./getHttpErrorMessage"; export * from "./populateOptionalUserParameters"; export * from "./post"; export * from "./isWallet"; +export * from "./relayAddress"; +export * from "./isZkSync"; +export * from "./getProviderChainId"; diff --git a/src/utils/isZkSync.ts b/src/utils/isZkSync.ts new file mode 100644 index 0000000..a7364e2 --- /dev/null +++ b/src/utils/isZkSync.ts @@ -0,0 +1,3 @@ +export const isZkSync = (chainId: number): boolean => { + return chainId === 324 || chainId === 280; +}; diff --git a/src/utils/populateOptionalUserParameters.ts b/src/utils/populateOptionalUserParameters.ts index a56cade..3411d6c 100644 --- a/src/utils/populateOptionalUserParameters.ts +++ b/src/utils/populateOptionalUserParameters.ts @@ -4,6 +4,7 @@ import { DEFAULT_DEADLINE_GAP } from "../constants"; import { CallWithERC2771Request, CallWithERC2771RequestOptionalParameters, + ERC2771Type, } from "../lib/erc2771/types"; import { Config } from "../lib/types"; @@ -16,11 +17,12 @@ export const populateOptionalUserParameters = async < >( payload: { request: Request; + type: ERC2771Type; walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet; }, config: Config ): Promise> => { - const { request, walletOrProvider } = payload; + const { request, type, walletOrProvider } = payload; const parametersToOverride: Partial = {}; if (!request.userDeadline) { parametersToOverride.userDeadline = calculateDeadline(DEFAULT_DEADLINE_GAP); @@ -31,6 +33,7 @@ export const populateOptionalUserParameters = async < (await getUserNonce( { account: request.user as string, + type, walletOrProvider, }, config diff --git a/src/utils/relayAddress.ts b/src/utils/relayAddress.ts new file mode 100644 index 0000000..6876015 --- /dev/null +++ b/src/utils/relayAddress.ts @@ -0,0 +1,30 @@ +import { getAddress } from "ethers/lib/utils"; + +import { ERC2771Type } from "../lib/erc2771/types"; +import { Config } from "../lib/types"; + +import { isZkSync } from "./isZkSync"; + +export const getGelatoRelayERC2771Address = ( + payload: { + chainId: number; + type: ERC2771Type; + }, + config: Config +): string => { + const { chainId, type } = payload; + switch (type) { + case ERC2771Type.CallWithSyncFee: + return isZkSync(chainId) + ? getAddress(config.contract.relayERC2771zkSync) + : getAddress(config.contract.relayERC2771); + case ERC2771Type.SponsoredCall: + return isZkSync(chainId) + ? getAddress(config.contract.relay1BalanceERC2771zkSync) + : getAddress(config.contract.relay1BalanceERC2771); + default: + // eslint-disable-next-line no-case-declarations + const _exhaustiveCheck: never = type; + return _exhaustiveCheck; + } +}; diff --git a/yarn.lock b/yarn.lock index b66e668..b63ee60 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,26 +2,148 @@ # yarn lockfile v1 -"@esbuild/linux-loong64@0.14.54": - version "0.14.54" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" - integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== +"@esbuild/android-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" + integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== + +"@esbuild/android-arm@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" + integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== + +"@esbuild/android-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" + integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== + +"@esbuild/darwin-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" + integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== + +"@esbuild/darwin-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" + integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== + +"@esbuild/freebsd-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" + integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== + +"@esbuild/freebsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" + integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== + +"@esbuild/linux-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" + integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== + +"@esbuild/linux-arm@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" + integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== + +"@esbuild/linux-ia32@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" + integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== + +"@esbuild/linux-loong64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" + integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== + +"@esbuild/linux-mips64el@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" + integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== + +"@esbuild/linux-ppc64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" + integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== + +"@esbuild/linux-riscv64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" + integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== + +"@esbuild/linux-s390x@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" + integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== + +"@esbuild/linux-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" + integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== + +"@esbuild/netbsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" + integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== + +"@esbuild/openbsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" + integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== + +"@esbuild/sunos-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" + integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== + +"@esbuild/win32-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" + integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== + +"@esbuild/win32-ia32@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" + integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== + +"@esbuild/win32-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" + integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== +"@eslint-community/regexpp@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" + espree "^9.5.1" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.39.0": + version "8.39.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" + integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -382,19 +504,19 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" -"@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" @@ -414,7 +536,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -422,10 +544,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@pkgr/utils@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.0.tgz#3b8491f112a80839450498816767eb03b7db6139" - integrity sha512-7dIJ9CRVzBnqyEl7diUHPUFJf/oty2SeoVzcMocc5PeOUDK9KGzvgIBjGRRzzlRDaOjh3ADwH0WeibQvi3ls2Q== +"@pkgr/utils@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" + integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== dependencies: cross-spawn "^7.0.3" is-glob "^4.0.3" @@ -434,10 +556,10 @@ tiny-glob "^0.2.9" tslib "^2.4.0" -"@tsconfig/recommended@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.1.tgz#7619bad397e06ead1c5182926c944e0ca6177f52" - integrity sha512-2xN+iGTbPBEzGSnVp/Hd64vKJCJWxsi9gfs88x4PPMyEjHJoA3o5BY9r5OLPHIZU2pAQxkSAsJFqn6itClP8mQ== +"@tsconfig/recommended@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.2.tgz#1e198237225933e319718f082e78366e9f159d71" + integrity sha512-dbHBtbWBOjq0/otpopAE02NT2Cm05Qe2JsEKeCf/wjSYbI2hz8nCqnpnOJWHATgjDz4fd3dchs3Wy1gQGjfN6w== "@types/json-schema@^7.0.9": version "7.0.11" @@ -449,89 +571,98 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@16.11.12": - version "16.11.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.12.tgz#ac7fb693ac587ee182c3780c26eb65546a1a3c10" - integrity sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw== - -"@typescript-eslint/eslint-plugin@^5.30.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.34.0.tgz#d690f60e335596f38b01792e8f4b361d9bd0cb35" - integrity sha512-eRfPPcasO39iwjlUAMtjeueRGuIrW3TQ9WseIDl7i5UWuFbf83yYaU7YPs4j8+4CxUMIsj1k+4kV+E+G+6ypDQ== - dependencies: - "@typescript-eslint/scope-manager" "5.34.0" - "@typescript-eslint/type-utils" "5.34.0" - "@typescript-eslint/utils" "5.34.0" +"@types/node@16.18.25": + version "16.18.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.25.tgz#8863940fefa1234d3fcac7a4b7a48a6c992d67af" + integrity sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@typescript-eslint/eslint-plugin@^5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz#9b09ee1541bff1d2cebdcb87e7ce4a4003acde08" + integrity sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/type-utils" "5.59.1" + "@typescript-eslint/utils" "5.59.1" debug "^4.3.4" - functional-red-black-tree "^1.0.1" + grapheme-splitter "^1.0.4" ignore "^5.2.0" - regexpp "^3.2.0" + natural-compare-lite "^1.4.0" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.30.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.34.0.tgz#ca710858ea85dbfd30c9b416a335dc49e82dbc07" - integrity sha512-SZ3NEnK4usd2CXkoV3jPa/vo1mWX1fqRyIVUQZR4As1vyp4fneknBNJj+OFtV8WAVgGf+rOHMSqQbs2Qn3nFZQ== +"@typescript-eslint/parser@^5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.1.tgz#73c2c12127c5c1182d2e5b71a8fa2a85d215cbb4" + integrity sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g== dependencies: - "@typescript-eslint/scope-manager" "5.34.0" - "@typescript-eslint/types" "5.34.0" - "@typescript-eslint/typescript-estree" "5.34.0" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/typescript-estree" "5.59.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz#14efd13dc57602937e25f188fd911f118781e527" - integrity sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow== +"@typescript-eslint/scope-manager@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz#8a20222719cebc5198618a5d44113705b51fd7fe" + integrity sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA== dependencies: - "@typescript-eslint/types" "5.34.0" - "@typescript-eslint/visitor-keys" "5.34.0" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/visitor-keys" "5.59.1" -"@typescript-eslint/type-utils@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.34.0.tgz#7a324ab9ddd102cd5e1beefc94eea6f3eb32d32d" - integrity sha512-Pxlno9bjsQ7hs1pdWRUv9aJijGYPYsHpwMeCQ/Inavhym3/XaKt1ZKAA8FIw4odTBfowBdZJDMxf2aavyMDkLg== +"@typescript-eslint/type-utils@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz#63981d61684fd24eda2f9f08c0a47ecb000a2111" + integrity sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw== dependencies: - "@typescript-eslint/utils" "5.34.0" + "@typescript-eslint/typescript-estree" "5.59.1" + "@typescript-eslint/utils" "5.59.1" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.34.0.tgz#217bf08049e9e7b86694d982e88a2c1566330c78" - integrity sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA== +"@typescript-eslint/types@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.1.tgz#03f3fedd1c044cb336ebc34cc7855f121991f41d" + integrity sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg== -"@typescript-eslint/typescript-estree@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz#ba7b83f4bf8ccbabf074bbf1baca7a58de3ccb9a" - integrity sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A== +"@typescript-eslint/typescript-estree@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz#4aa546d27fd0d477c618f0ca00b483f0ec84c43c" + integrity sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA== dependencies: - "@typescript-eslint/types" "5.34.0" - "@typescript-eslint/visitor-keys" "5.34.0" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/visitor-keys" "5.59.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.34.0.tgz#0cae98f48d8f9e292e5caa9343611b6faf49e743" - integrity sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ== +"@typescript-eslint/utils@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.1.tgz#d89fc758ad23d2157cfae53f0b429bdf15db9473" + integrity sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA== dependencies: + "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.34.0" - "@typescript-eslint/types" "5.34.0" - "@typescript-eslint/typescript-estree" "5.34.0" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/typescript-estree" "5.59.1" eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.34.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz#d0fb3e31033e82ddd5de048371ad39eb342b2d40" - integrity sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw== +"@typescript-eslint/visitor-keys@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz#0d96c36efb6560d7fb8eb85de10442c10d8f6058" + integrity sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA== dependencies: - "@typescript-eslint/types" "5.34.0" + "@typescript-eslint/types" "5.59.1" eslint-visitor-keys "^3.3.0" acorn-jsx@^5.3.2: @@ -539,11 +670,6 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" @@ -606,15 +732,23 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-includes@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" is-string "^1.0.7" array-union@^2.1.0: @@ -622,14 +756,24 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" astral-regex@^2.0.0: @@ -637,12 +781,24 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -axios@0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== dependencies: - follow-redirects "^1.14.4" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" balanced-match@^1.0.0: version "1.0.2" @@ -672,6 +828,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -697,6 +860,11 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +chalk@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== + chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -745,25 +913,27 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== +colorette@^2.0.19: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -colorette@^2.0.17: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== -commander@^9.3.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" - integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== concat-map@0.0.1: version "0.0.1" @@ -779,13 +949,6 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -818,6 +981,11 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -839,17 +1007,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dotenv@^16.0.2: - version "16.0.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.2.tgz#0b0f8652c016a3858ef795024508cddc4bffc5bf" - integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== -dts-minify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/dts-minify/-/dts-minify-0.3.0.tgz#fbad948b1ce1ebb65759d393e43b56f30dbf29a7" - integrity sha512-785XUyfWCH4e2wJAGwaltdN6xMHsE06HDk3I203WaoOl4kxz6gQrHITDPMkWz6lu0goyTjNdzmG1aMr2ukKi3g== - dependencies: - tslib "2.3.1" +dts-minify@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/dts-minify/-/dts-minify-0.3.2.tgz#687bd10247cd0335f763ee4c3f45fb029e348b01" + integrity sha512-X7SlplQ8TjJMNWwbPfD6Q0s+y2EZqImsrQDEvZcFc3QYy9vdwdUpZi+jos0BBT6c8EJn33F+uePHuofwkRCToA== eastasianwidth@^0.2.0: version "0.2.0" @@ -879,15 +1045,15 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -enhanced-resolve@^5.10.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== +enhanced-resolve@^5.12.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" + integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: +es-abstract@^1.19.0, es-abstract@^1.19.5: version "1.20.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== @@ -916,6 +1082,55 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19 string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -932,191 +1147,96 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild-android-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" - integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== - -esbuild-android-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" - integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== - -esbuild-darwin-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" - integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== - -esbuild-darwin-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" - integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== - -esbuild-freebsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" - integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== - -esbuild-freebsd-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" - integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== - -esbuild-linux-32@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" - integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== - -esbuild-linux-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" - integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== - -esbuild-linux-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" - integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== - -esbuild-linux-arm@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" - integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== - -esbuild-linux-mips64le@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" - integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== - -esbuild-linux-ppc64le@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" - integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== - -esbuild-linux-riscv64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" - integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== - -esbuild-linux-s390x@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" - integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== - -esbuild-netbsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" - integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== - -esbuild-openbsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" - integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== - -esbuild-sunos-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" - integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== - -esbuild-windows-32@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" - integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== - -esbuild-windows-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" - integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== - -esbuild-windows-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" - integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== - -esbuild@^0.14.2: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" - integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== +esbuild@^0.16.13: + version "0.16.17" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" + integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== optionalDependencies: - "@esbuild/linux-loong64" "0.14.54" - esbuild-android-64 "0.14.54" - esbuild-android-arm64 "0.14.54" - esbuild-darwin-64 "0.14.54" - esbuild-darwin-arm64 "0.14.54" - esbuild-freebsd-64 "0.14.54" - esbuild-freebsd-arm64 "0.14.54" - esbuild-linux-32 "0.14.54" - esbuild-linux-64 "0.14.54" - esbuild-linux-arm "0.14.54" - esbuild-linux-arm64 "0.14.54" - esbuild-linux-mips64le "0.14.54" - esbuild-linux-ppc64le "0.14.54" - esbuild-linux-riscv64 "0.14.54" - esbuild-linux-s390x "0.14.54" - esbuild-netbsd-64 "0.14.54" - esbuild-openbsd-64 "0.14.54" - esbuild-sunos-64 "0.14.54" - esbuild-windows-32 "0.14.54" - esbuild-windows-64 "0.14.54" - esbuild-windows-arm64 "0.14.54" + "@esbuild/android-arm" "0.16.17" + "@esbuild/android-arm64" "0.16.17" + "@esbuild/android-x64" "0.16.17" + "@esbuild/darwin-arm64" "0.16.17" + "@esbuild/darwin-x64" "0.16.17" + "@esbuild/freebsd-arm64" "0.16.17" + "@esbuild/freebsd-x64" "0.16.17" + "@esbuild/linux-arm" "0.16.17" + "@esbuild/linux-arm64" "0.16.17" + "@esbuild/linux-ia32" "0.16.17" + "@esbuild/linux-loong64" "0.16.17" + "@esbuild/linux-mips64el" "0.16.17" + "@esbuild/linux-ppc64" "0.16.17" + "@esbuild/linux-riscv64" "0.16.17" + "@esbuild/linux-s390x" "0.16.17" + "@esbuild/linux-x64" "0.16.17" + "@esbuild/netbsd-x64" "0.16.17" + "@esbuild/openbsd-x64" "0.16.17" + "@esbuild/sunos-x64" "0.16.17" + "@esbuild/win32-arm64" "0.16.17" + "@esbuild/win32-ia32" "0.16.17" + "@esbuild/win32-x64" "0.16.17" escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== +eslint-config-prettier@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" -eslint-import-resolver-typescript@^3.1.3: - version "3.5.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.0.tgz#490ba48cafc5a2fb209bbc7e360defb4c292ed59" - integrity sha512-DEfpfuk+O/T5e9HBZOxocmwMuUGkvQQd5WRiMJF9kKNT9amByqOyGlWoAZAQiv0SZSy4GMtG1clmnvQA/RzA0A== +eslint-import-resolver-typescript@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" + integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== dependencies: debug "^4.3.4" - enhanced-resolve "^5.10.0" - get-tsconfig "^4.2.0" - globby "^13.1.2" - is-core-module "^2.10.0" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + get-tsconfig "^4.5.0" + globby "^13.1.3" + is-core-module "^2.11.0" is-glob "^4.0.3" - synckit "^0.8.3" + synckit "^0.8.5" -eslint-module-utils@^2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== +eslint-module-utils@^2.7.4: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" -eslint-plugin-import@^2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== +eslint-plugin-import@^2.27.5: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" has "^1.0.3" - is-core-module "^2.8.1" + is-core-module "^2.11.0" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" tsconfig-paths "^3.14.1" -eslint-plugin-prettier@^4.1.0: +eslint-plugin-prettier@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== @@ -1131,63 +1251,59 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.18.0: - version "8.22.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" - integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== - dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.10.4" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" +eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== + +eslint@^8.39.0: + version "8.39.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" + integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.39.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.3" - esquery "^1.4.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" + glob-parent "^6.0.2" + globals "^13.19.0" grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" @@ -1195,34 +1311,23 @@ eslint@^8.18.0: minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - regexpp "^3.2.0" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== - dependencies: - acorn "^8.7.1" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -espree@^9.3.3: - version "9.3.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" - integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.0" -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -1284,14 +1389,14 @@ ethers@5.7.2: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" -execa@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== +execa@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.1" - human-signals "^3.0.1" + human-signals "^4.3.0" is-stream "^3.0.0" merge-stream "^2.0.0" npm-run-path "^5.1.0" @@ -1372,10 +1477,26 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== -follow-redirects@^1.14.4: - version "1.15.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" - integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" fs.realpath@^1.0.0: version "1.0.0" @@ -1397,11 +1518,6 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - functions-have-names@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -1416,6 +1532,15 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -1429,10 +1554,10 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-tsconfig@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.2.0.tgz#ff368dd7104dab47bf923404eb93838245c66543" - integrity sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg== +get-tsconfig@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f" + integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ== glob-parent@^5.1.2: version "5.1.2" @@ -1441,7 +1566,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -1460,25 +1585,31 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.2.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globalyzer@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" @@ -1496,10 +1627,10 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" - integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== +globby@^13.1.3: + version "13.1.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== dependencies: dir-glob "^3.0.1" fast-glob "^3.2.11" @@ -1512,6 +1643,13 @@ globrex@^0.1.2: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.2.4: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -1539,6 +1677,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -1575,15 +1718,15 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== -husky@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" - integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== +husky@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== ignore@^5.2.0: version "5.2.0" @@ -1630,6 +1773,24 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -1645,15 +1806,20 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-core-module@^2.10.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== +is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" @@ -1708,6 +1874,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -1742,6 +1913,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -1761,6 +1943,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +js-sdsl@^4.1.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== + js-sha3@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -1798,41 +1985,41 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== +lilconfig@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== -lint-staged@^13.0.3: - version "13.0.3" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.3.tgz#d7cdf03a3830b327a2b63c6aec953d71d9dc48c6" - integrity sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug== +lint-staged@^13.2.2: + version "13.2.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca" + integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA== dependencies: + chalk "5.2.0" cli-truncate "^3.1.0" - colorette "^2.0.17" - commander "^9.3.0" + commander "^10.0.0" debug "^4.3.4" - execa "^6.1.0" - lilconfig "2.0.5" - listr2 "^4.0.5" + execa "^7.0.0" + lilconfig "2.1.0" + listr2 "^5.0.7" micromatch "^4.0.5" normalize-path "^3.0.0" - object-inspect "^1.12.2" + object-inspect "^1.12.3" pidtree "^0.6.0" string-argv "^0.3.1" - yaml "^2.1.1" + yaml "^2.2.2" -listr2@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" - integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== +listr2@^5.0.7: + version "5.0.8" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" + integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== dependencies: cli-truncate "^2.1.0" - colorette "^2.0.16" + colorette "^2.0.19" log-update "^4.0.0" p-map "^4.0.0" rfdc "^1.3.0" - rxjs "^7.5.5" + rxjs "^7.8.0" through "^2.3.8" wrap-ansi "^7.0.0" @@ -1883,6 +2070,18 @@ micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -1903,35 +2102,37 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -minimize-js@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/minimize-js/-/minimize-js-1.3.0.tgz#ef02f15b82244e76e71e0d78e995e8ed97d2cbff" - integrity sha512-L1guOZUwalfmz0eH6m/Zmr2CfkYnfZmuJvSkikNcC+PYFGdr6ikoxDPS7Sz5dBRbin1TANtSk7mdBes4UzKYnw== - dependencies: - commander "^8.3.0" - dts-minify "^0.3.0" - esbuild "^0.14.2" - glob "^7.2.0" - pretty-bytes "^5.6.0" +minimize-js@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/minimize-js/-/minimize-js-1.3.1.tgz#f5dbad86498cee6198d4520b21774f9f1919ec87" + integrity sha512-rhzFKwY+vthwyqEyiFQdorUWisvjV9in4XpyZbbIuFNV0UmB3HHiG6UYyxjtMhdQSZOwlqP9R1hhl2iRhifP6g== + dependencies: + commander "^9.4.1" + dts-minify "^0.3.1" + esbuild "^0.16.13" + glob "^8.0.3" + pretty-bytes "^6.0.0" progress-barjs "^2.2.1" - tslib "^2.3.1" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + tslib "^2.4.1" ms@2.1.2: version "2.1.2" @@ -1943,6 +2144,11 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -1960,17 +2166,22 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.0, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2: +object.assign@^4.1.2, object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -1980,14 +2191,14 @@ object.assign@^4.1.2: has-symbols "^1.0.3" object-keys "^1.1.1" -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" once@^1.3.0: version "1.4.0" @@ -2116,21 +2327,26 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@^2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== +pretty-bytes@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.0.tgz#1d1cc9aae1939012c74180b679da6684616bf804" + integrity sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ== progress-barjs@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/progress-barjs/-/progress-barjs-2.2.1.tgz#d87b28965d82c92ea6b77b8fd35b0ba15db784f9" integrity sha512-pgNtlw+gZ/nqQJDYKUbAnyhZPdyiBoxB3gzXcmF7Cl2JhD8I87Z501T3rr97OHoSzx3JFfNcY9ANiAVPF4qPxA== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -2150,22 +2366,17 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.20.0, resolve@^1.22.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== +resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -2201,18 +2412,32 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.5: - version "7.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" - integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== +rxjs@^7.8.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + scrypt-js@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -2305,6 +2530,15 @@ string-width@^5.0.0: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimend@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" @@ -2314,6 +2548,15 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimstart@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" @@ -2323,6 +2566,15 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2364,13 +2616,13 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -synckit@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.3.tgz#f36ca23fb7cbcf2b2b78c9e553ce6764dc6aa415" - integrity sha512-1goXnDYNJlKwCM37f5MTzRwo+8SqutgVtg2d37D6YnHHT4E3IhQMRfKiGdfTZU7LBlI6T8inCQUxnMBFHrbqWw== +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== dependencies: - "@pkgr/utils" "^2.3.0" - tslib "^2.4.0" + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" tapable@^2.2.0: version "2.2.1" @@ -2412,21 +2664,21 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.1.0, tslib@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.4.1, tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -2451,10 +2703,19 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typescript@4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.3.tgz#afaa858e68c7103317d89eb90c5d8906268d353c" - integrity sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ== +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== unbox-primitive@^1.0.2: version "1.0.2" @@ -2473,11 +2734,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -2489,6 +2745,18 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -2534,10 +2802,10 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" - integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== +yaml@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" + integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== yocto-queue@^0.1.0: version "0.1.0" From d6e33bab2f7b4709220ea7e4da310e214cd93ac8 Mon Sep 17 00:00:00 2001 From: Denis Pingin <2085934+denis-pingin@users.noreply.github.com> Date: Thu, 11 May 2023 12:24:59 +0200 Subject: [PATCH 2/6] v4.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 968660b..39dd132 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gelatonetwork/relay-sdk", - "version": "3.5.0", + "version": "4.0.0", "description": "SDK to integrate with Gelato Relay", "main": "dist/index.js", "types": "dist/index.d.ts", From 2ed562bc1e8a4f59aefe57612f3bf53b111bb6b5 Mon Sep 17 00:00:00 2001 From: Ogulcan Patavi Date: Mon, 7 Aug 2023 16:24:27 +0300 Subject: [PATCH 3/6] feat: ethers v6 support (#28) * feat: ethers v6 support * v5.0.0 --- package.json | 6 +- src/index.ts | 42 +- src/lib/callWithSyncFee/index.ts | 3 +- .../erc2771/callWithSyncFeeERC2771/index.ts | 16 +- .../index.ts | 4 +- .../erc2771/getSignatureDataERC2771/index.ts | 18 +- src/lib/erc2771/sponsoredCallERC2771/index.ts | 18 +- .../index.ts | 4 +- src/lib/erc2771/types/index.ts | 15 +- src/lib/erc2771/utils/getPayloadToSign.ts | 10 +- src/lib/erc2771/utils/mapRequestToStruct.ts | 15 +- src/lib/network/index.ts | 11 +- src/lib/oracle/index.ts | 34 +- src/lib/sponsoredCall/index.ts | 8 +- src/lib/status/index.ts | 9 +- src/lib/types/index.ts | 12 +- src/utils/axios.ts | 3 + src/utils/calculateDeadline.ts | 4 +- src/utils/eip712.ts | 6 +- src/utils/getProviderChainId.ts | 9 +- src/utils/getUserNonce.ts | 6 +- src/utils/index.ts | 1 + src/utils/isWallet.ts | 4 +- src/utils/isZkSync.ts | 4 +- src/utils/populateOptionalUserParameters.ts | 27 +- src/utils/post.ts | 9 +- src/utils/relayAddress.ts | 4 +- src/utils/signTypedDataV4.ts | 6 +- tsconfig.json | 3 +- yarn.lock | 1442 +++++++---------- 30 files changed, 726 insertions(+), 1027 deletions(-) create mode 100644 src/utils/axios.ts diff --git a/package.json b/package.json index 39dd132..f98cf92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gelatonetwork/relay-sdk", - "version": "4.0.0", + "version": "5.0.0", "description": "SDK to integrate with Gelato Relay", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -35,8 +35,8 @@ "typescript": "5.0.4" }, "dependencies": { - "axios": "1.4.0", - "ethers": "5.7.2" + "axios": "0.27.2", + "ethers": "6.7.0" }, "lint-staged": { "*.{js,json,md,ts}": "yarn format", diff --git a/src/index.ts b/src/index.ts index 69cf677..e9ebb77 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import { BigNumber, ethers } from "ethers"; +import { ethers } from "ethers"; import * as library from "./lib"; import { CallWithSyncFeeRequest } from "./lib/callWithSyncFee/types"; @@ -84,14 +84,14 @@ export class GelatoRelay { /** * @param {CallWithSyncFeeERC2771Request} request - CallWithSyncFeeERC2771 request to be relayed by Gelato Executors - * @param {ethers.providers.Web3Provider | ethers.Wallet} walletOrProvider - Web3Provider [front-end] or Wallet [back-end] to sign the payload + * @param {ethers.BrowserProvider | ethers.Wallet} walletOrProvider - BrowserProvider [front-end] or Wallet [back-end] to sign the payload * @param {RelayRequestOptions} [options] - Optional Relay configuration * @returns {Promise} Response object with taskId parameter * */ callWithSyncFeeERC2771 = ( request: CallWithSyncFeeERC2771Request, - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet, + walletOrProvider: ethers.BrowserProvider | ethers.Wallet, options?: RelayRequestOptions ): Promise => library.relayWithCallWithSyncFeeERC2771( @@ -122,7 +122,7 @@ export class GelatoRelay { /** * @param {CallWithERC2771Request} request - CallWithERC2771Request to be relayed by Gelato Executors - * @param {ethers.providers.Web3Provider | ethers.Wallet} walletOrProvider - Web3Provider [front-end] or Wallet [back-end] to sign the payload + * @param {ethers.BrowserProvider | ethers.Wallet} walletOrProvider - BrowserProvider [front-end] or Wallet [back-end] to sign the payload * @param {string} sponsorApiKey - Sponsor API key * @param {RelayRequestOptions} [options] - Optional Relay configuration * @returns {Promise} Response object with taskId parameter @@ -130,7 +130,7 @@ export class GelatoRelay { */ sponsoredCallERC2771 = ( request: CallWithERC2771Request, - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet, + walletOrProvider: ethers.BrowserProvider | ethers.Wallet, sponsorApiKey: string, options?: RelayRequestOptions ): Promise => @@ -146,14 +146,14 @@ export class GelatoRelay { /** * @param {CallWithERC2771Request} request - CallWithERC2771Request to be relayed by Gelato Executors - * @param {ethers.providers.Web3Provider | ethers.Wallet} walletOrProvider - Web3Provider [front-end] or Wallet [back-end] to sign the payload + * @param {ethers.BrowserProvider | ethers.Wallet} walletOrProvider - BrowserProvider [front-end] or Wallet [back-end] to sign the payload * @param {ERC2771Type} type - ERC2771Type.CallWithSyncFee or ERC2771Type.SponsoredCall * @returns {Promise} Response object with taskId parameter * */ getSignatureDataERC2771 = ( request: CallWithERC2771Request, - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet, + walletOrProvider: ethers.BrowserProvider | ethers.Wallet, type: ERC2771Type ): Promise => library.getSignatureDataERC2771( @@ -210,10 +210,10 @@ export class GelatoRelay { ); /** - * @param {number} chainId - Chain Id + * @param {bigint} chainId - Chain Id * @returns {Promise} Boolean to demonstrate if Relay V2 is supported on the provided chain */ - isNetworkSupported = (chainId: number): Promise => + isNetworkSupported = (chainId: bigint): Promise => library.isNetworkSupported({ chainId }, this.#config); /** @@ -223,10 +223,10 @@ export class GelatoRelay { library.getSupportedNetworks(this.#config); /** - * @param {number} chainId - Chain Id + * @param {bigint} chainId - Chain Id * @returns {Promise} Boolean to demonstrate if the oracle is active on the provided chain */ - isOracleActive = (chainId: number): Promise => + isOracleActive = (chainId: bigint): Promise => library.isOracleActive({ chainId }, this.#config); /** @@ -236,29 +236,29 @@ export class GelatoRelay { library.getGelatoOracles(this.#config); /** - * @param {number} chainId - Chain Id + * @param {bigint} chainId - Chain Id * @returns {Promise} List of all payment tokens on the provided chain * */ - getPaymentTokens = (chainId: number): Promise => + getPaymentTokens = (chainId: bigint): Promise => library.getPaymentTokens({ chainId }, this.#config); /** - * @param {number} chainId - Chain Id + * @param {bigint} chainId - Chain Id * @param {string} paymentToken - Payment Token - * @param {BigNumber} gasLimit - Gas Limit + * @param {bigint} gasLimit - Gas Limit * @param {boolean} isHighPriority - Priority Level - * @param {BigNumber} [gasLimitL1=BigNumber.from(0)] - Gas Limit for Layer 1 - * @returns {Promise} Estimated Fee + * @param {bigint} [gasLimitL1=BigInt(0)] - Gas Limit for Layer 1 + * @returns {Promise} Estimated Fee * */ getEstimatedFee = ( - chainId: number, + chainId: bigint, paymentToken: string, - gasLimit: BigNumber, + gasLimit: bigint, isHighPriority: boolean, - gasLimitL1: BigNumber = BigNumber.from(0) - ): Promise => + gasLimitL1 = BigInt(0) + ): Promise => library.getEstimatedFee( { chainId, paymentToken, gasLimit, isHighPriority, gasLimitL1 }, this.#config diff --git a/src/lib/callWithSyncFee/index.ts b/src/lib/callWithSyncFee/index.ts index b614ab0..969b91b 100644 --- a/src/lib/callWithSyncFee/index.ts +++ b/src/lib/callWithSyncFee/index.ts @@ -19,7 +19,7 @@ export const relayWithSyncFee = async ( try { const { request, options } = payload; const isSupported = await isNetworkSupported( - { chainId: Number(request.chainId) }, + { chainId: request.chainId }, config ); if (!isSupported) { @@ -35,6 +35,7 @@ export const relayWithSyncFee = async ( ...request, isRelayContext: request.isRelayContext ?? true, ...options, + chainId: request.chainId.toString(), }, }, config diff --git a/src/lib/erc2771/callWithSyncFeeERC2771/index.ts b/src/lib/erc2771/callWithSyncFeeERC2771/index.ts index 95429bb..606ca39 100644 --- a/src/lib/erc2771/callWithSyncFeeERC2771/index.ts +++ b/src/lib/erc2771/callWithSyncFeeERC2771/index.ts @@ -28,7 +28,7 @@ import { getPayloadToSign, mapRequestToStruct } from "../utils"; export const relayWithCallWithSyncFeeERC2771 = async ( payload: { request: CallWithSyncFeeERC2771Request; - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; options?: RelayRequestOptions; }, config: Config @@ -39,16 +39,16 @@ export const relayWithCallWithSyncFeeERC2771 = async ( throw new Error(`Missing provider`); } - const chainId = Number(request.chainId); + const { chainId } = request; const isSupported = await isNetworkSupported({ chainId }, config); if (!isSupported) { - throw new Error(`Chain id [${request.chainId}] is not supported`); + throw new Error(`Chain id [${chainId.toString()}] is not supported`); } const providerChainId = await getProviderChainId(walletOrProvider); if (chainId !== providerChainId) { throw new Error( - `Request and provider chain id mismatch. Request: [${chainId}], provider: [${providerChainId}]` + `Request and provider chain id mismatch. Request: [${chainId.toString()}], provider: [${providerChainId.toString()}]` ); } @@ -71,7 +71,11 @@ export const relayWithCallWithSyncFeeERC2771 = async ( callWithSyncFeeRequest.user as string, getPayloadToSign( { - struct, + struct: { + ...struct, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + }, type, isWallet: isWallet(walletOrProvider), }, @@ -94,6 +98,8 @@ export const relayWithCallWithSyncFeeERC2771 = async ( feeToken, isRelayContext: isRelayContext ?? true, userSignature: signature, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), }, }, config diff --git a/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts b/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts index aa592f1..c2dc38a 100644 --- a/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts +++ b/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts @@ -22,7 +22,7 @@ export const callWithSyncFeeERC2771WithSignature = async ( const { signature, struct, syncFeeParams, options } = payload; const isSupported = await isNetworkSupported( - { chainId: Number(struct.chainId) }, + { chainId: struct.chainId }, config ); if (!isSupported) { @@ -44,6 +44,8 @@ export const callWithSyncFeeERC2771WithSignature = async ( ...options, isRelayContext: syncFeeParams.isRelayContext ?? true, userSignature: signature, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), }, }, config diff --git a/src/lib/erc2771/getSignatureDataERC2771/index.ts b/src/lib/erc2771/getSignatureDataERC2771/index.ts index 9b46224..aa628ab 100644 --- a/src/lib/erc2771/getSignatureDataERC2771/index.ts +++ b/src/lib/erc2771/getSignatureDataERC2771/index.ts @@ -19,7 +19,7 @@ import { getPayloadToSign, mapRequestToStruct } from "../utils"; export const getSignatureDataERC2771 = async ( payload: { request: CallWithERC2771Request; - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; type: ERC2771Type; }, config: Config @@ -30,16 +30,16 @@ export const getSignatureDataERC2771 = async ( throw new Error(`Missing provider`); } - const chainId = Number(request.chainId); + const { chainId } = request; const isSupported = await isNetworkSupported({ chainId }, config); if (!isSupported) { - throw new Error(`Chain id [${request.chainId}] is not supported`); + throw new Error(`Chain id [${chainId.toString()}] is not supported`); } const providerChainId = await getProviderChainId(walletOrProvider); if (chainId !== providerChainId) { throw new Error( - `Request and provider chain id mismatch. Request: [${chainId}], provider: [${providerChainId}]` + `Request and provider chain id mismatch. Request: [${chainId.toString()}], provider: [${providerChainId.toString()}]` ); } @@ -54,7 +54,15 @@ export const getSignatureDataERC2771 = async ( walletOrProvider, request.user as string, getPayloadToSign( - { struct, type, isWallet: isWallet(walletOrProvider) }, + { + struct: { + ...struct, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + }, + type, + isWallet: isWallet(walletOrProvider), + }, config ) ); diff --git a/src/lib/erc2771/sponsoredCallERC2771/index.ts b/src/lib/erc2771/sponsoredCallERC2771/index.ts index 518125f..0a8e796 100644 --- a/src/lib/erc2771/sponsoredCallERC2771/index.ts +++ b/src/lib/erc2771/sponsoredCallERC2771/index.ts @@ -27,7 +27,7 @@ import { getPayloadToSign, mapRequestToStruct } from "../utils"; export const relayWithSponsoredCallERC2771 = async ( payload: { request: CallWithERC2771Request; - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; sponsorApiKey: string; options?: RelayRequestOptions; }, @@ -39,7 +39,7 @@ export const relayWithSponsoredCallERC2771 = async ( const sponsoredCallERC2771 = async ( payload: { request: CallWithERC2771Request; - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; sponsorApiKey: string; options?: RelayRequestOptions; }, @@ -51,16 +51,16 @@ const sponsoredCallERC2771 = async ( throw new Error(`Missing provider`); } - const chainId = Number(request.chainId); + const { chainId } = request; const isSupported = await isNetworkSupported({ chainId }, config); if (!isSupported) { - throw new Error(`Chain id [${request.chainId}] is not supported`); + throw new Error(`Chain id [${chainId.toString()}] is not supported`); } const providerChainId = await getProviderChainId(walletOrProvider); if (chainId !== providerChainId) { throw new Error( - `Request and provider chain id mismatch. Request: [${chainId}], provider: [${providerChainId}]` + `Request and provider chain id mismatch. Request: [${chainId.toString()}], provider: [${providerChainId.toString()}]` ); } @@ -78,7 +78,11 @@ const sponsoredCallERC2771 = async ( request.user as string, getPayloadToSign( { - struct, + struct: { + ...struct, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + }, type, isWallet: isWallet(walletOrProvider), }, @@ -97,6 +101,8 @@ const sponsoredCallERC2771 = async ( ...options, userSignature: signature, sponsorApiKey, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), }, }, config diff --git a/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts b/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts index 48c2dcf..a56af4a 100644 --- a/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts +++ b/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts @@ -22,7 +22,7 @@ export const sponsoredCallERC2771WithSignature = async ( const { signature, sponsorApiKey, struct, options } = payload; const isSupported = await isNetworkSupported( - { chainId: Number(struct.chainId) }, + { chainId: struct.chainId }, config ); if (!isSupported) { @@ -40,6 +40,8 @@ export const sponsoredCallERC2771WithSignature = async ( ...options, userSignature: signature, sponsorApiKey, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), }, }, config diff --git a/src/lib/erc2771/types/index.ts b/src/lib/erc2771/types/index.ts index dee1f6f..6615be0 100644 --- a/src/lib/erc2771/types/index.ts +++ b/src/lib/erc2771/types/index.ts @@ -1,10 +1,9 @@ -import { BigNumberish } from "ethers"; - import { BaseCallWithSyncFeeParams, BaseRelayParams, EIP712Domain, Optional, + SafeRequestPayload, } from "../../types"; export const EIP712_SPONSORED_CALL_ERC2771_TYPE_DATA = { @@ -46,7 +45,7 @@ export type SponsoredCallERC2771PayloadToSign = { }[]; }; primaryType?: "SponsoredCallERC2771"; - message: CallWithERC2771Struct; + message: SafeRequestPayload; }; export type CallWithSyncFeeERC2771PayloadToSign = { @@ -62,15 +61,15 @@ export type CallWithSyncFeeERC2771PayloadToSign = { }[]; }; primaryType?: "CallWithSyncFeeERC2771"; - message: CallWithERC2771Struct; + message: SafeRequestPayload; }; export type CallWithERC2771Struct = BaseRelayParams & ERC2771UserParams; export type ERC2771UserParams = { user: string; - userNonce: BigNumberish; - userDeadline: BigNumberish; + userNonce: bigint; + userDeadline: number; }; export type CallWithERC2771Request = Optional< @@ -82,8 +81,8 @@ export type CallWithSyncFeeERC2771Request = CallWithERC2771Request & BaseCallWithSyncFeeParams; export type CallWithERC2771RequestOptionalParameters = { - userNonce: BigNumberish; - userDeadline: BigNumberish; + userNonce: bigint; + userDeadline: number; }; export type SignatureData = { diff --git a/src/lib/erc2771/utils/getPayloadToSign.ts b/src/lib/erc2771/utils/getPayloadToSign.ts index c1ab951..f9b3613 100644 --- a/src/lib/erc2771/utils/getPayloadToSign.ts +++ b/src/lib/erc2771/utils/getPayloadToSign.ts @@ -1,5 +1,9 @@ import { getEIP712Domain } from "../../../utils"; -import { Config, EIP712_DOMAIN_TYPE_DATA } from "../../types"; +import { + Config, + EIP712_DOMAIN_TYPE_DATA, + SafeRequestPayload, +} from "../../types"; import { EIP712_SPONSORED_CALL_ERC2771_TYPE_DATA, SponsoredCallERC2771PayloadToSign, @@ -11,7 +15,7 @@ import { export const getPayloadToSign = ( payload: { - struct: CallWithERC2771Struct; + struct: SafeRequestPayload; type: ERC2771Type; isWallet: boolean; }, @@ -19,7 +23,7 @@ export const getPayloadToSign = ( ): SponsoredCallERC2771PayloadToSign | CallWithSyncFeeERC2771PayloadToSign => { const { isWallet, struct, type } = payload; const domain = getEIP712Domain( - { chainId: struct.chainId as number, type }, + { chainId: BigInt(struct.chainId), type }, config ); diff --git a/src/lib/erc2771/utils/mapRequestToStruct.ts b/src/lib/erc2771/utils/mapRequestToStruct.ts index 5d1f1db..1f65966 100644 --- a/src/lib/erc2771/utils/mapRequestToStruct.ts +++ b/src/lib/erc2771/utils/mapRequestToStruct.ts @@ -1,5 +1,4 @@ -import { BigNumber } from "ethers"; -import { getAddress } from "ethers/lib/utils"; +import { getAddress } from "ethers"; import { CallWithERC2771Request, @@ -11,7 +10,7 @@ export const mapRequestToStruct = async ( request: CallWithERC2771Request, override: Partial ): Promise => { - if (!override.userNonce && !request.userNonce) { + if (override.userNonce === undefined && request.userNonce === undefined) { throw new Error(`userNonce is not found in the request, nor fetched`); } @@ -21,12 +20,14 @@ export const mapRequestToStruct = async ( return { userNonce: - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - override.userNonce ?? BigNumber.from(request.userNonce!).toString(), + override.userNonce !== undefined + ? override.userNonce + : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + request.userNonce!, userDeadline: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - override.userDeadline ?? BigNumber.from(request.userDeadline!).toString(), - chainId: BigNumber.from(request.chainId).toString(), + override.userDeadline ?? request.userDeadline!, + chainId: request.chainId, target: getAddress(request.target as string), data: request.data, user: getAddress(request.user as string), diff --git a/src/lib/network/index.ts b/src/lib/network/index.ts index aaaa979..b8b2d24 100644 --- a/src/lib/network/index.ts +++ b/src/lib/network/index.ts @@ -1,11 +1,9 @@ -import axios from "axios"; - -import { getHttpErrorMessage } from "../../utils"; +import { axiosInstance, getHttpErrorMessage } from "../../utils"; import { Config } from "../types"; export const isNetworkSupported = async ( payload: { - chainId: number; + chainId: bigint; }, config: Config ): Promise => { @@ -17,8 +15,9 @@ export const getSupportedNetworks = async ( config: Config ): Promise => { try { - return (await axios.get<{ relays: string[] }>(`${config.url}/relays/v2`)) - .data.relays; + return ( + await axiosInstance.get<{ relays: string[] }>(`${config.url}/relays/v2`) + ).data.relays; } catch (error) { throw new Error( `GelatoRelaySDK/getSupportedNetworks: Failed with error: ${getHttpErrorMessage( diff --git a/src/lib/oracle/index.ts b/src/lib/oracle/index.ts index 92000a6..0e010c1 100644 --- a/src/lib/oracle/index.ts +++ b/src/lib/oracle/index.ts @@ -1,12 +1,9 @@ -import axios from "axios"; -import { BigNumber } from "ethers"; - -import { getHttpErrorMessage } from "../../utils"; +import { axiosInstance, getHttpErrorMessage } from "../../utils"; import { Config } from "../types"; export const isOracleActive = async ( payload: { - chainId: number; + chainId: bigint; }, config: Config ): Promise => { @@ -16,7 +13,7 @@ export const isOracleActive = async ( export const getGelatoOracles = async (config: Config): Promise => { try { - return (await axios.get(`${config.url}/oracles/`)).data.oracles; + return (await axiosInstance.get(`${config.url}/oracles/`)).data.oracles; } catch (error) { throw new Error( `GelatoRelaySDK/getGelatoOracles: Failed with error: ${getHttpErrorMessage( @@ -27,12 +24,14 @@ export const getGelatoOracles = async (config: Config): Promise => { }; export const getPaymentTokens = async ( - payload: { chainId: number }, + payload: { chainId: bigint }, config: Config ): Promise => { try { return ( - await axios.get(`${config.url}/oracles/${payload.chainId}/paymentTokens/`) + await axiosInstance.get( + `${config.url}/oracles/${payload.chainId.toString()}/paymentTokens/` + ) ).data.paymentTokens; } catch (error) { throw new Error( @@ -45,14 +44,14 @@ export const getPaymentTokens = async ( export const getEstimatedFee = async ( payload: { - chainId: number; + chainId: bigint; paymentToken: string; - gasLimit: BigNumber; + gasLimit: bigint; isHighPriority: boolean; - gasLimitL1: BigNumber; + gasLimitL1: bigint; }, config: Config -): Promise => { +): Promise => { const { chainId, gasLimit, gasLimitL1, isHighPriority, paymentToken } = payload; const params = { @@ -62,10 +61,13 @@ export const getEstimatedFee = async ( gasLimitL1: gasLimitL1.toString(), }; try { - const res = await axios.get(`${config.url}/oracles/${chainId}/estimate`, { - params, - }); - return BigNumber.from(res.data.estimatedFee); + const res = await axiosInstance.get( + `${config.url}/oracles/${chainId.toString()}/estimate`, + { + params, + } + ); + return BigInt(res.data.estimatedFee); } catch (error) { throw new Error( `GelatoRelaySDK/getEstimatedFee: Failed with error: ${getHttpErrorMessage( diff --git a/src/lib/sponsoredCall/index.ts b/src/lib/sponsoredCall/index.ts index 4b32bf2..6258584 100644 --- a/src/lib/sponsoredCall/index.ts +++ b/src/lib/sponsoredCall/index.ts @@ -1,5 +1,4 @@ -import { BigNumber } from "ethers"; -import { getAddress } from "ethers/lib/utils"; +import { getAddress } from "ethers"; import { post } from "../../utils"; import { isNetworkSupported } from "../network"; @@ -29,7 +28,7 @@ const mapRequestToStruct = async ( request: SponsoredCallRequest ): Promise => { return { - chainId: BigNumber.from(request.chainId).toString(), + chainId: request.chainId, target: getAddress(request.target as string), data: request.data, }; @@ -46,7 +45,7 @@ const sponsoredCall = async ( try { const { request, sponsorApiKey, options } = payload; const isSupported = await isNetworkSupported( - { chainId: Number(request.chainId) }, + { chainId: request.chainId }, config ); if (!isSupported) { @@ -63,6 +62,7 @@ const sponsoredCall = async ( ...struct, ...options, sponsorApiKey, + chainId: struct.chainId.toString(), }, }, config diff --git a/src/lib/status/index.ts b/src/lib/status/index.ts index 363be89..faf7de1 100644 --- a/src/lib/status/index.ts +++ b/src/lib/status/index.ts @@ -1,6 +1,4 @@ -import axios from "axios"; - -import { getHttpErrorMessage } from "../../utils"; +import { axiosInstance, getHttpErrorMessage } from "../../utils"; import { Config } from "../types"; import { TransactionStatusResponse } from "./types"; @@ -10,8 +8,9 @@ export const getTaskStatus = async ( config: Config ): Promise => { try { - return (await axios.get(`${config.url}/tasks/status/${payload.taskId}`)) - .data.task; + return ( + await axiosInstance.get(`${config.url}/tasks/status/${payload.taskId}`) + ).data.task; } catch (error) { throw new Error( `GelatoRelaySDK/getTaskStatus: Failed with error: ${getHttpErrorMessage( diff --git a/src/lib/types/index.ts b/src/lib/types/index.ts index 545a9d0..7ff5a8c 100644 --- a/src/lib/types/index.ts +++ b/src/lib/types/index.ts @@ -1,4 +1,4 @@ -import { BigNumberish, BytesLike } from "ethers"; +import { BytesLike } from "ethers"; export enum RelayCall { CallWithSyncFee, @@ -10,7 +10,7 @@ export enum RelayCall { export type Optional = Pick, K> & Omit; export type RelayRequestOptions = { - gasLimit?: BigNumberish; + gasLimit?: bigint; retries?: number; }; @@ -25,7 +25,7 @@ export type RelayResponse = { export type EIP712Domain = { name: string; version: string; - chainId: number; + chainId: string; verifyingContract: string; }; @@ -39,7 +39,7 @@ export const EIP712_DOMAIN_TYPE_DATA = { }; export type BaseRelayParams = { - chainId: BigNumberish; + chainId: bigint; target: string; data: BytesLike; }; @@ -58,3 +58,7 @@ export type Config = { relay1BalanceERC2771zkSync: string; }; }; + +export type SafeRequestPayload = { + [K in keyof T]: T[K] extends bigint ? string : T[K]; +}; diff --git a/src/utils/axios.ts b/src/utils/axios.ts new file mode 100644 index 0000000..6c5777d --- /dev/null +++ b/src/utils/axios.ts @@ -0,0 +1,3 @@ +import axios from "axios"; + +export const axiosInstance = axios.create(); diff --git a/src/utils/calculateDeadline.ts b/src/utils/calculateDeadline.ts index e7c9d36..12f0a53 100644 --- a/src/utils/calculateDeadline.ts +++ b/src/utils/calculateDeadline.ts @@ -1,5 +1,3 @@ -import { BigNumber } from "ethers"; - export const calculateDeadline = (gap: number) => { - return BigNumber.from(Math.floor(Date.now() / 1000) + gap).toString(); + return Math.floor(Date.now() / 1000) + gap; }; diff --git a/src/utils/eip712.ts b/src/utils/eip712.ts index e929dba..2ca7b64 100644 --- a/src/utils/eip712.ts +++ b/src/utils/eip712.ts @@ -5,7 +5,7 @@ import { getGelatoRelayERC2771Address } from "./relayAddress"; export const getEIP712Domain = ( payload: { - chainId: number; + chainId: bigint; type: ERC2771Type; }, config: Config @@ -16,7 +16,7 @@ export const getEIP712Domain = ( return { name: "GelatoRelayERC2771", version: "1", - chainId: chainId, + chainId: chainId.toString(), verifyingContract: getGelatoRelayERC2771Address( { chainId, type }, config @@ -26,7 +26,7 @@ export const getEIP712Domain = ( return { name: "GelatoRelay1BalanceERC2771", version: "1", - chainId: chainId, + chainId: chainId.toString(), verifyingContract: getGelatoRelayERC2771Address( { chainId, type }, config diff --git a/src/utils/getProviderChainId.ts b/src/utils/getProviderChainId.ts index 632a628..6aba1af 100644 --- a/src/utils/getProviderChainId.ts +++ b/src/utils/getProviderChainId.ts @@ -3,10 +3,13 @@ import { ethers } from "ethers"; import { isWallet } from "./isWallet"; export const getProviderChainId = async ( - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet -): Promise => { - let provider: ethers.providers.Provider; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet +): Promise => { + let provider: ethers.Provider; if (isWallet(walletOrProvider)) { + if (!walletOrProvider.provider) { + throw new Error(`Missing provider`); + } provider = walletOrProvider.provider; } else { provider = walletOrProvider; diff --git a/src/utils/getUserNonce.ts b/src/utils/getUserNonce.ts index 0ee8622..25bf01a 100644 --- a/src/utils/getUserNonce.ts +++ b/src/utils/getUserNonce.ts @@ -11,10 +11,10 @@ export const getUserNonce = async ( payload: { account: string; type: ERC2771Type; - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; }, config: Config -) => { +): Promise => { const { account, type, walletOrProvider } = payload; const chainId = await getProviderChainId(walletOrProvider); @@ -24,5 +24,5 @@ export const getUserNonce = async ( USER_NONCE_ABI, walletOrProvider ); - return await contract.userNonce(account); + return (await contract.userNonce(account)) as bigint; }; diff --git a/src/utils/index.ts b/src/utils/index.ts index 36e50bd..53deb39 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -9,3 +9,4 @@ export * from "./isWallet"; export * from "./relayAddress"; export * from "./isZkSync"; export * from "./getProviderChainId"; +export * from "./axios"; diff --git a/src/utils/isWallet.ts b/src/utils/isWallet.ts index e58fed1..ab1c92f 100644 --- a/src/utils/isWallet.ts +++ b/src/utils/isWallet.ts @@ -1,7 +1,7 @@ import { ethers } from "ethers"; export const isWallet = ( - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet + walletOrProvider: ethers.BrowserProvider | ethers.Wallet ): walletOrProvider is ethers.Wallet => { - return (walletOrProvider as { _isSigner: boolean })._isSigner; + return "signTransaction" in walletOrProvider; }; diff --git a/src/utils/isZkSync.ts b/src/utils/isZkSync.ts index a7364e2..1f37730 100644 --- a/src/utils/isZkSync.ts +++ b/src/utils/isZkSync.ts @@ -1,3 +1,3 @@ -export const isZkSync = (chainId: number): boolean => { - return chainId === 324 || chainId === 280; +export const isZkSync = (chainId: bigint): boolean => { + return chainId === BigInt(324) || chainId === BigInt(280); }; diff --git a/src/utils/populateOptionalUserParameters.ts b/src/utils/populateOptionalUserParameters.ts index 3411d6c..4044861 100644 --- a/src/utils/populateOptionalUserParameters.ts +++ b/src/utils/populateOptionalUserParameters.ts @@ -1,4 +1,4 @@ -import { BigNumber, ethers } from "ethers"; +import { ethers } from "ethers"; import { DEFAULT_DEADLINE_GAP } from "../constants"; import { @@ -18,7 +18,7 @@ export const populateOptionalUserParameters = async < payload: { request: Request; type: ERC2771Type; - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; }, config: Config ): Promise> => { @@ -27,20 +27,15 @@ export const populateOptionalUserParameters = async < if (!request.userDeadline) { parametersToOverride.userDeadline = calculateDeadline(DEFAULT_DEADLINE_GAP); } - if (!request.userNonce) { - parametersToOverride.userNonce = BigNumber.from( - ( - (await getUserNonce( - { - account: request.user as string, - type, - walletOrProvider, - }, - config - )) as BigNumber - ).toNumber() - ).toString(); + if (request.userNonce === undefined) { + parametersToOverride.userNonce = await getUserNonce( + { + account: request.user as string, + type, + walletOrProvider, + }, + config + ); } - return parametersToOverride; }; diff --git a/src/utils/post.ts b/src/utils/post.ts index a069d87..02d1309 100644 --- a/src/utils/post.ts +++ b/src/utils/post.ts @@ -1,11 +1,10 @@ -import axios from "axios"; - -import { Config, RelayCall } from "../lib/types"; +import { Config, RelayCall, SafeRequestPayload } from "../lib/types"; +import { axiosInstance } from "./axios"; import { getHttpErrorMessage } from "./getHttpErrorMessage"; export const post = async ( - payload: { relayCall: RelayCall; request: Request }, + payload: { relayCall: RelayCall; request: SafeRequestPayload }, config: Config ): Promise => { try { @@ -33,7 +32,7 @@ export const post = async ( return _exhaustiveCheck; } } - return (await axios.post(path, request)).data; + return (await axiosInstance.post(path, request)).data; } catch (error) { throw new Error(getHttpErrorMessage(error)); } diff --git a/src/utils/relayAddress.ts b/src/utils/relayAddress.ts index 6876015..d53c33b 100644 --- a/src/utils/relayAddress.ts +++ b/src/utils/relayAddress.ts @@ -1,4 +1,4 @@ -import { getAddress } from "ethers/lib/utils"; +import { getAddress } from "ethers"; import { ERC2771Type } from "../lib/erc2771/types"; import { Config } from "../lib/types"; @@ -7,7 +7,7 @@ import { isZkSync } from "./isZkSync"; export const getGelatoRelayERC2771Address = ( payload: { - chainId: number; + chainId: bigint; type: ERC2771Type; }, config: Config diff --git a/src/utils/signTypedDataV4.ts b/src/utils/signTypedDataV4.ts index 5ec062b..faf54ec 100644 --- a/src/utils/signTypedDataV4.ts +++ b/src/utils/signTypedDataV4.ts @@ -9,21 +9,21 @@ import { import { isWallet } from "./isWallet"; export const signTypedDataV4 = async ( - walletOrProvider: ethers.providers.Web3Provider | ethers.Wallet, + walletOrProvider: ethers.BrowserProvider | ethers.Wallet, address: string, payload: | SponsoredCallERC2771PayloadToSign | CallWithSyncFeeERC2771PayloadToSign ): Promise => { if (isWallet(walletOrProvider)) { - return await walletOrProvider._signTypedData( + return await walletOrProvider.signTypedData( payload.domain, payload.types, payload.message ); } // Magic Connect accepts payload as an object - if ((walletOrProvider.provider as { isMagic: boolean }).isMagic) { + if ((walletOrProvider.provider as unknown as { isMagic: boolean }).isMagic) { return await walletOrProvider.send(SIGN_TYPED_DATA_V4, [address, payload]); } const signature = await walletOrProvider.send(SIGN_TYPED_DATA_V4, [ diff --git a/tsconfig.json b/tsconfig.json index c556b79..7cbd103 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "extends": "@tsconfig/recommended/tsconfig.json", "compilerOptions": { "lib": ["es2020"], - "noImplicitAny": false, + "noImplicitAny": true, "allowSyntheticDefaultImports": true, "downlevelIteration": true, "skipLibCheck": true, @@ -12,6 +12,7 @@ "typeRoots": ["./node_modules/@types"], "outDir": "dist", "rootDir": "src", + "strict": true, "declaration": true, "useUnknownInCatchVariables": false }, diff --git a/yarn.lock b/yarn.lock index b63ee60..23a08d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,16 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@adraffy/ens-normalize@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz#60111a5d9db45b2e5cbb6231b0bb8d97e8659316" + integrity sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg== + "@esbuild/android-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" @@ -119,19 +129,19 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" + integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" - integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== +"@eslint/eslintrc@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" + integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.1" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -139,375 +149,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" - integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/networks@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" - integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/web@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" - integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@eslint/js@^8.46.0": + version "8.46.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" + integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -523,6 +173,16 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@noble/hashes@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + +"@noble/secp256k1@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -545,16 +205,16 @@ fastq "^1.6.0" "@pkgr/utils@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" - integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== + version "2.4.2" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" + integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== dependencies: cross-spawn "^7.0.3" + fast-glob "^3.3.0" is-glob "^4.0.3" - open "^8.4.0" + open "^9.1.0" picocolors "^1.0.0" - tiny-glob "^0.2.9" - tslib "^2.4.0" + tslib "^2.6.0" "@tsconfig/recommended@1.0.2": version "1.0.2" @@ -562,9 +222,9 @@ integrity sha512-dbHBtbWBOjq0/otpopAE02NT2Cm05Qe2JsEKeCf/wjSYbI2hz8nCqnpnOJWHATgjDz4fd3dchs3Wy1gQGjfN6w== "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/json5@^0.0.29": version "0.0.29" @@ -576,93 +236,98 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.25.tgz#8863940fefa1234d3fcac7a4b7a48a6c992d67af" integrity sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA== +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + "@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== "@typescript-eslint/eslint-plugin@^5.59.1": - version "5.59.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz#9b09ee1541bff1d2cebdcb87e7ce4a4003acde08" - integrity sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.1" - "@typescript-eslint/type-utils" "5.59.1" - "@typescript-eslint/utils" "5.59.1" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" natural-compare-lite "^1.4.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.59.1": - version "5.59.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.1.tgz#73c2c12127c5c1182d2e5b71a8fa2a85d215cbb4" - integrity sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== dependencies: - "@typescript-eslint/scope-manager" "5.59.1" - "@typescript-eslint/types" "5.59.1" - "@typescript-eslint/typescript-estree" "5.59.1" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.1": - version "5.59.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz#8a20222719cebc5198618a5d44113705b51fd7fe" - integrity sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "5.59.1" - "@typescript-eslint/visitor-keys" "5.59.1" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/type-utils@5.59.1": - version "5.59.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz#63981d61684fd24eda2f9f08c0a47ecb000a2111" - integrity sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw== +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== dependencies: - "@typescript-eslint/typescript-estree" "5.59.1" - "@typescript-eslint/utils" "5.59.1" + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.59.1": - version "5.59.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.1.tgz#03f3fedd1c044cb336ebc34cc7855f121991f41d" - integrity sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.59.1": - version "5.59.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz#4aa546d27fd0d477c618f0ca00b483f0ec84c43c" - integrity sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA== +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.59.1" - "@typescript-eslint/visitor-keys" "5.59.1" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.59.1": - version "5.59.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.1.tgz#d89fc758ad23d2157cfae53f0b429bdf15db9473" - integrity sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA== +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.1" - "@typescript-eslint/types" "5.59.1" - "@typescript-eslint/typescript-estree" "5.59.1" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.59.1": - version "5.59.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz#0d96c36efb6560d7fb8eb85de10442c10d8f6058" - integrity sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" acorn-jsx@^5.3.2: @@ -670,15 +335,15 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== aggregate-error@^3.0.0: version "3.1.0" @@ -688,7 +353,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -723,9 +388,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: color-convert "^2.0.1" ansi-styles@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== argparse@^2.0.1: version "2.0.1" @@ -756,6 +421,17 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlastindex@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" + integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" @@ -776,6 +452,18 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +arraybuffer.prototype.slice@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" + integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -791,34 +479,30 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== +axios@0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.14.9" form-data "^4.0.0" - proxy-from-env "^1.1.0" balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== -bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" brace-expansion@^1.1.7: version "1.1.11" @@ -842,10 +526,12 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +bundle-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== + dependencies: + run-applescript "^5.0.0" call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -938,7 +624,7 @@ commander@^9.4.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" @@ -968,15 +654,33 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== + dependencies: + bplist-parser "^0.2.0" + untildify "^4.0.0" -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== + dependencies: + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -1008,9 +712,9 @@ doctrine@^3.0.0: esutils "^2.0.2" dotenv@^16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== dts-minify@^0.3.1: version "0.3.2" @@ -1022,19 +726,6 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1046,54 +737,26 @@ emoji-regex@^9.2.2: integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enhanced-resolve@^5.12.0: - version "5.13.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" - integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -es-abstract@^1.19.0, es-abstract@^1.19.5: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== dependencies: array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" available-typed-arrays "^1.0.5" call-bind "^1.0.2" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" + get-intrinsic "^1.2.1" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" @@ -1113,14 +776,18 @@ es-abstract@^1.20.4: object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" safe-regex-test "^1.0.0" string.prototype.trim "^1.2.7" string.prototype.trimend "^1.0.6" string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" + which-typed-array "^1.1.10" es-set-tostringtag@^2.0.1: version "2.0.1" @@ -1181,9 +848,9 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-prettier@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-import-resolver-node@^0.3.7: version "0.3.7" @@ -1208,7 +875,7 @@ eslint-import-resolver-typescript@^3.5.5: is-glob "^4.0.3" synckit "^0.8.5" -eslint-module-utils@^2.7.4: +eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== @@ -1216,25 +883,28 @@ eslint-module-utils@^2.7.4: debug "^3.2.7" eslint-plugin-import@^2.27.5: - version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + version "2.28.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" + integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== dependencies: array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" array.prototype.flat "^1.3.1" array.prototype.flatmap "^1.3.1" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" + eslint-module-utils "^2.8.0" has "^1.0.3" - is-core-module "^2.11.0" + is-core-module "^2.12.1" is-glob "^4.0.3" minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" + resolve "^1.22.3" + semver "^6.3.1" + tsconfig-paths "^3.14.2" eslint-plugin-prettier@^4.2.1: version "4.2.1" @@ -1251,45 +921,40 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint-visitor-keys@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" - integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" + integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== eslint@^8.39.0: - version "8.39.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" - integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== + version "8.46.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" + integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.2" - "@eslint/js" "8.39.0" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.1" + "@eslint/js" "^8.46.0" + "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.0" - espree "^9.5.1" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.2" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -1297,32 +962,29 @@ eslint@^8.39.0: find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" - integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.0" + eslint-visitor-keys "^3.4.1" esquery@^1.4.2: version "1.5.0" @@ -1353,46 +1015,38 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -ethers@5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -execa@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" - integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== +ethers@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.7.0.tgz#0f772c31a9450de28aa518b181c8cb269bbe7fd1" + integrity sha512-pxt5hK82RNwcTX2gOZP81t6qVPVspnkpeivwEgQuK9XUvbNtghBnT8GNIb/gPh+WnVSfi8cXC9XlfT8sqc6D6w== + 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" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^7.0.0, execa@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.1" @@ -1410,14 +1064,14 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== +fast-glob@^3.2.9, fast-glob@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -1433,12 +1087,12 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" @@ -1473,11 +1127,11 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.15.0: +follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -1501,7 +1155,7 @@ form-data@^4.0.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== function-bind@^1.1.1: version "1.1.1" @@ -1518,30 +1172,22 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" -get-stream@^6.0.1: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -1555,9 +1201,11 @@ get-symbol-description@^1.0.0: get-intrinsic "^1.1.1" get-tsconfig@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f" - integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ== + version "4.6.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" + integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== + dependencies: + resolve-pkg-maps "^1.0.0" glob-parent@^5.1.2: version "5.1.2" @@ -1574,14 +1222,14 @@ glob-parent@^6.0.2: is-glob "^4.0.3" glob@^7.1.3: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -1610,11 +1258,6 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -1628,21 +1271,16 @@ globby@^11.1.0: slash "^3.0.0" globby@^13.1.3: - version "13.1.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" - integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" + fast-glob "^3.3.0" + ignore "^5.2.4" merge2 "^1.4.1" slash "^4.0.0" -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -1651,14 +1289,14 @@ gopd@^1.0.1: get-intrinsic "^1.1.3" graceful-fs@^4.2.4: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" @@ -1701,22 +1339,10 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== human-signals@^4.3.0: version "4.3.1" @@ -1728,12 +1354,12 @@ husky@^8.0.3: resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.2.0, ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -1744,7 +1370,7 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -1754,25 +1380,16 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" @@ -1806,20 +1423,15 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-callable@^1.1.3, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-core-module@^2.11.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" - integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== +is-core-module@^2.11.0, is-core-module@^2.12.0, is-core-module@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" @@ -1830,15 +1442,20 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-docker@^2.0.0, is-docker@^2.1.1: +is-docker@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -1857,6 +1474,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -1894,6 +1518,11 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" @@ -1914,15 +1543,11 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" is-weakref@^1.0.2: version "1.0.2" @@ -1938,20 +1563,15 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -js-sdsl@^4.1.4: - version "4.4.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" - integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== - -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-yaml@^4.1.0: version "4.1.0" @@ -1968,12 +1588,12 @@ json-schema-traverse@^0.4.1: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" @@ -1991,9 +1611,9 @@ lilconfig@2.1.0: integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lint-staged@^13.2.2: - version "13.2.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca" - integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA== + version "13.2.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" + integrity sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg== dependencies: chalk "5.2.0" cli-truncate "^3.1.0" @@ -2092,17 +1712,7 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -2117,9 +1727,9 @@ minimatch@^5.0.1: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minimize-js@^1.3.1: version "1.3.1" @@ -2152,13 +1762,20 @@ natural-compare-lite@^1.4.0: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + npm-run-path@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" @@ -2166,12 +1783,7 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -object-inspect@^1.12.0, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-inspect@^1.12.3: +object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== @@ -2181,7 +1793,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.4: +object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -2191,6 +1803,25 @@ object.assign@^4.1.2, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.groupby@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" + integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.2" + get-intrinsic "^1.2.1" + object.values@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" @@ -2203,11 +1834,11 @@ object.values@^1.1.6: once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -2221,26 +1852,27 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" -open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== +open@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" is-wsl "^2.2.0" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" p-limit@^3.0.2: version "3.1.0" @@ -2278,9 +1910,9 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -2333,44 +1965,44 @@ prettier@^2.8.8: integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-bytes@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.0.tgz#1d1cc9aae1939012c74180b679da6684616bf804" - integrity sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" + integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== progress-barjs@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/progress-barjs/-/progress-barjs-2.2.1.tgz#d87b28965d82c92ea6b77b8fd35b0ba15db784f9" integrity sha512-pgNtlw+gZ/nqQJDYKUbAnyhZPdyiBoxB3gzXcmF7Cl2JhD8I87Z501T3rr97OHoSzx3JFfNcY9ANiAVPF4qPxA== -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve@^1.22.1: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" @@ -2380,6 +2012,15 @@ resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.3: + version "1.22.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" + integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== + dependencies: + is-core-module "^2.12.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -2405,6 +2046,13 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -2419,6 +2067,16 @@ rxjs@^7.8.0: dependencies: tslib "^2.1.0" +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-regex-test@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" @@ -2428,20 +2086,15 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -scrypt-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -2466,7 +2119,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -2508,9 +2161,9 @@ slice-ansi@^5.0.0: is-fullwidth-code-point "^4.0.0" string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" @@ -2539,15 +2192,6 @@ string.prototype.trim@^1.2.7: define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" @@ -2557,15 +2201,6 @@ string.prototype.trimend@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" @@ -2583,9 +2218,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -2594,12 +2229,17 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-final-newline@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -2632,20 +2272,17 @@ tapable@^2.2.0: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tiny-glob@^0.2.9: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" - integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== to-regex-range@^5.0.1: version "5.0.1" @@ -2654,30 +2291,30 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tslib@^2.4.1, tslib@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.1.0, tslib@^2.4.1, tslib@^2.5.0, tslib@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== tsutils@^3.21.0: version "3.21.0" @@ -2703,6 +2340,36 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -2727,6 +2394,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -2745,17 +2417,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.10, which-typed-array@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^2.0.1: version "2.0.2" @@ -2764,11 +2435,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -2790,12 +2456,12 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== yallist@^4.0.0: version "4.0.0" @@ -2803,9 +2469,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" - integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== yocto-queue@^0.1.0: version "0.1.0" From c906e05c7946c3afcf88ce5b7870c17ddbd6a3a7 Mon Sep 17 00:00:00 2001 From: Ogulcan Patavi Date: Fri, 25 Aug 2023 17:50:14 +0300 Subject: [PATCH 4/6] feat: concurrent erc2771 (#30) --- package.json | 2 +- src/constants/index.ts | 10 ++ src/index.ts | 34 +++- .../erc2771/callWithSyncFeeERC2771/index.ts | 146 ++++++++++++------ .../index.ts | 80 +++++++--- .../erc2771/getSignatureDataERC2771/index.ts | 86 +++++++---- src/lib/erc2771/sponsoredCallERC2771/index.ts | 129 +++++++++++----- .../index.ts | 74 ++++++--- src/lib/erc2771/types/index.ts | 82 +++++++++- src/lib/erc2771/utils/getPayloadToSign.ts | 70 ++++++++- src/lib/erc2771/utils/mapRequestToStruct.ts | 71 ++++++--- src/lib/types/index.ts | 8 + src/utils/eip712.ts | 20 +++ src/utils/generateSalt.ts | 10 ++ src/utils/index.ts | 3 + src/utils/isConcurrentRequest.ts | 10 ++ src/utils/isConcurrentStruct.ts | 10 ++ src/utils/populateOptionalUserParameters.ts | 89 ++++++++--- src/utils/relayAddress.ts | 8 + src/utils/signTypedDataV4.ts | 4 + 20 files changed, 733 insertions(+), 213 deletions(-) create mode 100644 src/utils/generateSalt.ts create mode 100644 src/utils/isConcurrentRequest.ts create mode 100644 src/utils/isConcurrentStruct.ts diff --git a/package.json b/package.json index f98cf92..1daea2d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gelatonetwork/relay-sdk", - "version": "5.0.0", + "version": "5.1.0-0", "description": "SDK to integrate with Gelato Relay", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/constants/index.ts b/src/constants/index.ts index c47ad5d..2e7c6ab 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -18,3 +18,13 @@ export const GELATO_RELAY_ERC2771_ZKSYNC_ADDRESS = "0x22DCC39b2AC376862183dd35A1664798dafC7Da6"; export const GELATO_RELAY_1BALANCE_ERC2771_ZKSYNC_ADDRESS = "0x97015cD4C3d456997DD1C40e2a18c79108FCc412"; + +export const GELATO_RELAY_CONCURRENT_ERC2771_ADDRESS = + "0x8598806401A63Ddf52473F1B3C55bC9E33e2d73b"; +export const GELATO_RELAY_1BALANCE_CONCURRENT_ERC2771_ADDRESS = + "0xc65d82ECE367EF06bf2AB791B3f3CF037Dc0e816"; + +export const GELATO_RELAY_CONCURRENT_ERC2771_ZKSYNC_ADDRESS = + "0xBa4082F4961c8Fb76231995C967CD9aa40f321b5"; +export const GELATO_RELAY_1BALANCE_CONCURRENT_ERC2771_ZKSYNC_ADDRESS = + "0xB8828e4c662D1a7e4f3d1f622EfAE6B63D852ED8"; diff --git a/src/index.ts b/src/index.ts index e9ebb77..7637e7b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,6 +8,8 @@ import { CallWithERC2771Request, ERC2771Type, CallWithSyncFeeERC2771Request, + CallWithSyncFeeConcurrentERC2771Request, + CallWithConcurrentERC2771Request, } from "./lib/erc2771/types"; import { TransactionStatusResponse } from "./lib/status/types"; import { @@ -21,7 +23,11 @@ import { GELATO_RELAY_1BALANCE_ERC2771_ZKSYNC_ADDRESS, GELATO_RELAY_ERC2771_ADDRESS, GELATO_RELAY_ERC2771_ZKSYNC_ADDRESS, + GELATO_RELAY_1BALANCE_CONCURRENT_ERC2771_ADDRESS, + GELATO_RELAY_CONCURRENT_ERC2771_ADDRESS, GELATO_RELAY_URL, + GELATO_RELAY_CONCURRENT_ERC2771_ZKSYNC_ADDRESS, + GELATO_RELAY_1BALANCE_CONCURRENT_ERC2771_ZKSYNC_ADDRESS, } from "./constants"; export { @@ -35,6 +41,8 @@ export { ERC2771Type, CallWithSyncFeeERC2771Request, BaseCallWithSyncFeeParams, + CallWithSyncFeeConcurrentERC2771Request, + CallWithConcurrentERC2771Request, Config, }; export class GelatoRelay { @@ -66,6 +74,18 @@ export class GelatoRelay { relay1BalanceERC2771zkSync: config?.contract?.relay1BalanceERC2771zkSync ?? GELATO_RELAY_1BALANCE_ERC2771_ZKSYNC_ADDRESS, + relayConcurrentERC2771: + config?.contract?.relayConcurrentERC2771 ?? + GELATO_RELAY_CONCURRENT_ERC2771_ADDRESS, + relay1BalanceConcurrentERC2771: + config?.contract?.relay1BalanceConcurrentERC2771 ?? + GELATO_RELAY_1BALANCE_CONCURRENT_ERC2771_ADDRESS, + relayConcurrentERC2771zkSync: + config?.contract?.relayConcurrentERC2771zkSync ?? + GELATO_RELAY_CONCURRENT_ERC2771_ZKSYNC_ADDRESS, + relay1BalanceConcurrentERC2771zkSync: + config?.contract?.relay1BalanceConcurrentERC2771zkSync ?? + GELATO_RELAY_1BALANCE_CONCURRENT_ERC2771_ZKSYNC_ADDRESS, }, }; }; @@ -83,14 +103,16 @@ export class GelatoRelay { library.relayWithSyncFee({ request, options }, this.#config); /** - * @param {CallWithSyncFeeERC2771Request} request - CallWithSyncFeeERC2771 request to be relayed by Gelato Executors + * @param {CallWithSyncFeeERC2771Request | CallWithSyncFeeConcurrentERC2771Request} request - Call with sync fee: Sequential ERC2771 or Concurrent ERC2771 request to be relayed by Gelato Executors * @param {ethers.BrowserProvider | ethers.Wallet} walletOrProvider - BrowserProvider [front-end] or Wallet [back-end] to sign the payload * @param {RelayRequestOptions} [options] - Optional Relay configuration * @returns {Promise} Response object with taskId parameter * */ callWithSyncFeeERC2771 = ( - request: CallWithSyncFeeERC2771Request, + request: + | CallWithSyncFeeERC2771Request + | CallWithSyncFeeConcurrentERC2771Request, walletOrProvider: ethers.BrowserProvider | ethers.Wallet, options?: RelayRequestOptions ): Promise => @@ -121,7 +143,7 @@ export class GelatoRelay { ); /** - * @param {CallWithERC2771Request} request - CallWithERC2771Request to be relayed by Gelato Executors + * @param {CallWithERC2771Request | CallWithConcurrentERC2771Request} request - Sponsored: Sequential ERC2771 or Concurrent ERC2771 request to be relayed by Gelato Executors * @param {ethers.BrowserProvider | ethers.Wallet} walletOrProvider - BrowserProvider [front-end] or Wallet [back-end] to sign the payload * @param {string} sponsorApiKey - Sponsor API key * @param {RelayRequestOptions} [options] - Optional Relay configuration @@ -129,7 +151,7 @@ export class GelatoRelay { * */ sponsoredCallERC2771 = ( - request: CallWithERC2771Request, + request: CallWithERC2771Request | CallWithConcurrentERC2771Request, walletOrProvider: ethers.BrowserProvider | ethers.Wallet, sponsorApiKey: string, options?: RelayRequestOptions @@ -145,14 +167,14 @@ export class GelatoRelay { ); /** - * @param {CallWithERC2771Request} request - CallWithERC2771Request to be relayed by Gelato Executors + * @param {CallWithERC2771Request | CallWithConcurrentERC2771Request} request - Sequential ERC2771 or Concurrent ERC2771 request to be relayed by Gelato Executors * @param {ethers.BrowserProvider | ethers.Wallet} walletOrProvider - BrowserProvider [front-end] or Wallet [back-end] to sign the payload * @param {ERC2771Type} type - ERC2771Type.CallWithSyncFee or ERC2771Type.SponsoredCall * @returns {Promise} Response object with taskId parameter * */ getSignatureDataERC2771 = ( - request: CallWithERC2771Request, + request: CallWithERC2771Request | CallWithConcurrentERC2771Request, walletOrProvider: ethers.BrowserProvider | ethers.Wallet, type: ERC2771Type ): Promise => diff --git a/src/lib/erc2771/callWithSyncFeeERC2771/index.ts b/src/lib/erc2771/callWithSyncFeeERC2771/index.ts index 606ca39..6655728 100644 --- a/src/lib/erc2771/callWithSyncFeeERC2771/index.ts +++ b/src/lib/erc2771/callWithSyncFeeERC2771/index.ts @@ -10,15 +10,16 @@ import { import { isNetworkSupported } from "../../network"; import { BaseCallWithSyncFeeParams, + ConcurrencyOptions, Config, RelayCall, RelayRequestOptions, RelayResponse, } from "../../types"; import { - CallWithERC2771Request, - CallWithERC2771RequestOptionalParameters, + CallWithConcurrentERC2771Struct, CallWithERC2771Struct, + CallWithSyncFeeConcurrentERC2771Request, CallWithSyncFeeERC2771Request, ERC2771Type, UserAuthSignature, @@ -27,7 +28,9 @@ import { getPayloadToSign, mapRequestToStruct } from "../utils"; export const relayWithCallWithSyncFeeERC2771 = async ( payload: { - request: CallWithSyncFeeERC2771Request; + request: + | CallWithSyncFeeERC2771Request + | CallWithSyncFeeConcurrentERC2771Request; walletOrProvider: ethers.BrowserProvider | ethers.Wallet; options?: RelayRequestOptions; }, @@ -52,58 +55,109 @@ export const relayWithCallWithSyncFeeERC2771 = async ( ); } - const { isRelayContext, feeToken, ...callWithSyncFeeRequest } = request; + if (request.isConcurrent) { + const isConcurrent = true; + const { isRelayContext, feeToken, ...callWithSyncFeeRequest } = request; + const type = ERC2771Type.ConcurrentCallWithSyncFee; - const type = ERC2771Type.CallWithSyncFee; - - const parametersToOverride = await populateOptionalUserParameters< - CallWithERC2771Request, - CallWithERC2771RequestOptionalParameters - >({ request: callWithSyncFeeRequest, type, walletOrProvider }, config); - - const struct = await mapRequestToStruct( - callWithSyncFeeRequest, - parametersToOverride - ); - - const signature = await signTypedDataV4( - walletOrProvider, - callWithSyncFeeRequest.user as string, - getPayloadToSign( + const parametersToOverride = await populateOptionalUserParameters( + { request: callWithSyncFeeRequest, type, walletOrProvider }, + config + ); + const struct = await mapRequestToStruct( + callWithSyncFeeRequest, + parametersToOverride + ); + const signature = await signTypedDataV4( + walletOrProvider, + callWithSyncFeeRequest.user as string, + getPayloadToSign( + { + struct: { + ...struct, + chainId: struct.chainId.toString(), + }, + type, + isWallet: isWallet(walletOrProvider), + }, + config + ) + ); + return await post< + CallWithConcurrentERC2771Struct & + BaseCallWithSyncFeeParams & + RelayRequestOptions & + UserAuthSignature & + ConcurrencyOptions, + RelayResponse + >( { - struct: { + relayCall: RelayCall.CallWithSyncFeeERC2771, + request: { ...struct, + ...options, + feeToken, + isRelayContext: isRelayContext ?? true, + userSignature: signature, chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), + isConcurrent, }, - type, - isWallet: isWallet(walletOrProvider), }, config - ) - ); + ); + } else { + const isConcurrent = false; + const { isRelayContext, feeToken, ...callWithSyncFeeRequest } = request; + const type = ERC2771Type.CallWithSyncFee; - return await post< - CallWithERC2771Struct & - BaseCallWithSyncFeeParams & - RelayRequestOptions & - UserAuthSignature, - RelayResponse - >( - { - relayCall: RelayCall.CallWithSyncFeeERC2771, - request: { - ...struct, - ...options, - feeToken, - isRelayContext: isRelayContext ?? true, - userSignature: signature, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), + const parametersToOverride = await populateOptionalUserParameters( + { request: callWithSyncFeeRequest, type, walletOrProvider }, + config + ); + const struct = await mapRequestToStruct( + callWithSyncFeeRequest, + parametersToOverride + ); + const signature = await signTypedDataV4( + walletOrProvider, + callWithSyncFeeRequest.user as string, + getPayloadToSign( + { + struct: { + ...struct, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + }, + type, + isWallet: isWallet(walletOrProvider), + }, + config + ) + ); + return await post< + CallWithERC2771Struct & + BaseCallWithSyncFeeParams & + RelayRequestOptions & + UserAuthSignature & + ConcurrencyOptions, + RelayResponse + >( + { + relayCall: RelayCall.CallWithSyncFeeERC2771, + request: { + ...struct, + ...options, + feeToken, + isRelayContext: isRelayContext ?? true, + userSignature: signature, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + isConcurrent, + }, }, - }, - config - ); + config + ); + } } catch (error) { const errorMessage = (error as Error).message; throw new Error( diff --git a/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts b/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts index c2dc38a..8262893 100644 --- a/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts +++ b/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts @@ -1,17 +1,22 @@ -import { post } from "../../../utils"; +import { isConcurrentStruct, post } from "../../../utils"; import { isNetworkSupported } from "../../network"; import { BaseCallWithSyncFeeParams, + ConcurrencyOptions, Config, RelayCall, RelayRequestOptions, RelayResponse, } from "../../types"; -import { CallWithERC2771Struct, UserAuthSignature } from "../types"; +import { + CallWithConcurrentERC2771Struct, + CallWithERC2771Struct, + UserAuthSignature, +} from "../types"; export const callWithSyncFeeERC2771WithSignature = async ( payload: { - struct: CallWithERC2771Struct; + struct: CallWithERC2771Struct | CallWithConcurrentERC2771Struct; syncFeeParams: BaseCallWithSyncFeeParams; signature: string; options?: RelayRequestOptions; @@ -29,27 +34,56 @@ export const callWithSyncFeeERC2771WithSignature = async ( throw new Error(`Chain id [${struct.chainId}] is not supported`); } - return await post< - CallWithERC2771Struct & - BaseCallWithSyncFeeParams & - RelayRequestOptions & - UserAuthSignature, - RelayResponse - >( - { - relayCall: RelayCall.CallWithSyncFeeERC2771, - request: { - ...struct, - ...syncFeeParams, - ...options, - isRelayContext: syncFeeParams.isRelayContext ?? true, - userSignature: signature, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), + if (isConcurrentStruct(struct)) { + const isConcurrent = true; + return await post< + CallWithConcurrentERC2771Struct & + BaseCallWithSyncFeeParams & + RelayRequestOptions & + UserAuthSignature & + ConcurrencyOptions, + RelayResponse + >( + { + relayCall: RelayCall.CallWithSyncFeeERC2771, + request: { + ...struct, + ...syncFeeParams, + ...options, + isRelayContext: syncFeeParams.isRelayContext ?? true, + userSignature: signature, + chainId: struct.chainId.toString(), + isConcurrent, + }, }, - }, - config - ); + config + ); + } else { + const isConcurrent = false; + return await post< + CallWithERC2771Struct & + BaseCallWithSyncFeeParams & + RelayRequestOptions & + UserAuthSignature & + ConcurrencyOptions, + RelayResponse + >( + { + relayCall: RelayCall.CallWithSyncFeeERC2771, + request: { + ...struct, + ...syncFeeParams, + ...options, + isRelayContext: syncFeeParams.isRelayContext ?? true, + userSignature: signature, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + isConcurrent, + }, + }, + config + ); + } } catch (error) { const errorMessage = (error as Error).message; throw new Error( diff --git a/src/lib/erc2771/getSignatureDataERC2771/index.ts b/src/lib/erc2771/getSignatureDataERC2771/index.ts index aa628ab..b3ffdf7 100644 --- a/src/lib/erc2771/getSignatureDataERC2771/index.ts +++ b/src/lib/erc2771/getSignatureDataERC2771/index.ts @@ -2,6 +2,7 @@ import { ethers } from "ethers"; import { getProviderChainId, + isConcurrentRequest, isWallet, populateOptionalUserParameters, signTypedDataV4, @@ -11,14 +12,14 @@ import { Config } from "../../types"; import { SignatureData, CallWithERC2771Request, - CallWithERC2771RequestOptionalParameters, ERC2771Type, + CallWithConcurrentERC2771Request, } from "../types"; import { getPayloadToSign, mapRequestToStruct } from "../utils"; export const getSignatureDataERC2771 = async ( payload: { - request: CallWithERC2771Request; + request: CallWithERC2771Request | CallWithConcurrentERC2771Request; walletOrProvider: ethers.BrowserProvider | ethers.Wallet; type: ERC2771Type; }, @@ -43,34 +44,65 @@ export const getSignatureDataERC2771 = async ( ); } - const parametersToOverride = await populateOptionalUserParameters< - CallWithERC2771Request, - CallWithERC2771RequestOptionalParameters - >({ request, type, walletOrProvider }, config); - - const struct = await mapRequestToStruct(request, parametersToOverride); - - const signature = await signTypedDataV4( - walletOrProvider, - request.user as string, - getPayloadToSign( - { - struct: { - ...struct, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), + if (isConcurrentRequest(request)) { + const concurrentType = type as + | ERC2771Type.ConcurrentCallWithSyncFee + | ERC2771Type.ConcurrentSponsoredCall; + const parametersToOverride = await populateOptionalUserParameters( + { request, type: concurrentType, walletOrProvider }, + config + ); + const struct = await mapRequestToStruct(request, parametersToOverride); + const signature = await signTypedDataV4( + walletOrProvider, + request.user as string, + getPayloadToSign( + { + struct: { + ...struct, + chainId: struct.chainId.toString(), + }, + type, + isWallet: isWallet(walletOrProvider), }, - type, - isWallet: isWallet(walletOrProvider), - }, + config + ) + ); + return { + struct, + signature, + }; + } else { + const nonConcurrentType = type as + | ERC2771Type.CallWithSyncFee + | ERC2771Type.SponsoredCall; + const parametersToOverride = await populateOptionalUserParameters( + { request, type: nonConcurrentType, walletOrProvider }, config - ) - ); + ); + const struct = await mapRequestToStruct(request, parametersToOverride); + const signature = await signTypedDataV4( + walletOrProvider, + request.user as string, + getPayloadToSign( + { + struct: { + ...struct, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + }, + type, + isWallet: isWallet(walletOrProvider), + }, + config + ) + ); - return { - struct, - signature, - }; + return { + struct, + signature, + }; + } } catch (error) { const errorMessage = (error as Error).message; throw new Error( diff --git a/src/lib/erc2771/sponsoredCallERC2771/index.ts b/src/lib/erc2771/sponsoredCallERC2771/index.ts index 0a8e796..2dea619 100644 --- a/src/lib/erc2771/sponsoredCallERC2771/index.ts +++ b/src/lib/erc2771/sponsoredCallERC2771/index.ts @@ -2,6 +2,7 @@ import { ethers } from "ethers"; import { getProviderChainId, + isConcurrentRequest, isWallet, populateOptionalUserParameters, post, @@ -10,14 +11,16 @@ import { import { isNetworkSupported } from "../../network"; import { ApiKey, + ConcurrencyOptions, Config, RelayCall, RelayRequestOptions, RelayResponse, } from "../../types"; import { + CallWithConcurrentERC2771Request, + CallWithConcurrentERC2771Struct, CallWithERC2771Request, - CallWithERC2771RequestOptionalParameters, CallWithERC2771Struct, ERC2771Type, UserAuthSignature, @@ -26,7 +29,7 @@ import { getPayloadToSign, mapRequestToStruct } from "../utils"; export const relayWithSponsoredCallERC2771 = async ( payload: { - request: CallWithERC2771Request; + request: CallWithERC2771Request | CallWithConcurrentERC2771Request; walletOrProvider: ethers.BrowserProvider | ethers.Wallet; sponsorApiKey: string; options?: RelayRequestOptions; @@ -38,7 +41,7 @@ export const relayWithSponsoredCallERC2771 = async ( const sponsoredCallERC2771 = async ( payload: { - request: CallWithERC2771Request; + request: CallWithERC2771Request | CallWithConcurrentERC2771Request; walletOrProvider: ethers.BrowserProvider | ethers.Wallet; sponsorApiKey: string; options?: RelayRequestOptions; @@ -64,49 +67,97 @@ const sponsoredCallERC2771 = async ( ); } - const type = ERC2771Type.SponsoredCall; - - const parametersToOverride = await populateOptionalUserParameters< - CallWithERC2771Request, - CallWithERC2771RequestOptionalParameters - >({ request, type, walletOrProvider }, config); - - const struct = await mapRequestToStruct(request, parametersToOverride); - - const signature = await signTypedDataV4( - walletOrProvider, - request.user as string, - getPayloadToSign( + if (isConcurrentRequest(request)) { + const isConcurrent = true; + const type = ERC2771Type.ConcurrentSponsoredCall; + const parametersToOverride = await populateOptionalUserParameters( + { request, type, walletOrProvider }, + config + ); + const struct = await mapRequestToStruct(request, parametersToOverride); + const signature = await signTypedDataV4( + walletOrProvider, + request.user as string, + getPayloadToSign( + { + struct: { + ...struct, + chainId: struct.chainId.toString(), + }, + type, + isWallet: isWallet(walletOrProvider), + }, + config + ) + ); + return await post< + CallWithConcurrentERC2771Struct & + RelayRequestOptions & + UserAuthSignature & + ApiKey & + ConcurrencyOptions, + RelayResponse + >( { - struct: { + relayCall: RelayCall.SponsoredCallERC2771, + request: { ...struct, + ...options, + userSignature: signature, + sponsorApiKey, chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), + isConcurrent, }, - type, - isWallet: isWallet(walletOrProvider), }, config - ) - ); - - return await post< - CallWithERC2771Struct & RelayRequestOptions & UserAuthSignature & ApiKey, - RelayResponse - >( - { - relayCall: RelayCall.SponsoredCallERC2771, - request: { - ...struct, - ...options, - userSignature: signature, - sponsorApiKey, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), + ); + } else { + const isConcurrent = false; + const type = ERC2771Type.SponsoredCall; + const parametersToOverride = await populateOptionalUserParameters( + { request, type, walletOrProvider }, + config + ); + const struct = await mapRequestToStruct(request, parametersToOverride); + const signature = await signTypedDataV4( + walletOrProvider, + request.user as string, + getPayloadToSign( + { + struct: { + ...struct, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + }, + type, + isWallet: isWallet(walletOrProvider), + }, + config + ) + ); + return await post< + CallWithERC2771Struct & + RelayRequestOptions & + UserAuthSignature & + ApiKey & + ConcurrencyOptions, + RelayResponse + >( + { + relayCall: RelayCall.SponsoredCallERC2771, + request: { + ...struct, + ...options, + userSignature: signature, + sponsorApiKey, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + isConcurrent, + }, }, - }, - config - ); + config + ); + } } catch (error) { const errorMessage = (error as Error).message; throw new Error( diff --git a/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts b/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts index a56af4a..3f3ecfa 100644 --- a/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts +++ b/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts @@ -1,17 +1,22 @@ -import { post } from "../../../utils"; +import { isConcurrentStruct, post } from "../../../utils"; import { isNetworkSupported } from "../../network"; import { ApiKey, + ConcurrencyOptions, Config, RelayCall, RelayRequestOptions, RelayResponse, } from "../../types"; -import { CallWithERC2771Struct, UserAuthSignature } from "../types"; +import { + CallWithConcurrentERC2771Struct, + CallWithERC2771Struct, + UserAuthSignature, +} from "../types"; export const sponsoredCallERC2771WithSignature = async ( payload: { - struct: CallWithERC2771Struct; + struct: CallWithERC2771Struct | CallWithConcurrentERC2771Struct; signature: string; sponsorApiKey: string; options?: RelayRequestOptions; @@ -29,23 +34,54 @@ export const sponsoredCallERC2771WithSignature = async ( throw new Error(`Chain id [${struct.chainId}] is not supported`); } - return await post< - CallWithERC2771Struct & RelayRequestOptions & UserAuthSignature & ApiKey, - RelayResponse - >( - { - relayCall: RelayCall.SponsoredCallERC2771, - request: { - ...struct, - ...options, - userSignature: signature, - sponsorApiKey, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), + if (isConcurrentStruct(struct)) { + const isConcurrent = true; + return await post< + CallWithConcurrentERC2771Struct & + RelayRequestOptions & + UserAuthSignature & + ApiKey & + ConcurrencyOptions, + RelayResponse + >( + { + relayCall: RelayCall.SponsoredCallERC2771, + request: { + ...struct, + ...options, + userSignature: signature, + sponsorApiKey, + chainId: struct.chainId.toString(), + isConcurrent, + }, }, - }, - config - ); + config + ); + } else { + const isConcurrent = false; + return await post< + CallWithERC2771Struct & + RelayRequestOptions & + UserAuthSignature & + ApiKey & + ConcurrencyOptions, + RelayResponse + >( + { + relayCall: RelayCall.SponsoredCallERC2771, + request: { + ...struct, + ...options, + userSignature: signature, + sponsorApiKey, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + isConcurrent, + }, + }, + config + ); + } } catch (error) { const errorMessage = (error as Error).message; throw new Error( diff --git a/src/lib/erc2771/types/index.ts b/src/lib/erc2771/types/index.ts index 6615be0..456bc96 100644 --- a/src/lib/erc2771/types/index.ts +++ b/src/lib/erc2771/types/index.ts @@ -28,6 +28,28 @@ export const EIP712_CALL_WITH_SYNC_FEE_ERC2771_TYPE_DATA = { ], }; +export const EIP712_SPONSORED_CALL_CONCURRENT_ERC2771_TYPE_DATA = { + SponsoredCallConcurrentERC2771: [ + { name: "chainId", type: "uint256" }, + { name: "target", type: "address" }, + { name: "data", type: "bytes" }, + { name: "user", type: "address" }, + { name: "userSalt", type: "bytes32" }, + { name: "userDeadline", type: "uint256" }, + ], +}; + +export const EIP712_CALL_WITH_SYNC_FEE_CONCURRENT_ERC2771_TYPE_DATA = { + CallWithSyncFeeConcurrentERC2771: [ + { name: "chainId", type: "uint256" }, + { name: "target", type: "address" }, + { name: "data", type: "bytes" }, + { name: "user", type: "address" }, + { name: "userSalt", type: "bytes32" }, + { name: "userDeadline", type: "uint256" }, + ], +}; + export type UserAuthSignature = { userSignature: string; }; @@ -64,33 +86,89 @@ export type CallWithSyncFeeERC2771PayloadToSign = { message: SafeRequestPayload; }; +export type SponsoredCallConcurrentERC2771PayloadToSign = { + domain: EIP712Domain; + types: { + EIP712Domain?: { + name: string; + type: string; + }[]; + SponsoredCallConcurrentERC2771: { + name: string; + type: string; + }[]; + }; + primaryType?: "SponsoredCallConcurrentERC2771"; + message: SafeRequestPayload; +}; + +export type CallWithSyncFeeConcurrentERC2771PayloadToSign = { + domain: EIP712Domain; + types: { + EIP712Domain?: { + name: string; + type: string; + }[]; + CallWithSyncFeeConcurrentERC2771: { + name: string; + type: string; + }[]; + }; + primaryType?: "CallWithSyncFeeConcurrentERC2771"; + message: SafeRequestPayload; +}; + export type CallWithERC2771Struct = BaseRelayParams & ERC2771UserParams; +export type CallWithConcurrentERC2771Struct = BaseRelayParams & + ConcurrentERC2771UserParams; + export type ERC2771UserParams = { user: string; userNonce: bigint; userDeadline: number; }; +export type ConcurrentERC2771UserParams = { + user: string; + userSalt: string; + userDeadline: number; +}; + export type CallWithERC2771Request = Optional< CallWithERC2771Struct, keyof CallWithERC2771RequestOptionalParameters ->; +> & { isConcurrent?: false }; export type CallWithSyncFeeERC2771Request = CallWithERC2771Request & BaseCallWithSyncFeeParams; +export type CallWithConcurrentERC2771Request = Optional< + CallWithConcurrentERC2771Struct, + keyof CallWithConcurrentERC2771RequestOptionalParameters +> & { isConcurrent: true }; + +export type CallWithSyncFeeConcurrentERC2771Request = + CallWithConcurrentERC2771Request & BaseCallWithSyncFeeParams; + export type CallWithERC2771RequestOptionalParameters = { userNonce: bigint; userDeadline: number; }; +export type CallWithConcurrentERC2771RequestOptionalParameters = { + userDeadline: number; + userSalt: string; +}; + export type SignatureData = { - struct: CallWithERC2771Struct; + struct: CallWithERC2771Struct | CallWithConcurrentERC2771Struct; signature: string; }; export enum ERC2771Type { CallWithSyncFee = "CallWithSyncFee", SponsoredCall = "SponsoredCall", + ConcurrentCallWithSyncFee = "ConcurrentCallWithSyncFee", + ConcurrentSponsoredCall = "ConcurrentSponsoredCall", } diff --git a/src/lib/erc2771/utils/getPayloadToSign.ts b/src/lib/erc2771/utils/getPayloadToSign.ts index f9b3613..82923f4 100644 --- a/src/lib/erc2771/utils/getPayloadToSign.ts +++ b/src/lib/erc2771/utils/getPayloadToSign.ts @@ -11,16 +11,28 @@ import { ERC2771Type, EIP712_CALL_WITH_SYNC_FEE_ERC2771_TYPE_DATA, CallWithSyncFeeERC2771PayloadToSign, + CallWithConcurrentERC2771Struct, + SponsoredCallConcurrentERC2771PayloadToSign, + CallWithSyncFeeConcurrentERC2771PayloadToSign, + EIP712_SPONSORED_CALL_CONCURRENT_ERC2771_TYPE_DATA, + EIP712_CALL_WITH_SYNC_FEE_CONCURRENT_ERC2771_TYPE_DATA, } from "../types"; -export const getPayloadToSign = ( +export function getPayloadToSign( payload: { - struct: SafeRequestPayload; + struct: SafeRequestPayload< + CallWithERC2771Struct | CallWithConcurrentERC2771Struct + >; + type: ERC2771Type; isWallet: boolean; }, config: Config -): SponsoredCallERC2771PayloadToSign | CallWithSyncFeeERC2771PayloadToSign => { +): + | SponsoredCallERC2771PayloadToSign + | CallWithSyncFeeERC2771PayloadToSign + | SponsoredCallConcurrentERC2771PayloadToSign + | CallWithSyncFeeConcurrentERC2771PayloadToSign { const { isWallet, struct, type } = payload; const domain = getEIP712Domain( { chainId: BigInt(struct.chainId), type }, @@ -35,7 +47,7 @@ export const getPayloadToSign = ( types: { ...EIP712_SPONSORED_CALL_ERC2771_TYPE_DATA, }, - message: struct, + message: struct as SafeRequestPayload, }; } return { @@ -45,7 +57,7 @@ export const getPayloadToSign = ( ...EIP712_DOMAIN_TYPE_DATA, }, primaryType: "SponsoredCallERC2771", - message: struct, + message: struct as SafeRequestPayload, }; case ERC2771Type.CallWithSyncFee: if (isWallet) { @@ -54,7 +66,7 @@ export const getPayloadToSign = ( types: { ...EIP712_CALL_WITH_SYNC_FEE_ERC2771_TYPE_DATA, }, - message: struct, + message: struct as SafeRequestPayload, }; } return { @@ -64,11 +76,53 @@ export const getPayloadToSign = ( ...EIP712_DOMAIN_TYPE_DATA, }, primaryType: "CallWithSyncFeeERC2771", - message: struct, + message: struct as SafeRequestPayload, + }; + + case ERC2771Type.ConcurrentSponsoredCall: + if (isWallet) { + return { + domain, + types: { + ...EIP712_SPONSORED_CALL_CONCURRENT_ERC2771_TYPE_DATA, + }, + message: + struct as SafeRequestPayload, + }; + } + return { + domain, + types: { + ...EIP712_SPONSORED_CALL_CONCURRENT_ERC2771_TYPE_DATA, + ...EIP712_DOMAIN_TYPE_DATA, + }, + primaryType: "SponsoredCallConcurrentERC2771", + message: struct as SafeRequestPayload, }; + case ERC2771Type.ConcurrentCallWithSyncFee: + if (isWallet) { + return { + domain, + types: { + ...EIP712_CALL_WITH_SYNC_FEE_CONCURRENT_ERC2771_TYPE_DATA, + }, + message: + struct as SafeRequestPayload, + }; + } + return { + domain, + types: { + ...EIP712_CALL_WITH_SYNC_FEE_CONCURRENT_ERC2771_TYPE_DATA, + ...EIP712_DOMAIN_TYPE_DATA, + }, + primaryType: "CallWithSyncFeeConcurrentERC2771", + message: struct as SafeRequestPayload, + }; + default: // eslint-disable-next-line no-case-declarations const _exhaustiveCheck: never = type; return _exhaustiveCheck; } -}; +} diff --git a/src/lib/erc2771/utils/mapRequestToStruct.ts b/src/lib/erc2771/utils/mapRequestToStruct.ts index 1f65966..c082251 100644 --- a/src/lib/erc2771/utils/mapRequestToStruct.ts +++ b/src/lib/erc2771/utils/mapRequestToStruct.ts @@ -1,35 +1,66 @@ import { getAddress } from "ethers"; import { + CallWithConcurrentERC2771Request, + CallWithConcurrentERC2771RequestOptionalParameters, + CallWithConcurrentERC2771Struct, CallWithERC2771Request, CallWithERC2771RequestOptionalParameters, CallWithERC2771Struct, } from "../types"; +import { isConcurrentRequest } from "../../../utils"; -export const mapRequestToStruct = async ( +export async function mapRequestToStruct( + request: CallWithConcurrentERC2771Request, + override: Partial +): Promise; + +export async function mapRequestToStruct( request: CallWithERC2771Request, override: Partial -): Promise => { - if (override.userNonce === undefined && request.userNonce === undefined) { - throw new Error(`userNonce is not found in the request, nor fetched`); - } +): Promise; +export async function mapRequestToStruct( + request: CallWithERC2771Request | CallWithConcurrentERC2771Request, + override: Partial< + | CallWithERC2771RequestOptionalParameters + | CallWithConcurrentERC2771RequestOptionalParameters + > +): Promise { if (!override.userDeadline && !request.userDeadline) { throw new Error(`userDeadline is not found in the request, nor fetched`); } - return { - userNonce: - override.userNonce !== undefined - ? override.userNonce - : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - request.userNonce!, - userDeadline: - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - override.userDeadline ?? request.userDeadline!, - chainId: request.chainId, - target: getAddress(request.target as string), - data: request.data, - user: getAddress(request.user as string), - }; -}; + if (isConcurrentRequest(request)) { + const concurrentOverride = + override as Partial; + return { + userDeadline: concurrentOverride.userDeadline ?? request.userDeadline, + chainId: request.chainId, + target: getAddress(request.target as string), + data: request.data, + user: getAddress(request.user as string), + userSalt: concurrentOverride.userSalt ?? request.userSalt, + } as CallWithConcurrentERC2771Struct; + } else { + const nonConcurrentOverride = + override as Partial; + if ( + nonConcurrentOverride.userNonce === undefined && + request.userNonce === undefined + ) { + throw new Error(`userNonce is not found in the request, nor fetched`); + } + return { + userDeadline: nonConcurrentOverride.userDeadline ?? request.userDeadline, + chainId: request.chainId, + target: getAddress(request.target as string), + data: request.data, + user: getAddress(request.user as string), + userNonce: + nonConcurrentOverride.userNonce !== undefined + ? nonConcurrentOverride.userNonce + : request.userNonce, + } as CallWithERC2771Struct; + } +} diff --git a/src/lib/types/index.ts b/src/lib/types/index.ts index 7ff5a8c..57c7f13 100644 --- a/src/lib/types/index.ts +++ b/src/lib/types/index.ts @@ -14,6 +14,10 @@ export type RelayRequestOptions = { retries?: number; }; +export type ConcurrencyOptions = { + isConcurrent: boolean; +}; + export type ApiKey = { sponsorApiKey: string; }; @@ -56,6 +60,10 @@ export type Config = { relay1BalanceERC2771: string; relayERC2771zkSync: string; relay1BalanceERC2771zkSync: string; + relayConcurrentERC2771: string; + relay1BalanceConcurrentERC2771: string; + relayConcurrentERC2771zkSync: string; + relay1BalanceConcurrentERC2771zkSync: string; }; }; diff --git a/src/utils/eip712.ts b/src/utils/eip712.ts index 2ca7b64..fb93646 100644 --- a/src/utils/eip712.ts +++ b/src/utils/eip712.ts @@ -32,6 +32,26 @@ export const getEIP712Domain = ( config ), }; + case ERC2771Type.ConcurrentCallWithSyncFee: + return { + name: "GelatoRelayConcurrentERC2771", + version: "1", + chainId: chainId.toString(), + verifyingContract: getGelatoRelayERC2771Address( + { chainId, type }, + config + ), + }; + case ERC2771Type.ConcurrentSponsoredCall: + return { + name: "GelatoRelay1BalanceConcurrentERC2771", + version: "1", + chainId: chainId.toString(), + verifyingContract: getGelatoRelayERC2771Address( + { chainId, type }, + config + ), + }; default: // eslint-disable-next-line no-case-declarations const _exhaustiveCheck: never = type; diff --git a/src/utils/generateSalt.ts b/src/utils/generateSalt.ts new file mode 100644 index 0000000..01338ef --- /dev/null +++ b/src/utils/generateSalt.ts @@ -0,0 +1,10 @@ +import { ethers } from "ethers"; + +export const generateSalt = (): string => { + const randomSeed = Math.floor(Math.random() * 1000000); + const dataEncoded = ethers.AbiCoder.defaultAbiCoder().encode( + ["uint256", "uint256"], + [randomSeed, new Date().getMilliseconds()] + ); + return ethers.keccak256(dataEncoded); +}; diff --git a/src/utils/index.ts b/src/utils/index.ts index 53deb39..7ed907d 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -10,3 +10,6 @@ export * from "./relayAddress"; export * from "./isZkSync"; export * from "./getProviderChainId"; export * from "./axios"; +export * from "./isConcurrentStruct"; +export * from "./isConcurrentRequest"; +export * from "./generateSalt"; diff --git a/src/utils/isConcurrentRequest.ts b/src/utils/isConcurrentRequest.ts new file mode 100644 index 0000000..7723d60 --- /dev/null +++ b/src/utils/isConcurrentRequest.ts @@ -0,0 +1,10 @@ +import { + CallWithConcurrentERC2771Request, + CallWithERC2771Request, +} from "../lib/erc2771/types"; + +export const isConcurrentRequest = ( + request: CallWithERC2771Request | CallWithConcurrentERC2771Request +): request is CallWithConcurrentERC2771Request => { + return !!(request as CallWithConcurrentERC2771Request).isConcurrent; +}; diff --git a/src/utils/isConcurrentStruct.ts b/src/utils/isConcurrentStruct.ts new file mode 100644 index 0000000..42f2f31 --- /dev/null +++ b/src/utils/isConcurrentStruct.ts @@ -0,0 +1,10 @@ +import { + CallWithConcurrentERC2771Struct, + CallWithERC2771Struct, +} from "../lib/erc2771/types"; + +export const isConcurrentStruct = ( + struct: CallWithERC2771Struct | CallWithConcurrentERC2771Struct +): struct is CallWithConcurrentERC2771Struct => { + return !!(struct as CallWithConcurrentERC2771Struct).userSalt; +}; diff --git a/src/utils/populateOptionalUserParameters.ts b/src/utils/populateOptionalUserParameters.ts index 4044861..43abf13 100644 --- a/src/utils/populateOptionalUserParameters.ts +++ b/src/utils/populateOptionalUserParameters.ts @@ -2,6 +2,8 @@ import { ethers } from "ethers"; import { DEFAULT_DEADLINE_GAP } from "../constants"; import { + CallWithConcurrentERC2771Request, + CallWithConcurrentERC2771RequestOptionalParameters, CallWithERC2771Request, CallWithERC2771RequestOptionalParameters, ERC2771Type, @@ -10,32 +12,75 @@ import { Config } from "../lib/types"; import { calculateDeadline } from "./calculateDeadline"; import { getUserNonce } from "./getUserNonce"; +import { isConcurrentRequest } from "./isConcurrentRequest"; +import { generateSalt } from "./generateSalt"; -export const populateOptionalUserParameters = async < - Request extends CallWithERC2771Request, - OptionalParameters extends CallWithERC2771RequestOptionalParameters ->( +export async function populateOptionalUserParameters( payload: { - request: Request; + request: CallWithConcurrentERC2771Request; + type: + | ERC2771Type.ConcurrentCallWithSyncFee + | ERC2771Type.ConcurrentSponsoredCall; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; + }, + + config: Config +): Promise>; + +export async function populateOptionalUserParameters( + payload: { + request: CallWithERC2771Request; + type: ERC2771Type.CallWithSyncFee | ERC2771Type.SponsoredCall; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; + }, + + config: Config +): Promise>; + +export async function populateOptionalUserParameters( + payload: { + request: CallWithConcurrentERC2771Request | CallWithERC2771Request; type: ERC2771Type; walletOrProvider: ethers.BrowserProvider | ethers.Wallet; }, + config: Config -): Promise> => { - const { request, type, walletOrProvider } = payload; - const parametersToOverride: Partial = {}; - if (!request.userDeadline) { - parametersToOverride.userDeadline = calculateDeadline(DEFAULT_DEADLINE_GAP); - } - if (request.userNonce === undefined) { - parametersToOverride.userNonce = await getUserNonce( - { - account: request.user as string, - type, - walletOrProvider, - }, - config - ); +): Promise< + Partial< + | CallWithConcurrentERC2771RequestOptionalParameters + | CallWithERC2771RequestOptionalParameters + > +> { + if (isConcurrentRequest(payload.request)) { + const { request } = payload; + const parametersToOverride: Partial = + {}; + if (!request.userDeadline) { + parametersToOverride.userDeadline = + calculateDeadline(DEFAULT_DEADLINE_GAP); + } + if (!request.userSalt) { + parametersToOverride.userSalt = generateSalt(); + } + return parametersToOverride; + } else { + const { type, walletOrProvider, request } = payload; + const parametersToOverride: Partial = + {}; + if (!request.userDeadline) { + parametersToOverride.userDeadline = + calculateDeadline(DEFAULT_DEADLINE_GAP); + } + if (request.userNonce === undefined) { + parametersToOverride.userNonce = await getUserNonce( + { + account: request.user as string, + type, + walletOrProvider, + }, + config + ); + } + return parametersToOverride; } - return parametersToOverride; -}; +} diff --git a/src/utils/relayAddress.ts b/src/utils/relayAddress.ts index d53c33b..934bcb7 100644 --- a/src/utils/relayAddress.ts +++ b/src/utils/relayAddress.ts @@ -22,6 +22,14 @@ export const getGelatoRelayERC2771Address = ( return isZkSync(chainId) ? getAddress(config.contract.relay1BalanceERC2771zkSync) : getAddress(config.contract.relay1BalanceERC2771); + case ERC2771Type.ConcurrentCallWithSyncFee: + return isZkSync(chainId) + ? getAddress(config.contract.relayConcurrentERC2771zkSync) + : getAddress(config.contract.relayConcurrentERC2771); + case ERC2771Type.ConcurrentSponsoredCall: + return isZkSync(chainId) + ? getAddress(config.contract.relay1BalanceConcurrentERC2771zkSync) + : getAddress(config.contract.relay1BalanceConcurrentERC2771); default: // eslint-disable-next-line no-case-declarations const _exhaustiveCheck: never = type; diff --git a/src/utils/signTypedDataV4.ts b/src/utils/signTypedDataV4.ts index faf54ec..bfcf024 100644 --- a/src/utils/signTypedDataV4.ts +++ b/src/utils/signTypedDataV4.ts @@ -4,6 +4,8 @@ import { SIGN_TYPED_DATA_V4 } from "../constants"; import { CallWithSyncFeeERC2771PayloadToSign, SponsoredCallERC2771PayloadToSign, + SponsoredCallConcurrentERC2771PayloadToSign, + CallWithSyncFeeConcurrentERC2771PayloadToSign, } from "../lib/erc2771/types"; import { isWallet } from "./isWallet"; @@ -14,6 +16,8 @@ export const signTypedDataV4 = async ( payload: | SponsoredCallERC2771PayloadToSign | CallWithSyncFeeERC2771PayloadToSign + | SponsoredCallConcurrentERC2771PayloadToSign + | CallWithSyncFeeConcurrentERC2771PayloadToSign ): Promise => { if (isWallet(walletOrProvider)) { return await walletOrProvider.signTypedData( From aec4054b279dc379ecd2d39abbf6d5d44053a279 Mon Sep 17 00:00:00 2001 From: Ogulcan Patavi Date: Fri, 25 Aug 2023 17:55:05 +0300 Subject: [PATCH 5/6] v5.1.0 (#31) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1daea2d..592b656 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gelatonetwork/relay-sdk", - "version": "5.1.0-0", + "version": "5.1.0", "description": "SDK to integrate with Gelato Relay", "main": "dist/index.js", "types": "dist/index.d.ts", From ba09a7688c35d14a63b94e35a5e3a95ea45d5dc4 Mon Sep 17 00:00:00 2001 From: Ogulcan Patavi Date: Tue, 29 Aug 2023 12:00:13 +0300 Subject: [PATCH 6/6] feat: getDataToSignERC2771 (#32) --- package.json | 5 +- src/index.ts | 21 +++- .../erc2771/callWithSyncFeeERC2771/index.ts | 85 ++----------- .../index.ts | 8 +- src/lib/erc2771/getDataToSignERC2771/index.ts | 110 +++++++++++++++++ .../erc2771/getSignatureDataERC2771/index.ts | 115 +++++++++--------- src/lib/erc2771/index.ts | 1 + src/lib/erc2771/sponsoredCallERC2771/index.ts | 86 ++++--------- .../index.ts | 8 +- src/lib/erc2771/types/index.ts | 27 +++- src/lib/erc2771/utils/getPayloadToSign.ts | 25 +++- src/lib/erc2771/utils/index.ts | 3 +- .../erc2771/utils/populatePayloadToSign.ts | 108 ++++++++++++++++ src/lib/erc2771/utils/safeTransformStruct.ts | 31 +++++ src/lib/index.ts | 1 + src/lib/sponsoredCall/index.ts | 8 +- src/utils/populateOptionalUserParameters.ts | 9 +- 17 files changed, 432 insertions(+), 219 deletions(-) create mode 100644 src/lib/erc2771/getDataToSignERC2771/index.ts create mode 100644 src/lib/erc2771/utils/populatePayloadToSign.ts create mode 100644 src/lib/erc2771/utils/safeTransformStruct.ts diff --git a/package.json b/package.json index 592b656..9854270 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gelatonetwork/relay-sdk", - "version": "5.1.0", + "version": "5.2.0", "description": "SDK to integrate with Gelato Relay", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -14,6 +14,9 @@ "lint": "eslint --cache .", "prepare": "husky install" }, + "engines": { + "node": ">=14.0.0" + }, "keywords": [], "author": "", "license": "ISC", diff --git a/src/index.ts b/src/index.ts index 7637e7b..d057025 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import { CallWithSyncFeeRequest } from "./lib/callWithSyncFee/types"; import { SponsoredCallRequest } from "./lib/sponsoredCall/types"; import { SignatureData, + PayloadToSign, CallWithERC2771Request, ERC2771Type, CallWithSyncFeeERC2771Request, @@ -38,6 +39,7 @@ export { TransactionStatusResponse, RelayResponse, SignatureData, + PayloadToSign, ERC2771Type, CallWithSyncFeeERC2771Request, BaseCallWithSyncFeeParams, @@ -170,7 +172,7 @@ export class GelatoRelay { * @param {CallWithERC2771Request | CallWithConcurrentERC2771Request} request - Sequential ERC2771 or Concurrent ERC2771 request to be relayed by Gelato Executors * @param {ethers.BrowserProvider | ethers.Wallet} walletOrProvider - BrowserProvider [front-end] or Wallet [back-end] to sign the payload * @param {ERC2771Type} type - ERC2771Type.CallWithSyncFee or ERC2771Type.SponsoredCall - * @returns {Promise} Response object with taskId parameter + * @returns {Promise} Response object with struct and signature * */ getSignatureDataERC2771 = ( @@ -183,6 +185,23 @@ export class GelatoRelay { this.#config ); + /** + * @param {CallWithERC2771Request | CallWithConcurrentERC2771Request} request - Sequential ERC2771 or Concurrent ERC2771 request to be relayed by Gelato Executors + * @param {ethers.BrowserProvider | ethers.Wallet} [walletOrProvider] - Optional BrowserProvider [front-end] or Wallet [back-end] to sign the payload + * @param {ERC2771Type} type - ERC2771Type.CallWithSyncFee or ERC2771Type.SponsoredCall + * @returns {Promise} Response object with struct and typed data + * + */ + getDataToSignERC2771 = ( + request: CallWithERC2771Request | CallWithConcurrentERC2771Request, + type: ERC2771Type, + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet + ): Promise => + library.getDataToSignERC2771( + { request, walletOrProvider, type }, + this.#config + ); + /** * @param {SignatureData["struct"]} struct - Struct that can be obtained from getSignatureDataERC2771 * @param {SignatureData["signature"]} signature - Signature that can be obtained from getSignatureDataERC2771 diff --git a/src/lib/erc2771/callWithSyncFeeERC2771/index.ts b/src/lib/erc2771/callWithSyncFeeERC2771/index.ts index 6655728..873a928 100644 --- a/src/lib/erc2771/callWithSyncFeeERC2771/index.ts +++ b/src/lib/erc2771/callWithSyncFeeERC2771/index.ts @@ -1,13 +1,6 @@ import { ethers } from "ethers"; -import { - getProviderChainId, - isWallet, - populateOptionalUserParameters, - post, - signTypedDataV4, -} from "../../../utils"; -import { isNetworkSupported } from "../../network"; +import { post } from "../../../utils"; import { BaseCallWithSyncFeeParams, ConcurrencyOptions, @@ -24,7 +17,8 @@ import { ERC2771Type, UserAuthSignature, } from "../types"; -import { getPayloadToSign, mapRequestToStruct } from "../utils"; +import { getSignatureDataERC2771 } from "../getSignatureDataERC2771/index.js"; +import { safeTransformStruct } from "../utils/safeTransformStruct.js"; export const relayWithCallWithSyncFeeERC2771 = async ( payload: { @@ -42,47 +36,16 @@ export const relayWithCallWithSyncFeeERC2771 = async ( throw new Error(`Missing provider`); } - const { chainId } = request; - const isSupported = await isNetworkSupported({ chainId }, config); - if (!isSupported) { - throw new Error(`Chain id [${chainId.toString()}] is not supported`); - } - - const providerChainId = await getProviderChainId(walletOrProvider); - if (chainId !== providerChainId) { - throw new Error( - `Request and provider chain id mismatch. Request: [${chainId.toString()}], provider: [${providerChainId.toString()}]` - ); - } - if (request.isConcurrent) { const isConcurrent = true; - const { isRelayContext, feeToken, ...callWithSyncFeeRequest } = request; + const { isRelayContext, feeToken } = request; const type = ERC2771Type.ConcurrentCallWithSyncFee; - const parametersToOverride = await populateOptionalUserParameters( - { request: callWithSyncFeeRequest, type, walletOrProvider }, + const { struct, signature } = await getSignatureDataERC2771( + { request, walletOrProvider, type }, config ); - const struct = await mapRequestToStruct( - callWithSyncFeeRequest, - parametersToOverride - ); - const signature = await signTypedDataV4( - walletOrProvider, - callWithSyncFeeRequest.user as string, - getPayloadToSign( - { - struct: { - ...struct, - chainId: struct.chainId.toString(), - }, - type, - isWallet: isWallet(walletOrProvider), - }, - config - ) - ); + return await post< CallWithConcurrentERC2771Struct & BaseCallWithSyncFeeParams & @@ -94,12 +57,11 @@ export const relayWithCallWithSyncFeeERC2771 = async ( { relayCall: RelayCall.CallWithSyncFeeERC2771, request: { - ...struct, + ...safeTransformStruct(struct), ...options, feeToken, isRelayContext: isRelayContext ?? true, userSignature: signature, - chainId: struct.chainId.toString(), isConcurrent, }, }, @@ -107,33 +69,14 @@ export const relayWithCallWithSyncFeeERC2771 = async ( ); } else { const isConcurrent = false; - const { isRelayContext, feeToken, ...callWithSyncFeeRequest } = request; + const { isRelayContext, feeToken } = request; const type = ERC2771Type.CallWithSyncFee; - const parametersToOverride = await populateOptionalUserParameters( - { request: callWithSyncFeeRequest, type, walletOrProvider }, + const { struct, signature } = await getSignatureDataERC2771( + { request, walletOrProvider, type }, config ); - const struct = await mapRequestToStruct( - callWithSyncFeeRequest, - parametersToOverride - ); - const signature = await signTypedDataV4( - walletOrProvider, - callWithSyncFeeRequest.user as string, - getPayloadToSign( - { - struct: { - ...struct, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), - }, - type, - isWallet: isWallet(walletOrProvider), - }, - config - ) - ); + return await post< CallWithERC2771Struct & BaseCallWithSyncFeeParams & @@ -145,13 +88,11 @@ export const relayWithCallWithSyncFeeERC2771 = async ( { relayCall: RelayCall.CallWithSyncFeeERC2771, request: { - ...struct, + ...safeTransformStruct(struct), ...options, feeToken, isRelayContext: isRelayContext ?? true, userSignature: signature, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), isConcurrent, }, }, diff --git a/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts b/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts index 8262893..cfe39a8 100644 --- a/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts +++ b/src/lib/erc2771/callWithSyncFeeERC2771WithSignature/index.ts @@ -13,6 +13,7 @@ import { CallWithERC2771Struct, UserAuthSignature, } from "../types"; +import { safeTransformStruct } from "../utils/safeTransformStruct.js"; export const callWithSyncFeeERC2771WithSignature = async ( payload: { @@ -47,12 +48,11 @@ export const callWithSyncFeeERC2771WithSignature = async ( { relayCall: RelayCall.CallWithSyncFeeERC2771, request: { - ...struct, + ...safeTransformStruct(struct), ...syncFeeParams, ...options, isRelayContext: syncFeeParams.isRelayContext ?? true, userSignature: signature, - chainId: struct.chainId.toString(), isConcurrent, }, }, @@ -71,13 +71,11 @@ export const callWithSyncFeeERC2771WithSignature = async ( { relayCall: RelayCall.CallWithSyncFeeERC2771, request: { - ...struct, + ...safeTransformStruct(struct), ...syncFeeParams, ...options, isRelayContext: syncFeeParams.isRelayContext ?? true, userSignature: signature, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), isConcurrent, }, }, diff --git a/src/lib/erc2771/getDataToSignERC2771/index.ts b/src/lib/erc2771/getDataToSignERC2771/index.ts new file mode 100644 index 0000000..a164dfc --- /dev/null +++ b/src/lib/erc2771/getDataToSignERC2771/index.ts @@ -0,0 +1,110 @@ +import { ethers } from "ethers"; + +import { getProviderChainId, isConcurrentRequest } from "../../../utils"; +import { isNetworkSupported } from "../../network"; +import { Config } from "../../types"; +import { + CallWithERC2771Request, + ERC2771Type, + CallWithConcurrentERC2771Request, + PayloadToSign, + SequentialPayloadToSign, + ConcurrentPayloadToSign, +} from "../types"; +import { populatePayloadToSign } from "../utils"; + +export async function getDataToSignERC2771( + payload: { + request: CallWithERC2771Request; + type: ERC2771Type.CallWithSyncFee | ERC2771Type.SponsoredCall; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; + }, + config: Config +): Promise; + +export async function getDataToSignERC2771( + payload: { + request: CallWithConcurrentERC2771Request; + type: + | ERC2771Type.ConcurrentCallWithSyncFee + | ERC2771Type.ConcurrentSponsoredCall; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; + }, + config: Config +): Promise; + +export async function getDataToSignERC2771( + payload: { + request: CallWithERC2771Request | CallWithConcurrentERC2771Request; + type: ERC2771Type; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; + }, + config: Config +): Promise; + +export async function getDataToSignERC2771( + payload: { + request: CallWithERC2771Request | CallWithConcurrentERC2771Request; + type: ERC2771Type; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; + }, + config: Config +): Promise { + try { + const { request, walletOrProvider } = payload; + + const { chainId } = request; + const isSupported = await isNetworkSupported({ chainId }, config); + if (!isSupported) { + throw new Error(`Chain id [${chainId.toString()}] is not supported`); + } + + if (walletOrProvider) { + const providerChainId = await getProviderChainId(walletOrProvider); + if (chainId !== providerChainId) { + throw new Error( + `Request and provider chain id mismatch. Request: [${chainId.toString()}], provider: [${providerChainId.toString()}]` + ); + } + } + + if (isConcurrentRequest(request)) { + const type = payload.type as + | ERC2771Type.ConcurrentCallWithSyncFee + | ERC2771Type.ConcurrentSponsoredCall; + + const { struct, typedData } = await populatePayloadToSign( + { + request, + type, + walletOrProvider, + }, + config + ); + + return { + struct, + typedData, + }; + } else { + const type = payload.type as + | ERC2771Type.CallWithSyncFee + | ERC2771Type.SponsoredCall; + + const { struct, typedData } = await populatePayloadToSign( + { request, type, walletOrProvider }, + config + ); + + return { + struct, + typedData, + }; + } + } catch (error) { + const errorMessage = (error as Error).message; + throw new Error( + `GelatoRelaySDK/getDataToSignERC2771: Failed with error: ${errorMessage}` + ); + } +} diff --git a/src/lib/erc2771/getSignatureDataERC2771/index.ts b/src/lib/erc2771/getSignatureDataERC2771/index.ts index b3ffdf7..f8eda34 100644 --- a/src/lib/erc2771/getSignatureDataERC2771/index.ts +++ b/src/lib/erc2771/getSignatureDataERC2771/index.ts @@ -1,101 +1,102 @@ import { ethers } from "ethers"; -import { - getProviderChainId, - isConcurrentRequest, - isWallet, - populateOptionalUserParameters, - signTypedDataV4, -} from "../../../utils"; -import { isNetworkSupported } from "../../network"; +import { isConcurrentRequest, signTypedDataV4 } from "../../../utils"; import { Config } from "../../types"; import { SignatureData, CallWithERC2771Request, ERC2771Type, CallWithConcurrentERC2771Request, + SequentialSignatureData, + ConcurrentSignatureData, } from "../types"; -import { getPayloadToSign, mapRequestToStruct } from "../utils"; +import { getDataToSignERC2771 } from "../getDataToSignERC2771/index.js"; + +export async function getSignatureDataERC2771( + payload: { + request: CallWithERC2771Request; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; + type: ERC2771Type.CallWithSyncFee | ERC2771Type.SponsoredCall; + }, + config: Config +): Promise; + +export async function getSignatureDataERC2771( + payload: { + request: CallWithConcurrentERC2771Request; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; + type: + | ERC2771Type.ConcurrentCallWithSyncFee + | ERC2771Type.ConcurrentSponsoredCall; + }, + config: Config +): Promise; + +export async function getSignatureDataERC2771( + payload: { + request: CallWithERC2771Request | CallWithConcurrentERC2771Request; + walletOrProvider: ethers.BrowserProvider | ethers.Wallet; + type: ERC2771Type; + }, + config: Config +): Promise; -export const getSignatureDataERC2771 = async ( +export async function getSignatureDataERC2771( payload: { request: CallWithERC2771Request | CallWithConcurrentERC2771Request; walletOrProvider: ethers.BrowserProvider | ethers.Wallet; type: ERC2771Type; }, config: Config -): Promise => { +): Promise { try { - const { request, type, walletOrProvider } = payload; + const { request, walletOrProvider } = payload; if (!walletOrProvider.provider) { throw new Error(`Missing provider`); } - const { chainId } = request; - const isSupported = await isNetworkSupported({ chainId }, config); - if (!isSupported) { - throw new Error(`Chain id [${chainId.toString()}] is not supported`); - } - - const providerChainId = await getProviderChainId(walletOrProvider); - if (chainId !== providerChainId) { - throw new Error( - `Request and provider chain id mismatch. Request: [${chainId.toString()}], provider: [${providerChainId.toString()}]` - ); - } - if (isConcurrentRequest(request)) { - const concurrentType = type as + const type = payload.type as | ERC2771Type.ConcurrentCallWithSyncFee | ERC2771Type.ConcurrentSponsoredCall; - const parametersToOverride = await populateOptionalUserParameters( - { request, type: concurrentType, walletOrProvider }, + + const { struct, typedData } = await getDataToSignERC2771( + { + request, + walletOrProvider, + type, + }, config ); - const struct = await mapRequestToStruct(request, parametersToOverride); + const signature = await signTypedDataV4( walletOrProvider, request.user as string, - getPayloadToSign( - { - struct: { - ...struct, - chainId: struct.chainId.toString(), - }, - type, - isWallet: isWallet(walletOrProvider), - }, - config - ) + typedData ); + return { struct, signature, }; } else { - const nonConcurrentType = type as + const type = payload.type as | ERC2771Type.CallWithSyncFee | ERC2771Type.SponsoredCall; - const parametersToOverride = await populateOptionalUserParameters( - { request, type: nonConcurrentType, walletOrProvider }, + + const { struct, typedData } = await getDataToSignERC2771( + { + request, + walletOrProvider, + type, + }, config ); - const struct = await mapRequestToStruct(request, parametersToOverride); + const signature = await signTypedDataV4( walletOrProvider, request.user as string, - getPayloadToSign( - { - struct: { - ...struct, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), - }, - type, - isWallet: isWallet(walletOrProvider), - }, - config - ) + typedData ); return { @@ -109,4 +110,4 @@ export const getSignatureDataERC2771 = async ( `GelatoRelaySDK/getSignatureDataERC2771: Failed with error: ${errorMessage}` ); } -}; +} diff --git a/src/lib/erc2771/index.ts b/src/lib/erc2771/index.ts index 5cfe858..df7a435 100644 --- a/src/lib/erc2771/index.ts +++ b/src/lib/erc2771/index.ts @@ -1,4 +1,5 @@ export { getSignatureDataERC2771 } from "./getSignatureDataERC2771"; +export { getDataToSignERC2771 } from "./getDataToSignERC2771"; export { relayWithSponsoredCallERC2771 } from "./sponsoredCallERC2771"; export { sponsoredCallERC2771WithSignature } from "./sponsoredCallERC2771WithSignature"; export { relayWithCallWithSyncFeeERC2771 } from "./callWithSyncFeeERC2771"; diff --git a/src/lib/erc2771/sponsoredCallERC2771/index.ts b/src/lib/erc2771/sponsoredCallERC2771/index.ts index 2dea619..3902ca0 100644 --- a/src/lib/erc2771/sponsoredCallERC2771/index.ts +++ b/src/lib/erc2771/sponsoredCallERC2771/index.ts @@ -1,14 +1,6 @@ import { ethers } from "ethers"; -import { - getProviderChainId, - isConcurrentRequest, - isWallet, - populateOptionalUserParameters, - post, - signTypedDataV4, -} from "../../../utils"; -import { isNetworkSupported } from "../../network"; +import { isConcurrentRequest, post } from "../../../utils"; import { ApiKey, ConcurrencyOptions, @@ -25,7 +17,8 @@ import { ERC2771Type, UserAuthSignature, } from "../types"; -import { getPayloadToSign, mapRequestToStruct } from "../utils"; +import { getSignatureDataERC2771 } from "../getSignatureDataERC2771/index.js"; +import { safeTransformStruct } from "../utils/safeTransformStruct.js"; export const relayWithSponsoredCallERC2771 = async ( payload: { @@ -54,42 +47,19 @@ const sponsoredCallERC2771 = async ( throw new Error(`Missing provider`); } - const { chainId } = request; - const isSupported = await isNetworkSupported({ chainId }, config); - if (!isSupported) { - throw new Error(`Chain id [${chainId.toString()}] is not supported`); - } - - const providerChainId = await getProviderChainId(walletOrProvider); - if (chainId !== providerChainId) { - throw new Error( - `Request and provider chain id mismatch. Request: [${chainId.toString()}], provider: [${providerChainId.toString()}]` - ); - } - if (isConcurrentRequest(request)) { const isConcurrent = true; const type = ERC2771Type.ConcurrentSponsoredCall; - const parametersToOverride = await populateOptionalUserParameters( - { request, type, walletOrProvider }, + + const { struct, signature } = await getSignatureDataERC2771( + { + request, + walletOrProvider, + type, + }, config ); - const struct = await mapRequestToStruct(request, parametersToOverride); - const signature = await signTypedDataV4( - walletOrProvider, - request.user as string, - getPayloadToSign( - { - struct: { - ...struct, - chainId: struct.chainId.toString(), - }, - type, - isWallet: isWallet(walletOrProvider), - }, - config - ) - ); + return await post< CallWithConcurrentERC2771Struct & RelayRequestOptions & @@ -101,11 +71,10 @@ const sponsoredCallERC2771 = async ( { relayCall: RelayCall.SponsoredCallERC2771, request: { - ...struct, + ...safeTransformStruct(struct), ...options, userSignature: signature, sponsorApiKey, - chainId: struct.chainId.toString(), isConcurrent, }, }, @@ -114,27 +83,16 @@ const sponsoredCallERC2771 = async ( } else { const isConcurrent = false; const type = ERC2771Type.SponsoredCall; - const parametersToOverride = await populateOptionalUserParameters( - { request, type, walletOrProvider }, + + const { struct, signature } = await getSignatureDataERC2771( + { + request, + walletOrProvider, + type, + }, config ); - const struct = await mapRequestToStruct(request, parametersToOverride); - const signature = await signTypedDataV4( - walletOrProvider, - request.user as string, - getPayloadToSign( - { - struct: { - ...struct, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), - }, - type, - isWallet: isWallet(walletOrProvider), - }, - config - ) - ); + return await post< CallWithERC2771Struct & RelayRequestOptions & @@ -146,12 +104,10 @@ const sponsoredCallERC2771 = async ( { relayCall: RelayCall.SponsoredCallERC2771, request: { - ...struct, + ...safeTransformStruct(struct), ...options, userSignature: signature, sponsorApiKey, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), isConcurrent, }, }, diff --git a/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts b/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts index 3f3ecfa..874b572 100644 --- a/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts +++ b/src/lib/erc2771/sponsoredCallERC2771WithSignature/index.ts @@ -13,6 +13,7 @@ import { CallWithERC2771Struct, UserAuthSignature, } from "../types"; +import { safeTransformStruct } from "../utils/safeTransformStruct.js"; export const sponsoredCallERC2771WithSignature = async ( payload: { @@ -47,11 +48,10 @@ export const sponsoredCallERC2771WithSignature = async ( { relayCall: RelayCall.SponsoredCallERC2771, request: { - ...struct, + ...safeTransformStruct(struct), ...options, userSignature: signature, sponsorApiKey, - chainId: struct.chainId.toString(), isConcurrent, }, }, @@ -70,12 +70,10 @@ export const sponsoredCallERC2771WithSignature = async ( { relayCall: RelayCall.SponsoredCallERC2771, request: { - ...struct, + ...safeTransformStruct(struct), ...options, userSignature: signature, sponsorApiKey, - chainId: struct.chainId.toString(), - userNonce: struct.userNonce.toString(), isConcurrent, }, }, diff --git a/src/lib/erc2771/types/index.ts b/src/lib/erc2771/types/index.ts index 456bc96..60720f8 100644 --- a/src/lib/erc2771/types/index.ts +++ b/src/lib/erc2771/types/index.ts @@ -161,11 +161,34 @@ export type CallWithConcurrentERC2771RequestOptionalParameters = { userSalt: string; }; -export type SignatureData = { - struct: CallWithERC2771Struct | CallWithConcurrentERC2771Struct; +export type ConcurrentSignatureData = { + struct: CallWithConcurrentERC2771Struct; signature: string; }; +export type SequentialSignatureData = { + struct: CallWithERC2771Struct; + signature: string; +}; + +export type SignatureData = ConcurrentSignatureData | SequentialSignatureData; + +export type ConcurrentPayloadToSign = { + struct: CallWithConcurrentERC2771Struct; + typedData: + | SponsoredCallConcurrentERC2771PayloadToSign + | CallWithSyncFeeConcurrentERC2771PayloadToSign; +}; + +export type SequentialPayloadToSign = { + struct: CallWithERC2771Struct; + typedData: + | SponsoredCallERC2771PayloadToSign + | CallWithSyncFeeERC2771PayloadToSign; +}; + +export type PayloadToSign = ConcurrentPayloadToSign | SequentialPayloadToSign; + export enum ERC2771Type { CallWithSyncFee = "CallWithSyncFee", SponsoredCall = "SponsoredCall", diff --git a/src/lib/erc2771/utils/getPayloadToSign.ts b/src/lib/erc2771/utils/getPayloadToSign.ts index 82923f4..bca7892 100644 --- a/src/lib/erc2771/utils/getPayloadToSign.ts +++ b/src/lib/erc2771/utils/getPayloadToSign.ts @@ -18,14 +18,35 @@ import { EIP712_CALL_WITH_SYNC_FEE_CONCURRENT_ERC2771_TYPE_DATA, } from "../types"; +export function getPayloadToSign( + payload: { + struct: SafeRequestPayload; + type: ERC2771Type.CallWithSyncFee | ERC2771Type.SponsoredCall; + isWallet?: boolean; + }, + config: Config +): SponsoredCallERC2771PayloadToSign | CallWithSyncFeeERC2771PayloadToSign; + +export function getPayloadToSign( + payload: { + struct: SafeRequestPayload; + type: + | ERC2771Type.ConcurrentCallWithSyncFee + | ERC2771Type.ConcurrentSponsoredCall; + isWallet?: boolean; + }, + config: Config +): + | SponsoredCallConcurrentERC2771PayloadToSign + | CallWithSyncFeeConcurrentERC2771PayloadToSign; + export function getPayloadToSign( payload: { struct: SafeRequestPayload< CallWithERC2771Struct | CallWithConcurrentERC2771Struct >; - type: ERC2771Type; - isWallet: boolean; + isWallet?: boolean; }, config: Config ): diff --git a/src/lib/erc2771/utils/index.ts b/src/lib/erc2771/utils/index.ts index 032f24a..ebb85d0 100644 --- a/src/lib/erc2771/utils/index.ts +++ b/src/lib/erc2771/utils/index.ts @@ -1,2 +1 @@ -export { getPayloadToSign } from "./getPayloadToSign"; -export { mapRequestToStruct } from "./mapRequestToStruct"; +export { populatePayloadToSign } from "./populatePayloadToSign"; diff --git a/src/lib/erc2771/utils/populatePayloadToSign.ts b/src/lib/erc2771/utils/populatePayloadToSign.ts new file mode 100644 index 0000000..bac1253 --- /dev/null +++ b/src/lib/erc2771/utils/populatePayloadToSign.ts @@ -0,0 +1,108 @@ +import { ethers } from "ethers"; + +import { + CallWithConcurrentERC2771Request, + CallWithERC2771Request, + ConcurrentPayloadToSign, + ERC2771Type, + PayloadToSign, + SequentialPayloadToSign, +} from "../types"; +import { Config } from "../../types"; +import { + isConcurrentRequest, + isWallet, + populateOptionalUserParameters, +} from "../../../utils"; + +import { mapRequestToStruct } from "./mapRequestToStruct"; +import { getPayloadToSign } from "./getPayloadToSign"; +import { safeTransformStruct } from "./safeTransformStruct"; + +export async function populatePayloadToSign( + payload: { + request: CallWithConcurrentERC2771Request; + type: + | ERC2771Type.ConcurrentCallWithSyncFee + | ERC2771Type.ConcurrentSponsoredCall; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; + }, + config: Config +): Promise; + +export async function populatePayloadToSign( + payload: { + request: CallWithERC2771Request; + type: ERC2771Type.CallWithSyncFee | ERC2771Type.SponsoredCall; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; + }, + config: Config +): Promise; + +export async function populatePayloadToSign( + payload: { + request: CallWithConcurrentERC2771Request | CallWithERC2771Request; + type: ERC2771Type; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; + }, + config: Config +): Promise { + const { request, walletOrProvider } = payload; + if (isConcurrentRequest(request)) { + const type = payload.type as + | ERC2771Type.ConcurrentCallWithSyncFee + | ERC2771Type.ConcurrentSponsoredCall; + const parametersToOverride = await populateOptionalUserParameters( + { + request, + type, + walletOrProvider, + }, + config + ); + + const struct = await mapRequestToStruct(request, parametersToOverride); + + const safeStruct = safeTransformStruct(struct); + const typedData = getPayloadToSign( + { + struct: safeStruct, + type, + isWallet: walletOrProvider ? isWallet(walletOrProvider) : undefined, + }, + config + ); + return { + struct, + typedData, + }; + } else { + const type = payload.type as + | ERC2771Type.CallWithSyncFee + | ERC2771Type.SponsoredCall; + const parametersToOverride = await populateOptionalUserParameters( + { + request, + type, + walletOrProvider, + }, + config + ); + + const struct = await mapRequestToStruct(request, parametersToOverride); + + const safeStruct = safeTransformStruct(struct); + const typedData = getPayloadToSign( + { + struct: safeStruct, + type, + isWallet: walletOrProvider ? isWallet(walletOrProvider) : undefined, + }, + config + ); + return { + struct, + typedData, + }; + } +} diff --git a/src/lib/erc2771/utils/safeTransformStruct.ts b/src/lib/erc2771/utils/safeTransformStruct.ts new file mode 100644 index 0000000..fc62d11 --- /dev/null +++ b/src/lib/erc2771/utils/safeTransformStruct.ts @@ -0,0 +1,31 @@ +import { + CallWithConcurrentERC2771Struct, + CallWithERC2771Struct, +} from "../types"; +import { SafeRequestPayload } from "../../types"; +import { isConcurrentStruct } from "../../../utils"; + +export function safeTransformStruct( + struct: CallWithERC2771Struct +): SafeRequestPayload; + +export function safeTransformStruct( + struct: CallWithConcurrentERC2771Struct +): SafeRequestPayload; + +export function safeTransformStruct( + struct: CallWithERC2771Struct | CallWithConcurrentERC2771Struct +): SafeRequestPayload { + if (isConcurrentStruct(struct)) { + return { + ...struct, + chainId: struct.chainId.toString(), + } as SafeRequestPayload; + } else { + return { + ...struct, + chainId: struct.chainId.toString(), + userNonce: struct.userNonce.toString(), + } as SafeRequestPayload; + } +} diff --git a/src/lib/index.ts b/src/lib/index.ts index 05dae02..1f65d22 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -3,6 +3,7 @@ export { relayWithSponsoredCall } from "./sponsoredCall"; export { relayWithSponsoredCallERC2771, getSignatureDataERC2771, + getDataToSignERC2771, sponsoredCallERC2771WithSignature, callWithSyncFeeERC2771WithSignature, relayWithCallWithSyncFeeERC2771, diff --git a/src/lib/sponsoredCall/index.ts b/src/lib/sponsoredCall/index.ts index 6258584..a447f5e 100644 --- a/src/lib/sponsoredCall/index.ts +++ b/src/lib/sponsoredCall/index.ts @@ -9,6 +9,7 @@ import { RelayCall, RelayRequestOptions, RelayResponse, + SafeRequestPayload, } from "../types"; import { SponsoredCallRequest } from "./types"; @@ -24,11 +25,11 @@ export const relayWithSponsoredCall = async ( return await sponsoredCall(payload, config); }; -const mapRequestToStruct = async ( +const mapRequestToStruct = ( request: SponsoredCallRequest -): Promise => { +): SafeRequestPayload => { return { - chainId: request.chainId, + chainId: request.chainId.toString(), target: getAddress(request.target as string), data: request.data, }; @@ -62,7 +63,6 @@ const sponsoredCall = async ( ...struct, ...options, sponsorApiKey, - chainId: struct.chainId.toString(), }, }, config diff --git a/src/utils/populateOptionalUserParameters.ts b/src/utils/populateOptionalUserParameters.ts index 43abf13..d6da887 100644 --- a/src/utils/populateOptionalUserParameters.ts +++ b/src/utils/populateOptionalUserParameters.ts @@ -21,7 +21,7 @@ export async function populateOptionalUserParameters( type: | ERC2771Type.ConcurrentCallWithSyncFee | ERC2771Type.ConcurrentSponsoredCall; - walletOrProvider: ethers.BrowserProvider | ethers.Wallet; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; }, config: Config @@ -31,7 +31,7 @@ export async function populateOptionalUserParameters( payload: { request: CallWithERC2771Request; type: ERC2771Type.CallWithSyncFee | ERC2771Type.SponsoredCall; - walletOrProvider: ethers.BrowserProvider | ethers.Wallet; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; }, config: Config @@ -41,7 +41,7 @@ export async function populateOptionalUserParameters( payload: { request: CallWithConcurrentERC2771Request | CallWithERC2771Request; type: ERC2771Type; - walletOrProvider: ethers.BrowserProvider | ethers.Wallet; + walletOrProvider?: ethers.BrowserProvider | ethers.Wallet; }, config: Config @@ -72,6 +72,9 @@ export async function populateOptionalUserParameters( calculateDeadline(DEFAULT_DEADLINE_GAP); } if (request.userNonce === undefined) { + if (!walletOrProvider) { + throw new Error("Missing provider."); + } parametersToOverride.userNonce = await getUserNonce( { account: request.user as string,