@balena/pinejs 17.0.0-build-v17-13acf75c74cc64a383aca6e91ba9582f40f60ea1-2 → 17.0.0-build-v17-a23172f0d3c5aa4169ebb0f29d4939508c9074cf-2
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/.versionbot/CHANGELOG.yml +17 -1
- package/CHANGELOG.md +2 -0
- package/out/webresource-handler/handlers/NoopHandler.d.ts +3 -1
- package/out/webresource-handler/handlers/NoopHandler.js +6 -0
- package/out/webresource-handler/handlers/NoopHandler.js.map +1 -1
- package/out/webresource-handler/handlers/index.d.ts +0 -1
- package/out/webresource-handler/handlers/index.js +0 -1
- package/out/webresource-handler/handlers/index.js.map +1 -1
- package/out/webresource-handler/index.d.ts +25 -7
- package/out/webresource-handler/index.js +3 -17
- package/out/webresource-handler/index.js.map +1 -1
- package/package.json +4 -5
- package/src/webresource-handler/handlers/NoopHandler.ts +14 -1
- package/src/webresource-handler/handlers/index.ts +0 -1
- package/src/webresource-handler/index.ts +40 -20
- package/out/webresource-handler/handlers/S3Handler.d.ts +0 -28
- package/out/webresource-handler/handlers/S3Handler.js +0 -97
- package/out/webresource-handler/handlers/S3Handler.js.map +0 -1
- package/src/webresource-handler/handlers/S3Handler.ts +0 -143
@@ -1,4 +1,20 @@
|
|
1
1
|
- commits:
|
2
|
+
- subject: Add beginMultipartUpload/commitMultipartUpload to WebResourceHandler
|
3
|
+
hash: a23172f0d3c5aa4169ebb0f29d4939508c9074cf
|
4
|
+
body: ""
|
5
|
+
footer:
|
6
|
+
Change-type: major
|
7
|
+
change-type: major
|
8
|
+
author: Otavio Jacobi
|
9
|
+
nested: []
|
10
|
+
- subject: Remove S3 handler from core in favor of @balena/pinejs-webresource-s3
|
11
|
+
hash: 4b8f0faa9617d64057e94cdc0ca92650925c1d39
|
12
|
+
body: ""
|
13
|
+
footer:
|
14
|
+
Change-type: major
|
15
|
+
change-type: major
|
16
|
+
author: Otavio Jacobi
|
17
|
+
nested: []
|
2
18
|
- subject: Drop support to node < 18.18
|
3
19
|
hash: 13acf75c74cc64a383aca6e91ba9582f40f60ea1
|
4
20
|
body: |
|
@@ -10,7 +26,7 @@
|
|
10
26
|
nested: []
|
11
27
|
version: 17.0.0
|
12
28
|
title: ""
|
13
|
-
date: 2024-04-
|
29
|
+
date: 2024-04-19T19:12:20.006Z
|
14
30
|
- commits:
|
15
31
|
- subject: Update dependency husky to v9
|
16
32
|
hash: 715d2dd993591d449bca7ece48f069ed6994c8c7
|
package/CHANGELOG.md
CHANGED
@@ -7,6 +7,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
7
7
|
# v17.0.0
|
8
8
|
## (2024-04-19)
|
9
9
|
|
10
|
+
* Add beginMultipartUpload/commitMultipartUpload to WebResourceHandler [Otavio Jacobi]
|
11
|
+
* Remove S3 handler from core in favor of @balena/pinejs-webresource-s3 [Otavio Jacobi]
|
10
12
|
* Drop support to node < 18.18 [Otavio Jacobi]
|
11
13
|
|
12
14
|
# v16.1.2
|
@@ -1,7 +1,9 @@
|
|
1
1
|
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
2
|
-
import type { IncomingFile, UploadResponse, WebResourceHandler } from '..';
|
2
|
+
import type { BeginMultipartUploadHandlerResponse, IncomingFile, UploadResponse, WebResourceHandler } from '..';
|
3
3
|
export declare class NoopHandler implements WebResourceHandler {
|
4
4
|
handleFile(resource: IncomingFile): Promise<UploadResponse>;
|
5
5
|
removeFile(): Promise<void>;
|
6
6
|
onPreRespond(webResource: WebResource): Promise<WebResource>;
|
7
|
+
beginMultipartUpload(): Promise<BeginMultipartUploadHandlerResponse>;
|
8
|
+
commitMultipartUpload(): Promise<WebResource>;
|
7
9
|
}
|
@@ -15,6 +15,12 @@ class NoopHandler {
|
|
15
15
|
async onPreRespond(webResource) {
|
16
16
|
return webResource;
|
17
17
|
}
|
18
|
+
async beginMultipartUpload() {
|
19
|
+
return { fileKey: 'noop', uploadId: 'noop', uploadParts: [] };
|
20
|
+
}
|
21
|
+
async commitMultipartUpload() {
|
22
|
+
return { filename: 'noop', href: 'noop' };
|
23
|
+
}
|
18
24
|
}
|
19
25
|
exports.NoopHandler = NoopHandler;
|
20
26
|
//# sourceMappingURL=NoopHandler.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"NoopHandler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/NoopHandler.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"NoopHandler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/NoopHandler.ts"],"names":[],"mappings":";;;AAQA,MAAa,WAAW;IAChB,KAAK,CAAC,UAAU,CAAC,QAAsB;QAE7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO;YACN,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC;SACP,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU;QACtB,OAAO;IACR,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,WAAwB;QACjD,OAAO,WAAW,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,oBAAoB;QAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,qBAAqB;QACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;CACD;AAzBD,kCAyBC"}
|
@@ -15,5 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
17
|
__exportStar(require("./NoopHandler"), exports);
|
18
|
-
__exportStar(require("./S3Handler"), exports);
|
19
18
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B"}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
import type * as Express from 'express';
|
3
3
|
import type * as stream from 'node:stream';
|
4
4
|
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
5
|
-
import {
|
5
|
+
import type { AnyObject } from 'pinejs-client-core';
|
6
6
|
export * from './handlers';
|
7
7
|
export interface IncomingFile {
|
8
8
|
fieldname: string;
|
@@ -15,16 +15,34 @@ export interface UploadResponse {
|
|
15
15
|
size: number;
|
16
16
|
filename: string;
|
17
17
|
}
|
18
|
+
export interface BeginMultipartUploadPayload {
|
19
|
+
filename: string;
|
20
|
+
content_type: string;
|
21
|
+
size: number;
|
22
|
+
chunk_size: number;
|
23
|
+
}
|
24
|
+
export interface UploadPart {
|
25
|
+
url: string;
|
26
|
+
chunkSize: number;
|
27
|
+
partNumber: number;
|
28
|
+
}
|
29
|
+
export interface BeginMultipartUploadHandlerResponse {
|
30
|
+
uploadParts: UploadPart[];
|
31
|
+
fileKey: string;
|
32
|
+
uploadId: string;
|
33
|
+
}
|
34
|
+
export interface CommitMultipartUploadPayload {
|
35
|
+
fileKey: string;
|
36
|
+
uploadId: string;
|
37
|
+
filename: string;
|
38
|
+
providerCommitData?: AnyObject;
|
39
|
+
}
|
18
40
|
export interface WebResourceHandler {
|
19
41
|
handleFile: (resource: IncomingFile) => Promise<UploadResponse>;
|
20
42
|
removeFile: (fileReference: string) => Promise<void>;
|
21
43
|
onPreRespond: (webResource: WebResource) => Promise<WebResource>;
|
22
|
-
|
23
|
-
|
24
|
-
}
|
25
|
-
export declare class FileSizeExceededError extends WebResourceError {
|
26
|
-
name: string;
|
27
|
-
constructor(maxSize: number);
|
44
|
+
beginMultipartUpload: (fieldName: string, payload: BeginMultipartUploadPayload) => Promise<BeginMultipartUploadHandlerResponse>;
|
45
|
+
commitMultipartUpload: (commitInfo: CommitMultipartUploadPayload) => Promise<WebResource>;
|
28
46
|
}
|
29
47
|
export declare const setupWebresourceHandler: (handler: WebResourceHandler) => void;
|
30
48
|
export declare const getWebresourceHandler: () => WebResourceHandler | undefined;
|
@@ -29,7 +29,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
29
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
30
30
|
};
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
32
|
-
exports.setupUploadHooks = exports.getDefaultHandler = exports.normalizeHref = exports.getUploaderMiddlware = exports.getWebresourceHandler = exports.setupWebresourceHandler =
|
32
|
+
exports.setupUploadHooks = exports.getDefaultHandler = exports.normalizeHref = exports.getUploaderMiddlware = exports.getWebresourceHandler = exports.setupWebresourceHandler = void 0;
|
33
33
|
const busboy_1 = __importDefault(require("busboy"));
|
34
34
|
const uriParser = __importStar(require("../sbvr-api/uri-parser"));
|
35
35
|
const sbvrUtils = __importStar(require("../sbvr-api/sbvr-utils"));
|
@@ -38,18 +38,7 @@ const permissions_1 = require("../sbvr-api/permissions");
|
|
38
38
|
const NoopHandler_1 = require("./handlers/NoopHandler");
|
39
39
|
const odata_to_abstract_sql_1 = require("@balena/odata-to-abstract-sql");
|
40
40
|
const module_1 = require("../server-glue/module");
|
41
|
-
const typed_error_1 = require("typed-error");
|
42
41
|
__exportStar(require("./handlers"), exports);
|
43
|
-
class WebResourceError extends typed_error_1.TypedError {
|
44
|
-
}
|
45
|
-
exports.WebResourceError = WebResourceError;
|
46
|
-
class FileSizeExceededError extends WebResourceError {
|
47
|
-
constructor(maxSize) {
|
48
|
-
super(`File size exceeded the limit of ${maxSize} bytes.`);
|
49
|
-
this.name = 'FileSizeExceededError';
|
50
|
-
}
|
51
|
-
}
|
52
|
-
exports.FileSizeExceededError = FileSizeExceededError;
|
53
42
|
const getLogger = (vocab) => {
|
54
43
|
if (vocab) {
|
55
44
|
return sbvrUtils.api[vocab]?.logger ?? console;
|
@@ -161,11 +150,8 @@ const getUploaderMiddlware = (handler) => {
|
|
161
150
|
}
|
162
151
|
catch (err) {
|
163
152
|
await clearFiles();
|
164
|
-
|
165
|
-
|
166
|
-
}
|
167
|
-
getLogger((0, sbvr_utils_1.getApiRoot)(req)).error('Error uploading file', err);
|
168
|
-
next(err);
|
153
|
+
getLogger((0, sbvr_utils_1.getApiRoot)(req)).warn('Error uploading file', err);
|
154
|
+
return sbvrUtils.handleHttpErrors(req, res, new module_1.errors.BadRequestError(err));
|
169
155
|
}
|
170
156
|
});
|
171
157
|
bb.on('error', async (err) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webresource-handler/index.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webresource-handler/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@balena/pinejs",
|
3
|
-
"version": "17.0.0-build-v17-
|
3
|
+
"version": "17.0.0-build-v17-a23172f0d3c5aa4169ebb0f29d4939508c9074cf-2",
|
4
4
|
"main": "out/server-glue/module",
|
5
5
|
"type": "commonjs",
|
6
6
|
"repository": "git@github.com:balena-io/pinejs.git",
|
@@ -63,7 +63,9 @@
|
|
63
63
|
"typed-error": "^3.2.2"
|
64
64
|
},
|
65
65
|
"devDependencies": {
|
66
|
+
"@aws-sdk/client-s3": "^3.556.0",
|
66
67
|
"@balena/lint": "^8.0.0",
|
68
|
+
"@balena/pinejs-webresource-s3": "^0.2.0",
|
67
69
|
"@faker-js/faker": "^8.3.1",
|
68
70
|
"@types/busboy": "^1.5.3",
|
69
71
|
"@types/chai": "^4.3.11",
|
@@ -106,9 +108,6 @@
|
|
106
108
|
"webpack-dev-server": "^4.15.1"
|
107
109
|
},
|
108
110
|
"optionalDependencies": {
|
109
|
-
"@aws-sdk/client-s3": "^3.490.0",
|
110
|
-
"@aws-sdk/lib-storage": "^3.490.0",
|
111
|
-
"@aws-sdk/s3-request-presigner": "^3.490.0",
|
112
111
|
"bcrypt": "^5.1.1",
|
113
112
|
"body-parser": "^1.20.2",
|
114
113
|
"compression": "^1.7.4",
|
@@ -144,6 +143,6 @@
|
|
144
143
|
"recursive": true
|
145
144
|
},
|
146
145
|
"versionist": {
|
147
|
-
"publishedAt": "2024-04-
|
146
|
+
"publishedAt": "2024-04-19T19:12:20.783Z"
|
148
147
|
}
|
149
148
|
}
|
@@ -1,5 +1,10 @@
|
|
1
1
|
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
2
|
-
import type {
|
2
|
+
import type {
|
3
|
+
BeginMultipartUploadHandlerResponse,
|
4
|
+
IncomingFile,
|
5
|
+
UploadResponse,
|
6
|
+
WebResourceHandler,
|
7
|
+
} from '..';
|
3
8
|
|
4
9
|
export class NoopHandler implements WebResourceHandler {
|
5
10
|
public async handleFile(resource: IncomingFile): Promise<UploadResponse> {
|
@@ -18,4 +23,12 @@ export class NoopHandler implements WebResourceHandler {
|
|
18
23
|
public async onPreRespond(webResource: WebResource): Promise<WebResource> {
|
19
24
|
return webResource;
|
20
25
|
}
|
26
|
+
|
27
|
+
public async beginMultipartUpload(): Promise<BeginMultipartUploadHandlerResponse> {
|
28
|
+
return { fileKey: 'noop', uploadId: 'noop', uploadParts: [] };
|
29
|
+
}
|
30
|
+
|
31
|
+
public async commitMultipartUpload(): Promise<WebResource> {
|
32
|
+
return { filename: 'noop', href: 'noop' };
|
33
|
+
}
|
21
34
|
}
|
@@ -13,7 +13,7 @@ import {
|
|
13
13
|
} from '@balena/odata-to-abstract-sql';
|
14
14
|
import { errors, permissions } from '../server-glue/module';
|
15
15
|
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
16
|
-
import {
|
16
|
+
import type { AnyObject } from 'pinejs-client-core';
|
17
17
|
|
18
18
|
export * from './handlers';
|
19
19
|
|
@@ -30,19 +30,44 @@ export interface UploadResponse {
|
|
30
30
|
filename: string;
|
31
31
|
}
|
32
32
|
|
33
|
+
export interface BeginMultipartUploadPayload {
|
34
|
+
filename: string;
|
35
|
+
content_type: string;
|
36
|
+
size: number;
|
37
|
+
chunk_size: number;
|
38
|
+
}
|
39
|
+
|
40
|
+
export interface UploadPart {
|
41
|
+
url: string;
|
42
|
+
chunkSize: number;
|
43
|
+
partNumber: number;
|
44
|
+
}
|
45
|
+
|
46
|
+
export interface BeginMultipartUploadHandlerResponse {
|
47
|
+
uploadParts: UploadPart[];
|
48
|
+
fileKey: string;
|
49
|
+
uploadId: string;
|
50
|
+
}
|
51
|
+
|
52
|
+
export interface CommitMultipartUploadPayload {
|
53
|
+
fileKey: string;
|
54
|
+
uploadId: string;
|
55
|
+
filename: string;
|
56
|
+
providerCommitData?: AnyObject;
|
57
|
+
}
|
58
|
+
|
33
59
|
export interface WebResourceHandler {
|
34
60
|
handleFile: (resource: IncomingFile) => Promise<UploadResponse>;
|
35
61
|
removeFile: (fileReference: string) => Promise<void>;
|
36
62
|
onPreRespond: (webResource: WebResource) => Promise<WebResource>;
|
37
|
-
}
|
38
|
-
|
39
|
-
export class WebResourceError extends TypedError {}
|
40
63
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
64
|
+
beginMultipartUpload: (
|
65
|
+
fieldName: string,
|
66
|
+
payload: BeginMultipartUploadPayload,
|
67
|
+
) => Promise<BeginMultipartUploadHandlerResponse>;
|
68
|
+
commitMultipartUpload: (
|
69
|
+
commitInfo: CommitMultipartUploadPayload,
|
70
|
+
) => Promise<WebResource>;
|
46
71
|
}
|
47
72
|
|
48
73
|
type WebResourcesDbResponse = {
|
@@ -193,17 +218,12 @@ export const getUploaderMiddlware = (
|
|
193
218
|
next();
|
194
219
|
} catch (err: any) {
|
195
220
|
await clearFiles();
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
);
|
203
|
-
}
|
204
|
-
|
205
|
-
getLogger(getApiRoot(req)).error('Error uploading file', err);
|
206
|
-
next(err);
|
221
|
+
getLogger(getApiRoot(req)).warn('Error uploading file', err);
|
222
|
+
return sbvrUtils.handleHttpErrors(
|
223
|
+
req,
|
224
|
+
res,
|
225
|
+
new errors.BadRequestError(err),
|
226
|
+
);
|
207
227
|
}
|
208
228
|
});
|
209
229
|
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import { type IncomingFile, type UploadResponse, type WebResourceHandler } from '..';
|
2
|
-
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
3
|
-
export interface S3HandlerProps {
|
4
|
-
region: string;
|
5
|
-
accessKey: string;
|
6
|
-
secretKey: string;
|
7
|
-
endpoint: string;
|
8
|
-
bucket: string;
|
9
|
-
maxSize?: number;
|
10
|
-
signedUrlExpireTimeSeconds?: number;
|
11
|
-
signedUrlCacheExpireTimeSeconds?: number;
|
12
|
-
}
|
13
|
-
export declare class S3Handler implements WebResourceHandler {
|
14
|
-
private readonly config;
|
15
|
-
private readonly bucket;
|
16
|
-
private readonly maxFileSize;
|
17
|
-
protected readonly signedUrlExpireTimeSeconds: number;
|
18
|
-
protected readonly signedUrlCacheExpireTimeSeconds: number;
|
19
|
-
protected cachedGetSignedUrl: (fileKey: string) => Promise<string>;
|
20
|
-
private client;
|
21
|
-
constructor(config: S3HandlerProps);
|
22
|
-
handleFile(resource: IncomingFile): Promise<UploadResponse>;
|
23
|
-
removeFile(href: string): Promise<void>;
|
24
|
-
onPreRespond(webResource: WebResource): Promise<WebResource>;
|
25
|
-
private s3SignUrl;
|
26
|
-
private getS3URL;
|
27
|
-
private getKeyFromHref;
|
28
|
-
}
|
@@ -1,97 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.S3Handler = void 0;
|
7
|
-
const __1 = require("..");
|
8
|
-
const client_s3_1 = require("@aws-sdk/client-s3");
|
9
|
-
const lib_storage_1 = require("@aws-sdk/lib-storage");
|
10
|
-
const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
|
11
|
-
const crypto_1 = require("crypto");
|
12
|
-
const memoizee_1 = __importDefault(require("memoizee"));
|
13
|
-
class S3Handler {
|
14
|
-
constructor(config) {
|
15
|
-
this.config = {
|
16
|
-
region: config.region,
|
17
|
-
credentials: {
|
18
|
-
accessKeyId: config.accessKey,
|
19
|
-
secretAccessKey: config.secretKey,
|
20
|
-
},
|
21
|
-
endpoint: config.endpoint,
|
22
|
-
forcePathStyle: true,
|
23
|
-
};
|
24
|
-
this.signedUrlExpireTimeSeconds =
|
25
|
-
config.signedUrlExpireTimeSeconds ?? 86400;
|
26
|
-
this.signedUrlCacheExpireTimeSeconds =
|
27
|
-
config.signedUrlCacheExpireTimeSeconds ?? 82800;
|
28
|
-
this.maxFileSize = config.maxSize ?? 52428800;
|
29
|
-
this.bucket = config.bucket;
|
30
|
-
this.client = new client_s3_1.S3Client(this.config);
|
31
|
-
this.cachedGetSignedUrl = (0, memoizee_1.default)(this.s3SignUrl, {
|
32
|
-
maxAge: this.signedUrlCacheExpireTimeSeconds * 1000,
|
33
|
-
});
|
34
|
-
}
|
35
|
-
async handleFile(resource) {
|
36
|
-
let size = 0;
|
37
|
-
const key = `${resource.fieldname}_${(0, crypto_1.randomUUID)()}_${resource.originalname}`;
|
38
|
-
const params = {
|
39
|
-
Bucket: this.bucket,
|
40
|
-
Key: key,
|
41
|
-
Body: resource.stream,
|
42
|
-
ContentType: resource.mimetype,
|
43
|
-
};
|
44
|
-
const upload = new lib_storage_1.Upload({ client: this.client, params });
|
45
|
-
upload.on('httpUploadProgress', async (ev) => {
|
46
|
-
size = ev.total ?? ev.loaded;
|
47
|
-
if (size > this.maxFileSize) {
|
48
|
-
await upload.abort();
|
49
|
-
}
|
50
|
-
});
|
51
|
-
try {
|
52
|
-
await upload.done();
|
53
|
-
}
|
54
|
-
catch (err) {
|
55
|
-
resource.stream.resume();
|
56
|
-
if (size > this.maxFileSize) {
|
57
|
-
throw new __1.FileSizeExceededError(this.maxFileSize);
|
58
|
-
}
|
59
|
-
throw new __1.WebResourceError(err);
|
60
|
-
}
|
61
|
-
const filename = this.getS3URL(key);
|
62
|
-
return { size, filename };
|
63
|
-
}
|
64
|
-
async removeFile(href) {
|
65
|
-
const fileKey = this.getKeyFromHref(href);
|
66
|
-
const command = new client_s3_1.DeleteObjectCommand({
|
67
|
-
Bucket: this.bucket,
|
68
|
-
Key: fileKey,
|
69
|
-
});
|
70
|
-
await this.client.send(command);
|
71
|
-
}
|
72
|
-
async onPreRespond(webResource) {
|
73
|
-
if (webResource.href != null) {
|
74
|
-
const fileKey = this.getKeyFromHref(webResource.href);
|
75
|
-
webResource.href = await this.cachedGetSignedUrl(fileKey);
|
76
|
-
}
|
77
|
-
return webResource;
|
78
|
-
}
|
79
|
-
s3SignUrl(fileKey) {
|
80
|
-
const command = new client_s3_1.GetObjectCommand({
|
81
|
-
Bucket: this.bucket,
|
82
|
-
Key: fileKey,
|
83
|
-
});
|
84
|
-
return (0, s3_request_presigner_1.getSignedUrl)(this.client, command, {
|
85
|
-
expiresIn: this.signedUrlExpireTimeSeconds,
|
86
|
-
});
|
87
|
-
}
|
88
|
-
getS3URL(key) {
|
89
|
-
return `${this.config.endpoint}/${this.bucket}/${key}`;
|
90
|
-
}
|
91
|
-
getKeyFromHref(href) {
|
92
|
-
const hrefWithoutParams = (0, __1.normalizeHref)(href);
|
93
|
-
return hrefWithoutParams.substring(hrefWithoutParams.lastIndexOf('/') + 1);
|
94
|
-
}
|
95
|
-
}
|
96
|
-
exports.S3Handler = S3Handler;
|
97
|
-
//# sourceMappingURL=S3Handler.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"S3Handler.js","sourceRoot":"","sources":["../../../src/webresource-handler/handlers/S3Handler.ts"],"names":[],"mappings":"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"}
|
@@ -1,143 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
FileSizeExceededError,
|
3
|
-
type IncomingFile,
|
4
|
-
normalizeHref,
|
5
|
-
type UploadResponse,
|
6
|
-
WebResourceError,
|
7
|
-
type WebResourceHandler,
|
8
|
-
} from '..';
|
9
|
-
import {
|
10
|
-
S3Client,
|
11
|
-
type S3ClientConfig,
|
12
|
-
DeleteObjectCommand,
|
13
|
-
type PutObjectCommandInput,
|
14
|
-
GetObjectCommand,
|
15
|
-
} from '@aws-sdk/client-s3';
|
16
|
-
import { Upload } from '@aws-sdk/lib-storage';
|
17
|
-
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
18
|
-
|
19
|
-
import { randomUUID } from 'crypto';
|
20
|
-
import type { WebResourceType as WebResource } from '@balena/sbvr-types';
|
21
|
-
import memoize from 'memoizee';
|
22
|
-
|
23
|
-
export interface S3HandlerProps {
|
24
|
-
region: string;
|
25
|
-
accessKey: string;
|
26
|
-
secretKey: string;
|
27
|
-
endpoint: string;
|
28
|
-
bucket: string;
|
29
|
-
maxSize?: number;
|
30
|
-
signedUrlExpireTimeSeconds?: number;
|
31
|
-
signedUrlCacheExpireTimeSeconds?: number;
|
32
|
-
}
|
33
|
-
|
34
|
-
export class S3Handler implements WebResourceHandler {
|
35
|
-
private readonly config: S3ClientConfig;
|
36
|
-
private readonly bucket: string;
|
37
|
-
private readonly maxFileSize: number;
|
38
|
-
|
39
|
-
protected readonly signedUrlExpireTimeSeconds: number;
|
40
|
-
protected readonly signedUrlCacheExpireTimeSeconds: number;
|
41
|
-
protected cachedGetSignedUrl: (fileKey: string) => Promise<string>;
|
42
|
-
|
43
|
-
private client: S3Client;
|
44
|
-
|
45
|
-
constructor(config: S3HandlerProps) {
|
46
|
-
this.config = {
|
47
|
-
region: config.region,
|
48
|
-
credentials: {
|
49
|
-
accessKeyId: config.accessKey,
|
50
|
-
secretAccessKey: config.secretKey,
|
51
|
-
},
|
52
|
-
endpoint: config.endpoint,
|
53
|
-
forcePathStyle: true,
|
54
|
-
};
|
55
|
-
|
56
|
-
this.signedUrlExpireTimeSeconds =
|
57
|
-
config.signedUrlExpireTimeSeconds ?? 86400; // 24h
|
58
|
-
this.signedUrlCacheExpireTimeSeconds =
|
59
|
-
config.signedUrlCacheExpireTimeSeconds ?? 82800; // 22h
|
60
|
-
|
61
|
-
this.maxFileSize = config.maxSize ?? 52428800;
|
62
|
-
this.bucket = config.bucket;
|
63
|
-
this.client = new S3Client(this.config);
|
64
|
-
|
65
|
-
// Memoize expects maxAge in MS and s3 signing method in seconds.
|
66
|
-
// Normalization to use only seconds and therefore convert here from seconds to MS
|
67
|
-
this.cachedGetSignedUrl = memoize(this.s3SignUrl, {
|
68
|
-
maxAge: this.signedUrlCacheExpireTimeSeconds * 1000,
|
69
|
-
});
|
70
|
-
}
|
71
|
-
|
72
|
-
public async handleFile(resource: IncomingFile): Promise<UploadResponse> {
|
73
|
-
let size = 0;
|
74
|
-
const key = `${resource.fieldname}_${randomUUID()}_${
|
75
|
-
resource.originalname
|
76
|
-
}`;
|
77
|
-
const params: PutObjectCommandInput = {
|
78
|
-
Bucket: this.bucket,
|
79
|
-
Key: key,
|
80
|
-
Body: resource.stream,
|
81
|
-
ContentType: resource.mimetype,
|
82
|
-
};
|
83
|
-
const upload = new Upload({ client: this.client, params });
|
84
|
-
|
85
|
-
upload.on('httpUploadProgress', async (ev) => {
|
86
|
-
size = ev.total ?? ev.loaded!;
|
87
|
-
if (size > this.maxFileSize) {
|
88
|
-
await upload.abort();
|
89
|
-
}
|
90
|
-
});
|
91
|
-
|
92
|
-
try {
|
93
|
-
await upload.done();
|
94
|
-
} catch (err: any) {
|
95
|
-
resource.stream.resume();
|
96
|
-
if (size > this.maxFileSize) {
|
97
|
-
throw new FileSizeExceededError(this.maxFileSize);
|
98
|
-
}
|
99
|
-
throw new WebResourceError(err);
|
100
|
-
}
|
101
|
-
|
102
|
-
const filename = this.getS3URL(key);
|
103
|
-
return { size, filename };
|
104
|
-
}
|
105
|
-
|
106
|
-
public async removeFile(href: string): Promise<void> {
|
107
|
-
const fileKey = this.getKeyFromHref(href);
|
108
|
-
|
109
|
-
const command = new DeleteObjectCommand({
|
110
|
-
Bucket: this.bucket,
|
111
|
-
Key: fileKey,
|
112
|
-
});
|
113
|
-
|
114
|
-
await this.client.send(command);
|
115
|
-
}
|
116
|
-
|
117
|
-
public async onPreRespond(webResource: WebResource): Promise<WebResource> {
|
118
|
-
if (webResource.href != null) {
|
119
|
-
const fileKey = this.getKeyFromHref(webResource.href);
|
120
|
-
webResource.href = await this.cachedGetSignedUrl(fileKey);
|
121
|
-
}
|
122
|
-
return webResource;
|
123
|
-
}
|
124
|
-
|
125
|
-
private s3SignUrl(fileKey: string): Promise<string> {
|
126
|
-
const command = new GetObjectCommand({
|
127
|
-
Bucket: this.bucket,
|
128
|
-
Key: fileKey,
|
129
|
-
});
|
130
|
-
return getSignedUrl(this.client, command, {
|
131
|
-
expiresIn: this.signedUrlExpireTimeSeconds,
|
132
|
-
});
|
133
|
-
}
|
134
|
-
|
135
|
-
private getS3URL(key: string): string {
|
136
|
-
return `${this.config.endpoint}/${this.bucket}/${key}`;
|
137
|
-
}
|
138
|
-
|
139
|
-
private getKeyFromHref(href: string): string {
|
140
|
-
const hrefWithoutParams = normalizeHref(href);
|
141
|
-
return hrefWithoutParams.substring(hrefWithoutParams.lastIndexOf('/') + 1);
|
142
|
-
}
|
143
|
-
}
|