@balena/pinejs 15.1.0-build-web-resource-4-c82f246bf4abb69c47ca357f99014eb18f1434a8-1 → 15.1.0-build-upsert-6f9a458cc52c017ddaf48ceb7e4597522cdf4dfc-1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. package/.pinejs-cache.json +1 -1
  2. package/.versionbot/CHANGELOG.yml +12 -11
  3. package/CHANGELOG.md +7 -3
  4. package/README.md +0 -10
  5. package/docker-compose.npm-test.yml +1 -22
  6. package/out/config-loader/config-loader.d.ts +0 -2
  7. package/out/config-loader/config-loader.js +2 -13
  8. package/out/config-loader/config-loader.js.map +1 -1
  9. package/out/migrator/sync.js +24 -1
  10. package/out/migrator/sync.js.map +1 -1
  11. package/out/migrator/utils.d.ts +0 -2
  12. package/out/migrator/utils.js +1 -26
  13. package/out/migrator/utils.js.map +1 -1
  14. package/out/sbvr-api/sbvr-utils.d.ts +4 -7
  15. package/out/sbvr-api/sbvr-utils.js +46 -11
  16. package/out/sbvr-api/sbvr-utils.js.map +1 -1
  17. package/out/server-glue/server.js +2 -0
  18. package/out/server-glue/server.js.map +1 -1
  19. package/package.json +12 -17
  20. package/src/config-loader/config-loader.ts +2 -27
  21. package/src/migrator/sync.ts +26 -1
  22. package/src/migrator/utils.ts +0 -28
  23. package/src/sbvr-api/sbvr-utils.ts +62 -11
  24. package/src/server-glue/server.ts +3 -0
  25. package/out/server-glue/webresource-handler.d.ts +0 -21
  26. package/out/server-glue/webresource-handler.js +0 -219
  27. package/out/server-glue/webresource-handler.js.map +0 -1
  28. package/out/server-glue/webresource-handlers/NoopHandler.d.ts +0 -5
  29. package/out/server-glue/webresource-handlers/NoopHandler.js +0 -17
  30. package/out/server-glue/webresource-handlers/NoopHandler.js.map +0 -1
  31. package/out/server-glue/webresource-handlers/S3Handler.d.ts +0 -12
  32. package/out/server-glue/webresource-handlers/S3Handler.js +0 -71
  33. package/out/server-glue/webresource-handlers/S3Handler.js.map +0 -1
  34. package/src/server-glue/webresource-handler.ts +0 -324
  35. package/src/server-glue/webresource-handlers/NoopHandler.ts +0 -20
  36. package/src/server-glue/webresource-handlers/S3Handler.ts +0 -99
@@ -1,20 +0,0 @@
1
- import {
2
- IncomingFile,
3
- UploadResponse,
4
- WebResourceHandler,
5
- } from '../webresource-handler';
6
-
7
- export class NoopHandler implements WebResourceHandler {
8
- public async handleFile(resource: IncomingFile): Promise<UploadResponse> {
9
- // handleFile must consume the file stream
10
- resource.stream.resume();
11
- return {
12
- filename: 'noop',
13
- size: 0,
14
- };
15
- }
16
-
17
- public async removeFile(_fileReference: string): Promise<void> {
18
- return;
19
- }
20
- }
@@ -1,99 +0,0 @@
1
- import { optionalVar, requiredVar, intVar } from '@balena/env-parsing';
2
- import {
3
- IncomingFile,
4
- UploadResponse,
5
- WebResourceHandler,
6
- } from '../webresource-handler';
7
- import {
8
- S3Client,
9
- S3ClientConfig,
10
- DeleteObjectCommand,
11
- PutObjectCommandInput,
12
- } from '@aws-sdk/client-s3';
13
- import { Upload } from '@aws-sdk/lib-storage';
14
-
15
- import { randomUUID } from 'crypto';
16
-
17
- export class S3Handler implements WebResourceHandler {
18
- private readonly config: S3ClientConfig;
19
- private readonly bucket: string;
20
- private readonly endpoint: string;
21
- private readonly maxFileSize = intVar(
22
- 'PINEJS_WEBRESOURCE_MAXFILESIZE',
23
- 52428800,
24
- );
25
- private client: S3Client;
26
-
27
- constructor() {
28
- this.endpoint = requiredVar('S3_ENDPOINT');
29
- this.config = {
30
- region: optionalVar('S3_REGION', 'us-east-1'),
31
- credentials: {
32
- accessKeyId: requiredVar('S3_ACCESS_KEY'),
33
- secretAccessKey: requiredVar('S3_SECRET_KEY'),
34
- },
35
- endpoint: this.endpoint,
36
- forcePathStyle: true,
37
- };
38
-
39
- this.bucket = optionalVar(
40
- 'S3_STORAGE_ADAPTER_BUCKET',
41
- 'balena-pine-web-resources',
42
- );
43
- this.client = new S3Client(this.config);
44
- }
45
-
46
- public async handleFile(resource: IncomingFile): Promise<UploadResponse> {
47
- let size = 0;
48
- const key = `${resource.fieldname}_${randomUUID()}_${
49
- resource.originalname
50
- }`;
51
- const params: PutObjectCommandInput = {
52
- Bucket: this.bucket,
53
- ACL: 'public-read',
54
- StorageClass: 'STANDARD',
55
- Key: key,
56
- Body: resource.stream,
57
- ContentType: resource.mimetype,
58
- };
59
- const upload = new Upload({ client: this.client, params });
60
-
61
- upload.on('httpUploadProgress', async (ev) => {
62
- size = ev.total ? ev.total : ev.loaded!;
63
- if (size > this.maxFileSize) {
64
- await upload.abort();
65
- }
66
- });
67
-
68
- try {
69
- await upload.done();
70
- } catch (err: any) {
71
- resource.stream.resume();
72
- if (size > this.maxFileSize) {
73
- throw new Error('File size exceeded');
74
- }
75
- throw err;
76
- }
77
-
78
- const filename = this.getS3URL(key);
79
- return { size, filename };
80
- }
81
-
82
- public async removeFile(fileReference: string): Promise<void> {
83
- const fileReferences = fileReference.split('/');
84
- const fileKey = fileReferences[fileReferences.length - 1];
85
-
86
- const command = new DeleteObjectCommand({
87
- Bucket: this.bucket,
88
- Key: fileKey,
89
- });
90
-
91
- await this.client.send(command);
92
- }
93
-
94
- private getS3URL(key: string) {
95
- return this.endpoint.includes(this.bucket)
96
- ? `${this.endpoint}/${key}`
97
- : `${this.endpoint}/${this.bucket}/${key}`;
98
- }
99
- }