UNPKG

@adyen/openbankingsdk

Version:
64 lines (63 loc) 1.82 kB
const OpenBankingSDKStyles = ""; const WIDGET_IFRAME_CLASS = "adyen-open-banking-sdk-widget"; const WIDGET_CONTAINER_CLASS = `${WIDGET_IFRAME_CLASS}-container`; class OpenBankingSDK { constructor({ divElement, link, successHandler, errorHandler, eventHandler }) { this.divElement = divElement; this.link = link; this.successHandler = successHandler; this.errorHandler = errorHandler; this.eventHandler = eventHandler; } static create(parameters) { return new OpenBankingSDK(parameters); } open() { this.iframe = document.createElement("iframe"); this.iframe.setAttribute("allowFullscreen", "true"); this.iframe.classList.add(WIDGET_IFRAME_CLASS); this.divElement.appendChild(this.iframe); this.divElement.classList.add(WIDGET_CONTAINER_CLASS); const iframeUrl = new URL(this.link); const iframeWindow = this.iframe.contentWindow; this.listener = ({ data, origin, source }) => { if (source !== iframeWindow || origin !== iframeUrl.origin) return; switch (data.type) { case "success": this.successHandler(data.code, data.state); break; case "error": this.errorHandler(data.error_code, data.error_message, data.state, data.metadata); break; case "event": this.eventHandler && this.eventHandler(data.event, data.provider); break; } }; window.addEventListener("message", this.listener); this.iframe.setAttribute("src", iframeUrl.href); } destroy() { if (this.listener) { window.removeEventListener("message", this.listener); } if (this.iframe) { this.divElement.removeChild(this.iframe); this.iframe = void 0; } } } export { OpenBankingSDK as default };