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.
Files changed (90) hide show
  1. package/README.md +4 -2
  2. package/dist/app.js +40 -0
  3. package/dist/aws-lambda.js +7 -0
  4. package/dist/cli.js +3 -0
  5. package/dist/env.js +56 -0
  6. package/dist/index.js +20 -0
  7. package/dist/logger.js +36 -0
  8. package/dist/plugins/config.js +6 -0
  9. package/dist/plugins/remote-cache/index.js +49 -0
  10. package/dist/plugins/remote-cache/routes/artifacts-events.js +8 -0
  11. package/dist/plugins/remote-cache/routes/get-artifact.js +24 -0
  12. package/dist/plugins/remote-cache/routes/get-status.js +11 -0
  13. package/dist/plugins/remote-cache/routes/head-artifact.js +22 -0
  14. package/dist/plugins/remote-cache/routes/index.js +6 -0
  15. package/dist/plugins/remote-cache/routes/put-artifact.js +23 -0
  16. package/dist/plugins/remote-cache/routes/schema.js +13 -0
  17. package/dist/plugins/remote-cache/routes/status-schema.js +8 -0
  18. package/dist/plugins/remote-cache/storage/azure-blob-storage.js +17 -0
  19. package/dist/plugins/remote-cache/storage/google-cloud-storage.js +37 -0
  20. package/dist/plugins/remote-cache/storage/index.js +79 -0
  21. package/dist/plugins/remote-cache/storage/local.js +8 -0
  22. package/dist/plugins/remote-cache/storage/s3.js +26 -0
  23. package/dist/vercel.js +7 -0
  24. package/package.json +43 -46
  25. package/build/app.d.ts +0 -2
  26. package/build/app.js +0 -45
  27. package/build/app.js.map +0 -1
  28. package/build/aws-lambda.d.ts +0 -1
  29. package/build/aws-lambda.js +0 -11
  30. package/build/aws-lambda.js.map +0 -1
  31. package/build/cli.d.ts +0 -2
  32. package/build/cli.js +0 -5
  33. package/build/cli.js.map +0 -1
  34. package/build/env.d.ts +0 -36
  35. package/build/env.js +0 -57
  36. package/build/env.js.map +0 -1
  37. package/build/index.d.ts +0 -1
  38. package/build/index.js +0 -24
  39. package/build/index.js.map +0 -1
  40. package/build/logger.d.ts +0 -2
  41. package/build/logger.js +0 -39
  42. package/build/logger.js.map +0 -1
  43. package/build/plugins/config.d.ts +0 -8
  44. package/build/plugins/config.js +0 -9
  45. package/build/plugins/config.js.map +0 -1
  46. package/build/plugins/remote-cache/index.d.ts +0 -8
  47. package/build/plugins/remote-cache/index.js +0 -51
  48. package/build/plugins/remote-cache/index.js.map +0 -1
  49. package/build/plugins/remote-cache/routes/artifacts-events.d.ts +0 -4
  50. package/build/plugins/remote-cache/routes/artifacts-events.js +0 -11
  51. package/build/plugins/remote-cache/routes/artifacts-events.js.map +0 -1
  52. package/build/plugins/remote-cache/routes/get-artifact.d.ts +0 -8
  53. package/build/plugins/remote-cache/routes/get-artifact.js +0 -27
  54. package/build/plugins/remote-cache/routes/get-artifact.js.map +0 -1
  55. package/build/plugins/remote-cache/routes/get-status.d.ts +0 -8
  56. package/build/plugins/remote-cache/routes/get-status.js +0 -14
  57. package/build/plugins/remote-cache/routes/get-status.js.map +0 -1
  58. package/build/plugins/remote-cache/routes/head-artifact.d.ts +0 -8
  59. package/build/plugins/remote-cache/routes/head-artifact.js +0 -25
  60. package/build/plugins/remote-cache/routes/head-artifact.js.map +0 -1
  61. package/build/plugins/remote-cache/routes/index.d.ts +0 -5
  62. package/build/plugins/remote-cache/routes/index.js +0 -14
  63. package/build/plugins/remote-cache/routes/index.js.map +0 -1
  64. package/build/plugins/remote-cache/routes/put-artifact.d.ts +0 -10
  65. package/build/plugins/remote-cache/routes/put-artifact.js +0 -26
  66. package/build/plugins/remote-cache/routes/put-artifact.js.map +0 -1
  67. package/build/plugins/remote-cache/routes/schema.d.ts +0 -20
  68. package/build/plugins/remote-cache/routes/schema.js +0 -16
  69. package/build/plugins/remote-cache/routes/schema.js.map +0 -1
  70. package/build/plugins/remote-cache/routes/status-schema.d.ts +0 -10
  71. package/build/plugins/remote-cache/routes/status-schema.js +0 -11
  72. package/build/plugins/remote-cache/routes/status-schema.js.map +0 -1
  73. package/build/plugins/remote-cache/storage/azure-blob-storage.d.ts +0 -6
  74. package/build/plugins/remote-cache/storage/azure-blob-storage.js +0 -21
  75. package/build/plugins/remote-cache/storage/azure-blob-storage.js.map +0 -1
  76. package/build/plugins/remote-cache/storage/google-cloud-storage.d.ts +0 -8
  77. package/build/plugins/remote-cache/storage/google-cloud-storage.js +0 -39
  78. package/build/plugins/remote-cache/storage/google-cloud-storage.js.map +0 -1
  79. package/build/plugins/remote-cache/storage/index.d.ts +0 -33
  80. package/build/plugins/remote-cache/storage/index.js +0 -78
  81. package/build/plugins/remote-cache/storage/index.js.map +0 -1
  82. package/build/plugins/remote-cache/storage/local.d.ts +0 -5
  83. package/build/plugins/remote-cache/storage/local.js +0 -13
  84. package/build/plugins/remote-cache/storage/local.js.map +0 -1
  85. package/build/plugins/remote-cache/storage/s3.d.ts +0 -8
  86. package/build/plugins/remote-cache/storage/s3.js +0 -29
  87. package/build/plugins/remote-cache/storage/s3.js.map +0 -1
  88. package/build/vercel.d.ts +0 -2
  89. package/build/vercel.js +0 -10
  90. package/build/vercel.js.map +0 -1
package/README.md CHANGED
@@ -4,8 +4,8 @@
4
4
  ---
5
5
  ![remote_cache_1](https://user-images.githubusercontent.com/1620916/216358421-36a63b0e-d1f6-484f-a4ca-6a7119cc0816.jpg)
6
6
 
7
- [![GitHub package.json version](https://img.shields.io/github/package-json/v/ducktors/turborepo-remote-cache)](https://github.com/ducktors/turborepo-remote-cache/releases) [![CI](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/ci.yml/badge.svg)](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/ci.yml) [![Release](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/release.yml/badge.svg)](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/release.yml) [![Docker](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/docker.yml/badge.svg)](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/docker.yml) [![Maintainability](https://api.codeclimate.com/v1/badges/bbb26ca5247dee70dde0/maintainability)](https://codeclimate.com/github/ducktors/turborepo-remote-cache/maintainability) [![Coverage Status](https://coveralls.io/repos/github/ducktors/turborepo-remote-cache/badge.svg?branch=main)](https://coveralls.io/github/ducktors/turborepo-remote-cache?branch=main) [![Docker Pulls](https://img.shields.io/docker/pulls/ducktors/turborepo-remote-cache?logo=docker)](https://hub.docker.com/r/ducktors/turborepo-remote-cache) [![npm](https://img.shields.io/npm/dt/turborepo-remote-cache)](https://www.npmjs.com/package/turborepo-remote-cache) [![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
8
- [![All Contributors](https://img.shields.io/badge/all_contributors-17-orange.svg?style=flat-square)](#contributors-)
7
+ [![GitHub package.json version](https://img.shields.io/github/package-json/v/ducktors/turborepo-remote-cache)](https://github.com/ducktors/turborepo-remote-cache/releases) [![CI](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/ci.yml) [![Test](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/test.yaml/badge.svg)](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/test.yaml) [![Release](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/release.yml/badge.svg)](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/release.yml) [![Docker](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/docker.yml/badge.svg)](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/docker.yml) [![Maintainability](https://api.codeclimate.com/v1/badges/bbb26ca5247dee70dde0/maintainability)](https://codeclimate.com/github/ducktors/turborepo-remote-cache/maintainability) [![Coverage Status](https://coveralls.io/repos/github/ducktors/turborepo-remote-cache/badge.svg?branch=main)](https://coveralls.io/github/ducktors/turborepo-remote-cache?branch=main) [![Docker Pulls](https://img.shields.io/docker/pulls/ducktors/turborepo-remote-cache?logo=docker)](https://hub.docker.com/r/ducktors/turborepo-remote-cache) [![npm](https://img.shields.io/npm/dt/turborepo-remote-cache)](https://www.npmjs.com/package/turborepo-remote-cache) [![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/ducktors/turborepo-remote-cache/badge)](https://securityscorecards.dev/viewer/?uri=github.com/ducktors/turborepo-remote-cache) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
8
+ [![All Contributors](https://img.shields.io/badge/all_contributors-19-orange.svg?style=flat-square)](#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
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import './index.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxZQUFZLENBQUEifQ==
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFdEMsTUFBTSxTQUFTLEdBQUc7SUFDaEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsSUFBSSxFQUFFLE1BQU07Q0FDSixDQUFBO0FBR1YsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsS0FBSyxFQUFFLE9BQU87SUFDZCxFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1Isb0JBQW9CLEVBQUUsc0JBQXNCO0lBQzVDLGtCQUFrQixFQUFFLG9CQUFvQjtDQUNoQyxDQUFBO0FBSVYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FDeEI7SUFDRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3hEO0lBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDcEMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDL0QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUNuRTtJQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5RCxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFM0UsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0MscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkQsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRXhDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0MsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRXZDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUd6QyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDOUMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRzdDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQ3BELEVBQ0Q7SUFDRSxvQkFBb0IsRUFBRSxLQUFLO0NBQzVCLENBQ0YsQ0FBQTtBQUNELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBd0I7SUFFNUMsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNuQixnQkFBZ0IsRUFBRSxJQUFJO1FBQ3RCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0tBQ3ZFLENBQUM7SUFDRixNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO0lBQ3JFLE1BQU07Q0FDUCxDQUFDLENBQUE7QUFHRixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUc7SUFDakIsR0FBRztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGLENBQUEifQ==
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=