bigblocks
Version:
Complete Bitcoin UI component library - authentication, social, wallet, market, inscriptions, and blockchain interactions for React
126 lines (125 loc) • 3.87 kB
JavaScript
/**
* 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;
}
},
};
}