turborepo-remote-cache 1.15.0 → 2.0.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 +4 -2
- package/dist/app.js +40 -0
- package/dist/aws-lambda.js +7 -0
- package/dist/cli.js +3 -0
- package/dist/env.js +56 -0
- package/dist/index.js +20 -0
- package/dist/logger.js +36 -0
- package/dist/plugins/config.js +6 -0
- package/dist/plugins/remote-cache/index.js +49 -0
- package/dist/plugins/remote-cache/routes/artifacts-events.js +8 -0
- package/dist/plugins/remote-cache/routes/get-artifact.js +24 -0
- package/dist/plugins/remote-cache/routes/get-status.js +11 -0
- package/dist/plugins/remote-cache/routes/head-artifact.js +22 -0
- package/dist/plugins/remote-cache/routes/index.js +6 -0
- package/dist/plugins/remote-cache/routes/put-artifact.js +23 -0
- package/dist/plugins/remote-cache/routes/schema.js +13 -0
- package/dist/plugins/remote-cache/routes/status-schema.js +8 -0
- package/dist/plugins/remote-cache/storage/azure-blob-storage.js +17 -0
- package/dist/plugins/remote-cache/storage/google-cloud-storage.js +37 -0
- package/dist/plugins/remote-cache/storage/index.js +79 -0
- package/dist/plugins/remote-cache/storage/local.js +8 -0
- package/dist/plugins/remote-cache/storage/s3.js +26 -0
- package/dist/vercel.js +7 -0
- package/package.json +43 -46
- package/build/app.d.ts +0 -2
- package/build/app.js +0 -45
- package/build/app.js.map +0 -1
- package/build/aws-lambda.d.ts +0 -1
- package/build/aws-lambda.js +0 -11
- package/build/aws-lambda.js.map +0 -1
- package/build/cli.d.ts +0 -2
- package/build/cli.js +0 -5
- package/build/cli.js.map +0 -1
- package/build/env.d.ts +0 -36
- package/build/env.js +0 -57
- package/build/env.js.map +0 -1
- package/build/index.d.ts +0 -1
- package/build/index.js +0 -24
- package/build/index.js.map +0 -1
- package/build/logger.d.ts +0 -2
- package/build/logger.js +0 -39
- package/build/logger.js.map +0 -1
- package/build/plugins/config.d.ts +0 -8
- package/build/plugins/config.js +0 -9
- package/build/plugins/config.js.map +0 -1
- package/build/plugins/remote-cache/index.d.ts +0 -8
- package/build/plugins/remote-cache/index.js +0 -51
- package/build/plugins/remote-cache/index.js.map +0 -1
- package/build/plugins/remote-cache/routes/artifacts-events.d.ts +0 -4
- package/build/plugins/remote-cache/routes/artifacts-events.js +0 -11
- package/build/plugins/remote-cache/routes/artifacts-events.js.map +0 -1
- package/build/plugins/remote-cache/routes/get-artifact.d.ts +0 -8
- package/build/plugins/remote-cache/routes/get-artifact.js +0 -27
- package/build/plugins/remote-cache/routes/get-artifact.js.map +0 -1
- package/build/plugins/remote-cache/routes/get-status.d.ts +0 -8
- package/build/plugins/remote-cache/routes/get-status.js +0 -14
- package/build/plugins/remote-cache/routes/get-status.js.map +0 -1
- package/build/plugins/remote-cache/routes/head-artifact.d.ts +0 -8
- package/build/plugins/remote-cache/routes/head-artifact.js +0 -25
- package/build/plugins/remote-cache/routes/head-artifact.js.map +0 -1
- package/build/plugins/remote-cache/routes/index.d.ts +0 -5
- package/build/plugins/remote-cache/routes/index.js +0 -14
- package/build/plugins/remote-cache/routes/index.js.map +0 -1
- package/build/plugins/remote-cache/routes/put-artifact.d.ts +0 -10
- package/build/plugins/remote-cache/routes/put-artifact.js +0 -26
- package/build/plugins/remote-cache/routes/put-artifact.js.map +0 -1
- package/build/plugins/remote-cache/routes/schema.d.ts +0 -20
- package/build/plugins/remote-cache/routes/schema.js +0 -16
- package/build/plugins/remote-cache/routes/schema.js.map +0 -1
- package/build/plugins/remote-cache/routes/status-schema.d.ts +0 -10
- package/build/plugins/remote-cache/routes/status-schema.js +0 -11
- package/build/plugins/remote-cache/routes/status-schema.js.map +0 -1
- package/build/plugins/remote-cache/storage/azure-blob-storage.d.ts +0 -6
- package/build/plugins/remote-cache/storage/azure-blob-storage.js +0 -21
- package/build/plugins/remote-cache/storage/azure-blob-storage.js.map +0 -1
- package/build/plugins/remote-cache/storage/google-cloud-storage.d.ts +0 -8
- package/build/plugins/remote-cache/storage/google-cloud-storage.js +0 -39
- package/build/plugins/remote-cache/storage/google-cloud-storage.js.map +0 -1
- package/build/plugins/remote-cache/storage/index.d.ts +0 -33
- package/build/plugins/remote-cache/storage/index.js +0 -78
- package/build/plugins/remote-cache/storage/index.js.map +0 -1
- package/build/plugins/remote-cache/storage/local.d.ts +0 -5
- package/build/plugins/remote-cache/storage/local.js +0 -13
- package/build/plugins/remote-cache/storage/local.js.map +0 -1
- package/build/plugins/remote-cache/storage/s3.d.ts +0 -8
- package/build/plugins/remote-cache/storage/s3.js +0 -29
- package/build/plugins/remote-cache/storage/s3.js.map +0 -1
- package/build/vercel.d.ts +0 -2
- package/build/vercel.js +0 -10
- package/build/vercel.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
---
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
[](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/release.yml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/docker.yml) [](https://codeclimate.com/github/ducktors/turborepo-remote-cache/maintainability) [](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) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
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://codeclimate.com/github/ducktors/turborepo-remote-cache/maintainability) [](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) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
8
|
+
[](#contributors-)
|
|
9
9
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
10
10
|
|
|
11
11
|
|
|
@@ -18,6 +18,7 @@ It supports several storage providers and deploys environments. Moreover, the pr
|
|
|
18
18
|
|
|
19
19
|
- [GitHub Actions](https://github.com/trappar/turborepo-remote-cache-gh-action)
|
|
20
20
|
- [Lambda](https://github.com/cvle/turborepo-cache-lambda)
|
|
21
|
+
- [AWS CDK Construct](https://github.com/NimmLor/cdk-turborepo-remote-cache)
|
|
21
22
|
|
|
22
23
|
## Documentation
|
|
23
24
|
- [Supported Storage Providers](https://ducktors.github.io/turborepo-remote-cache/supported-storage-providers)
|
|
@@ -90,6 +91,7 @@ fix: fix a bug ---> 1.0.x
|
|
|
90
91
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/izi-p"><img src="https://avatars.githubusercontent.com/u/10976962?v=4?s=100" width="100px;" alt="Pierre S."/><br /><sub><b>Pierre S.</b></sub></a><br /><a href="https://github.com/ducktors/turborepo-remote-cache/commits?author=izi-p" title="Code">💻</a></td>
|
|
91
92
|
<td align="center" valign="top" width="14.28%"><a href="http://danielmitrov.com"><img src="https://avatars.githubusercontent.com/u/21154704?v=4?s=100" width="100px;" alt="Daniel Mitrov"/><br /><sub><b>Daniel Mitrov</b></sub></a><br /><a href="https://github.com/ducktors/turborepo-remote-cache/commits?author=danielmitrov" title="Code">💻</a></td>
|
|
92
93
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/adriantr"><img src="https://avatars.githubusercontent.com/u/48787209?v=4?s=100" width="100px;" alt="Adrian Trzeciak"/><br /><sub><b>Adrian Trzeciak</b></sub></a><br /><a href="https://github.com/ducktors/turborepo-remote-cache/commits?author=adriantr" title="Code">💻</a></td>
|
|
94
|
+
<td align="center" valign="top" width="14.28%"><a href="https://nimmervoll.work/"><img src="https://avatars.githubusercontent.com/u/32486857?v=4?s=100" width="100px;" alt="Lorenz Nimmervoll"/><br /><sub><b>Lorenz Nimmervoll</b></sub></a><br /><a href="https://github.com/ducktors/turborepo-remote-cache/commits?author=NimmLor" title="Documentation">📖</a></td>
|
|
93
95
|
</tr>
|
|
94
96
|
</tbody>
|
|
95
97
|
</table>
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { isBoom } from '@hapi/boom';
|
|
2
|
+
import Fastify from 'fastify';
|
|
3
|
+
import hyperid from 'hyperid';
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
import config from './plugins/config.js';
|
|
6
|
+
import remoteCache from './plugins/remote-cache/index.js';
|
|
7
|
+
const uuid = hyperid({ urlSafe: true });
|
|
8
|
+
export function createApp(options = {}) {
|
|
9
|
+
const app = Fastify({
|
|
10
|
+
logger,
|
|
11
|
+
genReqId: () => uuid(),
|
|
12
|
+
...options,
|
|
13
|
+
});
|
|
14
|
+
app.register(config).after(() => {
|
|
15
|
+
app.register(remoteCache, {
|
|
16
|
+
allowedTokens: [...app.config.TURBO_TOKEN],
|
|
17
|
+
provider: app.config.STORAGE_PROVIDER,
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
app.setErrorHandler((err, request, reply) => {
|
|
21
|
+
if (err.validation) {
|
|
22
|
+
reply.log.warn(err);
|
|
23
|
+
reply.code(400).send({ message: err.message });
|
|
24
|
+
}
|
|
25
|
+
else if (isBoom(err)) {
|
|
26
|
+
reply.log.warn(err);
|
|
27
|
+
reply
|
|
28
|
+
.code(err.output.statusCode)
|
|
29
|
+
.send(err.data != null
|
|
30
|
+
? { message: err.message, ...err.data }
|
|
31
|
+
: { message: err.output.payload.message });
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
request.log.error(err);
|
|
35
|
+
reply.code(500).send({ message: err.message });
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return app;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ25DLE9BQU8sT0FBa0QsTUFBTSxTQUFTLENBQUE7QUFDeEUsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFBO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDcEMsT0FBTyxNQUFNLE1BQU0scUJBQXFCLENBQUE7QUFDeEMsT0FBTyxXQUFXLE1BQU0saUNBQWlDLENBQUE7QUFFekQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7QUFFdkMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxVQUFnQyxFQUFFO0lBQzFELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQztRQUNsQixNQUFNO1FBQ04sUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtRQUN0QixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUE7SUFFRixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDOUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDeEIsYUFBYSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUMxQyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7U0FDdEMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMxQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUU7WUFDbEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7U0FDL0M7YUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNuQixLQUFLO2lCQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztpQkFDM0IsSUFBSSxDQUNILEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSTtnQkFDZCxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FDNUMsQ0FBQTtTQUNKO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtTQUMvQztJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import awsLambdaFastify from '@fastify/aws-lambda';
|
|
2
|
+
import { createApp } from './app.js';
|
|
3
|
+
const app = createApp({
|
|
4
|
+
trustProxy: true,
|
|
5
|
+
});
|
|
6
|
+
export const handler = awsLambdaFastify(app, { enforceBase64: (_) => true });
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hd3MtbGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sZ0JBQWdCLE1BQU0scUJBQXFCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUVwQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUM7SUFDcEIsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQyxDQUFBO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQSJ9
|
package/dist/cli.js
ADDED
package/dist/env.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Type } from '@sinclair/typebox';
|
|
2
|
+
import Ajv from 'ajv';
|
|
3
|
+
import { envSchema } from 'env-schema';
|
|
4
|
+
const NODE_ENVS = {
|
|
5
|
+
PRODUCTION: 'production',
|
|
6
|
+
DEVELOPMENT: 'development',
|
|
7
|
+
TEST: 'test',
|
|
8
|
+
};
|
|
9
|
+
export const STORAGE_PROVIDERS = {
|
|
10
|
+
LOCAL: 'local',
|
|
11
|
+
S3: 'S3',
|
|
12
|
+
s3: 's3',
|
|
13
|
+
GOOGLE_CLOUD_STORAGE: 'google-cloud-storage',
|
|
14
|
+
AZURE_BLOB_STORAGE: 'azure-blob-storage',
|
|
15
|
+
};
|
|
16
|
+
const schema = Type.Object({
|
|
17
|
+
NODE_ENV: Type.Optional(Type.Enum(NODE_ENVS, { default: NODE_ENVS.PRODUCTION })),
|
|
18
|
+
TURBO_TOKEN: Type.String({ separator: ',' }),
|
|
19
|
+
PORT: Type.Number({ default: 3000 }),
|
|
20
|
+
LOG_LEVEL: Type.Optional(Type.String({ default: 'info' })),
|
|
21
|
+
LOG_MODE: Type.Optional(Type.String({ default: 'stdout' })),
|
|
22
|
+
LOG_FILE: Type.Optional(Type.String({ default: 'server.log' })),
|
|
23
|
+
STORAGE_PROVIDER: Type.Optional(Type.Enum(STORAGE_PROVIDERS, { default: STORAGE_PROVIDERS.LOCAL })),
|
|
24
|
+
BODY_LIMIT: Type.Optional(Type.Number({ default: 104857600 })),
|
|
25
|
+
STORAGE_PATH: Type.Optional(Type.String()),
|
|
26
|
+
STORAGE_PATH_USE_TMP_FOLDER: Type.Optional(Type.Boolean({ default: true })),
|
|
27
|
+
AWS_ACCESS_KEY_ID: Type.Optional(Type.String()),
|
|
28
|
+
AWS_SECRET_ACCESS_KEY: Type.Optional(Type.String()),
|
|
29
|
+
AWS_REGION: Type.Optional(Type.String()),
|
|
30
|
+
S3_ACCESS_KEY: Type.Optional(Type.String()),
|
|
31
|
+
S3_SECRET_KEY: Type.Optional(Type.String()),
|
|
32
|
+
S3_REGION: Type.Optional(Type.String()),
|
|
33
|
+
S3_ENDPOINT: Type.Optional(Type.String()),
|
|
34
|
+
GCS_PROJECT_ID: Type.Optional(Type.String()),
|
|
35
|
+
GCS_CLIENT_EMAIL: Type.Optional(Type.String()),
|
|
36
|
+
GCS_PRIVATE_KEY: Type.Optional(Type.String()),
|
|
37
|
+
ABS_CONNECTION_STRING: Type.Optional(Type.String()),
|
|
38
|
+
}, {
|
|
39
|
+
additionalProperties: false,
|
|
40
|
+
});
|
|
41
|
+
const _env = envSchema({
|
|
42
|
+
ajv: new Ajv.default({
|
|
43
|
+
removeAdditional: true,
|
|
44
|
+
useDefaults: true,
|
|
45
|
+
coerceTypes: true,
|
|
46
|
+
keywords: ['kind', 'RegExp', 'modifier', envSchema.keywords.separator],
|
|
47
|
+
}),
|
|
48
|
+
dotenv: process.env.NODE_ENV === NODE_ENVS.DEVELOPMENT ? true : false,
|
|
49
|
+
schema,
|
|
50
|
+
});
|
|
51
|
+
export const env = {
|
|
52
|
+
get() {
|
|
53
|
+
return _env;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFdEMsTUFBTSxTQUFTLEdBQUc7SUFDaEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsSUFBSSxFQUFFLE1BQU07Q0FDSixDQUFBO0FBR1YsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsS0FBSyxFQUFFLE9BQU87SUFDZCxFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1Isb0JBQW9CLEVBQUUsc0JBQXNCO0lBQzVDLGtCQUFrQixFQUFFLG9CQUFvQjtDQUNoQyxDQUFBO0FBSVYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FDeEI7SUFDRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3hEO0lBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDcEMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVB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
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import closeWithGrace from 'close-with-grace';
|
|
2
|
+
import { createApp } from './app.js';
|
|
3
|
+
import { env } from './env.js';
|
|
4
|
+
const app = createApp({
|
|
5
|
+
trustProxy: true,
|
|
6
|
+
});
|
|
7
|
+
closeWithGrace({ delay: 10000 }, async function ({ err, signal }) {
|
|
8
|
+
if (err) {
|
|
9
|
+
app.log.error(err);
|
|
10
|
+
}
|
|
11
|
+
app.log.info(`[${signal}] Gracefully closing the server instance.`);
|
|
12
|
+
await app.close();
|
|
13
|
+
});
|
|
14
|
+
app.listen({ host: '0.0.0.0', port: env.get().PORT }, (err) => {
|
|
15
|
+
if (err) {
|
|
16
|
+
app.log.error(err);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFFN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRTlCLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQztJQUNwQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDLENBQUE7QUFFRixjQUFjLENBQ1osRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQ2hCLEtBQUssV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQW9DO0lBQy9ELElBQUksR0FBRyxFQUFFO1FBQ1AsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7S0FDbkI7SUFFRCxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sMkNBQTJDLENBQUMsQ0FBQTtJQUVuRSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtBQUNuQixDQUFDLENBQ0YsQ0FBQTtBQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUM1RCxJQUFJLEdBQUcsRUFBRTtRQUNQLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7QUFDSCxDQUFDLENBQUMsQ0FBQSJ9
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import Pino from 'pino';
|
|
2
|
+
import { env as _env } from './env.js';
|
|
3
|
+
const PinoLevelToSeverityLookup = {
|
|
4
|
+
trace: 'DEBUG',
|
|
5
|
+
debug: 'DEBUG',
|
|
6
|
+
info: 'INFO',
|
|
7
|
+
warn: 'WARNING',
|
|
8
|
+
error: 'ERROR',
|
|
9
|
+
fatal: 'CRITICAL',
|
|
10
|
+
};
|
|
11
|
+
let logDestination;
|
|
12
|
+
const env = _env.get();
|
|
13
|
+
if (env.LOG_MODE === 'file') {
|
|
14
|
+
logDestination = Pino.destination(env.LOG_FILE);
|
|
15
|
+
}
|
|
16
|
+
else if (env.LOG_MODE === 'stdout') {
|
|
17
|
+
logDestination = process.stdout;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
throw new Error('Invalid LOG_MODE. Allowed values are "file" or "stdout".');
|
|
21
|
+
}
|
|
22
|
+
export const logger = Pino({
|
|
23
|
+
level: env.LOG_LEVEL,
|
|
24
|
+
messageKey: 'message',
|
|
25
|
+
redact: ['req.headers.authorization'],
|
|
26
|
+
formatters: {
|
|
27
|
+
level(label, number) {
|
|
28
|
+
return {
|
|
29
|
+
severity: PinoLevelToSeverityLookup[label] || PinoLevelToSeverityLookup.info,
|
|
30
|
+
level: number,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
}, logDestination);
|
|
35
|
+
export default logger;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFdEMsTUFBTSx5QkFBeUIsR0FBRztJQUNoQyxLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsU0FBUztJQUNmLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLFVBQVU7Q0FDVCxDQUFBO0FBRVYsSUFBSSxjQUFjLENBQUE7QUFFbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBRXRCLElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUU7SUFDM0IsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0NBQ2hEO0tBQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtJQUNwQyxjQUFjLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQTtDQUNoQztLQUFNO0lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFBO0NBQzVFO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FDeEI7SUFDRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVM7SUFDcEIsVUFBVSxFQUFFLFNBQVM7SUFDckIsTUFBTSxFQUFFLENBQUMsMkJBQTJCLENBQUM7SUFDckMsVUFBVSxFQUFFO1FBQ1YsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNO1lBQ2pCLE9BQU87Z0JBQ0wsUUFBUSxFQUNOLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxJQUFJLHlCQUF5QixDQUFDLElBQUk7Z0JBQ3BFLEtBQUssRUFBRSxNQUFNO2FBQ2QsQ0FBQTtRQUNILENBQUM7S0FDRjtDQUNGLEVBQ0QsY0FBYyxDQUNmLENBQUE7QUFFRCxlQUFlLE1BQU0sQ0FBQSJ9
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import fp from 'fastify-plugin';
|
|
2
|
+
import { env } from '../env.js';
|
|
3
|
+
export default fp(async function (fastify) {
|
|
4
|
+
fastify.decorate('config', env.get());
|
|
5
|
+
}, { name: 'config' });
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbnMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQy9CLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFL0IsZUFBZSxFQUFFLENBQ2YsS0FBSyxXQUFXLE9BQU87SUFDckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7QUFDdkMsQ0FBQyxFQUNELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUNuQixDQUFBIn0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { badRequest, unauthorized } from '@hapi/boom';
|
|
2
|
+
import { STORAGE_PROVIDERS } from '../../env.js';
|
|
3
|
+
import { artifactsEvents, getArtifact, getStatus, headArtifact, putArtifact, } from './routes/index.js';
|
|
4
|
+
import { createLocation } from './storage/index.js';
|
|
5
|
+
async function turboRemoteCache(instance, options) {
|
|
6
|
+
const bodyLimit = instance.config.BODY_LIMIT;
|
|
7
|
+
const { allowedTokens, apiVersion = 'v8', provider = STORAGE_PROVIDERS.LOCAL, } = options;
|
|
8
|
+
if (!(Array.isArray(allowedTokens) && allowedTokens.length)) {
|
|
9
|
+
throw new Error(`'allowedTokens' options must be a string[], ${typeof allowedTokens} provided instead`);
|
|
10
|
+
}
|
|
11
|
+
instance.addContentTypeParser('application/octet-stream', { parseAs: 'buffer', bodyLimit }, async function parser(request, payload) {
|
|
12
|
+
return payload;
|
|
13
|
+
});
|
|
14
|
+
instance.decorate('location', createLocation(provider, {
|
|
15
|
+
accessKey: instance.config.S3_ACCESS_KEY,
|
|
16
|
+
secretKey: instance.config.S3_SECRET_KEY,
|
|
17
|
+
path: instance.config.STORAGE_PATH,
|
|
18
|
+
region: instance.config.S3_REGION,
|
|
19
|
+
endpoint: instance.config.S3_ENDPOINT,
|
|
20
|
+
clientEmail: instance.config.GCS_CLIENT_EMAIL,
|
|
21
|
+
privateKey: instance.config.GCS_PRIVATE_KEY?.replace(/\\n/g, '\n'),
|
|
22
|
+
projectId: instance.config.GCS_PROJECT_ID,
|
|
23
|
+
useTmp: !!instance.config.STORAGE_PATH_USE_TMP_FOLDER,
|
|
24
|
+
connectionString: instance.config.ABS_CONNECTION_STRING,
|
|
25
|
+
}));
|
|
26
|
+
await instance.register(async function (i) {
|
|
27
|
+
const tokens = new Set(allowedTokens);
|
|
28
|
+
i.addHook('onRequest', async function (request) {
|
|
29
|
+
let authHeader = request.headers.authorization;
|
|
30
|
+
authHeader = Array.isArray(authHeader) ? authHeader.join() : authHeader;
|
|
31
|
+
if (!authHeader) {
|
|
32
|
+
throw badRequest('Missing Authorization header');
|
|
33
|
+
}
|
|
34
|
+
const [, token] = authHeader.split('Bearer ');
|
|
35
|
+
if (!tokens.has(token)) {
|
|
36
|
+
throw unauthorized('Invalid authorization token');
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
i.route(getArtifact);
|
|
40
|
+
i.route(headArtifact);
|
|
41
|
+
i.route(putArtifact);
|
|
42
|
+
i.route(artifactsEvents);
|
|
43
|
+
}, { prefix: `/${apiVersion}` });
|
|
44
|
+
await instance.register(async (i) => {
|
|
45
|
+
i.route(getStatus);
|
|
46
|
+
}, { prefix: `/${apiVersion}` });
|
|
47
|
+
}
|
|
48
|
+
export default turboRemoteCache;
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ2hELE9BQU8sRUFDTCxlQUFlLEVBQ2YsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxHQUNaLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRW5ELEtBQUssVUFBVSxnQkFBZ0IsQ0FDN0IsUUFBeUIsRUFDekIsT0FJQztJQUVELE1BQU0sU0FBUyxHQUFXLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFBO0lBQ3BELE1BQU0sRUFDSixhQUFhLEVBQ2IsVUFBVSxHQUFHLElBQUksRUFDakIsUUFBUSxHQUFHLGlCQUFpQixDQUFDLEtBQUssR0FDbkMsR0FBRyxPQUFPLENBQUE7SUFDWCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLCtDQUErQyxPQUFPLGFBQWEsbUJBQW1CLENBQ3ZGLENBQUE7S0FDRjtJQUVELFFBQVEsQ0FBQyxvQkFBb0IsQ0FDM0IsMEJBQTBCLEVBQzFCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFDaEMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUNwQyxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDLENBQ0YsQ0FBQTtJQUVELFFBQVEsQ0FBQyxRQUFRLENBQ2YsVUFBVSxFQUNWLGNBQWMsQ0FBQyxRQUFRLEVBQUU7UUFDdkIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYTtRQUN4QyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhO1FBQ3hDLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVk7UUFDbEMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUztRQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1FBQ3JDLFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtRQUM3QyxVQUFVLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDbEUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBYztRQUN6QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsMkJBQTJCO1FBQ3JELGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMscUJBQXFCO0tBQ3hELENBQUMsQ0FDSCxDQUFBO0lBRUQsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUNyQixLQUFLLFdBQVcsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFTLGFBQWEsQ0FBQyxDQUFBO1FBRTdDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxPQUFPO1lBQzVDLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFBO1lBQzlDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtZQUV2RSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLE1BQU0sVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUE7YUFDakQ7WUFDRCxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixNQUFNLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO2FBQ2xEO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRixDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDckIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNwQixDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzFCLENBQUMsRUFDRCxFQUFFLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQzdCLENBQUE7SUFFRCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQ3JCLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNWLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDcEIsQ0FBQyxFQUNELEVBQUUsTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FDN0IsQ0FBQTtBQUNILENBQUM7QUFFRCxlQUFlLGdCQUFnQixDQUFBIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const artifactsEvents = {
|
|
2
|
+
method: 'POST',
|
|
3
|
+
url: '/artifacts/events',
|
|
4
|
+
async handler(_req, reply) {
|
|
5
|
+
reply.code(200).send({});
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RzLWV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3JlbW90ZS1jYWNoZS9yb3V0ZXMvYXJ0aWZhY3RzLWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBSXhCO0lBQ0YsTUFBTSxFQUFFLE1BQU07SUFDZCxHQUFHLEVBQUUsbUJBQW1CO0lBQ3hCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUs7UUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDMUIsQ0FBQztDQUNGLENBQUEifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { badRequest, notFound } from '@hapi/boom';
|
|
2
|
+
import { artifactsRouteSchema, } from './schema.js';
|
|
3
|
+
export const getArtifact = {
|
|
4
|
+
method: 'GET',
|
|
5
|
+
exposeHeadRoute: false,
|
|
6
|
+
url: '/artifacts/:id',
|
|
7
|
+
schema: artifactsRouteSchema,
|
|
8
|
+
async handler(req, reply) {
|
|
9
|
+
const artifactId = req.params.id;
|
|
10
|
+
const teamId = req.query.teamId ?? req.query.slug;
|
|
11
|
+
if (!teamId) {
|
|
12
|
+
throw badRequest(`querystring should have required property 'teamId'`);
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const artifact = await this.location.getCachedArtifact(artifactId, teamId);
|
|
16
|
+
reply.header('Content-Type', 'application/octet-stream');
|
|
17
|
+
return reply.send(artifact);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
throw notFound('Artifact not found', err);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFydGlmYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL3JvdXRlcy9nZXQtYXJ0aWZhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFNakQsT0FBTyxFQUdMLG9CQUFvQixHQUNyQixNQUFNLGFBQWEsQ0FBQTtBQUVwQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBUXBCO0lBQ0YsTUFBTSxFQUFFLEtBQUs7SUFDYixlQUFlLEVBQUUsS0FBSztJQUN0QixHQUFHLEVBQUUsZ0JBQWdCO0lBQ3JCLE1BQU0sRUFBRSxvQkFBb0I7SUFDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUN0QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUNqRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxVQUFVLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtTQUN2RTtRQUVELElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQzFFLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLDBCQUEwQixDQUFDLENBQUE7WUFDeEQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBQzVCO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixNQUFNLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUMxQztJQUNILENBQUM7Q0FDRixDQUFBIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { statusRouteSchema } from './status-schema.js';
|
|
2
|
+
export const getStatus = {
|
|
3
|
+
method: 'GET',
|
|
4
|
+
url: '/artifacts/status',
|
|
5
|
+
schema: statusRouteSchema,
|
|
6
|
+
logLevel: 'error',
|
|
7
|
+
async handler(req, reply) {
|
|
8
|
+
reply.send({ status: 'enabled' });
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN0YXR1cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3JlbW90ZS1jYWNoZS9yb3V0ZXMvZ2V0LXN0YXR1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUV0RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBUWxCO0lBQ0YsTUFBTSxFQUFFLEtBQUs7SUFDYixHQUFHLEVBQUUsbUJBQW1CO0lBQ3hCLE1BQU0sRUFBRSxpQkFBaUI7SUFDekIsUUFBUSxFQUFFLE9BQU87SUFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDbkMsQ0FBQztDQUNGLENBQUEifQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { badRequest, notFound } from '@hapi/boom';
|
|
2
|
+
import { artifactsRouteSchema, } from './schema.js';
|
|
3
|
+
export const headArtifact = {
|
|
4
|
+
method: 'HEAD',
|
|
5
|
+
url: '/artifacts/:id',
|
|
6
|
+
schema: artifactsRouteSchema,
|
|
7
|
+
async handler(req, reply) {
|
|
8
|
+
const artifactId = req.params.id;
|
|
9
|
+
const teamId = req.query.teamId ?? req.query.slug;
|
|
10
|
+
if (!teamId) {
|
|
11
|
+
throw badRequest(`querystring should have required property 'teamId'`);
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const artifact = await this.location.existsCachedArtifact(artifactId, teamId);
|
|
15
|
+
reply.send(artifact);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
throw notFound('Artifact not found', err);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC1hcnRpZmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3JlbW90ZS1jYWNoZS9yb3V0ZXMvaGVhZC1hcnRpZmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQU1qRCxPQUFPLEVBR0wsb0JBQW9CLEdBQ3JCLE1BQU0sYUFBYSxDQUFBO0FBRXBCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FRckI7SUFDRixNQUFNLEVBQUUsTUFBTTtJQUNkLEdBQUcsRUFBRSxnQkFBZ0I7SUFDckIsTUFBTSxFQUFFLG9CQUFvQjtJQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLFVBQVUsQ0FBQyxvREFBb0QsQ0FBQyxDQUFBO1NBQ3ZFO1FBRUQsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FDdkQsVUFBVSxFQUNWLE1BQU0sQ0FDUCxDQUFBO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUNyQjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osTUFBTSxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLENBQUE7U0FDMUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQSJ9
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { getArtifact } from './get-artifact.js';
|
|
2
|
+
export { headArtifact } from './head-artifact.js';
|
|
3
|
+
export { putArtifact } from './put-artifact.js';
|
|
4
|
+
export { artifactsEvents } from './artifacts-events.js';
|
|
5
|
+
export { getStatus } from './get-status.js';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUEifQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
2
|
+
import { badRequest, preconditionFailed } from '@hapi/boom';
|
|
3
|
+
import { artifactsRouteSchema, } from './schema.js';
|
|
4
|
+
export const putArtifact = {
|
|
5
|
+
url: '/artifacts/:id',
|
|
6
|
+
method: 'PUT',
|
|
7
|
+
schema: artifactsRouteSchema,
|
|
8
|
+
async handler(req, reply) {
|
|
9
|
+
const artifactId = req.params.id;
|
|
10
|
+
const teamId = req.query.teamId ?? req.query.slug;
|
|
11
|
+
if (!teamId) {
|
|
12
|
+
throw badRequest(`querystring should have required property 'teamId'`);
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
await this.location.createCachedArtifact(artifactId, teamId, Readable.from(req.body));
|
|
16
|
+
reply.send({ urls: [`${teamId}/${artifactId}`] });
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
throw preconditionFailed('Error during the artifact creation', err);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHV0LWFydGlmYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL3JvdXRlcy9wdXQtYXJ0aWZhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBTTNELE9BQU8sRUFHTCxvQkFBb0IsR0FDckIsTUFBTSxhQUFhLENBQUE7QUFFcEIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQVNwQjtJQUNGLEdBQUcsRUFBRSxnQkFBZ0I7SUFDckIsTUFBTSxFQUFFLEtBQUs7SUFDYixNQUFNLEVBQUUsb0JBQW9CO0lBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUs7UUFDdEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUE7UUFDaEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUE7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE1BQU0sVUFBVSxDQUFDLG9EQUFvRCxDQUFDLENBQUE7U0FDdkU7UUFFRCxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUN0QyxVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUN4QixDQUFBO1lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQ2xEO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFFWixNQUFNLGtCQUFrQixDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1NBQ3BFO0lBQ0gsQ0FBQztDQUNGLENBQUEifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Type } from '@sinclair/typebox';
|
|
2
|
+
const querystring = Type.Object({
|
|
3
|
+
teamId: Type.Optional(Type.String()),
|
|
4
|
+
slug: Type.Optional(Type.String()),
|
|
5
|
+
}, { additionalProperties: false });
|
|
6
|
+
const params = Type.Object({
|
|
7
|
+
id: Type.String(),
|
|
8
|
+
}, { additionalProperties: false });
|
|
9
|
+
export const artifactsRouteSchema = {
|
|
10
|
+
querystring,
|
|
11
|
+
params,
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL3JvdXRlcy9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQzdCO0lBQ0UsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNuQyxFQUNELEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQ2hDLENBQUE7QUFHRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUN4QjtJQUNFLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ2xCLEVBQ0QsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FDaEMsQ0FBQTtBQUdELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLFdBQVc7SUFDWCxNQUFNO0NBQ1AsQ0FBQSJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Type } from '@sinclair/typebox';
|
|
2
|
+
const querystring = Type.Object({}, { additionalProperties: false });
|
|
3
|
+
const params = Type.Object({}, { additionalProperties: false });
|
|
4
|
+
export const statusRouteSchema = {
|
|
5
|
+
querystring,
|
|
6
|
+
params,
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3JlbW90ZS1jYWNoZS9yb3V0ZXMvc3RhdHVzLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0FBR3BFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUcvRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixXQUFXO0lBQ1gsTUFBTTtDQUNQLENBQUEifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import azure from 'azure-storage';
|
|
2
|
+
export function createAzureBlobStorage({ containerName, connectionString, }) {
|
|
3
|
+
const blobService = azure.createBlobService(connectionString);
|
|
4
|
+
const emptyCb = () => null;
|
|
5
|
+
return {
|
|
6
|
+
exists: (artifactPath, cb) => {
|
|
7
|
+
blobService.doesBlobExist(containerName, artifactPath, {}, (error, result) => cb(error, result.exists));
|
|
8
|
+
},
|
|
9
|
+
createReadStream(artifactPath) {
|
|
10
|
+
return blobService.createReadStream(containerName, artifactPath, emptyCb);
|
|
11
|
+
},
|
|
12
|
+
createWriteStream(artifactPath) {
|
|
13
|
+
return blobService.createWriteStreamToBlockBlob(containerName, artifactPath, {});
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp1cmUtYmxvYi1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL3N0b3JhZ2UvYXp1cmUtYmxvYi1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLGVBQWUsQ0FBQTtBQVFqQyxNQUFNLFVBQVUsc0JBQXNCLENBQUMsRUFDckMsYUFBYSxFQUNiLGdCQUFnQixHQUNRO0lBQ3hCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzdELE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTtJQUUxQixPQUFPO1FBQ0wsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQzNCLFdBQVcsQ0FBQyxhQUFhLENBQ3ZCLGFBQWEsRUFDYixZQUFZLEVBQ1osRUFBRSxFQUNGLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQzVDLENBQUE7UUFDSCxDQUFDO1FBQ0QsZ0JBQWdCLENBQUMsWUFBWTtZQUMzQixPQUFPLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FDakMsYUFBYSxFQUNiLFlBQVksRUFDWixPQUFPLENBQ2EsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsaUJBQWlCLENBQUMsWUFBWTtZQUM1QixPQUFPLFdBQVcsQ0FBQyw0QkFBNEIsQ0FDN0MsYUFBYSxFQUNiLFlBQVksRUFDWixFQUFFLENBQ0gsQ0FBQTtRQUNILENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import GCS from '@google-cloud/storage';
|
|
2
|
+
function createStorage({ clientEmail, privateKey, projectId }) {
|
|
3
|
+
if (!clientEmail || !privateKey || !projectId) {
|
|
4
|
+
return new GCS.Storage();
|
|
5
|
+
}
|
|
6
|
+
else {
|
|
7
|
+
return new GCS.Storage({
|
|
8
|
+
projectId,
|
|
9
|
+
credentials: {
|
|
10
|
+
client_email: clientEmail,
|
|
11
|
+
private_key: privateKey,
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function createGoogleCloudStorage({ bucket, clientEmail, privateKey, projectId, }) {
|
|
17
|
+
const storage = createStorage({
|
|
18
|
+
clientEmail,
|
|
19
|
+
privateKey,
|
|
20
|
+
projectId,
|
|
21
|
+
});
|
|
22
|
+
const turboBucket = storage.bucket(bucket);
|
|
23
|
+
return {
|
|
24
|
+
exists: (artifactPath, cb) => {
|
|
25
|
+
turboBucket.file(artifactPath).exists(cb);
|
|
26
|
+
},
|
|
27
|
+
createReadStream(artifactPath) {
|
|
28
|
+
return turboBucket
|
|
29
|
+
.file(artifactPath)
|
|
30
|
+
.createReadStream();
|
|
31
|
+
},
|
|
32
|
+
createWriteStream(artifactPath) {
|
|
33
|
+
return turboBucket.file(artifactPath).createWriteStream();
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWNsb3VkLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9nb29nbGUtY2xvdWQtc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQTtBQVV2QyxTQUFTLGFBQWEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0lBQzNELElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDN0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtLQUN6QjtTQUFNO1FBQ0wsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDckIsU0FBUztZQUNULFdBQVcsRUFBRTtnQkFDWCxZQUFZLEVBQUUsV0FBVztnQkFDekIsV0FBVyxFQUFFLFVBQVU7YUFDeEI7U0FDRixDQUFDLENBQUE7S0FDSDtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsRUFDdkMsTUFBTSxFQUNOLFdBQVcsRUFDWCxVQUFVLEVBQ1YsU0FBUyxHQUNpQjtJQUMxQixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUM7UUFDNUIsV0FBVztRQUNYLFVBQVU7UUFDVixTQUFTO0tBQ1YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUUxQyxPQUFPO1FBQ0wsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQzNCLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzNDLENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxZQUFZO1lBQzNCLE9BQU8sV0FBVztpQkFDZixJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUNsQixnQkFBZ0IsRUFBdUIsQ0FBQTtRQUM1QyxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsWUFBWTtZQUM1QixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUMzRCxDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { pipeline as pipelineCallback } from 'stream';
|
|
3
|
+
import { promisify } from 'util';
|
|
4
|
+
import { STORAGE_PROVIDERS } from '../../../env.js';
|
|
5
|
+
import { createAzureBlobStorage, } from './azure-blob-storage.js';
|
|
6
|
+
import { createGoogleCloudStorage, } from './google-cloud-storage.js';
|
|
7
|
+
import { createLocal } from './local.js';
|
|
8
|
+
import { createS3 } from './s3.js';
|
|
9
|
+
const pipeline = promisify(pipelineCallback);
|
|
10
|
+
const TURBO_CACHE_FOLDER_NAME = 'turborepocache';
|
|
11
|
+
const TURBO_CACHE_USE_TMP_FOLDER = true;
|
|
12
|
+
function createStorageLocation(provider, providerOptions) {
|
|
13
|
+
const { path = TURBO_CACHE_FOLDER_NAME, useTmp = TURBO_CACHE_USE_TMP_FOLDER, } = providerOptions;
|
|
14
|
+
switch (provider) {
|
|
15
|
+
case STORAGE_PROVIDERS.LOCAL: {
|
|
16
|
+
return createLocal({ path, useTmp });
|
|
17
|
+
}
|
|
18
|
+
case STORAGE_PROVIDERS.S3:
|
|
19
|
+
case STORAGE_PROVIDERS.s3: {
|
|
20
|
+
const { accessKey, secretKey, region, endpoint } = providerOptions;
|
|
21
|
+
return createS3({ accessKey, secretKey, bucket: path, region, endpoint });
|
|
22
|
+
}
|
|
23
|
+
case STORAGE_PROVIDERS.GOOGLE_CLOUD_STORAGE: {
|
|
24
|
+
const { clientEmail, privateKey, projectId } = providerOptions;
|
|
25
|
+
return createGoogleCloudStorage({
|
|
26
|
+
bucket: path,
|
|
27
|
+
clientEmail,
|
|
28
|
+
privateKey,
|
|
29
|
+
projectId,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
case STORAGE_PROVIDERS.AZURE_BLOB_STORAGE: {
|
|
33
|
+
const { connectionString } = providerOptions;
|
|
34
|
+
return createAzureBlobStorage({ containerName: path, connectionString });
|
|
35
|
+
}
|
|
36
|
+
default:
|
|
37
|
+
throw new Error(`Unsupported storage provider '${provider}'. Please select one of the following: ${Object.values(STORAGE_PROVIDERS).join(', ')}!`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function createLocation(provider, providerOptions) {
|
|
41
|
+
const location = createStorageLocation(provider, providerOptions);
|
|
42
|
+
async function getCachedArtifact(artifactId, teamId) {
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
const artifactPath = join(teamId, artifactId);
|
|
45
|
+
location.exists(artifactPath, (err, exists) => {
|
|
46
|
+
if (err) {
|
|
47
|
+
return reject(err);
|
|
48
|
+
}
|
|
49
|
+
if (!exists) {
|
|
50
|
+
return reject(new Error(`Artifact ${artifactPath} doesn't exist.`));
|
|
51
|
+
}
|
|
52
|
+
resolve(location.createReadStream(artifactPath));
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async function existsCachedArtifact(artifactId, teamId) {
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const artifactPath = join(teamId, artifactId);
|
|
59
|
+
location.exists(artifactPath, (err, exists) => {
|
|
60
|
+
if (err) {
|
|
61
|
+
return reject(err);
|
|
62
|
+
}
|
|
63
|
+
if (!exists) {
|
|
64
|
+
return reject(new Error(`Artifact ${artifactPath} doesn't exist.`));
|
|
65
|
+
}
|
|
66
|
+
resolve();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
async function createCachedArtifact(artifactId, teamId, artifact) {
|
|
71
|
+
return pipeline(artifact, location.createWriteStream(join(teamId, artifactId)));
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
getCachedArtifact,
|
|
75
|
+
createCachedArtifact,
|
|
76
|
+
existsCachedArtifact,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNCLE9BQU8sRUFBWSxRQUFRLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNuRCxPQUFPLEVBRUwsc0JBQXNCLEdBQ3ZCLE1BQU0seUJBQXlCLENBQUE7QUFDaEMsT0FBTyxFQUVMLHdCQUF3QixHQUN6QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBa0MsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3hFLE9BQU8sRUFBNEIsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRTVELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsZ0JBQXlCLENBQUE7QUFDekQsTUFBTSwwQkFBMEIsR0FBRyxJQUFhLENBQUE7QUE2QmhELFNBQVMscUJBQXFCLENBQzVCLFFBQWtCLEVBQ2xCLGVBQTBDO0lBRTFDLE1BQU0sRUFDSixJQUFJLEdBQUcsdUJBQXVCLEVBQzlCLE1BQU0sR0FBRywwQkFBMEIsR0FDcEMsR0FBRyxlQUFlLENBQUE7SUFFbkIsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixPQUFPLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1NBQ3JDO1FBQ0QsS0FBSyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDMUIsS0FBSyxpQkFBaUIs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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { tmpdir } from 'os';
|
|
2
|
+
import { join, normalize } from 'path';
|
|
3
|
+
import fs from 'fs-blob-store';
|
|
4
|
+
export function createLocal({ path, useTmp }) {
|
|
5
|
+
const fullPath = useTmp ? join(tmpdir(), path) : normalize(path);
|
|
6
|
+
return fs(fullPath);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9sb2NhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQU85QixNQUFNLFVBQVUsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBZ0I7SUFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNyQixDQUFDIn0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import aws from 'aws-sdk';
|
|
2
|
+
import s3 from 's3-blob-store';
|
|
3
|
+
export function createS3({ accessKey = process.env.AWS_ACCESS_KEY_ID || process.env.S3_ACCESS_KEY, secretKey = process.env.AWS_SECRET_ACCESS_KEY || process.env.S3_SECRET_KEY, bucket, region = process.env.AWS_REGION || process.env.S3_REGION, endpoint, }) {
|
|
4
|
+
const client = new aws.S3({
|
|
5
|
+
...(accessKey && secretKey
|
|
6
|
+
? {
|
|
7
|
+
credentials: {
|
|
8
|
+
accessKeyId: accessKey,
|
|
9
|
+
secretAccessKey: secretKey,
|
|
10
|
+
sessionToken: process.env.AWS_SESSION_TOKEN,
|
|
11
|
+
},
|
|
12
|
+
}
|
|
13
|
+
: {}),
|
|
14
|
+
...(region ? { region } : {}),
|
|
15
|
+
...(endpoint ? { endpoint: new aws.Endpoint(endpoint) } : {}),
|
|
16
|
+
...(process.env.NODE_ENV === 'test'
|
|
17
|
+
? { sslEnabled: false, s3ForcePathStyle: true }
|
|
18
|
+
: {}),
|
|
19
|
+
});
|
|
20
|
+
const location = s3({
|
|
21
|
+
client,
|
|
22
|
+
bucket,
|
|
23
|
+
});
|
|
24
|
+
return location;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9zMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxTQUFTLENBQUE7QUFDekIsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBVzlCLE1BQU0sVUFBVSxRQUFRLENBQUMsRUFDdkIsU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQ3RFLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUMxRSxNQUFNLEVBQ04sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUN4RCxRQUFRLEdBQ0U7SUFDVixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsR0FBRyxDQUFDLFNBQVMsSUFBSSxTQUFTO1lBQ3hCLENBQUMsQ0FBQztnQkFDRSxXQUFXLEVBQUU7b0JBQ1gsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLGVBQWUsRUFBRSxTQUFTO29CQUMxQixZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7aUJBQzVDO2FBQ0Y7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU07WUFDakMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUU7WUFDL0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNSLENBQUMsQ0FBQTtJQUVGLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixNQUFNO1FBQ04sTUFBTTtLQUNQLENBQUMsQ0FBQTtJQUVGLE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUMifQ==
|
package/dist/vercel.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createApp } from './app.js';
|
|
2
|
+
const app = createApp();
|
|
3
|
+
export default async function (req, res) {
|
|
4
|
+
await app.ready();
|
|
5
|
+
app.server.emit('request', req, res);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlcmNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXBDLE1BQU0sR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFBO0FBRXZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxXQUFXLEdBQWtCLEVBQUUsR0FBbUI7SUFDcEUsTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDakIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUN0QyxDQUFDIn0=
|