middleware懒加载storage

This commit is contained in:
mtvpls
2026-01-26 08:58:04 +08:00
parent 9b335da4ce
commit b3764a7938

View File

@@ -1,6 +1,15 @@
/* eslint-disable no-console */
import { getStorage } from './db';
// Lazy import to avoid Edge Runtime issues in middleware
let getStorage: (() => any) | null = null;
async function loadStorage() {
if (!getStorage) {
const db = await import('./db');
getStorage = db.getStorage;
}
return getStorage();
}
// Token 配置
export const TOKEN_CONFIG = {
@@ -38,7 +47,7 @@ export async function storeRefreshToken(
tokenData: TokenData
): Promise<void> {
const hashKey = `user_tokens:${username}`;
const storage = getStorage();
const storage = await loadStorage();
if (!storage || typeof (storage as any).adapter?.hSet !== 'function') {
console.warn('Redis Hash not supported, skipping token storage');
@@ -65,7 +74,7 @@ export async function verifyRefreshToken(
refreshToken: string
): Promise<boolean> {
const hashKey = `user_tokens:${username}`;
const storage = getStorage();
const storage = await loadStorage();
if (!storage || typeof (storage as any).adapter?.hGet !== 'function') {
console.warn('Redis Hash not supported');
@@ -114,7 +123,7 @@ export async function revokeRefreshToken(
tokenId: string
): Promise<void> {
const hashKey = `user_tokens:${username}`;
const storage = getStorage();
const storage = await loadStorage();
if (!storage || typeof (storage as any).adapter?.hDel !== 'function') {
console.warn('Redis Hash not supported');
@@ -138,7 +147,7 @@ export async function getUserDevices(username: string): Promise<Array<{
expiresAt: number;
}>> {
const hashKey = `user_tokens:${username}`;
const storage = getStorage();
const storage = await loadStorage();
if (!storage || typeof (storage as any).adapter?.hGetAll !== 'function') {
console.warn('Redis Hash not supported');
@@ -188,7 +197,7 @@ export async function getUserDevices(username: string): Promise<Array<{
// 撤销所有 Token
export async function revokeAllRefreshTokens(username: string): Promise<void> {
const hashKey = `user_tokens:${username}`;
const storage = getStorage();
const storage = await loadStorage();
if (!storage || typeof (storage as any).adapter?.del !== 'function') {
console.warn('Redis Hash not supported');
@@ -206,7 +215,7 @@ export async function revokeAllRefreshTokens(username: string): Promise<void> {
// 清理过期的 Token定期任务
export async function cleanupExpiredTokens(username: string): Promise<number> {
const hashKey = `user_tokens:${username}`;
const storage = getStorage();
const storage = await loadStorage();
if (!storage || typeof (storage as any).adapter?.hGetAll !== 'function') {
return 0;