/** * SDK Loader Script - Production * * Use case: Production environments * SDK UI URL: https://sdk.rootfi.dev */ (function () { const iframeId = 'rootfi-link-iframe'; let linkToken = null; let successCallback = null; let onReadyCallback = null; let onExitCallback = null; function initialize(initializeData) { // Clean up any existing iframe and event listener to prevent duplicates const existingIframe = document.querySelector('#' + iframeId); if (existingIframe) { existingIframe.remove(); } window.removeEventListener('message', handler); linkToken = initializeData.linkToken; let showConsentScreen = initializeData.showConsentScreen ?? true; successCallback = initializeData.onSuccess; onReadyCallback = initializeData.onReady; onExitCallback = initializeData.onExit; const params = `?invite_link_id=${encodeURIComponent(linkToken)}&show_close_btn=${!!onExitCallback}&show_consent_screen=${showConsentScreen}`; const iframe = document.createElement('iframe'); iframe.id = iframeId; iframe.height = '100%'; iframe.width = '100%'; iframe.setAttribute('src', 'https://sdk.rootfi.dev' + params); iframe.style.display = 'none'; iframe.style.position = 'fixed'; iframe.style.top = '0'; iframe.style.left = '0'; iframe.style.right = '0'; iframe.style.bottom = '0'; iframe.style.zIndex = '9999999999'; iframe.style.borderWidth = '0'; iframe.style.overflowX = 'hidden'; iframe.style.overflowY = 'auto'; iframe.style.backgroundColor = 'transparent'; iframe.setAttribute('allow', 'clipboard-read; clipboard-write'); document.body.appendChild(iframe); window.addEventListener('message', handler); } const handler = (event) => { const data = event.data; if (data.message_type === 'APP_READY') { onReadyCallback && onReadyCallback(); } else if (data.message_type === 'CLOSE') { onExitCallback && onExitCallback(); } else if (data.message_type === 'CONNECTION_SUCCESS') { successCallback && successCallback(data); } }; function sendMessageToIframe(message) { const iframe = document.querySelector('#' + iframeId); if (iframe && iframe.contentWindow) { iframe.contentWindow.postMessage(message, '*'); } } window.RootfiLink = { initialize: initialize, openLink: (invite_link_id) => { const iframe = document.querySelector('#' + iframeId); iframe.style.display = 'block'; sendMessageToIframe({ message_type: 'OPEN_LINK', // Use provided invite_link_id if available, otherwise fall back to the linkToken from initialize() linkToken: invite_link_id ?? linkToken, }); }, closeLink: () => { const iframe = document.querySelector('#' + iframeId); iframe.style.display = 'none'; }, }; })();