// This is a helper function to ensure QR scanner compatibility export const ensureScannerCompatibility = () => { // Add basic polyfills for methods that might be missing if (typeof Function.prototype.bind !== "function") { Function.prototype.bind = function (context) { const fn = this; return function () { return fn.apply(context, arguments); }; }; } // Ensure MediaDevices API is available if (typeof window !== "undefined") { if (!navigator.mediaDevices) { navigator.mediaDevices = {}; } // Polyfill for older browsers that don't implement getUserMedia if (!navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia = function(constraints) { const getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia; // Return a rejected promise if getUserMedia is not implemented if (!getUserMedia) { return Promise.reject(new Error('getUserMedia is not implemented in this browser')); } // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise return new Promise(function(resolve, reject) { getUserMedia.call(navigator, constraints, resolve, reject); }); }; } // Ensure console methods exist for debugging if (!window.console) window.console = {}; const methods = ["log", "error", "warn", "info"]; methods.forEach((method) => { if (!window.console[method]) { window.console[method] = function () {}; } }); } return true; }; // Helper function to check if camera is available and accessible export const checkCameraAvailability = async () => { try { if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) { return { available: false, error: 'MediaDevices API not supported' }; } // Try to access the camera with explicit video request const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: false }); // If we get here, camera is available - stop the stream if (stream) { stream.getTracks().forEach(track => track.stop()); } return { available: true }; } catch (error) { return { available: false, error: error.message, name: error.name, permission: error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError' ? 'denied' : 'unknown' }; } };