@russ-b/nestjs-common-tools 1.4.1 → 1.5.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/modules/index.d.ts +1 -0
- package/dist/modules/index.js +18 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/s3/index.d.ts +2 -0
- package/dist/modules/s3/index.js +19 -0
- package/dist/modules/s3/index.js.map +1 -0
- package/dist/modules/s3/s3.constants.d.ts +2 -0
- package/dist/modules/s3/s3.constants.js +6 -0
- package/dist/modules/s3/s3.constants.js.map +1 -0
- package/dist/modules/s3/s3.interface.d.ts +13 -0
- package/dist/modules/s3/s3.interface.js +3 -0
- package/dist/modules/s3/s3.interface.js.map +1 -0
- package/dist/modules/s3/s3.module.d.ts +5 -0
- package/dist/modules/s3/s3.module.js +52 -0
- package/dist/modules/s3/s3.module.js.map +1 -0
- package/dist/modules/s3/s3.service.d.ts +12 -0
- package/dist/modules/s3/s3.service.js +80 -0
- package/dist/modules/s3/s3.service.js.map +1 -0
- package/dist/s3/s3.constants.d.ts +2 -0
- package/dist/s3/s3.constants.js +6 -0
- package/dist/s3/s3.constants.js.map +1 -0
- package/dist/s3/s3.interface.d.ts +13 -0
- package/dist/s3/s3.interface.js +3 -0
- package/dist/s3/s3.interface.js.map +1 -0
- package/dist/s3/s3.module.d.ts +5 -0
- package/dist/s3/s3.module.js +52 -0
- package/dist/s3/s3.module.js.map +1 -0
- package/dist/s3/s3.service.d.ts +12 -0
- package/dist/s3/s3.service.js +80 -0
- package/dist/s3/s3.service.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './s3';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./s3"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAqB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./s3.module"), exports);
|
|
18
|
+
__exportStar(require("./s3.service"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/s3/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,+CAA6B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.constants.js","sourceRoot":"","sources":["../../../src/modules/s3/s3.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,WAAW,CAAC;AACxB,QAAA,iBAAiB,GAAG,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ModuleMetadata } from '@nestjs/common';
|
|
2
|
+
export interface S3ModuleOptions {
|
|
3
|
+
region?: string;
|
|
4
|
+
endpoint: string;
|
|
5
|
+
accessKeyId: string;
|
|
6
|
+
secretAccessKey: string;
|
|
7
|
+
forcePathStyle?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface S3ModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
10
|
+
useFactory: (...args: any[]) => Promise<S3ModuleOptions> | S3ModuleOptions;
|
|
11
|
+
global?: boolean;
|
|
12
|
+
inject?: any[];
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.interface.js","sourceRoot":"","sources":["../../../src/modules/s3/s3.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var S3Module_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.S3Module = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const s3_service_1 = require("./s3.service");
|
|
13
|
+
const s3_constants_1 = require("./s3.constants");
|
|
14
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
15
|
+
let S3Module = S3Module_1 = class S3Module {
|
|
16
|
+
static forRootAsync(options) {
|
|
17
|
+
return {
|
|
18
|
+
module: S3Module_1,
|
|
19
|
+
imports: options.imports || [],
|
|
20
|
+
global: options.global,
|
|
21
|
+
providers: [
|
|
22
|
+
{
|
|
23
|
+
provide: s3_constants_1.S3_MODULE_OPTIONS,
|
|
24
|
+
useFactory: options.useFactory,
|
|
25
|
+
inject: options.inject || [],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
provide: s3_constants_1.S3_CLIENT,
|
|
29
|
+
inject: [s3_constants_1.S3_MODULE_OPTIONS],
|
|
30
|
+
useFactory: (opts) => {
|
|
31
|
+
return new client_s3_1.S3Client({
|
|
32
|
+
region: opts.region || 'us-east-1',
|
|
33
|
+
endpoint: opts.endpoint,
|
|
34
|
+
credentials: {
|
|
35
|
+
accessKeyId: opts.accessKeyId,
|
|
36
|
+
secretAccessKey: opts.secretAccessKey,
|
|
37
|
+
},
|
|
38
|
+
forcePathStyle: opts.forcePathStyle ?? true,
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
s3_service_1.S3Service,
|
|
43
|
+
],
|
|
44
|
+
exports: [s3_service_1.S3Service],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
exports.S3Module = S3Module;
|
|
49
|
+
exports.S3Module = S3Module = S3Module_1 = __decorate([
|
|
50
|
+
(0, common_1.Module)({})
|
|
51
|
+
], S3Module);
|
|
52
|
+
//# sourceMappingURL=s3.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.module.js","sourceRoot":"","sources":["../../../src/modules/s3/s3.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,6CAAyC;AACzC,iDAA8D;AAC9D,kDAA8C;AAIvC,IAAM,QAAQ,gBAAd,MAAM,QAAQ;IACnB,MAAM,CAAC,YAAY,CAAC,OAA6B;QAC/C,OAAO;YACL,MAAM,EAAE,UAAQ;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,gCAAiB;oBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;iBAC7B;gBACD;oBACE,OAAO,EAAE,wBAAS;oBAClB,MAAM,EAAE,CAAC,gCAAiB,CAAC;oBAC3B,UAAU,EAAE,CAAC,IAAqB,EAAE,EAAE;wBACpC,OAAO,IAAI,oBAAQ,CAAC;4BAClB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,WAAW;4BAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,WAAW,EAAE;gCACX,WAAW,EAAE,IAAI,CAAC,WAAW;gCAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;6BACtC;4BACD,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;yBAC5C,CAAC,CAAC;oBACL,CAAC;iBACF;gBACD,sBAAS;aACV;YACD,OAAO,EAAE,CAAC,sBAAS,CAAC;SACrB,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,4BAAQ;mBAAR,QAAQ;IADpB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,QAAQ,CAgCpB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { S3Client } from '@aws-sdk/client-s3';
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
export declare class S3Service {
|
|
4
|
+
private readonly options;
|
|
5
|
+
private readonly s3Client;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly bucket;
|
|
8
|
+
constructor(options: Record<string, string>, s3Client: S3Client);
|
|
9
|
+
uploadObject(key: string, body: Buffer | Uint8Array | string, contentType?: string): Promise<void>;
|
|
10
|
+
deleteObject(key: string): Promise<void>;
|
|
11
|
+
getObject(key: string): Promise<Readable>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.S3Service = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
18
|
+
const s3_constants_1 = require("./s3.constants");
|
|
19
|
+
let S3Service = class S3Service {
|
|
20
|
+
constructor(options, s3Client) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.s3Client = s3Client;
|
|
23
|
+
this.logger = new common_1.Logger(this.constructor.name);
|
|
24
|
+
this.bucket = this.options.bucket;
|
|
25
|
+
}
|
|
26
|
+
async uploadObject(key, body, contentType = 'application/octet-stream') {
|
|
27
|
+
const command = new client_s3_1.PutObjectCommand({
|
|
28
|
+
Bucket: this.bucket,
|
|
29
|
+
Key: key,
|
|
30
|
+
Body: body,
|
|
31
|
+
ContentType: contentType,
|
|
32
|
+
ACL: 'public-read',
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
await this.s3Client.send(command);
|
|
36
|
+
this.logger.log(`Uploaded object: ${key}`);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
this.logger.error(`Failed to upload object: ${key}`, error);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async deleteObject(key) {
|
|
44
|
+
const command = new client_s3_1.DeleteObjectCommand({
|
|
45
|
+
Bucket: this.bucket,
|
|
46
|
+
Key: key,
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
await this.s3Client.send(command);
|
|
50
|
+
this.logger.log(`Deleted object: ${key}`);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
this.logger.error(`Failed to delete object: ${key}`, error);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async getObject(key) {
|
|
58
|
+
const command = new client_s3_1.GetObjectCommand({
|
|
59
|
+
Bucket: this.bucket,
|
|
60
|
+
Key: key,
|
|
61
|
+
});
|
|
62
|
+
try {
|
|
63
|
+
const response = await this.s3Client.send(command);
|
|
64
|
+
this.logger.log(`Fetched object: ${key}`);
|
|
65
|
+
return response.Body;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
this.logger.error(`Failed to get object: ${key}`, error);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
exports.S3Service = S3Service;
|
|
74
|
+
exports.S3Service = S3Service = __decorate([
|
|
75
|
+
(0, common_1.Injectable)(),
|
|
76
|
+
__param(0, (0, common_1.Inject)(s3_constants_1.S3_MODULE_OPTIONS)),
|
|
77
|
+
__param(1, (0, common_1.Inject)(s3_constants_1.S3_CLIENT)),
|
|
78
|
+
__metadata("design:paramtypes", [Object, client_s3_1.S3Client])
|
|
79
|
+
], S3Service);
|
|
80
|
+
//# sourceMappingURL=s3.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.service.js","sourceRoot":"","sources":["../../../src/modules/s3/s3.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,kDAK4B;AAC5B,iDAA8D;AAIvD,IAAM,SAAS,GAAf,MAAM,SAAS;IAIpB,YAC6B,OAAgD,EACxD,QAAmC;QADV,YAAO,GAAP,OAAO,CAAwB;QACvC,aAAQ,GAAR,QAAQ,CAAU;QALvC,WAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAO1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAW,EACX,IAAkC,EAClC,WAAW,GAAG,0BAA0B;QAExC,MAAM,OAAO,GAAG,IAAI,4BAAgB,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,WAAW;YACxB,GAAG,EAAE,aAAa;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,OAAO,GAAG,IAAI,+BAAmB,CAAC;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;SACT,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,OAAO,GAAG,IAAI,4BAAgB,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;SACT,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YAE1C,OAAO,QAAQ,CAAC,IAAgB,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AAhEY,8BAAS;oBAAT,SAAS;IADrB,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,eAAM,EAAC,gCAAiB,CAAC,CAAA;IACzB,WAAA,IAAA,eAAM,EAAC,wBAAS,CAAC,CAAA;6CAA4B,oBAAQ;GAN7C,SAAS,CAgErB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.constants.js","sourceRoot":"","sources":["../../src/s3/s3.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,WAAW,CAAC;AACxB,QAAA,iBAAiB,GAAG,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ModuleMetadata } from '@nestjs/common';
|
|
2
|
+
export interface S3ModuleOptions {
|
|
3
|
+
region?: string;
|
|
4
|
+
endpoint: string;
|
|
5
|
+
accessKeyId: string;
|
|
6
|
+
secretAccessKey: string;
|
|
7
|
+
forcePathStyle?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface S3ModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
10
|
+
useFactory: (...args: any[]) => Promise<S3ModuleOptions> | S3ModuleOptions;
|
|
11
|
+
global?: boolean;
|
|
12
|
+
inject?: any[];
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.interface.js","sourceRoot":"","sources":["../../src/s3/s3.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var S3Module_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.S3Module = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const s3_service_1 = require("./s3.service");
|
|
13
|
+
const s3_constants_1 = require("./s3.constants");
|
|
14
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
15
|
+
let S3Module = S3Module_1 = class S3Module {
|
|
16
|
+
static forRootAsync(options) {
|
|
17
|
+
return {
|
|
18
|
+
module: S3Module_1,
|
|
19
|
+
imports: options.imports || [],
|
|
20
|
+
global: options.global,
|
|
21
|
+
providers: [
|
|
22
|
+
{
|
|
23
|
+
provide: s3_constants_1.S3_MODULE_OPTIONS,
|
|
24
|
+
useFactory: options.useFactory,
|
|
25
|
+
inject: options.inject || [],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
provide: s3_constants_1.S3_CLIENT,
|
|
29
|
+
inject: [s3_constants_1.S3_MODULE_OPTIONS],
|
|
30
|
+
useFactory: (opts) => {
|
|
31
|
+
return new client_s3_1.S3Client({
|
|
32
|
+
region: opts.region || 'us-east-1',
|
|
33
|
+
endpoint: opts.endpoint,
|
|
34
|
+
credentials: {
|
|
35
|
+
accessKeyId: opts.accessKeyId,
|
|
36
|
+
secretAccessKey: opts.secretAccessKey,
|
|
37
|
+
},
|
|
38
|
+
forcePathStyle: opts.forcePathStyle ?? true,
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
s3_service_1.S3Service,
|
|
43
|
+
],
|
|
44
|
+
exports: [s3_service_1.S3Service],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
exports.S3Module = S3Module;
|
|
49
|
+
exports.S3Module = S3Module = S3Module_1 = __decorate([
|
|
50
|
+
(0, common_1.Module)({})
|
|
51
|
+
], S3Module);
|
|
52
|
+
//# sourceMappingURL=s3.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.module.js","sourceRoot":"","sources":["../../src/s3/s3.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,6CAAyC;AACzC,iDAA8D;AAC9D,kDAA8C;AAIvC,IAAM,QAAQ,gBAAd,MAAM,QAAQ;IACnB,MAAM,CAAC,YAAY,CAAC,OAA6B;QAC/C,OAAO;YACL,MAAM,EAAE,UAAQ;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,gCAAiB;oBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;iBAC7B;gBACD;oBACE,OAAO,EAAE,wBAAS;oBAClB,MAAM,EAAE,CAAC,gCAAiB,CAAC;oBAC3B,UAAU,EAAE,CAAC,IAAqB,EAAE,EAAE;wBACpC,OAAO,IAAI,oBAAQ,CAAC;4BAClB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,WAAW;4BAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,WAAW,EAAE;gCACX,WAAW,EAAE,IAAI,CAAC,WAAW;gCAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;6BACtC;4BACD,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;yBAC5C,CAAC,CAAC;oBACL,CAAC;iBACF;gBACD,sBAAS;aACV;YACD,OAAO,EAAE,CAAC,sBAAS,CAAC;SACrB,CAAC;IACJ,CAAC;CACF,CAAA;AAhCY,4BAAQ;mBAAR,QAAQ;IADpB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,QAAQ,CAgCpB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { S3Client } from '@aws-sdk/client-s3';
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
export declare class S3Service {
|
|
4
|
+
private readonly options;
|
|
5
|
+
private readonly s3Client;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly bucket;
|
|
8
|
+
constructor(options: Record<string, string>, s3Client: S3Client);
|
|
9
|
+
uploadObject(key: string, body: Buffer | Uint8Array | string, contentType?: string): Promise<void>;
|
|
10
|
+
deleteObject(key: string): Promise<void>;
|
|
11
|
+
getObject(key: string): Promise<Readable>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.S3Service = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
18
|
+
const s3_constants_1 = require("./s3.constants");
|
|
19
|
+
let S3Service = class S3Service {
|
|
20
|
+
constructor(options, s3Client) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.s3Client = s3Client;
|
|
23
|
+
this.logger = new common_1.Logger(this.constructor.name);
|
|
24
|
+
this.bucket = this.options.bucket;
|
|
25
|
+
}
|
|
26
|
+
async uploadObject(key, body, contentType = 'application/octet-stream') {
|
|
27
|
+
const command = new client_s3_1.PutObjectCommand({
|
|
28
|
+
Bucket: this.bucket,
|
|
29
|
+
Key: key,
|
|
30
|
+
Body: body,
|
|
31
|
+
ContentType: contentType,
|
|
32
|
+
ACL: 'public-read',
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
await this.s3Client.send(command);
|
|
36
|
+
this.logger.log(`Uploaded object: ${key}`);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
this.logger.error(`Failed to upload object: ${key}`, error);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async deleteObject(key) {
|
|
44
|
+
const command = new client_s3_1.DeleteObjectCommand({
|
|
45
|
+
Bucket: this.bucket,
|
|
46
|
+
Key: key,
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
await this.s3Client.send(command);
|
|
50
|
+
this.logger.log(`Deleted object: ${key}`);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
this.logger.error(`Failed to delete object: ${key}`, error);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async getObject(key) {
|
|
58
|
+
const command = new client_s3_1.GetObjectCommand({
|
|
59
|
+
Bucket: this.bucket,
|
|
60
|
+
Key: key,
|
|
61
|
+
});
|
|
62
|
+
try {
|
|
63
|
+
const response = await this.s3Client.send(command);
|
|
64
|
+
this.logger.log(`Fetched object: ${key}`);
|
|
65
|
+
return response.Body;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
this.logger.error(`Failed to get object: ${key}`, error);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
exports.S3Service = S3Service;
|
|
74
|
+
exports.S3Service = S3Service = __decorate([
|
|
75
|
+
(0, common_1.Injectable)(),
|
|
76
|
+
__param(0, (0, common_1.Inject)(s3_constants_1.S3_MODULE_OPTIONS)),
|
|
77
|
+
__param(1, (0, common_1.Inject)(s3_constants_1.S3_CLIENT)),
|
|
78
|
+
__metadata("design:paramtypes", [Object, client_s3_1.S3Client])
|
|
79
|
+
], S3Service);
|
|
80
|
+
//# sourceMappingURL=s3.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.service.js","sourceRoot":"","sources":["../../src/s3/s3.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,kDAK4B;AAC5B,iDAA8D;AAIvD,IAAM,SAAS,GAAf,MAAM,SAAS;IAIpB,YAC6B,OAAgD,EACxD,QAAmC;QADV,YAAO,GAAP,OAAO,CAAwB;QACvC,aAAQ,GAAR,QAAQ,CAAU;QALvC,WAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAO1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAW,EACX,IAAkC,EAClC,WAAW,GAAG,0BAA0B;QAExC,MAAM,OAAO,GAAG,IAAI,4BAAgB,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,WAAW;YACxB,GAAG,EAAE,aAAa;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,OAAO,GAAG,IAAI,+BAAmB,CAAC;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;SACT,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,OAAO,GAAG,IAAI,4BAAgB,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;SACT,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YAE1C,OAAO,QAAQ,CAAC,IAAgB,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AAhEY,8BAAS;oBAAT,SAAS;IADrB,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,eAAM,EAAC,gCAAiB,CAAC,CAAA;IACzB,WAAA,IAAA,eAAM,EAAC,wBAAS,CAAC,CAAA;6CAA4B,oBAAQ;GAN7C,SAAS,CAgErB"}
|