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
JavaScript
;
/**
* 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');
}
}