@nest-omni/core 4.1.3-1 → 4.1.3-3
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/audit/audit.module.d.ts +10 -0
- package/audit/audit.module.js +15 -0
- package/audit/controllers/audit.controller.d.ts +24 -0
- package/audit/controllers/audit.controller.js +24 -0
- package/audit/decorators/audit-controller.decorator.d.ts +8 -0
- package/audit/decorators/audit-controller.decorator.js +9 -0
- package/audit/decorators/audit-operation.decorator.d.ts +45 -0
- package/audit/decorators/audit-operation.decorator.js +49 -0
- package/audit/decorators/entity-audit.decorator.d.ts +8 -0
- package/audit/decorators/entity-audit.decorator.js +9 -0
- package/audit/dto/audit-log-query.dto.d.ts +3 -0
- package/audit/dto/audit-log-query.dto.js +3 -0
- package/audit/dto/begin-transaction.dto.d.ts +3 -0
- package/audit/dto/begin-transaction.dto.js +3 -0
- package/audit/dto/compare-entities.dto.d.ts +3 -0
- package/audit/dto/compare-entities.dto.js +3 -0
- package/audit/dto/pre-check-restore.dto.d.ts +3 -0
- package/audit/dto/pre-check-restore.dto.js +3 -0
- package/audit/dto/restore-entity.dto.d.ts +3 -0
- package/audit/dto/restore-entity.dto.js +3 -0
- package/audit/entities/entity-audit-log.entity.d.ts +3 -0
- package/audit/entities/entity-audit-log.entity.js +3 -0
- package/audit/entities/entity-transaction.entity.d.ts +3 -0
- package/audit/entities/entity-transaction.entity.js +3 -0
- package/audit/entities/manual-operation-log.entity.d.ts +4 -0
- package/audit/entities/manual-operation-log.entity.js +4 -0
- package/audit/entities/operation-template.entity.d.ts +4 -0
- package/audit/entities/operation-template.entity.js +4 -0
- package/audit/enums/audit.enums.d.ts +17 -2
- package/audit/enums/audit.enums.js +15 -0
- package/audit/index.js +10 -0
- package/audit/interceptors/audit.interceptor.d.ts +15 -0
- package/audit/interceptors/audit.interceptor.js +23 -1
- package/audit/interfaces/audit.interfaces.d.ts +42 -0
- package/audit/services/audit-context.service.d.ts +15 -0
- package/audit/services/audit-context.service.js +15 -0
- package/audit/services/audit-strategy.service.d.ts +6 -0
- package/audit/services/audit-strategy.service.js +13 -0
- package/audit/services/entity-audit.service.d.ts +57 -0
- package/audit/services/entity-audit.service.js +91 -0
- package/audit/services/manual-audit-log.service.d.ts +124 -0
- package/audit/services/manual-audit-log.service.js +138 -0
- package/audit/services/multi-database.service.d.ts +12 -0
- package/audit/services/multi-database.service.js +12 -0
- package/audit/services/operation-description.service.d.ts +59 -0
- package/audit/services/operation-description.service.js +76 -2
- package/audit/services/transaction-audit.service.d.ts +30 -0
- package/audit/services/transaction-audit.service.js +47 -0
- package/audit/subscribers/entity-audit.subscriber.d.ts +15 -0
- package/audit/subscribers/entity-audit.subscriber.js +29 -1
- package/cache/cache-metrics.service.d.ts +67 -0
- package/cache/cache-metrics.service.js +68 -4
- package/cache/cache-serialization.service.d.ts +31 -0
- package/cache/cache-serialization.service.js +25 -0
- package/cache/cache.constants.d.ts +9 -0
- package/cache/cache.constants.js +9 -0
- package/cache/cache.health.d.ts +26 -0
- package/cache/cache.health.js +30 -0
- package/cache/cache.module.d.ts +86 -0
- package/cache/cache.module.js +71 -0
- package/cache/cache.service.d.ts +140 -0
- package/cache/cache.service.js +157 -0
- package/cache/cache.warmup.service.d.ts +39 -0
- package/cache/cache.warmup.service.js +32 -0
- package/cache/decorators/cache-evict.decorator.d.ts +47 -0
- package/cache/decorators/cache-evict.decorator.js +56 -0
- package/cache/decorators/cache-put.decorator.d.ts +34 -0
- package/cache/decorators/cache-put.decorator.js +39 -0
- package/cache/decorators/cacheable.decorator.d.ts +40 -0
- package/cache/decorators/cacheable.decorator.js +55 -0
- package/cache/dependencies/callback.dependency.d.ts +33 -0
- package/cache/dependencies/callback.dependency.js +39 -1
- package/cache/dependencies/chain.dependency.d.ts +28 -0
- package/cache/dependencies/chain.dependency.js +34 -0
- package/cache/dependencies/db.dependency.d.ts +45 -0
- package/cache/dependencies/db.dependency.js +48 -1
- package/cache/dependencies/file.dependency.d.ts +32 -0
- package/cache/dependencies/file.dependency.js +34 -0
- package/cache/dependencies/tag.dependency.d.ts +36 -0
- package/cache/dependencies/tag.dependency.js +36 -0
- package/cache/dependencies/time.dependency.d.ts +43 -0
- package/cache/dependencies/time.dependency.js +43 -0
- package/cache/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.js +9 -0
- package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
- package/cache/interfaces/cache-options.interface.d.ts +81 -0
- package/cache/interfaces/cache-options.interface.js +6 -0
- package/cache/interfaces/cache-provider.interface.d.ts +78 -0
- package/cache/providers/base-cache.provider.d.ts +14 -0
- package/cache/providers/base-cache.provider.js +16 -0
- package/cache/providers/cls-cache.provider.d.ts +20 -0
- package/cache/providers/cls-cache.provider.js +28 -0
- package/cache/providers/memory-cache.provider.d.ts +23 -0
- package/cache/providers/memory-cache.provider.js +26 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -0
- package/cache/utils/dependency-manager.util.d.ts +52 -0
- package/cache/utils/dependency-manager.util.js +59 -0
- package/cache/utils/key-generator.util.d.ts +42 -0
- package/cache/utils/key-generator.util.js +53 -1
- package/common/abstract.entity.d.ts +14 -0
- package/common/abstract.entity.js +14 -0
- package/common/boilerplate.polyfill.d.ts +142 -4
- package/common/boilerplate.polyfill.js +24 -100
- package/common/dto/dto-container.d.ts +16 -0
- package/common/dto/dto-container.js +20 -0
- package/common/dto/dto-decorators.d.ts +18 -0
- package/common/dto/dto-decorators.js +14 -0
- package/common/dto/dto-extensions.d.ts +11 -0
- package/common/dto/dto-extensions.js +9 -0
- package/common/dto/dto-service-accessor.d.ts +17 -0
- package/common/dto/dto-service-accessor.js +18 -0
- package/common/dto/dto-transformer.d.ts +12 -0
- package/common/dto/dto-transformer.js +9 -0
- package/common/dto/index.js +2 -0
- package/common/examples/paginate-and-map.example.d.ts +6 -0
- package/common/examples/paginate-and-map.example.js +26 -0
- package/common/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.js +8 -1
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -0
- package/decorators/transform.decorators.js +29 -0
- package/decorators/translate.decorator.js +1 -0
- package/decorators/user.decorator.js +1 -0
- package/decorators/validator.decorators.d.ts +8 -18
- package/decorators/validator.decorators.js +22 -190
- package/filters/constraint-errors.js +1 -0
- package/helpers/common.helper.d.ts +13 -0
- package/helpers/common.helper.js +13 -0
- package/http-client/config/http-client.config.d.ts +15 -0
- package/http-client/config/http-client.config.js +25 -9
- package/http-client/decorators/http-client.decorators.d.ts +63 -0
- package/http-client/decorators/http-client.decorators.js +71 -3
- package/http-client/entities/http-log.entity.d.ts +229 -0
- package/http-client/entities/http-log.entity.js +6 -1
- package/http-client/errors/http-client.errors.d.ts +57 -0
- package/http-client/errors/http-client.errors.js +58 -0
- package/http-client/examples/advanced-usage.example.d.ts +41 -0
- package/http-client/examples/advanced-usage.example.js +68 -24
- package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
- package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
- package/http-client/examples/basic-usage.example.d.ts +60 -0
- package/http-client/examples/basic-usage.example.js +60 -0
- package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
- package/http-client/examples/multi-api-configuration.example.js +76 -5
- package/http-client/http-client.module.d.ts +13 -0
- package/http-client/http-client.module.js +19 -0
- package/http-client/index.js +8 -0
- package/http-client/interfaces/api-client-config.interface.d.ts +125 -0
- package/http-client/interfaces/api-client-config.interface.js +3 -0
- package/http-client/interfaces/http-client-config.interface.d.ts +60 -0
- package/http-client/services/api-client-registry.service.d.ts +57 -0
- package/http-client/services/api-client-registry.service.js +84 -1
- package/http-client/services/cache.service.d.ts +52 -0
- package/http-client/services/cache.service.js +72 -3
- package/http-client/services/circuit-breaker.service.d.ts +46 -0
- package/http-client/services/circuit-breaker.service.js +52 -0
- package/http-client/services/http-client.service.d.ts +67 -0
- package/http-client/services/http-client.service.js +105 -4
- package/http-client/services/http-log-query.service.d.ts +83 -0
- package/http-client/services/http-log-query.service.js +122 -1
- package/http-client/services/http-replay.service.d.ts +101 -0
- package/http-client/services/http-replay.service.js +86 -0
- package/http-client/services/log-cleanup.service.d.ts +63 -0
- package/http-client/services/log-cleanup.service.js +54 -2
- package/http-client/services/logging.service.d.ts +40 -0
- package/http-client/services/logging.service.js +53 -0
- package/http-client/utils/call-stack-extractor.util.d.ts +37 -0
- package/http-client/utils/call-stack-extractor.util.js +48 -0
- package/http-client/utils/context-extractor.util.d.ts +49 -0
- package/http-client/utils/context-extractor.util.js +52 -0
- package/http-client/utils/curl-generator.util.d.ts +21 -0
- package/http-client/utils/curl-generator.util.js +44 -3
- package/http-client/utils/request-id.util.d.ts +18 -0
- package/http-client/utils/request-id.util.js +20 -0
- package/http-client/utils/retry-recorder.util.d.ts +42 -0
- package/http-client/utils/retry-recorder.util.js +44 -0
- package/i18n/en_US/validation.json +2 -1
- package/i18n/zh_CN/validation.json +2 -1
- package/index.js +8 -0
- package/interceptors/translation-interceptor.service.js +5 -0
- package/package.json +1 -1
- package/providers/context.provider.js +2 -0
- package/providers/generator.provider.d.ts +4 -0
- package/providers/generator.provider.js +4 -0
- package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
- package/redis-lock/examples/lock-strategy.examples.js +130 -15
- package/redis-lock/index.js +3 -0
- package/redis-lock/redis-lock.decorator.d.ts +101 -0
- package/redis-lock/redis-lock.decorator.js +120 -0
- package/redis-lock/redis-lock.module.d.ts +60 -0
- package/redis-lock/redis-lock.module.js +46 -0
- package/redis-lock/redis-lock.service.d.ts +251 -0
- package/redis-lock/redis-lock.service.js +219 -3
- package/setup/bootstrap.setup.js +20 -0
- package/setup/mode.setup.d.ts +44 -0
- package/setup/mode.setup.js +44 -0
- package/setup/schedule.decorator.d.ts +226 -0
- package/setup/schedule.decorator.js +214 -1
- package/setup/worker.decorator.d.ts +86 -0
- package/setup/worker.decorator.js +88 -0
- package/shared/serviceRegistryModule.js +9 -1
- package/shared/services/api-config.service.d.ts +3 -0
- package/shared/services/api-config.service.js +20 -9
- package/validator-json/decorators.d.ts +17 -0
- package/validator-json/decorators.js +17 -2
- package/validator-json/default.d.ts +6 -0
- package/validator-json/default.js +30 -2
- package/validator-json/defaultConverters.js +1 -0
- package/validator-json/options.d.ts +23 -0
- package/validators/common-validators.d.ts +143 -0
- package/validators/common-validators.js +249 -0
- package/validators/custom-validate.examples.d.ts +96 -0
- package/validators/custom-validate.examples.js +400 -0
- package/validators/custom-validate.validator.d.ts +133 -0
- package/validators/custom-validate.validator.js +213 -0
- package/validators/index.d.ts +2 -0
- package/validators/index.js +2 -0
- package/validators/is-exists.validator.d.ts +18 -4
- package/validators/is-exists.validator.js +67 -6
- package/validators/is-unique.validator.d.ts +19 -4
- package/validators/is-unique.validator.js +67 -11
- package/validators/skip-empty.validator.d.ts +5 -0
- package/validators/skip-empty.validator.js +5 -0
- package/vault/interfaces/vault-options.interface.d.ts +9 -0
- package/vault/vault-config.loader.d.ts +30 -0
- package/vault/vault-config.loader.js +48 -1
- package/vault/vault-config.service.d.ts +53 -0
- package/vault/vault-config.service.js +57 -0
- package/vault/vault.module.d.ts +4 -0
- package/vault/vault.module.js +4 -0
- package/decorators/examples/validation-decorators.example.d.ts +0 -69
- package/decorators/examples/validation-decorators.example.js +0 -331
|
@@ -1,66 +1,317 @@
|
|
|
1
1
|
import { OnModuleInit } from '@nestjs/common';
|
|
2
2
|
import type Redis from 'ioredis';
|
|
3
|
+
/**
|
|
4
|
+
* Lock acquisition strategy
|
|
5
|
+
*/
|
|
3
6
|
export declare enum LockStrategy {
|
|
7
|
+
/**
|
|
8
|
+
* Skip execution if lock cannot be acquired immediately
|
|
9
|
+
* This is the default behavior for backward compatibility
|
|
10
|
+
*/
|
|
4
11
|
SKIP = "SKIP",
|
|
12
|
+
/**
|
|
13
|
+
* Throw an error if lock cannot be acquired
|
|
14
|
+
* Useful for critical operations that must have exclusive access
|
|
15
|
+
*/
|
|
5
16
|
THROW = "THROW",
|
|
17
|
+
/**
|
|
18
|
+
* Wait/block until the lock can be acquired
|
|
19
|
+
* Will retry indefinitely with the specified retry delay
|
|
20
|
+
*/
|
|
6
21
|
WAIT = "WAIT"
|
|
7
22
|
}
|
|
8
23
|
export interface LockOptions {
|
|
24
|
+
/**
|
|
25
|
+
* Lock expiration time in milliseconds
|
|
26
|
+
* @default 300000 (5 minutes)
|
|
27
|
+
*/
|
|
9
28
|
ttl?: number;
|
|
29
|
+
/**
|
|
30
|
+
* Maximum number of retry attempts to acquire the lock
|
|
31
|
+
* Only applies when strategy is SKIP or THROW
|
|
32
|
+
* For WAIT strategy, this is ignored (infinite retries)
|
|
33
|
+
* @default 0 (no retries)
|
|
34
|
+
*/
|
|
10
35
|
retryCount?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Delay between retry attempts in milliseconds
|
|
38
|
+
* @default 100
|
|
39
|
+
*/
|
|
11
40
|
retryDelay?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Custom lock key prefix
|
|
43
|
+
* @default 'lock'
|
|
44
|
+
*/
|
|
12
45
|
keyPrefix?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Whether to throw an error if lock acquisition fails
|
|
48
|
+
* @deprecated Use strategy: LockStrategy.THROW instead
|
|
49
|
+
* @default false
|
|
50
|
+
*/
|
|
13
51
|
throwOnFailure?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Lock acquisition strategy
|
|
54
|
+
* - SKIP: Skip execution if lock cannot be acquired (default)
|
|
55
|
+
* - THROW: Throw error if lock cannot be acquired
|
|
56
|
+
* - WAIT: Wait/block until lock can be acquired (indefinite retries)
|
|
57
|
+
* @default LockStrategy.SKIP
|
|
58
|
+
*/
|
|
14
59
|
strategy?: LockStrategy;
|
|
60
|
+
/**
|
|
61
|
+
* Maximum wait time in milliseconds when using WAIT strategy
|
|
62
|
+
* If set, will timeout after this duration
|
|
63
|
+
* @default undefined (no timeout, wait indefinitely)
|
|
64
|
+
*/
|
|
15
65
|
waitTimeout?: number;
|
|
66
|
+
/**
|
|
67
|
+
* Automatic lock extension interval in milliseconds
|
|
68
|
+
* If set, the lock will be automatically extended at this interval
|
|
69
|
+
* @default 0 (no automatic extension)
|
|
70
|
+
*/
|
|
16
71
|
autoExtend?: number;
|
|
17
72
|
}
|
|
18
73
|
export interface LockResult {
|
|
74
|
+
/**
|
|
75
|
+
* Whether the lock was successfully acquired
|
|
76
|
+
*/
|
|
19
77
|
acquired: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Lock value (identifier) if acquired
|
|
80
|
+
*/
|
|
20
81
|
lockValue?: string;
|
|
82
|
+
/**
|
|
83
|
+
* Error message if acquisition failed
|
|
84
|
+
*/
|
|
21
85
|
error?: string;
|
|
86
|
+
/**
|
|
87
|
+
* Timer ID for auto-extension if enabled
|
|
88
|
+
*/
|
|
22
89
|
autoExtendTimer?: NodeJS.Timeout;
|
|
23
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Redis-based distributed lock service
|
|
93
|
+
*
|
|
94
|
+
* Provides thread-safe, distributed locking mechanism using Redis.
|
|
95
|
+
* Supports automatic lock expiration, retries, proper lock release,
|
|
96
|
+
* and automatic lock extension.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* constructor(private lockService: RedisLockService) {}
|
|
101
|
+
*
|
|
102
|
+
* async processTask() {
|
|
103
|
+
* const result = await this.lockService.acquireLock('task:process', { ttl: 60000 });
|
|
104
|
+
*
|
|
105
|
+
* if (result.acquired) {
|
|
106
|
+
* try {
|
|
107
|
+
* // Do work
|
|
108
|
+
* } finally {
|
|
109
|
+
* await this.lockService.releaseLock('task:process', result.lockValue);
|
|
110
|
+
* }
|
|
111
|
+
* }
|
|
112
|
+
* }
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
24
115
|
export declare class RedisLockService implements OnModuleInit {
|
|
25
116
|
private static globalInstance;
|
|
26
117
|
private readonly logger;
|
|
27
118
|
private redis;
|
|
28
119
|
private readonly defaultOptions;
|
|
29
120
|
constructor();
|
|
121
|
+
/**
|
|
122
|
+
* Get the global singleton instance
|
|
123
|
+
* This allows decorators to access the service without dependency injection
|
|
124
|
+
*/
|
|
30
125
|
static getGlobalInstance(): RedisLockService | null;
|
|
126
|
+
/**
|
|
127
|
+
* Get or create the global singleton instance
|
|
128
|
+
* If no instance exists, it will create one
|
|
129
|
+
*/
|
|
31
130
|
static getOrCreateGlobalInstance(): RedisLockService;
|
|
131
|
+
/**
|
|
132
|
+
* Set the global singleton instance
|
|
133
|
+
* Useful for testing or manual setup
|
|
134
|
+
*/
|
|
32
135
|
static setGlobalInstance(instance: RedisLockService): void;
|
|
33
136
|
onModuleInit(): Promise<void>;
|
|
34
137
|
onModuleDestroy(): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Set Redis client (required for dependency injection)
|
|
140
|
+
* This service requires an external Redis client to function
|
|
141
|
+
*/
|
|
35
142
|
setRedisClient(redis: Redis): void;
|
|
143
|
+
/**
|
|
144
|
+
* Set default TTL for locks
|
|
145
|
+
*/
|
|
36
146
|
setDefaultTtl(ttl: number): void;
|
|
147
|
+
/**
|
|
148
|
+
* Set default key prefix for locks
|
|
149
|
+
*/
|
|
37
150
|
setDefaultKeyPrefix(prefix: string): void;
|
|
151
|
+
/**
|
|
152
|
+
* Set default retry count for lock acquisition
|
|
153
|
+
*/
|
|
38
154
|
setDefaultRetryCount(count: number): void;
|
|
155
|
+
/**
|
|
156
|
+
* Set default retry delay for lock acquisition
|
|
157
|
+
*/
|
|
39
158
|
setDefaultRetryDelay(delay: number): void;
|
|
159
|
+
/**
|
|
160
|
+
* Acquire a distributed lock
|
|
161
|
+
*
|
|
162
|
+
* @param key - Lock key (will be prefixed with 'lock:')
|
|
163
|
+
* @param options - Lock options
|
|
164
|
+
* @returns Lock acquisition result
|
|
165
|
+
*/
|
|
40
166
|
acquireLock(key: string, options?: LockOptions): Promise<LockResult>;
|
|
167
|
+
/**
|
|
168
|
+
* Release a distributed lock
|
|
169
|
+
*
|
|
170
|
+
* Uses Lua script to ensure atomic check-and-delete operation
|
|
171
|
+
* Only releases the lock if the value matches (prevents releasing someone else's lock)
|
|
172
|
+
*
|
|
173
|
+
* @param key - Lock key
|
|
174
|
+
* @param lockValue - Lock value obtained during acquisition
|
|
175
|
+
* @param keyPrefix - Key prefix (must match acquisition)
|
|
176
|
+
* @returns True if lock was released, false otherwise
|
|
177
|
+
*/
|
|
41
178
|
releaseLock(key: string, lockValue: string, keyPrefix?: string): Promise<boolean>;
|
|
179
|
+
/**
|
|
180
|
+
* Extend the expiration time of an existing lock
|
|
181
|
+
*
|
|
182
|
+
* @param key - Lock key
|
|
183
|
+
* @param lockValue - Lock value obtained during acquisition
|
|
184
|
+
* @param ttl - New TTL in milliseconds
|
|
185
|
+
* @param keyPrefix - Key prefix (must match acquisition)
|
|
186
|
+
* @returns True if lock was extended, false otherwise
|
|
187
|
+
*/
|
|
42
188
|
extendLock(key: string, lockValue: string, ttl: number, keyPrefix?: string): Promise<boolean>;
|
|
189
|
+
/**
|
|
190
|
+
* Check if a lock exists
|
|
191
|
+
*
|
|
192
|
+
* @param key - Lock key
|
|
193
|
+
* @param keyPrefix - Key prefix
|
|
194
|
+
* @returns True if lock exists, false otherwise
|
|
195
|
+
*/
|
|
43
196
|
isLocked(key: string, keyPrefix?: string): Promise<boolean>;
|
|
197
|
+
/**
|
|
198
|
+
* Execute a function with automatic lock acquisition and release
|
|
199
|
+
*
|
|
200
|
+
* @param key - Lock key
|
|
201
|
+
* @param fn - Function to execute while holding the lock
|
|
202
|
+
* @param options - Lock options
|
|
203
|
+
* @returns Result of the function execution, or null if lock couldn't be acquired
|
|
204
|
+
*/
|
|
44
205
|
withLock<T>(key: string, fn: () => Promise<T>, options?: LockOptions): Promise<T | null>;
|
|
206
|
+
/**
|
|
207
|
+
* Get lock information from Redis
|
|
208
|
+
*
|
|
209
|
+
* @param key - Lock key
|
|
210
|
+
* @param keyPrefix - Key prefix
|
|
211
|
+
* @returns Lock information including TTL and value
|
|
212
|
+
*/
|
|
45
213
|
getLockInfo(key: string, keyPrefix?: string): Promise<{
|
|
46
214
|
value: string | null;
|
|
47
215
|
ttl: number | null;
|
|
48
216
|
}>;
|
|
217
|
+
/**
|
|
218
|
+
* Force release a lock (use with caution)
|
|
219
|
+
*
|
|
220
|
+
* @param key - Lock key
|
|
221
|
+
* @param keyPrefix - Key prefix
|
|
222
|
+
* @returns True if lock was released, false otherwise
|
|
223
|
+
*/
|
|
49
224
|
forceRelease(key: string, keyPrefix?: string): Promise<boolean>;
|
|
225
|
+
/**
|
|
226
|
+
* Clean up locks by pattern
|
|
227
|
+
* Useful for cleaning up locks after process restart or for specific services
|
|
228
|
+
*
|
|
229
|
+
* WARNING: Use with caution in production! This will forcefully delete locks.
|
|
230
|
+
*
|
|
231
|
+
* @param pattern - Lock pattern (e.g., 'MyService:*' or '*:migration:*')
|
|
232
|
+
* @param keyPrefix - Key prefix (default: 'lock')
|
|
233
|
+
* @returns Number of locks deleted
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* // Clean up all locks for MyService
|
|
238
|
+
* await lockService.cleanupLocksByPattern('MyService:*');
|
|
239
|
+
*
|
|
240
|
+
* // Clean up all migration locks
|
|
241
|
+
* await lockService.cleanupLocksByPattern('*:migration:*');
|
|
242
|
+
* ```
|
|
243
|
+
*/
|
|
50
244
|
cleanupLocksByPattern(pattern: string, keyPrefix?: string): Promise<number>;
|
|
245
|
+
/**
|
|
246
|
+
* Clean up locks on startup
|
|
247
|
+
* This method is useful for cleaning up stale locks from previous process instances
|
|
248
|
+
*
|
|
249
|
+
* WARNING: Only use this if you're sure the locks are from previous process instances!
|
|
250
|
+
*
|
|
251
|
+
* @param patterns - Array of lock patterns to clean up
|
|
252
|
+
* @param keyPrefix - Key prefix (default: 'lock')
|
|
253
|
+
* @returns Total number of locks deleted
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* ```typescript
|
|
257
|
+
* // In your module's onModuleInit
|
|
258
|
+
* async onModuleInit() {
|
|
259
|
+
* // Clean up locks from this service that might be left from previous restart
|
|
260
|
+
* await this.lockService.cleanupOnStartup([
|
|
261
|
+
* 'MyService:*',
|
|
262
|
+
* 'AnotherService:*'
|
|
263
|
+
* ]);
|
|
264
|
+
* }
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
51
267
|
cleanupOnStartup(patterns: string[], keyPrefix?: string): Promise<number>;
|
|
268
|
+
/**
|
|
269
|
+
* Health check for Redis connection
|
|
270
|
+
* Returns information about Redis connectivity and lock service status
|
|
271
|
+
*
|
|
272
|
+
* @returns Health check result
|
|
273
|
+
*/
|
|
52
274
|
healthCheck(): Promise<{
|
|
53
275
|
healthy: boolean;
|
|
54
276
|
redis: boolean;
|
|
55
277
|
message: string;
|
|
56
278
|
}>;
|
|
279
|
+
/**
|
|
280
|
+
* Get all active locks with optional pattern filtering
|
|
281
|
+
* Useful for monitoring and debugging
|
|
282
|
+
*
|
|
283
|
+
* @param pattern - Optional pattern to filter locks (e.g., 'MyService:*')
|
|
284
|
+
* @param keyPrefix - Key prefix (default: 'lock')
|
|
285
|
+
* @returns Array of active lock information
|
|
286
|
+
*/
|
|
57
287
|
getActiveLocks(pattern?: string, keyPrefix?: string): Promise<Array<{
|
|
58
288
|
key: string;
|
|
59
289
|
value: string | null;
|
|
60
290
|
ttl: number | null;
|
|
61
291
|
}>>;
|
|
292
|
+
/**
|
|
293
|
+
* Get Redis connection
|
|
294
|
+
* Requires external Redis client to be set
|
|
295
|
+
*/
|
|
62
296
|
private getRedis;
|
|
297
|
+
/**
|
|
298
|
+
* Generate a unique lock value
|
|
299
|
+
*
|
|
300
|
+
* @returns Unique lock identifier
|
|
301
|
+
*/
|
|
63
302
|
private generateLockValue;
|
|
303
|
+
/**
|
|
304
|
+
* Build the full Redis key for a lock
|
|
305
|
+
*
|
|
306
|
+
* @param key - Lock key
|
|
307
|
+
* @param prefix - Key prefix
|
|
308
|
+
* @returns Full Redis key
|
|
309
|
+
*/
|
|
64
310
|
private buildLockKey;
|
|
311
|
+
/**
|
|
312
|
+
* Sleep for a specified duration
|
|
313
|
+
*
|
|
314
|
+
* @param ms - Milliseconds to sleep
|
|
315
|
+
*/
|
|
65
316
|
private sleep;
|
|
66
317
|
}
|