@triproject/nestjs-core 1.0.13 → 1.0.23

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.
Files changed (96) hide show
  1. package/README.md +222 -2
  2. package/dist/config.d.ts +35 -1
  3. package/dist/config.js +1 -1
  4. package/dist/controllers/controller.js +1 -1
  5. package/dist/drivers/cache/cache.d.ts +1 -0
  6. package/dist/drivers/cache/cache.js +1 -1
  7. package/dist/drivers/cache/{cache.driver.js → cache.module.js} +1 -1
  8. package/dist/drivers/cache/index.d.ts +1 -1
  9. package/dist/drivers/cache/index.js +1 -1
  10. package/dist/drivers/cache/redis.d.ts +19 -4
  11. package/dist/drivers/cache/redis.js +1 -1
  12. package/dist/drivers/db/db.helper.js +1 -1
  13. package/dist/drivers/db/db.module.js +1 -1
  14. package/dist/drivers/db/db.service.js +1 -1
  15. package/dist/drivers/db/migration.d.ts +7 -7
  16. package/dist/drivers/db/migration.js +1 -1
  17. package/dist/drivers/encryptions/encryption.d.ts +2 -0
  18. package/dist/drivers/encryptions/encryption.js +1 -1
  19. package/dist/drivers/encryptions/jwt.d.ts +3 -0
  20. package/dist/drivers/encryptions/jwt.js +1 -1
  21. package/dist/drivers/encryptions/password-hash.d.ts +2 -0
  22. package/dist/drivers/encryptions/password-hash.js +1 -1
  23. package/dist/drivers/logger/app.logger.d.ts +2 -3
  24. package/dist/drivers/logger/app.logger.js +2 -2
  25. package/dist/drivers/logger/cloudwatch.d.ts +11 -14
  26. package/dist/drivers/logger/cloudwatch.js +1 -1
  27. package/dist/drivers/logger/index.d.ts +0 -1
  28. package/dist/drivers/logger/index.js +1 -1
  29. package/dist/drivers/logger/logger.contract.d.ts +24 -0
  30. package/dist/drivers/logger/logger.contract.js +1 -0
  31. package/dist/drivers/logger/logger.driver.d.ts +15 -0
  32. package/dist/drivers/logger/logger.driver.js +1 -0
  33. package/dist/drivers/logger/slack.logger.d.ts +8 -1
  34. package/dist/drivers/logger/slack.logger.js +1 -1
  35. package/dist/drivers/mail/mail.queue.d.ts +1 -1
  36. package/dist/drivers/mail/mail.queue.js +1 -1
  37. package/dist/drivers/mail/mailer.d.ts +1 -1
  38. package/dist/drivers/mail/mailer.js +1 -1
  39. package/dist/drivers/message-broker/index.d.ts +3 -0
  40. package/dist/drivers/message-broker/index.js +1 -0
  41. package/dist/drivers/message-broker/kafka.d.ts +15 -0
  42. package/dist/drivers/message-broker/kafka.js +1 -0
  43. package/dist/drivers/message-broker/message-broker.contract.d.ts +18 -0
  44. package/dist/drivers/message-broker/message-broker.contract.js +1 -0
  45. package/dist/drivers/message-broker/message-broker.module.d.ts +2 -0
  46. package/dist/drivers/message-broker/message-broker.module.js +1 -0
  47. package/dist/drivers/message-broker/message.broker.d.ts +13 -0
  48. package/dist/drivers/message-broker/message.broker.js +1 -0
  49. package/dist/drivers/message-broker/rabbitmq.d.ts +15 -0
  50. package/dist/drivers/message-broker/rabbitmq.js +1 -0
  51. package/dist/drivers/notifications/notification.queue.d.ts +1 -1
  52. package/dist/drivers/notifications/notification.queue.js +1 -1
  53. package/dist/drivers/notifications/push-notification.d.ts +3 -2
  54. package/dist/drivers/notifications/push-notification.js +1 -1
  55. package/dist/drivers/notifications/slack.d.ts +2 -1
  56. package/dist/drivers/queues/app.queue.d.ts +1 -1
  57. package/dist/drivers/queues/app.queue.js +1 -1
  58. package/dist/drivers/queues/queue.module.js +1 -1
  59. package/dist/drivers/secret-manager/aws-secret-manager.d.ts +8 -0
  60. package/dist/drivers/secret-manager/aws-secret-manager.js +1 -0
  61. package/dist/drivers/secret-manager/index.d.ts +2 -0
  62. package/dist/drivers/secret-manager/index.js +1 -0
  63. package/dist/drivers/storage/csv.storage.d.ts +23 -0
  64. package/dist/drivers/storage/csv.storage.js +1 -0
  65. package/dist/drivers/storage/excel.storage.d.ts +16 -0
  66. package/dist/drivers/storage/excel.storage.js +1 -0
  67. package/dist/drivers/storage/index.d.ts +3 -0
  68. package/dist/drivers/storage/index.js +1 -0
  69. package/dist/drivers/storage/local.storage.d.ts +15 -0
  70. package/dist/drivers/storage/local.storage.js +1 -0
  71. package/dist/drivers/storage/minio.storage.d.ts +14 -0
  72. package/dist/drivers/storage/minio.storage.js +1 -0
  73. package/dist/drivers/storage/s3-storage.d.ts +20 -0
  74. package/dist/drivers/storage/s3-storage.js +1 -0
  75. package/dist/drivers/storage/storage.contract.d.ts +13 -0
  76. package/dist/drivers/storage/storage.contract.js +1 -0
  77. package/dist/drivers/storage/storage.module.d.ts +2 -0
  78. package/dist/drivers/storage/storage.module.js +1 -0
  79. package/dist/drivers/storage/storage.service.d.ts +13 -0
  80. package/dist/drivers/storage/storage.service.js +1 -0
  81. package/dist/helpers/swagger.helper.d.ts +13 -0
  82. package/dist/helpers/swagger.helper.js +1 -1
  83. package/dist/index.d.ts +0 -1
  84. package/dist/index.js +1 -1
  85. package/dist/utils/redlock.d.ts +7 -0
  86. package/dist/utils/redlock.js +1 -0
  87. package/dist/utils/throttle.d.ts +7 -0
  88. package/dist/utils/throttle.js +1 -0
  89. package/dist/{helpers/totp.helper.d.ts → utils/totp.d.ts} +4 -5
  90. package/dist/utils/totp.js +1 -0
  91. package/package.json +86 -22
  92. package/.swcrc +0 -24
  93. package/dist/drivers/logger/cloudwatch.logger.d.ts +0 -1
  94. package/dist/drivers/logger/cloudwatch.logger.js +0 -1
  95. package/dist/helpers/totp.helper.js +0 -1
  96. /package/dist/drivers/cache/{cache.driver.d.ts → cache.module.d.ts} +0 -0
package/README.md CHANGED
@@ -134,7 +134,43 @@ const decrypted = encryption.decrypt(encrypted);
134
134
 
135
135
  - `jsonwebtoken` (^9.0.0)
136
136
 
137
- **Features:**
137
+ ## **Features:**
138
+
139
+ **Environment Variables:**
140
+
141
+ Set the following variables in your `.env` file depending on the storage driver:
142
+
143
+ **Common:**
144
+
145
+ ```env
146
+ STORAGE_DRIVER=local # or s3 or minio
147
+ ```
148
+
149
+ **Local Storage:**
150
+
151
+ ```env
152
+ S3_BUCKET=./storage # Local directory path for file storage
153
+ ```
154
+
155
+ **AWS S3:**
156
+
157
+ ```env
158
+ S3_BUCKET=your-bucket-name
159
+ S3_REGION=your-region
160
+ S3_ACCESS_KEY_ID=your-access-key
161
+ S3_SECRET_ACCESS_KEY=your-secret-key
162
+ ```
163
+
164
+ **MinIO:**
165
+
166
+ ```env
167
+ MINIO_HOST=localhost
168
+ MINIO_PORT=9000
169
+ MINIO_USE_SSL=false
170
+ S3_BUCKET=your-bucket-name
171
+ S3_ACCESS_KEY_ID=your-access-key
172
+ S3_SECRET_ACCESS_KEY=your-secret-key
173
+ ```
138
174
 
139
175
  - PBKDF2 password hashing with SHA-512
140
176
  - RS512 JWT tokens
@@ -254,12 +290,27 @@ class MyService {
254
290
  }
255
291
 
256
292
  // TOTP/2FA
257
- const { secret, qrCodeBase64 } = await totp.generateSecret({
293
+
294
+ // Generate TOTP secret and QR code
295
+ const { secret, qrCodeBase64 } = await totp.generate({
258
296
  email: 'user@example.com',
259
297
  issuer: 'MyApp',
260
298
  });
261
299
  const isValid = totp.verify(secret, '123456');
262
300
 
301
+ // Protect a route/controller with TOTP guard
302
+ import { Controller, Get, UseGuards } from '@nestjs/common';
303
+ import { TotpGuard } from '@triproject/nestjs-core/totp';
304
+
305
+ @Controller('secure')
306
+ export class SecureController {
307
+ @Get()
308
+ @UseGuards(TotpGuard)
309
+ getSecureData() {
310
+ return 'This route requires a valid TOTP code in the X-TOTP header.';
311
+ }
312
+ }
313
+
263
314
  // Swagger decorators
264
315
  @SwaggerApiPaginateResponse(UserDto)
265
316
  async getUsers() {
@@ -394,6 +445,175 @@ npm test
394
445
 
395
446
  ISC
396
447
 
448
+ ## Storage (Local, S3, MinIO)
449
+
450
+ Unified file storage abstraction supporting local filesystem, AWS S3, MinIO, as well as CSV and Excel file creation and storage. Choose the driver via the `STORAGE_DRIVER` environment variable (`local`, `s3`, or `minio`).
451
+
452
+ ```typescript
453
+ import { StorageModule, StorageService, CsvStorage, ExcelService } from '@triproject/nestjs-core/storage';
454
+
455
+ @Module({
456
+ imports: [StorageModule],
457
+ })
458
+ export class AppModule {}
459
+
460
+ constructor(
461
+ private storage: StorageService,
462
+ private csvStorage: CsvStorage,
463
+ private excelService: ExcelService,
464
+ ) {}
465
+
466
+ // Upload a file
467
+ await this.storage.upload('uploads/file.txt', Buffer.from('hello'));
468
+
469
+ // Get a file URL
470
+ const file = await this.storage.get('uploads/file.txt');
471
+ console.log(file.url); // Signed URL or local path
472
+
473
+ // Delete a file
474
+ await this.storage.delete('uploads/file.txt');
475
+
476
+ // Check if file exists
477
+ const exists = await this.storage.isExists('uploads/file.txt');
478
+
479
+ // --- CSV Example ---
480
+ await this.csvStorage.upload({
481
+ path: 'exports/data',
482
+ header: ['id', 'name'],
483
+ body: [
484
+ [1, 'Alice'],
485
+ [2, 'Bob'],
486
+ ],
487
+ });
488
+ const csvFile = await this.storage.get('exports/data.csv');
489
+
490
+ // --- Excel Example ---
491
+ await this.excelService.upload('exports/report', {
492
+ title: 'Report',
493
+ header: ['id', 'name'],
494
+ body: [
495
+ [1, 'Alice'],
496
+ [2, 'Bob'],
497
+ ],
498
+ });
499
+ const excelFile = await this.storage.get('exports/report.xlsx');
500
+ ```
501
+
502
+ **Required peer dependencies:**
503
+
504
+ - For S3: `@aws-sdk/client-s3`, `@aws-sdk/s3-request-presigner`
505
+ - For MinIO: `minio`
506
+ - For local: Node.js built-in `fs`, `path`
507
+ - For Excel: `exceljs`
508
+
509
+ **Features:**
510
+
511
+ - 🛡️ **Rate Limiting** - Throttle requests with Redis-backed storage (AppThrottleModule)
512
+
513
+ ### Throttling (Rate Limiting)
514
+
515
+ ```typescript
516
+ import { AppThrottleModule } from '@triproject/nestjs-core/throttle';
517
+
518
+ // For per-route or controller-level throttling:
519
+ import { AppThrottleGuard } from '@triproject/nestjs-core/throttle';
520
+
521
+ @Module({
522
+ imports: [AppThrottleModule],
523
+ })
524
+ export class AppModule {}
525
+ ```
526
+
527
+ #### Usage: AppThrottleGuard
528
+
529
+ Apply custom throttling to a route or controller:
530
+
531
+ ```typescript
532
+ import { Controller, Get, UseGuards } from '@nestjs/common';
533
+ import { AppThrottleGuard } from '@triproject/nestjs-core/throttle';
534
+
535
+ @Controller('demo')
536
+ export class DemoController {
537
+ @Get()
538
+ @UseGuards(AppThrottleGuard({ limit: 10, ttl: 60000 }))
539
+ getDemo() {
540
+ return 'Throttled endpoint';
541
+ }
542
+ }
543
+ ```
544
+
545
+ **Required peer dependencies:**
546
+
547
+ - `@nestjs/throttler` (^6.0.0)
548
+ - `@nest-lab/throttler-storage-redis` (^1.0.0)
549
+
550
+ **Features:**
551
+
552
+ - Global rate limiting for your NestJS app
553
+ - Redis-backed storage for distributed environments
554
+ - Custom key generation per request (IP + path)
555
+ - Per-route or controller-level throttling with `AppThrottleGuard`
556
+
557
+ - Unified API for local, S3, MinIO, CSV, and Excel
558
+ - File upload, download (signed URL), delete, move, and existence check
559
+ - CSV file creation, upload, and validation
560
+ - Excel (.xlsx) file creation and upload
561
+ - Contract-based for custom driver extension
562
+ - Dependency-injectable service for use in any provider
563
+
564
+ ## Message Broker (RabbitMQ, Kafka)
565
+
566
+ Unified message broker abstraction supporting RabbitMQ and Kafka. Choose the driver via the `MESSAGE_BROKER_DRIVER` environment variable (`rabbitmq` or `kafka`).
567
+
568
+ ```typescript
569
+ import { MessageBrokerModule, MessageBroker } from '@triproject/nestjs-core/message-broker';
570
+
571
+ @Module({
572
+ imports: [MessageBrokerModule],
573
+ })
574
+ export class AppModule {}
575
+
576
+ constructor(private broker: MessageBroker) {}
577
+
578
+ // Publish a message
579
+ await this.broker.publish('my-topic', { foo: 'bar' });
580
+
581
+ // Consume messages
582
+ await this.broker.consume('my-topic', async (payload) => {
583
+ console.log(payload.data);
584
+ });
585
+ ```
586
+
587
+ **Required peer dependencies:**
588
+
589
+ - For RabbitMQ: `amqplib`, `amqp-connection-manager`
590
+ - For Kafka: `kafkajs`
591
+
592
+ **Environment Variables:**
593
+
594
+ ```env
595
+ # Common
596
+ MESSAGE_BROKER_DRIVER=rabbitmq # or kafka
597
+
598
+ # RabbitMQ
599
+ RABBITMQ_HOST=amqp://localhost
600
+
601
+ # Kafka
602
+ KAFKA_BROKERS=localhost:9092
603
+ KAFKA_CLIENT_ID=my-app
604
+ ```
605
+
606
+ **Features:**
607
+
608
+ - Unified API for RabbitMQ and Kafka
609
+ - Publish and consume messages with a consistent interface
610
+ - Dependency-injectable service for use in any provider
611
+
612
+ - Unified API for local, S3, and MinIO
613
+ - File upload, download (signed URL), delete, move, and existence check
614
+ - Contract-based for custom driver extension
615
+ - Dependency-injectable service for use in any provider
616
+
397
617
  ## Contributing
398
618
 
399
619
  Contributions are welcome! Please feel free to submit a Pull Request.
package/dist/config.d.ts CHANGED
@@ -6,6 +6,8 @@ export declare const APP_KEY: string;
6
6
  export declare const SESSION_KEY: string;
7
7
  export declare const SESSION_EXPIRATION: number;
8
8
  export declare const ALLOWED_ORIGINS: string[];
9
+ export declare const DEFAULT_THROTTLE_TTL: number;
10
+ export declare const DEFAULT_THROTTLE_LIMIT: number;
9
11
  export declare const PASSWORD_HASH_SECRET: string;
10
12
  export declare const ENCRYPTION_KEY: string | undefined;
11
13
  export declare const JWT_PUBLIC_KEY: string;
@@ -27,8 +29,15 @@ export declare const DB_ENTITIES_PATH = "./dist/**/**/*.entity.*";
27
29
  export declare const REDIS_HOST: string;
28
30
  export declare const REDIS_PORT: number;
29
31
  export declare const REDIS_DB: number;
30
- export declare const REDIS_PASSWORD: string;
32
+ export declare const REDIS_USER: string | undefined;
33
+ export declare const REDIS_PASSWORD: string | undefined;
31
34
  export declare const REDIS_TLS: boolean;
35
+ export declare const REDIS_READ_HOST: string;
36
+ export declare const REDIS_READ_PORT: number;
37
+ export declare const REDIS_READ_DB: number;
38
+ export declare const REDIS_READ_USER: string | undefined;
39
+ export declare const REDIS_READ_PASSWORD: string | undefined;
40
+ export declare const REDIS_READ_TLS: boolean;
32
41
  export declare const MAIL_MAILER: 'smtp' | 'ses';
33
42
  export declare const MAIL_HOST: string;
34
43
  export declare const MAIL_PORT: number;
@@ -44,3 +53,28 @@ export declare const LANDING_PAGE_URL: string;
44
53
  export declare const APP_LOGO_URL: string;
45
54
  export declare const ONESIGNAL_APP_ID: string;
46
55
  export declare const ONESIGNAL_REST_API_KEY: string;
56
+ export declare const STORAGE_DRIVER: 'local' | 's3' | 'minio';
57
+ export declare const S3_BUCKET: string;
58
+ export declare const S3_REGION: string;
59
+ export declare const S3_ACCESS_KEY_ID: string;
60
+ export declare const S3_SECRET_ACCESS_KEY: string;
61
+ export declare const MINIO_HOST: string;
62
+ export declare const MINIO_PORT: number;
63
+ export declare const MINIO_USE_SSL: boolean;
64
+ export declare const MINIO_ACCESS_KEY: string;
65
+ export declare const MINIO_SECRET_KEY: string;
66
+ export declare const MESSAGE_BROKER_DRIVER: 'rabbitmq' | 'kafka' | 'redis';
67
+ export declare const RABBITMQ_HOST: string;
68
+ export declare const KAFKA_BROKERS: string[];
69
+ export declare const KAFKA_CLIENT_ID: string;
70
+ export declare const CLOUDWATCH_LOG_GROUP: string | undefined;
71
+ export declare const CLOUDWATCH_LOG_STREAM: string | undefined;
72
+ export declare const CLOUDWATCH_REGION: string | undefined;
73
+ export declare const CLOUDWATCH_ACCESS_KEY_ID: string | undefined;
74
+ export declare const CLOUDWATCH_SECRET_ACCESS_KEY: string | undefined;
75
+ export declare const ENABLE_CLOUDWATCH_LOGS: string | undefined;
76
+ export declare const AWS_SECRETS_MANAGER_REGION: string;
77
+ export declare const AWS_SECRETS_MANAGER_ACCESS_KEY_ID: string;
78
+ export declare const AWS_SECRETS_MANAGER_SECRET_ACCESS_KEY: string;
79
+ export declare const AWS_SECRETS_MANAGER_SECRET_NAME: string;
80
+ export declare const AWS_SECRETS_MANAGER_VERSION_STAGE: string;
package/dist/config.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get ALLOWED_ORIGINS(){return ALLOWED_ORIGINS},get APP_KEY(){return APP_KEY},get APP_LOGO_URL(){return APP_LOGO_URL},get APP_NAME(){return APP_NAME},get APP_PORT(){return APP_PORT},get DB_DIALECT(){return DB_DIALECT},get DB_ENTITIES_PATH(){return DB_ENTITIES_PATH},get DB_HOST(){return DB_HOST},get DB_MAX_POOL_SIZE(){return DB_MAX_POOL_SIZE},get DB_NAME(){return DB_NAME},get DB_PASSWORD(){return DB_PASSWORD},get DB_POOL_ACQUIRE(){return DB_POOL_ACQUIRE},get DB_POOL_IDLE(){return DB_POOL_IDLE},get DB_POOL_MIN(){return DB_POOL_MIN},get DB_PORT(){return DB_PORT},get DB_REPLICA_HOST(){return DB_REPLICA_HOST},get DB_REPLICA_PORT(){return DB_REPLICA_PORT},get DB_SSL(){return DB_SSL},get DB_USER(){return DB_USER},get ENCRYPTION_KEY(){return ENCRYPTION_KEY},get JWT_PRIVATE_KEY(){return JWT_PRIVATE_KEY},get JWT_PUBLIC_KEY(){return JWT_PUBLIC_KEY},get LANDING_PAGE_URL(){return LANDING_PAGE_URL},get MAIL_EMAIL_SUPPORT(){return MAIL_EMAIL_SUPPORT},get MAIL_ENCRYPTION(){return MAIL_ENCRYPTION},get MAIL_FROM_EMAIL(){return MAIL_FROM_EMAIL},get MAIL_FROM_NAME(){return MAIL_FROM_NAME},get MAIL_HOST(){return MAIL_HOST},get MAIL_MAILER(){return MAIL_MAILER},get MAIL_PASSWORD(){return MAIL_PASSWORD},get MAIL_PORT(){return MAIL_PORT},get MAIL_TO_CC(){return MAIL_TO_CC},get MAIL_USERNAME(){return MAIL_USERNAME},get NODE_ENV(){return NODE_ENV},get ONESIGNAL_APP_ID(){return ONESIGNAL_APP_ID},get ONESIGNAL_REST_API_KEY(){return ONESIGNAL_REST_API_KEY},get PASSWORD_HASH_SECRET(){return PASSWORD_HASH_SECRET},get REDIS_DB(){return REDIS_DB},get REDIS_HOST(){return REDIS_HOST},get REDIS_PASSWORD(){return REDIS_PASSWORD},get REDIS_PORT(){return REDIS_PORT},get REDIS_TLS(){return REDIS_TLS},get SESSION_EXPIRATION(){return SESSION_EXPIRATION},get SESSION_KEY(){return SESSION_KEY},get SLACK_ERROR_WEBHOOK_URL(){return SLACK_ERROR_WEBHOOK_URL}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});(0,require("dotenv").config)({quiet:!0});let NODE_ENV=process.env.NODE_ENV??"development",APP_NAME=process.env.APP_NAME??"MyApp",APP_PORT=Number(process.env.APP_PORT)??3e3,APP_KEY=process.env.APP_KEY??"",SESSION_KEY=process.env.SESSION_KEY??"APP_SESSION",SESSION_EXPIRATION=Number(process.env.SESSION_EXPIRATION)??86400,ALLOWED_ORIGINS=(process.env.ALLOWED_ORIGINS??"http://localhost:3000").split(","),PASSWORD_HASH_SECRET=process.env.PASSWORD_HASH_SECRET??"default_secret",ENCRYPTION_KEY=process.env.ENCRYPTION_KEY,JWT_PUBLIC_KEY=process.env.JWT_PUBLIC_KEY??"",JWT_PRIVATE_KEY=process.env.JWT_PRIVATE_KEY??"",DB_DIALECT="postgres",DB_HOST=process.env.DB_HOST??"localhost",DB_PORT=Number(process.env.DB_PORT)??5432,DB_USER=process.env.DB_USER??"postgres",DB_PASSWORD=process.env.DB_PASSWORD??"password",DB_NAME=process.env.DB_NAME??"postgres",DB_REPLICA_HOST=process.env.DB_REPLICA_HOST??"localhost",DB_REPLICA_PORT=Number(process.env.DB_REPLICA_PORT)??5432,DB_SSL=(process.env.DB_SSL??"false")?.toLowerCase()==="true",DB_MAX_POOL_SIZE=Number(process.env.DB_MAX_POOL_SIZE??10),DB_POOL_MIN=Number(process.env.DB_POOL_MIN??0),DB_POOL_ACQUIRE=Number(process.env.DB_POOL_ACQUIRE??3e4),DB_POOL_IDLE=Number(process.env.DB_POOL_IDLE??1e4),DB_ENTITIES_PATH="./dist/**/**/*.entity.*",REDIS_HOST=process.env.REDIS_HOST??"localhost",REDIS_PORT=Number(process.env.REDIS_PORT)??6379,REDIS_DB=Number(process.env.REDIS_DB)??0,REDIS_PASSWORD=process.env.REDIS_PASSWORD??"",REDIS_TLS=(process.env.REDIS_TLS??"false")?.toLowerCase()==="true",MAIL_MAILER=process.env.MAIL_MAILER??"smtp",MAIL_HOST=process.env.MAIL_HOST??"127.0.0.1",MAIL_PORT=+(process.env.MAIL_PORT??1025),MAIL_USERNAME=process.env.MAIL_USERNAME??"",MAIL_PASSWORD=process.env.MAIL_PASSWORD??"",MAIL_ENCRYPTION=process.env.MAIL_ENCRYPTION??"false",MAIL_FROM_NAME=process.env.MAIL_FROM_NAME??"Support Team",MAIL_FROM_EMAIL=process.env.MAIL_FROM_EMAIL??"no-reply@app.com",MAIL_TO_CC=process.env.MAIL_TO_CC??"",MAIL_EMAIL_SUPPORT=process.env.MAIL_EMAIL_SUPPORT??"support@app.com",SLACK_ERROR_WEBHOOK_URL=process.env.SLACK_ERROR_WEBHOOK_URL??"",LANDING_PAGE_URL=process.env.LANDING_PAGE_URL??"http://localhost:8000",APP_LOGO_URL=process.env.APP_LOGO_URL??"",ONESIGNAL_APP_ID=process.env.ONESIGNAL_APP_ID??"",ONESIGNAL_REST_API_KEY=process.env.ONESIGNAL_REST_API_KEY??"";
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get ALLOWED_ORIGINS(){return ALLOWED_ORIGINS},get APP_KEY(){return APP_KEY},get APP_LOGO_URL(){return APP_LOGO_URL},get APP_NAME(){return APP_NAME},get APP_PORT(){return APP_PORT},get AWS_SECRETS_MANAGER_ACCESS_KEY_ID(){return AWS_SECRETS_MANAGER_ACCESS_KEY_ID},get AWS_SECRETS_MANAGER_REGION(){return AWS_SECRETS_MANAGER_REGION},get AWS_SECRETS_MANAGER_SECRET_ACCESS_KEY(){return AWS_SECRETS_MANAGER_SECRET_ACCESS_KEY},get AWS_SECRETS_MANAGER_SECRET_NAME(){return AWS_SECRETS_MANAGER_SECRET_NAME},get AWS_SECRETS_MANAGER_VERSION_STAGE(){return AWS_SECRETS_MANAGER_VERSION_STAGE},get CLOUDWATCH_ACCESS_KEY_ID(){return CLOUDWATCH_ACCESS_KEY_ID},get CLOUDWATCH_LOG_GROUP(){return CLOUDWATCH_LOG_GROUP},get CLOUDWATCH_LOG_STREAM(){return CLOUDWATCH_LOG_STREAM},get CLOUDWATCH_REGION(){return CLOUDWATCH_REGION},get CLOUDWATCH_SECRET_ACCESS_KEY(){return CLOUDWATCH_SECRET_ACCESS_KEY},get DB_DIALECT(){return DB_DIALECT},get DB_ENTITIES_PATH(){return DB_ENTITIES_PATH},get DB_HOST(){return DB_HOST},get DB_MAX_POOL_SIZE(){return DB_MAX_POOL_SIZE},get DB_NAME(){return DB_NAME},get DB_PASSWORD(){return DB_PASSWORD},get DB_POOL_ACQUIRE(){return DB_POOL_ACQUIRE},get DB_POOL_IDLE(){return DB_POOL_IDLE},get DB_POOL_MIN(){return DB_POOL_MIN},get DB_PORT(){return DB_PORT},get DB_REPLICA_HOST(){return DB_REPLICA_HOST},get DB_REPLICA_PORT(){return DB_REPLICA_PORT},get DB_SSL(){return DB_SSL},get DB_USER(){return DB_USER},get DEFAULT_THROTTLE_LIMIT(){return DEFAULT_THROTTLE_LIMIT},get DEFAULT_THROTTLE_TTL(){return DEFAULT_THROTTLE_TTL},get ENABLE_CLOUDWATCH_LOGS(){return ENABLE_CLOUDWATCH_LOGS},get ENCRYPTION_KEY(){return ENCRYPTION_KEY},get JWT_PRIVATE_KEY(){return JWT_PRIVATE_KEY},get JWT_PUBLIC_KEY(){return JWT_PUBLIC_KEY},get KAFKA_BROKERS(){return KAFKA_BROKERS},get KAFKA_CLIENT_ID(){return KAFKA_CLIENT_ID},get LANDING_PAGE_URL(){return LANDING_PAGE_URL},get MAIL_EMAIL_SUPPORT(){return MAIL_EMAIL_SUPPORT},get MAIL_ENCRYPTION(){return MAIL_ENCRYPTION},get MAIL_FROM_EMAIL(){return MAIL_FROM_EMAIL},get MAIL_FROM_NAME(){return MAIL_FROM_NAME},get MAIL_HOST(){return MAIL_HOST},get MAIL_MAILER(){return MAIL_MAILER},get MAIL_PASSWORD(){return MAIL_PASSWORD},get MAIL_PORT(){return MAIL_PORT},get MAIL_TO_CC(){return MAIL_TO_CC},get MAIL_USERNAME(){return MAIL_USERNAME},get MESSAGE_BROKER_DRIVER(){return MESSAGE_BROKER_DRIVER},get MINIO_ACCESS_KEY(){return MINIO_ACCESS_KEY},get MINIO_HOST(){return MINIO_HOST},get MINIO_PORT(){return MINIO_PORT},get MINIO_SECRET_KEY(){return MINIO_SECRET_KEY},get MINIO_USE_SSL(){return MINIO_USE_SSL},get NODE_ENV(){return NODE_ENV},get ONESIGNAL_APP_ID(){return ONESIGNAL_APP_ID},get ONESIGNAL_REST_API_KEY(){return ONESIGNAL_REST_API_KEY},get PASSWORD_HASH_SECRET(){return PASSWORD_HASH_SECRET},get RABBITMQ_HOST(){return RABBITMQ_HOST},get REDIS_DB(){return REDIS_DB},get REDIS_HOST(){return REDIS_HOST},get REDIS_PASSWORD(){return REDIS_PASSWORD},get REDIS_PORT(){return REDIS_PORT},get REDIS_READ_DB(){return REDIS_READ_DB},get REDIS_READ_HOST(){return REDIS_READ_HOST},get REDIS_READ_PASSWORD(){return REDIS_READ_PASSWORD},get REDIS_READ_PORT(){return REDIS_READ_PORT},get REDIS_READ_TLS(){return REDIS_READ_TLS},get REDIS_READ_USER(){return REDIS_READ_USER},get REDIS_TLS(){return REDIS_TLS},get REDIS_USER(){return REDIS_USER},get S3_ACCESS_KEY_ID(){return S3_ACCESS_KEY_ID},get S3_BUCKET(){return S3_BUCKET},get S3_REGION(){return S3_REGION},get S3_SECRET_ACCESS_KEY(){return S3_SECRET_ACCESS_KEY},get SESSION_EXPIRATION(){return SESSION_EXPIRATION},get SESSION_KEY(){return SESSION_KEY},get SLACK_ERROR_WEBHOOK_URL(){return SLACK_ERROR_WEBHOOK_URL},get STORAGE_DRIVER(){return STORAGE_DRIVER}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});(0,require("dotenv").config)({quiet:!0});let NODE_ENV=process.env.NODE_ENV??"development",APP_NAME=process.env.APP_NAME??"MyApp",APP_PORT=Number(process.env.APP_PORT)??3e3,APP_KEY=process.env.APP_KEY??"",SESSION_KEY=process.env.SESSION_KEY??"APP_SESSION",SESSION_EXPIRATION=Number(process.env.SESSION_EXPIRATION)??86400,ALLOWED_ORIGINS=(process.env.ALLOWED_ORIGINS??"http://localhost:3000").split(","),DEFAULT_THROTTLE_TTL=Number(process.env.DEFAULT_THROTTLE_TTL)??60,DEFAULT_THROTTLE_LIMIT=Number(process.env.DEFAULT_THROTTLE_LIMIT)??60,PASSWORD_HASH_SECRET=process.env.PASSWORD_HASH_SECRET??"default_secret",ENCRYPTION_KEY=process.env.ENCRYPTION_KEY,JWT_PUBLIC_KEY=process.env.JWT_PUBLIC_KEY??"",JWT_PRIVATE_KEY=process.env.JWT_PRIVATE_KEY??"",DB_DIALECT="postgres",DB_HOST=process.env.DB_HOST??"localhost",DB_PORT=Number(process.env.DB_PORT)??5432,DB_USER=process.env.DB_USER??"postgres",DB_PASSWORD=process.env.DB_PASSWORD??"password",DB_NAME=process.env.DB_NAME??"postgres",DB_REPLICA_HOST=process.env.DB_REPLICA_HOST??"localhost",DB_REPLICA_PORT=Number(process.env.DB_REPLICA_PORT)??5432,DB_SSL=(process.env.DB_SSL??"false")?.toLowerCase()==="true",DB_MAX_POOL_SIZE=Number(process.env.DB_MAX_POOL_SIZE??10),DB_POOL_MIN=Number(process.env.DB_POOL_MIN??0),DB_POOL_ACQUIRE=Number(process.env.DB_POOL_ACQUIRE??3e4),DB_POOL_IDLE=Number(process.env.DB_POOL_IDLE??1e4),DB_ENTITIES_PATH="./dist/**/**/*.entity.*",REDIS_HOST=process.env.REDIS_HOST??"localhost",REDIS_PORT=Number(process.env.REDIS_PORT)??6379,REDIS_DB=Number(process.env.REDIS_DB)??0,REDIS_USER=process.env.REDIS_USER,REDIS_PASSWORD=process.env.REDIS_PASSWORD,REDIS_TLS=(process.env.REDIS_TLS??"false")?.toLowerCase()==="true",REDIS_READ_HOST=process.env.REDIS_READ_HOST??"localhost",REDIS_READ_PORT=Number(process.env.REDIS_READ_PORT)??6379,REDIS_READ_DB=Number(process.env.REDIS_READ_DB)??0,REDIS_READ_USER=process.env.REDIS_READ_USER,REDIS_READ_PASSWORD=process.env.REDIS_READ_PASSWORD,REDIS_READ_TLS=(process.env.REDIS_READ_TLS??"false")?.toLowerCase()==="true",MAIL_MAILER=process.env.MAIL_MAILER??"smtp",MAIL_HOST=process.env.MAIL_HOST??"127.0.0.1",MAIL_PORT=+(process.env.MAIL_PORT??1025),MAIL_USERNAME=process.env.MAIL_USERNAME??"",MAIL_PASSWORD=process.env.MAIL_PASSWORD??"",MAIL_ENCRYPTION=process.env.MAIL_ENCRYPTION??"false",MAIL_FROM_NAME=process.env.MAIL_FROM_NAME??"Support Team",MAIL_FROM_EMAIL=process.env.MAIL_FROM_EMAIL??"no-reply@app.com",MAIL_TO_CC=process.env.MAIL_TO_CC??"",MAIL_EMAIL_SUPPORT=process.env.MAIL_EMAIL_SUPPORT??"support@app.com",SLACK_ERROR_WEBHOOK_URL=process.env.SLACK_ERROR_WEBHOOK_URL??"",LANDING_PAGE_URL=process.env.LANDING_PAGE_URL??"http://localhost:8000",APP_LOGO_URL=process.env.APP_LOGO_URL??"",ONESIGNAL_APP_ID=process.env.ONESIGNAL_APP_ID??"",ONESIGNAL_REST_API_KEY=process.env.ONESIGNAL_REST_API_KEY??"",STORAGE_DRIVER=process.env.STORAGE_DRIVER??"local",S3_BUCKET=process.env.S3_BUCKET??"",S3_REGION=process.env.S3_REGION??"us-east-1",S3_ACCESS_KEY_ID=process.env.S3_ACCESS_KEY_ID??"",S3_SECRET_ACCESS_KEY=process.env.S3_SECRET_ACCESS_KEY??"",MINIO_HOST=process.env.MINIO_HOST??"localhost",MINIO_PORT=Number(process.env.MINIO_PORT)??9e3,MINIO_USE_SSL=(process.env.MINIO_USE_SSL??"false")?.toLowerCase()==="true",MINIO_ACCESS_KEY=process.env.MINIO_ACCESS_KEY??"",MINIO_SECRET_KEY=process.env.MINIO_SECRET_KEY??"",MESSAGE_BROKER_DRIVER=process.env.MESSAGE_BROKER_DRIVER??"rabbitmq",RABBITMQ_HOST=process.env.RABBITMQ_HOST??"amqp://localhost",KAFKA_BROKERS=(process.env.KAFKA_BROKERS??"localhost:9092").split(","),KAFKA_CLIENT_ID=process.env.KAFKA_CLIENT_ID??"my-app",CLOUDWATCH_LOG_GROUP=process.env.CLOUDWATCH_LOG_GROUP,CLOUDWATCH_LOG_STREAM=process.env.CLOUDWATCH_LOG_STREAM,CLOUDWATCH_REGION=process.env.CLOUDWATCH_REGION,CLOUDWATCH_ACCESS_KEY_ID=process.env.CLOUDWATCH_ACCESS_KEY_ID,CLOUDWATCH_SECRET_ACCESS_KEY=process.env.CLOUDWATCH_SECRET_ACCESS_KEY,ENABLE_CLOUDWATCH_LOGS=CLOUDWATCH_LOG_GROUP&&CLOUDWATCH_LOG_STREAM&&CLOUDWATCH_REGION&&CLOUDWATCH_ACCESS_KEY_ID&&CLOUDWATCH_SECRET_ACCESS_KEY,AWS_SECRETS_MANAGER_REGION=process.env.AWS_SECRETS_MANAGER_REGION??"us-east-1",AWS_SECRETS_MANAGER_ACCESS_KEY_ID=process.env.AWS_SECRETS_MANAGER_ACCESS_KEY_ID??"",AWS_SECRETS_MANAGER_SECRET_ACCESS_KEY=process.env.AWS_SECRETS_MANAGER_SECRET_ACCESS_KEY??"",AWS_SECRETS_MANAGER_SECRET_NAME=process.env.AWS_SECRETS_MANAGER_SECRET_NAME??"",AWS_SECRETS_MANAGER_VERSION_STAGE=process.env.AWS_SECRETS_MANAGER_VERSION_STAGE??"AWSCURRENT";
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"AppController",{enumerable:!0,get:function(){return AppController}});let _common=require("@nestjs/common"),_core=require("@nestjs/core"),_helpers=require("@triproject/helpers"),_express=require("express"),_cache=require("../drivers/cache"),_swaggerhelper=require("../helpers/swagger.helper");function _ts_decorate(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let AppController=class AppController{req;appCache;_cacheKey(){let keys=[this.constructor.name,this.req.path,this.req.method];return this.req.query&&Object.keys(this.req.query).length&&keys.push((0,_helpers.qs)(this.req.query)),this.req.body&&Object.keys(this.req.body).length&&keys.push((0,_helpers.qs)(this.req.body)),keys}async cache(callback,ttl=60){return await this.appCache.cache(this._cacheKey(),callback,ttl)}async cacheWithTimestamp(callback,ttl=60){return await this.appCache.cacheWithTimeStamp(this._cacheKey(),callback,ttl)}async clearCache(){await this.appCache.delAll(this.constructor.name)}};_ts_decorate([(0,_common.Inject)(_core.REQUEST),_ts_metadata("design:type",void 0===_express.Request?Object:_express.Request)],AppController.prototype,"req",void 0),_ts_decorate([(0,_common.Inject)(_cache.AppCache),_ts_metadata("design:type",void 0===_cache.AppCache?Object:_cache.AppCache)],AppController.prototype,"appCache",void 0),AppController=_ts_decorate([_swaggerhelper.SwaggerApiInternalServerErrorResponse,_swaggerhelper.SwaggerApiBadSwaGatewayResponse,_swaggerhelper.SwaggerApiConflictResponse,_swaggerhelper.SwaggerApiForbiddenResponse,_swaggerhelper.SwaggerApiUnauthorizedResponse],AppController);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"AppController",{enumerable:!0,get:function(){return AppController}});let _common=require("@nestjs/common"),_core=require("@nestjs/core"),_helpers=require("@triproject/helpers"),_cache=require("../drivers/cache"),_swaggerhelper=require("../helpers/swagger.helper");function _ts_decorate(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let AppController=class AppController{req;appCache;_cacheKey(){let keys=[this.constructor.name,this.req.path,this.req.method];return this.req.query&&Object.keys(this.req.query).length&&keys.push((0,_helpers.qs)(this.req.query)),this.req.body&&Object.keys(this.req.body).length&&keys.push((0,_helpers.qs)(this.req.body)),keys}async cache(callback,ttl=60){return await this.appCache.cache(this._cacheKey(),callback,ttl)}async cacheWithTimestamp(callback,ttl=60){return await this.appCache.cacheWithTimeStamp(this._cacheKey(),callback,ttl)}async clearCache(){await this.appCache.delAll(this.constructor.name)}};_ts_decorate([(0,_common.Inject)(_core.REQUEST),_ts_metadata("design:type","u"<typeof Request?Object:Request)],AppController.prototype,"req",void 0),_ts_decorate([(0,_common.Inject)(_cache.AppCache),_ts_metadata("design:type",void 0===_cache.AppCache?Object:_cache.AppCache)],AppController.prototype,"appCache",void 0),AppController=_ts_decorate([_swaggerhelper.SwaggerApiInternalServerErrorResponse,_swaggerhelper.SwaggerApiBadSwaGatewayResponse,_swaggerhelper.SwaggerApiConflictResponse,_swaggerhelper.SwaggerApiForbiddenResponse,_swaggerhelper.SwaggerApiUnauthorizedResponse],AppController);
@@ -6,6 +6,7 @@ export interface CacheWithTimestamp<T> {
6
6
  }
7
7
  export declare class AppCache {
8
8
  private connection;
9
+ private readConnection;
9
10
  private PREFIX;
10
11
  constructor(redis: Redis);
11
12
  private _parseKey;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"AppCache",{enumerable:!0,get:function(){return AppCache}});let _common=require("@nestjs/common"),_helpers=require("@triproject/helpers"),_config=require("../../config"),_redis=require("./redis");function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let AppCache=class AppCache{connection;PREFIX=_config.APP_KEY;constructor(redis){this.connection=redis.getConnection()}_parseKey(key){if(!key)throw new _common.UnprocessableEntityException("Cache key cannot be null or undefined");let keys=[this.PREFIX];return Array.isArray(key)?keys.push(...key):keys.push(key?.toString()),keys.flat().flat().filter(d=>d).map(d=>d?.toString()?.toUpperCase()).join("::").replaceAll(/[^a-zA-Z0-9\-:]/g,"-")}async set(key,value,ttl=60){await this.connection.set(this._parseKey(key),JSON.stringify({data:value}),{expiration:{type:"EX",value:1e3*ttl}})}async get(key){try{let data=await this.connection.get(this._parseKey(key));if(!data)return;let parsedData=JSON.parse(data?.toString());return parsedData?.data}catch(error){return}}async del(key){await this.connection.del(this._parseKey(key))}async delAll(key){for(let k of(await this.connection.keys(`${this._parseKey(key)}*`)))await this.connection.del(k)}async cache(key,fn,ttl=60){let data=await this.get(key);if(data)return data;let result=await fn();return await this.set(key,result,ttl),result}async cacheWithTimeStamp(key,value,ttl){try{let data=await this.get(key);if(data)return data;return data={data:"function"==typeof data?await value():value,timestamp:(0,_helpers.dateUtil)().utc().toString()},this.set(key,data,ttl),data}catch(error){throw error}}};AppCache=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)(),_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[void 0===_redis.Redis?Object:_redis.Redis])],AppCache);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"AppCache",{enumerable:!0,get:function(){return AppCache}});let _common=require("@nestjs/common"),_helpers=require("@triproject/helpers"),_config=require("../../config"),_redis=require("./redis");function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let AppCache=class AppCache{connection;readConnection;PREFIX=_config.APP_KEY??"APP_CACHE";constructor(redis){this.connection=redis.getConnection(),this.readConnection=redis.getReadConnection()}_parseKey(key){if(!key)throw new _common.UnprocessableEntityException("Cache key cannot be null or undefined");let keys=[this.PREFIX];return Array.isArray(key)?keys.push(...key):keys.push(key?.toString()),keys.flat().flat().filter(d=>d).map(d=>d?.toString()?.toUpperCase()).join("::").replaceAll(/[^a-zA-Z0-9\-:]/g,"-")}async set(key,value,ttl=60){await this.connection.set(this._parseKey(key),JSON.stringify({data:value}),"EX",ttl)}async get(key){try{let data=await this.readConnection.get(this._parseKey(key));if(!data)return;let parsedData=JSON.parse(data?.toString());return parsedData?.data}catch(error){return}}async del(key){await this.connection.del(this._parseKey(key))}async delAll(key){for(let k of(await this.connection.keys(`${this._parseKey(key)}*`)))await this.connection.del(k)}async cache(key,fn,ttl=60){let data=await this.get(key);if(data)return data;let result=await fn();return await this.set(key,result,ttl),result}async cacheWithTimeStamp(key,value,ttl){try{let data=await this.get(key);if(data)return data;return data={data:"function"==typeof data?await value():value,timestamp:(0,_helpers.dateUtil)().utc().toString()},this.set(key,data,ttl),data}catch(error){throw error}}};AppCache=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)(),_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[void 0===_redis.Redis?Object:_redis.Redis])],AppCache);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"CacheModule",{enumerable:!0,get:function(){return CacheModule}});let _common=require("@nestjs/common"),_cache=require("./cache"),_redis=require("./redis");let CacheModule=class CacheModule{};CacheModule=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Global)(),(0,_common.Module)({providers:[_redis.Redis,_cache.AppCache],exports:[_cache.AppCache]})],CacheModule);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"CacheModule",{enumerable:!0,get:function(){return CacheModule}});let _common=require("@nestjs/common"),_cache=require("./cache"),_redis=require("./redis");let CacheModule=class CacheModule{};CacheModule=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Global)(),(0,_common.Module)({providers:[_redis.Redis,_cache.AppCache],exports:[_cache.AppCache,_redis.Redis]})],CacheModule);
@@ -1,3 +1,3 @@
1
1
  export * from './cache';
2
- export * from './cache.driver';
2
+ export * from './cache.module';
3
3
  export * from './redis';
@@ -1 +1 @@
1
- "use strict";function _export_star(from,to){return Object.keys(from).forEach(function(k){"default"===k||Object.prototype.hasOwnProperty.call(to,k)||Object.defineProperty(to,k,{enumerable:!0,get:function(){return from[k]}})}),from}Object.defineProperty(exports,"__esModule",{value:!0}),_export_star(require("./cache"),exports),_export_star(require("./cache.driver"),exports),_export_star(require("./redis"),exports);
1
+ "use strict";function _export_star(from,to){return Object.keys(from).forEach(function(k){"default"===k||Object.prototype.hasOwnProperty.call(to,k)||Object.defineProperty(to,k,{enumerable:!0,get:function(){return from[k]}})}),from}Object.defineProperty(exports,"__esModule",{value:!0}),_export_star(require("./cache"),exports),_export_star(require("./cache.module"),exports),_export_star(require("./redis"),exports);
@@ -1,10 +1,25 @@
1
1
  import { OnModuleInit } from '@nestjs/common';
2
- import { RedisClientType } from 'redis';
2
+ import Client from 'ioredis';
3
+ export interface RedisOptions {
4
+ host: string;
5
+ port: number;
6
+ username?: string;
7
+ password?: string;
8
+ db: number;
9
+ tls: boolean;
10
+ }
3
11
  export declare class Redis implements OnModuleInit {
4
12
  private logger;
5
13
  private connection;
6
- constructor();
7
- private _connect;
8
- getConnection(): RedisClientType;
14
+ private readConnection;
15
+ constructor(params?: {
16
+ write?: RedisOptions;
17
+ read?: RedisOptions;
18
+ });
19
+ private _init;
20
+ private _createConnection;
21
+ connect(): Promise<void>;
22
+ getConnection(): Client;
23
+ getReadConnection(): Client;
9
24
  onModuleInit(): Promise<void>;
10
25
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Redis",{enumerable:!0,get:function(){return Redis}});let _common=require("@nestjs/common"),_redis=require("redis"),_config=require("../../config"),_applogger=require("../logger/app.logger");function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let Redis=class Redis{logger=new _applogger.AppLogger(Redis.name);connection;constructor(){this.connection=(0,_redis.createClient)({database:_config.REDIS_DB,password:_config.REDIS_PASSWORD,socket:{host:_config.REDIS_HOST,port:_config.REDIS_PORT,tls:_config.REDIS_TLS}})}async _connect(){await this.connection.connect().then(()=>this.logger.log("Redis connected successfully")).catch(err=>this.logger.error("Unable to connect to Redis",err)),this.connection.on("connect",()=>this.logger.log("Redis connected successfully")),this.connection.on("error",err=>this.logger.error("Redis connection error",err)),this.connection.on("reconnecting",()=>this.logger.log("Reconnecting to Redis"))}getConnection(){return this.connection}async onModuleInit(){await this._connect()}};Redis=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)(),_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[])],Redis);
1
+ "use strict";var obj;Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Redis",{enumerable:!0,get:function(){return Redis}});let _common=require("@nestjs/common"),_ioredis=(obj=require("ioredis"))&&obj.__esModule?obj:{default:obj},_applogger=require("../logger/app.logger"),_secretmanager=require("../secret-manager");function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let Redis=class Redis{logger=new _applogger.AppLogger(Redis.name);connection;readConnection;constructor(params={}){this._init(params)}async _init(params={}){let env=await (0,_secretmanager.getSecret)();params.write?this.connection=this._createConnection({host:params.write.host,port:params.write.port,username:params.write.username,password:params.write.password,db:params.write.db,tls:params.write.tls}):this.connection=this._createConnection({host:env.REDIS_HOST,port:env.REDIS_PORT,username:env.REDIS_USER,password:env.REDIS_PASSWORD,db:env.REDIS_DB,tls:env.REDIS_TLS}),params.read&&params.read.host!==params.write?.host?this.readConnection=this._createConnection({host:params.read.host,port:params.read.port,username:params.read.username,password:params.read.password,db:params.read.db,tls:params.read.tls}):env.REDIS_READ_HOST!==env.REDIS_HOST&&(this.readConnection=this._createConnection({host:env.REDIS_READ_HOST,port:env.REDIS_READ_PORT,username:env.REDIS_READ_USER,password:env.REDIS_READ_PASSWORD,db:env.REDIS_READ_DB,tls:env.REDIS_READ_TLS}))}_createConnection(options){return new _ioredis.default({host:options.host,port:options.port,username:options.username,password:options.password,db:options.db,tls:options.tls?{rejectUnauthorized:!0}:void 0})}async connect(){this.connection.on("connect",()=>this.logger.log("Redis connected successfully")),this.connection.on("error",err=>this.logger.error("Redis connection error",err)),this.connection.on("reconnecting",()=>this.logger.log("Reconnecting to Redis")),this.readConnection&&(await this.readConnection.connect().then(()=>this.logger.log("Redis read connection connected successfully")).catch(err=>this.logger.error("Unable to connect to Redis read connection",err)),this.readConnection.on("connect",()=>this.logger.log("Redis read connection connected successfully")),this.readConnection.on("error",err=>this.logger.error("Redis read connection error",err)),this.readConnection.on("reconnecting",()=>this.logger.log("Reconnecting to Redis read connection")))}getConnection(){return this.connection}getReadConnection(){return this.readConnection??this.connection}async onModuleInit(){await this.connect()}};Redis=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)(),_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[Object])],Redis);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get BooleanCol(){return BooleanCol},get CreatedAtCol(){return CreatedAtCol},get Entity(){return Entity},get EnumCol(){return EnumCol},get ForeignUuidCol(){return ForeignUuidCol},get NameCol(){return NameCol},get NumberCol(){return NumberCol},get PaginateRequest(){return PaginateRequest},get PaginateResponse(){return PaginateResponse},get PrimaryCodeCol(){return PrimaryCodeCol},get PrimaryNumberCol(){return PrimaryNumberCol},get PrimaryUuidCol(){return PrimaryUuidCol},get RelationEntity(){return RelationEntity},get SchedulerCol(){return SchedulerCol},get UpdatedAtCol(){return UpdatedAtCol}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});let _swagger=require("@nestjs/swagger"),_helpers=require("@triproject/helpers"),_classvalidator=require("class-validator"),_sequelizetypescript=require("sequelize-typescript");function _ts_decorate(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let PaginateResponse=class PaginateResponse{data;timestamp;meta};_ts_decorate([(0,_swagger.ApiProperty)({example:"2025-06-01T12:00:00Z",description:"Timestamp of the response"}),_ts_metadata("design:type",String)],PaginateResponse.prototype,"timestamp",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:{total:100,totalPage:10,perPage:10,prevPage:null,page:1,nextPage:2}}),_ts_metadata("design:type",Object)],PaginateResponse.prototype,"meta",void 0);let PaginateRequest=class PaginateRequest{perPage;page;q;orderBy;sort;searchKey;order;include;where;orWhere;andWhere;attributes;groupBy};function PrimaryUuidCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.UUID,allowNull:!1,primaryKey:!0,defaultValue:()=>(0,_helpers.generateId)()})}function PrimaryCodeCol(){return(0,_sequelizetypescript.Column)({allowNull:!1,primaryKey:!0,type:_sequelizetypescript.DataType.STRING(100),defaultValue:()=>(0,_helpers.generateCode)()})}function PrimaryNumberCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.BIGINT,allowNull:!1,primaryKey:!0,autoIncrement:!0,get(){return+this.getDataValue("id")}})}function CreatedAtCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.DATE,defaultValue:()=>(0,_helpers.dateUtil)().utc().getTime()})}function UpdatedAtCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.DATE,defaultValue:()=>(0,_helpers.dateUtil)().utc().getTime(),onUpdate:"UPDATE CURRENT_TIMESTAMP"})}function ForeignUuidCol(params){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.UUID,allowNull:params?.allowNull??!1})}function NumberCol(precision=5,scale=2,options={}){let type=_sequelizetypescript.DataType.DECIMAL(precision,scale);return 0===scale&&(type=_sequelizetypescript.DataType.INTEGER,precision<=5&&(type=_sequelizetypescript.DataType.MEDIUMINT)),(0,_sequelizetypescript.Column)({...options,type,defaultValue:0})}function BooleanCol(defaultValue=!0){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.BOOLEAN,defaultValue})}function NameCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.STRING(100),allowNull:!1})}function EnumCol(data){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.ENUM(...data.enum),allowNull:!1})}function SchedulerCol(){return(_target,_propertyKey)=>{(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.STRING(512),get(){try{let rawValue=this.getDataValue(_propertyKey)??"[]";return JSON.parse(rawValue).map(([start,end])=>({start:(0,_helpers.dateUtil)(start),end:(0,_helpers.dateUtil)(end)}))}catch(error){return[]}},set(value){this.setDataValue(_propertyKey,JSON.stringify(value.map(({start,end})=>[(0,_helpers.dateUtil)(start).toISOString(),(0,_helpers.dateUtil)(end).toISOString()])))}})}}_ts_decorate([(0,_swagger.ApiProperty)({example:10,description:"Number of items per page"}),(0,_classvalidator.IsOptional)(),(0,_classvalidator.IsNumber)(),_ts_metadata("design:type",Number)],PaginateRequest.prototype,"perPage",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:1,description:"Current page number"}),(0,_classvalidator.IsOptional)(),(0,_classvalidator.IsNumber)(),_ts_metadata("design:type",Number)],PaginateRequest.prototype,"page",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:"search query",description:"Search query"}),(0,_classvalidator.IsOptional)(),(0,_classvalidator.IsString)(),_ts_metadata("design:type",String)],PaginateRequest.prototype,"q",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:"createdAt",description:"Order by field"}),(0,_classvalidator.IsString)(),(0,_classvalidator.IsOptional)(),_ts_metadata("design:type","u"<typeof KeyOfModel?Object:KeyOfModel)],PaginateRequest.prototype,"orderBy",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:"ASC",enum:["ASC","DESC"],description:"Sort order"}),(0,_classvalidator.IsEnum)(["ASC","DESC"]),_ts_metadata("design:type","u"<typeof OrderDataType?Object:OrderDataType)],PaginateRequest.prototype,"sort",void 0);let Entity=class Entity extends _sequelizetypescript.Model{};_ts_decorate([PrimaryUuidCol(),_ts_metadata("design:type",String)],Entity.prototype,"id",void 0),_ts_decorate([CreatedAtCol(),_ts_metadata("design:type","u"<typeof Date?Object:Date)],Entity.prototype,"createdAt",void 0),_ts_decorate([UpdatedAtCol(),_ts_metadata("design:type","u"<typeof Date?Object:Date)],Entity.prototype,"updatedAt",void 0),Entity=_ts_decorate([(0,_sequelizetypescript.Table)({underscored:!1,timestamps:!0})],Entity);let RelationEntity=class RelationEntity extends _sequelizetypescript.Model{};_ts_decorate([PrimaryNumberCol(),_ts_metadata("design:type",Number)],RelationEntity.prototype,"id",void 0),RelationEntity=_ts_decorate([(0,_sequelizetypescript.Table)({underscored:!1,timestamps:!1})],RelationEntity);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get BooleanCol(){return BooleanCol},get CreatedAtCol(){return CreatedAtCol},get Entity(){return Entity},get EnumCol(){return EnumCol},get ForeignUuidCol(){return ForeignUuidCol},get NameCol(){return NameCol},get NumberCol(){return NumberCol},get PaginateRequest(){return PaginateRequest},get PaginateResponse(){return PaginateResponse},get PrimaryCodeCol(){return PrimaryCodeCol},get PrimaryNumberCol(){return PrimaryNumberCol},get PrimaryUuidCol(){return PrimaryUuidCol},get RelationEntity(){return RelationEntity},get SchedulerCol(){return SchedulerCol},get UpdatedAtCol(){return UpdatedAtCol}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});let _swagger=require("@nestjs/swagger"),_helpers=require("@triproject/helpers"),_classvalidator=require("class-validator"),_sequelizetypescript=require("sequelize-typescript");function _ts_decorate(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let PaginateResponse=class PaginateResponse{data;timestamp;meta};_ts_decorate([(0,_swagger.ApiProperty)({example:"2025-06-01T12:00:00Z",description:"Timestamp of the response"}),_ts_metadata("design:type",String)],PaginateResponse.prototype,"timestamp",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:{total:100,totalPage:10,perPage:10,prevPage:null,page:1,nextPage:2}}),_ts_metadata("design:type",Object)],PaginateResponse.prototype,"meta",void 0);let PaginateRequest=class PaginateRequest{perPage;page;q;orderBy;sort;searchKey;order;include;where;orWhere;andWhere;attributes;groupBy};function PrimaryUuidCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.UUID,allowNull:!1,primaryKey:!0,defaultValue:()=>(0,_helpers.generateId)()})}function PrimaryCodeCol(){return(0,_sequelizetypescript.Column)({allowNull:!1,primaryKey:!0,type:_sequelizetypescript.DataType.STRING(100),defaultValue:()=>(0,_helpers.generateCode)()})}function PrimaryNumberCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.BIGINT,allowNull:!1,primaryKey:!0,autoIncrement:!0,get(){return+this.getDataValue("id")}})}function CreatedAtCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.DATE,defaultValue:()=>(0,_helpers.dateUtil)().utc().getTime()})}function UpdatedAtCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.DATE,defaultValue:()=>(0,_helpers.dateUtil)().utc().getTime(),onUpdate:"UPDATE CURRENT_TIMESTAMP"})}function ForeignUuidCol(params){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.UUID,allowNull:params?.allowNull??!1})}function NumberCol(precision=5,scale=0,options={}){return options.type=_sequelizetypescript.DataType.INTEGER,precision<=5&&(options.type=_sequelizetypescript.DataType.MEDIUMINT),precision<=3&&(options.type=_sequelizetypescript.DataType.SMALLINT),precision<=2&&(options.type=_sequelizetypescript.DataType.TINYINT),precision>10&&(options.type=_sequelizetypescript.DataType.BIGINT),scale>0&&(options.type=_sequelizetypescript.DataType.DECIMAL(precision,scale),options.get=function(){let value=this.getDataValue(options.field??"");return null!=value?+value:value}),(0,_sequelizetypescript.Column)({...options,defaultValue:0})}function BooleanCol(defaultValue=!0){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.BOOLEAN,defaultValue})}function NameCol(){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.STRING(100),allowNull:!1})}function EnumCol(data){return(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.ENUM(...data.enum),allowNull:!1})}function SchedulerCol(){return(_target,_propertyKey)=>{(0,_sequelizetypescript.Column)({type:_sequelizetypescript.DataType.STRING(512),get(){try{let rawValue=this.getDataValue(_propertyKey)??"[]";return JSON.parse(rawValue).map(([start,end])=>({start:(0,_helpers.dateUtil)(start),end:(0,_helpers.dateUtil)(end)}))}catch(error){return[]}},set(value){this.setDataValue(_propertyKey,JSON.stringify(value.map(({start,end})=>[(0,_helpers.dateUtil)(start).toISOString(),(0,_helpers.dateUtil)(end).toISOString()])))}})}}_ts_decorate([(0,_swagger.ApiProperty)({example:10,description:"Number of items per page"}),(0,_classvalidator.IsOptional)(),(0,_classvalidator.IsNumber)(),_ts_metadata("design:type",Number)],PaginateRequest.prototype,"perPage",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:1,description:"Current page number"}),(0,_classvalidator.IsOptional)(),(0,_classvalidator.IsNumber)(),_ts_metadata("design:type",Number)],PaginateRequest.prototype,"page",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:"search query",description:"Search query"}),(0,_classvalidator.IsOptional)(),(0,_classvalidator.IsString)(),_ts_metadata("design:type",String)],PaginateRequest.prototype,"q",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:"createdAt",description:"Order by field"}),(0,_classvalidator.IsString)(),(0,_classvalidator.IsOptional)(),_ts_metadata("design:type","u"<typeof KeyOfModel?Object:KeyOfModel)],PaginateRequest.prototype,"orderBy",void 0),_ts_decorate([(0,_swagger.ApiProperty)({example:"ASC",enum:["ASC","DESC"],description:"Sort order"}),(0,_classvalidator.IsEnum)(["ASC","DESC"]),_ts_metadata("design:type","u"<typeof OrderDataType?Object:OrderDataType)],PaginateRequest.prototype,"sort",void 0);let Entity=class Entity extends _sequelizetypescript.Model{};_ts_decorate([PrimaryUuidCol(),_ts_metadata("design:type",String)],Entity.prototype,"id",void 0),_ts_decorate([CreatedAtCol(),_ts_metadata("design:type","u"<typeof Date?Object:Date)],Entity.prototype,"createdAt",void 0),_ts_decorate([UpdatedAtCol(),_ts_metadata("design:type","u"<typeof Date?Object:Date)],Entity.prototype,"updatedAt",void 0),Entity=_ts_decorate([(0,_sequelizetypescript.Table)({underscored:!1,timestamps:!0})],Entity);let RelationEntity=class RelationEntity extends _sequelizetypescript.Model{};_ts_decorate([PrimaryNumberCol(),_ts_metadata("design:type",Number)],RelationEntity.prototype,"id",void 0),RelationEntity=_ts_decorate([(0,_sequelizetypescript.Table)({underscored:!1,timestamps:!1})],RelationEntity);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"DBModule",{enumerable:!0,get:function(){return DBModule}});let _common=require("@nestjs/common"),_sequelize=require("@nestjs/sequelize"),_path=require("path"),_config=require("../../config"),_dbservice=require("./db.service");let DBModule=class DBModule{};DBModule=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Global)(),(0,_common.Module)({imports:[_sequelize.SequelizeModule.forRootAsync({useFactory:async()=>({host:_config.DB_HOST,port:_config.DB_PORT,username:_config.DB_USER,password:_config.DB_PASSWORD,database:_config.DB_NAME,dialect:_config.DB_DIALECT,pool:{min:2,max:_config.DB_MAX_POOL_SIZE},models:[(0,_path.resolve)(_config.DB_ENTITIES_PATH)],define:{charset:"utf8",underscored:!1},synchronize:!1,logging:!1,dialectOptions:_config.DB_SSL?{ssl:{require:!0,rejectUnauthorized:!1}}:{}})})],providers:[_sequelize.SequelizeModule,_dbservice.DbService],exports:[_sequelize.SequelizeModule,_dbservice.DbService]})],DBModule);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"DBModule",{enumerable:!0,get:function(){return DBModule}});let _common=require("@nestjs/common"),_sequelize=require("@nestjs/sequelize"),_path=require("path"),_secretmanager=require("../secret-manager"),_dbservice=require("./db.service");let DBModule=class DBModule{};DBModule=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Global)(),(0,_common.Module)({imports:[_sequelize.SequelizeModule.forRootAsync({useFactory:async()=>{let{DB_DIALECT,DB_ENTITIES_PATH,DB_HOST,DB_MAX_POOL_SIZE,DB_NAME,DB_PASSWORD,DB_PORT,DB_SSL,DB_USER}=await (0,_secretmanager.getSecret)();return{host:DB_HOST,port:DB_PORT,username:DB_USER,password:DB_PASSWORD,database:DB_NAME,dialect:DB_DIALECT,pool:{min:2,max:DB_MAX_POOL_SIZE},models:[(0,_path.resolve)(DB_ENTITIES_PATH)],define:{charset:"utf8",underscored:!1},synchronize:!1,logging:!1,dialectOptions:DB_SSL?{ssl:{require:!0,rejectUnauthorized:!1}}:{}}}})],providers:[_sequelize.SequelizeModule,_dbservice.DbService],exports:[_sequelize.SequelizeModule,_dbservice.DbService]})],DBModule);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"DbService",{enumerable:!0,get:function(){return DbService}});let _common=require("@nestjs/common"),_sequelizetypescript=require("sequelize-typescript"),_config=require("../../config"),_applogger=require("../../drivers/logger/app.logger");function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let DbService=class DbService{db;logger=new _applogger.AppLogger(DbService.name);constructor(db){this.db=db}async onModuleInit(){await this.authenticate()}async authenticate(){await this.db.authenticate({retry:{max:1}}).then(()=>this.logger.log(`Database connected successfully to ${_config.DB_NAME}:${_config.DB_DIALECT}`)).catch(err=>{throw this.logger.error("Unable to connect to the database:",err),err})}async checkConnection(){return await this.db.authenticate({retry:{max:1}}).then(()=>!0).catch(err=>(this.logger.error("Database connection failed",err),!1))}};DbService=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)(),_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[void 0===_sequelizetypescript.Sequelize?Object:_sequelizetypescript.Sequelize])],DbService);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"DbService",{enumerable:!0,get:function(){return DbService}});let _common=require("@nestjs/common"),_sequelizetypescript=require("sequelize-typescript"),_applogger=require("../../drivers/logger/app.logger"),_secretmanager=require("../secret-manager");function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let DbService=class DbService{db;logger=new _applogger.AppLogger(DbService.name);constructor(db){this.db=db}async onModuleInit(){await this.authenticate()}async authenticate(){let env=await (0,_secretmanager.getSecret)();await this.db.authenticate({retry:{max:1}}).then(()=>this.logger.log(`Database connected successfully to ${env.DB_NAME}:${env.DB_DIALECT}`)).catch(err=>{throw this.logger.error("Unable to connect to the database:",err),err})}async checkConnection(){return await this.db.authenticate({retry:{max:1}}).then(()=>!0).catch(err=>(this.logger.error("Database connection failed",err),!1))}};DbService=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)(),_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[void 0===_sequelizetypescript.Sequelize?Object:_sequelizetypescript.Sequelize])],DbService);
@@ -14,11 +14,11 @@ export declare const defaultCols: () => {
14
14
  };
15
15
  createdAt: {
16
16
  type: import("sequelize").DateDataTypeConstructor;
17
- defaultValue: import("sequelize/types/utils").Fn;
17
+ defaultValue: import("sequelize/lib/utils").Fn;
18
18
  };
19
19
  updatedAt: {
20
20
  type: import("sequelize").DateDataTypeConstructor;
21
- defaultValue: import("sequelize/types/utils").Fn;
21
+ defaultValue: import("sequelize/lib/utils").Fn;
22
22
  };
23
23
  };
24
24
  export declare const relationCols: (...args: string[]) => {
@@ -32,7 +32,7 @@ export declare const addIndexes: (params: Index) => Promise<void>;
32
32
  export declare const deleteIndexes: (params: Index) => Promise<void>;
33
33
  export declare const addUniqueIndexes: (params: Index) => Promise<void>;
34
34
  export declare const deleteUniqueIndexes: (params: Index) => Promise<void>;
35
- export declare const migrationConfig: (migrationTableName: string) => {
35
+ export declare const migrationConfig: (migrationTableName: string) => Promise<{
36
36
  development: {
37
37
  migrationStorageTableName: string;
38
38
  models?: string[] | import("sequelize-typescript").ModelCtor[];
@@ -68,7 +68,7 @@ export declare const migrationConfig: (migrationTableName: string) => {
68
68
  operatorsAliases?: import("sequelize").OperatorsAliases;
69
69
  standardConformingStrings?: boolean;
70
70
  clientMinMessages?: string | boolean;
71
- hooks?: Partial<import("sequelize/types/hooks").SequelizeHooks<import("sequelize").Model, any, any>>;
71
+ hooks?: Partial<import("sequelize/lib/hooks").SequelizeHooks<import("sequelize").Model, any, any>>;
72
72
  minifyAliases?: boolean;
73
73
  logQueryParameters?: boolean;
74
74
  retry?: import("sequelize").RetryOptions;
@@ -112,7 +112,7 @@ export declare const migrationConfig: (migrationTableName: string) => {
112
112
  operatorsAliases?: import("sequelize").OperatorsAliases;
113
113
  standardConformingStrings?: boolean;
114
114
  clientMinMessages?: string | boolean;
115
- hooks?: Partial<import("sequelize/types/hooks").SequelizeHooks<import("sequelize").Model, any, any>>;
115
+ hooks?: Partial<import("sequelize/lib/hooks").SequelizeHooks<import("sequelize").Model, any, any>>;
116
116
  minifyAliases?: boolean;
117
117
  logQueryParameters?: boolean;
118
118
  retry?: import("sequelize").RetryOptions;
@@ -157,7 +157,7 @@ export declare const migrationConfig: (migrationTableName: string) => {
157
157
  operatorsAliases?: import("sequelize").OperatorsAliases;
158
158
  standardConformingStrings?: boolean;
159
159
  clientMinMessages?: string | boolean;
160
- hooks?: Partial<import("sequelize/types/hooks").SequelizeHooks<import("sequelize").Model, any, any>>;
160
+ hooks?: Partial<import("sequelize/lib/hooks").SequelizeHooks<import("sequelize").Model, any, any>>;
161
161
  minifyAliases?: boolean;
162
162
  logQueryParameters?: boolean;
163
163
  retry?: import("sequelize").RetryOptions;
@@ -166,5 +166,5 @@ export declare const migrationConfig: (migrationTableName: string) => {
166
166
  logging?: boolean | ((sql: string, timing?: number) => void);
167
167
  benchmark?: boolean;
168
168
  };
169
- };
169
+ }>;
170
170
  export {};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get addIndexes(){return addIndexes},get addUniqueIndexes(){return addUniqueIndexes},get defaultCols(){return defaultCols},get deleteIndexes(){return deleteIndexes},get deleteUniqueIndexes(){return deleteUniqueIndexes},get migrationConfig(){return migrationConfig},get relationCols(){return relationCols}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});let _helpers=require("@triproject/helpers"),_sequelize=require("sequelize"),_config=require("../../config"),defaultCols=()=>({id:{type:(0,_sequelize.STRING)(36),primaryKey:!0,autoIncrement:!1,defaultValue:()=>(0,_helpers.generateId)()},createdAt:{type:_sequelize.DATE,defaultValue:(0,_sequelize.fn)("now")},updatedAt:{type:_sequelize.DATE,defaultValue:(0,_sequelize.fn)("now")}}),relationCols=(...args)=>({id:{type:_sequelize.BIGINT,primaryKey:!0,autoIncrement:!0},...args.reduce((acc,curr)=>(acc[curr]={type:(0,_sequelize.STRING)(36),allowNull:!1},acc),{})}),index=(tableName,column)=>[tableName,(0,_helpers.md5)(Array.isArray(column)?column.sort().join("_"):column).substring(0,8),"idx"].join("_"),addIndexes=async params=>{let{tableName,columns,options={},queryInterface}=params;for(let col of columns)await queryInterface.addIndex(tableName,[col],{name:index(tableName,col),...options})},deleteIndexes=async params=>{let{tableName,columns,queryInterface}=params;for(let col of columns)await queryInterface.removeIndex(tableName,index(tableName,col))},addUniqueIndexes=async params=>{let{tableName,columns,options={},queryInterface}=params;queryInterface.addIndex(tableName,columns,{unique:!0,name:index(tableName,columns),...options})},deleteUniqueIndexes=async params=>{let{tableName,columns,queryInterface}=params;await queryInterface.removeIndex(tableName,index(tableName,columns))},dialect=_config.DB_DIALECT??"postgres",common={host:_config.DB_HOST??"127.0.0.1",port:+(_config.DB_PORT??5432),username:_config.DB_USER??"postgres",database:_config.DB_NAME??"app_db",password:_config.DB_PASSWORD??"",dialect,logging:!1,pool:{max:_config.DB_MAX_POOL_SIZE??10,min:_config.DB_POOL_MIN??0,acquire:_config.DB_POOL_ACQUIRE??3e4,idle:_config.DB_POOL_IDLE??1e4},dialectOptions:_config.DB_SSL?{ssl:{require:!0,rejectUnauthorized:!0}}:{}},migrationConfig=migrationTableName=>({development:{...common,migrationStorageTableName:migrationTableName},staging:{...common,migrationStorageTableName:migrationTableName},test:{},production:{...common,migrationStorageTableName:migrationTableName}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get addIndexes(){return addIndexes},get addUniqueIndexes(){return addUniqueIndexes},get defaultCols(){return defaultCols},get deleteIndexes(){return deleteIndexes},get deleteUniqueIndexes(){return deleteUniqueIndexes},get migrationConfig(){return migrationConfig},get relationCols(){return relationCols}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});let _helpers=require("@triproject/helpers"),_sequelize=require("sequelize"),_secretmanager=require("../secret-manager"),defaultCols=()=>({id:{type:(0,_sequelize.STRING)(36),primaryKey:!0,autoIncrement:!1,defaultValue:()=>(0,_helpers.generateId)()},createdAt:{type:_sequelize.DATE,defaultValue:(0,_sequelize.fn)("now")},updatedAt:{type:_sequelize.DATE,defaultValue:(0,_sequelize.fn)("now")}}),relationCols=(...args)=>({id:{type:_sequelize.BIGINT,primaryKey:!0,autoIncrement:!0},...args.reduce((acc,curr)=>(acc[curr]={type:(0,_sequelize.STRING)(36),allowNull:!1},acc),{})}),index=(tableName,column)=>[tableName,(0,_helpers.md5)(Array.isArray(column)?column.sort().join("_"):column).substring(0,8),"idx"].join("_"),addIndexes=async params=>{let{tableName,columns,options={},queryInterface}=params;for(let col of columns)await queryInterface.addIndex(tableName,[col],{name:index(tableName,col),...options})},deleteIndexes=async params=>{let{tableName,columns,queryInterface}=params;for(let col of columns)await queryInterface.removeIndex(tableName,index(tableName,col))},addUniqueIndexes=async params=>{let{tableName,columns,options={},queryInterface}=params;queryInterface.addIndex(tableName,columns,{unique:!0,name:index(tableName,columns),...options})},deleteUniqueIndexes=async params=>{let{tableName,columns,queryInterface}=params;await queryInterface.removeIndex(tableName,index(tableName,columns))},migrationConfig=async migrationTableName=>{let env=await (0,_secretmanager.getSecret)(),common={host:env.DB_HOST??"127.0.0.1",port:+(env.DB_PORT??5432),username:env.DB_USER??"postgres",database:env.DB_NAME??"app_db",password:env.DB_PASSWORD??"",dialect:env.DB_DIALECT??"postgres",logging:!1,pool:{max:env.DB_MAX_POOL_SIZE??10,min:env.DB_POOL_MIN??0,acquire:env.DB_POOL_ACQUIRE??3e4,idle:env.DB_POOL_IDLE??1e4},dialectOptions:env.DB_SSL?{ssl:{require:!0,rejectUnauthorized:!0}}:{}};return{development:{...common,migrationStorageTableName:migrationTableName},staging:{...common,migrationStorageTableName:migrationTableName},test:{},production:{...common,migrationStorageTableName:migrationTableName}}};
@@ -2,6 +2,8 @@ export declare class Encryption {
2
2
  private keyEncoding;
3
3
  private encoding;
4
4
  private algorithm;
5
+ private ENCRYPTION_KEY;
6
+ constructor();
5
7
  private _generateEncryptionIV;
6
8
  encrypt(text: string): string;
7
9
  decrypt(encryptedData: string): string;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Encryption",{enumerable:!0,get:function(){return Encryption}});let _common=require("@nestjs/common"),_crypto=require("crypto"),_config=require("../../config"),_exceptionhelper=require("../../helpers/exception.helper");let Encryption=class Encryption{keyEncoding="hex";encoding="hex";algorithm="aes-256-gcm";_generateEncryptionIV(){return(0,_crypto.randomBytes)(16).toString(this.keyEncoding)}encrypt(text){if(!_config.ENCRYPTION_KEY)throw new _exceptionhelper.AppUnprocessableEntityException("ENCRYPTION_KEY is not defined");let iv=this._generateEncryptionIV(),cipher=(0,_crypto.createCipheriv)(this.algorithm,Buffer.from(_config.ENCRYPTION_KEY,this.keyEncoding),Buffer.from(iv,this.keyEncoding)),encrypted=cipher.update(text,"utf8",this.encoding)+cipher.final(this.encoding),data=[iv,cipher.getAuthTag().toString(this.encoding),encrypted].join(";;");return Buffer.from(data).toString("base64")}decrypt(encryptedData){if(!_config.ENCRYPTION_KEY)throw new _exceptionhelper.AppUnprocessableEntityException("ENCRYPTION_KEY is not defined");try{let[iv,tag,encrypted]=Buffer.from(encryptedData,"base64").toString().split(";;"),decipher=(0,_crypto.createDecipheriv)(this.algorithm,Buffer.from(_config.ENCRYPTION_KEY,this.keyEncoding),Buffer.from(iv,this.keyEncoding));return decipher.setAuthTag(Buffer.from(tag,this.encoding)),decipher.update(encrypted,this.encoding,"utf8")+decipher.final("utf8")}catch(error){throw new _exceptionhelper.AppInternalServerErrorException("Error while decrypting data")}}};Encryption=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)()],Encryption);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Encryption",{enumerable:!0,get:function(){return Encryption}});let _common=require("@nestjs/common"),_crypto=require("crypto"),_exceptionhelper=require("../../helpers/exception.helper"),_secretmanager=require("../secret-manager");function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let Encryption=class Encryption{keyEncoding="hex";encoding="hex";algorithm="aes-256-gcm";ENCRYPTION_KEY;constructor(){(0,_secretmanager.getSecret)().then(secret=>{secret.ENCRYPTION_KEY&&(this.ENCRYPTION_KEY=secret.ENCRYPTION_KEY)})}_generateEncryptionIV(){return(0,_crypto.randomBytes)(16).toString(this.keyEncoding)}encrypt(text){if(!this.ENCRYPTION_KEY)throw new _exceptionhelper.AppUnprocessableEntityException("ENCRYPTION_KEY is not defined");let iv=this._generateEncryptionIV(),cipher=(0,_crypto.createCipheriv)(this.algorithm,Buffer.from(this.ENCRYPTION_KEY,this.keyEncoding),Buffer.from(iv,this.keyEncoding)),encrypted=cipher.update(text,"utf8",this.encoding)+cipher.final(this.encoding),data=[iv,cipher.getAuthTag().toString(this.encoding),encrypted].join(";;");return Buffer.from(data).toString("base64")}decrypt(encryptedData){if(!this.ENCRYPTION_KEY)throw new _exceptionhelper.AppUnprocessableEntityException("ENCRYPTION_KEY is not defined");try{let[iv,tag,encrypted]=Buffer.from(encryptedData,"base64").toString().split(";;"),decipher=(0,_crypto.createDecipheriv)(this.algorithm,Buffer.from(this.ENCRYPTION_KEY,this.keyEncoding),Buffer.from(iv,this.keyEncoding));return decipher.setAuthTag(Buffer.from(tag,this.encoding)),decipher.update(encrypted,this.encoding,"utf8")+decipher.final("utf8")}catch(error){throw new _exceptionhelper.AppInternalServerErrorException("Error while decrypting data")}}};Encryption=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)(),_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[])],Encryption);
@@ -1,6 +1,9 @@
1
1
  import { Algorithm } from 'jsonwebtoken';
2
2
  export declare class Jwt {
3
3
  protected jwtAlgorithms: Algorithm[];
4
+ private JWT_PRIVATE_KEY;
5
+ private JWT_PUBLIC_KEY;
6
+ constructor();
4
7
  verify<T>(token: string): T;
5
8
  sign(data: object, expiresIn?: number): string;
6
9
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Jwt",{enumerable:!0,get:function(){return Jwt}});let _common=require("@nestjs/common"),_jsonwebtoken=require("jsonwebtoken"),_config=require("../../config"),_exceptionhelper=require("../../helpers/exception.helper");let Jwt=class Jwt{jwtAlgorithms=["RS512"];verify(token){try{return(0,_jsonwebtoken.verify)(token,_config.JWT_PUBLIC_KEY,{algorithms:this.jwtAlgorithms})}catch(error){throw new _exceptionhelper.AppUnprocessableEntityException("Invalid or expired JWT token.")}}sign(data,expiresIn=15e3){try{let key="string"==typeof _config.JWT_PRIVATE_KEY&&_config.JWT_PRIVATE_KEY?Buffer.from(_config.JWT_PRIVATE_KEY):{key:_config.JWT_PRIVATE_KEY,passphrase:""};return(0,_jsonwebtoken.sign)({...data},key,{algorithm:this.jwtAlgorithms[0],expiresIn,allowInsecureKeySizes:!1,encoding:"utf-8"})}catch(error){throw new _exceptionhelper.AppUnprocessableEntityException("Failed to sign JWT token.")}}};Jwt=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)()],Jwt);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Jwt",{enumerable:!0,get:function(){return Jwt}});let _common=require("@nestjs/common"),_helpers=require("@triproject/helpers"),_jsonwebtoken=require("jsonwebtoken"),_exceptionhelper=require("../../helpers/exception.helper"),_secretmanager=require("../secret-manager");function _ts_metadata(k,v){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(k,v)}let Jwt=class Jwt{jwtAlgorithms=["RS512"];JWT_PRIVATE_KEY;JWT_PUBLIC_KEY;constructor(){(0,_secretmanager.getSecret)().then(secret=>{secret.JWT_PRIVATE_KEY&&(this.JWT_PRIVATE_KEY=(0,_helpers.parsedKeyPair)(secret.JWT_PRIVATE_KEY)),secret.JWT_PUBLIC_KEY&&(this.JWT_PUBLIC_KEY=(0,_helpers.parsedKeyPair)(secret.JWT_PUBLIC_KEY))})}verify(token){try{return(0,_jsonwebtoken.verify)(token,this.JWT_PUBLIC_KEY,{algorithms:this.jwtAlgorithms})}catch(error){throw new _exceptionhelper.AppUnprocessableEntityException("Invalid or expired JWT token.")}}sign(data,expiresIn=15e3){try{let key="string"==typeof this.JWT_PRIVATE_KEY&&this.JWT_PRIVATE_KEY?Buffer.from(this.JWT_PRIVATE_KEY):{key:this.JWT_PRIVATE_KEY,passphrase:""};return(0,_jsonwebtoken.sign)({...data},key,{algorithm:this.jwtAlgorithms[0],expiresIn,allowInsecureKeySizes:!1,encoding:"utf-8"})}catch(error){throw new _exceptionhelper.AppUnprocessableEntityException("Failed to sign JWT token.")}}};Jwt=function(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}([(0,_common.Injectable)(),_ts_metadata("design:type",Function),_ts_metadata("design:paramtypes",[])],Jwt);
@@ -5,6 +5,8 @@ export declare class PasswordHash {
5
5
  private SALT_LENGTH;
6
6
  private HASH_ENCODING;
7
7
  private HASH_DELIMITER;
8
+ private PASSWORD_HASH_SECRET;
9
+ constructor();
8
10
  private _hash;
9
11
  sign(password: string): string;
10
12
  verify(password: string, passwordHash: string): boolean;