62 lines
1.2 KiB
TypeScript
62 lines
1.2 KiB
TypeScript
import { io, Socket } from 'socket.io-client';
|
|
import * as fs from 'fs';
|
|
|
|
export async function load() {
|
|
const promise = getJwt();
|
|
|
|
return {
|
|
promise
|
|
};
|
|
}
|
|
|
|
async function getJwt(): Promise<string> {
|
|
const socket = io('https://status.neshweb.net/');
|
|
const credFile = './credentials.json';
|
|
let token = '';
|
|
let valid = false;
|
|
|
|
if (fs.existsSync(credFile)) {
|
|
const content = fs.readFileSync(credFile);
|
|
token = content.toString();
|
|
}
|
|
|
|
socket.on('connect', async () => {
|
|
if (token == '') {
|
|
token = await login(socket);
|
|
valid = true;
|
|
} else {
|
|
socket.emit('loginByToken', token, async (res) => {
|
|
if (!res.ok) {
|
|
token = await login(socket);
|
|
}
|
|
valid = true;
|
|
});
|
|
}
|
|
});
|
|
|
|
while (!valid) {
|
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
}
|
|
|
|
fs.writeFileSync(credFile, token);
|
|
|
|
return token;
|
|
}
|
|
|
|
async function login(socket: Socket): Promise<string> {
|
|
let token = '';
|
|
socket.emit(
|
|
'login',
|
|
{ username: process.env.KUMA_USERNAME, password: process.env.KUMA_PASSWORD, token: '' },
|
|
(res: { token: string }) => {
|
|
token = res.token;
|
|
socket.close();
|
|
}
|
|
);
|
|
|
|
while (token == '') {
|
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
}
|
|
|
|
return token;
|
|
}
|