diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7ffb2c471..4ee0df2b2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,4 +1,4 @@ -name: 'Lint, Build, and Test' +name: "Lint, Build, and Test" on: push: @@ -16,20 +16,13 @@ jobs: node: [18, 20] fail-fast: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - cache: 'yarn' # cache node modules + cache: "yarn" # cache node modules node-version: ${{ matrix.node }} - run: corepack enable - run: yarn install --immutable - - run: yarn run core:lint # lint code - - run: yarn run core:build # compile typescript into javascript - - run: yarn run core:test:unit --silent --coverage # run unit tests - - run: yarn run evm:lint # lint code - - run: yarn run evm:build # compile typescript into javascript - - run: yarn run evm:test:unit --silent --coverage # run unit tests - - run: yarn run substrate:lint - - run: yarn run substrate:build - - run: yarn run substrate:test:unit --silent --coverage - # - run: yarn run test:integrations # run integration tests tests \ No newline at end of file + - run: yarn run build + - run: yarn run lint + - run: yarn run test diff --git a/examples/substrate-to-evm-fungible-transfer/package.json b/examples/substrate-to-evm-fungible-transfer/package.json index e68e00fa0..14b228517 100644 --- a/examples/substrate-to-evm-fungible-transfer/package.json +++ b/examples/substrate-to-evm-fungible-transfer/package.json @@ -30,7 +30,7 @@ "dependencies": { "@buildwithsygma/core": "workspace:*", "@buildwithsygma/substrate": "workspace:*", - "@polkadot/api": "^11.2.1", + "@polkadot/api": "^12.2.1", "@polkadot/keyring": "^12.6.2", "@polkadot/util-crypto": "^12.6.2", "tsx": "^4.15.4" diff --git a/package.json b/package.json index 512f5ae8e..c06c79d0c 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,12 @@ "substrate:lint": "yarn workspace @buildwithsygma/substrate lint", "substrate:lint:fix": "yarn workspace @buildwithsygma/substrate lint:fix", "substrate:test:unit": "yarn workspace @buildwithsygma/substrate test:unit", + "utils:build": "yarn workspace @buildwithsygma/utils build:all", + "utils:cleanDist": "yarn workspace @buildwithsygma/utils clean", + "utils:test": "yarn workspace @buildwithsygma/utils test", + "utils:lint": "yarn workspace @buildwithsygma/utils lint", + "utils:lint:fix": "yarn workspace @buildwithsygma/utils lint:fix", + "utils:test:unit": "yarn workspace @buildwithsygma/utils test:unit", "docs": "typedoc" }, "keywords": [], diff --git a/packages/core/src/baseTransfer.ts b/packages/core/src/baseTransfer.ts new file mode 100644 index 000000000..122161cd3 --- /dev/null +++ b/packages/core/src/baseTransfer.ts @@ -0,0 +1,85 @@ +import type { Config } from './config/config.js'; +import type { Domainlike, EvmResource, Domain, SubstrateResource } from './types.js'; + +export interface BaseTransferParams { + source: Domainlike; + destination: Domainlike; + resource: string | EvmResource | SubstrateResource; + sourceAddress: string; +} + +export abstract class BaseTransfer { + protected destinationDomain: Domain; + protected sourceDomain: Domain; + protected transferResource: EvmResource | SubstrateResource; + protected sygmaConfiguration: Config; + + protected sourceAddress: string; + + public get source(): Domain { + return this.sourceDomain; + } + + public get destination(): Domain { + return this.destinationDomain; + } + + public get resource(): EvmResource | SubstrateResource { + return this.transferResource; + } + + public get config(): Config { + return this.sygmaConfiguration; + } + + private findResource( + resource: string | EvmResource | SubstrateResource, + ): EvmResource | SubstrateResource | undefined { + return this.sygmaConfiguration.getResources(this.source).find(_resource => { + return typeof resource === 'string' + ? resource === _resource.resourceId + : resource.resourceId === _resource.resourceId; + }); + } + + protected constructor(transfer: BaseTransferParams, config: Config) { + this.sygmaConfiguration = config; + this.sourceAddress = transfer.sourceAddress; + this.sourceDomain = config.getDomain(transfer.source); + this.destinationDomain = config.getDomain(transfer.destination); + const resource = this.findResource(transfer.resource); + + if (resource) { + this.transferResource = resource; + } else { + throw new Error('Resource not found.'); + } + } + /** + * Method that checks whether the transfer + * is valid and route has been registered on + * the bridge + * @returns {boolean} + */ + // eslint-disable-next-line @typescript-eslint/require-await + async isValidTransfer(): Promise { + throw new Error('Method not implemented.'); + } + /** + * Set resource to be transferred + * @param {EvmResource} resource + * @returns {BaseTransfer} + */ + setResource(resource: EvmResource | SubstrateResource): void { + this.transferResource = resource; + } + /** + * + * @param destination + * @returns + */ + setDesinationDomain(destination: Domainlike): void { + const domain = this.config.getDomain(destination); + this.destinationDomain = domain; + } +} diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index 27443c7d6..46b299f92 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -93,8 +93,6 @@ export class Config { case 'number': return domain.chainId === domainLike; } - - return false; }); if (!config) throw new Error('Domain configuration not found.'); diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index d23932fad..3a9512be5 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,3 +1,4 @@ +export * from './baseTransfer.js'; export * from './config/config.js'; export * from './constants.js'; export * from './errors/customErrors.js'; diff --git a/packages/core/src/multicall.ts b/packages/core/src/multicall.ts index b848dd677..1cc1fac31 100644 --- a/packages/core/src/multicall.ts +++ b/packages/core/src/multicall.ts @@ -191,12 +191,14 @@ type IndexerRouteWithFeeHandlerAddressAndType = IndexerRouteWithFeeHandlerAddres feeHandlerType: FeeHandlerType; }; +type FeeHandlerAddressesMap = Map>>; + export async function getFeeHandlerAddressesOfRoutes(params: { routes: RouteIndexerType[]; chainId: number; bridgeAddress: string; provider: Eip1193Provider; -}): Promise> { +}): Promise { const web3Provider = new Web3Provider(params.provider); const bridge = Bridge__factory.connect(params.bridgeAddress, web3Provider); const feeHandlerRouterAddress = await bridge._feeHandler(); @@ -204,6 +206,7 @@ export async function getFeeHandlerAddressesOfRoutes(params: { const multicallAddress = getMulticallAddress(params.chainId); const multicall = new Contract(multicallAddress, JSON.stringify(MulticallAbi), web3Provider); + const feeHandlerAddressesMap: FeeHandlerAddressesMap = new Map(); const calls = params.routes.map(route => ({ target: feeHandlerRouterAddress, @@ -214,36 +217,77 @@ export async function getFeeHandlerAddressesOfRoutes(params: { })); const results = (await multicall.callStatic.aggregate(calls)) as AggregateStaticCallResponse; - return params.routes.map((route, idx) => { - return { - ...route, - feeHandlerAddress: defaultAbiCoder.decode(['address'], results.returnData[idx]).toString(), - }; + params.routes.map((route, idx) => { + let source = feeHandlerAddressesMap.get(route.fromDomainId); + if (!source) { + source = new Map(); + feeHandlerAddressesMap.set(route.fromDomainId, source); + } + + let destination = source.get(route.toDomainId); + if (!destination) { + destination = new Map(); + source.set(route.toDomainId, destination); + } + + destination.set( + route.resourceId, + defaultAbiCoder.decode(['address'], results.returnData[idx]).toString(), + ); }); + + return feeHandlerAddressesMap; } export async function getFeeHandlerTypeOfRoutes(params: { - routes: Array; + routes: RouteIndexerType[]; + feeHandlerAddressesMap: FeeHandlerAddressesMap; chainId: number; provider: Eip1193Provider; }): Promise> { - const web3Provider = new Web3Provider(params.provider); - const multicallAddress = getMulticallAddress(params.chainId); + const { routes, feeHandlerAddressesMap, chainId, provider } = params; + + const web3Provider = new Web3Provider(provider); + const multicallAddress = getMulticallAddress(chainId); const multicall = new Contract(multicallAddress, JSON.stringify(MulticallAbi), web3Provider); const basicFeeHandlerInterface = BasicFeeHandler__factory.createInterface(); - const calls = params.routes.map(route => ({ - target: route.feeHandlerAddress, - callData: basicFeeHandlerInterface.encodeFunctionData('feeHandlerType'), - })); + let feeHandlerAddress: string | undefined; + const calls = routes.map(route => { + const source = feeHandlerAddressesMap.get(route.fromDomainId); + if (source) { + const destination = source.get(route.toDomainId); + if (destination) { + feeHandlerAddress = destination.get(route.resourceId); + } + } + + return { + target: feeHandlerAddress, + callData: basicFeeHandlerInterface.encodeFunctionData('feeHandlerType'), + }; + }); const results = (await multicall.callStatic.aggregate(calls)) as AggregateStaticCallResponse; return params.routes.map((route, idx) => { + const source = feeHandlerAddressesMap.get(route.fromDomainId); + if (source) { + const destination = source.get(route.toDomainId); + if (destination) { + feeHandlerAddress = destination.get(route.resourceId); + } + } + + const feeHandlerType = defaultAbiCoder.decode( + ['string'], + results.returnData[idx], + )[0] as unknown as FeeHandlerType; + return { ...route, - feeHandlerAddress: route.feeHandlerAddress, - feeHandlerType: results.returnData[idx].toString() as FeeHandlerType, + feeHandlerAddress: feeHandlerAddress ?? '', + feeHandlerType, }; }); } diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index 7417b1fd1..98273e1f2 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -121,9 +121,9 @@ export async function getDomains(options: { /** * Returns supported routes originating from given source domain. - * @param source Either caip2 identifier, chainId or sygmaId - * @param environment - * @param options Allows selecting bridge instance (mainnet by default) and filtering routes by type. + * @param {Domainlike} source Either caip2 identifier or chainId or Domain Object from SDK + * @param {Environment} environment + * @param {{routeTypes?: RouteType[]; sourceProvider?: Eip1193Provider;}} options Allows selecting bridge instance (mainnet by default) and filtering routes by type. */ export async function getRoutes( source: Domainlike, @@ -148,7 +148,7 @@ export async function getRoutes( >; if (domainConfig.type === Network.EVM && options?.sourceProvider) { - const routesWithHandlerAddresses = await getFeeHandlerAddressesOfRoutes({ + const feeHandlerAddressesMap = await getFeeHandlerAddressesOfRoutes({ routes: data.routes, chainId: domainConfig.chainId, bridgeAddress: domainConfig.bridge, @@ -156,7 +156,8 @@ export async function getRoutes( }); routeFeeHandlerAddressesAndTypes = await getFeeHandlerTypeOfRoutes({ - routes: routesWithHandlerAddresses, + feeHandlerAddressesMap, + routes: data.routes, chainId: domainConfig.chainId, provider: options.sourceProvider, }); @@ -169,11 +170,12 @@ export async function getRoutes( let routeWithTypeAndAddress; if (routeFeeHandlerAddressesAndTypes) { - routeWithTypeAndAddress = routeFeeHandlerAddressesAndTypes.find(_route => { - _route.fromDomainId === route.fromDomainId && + routeWithTypeAndAddress = routeFeeHandlerAddressesAndTypes.find( + _route => + _route.fromDomainId === route.fromDomainId && _route.toDomainId === route.toDomainId && - _route.resourceId === route.resourceId; - }); + _route.resourceId === route.resourceId, + ); } let feeHandler = undefined; @@ -184,9 +186,11 @@ export async function getRoutes( }; } + const toDomain = config.findDomainConfigBySygmaId(Number(route.toDomainId)); + return { fromDomain: config.getDomain(domainConfig.chainId), - toDomain: config.findDomainConfigBySygmaId(Number(route.toDomainId)), + toDomain: config.getDomain(toDomain.caipId), resource: resource, feeHandler, }; diff --git a/packages/core/test/constants.ts b/packages/core/test/constants.ts index e22691e54..09ad802ec 100644 --- a/packages/core/test/constants.ts +++ b/packages/core/test/constants.ts @@ -3,7 +3,7 @@ export const mockedDevnetConfig = { { chainId: 111, id: 112, - caipId: 113, + caipId: 'ethereum', name: 'ethereum', type: 'evm', bridge: '0xb36C801f644908bAAe89b7C28ad57Af18638A6a9', diff --git a/packages/core/test/multicall.test.ts b/packages/core/test/multicall.test.ts index c0758f23c..15c308ee8 100644 --- a/packages/core/test/multicall.test.ts +++ b/packages/core/test/multicall.test.ts @@ -8,7 +8,7 @@ const mockedIndexerRoutes = [ { fromDomainId: '1', toDomainId: '2', - resourceId: '', + resourceId: '0x00', type: RouteType.FUNGIBLE, }, ]; @@ -71,15 +71,16 @@ describe('Multicall', () => { }; }); - const routes = await getFeeHandlerAddressesOfRoutes({ + const feeHandlerAddressesMap = await getFeeHandlerAddressesOfRoutes({ routes: mockedIndexerRoutes, chainId: 1, bridgeAddress: ZERO_ADDRESS, provider: {} as unknown as Eip1193Provider, }); - routes.forEach(route => expect(route.feeHandlerAddress).toBeTruthy()); - expect(routes.length).toEqual(mockedIndexerRoutes.length); + const source = mockedIndexerRoutes[0].fromDomainId; + expect(feeHandlerAddressesMap.get(source)?.size).toEqual(mockedIndexerRoutes.length); + expect(feeHandlerAddressesMap.get(source)).toBeTruthy(); }); it('getFeeHandlerAddressesOfRoutes - should throw an error if unable to fech data from the chain', async () => { @@ -106,13 +107,23 @@ describe('Multicall', () => { return { callStatic: { aggregate: jest.fn().mockReturnValue({ - returnData: ['percentage', 'basic'], + returnData: [ + '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a70657263656e7461676500000000000000000000000000000000000000000000', + ], }), }, }; }); + const resource = new Map(); + resource.set(mockedIndexerRoutes[0].resourceId, ZERO_ADDRESS); + const destination = new Map(); + destination.set(mockedIndexerRoutes[0].toDomainId, resource); + const source = new Map(); + source.set(mockedIndexerRoutes[0].fromDomainId, destination); + const routes = await getFeeHandlerTypeOfRoutes({ + feeHandlerAddressesMap: source, routes: mockedIndexerRoutes.map(route => { return { ...route, @@ -136,8 +147,16 @@ describe('Multicall', () => { }; }); + const resource = new Map(); + resource.set(mockedIndexerRoutes[0].resourceId, ZERO_ADDRESS); + const destination = new Map(); + destination.set(mockedIndexerRoutes[0].toDomainId, resource); + const source = new Map(); + source.set(mockedIndexerRoutes[0].fromDomainId, destination); + await expect(() => getFeeHandlerTypeOfRoutes({ + feeHandlerAddressesMap: source, routes: mockedIndexerRoutes.map(route => { return { ...route, diff --git a/packages/evm/.npmignore b/packages/evm/.npmignore index 298bcdd1f..61647b352 100644 --- a/packages/evm/.npmignore +++ b/packages/evm/.npmignore @@ -1,12 +1,9 @@ - - integration/ coverage/ dist/ keysN1/ keysN2/ src/ - # Ignore configs setupTests.ts .eslintrc.cjs @@ -19,7 +16,6 @@ tsconfig.*.json tsconfig.tsbuildinfo rollup.config.js **/__test__/* - # Ignore random junk .DS_Store node_modules/** \ No newline at end of file diff --git a/packages/evm/package.json b/packages/evm/package.json index c28600a2d..b4a8b7da6 100644 --- a/packages/evm/package.json +++ b/packages/evm/package.json @@ -1,70 +1,70 @@ { - "name": "@buildwithsygma/evm", - "version": "0.0.1", - "description": "Core primitives for bridging and message passing", - "main": "dist-esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "import": "./dist-esm/index.js", - "require": "./dist-cjs/index.js" - } - }, - "type": "module", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/sygmaprotocol/sygma-sdk" - }, - "scripts": { - "test": "jest --watchAll --detectOpenHandles --silent", - "test:unit": "jest --detectOpenHandles", - "run:all": "concurrently \"yarn run prepareNodes\" \"yarn run test\"", - "build:esm": "tsc -p tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./dist-esm/package.json", - "build:cjs": "tsc -p tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./dist-cjs/package.json", - "build:types": "tsc -p tsconfig.types.json", - "build:all": "yarn build:esm && yarn build:cjs && yarn build:types", - "build:typedocs:html": "typedoc --options typedoc.json", - "build:typedocs:markdown": "typedoc --options typedoc.markdown.json", - "build:typedocs:asjson": "typedoc --options typedoc.asjson.json", - "lint": "eslint 'src/**/*.ts'", - "lint:fix": "yarn run lint --fix", - "clean": "rm -rf ./dist ./dist-cjs ./dist-esm ./types" - }, - "keywords": [ - "sygma", - "sygmaprotocol", - "buildwithsygma", - "web3", - "bridge", - "ethereum" - ], - "author": "Sygmaprotocol Product Team", - "license": "LGPL-3.0-or-later", - "devDependencies": { - "concurrently": "7.0.0", - "eslint": "8", - "hardhat": "2.8.2", - "jest": "^29.4.1", - "jest-environment-jsdom": "^29.4.1", - "jest-extended": "1.2.0", - "jest-fetch-mock": "^3.0.3", - "ts-jest": "^29.0.5", - "ts-node": "10.9.1", - "typedoc": "^0.24.1", - "typedoc-plugin-markdown": "^3.15.1", - "typescript": "5.0.4" - }, - "dependencies": { - "@buildwithsygma/core": "workspace:^", - "@buildwithsygma/sygma-contracts": "^2.8.0", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@polkadot/types": "^11.2.1", - "@polkadot/util-crypto": "^12.6.2", - "abitype": "^1.0.4", - "ethers": "5.7.2" + "name": "@buildwithsygma/evm", + "version": "0.0.1", + "description": "Core primitives for bridging and message passing", + "main": "dist-esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "import": "./dist-esm/index.js", + "require": "./dist-cjs/index.js" } + }, + "type": "module", + "sideEffects": false, + "repository": { + "type": "git", + "url": "https://github.com/sygmaprotocol/sygma-sdk" + }, + "scripts": { + "test": "jest --watchAll --detectOpenHandles --silent", + "test:unit": "jest --detectOpenHandles", + "run:all": "concurrently \"yarn run prepareNodes\" \"yarn run test\"", + "build:esm": "tsc -p tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./dist-esm/package.json", + "build:cjs": "tsc -p tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./dist-cjs/package.json", + "build:types": "tsc -p tsconfig.types.json", + "build:all": "yarn build:esm && yarn build:cjs && yarn build:types", + "build:typedocs:html": "typedoc --options typedoc.json", + "build:typedocs:markdown": "typedoc --options typedoc.markdown.json", + "build:typedocs:asjson": "typedoc --options typedoc.asjson.json", + "lint": "eslint 'src/**/*.ts'", + "lint:fix": "yarn run lint --fix", + "clean": "rm -rf ./dist ./dist-cjs ./dist-esm ./types" + }, + "keywords": [ + "sygma", + "sygmaprotocol", + "buildwithsygma", + "web3", + "bridge", + "ethereum" + ], + "author": "Sygmaprotocol Product Team", + "license": "LGPL-3.0-or-later", + "devDependencies": { + "concurrently": "7.0.0", + "eslint": "8", + "hardhat": "2.8.2", + "jest": "^29.4.1", + "jest-environment-jsdom": "^29.4.1", + "jest-extended": "1.2.0", + "jest-fetch-mock": "^3.0.3", + "ts-jest": "^29.0.5", + "ts-node": "10.9.1", + "typedoc": "^0.24.1", + "typedoc-plugin-markdown": "^3.15.1", + "typescript": "5.0.4" + }, + "dependencies": { + "@buildwithsygma/core": "workspace:^", + "@buildwithsygma/sygma-contracts": "^2.8.0", + "@ethersproject/abi": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@polkadot/types": "^12.2.1", + "@polkadot/util-crypto": "^12.6.2", + "abitype": "^1.0.4", + "ethers": "5.7.2" + } } diff --git a/packages/evm/src/baseTransfer.ts b/packages/evm/src/baseTransfer.ts deleted file mode 100644 index 8a4726b4f..000000000 --- a/packages/evm/src/baseTransfer.ts +++ /dev/null @@ -1,96 +0,0 @@ -import type { - Domain, - Config, - Domainlike, - EvmResource, - Eip1193Provider, -} from '@buildwithsygma/core'; -import { providers, utils } from 'ethers'; - -import { BasicFeeCalculator } from './fee/BasicFee.js'; -import { PercentageFeeCalculator } from './fee/PercentageFee.js'; -import { TwapFeeCalculator } from './fee/TwapFee.js'; -import { getFeeInformation } from './fee/getFeeInformation.js'; -import type { EvmFee } from './types.js'; - -export interface BaseTransferParams { - source: Domainlike; - destination: Domainlike; - sourceNetworkProvider: Eip1193Provider; - sourceAddress: string; - resource: string | EvmResource; -} - -export abstract class BaseTransfer { - protected sourceNetworkProvider: Eip1193Provider; - protected sourceAddress: string; - protected destination: Domain; - protected config: Config; - protected source: Domain; - protected resource: EvmResource; - - protected getDepositData(): string { - return utils.formatBytes32String(''); - } - - constructor(transfer: BaseTransferParams, config: Config) { - this.sourceAddress = transfer.sourceAddress; - this.source = config.getDomain(transfer.source); - this.destination = config.getDomain(transfer.destination); - this.sourceNetworkProvider = transfer.sourceNetworkProvider; - this.config = config; - - const resources = config.getResources(this.source); - const resource = resources.find(resource => { - return typeof transfer.resource === 'string' - ? resource.resourceId === transfer.resource - : resource.resourceId === transfer.resource.resourceId; - }); - - if (resource) { - this.resource = resource as EvmResource; - } else { - throw new Error('Resource not found.'); - } - } - /** - * Calculate transfer fee - * @returns {Promise} - */ - async getFee(): Promise { - const provider = new providers.Web3Provider(this.sourceNetworkProvider); - - const { feeHandlerAddress, feeHandlerType } = await getFeeInformation( - this.config, - provider, - this.source.id, - this.destination.id, - this.resource.resourceId, - ); - - const basicFeeCalculator = new BasicFeeCalculator(); - const percentageFeeCalculator = new PercentageFeeCalculator(); - const twapFeeCalculator = new TwapFeeCalculator(); - basicFeeCalculator.setNextHandler(percentageFeeCalculator).setNextHandler(twapFeeCalculator); - - return await basicFeeCalculator.calculateFee({ - provider, - sender: this.sourceAddress, - sourceSygmaId: this.source.id, - destinationSygmaId: this.destination.id, - resourceSygmaId: this.resource.resourceId, - feeHandlerAddress, - feeHandlerType, - depositData: this.getDepositData(), - }); - } - /** - * Set destination network - * @param {Domainlike} destination - * @returns {void} - */ - setDesinationDomain(destination: Domainlike): void { - const domain = this.config.getDomain(destination); - this.destination = domain; - } -} diff --git a/packages/evm/src/evmTransfer.ts b/packages/evm/src/evmTransfer.ts new file mode 100644 index 000000000..e8edc5e69 --- /dev/null +++ b/packages/evm/src/evmTransfer.ts @@ -0,0 +1,56 @@ +import type { BaseTransferParams, Config, Eip1193Provider } from '@buildwithsygma/core'; +import { BaseTransfer } from '@buildwithsygma/core'; +import { providers } from 'ethers'; + +import { TwapFeeCalculator } from './fee/TwapFee.js'; +import { getFeeInformation, BasicFeeCalculator, PercentageFeeCalculator } from './fee/index.js'; +import type { EvmFee } from './types.js'; + +export interface EvmTransferParams extends BaseTransferParams { + sourceNetworkProvider: Eip1193Provider; +} + +export class EvmTransfer extends BaseTransfer { + sourceNetworkProvider: Eip1193Provider; + + constructor(params: EvmTransferParams, config: Config) { + super(params, config); + this.sourceNetworkProvider = params.sourceNetworkProvider; + } + + protected getDepositData(): string { + throw new Error('Method not implemented.'); + } + + /** + * Returns fee based on transfer amount. + * @param amount By default it is original amount passed in constructor + */ + async getFee(): Promise { + const provider = new providers.Web3Provider(this.sourceNetworkProvider); + + const { feeHandlerAddress, feeHandlerType } = await getFeeInformation( + this.config, + provider, + this.source.id, + this.destination.id, + this.resource.resourceId, + ); + + const basicFeeCalculator = new BasicFeeCalculator(); + const percentageFeeCalculator = new PercentageFeeCalculator(); + const twapFeeCalculator = new TwapFeeCalculator(); + + basicFeeCalculator.setNextHandler(percentageFeeCalculator).setNextHandler(twapFeeCalculator); + + return await basicFeeCalculator.calculateFee({ + provider, + sender: this.sourceAddress, + sourceSygmaId: this.source.id, + destinationSygmaId: this.destination.id, + resourceSygmaId: this.resource.resourceId, + feeHandlerAddress, + feeHandlerType, + }); + } +} diff --git a/packages/evm/src/fee/types.ts b/packages/evm/src/fee/types.ts index f3abc5b1f..e461571ec 100644 --- a/packages/evm/src/fee/types.ts +++ b/packages/evm/src/fee/types.ts @@ -19,7 +19,7 @@ export interface EvmFeeCalculationParams { export interface EvmTransferFeeCalculationHandler { calculateFee(params: EvmFeeCalculationParams): Promise; - setNextHandler(handler: EvmTransferFeeCalculationHandler): void; + setNextHandler(handler: EvmTransferFeeCalculationHandler): EvmTransferFeeCalculationHandler; } export abstract class BaseEvmTransferFeeCalculator implements EvmTransferFeeCalculationHandler { diff --git a/packages/evm/src/fungible.ts b/packages/evm/src/fungible.ts index 03ad9c813..c3e02f1b5 100644 --- a/packages/evm/src/fungible.ts +++ b/packages/evm/src/fungible.ts @@ -1,25 +1,25 @@ -import type { EvmResource } from '@buildwithsygma/core'; +import type { Eip1193Provider, EvmResource } from '@buildwithsygma/core'; import { Config, FeeHandlerType, isValidAddressForNetwork, - ResourceType, SecurityModel, } from '@buildwithsygma/core'; import { Bridge__factory, ERC20__factory } from '@buildwithsygma/sygma-contracts'; +import type { TransactionRequest } from '@ethersproject/providers'; import { Web3Provider } from '@ethersproject/providers'; import { BigNumber, constants, type PopulatedTransaction, utils } from 'ethers'; +import type { EvmFee } from 'types.js'; -import type { BaseTransferParams } from './baseTransfer.js'; -import { BaseTransfer } from './baseTransfer.js'; -import type { EvmFee, TransactionRequest } from './types.js'; +import type { EvmTransferParams } from './evmTransfer.js'; +import { EvmTransfer } from './evmTransfer.js'; import { approve, getERC20Allowance } from './utils/approveAndCheckFns.js'; import { erc20Transfer } from './utils/depositFns.js'; import { createERCDepositData } from './utils/helpers.js'; import { createTransactionRequest } from './utils/transaction.js'; -export interface FungibleTokenTransferRequest extends BaseTransferParams { - resource: string | EvmResource; +interface EvmFungibleTransferRequest extends EvmTransferParams { + sourceAddress: string; amount: bigint; destinationAddress: string; securityModel?: SecurityModel; @@ -70,7 +70,7 @@ function calculateAdjustedAmount(transfer: EvmFungibleAssetTransfer, fee: EvmFee * @returns {Promise} */ export async function createEvmFungibleAssetTransfer( - params: FungibleTokenTransferRequest, + params: EvmFungibleTransferRequest, ): Promise { const config = new Config(); await config.init(process.env.SYGMA_ENV); @@ -92,7 +92,7 @@ export async function createEvmFungibleAssetTransfer( * for transferring fungible tokens * using Sygma protocol */ -class EvmFungibleAssetTransfer extends BaseTransfer { +class EvmFungibleAssetTransfer extends EvmTransfer { protected destinationAddress: string = ''; protected securityModel: SecurityModel; protected _amount: bigint; @@ -101,17 +101,16 @@ class EvmFungibleAssetTransfer extends BaseTransfer { return this._amount; } - /** - * Method that checks whether the transfer - * is valid and route has been registered on - * the bridge - * @returns {boolean} - */ + public getSourceNetworkProvider(): Eip1193Provider { + return this.sourceNetworkProvider; + } + async isValidTransfer(): Promise { const sourceDomainConfig = this.config.getDomainConfig(this.source); const web3Provider = new Web3Provider(this.sourceNetworkProvider); const bridge = Bridge__factory.connect(sourceDomainConfig.bridge, web3Provider); - const handlerAddress = await bridge._resourceIDToHandlerAddress(this.resource.resourceId); + const { resourceId } = this.resource; + const handlerAddress = await bridge._resourceIDToHandlerAddress(resourceId); return utils.isAddress(handlerAddress) && handlerAddress !== constants.AddressZero; } @@ -119,7 +118,7 @@ class EvmFungibleAssetTransfer extends BaseTransfer { return createERCDepositData(this.amount, this.destinationAddress, this.destination.parachainId); } - constructor(transfer: FungibleTokenTransferRequest, config: Config) { + constructor(transfer: EvmFungibleTransferRequest, config: Config) { super(transfer, config); this._amount = transfer.amount; if (isValidAddressForNetwork(transfer.destinationAddress, this.destination.type)) @@ -127,18 +126,7 @@ class EvmFungibleAssetTransfer extends BaseTransfer { this.securityModel = transfer.securityModel ?? SecurityModel.MPC; } /** - * Set transfer resource - * @param {EvmResource} resource - * @returns {void} - */ - setResource(resource: EvmResource): void { - if (resource.type !== ResourceType.FUNGIBLE) { - throw new Error('Resource type unsupported.'); - } - this.resource = resource; - } - /** - * @async Set amount to be transferred + * Set amount to be transferred * @param {BigInt} amount * @returns {Promise} */ @@ -166,8 +154,9 @@ class EvmFungibleAssetTransfer extends BaseTransfer { const sourceDomainConfig = this.config.getDomainConfig(this.source); const bridge = Bridge__factory.connect(sourceDomainConfig.bridge, provider); const handlerAddress = await bridge._resourceIDToHandlerAddress(this.resource.resourceId); + const resource = this.resource as EvmResource; - const erc20 = ERC20__factory.connect(this.resource.address, provider); + const erc20 = ERC20__factory.connect(resource.address, provider); const fee = await this.getFee(); const feeHandlerAllowance = await getERC20Allowance( erc20, @@ -201,11 +190,11 @@ class EvmFungibleAssetTransfer extends BaseTransfer { const fee = await this.getFee(); const transferTx = await erc20Transfer({ + depositData: this.getDepositData(), bridgeInstance: bridge, domainId: this.destination.id.toString(), resourceId: this.resource.resourceId, feeData: fee, - depositData: this.getDepositData(), }); return createTransactionRequest(transferTx); diff --git a/packages/evm/src/generic.ts b/packages/evm/src/generic.ts index e11d8ee32..254e1918b 100644 --- a/packages/evm/src/generic.ts +++ b/packages/evm/src/generic.ts @@ -10,11 +10,14 @@ import type { } from 'abitype'; import { constants, ethers } from 'ethers'; -import type { BaseTransferParams } from './baseTransfer.js'; -import { BaseTransfer } from './baseTransfer.js'; +import type { EvmTransferParams } from './evmTransfer.js'; +import { EvmTransfer } from './evmTransfer.js'; import { getFeeInformation } from './fee/getFeeInformation.js'; import type { TransactionRequest } from './types.js'; -import { createPermissionlessGenericDepositData, toHex } from './utils/helpers.js'; +import { + createPermissionlessGenericDepositData, + serializeGenericCallParameters, +} from './utils/helpers.js'; import { genericMessageTransfer } from './utils/index.js'; import { createTransactionRequest } from './utils/transaction.js'; @@ -25,7 +28,7 @@ import { createTransactionRequest } from './utils/transaction.js'; export interface GenericMessageTransferRequest< ContractAbi extends Abi, FunctionName extends ExtractAbiFunctionNames, -> extends BaseTransferParams { +> extends EvmTransferParams { gasLimit: bigint; functionParameters: AbiParametersToPrimitiveTypes< ExtractAbiFunction['inputs'], @@ -67,7 +70,7 @@ export async function createCrossChainContractCall< class GenericMessageTransfer< ContractAbi extends Abi, FunctionName extends ExtractAbiFunctionNames, -> extends BaseTransfer { +> extends EvmTransfer { maxFee: bigint; destinationContractAddress: string; gasLimit: bigint; @@ -172,36 +175,12 @@ class GenericMessageTransfer< ); let executionData = ``; - const defaultPadding = 32; - if (Array.isArray(this.functionParameters)) { - // Slice first param, it should be always depositer - // address in the contract - executionData = this.functionParameters - .slice(1) - .map((param: unknown) => { - const paramType = typeof param; - switch (paramType) { - case 'bigint': - return toHex((param as bigint).toString(), defaultPadding).substring(2); - case 'string': - return toHex((param as string).toString(), defaultPadding).substring(2); - case 'number': - return toHex((param as number).toString(), defaultPadding).substring(2); - case 'boolean': - return toHex(Number(param as boolean), defaultPadding).substring(2); - case 'object': - case 'undefined': - case 'function': - case 'symbol': - throw new Error('Unsupported parameter type.'); - } - }) - .join(''); + executionData = serializeGenericCallParameters(this.functionParameters); } const executeFunctionSignature = contractInterface.getSighash(this.functionName); - return { executionData: `0x${executionData}`, executeFunctionSignature }; + return { executionData, executeFunctionSignature }; } /** * Get the cross chain generic message transfer diff --git a/packages/evm/src/utils/__test__/helpers.test.ts b/packages/evm/src/utils/__test__/helpers.test.ts index da46f8a36..1a00a534b 100644 --- a/packages/evm/src/utils/__test__/helpers.test.ts +++ b/packages/evm/src/utils/__test__/helpers.test.ts @@ -6,6 +6,7 @@ import { createERCDepositData, toHex, constructSubstrateRecipient, + serializeGenericCallParameters, } from '../helpers.js'; describe('createERCDepositData', () => { @@ -50,6 +51,25 @@ describe('constructSubstrateRecipient', () => { }); }); +describe('serializeGenericCallParameters', () => { + it('should seriailze parameters correctly', () => { + const result = + '0x0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064'; + + const params = [ + '0x98729c03c4D5e820F5e8c45558ae07aE63F97461', + BigInt(50), + true, + false, + BigNumber.from(100), + ]; + + const serialized = serializeGenericCallParameters(params); + + expect(serialized).toEqual(result); + }); +}); + describe('getEVMRecipientAddressInBytes', () => { it('should convert an EVM address to a Uint8Array of bytes', () => { const evmAddress = '0x742d35Cc6634C0532925a3b844Bc454e4438f44e'; diff --git a/packages/evm/src/utils/helpers.ts b/packages/evm/src/utils/helpers.ts index 035c27aba..0ad7f4b9c 100644 --- a/packages/evm/src/utils/helpers.ts +++ b/packages/evm/src/utils/helpers.ts @@ -132,10 +132,62 @@ export const getSubstrateRecipientAddressInBytes = ( * @param padding - number to padd the data * @returns {string} */ -export const toHex = (covertThis: string | number | BigNumber, padding: number): string => { +export const toHex = ( + covertThis: string | number | BigNumber | bigint, + padding: number, +): string => { const amount = covertThis instanceof BigNumber ? covertThis : BigNumber.from(covertThis); return utils.hexZeroPad(utils.hexlify(amount), padding); }; +/** + * JS types to 0x Hex string + * required to initiate contract + * calls on destination EVM chain + * @param {string | BigNumber | number | boolean | bigint} param + * @returns {`0x{string}`} + */ +function createGenericCallParameter(param: string | BigNumber | number | boolean | bigint): string { + const DEFAULT_PADDING = 32; + switch (typeof param) { + case 'boolean': + return toHex(Number(param), DEFAULT_PADDING).substring(2); + case 'bigint': + case 'number': + case 'string': + return toHex(param, DEFAULT_PADDING).substring(2); + case 'object': + if (param instanceof BigNumber) { + return toHex(param, DEFAULT_PADDING).substring(2); + } + throw new Error('Unsupported parameter type.'); + case 'symbol': + case 'undefined': + case 'function': + throw new Error('Unsupported parameter type.'); + } +} +/** + * Convert JS primitive types to hex encoded + * strings for EVM function calls + * @param {Array} params + * @returns {string} + */ +export function serializeGenericCallParameters( + params: Array, +): string { + /** + * .slice(1) is used because first parameter will always be an + * address by default, and this parameter is not specified by + * the user, relayers add it so this param is discarded by SDK + * However, this param should still be part of ABI otherwise + * messages won't be passed correctly + */ + const serialized = params + .slice(1) + .map(item => createGenericCallParameter(item)) + .join(''); + return `0x${serialized}`; +} /** * Creates the data for permissionless generic handler diff --git a/packages/evm/src/utils/index.ts b/packages/evm/src/utils/index.ts index 5f4bba994..057ee4959 100644 --- a/packages/evm/src/utils/index.ts +++ b/packages/evm/src/utils/index.ts @@ -1,2 +1,3 @@ export * from './approveAndCheckFns.js'; +export * from './balances.js'; export * from './depositFns.js'; diff --git a/packages/substrate/package.json b/packages/substrate/package.json index fa4b85553..84b2cb6ef 100644 --- a/packages/substrate/package.json +++ b/packages/substrate/package.json @@ -57,8 +57,9 @@ "dependencies": { "@buildwithsygma/core": "workspace:^", "@buildwithsygma/sygma-contracts": "2.5.1", - "@polkadot/api": "^11.2.1", - "@polkadot/types": "^11.2.1", + "@polkadot/api": "^12.2.1", + "@polkadot/api-base": "^12.2.2", + "@polkadot/types": "^12.2.1", "@polkadot/util": "^12.6.2", "dotenv": "^16.4.5" } diff --git a/packages/substrate/src/__test__/fungible.test.ts b/packages/substrate/src/__test__/fungible.test.ts index c468f8fbd..984c10699 100644 --- a/packages/substrate/src/__test__/fungible.test.ts +++ b/packages/substrate/src/__test__/fungible.test.ts @@ -11,8 +11,9 @@ jest.mock('../utils/index.js'); describe('SubstrateFungibleAssetTransfer', () => { const transferRequest: SubstrateAssetTransferRequest = { - sourceDomain: 5, // Substrate - destinationDomain: 1337, // Ethereum + sourceAddress: '', + source: 5, // Substrate + destination: 1337, // Ethereum sourceNetworkProvider: {} as ApiPromise, resource: '0x0000000000000000000000000000000000000000000000000000000000000300', amount: BigInt(1000), diff --git a/packages/substrate/src/base-transfer.ts b/packages/substrate/src/base-transfer.ts deleted file mode 100644 index 24384c511..000000000 --- a/packages/substrate/src/base-transfer.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { Config, Domain, Domainlike, SubstrateResource } from '@buildwithsygma/core'; -import type { ApiPromise } from '@polkadot/api'; - -interface BaseTransferParams { - sourceDomain: Domainlike; - destinationDomain: Domainlike; - sourceNetworkProvider: ApiPromise; - resource: string | SubstrateResource; -} - -export abstract class BaseTransfer { - sourceDomain: Domain; - destinationDomain: Domain; - sourceNetworkProvider: ApiPromise; - resource: SubstrateResource; - config: Config; - - protected constructor(transfer: BaseTransferParams, config: Config) { - this.sourceDomain = config.getDomain(transfer.sourceDomain); - this.destinationDomain = config.getDomain(transfer.destinationDomain); - this.sourceNetworkProvider = transfer.sourceNetworkProvider; - - const resources = config.getResources(this.sourceDomain) as SubstrateResource[]; - const resource = this.findResource(resources, transfer.resource); - - if (resource) { - this.resource = resource; - } else { - throw new Error('Resource not found.'); - } - - this.config = config; - } - - private findResource( - resources: SubstrateResource[], - resourceIdentifier: string | SubstrateResource, - ): SubstrateResource | undefined { - return resources.find(res => { - return typeof resourceIdentifier === 'string' - ? res.resourceId === resourceIdentifier - : res.resourceId === resourceIdentifier.resourceId; - }); - } - - /** - * Set resource to be transferred. - * @param {SubstrateResource} resource - */ - setResource(resource: SubstrateResource): void { - this.resource = resource; - } - - /** - * Set the destination domain. - * @param {Domainlike} destination - */ - setDestinationDomain(destination: Domainlike): void { - this.destinationDomain = this.config.getDomain(destination); - } -} diff --git a/packages/substrate/src/fungible.ts b/packages/substrate/src/fungible.ts index b94056ff4..72f78b030 100644 --- a/packages/substrate/src/fungible.ts +++ b/packages/substrate/src/fungible.ts @@ -1,26 +1,23 @@ -import type { Domainlike, SubstrateResource } from '@buildwithsygma/core'; +import type { BaseTransferParams, SubstrateResource } from '@buildwithsygma/core'; import { Config, FeeHandlerType, isValidAddressForNetwork, + BaseTransfer, ResourceType, } from '@buildwithsygma/core'; import type { ApiPromise, SubmittableResult } from '@polkadot/api'; import type { SubmittableExtrinsic } from '@polkadot/api-base/types'; import { BN } from '@polkadot/util'; -import { BaseTransfer } from './base-transfer.js'; import type { SubstrateFee } from './types.js'; import { deposit, getBasicFee, getFeeHandler, getPercentageFee } from './utils/index.js'; -export type SubstrateAssetTransferRequest = { - sourceDomain: Domainlike; - destinationDomain: Domainlike; +export interface SubstrateAssetTransferRequest extends BaseTransferParams { sourceNetworkProvider: ApiPromise; - resource: string | SubstrateResource; amount: bigint; destinationAddress: string; -}; +} export async function createSubstrateFungibleAssetTransfer( transferRequestParams: SubstrateAssetTransferRequest, @@ -33,16 +30,23 @@ export async function createSubstrateFungibleAssetTransfer( class SubstrateFungibleAssetTransfer extends BaseTransfer { amount: bigint; - destinationAddress: string = ''; + destinationAddress: string; + sourceNetworkProvider: ApiPromise; constructor(transfer: SubstrateAssetTransferRequest, config: Config) { super(transfer, config); this.amount = transfer.amount; + this.sourceNetworkProvider = transfer.sourceNetworkProvider; + this.destinationAddress = transfer.destinationAddress; - if (isValidAddressForNetwork(transfer.destinationAddress, this.destinationDomain.type)) + if (isValidAddressForNetwork(transfer.destinationAddress, this.destination.type)) this.destinationAddress = transfer.destinationAddress; } + public getSourceNetworkProvider(): ApiPromise { + return this.sourceNetworkProvider; + } + /** * Set the transfer amount. * @param {bigint} amount @@ -56,7 +60,7 @@ class SubstrateFungibleAssetTransfer extends BaseTransfer { * @param {string} destinationAddress */ setDestinationAddress(destinationAddress: string): void { - if (isValidAddressForNetwork(destinationAddress, this.destinationDomain.type)) + if (isValidAddressForNetwork(destinationAddress, this.destination.type)) this.destinationAddress = destinationAddress; } @@ -68,26 +72,28 @@ class SubstrateFungibleAssetTransfer extends BaseTransfer { async getFee(amount?: bigint): Promise { if (amount) this.amount = amount; + const resource = this.resource as SubstrateResource; + const feeHandlerType = await getFeeHandler( this.sourceNetworkProvider, - this.destinationDomain.id, - this.resource.xcmMultiAssetId, + this.destination.id, + resource.xcmMultiAssetId, ); switch (feeHandlerType) { case FeeHandlerType.BASIC: return await getBasicFee( this.sourceNetworkProvider, - this.destinationDomain.id, - this.resource.xcmMultiAssetId, + this.destination.id, + resource.xcmMultiAssetId, ); case FeeHandlerType.PERCENTAGE: return await getPercentageFee(this.sourceNetworkProvider, { details: { amount: this.amount.toString(), recipient: this.destinationAddress }, - from: this.sourceDomain, - resource: this.resource, + from: this.source, + resource, sender: '', - to: this.destinationDomain, + to: this.destination, }); default: throw new Error('Unable to retrieve fee'); @@ -101,6 +107,7 @@ class SubstrateFungibleAssetTransfer extends BaseTransfer { */ async getTransferTransaction(): Promise> { const fee = await this.getFee(); + const resource = this.resource as SubstrateResource; if (this.resource.type !== ResourceType.FUNGIBLE) { throw new Error(`Resource type ${this.resource.type} not supported by asset transfer`); @@ -112,9 +119,9 @@ class SubstrateFungibleAssetTransfer extends BaseTransfer { return deposit( this.sourceNetworkProvider, - this.resource.xcmMultiAssetId, + resource.xcmMultiAssetId, this.amount.toString(), - this.destinationDomain.id.toString(), + this.destination.id.toString(), this.destinationAddress, ); } diff --git a/packages/substrate/src/types.ts b/packages/substrate/src/types.ts index e4077f6c7..24ff03eb9 100644 --- a/packages/substrate/src/types.ts +++ b/packages/substrate/src/types.ts @@ -1,9 +1,7 @@ -import type { Domain, FeeHandlerType, SubstrateResource } from '@buildwithsygma/core'; +import type { Domain, FeeHandlerType, ParachainId, SubstrateResource } from '@buildwithsygma/core'; import type { ExtrinsicStatus } from '@polkadot/types/interfaces'; import type { BN } from '@polkadot/util'; -export type ParachainId = number; - export type SubstrateFee = { fee: BN; type: FeeHandlerType; diff --git a/packages/substrate/src/utils/getAssetBalance.ts b/packages/substrate/src/utils/getAssetBalance.ts deleted file mode 100644 index 0984688aa..000000000 --- a/packages/substrate/src/utils/getAssetBalance.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { ApiPromise } from '@polkadot/api'; -import type { Option } from '@polkadot/types'; -import type { AssetBalance } from '@polkadot/types/interfaces'; - -/** - * Retrieves the asset balance of a given account. - * - * @category Token interactions - * @param {ApiPromise} api - The API instance used to query the chain. - * @param {number} assetID - The ID of the asset to query. {@link https://github.com/sygmaprotocol/sygma-substrate-pallets#multiasset | More details} - * @param {string} accountAddress - The address of the account for which to retrieve the asset balance. - * @returns {Promise} A promise that resolves with the retrieved asset balance. - */ -export const getAssetBalance = async ( - api: ApiPromise, - assetID: number, - accountAddress: string, -): Promise => { - const assetRes = await api.query.assets.account>(assetID, accountAddress); - return assetRes.unwrapOrDefault(); -}; diff --git a/packages/substrate/src/utils/getNativeTokenBalance.ts b/packages/substrate/src/utils/getNativeTokenBalance.ts deleted file mode 100644 index c2ae6c20d..000000000 --- a/packages/substrate/src/utils/getNativeTokenBalance.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { ApiPromise } from '@polkadot/api'; -import type { AccountData, AccountInfo } from '@polkadot/types/interfaces'; - -/** - * Retrieves balance value in native tokens of the network - * - * @category Token interactions - * @param {ApiPromise} api - An ApiPromise instance. - * @param {string} accountAddress - The address of the account for which to retrieve the asset balance. - * @returns {Promise} A promise that resolves to a AccountData. - */ -export const getNativeTokenBalance = async ( - api: ApiPromise, - accountAddress: string, -): Promise => { - const accountInfo = await api.query.system.account(accountAddress); - return accountInfo.data; -}; diff --git a/packages/substrate/src/utils/index.ts b/packages/substrate/src/utils/index.ts index 1f69eb822..475d561e4 100644 --- a/packages/substrate/src/utils/index.ts +++ b/packages/substrate/src/utils/index.ts @@ -1,7 +1,5 @@ export * from './getFeeHandlers.js'; export * from './getPercentageFee.js'; export * from './getBasicFee.js'; -export * from './getNativeTokenBalance.js'; export * from './deposit/deposit.js'; export * from './deposit/handleTxExtrinsicResult.js'; -export * from './getAssetBalance.js'; diff --git a/packages/utils/.eslintrc.cjs b/packages/utils/.eslintrc.cjs new file mode 100644 index 000000000..29c27c015 --- /dev/null +++ b/packages/utils/.eslintrc.cjs @@ -0,0 +1,10 @@ +module.exports = { + extends: '../../.eslintrc.cjs', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + sourceType: 'module', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/utils/.gitignore b/packages/utils/.gitignore new file mode 100644 index 000000000..f8b07f7ad --- /dev/null +++ b/packages/utils/.gitignore @@ -0,0 +1,46 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build +/dist +/dist-cjs +/dist-esm +/types + + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +.env +.vscode +.history + +# runtime config +public/chainbridge-runtime-config.js + +# IDE +.idea/ +.vscode/ + +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/packages/utils/.npmignore b/packages/utils/.npmignore new file mode 100644 index 000000000..f98c1c55b --- /dev/null +++ b/packages/utils/.npmignore @@ -0,0 +1,26 @@ + + +integration/ +coverage/ +dist/ +keysN1/ +keysN2/ +config/ +src/ + +# Ignore configs +setupTests.ts +.eslintrc.cjs +.prettierrc.json +docker-compose.yml +Dockerfile +jest.config.cjs +tsconfig.json +tsconfig.*.json +tsconfig.tsbuildinfo +rollup.config.js +**/__test__/* + +# Ignore random junk +.DS_Store +node_modules/** \ No newline at end of file diff --git a/packages/utils/.prettierrc.json b/packages/utils/.prettierrc.json new file mode 100644 index 000000000..c50ce2de0 --- /dev/null +++ b/packages/utils/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "useTabs": false, + "arrowParens": "avoid" +} diff --git a/packages/utils/jest.config.cjs b/packages/utils/jest.config.cjs new file mode 100644 index 000000000..2abc5b9ba --- /dev/null +++ b/packages/utils/jest.config.cjs @@ -0,0 +1,17 @@ +module.exports = { + roots: ['/src', '/test'], + extensionsToTreatAsEsm: ['.ts', '.tsx'], + verbose: true, + preset: 'ts-jest/presets/default-esm', + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + testEnvironment: 'jsdom', + testTimeout: 15000, + transform: { + '^.+\\.(ts|tsx)?$': ['ts-jest', { useESM: true }], + }, + testPathIgnorePatterns: ['./dist'], + automock: false, + setupFiles: ['./test/setupJest.js'], +}; \ No newline at end of file diff --git a/packages/utils/package.json b/packages/utils/package.json new file mode 100644 index 000000000..023ee3d6a --- /dev/null +++ b/packages/utils/package.json @@ -0,0 +1,69 @@ +{ + "name": "@buildwithsygma/utils", + "version": "0.0.1", + "description": "Utilities to support bridging and message passing", + "main": "dist-esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "import": "./dist-esm/index.js", + "require": "./dist-cjs/index.js" + } + }, + "type": "module", + "sideEffects": false, + "repository": { + "type": "git", + "url": "https://github.com/sygmaprotocol/sygma-sdk" + }, + "scripts": { + "test": "jest --watchAll --detectOpenHandles --silent", + "test:unit": "jest --detectOpenHandles", + "run:all": "concurrently \"yarn run prepareNodes\" \"yarn run test\"", + "build:esm": "tsc -p tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./dist-esm/package.json", + "build:cjs": "tsc -p tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./dist-cjs/package.json", + "build:types": "tsc -p tsconfig.types.json", + "build:all": "yarn build:esm && yarn build:cjs && yarn build:types", + "build:typedocs:html": "typedoc --options typedoc.json", + "build:typedocs:markdown": "typedoc --options typedoc.markdown.json", + "build:typedocs:asjson": "typedoc --options typedoc.asjson.json", + "lint": "eslint 'src/**/*.ts'", + "lint:fix": "yarn run lint --fix", + "run:nodes": "docker-compose -f docker-compose.yml up", + "clean": "rm -rf ./dist ./dist-cjs ./dist-esm ./types" + }, + "keywords": [ + "sygma", + "sygmaprotocol", + "buildwithsygma", + "web3", + "bridge", + "ethereum" + ], + "author": "Sygmaprotocol Product Team", + "license": "LGPL-3.0-or-later", + "devDependencies": { + "@types/jest": "^29.4.0", + "eslint": "8", + "jest": "^29.4.1", + "jest-environment-jsdom": "^29.4.1", + "jest-extended": "1.2.0", + "jest-fetch-mock": "^3.0.3", + "ts-jest": "^29.0.5", + "ts-node": "10.9.1", + "typedoc": "^0.24.1", + "typedoc-plugin-markdown": "^3.15.1", + "typescript": "5.0.4" + }, + "dependencies": { + "@buildwithsygma/core": "workspace:^", + "@buildwithsygma/evm": "workspace:^", + "@buildwithsygma/substrate": "workspace:^", + "@buildwithsygma/sygma-contracts": "2.6.1", + "@polkadot/api": "^12.2.1", + "@polkadot/rpc-provider": "^12.2.1", + "@polkadot/types": "^12.2.1", + "@polkadot/util": "^12.6.2", + "web3-providers-http": "1.10.4" + } +} diff --git a/packages/utils/readme.md b/packages/utils/readme.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/substrate/src/__test__/utils/getAssetBalance.test.ts b/packages/utils/src/__test__/getAssetBalance.test.ts similarity index 95% rename from packages/substrate/src/__test__/utils/getAssetBalance.test.ts rename to packages/utils/src/__test__/getAssetBalance.test.ts index f412974f4..98b0c576a 100644 --- a/packages/substrate/src/__test__/utils/getAssetBalance.test.ts +++ b/packages/utils/src/__test__/getAssetBalance.test.ts @@ -2,7 +2,7 @@ import type { ApiPromise } from '@polkadot/api'; import { Option, TypeRegistry } from '@polkadot/types'; import type { AssetBalance } from '@polkadot/types/interfaces'; -import { getAssetBalance } from '../../utils/getAssetBalance.js'; +import { getAssetBalance } from '../substrate/balances.js'; const registry = new TypeRegistry(); const mockApi = { diff --git a/packages/substrate/src/__test__/utils/getNativeTokenBalance.test.ts b/packages/utils/src/__test__/getNativeTokenBalance.test.ts similarity index 93% rename from packages/substrate/src/__test__/utils/getNativeTokenBalance.test.ts rename to packages/utils/src/__test__/getNativeTokenBalance.test.ts index a6a052b44..610d3eb6c 100644 --- a/packages/substrate/src/__test__/utils/getNativeTokenBalance.test.ts +++ b/packages/utils/src/__test__/getNativeTokenBalance.test.ts @@ -2,7 +2,7 @@ import type { ApiPromise } from '@polkadot/api'; import type { AccountInfo } from '@polkadot/types/interfaces'; import { BN } from '@polkadot/util'; -import { getNativeTokenBalance } from '../../utils/getNativeTokenBalance.js'; +import { getNativeTokenBalance } from '../substrate/balances.js'; describe('getNativeTokenBalance', () => { let mockApi: ApiPromise; diff --git a/packages/utils/src/__test__/liquidity.test.ts b/packages/utils/src/__test__/liquidity.test.ts new file mode 100644 index 000000000..716ab0630 --- /dev/null +++ b/packages/utils/src/__test__/liquidity.test.ts @@ -0,0 +1,165 @@ +import { Network, ResourceType } from '@buildwithsygma/core'; +import type { createEvmFungibleAssetTransfer } from '@buildwithsygma/evm'; + +import { hasEnoughLiquidity } from '../liquidity.js'; + +// eslint-disable-next-line @typescript-eslint/no-unsafe-return +jest.mock('web3-providers-http', () => ({ + ...jest.requireActual('web3-providers-http'), + HttpProvider: jest.fn(), +})); +// eslint-disable-next-line @typescript-eslint/no-unsafe-return +jest.mock('@buildwithsygma/evm', () => ({ + ...jest.requireActual('@buildwithsygma/evm'), + getEvmHandlerBalance: jest.fn().mockResolvedValue(BigInt(5)), +})); + +jest.mock('../substrate/balances.js', () => ({ + getSubstrateHandlerBalance: jest.fn().mockResolvedValue(BigInt(5)), +})); + +const mockedHandler = { + type: ResourceType.FUNGIBLE, + address: '', +}; + +const mockedResource = { + resourceId: '0x00', + caip19: 'caipId', + type: ResourceType.FUNGIBLE, + address: '0x123', +}; + +const mockedDestination = { + id: 1, + caipId: 'caipId', + chainId: 1, + name: 'Chain', + type: Network.EVM, +}; + +const mockedTransfer = { + amount: 0n, + resource: mockedResource, + config: { + findDomainConfig: jest.fn(), + }, +}; + +const destinationProviderUrl = 'mockedProviderUrl'; + +describe('hasEnoughLiquidity - EVM', () => { + beforeAll(() => { + Object.assign(mockedTransfer, { destination: mockedDestination }); + + mockedTransfer.config.findDomainConfig.mockReturnValue({ + handlers: [mockedHandler], + resources: [mockedResource], + }); + }); + + it('should return true if there is enough liquidity', async () => { + const isEnough = await hasEnoughLiquidity( + mockedTransfer as unknown as Awaited>, + destinationProviderUrl, + ); + + expect(isEnough).toEqual(true); + }); + it('should return false if there isnt enough liquidity', async () => { + mockedTransfer.amount = BigInt(10); + + const isEnough = await hasEnoughLiquidity( + mockedTransfer as unknown as Awaited>, + destinationProviderUrl, + ); + + expect(isEnough).toEqual(false); + }); + it('should throw error if handler is not found', async () => { + const mockedTransferClone = Object.assign({}, mockedTransfer); + mockedTransferClone.config.findDomainConfig = jest + .fn() + .mockReturnValue({ handlers: [], resources: [mockedResource] }); + + await expect( + hasEnoughLiquidity( + mockedTransferClone as unknown as Awaited< + ReturnType + >, + destinationProviderUrl, + ), + ).rejects.toThrow('Handler not found or unregistered for resource.'); + }); + it('should throw error if resource is not found', async () => { + const mockedTransferClone = Object.assign({}, mockedTransfer); + mockedTransferClone.config.findDomainConfig = jest + .fn() + .mockReturnValue({ handlers: [mockedHandler], resources: [] }); + + await expect( + hasEnoughLiquidity( + mockedTransferClone as unknown as Awaited< + ReturnType + >, + destinationProviderUrl, + ), + ).rejects.toThrow('Resource not found or unregistered.'); + }); +}); + +describe('hasEnoughLiquidity - substrate', () => { + beforeAll(() => { + Object.assign(mockedTransfer, { + destination: { ...mockedDestination, type: Network.SUBSTRATE }, + }); + + mockedTransfer.config.findDomainConfig.mockReturnValue({ + handlers: [mockedHandler], + resources: [mockedResource], + }); + }); + + it('should return true if there is enough liquidity', async () => { + mockedTransfer.amount = BigInt(5); + + const isEnough = await hasEnoughLiquidity( + mockedTransfer as unknown as Awaited>, + destinationProviderUrl, + ); + + expect(isEnough).toEqual(true); + }); + it('should return false if there isnt enough liquidity', async () => { + mockedTransfer.amount = BigInt(10); + + const isEnough = await hasEnoughLiquidity( + mockedTransfer as unknown as Awaited>, + destinationProviderUrl, + ); + + expect(isEnough).toEqual(false); + }); +}); + +describe('hasEnoughLiquidity - error', () => { + beforeAll(() => { + Object.assign(mockedTransfer, { + destination: { ...mockedDestination, type: 'foo' as unknown as Network }, + }); + + mockedTransfer.config.findDomainConfig.mockReturnValue({ + handlers: [mockedHandler], + resources: [mockedResource], + }); + }); + + it('should return false if network type is not supported', async () => { + const isEnough = await hasEnoughLiquidity( + mockedTransfer as unknown as Awaited>, + destinationProviderUrl, + ); + + expect(isEnough).toEqual(false); + }); +}); diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts new file mode 100644 index 000000000..53a0dceb9 --- /dev/null +++ b/packages/utils/src/index.ts @@ -0,0 +1 @@ +export * from './liquidity.js'; diff --git a/packages/utils/src/liquidity.ts b/packages/utils/src/liquidity.ts new file mode 100644 index 000000000..350b14036 --- /dev/null +++ b/packages/utils/src/liquidity.ts @@ -0,0 +1,54 @@ +import type { EvmResource, SubstrateResource, Eip1193Provider } from '@buildwithsygma/core'; +import { Network, ResourceType } from '@buildwithsygma/core'; +import type { createEvmFungibleAssetTransfer } from '@buildwithsygma/evm'; +import { getEvmHandlerBalance } from '@buildwithsygma/evm'; +import type { createSubstrateFungibleAssetTransfer } from '@buildwithsygma/substrate'; +import { HttpProvider } from 'web3-providers-http'; + +import { getSubstrateHandlerBalance } from './substrate/balances.js'; + +export async function hasEnoughLiquidity( + transfer: + | Awaited> + | Awaited>, + destinationProviderUrl: string, +): Promise { + const { destination, resource, config } = transfer; + const destinationDomainConfig = config.findDomainConfig(destination); + const handler = destinationDomainConfig.handlers.find( + handler => handler.type === ResourceType.FUNGIBLE, + ); + + if (!handler) throw new Error('Handler not found or unregistered for resource.'); + + const destinationResource = destinationDomainConfig.resources.find( + _resource => resource.resourceId === _resource.resourceId, + ); + + if (!destinationResource) throw new Error('Resource not found or unregistered.'); + + switch (destination.type) { + case Network.EVM: { + const provider = new HttpProvider(destinationProviderUrl); + const evmHandlerBalance = await getEvmHandlerBalance( + provider as unknown as Eip1193Provider, + resource as EvmResource, + handler.address, + ); + + return transfer.amount <= evmHandlerBalance; + } + case Network.SUBSTRATE: { + const substrateHandlerBalance = await getSubstrateHandlerBalance( + destinationProviderUrl, + resource as SubstrateResource, + handler.address, + ); + + return transfer.amount <= substrateHandlerBalance; + } + // TODO: Bitcoin? + default: + return false; + } +} diff --git a/packages/utils/src/substrate/balances.ts b/packages/utils/src/substrate/balances.ts new file mode 100644 index 000000000..e00c8f224 --- /dev/null +++ b/packages/utils/src/substrate/balances.ts @@ -0,0 +1,55 @@ +import type { SubstrateResource } from '@buildwithsygma/core'; +import { ApiPromise } from '@polkadot/api'; +import { WsProvider } from '@polkadot/rpc-provider'; +import type { Option } from '@polkadot/types'; +import type { AssetBalance, AccountData, AccountInfo } from '@polkadot/types/interfaces'; + +/** + * Retrieves the asset balance of a given account. + * + * @category Token interactions + * @param {ApiPromise} api - The API instance used to query the chain. + * @param {number} assetID - The ID of the asset to query. {@link https://github.com/sygmaprotocol/sygma-substrate-pallets#multiasset | More details} + * @param {string} accountAddress - The address of the account for which to retrieve the asset balance. + * @returns {Promise} A promise that resolves with the retrieved asset balance. + */ +export const getAssetBalance = async ( + api: ApiPromise, + assetID: number, + accountAddress: string, +): Promise => { + const assetRes = await api.query.assets.account>(assetID, accountAddress); + return assetRes.unwrapOrDefault(); +}; + +/** + * Retrieves balance value in native tokens of the network + * + * @category Token interactions + * @param {ApiPromise} api - An ApiPromise instance. + * @param {string} accountAddress - The address of the account for which to retrieve the asset balance. + * @returns {Promise} A promise that resolves to a AccountData. + */ +export const getNativeTokenBalance = async ( + api: ApiPromise, + accountAddress: string, +): Promise => { + const accountInfo = await api.query.system.account(accountAddress); + return accountInfo.data; +}; + +export const getSubstrateHandlerBalance = async ( + destinationProviderUrl: string, + resource: SubstrateResource, + handlerAddress: string, +): Promise => { + const wsProvider = new WsProvider(destinationProviderUrl); + const apiPromise = new ApiPromise({ provider: wsProvider }); + if (resource.native) { + const accountInfo = await getNativeTokenBalance(apiPromise, handlerAddress); + return BigInt(accountInfo.free.toString()); + } else { + const assetBalance = await getAssetBalance(apiPromise, resource.assetID ?? 0, handlerAddress); + return BigInt(assetBalance.balance.toString()); + } +}; diff --git a/packages/utils/test/setupJest.js b/packages/utils/test/setupJest.js new file mode 100644 index 000000000..44d1d2774 --- /dev/null +++ b/packages/utils/test/setupJest.js @@ -0,0 +1 @@ +// empty for now diff --git a/packages/utils/tsconfig.cjs.json b/packages/utils/tsconfig.cjs.json new file mode 100644 index 000000000..e88d30caa --- /dev/null +++ b/packages/utils/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "exclude": ["src/**/__test__/**", "test/**"], + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "esModuleInterop": true, + "module": "commonjs", + "outDir": "./dist-cjs" + } +} diff --git a/packages/utils/tsconfig.esm.json b/packages/utils/tsconfig.esm.json new file mode 100644 index 000000000..c4ec3bd0f --- /dev/null +++ b/packages/utils/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "exclude": ["src/**/__test__/**", "test/**"], + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "ES2020", + "esModuleInterop": true, + "outDir": "./dist-esm" + } +} diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json new file mode 100644 index 000000000..30ebfd307 --- /dev/null +++ b/packages/utils/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "module": "ES2022", + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "preserveSymlinks": true, + "preserveWatchOutput": true, + "pretty": false, + "strict": true, + "sourceMap": true, + "target": "es2020", + "skipLibCheck": true, + "baseUrl": "./src", + "resolveJsonModule": true + }, + "exclude": ["node_modules/**"], + "include": ["./src/**/*.ts", "./test/**/*.ts", "substrate-asset-transfer.ts"], + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" + } +} diff --git a/packages/utils/tsconfig.types.json b/packages/utils/tsconfig.types.json new file mode 100644 index 000000000..05a3e5e70 --- /dev/null +++ b/packages/utils/tsconfig.types.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "emitDeclarationOnly": true, + "allowSyntheticDefaultImports": true, + "module": "ES2022", + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "moduleResolution": "node", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "preserveSymlinks": true, + "preserveWatchOutput": true, + "pretty": false, + "strict": true, + "sourceMap": false, + "target": "es2020", + "skipLibCheck": true, + "baseUrl": "./src", + "resolveJsonModule": true, + "outDir": "types" + }, + "exclude": ["node_modules/**", "src/**/__test__/**", "test/**"], + "include": ["./src/**/*.ts"], + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" + } +} diff --git a/yarn.lock b/yarn.lock index 45aa520ba..8c5f2841c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,86 +25,58 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/compat-data@npm:7.24.7" - checksum: dcd93a5632b04536498fbe2be5af1057f635fd7f7090483d8e797878559037e5130b26862ceb359acbae93ed27e076d395ddb4663db6b28a665756ffd02d324f +"@babel/compat-data@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/compat-data@npm:7.25.2" + checksum: 5bf1f14d6e5f0d37c19543e99209ff4a94bb97915e1ce01e5334a144aa08cd56b6e62ece8135dac77e126723d63d4d4b96fc603a12c43b88c28f4b5e070270c5 languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": - version: 7.24.7 - resolution: "@babel/core@npm:7.24.7" + version: 7.25.2 + resolution: "@babel/core@npm:7.25.2" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.24.7" - "@babel/helper-compilation-targets": "npm:^7.24.7" - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helpers": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/template": "npm:^7.24.7" - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" + "@babel/generator": "npm:^7.25.0" + "@babel/helper-compilation-targets": "npm:^7.25.2" + "@babel/helper-module-transforms": "npm:^7.25.2" + "@babel/helpers": "npm:^7.25.0" + "@babel/parser": "npm:^7.25.0" + "@babel/template": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.2" + "@babel/types": "npm:^7.25.2" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 4004ba454d3c20a46ea66264e06c15b82e9f6bdc35f88819907d24620da70dbf896abac1cb4cc4b6bb8642969e45f4d808497c9054a1388a386cf8c12e9b9e0d + checksum: a425fa40e73cb72b6464063a57c478bc2de9dbcc19c280f1b55a3d88b35d572e87e8594e7d7b4880331addb6faef641bbeb701b91b41b8806cd4deae5d74f401 languageName: node linkType: hard -"@babel/generator@npm:^7.24.7, @babel/generator@npm:^7.7.2": - version: 7.24.7 - resolution: "@babel/generator@npm:7.24.7" +"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.7.2": + version: 7.25.0 + resolution: "@babel/generator@npm:7.25.0" dependencies: - "@babel/types": "npm:^7.24.7" + "@babel/types": "npm:^7.25.0" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^2.5.1" - checksum: 06b1f3350baf527a3309e50ffd7065f7aee04dd06e1e7db794ddfde7fe9d81f28df64edd587173f8f9295496a7ddb74b9a185d4bf4de7bb619e6d4ec45c8fd35 + checksum: d0e2dfcdc8bdbb5dded34b705ceebf2e0bc1b06795a1530e64fb6a3ccf313c189db7f60c1616effae48114e1a25adc75855bc4496f3779a396b3377bae718ce7 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-compilation-targets@npm:7.24.7" +"@babel/helper-compilation-targets@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-compilation-targets@npm:7.25.2" dependencies: - "@babel/compat-data": "npm:^7.24.7" - "@babel/helper-validator-option": "npm:^7.24.7" - browserslist: "npm:^4.22.2" + "@babel/compat-data": "npm:^7.25.2" + "@babel/helper-validator-option": "npm:^7.24.8" + browserslist: "npm:^4.23.1" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 1d580a9bcacefe65e6bf02ba1dafd7ab278269fef45b5e281d8354d95c53031e019890464e7f9351898c01502dd2e633184eb0bcda49ed2ecd538675ce310f51 - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-environment-visitor@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 36ece78882b5960e2d26abf13cf15ff5689bf7c325b10a2895a74a499e712de0d305f8d78bb382dd3c05cfba7e47ec98fe28aab5674243e0625cd38438dd0b2d - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-function-name@npm:7.24.7" - dependencies: - "@babel/template": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: e5e41e6cf86bd0f8bf272cbb6e7c5ee0f3e9660414174435a46653efba4f2479ce03ce04abff2aa2ef9359cf057c79c06cb7b134a565ad9c0e8a50dcdc3b43c4 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-hoist-variables@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 19ee37563bbd1219f9d98991ad0e9abef77803ee5945fd85aa7aa62a67c69efca9a801696a1b58dda27f211e878b3327789e6fd2a6f6c725ccefe36774b5ce95 + checksum: de10e986b5322c9f807350467dc845ec59df9e596a5926a3b5edbb4710d8e3b8009d4396690e70b88c3844fe8ec4042d61436dd4b92d1f5f75655cf43ab07e99 languageName: node linkType: hard @@ -118,25 +90,24 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-transforms@npm:7.24.7" +"@babel/helper-module-transforms@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-module-transforms@npm:7.25.2" dependencies: - "@babel/helper-environment-visitor": "npm:^7.24.7" "@babel/helper-module-imports": "npm:^7.24.7" "@babel/helper-simple-access": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" "@babel/helper-validator-identifier": "npm:^7.24.7" + "@babel/traverse": "npm:^7.25.2" peerDependencies: "@babel/core": ^7.0.0 - checksum: 4f311755fcc3b4cbdb689386309cdb349cf0575a938f0b9ab5d678e1a81bbb265aa34ad93174838245f2ac7ff6d5ddbd0104638a75e4e961958ed514355687b6 + checksum: adaa15970ace0aee5934b5a633789b5795b6229c6a9cf3e09a7e80aa33e478675eee807006a862aa9aa517935d81f88a6db8a9f5936e3a2a40ec75f8062bc329 languageName: node linkType: hard "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.24.7 - resolution: "@babel/helper-plugin-utils@npm:7.24.7" - checksum: c3d38cd9b3520757bb4a279255cc3f956fc0ac1c193964bd0816ebd5c86e30710be8e35252227e0c9d9e0f4f56d9b5f916537f2bc588084b0988b4787a967d31 + version: 7.24.8 + resolution: "@babel/helper-plugin-utils@npm:7.24.8" + checksum: 0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d languageName: node linkType: hard @@ -150,19 +121,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-split-export-declaration@npm:7.24.7" - dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 0254577d7086bf09b01bbde98f731d4fcf4b7c3fa9634fdb87929801307c1f6202a1352e3faa5492450fa8da4420542d44de604daf540704ff349594a78184f6 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-string-parser@npm:7.24.7" - checksum: 47840c7004e735f3dc93939c77b099bb41a64bf3dda0cae62f60e6f74a5ff80b63e9b7cf77b5ec25a324516381fc994e1f62f922533236a8e3a6af57decb5e1e +"@babel/helper-string-parser@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-string-parser@npm:7.24.8" + checksum: 6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08 languageName: node linkType: hard @@ -173,20 +135,20 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-option@npm:7.24.7" - checksum: 21aea2b7bc5cc8ddfb828741d5c8116a84cbc35b4a3184ec53124f08e09746f1f67a6f9217850188995ca86059a7942e36d8965a6730784901def777b7e8a436 +"@babel/helper-validator-option@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-validator-option@npm:7.24.8" + checksum: 73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f languageName: node linkType: hard -"@babel/helpers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helpers@npm:7.24.7" +"@babel/helpers@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helpers@npm:7.25.0" dependencies: - "@babel/template": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: aa8e230f6668773e17e141dbcab63e935c514b4b0bf1fed04d2eaefda17df68e16b61a56573f7f1d4d1e605ce6cc162b5f7e9fdf159fde1fd9b77c920ae47d27 + "@babel/template": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + checksum: b7fe007fc4194268abf70aa3810365085e290e6528dcb9fbbf7a765d43c74b6369ce0f99c5ccd2d44c413853099daa449c9a0123f0b212ac8d18643f2e8174b8 languageName: node linkType: hard @@ -202,12 +164,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/parser@npm:7.24.7" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3": + version: 7.25.3 + resolution: "@babel/parser@npm:7.25.3" + dependencies: + "@babel/types": "npm:^7.25.2" bin: parser: ./bin/babel-parser.js - checksum: 8b244756872185a1c6f14b979b3535e682ff08cb5a2a5fd97cc36c017c7ef431ba76439e95e419d43000c5b07720495b00cf29a7f0d9a483643d08802b58819b + checksum: 874b01349aedb805d6694f867a752fdc7469778fad76aca4548d2cc6ce96087c3ba5fb917a6f8d05d2d1a74aae309b5f50f1a4dba035f5a2c9fcfe6e106d2c4e languageName: node linkType: hard @@ -366,51 +330,48 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.21.0": - version: 7.24.7 - resolution: "@babel/runtime@npm:7.24.7" + version: 7.25.0 + resolution: "@babel/runtime@npm:7.25.0" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: b6fa3ec61a53402f3c1d75f4d808f48b35e0dfae0ec8e2bb5c6fc79fb95935da75766e0ca534d0f1c84871f6ae0d2ebdd950727cfadb745a2cdbef13faef5513 + checksum: bd3faf246170826cef2071a94d7b47b49d532351360ecd17722d03f6713fd93a3eb3dbd9518faa778d5e8ccad7392a7a604e56bd37aaad3f3aa68d619ccd983d languageName: node linkType: hard -"@babel/template@npm:^7.24.7, @babel/template@npm:^7.3.3": - version: 7.24.7 - resolution: "@babel/template@npm:7.24.7" +"@babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3": + version: 7.25.0 + resolution: "@babel/template@npm:7.25.0" dependencies: "@babel/code-frame": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 95b0b3ee80fcef685b7f4426f5713a855ea2cd5ac4da829b213f8fb5afe48a2a14683c2ea04d446dbc7f711c33c5cd4a965ef34dcbe5bc387c9e966b67877ae3 + "@babel/parser": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + checksum: 4e31afd873215744c016e02b04f43b9fa23205d6d0766fb2e93eb4091c60c1b88897936adb895fb04e3c23de98dfdcbe31bc98daaa1a4e0133f78bb948e1209b languageName: node linkType: hard -"@babel/traverse@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/traverse@npm:7.24.7" +"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.25.2": + version: 7.25.3 + resolution: "@babel/traverse@npm:7.25.3" dependencies: "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.24.7" - "@babel/helper-environment-visitor": "npm:^7.24.7" - "@babel/helper-function-name": "npm:^7.24.7" - "@babel/helper-hoist-variables": "npm:^7.24.7" - "@babel/helper-split-export-declaration": "npm:^7.24.7" - "@babel/parser": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" + "@babel/generator": "npm:^7.25.0" + "@babel/parser": "npm:^7.25.3" + "@babel/template": "npm:^7.25.0" + "@babel/types": "npm:^7.25.2" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: a5135e589c3f1972b8877805f50a084a04865ccb1d68e5e1f3b94a8841b3485da4142e33413d8fd76bc0e6444531d3adf1f59f359c11ffac452b743d835068ab + checksum: 4c8a1966fa90b53a783a4afd2fcdaa6ab1a912e6621dca9fcc6633e80ccb9491620e88caf73b537da4e16cefd537b548c87d7087868d5b0066414dea375c0e9b languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": - version: 7.24.7 - resolution: "@babel/types@npm:7.24.7" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.3.3": + version: 7.25.2 + resolution: "@babel/types@npm:7.25.2" dependencies: - "@babel/helper-string-parser": "npm:^7.24.7" + "@babel/helper-string-parser": "npm:^7.24.8" "@babel/helper-validator-identifier": "npm:^7.24.7" to-fast-properties: "npm:^2.0.0" - checksum: d9ecbfc3eb2b05fb1e6eeea546836ac30d990f395ef3fe3f75ced777a222c3cfc4489492f72e0ce3d9a5a28860a1ce5f81e66b88cf5088909068b3ff4fab72c1 + checksum: e489435856be239f8cc1120c90a197e4c2865385121908e5edb7223cfdff3768cba18f489adfe0c26955d9e7bbb1fb10625bc2517505908ceb0af848989bd864 languageName: node linkType: hard @@ -492,7 +453,7 @@ __metadata: "@ethersproject/bytes": "npm:^5.7.0" "@ethersproject/contracts": "npm:^5.7.0" "@ethersproject/providers": "npm:^5.7.2" - "@polkadot/types": "npm:^11.2.1" + "@polkadot/types": "npm:^12.2.1" "@polkadot/util-crypto": "npm:^12.6.2" abitype: "npm:^1.0.4" concurrently: "npm:7.0.0" @@ -517,7 +478,7 @@ __metadata: dependencies: "@buildwithsygma/core": "workspace:*" "@buildwithsygma/substrate": "workspace:*" - "@polkadot/api": "npm:^11.2.1" + "@polkadot/api": "npm:^12.2.1" "@polkadot/keyring": "npm:^12.6.2" "@polkadot/util-crypto": "npm:^12.6.2" dotenv: "npm:^16.3.1" @@ -528,14 +489,15 @@ __metadata: languageName: unknown linkType: soft -"@buildwithsygma/substrate@workspace:*, @buildwithsygma/substrate@workspace:packages/substrate": +"@buildwithsygma/substrate@workspace:*, @buildwithsygma/substrate@workspace:^, @buildwithsygma/substrate@workspace:packages/substrate": version: 0.0.0-use.local resolution: "@buildwithsygma/substrate@workspace:packages/substrate" dependencies: "@buildwithsygma/core": "workspace:^" "@buildwithsygma/sygma-contracts": "npm:2.5.1" - "@polkadot/api": "npm:^11.2.1" - "@polkadot/types": "npm:^11.2.1" + "@polkadot/api": "npm:^12.2.1" + "@polkadot/api-base": "npm:^12.2.2" + "@polkadot/types": "npm:^12.2.1" "@polkadot/util": "npm:^12.6.2" "@types/jest": "npm:^29.5.12" concurrently: "npm:7.0.0" @@ -576,14 +538,14 @@ __metadata: linkType: hard "@buildwithsygma/sygma-contracts@npm:^2.8.0": - version: 2.8.0 - resolution: "@buildwithsygma/sygma-contracts@npm:2.8.0" + version: 2.9.0 + resolution: "@buildwithsygma/sygma-contracts@npm:2.9.0" dependencies: "@openzeppelin/contracts": "npm:4.5.0" "@uniswap/v3-periphery": "npm:^1.4.4" peerDependencies: ethers: ">= 5.0.0" - checksum: eb4e7d619c4817e77acf3fb49e66dc2109ac4ffd7f100ce3f3df4b50ef624040e6759d482d1f2ff2123142bd61e7693302b9c66583f1eb6b13cea14778d20866 + checksum: 0f98a64da674e1264caaf429665a23b7db63365d7a8c5a38d8e23f0b728faecd6bfd3a0c43616bd4aa43133229324f14d4c3d0e2e24225d223574d5e94af9263 languageName: node linkType: hard @@ -596,6 +558,33 @@ __metadata: languageName: unknown linkType: soft +"@buildwithsygma/utils@workspace:packages/utils": + version: 0.0.0-use.local + resolution: "@buildwithsygma/utils@workspace:packages/utils" + dependencies: + "@buildwithsygma/core": "workspace:^" + "@buildwithsygma/evm": "workspace:^" + "@buildwithsygma/substrate": "workspace:^" + "@buildwithsygma/sygma-contracts": "npm:2.6.1" + "@polkadot/api": "npm:^12.2.1" + "@polkadot/rpc-provider": "npm:^12.2.1" + "@polkadot/types": "npm:^12.2.1" + "@polkadot/util": "npm:^12.6.2" + "@types/jest": "npm:^29.4.0" + eslint: "npm:8" + jest: "npm:^29.4.1" + jest-environment-jsdom: "npm:^29.4.1" + jest-extended: "npm:1.2.0" + jest-fetch-mock: "npm:^3.0.3" + ts-jest: "npm:^29.0.5" + ts-node: "npm:10.9.1" + typedoc: "npm:^0.24.1" + typedoc-plugin-markdown: "npm:^3.15.1" + typescript: "npm:5.0.4" + web3-providers-http: "npm:1.10.4" + languageName: unknown + linkType: soft + "@chainsafe/eslint-config@npm:^2.2.4": version: 2.2.4 resolution: "@chainsafe/eslint-config@npm:2.2.4" @@ -807,9 +796,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": - version: 4.10.1 - resolution: "@eslint-community/regexpp@npm:4.10.1" - checksum: f59376025d0c91dd9fdf18d33941df499292a3ecba3e9889c360f3f6590197d30755604588786cdca0f9030be315a26b206014af4b65c0ff85b4ec49043de780 + version: 4.11.0 + resolution: "@eslint-community/regexpp@npm:4.11.0" + checksum: 0f6328869b2741e2794da4ad80beac55cba7de2d3b44f796a60955b0586212ec75e6b0253291fd4aad2100ad471d1480d8895f2b54f1605439ba4c875e05e523 languageName: node linkType: hard @@ -2075,9 +2064,9 @@ __metadata: linkType: hard "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: 0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 languageName: node linkType: hard @@ -2101,12 +2090,12 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:1.4.0, @noble/curves@npm:^1.3.0, @noble/curves@npm:~1.4.0": - version: 1.4.0 - resolution: "@noble/curves@npm:1.4.0" +"@noble/curves@npm:1.4.2, @noble/curves@npm:^1.3.0, @noble/curves@npm:~1.4.0": + version: 1.4.2 + resolution: "@noble/curves@npm:1.4.2" dependencies: "@noble/hashes": "npm:1.4.0" - checksum: 31fbc370df91bcc5a920ca3f2ce69c8cf26dc94775a36124ed8a5a3faf0453badafd2ee4337061ffea1b43c623a90ee8b286a5a81604aaf9563bdad7ff795d18 + checksum: 65620c895b15d46e8087939db6657b46a1a15cd4e0e4de5cd84b97a0dfe0af85f33a431bb21ac88267e3dc508618245d4cb564213959d66a84d690fe18a63419 languageName: node linkType: hard @@ -2258,74 +2247,74 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-augment@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/api-augment@npm:11.3.1" +"@polkadot/api-augment@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/api-augment@npm:12.2.3" dependencies: - "@polkadot/api-base": "npm:11.3.1" - "@polkadot/rpc-augment": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-augment": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" + "@polkadot/api-base": "npm:12.2.3" + "@polkadot/rpc-augment": "npm:12.2.3" + "@polkadot/types": "npm:12.2.3" + "@polkadot/types-augment": "npm:12.2.3" + "@polkadot/types-codec": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" tslib: "npm:^2.6.2" - checksum: 0c0bd3a02671a5e6c43a4d5736733d6898337bd562b22b8e91d164cd95bc91cde34a9f9ff5c244173df82274032f754d0e04e4081b3c305847b2b91fb569e5c1 + checksum: 494c5c0f8d19abc3a51f2154a618ad9c13d9cceb5d94e8579f023cd0f72d349a49530b94c35f3a2a5f778ea0354ccc778066695f3a28a5d503e616b183672411 languageName: node linkType: hard -"@polkadot/api-base@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/api-base@npm:11.3.1" +"@polkadot/api-base@npm:12.2.3, @polkadot/api-base@npm:^12.2.2": + version: 12.2.3 + resolution: "@polkadot/api-base@npm:12.2.3" dependencies: - "@polkadot/rpc-core": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" + "@polkadot/rpc-core": "npm:12.2.3" + "@polkadot/types": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" rxjs: "npm:^7.8.1" tslib: "npm:^2.6.2" - checksum: 256b0936eba2b12506780957f51fa65e5f84fc4a75a17b8666db65f2190701959bb0548fdcb48d6e91600f1ba4518b6c1fa623ca88bc662f2c8777f2ea960e4b + checksum: 93206efb7029a82da0d9559280bf27d1a264af42fb6fa35b3db158f02aa7dfc552aa0266267b5949479e3977a47fa65b1093122a116eeeb164e9a6cfcac78b66 languageName: node linkType: hard -"@polkadot/api-derive@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/api-derive@npm:11.3.1" +"@polkadot/api-derive@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/api-derive@npm:12.2.3" dependencies: - "@polkadot/api": "npm:11.3.1" - "@polkadot/api-augment": "npm:11.3.1" - "@polkadot/api-base": "npm:11.3.1" - "@polkadot/rpc-core": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" + "@polkadot/api": "npm:12.2.3" + "@polkadot/api-augment": "npm:12.2.3" + "@polkadot/api-base": "npm:12.2.3" + "@polkadot/rpc-core": "npm:12.2.3" + "@polkadot/types": "npm:12.2.3" + "@polkadot/types-codec": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" + "@polkadot/util-crypto": "npm:^13.0.2" rxjs: "npm:^7.8.1" tslib: "npm:^2.6.2" - checksum: 5ea05eadd2119ee3f1707d1dcd5437bef041f7501deac788faa5bac140f86e323f4dd623f56e400cafa6835d0c4dfff90f6699eeaf595eb665f1b0d7c070b9be - languageName: node - linkType: hard - -"@polkadot/api@npm:11.3.1, @polkadot/api@npm:^11.2.1": - version: 11.3.1 - resolution: "@polkadot/api@npm:11.3.1" - dependencies: - "@polkadot/api-augment": "npm:11.3.1" - "@polkadot/api-base": "npm:11.3.1" - "@polkadot/api-derive": "npm:11.3.1" - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/rpc-augment": "npm:11.3.1" - "@polkadot/rpc-core": "npm:11.3.1" - "@polkadot/rpc-provider": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-augment": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/types-create": "npm:11.3.1" - "@polkadot/types-known": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" + checksum: 86979e4644527c543d60cb046ab0f65baf3a1c986f8e46f9987ad66958e68d7fd31d071f600d619d008f04e72b1da4e4baedb83b3d71a9ff07a02f70022b50d2 + languageName: node + linkType: hard + +"@polkadot/api@npm:12.2.3, @polkadot/api@npm:^12.2.1": + version: 12.2.3 + resolution: "@polkadot/api@npm:12.2.3" + dependencies: + "@polkadot/api-augment": "npm:12.2.3" + "@polkadot/api-base": "npm:12.2.3" + "@polkadot/api-derive": "npm:12.2.3" + "@polkadot/keyring": "npm:^13.0.2" + "@polkadot/rpc-augment": "npm:12.2.3" + "@polkadot/rpc-core": "npm:12.2.3" + "@polkadot/rpc-provider": "npm:12.2.3" + "@polkadot/types": "npm:12.2.3" + "@polkadot/types-augment": "npm:12.2.3" + "@polkadot/types-codec": "npm:12.2.3" + "@polkadot/types-create": "npm:12.2.3" + "@polkadot/types-known": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" + "@polkadot/util-crypto": "npm:^13.0.2" eventemitter3: "npm:^5.0.1" rxjs: "npm:^7.8.1" tslib: "npm:^2.6.2" - checksum: 160842649ffc28486a157056127c0f2231860ca1b7b7980b6f49365fd8030dccc8978f881c544d9211a0c94a988059b330f58de93ef2143bc657953b3ab05074 + checksum: 11975fbed0b8de4878bc58cc04266cf8f52cea3f00c09cebbd0d2774f0e57a09ec2659592b37b2b49281d8562df5a61a392dacbaa028aeae71253bd53d22eaf0 languageName: node linkType: hard @@ -2343,7 +2332,21 @@ __metadata: languageName: node linkType: hard -"@polkadot/networks@npm:12.6.2, @polkadot/networks@npm:^12.6.2": +"@polkadot/keyring@npm:^13.0.2": + version: 13.0.2 + resolution: "@polkadot/keyring@npm:13.0.2" + dependencies: + "@polkadot/util": "npm:13.0.2" + "@polkadot/util-crypto": "npm:13.0.2" + tslib: "npm:^2.6.2" + peerDependencies: + "@polkadot/util": 13.0.2 + "@polkadot/util-crypto": 13.0.2 + checksum: 102fb4007b682f0ab54cb4a241d97b9028e49c6f1215323a89caea4b62f54376b46be9b1de4712d27e1e842fdaf8c8852c0bae70c4b1d663a21f939129eb99a8 + languageName: node + linkType: hard + +"@polkadot/networks@npm:12.6.2": version: 12.6.2 resolution: "@polkadot/networks@npm:12.6.2" dependencies: @@ -2354,45 +2357,56 @@ __metadata: languageName: node linkType: hard -"@polkadot/rpc-augment@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/rpc-augment@npm:11.3.1" +"@polkadot/networks@npm:13.0.2, @polkadot/networks@npm:^13.0.2": + version: 13.0.2 + resolution: "@polkadot/networks@npm:13.0.2" dependencies: - "@polkadot/rpc-core": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" + "@polkadot/util": "npm:13.0.2" + "@substrate/ss58-registry": "npm:^1.46.0" tslib: "npm:^2.6.2" - checksum: c7fb114fdb0e0fcbebb588305066566c30d033eb3aad2ca07b091299f5177382599a2c97f970f27f2e21c4c6b9909510747407370d56f3256978ae361ea339c6 + checksum: 33fd8348638eb9ad0bc171dbc16cba3f4b904829383bce1f2e2da8b7498ac8ed63d5a0b7d41a6e397c4caf9ae429405085d92b599af920b498b229b52fc0db71 languageName: node linkType: hard -"@polkadot/rpc-core@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/rpc-core@npm:11.3.1" +"@polkadot/rpc-augment@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/rpc-augment@npm:12.2.3" dependencies: - "@polkadot/rpc-augment": "npm:11.3.1" - "@polkadot/rpc-provider": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" + "@polkadot/rpc-core": "npm:12.2.3" + "@polkadot/types": "npm:12.2.3" + "@polkadot/types-codec": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" + tslib: "npm:^2.6.2" + checksum: 8674ed5ecc79b3c2e20263e1cff310d14a6b927e82229e59ef2f9dcf7ab32d6ede649343ca670f8a4f0bd4fc1edb151c33b6d0913acdcd6a2a984bf1f47611a2 + languageName: node + linkType: hard + +"@polkadot/rpc-core@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/rpc-core@npm:12.2.3" + dependencies: + "@polkadot/rpc-augment": "npm:12.2.3" + "@polkadot/rpc-provider": "npm:12.2.3" + "@polkadot/types": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" rxjs: "npm:^7.8.1" tslib: "npm:^2.6.2" - checksum: c5041e1d207216e215e7b5ac1b52b77bf29ce86dd72b46713e125e3a23e4b8dd21342b500e72d7265a55cc962a6d758fa2444e21d3d0f048468f497ad3d1adf6 + checksum: f88aa97fac399d9ce1c6c7abe533649ee0c16709bd299025387eacae2894784485c8e26b168864c840409308dff223beba56fd875b5bddcec1fd4f0104d0283b languageName: node linkType: hard -"@polkadot/rpc-provider@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/rpc-provider@npm:11.3.1" +"@polkadot/rpc-provider@npm:12.2.3, @polkadot/rpc-provider@npm:^12.2.1": + version: 12.2.3 + resolution: "@polkadot/rpc-provider@npm:12.2.3" dependencies: - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-support": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - "@polkadot/x-fetch": "npm:^12.6.2" - "@polkadot/x-global": "npm:^12.6.2" - "@polkadot/x-ws": "npm:^12.6.2" + "@polkadot/keyring": "npm:^13.0.2" + "@polkadot/types": "npm:12.2.3" + "@polkadot/types-support": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" + "@polkadot/util-crypto": "npm:^13.0.2" + "@polkadot/x-fetch": "npm:^13.0.2" + "@polkadot/x-global": "npm:^13.0.2" + "@polkadot/x-ws": "npm:^13.0.2" "@substrate/connect": "npm:0.8.10" eventemitter3: "npm:^5.0.1" mock-socket: "npm:^9.3.1" @@ -2401,81 +2415,81 @@ __metadata: dependenciesMeta: "@substrate/connect": optional: true - checksum: 5bd6118c9833e0d1c302c8a375f48d1eaba7ec2676268e1c017c567cb0206160cc99c9182aa6e5c87ee911a4e91de3bbdee5ade66fdc0984157bfd64050949ea + checksum: 1f63ad8fa28af159742d9ca8e5f8a3131e75e66383864985679bd2f68aad7867057063cbe4901b804ff3753a971000a72b31a864767000929b8df3dac234bee2 languageName: node linkType: hard -"@polkadot/types-augment@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-augment@npm:11.3.1" +"@polkadot/types-augment@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/types-augment@npm:12.2.3" dependencies: - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" + "@polkadot/types": "npm:12.2.3" + "@polkadot/types-codec": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" tslib: "npm:^2.6.2" - checksum: b0e4c9d62d1fb157b8e4e5734a18324f61cf45519c1ff5c58ca6c8c293af8efcce9328dd946173b7b316d8172e40b39ac2c2aed7694bfd6193c37f09295477ee + checksum: 90981b627079c9180c490bc07c6729bee3a619dd2756d215355b1b6ac8d9c54a3480bbe34b402b83fe808776b7810cb0ee01c5a72215a97071c5a3c7825082c9 languageName: node linkType: hard -"@polkadot/types-codec@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-codec@npm:11.3.1" +"@polkadot/types-codec@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/types-codec@npm:12.2.3" dependencies: - "@polkadot/util": "npm:^12.6.2" - "@polkadot/x-bigint": "npm:^12.6.2" + "@polkadot/util": "npm:^13.0.2" + "@polkadot/x-bigint": "npm:^13.0.2" tslib: "npm:^2.6.2" - checksum: d9e195571177e40d709576850d3148f834a48e974e56581cd97d631633d6b8db251e918caab98b06d31162e1991b52d0e2807849e43741aaff97d9506e0f8722 + checksum: ad56b1c5b245d12dad3cb3fbb532830f096ca69e4d644f7744a9ca8307b63964ca5436ab3dbd1f54eddf124cf34fd80d0a2b766490883baf24eab67c437c056e languageName: node linkType: hard -"@polkadot/types-create@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-create@npm:11.3.1" +"@polkadot/types-create@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/types-create@npm:12.2.3" dependencies: - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" + "@polkadot/types-codec": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" tslib: "npm:^2.6.2" - checksum: 7f7f4456ccb51773e860b03596189990c6e47c9ae4a9766bbbd76ef1a53f78e1e42da10feeaf9f111c71dd9484fcdf59546ab1f59e67ca025d95bae4b32c8760 + checksum: 58b5d5bf8eea6b08e1432a990b963e0d511e53f415ba86755c1199e98fd15a416a3fd4237157b851e93a064fbd9e729cf05d4da6ac4089b8907541363c4ac73b languageName: node linkType: hard -"@polkadot/types-known@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-known@npm:11.3.1" +"@polkadot/types-known@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/types-known@npm:12.2.3" dependencies: - "@polkadot/networks": "npm:^12.6.2" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/types-create": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" + "@polkadot/networks": "npm:^13.0.2" + "@polkadot/types": "npm:12.2.3" + "@polkadot/types-codec": "npm:12.2.3" + "@polkadot/types-create": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" tslib: "npm:^2.6.2" - checksum: c90f2a00ef1326e78058659183803e0f8dc140df49760413e634914270d6689dd42a07a85a0002cbda00922a18ca8a5cd818e2645117540bd35d28794505983a + checksum: 4323d32cb85b357462f64da7b6299ba40fb0d5704d6dc1702f6c210b94d1bc9ae1e7170f0c385f52b53384db333eb10ef1b1bbbcab7bdeac7e853c9fa08bdf07 languageName: node linkType: hard -"@polkadot/types-support@npm:11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-support@npm:11.3.1" +"@polkadot/types-support@npm:12.2.3": + version: 12.2.3 + resolution: "@polkadot/types-support@npm:12.2.3" dependencies: - "@polkadot/util": "npm:^12.6.2" + "@polkadot/util": "npm:^13.0.2" tslib: "npm:^2.6.2" - checksum: c2d3ecf953d399c7fcc9c5f11983999f66afc91507f45436056ecce6657861de9dd2dcae42b2626374d1875f43e2c9d714306372e0a36b0bd90b408d53b4a041 + checksum: 2b436b2d600b51c5ba7276602ec32fd2dfedb2b03d9b643fe40e16c8d6fd688a7a8c18e7e2db60fc31df241bb623a668281a87223507cca9537122503ccd7606 languageName: node linkType: hard -"@polkadot/types@npm:11.3.1, @polkadot/types@npm:^11.2.1": - version: 11.3.1 - resolution: "@polkadot/types@npm:11.3.1" +"@polkadot/types@npm:12.2.3, @polkadot/types@npm:^12.2.1": + version: 12.2.3 + resolution: "@polkadot/types@npm:12.2.3" dependencies: - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/types-augment": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/types-create": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" + "@polkadot/keyring": "npm:^13.0.2" + "@polkadot/types-augment": "npm:12.2.3" + "@polkadot/types-codec": "npm:12.2.3" + "@polkadot/types-create": "npm:12.2.3" + "@polkadot/util": "npm:^13.0.2" + "@polkadot/util-crypto": "npm:^13.0.2" rxjs: "npm:^7.8.1" tslib: "npm:^2.6.2" - checksum: dfa5ccf8d487493e3b6be62ad3469ba0401167a4d7471add11900e9fe87d63a6f79e342aa110c40981d5a2de9a6e60ccb66c228a066edd895ed8fb83a5ac674b + checksum: f910465789b4abe217d41aa513148253257b72017bc25bdae73fa9a19b6b0430b260a165147dfef466707164b38f6927a9cc4f00fb9c3efdcb3ed5b76eeb482e languageName: node linkType: hard @@ -2499,6 +2513,26 @@ __metadata: languageName: node linkType: hard +"@polkadot/util-crypto@npm:13.0.2, @polkadot/util-crypto@npm:^13.0.2": + version: 13.0.2 + resolution: "@polkadot/util-crypto@npm:13.0.2" + dependencies: + "@noble/curves": "npm:^1.3.0" + "@noble/hashes": "npm:^1.3.3" + "@polkadot/networks": "npm:13.0.2" + "@polkadot/util": "npm:13.0.2" + "@polkadot/wasm-crypto": "npm:^7.3.2" + "@polkadot/wasm-util": "npm:^7.3.2" + "@polkadot/x-bigint": "npm:13.0.2" + "@polkadot/x-randomvalues": "npm:13.0.2" + "@scure/base": "npm:^1.1.5" + tslib: "npm:^2.6.2" + peerDependencies: + "@polkadot/util": 13.0.2 + checksum: 01c4f592798ec8716e4e199c3f8289d5e9b15cd7aeb52451edc498e45f04c630863e3e613c8aadb3120e531231e4494f389d7fc3c275471f3cd4e1d001a09a0f + languageName: node + linkType: hard + "@polkadot/util@npm:12.6.2, @polkadot/util@npm:^12.6.2": version: 12.6.2 resolution: "@polkadot/util@npm:12.6.2" @@ -2514,6 +2548,21 @@ __metadata: languageName: node linkType: hard +"@polkadot/util@npm:13.0.2, @polkadot/util@npm:^13.0.2": + version: 13.0.2 + resolution: "@polkadot/util@npm:13.0.2" + dependencies: + "@polkadot/x-bigint": "npm:13.0.2" + "@polkadot/x-global": "npm:13.0.2" + "@polkadot/x-textdecoder": "npm:13.0.2" + "@polkadot/x-textencoder": "npm:13.0.2" + "@types/bn.js": "npm:^5.1.5" + bn.js: "npm:^5.2.1" + tslib: "npm:^2.6.2" + checksum: 2dabe88a6d55867de42dbdd792a08af447e03e1e878c29549790dab66c7147cb750da18dfd257fa02ad9d08248fb701b2110cb6a55ab0690070a3c9dc751f210 + languageName: node + linkType: hard + "@polkadot/wasm-bridge@npm:7.3.2": version: 7.3.2 resolution: "@polkadot/wasm-bridge@npm:7.3.2" @@ -2594,7 +2643,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-bigint@npm:12.6.2, @polkadot/x-bigint@npm:^12.6.2": +"@polkadot/x-bigint@npm:12.6.2": version: 12.6.2 resolution: "@polkadot/x-bigint@npm:12.6.2" dependencies: @@ -2604,18 +2653,28 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-fetch@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-fetch@npm:12.6.2" +"@polkadot/x-bigint@npm:13.0.2, @polkadot/x-bigint@npm:^13.0.2": + version: 13.0.2 + resolution: "@polkadot/x-bigint@npm:13.0.2" dependencies: - "@polkadot/x-global": "npm:12.6.2" + "@polkadot/x-global": "npm:13.0.2" + tslib: "npm:^2.6.2" + checksum: 506dca890f389a8cdc3f2a816555144e3f8d0947528bf18113dd033fa07644d493dcf52b35a74c735aa8241202ad9cfaa6853266ac456f1c997032ff423ad0b8 + languageName: node + linkType: hard + +"@polkadot/x-fetch@npm:^13.0.2": + version: 13.0.2 + resolution: "@polkadot/x-fetch@npm:13.0.2" + dependencies: + "@polkadot/x-global": "npm:13.0.2" node-fetch: "npm:^3.3.2" tslib: "npm:^2.6.2" - checksum: c4e34c28f4374db3b6795b31f63434b4241896a82cd1a0aa81196c7dbe8aa345069a39d27d5c3af214d8d2824154c6fe1fcbe9cb22af32f9a2c3fd22dc4b8583 + checksum: 4f597769cd920051ba070c7fd49858e53cd035be2aa515de2ad289def83405e6de2856b7800e236239b7122086e40a2e1e581add36f2fa82018ca444d6e7314a languageName: node linkType: hard -"@polkadot/x-global@npm:12.6.2, @polkadot/x-global@npm:^12.6.2": +"@polkadot/x-global@npm:12.6.2": version: 12.6.2 resolution: "@polkadot/x-global@npm:12.6.2" dependencies: @@ -2624,6 +2683,15 @@ __metadata: languageName: node linkType: hard +"@polkadot/x-global@npm:13.0.2, @polkadot/x-global@npm:^13.0.2": + version: 13.0.2 + resolution: "@polkadot/x-global@npm:13.0.2" + dependencies: + tslib: "npm:^2.6.2" + checksum: 68e1e1f15a77fe1ec0ce92c669c2418f796ec84c56639281466a21daaf6a2ce6f1f1ae010767c2f843dfa0430272dada2158e714c3d1f2eacd6ce272b211bd29 + languageName: node + linkType: hard + "@polkadot/x-randomvalues@npm:12.6.2": version: 12.6.2 resolution: "@polkadot/x-randomvalues@npm:12.6.2" @@ -2637,6 +2705,19 @@ __metadata: languageName: node linkType: hard +"@polkadot/x-randomvalues@npm:13.0.2": + version: 13.0.2 + resolution: "@polkadot/x-randomvalues@npm:13.0.2" + dependencies: + "@polkadot/x-global": "npm:13.0.2" + tslib: "npm:^2.6.2" + peerDependencies: + "@polkadot/util": 13.0.2 + "@polkadot/wasm-util": "*" + checksum: 81b7e88105a6f2bb7f70bfa28f8cb7b8167064e9bb3fd83c972438695717df101d34998fe648e122f7456ca876abd3a01bdc3847c0c769e3cc9686d7885c95df + languageName: node + linkType: hard + "@polkadot/x-textdecoder@npm:12.6.2": version: 12.6.2 resolution: "@polkadot/x-textdecoder@npm:12.6.2" @@ -2647,6 +2728,16 @@ __metadata: languageName: node linkType: hard +"@polkadot/x-textdecoder@npm:13.0.2": + version: 13.0.2 + resolution: "@polkadot/x-textdecoder@npm:13.0.2" + dependencies: + "@polkadot/x-global": "npm:13.0.2" + tslib: "npm:^2.6.2" + checksum: c77054ba8c31fd6a73cfa54b4cc4848712e7c49800bbd1c9144291724cc0b170fe3eb66643741c68b2978050dcf1f120de72b3f677942beb57fd80c0dbb14c38 + languageName: node + linkType: hard + "@polkadot/x-textencoder@npm:12.6.2": version: 12.6.2 resolution: "@polkadot/x-textencoder@npm:12.6.2" @@ -2657,14 +2748,24 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-ws@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-ws@npm:12.6.2" +"@polkadot/x-textencoder@npm:13.0.2": + version: 13.0.2 + resolution: "@polkadot/x-textencoder@npm:13.0.2" dependencies: - "@polkadot/x-global": "npm:12.6.2" + "@polkadot/x-global": "npm:13.0.2" + tslib: "npm:^2.6.2" + checksum: a84d230975e1fea712d99650644c2352c1a7e2f3140a7d4c842a46df6df1ae15ecdc28ec32ea521beddd1978eaf8b6b80b2b89e1d0aaf47328c1c76dfd29f0d7 + languageName: node + linkType: hard + +"@polkadot/x-ws@npm:^13.0.2": + version: 13.0.2 + resolution: "@polkadot/x-ws@npm:13.0.2" + dependencies: + "@polkadot/x-global": "npm:13.0.2" tslib: "npm:^2.6.2" - ws: "npm:^8.15.1" - checksum: 15565803a34aa7d6654c4c05725f5f44e504caa69f590523c5569fcbd66cf1e467de03e3e13a4d71bb60efceb28c60fd5719bee5efd721c020cf470025bbeb29 + ws: "npm:^8.16.0" + checksum: 87b01c6eb52945a6d4f6cb1af6a093cc170230d8bcedd069b226dd041d80e87f6e233fbe19f36f1a9ae00d2f5e9c1b6b901eae5bd3369ab889eaa0ff5c1b723e languageName: node linkType: hard @@ -2820,9 +2921,9 @@ __metadata: linkType: hard "@substrate/connect-known-chains@npm:^1.1.4": - version: 1.1.6 - resolution: "@substrate/connect-known-chains@npm:1.1.6" - checksum: 1457106ed701d731eefe9214f4b23c23c8b60d642617c7de87b71a3fb2593b110a03c2df452ba76a40427af610d1444aeb6895fe20327ad9ee0a239310a8829a + version: 1.2.2 + resolution: "@substrate/connect-known-chains@npm:1.2.2" + checksum: e789404eaca7d4d51981296370a7cf6217cfaf4c9e8ff7421b158204b52abeb90064f543c96b2f3acf8101a72207f8b724c71832f6427b1f3cf2a2d72d7d681a languageName: node linkType: hard @@ -2855,7 +2956,7 @@ __metadata: languageName: node linkType: hard -"@substrate/ss58-registry@npm:^1.44.0": +"@substrate/ss58-registry@npm:^1.44.0, @substrate/ss58-registry@npm:^1.46.0": version: 1.49.0 resolution: "@substrate/ss58-registry@npm:1.49.0" checksum: b50f32e2f4632b31b3e09cec026fef557b1b72f61b6811673f5b0fbe311c5394c2f19fc4c23f97b014c77eb2d0f535a8f079dfd3fb22d5a1d7b043ceeac0d9ac @@ -3058,11 +3159,11 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 20.14.8 - resolution: "@types/node@npm:20.14.8" + version: 22.1.0 + resolution: "@types/node@npm:22.1.0" dependencies: - undici-types: "npm:~5.26.4" - checksum: 06d4643fa3b179b41fe19f9c75c240278ca1f7a313b3b837bc36ea119499c7ad77f06bbe72694ac04aa91ec77fe747baa09b889f4c435450c1724a26bd55f160 + undici-types: "npm:~6.13.0" + checksum: 553dafcb842b889c036d43b390d464e8ffcf3ca455ddd5b1a1ef98396381eafbeb0c112a15cc6bf9662b72bc25fc45efc4b6f604760e1e84c410f1b7936c488b languageName: node linkType: hard @@ -3309,8 +3410,8 @@ __metadata: linkType: hard "abitype@npm:^1.0.4": - version: 1.0.4 - resolution: "abitype@npm:1.0.4" + version: 1.0.5 + resolution: "abitype@npm:1.0.5" peerDependencies: typescript: ">=5.0.4" zod: ^3 >=3.22.0 @@ -3319,7 +3420,7 @@ __metadata: optional: true zod: optional: true - checksum: 9db138f3706e638ad0e2d24b8449829d687fc00634f6e87b0e673aac5b2d0069b4bd813b5d2408c3ff72065d481c37aea43289202c53596171bc54d8ee4d9964 + checksum: dc954877fba19e2b7a70f1025807d69fa5aabec8bd58ce94e68d1a5ec1697fff3fe5214b4392508db7191762150f19a2396cf66ffb1d3ba8c1f37a89fd25e598 languageName: node linkType: hard @@ -3394,11 +3495,11 @@ __metadata: linkType: hard "acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.4.1, acorn@npm:^8.8.1, acorn@npm:^8.9.0": - version: 8.12.0 - resolution: "acorn@npm:8.12.0" + version: 8.12.1 + resolution: "acorn@npm:8.12.1" bin: acorn: bin/acorn - checksum: a19f9dead009d3b430fa3c253710b47778cdaace15b316de6de93a68c355507bc1072a9956372b6c990cbeeb167d4a929249d0faeb8ae4bb6911d68d53299549 + checksum: 51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386 languageName: node linkType: hard @@ -3695,18 +3796,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.toreversed@npm:^1.1.2": - version: 1.1.2 - resolution: "array.prototype.toreversed@npm:1.1.2" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - es-shim-unscopables: "npm:^1.0.0" - checksum: 2b7627ea85eae1e80ecce665a500cc0f3355ac83ee4a1a727562c7c2a1d5f1c0b4dd7b65c468ec6867207e452ba01256910a2c0b41486bfdd11acf875a7a3435 - languageName: node - linkType: hard - "array.prototype.tosorted@npm:^1.1.4": version: 1.1.4 resolution: "array.prototype.tosorted@npm:1.1.4" @@ -3761,6 +3850,13 @@ __metadata: languageName: node linkType: hard +"async@npm:^3.2.3": + version: 3.2.5 + resolution: "async@npm:3.2.5" + checksum: 1408287b26c6db67d45cb346e34892cee555b8b59e6c68e6f8c3e495cad5ca13b4f218180e871f3c2ca30df4ab52693b66f2f6ff43644760cab0b2198bda79c1 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -3778,9 +3874,9 @@ __metadata: linkType: hard "axe-core@npm:^4.9.1": - version: 4.9.1 - resolution: "axe-core@npm:4.9.1" - checksum: ac9e5a0c6fa115a43ebffc32a1d2189e1ca6431b5a78e88cdcf94a72a25c5964185682edd94fe6bdb1cb4266c0d06301b022866e0e50dcdf6e3cefe556470110 + version: 4.10.0 + resolution: "axe-core@npm:4.10.0" + checksum: 732c171d48caaace5e784895c4dacb8ca6155e9d98045138ebe3952f78457dd05b92c57d05b41ce2a570aff87dbd0471e8398d2c0f6ebe79617b746c8f658998 languageName: node linkType: hard @@ -3877,11 +3973,11 @@ __metadata: linkType: hard "base-x@npm:^3.0.2": - version: 3.0.9 - resolution: "base-x@npm:3.0.9" + version: 3.0.10 + resolution: "base-x@npm:3.0.10" dependencies: safe-buffer: "npm:^5.0.1" - checksum: e6bbeae30b24f748b546005affb710c5fbc8b11a83f6cd0ca999bd1ab7ad3a22e42888addc40cd145adc4edfe62fcfab4ebc91da22e4259aae441f95a77aee1a + checksum: a13a34b71439ee5381667efa630b3bf640cf17f632c5ba01990483367592e72f247d7fb4f8c6d0e3ff8c0fb7224b3ac682ff5be09b87063a45b3968f0457e563 languageName: node linkType: hard @@ -4022,17 +4118,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.22.2": - version: 4.23.1 - resolution: "browserslist@npm:4.23.1" +"browserslist@npm:^4.23.1": + version: 4.23.3 + resolution: "browserslist@npm:4.23.3" dependencies: - caniuse-lite: "npm:^1.0.30001629" - electron-to-chromium: "npm:^1.4.796" - node-releases: "npm:^2.0.14" - update-browserslist-db: "npm:^1.0.16" + caniuse-lite: "npm:^1.0.30001646" + electron-to-chromium: "npm:^1.5.4" + node-releases: "npm:^2.0.18" + update-browserslist-db: "npm:^1.1.0" bin: browserslist: cli.js - checksum: eb47c7ab9d60db25ce2faca70efeb278faa7282a2f62b7f2fa2f92e5f5251cf65144244566c86559419ff4f6d78f59ea50e39911321ad91f3b27788901f1f5e9 + checksum: 3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 languageName: node linkType: hard @@ -4115,8 +4211,8 @@ __metadata: linkType: hard "cacache@npm:^18.0.0": - version: 18.0.3 - resolution: "cacache@npm:18.0.3" + version: 18.0.4 + resolution: "cacache@npm:18.0.4" dependencies: "@npmcli/fs": "npm:^3.1.0" fs-minipass: "npm:^3.0.0" @@ -4130,7 +4226,7 @@ __metadata: ssri: "npm:^10.0.0" tar: "npm:^6.1.11" unique-filename: "npm:^3.0.0" - checksum: dfda92840bb371fb66b88c087c61a74544363b37a265023223a99965b16a16bbb87661fe4948718d79df6e0cc04e85e62784fbcf1832b2a5e54ff4c46fbb45b7 + checksum: 6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f languageName: node linkType: hard @@ -4168,10 +4264,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001629": - version: 1.0.30001636 - resolution: "caniuse-lite@npm:1.0.30001636" - checksum: e5f965b4da7bae1531fd9f93477d015729ff9e3fa12670ead39a9e6cdc4c43e62c272d47857c5cc332e7b02d697cb3f2f965a1030870ac7476da60c2fc81ee94 +"caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001649 + resolution: "caniuse-lite@npm:1.0.30001649" + checksum: 0ca2f3776324acfc36d72a575e72ffd1408b91f0ac462a6f0aa08ea24d0d16e83f85f652e19d40e6d6d82ab0fb588740f948e7c88d2818fe6bcd68f70ca33acf languageName: node linkType: hard @@ -4186,7 +4282,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.0": +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -4435,9 +4531,9 @@ __metadata: linkType: hard "core-js-pure@npm:^3.0.1": - version: 3.37.1 - resolution: "core-js-pure@npm:3.37.1" - checksum: 38200d08862b4ef2207af72a7525f7b9ac750f5e1d84ef27a3e314aefa69518179a9b732f51ebe35c3b38606d9fa4f686fcf6eff067615cc293a3b1c84041e74 + version: 3.38.0 + resolution: "core-js-pure@npm:3.38.0" + checksum: 331937ef8c29fd6dc2f87e14a125d7e959881abfced84670cdd289949c85dd992013f9a8f85e9a234b55f912d3638a5873499f672b473a483d2750b22fafe8ac languageName: node linkType: hard @@ -4630,14 +4726,14 @@ __metadata: linkType: hard "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.5 - resolution: "debug@npm:4.3.5" + version: 4.3.6 + resolution: "debug@npm:4.3.6" dependencies: ms: "npm:2.1.2" peerDependenciesMeta: supports-color: optional: true - checksum: 082c375a2bdc4f4469c99f325ff458adad62a3fc2c482d59923c260cb08152f34e2659f72b3767db8bb2f21ca81a60a42d1019605a412132d7b9f59363a005cc + checksum: 3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 languageName: node linkType: hard @@ -4854,10 +4950,21 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.796": - version: 1.4.811 - resolution: "electron-to-chromium@npm:1.4.811" - checksum: 67b527d62224e21c95f78767d6a8f13dcaf8d456ee8ec6d6556093372769abe4ea3ca2bdf161cf7ded2b6e8ff7936ba8b744682413a753b082754536a44b0918 +"ejs@npm:^3.1.10": + version: 3.1.10 + resolution: "ejs@npm:3.1.10" + dependencies: + jake: "npm:^10.8.5" + bin: + ejs: bin/cli.js + checksum: 52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.4": + version: 1.5.4 + resolution: "electron-to-chromium@npm:1.5.4" + checksum: 139abf1b7281c2f3288819fb9b114f09d541ac38c9f0373f194ce2d483d82d118b8751f1b2a59b04ed0d8f414071b58508a40050fc0f23b5aa7e38d11d0cf30c languageName: node linkType: hard @@ -4877,8 +4984,8 @@ __metadata: linkType: hard "elliptic@npm:^6.5.2, elliptic@npm:^6.5.4": - version: 6.5.5 - resolution: "elliptic@npm:6.5.5" + version: 6.5.6 + resolution: "elliptic@npm:6.5.6" dependencies: bn.js: "npm:^4.11.9" brorand: "npm:^1.1.0" @@ -4887,7 +4994,7 @@ __metadata: inherits: "npm:^2.0.4" minimalistic-assert: "npm:^1.0.1" minimalistic-crypto-utils: "npm:^1.0.1" - checksum: 3e591e93783a1b66f234ebf5bd3a8a9a8e063a75073a35a671e03e3b25253b6e33ac121f7efe9b8808890fffb17b40596cc19d01e6e8d1fa13b9a56ff65597c8 + checksum: 635ccd2b3c76a8506071804fc1f7b34db62f8b1b570032f593417f2a84853211d891003ec952730a310577ac30898bc338c91c10d53d4b9e13339896b05420a1 languageName: node linkType: hard @@ -4941,12 +5048,12 @@ __metadata: linkType: hard "enhanced-resolve@npm:^5.12.0": - version: 5.17.0 - resolution: "enhanced-resolve@npm:5.17.0" + version: 5.17.1 + resolution: "enhanced-resolve@npm:5.17.1" dependencies: graceful-fs: "npm:^4.2.4" tapable: "npm:^2.2.0" - checksum: 90065e58e4fd08e77ba47f827eaa17d60c335e01e4859f6e644bb3b8d0e32b203d33894aee92adfa5121fa262f912b48bdf0d0475e98b4a0a1132eea1169ad37 + checksum: 81a0515675eca17efdba2cf5bad87abc91a528fc1191aad50e275e74f045b41506167d420099022da7181c8d787170ea41e4a11a0b10b7a16f6237daecb15370 languageName: node linkType: hard @@ -5164,7 +5271,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:~0.21.4": +"esbuild@npm:~0.21.5": version: 0.21.5 resolution: "esbuild@npm:0.21.5" dependencies: @@ -5449,24 +5556,24 @@ __metadata: linkType: hard "eslint-plugin-mocha@npm:^10.1.0": - version: 10.4.3 - resolution: "eslint-plugin-mocha@npm:10.4.3" + version: 10.5.0 + resolution: "eslint-plugin-mocha@npm:10.5.0" dependencies: eslint-utils: "npm:^3.0.0" globals: "npm:^13.24.0" rambda: "npm:^7.4.0" peerDependencies: eslint: ">=7.0.0" - checksum: 4161132800363a2c9bbb89a77ac8a1055100b8882530ff06e4067c3c5d2b30af974e09a1b079a96eb696d8ec44d4a9ed56bdc3c03359149d4448baa38395463b + checksum: 49b5d3a9df038048bd4483f4d4c3b9581eec74309e197abf202376fe3d3a07812dd753a917c83fa89028f89d74be321303dc4917387e9a67450649f0e3a1ffe9 languageName: node linkType: hard "eslint-plugin-prettier@npm:^5.0.0": - version: 5.1.3 - resolution: "eslint-plugin-prettier@npm:5.1.3" + version: 5.2.1 + resolution: "eslint-plugin-prettier@npm:5.2.1" dependencies: prettier-linter-helpers: "npm:^1.0.0" - synckit: "npm:^0.8.6" + synckit: "npm:^0.9.1" peerDependencies: "@types/eslint": ">=8.0.0" eslint: ">=8.0.0" @@ -5477,7 +5584,7 @@ __metadata: optional: true eslint-config-prettier: optional: true - checksum: f45d5fc1fcfec6b0cf038a7a65ddd10a25df4fe3f9e1f6b7f0d5100e66f046a26a2492e69ee765dddf461b93c114cf2e1eb18d4970aafa6f385448985c136e09 + checksum: 4bc8bbaf5bb556c9c501dcdff369137763c49ccaf544f9fa91400360ed5e3a3f1234ab59690e06beca5b1b7e6f6356978cdd3b02af6aba3edea2ffe69ca6e8b2 languageName: node linkType: hard @@ -5491,39 +5598,39 @@ __metadata: linkType: hard "eslint-plugin-react-refresh@npm:^0.4.5": - version: 0.4.7 - resolution: "eslint-plugin-react-refresh@npm:0.4.7" + version: 0.4.9 + resolution: "eslint-plugin-react-refresh@npm:0.4.9" peerDependencies: eslint: ">=7" - checksum: 78600fe6b10905e7a068a377a381f315c962e3cb7c0575ffcb2136a1fe3dd6936bdfabb56c8f053a581b322a8fbffd7b7ec4b6fa7e227e5470f38fbe9bb170ee + checksum: 5be0677746e32d14d2711d8cba30d59b9ffec5d4a46ccae94602f7812176ac491e47a13e9331a3beeb20f29e15fcb2c69295141b582523843ee386e8b716bb30 languageName: node linkType: hard "eslint-plugin-react@npm:^7.33.2": - version: 7.34.3 - resolution: "eslint-plugin-react@npm:7.34.3" + version: 7.35.0 + resolution: "eslint-plugin-react@npm:7.35.0" dependencies: array-includes: "npm:^3.1.8" array.prototype.findlast: "npm:^1.2.5" array.prototype.flatmap: "npm:^1.3.2" - array.prototype.toreversed: "npm:^1.1.2" array.prototype.tosorted: "npm:^1.1.4" doctrine: "npm:^2.1.0" es-iterator-helpers: "npm:^1.0.19" estraverse: "npm:^5.3.0" + hasown: "npm:^2.0.2" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" minimatch: "npm:^3.1.2" object.entries: "npm:^1.1.8" object.fromentries: "npm:^2.0.8" - object.hasown: "npm:^1.1.4" object.values: "npm:^1.2.0" prop-types: "npm:^15.8.1" resolve: "npm:^2.0.0-next.5" semver: "npm:^6.3.1" string.prototype.matchall: "npm:^4.0.11" + string.prototype.repeat: "npm:^1.0.0" peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 60717e32c9948e2b4ddc53dac7c4b62c68fc7129c3249079191c941c08ebe7d1f4793d65182922d19427c2a6634e05231a7b74ceee34169afdfd0e43d4a43d26 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: eedcc33de4b2cda91d56ae517a4f771a0c76da9c1e26c95543969012871381e11d4d6cffdf6fa8423036585c289eb3500f3f93fb1d314fb2624e0aa1e463305e languageName: node linkType: hard @@ -5537,11 +5644,11 @@ __metadata: linkType: hard "eslint-plugin-simple-import-sort@npm:^12.0.0": - version: 12.1.0 - resolution: "eslint-plugin-simple-import-sort@npm:12.1.0" + version: 12.1.1 + resolution: "eslint-plugin-simple-import-sort@npm:12.1.1" peerDependencies: eslint: ">=5.0.0" - checksum: 11e963683216e190b09bb6834b6978ca71d438d9413c52495e92493b0a68fc10268d7fd5815814496ab02fe7c018e4d5fd82866bf3ed5f95cff69628ca741102 + checksum: 0ad1907ad9ddbadd1db655db0a9d0b77076e274b793a77b982c8525d808d868e6ecfce24f3a411e8a1fa551077387f9ebb38c00956073970ebd7ee6a029ce2b3 languageName: node linkType: hard @@ -5650,11 +5757,11 @@ __metadata: linkType: hard "esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: "npm:^5.1.0" - checksum: a084bd049d954cc88ac69df30534043fb2aee5555b56246493f42f27d1e168f00d9e5d4192e46f10290d312dc30dc7d58994d61a609c579c1219d636996f9213 + checksum: cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 languageName: node linkType: hard @@ -5694,11 +5801,11 @@ __metadata: linkType: hard "ethereum-bloom-filters@npm:^1.0.6": - version: 1.1.0 - resolution: "ethereum-bloom-filters@npm:1.1.0" + version: 1.2.0 + resolution: "ethereum-bloom-filters@npm:1.2.0" dependencies: "@noble/hashes": "npm:^1.4.0" - checksum: 54b0b7a1fdf12fe02fc8f605f213d11ea026111b9d2af79ff58e8319c904d9d6cee77c62fe70bee62c4d0c7952caf58ebaf47a889d9e4199cf4da1a361a87b53 + checksum: 7a0ed420cb2e85f621042d78576eb4ddea535a57f3186e314160604b29c37bcd0d3561b03695971e3a96e9c9db402b87de7248a1ac640cbc3dda1b8077cf841f languageName: node linkType: hard @@ -5726,14 +5833,14 @@ __metadata: linkType: hard "ethereum-cryptography@npm:^2.0.0, ethereum-cryptography@npm:^2.1.2": - version: 2.2.0 - resolution: "ethereum-cryptography@npm:2.2.0" + version: 2.2.1 + resolution: "ethereum-cryptography@npm:2.2.1" dependencies: - "@noble/curves": "npm:1.4.0" + "@noble/curves": "npm:1.4.2" "@noble/hashes": "npm:1.4.0" "@scure/bip32": "npm:1.4.0" "@scure/bip39": "npm:1.3.0" - checksum: 766939345c39936f32929fae101a91f009f5e28261578d44e7a224dbb70827feebb5135013e81fc39bdcf8d70b321e92b4243670f0947e73add8ae5158717b84 + checksum: c6c7626d393980577b57f709878b2eb91f270fe56116044b1d7afb70d5c519cddc0c072e8c05e4a335e05342eb64d9c3ab39d52f78bb75f76ad70817da9645ef languageName: node linkType: hard @@ -6047,6 +6154,15 @@ __metadata: languageName: node linkType: hard +"filelist@npm:^1.0.4": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: "npm:^5.0.1" + checksum: 426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 + languageName: node + linkType: hard + "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -6280,7 +6396,7 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": +"function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" dependencies: @@ -6359,11 +6475,11 @@ __metadata: linkType: hard "get-tsconfig@npm:^4.5.0, get-tsconfig@npm:^4.7.5": - version: 4.7.5 - resolution: "get-tsconfig@npm:4.7.5" + version: 4.7.6 + resolution: "get-tsconfig@npm:4.7.6" dependencies: resolve-pkg-maps: "npm:^1.0.0" - checksum: a917dff2ba9ee187c41945736bf9bbab65de31ce5bc1effd76267be483a7340915cff232199406379f26517d2d0a4edcdbcda8cca599c2480a0f2cf1e1de3efa + checksum: 2240e1b13e996dfbb947d177f422f83d09d1f93c9ce16959ebb3c2bdf8bdf4f04f98eba043859172da1685f9c7071091f0acfa964ebbe4780394d83b7dc3f58a languageName: node linkType: hard @@ -6400,8 +6516,8 @@ __metadata: linkType: hard "glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.2 - resolution: "glob@npm:10.4.2" + version: 10.4.5 + resolution: "glob@npm:10.4.5" dependencies: foreground-child: "npm:^3.1.0" jackspeak: "npm:^3.1.2" @@ -6411,7 +6527,7 @@ __metadata: path-scurry: "npm:^1.11.1" bin: glob: dist/esm/bin.mjs - checksum: 2c7296695fa75a935f3ad17dc62e4e170a8bb8752cf64d328be8992dd6ad40777939003754e10e9741ff8fbe43aa52fba32d6930d0ffa0e3b74bc3fb5eebaa2f + checksum: 19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e languageName: node linkType: hard @@ -6745,12 +6861,12 @@ __metadata: linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" dependencies: agent-base: "npm:^7.0.2" debug: "npm:4" - checksum: bc4f7c38da32a5fc622450b6cb49a24ff596f9bd48dcedb52d2da3fa1c1a80e100fb506bd59b326c012f21c863c69b275c23de1a01d0b84db396822fdf25e52b + checksum: 2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c languageName: node linkType: hard @@ -6808,9 +6924,9 @@ __metadata: linkType: hard "immutable@npm:^4.0.0-rc.12": - version: 4.3.6 - resolution: "immutable@npm:4.3.6" - checksum: 7d0952a768b4fadcee47230ed86dc9505a4517095eceaf5a47e65288571c42400c6e4a2ae21eca4eda957cb7bc50720213135b62cf6a181639111f8acae128c3 + version: 4.3.7 + resolution: "immutable@npm:4.3.7" + checksum: 9b099197081b22f6433003e34929da8ecddbbdc1474cdc8aa3b7669dee4adda349c06143de22def36016d1b6de5322b043eccd7a11db1dad2ca85dad4fff5435 languageName: node linkType: hard @@ -6825,14 +6941,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" + version: 3.2.0 + resolution: "import-local@npm:3.2.0" dependencies: pkg-dir: "npm:^4.2.0" resolve-cwd: "npm:^3.0.0" bin: import-local-fixture: fixtures/cli.js - checksum: c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 + checksum: 94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 languageName: node linkType: hard @@ -6976,11 +7092,11 @@ __metadata: linkType: hard "is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": - version: 2.14.0 - resolution: "is-core-module@npm:2.14.0" + version: 2.15.0 + resolution: "is-core-module@npm:2.15.0" dependencies: hasown: "npm:^2.0.2" - checksum: ae8dbc82bd20426558bc8d20ce290ce301c1cfd6ae4446266d10cacff4c63c67ab16440ade1d72ced9ec41c569fbacbcee01e293782ce568527c4cdf35936e4c + checksum: da161f3d9906f459486da65609b2f1a2dfdc60887c689c234d04e88a062cb7920fa5be5fb7ab08dc43b732929653c4135ef05bf77888ae2a9040ce76815eb7b1 languageName: node linkType: hard @@ -7243,15 +7359,15 @@ __metadata: linkType: hard "istanbul-lib-instrument@npm:^6.0.0": - version: 6.0.2 - resolution: "istanbul-lib-instrument@npm:6.0.2" + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" dependencies: "@babel/core": "npm:^7.23.9" "@babel/parser": "npm:^7.23.9" "@istanbuljs/schema": "npm:^0.1.3" istanbul-lib-coverage: "npm:^3.2.0" semver: "npm:^7.5.4" - checksum: 405c6ac037bf8c7ee7495980b0cd5544b2c53078c10534d0c9ceeb92a9ea7dcf8510f58ccfce31336458a8fa6ccef27b570bbb602abaa8c1650f5496a807477c + checksum: a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 languageName: node linkType: hard @@ -7301,15 +7417,29 @@ __metadata: linkType: hard "jackspeak@npm:^3.1.2": - version: 3.4.0 - resolution: "jackspeak@npm:3.4.0" + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" dependencies: "@isaacs/cliui": "npm:^8.0.2" "@pkgjs/parseargs": "npm:^0.11.0" dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 7e42d1ea411b4d57d43ea8a6afbca9224382804359cb72626d0fc45bb8db1de5ad0248283c3db45fe73e77210750d4fcc7c2b4fe5d24fda94aaa24d658295c5f + checksum: 6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jake@npm:^10.8.5": + version: 10.9.2 + resolution: "jake@npm:10.9.2" + dependencies: + async: "npm:^3.2.3" + chalk: "npm:^4.0.2" + filelist: "npm:^1.0.4" + minimatch: "npm:^3.1.2" + bin: + jake: bin/cli.js + checksum: c4597b5ed9b6a908252feab296485a4f87cba9e26d6c20e0ca144fb69e0c40203d34a2efddb33b3d297b8bd59605e6c1f44f6221ca1e10e69175ecbf3ff5fe31 languageName: node linkType: hard @@ -8332,9 +8462,9 @@ __metadata: linkType: hard "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.2.2 - resolution: "lru-cache@npm:10.2.2" - checksum: 402d31094335851220d0b00985084288136136992979d0e015f0f1697e15d1c86052d7d53ae86b614e5b058425606efffc6969a31a091085d7a2b80a8a1e26d6 + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb languageName: node linkType: hard @@ -8582,12 +8712,21 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + "minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414 + checksum: de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed languageName: node linkType: hard @@ -8869,8 +9008,8 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" @@ -8878,13 +9017,13 @@ __metadata: graceful-fs: "npm:^4.2.6" make-fetch-happen: "npm:^13.0.0" nopt: "npm:^7.0.0" - proc-log: "npm:^3.0.0" + proc-log: "npm:^4.1.0" semver: "npm:^7.3.5" - tar: "npm:^6.1.2" + tar: "npm:^6.2.1" which: "npm:^4.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 9cc821111ca244a01fb7f054db7523ab0a0cd837f665267eb962eb87695d71fb1e681f9e21464cc2fd7c05530dc4c81b810bca1a88f7d7186909b74477491a3c + checksum: 00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b languageName: node linkType: hard @@ -8895,10 +9034,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 199fc93773ae70ec9969bc6d5ac5b2bbd6eb986ed1907d751f411fef3ede0e4bfdb45ceb43711f8078bea237b6036db8b1bf208f6ff2b70c7d615afd157f3ab9 +"node-releases@npm:^2.0.18": + version: 2.0.18 + resolution: "node-releases@npm:2.0.18" + checksum: 786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 languageName: node linkType: hard @@ -8940,9 +9079,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.2": - version: 2.2.10 - resolution: "nwsapi@npm:2.2.10" - checksum: 43dfa150387bd2a578e37556d0ae3330d5617f99e5a7b64e3400d4c2785620762aa6169caf8f5fbce17b7ef29c372060b602594320c374fba0a39da4163d77ed + version: 2.2.12 + resolution: "nwsapi@npm:2.2.12" + checksum: 95e9623d63df111405503df8c5d800e26f71675d319e2c9c70cddfa31e5ace1d3f8b6d98d354544fc156a1506d920ec291e303fab761e4f99296868e199a466e languageName: node linkType: hard @@ -9050,17 +9189,6 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.4": - version: 1.1.4 - resolution: "object.hasown@npm:1.1.4" - dependencies: - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-object-atoms: "npm:^1.0.0" - checksum: f23187b08d874ef1aea060118c8259eb7f99f93c15a50771d710569534119062b90e087b92952b2d0fb1bb8914d61fb0b43c57fb06f622aaad538fe6868ab987 - languageName: node - linkType: hard - "object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0": version: 1.2.0 resolution: "object.values@npm:1.2.0" @@ -9360,11 +9488,11 @@ __metadata: linkType: hard "prettier@npm:^3.0.2": - version: 3.3.2 - resolution: "prettier@npm:3.3.2" + version: 3.3.3 + resolution: "prettier@npm:3.3.3" bin: prettier: bin/prettier.cjs - checksum: 39ed27d17f0238da6dd6571d63026566bd790d3d0edac57c285fbab525982060c8f1e01955fe38134ab10f0951a6076da37f015db8173c02f14bc7f0803a384c + checksum: b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26 languageName: node linkType: hard @@ -9402,14 +9530,7 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc - languageName: node - linkType: hard - -"proc-log@npm:^4.2.0": +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": version: 4.2.0 resolution: "proc-log@npm:4.2.0" checksum: 17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 @@ -9490,11 +9611,11 @@ __metadata: linkType: hard "qs@npm:^6.7.0": - version: 6.12.1 - resolution: "qs@npm:6.12.1" + version: 6.13.0 + resolution: "qs@npm:6.13.0" dependencies: side-channel: "npm:^1.0.6" - checksum: 439e6d7c6583e7c69f2cab2c39c55b97db7ce576e4c7c469082b938b7fc8746e8d547baacb69b4cd2b6666484776c3f4840ad7163a4c5326300b0afa0acdd84b + checksum: 62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 languageName: node linkType: hard @@ -9948,11 +10069,11 @@ __metadata: linkType: hard "semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.6.2 - resolution: "semver@npm:7.6.2" + version: 7.6.3 + resolution: "semver@npm:7.6.3" bin: semver: bin/semver.js - checksum: 97d3441e97ace8be4b1976433d1c32658f6afaff09f143e52c593bae7eef33de19e3e369c88bd985ce1042c6f441c80c6803078d1de2a9988080b66684cbb30c + checksum: 88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf languageName: node linkType: hard @@ -10107,17 +10228,17 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.3 - resolution: "socks-proxy-agent@npm:8.0.3" + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" dependencies: agent-base: "npm:^7.1.1" debug: "npm:^4.3.4" - socks: "npm:^2.7.1" - checksum: 4950529affd8ccd6951575e21c1b7be8531b24d924aa4df3ee32df506af34b618c4e50d261f4cc603f1bfd8d426915b7d629966c8ce45b05fb5ad8c8b9a6459d + socks: "npm:^2.8.3" + checksum: 345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a languageName: node linkType: hard -"socks@npm:^2.7.1": +"socks@npm:^2.8.3": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -10320,6 +10441,16 @@ __metadata: languageName: node linkType: hard +"string.prototype.repeat@npm:^1.0.0": + version: 1.0.0 + resolution: "string.prototype.repeat@npm:1.0.0" + dependencies: + define-properties: "npm:^1.1.3" + es-abstract: "npm:^1.17.5" + checksum: 94c7978566cffa1327d470fd924366438af9b04b497c43a9805e476e2e908aa37a1fd34cc0911156c17556dab62159d12c7b92b3cc304c3e1281fe4c8e668f40 + languageName: node + linkType: hard + "string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" @@ -10493,13 +10624,13 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.8.6": - version: 0.8.8 - resolution: "synckit@npm:0.8.8" +"synckit@npm:^0.9.1": + version: 0.9.1 + resolution: "synckit@npm:0.9.1" dependencies: "@pkgr/core": "npm:^0.1.0" tslib: "npm:^2.6.2" - checksum: c3d3aa8e284f3f84f2f868b960c9f49239b364e35f6d20825a448449a3e9c8f49fe36cdd5196b30615682f007830d46f2ea354003954c7336723cb821e4b6519 + checksum: d8b89e1bf30ba3ffb469d8418c836ad9c0c062bf47028406b4d06548bc66af97155ea2303b96c93bf5c7c0f0d66153a6fbd6924c76521b434e6a9898982abc2e languageName: node linkType: hard @@ -10510,7 +10641,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar@npm:^6.1.11, tar@npm:^6.2.1": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -10635,10 +10766,11 @@ __metadata: linkType: hard "ts-jest@npm:^29.0.5, ts-jest@npm:^29.1.4": - version: 29.1.5 - resolution: "ts-jest@npm:29.1.5" + version: 29.2.4 + resolution: "ts-jest@npm:29.2.4" dependencies: bs-logger: "npm:0.x" + ejs: "npm:^3.1.10" fast-json-stable-stringify: "npm:2.x" jest-util: "npm:^29.0.0" json5: "npm:^2.2.3" @@ -10666,7 +10798,7 @@ __metadata: optional: true bin: ts-jest: cli.js - checksum: 5c1baf4d23342e138745d6283ae530b07957b779b103abc99fd6713e1fd7fc65d4a4638695d5a76e177f78c46c80ec53598b365f245997db5d3d00617940bf87 + checksum: 43be1d5625d44bc48815d91810e796d74682757b4f64677b54aae1f4da855476e50c01b92d54add4b02976ecf2cbb2f318d7c7788844328de44f145b95185fac languageName: node linkType: hard @@ -10742,10 +10874,10 @@ __metadata: linkType: hard "tsx@npm:^4.15.4": - version: 4.15.7 - resolution: "tsx@npm:4.15.7" + version: 4.16.5 + resolution: "tsx@npm:4.16.5" dependencies: - esbuild: "npm:~0.21.4" + esbuild: "npm:~0.21.5" fsevents: "npm:~2.3.3" get-tsconfig: "npm:^4.7.5" dependenciesMeta: @@ -10753,7 +10885,7 @@ __metadata: optional: true bin: tsx: dist/cli.mjs - checksum: e960f4ee084b48cd3183e65946725fd9b0de4afae32a0fd9cd47416a41259fb2c72838b7aeba26adaecc2d89d70e976add9722e72ea5c876b3b493f137cbbf12 + checksum: e344852eee3ad8727cdf00fbdcbe7a28b8a0951f645b422098ca145cfaa61179c2b3691f11b7bc1b241e0781908f2842d9f6ff0f606f364ef7297cf0871c1a6e languageName: node linkType: hard @@ -10898,12 +11030,12 @@ __metadata: linkType: hard "typescript@npm:^5.4.0": - version: 5.5.2 - resolution: "typescript@npm:5.5.2" + version: 5.5.4 + resolution: "typescript@npm:5.5.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 8ca39b27b5f9bd7f32db795045933ab5247897660627251e8254180b792a395bf061ea7231947d5d7ffa5cb4cc771970fd4ef543275f9b559f08c9325cccfce3 + checksum: 422be60f89e661eab29ac488c974b6cc0a660fb2228003b297c3d10c32c90f3bcffc1009b43876a082515a3c376b1eefcce823d6e78982e6878408b9a923199c languageName: node linkType: hard @@ -10918,21 +11050,21 @@ __metadata: linkType: hard "typescript@patch:typescript@npm%3A^5.4.0#optional!builtin": - version: 5.5.2 - resolution: "typescript@patch:typescript@npm%3A5.5.2#optional!builtin::version=5.5.2&hash=29ae49" + version: 5.5.4 + resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=29ae49" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 6721ac8933a70c252d7b640b345792e103d881811ff660355617c1836526dbb71c2044e2e77a8823fb3570b469f33276875a4cab6d3c4de4ae7d7ee1c3074ae4 + checksum: 10dd9881baba22763de859e8050d6cb6e2db854197495c6f1929b08d1eb2b2b00d0b5d9b0bcee8472f1c3f4a7ef6a5d7ebe0cfd703f853aa5ae465b8404bc1ba languageName: node linkType: hard "uglify-js@npm:^3.1.4": - version: 3.18.0 - resolution: "uglify-js@npm:3.18.0" + version: 3.19.1 + resolution: "uglify-js@npm:3.19.1" bin: uglifyjs: bin/uglifyjs - checksum: 57f5f6213a2c4e8c551be9c875c085d565dc88af6b7caaab40a197aa639183cdce7c9dc2f858675eca72a5323f850ab7e88b9cc0a52dfbe3e0768aee6ab6e102 + checksum: 7609ab3f10d54de5ef014770f845c747266a969e9092d2284ca0ba18f10a4488208c1491bd8b52bd4c40cf6687b47a77c495f08e4a625babcdd57f58e34a3976 languageName: node linkType: hard @@ -10948,10 +11080,10 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 +"undici-types@npm:~6.13.0": + version: 6.13.0 + resolution: "undici-types@npm:6.13.0" + checksum: 2de55181f569c77a4f08063f8bf2722fcbb6ea312a26a9e927bd1f5ea5cf3a281c5ddf23155061db083e0a25838f54813543ff13b0ac34d230d5c1205ead66c1 languageName: node linkType: hard @@ -10994,9 +11126,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.16": - version: 1.0.16 - resolution: "update-browserslist-db@npm:1.0.16" +"update-browserslist-db@npm:^1.1.0": + version: 1.1.0 + resolution: "update-browserslist-db@npm:1.1.0" dependencies: escalade: "npm:^3.1.2" picocolors: "npm:^1.0.1" @@ -11004,7 +11136,7 @@ __metadata: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 5995399fc202adbb51567e4810e146cdf7af630a92cc969365a099150cb00597e425cc14987ca7080b09a4d0cfd2a3de53fbe72eebff171aed7f9bb81f9bf405 + checksum: a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 languageName: node linkType: hard @@ -11219,11 +11351,11 @@ __metadata: linkType: hard "which-builtin-type@npm:^1.1.3": - version: 1.1.3 - resolution: "which-builtin-type@npm:1.1.3" + version: 1.1.4 + resolution: "which-builtin-type@npm:1.1.4" dependencies: - function.prototype.name: "npm:^1.1.5" - has-tostringtag: "npm:^1.0.0" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" is-async-function: "npm:^2.0.0" is-date-object: "npm:^1.0.5" is-finalizationregistry: "npm:^1.0.2" @@ -11232,13 +11364,13 @@ __metadata: is-weakref: "npm:^1.0.2" isarray: "npm:^2.0.5" which-boxed-primitive: "npm:^1.0.2" - which-collection: "npm:^1.0.1" - which-typed-array: "npm:^1.1.9" - checksum: 2b7b234df3443b52f4fbd2b65b731804de8d30bcc4210ec84107ef377a81923cea7f2763b7fb78b394175cea59118bf3c41b9ffd2d643cb1d748ef93b33b6bd4 + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.15" + checksum: a4a76d20d869a81b1dbb4adea31edc7e6c1a4466d3ab7c2cd757c9219d48d3723b04076c85583257b0f0f8e3ebe5af337248b8ceed57b9051cb97bce5bd881d1 languageName: node linkType: hard -"which-collection@npm:^1.0.1": +"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": version: 1.0.2 resolution: "which-collection@npm:1.0.2" dependencies: @@ -11257,7 +11389,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" dependencies: @@ -11406,9 +11538,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.11.0, ws@npm:^8.15.1, ws@npm:^8.8.1": - version: 8.17.1 - resolution: "ws@npm:8.17.1" +"ws@npm:^8.11.0, ws@npm:^8.16.0, ws@npm:^8.8.1": + version: 8.18.0 + resolution: "ws@npm:8.18.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -11417,7 +11549,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: f4a49064afae4500be772abdc2211c8518f39e1c959640457dcee15d4488628620625c783902a52af2dd02f68558da2868fd06e6fd0e67ebcd09e6881b1b5bfe + checksum: 25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 languageName: node linkType: hard