@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
JavaScript
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;
}
}