import fetch from "node-fetch"; import moment from "moment"; const _accessTokenEndpoint = "https://idm.staging.floriday.io/oauth2/ausmw6b47z1BnlHkw0h7/v1/token"; import models from "./models/index.js"; let AccessToken = await getClientToken(); let tokenValue = AccessToken[0]; let tokenExpirationDate = AccessToken[1]; try { // Every 30 sec query the database setInterval(async () => { console.log("Querying the API to check for new data..."); console.log("Current token expiration date: ", tokenExpirationDate); if (moment().isAfter(tokenExpirationDate)) { console.log("Token expired, getting a new one..."); AccessToken = await getClientToken(); tokenValue = AccessToken[0]; tokenExpirationDate = AccessToken[1]; } }, 5000); } catch (error) { console.error("Unable to connect to the database:", error); } async function getClientToken() { let clientConfigData = await models.clientConfig.findAll(); const now = moment().format("YYYY-MM-DD HH:mm:ss"); const tokenExpirationDate = clientConfigData[0].tokenExpiration; if ( clientConfigData[0].tokenExpiration == null || moment(now).isAfter(tokenExpirationDate) ) { let clientId = clientConfigData[0].clientId; let clientSecret = clientConfigData[0].clientSecret; const tokenRequest = await fetch(_accessTokenEndpoint, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: `grant_type=client_credentials&client_id=${clientId}&client_secret=${clientSecret}&scope=role:app catalog:read supply:read organization:read network:read`, }); const tokenResponse = await tokenRequest.json(); console.log("Token response: ", tokenResponse); const accessToken = tokenResponse.access_token; let now = moment().format("YYYY-MM-DD HH:mm:ss"); let tokenExpirationDate = moment(now) .add(tokenResponse.expires_in, "s") .format("YYYY-MM-DD HH:mm:ss"); updateClientConfig( clientId, clientSecret, accessToken, tokenExpirationDate ); return [accessToken, tokenExpirationDate]; } else { console.log("Using the current token..."); return [clientConfigData[0].currentToken, tokenExpirationDate]; } } async function updateClientConfig( clientId, clientSecret, accessToken, tokenExpirationDate ) { try { console.log("Updating the client config with the new token..."); await models.clientConfig.update( { clientId: clientId, clientSecret: clientSecret, currentToken: accessToken, tokenExpiration: tokenExpirationDate, }, { where: { id: 1, }, } ); console.log("Client config updated, new Token set"); console.log("New token expiration date: ", tokenExpirationDate); } catch (error) { console.log("There was a error while updating the client config"); console.log(error); } } console.log = function () { var args = Array.prototype.slice.call(arguments); args.unshift(new moment().format("HH:mm:ss") + " -"); console.info.apply(console, args); };