const axios = require("axios"); const shared = require("./shared.js"); const { Log } = require("./logs.js"); let userID; async function TokenRenew() { setInterval(async () => { shared.eventEmitter.emit("tokenRenewalStart"); // ottieni l'ID dell'utente associato al token userID = await getUserID(); // ottieni l'ID del token corrente const tokenID = await getCurrentTokenID(); // crea nuovo token const newToken = await getNewToken(); shared.setToken(newToken); // cancella il token precedente await deleteToken(tokenID); shared.eventEmitter.emit("tokenRenewalEnd"); }, day - hour); } async function getUserID() { try { const response = await axios.get( "https://api.netbird.io/api/users/current", { headers: { Accept: "application/json", Authorization: `Token ${shared.getToken()}`, }, } ); Log(`[${shared.now()}] UserID: ${response.data.id}`); return response.data.id; } catch (error) { Log(`[${shared.now()}] ${error}`); process.exit(3); } } async function deleteToken(tokenID) { try { await axios.delete( `https://api.netbird.io/api/users/${userID}/tokens/${tokenID}`, { headers: { Authorization: `Token ${shared.getToken()}`, }, } ); Log(`[${shared.now()}] Token con ID ${tokenID} cancellato con successo`); } catch (error) { Log(`[${shared.now()}] ${error}`); process.exit(3); } } async function getCurrentTokenID() { try { const response = await axios.get( `https://api.netbird.io/api/users/${userID}/tokens`, { headers: { Accept: "application/json", Authorization: `Token ${shared.getToken()}`, }, } ); const token = response.data.find((t) => t.name === "Uptime Kuma"); if (!token) throw new Error("Token 'Uptime Kuma' non trovato"); Log(`[${shared.now()}] CurrentTokenID: ${token.id}`); return token.id; } catch (error) { Log(`[${shared.now()}] ${error}`); process.exit(3); } } async function getNewToken() { try { const response = await axios.post( `https://api.netbird.io/api/users/${userID}/tokens`, { name: "Uptime Kuma", expires_in: 2, }, { headers: { Accept: "application/json", Authorization: `Token ${shared.getToken()}`, "Content-Type": "application/json", }, } ); Log(`[${shared.now()}] Nuovo token creato: ${response.data.plain_token}`); return response.data.plain_token; } catch (error) { Log(`[${shared.now()}] ${error}`); process.exit(3); } } module.exports = { TokenRenew, };