From 19598a8e8553c1fb97ec186c698affbdcd03dcc5 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Tue, 28 Nov 2023 11:20:37 +0200 Subject: [PATCH 01/13] feat: implements `registerDeviceToken` in `Echo` --- packages/core/src/constants/echo.ts | 3 ++ packages/core/src/constants/index.ts | 1 + packages/core/src/controllers/echo.ts | 41 ++++++++++++++++++++++++++ packages/core/src/controllers/index.ts | 1 + packages/core/src/core.ts | 4 ++- packages/types/src/core/core.ts | 2 ++ packages/types/src/core/echo.ts | 13 ++++++++ packages/types/src/core/index.ts | 1 + 8 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/constants/echo.ts create mode 100644 packages/core/src/controllers/echo.ts create mode 100644 packages/types/src/core/echo.ts diff --git a/packages/core/src/constants/echo.ts b/packages/core/src/constants/echo.ts new file mode 100644 index 000000000..b845ef8f8 --- /dev/null +++ b/packages/core/src/constants/echo.ts @@ -0,0 +1,3 @@ +export const ECHO_CONTEXT = "echo"; + +export const ECHO_URL = "https://echo.walletconnect.com"; diff --git a/packages/core/src/constants/index.ts b/packages/core/src/constants/index.ts index e374f4e86..937b946ce 100644 --- a/packages/core/src/constants/index.ts +++ b/packages/core/src/constants/index.ts @@ -10,3 +10,4 @@ export * from "./pairing"; export * from "./history"; export * from "./expirer"; export * from "./verify"; +export * from "./echo"; diff --git a/packages/core/src/controllers/echo.ts b/packages/core/src/controllers/echo.ts new file mode 100644 index 000000000..85a7ba8f9 --- /dev/null +++ b/packages/core/src/controllers/echo.ts @@ -0,0 +1,41 @@ +/* eslint-disable no-console */ +import { generateChildLogger, Logger } from "@walletconnect/logger"; +import { IEcho } from "@walletconnect/types"; +import { ECHO_CONTEXT, ECHO_URL } from "../constants"; + +export class Echo extends IEcho { + public readonly context = ECHO_CONTEXT; + constructor(public projectId: string, public logger: Logger) { + super(projectId, logger); + this.logger = generateChildLogger(logger, this.context); + console.log("Echo constructor called", projectId); + } + + public registerDeviceToken: IEcho["registerDeviceToken"] = async (params) => { + const { clientId, token, notificationType, enableAlwaysDecrypted = false } = params; + + const echoUrl = `${ECHO_URL}/${this.projectId}/clients`; + + console.log("register called", params, echoUrl); + const echoResponse = await fetch(echoUrl, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + client_id: clientId, + type: notificationType, + token, + always_raw: enableAlwaysDecrypted, + }), + }); + console.log("echo body", { + client_id: clientId, + type: notificationType, + token, + always_raw: enableAlwaysDecrypted, + }); + + console.log("echoResponse", echoResponse); + }; +} diff --git a/packages/core/src/controllers/index.ts b/packages/core/src/controllers/index.ts index c9abcedc8..57ac377a4 100644 --- a/packages/core/src/controllers/index.ts +++ b/packages/core/src/controllers/index.ts @@ -8,3 +8,4 @@ export * from "./pairing"; export * from "./history"; export * from "./expirer"; export * from "./verify"; +export * from "./echo"; diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index ec1b10f86..e2dc782f7 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -10,7 +10,7 @@ import { } from "@walletconnect/logger"; import { CoreTypes, ICore } from "@walletconnect/types"; -import { Crypto, Relayer, Pairing, JsonRpcHistory, Expirer, Verify } from "./controllers"; +import { Crypto, Relayer, Pairing, JsonRpcHistory, Expirer, Verify, Echo } from "./controllers"; import { CORE_CONTEXT, CORE_DEFAULT, @@ -39,6 +39,7 @@ export class Core extends ICore { public expirer: ICore["expirer"]; public pairing: ICore["pairing"]; public verify: ICore["verify"]; + public echo: ICore["echo"]; private initialized = false; @@ -77,6 +78,7 @@ export class Core extends ICore { }); this.pairing = new Pairing(this, this.logger); this.verify = new Verify(this.projectId || "", this.logger); + this.echo = new Echo(this.projectId || "", this.logger); } get context() { diff --git a/packages/types/src/core/core.ts b/packages/types/src/core/core.ts index fb25b0efb..ab536d68d 100644 --- a/packages/types/src/core/core.ts +++ b/packages/types/src/core/core.ts @@ -10,6 +10,7 @@ import { IExpirer } from "./expirer"; import { IPairing } from "./pairing"; import { Logger } from "@walletconnect/logger"; import { IVerify } from "./verify"; +import { IEcho } from "./echo"; export declare namespace CoreTypes { interface Options { projectId?: string; @@ -54,6 +55,7 @@ export abstract class ICore extends IEvents { public abstract expirer: IExpirer; public abstract pairing: IPairing; public abstract verify: IVerify; + public abstract echo: IEcho; constructor(public opts?: CoreTypes.Options) { super(); diff --git a/packages/types/src/core/echo.ts b/packages/types/src/core/echo.ts new file mode 100644 index 000000000..e1b6e6304 --- /dev/null +++ b/packages/types/src/core/echo.ts @@ -0,0 +1,13 @@ +import { Logger } from "@walletconnect/logger"; + +export abstract class IEcho { + public abstract readonly context: string; + constructor(public projectId: string, public logger: Logger) {} + + public abstract registerDeviceToken(params: { + clientId: string; + token: string; + notificationType: "fcm" | "apns" | "apns-sandbox" | "noop"; + enableAlwaysDecrypted?: boolean; + }): Promise; +} diff --git a/packages/types/src/core/index.ts b/packages/types/src/core/index.ts index d9b28a6ca..08aa7e323 100644 --- a/packages/types/src/core/index.ts +++ b/packages/types/src/core/index.ts @@ -10,3 +10,4 @@ export * from "./keychain"; export * from "./expirer"; export * from "./pairing"; export * from "./verify"; +export * from "./echo"; From 5b78ef96e70794a3be98b8400c734b1b3ed92cfc Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Wed, 29 Nov 2023 16:15:47 +0200 Subject: [PATCH 02/13] feat: export session store from sign --- packages/sign-client/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sign-client/src/index.ts b/packages/sign-client/src/index.ts index 09f073828..24f776dcb 100644 --- a/packages/sign-client/src/index.ts +++ b/packages/sign-client/src/index.ts @@ -1,5 +1,6 @@ import { SignClient as Client } from "./client"; - +import { Session } from "./controllers/session"; +export const SessionStore = Session; export * from "./constants"; export const SignClient = Client; From 2e6a0a2eb62d51394bf6c141688e0bf14addd1e7 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Wed, 29 Nov 2023 16:16:25 +0200 Subject: [PATCH 03/13] feat: implements static `decrypt notifications` & `getMetadata` utils --- packages/web3wallet/src/client.ts | 11 +++++++++ packages/web3wallet/src/controllers/engine.ts | 5 ++++ packages/web3wallet/src/types/client.ts | 21 ++++++++++++++-- packages/web3wallet/src/types/engine.ts | 8 +++++++ packages/web3wallet/src/utils/index.ts | 1 + .../web3wallet/src/utils/notifications.ts | 24 +++++++++++++++++++ 6 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 packages/web3wallet/src/utils/index.ts create mode 100644 packages/web3wallet/src/utils/notifications.ts diff --git a/packages/web3wallet/src/client.ts b/packages/web3wallet/src/client.ts index 87142748c..7991bf03f 100644 --- a/packages/web3wallet/src/client.ts +++ b/packages/web3wallet/src/client.ts @@ -2,6 +2,7 @@ import EventEmitter from "events"; import { CLIENT_CONTEXT } from "./constants"; import { Engine } from "./controllers"; import { IWeb3Wallet, Web3WalletTypes } from "./types"; +import { Notifications } from "./utils"; export class Web3Wallet extends IWeb3Wallet { public name: IWeb3Wallet["name"]; @@ -10,6 +11,7 @@ export class Web3Wallet extends IWeb3Wallet { public events: IWeb3Wallet["events"] = new EventEmitter(); public engine: IWeb3Wallet["engine"]; public metadata: IWeb3Wallet["metadata"]; + public static notifications: Web3WalletTypes.INotifications = Notifications; static async init(opts: Web3WalletTypes.Options) { const client = new Web3Wallet(opts); @@ -173,6 +175,15 @@ export class Web3Wallet extends IWeb3Wallet { } }; + public registerDeviceToken: IWeb3Wallet["registerDeviceToken"] = (params) => { + try { + return this.engine.registerDeviceToken(params); + } catch (error: any) { + this.logger.error(error.message); + throw error; + } + }; + // ---------- Private ----------------------------------------------- // private async initialize() { diff --git a/packages/web3wallet/src/controllers/engine.ts b/packages/web3wallet/src/controllers/engine.ts index f13a05c91..6b151b27b 100644 --- a/packages/web3wallet/src/controllers/engine.ts +++ b/packages/web3wallet/src/controllers/engine.ts @@ -98,6 +98,11 @@ export class Engine extends IWeb3WalletEngine { return this.authClient.formatMessage(params, iss); }; + // Push // + public registerDeviceToken: IWeb3WalletEngine["registerDeviceToken"] = (params) => { + return this.client.core.echo.registerDeviceToken(params); + }; + // ---------- Private ----------------------------------------------- // private onSessionRequest = (event: Web3WalletTypes.SessionRequest) => { diff --git a/packages/web3wallet/src/types/client.ts b/packages/web3wallet/src/types/client.ts index 0e13c00ce..e47901947 100644 --- a/packages/web3wallet/src/types/client.ts +++ b/packages/web3wallet/src/types/client.ts @@ -1,8 +1,9 @@ import EventEmmiter, { EventEmitter } from "events"; -import { ICore, ProposalTypes, Verify } from "@walletconnect/types"; +import { ICore, CoreTypes, ProposalTypes, Verify } from "@walletconnect/types"; import { AuthClientTypes } from "@walletconnect/auth-client"; import { IWeb3WalletEngine } from "./engine"; import { Logger } from "@walletconnect/logger"; +import { JsonRpcPayload, JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; export declare namespace Web3WalletTypes { type Event = "session_proposal" | "session_request" | "session_delete" | "auth_request"; @@ -41,7 +42,21 @@ export declare namespace Web3WalletTypes { name?: string; } - type Metadata = AuthClientTypes.Metadata; + type Metadata = CoreTypes.Metadata; + + interface INotifications { + decryptMessage: (params: { + topic: string; + encryptedMessage: string; + storageOptions?: CoreTypes.Options["storageOptions"]; + storage?: CoreTypes.Options["storage"]; + }) => Promise; + getMetadata: (params: { + topic: string; + storageOptions?: CoreTypes.Options["storageOptions"]; + storage?: CoreTypes.Options["storage"]; + }) => Promise; + } } export abstract class IWeb3WalletEvents extends EventEmmiter { @@ -104,6 +119,8 @@ export abstract class IWeb3Wallet { public abstract respondAuthRequest: IWeb3WalletEngine["respondAuthRequest"]; public abstract getPendingAuthRequests: IWeb3WalletEngine["getPendingAuthRequests"]; public abstract formatMessage: IWeb3WalletEngine["formatMessage"]; + // push + public abstract registerDeviceToken: IWeb3WalletEngine["registerDeviceToken"]; // ---------- Event Handlers ----------------------------------------------- // public abstract on: ( diff --git a/packages/web3wallet/src/types/engine.ts b/packages/web3wallet/src/types/engine.ts index 47b4ae6cb..bb121be5e 100644 --- a/packages/web3wallet/src/types/engine.ts +++ b/packages/web3wallet/src/types/engine.ts @@ -83,4 +83,12 @@ export abstract class IWeb3WalletEngine { // format payload to message string public abstract formatMessage(payload: AuthEngineTypes.CacaoRequestPayload, iss: string): string; + + // ---------- Push ------------------------------------------------- // + public abstract registerDeviceToken(params: { + clientId: string; + token: string; + notificationType: "fcm" | "apns" | "apns-sandbox" | "noop"; + enableAlwaysDecrypted?: boolean; + }): Promise; } diff --git a/packages/web3wallet/src/utils/index.ts b/packages/web3wallet/src/utils/index.ts new file mode 100644 index 000000000..adcb2c9f5 --- /dev/null +++ b/packages/web3wallet/src/utils/index.ts @@ -0,0 +1 @@ +export * from "./notifications"; diff --git a/packages/web3wallet/src/utils/notifications.ts b/packages/web3wallet/src/utils/notifications.ts new file mode 100644 index 000000000..b279fcaa4 --- /dev/null +++ b/packages/web3wallet/src/utils/notifications.ts @@ -0,0 +1,24 @@ +import { Core } from "@walletconnect/core"; +import { Web3WalletTypes } from "../types"; +import { SessionStore } from "@walletconnect/sign-client"; + +export const Notifications: Web3WalletTypes.INotifications = { + decryptMessage: async (params) => { + const core = new Core({ + storageOptions: params.storageOptions, + storage: params.storage, + }); + await core.crypto.init(); + return core.crypto.decode(params.topic, params.encryptedMessage); + }, + getMetadata: async (params) => { + const core = new Core({ + storageOptions: params.storageOptions, + storage: params.storage, + }); + const sessionStore = new SessionStore(core, core.logger); + await sessionStore.init(); + const session = sessionStore.get(params.topic); + return session?.peer.metadata; + }, +}; From 3f9b90070352e9d3de8e696e5e6bf1d3cc29a497 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Wed, 29 Nov 2023 16:16:50 +0200 Subject: [PATCH 04/13] feat: tests --- packages/web3wallet/test/sign.spec.ts | 243 +++++++++++++++++++++++++- 1 file changed, 240 insertions(+), 3 deletions(-) diff --git a/packages/web3wallet/test/sign.spec.ts b/packages/web3wallet/test/sign.spec.ts index 8a4868fde..8194e388c 100644 --- a/packages/web3wallet/test/sign.spec.ts +++ b/packages/web3wallet/test/sign.spec.ts @@ -1,7 +1,11 @@ -import { Core } from "@walletconnect/core"; -import { formatJsonRpcResult } from "@walletconnect/jsonrpc-utils"; +import { Core, RELAYER_EVENTS } from "@walletconnect/core"; +import { + JsonRpcPayload, + formatJsonRpcResult, + isJsonRpcRequest, +} from "@walletconnect/jsonrpc-utils"; import { SignClient } from "@walletconnect/sign-client"; -import { ICore, ISignClient, SessionTypes } from "@walletconnect/types"; +import { CoreTypes, ICore, ISignClient, SessionTypes } from "@walletconnect/types"; import { getSdkError } from "@walletconnect/utils"; import { Wallet as CryptoWallet } from "@ethersproject/wallet"; @@ -445,4 +449,237 @@ describe("Sign Integration", () => { }), ]); }); + + describe("Decrypted notifications", () => { + it("should get session metadata", async () => { + const dappMetadata: CoreTypes.Metadata = { + name: "Test Dapp", + description: "Test Dapp Description", + url: "https://walletconnect.com", + icons: ["https://walletconnect.com/walletconnect-logo.png"], + }; + const dappTable = "./test/tmp/dapp"; + const walletTable = "./test/tmp/wallet"; + const dapp = await SignClient.init({ + ...TEST_CORE_OPTIONS, + name: "Dapp", + metadata: dappMetadata, + storageOptions: { + database: dappTable, + }, + }); + const wallet = await Web3Wallet.init({ + core: new Core({ + ...TEST_CORE_OPTIONS, + storageOptions: { database: walletTable }, + }), + name: "wallet", + metadata: {} as any, + }); + + const { uri: uriString, approval } = await dapp.connect({}); + let session: SessionTypes.Struct; + await Promise.all([ + new Promise((resolve) => { + wallet.on("session_proposal", async (sessionProposal) => { + const { id, params, verifyContext } = sessionProposal; + expect(verifyContext.verified.validation).to.eq("UNKNOWN"); + expect(verifyContext.verified.isScam).to.eq(undefined); + session = await wallet.approveSession({ + id, + namespaces: TEST_NAMESPACES, + }); + resolve(session); + }); + }), + new Promise(async (resolve) => { + resolve(await approval()); + }), + wallet.pair({ uri: uriString! }), + ]); + + const metadata = await Web3Wallet.notifications.getMetadata({ + topic: session?.topic, + storageOptions: { database: walletTable }, + }); + + expect(metadata).to.be.exist; + expect(metadata).to.be.a("object"); + expect(metadata).to.toMatchObject(dappMetadata); + }); + + it("should decrypt payload with pairing topic", async () => { + const dappMetadata: CoreTypes.Metadata = { + name: "Test Dapp", + description: "Test Dapp Description", + url: "https://walletconnect.com", + icons: ["https://walletconnect.com/walletconnect-logo.png"], + }; + const dappTable = "./test/tmp/dapp"; + const walletTable = "./test/tmp/wallet"; + const dapp = await SignClient.init({ + ...TEST_CORE_OPTIONS, + name: "Dapp", + metadata: dappMetadata, + storageOptions: { + database: dappTable, + }, + }); + const wallet = await Web3Wallet.init({ + core: new Core({ + ...TEST_CORE_OPTIONS, + storageOptions: { database: walletTable }, + }), + name: "wallet", + metadata: {} as any, + }); + + const { uri: uriString = "", approval } = await dapp.connect({}); + let encryptedMessage = ""; + let decryptedMessage: JsonRpcPayload = {} as any; + let pairingTopic = ""; + await Promise.all([ + new Promise((resolve) => { + wallet.core.relayer.on(RELAYER_EVENTS.message, async (payload) => { + const { topic, message } = payload; + const decrypted = await wallet.core.crypto.decode(topic, message); + expect(decrypted).to.be.exist; + if (decrypted?.method === "wc_sessionPropose" && isJsonRpcRequest(decrypted)) { + encryptedMessage = message; + decryptedMessage = decrypted; + pairingTopic = topic; + resolve(); + } + }); + }), + new Promise((resolve) => { + wallet.on("session_proposal", async (sessionProposal) => { + const { id, params, verifyContext } = sessionProposal; + expect(verifyContext.verified.validation).to.eq("UNKNOWN"); + expect(verifyContext.verified.isScam).to.eq(undefined); + await wallet.approveSession({ + id, + namespaces: TEST_NAMESPACES, + }); + resolve(); + }); + }), + new Promise(async (resolve) => { + resolve(await approval()); + }), + wallet.pair({ uri: uriString }), + ]); + + const decrypted = await Web3Wallet.notifications.decryptMessage({ + topic: pairingTopic, + encryptedMessage, + storageOptions: { database: walletTable }, + }); + expect(decrypted).to.be.exist; + expect(decrypted).to.be.a("object"); + expect(decrypted).to.toMatchObject(decryptedMessage); + }); + it("should decrypt payload with session topic", async () => { + const dappMetadata: CoreTypes.Metadata = { + name: "Test Dapp", + description: "Test Dapp Description", + url: "https://walletconnect.com", + icons: ["https://walletconnect.com/walletconnect-logo.png"], + }; + const dappTable = "./test/tmp/dapp"; + const walletTable = "./test/tmp/wallet"; + const dapp = await SignClient.init({ + ...TEST_CORE_OPTIONS, + name: "Dapp", + metadata: dappMetadata, + storageOptions: { + database: dappTable, + }, + }); + const wallet = await Web3Wallet.init({ + core: new Core({ + ...TEST_CORE_OPTIONS, + storageOptions: { database: walletTable }, + }), + name: "wallet", + metadata: {} as any, + }); + + const { uri: uriString = "", approval } = await dapp.connect({}); + + let session: SessionTypes.Struct = {} as any; + // pair and approve session + await Promise.all([ + new Promise((resolve) => { + wallet.on("session_proposal", async (sessionProposal) => { + const { id, params, verifyContext } = sessionProposal; + expect(verifyContext.verified.validation).to.eq("UNKNOWN"); + expect(verifyContext.verified.isScam).to.eq(undefined); + session = await wallet.approveSession({ + id, + namespaces: TEST_NAMESPACES, + }); + resolve(); + }); + }), + new Promise(async (resolve) => { + resolve(await approval()); + }), + wallet.pair({ uri: uriString }), + ]); + + let encryptedMessage = ""; + let decryptedMessage: JsonRpcPayload = {} as any; + await Promise.all([ + new Promise((resolve) => { + wallet.core.relayer.on(RELAYER_EVENTS.message, async (payload) => { + const { topic, message } = payload; + const decrypted = await wallet.core.crypto.decode(topic, message); + expect(decrypted).to.be.exist; + if (decrypted?.method === "wc_sessionRequest" && isJsonRpcRequest(decrypted)) { + encryptedMessage = message; + decryptedMessage = decrypted; + resolve(); + } + }); + }), + new Promise((resolve) => { + wallet.on("session_request", async (payload) => { + const { id, params, topic, verifyContext } = payload; + await wallet.respondSessionRequest({ + topic, + response: formatJsonRpcResult(id, "0x"), + }); + resolve(); + }); + }), + dapp.request({ + topic: session.topic, + request: { + method: "eth_signTransaction", + params: [ + { + from: cryptoWallet.address, + to: cryptoWallet.address, + data: "0x", + nonce: "0x01", + gasPrice: "0x020a7ac094", + gasLimit: "0x5208", + value: "0x00", + }, + ], + }, + chainId: TEST_ETHEREUM_CHAIN, + }), + ]); + const decrypted = await Web3Wallet.notifications.decryptMessage({ + topic: session.topic, + encryptedMessage, + storageOptions: { database: walletTable }, + }); + expect(decrypted).to.be.exist; + expect(decrypted).to.be.a("object"); + expect(decrypted).to.toMatchObject(decryptedMessage); + }); + }); }); From cab479a8cb029d566289fc77c7770e54f60556ae Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Wed, 29 Nov 2023 16:26:38 +0200 Subject: [PATCH 05/13] chore: rm unused import --- packages/web3wallet/src/types/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3wallet/src/types/client.ts b/packages/web3wallet/src/types/client.ts index e47901947..48865f250 100644 --- a/packages/web3wallet/src/types/client.ts +++ b/packages/web3wallet/src/types/client.ts @@ -3,7 +3,7 @@ import { ICore, CoreTypes, ProposalTypes, Verify } from "@walletconnect/types"; import { AuthClientTypes } from "@walletconnect/auth-client"; import { IWeb3WalletEngine } from "./engine"; import { Logger } from "@walletconnect/logger"; -import { JsonRpcPayload, JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; +import { JsonRpcPayload } from "@walletconnect/jsonrpc-utils"; export declare namespace Web3WalletTypes { type Event = "session_proposal" | "session_request" | "session_delete" | "auth_request"; From 269c09c0e1e3c512b6228d37b6df747843752854 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Fri, 1 Dec 2023 15:43:18 +0200 Subject: [PATCH 06/13] chore: remove logs --- packages/core/src/controllers/echo.ts | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/packages/core/src/controllers/echo.ts b/packages/core/src/controllers/echo.ts index 85a7ba8f9..f1b887a2f 100644 --- a/packages/core/src/controllers/echo.ts +++ b/packages/core/src/controllers/echo.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import { generateChildLogger, Logger } from "@walletconnect/logger"; import { IEcho } from "@walletconnect/types"; import { ECHO_CONTEXT, ECHO_URL } from "../constants"; @@ -8,7 +7,6 @@ export class Echo extends IEcho { constructor(public projectId: string, public logger: Logger) { super(projectId, logger); this.logger = generateChildLogger(logger, this.context); - console.log("Echo constructor called", projectId); } public registerDeviceToken: IEcho["registerDeviceToken"] = async (params) => { @@ -16,8 +14,7 @@ export class Echo extends IEcho { const echoUrl = `${ECHO_URL}/${this.projectId}/clients`; - console.log("register called", params, echoUrl); - const echoResponse = await fetch(echoUrl, { + await fetch(echoUrl, { method: "POST", headers: { "Content-Type": "application/json", @@ -29,13 +26,5 @@ export class Echo extends IEcho { always_raw: enableAlwaysDecrypted, }), }); - console.log("echo body", { - client_id: clientId, - type: notificationType, - token, - always_raw: enableAlwaysDecrypted, - }); - - console.log("echoResponse", echoResponse); }; } From 9e086abed69921e72aaf2e3a37dc4b9429844ce3 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Fri, 1 Dec 2023 15:57:59 +0200 Subject: [PATCH 07/13] refactor: types --- packages/core/src/controllers/echo.ts | 4 ++-- packages/types/src/core/echo.ts | 15 +++++++++------ packages/web3wallet/src/types/engine.ts | 8 ++------ 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/core/src/controllers/echo.ts b/packages/core/src/controllers/echo.ts index f1b887a2f..b6bfb5b24 100644 --- a/packages/core/src/controllers/echo.ts +++ b/packages/core/src/controllers/echo.ts @@ -10,7 +10,7 @@ export class Echo extends IEcho { } public registerDeviceToken: IEcho["registerDeviceToken"] = async (params) => { - const { clientId, token, notificationType, enableAlwaysDecrypted = false } = params; + const { clientId, token, notificationType, enableEncrypted = false } = params; const echoUrl = `${ECHO_URL}/${this.projectId}/clients`; @@ -23,7 +23,7 @@ export class Echo extends IEcho { client_id: clientId, type: notificationType, token, - always_raw: enableAlwaysDecrypted, + always_raw: enableEncrypted, }), }); }; diff --git a/packages/types/src/core/echo.ts b/packages/types/src/core/echo.ts index e1b6e6304..676ad249b 100644 --- a/packages/types/src/core/echo.ts +++ b/packages/types/src/core/echo.ts @@ -1,13 +1,16 @@ import { Logger } from "@walletconnect/logger"; +export declare namespace EchoTypes { + type RegisterDeviceTokenParams = { + clientId: string; + token: string; + notificationType: "fcm" | "apns" | "apns-sandbox" | "noop"; + enableEncrypted?: boolean; + }; +} export abstract class IEcho { public abstract readonly context: string; constructor(public projectId: string, public logger: Logger) {} - public abstract registerDeviceToken(params: { - clientId: string; - token: string; - notificationType: "fcm" | "apns" | "apns-sandbox" | "noop"; - enableAlwaysDecrypted?: boolean; - }): Promise; + public abstract registerDeviceToken(params: EchoTypes.RegisterDeviceTokenParams): Promise; } diff --git a/packages/web3wallet/src/types/engine.ts b/packages/web3wallet/src/types/engine.ts index bb121be5e..cdb293596 100644 --- a/packages/web3wallet/src/types/engine.ts +++ b/packages/web3wallet/src/types/engine.ts @@ -5,6 +5,7 @@ import { PendingRequestTypes, ProposalTypes, SessionTypes, + EchoTypes, } from "@walletconnect/types"; import { IWeb3Wallet } from "./client"; @@ -85,10 +86,5 @@ export abstract class IWeb3WalletEngine { public abstract formatMessage(payload: AuthEngineTypes.CacaoRequestPayload, iss: string): string; // ---------- Push ------------------------------------------------- // - public abstract registerDeviceToken(params: { - clientId: string; - token: string; - notificationType: "fcm" | "apns" | "apns-sandbox" | "noop"; - enableAlwaysDecrypted?: boolean; - }): Promise; + public abstract registerDeviceToken(params: EchoTypes.RegisterDeviceTokenParams): Promise; } From 2b9483a464559fcfd8dc9db88aed9ea090bed930 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Mon, 4 Dec 2023 15:03:44 +0200 Subject: [PATCH 08/13] refactor: renames `echo` to `echoClient` --- packages/core/src/controllers/echo.ts | 6 +++--- packages/core/src/core.ts | 14 +++++++++++--- packages/types/src/core/core.ts | 4 ++-- packages/types/src/core/echo.ts | 8 +++++--- packages/web3wallet/src/controllers/engine.ts | 2 +- packages/web3wallet/src/types/engine.ts | 6 ++++-- 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/packages/core/src/controllers/echo.ts b/packages/core/src/controllers/echo.ts index b6bfb5b24..b469f227f 100644 --- a/packages/core/src/controllers/echo.ts +++ b/packages/core/src/controllers/echo.ts @@ -1,15 +1,15 @@ import { generateChildLogger, Logger } from "@walletconnect/logger"; -import { IEcho } from "@walletconnect/types"; +import { IEchoClient } from "@walletconnect/types"; import { ECHO_CONTEXT, ECHO_URL } from "../constants"; -export class Echo extends IEcho { +export class EchoClient extends IEchoClient { public readonly context = ECHO_CONTEXT; constructor(public projectId: string, public logger: Logger) { super(projectId, logger); this.logger = generateChildLogger(logger, this.context); } - public registerDeviceToken: IEcho["registerDeviceToken"] = async (params) => { + public registerDeviceToken: IEchoClient["registerDeviceToken"] = async (params) => { const { clientId, token, notificationType, enableEncrypted = false } = params; const echoUrl = `${ECHO_URL}/${this.projectId}/clients`; diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index e2dc782f7..fc605fdf8 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -10,7 +10,15 @@ import { } from "@walletconnect/logger"; import { CoreTypes, ICore } from "@walletconnect/types"; -import { Crypto, Relayer, Pairing, JsonRpcHistory, Expirer, Verify, Echo } from "./controllers"; +import { + Crypto, + Relayer, + Pairing, + JsonRpcHistory, + Expirer, + Verify, + EchoClient, +} from "./controllers"; import { CORE_CONTEXT, CORE_DEFAULT, @@ -39,7 +47,7 @@ export class Core extends ICore { public expirer: ICore["expirer"]; public pairing: ICore["pairing"]; public verify: ICore["verify"]; - public echo: ICore["echo"]; + public echoClient: ICore["echoClient"]; private initialized = false; @@ -78,7 +86,7 @@ export class Core extends ICore { }); this.pairing = new Pairing(this, this.logger); this.verify = new Verify(this.projectId || "", this.logger); - this.echo = new Echo(this.projectId || "", this.logger); + this.echoClient = new EchoClient(this.projectId || "", this.logger); } get context() { diff --git a/packages/types/src/core/core.ts b/packages/types/src/core/core.ts index ab536d68d..f92d61918 100644 --- a/packages/types/src/core/core.ts +++ b/packages/types/src/core/core.ts @@ -10,7 +10,7 @@ import { IExpirer } from "./expirer"; import { IPairing } from "./pairing"; import { Logger } from "@walletconnect/logger"; import { IVerify } from "./verify"; -import { IEcho } from "./echo"; +import { IEchoClient } from "./echo"; export declare namespace CoreTypes { interface Options { projectId?: string; @@ -55,7 +55,7 @@ export abstract class ICore extends IEvents { public abstract expirer: IExpirer; public abstract pairing: IPairing; public abstract verify: IVerify; - public abstract echo: IEcho; + public abstract echoClient: IEchoClient; constructor(public opts?: CoreTypes.Options) { super(); diff --git a/packages/types/src/core/echo.ts b/packages/types/src/core/echo.ts index 676ad249b..bd94972ea 100644 --- a/packages/types/src/core/echo.ts +++ b/packages/types/src/core/echo.ts @@ -1,6 +1,6 @@ import { Logger } from "@walletconnect/logger"; -export declare namespace EchoTypes { +export declare namespace EchoClientTypes { type RegisterDeviceTokenParams = { clientId: string; token: string; @@ -8,9 +8,11 @@ export declare namespace EchoTypes { enableEncrypted?: boolean; }; } -export abstract class IEcho { +export abstract class IEchoClient { public abstract readonly context: string; constructor(public projectId: string, public logger: Logger) {} - public abstract registerDeviceToken(params: EchoTypes.RegisterDeviceTokenParams): Promise; + public abstract registerDeviceToken( + params: EchoClientTypes.RegisterDeviceTokenParams, + ): Promise; } diff --git a/packages/web3wallet/src/controllers/engine.ts b/packages/web3wallet/src/controllers/engine.ts index 6b151b27b..cbcbdcfbd 100644 --- a/packages/web3wallet/src/controllers/engine.ts +++ b/packages/web3wallet/src/controllers/engine.ts @@ -100,7 +100,7 @@ export class Engine extends IWeb3WalletEngine { // Push // public registerDeviceToken: IWeb3WalletEngine["registerDeviceToken"] = (params) => { - return this.client.core.echo.registerDeviceToken(params); + return this.client.core.echoClient.registerDeviceToken(params); }; // ---------- Private ----------------------------------------------- // diff --git a/packages/web3wallet/src/types/engine.ts b/packages/web3wallet/src/types/engine.ts index cdb293596..65f6760e6 100644 --- a/packages/web3wallet/src/types/engine.ts +++ b/packages/web3wallet/src/types/engine.ts @@ -5,7 +5,7 @@ import { PendingRequestTypes, ProposalTypes, SessionTypes, - EchoTypes, + EchoClientTypes, } from "@walletconnect/types"; import { IWeb3Wallet } from "./client"; @@ -86,5 +86,7 @@ export abstract class IWeb3WalletEngine { public abstract formatMessage(payload: AuthEngineTypes.CacaoRequestPayload, iss: string): string; // ---------- Push ------------------------------------------------- // - public abstract registerDeviceToken(params: EchoTypes.RegisterDeviceTokenParams): Promise; + public abstract registerDeviceToken( + params: EchoClientTypes.RegisterDeviceTokenParams, + ): Promise; } From 7391142b454f738d79f254663511f94fc6c54ae9 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Mon, 4 Dec 2023 16:49:59 +0200 Subject: [PATCH 09/13] fix: polyfill `fetch` --- package-lock.json | 48 ++++++++++++++++++--------- packages/core/package.json | 3 +- packages/core/src/controllers/echo.ts | 1 + 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 85671783c..5217b1e72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10519,7 +10519,6 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -14225,7 +14224,6 @@ }, "node_modules/fetch-blob": { "version": "3.2.0", - "dev": true, "funding": [ { "type": "github", @@ -14634,7 +14632,6 @@ }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "dev": true, "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" @@ -20604,7 +20601,6 @@ }, "node_modules/node-domexception": { "version": "1.0.0", - "dev": true, "funding": [ { "type": "github", @@ -26609,7 +26605,6 @@ }, "node_modules/web-streams-polyfill": { "version": "3.2.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -27492,6 +27487,7 @@ "@walletconnect/types": "2.10.6", "@walletconnect/utils": "2.10.6", "events": "^3.3.0", + "isomorphic-unfetch": "^4.0.2", "lodash.isequal": "4.5.0", "uint8arrays": "^3.1.0" }, @@ -27500,9 +27496,17 @@ "node-fetch": "^3.3.0" } }, + "packages/core/node_modules/isomorphic-unfetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-4.0.2.tgz", + "integrity": "sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==", + "dependencies": { + "node-fetch": "^3.2.0", + "unfetch": "^5.0.0" + } + }, "packages/core/node_modules/node-fetch": { "version": "3.3.1", - "dev": true, "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", @@ -27517,6 +27521,11 @@ "url": "https://opencollective.com/node-fetch" } }, + "packages/core/node_modules/unfetch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-5.0.0.tgz", + "integrity": "sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==" + }, "packages/react-native-compat": { "name": "@walletconnect/react-native-compat", "version": "2.10.6", @@ -33591,19 +33600,33 @@ "@walletconnect/types": "2.10.6", "@walletconnect/utils": "2.10.6", "events": "^3.3.0", + "isomorphic-unfetch": "^4.0.2", "lodash.isequal": "4.5.0", "node-fetch": "^3.3.0", "uint8arrays": "^3.1.0" }, "dependencies": { + "isomorphic-unfetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-4.0.2.tgz", + "integrity": "sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==", + "requires": { + "node-fetch": "^3.2.0", + "unfetch": "^5.0.0" + } + }, "node-fetch": { "version": "3.3.1", - "dev": true, "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } + }, + "unfetch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-5.0.0.tgz", + "integrity": "sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==" } } }, @@ -35911,8 +35934,7 @@ } }, "data-uri-to-buffer": { - "version": "4.0.1", - "dev": true + "version": "4.0.1" }, "dateformat": { "version": "3.0.3", @@ -38367,7 +38389,6 @@ }, "fetch-blob": { "version": "3.2.0", - "dev": true, "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -38651,7 +38672,6 @@ }, "formdata-polyfill": { "version": "4.0.10", - "dev": true, "requires": { "fetch-blob": "^3.1.2" } @@ -43067,8 +43087,7 @@ } }, "node-domexception": { - "version": "1.0.0", - "dev": true + "version": "1.0.0" }, "node-environment-flags": { "version": "1.0.6", @@ -47372,8 +47391,7 @@ } }, "web-streams-polyfill": { - "version": "3.2.1", - "dev": true + "version": "3.2.1" }, "web3": { "version": "1.7.5", diff --git a/packages/core/package.json b/packages/core/package.json index f04269669..1ba89f9f2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -46,7 +46,8 @@ "@walletconnect/utils": "2.10.6", "events": "^3.3.0", "lodash.isequal": "4.5.0", - "uint8arrays": "^3.1.0" + "uint8arrays": "^3.1.0", + "isomorphic-unfetch": "^4.0.2" }, "devDependencies": { "@types/lodash.isequal": "4.5.6", diff --git a/packages/core/src/controllers/echo.ts b/packages/core/src/controllers/echo.ts index b469f227f..7ed830251 100644 --- a/packages/core/src/controllers/echo.ts +++ b/packages/core/src/controllers/echo.ts @@ -1,6 +1,7 @@ import { generateChildLogger, Logger } from "@walletconnect/logger"; import { IEchoClient } from "@walletconnect/types"; import { ECHO_CONTEXT, ECHO_URL } from "../constants"; +import "isomorphic-unfetch"; export class EchoClient extends IEchoClient { public readonly context = ECHO_CONTEXT; From 1dcfeced1dbbf0780ed7b8450d930ec0aaf11e5a Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Mon, 4 Dec 2023 17:03:38 +0200 Subject: [PATCH 10/13] Revert "fix: polyfill `fetch`" This reverts commit 7391142b454f738d79f254663511f94fc6c54ae9. --- package-lock.json | 48 +++++++++------------------ packages/core/package.json | 3 +- packages/core/src/controllers/echo.ts | 1 - 3 files changed, 16 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5217b1e72..85671783c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10519,6 +10519,7 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -14224,6 +14225,7 @@ }, "node_modules/fetch-blob": { "version": "3.2.0", + "dev": true, "funding": [ { "type": "github", @@ -14632,6 +14634,7 @@ }, "node_modules/formdata-polyfill": { "version": "4.0.10", + "dev": true, "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" @@ -20601,6 +20604,7 @@ }, "node_modules/node-domexception": { "version": "1.0.0", + "dev": true, "funding": [ { "type": "github", @@ -26605,6 +26609,7 @@ }, "node_modules/web-streams-polyfill": { "version": "3.2.1", + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -27487,7 +27492,6 @@ "@walletconnect/types": "2.10.6", "@walletconnect/utils": "2.10.6", "events": "^3.3.0", - "isomorphic-unfetch": "^4.0.2", "lodash.isequal": "4.5.0", "uint8arrays": "^3.1.0" }, @@ -27496,17 +27500,9 @@ "node-fetch": "^3.3.0" } }, - "packages/core/node_modules/isomorphic-unfetch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-4.0.2.tgz", - "integrity": "sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==", - "dependencies": { - "node-fetch": "^3.2.0", - "unfetch": "^5.0.0" - } - }, "packages/core/node_modules/node-fetch": { "version": "3.3.1", + "dev": true, "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", @@ -27521,11 +27517,6 @@ "url": "https://opencollective.com/node-fetch" } }, - "packages/core/node_modules/unfetch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-5.0.0.tgz", - "integrity": "sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==" - }, "packages/react-native-compat": { "name": "@walletconnect/react-native-compat", "version": "2.10.6", @@ -33600,33 +33591,19 @@ "@walletconnect/types": "2.10.6", "@walletconnect/utils": "2.10.6", "events": "^3.3.0", - "isomorphic-unfetch": "^4.0.2", "lodash.isequal": "4.5.0", "node-fetch": "^3.3.0", "uint8arrays": "^3.1.0" }, "dependencies": { - "isomorphic-unfetch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-4.0.2.tgz", - "integrity": "sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==", - "requires": { - "node-fetch": "^3.2.0", - "unfetch": "^5.0.0" - } - }, "node-fetch": { "version": "3.3.1", + "dev": true, "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } - }, - "unfetch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-5.0.0.tgz", - "integrity": "sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==" } } }, @@ -35934,7 +35911,8 @@ } }, "data-uri-to-buffer": { - "version": "4.0.1" + "version": "4.0.1", + "dev": true }, "dateformat": { "version": "3.0.3", @@ -38389,6 +38367,7 @@ }, "fetch-blob": { "version": "3.2.0", + "dev": true, "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -38672,6 +38651,7 @@ }, "formdata-polyfill": { "version": "4.0.10", + "dev": true, "requires": { "fetch-blob": "^3.1.2" } @@ -43087,7 +43067,8 @@ } }, "node-domexception": { - "version": "1.0.0" + "version": "1.0.0", + "dev": true }, "node-environment-flags": { "version": "1.0.6", @@ -47391,7 +47372,8 @@ } }, "web-streams-polyfill": { - "version": "3.2.1" + "version": "3.2.1", + "dev": true }, "web3": { "version": "1.7.5", diff --git a/packages/core/package.json b/packages/core/package.json index 1ba89f9f2..f04269669 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -46,8 +46,7 @@ "@walletconnect/utils": "2.10.6", "events": "^3.3.0", "lodash.isequal": "4.5.0", - "uint8arrays": "^3.1.0", - "isomorphic-unfetch": "^4.0.2" + "uint8arrays": "^3.1.0" }, "devDependencies": { "@types/lodash.isequal": "4.5.6", diff --git a/packages/core/src/controllers/echo.ts b/packages/core/src/controllers/echo.ts index 7ed830251..b469f227f 100644 --- a/packages/core/src/controllers/echo.ts +++ b/packages/core/src/controllers/echo.ts @@ -1,7 +1,6 @@ import { generateChildLogger, Logger } from "@walletconnect/logger"; import { IEchoClient } from "@walletconnect/types"; import { ECHO_CONTEXT, ECHO_URL } from "../constants"; -import "isomorphic-unfetch"; export class EchoClient extends IEchoClient { public readonly context = ECHO_CONTEXT; From 195a003c12d2d6271c0c17b27b06d4dba622e411 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Mon, 4 Dec 2023 17:05:35 +0200 Subject: [PATCH 11/13] fix: uses `isomorphic-unfetch@3.1.0` --- package-lock.json | 2 ++ packages/core/package.json | 3 ++- packages/core/src/controllers/echo.ts | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 85671783c..f83608bd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27492,6 +27492,7 @@ "@walletconnect/types": "2.10.6", "@walletconnect/utils": "2.10.6", "events": "^3.3.0", + "isomorphic-unfetch": "3.1.0", "lodash.isequal": "4.5.0", "uint8arrays": "^3.1.0" }, @@ -33591,6 +33592,7 @@ "@walletconnect/types": "2.10.6", "@walletconnect/utils": "2.10.6", "events": "^3.3.0", + "isomorphic-unfetch": "3.1.0", "lodash.isequal": "4.5.0", "node-fetch": "^3.3.0", "uint8arrays": "^3.1.0" diff --git a/packages/core/package.json b/packages/core/package.json index f04269669..67c93ee2e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -46,7 +46,8 @@ "@walletconnect/utils": "2.10.6", "events": "^3.3.0", "lodash.isequal": "4.5.0", - "uint8arrays": "^3.1.0" + "uint8arrays": "^3.1.0", + "isomorphic-unfetch": "3.1.0" }, "devDependencies": { "@types/lodash.isequal": "4.5.6", diff --git a/packages/core/src/controllers/echo.ts b/packages/core/src/controllers/echo.ts index b469f227f..ccf86f7b3 100644 --- a/packages/core/src/controllers/echo.ts +++ b/packages/core/src/controllers/echo.ts @@ -1,6 +1,7 @@ import { generateChildLogger, Logger } from "@walletconnect/logger"; import { IEchoClient } from "@walletconnect/types"; import { ECHO_CONTEXT, ECHO_URL } from "../constants"; +import fetch from "isomorphic-unfetch"; export class EchoClient extends IEchoClient { public readonly context = ECHO_CONTEXT; From 74e8658acf2e4075ebc58cf9eeb948368e092b3f Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Tue, 5 Dec 2023 09:58:55 +0200 Subject: [PATCH 12/13] refactor: restructure exports --- packages/sign-client/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sign-client/src/index.ts b/packages/sign-client/src/index.ts index 24f776dcb..eafc655b9 100644 --- a/packages/sign-client/src/index.ts +++ b/packages/sign-client/src/index.ts @@ -1,7 +1,7 @@ import { SignClient as Client } from "./client"; import { Session } from "./controllers/session"; -export const SessionStore = Session; export * from "./constants"; +export const SessionStore = Session; export const SignClient = Client; export default Client; From 1f03e091f45b8cd808bfefb0607775d383b97a91 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Tue, 5 Dec 2023 10:42:05 +0200 Subject: [PATCH 13/13] feat: clear class instances after work done --- .../web3wallet/src/utils/notifications.ts | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/packages/web3wallet/src/utils/notifications.ts b/packages/web3wallet/src/utils/notifications.ts index b279fcaa4..4548c79a5 100644 --- a/packages/web3wallet/src/utils/notifications.ts +++ b/packages/web3wallet/src/utils/notifications.ts @@ -4,21 +4,31 @@ import { SessionStore } from "@walletconnect/sign-client"; export const Notifications: Web3WalletTypes.INotifications = { decryptMessage: async (params) => { - const core = new Core({ - storageOptions: params.storageOptions, - storage: params.storage, - }); - await core.crypto.init(); - return core.crypto.decode(params.topic, params.encryptedMessage); + const instance = { + core: new Core({ + storageOptions: params.storageOptions, + storage: params.storage, + }), + } as any; + await instance.core.crypto.init(); + const decoded = instance.core.crypto.decode(params.topic, params.encryptedMessage); + instance.core = null; + return decoded; }, getMetadata: async (params) => { - const core = new Core({ - storageOptions: params.storageOptions, - storage: params.storage, - }); - const sessionStore = new SessionStore(core, core.logger); - await sessionStore.init(); - const session = sessionStore.get(params.topic); - return session?.peer.metadata; + const instances = { + core: new Core({ + storageOptions: params.storageOptions, + storage: params.storage, + }), + sessionStore: null, + } as any; + instances.sessionStore = new SessionStore(instances.core, instances.core.logger); + await instances.sessionStore.init(); + const session = instances.sessionStore.get(params.topic); + const metadata = session?.peer.metadata; + instances.core = null; + instances.sessionStore = null; + return metadata; }, };