From 48a728909ca74cd9eaec6037632dba44f6542bf8 Mon Sep 17 00:00:00 2001 From: khamdamjon goziev Date: Wed, 9 Oct 2024 18:33:37 +0500 Subject: [PATCH 01/15] feat: add iframe heartbeat --- .../provider/src/core/view-controller.ts | 41 +++++++++++++++++++ .../types/src/core/message-types.ts | 2 + packages/magic-sdk/src/iframe-controller.ts | 13 ++++++ 3 files changed, 56 insertions(+) diff --git a/packages/@magic-sdk/provider/src/core/view-controller.ts b/packages/@magic-sdk/provider/src/core/view-controller.ts index eea9b3546..c84f010a2 100644 --- a/packages/@magic-sdk/provider/src/core/view-controller.ts +++ b/packages/@magic-sdk/provider/src/core/view-controller.ts @@ -113,6 +113,10 @@ async function persistMagicEventRefreshToken(event: MagicMessageEvent) { await setItem('rt', event.data.rt); } +const PING_INTERVAL = 5000; // 5 seconds +const RELOAD_THRESHOLD = 10000; // 10 seconds +const INITIAL_HEARTBEAT_DELAY = 3600000; // 1 hour + export abstract class ViewController { public checkIsReadyForRequest: Promise; public isReadyForRequest: boolean; @@ -136,12 +140,17 @@ export abstract class ViewController { this.checkIsReadyForRequest = this.waitForReady(); this.isReadyForRequest = false; this.listen(); + this.startHeartBeat(); } protected abstract init(): void; protected abstract _post(data: MagicMessageRequest): Promise; protected abstract hideOverlay(): void; protected abstract showOverlay(): void; + protected abstract reloadIframe(): void; + + private lastPingTime = Date.now(); + private pingTimer: ReturnType | null = null; /** * Send a payload to the Magic `