turborepo-remote-cache
Version:
Turborepo remote cache server
54 lines • 4.79 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 headArtifact = {
method: 'HEAD',
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.existsCachedArtifact(artifactId, team);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC1hcnRpZmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3JlbW90ZS1jYWNoZS9yb3V0ZXMvaGVhZC1hcnRpZmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBTXZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzNELE9BQU8sRUFHTCxvQkFBb0IsR0FDckIsTUFBTSxhQUFhLENBQUE7QUFDcEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRWhELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FRckI7SUFDRixNQUFNLEVBQUUsTUFBTTtJQUNkLEdBQUcsRUFBRSxnQkFBZ0I7SUFDckIsTUFBTSxFQUFFLG9CQUFvQjtJQUM1QixhQUFhLEVBQUUsTUFBTTtJQUNyQixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQ2pFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sVUFBVSxDQUFDLGtEQUFrRCxDQUFDLENBQUE7UUFDdEUsQ0FBQztRQUVELElBQUksQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUMxRCxVQUFVLEVBQ1YsSUFBSSxDQUNMLENBQUE7b0JBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQTtnQkFDN0MsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUdiLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7d0JBQzVDLE1BQU0sR0FBRyxDQUFBO29CQUNYLENBQUM7b0JBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLHVDQUF1QyxVQUFVLEVBQUUsQ0FBQyxDQUFBO29CQUN0RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO3dCQUMxQixVQUFVLEVBQUUsR0FBRzt3QkFDZixLQUFLLEVBQUUsV0FBVzt3QkFDbEIsT0FBTyxFQUFFLHdCQUF3QjtxQkFDbEMsQ0FBQyxDQUFBO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUNoQyxJQUFJLEVBQ0osVUFBVSxDQUNYLENBQUE7Z0JBQ0QsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3BDLENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQ3ZELFVBQVUsRUFDVixJQUFJLENBQ0wsQ0FBQTtZQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdEIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFJYixJQUFJLEdBQUcsWUFBWSxxQkFBcUIsRUFBRSxDQUFDO2dCQUN6QyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtnQkFDdkMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDMUIsVUFBVSxFQUFFLEdBQUc7b0JBQ2YsS0FBSyxFQUFFLFdBQVc7b0JBQ2xCLE9BQU8sRUFBRSxvQkFBb0I7aUJBQzlCLENBQUMsQ0FBQTtZQUNKLENBQUM7WUFDRCxNQUFNLEdBQUcsQ0FBQTtRQUNYLENBQUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQSJ9