73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||
/**
|
||
* Upstash SDK 可选依赖类型声明(cache + rate-limit 共用)
|
||
*
|
||
* 这两个包通过动态 import 在运行时加载,仅在 `RATE_LIMIT_DRIVER=redis`
|
||
* 或 `CACHE_DRIVER=redis` 时才需要安装。默认内存模式下无需安装。
|
||
*
|
||
* 安装命令:
|
||
* npm install @upstash/ratelimit @upstash/redis
|
||
*
|
||
* 安装后这两个包自带的类型声明将覆盖此处的 any 声明,
|
||
* 提供完整的类型检查。
|
||
*
|
||
* 注意:rate-limit 与 cache 模块共用同一份类型声明,
|
||
* 避免在多处重复维护。
|
||
*/
|
||
|
||
declare module "@upstash/ratelimit" {
|
||
export class Ratelimit {
|
||
constructor(config: {
|
||
redis: any
|
||
limiter: any
|
||
analytics?: boolean
|
||
prefix?: string
|
||
})
|
||
limit(
|
||
identifier: string,
|
||
): Promise<{
|
||
success: boolean
|
||
limit: number
|
||
remaining: number
|
||
reset: number
|
||
pending: Promise<unknown>
|
||
}>
|
||
reset(identifier: string): Promise<void>
|
||
static slidingWindow(
|
||
max: number,
|
||
window: string,
|
||
): { type: "sliding-window"; max: number; window: string }
|
||
static fixedWindow(
|
||
max: number,
|
||
window: string,
|
||
): { type: "fixed-window"; max: number; window: string }
|
||
static tokenBucket(
|
||
max: number,
|
||
window: string,
|
||
refillRate: number,
|
||
): { type: "token-bucket"; max: number; window: string; refillRate: number }
|
||
}
|
||
}
|
||
|
||
declare module "@upstash/redis" {
|
||
export class Redis {
|
||
constructor(config: {
|
||
url: string
|
||
token: string
|
||
automaticDeserialization?: boolean
|
||
responseEncoding?: "base64" | "none"
|
||
retry?: {
|
||
retries: number
|
||
backoff: (retryCount: number) => number
|
||
}
|
||
})
|
||
get(key: string): Promise<string | null>
|
||
set(key: string, value: string): Promise<"OK">
|
||
del(...keys: string[]): Promise<number>
|
||
incr(key: string): Promise<number>
|
||
expire(key: string, seconds: number): Promise<number>
|
||
pexpire(key: string, milliseconds: number): Promise<number>
|
||
[key: string]: any
|
||
}
|
||
}
|