@rsdk/s3 5.14.1 → 5.15.0-next.1
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/client/s3.client.d.ts +1 -1
- package/dist/client/s3.client.js +6 -1
- package/dist/client/s3.client.js.map +1 -1
- package/dist/client/types.d.ts +3 -0
- package/dist/module/s3-clients.config.d.ts +5 -0
- package/dist/module/s3-clients.config.js +40 -0
- package/dist/module/s3-clients.config.js.map +1 -1
- package/dist/module/s3-clients.service.d.ts +2 -3
- package/dist/module/s3-clients.service.js +30 -21
- package/dist/module/s3-clients.service.js.map +1 -1
- package/package.json +2 -2
|
@@ -11,7 +11,7 @@ export declare class S3Client {
|
|
|
11
11
|
private readonly s3;
|
|
12
12
|
private readonly defaultTTL;
|
|
13
13
|
private readonly logger;
|
|
14
|
-
constructor({ url, defaultTTL, bucket, storageName, logger, }: S3ClientOptions);
|
|
14
|
+
constructor({ url, defaultTTL, bucket, storageName, logger, connectTimeout, requestTimeout, maxRetries, }: S3ClientOptions);
|
|
15
15
|
/**
|
|
16
16
|
* Throws error if server is not responding
|
|
17
17
|
* or bucket doesn't exist
|
package/dist/client/s3.client.js
CHANGED
|
@@ -21,12 +21,17 @@ class S3Client {
|
|
|
21
21
|
s3;
|
|
22
22
|
defaultTTL;
|
|
23
23
|
logger;
|
|
24
|
-
constructor({ url, defaultTTL, bucket, storageName, logger, }) {
|
|
24
|
+
constructor({ url, defaultTTL, bucket, storageName, logger, connectTimeout, requestTimeout, maxRetries, }) {
|
|
25
25
|
this.s3 = new aws_sdk_1.S3({
|
|
26
26
|
accessKeyId: url.username,
|
|
27
27
|
secretAccessKey: decodeURIComponent(url.password),
|
|
28
28
|
endpoint: `${url.protocol}//${url.host}${url.pathname}`,
|
|
29
29
|
s3ForcePathStyle: true,
|
|
30
|
+
...(maxRetries !== undefined && { maxRetries }),
|
|
31
|
+
httpOptions: {
|
|
32
|
+
...(connectTimeout && { connectTimeout: connectTimeout.millis() }),
|
|
33
|
+
...(requestTimeout && { timeout: requestTimeout.millis() }),
|
|
34
|
+
},
|
|
30
35
|
});
|
|
31
36
|
this.bucket = bucket;
|
|
32
37
|
this.defaultTTL = defaultTTL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3.client.js","sourceRoot":"","sources":["../../src/client/s3.client.ts"],"names":[],"mappings":";;;;;;AACA,yCAAoC;AACpC,mDAAmD;AAGnD,qCAA6B;AAE7B,4DAA8B;AAC9B,8DAAiC;AACjC,6CAAyC;AACzC,6CAAuC;AAIvC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAExD;;GAEG;AACH,MAAa,QAAQ;IACV,WAAW,CAAS;IACpB,MAAM,CAAS;IAEP,EAAE,CAAK;IACP,UAAU,CAAW;IACrB,MAAM,CAAU;IAEjC,YAAY,EACV,GAAG,EACH,UAAU,EACV,MAAM,EACN,WAAW,EACX,MAAM,
|
|
1
|
+
{"version":3,"file":"s3.client.js","sourceRoot":"","sources":["../../src/client/s3.client.ts"],"names":[],"mappings":"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"}
|
package/dist/client/types.d.ts
CHANGED
|
@@ -2,4 +2,9 @@ import { Timespan } from '@rsdk/common';
|
|
|
2
2
|
import { Config } from '@rsdk/core';
|
|
3
3
|
export declare class S3ClientsConfig extends Config {
|
|
4
4
|
readonly defaultTTL: Timespan;
|
|
5
|
+
readonly connectTimeout: Timespan;
|
|
6
|
+
readonly requestTimeout: Timespan;
|
|
7
|
+
readonly maxRetries: number;
|
|
8
|
+
readonly bootstrapMaxAttempts: number;
|
|
9
|
+
readonly bootstrapRetryDelay: Timespan;
|
|
5
10
|
}
|
|
@@ -14,6 +14,11 @@ const common_1 = require("@rsdk/common");
|
|
|
14
14
|
const core_1 = require("@rsdk/core");
|
|
15
15
|
let S3ClientsConfig = class S3ClientsConfig extends core_1.Config {
|
|
16
16
|
defaultTTL;
|
|
17
|
+
connectTimeout;
|
|
18
|
+
requestTimeout;
|
|
19
|
+
maxRetries;
|
|
20
|
+
bootstrapMaxAttempts;
|
|
21
|
+
bootstrapRetryDelay;
|
|
17
22
|
};
|
|
18
23
|
exports.S3ClientsConfig = S3ClientsConfig;
|
|
19
24
|
__decorate([
|
|
@@ -26,6 +31,41 @@ __decorate([
|
|
|
26
31
|
}),
|
|
27
32
|
__metadata("design:type", common_1.Timespan)
|
|
28
33
|
], S3ClientsConfig.prototype, "defaultTTL", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, core_1.Property)('S3_CONNECT_TIMEOUT', new core_1.TimespanParser(), {
|
|
36
|
+
description: 'Таймаут установки TCP-соединения к S3-совместимому хранилищу.',
|
|
37
|
+
defaultValue: new common_1.Timespan(3, 's'),
|
|
38
|
+
}),
|
|
39
|
+
__metadata("design:type", common_1.Timespan)
|
|
40
|
+
], S3ClientsConfig.prototype, "connectTimeout", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, core_1.Property)('S3_REQUEST_TIMEOUT', new core_1.TimespanParser(), {
|
|
43
|
+
description: 'Таймаут HTTP-запроса к S3-совместимому хранилищу.',
|
|
44
|
+
defaultValue: new common_1.Timespan(120, 's'),
|
|
45
|
+
}),
|
|
46
|
+
__metadata("design:type", common_1.Timespan)
|
|
47
|
+
], S3ClientsConfig.prototype, "requestTimeout", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, core_1.Property)('S3_MAX_RETRIES', new core_1.IntParser(), {
|
|
50
|
+
description: 'Число повторных попыток на один запрос.',
|
|
51
|
+
defaultValue: 2,
|
|
52
|
+
}),
|
|
53
|
+
__metadata("design:type", Number)
|
|
54
|
+
], S3ClientsConfig.prototype, "maxRetries", void 0);
|
|
55
|
+
__decorate([
|
|
56
|
+
(0, core_1.Property)('S3_BOOTSTRAP_MAX_ATTEMPTS', new core_1.IntParser(), {
|
|
57
|
+
description: 'Максимальное число попыток проверки доступности бакета при старте приложения. После исчерпания попыток старт приложения падает.',
|
|
58
|
+
defaultValue: 5,
|
|
59
|
+
}),
|
|
60
|
+
__metadata("design:type", Number)
|
|
61
|
+
], S3ClientsConfig.prototype, "bootstrapMaxAttempts", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, core_1.Property)('S3_BOOTSTRAP_RETRY_DELAY', new core_1.TimespanParser(), {
|
|
64
|
+
description: 'Пауза между попытками проверки бакета при старте приложения.',
|
|
65
|
+
defaultValue: new common_1.Timespan(1, 's'),
|
|
66
|
+
}),
|
|
67
|
+
__metadata("design:type", common_1.Timespan)
|
|
68
|
+
], S3ClientsConfig.prototype, "bootstrapRetryDelay", void 0);
|
|
29
69
|
exports.S3ClientsConfig = S3ClientsConfig = __decorate([
|
|
30
70
|
(0, core_1.ConfigSection)()
|
|
31
71
|
], S3ClientsConfig);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-clients.config.js","sourceRoot":"","sources":["../../src/module/s3-clients.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"s3-clients.config.js","sourceRoot":"","sources":["../../src/module/s3-clients.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAA8C;AAC9C,qCAMoB;AAGb,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,aAAM;IAQhC,UAAU,CAAY;IAOtB,cAAc,CAAY;IAM1B,cAAc,CAAY;IAM1B,UAAU,CAAU;IAOpB,oBAAoB,CAAU;IAM9B,mBAAmB,CAAY;CACzC,CAAA;AAzCY,0CAAe;AAQjB;IAPR,IAAA,eAAQ,EAAC,8BAA8B,EAAE,IAAI,qBAAc,EAAE,EAAE;QAC9D,WAAW,EAAE,IAAA,aAAI,EAAA;;;KAGhB;QACD,YAAY,EAAE,IAAI,iBAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;KACpC,CAAC;8BACoB,iBAAQ;mDAAC;AAOtB;IALR,IAAA,eAAQ,EAAC,oBAAoB,EAAE,IAAI,qBAAc,EAAE,EAAE;QACpD,WAAW,EACT,+DAA+D;QACjE,YAAY,EAAE,IAAI,iBAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;KACnC,CAAC;8BACwB,iBAAQ;uDAAC;AAM1B;IAJR,IAAA,eAAQ,EAAC,oBAAoB,EAAE,IAAI,qBAAc,EAAE,EAAE;QACpD,WAAW,EAAE,mDAAmD;QAChE,YAAY,EAAE,IAAI,iBAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;KACrC,CAAC;8BACwB,iBAAQ;uDAAC;AAM1B;IAJR,IAAA,eAAQ,EAAC,gBAAgB,EAAE,IAAI,gBAAS,EAAE,EAAE;QAC3C,WAAW,EAAE,yCAAyC;QACtD,YAAY,EAAE,CAAC;KAChB,CAAC;;mDAC2B;AAOpB;IALR,IAAA,eAAQ,EAAC,2BAA2B,EAAE,IAAI,gBAAS,EAAE,EAAE;QACtD,WAAW,EACT,iIAAiI;QACnI,YAAY,EAAE,CAAC;KAChB,CAAC;;6DACqC;AAM9B;IAJR,IAAA,eAAQ,EAAC,0BAA0B,EAAE,IAAI,qBAAc,EAAE,EAAE;QAC1D,WAAW,EAAE,8DAA8D;QAC3E,YAAY,EAAE,IAAI,iBAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;KACnC,CAAC;8BAC6B,iBAAQ;4DAAC;0BAxC7B,eAAe;IAD3B,IAAA,oBAAa,GAAE;GACH,eAAe,CAyC3B"}
|
|
@@ -12,14 +12,13 @@ export declare class S3ClientsService implements OnApplicationBootstrap {
|
|
|
12
12
|
constructor(config: S3ClientsConfig, logger: ILogger);
|
|
13
13
|
/**
|
|
14
14
|
* Blocking application start if one of storages is unreachable.
|
|
15
|
-
*
|
|
16
|
-
* NOTE: Not sure that this is correct. Maybe it's better to
|
|
17
|
-
* print errors if exist and start app.
|
|
15
|
+
* Retries a limited number of times per bucket, then fails bootstrap.
|
|
18
16
|
*/
|
|
19
17
|
onApplicationBootstrap(): Promise<void>;
|
|
20
18
|
clients(): Readonly<Readonly<S3Client>[]>;
|
|
21
19
|
resolveClient(storageUrl: URL, storageName: string, bucket: string): S3Client;
|
|
22
20
|
getClient(storageName: string, bucket: string): S3Client | undefined;
|
|
21
|
+
private checkClientConnection;
|
|
23
22
|
private getExisting;
|
|
24
23
|
private setCache;
|
|
25
24
|
}
|
|
@@ -32,31 +32,17 @@ let S3ClientsService = class S3ClientsService {
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Blocking application start if one of storages is unreachable.
|
|
35
|
-
*
|
|
36
|
-
* NOTE: Not sure that this is correct. Maybe it's better to
|
|
37
|
-
* print errors if exist and start app.
|
|
35
|
+
* Retries a limited number of times per bucket, then fails bootstrap.
|
|
38
36
|
*/
|
|
39
37
|
async onApplicationBootstrap() {
|
|
40
38
|
const clients = this.clients();
|
|
41
|
-
const interval = new common_2.Timespan(1, 's');
|
|
42
39
|
this.logger.debug(`Checking connections to ${clients.length} S3 buckets.`);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
this.logger.debug('Checking connection to bucket...', metadata);
|
|
51
|
-
await client.checkBucket();
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
common_2.Assert.isError(error);
|
|
56
|
-
this.logger.fatal(`Connection check failed. Retry in ${interval.millis()}ms`, error);
|
|
57
|
-
}
|
|
58
|
-
await (0, common_2.delay)(interval);
|
|
59
|
-
}
|
|
40
|
+
const results = await Promise.allSettled(clients.map((client) => this.checkClientConnection(client)));
|
|
41
|
+
const errors = results
|
|
42
|
+
.filter((result) => result.status === 'rejected')
|
|
43
|
+
.map((result) => result.reason);
|
|
44
|
+
if (errors.length > 0) {
|
|
45
|
+
throw new AggregateError(errors, `S3 connection check failed for ${errors.length} of ${clients.length} buckets:\n${errors.map((error) => error.message).join('\n')}`);
|
|
60
46
|
}
|
|
61
47
|
}
|
|
62
48
|
clients() {
|
|
@@ -75,6 +61,9 @@ let S3ClientsService = class S3ClientsService {
|
|
|
75
61
|
bucket,
|
|
76
62
|
url: storageUrl,
|
|
77
63
|
defaultTTL: this.config.defaultTTL,
|
|
64
|
+
connectTimeout: this.config.connectTimeout,
|
|
65
|
+
requestTimeout: this.config.requestTimeout,
|
|
66
|
+
maxRetries: this.config.maxRetries,
|
|
78
67
|
logger: logging_1.LoggerFactory.create(`s3/${storageName}/${bucket}`),
|
|
79
68
|
});
|
|
80
69
|
this.setCache(storageName, bucket, client);
|
|
@@ -83,6 +72,26 @@ let S3ClientsService = class S3ClientsService {
|
|
|
83
72
|
getClient(storageName, bucket) {
|
|
84
73
|
return this.getExisting(storageName, bucket);
|
|
85
74
|
}
|
|
75
|
+
async checkClientConnection(client, attempt = 1) {
|
|
76
|
+
const { bootstrapMaxAttempts, bootstrapRetryDelay } = this.config;
|
|
77
|
+
const metadata = {
|
|
78
|
+
storage: client.storageName,
|
|
79
|
+
bucket: client.bucket,
|
|
80
|
+
};
|
|
81
|
+
try {
|
|
82
|
+
this.logger.debug('Checking connection to bucket...', metadata);
|
|
83
|
+
await client.checkBucket();
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
common_2.Assert.isError(error);
|
|
87
|
+
if (attempt >= bootstrapMaxAttempts) {
|
|
88
|
+
throw new Error(`S3 connection check failed for ${metadata.storage}/${metadata.bucket} after ${bootstrapMaxAttempts} attempts: ${error.message}`, { cause: error });
|
|
89
|
+
}
|
|
90
|
+
this.logger.warn(`Connection check failed (attempt ${attempt}/${bootstrapMaxAttempts}). Retry in ${bootstrapRetryDelay.millis()}ms`, { ...metadata, error });
|
|
91
|
+
await (0, common_2.delay)(bootstrapRetryDelay);
|
|
92
|
+
await this.checkClientConnection(client, attempt + 1);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
86
95
|
getExisting(storageName, bucket) {
|
|
87
96
|
return this.cache.get(storageName)?.get(bucket);
|
|
88
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-clients.service.js","sourceRoot":"","sources":["../../src/module/s3-clients.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,2CAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"s3-clients.service.js","sourceRoot":"","sources":["../../src/module/s3-clients.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/s3",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.15.0-next.1",
|
|
4
4
|
"description": "Toolkit for S3 interface",
|
|
5
5
|
"license": "Apache License 2.0",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -27,5 +27,5 @@
|
|
|
27
27
|
"reflect-metadata": "^0.1.12 || ^0.2.0",
|
|
28
28
|
"rxjs": "^7.1.0"
|
|
29
29
|
},
|
|
30
|
-
"gitHead": "
|
|
30
|
+
"gitHead": "2476e6316ac078a690f00031a93c31c2afedfc5e"
|
|
31
31
|
}
|