@juspay/neurolink 9.31.2 → 9.32.0
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/CHANGELOG.md +6 -0
- package/dist/auth/AuthProviderFactory.d.ts +71 -0
- package/dist/auth/AuthProviderFactory.js +111 -0
- package/dist/auth/AuthProviderRegistry.d.ts +33 -0
- package/dist/auth/AuthProviderRegistry.js +190 -0
- package/dist/auth/RequestContext.d.ts +23 -0
- package/dist/auth/RequestContext.js +78 -0
- package/dist/auth/authContext.d.ts +198 -0
- package/dist/auth/authContext.js +314 -0
- package/dist/auth/errors.d.ts +63 -0
- package/dist/auth/errors.js +39 -0
- package/dist/auth/index.d.ts +20 -8
- package/dist/auth/index.js +35 -7
- package/dist/auth/middleware/AuthMiddleware.d.ts +181 -0
- package/dist/auth/middleware/AuthMiddleware.js +519 -0
- package/dist/auth/middleware/rateLimitByUser.d.ts +282 -0
- package/dist/auth/middleware/rateLimitByUser.js +554 -0
- package/dist/auth/providers/BaseAuthProvider.d.ts +259 -0
- package/dist/auth/providers/BaseAuthProvider.js +723 -0
- package/dist/auth/providers/CognitoProvider.d.ts +61 -0
- package/dist/auth/providers/CognitoProvider.js +304 -0
- package/dist/auth/providers/KeycloakProvider.d.ts +61 -0
- package/dist/auth/providers/KeycloakProvider.js +393 -0
- package/dist/auth/providers/auth0.d.ts +59 -0
- package/dist/auth/providers/auth0.js +274 -0
- package/dist/auth/providers/betterAuth.d.ts +51 -0
- package/dist/auth/providers/betterAuth.js +182 -0
- package/dist/auth/providers/clerk.d.ts +65 -0
- package/dist/auth/providers/clerk.js +317 -0
- package/dist/auth/providers/custom.d.ts +64 -0
- package/dist/auth/providers/custom.js +112 -0
- package/dist/auth/providers/firebase.d.ts +63 -0
- package/dist/auth/providers/firebase.js +226 -0
- package/dist/auth/providers/jwt.d.ts +68 -0
- package/dist/auth/providers/jwt.js +212 -0
- package/dist/auth/providers/oauth2.d.ts +73 -0
- package/dist/auth/providers/oauth2.js +303 -0
- package/dist/auth/providers/supabase.d.ts +63 -0
- package/dist/auth/providers/supabase.js +259 -0
- package/dist/auth/providers/workos.d.ts +61 -0
- package/dist/auth/providers/workos.js +284 -0
- package/dist/auth/serverBridge.d.ts +14 -0
- package/dist/auth/serverBridge.js +25 -0
- package/dist/auth/sessionManager.d.ts +142 -0
- package/dist/auth/sessionManager.js +437 -0
- package/dist/cli/commands/authProviders.d.ts +43 -0
- package/dist/cli/commands/authProviders.js +399 -0
- package/dist/cli/factories/authCommandFactory.d.ts +23 -5
- package/dist/cli/factories/authCommandFactory.js +108 -5
- package/dist/cli/parser.js +1 -1
- package/dist/client/auth/AuthProviderFactory.js +111 -0
- package/dist/client/auth/AuthProviderRegistry.js +190 -0
- package/dist/client/auth/RequestContext.js +78 -0
- package/dist/client/auth/accountPool.js +178 -0
- package/dist/client/auth/authContext.js +314 -0
- package/dist/client/auth/errors.js +39 -0
- package/dist/client/auth/index.js +61 -0
- package/dist/client/auth/middleware/AuthMiddleware.js +519 -0
- package/dist/client/auth/middleware/rateLimitByUser.js +554 -0
- package/dist/client/auth/providers/BaseAuthProvider.js +723 -0
- package/dist/client/auth/providers/CognitoProvider.js +304 -0
- package/dist/client/auth/providers/KeycloakProvider.js +393 -0
- package/dist/client/auth/providers/auth0.js +274 -0
- package/dist/client/auth/providers/betterAuth.js +182 -0
- package/dist/client/auth/providers/clerk.js +317 -0
- package/dist/client/auth/providers/custom.js +112 -0
- package/dist/client/auth/providers/firebase.js +226 -0
- package/dist/client/auth/providers/jwt.js +212 -0
- package/dist/client/auth/providers/oauth2.js +303 -0
- package/dist/client/auth/providers/supabase.js +259 -0
- package/dist/client/auth/providers/workos.js +284 -0
- package/dist/client/auth/serverBridge.js +25 -0
- package/dist/client/auth/sessionManager.js +437 -0
- package/dist/client/core/infrastructure/baseRegistry.js +5 -1
- package/dist/client/index.js +25 -0
- package/dist/client/mcp/toolRegistry.js +11 -1
- package/dist/client/neurolink.js +218 -0
- package/dist/client/rag/ChunkerRegistry.js +2 -2
- package/dist/client/rag/metadata/MetadataExtractorRegistry.js +2 -2
- package/dist/client/rag/reranker/RerankerRegistry.js +2 -2
- package/dist/client/server/routes/agentRoutes.js +20 -2
- package/dist/client/types/authTypes.js +2 -1
- package/dist/core/infrastructure/baseRegistry.d.ts +3 -1
- package/dist/core/infrastructure/baseRegistry.js +5 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +25 -0
- package/dist/lib/auth/AuthProviderFactory.d.ts +71 -0
- package/dist/lib/auth/AuthProviderFactory.js +112 -0
- package/dist/lib/auth/AuthProviderRegistry.d.ts +33 -0
- package/dist/lib/auth/AuthProviderRegistry.js +191 -0
- package/dist/lib/auth/RequestContext.d.ts +23 -0
- package/dist/lib/auth/RequestContext.js +79 -0
- package/dist/lib/auth/authContext.d.ts +198 -0
- package/dist/lib/auth/authContext.js +315 -0
- package/dist/lib/auth/errors.d.ts +63 -0
- package/dist/lib/auth/errors.js +40 -0
- package/dist/lib/auth/index.d.ts +20 -8
- package/dist/lib/auth/index.js +35 -7
- package/dist/lib/auth/middleware/AuthMiddleware.d.ts +181 -0
- package/dist/lib/auth/middleware/AuthMiddleware.js +520 -0
- package/dist/lib/auth/middleware/rateLimitByUser.d.ts +282 -0
- package/dist/lib/auth/middleware/rateLimitByUser.js +555 -0
- package/dist/lib/auth/providers/BaseAuthProvider.d.ts +259 -0
- package/dist/lib/auth/providers/BaseAuthProvider.js +724 -0
- package/dist/lib/auth/providers/CognitoProvider.d.ts +61 -0
- package/dist/lib/auth/providers/CognitoProvider.js +305 -0
- package/dist/lib/auth/providers/KeycloakProvider.d.ts +61 -0
- package/dist/lib/auth/providers/KeycloakProvider.js +394 -0
- package/dist/lib/auth/providers/auth0.d.ts +59 -0
- package/dist/lib/auth/providers/auth0.js +275 -0
- package/dist/lib/auth/providers/betterAuth.d.ts +51 -0
- package/dist/lib/auth/providers/betterAuth.js +183 -0
- package/dist/lib/auth/providers/clerk.d.ts +65 -0
- package/dist/lib/auth/providers/clerk.js +318 -0
- package/dist/lib/auth/providers/custom.d.ts +64 -0
- package/dist/lib/auth/providers/custom.js +113 -0
- package/dist/lib/auth/providers/firebase.d.ts +63 -0
- package/dist/lib/auth/providers/firebase.js +227 -0
- package/dist/lib/auth/providers/jwt.d.ts +68 -0
- package/dist/lib/auth/providers/jwt.js +213 -0
- package/dist/lib/auth/providers/oauth2.d.ts +73 -0
- package/dist/lib/auth/providers/oauth2.js +304 -0
- package/dist/lib/auth/providers/supabase.d.ts +63 -0
- package/dist/lib/auth/providers/supabase.js +260 -0
- package/dist/lib/auth/providers/workos.d.ts +61 -0
- package/dist/lib/auth/providers/workos.js +285 -0
- package/dist/lib/auth/serverBridge.d.ts +14 -0
- package/dist/lib/auth/serverBridge.js +26 -0
- package/dist/lib/auth/sessionManager.d.ts +142 -0
- package/dist/lib/auth/sessionManager.js +438 -0
- package/dist/lib/core/infrastructure/baseRegistry.d.ts +3 -1
- package/dist/lib/core/infrastructure/baseRegistry.js +5 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +25 -0
- package/dist/lib/mcp/toolRegistry.js +11 -1
- package/dist/lib/neurolink.d.ts +42 -1
- package/dist/lib/neurolink.js +218 -0
- package/dist/lib/rag/ChunkerRegistry.js +2 -2
- package/dist/lib/rag/metadata/MetadataExtractorRegistry.js +2 -2
- package/dist/lib/rag/reranker/RerankerRegistry.js +2 -2
- package/dist/lib/server/routes/agentRoutes.js +20 -2
- package/dist/lib/types/authTypes.d.ts +937 -1
- package/dist/lib/types/authTypes.js +2 -1
- package/dist/lib/types/configTypes.d.ts +46 -0
- package/dist/lib/types/generateTypes.d.ts +6 -0
- package/dist/lib/types/index.d.ts +1 -0
- package/dist/lib/types/streamTypes.d.ts +6 -0
- package/dist/mcp/toolRegistry.js +11 -1
- package/dist/neurolink.d.ts +42 -1
- package/dist/neurolink.js +218 -0
- package/dist/rag/ChunkerRegistry.js +2 -2
- package/dist/rag/metadata/MetadataExtractorRegistry.js +2 -2
- package/dist/rag/reranker/RerankerRegistry.js +2 -2
- package/dist/server/routes/agentRoutes.js +20 -2
- package/dist/types/authTypes.d.ts +937 -1
- package/dist/types/authTypes.js +2 -1
- package/dist/types/configTypes.d.ts +46 -0
- package/dist/types/generateTypes.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/streamTypes.d.ts +6 -0
- package/package.json +2 -1
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import type { AuthenticatedContext, AuthRequestContext, AuthUser } from "../../types/authTypes.js";
|
|
2
|
+
/**
|
|
3
|
+
* Token bucket state for a single user
|
|
4
|
+
*/
|
|
5
|
+
type TokenBucket = {
|
|
6
|
+
/** Current number of tokens available */
|
|
7
|
+
tokens: number;
|
|
8
|
+
/** Last time tokens were added */
|
|
9
|
+
lastRefill: number;
|
|
10
|
+
/** User identifier */
|
|
11
|
+
userId: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Rate limit configuration per user or role
|
|
15
|
+
*/
|
|
16
|
+
export type RateLimitConfig = {
|
|
17
|
+
/** Maximum requests allowed in the window */
|
|
18
|
+
maxRequests: number;
|
|
19
|
+
/** Time window in milliseconds */
|
|
20
|
+
windowMs: number;
|
|
21
|
+
/** Optional: Different limits per role (role -> maxRequests) */
|
|
22
|
+
roleLimits?: Record<string, number>;
|
|
23
|
+
/** Optional: Different limits per user ID (userId -> maxRequests) */
|
|
24
|
+
userLimits?: Record<string, number>;
|
|
25
|
+
/** Skip rate limiting for these roles */
|
|
26
|
+
skipRoles?: string[];
|
|
27
|
+
/** Error message when rate limited */
|
|
28
|
+
message?: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Rate limit result
|
|
32
|
+
*/
|
|
33
|
+
export type RateLimitResult = {
|
|
34
|
+
/** Whether the request is allowed */
|
|
35
|
+
allowed: boolean;
|
|
36
|
+
/** Remaining requests in the current window */
|
|
37
|
+
remaining: number;
|
|
38
|
+
/** Time until the bucket resets (ms) */
|
|
39
|
+
resetIn: number;
|
|
40
|
+
/** Total limit for this user */
|
|
41
|
+
limit: number;
|
|
42
|
+
/** Error message if rate limited */
|
|
43
|
+
error?: string;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Result of an atomic consume operation
|
|
47
|
+
*/
|
|
48
|
+
export type AtomicConsumeResult = {
|
|
49
|
+
/** Updated bucket after the operation */
|
|
50
|
+
bucket: TokenBucket;
|
|
51
|
+
/** Whether a token was successfully consumed */
|
|
52
|
+
consumed: boolean;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Interface for rate limit storage backends
|
|
56
|
+
*/
|
|
57
|
+
export interface RateLimitStorage {
|
|
58
|
+
/** Get the current bucket for a user */
|
|
59
|
+
getBucket(userId: string): Promise<TokenBucket | null>;
|
|
60
|
+
/** Set the bucket for a user */
|
|
61
|
+
setBucket(userId: string, bucket: TokenBucket): Promise<void>;
|
|
62
|
+
/** Delete a bucket (for cleanup) */
|
|
63
|
+
deleteBucket(userId: string): Promise<void>;
|
|
64
|
+
/** Check storage health */
|
|
65
|
+
healthCheck(): Promise<boolean>;
|
|
66
|
+
/** Cleanup resources */
|
|
67
|
+
cleanup(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Atomically refill and consume a token from the bucket.
|
|
70
|
+
*
|
|
71
|
+
* Implementations SHOULD perform the refill-and-consume in a single
|
|
72
|
+
* atomic step (e.g. Lua script for Redis) to prevent race conditions
|
|
73
|
+
* where parallel requests read the same token count and both succeed.
|
|
74
|
+
*
|
|
75
|
+
* The default in-memory implementation is inherently single-threaded,
|
|
76
|
+
* so atomicity comes for free.
|
|
77
|
+
*
|
|
78
|
+
* @returns null when no bucket exists yet (caller should create one)
|
|
79
|
+
*/
|
|
80
|
+
atomicConsume?(userId: string, limit: number, windowMs: number, nowMs: number): Promise<AtomicConsumeResult | null>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* In-memory storage for rate limiting (single instance deployments)
|
|
84
|
+
*/
|
|
85
|
+
export declare class MemoryRateLimitStorage implements RateLimitStorage {
|
|
86
|
+
private buckets;
|
|
87
|
+
private cleanupInterval?;
|
|
88
|
+
private expiryMs;
|
|
89
|
+
constructor(cleanupIntervalMs?: number, expiryMs?: number);
|
|
90
|
+
getBucket(userId: string): Promise<TokenBucket | null>;
|
|
91
|
+
setBucket(userId: string, bucket: TokenBucket): Promise<void>;
|
|
92
|
+
deleteBucket(userId: string): Promise<void>;
|
|
93
|
+
healthCheck(): Promise<boolean>;
|
|
94
|
+
cleanup(): Promise<void>;
|
|
95
|
+
private cleanupExpiredBuckets;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Redis-backed storage for rate limiting (distributed deployments)
|
|
99
|
+
*/
|
|
100
|
+
export declare class RedisRateLimitStorage implements RateLimitStorage {
|
|
101
|
+
private redisUrl;
|
|
102
|
+
private prefix;
|
|
103
|
+
private ttlSeconds;
|
|
104
|
+
private client;
|
|
105
|
+
private initPromise;
|
|
106
|
+
constructor(config: {
|
|
107
|
+
url: string;
|
|
108
|
+
prefix?: string;
|
|
109
|
+
ttlSeconds?: number;
|
|
110
|
+
/** When set, TTL will be at least ceil(windowMs/1000) so keys outlive the rate-limit window. */
|
|
111
|
+
windowMs?: number;
|
|
112
|
+
});
|
|
113
|
+
private getClient;
|
|
114
|
+
private createClient;
|
|
115
|
+
getBucket(userId: string): Promise<TokenBucket | null>;
|
|
116
|
+
setBucket(userId: string, bucket: TokenBucket): Promise<void>;
|
|
117
|
+
deleteBucket(userId: string): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Atomically refill and consume one token using a Redis Lua script.
|
|
120
|
+
*
|
|
121
|
+
* The entire read-modify-write cycle runs inside Redis as a single
|
|
122
|
+
* atomic operation, so two parallel requests for the same user can
|
|
123
|
+
* never read the same token count.
|
|
124
|
+
*/
|
|
125
|
+
atomicConsume(userId: string, limit: number, windowMs: number, nowMs: number): Promise<AtomicConsumeResult | null>;
|
|
126
|
+
healthCheck(): Promise<boolean>;
|
|
127
|
+
cleanup(): Promise<void>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Token bucket rate limiter implementation
|
|
131
|
+
*
|
|
132
|
+
* Uses the token bucket algorithm which allows for burst traffic while
|
|
133
|
+
* maintaining an average rate limit. Tokens are continuously added to
|
|
134
|
+
* the bucket at a fixed rate, and each request consumes one token.
|
|
135
|
+
*/
|
|
136
|
+
export declare class UserRateLimiter {
|
|
137
|
+
private storage;
|
|
138
|
+
private config;
|
|
139
|
+
constructor(config: RateLimitConfig, storage?: RateLimitStorage);
|
|
140
|
+
/**
|
|
141
|
+
* Get the rate limit for a specific user based on their roles
|
|
142
|
+
*/
|
|
143
|
+
private getLimitForUser;
|
|
144
|
+
/**
|
|
145
|
+
* Check if a user should skip rate limiting (based on roles)
|
|
146
|
+
*/
|
|
147
|
+
private shouldSkipRateLimit;
|
|
148
|
+
/**
|
|
149
|
+
* Consume a token from the user's bucket
|
|
150
|
+
* Returns the rate limit result
|
|
151
|
+
*
|
|
152
|
+
* When the storage backend supports `atomicConsume` (e.g. Redis with Lua),
|
|
153
|
+
* the entire refill-and-consume is executed as a single atomic operation,
|
|
154
|
+
* preventing race conditions where parallel requests both read the same
|
|
155
|
+
* token count and both succeed.
|
|
156
|
+
*/
|
|
157
|
+
consume(user: AuthUser): Promise<RateLimitResult>;
|
|
158
|
+
/**
|
|
159
|
+
* Get current rate limit status for a user without consuming a token
|
|
160
|
+
*/
|
|
161
|
+
getStatus(user: AuthUser): Promise<RateLimitResult>;
|
|
162
|
+
/**
|
|
163
|
+
* Reset rate limit for a user (admin action)
|
|
164
|
+
*/
|
|
165
|
+
resetUser(userId: string): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Check storage health
|
|
168
|
+
*/
|
|
169
|
+
healthCheck(): Promise<boolean>;
|
|
170
|
+
/**
|
|
171
|
+
* Cleanup resources
|
|
172
|
+
*/
|
|
173
|
+
cleanup(): Promise<void>;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Middleware result type
|
|
177
|
+
*/
|
|
178
|
+
export type RateLimitMiddlewareResult = {
|
|
179
|
+
/** Whether to proceed with the request */
|
|
180
|
+
proceed: boolean;
|
|
181
|
+
/** Rate limit result */
|
|
182
|
+
rateLimitResult: RateLimitResult;
|
|
183
|
+
/** Error response if rate limited */
|
|
184
|
+
response?: Response;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Create rate limiting middleware for authenticated requests
|
|
188
|
+
*
|
|
189
|
+
* @param config - Rate limit configuration
|
|
190
|
+
* @param storage - Optional custom storage backend
|
|
191
|
+
* @returns Middleware function
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* const rateLimitMiddleware = createRateLimitByUserMiddleware({
|
|
196
|
+
* maxRequests: 100,
|
|
197
|
+
* windowMs: 60000, // 1 minute
|
|
198
|
+
* roleLimits: {
|
|
199
|
+
* "premium": 500,
|
|
200
|
+
* "admin": 1000
|
|
201
|
+
* },
|
|
202
|
+
* skipRoles: ["super-admin"]
|
|
203
|
+
* });
|
|
204
|
+
*
|
|
205
|
+
* // Use in server
|
|
206
|
+
* app.use(async (request, context) => {
|
|
207
|
+
* const result = await rateLimitMiddleware(context);
|
|
208
|
+
* if (!result.proceed) {
|
|
209
|
+
* return result.response;
|
|
210
|
+
* }
|
|
211
|
+
* // Continue processing...
|
|
212
|
+
* });
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
export declare function createRateLimitByUserMiddleware(config: RateLimitConfig, storage?: RateLimitStorage): (context: AuthenticatedContext) => Promise<RateLimitMiddlewareResult>;
|
|
216
|
+
/**
|
|
217
|
+
* Create a combined auth and rate limit middleware
|
|
218
|
+
*
|
|
219
|
+
* @param authMiddleware - Authentication middleware function
|
|
220
|
+
* @param rateLimitConfig - Rate limit configuration
|
|
221
|
+
* @param storage - Optional custom storage backend
|
|
222
|
+
* @returns Combined middleware function
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```typescript
|
|
226
|
+
* const protectedRoute = createAuthenticatedRateLimitMiddleware(
|
|
227
|
+
* createAuthMiddleware({ provider: authProvider }),
|
|
228
|
+
* { maxRequests: 100, windowMs: 60000 }
|
|
229
|
+
* );
|
|
230
|
+
*
|
|
231
|
+
* // Use in routes
|
|
232
|
+
* app.post("/api/generate", async (request) => {
|
|
233
|
+
* const result = await protectedRoute(request);
|
|
234
|
+
* if (!result.proceed) {
|
|
235
|
+
* return result.response;
|
|
236
|
+
* }
|
|
237
|
+
* // Handle request with result.context
|
|
238
|
+
* });
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
export declare function createAuthenticatedRateLimitMiddleware(authMiddleware: (context: AuthRequestContext) => Promise<{
|
|
242
|
+
proceed: boolean;
|
|
243
|
+
context?: AuthenticatedContext;
|
|
244
|
+
response?: Response;
|
|
245
|
+
}>, rateLimitConfig: RateLimitConfig, storage?: RateLimitStorage): (context: AuthRequestContext) => Promise<{
|
|
246
|
+
proceed: boolean;
|
|
247
|
+
context?: AuthenticatedContext;
|
|
248
|
+
rateLimitResult?: RateLimitResult;
|
|
249
|
+
response?: Response;
|
|
250
|
+
}>;
|
|
251
|
+
/**
|
|
252
|
+
* Create rate limit storage based on configuration
|
|
253
|
+
*
|
|
254
|
+
* @param config - Storage configuration
|
|
255
|
+
* @returns Appropriate storage backend
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* ```typescript
|
|
259
|
+
* // Memory storage (default)
|
|
260
|
+
* const storage = createRateLimitStorage({ type: "memory" });
|
|
261
|
+
*
|
|
262
|
+
* // Redis storage
|
|
263
|
+
* const storage = createRateLimitStorage({
|
|
264
|
+
* type: "redis",
|
|
265
|
+
* redis: {
|
|
266
|
+
* url: "redis://localhost:6379",
|
|
267
|
+
* prefix: "myapp:ratelimit:"
|
|
268
|
+
* }
|
|
269
|
+
* });
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
export declare function createRateLimitStorage(config: {
|
|
273
|
+
type: "memory" | "redis";
|
|
274
|
+
redis?: {
|
|
275
|
+
url: string;
|
|
276
|
+
prefix?: string;
|
|
277
|
+
ttlSeconds?: number;
|
|
278
|
+
windowMs?: number;
|
|
279
|
+
};
|
|
280
|
+
cleanupIntervalMs?: number;
|
|
281
|
+
}): RateLimitStorage;
|
|
282
|
+
export {};
|