diff --git a/.changeset/plain-paws-happen.md b/.changeset/plain-paws-happen.md new file mode 100644 index 0000000000..700c2f3fbc --- /dev/null +++ b/.changeset/plain-paws-happen.md @@ -0,0 +1,12 @@ +--- +"@walletconnect/sign-client": patch +"@walletconnect/core": patch +"@walletconnect/react-native-compat": patch +"@walletconnect/types": patch +"@walletconnect/utils": patch +"@walletconnect/ethereum-provider": patch +"@walletconnect/signer-connection": patch +"@walletconnect/universal-provider": patch +--- + +deletes expirer entry after the wallet responds to a session proposal diff --git a/packages/sign-client/src/controllers/engine.ts b/packages/sign-client/src/controllers/engine.ts index 4d772f0dd5..50549ced43 100644 --- a/packages/sign-client/src/controllers/engine.ts +++ b/packages/sign-client/src/controllers/engine.ts @@ -480,7 +480,7 @@ export class Engine extends IEngine { topic: pairingTopic, metadata: proposer.metadata, }); - await this.client.proposal.delete(id, getSdkError("USER_DISCONNECTED")); + await this.deleteProposal(id); await this.client.core.pairing.activate({ topic: pairingTopic }); await this.setExpiry(sessionTopic, calcExpiry(SESSION_EXPIRY)); return { @@ -515,8 +515,9 @@ export class Engine extends IEngine { error: reason, rpcOpts: ENGINE_RPC_OPTS.wc_sessionPropose.reject, }); - await this.client.proposal.delete(id, getSdkError("USER_DISCONNECTED")); } + + await this.deleteProposal(id); }; public update: IEngine["update"] = async (params) => { @@ -1326,7 +1327,7 @@ export class Engine extends IEngine { ), }); await this.client.auth.requests.delete(id, { message: "rejected", code: 0 }); - await this.client.proposal.delete(id, getSdkError("USER_DISCONNECTED")); + await this.deleteProposal(id); }; public formatAuthMessage: IEngine["formatAuthMessage"] = (params) => { @@ -1953,7 +1954,7 @@ export class Engine extends IEngine { }); await this.client.core.pairing.activate({ topic }); } else if (isJsonRpcError(payload)) { - await this.client.proposal.delete(id, getSdkError("USER_DISCONNECTED")); + await this.deleteProposal(id); const target = engineEvent("session_connect", id); const listeners = this.events.listenerCount(target); if (listeners === 0) { diff --git a/packages/sign-client/test/sdk/client.spec.ts b/packages/sign-client/test/sdk/client.spec.ts index ff10c90d15..b6fd3c3749 100644 --- a/packages/sign-client/test/sdk/client.spec.ts +++ b/packages/sign-client/test/sdk/client.spec.ts @@ -93,6 +93,10 @@ describe("Sign Client Integration", () => { expect(clients.B.metadata.redirect).to.exist; expect(clients.B.metadata.redirect?.native).to.exist; expect(clients.B.metadata.redirect?.universal).to.exist; + expect(clients.A.core.expirer.keys).to.deep.equal(clients.B.core.expirer.keys); + expect(clients.A.core.expirer.keys.length).to.eq(2); + expect(clients.B.core.expirer.keys.length).to.eq(2); + await deleteClients(clients); }); it("should set scopedProperties in session", async () => {