diff --git a/projects/modal-sign-html/src/client.ts b/projects/modal-sign-html/src/client.ts
index 398e6cc..0f42d3e 100644
--- a/projects/modal-sign-html/src/client.ts
+++ b/projects/modal-sign-html/src/client.ts
@@ -41,15 +41,17 @@ export class WalletConnectModalSign {
// -- public ------------------------------------------------------------
public async connect(args: WalletConnectModalSignConnectArguments) {
const { requiredNamespaces, optionalNamespaces } = args
+ let unsubscribeModal: (() => void) | null = null
return new Promise(async (resolve, reject) => {
await this.#initSignClient()
- const unsubscribeModal = this.#modal.subscribeModal(state => {
- if (!state.open) {
- unsubscribeModal()
- reject(new Error('Modal closed'))
- }
+ const modalPromise = new Promise((_, modalReject) => {
+ unsubscribeModal = this.#modal.subscribeModal(state => {
+ if (!state.open) {
+ modalReject(new Error('Modal closed'))
+ }
+ })
})
const { uri, approval } = await this.#signClient!.connect(args)
@@ -74,12 +76,12 @@ export class WalletConnectModalSign {
}
try {
- const session = await approval()
+ const session = await Promise.race([modalPromise, approval()])
resolve(session)
} catch (err) {
reject(err)
} finally {
- unsubscribeModal()
+ unsubscribeModal?.()
this.#modal.closeModal()
}
})