diff --git a/packages/analytics-browser/src/plugins/network-connectivity-checker.ts b/packages/analytics-browser/src/plugins/network-connectivity-checker.ts index 4581d89c1..00616d68a 100644 --- a/packages/analytics-browser/src/plugins/network-connectivity-checker.ts +++ b/packages/analytics-browser/src/plugins/network-connectivity-checker.ts @@ -33,6 +33,14 @@ export const networkConnectivityCheckerPlugin = (): BeforePlugin => { }; const setup = async (config: BrowserConfig, amplitude: BrowserClient) => { + if (typeof navigator === 'undefined') { + config.loggerProvider.debug( + 'Network connectivity checker plugin is disabled because navigator is not available.', + ); + config.offline = false; + return; + } + config.offline = !navigator.onLine; addNetworkListener('online', () => { diff --git a/packages/analytics-browser/test/plugins/network-connectivity-checker.test.ts b/packages/analytics-browser/test/plugins/network-connectivity-checker.test.ts index ff0387675..3725c204b 100644 --- a/packages/analytics-browser/test/plugins/network-connectivity-checker.test.ts +++ b/packages/analytics-browser/test/plugins/network-connectivity-checker.test.ts @@ -43,4 +43,17 @@ describe('networkConnectivityCheckerPlugin', () => { expect(removeEventListenerSpy).toHaveBeenCalledWith('online', expect.any(Function)); expect(removeEventListenerSpy).toHaveBeenCalledWith('offline', expect.any(Function)); }); + + test('should do nothing when not on a browser', async () => { + const plugin = networkConnectivityCheckerPlugin(); + // @ts-expect-error we are mocking a node.js environment + jest.spyOn(window, 'navigator', 'get').mockReturnValue(undefined); + const addEventListenerSpy = jest.spyOn(window, 'addEventListener'); + + await plugin.setup?.(config, amplitude); + + expect(config.offline).toEqual(false); + expect(addEventListenerSpy).not.toHaveBeenCalled(); + addEventListenerSpy.mockRestore(); + }); });