diff --git a/keyserver/src/utils/redis-cache.js b/keyserver/src/utils/redis-cache.js --- a/keyserver/src/utils/redis-cache.js +++ b/keyserver/src/utils/redis-cache.js @@ -4,6 +4,7 @@ import redis from 'redis'; import type { NeynarChannel } from 'lib/types/farcaster-types.js'; +import type { Identity } from 'lib/types/identity-service-types.js'; import { redisConfig } from '../socket/redis.js'; @@ -44,6 +45,37 @@ }); }); } + + setUserIdentity(userID: string, userIdentity: Identity): Promise { + const stringifiedUserIdentity = JSON.stringify(userIdentity); + return new Promise((resolve, reject) => { + this.cacheClient.set( + `user:${userID}`, + stringifiedUserIdentity, + 'EX', + 60, // item expires after 1 minute + err => { + if (err) { + return reject(err); + } + return resolve(); + }, + ); + }); + } + + getUserIdentity(userID: string): Promise { + return new Promise((resolve, reject) => { + this.cacheClient.get(`user:${userID}`, (err, result) => { + if (err) { + return reject(err); + } + // Reset the expiration when the cached data is successfully retrieved + this.cacheClient.expire(`user:${userID}`, 60); + return resolve(result ? JSON.parse(result) : null); + }); + }); + } } const redisCache: RedisCache = new RedisCache();