turborepo-remote-cache
Version:
Turborepo remote cache server
53 lines • 5.08 kB
JavaScript
import { Boom, forbidden, isBoom, unauthorized } from '@hapi/boom';
import { fastifyJwtJwks } from 'fastify-jwt-jwks';
import fp from 'fastify-plugin';
export default fp(async (fastify) => {
if (!fastify.config.JWKS_URL) {
throw new Error('Must provide JWKS url when using JWT authentication');
}
await fastify.register(fastifyJwtJwks, {
audience: fastify.config.JWT_AUDIENCE,
issuer: fastify.config.JWT_ISSUER,
jwksUrl: fastify.config.JWKS_URL,
formatUser(payload) {
return { scope: new Set(payload.scope?.split(' ')) };
},
});
const readScopes = [fastify.config.JWT_READ_SCOPES || []].flat();
const writeScopes = [fastify.config.JWT_WRITE_SCOPES || []].flat();
fastify.addHook('onRequest', fastify.authenticate);
fastify.addHook('onRoute', async (route) => {
if (route.authorization &&
route.authorization === 'read' &&
readScopes.length > 0) {
async function authorizeRead(request) {
if (!readScopes.some((scope) => request.user.scope.has(scope)))
throw forbidden();
}
route.onRequest = [...[route.onRequest ?? []].flat(), authorizeRead];
}
if (route.authorization &&
route.authorization === 'write' &&
writeScopes.length > 0) {
async function authorizeWrite(request) {
if (!writeScopes.some((scope) => request.user.scope.has(scope)))
throw forbidden();
}
route.onRequest = [...[route.onRequest ?? []].flat(), authorizeWrite];
}
});
fastify.setErrorHandler(async (error, req, res) => {
if (isBoom(error)) {
throw error;
}
else if (error.code?.startsWith('FST_JWT_')) {
throw new Boom(error.message, {
statusCode: error.statusCode || 500,
});
}
else {
throw unauthorized();
}
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL2F1dGgvand0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBUy9CLGVBQWUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUE7SUFDeEUsQ0FBQztJQUVELE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUU7UUFDckMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWTtRQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ2pDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVE7UUFDaEMsVUFBVSxDQUFDLE9BQU87WUFDaEIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDdEQsQ0FBQztLQUNGLENBQUMsQ0FBQTtJQUNGLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDaEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2xFLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNsRCxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDekMsSUFDRSxLQUFLLENBQUMsYUFBYTtZQUNuQixLQUFLLENBQUMsYUFBYSxLQUFLLE1BQU07WUFDOUIsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3JCLENBQUM7WUFDRCxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQXVCO2dCQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1RCxNQUFNLFNBQVMsRUFBRSxDQUFBO1lBQ3JCLENBQUM7WUFDRCxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDdEUsQ0FBQztRQUVELElBQ0UsS0FBSyxDQUFDLGFBQWE7WUFDbkIsS0FBSyxDQUFDLGFBQWEsS0FBSyxPQUFPO1lBQy9CLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN0QixDQUFDO1lBQ0QsS0FBSyxVQUFVLGNBQWMsQ0FBQyxPQUF1QjtnQkFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDN0QsTUFBTSxTQUFTLEVBQUUsQ0FBQTtZQUNyQixDQUFDO1lBQ0QsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ3ZFLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDaEQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDOUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUM1QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxHQUFHO2FBQ3BDLENBQUMsQ0FBQTtRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxZQUFZLEVBQUUsQ0FBQTtRQUN0QixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSJ9