ioredis-toolkit 0.0.1

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 (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +645 -0
  3. package/dist/cache.d.ts +298 -0
  4. package/dist/cache.js +606 -0
  5. package/dist/client.d.ts +177 -0
  6. package/dist/client.js +958 -0
  7. package/dist/cluster-slot.d.ts +4 -0
  8. package/dist/cluster-slot.js +31 -0
  9. package/dist/cluster.d.ts +79 -0
  10. package/dist/cluster.js +156 -0
  11. package/dist/errors.d.ts +30 -0
  12. package/dist/errors.js +63 -0
  13. package/dist/health.d.ts +39 -0
  14. package/dist/health.js +106 -0
  15. package/dist/index.d.ts +51 -0
  16. package/dist/index.js +44 -0
  17. package/dist/lock.d.ts +215 -0
  18. package/dist/lock.js +385 -0
  19. package/dist/logger.d.ts +12 -0
  20. package/dist/logger.js +40 -0
  21. package/dist/pubsub.d.ts +171 -0
  22. package/dist/pubsub.js +285 -0
  23. package/dist/ratelimiter.d.ts +162 -0
  24. package/dist/ratelimiter.js +289 -0
  25. package/dist/session/index.d.ts +23 -0
  26. package/dist/session/index.js +16 -0
  27. package/dist/session/revocation-store.d.ts +171 -0
  28. package/dist/session/revocation-store.js +310 -0
  29. package/dist/session/scripts/cleanup-index.lua +21 -0
  30. package/dist/session/scripts/conditional-update-encrypted.lua +60 -0
  31. package/dist/session/scripts/conditional-update.lua +63 -0
  32. package/dist/session/scripts/create.lua +68 -0
  33. package/dist/session/scripts/delete-by-user.lua +29 -0
  34. package/dist/session/scripts/delete.lua +15 -0
  35. package/dist/session/scripts/enforce-limit.lua +38 -0
  36. package/dist/session/scripts/revoke.lua +61 -0
  37. package/dist/session/scripts/rotate-encrypted.lua +107 -0
  38. package/dist/session/scripts/rotate.lua +119 -0
  39. package/dist/session/scripts/touch-encrypted.lua +89 -0
  40. package/dist/session/scripts/touch.lua +72 -0
  41. package/dist/session/scripts/validate.lua +90 -0
  42. package/dist/session/session-circuit-breaker.d.ts +42 -0
  43. package/dist/session/session-circuit-breaker.js +129 -0
  44. package/dist/session/session-config.d.ts +335 -0
  45. package/dist/session/session-config.js +162 -0
  46. package/dist/session/session-cookie.d.ts +72 -0
  47. package/dist/session/session-cookie.js +101 -0
  48. package/dist/session/session-encryption.d.ts +87 -0
  49. package/dist/session/session-encryption.js +139 -0
  50. package/dist/session/session-errors.d.ts +85 -0
  51. package/dist/session/session-errors.js +145 -0
  52. package/dist/session/session-health.d.ts +38 -0
  53. package/dist/session/session-health.js +60 -0
  54. package/dist/session/session-keys.d.ts +51 -0
  55. package/dist/session/session-keys.js +113 -0
  56. package/dist/session/session-manager.d.ts +59 -0
  57. package/dist/session/session-manager.js +94 -0
  58. package/dist/session/session-metrics.d.ts +33 -0
  59. package/dist/session/session-metrics.js +112 -0
  60. package/dist/session/session-repository.d.ts +161 -0
  61. package/dist/session/session-repository.js +683 -0
  62. package/dist/session/session-scripts.d.ts +36 -0
  63. package/dist/session/session-scripts.js +130 -0
  64. package/dist/session/session-serializer.d.ts +42 -0
  65. package/dist/session/session-serializer.js +248 -0
  66. package/dist/session/session-service.d.ts +104 -0
  67. package/dist/session/session-service.js +611 -0
  68. package/dist/session/session-token.d.ts +38 -0
  69. package/dist/session/session-token.js +86 -0
  70. package/dist/session/session-types.d.ts +253 -0
  71. package/dist/session/session-types.js +16 -0
  72. package/dist/types.d.ts +782 -0
  73. package/dist/types.js +140 -0
  74. package/package.json +97 -0
@@ -0,0 +1,782 @@
1
+ import type { Redis as RedisType } from "ioredis";
2
+ import { z } from "zod";
3
+ import type { SessionManagerOptions } from "./session/session-manager.js";
4
+ export declare const RateLimitAlgorithmSchema: z.ZodEnum<{
5
+ fixed: "fixed";
6
+ sliding: "sliding";
7
+ }>;
8
+ export declare const RateLimitOptionsSchema: z.ZodObject<{
9
+ limit: z.ZodDefault<z.ZodNumber>;
10
+ duration: z.ZodDefault<z.ZodNumber>;
11
+ algorithm: z.ZodDefault<z.ZodEnum<{
12
+ fixed: "fixed";
13
+ sliding: "sliding";
14
+ }>>;
15
+ namespace: z.ZodDefault<z.ZodString>;
16
+ }, z.core.$strip>;
17
+ /**
18
+ * User-supplied rate-limit configuration.
19
+ *
20
+ * Defaults have not necessarily been materialized yet.
21
+ */
22
+ export type RateLimitOptionsInput = z.input<typeof RateLimitOptionsSchema>;
23
+ /**
24
+ * Fully normalized rate-limit configuration.
25
+ *
26
+ * All properties are guaranteed to exist after parsing.
27
+ */
28
+ export type RateLimitOptions = z.output<typeof RateLimitOptionsSchema>;
29
+ export declare const RedisModeSchema: z.ZodEnum<{
30
+ cluster: "cluster";
31
+ sentinel: "sentinel";
32
+ standalone: "standalone";
33
+ }>;
34
+ export type RedisMode = z.infer<typeof RedisModeSchema>;
35
+ export declare const RedisNodeSchema: z.ZodObject<{
36
+ host: z.ZodString;
37
+ port: z.ZodNumber;
38
+ }, z.core.$strict>;
39
+ export type RedisNode = z.output<typeof RedisNodeSchema>;
40
+ export declare const RedisTlsOptionsSchema: z.ZodObject<{
41
+ ca: z.ZodOptional<z.ZodString>;
42
+ cert: z.ZodOptional<z.ZodString>;
43
+ key: z.ZodOptional<z.ZodString>;
44
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
45
+ }, z.core.$strict>;
46
+ export type RedisTlsOptionsInput = z.input<typeof RedisTlsOptionsSchema>;
47
+ export type RedisTlsOptions = z.output<typeof RedisTlsOptionsSchema>;
48
+ export declare const SessionOptionsSchema: z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>;
49
+ export type SessionOptionsInput = z.input<typeof SessionOptionsSchema>;
50
+ export type SessionOptions = z.output<typeof SessionOptionsSchema>;
51
+ /**
52
+ * Configuration shared by all Redis topologies.
53
+ *
54
+ * IMPORTANT:
55
+ * - This schema describes the user-facing input.
56
+ * - `.default()` makes the property optional on input while guaranteeing
57
+ * the value exists on output.
58
+ */
59
+ export declare const BaseRedisConfigSchema: z.ZodObject<{
60
+ password: z.ZodOptional<z.ZodString>;
61
+ username: z.ZodOptional<z.ZodString>;
62
+ database: z.ZodDefault<z.ZodNumber>;
63
+ tls: z.ZodDefault<z.ZodBoolean>;
64
+ tlsOptions: z.ZodOptional<z.ZodObject<{
65
+ ca: z.ZodOptional<z.ZodString>;
66
+ cert: z.ZodOptional<z.ZodString>;
67
+ key: z.ZodOptional<z.ZodString>;
68
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
69
+ }, z.core.$strict>>;
70
+ maxRetries: z.ZodDefault<z.ZodNumber>;
71
+ retryDelay: z.ZodDefault<z.ZodNumber>;
72
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
73
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
74
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
75
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
76
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
77
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
78
+ rateLimit: z.ZodDefault<z.ZodObject<{
79
+ limit: z.ZodDefault<z.ZodNumber>;
80
+ duration: z.ZodDefault<z.ZodNumber>;
81
+ algorithm: z.ZodDefault<z.ZodEnum<{
82
+ fixed: "fixed";
83
+ sliding: "sliding";
84
+ }>>;
85
+ namespace: z.ZodDefault<z.ZodString>;
86
+ }, z.core.$strip>>;
87
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
88
+ }, z.core.$strict>;
89
+ export type RedisCommonConfigInput = z.input<typeof BaseRedisConfigSchema>;
90
+ export type RedisCommonConfig = z.output<typeof BaseRedisConfigSchema>;
91
+ /**
92
+ * Standalone Redis configuration.
93
+ *
94
+ * `mode` is optional on input because standalone is the default topology.
95
+ */
96
+ export declare const StandaloneRedisConfigSchema: z.ZodObject<{
97
+ password: z.ZodOptional<z.ZodString>;
98
+ username: z.ZodOptional<z.ZodString>;
99
+ database: z.ZodDefault<z.ZodNumber>;
100
+ tls: z.ZodDefault<z.ZodBoolean>;
101
+ tlsOptions: z.ZodOptional<z.ZodObject<{
102
+ ca: z.ZodOptional<z.ZodString>;
103
+ cert: z.ZodOptional<z.ZodString>;
104
+ key: z.ZodOptional<z.ZodString>;
105
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
106
+ }, z.core.$strict>>;
107
+ maxRetries: z.ZodDefault<z.ZodNumber>;
108
+ retryDelay: z.ZodDefault<z.ZodNumber>;
109
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
110
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
111
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
112
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
113
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
114
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
115
+ rateLimit: z.ZodDefault<z.ZodObject<{
116
+ limit: z.ZodDefault<z.ZodNumber>;
117
+ duration: z.ZodDefault<z.ZodNumber>;
118
+ algorithm: z.ZodDefault<z.ZodEnum<{
119
+ fixed: "fixed";
120
+ sliding: "sliding";
121
+ }>>;
122
+ namespace: z.ZodDefault<z.ZodString>;
123
+ }, z.core.$strip>>;
124
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
125
+ mode: z.ZodOptional<z.ZodLiteral<"standalone">>;
126
+ host: z.ZodDefault<z.ZodString>;
127
+ port: z.ZodDefault<z.ZodNumber>;
128
+ url: z.ZodOptional<z.ZodURL>;
129
+ }, z.core.$strict>;
130
+ export type StandaloneRedisConfigInput = z.input<typeof StandaloneRedisConfigSchema>;
131
+ export type StandaloneRedisConfig = Omit<z.output<typeof StandaloneRedisConfigSchema>, "mode"> & {
132
+ mode: "standalone";
133
+ };
134
+ export declare const SentinelRedisConfigSchema: z.ZodObject<{
135
+ password: z.ZodOptional<z.ZodString>;
136
+ username: z.ZodOptional<z.ZodString>;
137
+ database: z.ZodDefault<z.ZodNumber>;
138
+ tls: z.ZodDefault<z.ZodBoolean>;
139
+ tlsOptions: z.ZodOptional<z.ZodObject<{
140
+ ca: z.ZodOptional<z.ZodString>;
141
+ cert: z.ZodOptional<z.ZodString>;
142
+ key: z.ZodOptional<z.ZodString>;
143
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
144
+ }, z.core.$strict>>;
145
+ maxRetries: z.ZodDefault<z.ZodNumber>;
146
+ retryDelay: z.ZodDefault<z.ZodNumber>;
147
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
148
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
149
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
150
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
151
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
152
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
153
+ rateLimit: z.ZodDefault<z.ZodObject<{
154
+ limit: z.ZodDefault<z.ZodNumber>;
155
+ duration: z.ZodDefault<z.ZodNumber>;
156
+ algorithm: z.ZodDefault<z.ZodEnum<{
157
+ fixed: "fixed";
158
+ sliding: "sliding";
159
+ }>>;
160
+ namespace: z.ZodDefault<z.ZodString>;
161
+ }, z.core.$strip>>;
162
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
163
+ mode: z.ZodLiteral<"sentinel">;
164
+ sentinelNodes: z.ZodArray<z.ZodObject<{
165
+ host: z.ZodString;
166
+ port: z.ZodNumber;
167
+ }, z.core.$strict>>;
168
+ sentinelMasterName: z.ZodString;
169
+ }, z.core.$strict>;
170
+ export type SentinelRedisConfigInput = z.input<typeof SentinelRedisConfigSchema>;
171
+ export type SentinelRedisConfig = z.output<typeof SentinelRedisConfigSchema>;
172
+ /**
173
+ * Redis Cluster only supports database 0.
174
+ */
175
+ export declare const ClusterRedisConfigSchema: z.ZodObject<{
176
+ password: z.ZodOptional<z.ZodString>;
177
+ username: z.ZodOptional<z.ZodString>;
178
+ tls: z.ZodDefault<z.ZodBoolean>;
179
+ tlsOptions: z.ZodOptional<z.ZodObject<{
180
+ ca: z.ZodOptional<z.ZodString>;
181
+ cert: z.ZodOptional<z.ZodString>;
182
+ key: z.ZodOptional<z.ZodString>;
183
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
184
+ }, z.core.$strict>>;
185
+ maxRetries: z.ZodDefault<z.ZodNumber>;
186
+ retryDelay: z.ZodDefault<z.ZodNumber>;
187
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
188
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
189
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
190
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
191
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
192
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
193
+ rateLimit: z.ZodDefault<z.ZodObject<{
194
+ limit: z.ZodDefault<z.ZodNumber>;
195
+ duration: z.ZodDefault<z.ZodNumber>;
196
+ algorithm: z.ZodDefault<z.ZodEnum<{
197
+ fixed: "fixed";
198
+ sliding: "sliding";
199
+ }>>;
200
+ namespace: z.ZodDefault<z.ZodString>;
201
+ }, z.core.$strip>>;
202
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
203
+ mode: z.ZodLiteral<"cluster">;
204
+ clusterNodes: z.ZodArray<z.ZodObject<{
205
+ host: z.ZodString;
206
+ port: z.ZodNumber;
207
+ }, z.core.$strict>>;
208
+ database: z.ZodDefault<z.ZodLiteral<0>>;
209
+ }, z.core.$strict>;
210
+ export type ClusterRedisConfigInput = z.input<typeof ClusterRedisConfigSchema>;
211
+ export type ClusterRedisConfig = z.output<typeof ClusterRedisConfigSchema>;
212
+ /**
213
+ * Raw configuration union.
214
+ *
215
+ * This is intentionally a normal union rather than a discriminated union
216
+ * because standalone allows `mode` to be omitted.
217
+ */
218
+ export declare const RedisConfigInputSchema: z.ZodUnion<readonly [z.ZodObject<{
219
+ password: z.ZodOptional<z.ZodString>;
220
+ username: z.ZodOptional<z.ZodString>;
221
+ database: z.ZodDefault<z.ZodNumber>;
222
+ tls: z.ZodDefault<z.ZodBoolean>;
223
+ tlsOptions: z.ZodOptional<z.ZodObject<{
224
+ ca: z.ZodOptional<z.ZodString>;
225
+ cert: z.ZodOptional<z.ZodString>;
226
+ key: z.ZodOptional<z.ZodString>;
227
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
228
+ }, z.core.$strict>>;
229
+ maxRetries: z.ZodDefault<z.ZodNumber>;
230
+ retryDelay: z.ZodDefault<z.ZodNumber>;
231
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
232
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
233
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
234
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
235
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
236
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
237
+ rateLimit: z.ZodDefault<z.ZodObject<{
238
+ limit: z.ZodDefault<z.ZodNumber>;
239
+ duration: z.ZodDefault<z.ZodNumber>;
240
+ algorithm: z.ZodDefault<z.ZodEnum<{
241
+ fixed: "fixed";
242
+ sliding: "sliding";
243
+ }>>;
244
+ namespace: z.ZodDefault<z.ZodString>;
245
+ }, z.core.$strip>>;
246
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
247
+ mode: z.ZodOptional<z.ZodLiteral<"standalone">>;
248
+ host: z.ZodDefault<z.ZodString>;
249
+ port: z.ZodDefault<z.ZodNumber>;
250
+ url: z.ZodOptional<z.ZodURL>;
251
+ }, z.core.$strict>, z.ZodObject<{
252
+ password: z.ZodOptional<z.ZodString>;
253
+ username: z.ZodOptional<z.ZodString>;
254
+ database: z.ZodDefault<z.ZodNumber>;
255
+ tls: z.ZodDefault<z.ZodBoolean>;
256
+ tlsOptions: z.ZodOptional<z.ZodObject<{
257
+ ca: z.ZodOptional<z.ZodString>;
258
+ cert: z.ZodOptional<z.ZodString>;
259
+ key: z.ZodOptional<z.ZodString>;
260
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
261
+ }, z.core.$strict>>;
262
+ maxRetries: z.ZodDefault<z.ZodNumber>;
263
+ retryDelay: z.ZodDefault<z.ZodNumber>;
264
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
265
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
266
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
267
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
268
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
269
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
270
+ rateLimit: z.ZodDefault<z.ZodObject<{
271
+ limit: z.ZodDefault<z.ZodNumber>;
272
+ duration: z.ZodDefault<z.ZodNumber>;
273
+ algorithm: z.ZodDefault<z.ZodEnum<{
274
+ fixed: "fixed";
275
+ sliding: "sliding";
276
+ }>>;
277
+ namespace: z.ZodDefault<z.ZodString>;
278
+ }, z.core.$strip>>;
279
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
280
+ mode: z.ZodLiteral<"sentinel">;
281
+ sentinelNodes: z.ZodArray<z.ZodObject<{
282
+ host: z.ZodString;
283
+ port: z.ZodNumber;
284
+ }, z.core.$strict>>;
285
+ sentinelMasterName: z.ZodString;
286
+ }, z.core.$strict>, z.ZodObject<{
287
+ password: z.ZodOptional<z.ZodString>;
288
+ username: z.ZodOptional<z.ZodString>;
289
+ tls: z.ZodDefault<z.ZodBoolean>;
290
+ tlsOptions: z.ZodOptional<z.ZodObject<{
291
+ ca: z.ZodOptional<z.ZodString>;
292
+ cert: z.ZodOptional<z.ZodString>;
293
+ key: z.ZodOptional<z.ZodString>;
294
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
295
+ }, z.core.$strict>>;
296
+ maxRetries: z.ZodDefault<z.ZodNumber>;
297
+ retryDelay: z.ZodDefault<z.ZodNumber>;
298
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
299
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
300
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
301
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
302
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
303
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
304
+ rateLimit: z.ZodDefault<z.ZodObject<{
305
+ limit: z.ZodDefault<z.ZodNumber>;
306
+ duration: z.ZodDefault<z.ZodNumber>;
307
+ algorithm: z.ZodDefault<z.ZodEnum<{
308
+ fixed: "fixed";
309
+ sliding: "sliding";
310
+ }>>;
311
+ namespace: z.ZodDefault<z.ZodString>;
312
+ }, z.core.$strip>>;
313
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
314
+ mode: z.ZodLiteral<"cluster">;
315
+ clusterNodes: z.ZodArray<z.ZodObject<{
316
+ host: z.ZodString;
317
+ port: z.ZodNumber;
318
+ }, z.core.$strict>>;
319
+ database: z.ZodDefault<z.ZodLiteral<0>>;
320
+ }, z.core.$strict>]>;
321
+ /**
322
+ * User-facing configuration.
323
+ *
324
+ * This represents what callers are allowed to provide.
325
+ */
326
+ export type RedisConfigInput = z.input<typeof RedisConfigInputSchema>;
327
+ /**
328
+ * Normalized configuration.
329
+ *
330
+ * After parsing:
331
+ *
332
+ * - standalone.mode === "standalone"
333
+ * - sentinel.mode === "sentinel"
334
+ * - cluster.mode === "cluster"
335
+ * - defaults have been materialized
336
+ */
337
+ export declare const RedisConfigSchema: z.ZodPipe<z.ZodUnion<readonly [z.ZodObject<{
338
+ password: z.ZodOptional<z.ZodString>;
339
+ username: z.ZodOptional<z.ZodString>;
340
+ database: z.ZodDefault<z.ZodNumber>;
341
+ tls: z.ZodDefault<z.ZodBoolean>;
342
+ tlsOptions: z.ZodOptional<z.ZodObject<{
343
+ ca: z.ZodOptional<z.ZodString>;
344
+ cert: z.ZodOptional<z.ZodString>;
345
+ key: z.ZodOptional<z.ZodString>;
346
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
347
+ }, z.core.$strict>>;
348
+ maxRetries: z.ZodDefault<z.ZodNumber>;
349
+ retryDelay: z.ZodDefault<z.ZodNumber>;
350
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
351
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
352
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
353
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
354
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
355
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
356
+ rateLimit: z.ZodDefault<z.ZodObject<{
357
+ limit: z.ZodDefault<z.ZodNumber>;
358
+ duration: z.ZodDefault<z.ZodNumber>;
359
+ algorithm: z.ZodDefault<z.ZodEnum<{
360
+ fixed: "fixed";
361
+ sliding: "sliding";
362
+ }>>;
363
+ namespace: z.ZodDefault<z.ZodString>;
364
+ }, z.core.$strip>>;
365
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
366
+ mode: z.ZodOptional<z.ZodLiteral<"standalone">>;
367
+ host: z.ZodDefault<z.ZodString>;
368
+ port: z.ZodDefault<z.ZodNumber>;
369
+ url: z.ZodOptional<z.ZodURL>;
370
+ }, z.core.$strict>, z.ZodObject<{
371
+ password: z.ZodOptional<z.ZodString>;
372
+ username: z.ZodOptional<z.ZodString>;
373
+ database: z.ZodDefault<z.ZodNumber>;
374
+ tls: z.ZodDefault<z.ZodBoolean>;
375
+ tlsOptions: z.ZodOptional<z.ZodObject<{
376
+ ca: z.ZodOptional<z.ZodString>;
377
+ cert: z.ZodOptional<z.ZodString>;
378
+ key: z.ZodOptional<z.ZodString>;
379
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
380
+ }, z.core.$strict>>;
381
+ maxRetries: z.ZodDefault<z.ZodNumber>;
382
+ retryDelay: z.ZodDefault<z.ZodNumber>;
383
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
384
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
385
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
386
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
387
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
388
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
389
+ rateLimit: z.ZodDefault<z.ZodObject<{
390
+ limit: z.ZodDefault<z.ZodNumber>;
391
+ duration: z.ZodDefault<z.ZodNumber>;
392
+ algorithm: z.ZodDefault<z.ZodEnum<{
393
+ fixed: "fixed";
394
+ sliding: "sliding";
395
+ }>>;
396
+ namespace: z.ZodDefault<z.ZodString>;
397
+ }, z.core.$strip>>;
398
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
399
+ mode: z.ZodLiteral<"sentinel">;
400
+ sentinelNodes: z.ZodArray<z.ZodObject<{
401
+ host: z.ZodString;
402
+ port: z.ZodNumber;
403
+ }, z.core.$strict>>;
404
+ sentinelMasterName: z.ZodString;
405
+ }, z.core.$strict>, z.ZodObject<{
406
+ password: z.ZodOptional<z.ZodString>;
407
+ username: z.ZodOptional<z.ZodString>;
408
+ tls: z.ZodDefault<z.ZodBoolean>;
409
+ tlsOptions: z.ZodOptional<z.ZodObject<{
410
+ ca: z.ZodOptional<z.ZodString>;
411
+ cert: z.ZodOptional<z.ZodString>;
412
+ key: z.ZodOptional<z.ZodString>;
413
+ rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
414
+ }, z.core.$strict>>;
415
+ maxRetries: z.ZodDefault<z.ZodNumber>;
416
+ retryDelay: z.ZodDefault<z.ZodNumber>;
417
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
418
+ maxFanOutConcurrency: z.ZodDefault<z.ZodNumber>;
419
+ maxBatchSize: z.ZodDefault<z.ZodNumber>;
420
+ defaultTTL: z.ZodDefault<z.ZodNumber>;
421
+ compressionThreshold: z.ZodDefault<z.ZodNumber>;
422
+ slowCommandThreshold: z.ZodDefault<z.ZodNumber>;
423
+ rateLimit: z.ZodDefault<z.ZodObject<{
424
+ limit: z.ZodDefault<z.ZodNumber>;
425
+ duration: z.ZodDefault<z.ZodNumber>;
426
+ algorithm: z.ZodDefault<z.ZodEnum<{
427
+ fixed: "fixed";
428
+ sliding: "sliding";
429
+ }>>;
430
+ namespace: z.ZodDefault<z.ZodString>;
431
+ }, z.core.$strip>>;
432
+ sessionOptions: z.ZodOptional<z.ZodCustom<Partial<SessionManagerOptions>, Partial<SessionManagerOptions>>>;
433
+ mode: z.ZodLiteral<"cluster">;
434
+ clusterNodes: z.ZodArray<z.ZodObject<{
435
+ host: z.ZodString;
436
+ port: z.ZodNumber;
437
+ }, z.core.$strict>>;
438
+ database: z.ZodDefault<z.ZodLiteral<0>>;
439
+ }, z.core.$strict>]>, z.ZodTransform<{
440
+ password?: string | undefined;
441
+ username?: string | undefined;
442
+ database: number;
443
+ tls: boolean;
444
+ tlsOptions?: {
445
+ ca?: string | undefined;
446
+ cert?: string | undefined;
447
+ key?: string | undefined;
448
+ rejectUnauthorized: boolean;
449
+ } | undefined;
450
+ maxRetries: number;
451
+ retryDelay: number;
452
+ connectionTimeout: number;
453
+ maxFanOutConcurrency: number;
454
+ maxBatchSize: number;
455
+ defaultTTL: number;
456
+ compressionThreshold: number;
457
+ slowCommandThreshold: number;
458
+ rateLimit: {
459
+ limit: number;
460
+ duration: number;
461
+ algorithm: "fixed" | "sliding";
462
+ namespace: string;
463
+ };
464
+ sessionOptions?: Partial<SessionManagerOptions> | undefined;
465
+ mode: "sentinel";
466
+ sentinelNodes: {
467
+ host: string;
468
+ port: number;
469
+ }[];
470
+ sentinelMasterName: string;
471
+ } | {
472
+ password?: string | undefined;
473
+ username?: string | undefined;
474
+ tls: boolean;
475
+ tlsOptions?: {
476
+ ca?: string | undefined;
477
+ cert?: string | undefined;
478
+ key?: string | undefined;
479
+ rejectUnauthorized: boolean;
480
+ } | undefined;
481
+ maxRetries: number;
482
+ retryDelay: number;
483
+ connectionTimeout: number;
484
+ maxFanOutConcurrency: number;
485
+ maxBatchSize: number;
486
+ defaultTTL: number;
487
+ compressionThreshold: number;
488
+ slowCommandThreshold: number;
489
+ rateLimit: {
490
+ limit: number;
491
+ duration: number;
492
+ algorithm: "fixed" | "sliding";
493
+ namespace: string;
494
+ };
495
+ sessionOptions?: Partial<SessionManagerOptions> | undefined;
496
+ mode: "cluster";
497
+ clusterNodes: {
498
+ host: string;
499
+ port: number;
500
+ }[];
501
+ database: 0;
502
+ } | {
503
+ password?: string | undefined;
504
+ username?: string | undefined;
505
+ database: number;
506
+ tls: boolean;
507
+ tlsOptions?: {
508
+ ca?: string | undefined;
509
+ cert?: string | undefined;
510
+ key?: string | undefined;
511
+ rejectUnauthorized: boolean;
512
+ } | undefined;
513
+ maxRetries: number;
514
+ retryDelay: number;
515
+ connectionTimeout: number;
516
+ maxFanOutConcurrency: number;
517
+ maxBatchSize: number;
518
+ defaultTTL: number;
519
+ compressionThreshold: number;
520
+ slowCommandThreshold: number;
521
+ rateLimit: {
522
+ limit: number;
523
+ duration: number;
524
+ algorithm: "fixed" | "sliding";
525
+ namespace: string;
526
+ };
527
+ sessionOptions?: Partial<SessionManagerOptions> | undefined;
528
+ host: string;
529
+ port: number;
530
+ url?: string | undefined;
531
+ mode: "standalone";
532
+ }, {
533
+ password?: string | undefined;
534
+ username?: string | undefined;
535
+ database: number;
536
+ tls: boolean;
537
+ tlsOptions?: {
538
+ ca?: string | undefined;
539
+ cert?: string | undefined;
540
+ key?: string | undefined;
541
+ rejectUnauthorized: boolean;
542
+ } | undefined;
543
+ maxRetries: number;
544
+ retryDelay: number;
545
+ connectionTimeout: number;
546
+ maxFanOutConcurrency: number;
547
+ maxBatchSize: number;
548
+ defaultTTL: number;
549
+ compressionThreshold: number;
550
+ slowCommandThreshold: number;
551
+ rateLimit: {
552
+ limit: number;
553
+ duration: number;
554
+ algorithm: "fixed" | "sliding";
555
+ namespace: string;
556
+ };
557
+ sessionOptions?: Partial<SessionManagerOptions> | undefined;
558
+ mode?: "standalone" | undefined;
559
+ host: string;
560
+ port: number;
561
+ url?: string | undefined;
562
+ } | {
563
+ password?: string | undefined;
564
+ username?: string | undefined;
565
+ database: number;
566
+ tls: boolean;
567
+ tlsOptions?: {
568
+ ca?: string | undefined;
569
+ cert?: string | undefined;
570
+ key?: string | undefined;
571
+ rejectUnauthorized: boolean;
572
+ } | undefined;
573
+ maxRetries: number;
574
+ retryDelay: number;
575
+ connectionTimeout: number;
576
+ maxFanOutConcurrency: number;
577
+ maxBatchSize: number;
578
+ defaultTTL: number;
579
+ compressionThreshold: number;
580
+ slowCommandThreshold: number;
581
+ rateLimit: {
582
+ limit: number;
583
+ duration: number;
584
+ algorithm: "fixed" | "sliding";
585
+ namespace: string;
586
+ };
587
+ sessionOptions?: Partial<SessionManagerOptions> | undefined;
588
+ mode: "sentinel";
589
+ sentinelNodes: {
590
+ host: string;
591
+ port: number;
592
+ }[];
593
+ sentinelMasterName: string;
594
+ } | {
595
+ password?: string | undefined;
596
+ username?: string | undefined;
597
+ tls: boolean;
598
+ tlsOptions?: {
599
+ ca?: string | undefined;
600
+ cert?: string | undefined;
601
+ key?: string | undefined;
602
+ rejectUnauthorized: boolean;
603
+ } | undefined;
604
+ maxRetries: number;
605
+ retryDelay: number;
606
+ connectionTimeout: number;
607
+ maxFanOutConcurrency: number;
608
+ maxBatchSize: number;
609
+ defaultTTL: number;
610
+ compressionThreshold: number;
611
+ slowCommandThreshold: number;
612
+ rateLimit: {
613
+ limit: number;
614
+ duration: number;
615
+ algorithm: "fixed" | "sliding";
616
+ namespace: string;
617
+ };
618
+ sessionOptions?: Partial<SessionManagerOptions> | undefined;
619
+ mode: "cluster";
620
+ clusterNodes: {
621
+ host: string;
622
+ port: number;
623
+ }[];
624
+ database: 0;
625
+ }>>;
626
+ export type RedisConfig = z.output<typeof RedisConfigSchema>;
627
+ export type RedisConfigForMode<M extends RedisMode> = M extends "cluster" ? ClusterRedisConfig : M extends "sentinel" ? SentinelRedisConfig : StandaloneRedisConfig;
628
+ export type CacheOptions = {
629
+ /**
630
+ * TTL in seconds.
631
+ *
632
+ * Falls back to the cache's `defaultTTL`.
633
+ */
634
+ ttl?: number;
635
+ /**
636
+ * Enable/disable compression.
637
+ *
638
+ * Default: true.
639
+ */
640
+ compress?: boolean;
641
+ /**
642
+ * Namespace prefix.
643
+ */
644
+ namespace?: string;
645
+ };
646
+ export type CacheStats = {
647
+ namespace: string;
648
+ connectionStatus: ConnectionStatus;
649
+ };
650
+ export type LockOptions = {
651
+ /**
652
+ * Lock TTL in milliseconds.
653
+ */
654
+ ttl?: number;
655
+ /**
656
+ * Number of acquisition attempts.
657
+ */
658
+ retryCount?: number;
659
+ /**
660
+ * Base retry delay in milliseconds.
661
+ */
662
+ retryDelay?: number;
663
+ };
664
+ export type DistributedLockOptions = LockOptions;
665
+ export type LockInfo = {
666
+ locked: boolean;
667
+ ttl?: number;
668
+ lockId?: string;
669
+ };
670
+ export type HealthStatus = {
671
+ healthy: boolean;
672
+ status: "healthy" | "degraded" | "unhealthy";
673
+ latency: number;
674
+ timestamp: Date;
675
+ details: {
676
+ ping: boolean;
677
+ connections?: number;
678
+ memory?: string;
679
+ };
680
+ };
681
+ export type PubSubMessage<T = unknown> = {
682
+ channel: string;
683
+ message: T;
684
+ };
685
+ export type PubSubStats = {
686
+ subscriptions: number;
687
+ patternSubscriptions: number;
688
+ connected: boolean;
689
+ };
690
+ export type PubSubEventMap = {
691
+ message: {
692
+ channel: string;
693
+ message: string;
694
+ };
695
+ pmessage: {
696
+ pattern: string;
697
+ channel: string;
698
+ message: string;
699
+ };
700
+ subscribe: {
701
+ channel: string;
702
+ count: number;
703
+ };
704
+ unsubscribe: {
705
+ channel: string;
706
+ count: number;
707
+ };
708
+ psubscribe: {
709
+ pattern: string;
710
+ count: number;
711
+ };
712
+ punsubscribe: {
713
+ pattern: string;
714
+ count: number;
715
+ };
716
+ error: Error;
717
+ };
718
+ export type ClusterSlotNode = {
719
+ host: string;
720
+ port: number;
721
+ nodeId?: string;
722
+ };
723
+ export type ClusterSlotRange = {
724
+ start: number;
725
+ end: number;
726
+ master: ClusterSlotNode;
727
+ replicas: ClusterSlotNode[];
728
+ };
729
+ export type ClusterInfo = {
730
+ mode: RedisMode;
731
+ status: "ready" | "connecting" | "error";
732
+ nodeCount?: number;
733
+ slotCount?: number;
734
+ nodes?: Array<{
735
+ host: string;
736
+ port: number;
737
+ role?: string;
738
+ }>;
739
+ host?: string;
740
+ port?: number;
741
+ error?: string;
742
+ };
743
+ export type ConnectionState = "disconnected" | "connecting" | "connected" | "error" | "closed";
744
+ export type ConnectionStatus = {
745
+ state: ConnectionState;
746
+ connected: boolean;
747
+ ready: boolean;
748
+ lastError?: Error;
749
+ reconnectAttempts: number;
750
+ uptime: number;
751
+ };
752
+ export type RedisEventMap = {
753
+ connect: void;
754
+ ready: void;
755
+ close: void;
756
+ reconnecting: {
757
+ attempt: number;
758
+ delay: number;
759
+ };
760
+ error: Error;
761
+ end: void;
762
+ status: ConnectionStatus;
763
+ nodeAdded: {
764
+ node: RedisType;
765
+ };
766
+ nodeRemoved: {
767
+ node: RedisType;
768
+ };
769
+ nodeError: {
770
+ node: RedisType;
771
+ error: Error;
772
+ };
773
+ moved: {
774
+ key: string;
775
+ target: string;
776
+ };
777
+ ask: {
778
+ key: string;
779
+ target: string;
780
+ };
781
+ };
782
+ export type Redis = RedisType;