@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,259 @@
1
+ /**
2
+ * BaseAuthProvider - Abstract base class for authentication providers
3
+ *
4
+ * Provides common functionality for all auth providers including:
5
+ * - Token extraction (header, cookie, query param, custom function)
6
+ * - Session management (create, validate, refresh, revoke)
7
+ * - RBAC authorization (roles, permissions, wildcards, hierarchy)
8
+ * - Token validation utilities (JWT parsing, expiry checks)
9
+ * - Event emission for auth lifecycle hooks
10
+ * - Error handling via unified AuthError factory
11
+ */
12
+ import { EventEmitter } from "events";
13
+ import type { AuthenticatedContext, AuthHealthCheck, AuthorizationResult, AuthProviderConfig, AuthProviderType, AuthRequestContext, AuthSession, AuthUser, MastraAuthProvider, RBACConfig, SessionConfig, SessionStorage, SessionValidationResult, TokenClaims, TokenValidationResult } from "../../types/authTypes.js";
14
+ /**
15
+ * @deprecated Use `AuthError` from `../errors.js` instead.
16
+ * Kept for backward compatibility with CognitoProvider / KeycloakProvider.
17
+ */
18
+ export declare const AuthProviderError: {
19
+ codes: {
20
+ readonly INVALID_TOKEN: "AUTH-001";
21
+ readonly EXPIRED_TOKEN: "AUTH-002";
22
+ readonly MISSING_TOKEN: "AUTH-003";
23
+ readonly TOKEN_DECODE_FAILED: "AUTH-004";
24
+ readonly INVALID_SIGNATURE: "AUTH-005";
25
+ readonly SESSION_NOT_FOUND: "AUTH-010";
26
+ readonly SESSION_EXPIRED: "AUTH-011";
27
+ readonly SESSION_REVOKED: "AUTH-012";
28
+ readonly INSUFFICIENT_PERMISSIONS: "AUTH-020";
29
+ readonly INSUFFICIENT_ROLES: "AUTH-021";
30
+ readonly ACCESS_DENIED: "AUTH-022";
31
+ readonly USER_NOT_FOUND: "AUTH-030";
32
+ readonly USER_DISABLED: "AUTH-031";
33
+ readonly EMAIL_NOT_VERIFIED: "AUTH-032";
34
+ readonly MFA_REQUIRED: "AUTH-033";
35
+ readonly PROVIDER_ERROR: "AUTH-040";
36
+ readonly PROVIDER_NOT_FOUND: "AUTH-041";
37
+ readonly PROVIDER_INIT_FAILED: "AUTH-042";
38
+ readonly CONFIGURATION_ERROR: "AUTH-043";
39
+ readonly CREATION_FAILED: "AUTH-050";
40
+ readonly REGISTRATION_FAILED: "AUTH-051";
41
+ readonly DUPLICATE_REGISTRATION: "AUTH-052";
42
+ readonly MIDDLEWARE_ERROR: "AUTH-060";
43
+ readonly RATE_LIMITED: "AUTH-061";
44
+ readonly JWKS_FETCH_FAILED: "AUTH-070";
45
+ readonly JWKS_KEY_NOT_FOUND: "AUTH-071";
46
+ };
47
+ create: (code: "SESSION_NOT_FOUND" | "INVALID_TOKEN" | "EXPIRED_TOKEN" | "MISSING_TOKEN" | "TOKEN_DECODE_FAILED" | "INVALID_SIGNATURE" | "SESSION_EXPIRED" | "SESSION_REVOKED" | "INSUFFICIENT_PERMISSIONS" | "INSUFFICIENT_ROLES" | "ACCESS_DENIED" | "USER_NOT_FOUND" | "USER_DISABLED" | "EMAIL_NOT_VERIFIED" | "MFA_REQUIRED" | "PROVIDER_ERROR" | "PROVIDER_NOT_FOUND" | "PROVIDER_INIT_FAILED" | "CONFIGURATION_ERROR" | "CREATION_FAILED" | "REGISTRATION_FAILED" | "DUPLICATE_REGISTRATION" | "MIDDLEWARE_ERROR" | "RATE_LIMITED" | "JWKS_FETCH_FAILED" | "JWKS_KEY_NOT_FOUND", message: string, options?: {
48
+ retryable?: boolean;
49
+ details?: Record<string, unknown>;
50
+ cause?: Error;
51
+ } | undefined) => import("../../core/infrastructure/baseError.js").NeuroLinkFeatureError;
52
+ };
53
+ /**
54
+ * Default in-memory session storage
55
+ */
56
+ export declare class InMemorySessionStorage implements SessionStorage {
57
+ private sessions;
58
+ private userSessions;
59
+ get(sessionId: string): Promise<AuthSession | null>;
60
+ save(session: AuthSession): Promise<void>;
61
+ delete(sessionId: string): Promise<void>;
62
+ deleteAllForUser(userId: string): Promise<void>;
63
+ getForUser(userId: string): Promise<AuthSession[]>;
64
+ exists(sessionId: string): Promise<boolean>;
65
+ touch(sessionId: string): Promise<void>;
66
+ clear(): Promise<void>;
67
+ /**
68
+ * Get session count (for testing/monitoring)
69
+ */
70
+ get size(): number;
71
+ }
72
+ /**
73
+ * BaseAuthProvider - Abstract base class for all auth providers
74
+ *
75
+ * Subclasses must implement:
76
+ * - authenticateToken() - Validate and decode JWT/access tokens
77
+ *
78
+ * Optionally override:
79
+ * - getUser() - Fetch user by ID from provider
80
+ * - updateUserRoles() - Update user roles in provider
81
+ * - updateUserPermissions() - Update user permissions in provider
82
+ * - dispose() - Clean up resources
83
+ */
84
+ export declare abstract class BaseAuthProvider implements MastraAuthProvider {
85
+ abstract readonly type: AuthProviderType;
86
+ readonly config: AuthProviderConfig;
87
+ protected sessionStorage: SessionStorage;
88
+ protected sessionConfig: SessionConfig;
89
+ protected rbacConfig: RBACConfig;
90
+ protected emitter: EventEmitter<any>;
91
+ constructor(config: AuthProviderConfig);
92
+ /**
93
+ * Validate and authenticate a token
94
+ * Subclasses must implement provider-specific token validation
95
+ */
96
+ abstract authenticateToken(token: string, context?: AuthRequestContext): Promise<TokenValidationResult>;
97
+ /**
98
+ * Extract token using configured strategy
99
+ *
100
+ * Attempts extraction in order:
101
+ * 1. Header (Authorization: Bearer <token> by default)
102
+ * 2. Cookie
103
+ * 3. Query parameter
104
+ * 4. Custom function
105
+ *
106
+ * @param context - Request context containing headers, cookies, etc.
107
+ * @returns Extracted token or null if not found
108
+ */
109
+ extractToken(context: AuthRequestContext): Promise<string | null>;
110
+ /**
111
+ * Create a new session for an authenticated user
112
+ *
113
+ * Session duration and metadata are derived from `this.sessionConfig` and
114
+ * the optional `context`. This matches the `AuthSessionManager` type
115
+ * signature: `createSession(user, context?)`.
116
+ */
117
+ createSession(user: AuthUser, context?: AuthRequestContext): Promise<AuthSession>;
118
+ /**
119
+ * Validate an existing session
120
+ */
121
+ validateSession(sessionId: string): Promise<SessionValidationResult>;
122
+ /**
123
+ * Refresh a session (extend expiration)
124
+ */
125
+ refreshSession(sessionId: string): Promise<AuthSession>;
126
+ /**
127
+ * Revoke a session
128
+ *
129
+ * Marks the session as invalid rather than deleting it immediately.
130
+ * This keeps a tombstone so that "revoked" is distinguishable from
131
+ * "not found" during subsequent validation attempts.
132
+ */
133
+ revokeSession(sessionId: string): Promise<void>;
134
+ /**
135
+ * Revoke all sessions for a user
136
+ */
137
+ revokeAllSessions(userId: string): Promise<void>;
138
+ /**
139
+ * Check if a user is authorized for specific roles/permissions
140
+ */
141
+ authorize(user: AuthUser, options: {
142
+ roles?: string[];
143
+ permissions?: string[];
144
+ requireAllRoles?: boolean;
145
+ }): Promise<AuthorizationResult>;
146
+ /**
147
+ * Check if user is a super admin
148
+ */
149
+ protected isSuperAdmin(user: AuthUser): boolean;
150
+ /**
151
+ * Get effective roles including inherited roles from hierarchy (transitive)
152
+ */
153
+ protected getEffectiveRoles(user: AuthUser): Set<string>;
154
+ /**
155
+ * Get effective permissions including role-based permissions
156
+ */
157
+ protected getEffectivePermissions(user: AuthUser): Set<string>;
158
+ /**
159
+ * Check if a permission set grants a given permission.
160
+ * Supports exact match, global wildcard ("*"), and hierarchical wildcards
161
+ * (e.g. "tools:*" grants "tools:execute").
162
+ */
163
+ private hasPermission;
164
+ /**
165
+ * Parse JWT token (without validation)
166
+ */
167
+ protected parseJWT(token: string): TokenClaims | null;
168
+ /**
169
+ * Check if token is expired
170
+ */
171
+ protected isTokenExpired(claims: TokenClaims, clockTolerance?: number): boolean;
172
+ /**
173
+ * Check if token is not yet valid
174
+ */
175
+ protected isTokenNotYetValid(claims: TokenClaims, clockTolerance?: number): boolean;
176
+ /**
177
+ * Extract user from token claims
178
+ */
179
+ protected extractUserFromClaims(claims: TokenClaims, options?: {
180
+ rolesClaimKey?: string;
181
+ permissionsClaimKey?: string;
182
+ idClaimKey?: string;
183
+ }): AuthUser;
184
+ /**
185
+ * Get user by ID
186
+ * Override in subclass if provider supports user lookup
187
+ */
188
+ getUser?(_userId: string): Promise<AuthUser | null>;
189
+ /**
190
+ * Update user roles
191
+ * Override in subclass if provider supports role updates.
192
+ * Returns the user with updated roles.
193
+ */
194
+ updateUserRoles?(_userId: string, _roles: string[]): Promise<AuthUser>;
195
+ /**
196
+ * Update user permissions
197
+ * Override in subclass if provider supports permission updates.
198
+ * Returns the user with updated permissions.
199
+ */
200
+ updateUserPermissions?(_userId: string, _permissions: string[]): Promise<AuthUser>;
201
+ /**
202
+ * Clean up resources
203
+ */
204
+ dispose(): Promise<void>;
205
+ /**
206
+ * Check if a user is authorized to perform an action
207
+ */
208
+ authorizeUser(user: AuthUser, permission: string): Promise<AuthorizationResult>;
209
+ /**
210
+ * Check if user has specific roles
211
+ */
212
+ authorizeRoles(user: AuthUser, roles: string[]): Promise<AuthorizationResult>;
213
+ /**
214
+ * Check if user has all specified permissions
215
+ */
216
+ authorizePermissions(user: AuthUser, permissions: string[]): Promise<AuthorizationResult>;
217
+ /**
218
+ * Get an existing session by ID
219
+ */
220
+ getSession(sessionId: string): Promise<AuthSession | null>;
221
+ /**
222
+ * Invalidate/destroy a session
223
+ */
224
+ destroySession(sessionId: string): Promise<void>;
225
+ /**
226
+ * Get all active sessions for a user
227
+ */
228
+ getUserSessions(userId: string): Promise<AuthSession[]>;
229
+ /**
230
+ * Invalidate all sessions for a user (global logout)
231
+ */
232
+ destroyAllUserSessions(userId: string): Promise<void>;
233
+ /**
234
+ * Full request authentication flow
235
+ *
236
+ * Combines token extraction (with full strategy support), validation,
237
+ * and session creation/reuse.
238
+ *
239
+ * @param context - Request context
240
+ * @returns Authenticated context with user and session, or null
241
+ */
242
+ authenticateRequest(context: AuthRequestContext): Promise<AuthenticatedContext | null>;
243
+ /**
244
+ * Check provider health
245
+ */
246
+ healthCheck(): Promise<AuthHealthCheck>;
247
+ /**
248
+ * Subscribe to auth events
249
+ */
250
+ on(event: string, listener: (...args: unknown[]) => void): void;
251
+ /**
252
+ * Unsubscribe from auth events
253
+ */
254
+ off(event: string, listener: (...args: unknown[]) => void): void;
255
+ /**
256
+ * Emit an auth event
257
+ */
258
+ protected emit(event: string, ...args: unknown[]): void;
259
+ }