@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.
Files changed (161) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/auth/AuthProviderFactory.d.ts +71 -0
  3. package/dist/auth/AuthProviderFactory.js +111 -0
  4. package/dist/auth/AuthProviderRegistry.d.ts +33 -0
  5. package/dist/auth/AuthProviderRegistry.js +190 -0
  6. package/dist/auth/RequestContext.d.ts +23 -0
  7. package/dist/auth/RequestContext.js +78 -0
  8. package/dist/auth/authContext.d.ts +198 -0
  9. package/dist/auth/authContext.js +314 -0
  10. package/dist/auth/errors.d.ts +63 -0
  11. package/dist/auth/errors.js +39 -0
  12. package/dist/auth/index.d.ts +20 -8
  13. package/dist/auth/index.js +35 -7
  14. package/dist/auth/middleware/AuthMiddleware.d.ts +181 -0
  15. package/dist/auth/middleware/AuthMiddleware.js +519 -0
  16. package/dist/auth/middleware/rateLimitByUser.d.ts +282 -0
  17. package/dist/auth/middleware/rateLimitByUser.js +554 -0
  18. package/dist/auth/providers/BaseAuthProvider.d.ts +259 -0
  19. package/dist/auth/providers/BaseAuthProvider.js +723 -0
  20. package/dist/auth/providers/CognitoProvider.d.ts +61 -0
  21. package/dist/auth/providers/CognitoProvider.js +304 -0
  22. package/dist/auth/providers/KeycloakProvider.d.ts +61 -0
  23. package/dist/auth/providers/KeycloakProvider.js +393 -0
  24. package/dist/auth/providers/auth0.d.ts +59 -0
  25. package/dist/auth/providers/auth0.js +274 -0
  26. package/dist/auth/providers/betterAuth.d.ts +51 -0
  27. package/dist/auth/providers/betterAuth.js +182 -0
  28. package/dist/auth/providers/clerk.d.ts +65 -0
  29. package/dist/auth/providers/clerk.js +317 -0
  30. package/dist/auth/providers/custom.d.ts +64 -0
  31. package/dist/auth/providers/custom.js +112 -0
  32. package/dist/auth/providers/firebase.d.ts +63 -0
  33. package/dist/auth/providers/firebase.js +226 -0
  34. package/dist/auth/providers/jwt.d.ts +68 -0
  35. package/dist/auth/providers/jwt.js +212 -0
  36. package/dist/auth/providers/oauth2.d.ts +73 -0
  37. package/dist/auth/providers/oauth2.js +303 -0
  38. package/dist/auth/providers/supabase.d.ts +63 -0
  39. package/dist/auth/providers/supabase.js +259 -0
  40. package/dist/auth/providers/workos.d.ts +61 -0
  41. package/dist/auth/providers/workos.js +284 -0
  42. package/dist/auth/serverBridge.d.ts +14 -0
  43. package/dist/auth/serverBridge.js +25 -0
  44. package/dist/auth/sessionManager.d.ts +142 -0
  45. package/dist/auth/sessionManager.js +437 -0
  46. package/dist/cli/commands/authProviders.d.ts +43 -0
  47. package/dist/cli/commands/authProviders.js +399 -0
  48. package/dist/cli/factories/authCommandFactory.d.ts +23 -5
  49. package/dist/cli/factories/authCommandFactory.js +108 -5
  50. package/dist/cli/parser.js +1 -1
  51. package/dist/client/auth/AuthProviderFactory.js +111 -0
  52. package/dist/client/auth/AuthProviderRegistry.js +190 -0
  53. package/dist/client/auth/RequestContext.js +78 -0
  54. package/dist/client/auth/accountPool.js +178 -0
  55. package/dist/client/auth/authContext.js +314 -0
  56. package/dist/client/auth/errors.js +39 -0
  57. package/dist/client/auth/index.js +61 -0
  58. package/dist/client/auth/middleware/AuthMiddleware.js +519 -0
  59. package/dist/client/auth/middleware/rateLimitByUser.js +554 -0
  60. package/dist/client/auth/providers/BaseAuthProvider.js +723 -0
  61. package/dist/client/auth/providers/CognitoProvider.js +304 -0
  62. package/dist/client/auth/providers/KeycloakProvider.js +393 -0
  63. package/dist/client/auth/providers/auth0.js +274 -0
  64. package/dist/client/auth/providers/betterAuth.js +182 -0
  65. package/dist/client/auth/providers/clerk.js +317 -0
  66. package/dist/client/auth/providers/custom.js +112 -0
  67. package/dist/client/auth/providers/firebase.js +226 -0
  68. package/dist/client/auth/providers/jwt.js +212 -0
  69. package/dist/client/auth/providers/oauth2.js +303 -0
  70. package/dist/client/auth/providers/supabase.js +259 -0
  71. package/dist/client/auth/providers/workos.js +284 -0
  72. package/dist/client/auth/serverBridge.js +25 -0
  73. package/dist/client/auth/sessionManager.js +437 -0
  74. package/dist/client/core/infrastructure/baseRegistry.js +5 -1
  75. package/dist/client/index.js +25 -0
  76. package/dist/client/mcp/toolRegistry.js +11 -1
  77. package/dist/client/neurolink.js +218 -0
  78. package/dist/client/rag/ChunkerRegistry.js +2 -2
  79. package/dist/client/rag/metadata/MetadataExtractorRegistry.js +2 -2
  80. package/dist/client/rag/reranker/RerankerRegistry.js +2 -2
  81. package/dist/client/server/routes/agentRoutes.js +20 -2
  82. package/dist/client/types/authTypes.js +2 -1
  83. package/dist/core/infrastructure/baseRegistry.d.ts +3 -1
  84. package/dist/core/infrastructure/baseRegistry.js +5 -1
  85. package/dist/index.d.ts +1 -0
  86. package/dist/index.js +25 -0
  87. package/dist/lib/auth/AuthProviderFactory.d.ts +71 -0
  88. package/dist/lib/auth/AuthProviderFactory.js +112 -0
  89. package/dist/lib/auth/AuthProviderRegistry.d.ts +33 -0
  90. package/dist/lib/auth/AuthProviderRegistry.js +191 -0
  91. package/dist/lib/auth/RequestContext.d.ts +23 -0
  92. package/dist/lib/auth/RequestContext.js +79 -0
  93. package/dist/lib/auth/authContext.d.ts +198 -0
  94. package/dist/lib/auth/authContext.js +315 -0
  95. package/dist/lib/auth/errors.d.ts +63 -0
  96. package/dist/lib/auth/errors.js +40 -0
  97. package/dist/lib/auth/index.d.ts +20 -8
  98. package/dist/lib/auth/index.js +35 -7
  99. package/dist/lib/auth/middleware/AuthMiddleware.d.ts +181 -0
  100. package/dist/lib/auth/middleware/AuthMiddleware.js +520 -0
  101. package/dist/lib/auth/middleware/rateLimitByUser.d.ts +282 -0
  102. package/dist/lib/auth/middleware/rateLimitByUser.js +555 -0
  103. package/dist/lib/auth/providers/BaseAuthProvider.d.ts +259 -0
  104. package/dist/lib/auth/providers/BaseAuthProvider.js +724 -0
  105. package/dist/lib/auth/providers/CognitoProvider.d.ts +61 -0
  106. package/dist/lib/auth/providers/CognitoProvider.js +305 -0
  107. package/dist/lib/auth/providers/KeycloakProvider.d.ts +61 -0
  108. package/dist/lib/auth/providers/KeycloakProvider.js +394 -0
  109. package/dist/lib/auth/providers/auth0.d.ts +59 -0
  110. package/dist/lib/auth/providers/auth0.js +275 -0
  111. package/dist/lib/auth/providers/betterAuth.d.ts +51 -0
  112. package/dist/lib/auth/providers/betterAuth.js +183 -0
  113. package/dist/lib/auth/providers/clerk.d.ts +65 -0
  114. package/dist/lib/auth/providers/clerk.js +318 -0
  115. package/dist/lib/auth/providers/custom.d.ts +64 -0
  116. package/dist/lib/auth/providers/custom.js +113 -0
  117. package/dist/lib/auth/providers/firebase.d.ts +63 -0
  118. package/dist/lib/auth/providers/firebase.js +227 -0
  119. package/dist/lib/auth/providers/jwt.d.ts +68 -0
  120. package/dist/lib/auth/providers/jwt.js +213 -0
  121. package/dist/lib/auth/providers/oauth2.d.ts +73 -0
  122. package/dist/lib/auth/providers/oauth2.js +304 -0
  123. package/dist/lib/auth/providers/supabase.d.ts +63 -0
  124. package/dist/lib/auth/providers/supabase.js +260 -0
  125. package/dist/lib/auth/providers/workos.d.ts +61 -0
  126. package/dist/lib/auth/providers/workos.js +285 -0
  127. package/dist/lib/auth/serverBridge.d.ts +14 -0
  128. package/dist/lib/auth/serverBridge.js +26 -0
  129. package/dist/lib/auth/sessionManager.d.ts +142 -0
  130. package/dist/lib/auth/sessionManager.js +438 -0
  131. package/dist/lib/core/infrastructure/baseRegistry.d.ts +3 -1
  132. package/dist/lib/core/infrastructure/baseRegistry.js +5 -1
  133. package/dist/lib/index.d.ts +1 -0
  134. package/dist/lib/index.js +25 -0
  135. package/dist/lib/mcp/toolRegistry.js +11 -1
  136. package/dist/lib/neurolink.d.ts +42 -1
  137. package/dist/lib/neurolink.js +218 -0
  138. package/dist/lib/rag/ChunkerRegistry.js +2 -2
  139. package/dist/lib/rag/metadata/MetadataExtractorRegistry.js +2 -2
  140. package/dist/lib/rag/reranker/RerankerRegistry.js +2 -2
  141. package/dist/lib/server/routes/agentRoutes.js +20 -2
  142. package/dist/lib/types/authTypes.d.ts +937 -1
  143. package/dist/lib/types/authTypes.js +2 -1
  144. package/dist/lib/types/configTypes.d.ts +46 -0
  145. package/dist/lib/types/generateTypes.d.ts +6 -0
  146. package/dist/lib/types/index.d.ts +1 -0
  147. package/dist/lib/types/streamTypes.d.ts +6 -0
  148. package/dist/mcp/toolRegistry.js +11 -1
  149. package/dist/neurolink.d.ts +42 -1
  150. package/dist/neurolink.js +218 -0
  151. package/dist/rag/ChunkerRegistry.js +2 -2
  152. package/dist/rag/metadata/MetadataExtractorRegistry.js +2 -2
  153. package/dist/rag/reranker/RerankerRegistry.js +2 -2
  154. package/dist/server/routes/agentRoutes.js +20 -2
  155. package/dist/types/authTypes.d.ts +937 -1
  156. package/dist/types/authTypes.js +2 -1
  157. package/dist/types/configTypes.d.ts +46 -0
  158. package/dist/types/generateTypes.d.ts +6 -0
  159. package/dist/types/index.d.ts +1 -0
  160. package/dist/types/streamTypes.d.ts +6 -0
  161. 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 {};