@ixily/activ
Version:
Alpha Capture Trade Idea Verification. Blockchain ownership proven trade ideas and strategies.
112 lines • 3.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CacheNodeRedisStorageModule = exports.resetData = exports.removeDataByPattern = exports.removeData = exports.updateData = exports.getData = exports.addData = void 0;
const activ_v4_1 = require("../../activ-v4");
let logged = false;
let redis;
let client;
const DEFAULT_EXPIRATION = 300; // 5 minutes
const state = {
dbParams: {
provider: 'redis',
},
isBrowser: false,
};
const config = async (_config) => {
if (_config.dbParams === undefined) {
throw new Error('Redis instance dbparams are not defined');
}
if (_config.dbParams.redisSettings === undefined) {
throw new Error('Redis settings in dbparams are not defined');
}
if (_config.dbParams.redisSettings.instance === undefined) {
throw new Error('Redis instance in dbparams are not defined');
}
state.dbParams = _config.dbParams;
state.isBrowser = _config.isBrowser;
redis = state.dbParams.redisSettings.instance;
if ((0, activ_v4_1.isNullOrUndefined)(redis)) {
throw new Error('Redis instance is not defined');
}
if (!(0, activ_v4_1.isNullOrUndefined)(redis) && (0, activ_v4_1.isNullOrUndefined)(client)) {
try {
client = redis?.createClient({
url: state.dbParams?.redisSettings?.url,
password: state.dbParams?.redisSettings?.password,
database: state.dbParams?.redisSettings?.database,
disableOfflineQueue: true,
});
client.on('error', (error) => {
console.error(`REDIS Error : ${error}`);
if (!logged) {
logged = true;
}
});
await client.connect();
}
catch (err) {
console.error(`REDIS Error : ${err}`);
}
}
};
const addData = async (key, data, expiration = DEFAULT_EXPIRATION) => {
const payload = data ? JSON.stringify({ key, data, expiration }) : null;
if (payload) {
await client.set(key, payload);
if (expiration > 0) {
await client.expire(key, expiration);
}
}
return Promise.resolve();
};
exports.addData = addData;
const getData = async (key) => {
const info = await client.get(key);
if ((0, activ_v4_1.isNullOrUndefined)(info)) {
return undefined;
}
const result = JSON.parse(info);
const dataParsed = result?.data ? result.data : undefined;
if (dataParsed === null) {
return undefined;
}
return dataParsed;
};
exports.getData = getData;
const updateData = async (key, data, expiration = DEFAULT_EXPIRATION) => {
await client.del(key);
await client.set(key, JSON.stringify({ key, data, expiration }));
if (expiration > 0) {
await client.expire(key, expiration);
}
return Promise.resolve();
};
exports.updateData = updateData;
const removeData = async (key) => {
await client.del(key);
return Promise.resolve();
};
exports.removeData = removeData;
const removeDataByPattern = async (pattern) => {
const data = await client.keys(`*${pattern}*`);
data?.map(async (key) => {
await (0, exports.removeData)(key);
});
return Promise.resolve();
};
exports.removeDataByPattern = removeDataByPattern;
const resetData = async () => {
await client.flushAll();
return Promise.resolve();
};
exports.resetData = resetData;
exports.CacheNodeRedisStorageModule = {
config,
addData: exports.addData,
getData: exports.getData,
updateData: exports.updateData,
removeData: exports.removeData,
removeDataByPattern: exports.removeDataByPattern,
resetData: exports.resetData,
};
//# sourceMappingURL=redis-provider.module.js.map