ioredis-toolkit 0.0.10 → 0.0.12

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 (256) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/LICENSE +1 -1
  3. package/README.md +68 -1613
  4. package/dist/cache/cache.d.ts +30 -0
  5. package/dist/cache/cache.d.ts.map +1 -0
  6. package/dist/cache/cache.js +59 -0
  7. package/dist/cache/cache.js.map +1 -0
  8. package/dist/cache/config.d.ts +12 -0
  9. package/dist/cache/config.d.ts.map +1 -0
  10. package/dist/cache/config.js +13 -0
  11. package/dist/cache/config.js.map +1 -0
  12. package/dist/cache/types.d.ts +32 -0
  13. package/dist/cache/types.d.ts.map +1 -0
  14. package/dist/cache/types.js +5 -0
  15. package/dist/cache/types.js.map +1 -0
  16. package/dist/index.d.ts +43 -51
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +32 -44
  19. package/dist/index.js.map +1 -0
  20. package/dist/lock/config.d.ts +12 -0
  21. package/dist/lock/config.d.ts.map +1 -0
  22. package/dist/lock/config.js +8 -0
  23. package/dist/lock/config.js.map +1 -0
  24. package/dist/lock/lock.d.ts +20 -0
  25. package/dist/lock/lock.d.ts.map +1 -0
  26. package/dist/lock/lock.js +44 -0
  27. package/dist/lock/lock.js.map +1 -0
  28. package/dist/lock/types.d.ts +19 -0
  29. package/dist/lock/types.d.ts.map +1 -0
  30. package/dist/lock/types.js +2 -0
  31. package/dist/lock/types.js.map +1 -0
  32. package/dist/modules-config.d.ts +3 -0
  33. package/dist/modules-config.d.ts.map +1 -0
  34. package/dist/modules-config.js +2 -0
  35. package/dist/modules-config.js.map +1 -0
  36. package/dist/pubsub/config.d.ts +11 -0
  37. package/dist/pubsub/config.d.ts.map +1 -0
  38. package/dist/pubsub/config.js +6 -0
  39. package/dist/pubsub/config.js.map +1 -0
  40. package/dist/pubsub/pubsub.d.ts +20 -0
  41. package/dist/pubsub/pubsub.d.ts.map +1 -0
  42. package/dist/pubsub/pubsub.js +54 -0
  43. package/dist/pubsub/pubsub.js.map +1 -0
  44. package/dist/pubsub/types.d.ts +24 -0
  45. package/dist/pubsub/types.d.ts.map +1 -0
  46. package/dist/pubsub/types.js +2 -0
  47. package/dist/pubsub/types.js.map +1 -0
  48. package/dist/rate-limit/config.d.ts +12 -0
  49. package/dist/rate-limit/config.d.ts.map +1 -0
  50. package/dist/rate-limit/config.js +6 -0
  51. package/dist/rate-limit/config.js.map +1 -0
  52. package/dist/rate-limit/rate-limiter.d.ts +18 -0
  53. package/dist/rate-limit/rate-limiter.d.ts.map +1 -0
  54. package/dist/rate-limit/rate-limiter.js +37 -0
  55. package/dist/rate-limit/rate-limiter.js.map +1 -0
  56. package/dist/rate-limit/types.d.ts +27 -0
  57. package/dist/rate-limit/types.d.ts.map +1 -0
  58. package/dist/rate-limit/types.js +2 -0
  59. package/dist/rate-limit/types.js.map +1 -0
  60. package/dist/redis/client-facade.d.ts +77 -0
  61. package/dist/redis/client-facade.d.ts.map +1 -0
  62. package/dist/redis/client-facade.js +102 -0
  63. package/dist/redis/client-facade.js.map +1 -0
  64. package/dist/redis/client.d.ts +10 -0
  65. package/dist/redis/client.d.ts.map +1 -0
  66. package/dist/redis/client.js +29 -0
  67. package/dist/redis/client.js.map +1 -0
  68. package/dist/redis/cluster.d.ts +7 -0
  69. package/dist/redis/cluster.d.ts.map +1 -0
  70. package/dist/redis/cluster.js +47 -0
  71. package/dist/redis/cluster.js.map +1 -0
  72. package/dist/redis/config.d.ts +39 -0
  73. package/dist/redis/config.d.ts.map +1 -0
  74. package/dist/redis/config.js +52 -0
  75. package/dist/redis/config.js.map +1 -0
  76. package/dist/redis/errors.d.ts +5 -0
  77. package/dist/redis/errors.d.ts.map +1 -0
  78. package/dist/redis/errors.js +5 -0
  79. package/dist/redis/errors.js.map +1 -0
  80. package/dist/redis/types.d.ts +135 -0
  81. package/dist/redis/types.d.ts.map +1 -0
  82. package/dist/redis/types.js +2 -0
  83. package/dist/redis/types.js.map +1 -0
  84. package/dist/redis/wrapper.d.ts +88 -0
  85. package/dist/redis/wrapper.d.ts.map +1 -0
  86. package/dist/redis/wrapper.js +206 -0
  87. package/dist/redis/wrapper.js.map +1 -0
  88. package/dist/session/config.d.ts +47 -0
  89. package/dist/session/config.d.ts.map +1 -0
  90. package/dist/session/config.js +101 -0
  91. package/dist/session/config.js.map +1 -0
  92. package/dist/session/cookie.d.ts +16 -0
  93. package/dist/session/cookie.d.ts.map +1 -0
  94. package/dist/session/cookie.js +28 -0
  95. package/dist/session/cookie.js.map +1 -0
  96. package/dist/session/errors.d.ts +56 -0
  97. package/dist/session/errors.d.ts.map +1 -0
  98. package/dist/session/errors.js +58 -0
  99. package/dist/session/errors.js.map +1 -0
  100. package/dist/session/factory.d.ts +21 -0
  101. package/dist/session/factory.d.ts.map +1 -0
  102. package/dist/session/factory.js +30 -0
  103. package/dist/session/factory.js.map +1 -0
  104. package/dist/session/health.d.ts +12 -0
  105. package/dist/session/health.d.ts.map +1 -0
  106. package/dist/session/health.js +23 -0
  107. package/dist/session/health.js.map +1 -0
  108. package/dist/session/keys.d.ts +23 -0
  109. package/dist/session/keys.d.ts.map +1 -0
  110. package/dist/session/keys.js +27 -0
  111. package/dist/session/keys.js.map +1 -0
  112. package/dist/session/manager.d.ts +34 -0
  113. package/dist/session/manager.d.ts.map +1 -0
  114. package/dist/session/manager.js +31 -0
  115. package/dist/session/manager.js.map +1 -0
  116. package/dist/session/metrics.d.ts +11 -0
  117. package/dist/session/metrics.d.ts.map +1 -0
  118. package/dist/session/metrics.js +10 -0
  119. package/dist/session/metrics.js.map +1 -0
  120. package/dist/session/repository.d.ts +49 -0
  121. package/dist/session/repository.d.ts.map +1 -0
  122. package/dist/session/repository.js +203 -0
  123. package/dist/session/repository.js.map +1 -0
  124. package/dist/session/revocation.d.ts +22 -0
  125. package/dist/session/revocation.d.ts.map +1 -0
  126. package/dist/session/revocation.js +41 -0
  127. package/dist/session/revocation.js.map +1 -0
  128. package/dist/session/script-sources.d.ts +11 -0
  129. package/dist/session/script-sources.d.ts.map +1 -0
  130. package/dist/session/script-sources.js +140 -0
  131. package/dist/session/script-sources.js.map +1 -0
  132. package/dist/session/scripts.d.ts +15 -0
  133. package/dist/session/scripts.d.ts.map +1 -0
  134. package/dist/session/scripts.js +41 -0
  135. package/dist/session/scripts.js.map +1 -0
  136. package/dist/session/serializer.d.ts +12 -0
  137. package/dist/session/serializer.d.ts.map +1 -0
  138. package/dist/session/serializer.js +77 -0
  139. package/dist/session/serializer.js.map +1 -0
  140. package/dist/session/service.d.ts +48 -0
  141. package/dist/session/service.d.ts.map +1 -0
  142. package/dist/session/service.js +235 -0
  143. package/dist/session/service.js.map +1 -0
  144. package/dist/session/token.d.ts +16 -0
  145. package/dist/session/token.d.ts.map +1 -0
  146. package/dist/session/token.js +32 -0
  147. package/dist/session/token.js.map +1 -0
  148. package/dist/session/types.d.ts +134 -0
  149. package/dist/session/types.d.ts.map +1 -0
  150. package/dist/session/types.js +2 -0
  151. package/dist/session/types.js.map +1 -0
  152. package/dist/streams/config.d.ts +12 -0
  153. package/dist/streams/config.d.ts.map +1 -0
  154. package/dist/streams/config.js +6 -0
  155. package/dist/streams/config.js.map +1 -0
  156. package/dist/streams/streams.d.ts +24 -0
  157. package/dist/streams/streams.d.ts.map +1 -0
  158. package/dist/streams/streams.js +55 -0
  159. package/dist/streams/streams.js.map +1 -0
  160. package/dist/streams/types.d.ts +32 -0
  161. package/dist/streams/types.d.ts.map +1 -0
  162. package/dist/streams/types.js +2 -0
  163. package/dist/streams/types.js.map +1 -0
  164. package/docs/ACCEPTANCE-REPORT.md +70 -0
  165. package/docs/ARCHITECTURE.md +61 -0
  166. package/docs/CAPACITY.md +33 -0
  167. package/docs/DEPLOYMENT.md +22 -0
  168. package/docs/README-API.md +15 -0
  169. package/docs/STATE-MACHINE.md +38 -0
  170. package/docs/TESTING.md +37 -0
  171. package/docs/THREAT-MODEL.md +23 -0
  172. package/docs/TYPE-SAFETY.md +34 -0
  173. package/docs/modules/cache/README.md +7 -0
  174. package/docs/modules/cache/usage.md +156 -0
  175. package/docs/modules/lock/README.md +7 -0
  176. package/docs/modules/lock/usage.md +105 -0
  177. package/docs/modules/pubsub/README.md +7 -0
  178. package/docs/modules/pubsub/usage.md +106 -0
  179. package/docs/modules/rate-limit/README.md +7 -0
  180. package/docs/modules/rate-limit/usage.md +100 -0
  181. package/docs/modules/sessions/README.md +7 -0
  182. package/docs/modules/sessions/usage.md +262 -0
  183. package/docs/modules/streams/README.md +7 -0
  184. package/docs/modules/streams/usage.md +141 -0
  185. package/package.json +50 -60
  186. package/dist/cache.d.ts +0 -797
  187. package/dist/cache.js +0 -1115
  188. package/dist/client.d.ts +0 -287
  189. package/dist/client.js +0 -1113
  190. package/dist/cluster-slot.d.ts +0 -4
  191. package/dist/cluster-slot.js +0 -31
  192. package/dist/cluster.d.ts +0 -79
  193. package/dist/cluster.js +0 -156
  194. package/dist/errors.d.ts +0 -30
  195. package/dist/errors.js +0 -63
  196. package/dist/health.d.ts +0 -180
  197. package/dist/health.js +0 -239
  198. package/dist/lock.d.ts +0 -233
  199. package/dist/lock.js +0 -440
  200. package/dist/logger.d.ts +0 -12
  201. package/dist/logger.js +0 -40
  202. package/dist/pubsub.d.ts +0 -423
  203. package/dist/pubsub.js +0 -537
  204. package/dist/ratelimiter.d.ts +0 -441
  205. package/dist/ratelimiter.js +0 -539
  206. package/dist/session/index.d.ts +0 -23
  207. package/dist/session/index.js +0 -16
  208. package/dist/session/revocation-store.d.ts +0 -176
  209. package/dist/session/revocation-store.js +0 -318
  210. package/dist/session/scripts/cleanup-index.lua +0 -21
  211. package/dist/session/scripts/conditional-update-encrypted.lua +0 -60
  212. package/dist/session/scripts/conditional-update.lua +0 -63
  213. package/dist/session/scripts/create.lua +0 -83
  214. package/dist/session/scripts/delete-by-user.lua +0 -29
  215. package/dist/session/scripts/delete.lua +0 -15
  216. package/dist/session/scripts/enforce-limit.lua +0 -38
  217. package/dist/session/scripts/revoke.lua +0 -61
  218. package/dist/session/scripts/rotate-encrypted.lua +0 -149
  219. package/dist/session/scripts/rotate.lua +0 -167
  220. package/dist/session/scripts/touch-encrypted.lua +0 -89
  221. package/dist/session/scripts/touch.lua +0 -72
  222. package/dist/session/scripts/validate.lua +0 -90
  223. package/dist/session/session-circuit-breaker.d.ts +0 -42
  224. package/dist/session/session-circuit-breaker.js +0 -129
  225. package/dist/session/session-config.d.ts +0 -355
  226. package/dist/session/session-config.js +0 -171
  227. package/dist/session/session-cookie.d.ts +0 -72
  228. package/dist/session/session-cookie.js +0 -101
  229. package/dist/session/session-encryption.d.ts +0 -87
  230. package/dist/session/session-encryption.js +0 -139
  231. package/dist/session/session-errors.d.ts +0 -85
  232. package/dist/session/session-errors.js +0 -145
  233. package/dist/session/session-health.d.ts +0 -38
  234. package/dist/session/session-health.js +0 -60
  235. package/dist/session/session-keys.d.ts +0 -64
  236. package/dist/session/session-keys.js +0 -128
  237. package/dist/session/session-manager.d.ts +0 -73
  238. package/dist/session/session-manager.js +0 -94
  239. package/dist/session/session-metrics.d.ts +0 -41
  240. package/dist/session/session-metrics.js +0 -135
  241. package/dist/session/session-repository.d.ts +0 -184
  242. package/dist/session/session-repository.js +0 -763
  243. package/dist/session/session-scripts.d.ts +0 -36
  244. package/dist/session/session-scripts.js +0 -130
  245. package/dist/session/session-serializer.d.ts +0 -42
  246. package/dist/session/session-serializer.js +0 -267
  247. package/dist/session/session-service.d.ts +0 -123
  248. package/dist/session/session-service.js +0 -670
  249. package/dist/session/session-token.d.ts +0 -38
  250. package/dist/session/session-token.js +0 -86
  251. package/dist/session/session-types.d.ts +0 -281
  252. package/dist/session/session-types.js +0 -16
  253. package/dist/types.d.ts +0 -924
  254. package/dist/types.js +0 -151
  255. package/dist/utils/deepmerge.d.ts +0 -9
  256. package/dist/utils/deepmerge.js +0 -61
package/dist/types.js DELETED
@@ -1,151 +0,0 @@
1
- import { z } from "zod";
2
- export const DistributedLockOptionsSchema = z.object({
3
- ttl: z.coerce.number().int().positive().default(30000),
4
- retryCount: z.coerce.number().int().positive().default(3),
5
- retryDelay: z.coerce.number().int().positive().default(200)
6
- });
7
- export const CacheOptionsSchema = z.object({
8
- defaultTTL: z.number().int().min(0).default(3_600),
9
- compressionThreshold: z.number().int().min(1).default(1_024),
10
- namespace: z.string().default('')
11
- });
12
- // ============================================================================
13
- // Rate Limiting
14
- // ============================================================================
15
- export const RateLimitAlgorithmSchema = z.enum(["fixed", "sliding"]);
16
- export const RateLimitOptionsSchema = z.object({
17
- limit: z.number().int().positive().default(100),
18
- duration: z.number().int().positive().default(60),
19
- algorithm: RateLimitAlgorithmSchema.default("sliding"),
20
- namespace: z.string().min(1).default("ratelimit"),
21
- });
22
- // ============================================================================
23
- // Redis Topology
24
- // ============================================================================
25
- export const RedisModeSchema = z.enum(["standalone", "sentinel", "cluster"]);
26
- export const RedisNodeSchema = z
27
- .object({
28
- host: z.string().min(1),
29
- port: z.number().int().min(1).max(65_535),
30
- })
31
- .strict();
32
- // ============================================================================
33
- // TLS
34
- // ============================================================================
35
- export const RedisTlsOptionsSchema = z
36
- .object({
37
- ca: z.string().optional(),
38
- cert: z.string().optional(),
39
- key: z.string().optional(),
40
- rejectUnauthorized: z.boolean().default(true),
41
- })
42
- .strict();
43
- // ============================================================================
44
- // Session
45
- // ============================================================================
46
- export const SessionOptionsSchema = z.custom();
47
- // ============================================================================
48
- // Common Redis Configuration
49
- // ============================================================================
50
- /**
51
- * Configuration shared by all Redis topologies.
52
- *
53
- * IMPORTANT:
54
- * - This schema describes the user-facing input.
55
- * - `.default()` makes the property optional on input while guaranteeing
56
- * the value exists on output.
57
- */
58
- export const BaseRedisConfigSchema = z
59
- .object({
60
- password: z.string().optional(),
61
- username: z.string().optional(),
62
- database: z.number().int().min(0).max(15).default(0),
63
- tls: z.boolean().default(false),
64
- tlsOptions: RedisTlsOptionsSchema.optional(),
65
- maxRetries: z.number().int().min(0).max(10).default(3),
66
- retryDelay: z.number().int().min(50).max(5_000).default(250),
67
- connectionTimeout: z.number().int().min(100).default(5_000),
68
- maxFanOutConcurrency: z.number().int().min(1).max(128).default(8),
69
- maxBatchSize: z.number().int().min(1).max(10_000).default(500),
70
- lockOptions: DistributedLockOptionsSchema.optional(),
71
- cacheOptions: CacheOptionsSchema.optional(),
72
- slowCommandThreshold: z.number().int().min(0).default(1_000),
73
- rateLimit: RateLimitOptionsSchema.optional(),
74
- // rateLimit: RateLimitOptionsSchema.default({
75
- // algorithm: "sliding",
76
- // duration: 60,
77
- // limit: 100,
78
- // namespace: "ratelimit",
79
- // }),
80
- sessionOptions: z.custom().optional(),
81
- })
82
- .strict();
83
- // ============================================================================
84
- // Standalone Configuration
85
- // ============================================================================
86
- /**
87
- * Standalone Redis configuration.
88
- *
89
- * `mode` is optional on input because standalone is the default topology.
90
- */
91
- export const StandaloneRedisConfigSchema = BaseRedisConfigSchema.extend({
92
- mode: z.literal("standalone").optional(),
93
- host: z.string().min(1).default("localhost"),
94
- port: z.number().int().min(1).max(65_535).default(6379),
95
- url: z.url().optional(),
96
- }).strict();
97
- // ============================================================================
98
- // Sentinel Configuration
99
- // ============================================================================
100
- export const SentinelRedisConfigSchema = BaseRedisConfigSchema.extend({
101
- mode: z.literal("sentinel"),
102
- sentinelNodes: z.array(RedisNodeSchema).min(1),
103
- sentinelMasterName: z.string().min(1),
104
- }).strict();
105
- // ============================================================================
106
- // Cluster Configuration
107
- // ============================================================================
108
- /**
109
- * Redis Cluster only supports database 0.
110
- */
111
- export const ClusterRedisConfigSchema = BaseRedisConfigSchema.extend({
112
- mode: z.literal("cluster"),
113
- clusterNodes: z.array(RedisNodeSchema).min(1),
114
- database: z.literal(0).default(0),
115
- }).strict();
116
- // ============================================================================
117
- // Public Redis Configuration
118
- // ============================================================================
119
- /**
120
- * Raw configuration union.
121
- *
122
- * This is intentionally a normal union rather than a discriminated union
123
- * because standalone allows `mode` to be omitted.
124
- */
125
- export const RedisConfigInputSchema = z.union([
126
- StandaloneRedisConfigSchema,
127
- SentinelRedisConfigSchema,
128
- ClusterRedisConfigSchema,
129
- ]);
130
- /**
131
- * Normalized configuration.
132
- *
133
- * After parsing:
134
- *
135
- * - standalone.mode === "standalone"
136
- * - sentinel.mode === "sentinel"
137
- * - cluster.mode === "cluster"
138
- * - defaults have been materialized
139
- */
140
- export const RedisConfigSchema = RedisConfigInputSchema.transform((config) => {
141
- if (config.mode === "sentinel") {
142
- return config;
143
- }
144
- if (config.mode === "cluster") {
145
- return config;
146
- }
147
- return {
148
- ...config,
149
- mode: "standalone",
150
- };
151
- });
@@ -1,9 +0,0 @@
1
- type Builtin = Date | RegExp | Map<unknown, unknown> | Set<unknown> | WeakMap<object, unknown> | WeakSet<object> | Promise<unknown> | Error;
2
- type DeepMerge<T, U> = T extends Builtin ? U : U extends Builtin ? U : T extends readonly unknown[] ? U : U extends readonly unknown[] ? U : T extends object ? U extends object ? {
3
- [K in keyof T | keyof U]: K extends keyof U ? K extends keyof T ? DeepMerge<T[K], U[K]> : U[K] : K extends keyof T ? T[K] : never;
4
- } : U : U;
5
- export declare function deepMerge<T extends object>(target: T): T;
6
- export declare function deepMerge<T extends object, U extends object>(target: T, source: U): DeepMerge<T, U>;
7
- export declare function deepMerge<T extends object, U extends object, V extends object>(target: T, source: U, source2: V): DeepMerge<DeepMerge<T, U>, V>;
8
- export declare function deepMerge<T extends object, U extends object, V extends object, W extends object>(target: T, source: U, source2: V, source3: W): DeepMerge<DeepMerge<DeepMerge<T, U>, V>, W>;
9
- export {};
@@ -1,61 +0,0 @@
1
- const BLOCKED_KEYS = new Set(["__proto__", "prototype", "constructor"]);
2
- function isBlockedKey(key) {
3
- return typeof key === "string" && BLOCKED_KEYS.has(key);
4
- }
5
- function isPlainObject(value) {
6
- if (value === null || typeof value !== "object") {
7
- return false;
8
- }
9
- const prototype = Object.getPrototypeOf(value);
10
- return prototype === Object.prototype || prototype === null;
11
- }
12
- function deepMergeTwo(target, source) {
13
- // Non-objects and special objects are replaced.
14
- if (!isPlainObject(target) || !isPlainObject(source)) {
15
- return source;
16
- }
17
- const result = Object.create(Object.getPrototypeOf(target));
18
- // Copy target.
19
- for (const key of Reflect.ownKeys(target)) {
20
- if (isBlockedKey(key)) {
21
- continue;
22
- }
23
- const descriptor = Object.getOwnPropertyDescriptor(target, key);
24
- if (descriptor) {
25
- Object.defineProperty(result, key, descriptor);
26
- }
27
- }
28
- // Merge source.
29
- for (const key of Reflect.ownKeys(source)) {
30
- if (isBlockedKey(key)) {
31
- continue;
32
- }
33
- const sourceDescriptor = Object.getOwnPropertyDescriptor(source, key);
34
- if (!sourceDescriptor) {
35
- continue;
36
- }
37
- const sourceValue = sourceDescriptor.value;
38
- const targetDescriptor = Object.getOwnPropertyDescriptor(target, key);
39
- const targetValue = targetDescriptor?.value;
40
- if (targetDescriptor &&
41
- "value" in targetDescriptor &&
42
- isPlainObject(targetValue) &&
43
- isPlainObject(sourceValue)) {
44
- Object.defineProperty(result, key, {
45
- ...sourceDescriptor,
46
- value: deepMergeTwo(targetValue, sourceValue),
47
- });
48
- }
49
- else {
50
- Object.defineProperty(result, key, sourceDescriptor);
51
- }
52
- }
53
- return result;
54
- }
55
- export function deepMerge(target, ...sources) {
56
- let result = target;
57
- for (const source of sources) {
58
- result = deepMergeTwo(result, source);
59
- }
60
- return result;
61
- }