UNPKG

@birdie-so/snippet

Version:

Helper for integrating the Birdie screen recording snippet into modern JavaScript apps. Requires a Birdie account.

58 lines (48 loc) 1.62 kB
let _readyCallbacks = []; export function initBirdie({ clientId, metadata, onReady, ...otherSettings }) { if (!clientId) { console.error('[Birdie] Missing required clientId in initBirdie()'); return; } if (typeof window === 'undefined') return; // Always predefine birdieSettings first (or reuse if already present) if (!window.birdieSettings) { window.birdieSettings = {}; } // Assign metadata and other settings first window.birdieSettings.metadata = metadata; Object.assign(window.birdieSettings, otherSettings); // Assign onBirdieReady BEFORE appending the script window.birdieSettings.onBirdieReady = () => { _readyCallbacks.forEach(cb => cb(window.birdie)); _readyCallbacks = []; }; // Queue the onReady handler if (onReady) { registerBirdieReadyCallback(onReady); } // Inject script if not already if (!document.getElementById('birdie-snippet')) { const script = document.createElement('script'); script.src = `https://app.birdie.so/widget/embed/${clientId}`; script.async = true; script.id = 'birdie-snippet'; document.body.appendChild(script); } } function registerBirdieReadyCallback(callback) { if (window.birdie) { callback(window.birdie); } else { _readyCallbacks.push(callback); } } export function getBirdieInstance(onReady) { if (window.birdie) { onReady?.(window.birdie); return window.birdie; } else { registerBirdieReadyCallback(onReady); return null; } }