From 6bdb2544783d7a7e810fcaac48ebf6efbed966ec Mon Sep 17 00:00:00 2001 From: Deepak kudi Date: Thu, 4 Jun 2026 13:37:24 +0530 Subject: [PATCH] fix(client): accept boolean TLS socket options --- packages/client/lib/client/socket.ts | 16 +++++++++------- .../types-tests/create-client.types-test.ts | 12 ++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/client/lib/client/socket.ts b/packages/client/lib/client/socket.ts index 9d0b0620766..0bf8f84cdac 100644 --- a/packages/client/lib/client/socket.ts +++ b/packages/client/lib/client/socket.ts @@ -40,7 +40,7 @@ type RedisTcpOptions = RedisSocketOptionsCommon & NetOptions & Omit< }; type RedisTlsOptions = RedisSocketOptionsCommon & tls.ConnectionOptions & { - tls: true; + tls: boolean; } type RedisIpcOptions = RedisSocketOptionsCommon & Omit< @@ -170,8 +170,9 @@ export default class RedisSocket extends EventEmitter { // IPC if (options && 'path' in options) { + const ipcOptions = options as RedisIpcOptions; const withDefaults: net.IpcNetConnectOpts = { - ...options, + ...ipcOptions, timeout: undefined, onread: undefined, readable: true, @@ -186,12 +187,13 @@ export default class RedisSocket extends EventEmitter { } // TCP + const tcpOptions = options as RedisTcpOptions | undefined; const withDefaults: net.TcpNetConnectOpts = { - ...options, - port: options?.port ?? 6379, - noDelay: options?.noDelay ?? true, - keepAlive: options?.keepAlive ?? true, - keepAliveInitialDelay: options?.keepAliveInitialDelay ?? DEFAULT_KEEPALIVE_INITIAL_DELAY, + ...tcpOptions, + port: tcpOptions?.port ?? 6379, + noDelay: tcpOptions?.noDelay ?? true, + keepAlive: tcpOptions?.keepAlive ?? true, + keepAliveInitialDelay: tcpOptions?.keepAliveInitialDelay ?? DEFAULT_KEEPALIVE_INITIAL_DELAY, timeout: undefined, onread: undefined, readable: true, diff --git a/packages/client/types-tests/create-client.types-test.ts b/packages/client/types-tests/create-client.types-test.ts index f4e48e7be83..5ca650d37a2 100644 --- a/packages/client/types-tests/create-client.types-test.ts +++ b/packages/client/types-tests/create-client.types-test.ts @@ -112,6 +112,18 @@ export function createRedisClientPool( return createClientPool(clientOptions, poolOptions); } +// Regression for #3113/#3023: common Heroku-style rediss configuration uses a +// runtime boolean to decide whether TLS is enabled. +export function createHerokuRedisClient(redisUrl = 'redis://127.0.0.1:6379'): RedisClientType { + return createClient({ + url: redisUrl, + socket: { + tls: redisUrl.match(/rediss:/) != null, + rejectUnauthorized: false + } + }); +} + // Cluster and sentinel function-signature patterns are intentionally omitted: // the `*Options` interfaces default `M`/`F`/`S` to `RedisModules`/etc. (wide) // while the `*Type` aliases default them to `{}` (narrow). That mismatch is