@toeichust/common 0.0.13 → 1.0.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.
@@ -11,7 +11,7 @@ exports.SWAGGER_DESCRIPTION = `<table border="0">
11
11
  <h3>Giới thiệu</h3>
12
12
  <ul>
13
13
  <li>Đây là API cho <code>${process.env.NAME_SERVICE || 'Tên mặc định'}</code></li>
14
- <li><a href="https://github.com/ToeicHUST/${process.env.NAME_SERVICE || 'Tên mặc định'}">Xem thông tin github</a></li>
14
+ <li><a href="https://github.com/${process.env.NAME_SERVICE || 'Tên mặc định'}">Xem thông tin github</a></li>
15
15
  </ul>
16
16
  <h3>JSON và YAML docs:</h3>
17
17
  <ul>
@@ -1 +1 @@
1
- {"version":3,"file":"swagger.constant.js","sourceRoot":"","sources":["../../src/constants/swagger.constant.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAC3B,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAChC,QAAA,cAAc,GACzB,0DAA0D,CAAC;AAChD,QAAA,sBAAsB,GACjC,wGAAwG,CAAC;AAC9F,QAAA,mBAAmB,GAAG;;;;;mCAKA,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc;oDACzB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc;;;;wBAItE,yBAAiB;wBACjB,yBAAiB;;;;kBAIvB,8BAAsB;;;SAG/B,CAAC"}
1
+ {"version":3,"file":"swagger.constant.js","sourceRoot":"","sources":["../../src/constants/swagger.constant.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAC3B,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAChC,QAAA,cAAc,GACzB,0DAA0D,CAAC;AAChD,QAAA,sBAAsB,GACjC,wGAAwG,CAAC;AAC9F,QAAA,mBAAmB,GAAG;;;;;mCAKA,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc;0CACnC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc;;;;wBAI5D,yBAAiB;wBACjB,yBAAiB;;;;kBAIvB,8BAAsB;;;SAG/B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,3 +2,5 @@ export * from './constants/swagger.constant';
2
2
  export * from './helpers/bootstrap.helper';
3
3
  export * from './helpers/swagger.helper';
4
4
  export * from './middlewares/logger.middleware';
5
+ export * from './modules/vault/vault.module';
6
+ export * from './modules/vault/vault.service';
package/dist/index.js CHANGED
@@ -18,4 +18,6 @@ __exportStar(require("./constants/swagger.constant"), exports);
18
18
  __exportStar(require("./helpers/bootstrap.helper"), exports);
19
19
  __exportStar(require("./helpers/swagger.helper"), exports);
20
20
  __exportStar(require("./middlewares/logger.middleware"), exports);
21
+ __exportStar(require("./modules/vault/vault.module"), exports);
22
+ __exportStar(require("./modules/vault/vault.service"), exports);
21
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,+DAA6C;AAC7C,6DAA2C;AAC3C,2DAAyC;AACzC,kEAAgD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,+DAA6C;AAC7C,6DAA2C;AAC3C,2DAAyC;AACzC,kEAAgD;AAChD,+DAA6C;AAC7C,gEAA8C"}
@@ -0,0 +1,2 @@
1
+ export declare class VaultModule {
2
+ }
@@ -0,0 +1,34 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.VaultModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const vault_service_1 = require("./vault.service");
12
+ const config_1 = require("@nestjs/config");
13
+ let VaultModule = class VaultModule {
14
+ };
15
+ exports.VaultModule = VaultModule;
16
+ exports.VaultModule = VaultModule = __decorate([
17
+ (0, common_1.Global)(),
18
+ (0, common_1.Module)({
19
+ imports: [config_1.ConfigModule],
20
+ providers: [
21
+ {
22
+ provide: vault_service_1.VaultService,
23
+ useFactory: async (configService) => {
24
+ const vaultService = new vault_service_1.VaultService(configService);
25
+ await vaultService.loadSecrets();
26
+ return vaultService;
27
+ },
28
+ inject: [config_1.ConfigService],
29
+ },
30
+ ],
31
+ exports: [vault_service_1.VaultService],
32
+ })
33
+ ], VaultModule);
34
+ //# sourceMappingURL=vault.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.module.js","sourceRoot":"","sources":["../../../src/modules/vault/vault.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,mDAA+C;AAC/C,2CAA6D;AAoBtD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IAlBvB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,CAAC;QACvB,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,4BAAY;gBACrB,UAAU,EAAE,KAAK,EAAE,aAA4B,EAAE,EAAE;oBACjD,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,aAAa,CAAC,CAAC;oBAErD,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;oBAEjC,OAAO,YAAY,CAAC;gBACtB,CAAC;gBACD,MAAM,EAAE,CAAC,sBAAa,CAAC;aACxB;SACF;QACD,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
@@ -0,0 +1,10 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ export declare class VaultService {
3
+ private configService;
4
+ constructor(configService: ConfigService);
5
+ private readonly logger;
6
+ private vaultClient;
7
+ private secrets;
8
+ loadSecrets(): Promise<void>;
9
+ get<T = string>(key: string): T;
10
+ }
@@ -0,0 +1,92 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ var VaultService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.VaultService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const config_1 = require("@nestjs/config");
19
+ const node_vault_1 = __importDefault(require("node-vault"));
20
+ let VaultService = VaultService_1 = class VaultService {
21
+ configService;
22
+ constructor(configService) {
23
+ this.configService = configService;
24
+ }
25
+ logger = new common_1.Logger(VaultService_1.name);
26
+ vaultClient;
27
+ secrets = {};
28
+ async loadSecrets() {
29
+ this.logger.log('Đang kết nối tới Vault...');
30
+ const NODE_ENV = this.configService.get('NODE_ENV');
31
+ const isDevelopment = NODE_ENV === 'development';
32
+ const VAULT_ADDR = this.configService.get('VAULT_ADDR');
33
+ const VAULT_ROLE_ID = this.configService.get('VAULT_ROLE_ID');
34
+ const VAULT_SECRET_ID = this.configService.get('VAULT_SECRET_ID');
35
+ const VAULT_DATA_PATH = this.configService.get('VAULT_DATA_PATH');
36
+ if (!VAULT_ADDR || !VAULT_ROLE_ID || !VAULT_SECRET_ID) {
37
+ this.logger.error('Thiếu cấu hình Vault (ADDR, ROLE_ID hoặc SECRET_ID)');
38
+ throw new Error('Missing Vault configuration');
39
+ }
40
+ this.vaultClient = (0, node_vault_1.default)({
41
+ apiVersion: 'v1',
42
+ endpoint: VAULT_ADDR,
43
+ });
44
+ try {
45
+ const loginResult = await this.vaultClient.approleLogin({
46
+ role_id: VAULT_ROLE_ID,
47
+ secret_id: VAULT_SECRET_ID,
48
+ });
49
+ this.vaultClient.token = loginResult.auth.client_token;
50
+ const vaultPath = VAULT_DATA_PATH || 'secret/data/myapp';
51
+ const response = await this.vaultClient.read(vaultPath);
52
+ let fetchedSecrets = {};
53
+ if (response.data && response.data.data && response.data.metadata) {
54
+ fetchedSecrets = response.data.data;
55
+ }
56
+ else {
57
+ fetchedSecrets = response.data || {};
58
+ }
59
+ if (isDevelopment) {
60
+ const overriddenKeys = [];
61
+ Object.keys(fetchedSecrets).forEach((key) => {
62
+ const envValue = this.configService.get(key);
63
+ if (envValue !== undefined && envValue !== null && envValue !== '') {
64
+ fetchedSecrets[key] = envValue;
65
+ overriddenKeys.push(key);
66
+ }
67
+ });
68
+ this.secrets = fetchedSecrets;
69
+ if (overriddenKeys.length > 0) {
70
+ this.logger.warn(`⚠️ Các biến sau đây đang sử dụng giá trị từ ENV (ghi đè Vault): ${overriddenKeys.join(', ')}`);
71
+ }
72
+ }
73
+ else {
74
+ this.secrets = fetchedSecrets;
75
+ }
76
+ this.logger.log('Đã kết nối và lấy dữ liệu thành công từ Vault');
77
+ }
78
+ catch (error) {
79
+ this.logger.error(`Lỗi kết nối Vault: ${error.message}`, error.stack);
80
+ throw error;
81
+ }
82
+ }
83
+ get(key) {
84
+ return this.secrets[key];
85
+ }
86
+ };
87
+ exports.VaultService = VaultService;
88
+ exports.VaultService = VaultService = VaultService_1 = __decorate([
89
+ (0, common_1.Injectable)(),
90
+ __metadata("design:paramtypes", [config_1.ConfigService])
91
+ ], VaultService);
92
+ //# sourceMappingURL=vault.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.service.js","sourceRoot":"","sources":["../../../src/modules/vault/vault.service.ts"],"names":[],"mappings":"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"}