Registry / database / nestjs-redlock-universal

nestjs-redlock-universal

JSON →
library0.3.0jsnpmunverified

NestJS integration for redlock-universal providing distributed Redis and Valkey locks with decorators, modules, and dependency injection. Current stable version is 0.3.0 (pre-1.0, API may change). Release cadence is irregular. Uses Redlock algorithm for multi-instance locking, works with node-redis v4+, ioredis v5+, and Valkey GLIDE v2+. Key differentiators: native NestJS decorator @Redlock, dynamic lock key generation, and automatic lock management via RedlockService. Requires Node >=22.0.0 and peer deps @nestjs/common/core ^8.0.0-11.0.0, redlock-universal ^0.8.0, reflect-metadata.

npm install nestjs-redlock-universal
INSTALL
IMPORT
SIG · NESTJS-REDLOCK-UNI
N
nestjs-redlock-universal
databasejavascriptv0.3.0
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

RedlockModule
import { RedlockModule } from 'nestjs-redlock-universal';
const { RedlockModule } = require('nestjs-redlock-universal');
Package is ESM-only, CommonJS require will fail.
Redlock decorator
import { Redlock } from 'nestjs-redlock-universal';
Named export for the method decorator.
RedlockService
import { RedlockService } from 'nestjs-redlock-universal';
import { RedlockService } from 'redlock-universal';
RedlockService is a NestJS-specific wrapper, not from the underlying redlock-universal package.
NodeRedisAdapter
import { NodeRedisAdapter } from 'nestjs-redlock-universal';
import { NodeRedisAdapter } from 'redlock-universal';
Adapters are re-exported from nestjs-redlock-universal for convenience; they are defined in redlock-universal but you should import from here.
IoredisAdapter
import { IoredisAdapter } from 'nestjs-redlock-universal';
Adapter for ioredis client.
ValkeyGlideAdapter
import { ValkeyGlideAdapter } from 'nestjs-redlock-universal';
import { ValkeyGlideAdapter } from '@valkey/valkey-glide';
Adapter re-exported from nestjs-redlock-universal, not directly from valkey-glide.

Full setup: import modules, create Redis clients, configure RedlockModule, and use @Redlock decorator to protect a method.

import { Module } from '@nestjs/common'; import { RedlockModule, Redlock, NodeRedisAdapter } from 'nestjs-redlock-universal'; import { createClient } from 'redis'; const redis1 = createClient({ url: process.env.REDIS_URL1 ?? 'redis://localhost:6379' }); const redis2 = createClient({ url: process.env.REDIS_URL2 ?? 'redis://localhost:6380' }); const redis3 = createClient({ url: process.env.REDIS_URL3 ?? 'redis://localhost:6381' }); await Promise.all([redis1.connect(), redis2.connect(), redis3.connect()]); @Module({ imports: [ RedlockModule.forRoot({ nodes: [ new NodeRedisAdapter(redis1), new NodeRedisAdapter(redis2), new NodeRedisAdapter(redis3), ], defaultTtl: 30000, }), ], }) export class AppModule {} @Injectable() export class PaymentService { @Redlock({ key: 'payment:processing' }) async processPayment(orderId: string): Promise<void> { // Protected by distributed lock } }
Debug
Known issues
breakingNode.js >=22.0.0 required. Older versions will throw ERR_REQUIRE_ESM or runtime errors.
fix
Upgrade Node.js to v22+ or use --experimental-vm-modules if on older versions (not recommended).
affects: >=0.0.0
gotchaThe @Redlock decorator only works on async methods. Applying it to a synchronous method will cause the lock to be released immediately before actual work.
fix
Ensure the decorated method returns a Promise or is async.
affects: >=0.0.0
gotchaLock key collisions: using a static key for all instances may cause unintended serialization. Use dynamic key generation with function argument when possible.
fix
Provide a function as the 'key' property to generate unique keys per invocation.
affects: >=0.0.0
deprecatedThe 'RedlockModule.forRootAsync' method is marked as deprecated in favor of synchronous forRoot for most cases.
fix
Use forRoot directly; for async configuration, see the advanced usage in documentation.
affects: >=0.1.0
breakingPre-0.3.0 versions used a different import path for adapters (e.g., from redlock-universal directly). The adapter classes were renamed in 0.3.0.
fix
Update imports to 'nestjs-redlock-universal' and use the new adapter names (NodeRedisAdapter, IoredisAdapter, ValkeyGlideAdapter).
affects: <0.3.0
Errors
Common errors & fixes
Error: The module 'nestjs-redlock-universal' does not have a default export.
Using default import instead of named imports.
fix
Use named imports: import { RedlockModule } from 'nestjs-redlock-universal';
ERR_REQUIRE_ESM: require() of ES Module not supported.
Package is ESM-only and cannot be loaded with require().
fix
Use import syntax or set type: 'module' in your package.json.
TypeError: Cannot read properties of undefined (reading 'using')
RedlockService not injected due to missing module import.
fix
Ensure RedlockModule is imported in the root or feature module.
RedlockError: Lock not acquired
Lock key already held by another process or client disconnected.
fix
Check Redis connections and ensure all clients point to the same instance cluster.
Error: Reflect.defineMetadata is not a function
reflect-metadata polyfill not imported.
fix
Install and import reflect-metadata at the top of your app entry: import 'reflect-metadata';
Upgrade
Version history
0.3.0latest on npm
Audit
Dependencies
@nestjs/commonrequiredCore NestJS decorators and module APIs
@nestjs/corerequiredNestJS dependency injection and lifecycle hooks
redlock-universalrequiredUnderlying distributed lock implementation (Redlock algorithm)
reflect-metadatarequiredRequired by NestJS for decorator metadata reflection
redisoptionalNode.js Redis client (one of three optional clients)
ioredisoptionalAlternative Redis client with better support for clusters/sentinel
@valkey/valkey-glideoptionalOfficial Valkey GLIDE client
Agent activity
2 hits · last 30 days
node
2
Resources
nestjs-redlock-universal — npm install nestjs-redlock-universal · libregistry