@adyen/openbankingsdk
Version:
64 lines (63 loc) • 1.82 kB
JavaScript
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
};