@beignet/provider-redis 0.0.3 → 0.0.5

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/dist/index.js CHANGED
@@ -6,6 +6,9 @@
6
6
  * Configuration:
7
7
  * - REDIS_URL: Redis connection URL (required)
8
8
  * - REDIS_DB: Redis database number (optional, default: 0)
9
+ * - REDIS_CONNECT_TIMEOUT_MS: Initial connection timeout in milliseconds (optional, default: 5000)
10
+ * - REDIS_MAX_RETRIES_PER_REQUEST: Per-command retry limit (optional, default: 2)
11
+ * - REDIS_CONNECT_MAX_ATTEMPTS: Connection attempts before startup fails (optional, default: 3)
9
12
  *
10
13
  * @example
11
14
  * ```ts
@@ -29,8 +32,16 @@
29
32
  * ```
30
33
  */
31
34
  import { createProvider, createProviderInstrumentation, } from "@beignet/core/providers";
32
- import Redis from "ioredis";
35
+ import { Redis } from "ioredis";
33
36
  import { z } from "zod";
37
+ const DEFAULT_CONNECT_TIMEOUT_MS = 5000;
38
+ const DEFAULT_MAX_RETRIES_PER_REQUEST = 2;
39
+ const DEFAULT_CONNECT_MAX_ATTEMPTS = 3;
40
+ const RECONNECT_BACKOFF_CAP_MS = 2000;
41
+ const NumberString = z
42
+ .string()
43
+ .regex(/^\d+$/, "Expected a non-negative integer string")
44
+ .transform((value) => Number.parseInt(value, 10));
34
45
  /**
35
46
  * Configuration schema for the Redis provider.
36
47
  * Validates environment variables with REDIS_ prefix.
@@ -45,251 +56,324 @@ const RedisConfigSchema = z.object({
45
56
  * Redis database number (optional).
46
57
  * Defaults to 0 if not specified.
47
58
  */
48
- DB: z.coerce.number().int().min(0).optional(),
59
+ DB: NumberString.optional(),
60
+ /**
61
+ * Timeout for the initial connection attempt, in milliseconds.
62
+ * Defaults to 5000.
63
+ */
64
+ CONNECT_TIMEOUT_MS: NumberString.default(DEFAULT_CONNECT_TIMEOUT_MS),
65
+ /**
66
+ * How many times a single command is retried before its promise rejects.
67
+ * Defaults to 2.
68
+ */
69
+ MAX_RETRIES_PER_REQUEST: NumberString.default(DEFAULT_MAX_RETRIES_PER_REQUEST),
70
+ /**
71
+ * Connection attempts allowed before startup `connect()` rejects.
72
+ * Defaults to 3.
73
+ */
74
+ CONNECT_MAX_ATTEMPTS: NumberString.default(DEFAULT_CONNECT_MAX_ATTEMPTS),
49
75
  });
50
76
  function errorMessage(error) {
51
77
  return error instanceof Error ? error.message : String(error);
52
78
  }
79
+ function reconnectBackoff(attempt) {
80
+ return Math.min(2 ** attempt * 100, RECONNECT_BACKOFF_CAP_MS);
81
+ }
53
82
  /**
54
- * Redis provider that extends ports with cache capabilities.
83
+ * Create an env-backed Redis cache provider.
55
84
  *
56
- * Configuration via environment variables:
57
- * - REDIS_URL: Redis connection URL (required)
58
- * - REDIS_DB: Redis database number (optional)
85
+ * Reads `REDIS_*` env vars, contributes `ports.cache`, and exposes
86
+ * `ports.redis` for raw ioredis client access.
59
87
  *
60
88
  * @example
61
89
  * ```ts
62
- * const server = await createNextServer({
63
- * ports: basePorts,
64
- * providers: [redisProvider],
65
- * // ...
66
- * });
90
+ * const provider = createRedisProvider({ connectTimeoutMs: 2000 });
67
91
  * ```
68
92
  */
69
- export const redisProvider = createProvider({
70
- name: "redis",
71
- config: {
72
- schema: RedisConfigSchema,
73
- envPrefix: "REDIS_",
74
- },
75
- async setup({ ports, config }) {
76
- if (!config) {
77
- throw new Error("[redisProvider] Missing Redis config. " +
78
- "Please set REDIS_URL environment variable.");
79
- }
80
- // Create Redis client
81
- const client = new Redis(config.URL, {
82
- db: config.DB ?? 0,
83
- // Prevent ioredis from logging connection errors to console
84
- // (we'll handle errors in the application)
85
- lazyConnect: true,
86
- });
87
- // Test connection
88
- try {
89
- await client.connect();
90
- }
91
- catch (error) {
92
- throw new Error(`[redisProvider] Failed to connect to Redis at ${config.URL}: ${error instanceof Error ? error.message : String(error)}`);
93
- }
94
- const instrumentation = createProviderInstrumentation(ports, {
95
- providerName: "redis",
96
- watcher: "cache",
97
- });
98
- const recordCacheEvent = (event) => {
99
- instrumentation.custom({
100
- name: `cache.${event.operation}`,
101
- label: `Cache ${event.operation}`,
102
- summary: event.summary,
103
- details: {
104
- operation: event.operation,
105
- key: event.key,
106
- ...event.details,
107
- },
108
- });
109
- };
110
- // Extend ports with cache API
111
- const cache = {
112
- get: async (key) => {
113
- const startedAt = Date.now();
114
- try {
115
- const value = await client.get(key);
116
- recordCacheEvent({
117
- operation: "get",
118
- key,
119
- summary: value == null ? "Cache miss" : "Cache hit",
120
- details: {
121
- hit: value != null,
122
- durationMs: Date.now() - startedAt,
123
- },
124
- });
125
- return value;
126
- }
127
- catch (error) {
128
- recordCacheEvent({
129
- operation: "get.failed",
130
- key,
131
- summary: "Cache get failed",
132
- details: {
133
- durationMs: Date.now() - startedAt,
134
- error: errorMessage(error),
135
- },
136
- });
137
- throw error;
93
+ export function createRedisProvider(options = {}) {
94
+ const ConfigSchema = RedisConfigSchema.extend({
95
+ DB: options.db !== undefined
96
+ ? NumberString.default(options.db)
97
+ : RedisConfigSchema.shape.DB,
98
+ CONNECT_TIMEOUT_MS: options.connectTimeoutMs !== undefined
99
+ ? NumberString.default(options.connectTimeoutMs)
100
+ : RedisConfigSchema.shape.CONNECT_TIMEOUT_MS,
101
+ MAX_RETRIES_PER_REQUEST: options.maxRetriesPerRequest !== undefined
102
+ ? NumberString.default(options.maxRetriesPerRequest)
103
+ : RedisConfigSchema.shape.MAX_RETRIES_PER_REQUEST,
104
+ });
105
+ return createProvider({
106
+ name: "redis",
107
+ config: {
108
+ schema: ConfigSchema,
109
+ envPrefix: "REDIS_",
110
+ },
111
+ async setup({ ports, config }) {
112
+ if (!config) {
113
+ throw new Error("[redisProvider] Missing Redis config. " +
114
+ "Please set REDIS_URL environment variable.");
115
+ }
116
+ const connectMaxAttempts = config.CONNECT_MAX_ATTEMPTS ?? DEFAULT_CONNECT_MAX_ATTEMPTS;
117
+ // ioredis uses a single retryStrategy for both the initial connect and
118
+ // later reconnects, so track whether the first connect ever succeeded.
119
+ let connectedOnce = false;
120
+ const defaultRetryStrategy = (attempt) => {
121
+ if (!connectedOnce) {
122
+ // Stop retrying during the initial connect so `connect()` below
123
+ // rejects promptly instead of hanging against an unreachable host.
124
+ if (attempt >= connectMaxAttempts) {
125
+ return null;
126
+ }
127
+ return reconnectBackoff(attempt);
138
128
  }
139
- },
140
- set: async (key, value, options) => {
141
- const startedAt = Date.now();
142
- try {
143
- if (options?.ttlSeconds != null && options.ttlSeconds > 0) {
144
- await client.set(key, value, "EX", options.ttlSeconds);
129
+ // After a successful connection, keep reconnecting with capped
130
+ // exponential backoff.
131
+ return reconnectBackoff(attempt);
132
+ };
133
+ const client = new Redis(config.URL, {
134
+ db: config.DB ?? options.db ?? 0,
135
+ // Defer connecting until the explicit connect() below so startup can
136
+ // surface a clear error instead of connecting in the background.
137
+ lazyConnect: true,
138
+ connectTimeout: config.CONNECT_TIMEOUT_MS ??
139
+ options.connectTimeoutMs ??
140
+ DEFAULT_CONNECT_TIMEOUT_MS,
141
+ maxRetriesPerRequest: config.MAX_RETRIES_PER_REQUEST ??
142
+ options.maxRetriesPerRequest ??
143
+ DEFAULT_MAX_RETRIES_PER_REQUEST,
144
+ retryStrategy: options.retryStrategy ?? defaultRetryStrategy,
145
+ });
146
+ // Test connection
147
+ try {
148
+ await client.connect();
149
+ connectedOnce = true;
150
+ }
151
+ catch (error) {
152
+ client.disconnect();
153
+ throw new Error(`[redisProvider] Failed to connect to Redis at ${config.URL}: ${error instanceof Error ? error.message : String(error)}`);
154
+ }
155
+ const instrumentation = createProviderInstrumentation(ports, {
156
+ providerName: "redis",
157
+ watcher: "cache",
158
+ });
159
+ const recordCacheEvent = (event) => {
160
+ instrumentation.custom({
161
+ name: `cache.${event.operation}`,
162
+ label: `Cache ${event.operation}`,
163
+ summary: event.summary,
164
+ details: {
165
+ operation: event.operation,
166
+ key: event.key,
167
+ ...event.details,
168
+ },
169
+ });
170
+ };
171
+ // Extend ports with cache API
172
+ const cache = {
173
+ get: async (key) => {
174
+ const startedAt = Date.now();
175
+ try {
176
+ const value = await client.get(key);
177
+ recordCacheEvent({
178
+ operation: "get",
179
+ key,
180
+ summary: value == null ? "Cache miss" : "Cache hit",
181
+ details: {
182
+ hit: value != null,
183
+ durationMs: Date.now() - startedAt,
184
+ },
185
+ });
186
+ return value;
187
+ }
188
+ catch (error) {
189
+ recordCacheEvent({
190
+ operation: "get.failed",
191
+ key,
192
+ summary: "Cache get failed",
193
+ details: {
194
+ durationMs: Date.now() - startedAt,
195
+ error: errorMessage(error),
196
+ },
197
+ });
198
+ throw error;
145
199
  }
146
- else {
147
- await client.set(key, value);
200
+ },
201
+ set: async (key, value, options) => {
202
+ const startedAt = Date.now();
203
+ try {
204
+ if (options?.ttlSeconds != null && options.ttlSeconds > 0) {
205
+ await client.set(key, value, "EX", options.ttlSeconds);
206
+ }
207
+ else {
208
+ await client.set(key, value);
209
+ }
210
+ recordCacheEvent({
211
+ operation: "set",
212
+ key,
213
+ summary: "Cache set",
214
+ details: {
215
+ ttlSeconds: options?.ttlSeconds ?? null,
216
+ durationMs: Date.now() - startedAt,
217
+ },
218
+ });
148
219
  }
149
- recordCacheEvent({
150
- operation: "set",
151
- key,
152
- summary: "Cache set",
153
- details: {
154
- ttlSeconds: options?.ttlSeconds ?? null,
155
- durationMs: Date.now() - startedAt,
156
- },
157
- });
158
- }
159
- catch (error) {
160
- recordCacheEvent({
161
- operation: "set.failed",
162
- key,
163
- summary: "Cache set failed",
164
- details: {
165
- ttlSeconds: options?.ttlSeconds ?? null,
166
- durationMs: Date.now() - startedAt,
167
- error: errorMessage(error),
168
- },
169
- });
170
- throw error;
171
- }
172
- },
173
- delete: async (key) => {
174
- const startedAt = Date.now();
175
- try {
176
- const deleted = (await client.del(key)) > 0;
177
- recordCacheEvent({
178
- operation: "delete",
179
- key,
180
- summary: deleted ? "Cache key deleted" : "Cache key missing",
181
- details: {
182
- deleted,
183
- durationMs: Date.now() - startedAt,
184
- },
185
- });
186
- return deleted;
187
- }
188
- catch (error) {
189
- recordCacheEvent({
190
- operation: "delete.failed",
191
- key,
192
- summary: "Cache delete failed",
193
- details: {
194
- durationMs: Date.now() - startedAt,
195
- error: errorMessage(error),
196
- },
197
- });
198
- throw error;
199
- }
200
- },
201
- has: async (key) => {
202
- const startedAt = Date.now();
203
- try {
204
- const result = await client.exists(key);
205
- const exists = result === 1;
206
- recordCacheEvent({
207
- operation: "has",
208
- key,
209
- summary: exists ? "Cache key exists" : "Cache key missing",
210
- details: {
211
- exists,
212
- durationMs: Date.now() - startedAt,
213
- },
214
- });
215
- return exists;
216
- }
217
- catch (error) {
218
- recordCacheEvent({
219
- operation: "has.failed",
220
- key,
221
- summary: "Cache has failed",
222
- details: {
223
- durationMs: Date.now() - startedAt,
224
- error: errorMessage(error),
225
- },
226
- });
227
- throw error;
228
- }
229
- },
230
- remember: async (key, factory, options) => {
231
- const startedAt = Date.now();
232
- try {
233
- const cached = await client.get(key);
234
- if (cached != null) {
220
+ catch (error) {
221
+ recordCacheEvent({
222
+ operation: "set.failed",
223
+ key,
224
+ summary: "Cache set failed",
225
+ details: {
226
+ ttlSeconds: options?.ttlSeconds ?? null,
227
+ durationMs: Date.now() - startedAt,
228
+ error: errorMessage(error),
229
+ },
230
+ });
231
+ throw error;
232
+ }
233
+ },
234
+ delete: async (key) => {
235
+ const startedAt = Date.now();
236
+ try {
237
+ const deleted = (await client.del(key)) > 0;
238
+ recordCacheEvent({
239
+ operation: "delete",
240
+ key,
241
+ summary: deleted ? "Cache key deleted" : "Cache key missing",
242
+ details: {
243
+ deleted,
244
+ durationMs: Date.now() - startedAt,
245
+ },
246
+ });
247
+ return deleted;
248
+ }
249
+ catch (error) {
250
+ recordCacheEvent({
251
+ operation: "delete.failed",
252
+ key,
253
+ summary: "Cache delete failed",
254
+ details: {
255
+ durationMs: Date.now() - startedAt,
256
+ error: errorMessage(error),
257
+ },
258
+ });
259
+ throw error;
260
+ }
261
+ },
262
+ has: async (key) => {
263
+ const startedAt = Date.now();
264
+ try {
265
+ const result = await client.exists(key);
266
+ const exists = result === 1;
267
+ recordCacheEvent({
268
+ operation: "has",
269
+ key,
270
+ summary: exists ? "Cache key exists" : "Cache key missing",
271
+ details: {
272
+ exists,
273
+ durationMs: Date.now() - startedAt,
274
+ },
275
+ });
276
+ return exists;
277
+ }
278
+ catch (error) {
279
+ recordCacheEvent({
280
+ operation: "has.failed",
281
+ key,
282
+ summary: "Cache has failed",
283
+ details: {
284
+ durationMs: Date.now() - startedAt,
285
+ error: errorMessage(error),
286
+ },
287
+ });
288
+ throw error;
289
+ }
290
+ },
291
+ remember: async (key, factory, options) => {
292
+ const startedAt = Date.now();
293
+ try {
294
+ const cached = await client.get(key);
295
+ if (cached != null) {
296
+ recordCacheEvent({
297
+ operation: "remember",
298
+ key,
299
+ summary: "Cache remember hit",
300
+ details: {
301
+ hit: true,
302
+ ttlSeconds: options?.ttlSeconds ?? null,
303
+ durationMs: Date.now() - startedAt,
304
+ },
305
+ });
306
+ return cached;
307
+ }
308
+ const value = await factory();
309
+ if (options?.ttlSeconds != null && options.ttlSeconds > 0) {
310
+ await client.set(key, value, "EX", options.ttlSeconds);
311
+ }
312
+ else {
313
+ await client.set(key, value);
314
+ }
235
315
  recordCacheEvent({
236
316
  operation: "remember",
237
317
  key,
238
- summary: "Cache remember hit",
318
+ summary: "Cache remember miss",
239
319
  details: {
240
- hit: true,
320
+ hit: false,
241
321
  ttlSeconds: options?.ttlSeconds ?? null,
242
322
  durationMs: Date.now() - startedAt,
243
323
  },
244
324
  });
245
- return cached;
325
+ return value;
246
326
  }
247
- const value = await factory();
248
- if (options?.ttlSeconds != null && options.ttlSeconds > 0) {
249
- await client.set(key, value, "EX", options.ttlSeconds);
327
+ catch (error) {
328
+ recordCacheEvent({
329
+ operation: "remember.failed",
330
+ key,
331
+ summary: "Cache remember failed",
332
+ details: {
333
+ ttlSeconds: options?.ttlSeconds ?? null,
334
+ durationMs: Date.now() - startedAt,
335
+ error: errorMessage(error),
336
+ },
337
+ });
338
+ throw error;
250
339
  }
251
- else {
252
- await client.set(key, value);
340
+ },
341
+ };
342
+ return {
343
+ ports: {
344
+ cache,
345
+ redis: { client },
346
+ },
347
+ async stop() {
348
+ try {
349
+ await client.quit();
253
350
  }
254
- recordCacheEvent({
255
- operation: "remember",
256
- key,
257
- summary: "Cache remember miss",
258
- details: {
259
- hit: false,
260
- ttlSeconds: options?.ttlSeconds ?? null,
261
- durationMs: Date.now() - startedAt,
262
- },
263
- });
264
- return value;
265
- }
266
- catch (error) {
267
- recordCacheEvent({
268
- operation: "remember.failed",
269
- key,
270
- summary: "Cache remember failed",
271
- details: {
272
- ttlSeconds: options?.ttlSeconds ?? null,
273
- durationMs: Date.now() - startedAt,
274
- error: errorMessage(error),
275
- },
276
- });
277
- throw error;
278
- }
279
- },
280
- client,
281
- };
282
- return {
283
- ports: { cache },
284
- async stop() {
285
- try {
286
- await client.quit();
287
- }
288
- catch {
289
- // Silently ignore errors during shutdown
290
- }
291
- },
292
- };
293
- },
294
- });
351
+ catch {
352
+ // Silently ignore errors during shutdown
353
+ }
354
+ },
355
+ };
356
+ },
357
+ });
358
+ }
359
+ /**
360
+ * Default env-backed Redis provider.
361
+ *
362
+ * Configuration via environment variables:
363
+ * - REDIS_URL: Redis connection URL (required)
364
+ * - REDIS_DB: Redis database number (optional)
365
+ * - REDIS_CONNECT_TIMEOUT_MS: Initial connection timeout in ms (optional)
366
+ * - REDIS_MAX_RETRIES_PER_REQUEST: Per-command retry limit (optional)
367
+ * - REDIS_CONNECT_MAX_ATTEMPTS: Connection attempts before startup fails (optional)
368
+ *
369
+ * @example
370
+ * ```ts
371
+ * const server = await createNextServer({
372
+ * ports: basePorts,
373
+ * providers: [redisProvider],
374
+ * // ...
375
+ * });
376
+ * ```
377
+ */
378
+ export const redisProvider = createRedisProvider();
295
379
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}