UNPKG

bigblocks

Version:

Complete Bitcoin UI component library - authentication, social, wallet, market, inscriptions, and blockchain interactions for React

126 lines (125 loc) 3.87 kB
/** * Redis storage adapter * Requires a Redis client instance (ioredis, node-redis, etc.) * Works with any Redis-compatible client that implements the basic interface */ export function createRedisStorage(options) { const { client, prefix = "bigblocks:", ttl } = options; return { async get(key) { try { return await client.get(prefix + key); } catch (error) { console.error("Redis get error:", error); return null; } }, async set(key, value) { try { const fullKey = prefix + key; if (ttl) { await client.set(fullKey, value, { EX: ttl }); } else { await client.set(fullKey, value); } } catch (error) { console.error("Redis set error:", error); throw error; } }, async delete(key) { try { await client.del(prefix + key); } catch (error) { console.error("Redis delete error:", error); throw error; } }, async clear() { try { // Find all keys with our prefix const keys = await client.keys(`${prefix}*`); if (keys.length > 0) { await client.del(keys); } } catch (error) { console.error("Redis clear error:", error); throw error; } }, }; } /** * Create Redis storage with Upstash Redis REST API * Useful for serverless environments */ export function createUpstashRedisStorage(options) { const { url, token, prefix = "bigblocks:", ttl } = options; const makeRequest = async (command, method = "POST") => { const response = await fetch(url, { method, headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json", }, body: JSON.stringify(command), }); if (!response.ok) { throw new Error(`Upstash Redis error: ${response.statusText}`); } const data = await response.json(); return data.result; }; return { async get(key) { try { const result = await makeRequest(["GET", prefix + key]); return result; } catch (error) { console.error("Upstash Redis get error:", error); return null; } }, async set(key, value) { try { const command = ["SET", prefix + key, value]; if (ttl) { command.push("EX", ttl.toString()); } await makeRequest(command); } catch (error) { console.error("Upstash Redis set error:", error); throw error; } }, async delete(key) { try { await makeRequest(["DEL", prefix + key]); } catch (error) { console.error("Upstash Redis delete error:", error); throw error; } }, async clear() { try { // Get all keys with prefix const keys = await makeRequest(["KEYS", `${prefix}*`]); if (keys && keys.length > 0) { await makeRequest(["DEL", ...keys]); } } catch (error) { console.error("Upstash Redis clear error:", error); throw error; } }, }; }