import moment from 'moment'; import fetch from 'node-fetch'; const _accessTokenEndpoint = 'https://idm.staging.floriday.io/oauth2/ausmw6b47z1BnlHkw0h7/v1/token'; async function getClientToken(models) { const 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(); if (tokenRequest.status === 200) { console.log('Token request successful'); } else { throw new Error( `Token request failed with status ${tokenRequest.status}` ); } 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( models, clientId, clientSecret, accessToken, tokenExpirationDate ); return [accessToken, tokenExpirationDate]; } else { console.log('Using the current token...'); return [clientConfigData[0].currentToken, tokenExpirationDate]; } } async function updateClientConfig( models, 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); } } export { getClientToken };