From 2ebc5c61ab6763f8a17197a840271b0b52462e4c Mon Sep 17 00:00:00 2001 From: calvinchang Date: Wed, 18 Oct 2023 16:42:38 +0800 Subject: [PATCH 1/6] fix: fix switchableNetwork not init error --- packages/blocto-sdk/src/providers/ethereum.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/blocto-sdk/src/providers/ethereum.ts b/packages/blocto-sdk/src/providers/ethereum.ts index a67636fe..bc4e23c5 100644 --- a/packages/blocto-sdk/src/providers/ethereum.ts +++ b/packages/blocto-sdk/src/providers/ethereum.ts @@ -307,6 +307,9 @@ export default class EthereumProvider async request(payload: EIP1193RequestPayload): Promise { if (!payload?.method) throw ethErrors.rpc.invalidRequest(); + + const { blockchainName, switchableNetwork, sessionKey } = + await this.#getBloctoProperties(); const existedSDK = (window as any).ethereum; if (existedSDK && existedSDK.isBlocto) { if (payload.method === 'wallet_switchEthereumChain') { @@ -325,9 +328,6 @@ export default class EthereumProvider return existedSDK.request(payload); } - const { blockchainName, switchableNetwork, sessionKey } = - await this.#getBloctoProperties(); - // method that doesn't require user to be connected switch (payload.method) { case 'eth_chainId': { From 718c862c7cedc1ed06937e50d57543d7e48a10be Mon Sep 17 00:00:00 2001 From: calvinchang Date: Wed, 18 Oct 2023 16:46:18 +0800 Subject: [PATCH 2/6] fix: enable existSDK support event --- packages/blocto-sdk/src/providers/ethereum.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/blocto-sdk/src/providers/ethereum.ts b/packages/blocto-sdk/src/providers/ethereum.ts index bc4e23c5..d380481f 100644 --- a/packages/blocto-sdk/src/providers/ethereum.ts +++ b/packages/blocto-sdk/src/providers/ethereum.ts @@ -71,6 +71,26 @@ export default class EthereumProvider switchableNetwork: SwitchableNetwork; }; + override on(event: string, listener: (arg: any) => void): void { + const existedSDK = (window as any).ethereum; + if (existedSDK && existedSDK.isBlocto) { + existedSDK.on(event, listener); + } + + super.on(event, listener); + } + + override removeListener(event: string, listener: (arg: any) => void): void { + const existedSDK = (window as any).ethereum; + if (existedSDK && existedSDK.isBlocto) { + existedSDK.off(event, listener); + } + + super.off(event, listener); + } + + off = this.removeListener; + constructor({ chainId, rpc, walletServer, appId }: EthereumProviderConfig) { super(); // setup chainId From 552bf3e6121fd71ae84b4e756efe902c3ac14043 Mon Sep 17 00:00:00 2001 From: calvinchang Date: Wed, 18 Oct 2023 16:47:56 +0800 Subject: [PATCH 3/6] fix: using wallet_disconnect replace disconnect fn --- packages/blocto-sdk/src/providers/ethereum.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/blocto-sdk/src/providers/ethereum.ts b/packages/blocto-sdk/src/providers/ethereum.ts index d380481f..c419c1b0 100644 --- a/packages/blocto-sdk/src/providers/ethereum.ts +++ b/packages/blocto-sdk/src/providers/ethereum.ts @@ -894,7 +894,7 @@ export default class EthereumProvider async handleDisconnect(): Promise { const existedSDK = (window as any).ethereum; if (existedSDK && existedSDK.isBlocto) { - return existedSDK.disconnect(); + return existedSDK.request({ method: 'wallet_disconnect' }); } const { sessionKey } = await this.#getBloctoProperties(); removeAllEvmAddress(sessionKey); From 868c971835489bcc61fe1c86cbb246481591b49f Mon Sep 17 00:00:00 2001 From: calvinchang Date: Wed, 18 Oct 2023 17:08:02 +0800 Subject: [PATCH 4/6] refactor: remove existedSDK redundant code --- packages/blocto-sdk/src/providers/ethereum.ts | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/blocto-sdk/src/providers/ethereum.ts b/packages/blocto-sdk/src/providers/ethereum.ts index c419c1b0..e275d8c0 100644 --- a/packages/blocto-sdk/src/providers/ethereum.ts +++ b/packages/blocto-sdk/src/providers/ethereum.ts @@ -71,25 +71,9 @@ export default class EthereumProvider switchableNetwork: SwitchableNetwork; }; - override on(event: string, listener: (arg: any) => void): void { - const existedSDK = (window as any).ethereum; - if (existedSDK && existedSDK.isBlocto) { - existedSDK.on(event, listener); - } - - super.on(event, listener); - } - - override removeListener(event: string, listener: (arg: any) => void): void { - const existedSDK = (window as any).ethereum; - if (existedSDK && existedSDK.isBlocto) { - existedSDK.off(event, listener); - } - - super.off(event, listener); + private get existedSDK() { + return (window as any).ethereum; } - - off = this.removeListener; constructor({ chainId, rpc, walletServer, appId }: EthereumProviderConfig) { super(); @@ -928,4 +912,20 @@ export default class EthereumProvider throw ethErrors.rpc.invalidParams('Empty networkList'); } } + + override on(event: string, listener: (arg: any) => void): void { + if (this.existedSDK?.isBlocto) + this.existedSDK.on(event, listener); + + super.on(event, listener); + } + + override removeListener(event: string, listener: (arg: any) => void): void { + if (this.existedSDK?.isBlocto) + this.existedSDK.off(event, listener); + + super.off(event, listener); + } + + off = this.removeListener; } From 44c70c71a73833ca36881ec84981b38deca663a8 Mon Sep 17 00:00:00 2001 From: Calvin Chang Date: Tue, 31 Oct 2023 12:59:41 +0800 Subject: [PATCH 5/6] refactor: enhance existedSDK check condition --- packages/blocto-sdk/src/providers/ethereum.ts | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/packages/blocto-sdk/src/providers/ethereum.ts b/packages/blocto-sdk/src/providers/ethereum.ts index e275d8c0..b8737bdf 100644 --- a/packages/blocto-sdk/src/providers/ethereum.ts +++ b/packages/blocto-sdk/src/providers/ethereum.ts @@ -174,11 +174,9 @@ export default class EthereumProvider } #checkNetworkMatched(): void { - const existedSDK = (window as any).ethereum; if ( - existedSDK && - existedSDK.isBlocto && - parseChainId(existedSDK.chainId) !== parseChainId(this.chainId) + this.existedSDK?.isBlocto && + parseChainId(this.existedSDK.chainId) !== parseChainId(this.chainId) ) { throw ethErrors.provider.chainDisconnected(); } @@ -314,13 +312,13 @@ export default class EthereumProvider const { blockchainName, switchableNetwork, sessionKey } = await this.#getBloctoProperties(); - const existedSDK = (window as any).ethereum; - if (existedSDK && existedSDK.isBlocto) { + + if (this.existedSDK?.isBlocto) { if (payload.method === 'wallet_switchEthereumChain') { if (!payload?.params?.[0]?.chainId) { throw ethErrors.rpc.invalidParams(); } - return existedSDK.request(payload).then(() => { + return this.existedSDK.request(payload).then(() => { this.networkVersion = `${parseChainId(payload?.params?.[0].chainId)}`; this.chainId = `0x${parseChainId( payload?.params?.[0].chainId @@ -329,7 +327,7 @@ export default class EthereumProvider return null; }); } - return existedSDK.request(payload); + return this.existedSDK.request(payload); } // method that doesn't require user to be connected @@ -541,22 +539,21 @@ export default class EthereumProvider const { walletServer, blockchainName, sessionKey } = await this.#getBloctoProperties(); - const existedSDK = (window as any).ethereum; - if (existedSDK && existedSDK.isBlocto) { - if (existedSDK.chainId !== this.chainId) { - await existedSDK.request({ + if (this.existedSDK?.isBlocto) { + if (this.existedSDK.chainId !== this.chainId) { + await this.existedSDK.request({ method: 'wallet_addEthereumChain', params: [{ chainId: this.chainId }], }); - await existedSDK.request({ + await this.existedSDK.request({ method: 'wallet_switchEthereumChain', params: [{ chainId: this.chainId }], }); - setEvmAddress(sessionKey, blockchainName, [existedSDK.address]); + setEvmAddress(sessionKey, blockchainName, [this.existedSDK.address]); } return new Promise((resolve, reject) => // add a small delay to make sure the network has been switched - setTimeout(() => existedSDK.enable().then(resolve).catch(reject), 10) + setTimeout(() => this.existedSDK.enable().then(resolve).catch(reject), 10) ); } @@ -876,9 +873,9 @@ export default class EthereumProvider } async handleDisconnect(): Promise { - const existedSDK = (window as any).ethereum; - if (existedSDK && existedSDK.isBlocto) { - return existedSDK.request({ method: 'wallet_disconnect' }); + + if (this.existedSDK?.isBlocto) { + return this.existedSDK.request({ method: 'wallet_disconnect' }); } const { sessionKey } = await this.#getBloctoProperties(); removeAllEvmAddress(sessionKey); From 51a3a80dc893c9a6932e6c41dc0f436051c73c29 Mon Sep 17 00:00:00 2001 From: Calvin Chang Date: Wed, 1 Nov 2023 10:37:19 +0800 Subject: [PATCH 6/6] feat: enable aptos's existedSDK event --- packages/blocto-sdk/src/providers/aptos.ts | 45 ++++++++++++++-------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/packages/blocto-sdk/src/providers/aptos.ts b/packages/blocto-sdk/src/providers/aptos.ts index b6bf9b8f..b14487f4 100644 --- a/packages/blocto-sdk/src/providers/aptos.ts +++ b/packages/blocto-sdk/src/providers/aptos.ts @@ -66,6 +66,10 @@ export default class AptosProvider api?: string; sessionKey: KEY_SESSION; + private get existedSDK() { + return (window as any).bloctoAptos; + } + constructor({ chainId, server, appId }: AptosProviderConfig) { super(); @@ -111,9 +115,8 @@ export default class AptosProvider async signTransaction( transaction: unknown ): Promise { - const existedSDK = (window as any).bloctoAptos; - if (existedSDK) { - return existedSDK.signTransaction(transaction); + if (this.existedSDK) { + return this.existedSDK.signTransaction(transaction); } const hasConnected = await this.isConnected(); @@ -127,9 +130,8 @@ export default class AptosProvider } async disconnect(): Promise { - const existedSDK = (window as any).bloctoAptos; - if (existedSDK) { - await existedSDK.disconnect(); + if (this.existedSDK) { + await this.existedSDK.disconnect(); return; } removeChainAddress(this.sessionKey, CHAIN.APTOS); @@ -145,10 +147,9 @@ export default class AptosProvider transaction: AptosTypes.TransactionPayload, txOptions: TxOptions = {} ): Promise<{ hash: AptosTypes.HexEncodedBytes }> { - const existedSDK = (window as any).bloctoAptos; - if (existedSDK) { - return existedSDK.signAndSubmitTransaction(transaction, txOptions); + if (this.existedSDK) { + return this.existedSDK.signAndSubmitTransaction(transaction, txOptions); } const hasConnected = await this.isConnected(); @@ -216,12 +217,11 @@ export default class AptosProvider } async signMessage(payload: SignMessagePayload): Promise { - const existedSDK = (window as any).bloctoAptos; const formattedPayload = checkMessagePayloadFormat(payload); - if (existedSDK) { - return existedSDK.signMessage(formattedPayload); + if (this.existedSDK) { + return this.existedSDK.signMessage(formattedPayload); } const hasConnected = await this.isConnected(); @@ -288,11 +288,10 @@ export default class AptosProvider } async connect(): Promise { - const existedSDK = (window as any).bloctoAptos; - if (existedSDK) { + if (this.existedSDK) { return new Promise((resolve, reject) => // add a small delay to make sure the network has been switched - setTimeout(() => existedSDK.connect().then(resolve).catch(reject), 10) + setTimeout(() => this.existedSDK.connect().then(resolve).catch(reject), 10) ); } @@ -405,4 +404,20 @@ export default class AptosProvider setChainAddress(this.sessionKey, CHAIN.APTOS, accounts); return accounts?.[0] || ''; } + + override on(event: string, listener: (arg: any) => void): void { + if (this.existedSDK) + this.existedSDK.on(event, listener); + + super.on(event, listener); + } + + override removeListener(event: string, listener: (arg: any) => void): void { + if (this.existedSDK) + this.existedSDK.off(event, listener); + + super.off(event, listener); + } + + off = this.removeListener; }