floriday/index.js

113 lines
3.4 KiB
JavaScript

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