@contember/engine-s3-plugin 1.2.1 → 1.3.0-alpha.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/dist/src/Config.d.ts +2 -3
- package/dist/src/Config.d.ts.map +1 -1
- package/dist/src/Config.js.map +1 -1
- package/dist/src/S3ConfigProcessor.d.ts +2 -2
- package/dist/src/S3ConfigProcessor.d.ts.map +1 -1
- package/dist/src/S3ConfigProcessor.js.map +1 -1
- package/dist/src/S3ObjectAuthorizator.d.ts +22 -0
- package/dist/src/S3ObjectAuthorizator.d.ts.map +1 -0
- package/dist/src/S3ObjectAuthorizator.js +48 -0
- package/dist/src/S3ObjectAuthorizator.js.map +1 -0
- package/dist/src/S3SchemaContributor.d.ts +11 -5
- package/dist/src/S3SchemaContributor.d.ts.map +1 -1
- package/dist/src/S3SchemaContributor.js +61 -85
- package/dist/src/S3SchemaContributor.js.map +1 -1
- package/dist/src/S3SchemaTypes.d.ts +21 -0
- package/dist/src/S3SchemaTypes.d.ts.map +1 -0
- package/dist/src/S3SchemaTypes.js +65 -0
- package/dist/src/S3SchemaTypes.js.map +1 -0
- package/dist/src/S3Service.d.ts +10 -10
- package/dist/src/S3Service.d.ts.map +1 -1
- package/dist/src/S3Service.js +40 -37
- package/dist/src/S3Service.js.map +1 -1
- package/dist/src/S3Signer.d.ts +1 -1
- package/dist/src/S3Signer.d.ts.map +1 -1
- package/dist/src/S3Signer.js +1 -1
- package/dist/src/S3Signer.js.map +1 -1
- package/dist/src/index.d.ts +6 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/authorizator.test.d.ts +2 -0
- package/dist/tests/cases/authorizator.test.d.ts.map +1 -0
- package/dist/tests/cases/authorizator.test.js +21 -0
- package/dist/tests/cases/authorizator.test.js.map +1 -0
- package/dist/tests/cases/signRequest.test.js +14 -5
- package/dist/tests/cases/signRequest.test.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/Config.ts +1 -2
- package/src/S3ConfigProcessor.ts +2 -2
- package/src/S3ObjectAuthorizator.ts +63 -0
- package/src/S3SchemaContributor.ts +51 -109
- package/src/S3SchemaTypes.ts +89 -0
- package/src/S3Service.ts +51 -43
- package/src/S3Signer.ts +2 -2
- package/src/index.ts +9 -7
- package/src/tsconfig.json +3 -9
- package/tests/cases/authorizator.test.ts +22 -0
- package/tests/cases/signRequest.test.ts +18 -18
- package/tests/tsconfig.json +1 -3
- package/tsconfig.json +2 -6
- package/dist/src/ObjectKeyVerifier.d.ts +0 -3
- package/dist/src/ObjectKeyVerifier.d.ts.map +0 -1
- package/dist/src/ObjectKeyVerifier.js +0 -18
- package/dist/src/ObjectKeyVerifier.js.map +0 -1
- package/src/ObjectKeyVerifier.ts +0 -14
- package/types/sign3/index.d.ts +0 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorizator.test.d.ts","sourceRoot":"","sources":["../../../tests/cases/authorizator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const src_1 = require("../../src");
|
|
5
|
+
(0, vitest_1.test)('required read pattern', () => {
|
|
6
|
+
const authorizator = new src_1.S3ObjectAuthorizator([], [{ pattern: 'foo/**' }]);
|
|
7
|
+
vitest_1.assert.doesNotThrow(() => authorizator.verifyReadAccess({ key: 'foo/lorem.jpg' }));
|
|
8
|
+
vitest_1.assert.throw(() => authorizator.verifyReadAccess({ key: 'lorem.jpg' }), 'Read access forbidden for object key lorem.jpg');
|
|
9
|
+
});
|
|
10
|
+
(0, vitest_1.test)('required upload pattern', () => {
|
|
11
|
+
const authorizator = new src_1.S3ObjectAuthorizator([{ pattern: 'foo/**' }], []);
|
|
12
|
+
vitest_1.assert.doesNotThrow(() => authorizator.verifyUploadAccess({ key: 'foo/lorem.jpg', size: null }));
|
|
13
|
+
vitest_1.assert.throw(() => authorizator.verifyUploadAccess({ key: 'lorem.jpg', size: null }), 'Upload access forbidden for object key lorem.jpg');
|
|
14
|
+
});
|
|
15
|
+
(0, vitest_1.test)('max upload size', () => {
|
|
16
|
+
const authorizator = new src_1.S3ObjectAuthorizator([{ pattern: '**', maxSize: 1024 }], []);
|
|
17
|
+
vitest_1.assert.doesNotThrow(() => authorizator.verifyUploadAccess({ key: 'lorem.jpg', size: 1000 }));
|
|
18
|
+
vitest_1.assert.throw(() => authorizator.verifyUploadAccess({ key: 'lorem.jpg', size: null }), 'File size must be provided');
|
|
19
|
+
vitest_1.assert.throw(() => authorizator.verifyUploadAccess({ key: 'lorem.jpg', size: 2048 }), 'Uploaded file is too large');
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=authorizator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorizator.test.js","sourceRoot":"","sources":["../../../tests/cases/authorizator.test.ts"],"names":[],"mappings":";;AAAA,mCAAqC;AACrC,mCAAgD;AAEhD,IAAA,aAAI,EAAC,uBAAuB,EAAE,GAAG,EAAE;IAClC,MAAM,YAAY,GAAG,IAAI,0BAAoB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC1E,eAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,CAAA;IAClF,eAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,gDAAgD,CAAC,CAAA;AAC1H,CAAC,CAAC,CAAA;AAEF,IAAA,aAAI,EAAC,yBAAyB,EAAE,GAAG,EAAE;IACpC,MAAM,YAAY,GAAG,IAAI,0BAAoB,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IAC1E,eAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAChG,eAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,kDAAkD,CAAC,CAAA;AAC1I,CAAC,CAAC,CAAA;AAGF,IAAA,aAAI,EAAC,iBAAiB,EAAE,GAAG,EAAE;IAC5B,MAAM,YAAY,GAAG,IAAI,0BAAoB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IACrF,eAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5F,eAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAA;IACnH,eAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAA;AACpH,CAAC,CAAC,CAAA"}
|
|
@@ -15,21 +15,30 @@ const createS3Service = (bucket, prefix = '') => new src_1.S3Service({
|
|
|
15
15
|
}, {
|
|
16
16
|
uuid: () => constantUuid,
|
|
17
17
|
now: () => mocked,
|
|
18
|
-
});
|
|
18
|
+
}, new src_1.S3ObjectAuthorizator([{ pattern: '**' }], [{ pattern: '**' }]));
|
|
19
19
|
(0, vitest_1.test)('sign s3 request', () => {
|
|
20
20
|
const service = createS3Service('test');
|
|
21
|
-
|
|
21
|
+
const signed = service.getSignedReadUrl({ objectKey: 'foo.jpg', expiration: null });
|
|
22
|
+
(0, vitest_1.expect)(signed.url).toMatchInlineSnapshot('"https://test.s3.eu-central-1.amazonaws.com/foo.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=test%2F20210702%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20210702T172200Z&X-Amz-Expires=3600&X-Amz-Signature=00e912fe0383066802fc6c0f93ffb223320ca143992385fe69070bbb87c758dc&X-Amz-SignedHeaders=host"');
|
|
22
23
|
});
|
|
23
24
|
(0, vitest_1.test)('sign s3 request - prefix', () => {
|
|
24
25
|
const service = createS3Service('test', 'lorem');
|
|
25
|
-
|
|
26
|
+
const signed = service.getSignedReadUrl({ objectKey: 'lorem/foo.jpg', expiration: null });
|
|
27
|
+
(0, vitest_1.expect)(signed.url).toMatchInlineSnapshot('"https://test.s3.eu-central-1.amazonaws.com/lorem/foo.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=test%2F20210702%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20210702T172200Z&X-Amz-Expires=3600&X-Amz-Signature=f6c69dc306422c2b3242c9d9d42147336817720ffae249af8bd91cc7062e9f6d&X-Amz-SignedHeaders=host"');
|
|
26
28
|
});
|
|
27
29
|
(0, vitest_1.test)('sign upload', () => {
|
|
28
30
|
const service = createS3Service('test');
|
|
29
|
-
|
|
31
|
+
const signed = service.getSignedUploadUrl({ contentType: 'image/jpeg', acl: 'PUBLIC_READ', expiration: 1800, contentDisposition: null, extension: null, fileName: null, prefix: null, suffix: null, size: null });
|
|
32
|
+
(0, vitest_1.expect)(signed.url).toMatchInlineSnapshot('"https://test.s3.eu-central-1.amazonaws.com/9fce3907-ff2b-45bb-b4ce-eff5527dd315.jpeg?Cache-Control=immutable&Content-Type=image%2Fjpeg&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=test%2F20210702%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20210702T172200Z&X-Amz-Expires=1800&X-Amz-Signature=fcd00b967054c19a2ee64b59e31d61e032ea086dcf2f0d8c36a883971c469c99&X-Amz-SignedHeaders=cache-control%3Bhost%3Bx-amz-acl&x-amz-acl=public-read"');
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.test)('sign upload #2', () => {
|
|
35
|
+
const service = createS3Service('test');
|
|
36
|
+
const signed = service.getSignedUploadUrl({ contentType: 'image/jpeg', acl: 'PUBLIC_READ', expiration: 1800, contentDisposition: 'INLINE', extension: 'jpeg', fileName: 'foo-bar.jpeg', prefix: 'foo', suffix: 'bar', size: null });
|
|
37
|
+
(0, vitest_1.expect)(signed.url).toMatchInlineSnapshot('"https://test.s3.eu-central-1.amazonaws.com/foo/9fce3907-ff2b-45bb-b4ce-eff5527dd315bar.jpeg?Cache-Control=immutable&Content-Type=image%2Fjpeg&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=test%2F20210702%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20210702T172200Z&X-Amz-Expires=1800&X-Amz-Signature=979a93bca65a98ce6b2bf97d2bf2afe7d5f2fa805f7d596187675416c86a3bd5&X-Amz-SignedHeaders=cache-control%3Bcontent-disposition%3Bhost%3Bx-amz-acl&x-amz-acl=public-read"');
|
|
30
38
|
});
|
|
31
39
|
(0, vitest_1.test)('bucket with dot', () => {
|
|
32
40
|
const service = createS3Service('test.foo');
|
|
33
|
-
|
|
41
|
+
const signed = service.getSignedReadUrl({ objectKey: 'foo.jpg', expiration: null });
|
|
42
|
+
(0, vitest_1.expect)(signed.url).toMatchInlineSnapshot('"https://s3.eu-central-1.amazonaws.com/test.foo/foo.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=test%2F20210702%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20210702T172200Z&X-Amz-Expires=3600&X-Amz-Signature=811a809196e60413e0e54e51d3dd91ab73ad1482b61e5371864d25d43ba642ff&X-Amz-SignedHeaders=host"');
|
|
34
43
|
});
|
|
35
44
|
//# sourceMappingURL=signRequest.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signRequest.test.js","sourceRoot":"","sources":["../../../tests/cases/signRequest.test.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"signRequest.test.js","sourceRoot":"","sources":["../../../tests/cases/signRequest.test.ts"],"names":[],"mappings":"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"}
|