@nest-omni/core 4.1.3-20 → 4.1.3-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 (107) hide show
  1. package/audit/audit.module.d.ts +1 -0
  2. package/audit/audit.module.js +5 -3
  3. package/audit/controllers/audit.controller.d.ts +3 -11
  4. package/audit/controllers/audit.controller.js +12 -19
  5. package/audit/decorators/audit-operation.decorator.d.ts +0 -7
  6. package/audit/decorators/audit-operation.decorator.js +0 -7
  7. package/audit/dto/audit-action-query.dto.d.ts +13 -0
  8. package/audit/dto/audit-action-query.dto.js +77 -0
  9. package/audit/dto/index.d.ts +1 -0
  10. package/audit/dto/index.js +1 -0
  11. package/audit/entities/entity-audit-log.entity.d.ts +1 -4
  12. package/audit/entities/entity-audit-log.entity.js +1 -17
  13. package/audit/entities/manual-operation-log.entity.d.ts +0 -2
  14. package/audit/entities/manual-operation-log.entity.js +0 -8
  15. package/audit/enums/audit.enums.d.ts +0 -8
  16. package/audit/enums/audit.enums.js +1 -10
  17. package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
  18. package/audit/examples/decorator-value-mapping.example.js +414 -0
  19. package/audit/index.d.ts +1 -0
  20. package/audit/index.js +5 -1
  21. package/audit/interceptors/audit.interceptor.d.ts +1 -0
  22. package/audit/interceptors/audit.interceptor.js +19 -11
  23. package/audit/interfaces/audit.interfaces.d.ts +2 -17
  24. package/audit/services/audit-context.service.d.ts +9 -0
  25. package/audit/services/entity-audit.service.d.ts +65 -24
  26. package/audit/services/entity-audit.service.js +280 -93
  27. package/audit/services/manual-audit-log.service.d.ts +0 -1
  28. package/audit/services/manual-audit-log.service.js +1 -3
  29. package/audit/subscribers/entity-audit.subscriber.d.ts +1 -0
  30. package/audit/subscribers/entity-audit.subscriber.js +22 -5
  31. package/cache/cache.module.d.ts +7 -2
  32. package/cache/cache.module.js +9 -7
  33. package/cache/cache.service.d.ts +4 -4
  34. package/cache/cache.service.js +5 -5
  35. package/cache/entities/index.d.ts +1 -0
  36. package/cache/entities/index.js +17 -0
  37. package/cache/entities/typeorm-cache.entity.d.ts +71 -0
  38. package/cache/entities/typeorm-cache.entity.js +110 -0
  39. package/cache/index.d.ts +2 -1
  40. package/cache/index.js +19 -2
  41. package/cache/providers/index.d.ts +2 -1
  42. package/cache/providers/index.js +2 -1
  43. package/cache/providers/lrucache.provider.d.ts +76 -0
  44. package/cache/providers/lrucache.provider.js +226 -0
  45. package/cache/providers/typeorm-cache.provider.d.ts +211 -0
  46. package/cache/providers/typeorm-cache.provider.js +483 -0
  47. package/common/boilerplate.polyfill.d.ts +1 -0
  48. package/common/boilerplate.polyfill.js +17 -0
  49. package/common/helpers/validation-metadata-helper.d.ts +55 -0
  50. package/common/helpers/validation-metadata-helper.js +60 -0
  51. package/common/index.d.ts +1 -0
  52. package/common/index.js +4 -0
  53. package/decorators/field.decorators.d.ts +71 -2
  54. package/decorators/field.decorators.js +147 -18
  55. package/decorators/transform.decorators.d.ts +0 -2
  56. package/decorators/transform.decorators.js +0 -23
  57. package/filters/bad-request.filter.js +19 -4
  58. package/http-client/examples/axios-config-extended.example.d.ts +17 -0
  59. package/http-client/examples/axios-config-extended.example.js +313 -0
  60. package/http-client/examples/index.d.ts +2 -0
  61. package/http-client/examples/index.js +2 -0
  62. package/http-client/examples/ssl-certificate.example.d.ts +47 -0
  63. package/http-client/examples/ssl-certificate.example.js +431 -0
  64. package/http-client/index.d.ts +1 -1
  65. package/http-client/interfaces/http-client-config.interface.d.ts +73 -0
  66. package/http-client/services/http-client.service.js +46 -5
  67. package/http-client/utils/context-extractor.util.js +2 -0
  68. package/ip-filter/constants.d.ts +21 -0
  69. package/ip-filter/constants.js +24 -0
  70. package/ip-filter/decorators/index.d.ts +1 -0
  71. package/ip-filter/decorators/index.js +17 -0
  72. package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
  73. package/ip-filter/decorators/ip-filter.decorator.js +79 -0
  74. package/ip-filter/guards/index.d.ts +1 -0
  75. package/ip-filter/guards/index.js +17 -0
  76. package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
  77. package/ip-filter/guards/ip-filter.guard.js +174 -0
  78. package/ip-filter/index.d.ts +7 -0
  79. package/ip-filter/index.js +23 -0
  80. package/ip-filter/interfaces/index.d.ts +4 -0
  81. package/ip-filter/interfaces/index.js +20 -0
  82. package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
  83. package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
  84. package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
  85. package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
  86. package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
  87. package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
  88. package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
  89. package/ip-filter/interfaces/ip-rule.interface.js +2 -0
  90. package/ip-filter/ip-filter.module.d.ts +55 -0
  91. package/ip-filter/ip-filter.module.js +105 -0
  92. package/ip-filter/services/index.d.ts +1 -0
  93. package/ip-filter/services/index.js +17 -0
  94. package/ip-filter/services/ip-filter.service.d.ts +92 -0
  95. package/ip-filter/services/ip-filter.service.js +238 -0
  96. package/ip-filter/utils/index.d.ts +1 -0
  97. package/ip-filter/utils/index.js +17 -0
  98. package/ip-filter/utils/ip-utils.d.ts +61 -0
  99. package/ip-filter/utils/ip-utils.js +162 -0
  100. package/package.json +23 -24
  101. package/providers/context.provider.d.ts +9 -0
  102. package/providers/context.provider.js +13 -0
  103. package/setup/bootstrap.setup.d.ts +1 -1
  104. package/setup/bootstrap.setup.js +1 -1
  105. package/shared/service-registry.module.js +0 -1
  106. package/cache/providers/memory-cache.provider.d.ts +0 -69
  107. package/cache/providers/memory-cache.provider.js +0 -237
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.LRUCacheProvider = void 0;
22
+ const common_1 = require("@nestjs/common");
23
+ const base_cache_provider_1 = require("./base-cache.provider");
24
+ // Dynamic import to handle ESM/CommonJS interop
25
+ const LRUCacheClass = require('lru-cache').LRUCache;
26
+ /**
27
+ * LRU Memory Cache Provider
28
+ *
29
+ * High-performance in-memory LRU (Least Recently Used) cache provider.
30
+ * This is an L2 cache layer with fast access and automatic eviction.
31
+ *
32
+ * Features:
33
+ * - O(1) get/set operations
34
+ * - Automatic LRU eviction when cache is full
35
+ * - Optional TTL (Time To Live) support
36
+ * - Namespace isolation
37
+ * - Cache statistics (size, hit rate, usage percentage)
38
+ *
39
+ * Use Cases:
40
+ * - Session data caching
41
+ * - Frequently accessed configuration
42
+ * - API response caching
43
+ * - Temporary data storage
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const provider = new LRUCacheProvider({
48
+ * maxSize: 1000,
49
+ * ttl: 60000, // optional TTL
50
+ * namespace: 'my-cache',
51
+ * });
52
+ * ```
53
+ */
54
+ let LRUCacheProvider = class LRUCacheProvider extends base_cache_provider_1.BaseCacheProvider {
55
+ constructor(options) {
56
+ super();
57
+ const { maxSize = 500, ttl, namespace = 'cache:lru' } = options || {};
58
+ this.namespace = namespace;
59
+ this.defaultTtl = ttl;
60
+ this.cache = new LRUCacheClass({
61
+ max: maxSize,
62
+ ttl: ttl,
63
+ updateAgeOnGet: true,
64
+ updateAgeOnHas: true,
65
+ });
66
+ }
67
+ getName() {
68
+ return 'LRUMemory';
69
+ }
70
+ get(key) {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ try {
73
+ const fullKey = this.getFullKey(key);
74
+ const value = this.cache.get(fullKey);
75
+ return value !== undefined ? value : null;
76
+ }
77
+ catch (error) {
78
+ console.warn(`LRUCacheProvider: Failed to get key ${key}:`, error);
79
+ return null;
80
+ }
81
+ });
82
+ }
83
+ set(key, value, ttl) {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ try {
86
+ const fullKey = this.getFullKey(key);
87
+ const effectiveTtl = ttl !== null && ttl !== void 0 ? ttl : this.defaultTtl;
88
+ this.cache.set(fullKey, value, { ttl: effectiveTtl });
89
+ }
90
+ catch (error) {
91
+ throw new Error(`LRUCacheProvider: Failed to set key ${key}: ${error}`);
92
+ }
93
+ });
94
+ }
95
+ delete(key) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ try {
98
+ if (Array.isArray(key)) {
99
+ key.forEach((k) => {
100
+ const fullKey = this.getFullKey(k);
101
+ this.cache.delete(fullKey);
102
+ });
103
+ }
104
+ else {
105
+ const fullKey = this.getFullKey(key);
106
+ this.cache.delete(fullKey);
107
+ }
108
+ }
109
+ catch (error) {
110
+ throw new Error(`LRUCacheProvider: Failed to delete keys: ${error}`);
111
+ }
112
+ });
113
+ }
114
+ deletePattern(pattern) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ try {
117
+ const regex = this.patternToRegex(pattern);
118
+ const keys = Array.from(this.cache.keys());
119
+ let deleted = 0;
120
+ for (const key of keys) {
121
+ if (regex.test(String(key))) {
122
+ this.cache.delete(key);
123
+ deleted++;
124
+ }
125
+ }
126
+ return deleted;
127
+ }
128
+ catch (error) {
129
+ throw new Error(`LRUCacheProvider: Failed to delete pattern ${pattern}: ${error}`);
130
+ }
131
+ });
132
+ }
133
+ clear() {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ try {
136
+ this.cache.clear();
137
+ }
138
+ catch (error) {
139
+ throw new Error(`LRUCacheProvider: Failed to clear cache: ${error}`);
140
+ }
141
+ });
142
+ }
143
+ has(key) {
144
+ return __awaiter(this, void 0, void 0, function* () {
145
+ try {
146
+ const fullKey = this.getFullKey(key);
147
+ return this.cache.has(fullKey);
148
+ }
149
+ catch (error) {
150
+ return false;
151
+ }
152
+ });
153
+ }
154
+ mget(keys) {
155
+ return __awaiter(this, void 0, void 0, function* () {
156
+ try {
157
+ return keys.map((key) => {
158
+ const fullKey = this.getFullKey(key);
159
+ const value = this.cache.get(fullKey);
160
+ return value !== undefined ? value : null;
161
+ });
162
+ }
163
+ catch (error) {
164
+ console.warn(`LRUCacheProvider: Failed to mget:`, error);
165
+ return keys.map(() => null);
166
+ }
167
+ });
168
+ }
169
+ mset(items, ttl) {
170
+ return __awaiter(this, void 0, void 0, function* () {
171
+ try {
172
+ const effectiveTtl = ttl !== null && ttl !== void 0 ? ttl : this.defaultTtl;
173
+ items.forEach((item) => {
174
+ const fullKey = this.getFullKey(item.key);
175
+ this.cache.set(fullKey, item.value, { ttl: effectiveTtl });
176
+ });
177
+ }
178
+ catch (error) {
179
+ throw new Error(`LRUCacheProvider: Failed to mset: ${error}`);
180
+ }
181
+ });
182
+ }
183
+ /**
184
+ * Get cache size
185
+ */
186
+ getSize() {
187
+ return this.cache.size;
188
+ }
189
+ /**
190
+ * Get cache statistics
191
+ */
192
+ getStats() {
193
+ return {
194
+ provider: 'LRUMemory',
195
+ namespace: this.namespace,
196
+ size: this.cache.size,
197
+ maxSize: this.cache.max,
198
+ calculatedSize: this.cache.calculatedSize,
199
+ usagePercentage: this.cache.max
200
+ ? (this.cache.size / this.cache.max) * 100
201
+ : 0,
202
+ };
203
+ }
204
+ /**
205
+ * Clean up expired items
206
+ */
207
+ cleanup() {
208
+ const beforeSize = this.cache.size;
209
+ this.cache.purgeStale();
210
+ return beforeSize - this.cache.size;
211
+ }
212
+ /**
213
+ * Destroy the provider
214
+ */
215
+ onModuleDestroy() {
216
+ this.cache.clear();
217
+ }
218
+ getFullKey(key) {
219
+ return `${this.namespace}:${key}`;
220
+ }
221
+ };
222
+ exports.LRUCacheProvider = LRUCacheProvider;
223
+ exports.LRUCacheProvider = LRUCacheProvider = __decorate([
224
+ (0, common_1.Injectable)(),
225
+ __metadata("design:paramtypes", [Object])
226
+ ], LRUCacheProvider);
@@ -0,0 +1,211 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { BaseCacheProvider } from './base-cache.provider';
3
+ /**
4
+ * Options for TypeormCacheProvider
5
+ */
6
+ export interface TypeormCacheProviderOptions {
7
+ /**
8
+ * Default cache duration in milliseconds
9
+ * Default: 60000 (60 seconds)
10
+ */
11
+ duration?: number;
12
+ /**
13
+ * Enable or disable caching
14
+ * Default: true
15
+ */
16
+ enabled?: boolean;
17
+ /**
18
+ * Data source name to use for cache operations
19
+ * If not specified, uses the default data source
20
+ * Default: 'default'
21
+ */
22
+ dataSourceName?: string;
23
+ /**
24
+ * Namespace for cache isolation
25
+ * Default: 'cache'
26
+ */
27
+ namespace?: string;
28
+ /**
29
+ * Whether to automatically clean up expired entries
30
+ * Default: true
31
+ */
32
+ autoCleanup?: boolean;
33
+ /**
34
+ * Cleanup interval in milliseconds
35
+ * Default: 300000 (5 minutes)
36
+ */
37
+ cleanupInterval?: number;
38
+ }
39
+ /**
40
+ * TypeORM Cache Provider
41
+ *
42
+ * Database-backed cache provider using TypeORM for persistent caching.
43
+ * This is an L3 cache layer that provides:
44
+ * - Persistent cache storage in database
45
+ * - Cross-instance cache sharing
46
+ * - Automatic expiration handling
47
+ * - Namespace isolation
48
+ *
49
+ * Unlike in-memory caches, this provider survives application restarts
50
+ * and can be shared across multiple application instances.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * // In your module:
55
+ * @Module({
56
+ * providers: [
57
+ * {
58
+ * provide: 'TYPEORM_CACHE',
59
+ * useFactory: (dataSource: DataSource) => {
60
+ * return new TypeormCacheProvider({
61
+ * duration: 60000,
62
+ * namespace: 'app:cache',
63
+ * dataSourceName: 'default',
64
+ * });
65
+ * },
66
+ * inject: [DataSource],
67
+ * },
68
+ * ],
69
+ * })
70
+ * export class AppModule {}
71
+ *
72
+ * // In your service:
73
+ * @Injectable()
74
+ * export class UserService {
75
+ * constructor(@Inject('TYPEORM_CACHE') private cache: TypeormCacheProvider) {}
76
+ *
77
+ * async getUser(id: string) {
78
+ * // Try cache first
79
+ * const cached = await this.cache.get(`user:${id}`);
80
+ * if (cached) return cached;
81
+ *
82
+ * // Cache miss - fetch from database
83
+ * const user = await this.userRepository.findOne(id);
84
+ *
85
+ * // Store in cache
86
+ * await this.cache.set(`user:${id}`, user, 60000);
87
+ *
88
+ * return user;
89
+ * }
90
+ * }
91
+ * ```
92
+ *
93
+ * @see https://typeorm.io/#caching
94
+ */
95
+ export declare class TypeormCacheProvider extends BaseCacheProvider {
96
+ private readonly injectedDataSource?;
97
+ private defaultDuration;
98
+ private enabled;
99
+ private namespace;
100
+ private dataSourceName;
101
+ private autoCleanup;
102
+ private cleanupInterval;
103
+ private cleanupTimer?;
104
+ private dataSource?;
105
+ constructor(injectedDataSource?: DataSource, options?: TypeormCacheProviderOptions);
106
+ /**
107
+ * Get DataSource for cache operations
108
+ * Uses @nest-omni/transaction's getDataSource utility
109
+ */
110
+ private getDataSource;
111
+ /**
112
+ * Get repository for cache operations
113
+ */
114
+ private getRepository;
115
+ getName(): string;
116
+ /**
117
+ * Get cached value by key
118
+ */
119
+ get<T>(key: string): Promise<T | null>;
120
+ /**
121
+ * Set cache value with optional TTL
122
+ */
123
+ set<T>(key: string, value: T, ttl?: number): Promise<void>;
124
+ /**
125
+ * Delete cache entry by key
126
+ */
127
+ delete(key: string | string[]): Promise<void>;
128
+ /**
129
+ * Delete cache entries matching a pattern
130
+ * Uses SQL LIKE for pattern matching
131
+ */
132
+ deletePattern(pattern: string): Promise<number>;
133
+ /**
134
+ * Clear all cache entries in namespace
135
+ */
136
+ clear(): Promise<void>;
137
+ /**
138
+ * Check if key exists and is not expired
139
+ */
140
+ has(key: string): Promise<boolean>;
141
+ /**
142
+ * Get multiple values by keys
143
+ */
144
+ mget<T>(keys: string[]): Promise<(T | null)[]>;
145
+ /**
146
+ * Set multiple cache entries
147
+ */
148
+ mset(items: Array<{
149
+ key: string;
150
+ value: any;
151
+ }>, ttl?: number): Promise<void>;
152
+ /**
153
+ * Get cache configuration
154
+ */
155
+ getCacheConfig(): {
156
+ duration: number;
157
+ type: string;
158
+ enabled: boolean;
159
+ namespace: string;
160
+ dataSourceName: string;
161
+ };
162
+ /**
163
+ * Get statistics about cache entries
164
+ */
165
+ getStats(): Promise<{
166
+ totalEntries: number;
167
+ expiredEntries: number;
168
+ validEntries: number;
169
+ enabled: boolean;
170
+ defaultDuration: number;
171
+ type: string;
172
+ namespace: string;
173
+ dataSourceName: string;
174
+ error?: undefined;
175
+ } | {
176
+ totalEntries: number;
177
+ expiredEntries: number;
178
+ validEntries: number;
179
+ enabled: boolean;
180
+ defaultDuration: number;
181
+ type: string;
182
+ namespace: string;
183
+ dataSourceName: string;
184
+ error: string;
185
+ }>;
186
+ /**
187
+ * Clean up expired entries
188
+ */
189
+ cleanupExpired(): Promise<number>;
190
+ /**
191
+ * Enable or disable caching
192
+ */
193
+ setEnabled(enabled: boolean): void;
194
+ /**
195
+ * Set namespace
196
+ */
197
+ setNamespace(namespace: string): void;
198
+ /**
199
+ * Get full key with namespace
200
+ */
201
+ private getFullKey;
202
+ /**
203
+ * Start automatic cleanup of expired entries
204
+ */
205
+ private startAutoCleanup;
206
+ /**
207
+ * Stop automatic cleanup
208
+ */
209
+ private stopAutoCleanup;
210
+ onModuleDestroy(): Promise<void>;
211
+ }