turborepo-remote-cache
Version:
Turborepo remote cache server
72 lines • 6.13 kB
JavaScript
import * as fs from 'node:fs';
import { isBoom } from '@hapi/boom';
import Fastify from 'fastify';
import hyperid from 'hyperid';
import { env } from './env.js';
import { logger } from './logger.js';
import config from './plugins/config.js';
import remoteCache from './plugins/remote-cache/index.js';
const uuid = hyperid({ urlSafe: true });
export function createApp(options = {}) {
const SSL_CERT_PATH = env.get().SSL_CERT_PATH;
const SSL_KEY_PATH = env.get().SSL_KEY_PATH;
const isHttps = SSL_CERT_PATH &&
SSL_KEY_PATH &&
fs.existsSync(SSL_CERT_PATH) &&
fs.existsSync(SSL_KEY_PATH);
const fastifyOptions = {
...options,
...(env.get().HTTP2 ? { http2: true } : {}),
...(isHttps
? {
https: {
key: fs.readFileSync(SSL_KEY_PATH),
cert: fs.readFileSync(SSL_CERT_PATH),
},
}
: {}),
};
const hasConfiguredLogger = 'logger' in fastifyOptions || 'loggerInstance' in fastifyOptions;
if (!hasConfiguredLogger) {
fastifyOptions.loggerInstance = logger;
}
const app = Fastify({
genReqId: () => uuid(),
...fastifyOptions,
});
app.register(config, { overrides: options.configOverrides }).after(() => {
app.register(remoteCache, {
provider: app.config?.STORAGE_PROVIDER,
});
});
app.get('/favicon.ico', {
logLevel: 'silent',
handler: (request, reply) => {
reply.code(204).send();
},
});
app.setErrorHandler((err, request, reply) => {
if (err.validation) {
reply.log.warn(err);
reply.code(400).send({ message: err.message });
}
else if (isBoom(err)) {
reply.log.warn(err);
reply
.code(err.output.statusCode)
.send(err.data != null
? { message: err.message, ...err.data }
: { message: err.output.payload.message });
}
else if (err.statusCode != null && err.statusCode < 500) {
reply.log.warn(err);
reply.code(err.statusCode).send({ message: err.message });
}
else {
request.log.error(err);
reply.code(500).send({ message: err.message });
}
});
return app;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ25DLE9BQU8sT0FJTixNQUFNLFNBQVMsQ0FBQTtBQUNoQixPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUE7QUFDN0IsT0FBTyxFQUFVLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFBO0FBQ3hDLE9BQU8sV0FBVyxNQUFNLGlDQUFpQyxDQUFBO0FBRXpELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBRXZDLE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFVBQXdFLEVBQUU7SUFFMUUsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQTtJQUM3QyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFBO0lBQzNDLE1BQU0sT0FBTyxHQUNYLGFBQWE7UUFDYixZQUFZO1FBQ1osRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDNUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUU3QixNQUFNLGNBQWMsR0FBeUI7UUFDM0MsR0FBRyxPQUFPO1FBQ1YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0MsR0FBRyxDQUFDLE9BQU87WUFDVCxDQUFDLENBQUM7Z0JBQ0Us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