UNPKG

hmpps-open-layers-map

Version:

A native Web Component for displaying maps using OpenLayers.

37 lines (36 loc) 1.34 kB
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; }