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; }