@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.
- package/.pinejs-cache.json +1 -1
- package/.versionbot/CHANGELOG.yml +12 -11
- package/CHANGELOG.md +7 -3
- package/README.md +0 -10
- package/docker-compose.npm-test.yml +1 -22
- package/out/config-loader/config-loader.d.ts +0 -2
- package/out/config-loader/config-loader.js +2 -13
- package/out/config-loader/config-loader.js.map +1 -1
- package/out/migrator/sync.js +24 -1
- package/out/migrator/sync.js.map +1 -1
- package/out/migrator/utils.d.ts +0 -2
- package/out/migrator/utils.js +1 -26
- package/out/migrator/utils.js.map +1 -1
- package/out/sbvr-api/sbvr-utils.d.ts +4 -7
- package/out/sbvr-api/sbvr-utils.js +46 -11
- package/out/sbvr-api/sbvr-utils.js.map +1 -1
- package/out/server-glue/server.js +2 -0
- package/out/server-glue/server.js.map +1 -1
- package/package.json +12 -17
- package/src/config-loader/config-loader.ts +2 -27
- package/src/migrator/sync.ts +26 -1
- package/src/migrator/utils.ts +0 -28
- package/src/sbvr-api/sbvr-utils.ts +62 -11
- package/src/server-glue/server.ts +3 -0
- package/out/server-glue/webresource-handler.d.ts +0 -21
- package/out/server-glue/webresource-handler.js +0 -219
- package/out/server-glue/webresource-handler.js.map +0 -1
- package/out/server-glue/webresource-handlers/NoopHandler.d.ts +0 -5
- package/out/server-glue/webresource-handlers/NoopHandler.js +0 -17
- package/out/server-glue/webresource-handlers/NoopHandler.js.map +0 -1
- package/out/server-glue/webresource-handlers/S3Handler.d.ts +0 -12
- package/out/server-glue/webresource-handlers/S3Handler.js +0 -71
- package/out/server-glue/webresource-handlers/S3Handler.js.map +0 -1
- package/src/server-glue/webresource-handler.ts +0 -324
- package/src/server-glue/webresource-handlers/NoopHandler.ts +0 -20
- 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
|
-
}
|