Skip to content

Commit e4be769

Browse files
authored
fix: install modal QRCode regeneration (#1353)
* fix: install modal QRCode regeneration * fix: typo
1 parent 9bfd247 commit e4be769

File tree

4 files changed

+10
-5
lines changed

4 files changed

+10
-5
lines changed

packages/sdk-multichain/src/multichain/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ export class MultichainSDK extends MultichainCore {
247247
this.options.ui.factory.renderInstallModal(
248248
desktopPreferred,
249249
async () => {
250+
if (this.dappClient.state === 'CONNECTED' || this.dappClient.state === 'CONNECTING') {
251+
await this.dappClient.disconnect();
252+
}
250253
return new Promise<ConnectionRequest>((resolveConnectionRequest) => {
251254
this.dappClient.on('session_request', (sessionRequest: SessionRequest) => {
252255
resolveConnectionRequest({

packages/sdk-multichain/src/multichain/transports/mwp/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ export class MWPTransport implements ExtendedTransport {
2828
private __pendingRequests = new Map<string, PendingRequests>();
2929
private notificationCallbacks = new Set<(data: unknown) => void>();
3030
private currentSessionRequest: SessionRequest | undefined;
31-
private connectionPromise?: Promise<void>;
3231

3332
get pendingRequests() {
3433
return this.__pendingRequests;
@@ -139,7 +138,7 @@ export class MWPTransport implements ExtendedTransport {
139138
} catch {}
140139

141140
let timeout: NodeJS.Timeout;
142-
this.connectionPromise ??= new Promise<void>((resolve, reject) => {
141+
const connectionPromise = new Promise<void>((resolve, reject) => {
143142
let connection: Promise<void>;
144143
if (session) {
145144
connection = new Promise<void>((resumeResolve, resumeReject) => {
@@ -175,14 +174,15 @@ export class MWPTransport implements ExtendedTransport {
175174
dappClient.connect({ mode: 'trusted', initialPayload: request }).catch(rejectConnection);
176175
});
177176
}
177+
178178
timeout = setTimeout(() => {
179179
reject(new TransportTimeoutError());
180180
}, this.options.connectionTimeout);
181+
181182
connection.then(resolve).catch(reject);
182183
});
183184

184-
return this.connectionPromise.finally(() => {
185-
this.connectionPromise = undefined;
185+
return connectionPromise.finally(() => {
186186
if (timeout) {
187187
clearTimeout(timeout);
188188
}

packages/sdk-multichain/src/ui/modals/base/AbstractInstallModal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export abstract class AbstractInstallModal extends Modal<InstallWidgetProps, QRL
5858
}
5959

6060
if (now >= sessionRequest.expiresAt) {
61+
this.stopExpirationCheck();
6162
logger('[UI: InstallModal-nodejs()] ⏰ QR code EXPIRED! Generating new one...');
6263
try {
6364
// Generate new session request

packages/sdk-multichain/src/ui/modals/node/install.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ export class InstallModal extends AbstractInstallModal {
2121
console.log(`EXPIRES IN: ${formattedTime}`);
2222
}
2323
}
24+
2425
renderQRCode(link: QRLink, connectionRequest: ConnectionRequest): void {
2526
const { sessionRequest } = connectionRequest;
2627
const expiresIn = sessionRequest.expiresAt - Date.now();
2728
const expiresInSeconds = Math.floor(expiresIn / 1000);
2829
const shouldLog = shouldLogCountdown(expiresInSeconds);
2930
const formattedTime = formatRemainingTime(expiresIn);
31+
this.startExpirationCheck(connectionRequest);
3032

3133
this.displayQRWithCountdown(link, expiresIn);
3234

@@ -41,7 +43,6 @@ export class InstallModal extends AbstractInstallModal {
4143
}
4244
const { link, connectionRequest } = this;
4345
this.renderQRCode(link, connectionRequest);
44-
this.startExpirationCheck(connectionRequest);
4546
}
4647

4748
unmount(): void {

0 commit comments

Comments
 (0)