@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.
- package/README.md +222 -2
- package/dist/config.d.ts +35 -1
- package/dist/config.js +1 -1
- package/dist/controllers/controller.js +1 -1
- package/dist/drivers/cache/cache.d.ts +1 -0
- package/dist/drivers/cache/cache.js +1 -1
- package/dist/drivers/cache/{cache.driver.js → cache.module.js} +1 -1
- package/dist/drivers/cache/index.d.ts +1 -1
- package/dist/drivers/cache/index.js +1 -1
- package/dist/drivers/cache/redis.d.ts +19 -4
- package/dist/drivers/cache/redis.js +1 -1
- package/dist/drivers/db/db.helper.js +1 -1
- package/dist/drivers/db/db.module.js +1 -1
- package/dist/drivers/db/db.service.js +1 -1
- package/dist/drivers/db/migration.d.ts +7 -7
- package/dist/drivers/db/migration.js +1 -1
- package/dist/drivers/encryptions/encryption.d.ts +2 -0
- package/dist/drivers/encryptions/encryption.js +1 -1
- package/dist/drivers/encryptions/jwt.d.ts +3 -0
- package/dist/drivers/encryptions/jwt.js +1 -1
- package/dist/drivers/encryptions/password-hash.d.ts +2 -0
- package/dist/drivers/encryptions/password-hash.js +1 -1
- package/dist/drivers/logger/app.logger.d.ts +2 -3
- package/dist/drivers/logger/app.logger.js +2 -2
- package/dist/drivers/logger/cloudwatch.d.ts +11 -14
- package/dist/drivers/logger/cloudwatch.js +1 -1
- package/dist/drivers/logger/index.d.ts +0 -1
- package/dist/drivers/logger/index.js +1 -1
- package/dist/drivers/logger/logger.contract.d.ts +24 -0
- package/dist/drivers/logger/logger.contract.js +1 -0
- package/dist/drivers/logger/logger.driver.d.ts +15 -0
- package/dist/drivers/logger/logger.driver.js +1 -0
- package/dist/drivers/logger/slack.logger.d.ts +8 -1
- package/dist/drivers/logger/slack.logger.js +1 -1
- package/dist/drivers/mail/mail.queue.d.ts +1 -1
- package/dist/drivers/mail/mail.queue.js +1 -1
- package/dist/drivers/mail/mailer.d.ts +1 -1
- package/dist/drivers/mail/mailer.js +1 -1
- package/dist/drivers/message-broker/index.d.ts +3 -0
- package/dist/drivers/message-broker/index.js +1 -0
- package/dist/drivers/message-broker/kafka.d.ts +15 -0
- package/dist/drivers/message-broker/kafka.js +1 -0
- package/dist/drivers/message-broker/message-broker.contract.d.ts +18 -0
- package/dist/drivers/message-broker/message-broker.contract.js +1 -0
- package/dist/drivers/message-broker/message-broker.module.d.ts +2 -0
- package/dist/drivers/message-broker/message-broker.module.js +1 -0
- package/dist/drivers/message-broker/message.broker.d.ts +13 -0
- package/dist/drivers/message-broker/message.broker.js +1 -0
- package/dist/drivers/message-broker/rabbitmq.d.ts +15 -0
- package/dist/drivers/message-broker/rabbitmq.js +1 -0
- package/dist/drivers/notifications/notification.queue.d.ts +1 -1
- package/dist/drivers/notifications/notification.queue.js +1 -1
- package/dist/drivers/notifications/push-notification.d.ts +3 -2
- package/dist/drivers/notifications/push-notification.js +1 -1
- package/dist/drivers/notifications/slack.d.ts +2 -1
- package/dist/drivers/queues/app.queue.d.ts +1 -1
- package/dist/drivers/queues/app.queue.js +1 -1
- package/dist/drivers/queues/queue.module.js +1 -1
- package/dist/drivers/secret-manager/aws-secret-manager.d.ts +8 -0
- package/dist/drivers/secret-manager/aws-secret-manager.js +1 -0
- package/dist/drivers/secret-manager/index.d.ts +2 -0
- package/dist/drivers/secret-manager/index.js +1 -0
- package/dist/drivers/storage/csv.storage.d.ts +23 -0
- package/dist/drivers/storage/csv.storage.js +1 -0
- package/dist/drivers/storage/excel.storage.d.ts +16 -0
- package/dist/drivers/storage/excel.storage.js +1 -0
- package/dist/drivers/storage/index.d.ts +3 -0
- package/dist/drivers/storage/index.js +1 -0
- package/dist/drivers/storage/local.storage.d.ts +15 -0
- package/dist/drivers/storage/local.storage.js +1 -0
- package/dist/drivers/storage/minio.storage.d.ts +14 -0
- package/dist/drivers/storage/minio.storage.js +1 -0
- package/dist/drivers/storage/s3-storage.d.ts +20 -0
- package/dist/drivers/storage/s3-storage.js +1 -0
- package/dist/drivers/storage/storage.contract.d.ts +13 -0
- package/dist/drivers/storage/storage.contract.js +1 -0
- package/dist/drivers/storage/storage.module.d.ts +2 -0
- package/dist/drivers/storage/storage.module.js +1 -0
- package/dist/drivers/storage/storage.service.d.ts +13 -0
- package/dist/drivers/storage/storage.service.js +1 -0
- package/dist/helpers/swagger.helper.d.ts +13 -0
- package/dist/helpers/swagger.helper.js +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -1
- package/dist/utils/redlock.d.ts +7 -0
- package/dist/utils/redlock.js +1 -0
- package/dist/utils/throttle.d.ts +7 -0
- package/dist/utils/throttle.js +1 -0
- package/dist/{helpers/totp.helper.d.ts → utils/totp.d.ts} +4 -5
- package/dist/utils/totp.js +1 -0
- package/package.json +86 -22
- package/.swcrc +0 -24
- package/dist/drivers/logger/cloudwatch.logger.d.ts +0 -1
- package/dist/drivers/logger/cloudwatch.logger.js +0 -1
- package/dist/helpers/totp.helper.js +0 -1
- /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
|
-
|
|
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
|
|
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??"",
|
|
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"),
|
|
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);
|
|
@@ -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}),
|
|
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 +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.
|
|
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
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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"),
|
|
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&¶ms.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=
|
|
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"),
|
|
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"),
|
|
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/
|
|
17
|
+
defaultValue: import("sequelize/lib/utils").Fn;
|
|
18
18
|
};
|
|
19
19
|
updatedAt: {
|
|
20
20
|
type: import("sequelize").DateDataTypeConstructor;
|
|
21
|
-
defaultValue: import("sequelize/
|
|
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/
|
|
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/
|
|
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/
|
|
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"),
|
|
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}}};
|
|
@@ -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"),
|
|
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"),
|
|
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;
|