UNPKG

woolball-client

Version:

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

96 lines (95 loc) 3.32 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.isSupportedBrowser = isSupportedBrowser; 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) { // In service worker environments, accessing window.chrome may throw return false; } } /** * Checks if the current browser supports WebGPU or WASM (required for AI inference) * @returns {boolean} True if browser supports WebGPU or WASM, false otherwise */ function isSupportedBrowser() { try { // Chrome extensions are always supported if (isChromeExtension()) { return true; } if (typeof window === 'undefined' || !window.navigator) { return false; } // Feature detection: check for WebGPU or WebAssembly support const hasWebGPU = 'gpu' in navigator; const hasWasm = typeof WebAssembly !== 'undefined'; return hasWebGPU || hasWasm; } catch (e) { return false; } } /** * Verifies browser compatibility and throws an error if not compatible * @throws {BrowserCompatibilityError} If browser is not Chrome-based */ function verifyBrowserCompatibility() { try { // Chrome extensions are always compatible if (isChromeExtension()) { return; } if (!isSupportedBrowser()) { throw new BrowserCompatibilityError('browser-node requires a browser with WebGPU or WebAssembly support. ' + 'Please use Chrome, Edge, Safari, or another modern browser.'); } } catch (e) { if (e instanceof BrowserCompatibilityError) { throw e; } // In service worker environments, skip compatibility check 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) { // In service worker environments, skip compatibility initialization console.warn('Skipping browser compatibility initialization in service worker environment'); } }