UNPKG

fingerprint-loader

Version:

A simple function that returns FingerprintJS collectFingerprintData without extra setup

45 lines (40 loc) 1.5 kB
let fingerprintFn = null; let isLoading = false; let loadCallbacks = []; function loadFingerprintJS() { if (fingerprintFn) return Promise.resolve(fingerprintFn); if (isLoading) { return new Promise((resolve, reject) => { loadCallbacks.push({ resolve, reject }); }); } isLoading = true; return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = 'https://agent.fingerprint.local/dist/bundle.js?' + Date.now(); script.onload = () => { if (window.FingerprintJS) { fingerprintFn = window.FingerprintJS.collectFingerprintData; loadCallbacks.forEach(cb => cb.resolve(fingerprintFn)); loadCallbacks = []; resolve(fingerprintFn); } else { const error = new Error('FingerprintJS failed to load.'); loadCallbacks.forEach(cb => cb.reject(error)); loadCallbacks = []; reject(error); } }; script.onerror = (err) => { const error = new Error('Failed to load FingerprintJS script'); loadCallbacks.forEach(cb => cb.reject(error)); loadCallbacks = []; reject(error); }; document.head.appendChild(script); }); } export default async function collectFingerprintData(options) { const fn = await loadFingerprintJS(); return fn(options); }