allow redis family to be specified as a string

This makes it consistent with `outgoingAddressFamily`, reducing
potential confusion.

For compatibility reasons, numbers are still permitted for `redis.family`
with the following mapping:
- `dual` = `0`
- `ipv4` = `4`
- `ipv6` = `6`

Changelog: Changed
This commit is contained in:
Norm 2022-09-19 23:50:48 -04:00
parent 59adb0b6e2
commit 5a52532c99
Signed by untrusted user: norm
GPG key ID: 7123E30E441E80DE
3 changed files with 21 additions and 6 deletions

View file

@ -57,7 +57,7 @@ db:
redis: redis:
host: localhost host: localhost
port: 6379 port: 6379
#family: 0 # 0=Both, 4=IPv4, 6=IPv6 #family: dual # can be either a number or string (0/dual, 4/ipv4, 6/ipv6)
#pass: example-pass #pass: example-pass
#prefix: example-prefix #prefix: example-prefix
#db: 1 #db: 1

View file

@ -1,5 +1,10 @@
/** /**
* * IP address family
*/
export type IpFamily = 'ipv4' | 'ipv6' | 'dual';
/**
* Configuration options set up by the user
*/ */
export type Source = { export type Source = {
repository_url?: string; repository_url?: string;
@ -19,7 +24,7 @@ export type Source = {
redis: { redis: {
host: string; host: string;
port: number; port: number;
family?: number; family?: number | IpFamily;
pass: string; pass: string;
db?: number; db?: number;
prefix?: string; prefix?: string;
@ -47,7 +52,7 @@ export type Source = {
id: string; id: string;
outgoingAddressFamily?: 'ipv4' | 'ipv6' | 'dual'; outgoingAddressFamily?: IpFamily;
deliverJobConcurrency?: number; deliverJobConcurrency?: number;
inboxJobConcurrency?: number; inboxJobConcurrency?: number;

View file

@ -1,11 +1,21 @@
import Redis from 'ioredis'; import Redis from 'ioredis';
import config from '@/config/index.js'; import config from '@/config/index.js';
import { IpFamily } from '@/config/types.js';
export function createConnection() { function getRedisFamily(family?: IpFamily | number): number {
switch (family) {
case 'ipv4': return 4;
case 'ipv6': return 6;
case 'dual': return 0;
default: return family ?? 0;
}
}
export function createConnection(): Redis.Redis {
return new Redis({ return new Redis({
port: config.redis.port, port: config.redis.port,
host: config.redis.host, host: config.redis.host,
family: config.redis.family ?? 0, family: getRedisFamily(config.redis.family),
password: config.redis.pass, password: config.redis.pass,
keyPrefix: `${config.redis.prefix}:`, keyPrefix: `${config.redis.prefix}:`,
db: config.redis.db || 0, db: config.redis.db || 0,