@joint-ops/hitlimit-types 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export interface BanConfig {
|
|
2
|
+
/** Number of rate limit violations before triggering a ban */
|
|
3
|
+
threshold: number;
|
|
4
|
+
/** How long the ban lasts. Human-readable string ('1h', '30m') or milliseconds */
|
|
5
|
+
duration: string | number;
|
|
6
|
+
}
|
|
1
7
|
export interface HitLimitOptions<TRequest = any> {
|
|
2
8
|
limit?: number;
|
|
3
9
|
window?: string | number;
|
|
@@ -10,6 +16,10 @@ export interface HitLimitOptions<TRequest = any> {
|
|
|
10
16
|
onStoreError?: StoreErrorHandler<TRequest>;
|
|
11
17
|
skip?: SkipFunction<TRequest>;
|
|
12
18
|
logger?: HitLimitLogger;
|
|
19
|
+
/** Ban configuration. IPs that exceed the rate limit `threshold` times get banned for `duration`. */
|
|
20
|
+
ban?: BanConfig;
|
|
21
|
+
/** Group identifier for shared rate limits. Static string or function that resolves per-request. */
|
|
22
|
+
group?: string | GroupIdResolver<TRequest>;
|
|
13
23
|
}
|
|
14
24
|
export interface TierConfig {
|
|
15
25
|
limit: number;
|
|
@@ -22,6 +32,14 @@ export interface HitLimitInfo {
|
|
|
22
32
|
resetAt: number;
|
|
23
33
|
key: string;
|
|
24
34
|
tier?: string;
|
|
35
|
+
/** Whether this key is currently banned */
|
|
36
|
+
banned?: boolean;
|
|
37
|
+
/** When the ban expires (ms timestamp), if banned */
|
|
38
|
+
banExpiresAt?: number;
|
|
39
|
+
/** Current violation count in the current window */
|
|
40
|
+
violations?: number;
|
|
41
|
+
/** Group ID if using grouped limits */
|
|
42
|
+
group?: string;
|
|
25
43
|
}
|
|
26
44
|
export interface HitLimitResult {
|
|
27
45
|
allowed: boolean;
|
|
@@ -29,10 +47,23 @@ export interface HitLimitResult {
|
|
|
29
47
|
headers: Record<string, string>;
|
|
30
48
|
body: Record<string, any>;
|
|
31
49
|
}
|
|
50
|
+
export interface FastResult {
|
|
51
|
+
allowed: boolean;
|
|
52
|
+
limit: number;
|
|
53
|
+
remaining: number;
|
|
54
|
+
resetIn: number;
|
|
55
|
+
resetAt: number;
|
|
56
|
+
}
|
|
32
57
|
export interface HitLimitStore {
|
|
33
58
|
hit(key: string, windowMs: number, limit: number): Promise<StoreResult> | StoreResult;
|
|
34
59
|
reset(key: string): Promise<void> | void;
|
|
35
60
|
shutdown?(): Promise<void> | void;
|
|
61
|
+
/** Check if a key is currently banned. Returns false if ban is not supported. */
|
|
62
|
+
isBanned?(key: string): Promise<boolean> | boolean;
|
|
63
|
+
/** Ban a key for the given duration in milliseconds. */
|
|
64
|
+
ban?(key: string, durationMs: number): Promise<void> | void;
|
|
65
|
+
/** Record a violation and return the current violation count within the window. */
|
|
66
|
+
recordViolation?(key: string, windowMs: number): Promise<number> | number;
|
|
36
67
|
}
|
|
37
68
|
export interface StoreResult {
|
|
38
69
|
count: number;
|
|
@@ -73,10 +104,16 @@ export interface ResolvedConfig<TRequest = any> {
|
|
|
73
104
|
onStoreError: StoreErrorHandler<TRequest>;
|
|
74
105
|
skip?: SkipFunction<TRequest>;
|
|
75
106
|
logger?: HitLimitLogger;
|
|
107
|
+
ban: {
|
|
108
|
+
threshold: number;
|
|
109
|
+
durationMs: number;
|
|
110
|
+
} | null;
|
|
111
|
+
group: string | GroupIdResolver<TRequest> | null;
|
|
76
112
|
}
|
|
77
113
|
export type KeyGenerator<TRequest = any> = (req: TRequest) => string | Promise<string>;
|
|
78
114
|
export type TierResolver<TRequest = any> = (req: TRequest) => string | Promise<string>;
|
|
79
115
|
export type SkipFunction<TRequest = any> = (req: TRequest) => boolean | Promise<boolean>;
|
|
116
|
+
export type GroupIdResolver<TRequest = any> = (req: TRequest) => string | Promise<string>;
|
|
80
117
|
export type StoreErrorHandler<TRequest = any> = (error: Error, req: TRequest) => 'allow' | 'deny' | Promise<'allow' | 'deny'>;
|
|
81
118
|
export type ResponseFormatter = (info: HitLimitInfo) => Record<string, any>;
|
|
82
119
|
export type ResponseConfig = Record<string, any>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe,CAAC,QAAQ,GAAG,GAAG;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,GAAG,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC7B,QAAQ,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAAA;IAC7C,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,YAAY,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC1C,IAAI,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsFA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACO;IAA7C,YAAY,OAAe,EAAkB,IAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,SAAI,GAAJ,IAAI,CAAW;QAE1D,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,aAAa;IACE;IAA7C,YAAY,OAAe,EAAkB,KAAa;QACxD,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QADc,UAAK,GAAL,KAAK,CAAQ;QAExD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,aAAa;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AAuCD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAA;AAClC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAA;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,kCAAkC,CAAA"}
|