From 905315a0d95cb87137d5039182dd0940157c9624 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 6 Apr 2024 12:39:39 +0800 Subject: [PATCH 01/51] added types for exports --- packages/networks/boilerplate/package.json | 3 ++- packages/networks/evm-chains/package.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/networks/boilerplate/package.json b/packages/networks/boilerplate/package.json index 7a27d29..f395054 100644 --- a/packages/networks/boilerplate/package.json +++ b/packages/networks/boilerplate/package.json @@ -11,7 +11,8 @@ "exports": { ".": { "import": "./dist/index.es.js", - "require": "./dist/index.cjs" + "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" } }, "files": [ diff --git a/packages/networks/evm-chains/package.json b/packages/networks/evm-chains/package.json index fd6be2e..e73a2f4 100644 --- a/packages/networks/evm-chains/package.json +++ b/packages/networks/evm-chains/package.json @@ -11,7 +11,8 @@ "exports": { ".": { "import": "./dist/index.es.js", - "require": "./dist/index.cjs" + "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" } }, "files": [ From 198c5e9e79063f27d1a64956b4aa2a8abc9eccb2 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Mon, 8 Apr 2024 12:30:36 +0800 Subject: [PATCH 02/51] because more faster --- packages/networks/evm-chains/src/services/Networks.ts | 4 ++-- .../networks/evm-chains/src/services/TransactionListener.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/networks/evm-chains/src/services/Networks.ts b/packages/networks/evm-chains/src/services/Networks.ts index cfc7b00..ee24153 100644 --- a/packages/networks/evm-chains/src/services/Networks.ts +++ b/packages/networks/evm-chains/src/services/Networks.ts @@ -3,7 +3,7 @@ import type { EvmNetworkConfigInterface } from './Provider.ts' const networks: Record = {} -Object.keys(wagmiChains).forEach((key) => { +for (const key of Object.keys(wagmiChains)) { const wagmiChain: wagmiChains.Chain = wagmiChains[key as keyof typeof wagmiChains] let backupRpcUrl = '' @@ -40,7 +40,7 @@ Object.keys(wagmiChains).forEach((key) => { } networks[key === 'mainnet' ? 'ethereum' : key] = network -}) +} const findById = (id: number): EvmNetworkConfigInterface | undefined => { return Object.values(networks).find((network) => network.id === id) diff --git a/packages/networks/evm-chains/src/services/TransactionListener.ts b/packages/networks/evm-chains/src/services/TransactionListener.ts index b513638..07c24c7 100644 --- a/packages/networks/evm-chains/src/services/TransactionListener.ts +++ b/packages/networks/evm-chains/src/services/TransactionListener.ts @@ -150,9 +150,9 @@ export class TransactionListener trigger(transaction: DynamicTransactionType): void { if (!this.triggeredTransactions.includes(transaction.id)) { this.triggeredTransactions.push(transaction.id) - this.callbacks.forEach((callback) => { + for (const callback of this.callbacks) { callback(transaction) - }) + } } } From dbcd62ddcaf82bc285ee5dc0e64c435c7f9d90b0 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Mon, 8 Apr 2024 12:56:22 +0800 Subject: [PATCH 03/51] added helper method --- .../evm-chains/src/services/Ethers.ts | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/packages/networks/evm-chains/src/services/Ethers.ts b/packages/networks/evm-chains/src/services/Ethers.ts index aa3b97c..07440ca 100644 --- a/packages/networks/evm-chains/src/services/Ethers.ts +++ b/packages/networks/evm-chains/src/services/Ethers.ts @@ -184,6 +184,47 @@ export class Ethers { return await this.jsonRpcProvider.getTransactionReceipt(id) } + /** + * @param {string} address + * @param {number} limit how many block to go back + * @returns {Promise} + */ + async getLastTransactions(address: string, limit: number = 0): Promise { + const txPromises = [] + const blockPromises = [] + const transactions: TransactionResponse[] = [] + + const block = await this.getBlock('pending') + const blockNumber = block?.number ?? (await this.getBlockNumber()) + + for (let i = blockNumber; i > blockNumber - limit; i--) { + const block = await this.getBlock(i, true) + if (block === null) { + continue + } + blockPromises.push(block) + } + + const blocks = await Promise.all(blockPromises) + for (const block of blocks) { + for (const txHash of block.transactions) { + txPromises.push(this.getTransaction(txHash)) + } + } + + const txs = await Promise.all(txPromises) + for (const tx of txs) { + if ( + tx?.from.toLowerCase() === address.toLowerCase() || + tx?.to?.toLowerCase() === address.toLowerCase() + ) { + transactions.push(tx) + } + } + + return transactions + } + /** * @param {String} address * @returns {Promise} From 5c615337701e76e07095bd6707338e660f35a19b Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Tue, 9 Apr 2024 10:11:15 +0800 Subject: [PATCH 04/51] optimized for minimum rpc request --- .../evm-chains/src/services/Ethers.ts | 30 +++++++++++ .../src/services/TransactionListener.ts | 51 +++++++++++++------ 2 files changed, 65 insertions(+), 16 deletions(-) diff --git a/packages/networks/evm-chains/src/services/Ethers.ts b/packages/networks/evm-chains/src/services/Ethers.ts index 07440ca..7012397 100644 --- a/packages/networks/evm-chains/src/services/Ethers.ts +++ b/packages/networks/evm-chains/src/services/Ethers.ts @@ -225,6 +225,36 @@ export class Ethers { return transactions } + /** + * @param {String} address + * @param {number} limit + * @returns {Promise} + */ + async getLastTransaction( + address: string, + limit: number = 0 + ): Promise { + const block = await this.getBlock('pending') + const blockNumber = block?.number ?? (await this.getBlockNumber()) + for (let i = blockNumber; i > blockNumber - limit; i--) { + const block = await this.getBlock(i, true) + if (block === null) { + continue + } + for (const txId of block.transactions) { + const tx = await this.getTransaction(txId) + if ( + tx?.from.toLowerCase() === address.toLowerCase() || + tx?.to?.toLowerCase() === address.toLowerCase() + ) { + return tx + } + } + } + + return null + } + /** * @param {String} address * @returns {Promise} diff --git a/packages/networks/evm-chains/src/services/TransactionListener.ts b/packages/networks/evm-chains/src/services/TransactionListener.ts index 07c24c7..f8ae4cb 100644 --- a/packages/networks/evm-chains/src/services/TransactionListener.ts +++ b/packages/networks/evm-chains/src/services/TransactionListener.ts @@ -195,21 +195,9 @@ export class TransactionListener } } - const callback = async (transactionIdOrLog: string | Log): Promise => { - let transaction: TransactionResponse | null - if (typeof transactionIdOrLog === 'string') { - transaction = await this.ethers.getTransaction(transactionIdOrLog) - const contractBytecode = await this.ethers.getByteCode(transaction?.to ?? '') - - if (contractBytecode === '0x') { - return - } - } else { - transaction = await this.ethers.getTransaction(transactionIdOrLog.transactionHash) - } - + const checkSigner = (transaction: TransactionResponse | null): boolean => { if (transaction === null) { - return + return false } interface ParamsType { @@ -225,9 +213,35 @@ export class TransactionListener } if (!objectsEqual(expectedParams, receivedParams)) { + return false + } + + return true + } + + const callback = async (transactionIdOrLog: string | Log): Promise => { + let transaction: TransactionResponse | null + if (typeof transactionIdOrLog === 'string') { + transaction = await this.ethers.getTransaction(transactionIdOrLog) + + if (!checkSigner(transaction)) { + return + } + + const contractBytecode = await this.ethers.getByteCode(transaction?.to ?? '') + + if (contractBytecode === '0x') { + return + } + } else { + transaction = await this.ethers.getTransaction(transactionIdOrLog.transactionHash) + } + + if (!checkSigner(transaction)) { return } + // @ts-expect-error already checking ing checkSigner this.trigger(new ContractTransaction(transaction.hash)) } @@ -256,9 +270,8 @@ export class TransactionListener const callback = async (transactionId: string): Promise => { const tx = await this.ethers.getTransaction(transactionId) - const contractBytecode = await this.ethers.getByteCode(tx?.to ?? '') - if (contractBytecode !== '0x' || tx === null) { + if (tx === null) { return } @@ -286,6 +299,12 @@ export class TransactionListener return } + const contractBytecode = await this.ethers.getByteCode(tx?.to ?? '') + + if (contractBytecode !== '0x') { + return + } + const transaction = new CoinTransaction(transactionId) if (filter.amount !== undefined) { From a254a31ca3736c3c88d893c618caebce9f3cb693 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 13 Apr 2024 13:23:39 +0800 Subject: [PATCH 05/51] added simple math object --- packages/utils/src/index.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 8da26e5..94039d3 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -163,4 +163,37 @@ export const checkWebSocket = async (url: string): Promise => { }) } +export const math = { + div: (a: number, b: number, decimals: number = 18): number => { + return (a * 10 ** decimals - b * 10 ** decimals) / 10 ** decimals + }, + add: (a: number, b: number, decimals: number = 18): number => { + return (a * 10 ** decimals + b * 10 ** decimals) / 10 ** decimals + }, + mul: (a: number, b: number, decimals: number = 18): number => { + return (a * 10 ** decimals * (b * 10 ** decimals)) / 10 ** (decimals * 2) + }, + sub: (a: number, b: number, decimals: number = 18): number => { + return (a * 10 ** decimals - b * 10 ** decimals) / 10 ** decimals + }, + pow: (a: number, b: number, decimals: number = 18): number => { + return (a * 10 ** decimals) ** b / 10 ** (decimals * b) + }, + sqrt: (a: number, decimals: number = 18): number => { + return Math.sqrt(a * 10 ** decimals) / 10 ** (decimals / 2) + }, + abs: (a: number, decimals: number = 18): number => { + return Math.abs(a * 10 ** decimals) / 10 ** decimals + }, + ceil: (a: number, decimals: number = 18): number => { + return Math.ceil(a * 10 ** decimals) / 10 ** decimals + }, + floor: (a: number, decimals: number = 18): number => { + return Math.floor(a * 10 ** decimals) / 10 ** decimals + }, + round: (a: number, decimals: number = 18): number => { + return Math.round(a * 10 ** decimals) / 10 ** decimals + } +} + export { toHex } From e6bed1a372113c49e19f7b9bc5b622699a64c2cb Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Wed, 17 Apr 2024 14:07:38 +0800 Subject: [PATCH 06/51] fixed wrong math character --- packages/utils/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 94039d3..75c52ee 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -165,7 +165,7 @@ export const checkWebSocket = async (url: string): Promise => { export const math = { div: (a: number, b: number, decimals: number = 18): number => { - return (a * 10 ** decimals - b * 10 ** decimals) / 10 ** decimals + return (((a * 10 ** decimals) / b) * 10 ** decimals) / 10 ** decimals }, add: (a: number, b: number, decimals: number = 18): number => { return (a * 10 ** decimals + b * 10 ** decimals) / 10 ** decimals From 56d9daaa7b284e1e2fad8d7239975ce39ce2df8b Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Thu, 18 Apr 2024 16:25:07 +0800 Subject: [PATCH 07/51] math methods completed --- packages/utils/package.json | 2 +- packages/utils/src/index.ts | 26 ++++++++--------- packages/utils/tests/index.spec.ts | 45 +++++++++++++++++++++++++++++- 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/packages/utils/package.json b/packages/utils/package.json index 54b9a49..fbe4203 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/utils", - "version": "0.1.16", + "version": "0.1.17", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 75c52ee..23a989f 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -164,35 +164,35 @@ export const checkWebSocket = async (url: string): Promise => { } export const math = { - div: (a: number, b: number, decimals: number = 18): number => { - return (((a * 10 ** decimals) / b) * 10 ** decimals) / 10 ** decimals - }, add: (a: number, b: number, decimals: number = 18): number => { - return (a * 10 ** decimals + b * 10 ** decimals) / 10 ** decimals + return parseFloat(new BigNumber(a).plus(new BigNumber(b)).toFixed(decimals)) + }, + sub: (a: number, b: number, decimals: number = 18): number => { + return parseFloat(new BigNumber(a).minus(new BigNumber(b)).toFixed(decimals)) }, mul: (a: number, b: number, decimals: number = 18): number => { - return (a * 10 ** decimals * (b * 10 ** decimals)) / 10 ** (decimals * 2) + return parseFloat(new BigNumber(a).times(new BigNumber(b)).toFixed(decimals)) }, - sub: (a: number, b: number, decimals: number = 18): number => { - return (a * 10 ** decimals - b * 10 ** decimals) / 10 ** decimals + div: (a: number, b: number, decimals: number = 18): number => { + return parseFloat(new BigNumber(a).div(new BigNumber(b)).toFixed(decimals)) }, pow: (a: number, b: number, decimals: number = 18): number => { - return (a * 10 ** decimals) ** b / 10 ** (decimals * b) + return parseFloat(new BigNumber(a).pow(b).toFixed(decimals)) }, sqrt: (a: number, decimals: number = 18): number => { - return Math.sqrt(a * 10 ** decimals) / 10 ** (decimals / 2) + return parseFloat(new BigNumber(a).sqrt().toFixed(decimals)) }, abs: (a: number, decimals: number = 18): number => { - return Math.abs(a * 10 ** decimals) / 10 ** decimals + return parseFloat(new BigNumber(a).absoluteValue().toFixed(decimals)) }, ceil: (a: number, decimals: number = 18): number => { - return Math.ceil(a * 10 ** decimals) / 10 ** decimals + return parseFloat(new BigNumber(a).integerValue(BigNumber.ROUND_CEIL).toFixed(decimals)) }, floor: (a: number, decimals: number = 18): number => { - return Math.floor(a * 10 ** decimals) / 10 ** decimals + return parseFloat(new BigNumber(a).integerValue(BigNumber.ROUND_FLOOR).toFixed(decimals)) }, round: (a: number, decimals: number = 18): number => { - return Math.round(a * 10 ** decimals) / 10 ** decimals + return parseFloat(new BigNumber(a).integerValue(BigNumber.ROUND_HALF_UP).toFixed(decimals)) } } diff --git a/packages/utils/tests/index.spec.ts b/packages/utils/tests/index.spec.ts index 6a03759..094b5bc 100644 --- a/packages/utils/tests/index.spec.ts +++ b/packages/utils/tests/index.spec.ts @@ -6,7 +6,8 @@ import { base58Encode, base58Decode, bufferToString, - stringToBuffer + stringToBuffer, + math } from '../src/index.js' describe('Helper methods', () => { @@ -44,3 +45,45 @@ describe('Helper methods', () => { ) }) }) + +describe('Math', () => { + it('add', () => { + expect(math.add(0.2, 0.1)).toBe(0.3) + }) + + it('subtract', () => { + expect(math.sub(0.3, 0.1)).toBe(0.2) + }) + + it('multiply', () => { + expect(math.mul(10, 20)).toBe(200) + }) + + it('divide', () => { + expect(math.div(10, 20)).toBe(0.5) + }) + + it('pow', () => { + expect(math.pow(2, 3)).toBe(8) + }) + + it('sqrt', () => { + expect(math.sqrt(9)).toBe(3) + }) + + it('abs', () => { + expect(math.abs(-10)).toBe(10) + }) + + it('ceil', () => { + expect(math.ceil(0.1)).toBe(1) + }) + + it('floor', () => { + expect(math.floor(0.9)).toBe(0) + }) + + it('round', () => { + expect(math.round(0.5)).toBe(1) + }) +}) From 3994defad67f1d42f0d328c2849f3f5f6604e53e Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Thu, 18 Apr 2024 16:41:20 +0800 Subject: [PATCH 08/51] provider argument moved to last --- .../networks/evm-chains/src/services/TransactionListener.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/networks/evm-chains/src/services/TransactionListener.ts b/packages/networks/evm-chains/src/services/TransactionListener.ts index f8ae4cb..822b275 100644 --- a/packages/networks/evm-chains/src/services/TransactionListener.ts +++ b/packages/networks/evm-chains/src/services/TransactionListener.ts @@ -79,10 +79,10 @@ export class TransactionListener /** * @param {T} type - Transaction type - * @param {Provider} provider - Provider * @param {DynamicTransactionListenerFilterType} filter - Transaction listener filter + * @param {Provider} provider - Provider */ - constructor(type: T, provider?: Provider, filter?: DynamicTransactionListenerFilterType) { + constructor(type: T, filter?: DynamicTransactionListenerFilterType, provider?: Provider) { this.type = type this.filter = filter ?? {} this.provider = provider ?? Provider.instance From e4d3fd6e9585e43161efc2fa52259f9adad01990 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Thu, 18 Apr 2024 17:42:03 +0800 Subject: [PATCH 09/51] added wallet connection types --- packages/types/package.json | 2 +- packages/types/src/browser/adapter.ts | 18 +++++++ packages/types/src/browser/wallet.ts | 73 +++++++++++++++++++++++++++ packages/types/src/enums.ts | 7 +++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 packages/types/src/browser/adapter.ts create mode 100644 packages/types/src/browser/wallet.ts diff --git a/packages/types/package.json b/packages/types/package.json index 6b3bf65..ca472b5 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.35", + "version": "0.1.36", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser/adapter.ts b/packages/types/src/browser/adapter.ts new file mode 100644 index 0000000..fae2a5b --- /dev/null +++ b/packages/types/src/browser/adapter.ts @@ -0,0 +1,18 @@ +import type { WalletPlatformEnum } from '../enums.ts' +import type { ProviderInterface } from '../services/ProviderInterface.ts' + +export type RegisterWalletAdapter = (walletAdapter: WalletAdapter) => void + +export type WalletAdapterList = Record + +export interface WalletAdapter { + id: string + name: string + icon: string + downloadLink: string + platforms: WalletPlatformEnum[] + isDetected: () => boolean + isConnected: () => boolean + createDeepLink: (url: string, ops?: object) => string + connect: (provider?: ProviderInterface, ops?: object) => Promise +} diff --git a/packages/types/src/browser/wallet.ts b/packages/types/src/browser/wallet.ts new file mode 100644 index 0000000..1e8ffe8 --- /dev/null +++ b/packages/types/src/browser/wallet.ts @@ -0,0 +1,73 @@ +import type { WalletAdapter } from './adapter.ts' +import type { WalletPlatformEnum } from '../enums.ts' +import type { TransactionSignerInterface } from '../services/TransactionSignerInterface.ts' + +export interface Wallet { + adapter: WalletAdapter + + /** + * @returns {String} + */ + getId: () => string + + /** + * @returns {String} + */ + getName: () => string + + /** + * @returns {WalletPlatformEnum[]} + */ + getPlatforms: () => WalletPlatformEnum[] + + /** + * @returns {String} + */ + getDownloadLink: () => string + + /** + * @param {String} url + * @param {Object} ops + * @returns {String} + */ + createDeepLink: (url: string, ops?: object) => string + + /** + * @returns {Promise} + */ + connect: () => Promise + + /** + * @returns {Boolean} + */ + isDetected: () => boolean + + /** + * @returns {Boolean} + */ + isConnected: () => boolean + + /** + * @returns {Promise} + */ + getAddress: () => Promise + + /** + * @param {string} message + * @returns {Promise} + */ + signMessage: (message: string) => Promise + + /** + * @param {TransactionSignerInterface} transactionSigner + * @returns {Promise} + */ + sendTransaction: (transactionSigner: TransactionSignerInterface) => Promise + + /** + * @param {string} eventName + * @param {Function} callback + * @returns {Promise} + */ + on: (eventName: string, callback: (...args: any[]) => void) => Promise +} diff --git a/packages/types/src/enums.ts b/packages/types/src/enums.ts index 7f01da7..137ae6a 100644 --- a/packages/types/src/enums.ts +++ b/packages/types/src/enums.ts @@ -52,3 +52,10 @@ export enum ErrorTypeEnum { TRANSACTION_CREATION_FAILED = 'TRANSACTION_CREATION_FAILED', CLOSED_WALLETCONNECT_MODAL = 'CLOSED_WALLETCONNECT_MODAL' } + +export enum WalletPlatformEnum { + BROWSER = 'BROWSER', + MOBILE = 'MOBILE', + DESKTOP = 'DESKTOP', + ALL = 'ALL' +} From 0e5270d29d206952c351ca1f5f7b43934bb57145 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 16:03:22 +0800 Subject: [PATCH 10/51] provider arguments updated --- packages/networks/evm-chains/tests/services.spec.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/networks/evm-chains/tests/services.spec.ts b/packages/networks/evm-chains/tests/services.spec.ts index ec39494..46cd147 100644 --- a/packages/networks/evm-chains/tests/services.spec.ts +++ b/packages/networks/evm-chains/tests/services.spec.ts @@ -59,7 +59,7 @@ describe('Transaction Listener', () => { } it('General', async () => { - const listener = new TransactionListener(TransactionTypeEnum.GENERAL, provider, { + const listener = new TransactionListener(TransactionTypeEnum.GENERAL, { signer: senderTestAddress }) @@ -80,7 +80,7 @@ describe('Transaction Listener', () => { it('Contract', async () => { await waitSecondsBeforeThanNewTx(10) - const listener = new TransactionListener(TransactionTypeEnum.CONTRACT, provider, { + const listener = new TransactionListener(TransactionTypeEnum.CONTRACT, { signer: senderTestAddress, address: tokenTestAddress }) @@ -106,7 +106,7 @@ describe('Transaction Listener', () => { it('Coin', async () => { await waitSecondsBeforeThanNewTx(10) - const listener = new TransactionListener(TransactionTypeEnum.COIN, provider, { + const listener = new TransactionListener(TransactionTypeEnum.COIN, { signer: senderTestAddress, receiver: receiverTestAddress }) @@ -128,7 +128,7 @@ describe('Transaction Listener', () => { it('Token', async () => { await waitSecondsBeforeThanNewTx(10) - const listener = new TransactionListener(TransactionTypeEnum.TOKEN, provider, { + const listener = new TransactionListener(TransactionTypeEnum.TOKEN, { signer: senderTestAddress, receiver: receiverTestAddress, address: tokenTestAddress @@ -155,7 +155,7 @@ describe('Transaction Listener', () => { it('NFT', async () => { await waitSecondsBeforeThanNewTx(10) - const listener = new TransactionListener(TransactionTypeEnum.NFT, provider, { + const listener = new TransactionListener(TransactionTypeEnum.NFT, { signer: senderTestAddress, receiver: receiverTestAddress, address: nftTestAddress From 844b348c04993b6dbcd6789b2618d7f9d95db3d2 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 16:21:01 +0800 Subject: [PATCH 11/51] updated names --- packages/types/package.json | 2 +- packages/types/src/browser/adapter.ts | 6 +++--- packages/types/src/browser/wallet.ts | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index ca472b5..1b7889d 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.36", + "version": "0.1.37", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser/adapter.ts b/packages/types/src/browser/adapter.ts index fae2a5b..8580aa4 100644 --- a/packages/types/src/browser/adapter.ts +++ b/packages/types/src/browser/adapter.ts @@ -1,11 +1,11 @@ import type { WalletPlatformEnum } from '../enums.ts' import type { ProviderInterface } from '../services/ProviderInterface.ts' -export type RegisterWalletAdapter = (walletAdapter: WalletAdapter) => void +export type RegisterWalletAdapterType = (walletAdapter: WalletAdapterInterface) => void -export type WalletAdapterList = Record +export type WalletAdapterListType = Record -export interface WalletAdapter { +export interface WalletAdapterInterface { id: string name: string icon: string diff --git a/packages/types/src/browser/wallet.ts b/packages/types/src/browser/wallet.ts index 1e8ffe8..044e60e 100644 --- a/packages/types/src/browser/wallet.ts +++ b/packages/types/src/browser/wallet.ts @@ -1,9 +1,9 @@ -import type { WalletAdapter } from './adapter.ts' import type { WalletPlatformEnum } from '../enums.ts' +import type { WalletAdapterInterface } from './adapter.ts' import type { TransactionSignerInterface } from '../services/TransactionSignerInterface.ts' -export interface Wallet { - adapter: WalletAdapter +export interface WalletInterface { + adapter: WalletAdapterInterface /** * @returns {String} From 123158db9195266bc46665058063650763decc1e Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 16:25:12 +0800 Subject: [PATCH 12/51] types exported :) --- packages/types/package.json | 2 +- .../src/{browser/wallet.ts => browser.ts} | 22 ++++++++++++++++--- packages/types/src/browser/adapter.ts | 18 --------------- packages/types/src/index.ts | 1 + 4 files changed, 21 insertions(+), 22 deletions(-) rename packages/types/src/{browser/wallet.ts => browser.ts} (65%) delete mode 100644 packages/types/src/browser/adapter.ts diff --git a/packages/types/package.json b/packages/types/package.json index 1b7889d..87f8737 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.37", + "version": "0.1.38", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser/wallet.ts b/packages/types/src/browser.ts similarity index 65% rename from packages/types/src/browser/wallet.ts rename to packages/types/src/browser.ts index 044e60e..670dea2 100644 --- a/packages/types/src/browser/wallet.ts +++ b/packages/types/src/browser.ts @@ -1,6 +1,22 @@ -import type { WalletPlatformEnum } from '../enums.ts' -import type { WalletAdapterInterface } from './adapter.ts' -import type { TransactionSignerInterface } from '../services/TransactionSignerInterface.ts' +import type { WalletPlatformEnum } from './enums.ts' +import type { ProviderInterface } from './services/ProviderInterface.ts' +import type { TransactionSignerInterface } from './services/TransactionSignerInterface.ts' + +export type RegisterWalletAdapterType = (walletAdapter: WalletAdapterInterface) => void + +export type WalletAdapterListType = Record + +export interface WalletAdapterInterface { + id: string + name: string + icon: string + downloadLink: string + platforms: WalletPlatformEnum[] + isDetected: () => boolean + isConnected: () => boolean + createDeepLink: (url: string, ops?: object) => string + connect: (provider?: ProviderInterface, ops?: object) => Promise +} export interface WalletInterface { adapter: WalletAdapterInterface diff --git a/packages/types/src/browser/adapter.ts b/packages/types/src/browser/adapter.ts deleted file mode 100644 index 8580aa4..0000000 --- a/packages/types/src/browser/adapter.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { WalletPlatformEnum } from '../enums.ts' -import type { ProviderInterface } from '../services/ProviderInterface.ts' - -export type RegisterWalletAdapterType = (walletAdapter: WalletAdapterInterface) => void - -export type WalletAdapterListType = Record - -export interface WalletAdapterInterface { - id: string - name: string - icon: string - downloadLink: string - platforms: WalletPlatformEnum[] - isDetected: () => boolean - isConnected: () => boolean - createDeepLink: (url: string, ops?: object) => string - connect: (provider?: ProviderInterface, ops?: object) => Promise -} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 043bd85..4ff7e39 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -2,6 +2,7 @@ export * from './enums.ts' export type * from './enums.ts' export type * from './assets.ts' export type * from './models.ts' +export type * from './browser.ts' export type * from './services/ProviderInterface.ts' export type * from './services/TransactionListenerInterface.ts' export type * from './services/TransactionSignerInterface.ts' From 8a3aa7d14723f9f4d05567f781e7c335977be056 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 16:34:31 +0800 Subject: [PATCH 13/51] removed Promise --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 87f8737..673fa6a 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.38", + "version": "0.1.40", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index 670dea2..bf75894 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -83,7 +83,7 @@ export interface WalletInterface { /** * @param {string} eventName * @param {Function} callback - * @returns {Promise} + * @returns {void} */ - on: (eventName: string, callback: (...args: any[]) => void) => Promise + on: (eventName: string, callback: (...args: any[]) => void) => void } From e6878d529c0528ac57d88054c4d0577d1ea2ce7d Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 16:46:32 +0800 Subject: [PATCH 14/51] added getIcon --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/types/package.json b/packages/types/package.json index 673fa6a..88dc711 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.40", + "version": "0.1.41", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index bf75894..035f8ab 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -31,6 +31,11 @@ export interface WalletInterface { */ getName: () => string + /** + * @returns {String} + */ + getIcon: () => string + /** * @returns {WalletPlatformEnum[]} */ From f345c9b6348a497d203631241a0af6832285f68b Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 17:06:26 +0800 Subject: [PATCH 15/51] added optional types --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 88dc711..1878d57 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.41", + "version": "0.1.42", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index 035f8ab..1f3c077 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -12,8 +12,8 @@ export interface WalletAdapterInterface { icon: string downloadLink: string platforms: WalletPlatformEnum[] - isDetected: () => boolean - isConnected: () => boolean + isDetected: () => boolean | Promise + isConnected: () => boolean | Promise createDeepLink: (url: string, ops?: object) => string connect: (provider?: ProviderInterface, ops?: object) => Promise } From e1889201f8163e8c26391057a8ed4d7195ce0804 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 17:17:01 +0800 Subject: [PATCH 16/51] updated --- packages/networks/boilerplate/index.html | 15 +++ packages/networks/boilerplate/package.json | 4 +- packages/networks/boilerplate/pnpm-lock.yaml | 50 ++++++-- .../boilerplate/src/browser/Wallet.ts | 115 ++++++++++++++++++ .../src/browser/adapters/Example.ts | 29 +++++ .../boilerplate/src/browser/adapters/index.ts | 1 + .../networks/boilerplate/src/browser/index.ts | 9 ++ packages/networks/boilerplate/vite.svg | 1 + 8 files changed, 214 insertions(+), 10 deletions(-) create mode 100644 packages/networks/boilerplate/index.html create mode 100644 packages/networks/boilerplate/src/browser/Wallet.ts create mode 100644 packages/networks/boilerplate/src/browser/adapters/Example.ts create mode 100644 packages/networks/boilerplate/src/browser/adapters/index.ts create mode 100644 packages/networks/boilerplate/src/browser/index.ts create mode 100644 packages/networks/boilerplate/vite.svg diff --git a/packages/networks/boilerplate/index.html b/packages/networks/boilerplate/index.html new file mode 100644 index 0000000..f5e1242 --- /dev/null +++ b/packages/networks/boilerplate/index.html @@ -0,0 +1,15 @@ + + + + + + + Browser Tests + + +
+ + + \ No newline at end of file diff --git a/packages/networks/boilerplate/package.json b/packages/networks/boilerplate/package.json index f395054..092bdc5 100644 --- a/packages/networks/boilerplate/package.json +++ b/packages/networks/boilerplate/package.json @@ -48,7 +48,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.35", - "@multiplechain/utils": "^0.1.16" + "@multiplechain/types": "^0.1.42", + "@multiplechain/utils": "^0.1.17" } } \ No newline at end of file diff --git a/packages/networks/boilerplate/pnpm-lock.yaml b/packages/networks/boilerplate/pnpm-lock.yaml index a13694b..a773607 100644 --- a/packages/networks/boilerplate/pnpm-lock.yaml +++ b/packages/networks/boilerplate/pnpm-lock.yaml @@ -6,23 +6,28 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.30 - version: 0.1.30 + specifier: ^0.1.42 + version: 0.1.42 '@multiplechain/utils': - specifier: ^0.1.10 - version: 0.1.10 + specifier: ^0.1.17 + version: 0.1.17 packages: - /@multiplechain/types@0.1.30: - resolution: {integrity: sha512-j72Ydn1FlEWF4lY6xUjI0ojf0y1JAjqYnddAaUUdzv5sRlFw2zze8VLqxzltFtjFigPbSUa7QHmbgTIXQ60HoQ==} + /@multiplechain/types@0.1.42: + resolution: {integrity: sha512-CIx1fatpwCaGifqcHIN+ijLAzIA0AzPigYNMHXaJcBPuHuKKeMWw3oLOWbL4C6fW/J1rXYm9dVQYRp0dqFCvYg==} dev: false - /@multiplechain/utils@0.1.10: - resolution: {integrity: sha512-Ed0YxvRakds1WiREcLWI+fr6YCNB3bSORPD/ZQNqhELtL5uVgYWunIwbx6yZmLNk4MY8Qqyh0iUjuCOBLplmiA==} + /@multiplechain/utils@0.1.17: + resolution: {integrity: sha512-n9DhdgZ1DtawCZMcBPcnx0GcGq9P0HkvixZ0zd7MQNyj4nMdv5BKjLAX4whK+bewPKVWUVYemSY4o979CPrt2w==} dependencies: + '@types/ws': 8.5.10 bignumber.js: 9.1.2 web3-utils: 4.2.1 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate dev: false /@noble/curves@1.3.0: @@ -55,6 +60,18 @@ packages: '@scure/base': 1.1.6 dev: false + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + dependencies: + '@types/node': 20.12.7 + dev: false + /available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -216,6 +233,10 @@ packages: has-property-descriptors: 1.0.2 dev: false + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false + /util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} dependencies: @@ -271,6 +292,19 @@ packages: has-tostringtag: 1.0.2 dev: false + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false diff --git a/packages/networks/boilerplate/src/browser/Wallet.ts b/packages/networks/boilerplate/src/browser/Wallet.ts new file mode 100644 index 0000000..bda683c --- /dev/null +++ b/packages/networks/boilerplate/src/browser/Wallet.ts @@ -0,0 +1,115 @@ +import type { + WalletInterface, + WalletAdapterInterface, + WalletPlatformEnum, + TransactionSignerInterface +} from '@multiplechain/types' + +export class Wallet implements WalletInterface { + adapter: WalletAdapterInterface + + /** + * @param {WalletAdapterInterface} adapter + */ + constructor(adapter: WalletAdapterInterface) { + this.adapter = adapter + } + + /** + * @returns {string} + */ + getId(): string { + return this.adapter.id + } + + /** + * @returns {string} + */ + getName(): string { + return this.adapter.name + } + + /** + * @returns {string} + */ + getIcon(): string { + return this.adapter.name + } + + /** + * @returns {WalletPlatformEnum[]} + */ + getPlatforms(): WalletPlatformEnum[] { + return this.adapter.platforms + } + + /** + * @returns {string} + */ + getDownloadLink(): string { + return this.adapter.downloadLink + } + + /** + * @param {string} url + * @param {object} ops + * @returns {string} + */ + createDeepLink(url: string, ops?: object): string { + return this.adapter.createDeepLink(url, ops) + } + + /** + * connect to adapter + * @returns {Promise} + */ + async connect(): Promise { + await this.adapter.connect() + return 'wallet address' + } + + /** + * @returns {boolean} + */ + isDetected(): boolean { + return this.adapter.isDetected() + } + + /** + * @returns {boolean} + */ + isConnected(): boolean { + return this.adapter.isConnected() + } + + /** + * @returns {Promise} + */ + async getAddress(): Promise { + return 'wallet address' + } + + /** + * @param {string} message + */ + async signMessage(message: string): Promise { + return 'signed message' + } + + /** + * @param {TransactionSignerInterface} transactionSigner + * @returns {Promise} + */ + async sendTransaction(transactionSigner: TransactionSignerInterface): Promise { + return 'transaction hash' + } + + /** + * @param {string} eventName + * @param {Function} callback + * @returns {void} + */ + on(eventName: string, callback: (...args: any[]) => void): void { + 'wallet events' + } +} diff --git a/packages/networks/boilerplate/src/browser/adapters/Example.ts b/packages/networks/boilerplate/src/browser/adapters/Example.ts new file mode 100644 index 0000000..79ecd67 --- /dev/null +++ b/packages/networks/boilerplate/src/browser/adapters/Example.ts @@ -0,0 +1,29 @@ +import { WalletPlatformEnum } from '@multiplechain/types' +import type { WalletAdapterInterface } from '@multiplechain/types' + +declare global { + interface Window { + example: any + } +} + +const Example: WalletAdapterInterface = { + id: 'example', + name: 'Example', + icon: 'icon base64 string here', + platforms: [WalletPlatformEnum.BROWSER, WalletPlatformEnum.MOBILE], + downloadLink: 'wallet download link here', + createDeepLink(url: string, ops?: object): string { + return `https://example.com/dapp/${url}` + }, + isDetected: () => Boolean(window?.example), + isConnected: async () => { + return true // return true if connected + }, + connect: async () => { + // connect wallet here + return window.example + } +} + +export default Example diff --git a/packages/networks/boilerplate/src/browser/adapters/index.ts b/packages/networks/boilerplate/src/browser/adapters/index.ts new file mode 100644 index 0000000..de0149d --- /dev/null +++ b/packages/networks/boilerplate/src/browser/adapters/index.ts @@ -0,0 +1 @@ +export { default as Example } from './Example.ts' diff --git a/packages/networks/boilerplate/src/browser/index.ts b/packages/networks/boilerplate/src/browser/index.ts new file mode 100644 index 0000000..786af97 --- /dev/null +++ b/packages/networks/boilerplate/src/browser/index.ts @@ -0,0 +1,9 @@ +import { Wallet } from './Wallet.ts' +import * as adapters from './adapters/index.ts' + +export * from '../index.ts' + +export const browser = { + Wallet, + adapters +} diff --git a/packages/networks/boilerplate/vite.svg b/packages/networks/boilerplate/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/packages/networks/boilerplate/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file From 63f1db43e982d45ca91cafd7a7cff528430fd4db Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 17:48:45 +0800 Subject: [PATCH 17/51] metamask adapter and switcher completed --- packages/networks/evm-chains/index.html | 34 +++++ packages/networks/evm-chains/package.json | 5 +- packages/networks/evm-chains/pnpm-lock.yaml | 16 +-- .../networks/evm-chains/src/browser/Wallet.ts | 115 +++++++++++++++++ .../src/browser/adapters/MetaMask.ts | 55 ++++++++ .../evm-chains/src/browser/adapters/index.ts | 1 + .../src/browser/adapters/switcher.ts | 119 ++++++++++++++++++ .../networks/evm-chains/src/browser/index.ts | 9 ++ packages/networks/evm-chains/vite.svg | 1 + 9 files changed, 345 insertions(+), 10 deletions(-) create mode 100644 packages/networks/evm-chains/index.html create mode 100644 packages/networks/evm-chains/src/browser/Wallet.ts create mode 100644 packages/networks/evm-chains/src/browser/adapters/MetaMask.ts create mode 100644 packages/networks/evm-chains/src/browser/adapters/index.ts create mode 100644 packages/networks/evm-chains/src/browser/adapters/switcher.ts create mode 100644 packages/networks/evm-chains/src/browser/index.ts create mode 100644 packages/networks/evm-chains/vite.svg diff --git a/packages/networks/evm-chains/index.html b/packages/networks/evm-chains/index.html new file mode 100644 index 0000000..692321d --- /dev/null +++ b/packages/networks/evm-chains/index.html @@ -0,0 +1,34 @@ + + + + + + + Browser Tests + + +
+ + + \ No newline at end of file diff --git a/packages/networks/evm-chains/package.json b/packages/networks/evm-chains/package.json index e73a2f4..b5951e2 100644 --- a/packages/networks/evm-chains/package.json +++ b/packages/networks/evm-chains/package.json @@ -21,6 +21,7 @@ "!tsconfig.tsbuildinfo" ], "scripts": { + "dev": "vite", "clean": "rm -rf dist", "watch": "tsc --watch", "build:vite": "vite build", @@ -51,8 +52,8 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.35", - "@multiplechain/utils": "^0.1.16", + "@multiplechain/types": "^0.1.42", + "@multiplechain/utils": "^0.1.17", "@wagmi/chains": "^1.8.0", "ethers": "^6.11.1" } diff --git a/packages/networks/evm-chains/pnpm-lock.yaml b/packages/networks/evm-chains/pnpm-lock.yaml index 63086cb..e267c35 100644 --- a/packages/networks/evm-chains/pnpm-lock.yaml +++ b/packages/networks/evm-chains/pnpm-lock.yaml @@ -6,11 +6,11 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.35 - version: 0.1.35 + specifier: ^0.1.42 + version: 0.1.42 '@multiplechain/utils': - specifier: ^0.1.16 - version: 0.1.16 + specifier: ^0.1.17 + version: 0.1.17 '@wagmi/chains': specifier: ^1.8.0 version: 1.8.0 @@ -24,12 +24,12 @@ packages: resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} dev: false - /@multiplechain/types@0.1.35: - resolution: {integrity: sha512-szg+arayBvT3WivUa9l6ZYjS6tNjhFMDpQCcAUL94s5yWpDM73OnHMA861XVVVY0xIUgJpzCj32PlJU+CARYow==} + /@multiplechain/types@0.1.42: + resolution: {integrity: sha512-CIx1fatpwCaGifqcHIN+ijLAzIA0AzPigYNMHXaJcBPuHuKKeMWw3oLOWbL4C6fW/J1rXYm9dVQYRp0dqFCvYg==} dev: false - /@multiplechain/utils@0.1.16: - resolution: {integrity: sha512-wJPLuHRt2r8DZt0S6YkeRZRRcy/bc20/Y0xolESOIWfLdBy/N5YKBMJaAwEV+pOWuP77Mx+rzZBlfeOBmvZBXw==} + /@multiplechain/utils@0.1.17: + resolution: {integrity: sha512-n9DhdgZ1DtawCZMcBPcnx0GcGq9P0HkvixZ0zd7MQNyj4nMdv5BKjLAX4whK+bewPKVWUVYemSY4o979CPrt2w==} dependencies: '@types/ws': 8.5.10 bignumber.js: 9.1.2 diff --git a/packages/networks/evm-chains/src/browser/Wallet.ts b/packages/networks/evm-chains/src/browser/Wallet.ts new file mode 100644 index 0000000..bda683c --- /dev/null +++ b/packages/networks/evm-chains/src/browser/Wallet.ts @@ -0,0 +1,115 @@ +import type { + WalletInterface, + WalletAdapterInterface, + WalletPlatformEnum, + TransactionSignerInterface +} from '@multiplechain/types' + +export class Wallet implements WalletInterface { + adapter: WalletAdapterInterface + + /** + * @param {WalletAdapterInterface} adapter + */ + constructor(adapter: WalletAdapterInterface) { + this.adapter = adapter + } + + /** + * @returns {string} + */ + getId(): string { + return this.adapter.id + } + + /** + * @returns {string} + */ + getName(): string { + return this.adapter.name + } + + /** + * @returns {string} + */ + getIcon(): string { + return this.adapter.name + } + + /** + * @returns {WalletPlatformEnum[]} + */ + getPlatforms(): WalletPlatformEnum[] { + return this.adapter.platforms + } + + /** + * @returns {string} + */ + getDownloadLink(): string { + return this.adapter.downloadLink + } + + /** + * @param {string} url + * @param {object} ops + * @returns {string} + */ + createDeepLink(url: string, ops?: object): string { + return this.adapter.createDeepLink(url, ops) + } + + /** + * connect to adapter + * @returns {Promise} + */ + async connect(): Promise { + await this.adapter.connect() + return 'wallet address' + } + + /** + * @returns {boolean} + */ + isDetected(): boolean { + return this.adapter.isDetected() + } + + /** + * @returns {boolean} + */ + isConnected(): boolean { + return this.adapter.isConnected() + } + + /** + * @returns {Promise} + */ + async getAddress(): Promise { + return 'wallet address' + } + + /** + * @param {string} message + */ + async signMessage(message: string): Promise { + return 'signed message' + } + + /** + * @param {TransactionSignerInterface} transactionSigner + * @returns {Promise} + */ + async sendTransaction(transactionSigner: TransactionSignerInterface): Promise { + return 'transaction hash' + } + + /** + * @param {string} eventName + * @param {Function} callback + * @returns {void} + */ + on(eventName: string, callback: (...args: any[]) => void): void { + 'wallet events' + } +} diff --git a/packages/networks/evm-chains/src/browser/adapters/MetaMask.ts b/packages/networks/evm-chains/src/browser/adapters/MetaMask.ts new file mode 100644 index 0000000..3794b4a --- /dev/null +++ b/packages/networks/evm-chains/src/browser/adapters/MetaMask.ts @@ -0,0 +1,55 @@ +import { switcher } from './switcher.ts' +import { WalletPlatformEnum } from '@multiplechain/types' +import type { WalletAdapterInterface, ProviderInterface } from '@multiplechain/types' + +declare global { + interface Window { + ethereum: { + isMetaMask?: boolean + request: (args: { method: string }) => Promise + } + } +} + +const icon = + 'data:image/svg+xml,%3Csvg%20fill%3D%22none%22%20height%3D%2233%22%20viewBox%3D%220%200%2035%2033%22%20width%3D%2235%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%22.25%22%3E%3Cpath%20d%3D%22m32.9582%201-13.1341%209.7183%202.4424-5.72731z%22%20fill%3D%22%23e17726%22%20stroke%3D%22%23e17726%22%2F%3E%3Cg%20fill%3D%22%23e27625%22%20stroke%3D%22%23e27625%22%3E%3Cpath%20d%3D%22m2.66296%201%2013.01714%209.809-2.3254-5.81802z%22%2F%3E%3Cpath%20d%3D%22m28.2295%2023.5335-3.4947%205.3386%207.4829%202.0603%202.1436-7.2823z%22%2F%3E%3Cpath%20d%3D%22m1.27281%2023.6501%202.13055%207.2823%207.46994-2.0603-3.48166-5.3386z%22%2F%3E%3Cpath%20d%3D%22m10.4706%2014.5149-2.0786%203.1358%207.405.3369-.2469-7.969z%22%2F%3E%3Cpath%20d%3D%22m25.1505%2014.5149-5.1575-4.58704-.1688%208.05974%207.4049-.3369z%22%2F%3E%3Cpath%20d%3D%22m10.8733%2028.8721%204.4819-2.1639-3.8583-3.0062z%22%2F%3E%3Cpath%20d%3D%22m20.2659%2026.7082%204.4689%202.1639-.6105-5.1701z%22%2F%3E%3C%2Fg%3E%3Cpath%20d%3D%22m24.7348%2028.8721-4.469-2.1639.3638%202.9025-.039%201.231z%22%20fill%3D%22%23d5bfb2%22%20stroke%3D%22%23d5bfb2%22%2F%3E%3Cpath%20d%3D%22m10.8732%2028.8721%204.1572%201.9696-.026-1.231.3508-2.9025z%22%20fill%3D%22%23d5bfb2%22%20stroke%3D%22%23d5bfb2%22%2F%3E%3Cpath%20d%3D%22m15.1084%2021.7842-3.7155-1.0884%202.6243-1.2051z%22%20fill%3D%22%23233447%22%20stroke%3D%22%23233447%22%2F%3E%3Cpath%20d%3D%22m20.5126%2021.7842%201.0913-2.2935%202.6372%201.2051z%22%20fill%3D%22%23233447%22%20stroke%3D%22%23233447%22%2F%3E%3Cpath%20d%3D%22m10.8733%2028.8721.6495-5.3386-4.13117.1167z%22%20fill%3D%22%23cc6228%22%20stroke%3D%22%23cc6228%22%2F%3E%3Cpath%20d%3D%22m24.0982%2023.5335.6366%205.3386%203.4946-5.2219z%22%20fill%3D%22%23cc6228%22%20stroke%3D%22%23cc6228%22%2F%3E%3Cpath%20d%3D%22m27.2291%2017.6507-7.405.3369.6885%203.7966%201.0913-2.2935%202.6372%201.2051z%22%20fill%3D%22%23cc6228%22%20stroke%3D%22%23cc6228%22%2F%3E%3Cpath%20d%3D%22m11.3929%2020.6958%202.6242-1.2051%201.0913%202.2935.6885-3.7966-7.40495-.3369z%22%20fill%3D%22%23cc6228%22%20stroke%3D%22%23cc6228%22%2F%3E%3Cpath%20d%3D%22m8.392%2017.6507%203.1049%206.0513-.1039-3.0062z%22%20fill%3D%22%23e27525%22%20stroke%3D%22%23e27525%22%2F%3E%3Cpath%20d%3D%22m24.2412%2020.6958-.1169%203.0062%203.1049-6.0513z%22%20fill%3D%22%23e27525%22%20stroke%3D%22%23e27525%22%2F%3E%3Cpath%20d%3D%22m15.797%2017.9876-.6886%203.7967.8704%204.4833.1949-5.9087z%22%20fill%3D%22%23e27525%22%20stroke%3D%22%23e27525%22%2F%3E%3Cpath%20d%3D%22m19.8242%2017.9876-.3638%202.3584.1819%205.9216.8704-4.4833z%22%20fill%3D%22%23e27525%22%20stroke%3D%22%23e27525%22%2F%3E%3Cpath%20d%3D%22m20.5127%2021.7842-.8704%204.4834.6236.4406%203.8584-3.0062.1169-3.0062z%22%20fill%3D%22%23f5841f%22%20stroke%3D%22%23f5841f%22%2F%3E%3Cpath%20d%3D%22m11.3929%2020.6958.104%203.0062%203.8583%203.0062.6236-.4406-.8704-4.4834z%22%20fill%3D%22%23f5841f%22%20stroke%3D%22%23f5841f%22%2F%3E%3Cpath%20d%3D%22m20.5906%2030.8417.039-1.231-.3378-.2851h-4.9626l-.3248.2851.026%201.231-4.1572-1.9696%201.4551%201.1921%202.9489%202.0344h5.0536l2.962-2.0344%201.442-1.1921z%22%20fill%3D%22%23c0ac9d%22%20stroke%3D%22%23c0ac9d%22%2F%3E%3Cpath%20d%3D%22m20.2659%2026.7082-.6236-.4406h-3.6635l-.6236.4406-.3508%202.9025.3248-.2851h4.9626l.3378.2851z%22%20fill%3D%22%23161616%22%20stroke%3D%22%23161616%22%2F%3E%3Cpath%20d%3D%22m33.5168%2011.3532%201.1043-5.36447-1.6629-4.98873-12.6923%209.3944%204.8846%204.1205%206.8983%202.0085%201.52-1.7752-.6626-.4795%201.0523-.9588-.8054-.622%201.0523-.8034z%22%20fill%3D%22%23763e1a%22%20stroke%3D%22%23763e1a%22%2F%3E%3Cpath%20d%3D%22m1%205.98873%201.11724%205.36447-.71451.5313%201.06527.8034-.80545.622%201.05228.9588-.66255.4795%201.51997%201.7752%206.89835-2.0085%204.8846-4.1205-12.69233-9.3944z%22%20fill%3D%22%23763e1a%22%20stroke%3D%22%23763e1a%22%2F%3E%3Cpath%20d%3D%22m32.0489%2016.5234-6.8983-2.0085%202.0786%203.1358-3.1049%206.0513%204.1052-.0519h6.1318z%22%20fill%3D%22%23f5841f%22%20stroke%3D%22%23f5841f%22%2F%3E%3Cpath%20d%3D%22m10.4705%2014.5149-6.89828%202.0085-2.29944%207.1267h6.11883l4.10519.0519-3.10487-6.0513z%22%20fill%3D%22%23f5841f%22%20stroke%3D%22%23f5841f%22%2F%3E%3Cpath%20d%3D%22m19.8241%2017.9876.4417-7.5932%202.0007-5.4034h-8.9119l2.0006%205.4034.4417%207.5932.1689%202.3842.013%205.8958h3.6635l.013-5.8958z%22%20fill%3D%22%23f5841f%22%20stroke%3D%22%23f5841f%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E' + +const MetaMask: WalletAdapterInterface = { + icon, + id: 'metamask', + name: 'MetaMask', + platforms: [WalletPlatformEnum.BROWSER, WalletPlatformEnum.MOBILE], + downloadLink: 'https://metamask.io/download/', + createDeepLink(url: string): string { + return `https://metamask.app.link/dapp/${url}` + }, + isDetected: () => Boolean(window?.ethereum?.isMetaMask), + isConnected: async () => { + return Boolean((await window.ethereum.request({ method: 'eth_accounts' })).length) + }, + connect: async (provider?: ProviderInterface): Promise => { + const metamask = window.ethereum + return await new Promise((resolve, reject) => { + try { + metamask + .request({ method: 'eth_requestAccounts' }) + .then(() => { + switcher(metamask, provider) + .then(() => { + resolve(metamask) + }) + .catch((error: any) => { + reject(error) + }) + }) + .catch((error: any) => { + reject(error) + }) + } catch (error) { + reject(error) + } + }) + } +} + +export default MetaMask diff --git a/packages/networks/evm-chains/src/browser/adapters/index.ts b/packages/networks/evm-chains/src/browser/adapters/index.ts new file mode 100644 index 0000000..c190e78 --- /dev/null +++ b/packages/networks/evm-chains/src/browser/adapters/index.ts @@ -0,0 +1 @@ +export { default as MetaMask } from './MetaMask.ts' diff --git a/packages/networks/evm-chains/src/browser/adapters/switcher.ts b/packages/networks/evm-chains/src/browser/adapters/switcher.ts new file mode 100644 index 0000000..e5b5b6d --- /dev/null +++ b/packages/networks/evm-chains/src/browser/adapters/switcher.ts @@ -0,0 +1,119 @@ +import networks from '../../services/Networks.ts' +import type { ProviderInterface } from '@multiplechain/types' +import type { EvmNetworkConfigInterface } from '../../services/Provider.ts' + +export const switcher = async (wallet: any, provider?: ProviderInterface): Promise => { + const network = provider?.network as EvmNetworkConfigInterface + + const request = async (params: any): Promise => { + const res = await wallet.request(params) + if (res?.error !== undefined) { + const error = res.error as { + code: number + message: string + } + if (error.code === -32000) { + throw new Error('rpc-timeout') + } + throw new Error(error.message) + } + + return res + } + + const addNetwork = async (network: EvmNetworkConfigInterface): Promise => { + void new Promise((resolve, reject) => { + try { + request({ + method: 'wallet_addEthereumChain', + params: [ + { + chainId: network.hexId, + chainName: network.name, + rpcUrls: [network.rpcUrl], + nativeCurrency: network.nativeCurrency, + blockExplorerUrls: [network.explorerUrl] + } + ] + }) + .then(() => { + resolve(true) + }) + .catch((error) => { + reject(error) + }) + } catch (error) { + reject(error) + } + }) + } + + const changeNetwork = async (_network: EvmNetworkConfigInterface): Promise => { + return await new Promise((resolve, reject) => { + const network = networks.findById(_network.id) + if (network === undefined) { + resolve(true) + return + } + const chainId = `0x${network.id.toString(16)}` + request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId }] + }) + .then(() => { + resolve(true) + }) + .catch((error) => { + if ( + error.code === 4902 || + String(error.message).includes('wallet_addEthereumChain') + ) { + addNetwork(network) + .then(() => { + resolve(true) + }) + .catch((error) => { + reject(error) + }) + } else { + reject(error) + } + }) + }) + } + + const getChainId = async (): Promise => { + return parseInt((await request({ method: 'eth_chainId' })) as string, 16) + } + + const maybeSwitch = async (): Promise => { + return await new Promise((resolve, reject) => { + if (network === undefined) { + resolve(true) + return + } + try { + const check = async (): Promise => { + if ((await getChainId()) !== network.id) { + changeNetwork(network) + .then(() => { + setTimeout(() => { + resolve(true) + }, 1000) + }) + .catch((error) => { + reject(error) + }) + } else { + resolve(true) + } + } + void check() + } catch (error) { + reject(error) + } + }) + } + + return await maybeSwitch() +} diff --git a/packages/networks/evm-chains/src/browser/index.ts b/packages/networks/evm-chains/src/browser/index.ts new file mode 100644 index 0000000..786af97 --- /dev/null +++ b/packages/networks/evm-chains/src/browser/index.ts @@ -0,0 +1,9 @@ +import { Wallet } from './Wallet.ts' +import * as adapters from './adapters/index.ts' + +export * from '../index.ts' + +export const browser = { + Wallet, + adapters +} diff --git a/packages/networks/evm-chains/vite.svg b/packages/networks/evm-chains/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/packages/networks/evm-chains/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file From af685bc601217c650d80b7712e40fbf55ae6a43a Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 17:49:11 +0800 Subject: [PATCH 18/51] updated for browser build and test --- .gitignore | 1 - vite.config.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 09d282a..d3bc6a7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ node_modules dist dist-ssr *.local -index.html test*.ts test*.js test*.cjs diff --git a/vite.config.ts b/vite.config.ts index ce9b83c..e20eca5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -13,8 +13,8 @@ export default defineConfig({ minify: true, sourcemap: true, lib: { - entry: './src/index.ts', formats: ['es', 'umd'], + entry: './src/browser/index.ts', fileName: (format: string) => `index.${format}.js` } }, From 107a79ad2802ff9a57f32fdd865e97d3152297cf Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 19:35:34 +0800 Subject: [PATCH 19/51] added isMobile, isWebview helper methods --- packages/utils/package.json | 2 +- packages/utils/src/index.ts | 55 +++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/packages/utils/package.json b/packages/utils/package.json index fbe4203..c04c0b8 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/utils", - "version": "0.1.17", + "version": "0.1.18", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 23a989f..2a8e452 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -196,4 +196,59 @@ export const math = { } } +declare global { + interface Window { + opera?: any + WebViewJavascriptBridge?: any + webkit?: any + } + interface Navigator { + standalone?: any + } +} + +export const isMobile = (): boolean => { + /* eslint-disable */ + return (function (a) { + return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test( + a + ) || + /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test( + a.substr(0, 4) + ) + ? true + : false + })(navigator.userAgent || navigator.vendor || window.opera) + /* eslint-enable */ +} + +export const isWebview = (): boolean => { + if (typeof window === 'undefined') { + return false + } + + const navigator = window.navigator + + /* eslint-disable */ + if (window.WebViewJavascriptBridge) { + return true + } + + if (window.webkit && window.webkit.messageHandlers) { + return true + } + + if (navigator.userAgent.match(/WebView/i)) { + return true + } + + const standalone = navigator.standalone + const userAgent = navigator.userAgent.toLowerCase() + const safari = /safari/.test(userAgent) + const ios = /iphone|ipod|ipad/.test(userAgent) + + return ios ? !standalone && !safari : userAgent.includes('wv') + /* eslint-enable */ +} + export { toHex } From bb00acd7984f2484cd0a8d7ca3f286fce7280e9b Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 19:40:55 +0800 Subject: [PATCH 20/51] maybe deeplink not available --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 1878d57..e5d012d 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.42", + "version": "0.1.43", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index 1f3c077..c9a7dc7 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -14,7 +14,7 @@ export interface WalletAdapterInterface { platforms: WalletPlatformEnum[] isDetected: () => boolean | Promise isConnected: () => boolean | Promise - createDeepLink: (url: string, ops?: object) => string + createDeepLink: (url: string, ops?: object) => string | undefined connect: (provider?: ProviderInterface, ops?: object) => Promise } From 5499f79b3c689e1da294b07536eda0d0645c6a4e Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 19:47:46 +0800 Subject: [PATCH 21/51] created adapter test template --- packages/networks/boilerplate/index.html | 159 ++++++++++++++++++- packages/networks/boilerplate/package.json | 4 +- packages/networks/boilerplate/pnpm-lock.yaml | 16 +- packages/networks/evm-chains/index.html | 155 +++++++++++++++++- packages/networks/evm-chains/package.json | 4 +- packages/networks/evm-chains/pnpm-lock.yaml | 16 +- 6 files changed, 328 insertions(+), 26 deletions(-) diff --git a/packages/networks/boilerplate/index.html b/packages/networks/boilerplate/index.html index f5e1242..ac65ab9 100644 --- a/packages/networks/boilerplate/index.html +++ b/packages/networks/boilerplate/index.html @@ -5,11 +5,166 @@ Browser Tests + + -
+
+
    +
\ No newline at end of file diff --git a/packages/networks/boilerplate/package.json b/packages/networks/boilerplate/package.json index 092bdc5..b3ff857 100644 --- a/packages/networks/boilerplate/package.json +++ b/packages/networks/boilerplate/package.json @@ -48,7 +48,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.42", - "@multiplechain/utils": "^0.1.17" + "@multiplechain/types": "^0.1.43", + "@multiplechain/utils": "^0.1.18" } } \ No newline at end of file diff --git a/packages/networks/boilerplate/pnpm-lock.yaml b/packages/networks/boilerplate/pnpm-lock.yaml index a773607..7e49899 100644 --- a/packages/networks/boilerplate/pnpm-lock.yaml +++ b/packages/networks/boilerplate/pnpm-lock.yaml @@ -6,20 +6,20 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.42 - version: 0.1.42 + specifier: ^0.1.43 + version: 0.1.43 '@multiplechain/utils': - specifier: ^0.1.17 - version: 0.1.17 + specifier: ^0.1.18 + version: 0.1.18 packages: - /@multiplechain/types@0.1.42: - resolution: {integrity: sha512-CIx1fatpwCaGifqcHIN+ijLAzIA0AzPigYNMHXaJcBPuHuKKeMWw3oLOWbL4C6fW/J1rXYm9dVQYRp0dqFCvYg==} + /@multiplechain/types@0.1.43: + resolution: {integrity: sha512-nMI+0cL+DmegWSpF/31u+iqgrTppzy4bQoksli2S/YSpmhAyzRlqbrNzTnqB8/OffxkCWgfFGeMXUG9M0ggbXQ==} dev: false - /@multiplechain/utils@0.1.17: - resolution: {integrity: sha512-n9DhdgZ1DtawCZMcBPcnx0GcGq9P0HkvixZ0zd7MQNyj4nMdv5BKjLAX4whK+bewPKVWUVYemSY4o979CPrt2w==} + /@multiplechain/utils@0.1.18: + resolution: {integrity: sha512-UCoOOBJrawp/lInepxuoEiYwId0wMPg7rX8p78FLqzGl8f/b93sAtv7sP87/VVKwhdoEuNZ/uQjckycmNeks/w==} dependencies: '@types/ws': 8.5.10 bignumber.js: 9.1.2 diff --git a/packages/networks/evm-chains/index.html b/packages/networks/evm-chains/index.html index 692321d..048d151 100644 --- a/packages/networks/evm-chains/index.html +++ b/packages/networks/evm-chains/index.html @@ -5,11 +5,112 @@ Browser Tests + + -
+
+
    +
\ No newline at end of file diff --git a/packages/networks/evm-chains/package.json b/packages/networks/evm-chains/package.json index b5951e2..0bab74e 100644 --- a/packages/networks/evm-chains/package.json +++ b/packages/networks/evm-chains/package.json @@ -52,8 +52,8 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.42", - "@multiplechain/utils": "^0.1.17", + "@multiplechain/types": "^0.1.43", + "@multiplechain/utils": "^0.1.18", "@wagmi/chains": "^1.8.0", "ethers": "^6.11.1" } diff --git a/packages/networks/evm-chains/pnpm-lock.yaml b/packages/networks/evm-chains/pnpm-lock.yaml index e267c35..5dd9475 100644 --- a/packages/networks/evm-chains/pnpm-lock.yaml +++ b/packages/networks/evm-chains/pnpm-lock.yaml @@ -6,11 +6,11 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.42 - version: 0.1.42 + specifier: ^0.1.43 + version: 0.1.43 '@multiplechain/utils': - specifier: ^0.1.17 - version: 0.1.17 + specifier: ^0.1.18 + version: 0.1.18 '@wagmi/chains': specifier: ^1.8.0 version: 1.8.0 @@ -24,12 +24,12 @@ packages: resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} dev: false - /@multiplechain/types@0.1.42: - resolution: {integrity: sha512-CIx1fatpwCaGifqcHIN+ijLAzIA0AzPigYNMHXaJcBPuHuKKeMWw3oLOWbL4C6fW/J1rXYm9dVQYRp0dqFCvYg==} + /@multiplechain/types@0.1.43: + resolution: {integrity: sha512-nMI+0cL+DmegWSpF/31u+iqgrTppzy4bQoksli2S/YSpmhAyzRlqbrNzTnqB8/OffxkCWgfFGeMXUG9M0ggbXQ==} dev: false - /@multiplechain/utils@0.1.17: - resolution: {integrity: sha512-n9DhdgZ1DtawCZMcBPcnx0GcGq9P0HkvixZ0zd7MQNyj4nMdv5BKjLAX4whK+bewPKVWUVYemSY4o979CPrt2w==} + /@multiplechain/utils@0.1.18: + resolution: {integrity: sha512-UCoOOBJrawp/lInepxuoEiYwId0wMPg7rX8p78FLqzGl8f/b93sAtv7sP87/VVKwhdoEuNZ/uQjckycmNeks/w==} dependencies: '@types/ws': 8.5.10 bignumber.js: 9.1.2 From 9e363373d8c2f4f7dd47f88ca738afa90534d2e9 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 20:13:01 +0800 Subject: [PATCH 22/51] yes undefined is not right type --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index e5d012d..06d2c59 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.43", + "version": "0.1.44", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index c9a7dc7..75e35d5 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -14,7 +14,7 @@ export interface WalletAdapterInterface { platforms: WalletPlatformEnum[] isDetected: () => boolean | Promise isConnected: () => boolean | Promise - createDeepLink: (url: string, ops?: object) => string | undefined + createDeepLink?: (url: string, ops?: object) => string connect: (provider?: ProviderInterface, ops?: object) => Promise } From 957ffada11b50e30ddb47fe90f11a5467d489ae9 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 20:22:49 +0800 Subject: [PATCH 23/51] added provider property --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 06d2c59..60dfbf4 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.44", + "version": "0.1.45", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index 75e35d5..cac3c20 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -10,7 +10,8 @@ export interface WalletAdapterInterface { id: string name: string icon: string - downloadLink: string + provider: any + downloadLink?: string platforms: WalletPlatformEnum[] isDetected: () => boolean | Promise isConnected: () => boolean | Promise From fc1bd97f4f2b455d77a58498534d20635ab22a3a Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 20 Apr 2024 20:28:17 +0800 Subject: [PATCH 24/51] implemented EIP6963 --- packages/networks/evm-chains/index.html | 6 +- packages/networks/evm-chains/package.json | 2 +- packages/networks/evm-chains/pnpm-lock.yaml | 8 +-- .../src/browser/adapters/EIP6963.ts | 25 +++++++ .../src/browser/adapters/MetaMask.ts | 11 +-- .../networks/evm-chains/src/browser/index.ts | 69 ++++++++++++++++++- 6 files changed, 105 insertions(+), 16 deletions(-) create mode 100644 packages/networks/evm-chains/src/browser/adapters/EIP6963.ts diff --git a/packages/networks/evm-chains/index.html b/packages/networks/evm-chains/index.html index 048d151..9ca8c08 100644 --- a/packages/networks/evm-chains/index.html +++ b/packages/networks/evm-chains/index.html @@ -111,6 +111,7 @@ From 5bc554efd9f20ba382ef20e438acc83980ae83de Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:10:48 +0800 Subject: [PATCH 34/51] added WalletConnectAdapterInterface --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 60dfbf4..7a3e2c3 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.45", + "version": "0.1.46", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index cac3c20..c5308e5 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -19,8 +19,19 @@ export interface WalletAdapterInterface { connect: (provider?: ProviderInterface, ops?: object) => Promise } +interface WalletConnectOps { + projectId: string + themeMode?: 'dark' | 'light' +} + +export interface WalletConnectAdapterInterface + extends Omit { + connect: (provider: ProviderInterface, ops: WalletConnectOps) => Promise + disconnect?: () => void +} + export interface WalletInterface { - adapter: WalletAdapterInterface + adapter: WalletAdapterInterface | WalletConnectAdapterInterface /** * @returns {String} From 29075a17b81089c15d3bda8d16150b29c04de5ea Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:13:47 +0800 Subject: [PATCH 35/51] exported interface --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 7a3e2c3..265291d 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.46", + "version": "0.1.47", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index c5308e5..e1f041d 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -19,7 +19,7 @@ export interface WalletAdapterInterface { connect: (provider?: ProviderInterface, ops?: object) => Promise } -interface WalletConnectOps { +export interface WalletConnectOps { projectId: string themeMode?: 'dark' | 'light' } From 09c9d1c3d4defcfa2281c2a509a46b5ffc8ed364 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:16:08 +0800 Subject: [PATCH 36/51] updated enum --- packages/types/package.json | 2 +- packages/types/src/enums.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 265291d..2ce6d67 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.47", + "version": "0.1.48", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/enums.ts b/packages/types/src/enums.ts index 137ae6a..f086e3a 100644 --- a/packages/types/src/enums.ts +++ b/packages/types/src/enums.ts @@ -57,5 +57,5 @@ export enum WalletPlatformEnum { BROWSER = 'BROWSER', MOBILE = 'MOBILE', DESKTOP = 'DESKTOP', - ALL = 'ALL' + UNIVERSAL = 'UNIVERSAL' } From 325d11b7a1130534a59b1bd18275d9dad753242d Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:16:54 +0800 Subject: [PATCH 37/51] updated --- packages/networks/boilerplate/package.json | 2 +- packages/networks/boilerplate/pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/networks/boilerplate/package.json b/packages/networks/boilerplate/package.json index c922ce4..715f4bb 100644 --- a/packages/networks/boilerplate/package.json +++ b/packages/networks/boilerplate/package.json @@ -48,7 +48,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.45", + "@multiplechain/types": "^0.1.48", "@multiplechain/utils": "^0.1.18" } } \ No newline at end of file diff --git a/packages/networks/boilerplate/pnpm-lock.yaml b/packages/networks/boilerplate/pnpm-lock.yaml index 8a4c906..14c8215 100644 --- a/packages/networks/boilerplate/pnpm-lock.yaml +++ b/packages/networks/boilerplate/pnpm-lock.yaml @@ -6,16 +6,16 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.45 - version: 0.1.45 + specifier: ^0.1.48 + version: 0.1.48 '@multiplechain/utils': specifier: ^0.1.18 version: 0.1.18 packages: - /@multiplechain/types@0.1.45: - resolution: {integrity: sha512-hoS0kMTvOls34gpSyo9NKUnP2N/Jsi4LRDogQvTT83Mh7fw/XMPVQIfX1dJtBEUxKkIOnTkOsnZy0VBmrJQEyw==} + /@multiplechain/types@0.1.48: + resolution: {integrity: sha512-HxJygXD61UrzjbVAY65gdxsTmnNEuKgSB00qz19JV8O/tcAHBSTzKK1k3r1MuOfOF0JztmON9YSE7ONAMulLog==} dev: false /@multiplechain/utils@0.1.18: From cc1eaea86c7620849f40e09da44dbc25ad642337 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:27:00 +0800 Subject: [PATCH 38/51] last update --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 23 +++++++++-------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 2ce6d67..7a996a7 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.48", + "version": "0.1.50", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index e1f041d..cb4b9c7 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -6,32 +6,27 @@ export type RegisterWalletAdapterType = (walletAdapter: WalletAdapterInterface) export type WalletAdapterListType = Record +export interface WalletConnectOps { + projectId: string + themeMode?: 'dark' | 'light' +} + export interface WalletAdapterInterface { id: string name: string icon: string - provider: any + provider?: any downloadLink?: string platforms: WalletPlatformEnum[] + disconnect?: () => void isDetected: () => boolean | Promise isConnected: () => boolean | Promise createDeepLink?: (url: string, ops?: object) => string - connect: (provider?: ProviderInterface, ops?: object) => Promise -} - -export interface WalletConnectOps { - projectId: string - themeMode?: 'dark' | 'light' -} - -export interface WalletConnectAdapterInterface - extends Omit { - connect: (provider: ProviderInterface, ops: WalletConnectOps) => Promise - disconnect?: () => void + connect: (provider?: ProviderInterface, ops?: object | WalletConnectOps) => Promise } export interface WalletInterface { - adapter: WalletAdapterInterface | WalletConnectAdapterInterface + adapter: WalletAdapterInterface /** * @returns {String} From 663f24f04af94ad7932896b620ee7f1e172d6f27 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:27:29 +0800 Subject: [PATCH 39/51] updatred --- packages/networks/boilerplate/package.json | 2 +- packages/networks/boilerplate/pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/networks/boilerplate/package.json b/packages/networks/boilerplate/package.json index 715f4bb..563b6c7 100644 --- a/packages/networks/boilerplate/package.json +++ b/packages/networks/boilerplate/package.json @@ -48,7 +48,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.48", + "@multiplechain/types": "^0.1.50", "@multiplechain/utils": "^0.1.18" } } \ No newline at end of file diff --git a/packages/networks/boilerplate/pnpm-lock.yaml b/packages/networks/boilerplate/pnpm-lock.yaml index 14c8215..d353d6e 100644 --- a/packages/networks/boilerplate/pnpm-lock.yaml +++ b/packages/networks/boilerplate/pnpm-lock.yaml @@ -6,16 +6,16 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.48 - version: 0.1.48 + specifier: ^0.1.50 + version: 0.1.50 '@multiplechain/utils': specifier: ^0.1.18 version: 0.1.18 packages: - /@multiplechain/types@0.1.48: - resolution: {integrity: sha512-HxJygXD61UrzjbVAY65gdxsTmnNEuKgSB00qz19JV8O/tcAHBSTzKK1k3r1MuOfOF0JztmON9YSE7ONAMulLog==} + /@multiplechain/types@0.1.50: + resolution: {integrity: sha512-WipR3PVu8oowEcOLZigbFXCxqQKgihffydfxIlO/R6Rr4bJmFgCvEUq3YjyXRdNvDACcfybzBglb7s8C4tO1Jg==} dev: false /@multiplechain/utils@0.1.18: From bc1797816d4889d01b809616d449bf469aaf7201 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:39:11 +0800 Subject: [PATCH 40/51] added WalletConnect adapter --- packages/networks/evm-chains/index.html | 17 +- packages/networks/evm-chains/package.json | 4 +- packages/networks/evm-chains/pnpm-lock.yaml | 2098 +++++++++++++++-- .../src/browser/adapters/WalletConnect.ts | 95 + .../evm-chains/src/browser/adapters/index.ts | 1 + .../networks/evm-chains/src/browser/index.ts | 4 + 6 files changed, 2053 insertions(+), 166 deletions(-) create mode 100644 packages/networks/evm-chains/src/browser/adapters/WalletConnect.ts diff --git a/packages/networks/evm-chains/index.html b/packages/networks/evm-chains/index.html index 63c75cb..23245d7 100644 --- a/packages/networks/evm-chains/index.html +++ b/packages/networks/evm-chains/index.html @@ -131,8 +131,14 @@ window.adapters = {} // TODO: later test Wallet class window.connectAdapter = async (adapter) => { - console.log(await adapter.connect(provider)) - console.log(await adapter.provider.request({ method: 'eth_accounts' })) + if (adapter.disconnect) { + await adapter.disconnect() + } + + const adapterProvider = await adapter.connect(provider, { + projectId: '113d9f5689edd84ff230c2a6d679c80c' + }) + console.log(await adapterProvider.request({ method: 'eth_accounts' })) } const adapterTemplate = (adapter) => { @@ -140,6 +146,7 @@ window.adapters[adapter.id] = adapter; const statuses = { + universal: ``, detected: `Detected`, download: `Download`, onlyDesktop: `Only Desktop`, @@ -148,11 +155,13 @@ } const getStatus = () => { - if (adapter.isDetected() === true) { + if (adapter.platforms.includes('UNIVERSAL')) { + return statuses.universal; + } if (adapter.isDetected() === true) { return statuses.detected; } else if (!isMobile() && adapter.isDetected() === false) { return statuses.download; - } else if (isMobile() && !adapter.getPlatforms().includes('MOBILE')) { + } else if (isMobile() && !adapter.platforms.includes('MOBILE')) { return statuses.onlyDesktop; } else if (isMobile() && adapter.createDeepLink) { return statuses.openInApp; diff --git a/packages/networks/evm-chains/package.json b/packages/networks/evm-chains/package.json index 15a37d3..e6165d8 100644 --- a/packages/networks/evm-chains/package.json +++ b/packages/networks/evm-chains/package.json @@ -52,9 +52,11 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.45", + "@multiplechain/types": "^0.1.50", "@multiplechain/utils": "^0.1.18", "@wagmi/chains": "^1.8.0", + "@walletconnect/ethereum-provider": "^2.12.2", + "@walletconnect/modal": "^2.6.2", "ethers": "^6.11.1" } } \ No newline at end of file diff --git a/packages/networks/evm-chains/pnpm-lock.yaml b/packages/networks/evm-chains/pnpm-lock.yaml index 5e45536..d9b6c0c 100644 --- a/packages/networks/evm-chains/pnpm-lock.yaml +++ b/packages/networks/evm-chains/pnpm-lock.yaml @@ -6,14 +6,20 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.45 - version: 0.1.45 + specifier: ^0.1.50 + version: 0.1.50 '@multiplechain/utils': specifier: ^0.1.18 version: 0.1.18 '@wagmi/chains': specifier: ^1.8.0 version: 1.8.0 + '@walletconnect/ethereum-provider': + specifier: ^2.12.2 + version: 2.12.2(react@18.2.0) + '@walletconnect/modal': + specifier: ^2.6.2 + version: 2.6.2(react@18.2.0) ethers: specifier: ^6.11.1 version: 6.11.1 @@ -24,265 +30,1940 @@ packages: resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} dev: false - /@multiplechain/types@0.1.45: - resolution: {integrity: sha512-hoS0kMTvOls34gpSyo9NKUnP2N/Jsi4LRDogQvTT83Mh7fw/XMPVQIfX1dJtBEUxKkIOnTkOsnZy0VBmrJQEyw==} + /@lit-labs/ssr-dom-shim@1.2.0: + resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} + dev: false + + /@lit/reactive-element@1.6.3: + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + dev: false + + /@motionone/animation@10.17.0: + resolution: {integrity: sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg==} + dependencies: + '@motionone/easing': 10.17.0 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + tslib: 2.4.0 + dev: false + + /@motionone/dom@10.17.0: + resolution: {integrity: sha512-cMm33swRlCX/qOPHWGbIlCl0K9Uwi6X5RiL8Ma6OrlJ/TP7Q+Np5GE4xcZkFptysFjMTi4zcZzpnNQGQ5D6M0Q==} + dependencies: + '@motionone/animation': 10.17.0 + '@motionone/generators': 10.17.0 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + hey-listen: 1.0.8 + tslib: 2.4.0 + dev: false + + /@motionone/easing@10.17.0: + resolution: {integrity: sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg==} + dependencies: + '@motionone/utils': 10.17.0 + tslib: 2.4.0 + dev: false + + /@motionone/generators@10.17.0: + resolution: {integrity: sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ==} + dependencies: + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + tslib: 2.4.0 + dev: false + + /@motionone/svelte@10.16.4: + resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} + dependencies: + '@motionone/dom': 10.17.0 + tslib: 2.4.0 + dev: false + + /@motionone/types@10.17.0: + resolution: {integrity: sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA==} + dev: false + + /@motionone/utils@10.17.0: + resolution: {integrity: sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg==} + dependencies: + '@motionone/types': 10.17.0 + hey-listen: 1.0.8 + tslib: 2.4.0 + dev: false + + /@motionone/vue@10.16.4: + resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} + deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion + dependencies: + '@motionone/dom': 10.17.0 + tslib: 2.4.0 + dev: false + + /@multiplechain/types@0.1.50: + resolution: {integrity: sha512-WipR3PVu8oowEcOLZigbFXCxqQKgihffydfxIlO/R6Rr4bJmFgCvEUq3YjyXRdNvDACcfybzBglb7s8C4tO1Jg==} dev: false /@multiplechain/utils@0.1.18: resolution: {integrity: sha512-UCoOOBJrawp/lInepxuoEiYwId0wMPg7rX8p78FLqzGl8f/b93sAtv7sP87/VVKwhdoEuNZ/uQjckycmNeks/w==} dependencies: - '@types/ws': 8.5.10 - bignumber.js: 9.1.2 - web3-utils: 4.2.2 - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + '@types/ws': 8.5.10 + bignumber.js: 9.1.2 + web3-utils: 4.2.2 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + + /@noble/curves@1.3.0: + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + dependencies: + '@noble/hashes': 1.3.3 + dev: false + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: false + + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: false + + /@parcel/watcher-android-arm64@2.4.1: + resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-darwin-arm64@2.4.1: + resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-darwin-x64@2.4.1: + resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-freebsd-x64@2.4.1: + resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm-glibc@2.4.1: + resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm64-glibc@2.4.1: + resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm64-musl@2.4.1: + resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-x64-glibc@2.4.1: + resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-x64-musl@2.4.1: + resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-wasm@2.4.1: + resolution: {integrity: sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA==} + engines: {node: '>= 10.0.0'} + dependencies: + is-glob: 4.0.3 + micromatch: 4.0.5 + napi-wasm: 1.1.0 + dev: false + bundledDependencies: + - napi-wasm + + /@parcel/watcher-win32-arm64@2.4.1: + resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-win32-ia32@2.4.1: + resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-win32-x64@2.4.1: + resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher@2.4.1: + resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} + engines: {node: '>= 10.0.0'} + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.5 + node-addon-api: 7.1.0 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.4.1 + '@parcel/watcher-darwin-arm64': 2.4.1 + '@parcel/watcher-darwin-x64': 2.4.1 + '@parcel/watcher-freebsd-x64': 2.4.1 + '@parcel/watcher-linux-arm-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-musl': 2.4.1 + '@parcel/watcher-linux-x64-glibc': 2.4.1 + '@parcel/watcher-linux-x64-musl': 2.4.1 + '@parcel/watcher-win32-arm64': 2.4.1 + '@parcel/watcher-win32-ia32': 2.4.1 + '@parcel/watcher-win32-x64': 2.4.1 + dev: false + + /@scure/base@1.1.5: + resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + dev: false + + /@scure/bip32@1.3.3: + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 + dev: false + + /@scure/bip39@1.2.2: + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 + dev: false + + /@stablelib/aead@1.0.1: + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + dev: false + + /@stablelib/binary@1.0.1: + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + dependencies: + '@stablelib/int': 1.0.1 + dev: false + + /@stablelib/bytes@1.0.1: + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + dev: false + + /@stablelib/chacha20poly1305@1.0.1: + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/poly1305': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/chacha@1.0.1: + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/constant-time@1.0.1: + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + dev: false + + /@stablelib/ed25519@1.0.3: + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hash@1.0.1: + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + dev: false + + /@stablelib/hkdf@1.0.1: + resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} + dependencies: + '@stablelib/hash': 1.0.1 + '@stablelib/hmac': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hmac@1.0.1: + resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/int@1.0.1: + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + dev: false + + /@stablelib/keyagreement@1.0.1: + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + dependencies: + '@stablelib/bytes': 1.0.1 + dev: false + + /@stablelib/poly1305@1.0.1: + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/random@1.0.2: + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha256@1.0.1: + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha512@1.0.1: + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/wipe@1.0.1: + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + dev: false + + /@stablelib/x25519@1.0.3: + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + dev: false + + /@types/node@18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + dev: false + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: false + + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + dependencies: + '@types/node': 18.15.13 + dev: false + + /@wagmi/chains@1.8.0: + resolution: {integrity: sha512-UXo0GF0Cl0+neKC2KAmVAahv8L/5rACbFRRqkDvHMefzY6Fh7yzJd8F4GaGNNG3w4hj8eUB/E3+dEpaTYDN62w==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dev: false + + /@walletconnect/core@2.12.2: + resolution: {integrity: sha512-7Adv/b3pp9F42BkvReaaM4KS8NEvlkS7AMtwO3uF/o6aRMKtcfTJq9/jgWdKJh4RP8pPRTRFjCw6XQ/RZtT4aQ==} + dependencies: + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.14 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.10 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.12.2 + '@walletconnect/utils': 2.12.2 + events: 3.3.0 + isomorphic-unfetch: 3.1.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/environment@1.0.1: + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/ethereum-provider@2.12.2(react@18.2.0): + resolution: {integrity: sha512-vBl2zCnNm2iPaomJdr5YT16cT7aa8cH2WFs6879XPngU5i7HXS3bU6TamhyhKKl13sdIfifmCkCC+RWn5GdPMw==} + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.7 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/modal': 2.6.2(react@18.2.0) + '@walletconnect/sign-client': 2.12.2 + '@walletconnect/types': 2.12.2 + '@walletconnect/universal-provider': 2.12.2 + '@walletconnect/utils': 2.12.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - react + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/events@1.0.1: + resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/heartbeat@1.2.1: + resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-http-connection@1.0.7: + resolution: {integrity: sha512-qlfh8fCfu8LOM9JRR9KE0s0wxP6ZG9/Jom8M0qsoIQeKF3Ni0FyV4V1qy/cc7nfI46SLQLSl4tgWSfLiE1swyQ==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + cross-fetch: 3.1.8 + tslib: 1.14.1 + transitivePeerDependencies: + - encoding + dev: false + + /@walletconnect/jsonrpc-provider@1.0.13: + resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-types@1.0.3: + resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-utils@1.0.8: + resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} + dependencies: + '@walletconnect/environment': 1.0.1 + '@walletconnect/jsonrpc-types': 1.0.3 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-ws-connection@1.0.14: + resolution: {integrity: sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@walletconnect/keyvaluestorage@1.1.1: + resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} + peerDependencies: + '@react-native-async-storage/async-storage': 1.x + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + dependencies: + '@walletconnect/safe-json': 1.0.2 + idb-keyval: 6.2.1 + unstorage: 1.10.2(idb-keyval@6.2.1) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + + /@walletconnect/logger@2.1.2: + resolution: {integrity: sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==} + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 7.11.0 + dev: false + + /@walletconnect/modal-core@2.6.2(react@18.2.0): + resolution: {integrity: sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA==} + dependencies: + valtio: 1.11.2(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/modal-ui@2.6.2(react@18.2.0): + resolution: {integrity: sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA==} + dependencies: + '@walletconnect/modal-core': 2.6.2(react@18.2.0) + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/modal@2.6.2(react@18.2.0): + resolution: {integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA==} + dependencies: + '@walletconnect/modal-core': 2.6.2(react@18.2.0) + '@walletconnect/modal-ui': 2.6.2(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - react + dev: false + + /@walletconnect/relay-api@1.0.10: + resolution: {integrity: sha512-tqrdd4zU9VBNqUaXXQASaexklv6A54yEyQQEXYOCr+Jz8Ket0dmPBDyg19LVSNUN2cipAghQc45/KVmfFJ0cYw==} + dependencies: + '@walletconnect/jsonrpc-types': 1.0.3 + dev: false + + /@walletconnect/relay-auth@1.0.4: + resolution: {integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ==} + dependencies: + '@stablelib/ed25519': 1.0.3 + '@stablelib/random': 1.0.2 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + tslib: 1.14.1 + uint8arrays: 3.1.1 + dev: false + + /@walletconnect/safe-json@1.0.2: + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/sign-client@2.12.2: + resolution: {integrity: sha512-cM0ualXj6nVvLqS4BDNRk+ZWR+lubcsz/IHreH+3wYrQ2sV+C0fN6ctrd7MMGZss0C0qacWCx0pm62ZBuoKvqA==} + dependencies: + '@walletconnect/core': 2.12.2 + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.12.2 + '@walletconnect/utils': 2.12.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/time@1.0.2: + resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/types@2.12.2: + resolution: {integrity: sha512-9CmwTlPbrFTzayTL9q7xM7s3KTJkS6kYFtH2m1/fHFgALs6pIUjf1qAx1TF2E4tv7SEzLAIzU4NqgYUt2vWXTg==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + + /@walletconnect/universal-provider@2.12.2: + resolution: {integrity: sha512-0k5ZgSkABopQLVhkiwl2gRGG7dAP4SWiI915pIlyN5sRvWV+qX1ALhWAmRcdv0TXWlKHDcDgPJw/q2sCSAHuMQ==} + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.7 + '@walletconnect/jsonrpc-provider': 1.0.13 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.12.2 + '@walletconnect/types': 2.12.2 + '@walletconnect/utils': 2.12.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + dev: false + + /@walletconnect/utils@2.12.2: + resolution: {integrity: sha512-zf50HeS3SfoLv1N9GPl2IXTZ9TsXfet4usVAsZmX9P6/Xzq7d/7QakjVQCHH/Wk1O9XkcsfeoZoUhRxoMJ5uJw==} + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.10 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.12.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + dev: false + + /@walletconnect/window-getters@1.0.1: + resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/window-metadata@1.0.1: + resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + dependencies: + '@walletconnect/window-getters': 1.0.1 + tslib: 1.14.1 + dev: false + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + dev: false + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: false + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: false + + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: false + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: false + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false + + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.1 + dev: false + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: false + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + dependencies: + consola: 3.2.3 + dev: false + + /clipboardy@4.0.0: + resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} + engines: {node: '>=18'} + dependencies: + execa: 8.0.1 + is-wsl: 3.1.0 + is64bit: 2.0.0 + dev: false + + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: false + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: false + + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: false + + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: false + + /cookie-es@1.1.0: + resolution: {integrity: sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw==} + dev: false + + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: false + + /crossws@0.2.4: + resolution: {integrity: sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg==} + peerDependencies: + uWebSockets.js: '*' + peerDependenciesMeta: + uWebSockets.js: + optional: true + dev: false + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: false + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: false + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: false + + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dev: false + + /destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + dev: false + + /detect-browser@5.3.0: + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + dev: false + + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + dev: false + + /dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + dev: false + + /duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + dev: false + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: false + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: false + + /ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + dev: false + + /ethers@6.11.1: + resolution: {integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: false + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: false + + /fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false + + /filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: false + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.1 + dev: false + + /get-port-please@3.1.2: + resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + dev: false + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: false + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: false + + /h3@1.11.1: + resolution: {integrity: sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A==} + dependencies: + cookie-es: 1.1.0 + crossws: 0.2.4 + defu: 6.1.4 + destr: 2.0.3 + iron-webcrypto: 1.1.1 + ohash: 1.1.3 + radix3: 1.1.2 + ufo: 1.5.3 + uncrypto: 0.1.3 + unenv: 1.9.0 + transitivePeerDependencies: + - uWebSockets.js + dev: false + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: false + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: false + + /hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + dev: false + + /http-shutdown@1.2.2: + resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: false + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: false + + /idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /iron-webcrypto@1.1.1: + resolution: {integrity: sha512-5xGwQUWHQSy039rFr+5q/zOmj7GP0Ypzvo34Ep+61bPIhaLduEDp/PvLGlU3awD2mzWUR0weN2vJ1mILydFPEg==} + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: false + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: false + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: false + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: false + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.14 + dev: false + + /is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + dependencies: + is-inside-container: 1.0.0 + dev: false + + /is64bit@2.0.0: + resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} + engines: {node: '>=18'} + dependencies: + system-architecture: 0.1.0 + dev: false + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: false + + /isomorphic-unfetch@3.1.0: + resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} + dependencies: + node-fetch: 2.7.0 + unfetch: 4.2.0 + transitivePeerDependencies: + - encoding + dev: false + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: false + + /keyvaluestorage-interface@1.0.0: + resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + dev: false + + /listhen@1.7.2: + resolution: {integrity: sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==} + hasBin: true + dependencies: + '@parcel/watcher': 2.4.1 + '@parcel/watcher-wasm': 2.4.1 + citty: 0.1.6 + clipboardy: 4.0.0 + consola: 3.2.3 + crossws: 0.2.4 + defu: 6.1.4 + get-port-please: 3.1.2 + h3: 1.11.1 + http-shutdown: 1.2.2 + jiti: 1.21.0 + mlly: 1.6.1 + node-forge: 1.3.1 + pathe: 1.1.2 + std-env: 3.7.0 + ufo: 1.5.3 + untun: 0.1.3 + uqr: 0.1.2 + transitivePeerDependencies: + - uWebSockets.js + dev: false + + /lit-element@3.3.3: + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit/reactive-element': 1.6.3 + lit-html: 2.8.0 + dev: false + + /lit-html@2.8.0: + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: false + + /lit@2.8.0: + resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + dependencies: + '@lit/reactive-element': 1.6.3 + lit-element: 3.3.3 + lit-html: 2.8.0 + dev: false + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: false + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: false + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + dev: false + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: false + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: false + + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: false + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: false + + /mlly@1.6.1: + resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.1.0 + ufo: 1.5.3 + dev: false + + /motion@10.16.2: + resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} + dependencies: + '@motionone/animation': 10.17.0 + '@motionone/dom': 10.17.0 + '@motionone/svelte': 10.16.4 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + '@motionone/vue': 10.16.4 + dev: false + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + dev: false + + /napi-wasm@1.1.0: + resolution: {integrity: sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==} + dev: false + + /node-addon-api@7.1.0: + resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==} + engines: {node: ^16 || ^18 || >= 20} + dev: false + + /node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + dev: false + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: false + + /ofetch@1.3.4: + resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} + dependencies: + destr: 2.0.3 + node-fetch-native: 1.6.4 + ufo: 1.5.3 + dev: false + + /ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + dev: false + + /on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: false + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: false + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: false + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: false + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: false + + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: false + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false + + /pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + dependencies: + duplexify: 4.1.3 + split2: 4.2.0 dev: false - /@noble/curves@1.2.0: - resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + /pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + dev: false + + /pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true dependencies: - '@noble/hashes': 1.3.2 + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 0.2.0 + pino-abstract-transport: 0.5.0 + pino-std-serializers: 4.0.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.1.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 2.8.0 + thread-stream: 0.15.2 dev: false - /@noble/curves@1.3.0: - resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + /pkg-types@1.1.0: + resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} dependencies: - '@noble/hashes': 1.3.3 + confbox: 0.1.7 + mlly: 1.6.1 + pathe: 1.1.2 dev: false - /@noble/hashes@1.3.2: - resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} - engines: {node: '>= 16'} + /pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} dev: false - /@noble/hashes@1.3.3: - resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} - engines: {node: '>= 16'} + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} dev: false - /@scure/base@1.1.5: - resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + /process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} dev: false - /@scure/bip32@1.3.3: - resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + /proxy-compare@2.5.1: + resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + dev: false + + /qrcode@1.5.3: + resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} + engines: {node: '>=10.13.0'} + hasBin: true dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.5 + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 dev: false - /@scure/bip39@1.2.2: - resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + /query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} dependencies: - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.5 + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 dev: false - /@types/node@18.15.13: - resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: false - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 18.15.13 + /radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} dev: false - /@wagmi/chains@1.8.0: - resolution: {integrity: sha512-UXo0GF0Cl0+neKC2KAmVAahv8L/5rACbFRRqkDvHMefzY6Fh7yzJd8F4GaGNNG3w4hj8eUB/E3+dEpaTYDN62w==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 dev: false - /aes-js@4.0.0-beta.5: - resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 dev: false - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: - possible-typed-array-names: 1.0.0 + picomatch: 2.3.1 dev: false - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + /real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} dev: false - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false + + /set-function-length@1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} dependencies: - es-define-property: 1.0.0 + define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 - set-function-length: 1.2.1 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 dev: false - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 + shebang-regex: 3.0.0 dev: false - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} dev: false - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} dev: false - /ethereum-cryptography@2.1.3: - resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + /sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/bip32': 1.3.3 - '@scure/bip39': 1.2.2 + atomic-sleep: 1.0.0 dev: false - /ethers@6.11.1: - resolution: {integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==} - engines: {node: '>=14.0.0'} - dependencies: - '@adraffy/ens-normalize': 1.10.1 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@types/node': 18.15.13 - aes-js: 4.0.0-beta.5 - tslib: 2.4.0 - ws: 8.5.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + /split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} dev: false - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} dev: false - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} dev: false - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} dev: false - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + /strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.1 + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 dev: false - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: - get-intrinsic: 1.2.4 + safe-buffer: 5.2.1 dev: false - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: - es-define-property: 1.0.0 + ansi-regex: 5.0.1 dev: false - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} dev: false - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + /system-architecture@0.1.0: + resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} + engines: {node: '>=18'} dev: false - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + /thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} dependencies: - has-symbols: 1.0.3 + real-require: 0.1.0 dev: false - /hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} - engines: {node: '>= 0.4'} + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: - function-bind: 1.1.2 + is-number: 7.0.0 dev: false - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: false + + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + dev: false + + /uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + multiformats: 9.9.0 dev: false - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + /uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} dev: false - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + /unenv@1.9.0: + resolution: {integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==} dependencies: - has-tostringtag: 1.0.2 + consola: 3.2.3 + defu: 6.1.4 + mime: 3.0.0 + node-fetch-native: 1.6.4 + pathe: 1.1.2 dev: false - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + /unfetch@4.2.0: + resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + dev: false + + /unstorage@1.10.2(idb-keyval@6.2.1): + resolution: {integrity: sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==} + peerDependencies: + '@azure/app-configuration': ^1.5.0 + '@azure/cosmos': ^4.0.0 + '@azure/data-tables': ^13.2.2 + '@azure/identity': ^4.0.1 + '@azure/keyvault-secrets': ^4.8.0 + '@azure/storage-blob': ^12.17.0 + '@capacitor/preferences': ^5.0.7 + '@netlify/blobs': ^6.5.0 || ^7.0.0 + '@planetscale/database': ^1.16.0 + '@upstash/redis': ^1.28.4 + '@vercel/kv': ^1.0.1 + idb-keyval: ^6.2.1 + ioredis: ^5.3.2 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/kv': + optional: true + idb-keyval: + optional: true + ioredis: + optional: true dependencies: - which-typed-array: 1.1.14 + anymatch: 3.1.3 + chokidar: 3.6.0 + destr: 2.0.3 + h3: 1.11.1 + idb-keyval: 6.2.1 + listhen: 1.7.2 + lru-cache: 10.2.0 + mri: 1.2.0 + node-fetch-native: 1.6.4 + ofetch: 1.3.4 + ufo: 1.5.3 + transitivePeerDependencies: + - uWebSockets.js dev: false - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} + /untun@0.1.3: + resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} + hasBin: true + dependencies: + citty: 0.1.6 + consola: 3.2.3 + pathe: 1.1.2 dev: false - /set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} - engines: {node: '>= 0.4'} + /uqr@0.1.2: + resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + dev: false + + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 + react: 18.2.0 dev: false - /tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false /util@0.12.5: @@ -295,6 +1976,23 @@ packages: which-typed-array: 1.1.14 dev: false + /valtio@1.11.2(react@18.2.0): + resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=16.8' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + proxy-compare: 2.5.1 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /web3-errors@1.1.4: resolution: {integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==} engines: {node: '>=14', npm: '>=6.12.0'} @@ -329,6 +2027,21 @@ packages: zod: 3.22.4 dev: false + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: false + /which-typed-array@1.1.14: resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} @@ -340,6 +2053,40 @@ packages: has-tostringtag: 1.0.2 dev: false + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /ws@8.16.0: resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'} @@ -366,6 +2113,35 @@ packages: optional: true dev: false + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: false + + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false + /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false diff --git a/packages/networks/evm-chains/src/browser/adapters/WalletConnect.ts b/packages/networks/evm-chains/src/browser/adapters/WalletConnect.ts new file mode 100644 index 0000000..defac19 --- /dev/null +++ b/packages/networks/evm-chains/src/browser/adapters/WalletConnect.ts @@ -0,0 +1,95 @@ +import icons from './icons.ts' +import type { EIP1193Provider } from './EIP6963.ts' +import { WalletPlatformEnum } from '@multiplechain/types' +import { EthereumProvider } from '@walletconnect/ethereum-provider' +import type { EvmNetworkConfigInterface } from '../../services/Provider.ts' +import type { + WalletConnectOps, + WalletAdapterInterface, + ProviderInterface +} from '@multiplechain/types' + +let isConnected = false + +const WalletConnect: WalletAdapterInterface = { + id: 'walletconnect', + name: 'WalletConnect', + icon: icons.walletConnect, + platforms: [WalletPlatformEnum.UNIVERSAL], + isDetected: () => true, + isConnected: () => isConnected, + disconnect: () => { + isConnected = false + indexedDB.deleteDatabase('WALLET_CONNECT_V2_INDEXED_DB') + }, + connect: async ( + provider?: ProviderInterface, + _ops?: WalletConnectOps | object + ): Promise => { + const ops = _ops as WalletConnectOps + + if (provider === undefined) { + throw new Error('Provider is required') + } + + if (ops === undefined) { + throw new Error('Ops is required') + } + + if (ops.projectId === undefined) { + throw new Error('Project ID is required') + } + + const rpcIdMapping = {} + const network = provider.network as EvmNetworkConfigInterface + // @ts-expect-error allow number index + rpcIdMapping[network.id] = network.rpcUrl + + const connector = await EthereumProvider.init({ + projectId: ops.projectId, + relayUrl: 'wss://relay.walletconnect.com', + optionalChains: [network.id], + rpcMap: rpcIdMapping, + showQrModal: true, + qrModalOptions: { + themeMode: ops.themeMode, + themeVariables: { + '--wcm-z-index': '999999999999' + }, + explorerExcludedWalletIds: 'ALL', + explorerRecommendedWalletIds: [ + 'c57ca95b47569778a828d19178114f4db188b89b763c899ba0be274e97267d96', + '4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0', + '1ae92b26df02f0abca6304df07debccd18262fdf5fe82daa81593582dac9a369', + '0b415a746fb9ee99cce155c2ceca0c6f6061b1dbca2d722b3ba16381d0562150', + '971e689d0a5be527bac79629b4ee9b925e82208e5168b733496a09c0faed0709', + 'c03dfee351b6fcc421b4494ea33b9d4b92a984f87aa76d1663bb28705e95034a', + 'ecc4036f814562b41a5268adc86270fba1365471402006302e70169465b7ac18', + 'ef333840daf915aafdc4a004525502d6d49d77bd9c65e0642dbaefb3c2893bef', + 'bc949c5d968ae81310268bf9193f9c9fb7bb4e1283e1284af8f2bd4992535fd6', + '74f8092562bd79675e276d8b2062a83601a4106d30202f2d509195e30e19673d', + 'afbd95522f4041c71dd4f1a065f971fd32372865b416f95a0b1db759ae33f2a7', + '20459438007b75f4f4acb98bf29aa3b800550309646d375da5fd4aac6c2a2c66', + '8837dd9413b1d9b585ee937d27a816590248386d9dbf59f5cd3422dbbb65683e', + 'c286eebc742a537cd1d6818363e9dc53b21759a1e8e5d9b263d0c03ec7703576', + '38f5d18bd8522c244bdd70cb4a68e0e718865155811c043f052fb9f1c51de662', + '85db431492aa2e8672e93f4ea7acf10c88b97b867b0d373107af63dc4880f041' + ] + } + }) + + return await new Promise((resolve, reject) => { + connector + .enable() + .then(() => { + isConnected = true + resolve(connector as EIP1193Provider) + }) + .catch((error) => { + reject(error) + }) + }) + } +} + +export default WalletConnect diff --git a/packages/networks/evm-chains/src/browser/adapters/index.ts b/packages/networks/evm-chains/src/browser/adapters/index.ts index 0b8aed0..303bad6 100644 --- a/packages/networks/evm-chains/src/browser/adapters/index.ts +++ b/packages/networks/evm-chains/src/browser/adapters/index.ts @@ -5,3 +5,4 @@ export { default as OkxWallet } from './OkxWallet.ts' export { default as XdefiWallet } from './XdefiWallet.ts' export { default as TrustWallet } from './TrustWallet.ts' export { default as BitgetWallet } from './BitgetWallet.ts' +export { default as WalletConnect } from './WalletConnect.ts' diff --git a/packages/networks/evm-chains/src/browser/index.ts b/packages/networks/evm-chains/src/browser/index.ts index 411fe94..8b14624 100644 --- a/packages/networks/evm-chains/src/browser/index.ts +++ b/packages/networks/evm-chains/src/browser/index.ts @@ -52,6 +52,10 @@ const fromEIP6963ProviderDetail = (detail: EIP6963ProviderDetail): WalletAdapter } const toEIP6963ProviderDetail = (adapter: WalletAdapterInterface): EIP6963ProviderDetail => { + if (adapter.provider === undefined) { + throw new Error('Cannot convert adapter without provider to EIP6963ProviderDetail') + } + return { info: { uuid: adapter.id, From 06f7be97e1aa09b70d0ba19230933f4ac483d1ab Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sun, 21 Apr 2024 19:11:18 +0800 Subject: [PATCH 41/51] completed adapter process --- packages/networks/evm-chains/index.html | 65 +++++++++++-------- .../networks/evm-chains/src/browser/index.ts | 18 ++++- 2 files changed, 56 insertions(+), 27 deletions(-) diff --git a/packages/networks/evm-chains/index.html b/packages/networks/evm-chains/index.html index 23245d7..0803050 100644 --- a/packages/networks/evm-chains/index.html +++ b/packages/networks/evm-chains/index.html @@ -108,6 +108,7 @@
+
\ No newline at end of file diff --git a/packages/networks/evm-chains/src/browser/index.ts b/packages/networks/evm-chains/src/browser/index.ts index 8b14624..52eac57 100644 --- a/packages/networks/evm-chains/src/browser/index.ts +++ b/packages/networks/evm-chains/src/browser/index.ts @@ -9,11 +9,27 @@ import type { RegisterWalletAdapterType } from '@multiplechain/types' +const EIP6963AdapterUUIDIndex: Record = { + 'app.phantom': 'phantom', + 'io.metamask': 'metamask', + 'com.bitget.web3': 'bitgetwallet', + 'com.okex.wallet': 'okxwallet', + 'com.trustwallet.app': 'trustwallet', + 'io.xdefi': 'xdefiwallet' +} + const adapters: WalletAdapterListType = { ...adapterList } const registerAdapter: RegisterWalletAdapterType = (adapter: WalletAdapterInterface): void => { + if (EIP6963AdapterUUIDIndex[adapter.id] !== undefined) { + console.warn( + `Adapter is not registered, because it is already registered defualtly: ${adapter.id}` + ) + return + } + if (Object.values(adapters).find((a) => a.id === adapter.id) !== undefined) { throw new Error(`Adapter with id ${adapter.id} already exists`) } @@ -23,10 +39,10 @@ const registerAdapter: RegisterWalletAdapterType = (adapter: WalletAdapterInterf const fromEIP6963ProviderDetail = (detail: EIP6963ProviderDetail): WalletAdapterInterface => { return { - id: detail.info.uuid, name: detail.info.name, icon: detail.info.icon, provider: detail.provider, + id: detail.info.rdns ?? detail.info.uuid, platforms: [WalletPlatformEnum.BROWSER, WalletPlatformEnum.MOBILE], isDetected: () => true, isConnected: async () => { From 104500744e0cd3742734793e6ad0ac252889ce30 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 27 Apr 2024 16:41:26 +0800 Subject: [PATCH 42/51] updated --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index 7a996a7..ebe6480 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.50", + "version": "0.1.51", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index cb4b9c7..c7c45a0 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -18,7 +18,7 @@ export interface WalletAdapterInterface { provider?: any downloadLink?: string platforms: WalletPlatformEnum[] - disconnect?: () => void + disconnect?: () => void | Promise isDetected: () => boolean | Promise isConnected: () => boolean | Promise createDeepLink?: (url: string, ops?: object) => string @@ -49,16 +49,16 @@ export interface WalletInterface { getPlatforms: () => WalletPlatformEnum[] /** - * @returns {String} + * @returns {String | undefined} */ - getDownloadLink: () => string + getDownloadLink: () => string | undefined /** * @param {String} url * @param {Object} ops - * @returns {String} + * @returns {String | null} */ - createDeepLink: (url: string, ops?: object) => string + createDeepLink: (url: string, ops?: object) => string | null /** * @returns {Promise} @@ -66,14 +66,14 @@ export interface WalletInterface { connect: () => Promise /** - * @returns {Boolean} + * @returns {Boolean | Promise} */ - isDetected: () => boolean + isDetected: () => boolean | Promise /** - * @returns {Boolean} + * @returns {Boolean | Promise} */ - isConnected: () => boolean + isConnected: () => boolean | Promise /** * @returns {Promise} From ed351bae8ed19cfb0ced8c22498508f151024d2c Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 27 Apr 2024 16:42:10 +0800 Subject: [PATCH 43/51] updated --- packages/networks/boilerplate/package.json | 2 +- packages/networks/boilerplate/pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/networks/boilerplate/package.json b/packages/networks/boilerplate/package.json index 563b6c7..ad5a27b 100644 --- a/packages/networks/boilerplate/package.json +++ b/packages/networks/boilerplate/package.json @@ -48,7 +48,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.50", + "@multiplechain/types": "^0.1.51", "@multiplechain/utils": "^0.1.18" } } \ No newline at end of file diff --git a/packages/networks/boilerplate/pnpm-lock.yaml b/packages/networks/boilerplate/pnpm-lock.yaml index d353d6e..173f6df 100644 --- a/packages/networks/boilerplate/pnpm-lock.yaml +++ b/packages/networks/boilerplate/pnpm-lock.yaml @@ -6,16 +6,16 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.50 - version: 0.1.50 + specifier: ^0.1.51 + version: 0.1.51 '@multiplechain/utils': specifier: ^0.1.18 version: 0.1.18 packages: - /@multiplechain/types@0.1.50: - resolution: {integrity: sha512-WipR3PVu8oowEcOLZigbFXCxqQKgihffydfxIlO/R6Rr4bJmFgCvEUq3YjyXRdNvDACcfybzBglb7s8C4tO1Jg==} + /@multiplechain/types@0.1.51: + resolution: {integrity: sha512-MCOYrLRozUK+y3+a67QWhnSOzJQi+qlZMxDDyJLcRRMU4wUI1Ml99pL0u8EQhbqbakXVh5kURJ3jcS7K5hOCSQ==} dev: false /@multiplechain/utils@0.1.18: From e25103837044bc5eb44665fe41a83bb2e603b766 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 27 Apr 2024 17:00:13 +0800 Subject: [PATCH 44/51] updated --- packages/types/package.json | 2 +- packages/types/src/browser.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/types/package.json b/packages/types/package.json index ebe6480..21b81c0 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/types", - "version": "0.1.51", + "version": "0.1.52", "type": "module", "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/types/src/browser.ts b/packages/types/src/browser.ts index c7c45a0..778b3f8 100644 --- a/packages/types/src/browser.ts +++ b/packages/types/src/browser.ts @@ -61,9 +61,11 @@ export interface WalletInterface { createDeepLink: (url: string, ops?: object) => string | null /** + * @param {ProviderInterface} provider + * @param {Object | WalletConnectOps} ops * @returns {Promise} */ - connect: () => Promise + connect: (provider?: ProviderInterface, ops?: object | WalletConnectOps) => Promise /** * @returns {Boolean | Promise} From b9537ee339e6471ef3adca953a1ac036e62eb90c Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 27 Apr 2024 17:00:41 +0800 Subject: [PATCH 45/51] updated --- packages/networks/boilerplate/package.json | 2 +- packages/networks/boilerplate/pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/networks/boilerplate/package.json b/packages/networks/boilerplate/package.json index ad5a27b..ca3132d 100644 --- a/packages/networks/boilerplate/package.json +++ b/packages/networks/boilerplate/package.json @@ -48,7 +48,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.51", + "@multiplechain/types": "^0.1.52", "@multiplechain/utils": "^0.1.18" } } \ No newline at end of file diff --git a/packages/networks/boilerplate/pnpm-lock.yaml b/packages/networks/boilerplate/pnpm-lock.yaml index 173f6df..5dc3bf3 100644 --- a/packages/networks/boilerplate/pnpm-lock.yaml +++ b/packages/networks/boilerplate/pnpm-lock.yaml @@ -6,16 +6,16 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.51 - version: 0.1.51 + specifier: ^0.1.52 + version: 0.1.52 '@multiplechain/utils': specifier: ^0.1.18 version: 0.1.18 packages: - /@multiplechain/types@0.1.51: - resolution: {integrity: sha512-MCOYrLRozUK+y3+a67QWhnSOzJQi+qlZMxDDyJLcRRMU4wUI1Ml99pL0u8EQhbqbakXVh5kURJ3jcS7K5hOCSQ==} + /@multiplechain/types@0.1.52: + resolution: {integrity: sha512-Uf+XVYX5n71c9leXDS3QTSkqemy9g8M1mgoaulsGJbjYrRfGOwWOGsVsQxpapkCx3lWM/zZkUq5n3HrkGt6FFg==} dev: false /@multiplechain/utils@0.1.18: From 7c0c908d1964bcb6286265a12b9e9768159cc111 Mon Sep 17 00:00:00 2001 From: Halil Beycan <50718965+BeycanDeveloper@users.noreply.github.com> Date: Sat, 27 Apr 2024 18:07:24 +0800 Subject: [PATCH 46/51] wallet class completed and tests --- packages/networks/evm-chains/index.html | 136 +++++++++++- packages/networks/evm-chains/package.json | 2 +- packages/networks/evm-chains/pnpm-lock.yaml | 8 +- .../networks/evm-chains/src/browser/Wallet.ts | 197 ++++++++++++++++-- 4 files changed, 314 insertions(+), 29 deletions(-) diff --git a/packages/networks/evm-chains/index.html b/packages/networks/evm-chains/index.html index 0803050..a47fdee 100644 --- a/packages/networks/evm-chains/index.html +++ b/packages/networks/evm-chains/index.html @@ -102,6 +102,56 @@ .wallet-list-container.disabled > li { pointer-events: none; } + + .methods { + display: none; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: #fff; + border-radius: 10px; + padding: 20px; + box-shadow: 0 8px 30px rgba(74,58,150, .2); + max-width: 400px; + width: 100%; + box-sizing: border-box; + font-family: Arial, Helvetica, sans-serif; + } + + .info { + margin-bottom: 20px; + } + + .info span { + font-size: 16px; + font-weight: 500; + color: #000; + } + + .action-btn { + width: 100%; + padding: 10px; + background: #4099ff; + color: #fff; + font-size: 16px; + font-weight: 500; + border: none; + border-radius: 5px; + cursor: pointer; + margin-bottom: 20px; + } + + .action-result { + font-size: 16px; + font-weight: 500; + color: #000; + margin-bottom: 20px; + } + + .action-result span { + word-wrap: break-word; + } @@ -109,6 +159,52 @@
+ +
+
+ Adapter id: +
+
+ Adapter name: +
+
+ Adapter icon: icon +
+
+ Platforms: +
+
+ Download link: +
+
+ Deep link: +
+
+ Chain id: +
+
+ Connected address: +
+ +
+ Result: +
+ +
+ Result: +
+ +
+ Result: +
+
+ \ No newline at end of file diff --git a/packages/networks/boilerplate/package.json b/packages/networks/boilerplate/package.json index ca3132d..87146fa 100644 --- a/packages/networks/boilerplate/package.json +++ b/packages/networks/boilerplate/package.json @@ -48,7 +48,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.52", + "@multiplechain/types": "^0.1.53", "@multiplechain/utils": "^0.1.18" } } \ No newline at end of file diff --git a/packages/networks/boilerplate/pnpm-lock.yaml b/packages/networks/boilerplate/pnpm-lock.yaml index 5dc3bf3..ff48dd3 100644 --- a/packages/networks/boilerplate/pnpm-lock.yaml +++ b/packages/networks/boilerplate/pnpm-lock.yaml @@ -6,16 +6,16 @@ settings: dependencies: '@multiplechain/types': - specifier: ^0.1.52 - version: 0.1.52 + specifier: ^0.1.53 + version: 0.1.53 '@multiplechain/utils': specifier: ^0.1.18 version: 0.1.18 packages: - /@multiplechain/types@0.1.52: - resolution: {integrity: sha512-Uf+XVYX5n71c9leXDS3QTSkqemy9g8M1mgoaulsGJbjYrRfGOwWOGsVsQxpapkCx3lWM/zZkUq5n3HrkGt6FFg==} + /@multiplechain/types@0.1.53: + resolution: {integrity: sha512-brF6CtNDUwTChwZBy0pTEvf4QdwAK3sL2kvVXE9rARAroK8qUU4Skn5NAHpr2W1ubmuhDezgHDS4XhEdr8BsgA==} dev: false /@multiplechain/utils@0.1.18: