From 25ae2511e19b68955943953413833d59d70710f7 Mon Sep 17 00:00:00 2001 From: Mircea Hasegan Date: Wed, 19 Feb 2025 12:07:42 +0100 Subject: [PATCH] refactor!: hoist isBackgroundProcess script detection to utils package --- packages/util/src/environment.ts | 9 +++++++++ .../wallet/src/services/util/connectionStatusTracker.ts | 3 ++- packages/web-extension/src/messaging/index.ts | 3 ++- packages/web-extension/src/messaging/util.ts | 4 ---- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/util/src/environment.ts b/packages/util/src/environment.ts index 239d0982d0d..e8201c15cd4 100644 --- a/packages/util/src/environment.ts +++ b/packages/util/src/environment.ts @@ -16,3 +16,12 @@ export const isProductionEnvironment = (): boolean => process.env.NODE_ENV === E export const getEnvironmentConfiguration = (): Environment => isProductionEnvironment() ? Environment.Production : Environment.Development; + +/** + * Chrome extensions use a service worker that does not have a window object. + * Firefox addons use a generated background page to run the background script, so they have a window object + * + * @returns {boolean} True if the script is running in a background/service worker process, false otherwise. + */ +export const isBackgroundProcess = () => + typeof window === 'undefined' || window.location.href.includes('_generated_background'); diff --git a/packages/wallet/src/services/util/connectionStatusTracker.ts b/packages/wallet/src/services/util/connectionStatusTracker.ts index dbb67474df7..535b6313079 100644 --- a/packages/wallet/src/services/util/connectionStatusTracker.ts +++ b/packages/wallet/src/services/util/connectionStatusTracker.ts @@ -1,4 +1,5 @@ import { NEVER, Observable, distinctUntilChanged, fromEvent, map, merge, shareReplay, startWith } from 'rxjs'; +import { isBackgroundProcess } from '@cardano-sdk/util'; export enum ConnectionStatus { down = 0, @@ -21,7 +22,7 @@ export interface ConnectionStatusTrackerInternals { * @returns {ConnectionStatusTracker} ConnectionStatusTracker */ export const createSimpleConnectionStatusTracker = ({ - isNodeEnv = typeof window === 'undefined', + isNodeEnv = isBackgroundProcess(), online$ = isNodeEnv ? NEVER : fromEvent(window, 'online'), offline$ = isNodeEnv ? NEVER : fromEvent(window, 'offline'), initialStatus = isNodeEnv ? true : navigator.onLine diff --git a/packages/web-extension/src/messaging/index.ts b/packages/web-extension/src/messaging/index.ts index 227a4bd7489..2bdf1beb367 100644 --- a/packages/web-extension/src/messaging/index.ts +++ b/packages/web-extension/src/messaging/index.ts @@ -1,8 +1,9 @@ import { BackgroundMessenger, createBackgroundMessenger, generalizeBackgroundMessenger } from './BackgroundMessenger'; import { ChannelName, ConsumeRemoteApiOptions, ExposeApiProps, MessengerDependencies } from './types'; -import { FinalizationRegistryDestructor, isBackgroundProcess } from './util'; +import { FinalizationRegistryDestructor } from './util'; import { consumeMessengerRemoteApi, exposeMessengerApi } from './remoteApi'; import { createNonBackgroundMessenger } from './NonBackgroundMessenger'; +import { isBackgroundProcess } from '@cardano-sdk/util'; export * from './BackgroundMessenger'; export * from './NonBackgroundMessenger'; diff --git a/packages/web-extension/src/messaging/util.ts b/packages/web-extension/src/messaging/util.ts index 31e464a0337..bf06c7293ae 100644 --- a/packages/web-extension/src/messaging/util.ts +++ b/packages/web-extension/src/messaging/util.ts @@ -77,7 +77,3 @@ export class FinalizationRegistryDestructor implements Destructor { this.#registry.register(obj, objectId); } } - -// Firefox addons use a generated background page to run the background script, so they have a window object -export const isBackgroundProcess = () => - typeof window === 'undefined' || window.location.href.includes('_generated_background');