2024-03-05 10:20:36 +00:00

60 lines
1.4 KiB
JavaScript
Executable File

import { createClient } from "redis"
import { createAdapter } from "@socket.io/redis-adapter"
function composeURL() {
// support for auth
let url = "redis://"
url += process.env.REDIS_HOST ?? "localhost"
if (process.env.REDIS_PORT) {
url += ":" + process.env.REDIS_PORT
}
return url
}
export default ({
withWsAdapter = false
} = {}) => {
let clientOpts = {
url: composeURL(),
}
if (!process.env.REDIS_NO_AUTH) {
if (process.env.REDIS_PASSWORD) {
clientOpts.password = process.env.REDIS_PASSWORD
}
if (process.env.REDIS_USERNAME) {
clientOpts.username = process.env.REDIS_USERNAME
}
}
let client = createClient(clientOpts)
if (withWsAdapter) {
client.subClient = client.duplicate()
client.ioAdapter = global.ioAdapter = createAdapter(client, client.subClient)
}
client.initialize = async () => {
console.log("🔌 Connecting to Redis client...")
await client.connect()
return client
}
// handle when client disconnects unexpectedly to avoid main crash
client.on("error", (error) => {
console.error("❌ Redis client error:", error)
})
// handle when client connects
client.on("connect", () => {
console.log("✅ Redis client connected.", process.env.REDIS_HOST)
})
return client
}