fingerprint-loader
Version:
A simple function that returns FingerprintJS collectFingerprintData without extra setup
45 lines (40 loc) • 1.5 kB
JavaScript
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);
}