UNPKG

@ravenpay/bankbox-me-sdk

Version:
52 lines (51 loc) 1.72 kB
class EventWorker extends EventTarget { constructor() { super(); this.handledEvents = new Set(); this.isIframe = window !== window.parent; // Check if running inside an iframe this.listenToMessages(); this.setupClearInterval(); } emit(type, data) { const event = new CustomEvent(type, { detail: data }); this.dispatchEvent(event); // Send message to the parent if in an iframe, else send to all iframes if (this.isIframe) { window.parent.postMessage({ type, data }, "*"); } else { this.broadcastToIframes(type, data); } } subscribe(key, callback) { const eventHandler = (e) => { callback(e); }; this.addEventListener(key, eventHandler); } listenToMessages() { window.addEventListener("message", (event) => { if (!event.data || !event.data.type) return; const { type, data } = event.data; if (!this.handledEvents.has(type)) { this.handledEvents.add(type); this.dispatchEvent(new CustomEvent(type, { detail: data })); } }); } broadcastToIframes(type, data) { const iframes = document.querySelectorAll("iframe"); iframes.forEach((iframe) => { var _a; (_a = iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage({ type, data }, "*"); }); } setupClearInterval() { setInterval(() => { this.handledEvents.clear(); }, 600); // Clear every 60 seconds } } export const $event = new EventWorker(); export default $event;