Files
speckle-server/packages/server/modules/shared/redis/redis.ts
T
Kristaps Fabians Geikins 4b06f42db7 chore(server): run TS files directly (no compilation) (#5134)
* sort of works

* type fixes

* added option to run old way too
2025-07-23 11:20:40 +02:00

38 lines
1.3 KiB
TypeScript

import { redisLogger } from '@/observability/logging'
import type { RedisOptions } from 'ioredis'
import Redis from 'ioredis'
import {
EnvironmentResourceError,
MisconfiguredEnvironmentError
} from '@/modules/shared/errors'
import { getRedisUrl } from '@/modules/shared/helpers/envHelper'
export function createRedisClient(redisUrl: string, redisOptions: RedisOptions): Redis {
let redisClient: Redis
try {
redisClient = new Redis(redisUrl, redisOptions)
redisClient.on('error', (err) => {
redisLogger.error(err, 'Redis encountered an error.')
if (err instanceof Error) {
throw new EnvironmentResourceError('Redis encountered an error.', err) //FIXME backoff and retry?
}
throw new EnvironmentResourceError('Redis encountered an error.') //FIXME backoff and retry?
})
} catch (err) {
redisLogger.error(err, 'Could not create Redis client')
if (err instanceof Error) {
throw new MisconfiguredEnvironmentError('Unable to connect to Redis.', err) //FIXME backoff and retry?
}
throw new MisconfiguredEnvironmentError('Unable to connect to Redis.') //FIXME backoff and retry?
}
return redisClient
}
let redisClient: Redis | undefined = undefined
export const getGenericRedis = (): Redis => {
if (!redisClient) redisClient = createRedisClient(getRedisUrl(), {})
return redisClient
}