function openLoginPopup(options) { return new Promise((resolve, reject) => { const width = options.width || 500; const height = options.height || 700; const left = window.screen.width / 2 - width / 2; const top = window.screen.height / 2 - height / 2; const origin = new URL(options.url).origin; const popup = window.open( options.url, options.name, `menubar=no,location=no,resizable=no,scrollbars=no,status=no,width=${width},height=${height},top=${top},left=${left}` ); let targetOrigin = ""; if (!popup || typeof popup.closed === "undefined" || popup.closed) { const error = new Error("Failed to open auth popup."); error.name = "PopupRejectedError"; reject(error); return; } const messageListener = (event) => { if (event.source !== popup) { return; } if (event.origin !== origin) { return; } const { data } = event; if (data.type === "config_info") { targetOrigin = data.targetOrigin; return; } if (data.type !== "authorization_response") { return; } const authResult = data; if ("error" in authResult) { const error = new Error(authResult.error.message); error.name = authResult.error.name; reject(error); } else { resolve(authResult.response); } done(); }; const intervalId = setInterval(() => { if (popup.closed) { const errMessage = `Login failed, ${targetOrigin && targetOrigin !== window.location.origin ? `Incorrect app origin, expected ${targetOrigin}` : "popup was closed"}`; const error = new Error(errMessage); error.name = "PopupClosedError"; reject(error); done(); } }, 100); function done() { window.removeEventListener("message", messageListener); clearInterval(intervalId); } window.addEventListener("message", messageListener); }); } export { openLoginPopup }; //# sourceMappingURL=loginPopup.esm.js.map