diff --git a/apps/browser-extension-wallet/src/dapp-connector.tsx b/apps/browser-extension-wallet/src/dapp-connector.tsx index a7982bdd9a..b0072e80e7 100644 --- a/apps/browser-extension-wallet/src/dapp-connector.tsx +++ b/apps/browser-extension-wallet/src/dapp-connector.tsx @@ -4,6 +4,7 @@ import { render } from 'react-dom'; import { DappConnectorView } from '@routes'; import { StoreProvider } from '@stores'; import '@lib/i18n'; +import '@lib/scripts/keep-alive-ui'; import 'antd/dist/antd.css'; import { CurrencyStoreProvider } from '@providers/currency'; import { DatabaseProvider, AppSettingsProvider, AnalyticsProvider, ExternalLinkOpenerProvider } from '@providers'; diff --git a/apps/browser-extension-wallet/src/lib/scripts/background/config.ts b/apps/browser-extension-wallet/src/lib/scripts/background/config.ts index d2634d12b5..5698f447e5 100644 --- a/apps/browser-extension-wallet/src/lib/scripts/background/config.ts +++ b/apps/browser-extension-wallet/src/lib/scripts/background/config.ts @@ -30,7 +30,8 @@ export const backgroundServiceProperties: RemoteApiProperties resetStorage: RemoteApiPropertyType.MethodReturningPromise, getAppVersion: RemoteApiPropertyType.MethodReturningPromise, backendFailures$: RemoteApiPropertyType.HotObservable, - unhandledError$: RemoteApiPropertyType.HotObservable + unhandledError$: RemoteApiPropertyType.HotObservable, + ping: RemoteApiPropertyType.MethodReturningPromise }; const { BLOCKFROST_CONFIGS, BLOCKFROST_RATE_LIMIT_CONFIG, SESSION_TIMEOUT } = config(); diff --git a/apps/browser-extension-wallet/src/lib/scripts/background/services/utilityServices.ts b/apps/browser-extension-wallet/src/lib/scripts/background/services/utilityServices.ts index 167378c322..c4a44e94c8 100644 --- a/apps/browser-extension-wallet/src/lib/scripts/background/services/utilityServices.ts +++ b/apps/browser-extension-wallet/src/lib/scripts/background/services/utilityServices.ts @@ -319,7 +319,8 @@ export const exposeBackgroundService = (wallet$: Observable): void }, getAppVersion, backendFailures$, - unhandledError$ + unhandledError$, + ping: async () => 'pong' as const }), baseChannel: BaseChannels.BACKGROUND_ACTIONS, properties: backgroundServiceProperties diff --git a/apps/browser-extension-wallet/src/lib/scripts/keep-alive-ui.ts b/apps/browser-extension-wallet/src/lib/scripts/keep-alive-ui.ts index 3043aa52f9..6264062f82 100644 --- a/apps/browser-extension-wallet/src/lib/scripts/keep-alive-ui.ts +++ b/apps/browser-extension-wallet/src/lib/scripts/keep-alive-ui.ts @@ -1,27 +1,29 @@ +import { consumeRemoteApi } from '@cardano-sdk/web-extension'; +import { backgroundServiceProperties } from './background/config'; +import { BackgroundService, BaseChannels } from './types'; import { runtime } from 'webextension-polyfill'; import { logger } from '@lace/common'; -const TIMEOUT_DURATION = 5000; +const PING_INTERVAL = 5000; // 5 seconds - same as original -const setupKeepAliveConnection = () => { - const port = runtime.connect({ name: 'keepAlive' }); - port.onDisconnect.addListener(setupKeepAliveConnection); -}; +const backgroundService = consumeRemoteApi( + { + baseChannel: BaseChannels.BACKGROUND_ACTIONS, + properties: backgroundServiceProperties + }, + { runtime, logger } +); -const setupFirefoxWakeInterval = () => { - if (process.env.BROWSER === 'firefox') { - setInterval(() => { - runtime - .sendMessage('ping') - .then((response) => { - logger.debug('Response received:', response); - }) - .catch((error) => { - logger.error('Connection error:', error); - }); - }, TIMEOUT_DURATION); - } +const keepServiceWorkerAlive = () => { + setInterval(async () => { + try { + const response = await backgroundService.ping(); + logger.debug('Keep-alive ping response:', response); + } catch (error) { + logger.error('Keep-alive ping failed:', error); + } + }, PING_INTERVAL); }; -setupKeepAliveConnection(); -setupFirefoxWakeInterval(); +// Start the keep-alive mechanism +keepServiceWorkerAlive(); diff --git a/apps/browser-extension-wallet/src/lib/scripts/types/background-service.ts b/apps/browser-extension-wallet/src/lib/scripts/types/background-service.ts index f95e4cd541..b20319b7f3 100644 --- a/apps/browser-extension-wallet/src/lib/scripts/types/background-service.ts +++ b/apps/browser-extension-wallet/src/lib/scripts/types/background-service.ts @@ -112,6 +112,7 @@ export type BackgroundService = { getAppVersion: () => Promise; backendFailures$: BehaviorSubject; unhandledError$: Observable; + ping: () => Promise<'pong'>; }; export type WalletMode = { diff --git a/apps/browser-extension-wallet/src/popup.tsx b/apps/browser-extension-wallet/src/popup.tsx index 98427af08a..bbcfc96f97 100644 --- a/apps/browser-extension-wallet/src/popup.tsx +++ b/apps/browser-extension-wallet/src/popup.tsx @@ -7,6 +7,7 @@ import { StoreProvider } from '@stores'; import { CurrencyStoreProvider } from '@providers/currency'; import { AppSettingsProvider, DatabaseProvider, ThemeProvider, AnalyticsProvider } from '@providers'; import '@lib/i18n'; +import '@lib/scripts/keep-alive-ui'; import 'antd/dist/antd.css'; import './styles/index.scss'; import 'normalize.css';