hmpps-open-layers-map
Version:
A native Web Component for displaying maps using OpenLayers.
37 lines (36 loc) • 1.34 kB
JavaScript
import express from 'express';
import superagent from 'superagent';
import qs from 'qs';
let cachedToken = null;
function isTokenExpired(token) {
const expiryTime = token.issued_at + parseInt(token.expires_in, 10) * 1000;
return Date.now() >= expiryTime - 60_000; // refresh 1 min before expiry
}
async function fetchNewToken(authUrl, apiKey, apiSecret) {
const response = await superagent
.post(authUrl)
.auth(apiKey, apiSecret)
.set({ 'Content-Type': 'application/x-www-form-urlencoded' })
.send(qs.stringify({ grant_type: 'client_credentials' }));
const token = response.body;
token.issued_at = Date.now();
return token;
}
export function mojMapMiddleware({ authUrl, apiKey, apiSecret }) {
if (!authUrl || !apiKey || !apiSecret) {
throw new Error('Missing OS Maps credentials. Ensure authUrl, apiKey, and apiSecret are provided.');
}
const router = express.Router();
router.get('/map/token', async (_req, res, next) => {
try {
if (!cachedToken || isTokenExpired(cachedToken)) {
cachedToken = await fetchNewToken(authUrl, apiKey, apiSecret);
}
res.json({ access_token: cachedToken.access_token });
}
catch (error) {
next(error);
}
});
return router;
}