turborepo-remote-cache
Version:
Turborepo remote cache server
56 lines • 5 kB
JavaScript
import { badRequest } from '@hapi/boom';
import { ArtifactNotFoundError } from '../storage/index.js';
import { artifactsRouteSchema, } from './schema.js';
import { buildCdnRedirectUrl } from './utils.js';
export const getArtifact = {
method: 'GET',
exposeHeadRoute: false,
url: '/artifacts/:id',
schema: artifactsRouteSchema,
authorization: 'read',
async handler(req, reply) {
const artifactId = req.params.id;
const team = req.query.teamId ?? req.query.team ?? req.query.slug;
if (!team) {
throw badRequest(`querystring should have required property 'team'`);
}
try {
if (this.config.TURBO_REMOTE_CACHE_SIGNATURE_KEY) {
try {
const artifactTag = await this.location.getCachedArtifactTag(artifactId, team);
reply.header('x-artifact-tag', artifactTag);
}
catch (err) {
if (!(err instanceof ArtifactNotFoundError)) {
throw err;
}
req.log.info(err, `Could not retrieve artifact tag for ${artifactId}`);
return reply.code(404).send({
statusCode: 404,
error: 'Not Found',
message: 'Artifact tag not found',
});
}
}
if (this.config.TURBO_CACHE_READ_URL) {
const artifactUrl = buildCdnRedirectUrl(this.config.TURBO_CACHE_READ_URL, team, artifactId);
return reply.redirect(artifactUrl);
}
const artifact = await this.location.getCachedArtifact(artifactId, team);
reply.header('Content-Type', 'application/octet-stream');
return reply.send(artifact);
}
catch (err) {
if (err instanceof ArtifactNotFoundError) {
req.log.info(err, 'Artifact not found');
return reply.code(404).send({
statusCode: 404,
error: 'Not Found',
message: 'Artifact not found',
});
}
throw err;
}
},
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFydGlmYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL3JvdXRlcy9nZXQtYXJ0aWZhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQU12QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzRCxPQUFPLEVBR0wsb0JBQW9CLEdBQ3JCLE1BQU0sYUFBYSxDQUFBO0FBQ3BCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVoRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBUXBCO0lBQ0YsTUFBTSxFQUFFLEtBQUs7SUFDYixlQUFlLEVBQUUsS0FBSztJQUN0QixHQUFHLEVBQUUsZ0JBQWdCO0lBQ3JCLE1BQU0sRUFBRSxvQkFBb0I7SUFDNUIsYUFBYSxFQUFFLE1BQU07SUFDckIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUN0QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUNqRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLFVBQVUsQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO1FBQ3RFLENBQUM7UUFFRCxJQUFJLENBQUM7WUFFSCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDO29CQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FDMUQsVUFBVSxFQUNWLElBQUksQ0FDTCxDQUFBO29CQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUE7Z0JBQzdDLENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFHYixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVkscUJBQXFCLENBQUMsRUFBRSxDQUFDO3dCQUM1QyxNQUFNLEdBQUcsQ0FBQTtvQkFDWCxDQUFDO29CQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSx1Q0FBdUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtvQkFDdEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDMUIsVUFBVSxFQUFFLEdBQUc7d0JBQ2YsS0FBSyxFQUFFLFdBQVc7d0JBQ2xCLE9BQU8sRUFBRSx3QkFBd0I7cUJBQ2xDLENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFDaEMsSUFBSSxFQUNKLFVBQVUsQ0FDWCxDQUFBO2dCQUNELE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUN4RSxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFBO1lBQ3hELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM3QixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUliLElBQUksR0FBRyxZQUFZLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3pDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO2dCQUN2QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUMxQixVQUFVLEVBQUUsR0FBRztvQkFDZixLQUFLLEVBQUUsV0FBVztvQkFDbEIsT0FBTyxFQUFFLG9CQUFvQjtpQkFDOUIsQ0FBQyxDQUFBO1lBQ0osQ0FBQztZQUNELE1BQU0sR0FBRyxDQUFBO1FBQ1gsQ0FBQztJQUNILENBQUM7Q0FDRixDQUFBIn0=