import { createClient } from "redis"; import localStorage from "local-storage"; import config from "../config/index.js"; import { logger } from "./index.js"; import Promise from "promise"; const store = await createStore(); async function createStore() { if (config.store.provider === "redis") { return { client: await createRedisClient(), set: async function (key, value) { return this.client.hSet(key, value); }, get: async function (key) { return this.client.hGetAll(key); }, }; } else { return { set: function (key, value) { return new Promise(function (resolve, reject) { if (localStorage(key, value)) resolve(true); else reject(Error("unable to set using local-storage")); }); }, get: function (key) { return new Promise(function (resolve) { resolve(localStorage(key)); }); }, }; } } async function createRedisClient() { const client = createClient({ url: config.store.url, }); client.on("error", (err) => { if (err.errors) { err.errors.forEach((error) => { logger.error(`Redis Client Error ${error}`); }); } else { logger.error(`Redis Client Error ${err.message}`); } }); await client.connect(); logger.info(`Connect store to ${config.redis.url}`); return client; } export default store;