turborepo-remote-cache 2.9.0 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|

|
|
7
7
|
|
|
8
8
|
[](https://github.com/ducktors/turborepo-remote-cache/releases)   [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/ci.yml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/test.yaml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/release.yml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/docker.yml) [](https://qlty.sh/gh/ducktors/projects/turborepo-remote-cache) [](https://coveralls.io/github/ducktors/turborepo-remote-cache?branch=main) [](https://hub.docker.com/r/ducktors/turborepo-remote-cache) [](https://www.npmjs.com/package/turborepo-remote-cache) [](https://github.com/semantic-release/semantic-release) [](https://securityscorecards.dev/viewer/?uri=github.com/ducktors/turborepo-remote-cache) [](https://www.bestpractices.dev/projects/10164) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
9
|
-
[](#contributors-)
|
|
10
10
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
11
11
|
|
|
12
12
|
This project is an open-source implementation of the [Turborepo custom remote cache server](https://turbo.build/repo/docs/core-concepts/remote-caching#self-hosting). If Vercel's official cache server isn't a viable option, this server is an alternative for self-hosted deployments.
|
|
@@ -127,6 +127,7 @@ fix: fix a bug ---> 1.0.x
|
|
|
127
127
|
<td align="center" valign="top" width="14.28%"><a href="https://clemenskofler.com"><img src="https://avatars.githubusercontent.com/u/3749?v=4?s=100" width="100px;" alt="Clemens Kofler"/><br /><sub><b>Clemens Kofler</b></sub></a><br /><a href="https://github.com/ducktors/turborepo-remote-cache/commits?author=clemens" title="Documentation">📖</a></td>
|
|
128
128
|
<td align="center" valign="top" width="14.28%"><a href="http://thalles.me"><img src="https://avatars.githubusercontent.com/u/76017384?v=4?s=100" width="100px;" alt="Thalles Passos"/><br /><sub><b>Thalles Passos</b></sub></a><br /><a href="https://github.com/ducktors/turborepo-remote-cache/commits?author=ThallesP" title="Code">💻</a></td>
|
|
129
129
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kheyse"><img src="https://avatars.githubusercontent.com/u/2493640?v=4?s=100" width="100px;" alt="Karel Heyse"/><br /><sub><b>Karel Heyse</b></sub></a><br /><a href="https://github.com/ducktors/turborepo-remote-cache/commits?author=kheyse" title="Code">💻</a></td>
|
|
130
|
+
<td align="center" valign="top" width="14.28%"><a href="http://modin.us"><img src="https://avatars.githubusercontent.com/u/45493372?v=4?s=100" width="100px;" alt="Konstantin Modin"/><br /><sub><b>Konstantin Modin</b></sub></a><br /><a href="https://github.com/ducktors/turborepo-remote-cache/commits?author=KonstantinModin" title="Code">💻</a></td>
|
|
130
131
|
</tr>
|
|
131
132
|
</tbody>
|
|
132
133
|
</table>
|
package/dist/app.js
CHANGED
|
@@ -58,6 +58,10 @@ export function createApp(options = {}) {
|
|
|
58
58
|
? { message: err.message, ...err.data }
|
|
59
59
|
: { message: err.output.payload.message });
|
|
60
60
|
}
|
|
61
|
+
else if (err.statusCode != null && err.statusCode < 500) {
|
|
62
|
+
reply.log.warn(err);
|
|
63
|
+
reply.code(err.statusCode).send({ message: err.message });
|
|
64
|
+
}
|
|
61
65
|
else {
|
|
62
66
|
request.log.error(err);
|
|
63
67
|
reply.code(500).send({ message: err.message });
|
|
@@ -65,4 +69,4 @@ export function createApp(options = {}) {
|
|
|
65
69
|
});
|
|
66
70
|
return app;
|
|
67
71
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ25DLE9BQU8sT0FJTixNQUFNLFNBQVMsQ0FBQTtBQUNoQixPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUE7QUFDN0IsT0FBTyxFQUFVLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFBO0FBQ3hDLE9BQU8sV0FBVyxNQUFNLGlDQUFpQyxDQUFBO0FBRXpELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBRXZDLE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFVBQXdFLEVBQUU7SUFFMUUsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQTtJQUM3QyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFBO0lBQzNDLE1BQU0sT0FBTyxHQUNYLGFBQWE7UUFDYixZQUFZO1FBQ1osRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDNUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUU3QixNQUFNLGNBQWMsR0FBeUI7UUFDM0MsR0FBRyxPQUFPO1FBQ1YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0MsR0FBRyxDQUFDLE9BQU87WUFDVCxDQUFDLENBQUM7Z0JBQ0Us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
|
package/dist/env.js
CHANGED
|
@@ -14,6 +14,7 @@ export const STORAGE_PROVIDERS = {
|
|
|
14
14
|
AZURE_BLOB_STORAGE: 'azure-blob-storage',
|
|
15
15
|
MINIO: 'minio',
|
|
16
16
|
};
|
|
17
|
+
export const BODY_LIMIT_DEFAULT = 104857600;
|
|
17
18
|
const schema = Type.Object({
|
|
18
19
|
NODE_ENV: Type.Optional(Type.Enum(NODE_ENVS, { default: NODE_ENVS.PRODUCTION })),
|
|
19
20
|
AUTH_MODE: Type.Optional(Type.Enum({ static: 'static', jwt: 'jwt', none: 'none' })),
|
|
@@ -30,7 +31,7 @@ const schema = Type.Object({
|
|
|
30
31
|
LOG_MODE: Type.Optional(Type.String({ default: 'stdout' })),
|
|
31
32
|
LOG_FILE: Type.Optional(Type.String({ default: 'server.log' })),
|
|
32
33
|
STORAGE_PROVIDER: Type.Optional(Type.Enum(STORAGE_PROVIDERS, { default: STORAGE_PROVIDERS.LOCAL })),
|
|
33
|
-
BODY_LIMIT: Type.Optional(Type.Number({ default:
|
|
34
|
+
BODY_LIMIT: Type.Optional(Type.Number({ default: BODY_LIMIT_DEFAULT })),
|
|
34
35
|
STORAGE_PATH: Type.Optional(Type.String()),
|
|
35
36
|
STORAGE_PATH_USE_TMP_FOLDER: Type.Optional(Type.Boolean({ default: true })),
|
|
36
37
|
HTTP2: Type.Optional(Type.Boolean({ default: false })),
|
|
@@ -46,6 +47,7 @@ const schema = Type.Object({
|
|
|
46
47
|
SSL_KEY_PATH: Type.Optional(Type.String()),
|
|
47
48
|
SSL_CERT_PATH: Type.Optional(Type.String()),
|
|
48
49
|
TURBO_REMOTE_CACHE_SIGNATURE_KEY: Type.Optional(Type.String()),
|
|
50
|
+
READ_ONLY: Type.Optional(Type.Boolean({ default: false })),
|
|
49
51
|
}, {
|
|
50
52
|
additionalProperties: false,
|
|
51
53
|
});
|
|
@@ -70,4 +72,13 @@ export const env = {
|
|
|
70
72
|
return _env;
|
|
71
73
|
},
|
|
72
74
|
};
|
|
73
|
-
|
|
75
|
+
export function resolveBodyLimit(input) {
|
|
76
|
+
if (typeof input === 'number' && Number.isFinite(input) && input > 0) {
|
|
77
|
+
return { value: Math.floor(input) };
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
value: BODY_LIMIT_DEFAULT,
|
|
81
|
+
warning: `BODY_LIMIT value ${String(input)} is not a positive finite number; falling back to default ${BODY_LIMIT_DEFAULT}`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFdEMsTUFBTSxTQUFTLEdBQUc7SUFDaEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsSUFBSSxFQUFFLE1BQU07Q0FDSixDQUFBO0FBR1YsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsS0FBSyxFQUFFLE9BQU87SUFDZCxFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1Isb0JBQW9CLEVBQUUsc0JBQXNCO0lBQzVDLGtCQUFrQixFQUFFLG9CQUFvQjtJQUN4QyxLQUFLLEVBQUUsT0FBTztDQUNOLENBQUE7QUFNVixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUE7QUFFM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FDeEI7SUFDRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3hEO0lBQ0QsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQzFEO0lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDekMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFR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
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import closeWithGrace from 'close-with-grace';
|
|
2
2
|
import { createApp } from './app.js';
|
|
3
|
-
import { env } from './env.js';
|
|
3
|
+
import { env, resolveBodyLimit } from './env.js';
|
|
4
|
+
const { value: bodyLimit, warning: bodyLimitWarning } = resolveBodyLimit(env.get().BODY_LIMIT);
|
|
4
5
|
const app = createApp({
|
|
5
6
|
trustProxy: true,
|
|
6
|
-
bodyLimit
|
|
7
|
+
bodyLimit,
|
|
7
8
|
});
|
|
9
|
+
if (bodyLimitWarning) {
|
|
10
|
+
app.log.warn(bodyLimitWarning);
|
|
11
|
+
}
|
|
12
|
+
app.log.info({ bodyLimit }, 'Server bodyLimit configured');
|
|
8
13
|
closeWithGrace({ delay: 10000 }, async function ({ err, signal }) {
|
|
9
14
|
if (err) {
|
|
10
15
|
app.log.error(err);
|
|
@@ -18,4 +23,4 @@ app.listen({ host: env.get().HOST, port: env.get().PORT }, (err) => {
|
|
|
18
23
|
process.exit(1);
|
|
19
24
|
}
|
|
20
25
|
});
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFFN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRWhELE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLGdCQUFnQixDQUN0RSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUNyQixDQUFBO0FBRUQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLFVBQVUsRUFBRSxJQUFJO0lBR2hCLFNBQVM7Q0FDVixDQUFDLENBQUE7QUFFRixJQUFJLGdCQUFnQixFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUNoQyxDQUFDO0FBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSw2QkFBNkIsQ0FBQyxDQUFBO0FBRTFELGNBQWMsQ0FDWixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFDaEIsS0FBSyxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBb0M7SUFDL0QsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sMkNBQTJDLENBQUMsQ0FBQTtJQUVuRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtBQUNuQixDQUFDLENBQ0YsQ0FBQTtBQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7SUFDakUsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFBIn0=
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { STORAGE_PROVIDERS } from '../../env.js';
|
|
1
|
+
import { STORAGE_PROVIDERS, resolveBodyLimit } from '../../env.js';
|
|
2
2
|
import auth from './auth/index.js';
|
|
3
3
|
import { artifactsEvents, cleanCache, getArtifact, getStatus, headArtifact, putArtifact, } from './routes/index.js';
|
|
4
4
|
import { createLocation } from './storage/index.js';
|
|
5
5
|
async function turboRemoteCache(instance, options) {
|
|
6
|
-
const bodyLimit = instance.config.BODY_LIMIT;
|
|
6
|
+
const { value: bodyLimit, warning: bodyLimitWarning } = resolveBodyLimit(instance.config.BODY_LIMIT);
|
|
7
|
+
if (bodyLimitWarning) {
|
|
8
|
+
instance.log.warn(bodyLimitWarning);
|
|
9
|
+
}
|
|
7
10
|
const { apiVersion = 'v8', provider = STORAGE_PROVIDERS.LOCAL } = options;
|
|
8
11
|
instance.addContentTypeParser('application/octet-stream', { parseAs: 'buffer', bodyLimit }, async function parser(request, payload) {
|
|
9
12
|
return payload;
|
|
@@ -34,4 +37,4 @@ async function turboRemoteCache(instance, options) {
|
|
|
34
37
|
}, { prefix: `/${apiVersion}` });
|
|
35
38
|
}
|
|
36
39
|
export default turboRemoteCache;
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ2xFLE9BQU8sSUFBSSxNQUFNLGlCQUFpQixDQUFBO0FBQ2xDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsR0FDWixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVuRCxLQUFLLFVBQVUsZ0JBQWdCLENBQzdCLFFBQXlCLEVBQ3pCLE9BR0M7SUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxnQkFBZ0IsQ0FDdEUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQzNCLENBQUE7SUFDRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBQ0QsTUFBTSxFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUUsUUFBUSxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUV6RSxRQUFRLENBQUMsb0JBQW9CLENBQzNCLDBCQUEwQixFQUMxQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQ2hDLEtBQUssVUFBVSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU87UUFDcEMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQyxDQUNGLENBQUE7SUFFRCxRQUFRLENBQUMsUUFBUSxDQUNmLFVBQVUsRUFDVixjQUFjLENBQUMsUUFBUSxFQUFFO1FBQ3ZCLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWE7UUFDeEMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYTtRQUN4QyxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZO1FBQ2xDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVM7UUFDakMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVztRQUNyQyxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7UUFDN0MsVUFBVSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQ2xFLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWM7UUFDekMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLDJCQUEyQjtRQUNyRCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLHFCQUFxQjtRQUN2RCxVQUFVLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjO0tBQzNDLENBQUMsQ0FDSCxDQUFBO0lBRUQsUUFBUSxDQUFDLFFBQVEsQ0FDZixLQUFLLFdBQVcsQ0FBQztRQUNmLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDckIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNwQixDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDckIsQ0FBQyxFQUNELEVBQUUsTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FDN0IsQ0FBQTtJQUVELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FDckIsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ1YsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNwQixDQUFDLEVBQ0QsRUFBRSxNQUFNLEVBQUUsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUM3QixDQUFBO0FBQ0gsQ0FBQztBQUVELGVBQWUsZ0JBQWdCLENBQUEifQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { badRequest } from '@hapi/boom';
|
|
1
|
+
import { badRequest, forbidden } from '@hapi/boom';
|
|
2
2
|
import { DEFAULT_OLDER_THAN_DAYS, cleanRouteSchema, } from './clean-schema.js';
|
|
3
3
|
function assertSafeTeamSlug(slug) {
|
|
4
4
|
if (slug === '.' ||
|
|
@@ -14,6 +14,9 @@ export const cleanCache = {
|
|
|
14
14
|
schema: cleanRouteSchema,
|
|
15
15
|
authorization: 'write',
|
|
16
16
|
async handler(req, reply) {
|
|
17
|
+
if (this.config.READ_ONLY) {
|
|
18
|
+
throw forbidden('Remote cache is running in read-only mode');
|
|
19
|
+
}
|
|
17
20
|
const slug = req.query.slug;
|
|
18
21
|
assertSafeTeamSlug(slug);
|
|
19
22
|
const olderThanDays = req.query.olderThan ?? DEFAULT_OLDER_THAN_DAYS;
|
|
@@ -21,4 +24,4 @@ export const cleanCache = {
|
|
|
21
24
|
return reply.send(result);
|
|
22
25
|
},
|
|
23
26
|
};
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvcm91dGVzL2NsZWFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBTWxELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sbUJBQW1CLENBQUE7QUFFMUIsU0FBUyxrQkFBa0IsQ0FBQyxJQUFZO0lBQ3RDLElBQ0UsSUFBSSxLQUFLLEdBQUc7UUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUNuQixDQUFDO1FBQ0QsTUFBTSxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDbEMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBT25CO0lBQ0YsTUFBTSxFQUFFLE1BQU07SUFDZCxHQUFHLEVBQUUsUUFBUTtJQUNiLE1BQU0sRUFBRSxnQkFBZ0I7SUFDeEIsYUFBYSxFQUFFLE9BQU87SUFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUN0QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsTUFBTSxTQUFTLENBQUMsMkNBQTJDLENBQUMsQ0FBQTtRQUM5RCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUE7UUFDM0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFeEIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksdUJBQXVCLENBQUE7UUFDcEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUUzRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0IsQ0FBQztDQUNGLENBQUEifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Readable } from 'stream';
|
|
2
|
-
import { badRequest, preconditionFailed } from '@hapi/boom';
|
|
2
|
+
import { badRequest, forbidden, preconditionFailed } from '@hapi/boom';
|
|
3
3
|
import { artifactsRouteSchemaWithHeaders, } from './schema.js';
|
|
4
4
|
export const putArtifact = {
|
|
5
5
|
url: '/artifacts/:id',
|
|
@@ -7,6 +7,9 @@ export const putArtifact = {
|
|
|
7
7
|
schema: artifactsRouteSchemaWithHeaders,
|
|
8
8
|
authorization: 'write',
|
|
9
9
|
async handler(req, reply) {
|
|
10
|
+
if (this.config.READ_ONLY) {
|
|
11
|
+
throw forbidden('Remote cache is running in read-only mode');
|
|
12
|
+
}
|
|
10
13
|
const artifactId = req.params.id;
|
|
11
14
|
const team = req.query.teamId ?? req.query.team ?? req.query.slug;
|
|
12
15
|
if (!team) {
|
|
@@ -28,4 +31,4 @@ export const putArtifact = {
|
|
|
28
31
|
}
|
|
29
32
|
},
|
|
30
33
|
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHV0LWFydGlmYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL3JvdXRlcy9wdXQtYXJ0aWZhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQU10RSxPQUFPLEVBSUwsK0JBQStCLEdBQ2hDLE1BQU0sYUFBYSxDQUFBO0FBRXBCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FVcEI7SUFDRixHQUFHLEVBQUUsZ0JBQWdCO0lBQ3JCLE1BQU0sRUFBRSxLQUFLO0lBQ2IsTUFBTSxFQUFFLCtCQUErQjtJQUN2QyxhQUFhLEVBQUUsT0FBTztJQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO1FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixNQUFNLFNBQVMsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO1FBQzlELENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUNqRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLFVBQVUsQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO1FBQ3RFLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFFakQsTUFBTSxlQUFlLEdBQW9CO2dCQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUNoQyxVQUFVLEVBQ1YsSUFBSSxFQUNKLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUN4QjthQUNGLENBQUE7WUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hFLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FDckUsQ0FBQTtZQUNILENBQUM7WUFFRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUE7WUFFbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBRWIsTUFBTSxrQkFBa0IsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNyRSxDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUEifQ==
|