UNPKG

woolball-client

Version:

Client-side library for Woolball enabling secure browser resource sharing for distributed AI task processing

95 lines (94 loc) 3.4 kB
"use strict"; /** * Browser compatibility detection module * Provides utilities to check if the browser is compatible with browser-node */ Object.defineProperty(exports, "__esModule", { value: true }); exports.BrowserCompatibilityError = void 0; exports.isChromeExtension = isChromeExtension; exports.isChromeBased = isChromeBased; exports.verifyBrowserCompatibility = verifyBrowserCompatibility; exports.initBrowserCompatibility = initBrowserCompatibility; /** * Error thrown when browser is not compatible with browser-node */ class BrowserCompatibilityError extends Error { constructor(message) { super(message); this.name = 'BrowserCompatibilityError'; } } exports.BrowserCompatibilityError = BrowserCompatibilityError; /** * Checks if the current environment is a Chrome extension * @returns {boolean} True if running in a Chrome extension, false otherwise */ function isChromeExtension() { try { return typeof window !== 'undefined' && typeof window.chrome !== 'undefined' && window.chrome.runtime !== undefined && window.chrome.runtime.id !== undefined; } catch (e) { // Em ambientes de service worker, acessar window.chrome pode lançar exceções return false; } } /** * Checks if the current browser is Chrome-based * @returns {boolean} True if browser is Chrome-based, false otherwise */ function isChromeBased() { try { // Se estamos em uma extensão Chrome, retornamos true diretamente if (isChromeExtension()) { return true; } if (typeof window === 'undefined' || !window.navigator) { // Not in a browser environment return false; } const userAgent = window.navigator.userAgent.toLowerCase(); return (userAgent.includes('chrome') || userAgent.includes('chromium') || userAgent.includes('edge')); } catch (e) { // Em ambientes de service worker, acessar window.navigator pode lançar exceções return false; } } /** * Verifies browser compatibility and throws an error if not compatible * @throws {BrowserCompatibilityError} If browser is not Chrome-based */ function verifyBrowserCompatibility() { try { // Se estamos em uma extensão Chrome, não precisamos verificar compatibilidade if (isChromeExtension()) { return; } if (!isChromeBased()) { throw new BrowserCompatibilityError('browser-node is only compatible with Chrome-based browsers. ' + 'Please use Chrome, Chromium, Edge, or another Chrome-based browser.'); } } catch (e) { // Em ambientes de service worker, não lançamos erro de compatibilidade console.warn('Skipping browser compatibility check in service worker environment'); } } // Automatically verify browser compatibility when the library is loaded // Skip verification during testing function initBrowserCompatibility() { try { if (typeof window !== 'undefined' && process.env.NODE_ENV !== 'test') { verifyBrowserCompatibility(); } } catch (e) { // Em ambientes de service worker, não inicializamos a verificação de compatibilidade console.warn('Skipping browser compatibility initialization in service worker environment'); } }