Convert to pop2.ts

This commit is contained in:
Melon 2024-02-21 23:22:41 +00:00
parent 48375db450
commit 955d600d31
Signed by: melon
GPG Key ID: 6C9D970C50D26A25
2 changed files with 22 additions and 21 deletions

View File

@ -1,5 +1,4 @@
import {get} from "svelte/store"; import {loginStore} from "../stores/login";
import {getBearer, loginStore} from "../stores/login";
import {POP2} from "./pop2"; import {POP2} from "./pop2";
const TOKEN_AUTHORIZE_API = import.meta.env.VITE_SSO_ORIGIN + "/authorize"; const TOKEN_AUTHORIZE_API = import.meta.env.VITE_SSO_ORIGIN + "/authorize";

View File

@ -19,6 +19,8 @@
"use strict"; "use strict";
import type {RequestInfo} from "undici-types";
export const POP2 = (function (w) { export const POP2 = (function (w) {
const windowName = "pop2_oauth2_login_popup"; const windowName = "pop2_oauth2_login_popup";
@ -37,45 +39,45 @@ export const POP2 = (function (w) {
window.close(); window.close();
} }
function popupCenterScreen(url, title, w, h) { function popupCenterScreen(url: string | URL, title: string, w: number, h: number) {
const top = (screen.availHeight - h) / 4, const top = (screen.availHeight - h) / 4,
left = (screen.availWidth - w) / 2; left = (screen.availWidth - w) / 2;
return openWindow(url, title, `scrollbars=yes,width=${w},height=${h},top=${top},left=${left}`); return openWindow(url, title, `scrollbars=yes,width=${w},height=${h},top=${top},left=${left}`);
} }
function openWindow(url, winnm, options) { function openWindow(url: string | URL, winnm: string | undefined, options: string) {
const wTop = firstAvailableValue([window.screen.availTop, window.screenY, window.screenTop, 0]); const wTop = firstAvailableValue([window.screen.availTop, window.screenY, window.screenTop, 0]);
const wLeft = firstAvailableValue([window.screen.availLeft, window.screenX, window.screenLeft, 0]); const wLeft = firstAvailableValue([window.screen.availLeft, window.screenX, window.screenLeft, 0]);
let top = "0", let top = 0,
left = "0", left = 0,
result; result;
if ((result = /top=(\d+)/g.exec(options))) top = parseInt(result[1]); if ((result = /top=(\d+)/g.exec(options))) top = parseInt(result[1]);
if ((result = /left=(\d+)/g.exec(options))) left = parseInt(result[1]); if ((result = /left=(\d+)/g.exec(options))) left = parseInt(result[1]);
let w; let w;
if (options) { if (options) {
options = options.replace("top=" + top, "top=" + (parseInt(top) + wTop)); options = options.replace("top=" + top, "top=" + (top + wTop));
options = options.replace("left=" + left, "left=" + (parseInt(left) + wLeft)); options = options.replace("left=" + left, "left=" + (left + wLeft));
w = window.open(url, winnm, options); w = window.open(url, winnm, options);
} else w = window.open(url, winnm); } else w = window.open(url, winnm);
return w; return w;
} }
function firstAvailableValue(arr) { function firstAvailableValue(arr: any[]) {
for (let i = 0; i < arr.length; i++) if (typeof arr[i] != "undefined") return arr[i]; for (let i = 0; i < arr.length; i++) if (typeof arr[i] != "undefined") return arr[i];
} }
let client_endpoint, let client_endpoint: string,
client_id, client_id: string,
scope = "", scope = "",
redirect_uri = window.location.href.substr(0, window.location.href.length - window.location.hash.length).replace(/#$/, ""), redirect_uri = window.location.href.slice(0, window.location.href.length - window.location.hash.length).replace(/#$/, ""),
access_token = localStorage.getItem("pop2_access_token"), access_token: string | null = localStorage.getItem("pop2_access_token"),
callbackWaitForToken, callbackWaitForToken: ((access_token: string) => void) | undefined,
w_width = 400, w_width = 400,
w_height = 360; w_height = 360;
const POP2 = { const POP2 = {
// init // init
init: function (f_client_endpoint, f_client_id, f_scope, width, height) { init: function (f_client_endpoint: string, f_client_id: string, f_scope: string, width: number, height: number) {
if (!f_client_endpoint) return false; if (!f_client_endpoint) return false;
if (!f_client_id) return false; if (!f_client_id) return false;
client_endpoint = f_client_endpoint; client_endpoint = f_client_endpoint;
@ -85,13 +87,13 @@ export const POP2 = (function (w) {
if (height) w_height = height; if (height) w_height = height;
}, },
// receive token from popup // receive token from popup
receiveToken: function (token, expires_in) { receiveToken: function (token: string | boolean | null, expires_in: number) {
if (token !== "ERROR") { if (typeof token === "string" && token !== "ERROR") {
access_token = token; access_token = token;
localStorage.setItem("pop2_access_token", access_token); localStorage.setItem("pop2_access_token", access_token);
if (callbackWaitForToken) callbackWaitForToken(access_token); if (callbackWaitForToken) callbackWaitForToken(access_token);
setTimeout(function () { setTimeout(function () {
access_token = undefined; access_token = null;
localStorage.removeItem("pop2_access_token"); localStorage.removeItem("pop2_access_token");
}, expires_in * 1000); }, expires_in * 1000);
} else if (token === false) { } else if (token === false) {
@ -101,7 +103,7 @@ export const POP2 = (function (w) {
// pass the access token to callback // pass the access token to callback
// if not logged in this triggers login popup; // if not logged in this triggers login popup;
// use isLoggedIn to check login first to prevent popup blocker // use isLoggedIn to check login first to prevent popup blocker
getToken: function (callback, popup = true) { getToken: function (callback: (access_token: string) => void, popup = true) {
if (!client_id || !redirect_uri || !scope) { if (!client_id || !redirect_uri || !scope) {
alert("You need init() first. Check the program flow."); alert("You need init() first. Check the program flow.");
return false; return false;
@ -132,7 +134,7 @@ export const POP2 = (function (w) {
access_token = ""; access_token = "";
localStorage.removeItem("pop2_access_token"); localStorage.removeItem("pop2_access_token");
}, },
clientRequest: function (resource, options, refresh = false) { clientRequest: function (resource: RequestInfo, options: RequestInit, refresh = false) {
const sendRequest = function () { const sendRequest = function () {
options.credentials = "include"; options.credentials = "include";
if (!options.headers) options.headers = {}; if (!options.headers) options.headers = {};
@ -150,7 +152,7 @@ export const POP2 = (function (w) {
}; };
const resendRequest = function () { const resendRequest = function () {
return new Promise(function (res, rej) { return new Promise(function (res, rej) {
access_token = undefined; access_token = null;
POP2.getToken(function () { POP2.getToken(function () {
sendRequest() sendRequest()
.then(function (x) { .then(function (x) {