@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,285 @@
1
+ // src/lib/auth/providers/workos.ts
2
+ import { logger } from "../../utils/logger.js";
3
+ import { createProxyFetch } from "../../proxy/proxyFetch.js";
4
+ import { AuthError } from "../errors.js";
5
+ import * as jose from "jose";
6
+ import { BaseAuthProvider } from "./BaseAuthProvider.js";
7
+ /**
8
+ * WorkOS Authentication Provider
9
+ *
10
+ * Supports WorkOS for enterprise SSO and user management.
11
+ * Validates JWTs issued by WorkOS and fetches user information.
12
+ *
13
+ * Features:
14
+ * - JWT validation using WorkOS JWKS
15
+ * - SSO token validation
16
+ * - Enterprise directory integration
17
+ * - Organization support for multi-tenant apps
18
+ * - Session management (inherited from BaseAuthProvider)
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const workos = new WorkOSProvider({
23
+ * type: "workos",
24
+ * apiKey: "sk_...",
25
+ * clientId: "client_..."
26
+ * });
27
+ *
28
+ * const result = await workos.authenticateToken(accessToken);
29
+ * if (result.valid) {
30
+ * console.log("Authenticated user:", result.user);
31
+ * }
32
+ * ```
33
+ */
34
+ export class WorkOSProvider extends BaseAuthProvider {
35
+ type = "workos";
36
+ apiKey;
37
+ clientId;
38
+ organizationId;
39
+ jwks = null;
40
+ constructor(config) {
41
+ super(config);
42
+ if (!config.apiKey) {
43
+ throw AuthError.create("CONFIGURATION_ERROR", "WorkOS API key is required", { details: { provider: "workos", missingFields: ["apiKey"] } });
44
+ }
45
+ if (!config.clientId) {
46
+ throw AuthError.create("CONFIGURATION_ERROR", "WorkOS client ID is required", { details: { provider: "workos", missingFields: ["clientId"] } });
47
+ }
48
+ this.apiKey = config.apiKey;
49
+ this.clientId = config.clientId;
50
+ this.organizationId = config.organizationId;
51
+ }
52
+ /**
53
+ * Initialize JWKS for WorkOS token verification
54
+ */
55
+ async initialize() {
56
+ const jwksUrl = new URL("https://api.workos.com/sso/jwks");
57
+ this.jwks = jose.createRemoteJWKSet(jwksUrl);
58
+ logger.debug("WorkOS provider initialized");
59
+ }
60
+ /**
61
+ * Validate WorkOS access token
62
+ */
63
+ async authenticateToken(token, _context) {
64
+ if (!this.jwks) {
65
+ await this.initialize();
66
+ }
67
+ try {
68
+ // Verify the JWT
69
+ const { payload } = await jose.jwtVerify(token, this.jwks, {
70
+ audience: this.clientId,
71
+ });
72
+ // Enforce organizationId if configured
73
+ if (this.organizationId &&
74
+ payload.org_id !== this.organizationId) {
75
+ return {
76
+ valid: false,
77
+ error: `Organization mismatch: expected ${this.organizationId}, got ${payload.org_id}`,
78
+ };
79
+ }
80
+ const user = {
81
+ id: payload.sub,
82
+ email: payload.email,
83
+ name: payload.first_name && payload.last_name
84
+ ? `${payload.first_name} ${payload.last_name}`.trim()
85
+ : undefined,
86
+ emailVerified: true, // WorkOS verifies emails via SSO
87
+ roles: payload.roles || [],
88
+ permissions: payload.permissions || [],
89
+ organizationId: payload.org_id,
90
+ metadata: {
91
+ connection_id: payload.connection_id,
92
+ connection_type: payload.connection_type,
93
+ idp_id: payload.idp_id,
94
+ },
95
+ };
96
+ return {
97
+ valid: true,
98
+ payload: payload,
99
+ user,
100
+ expiresAt: payload.exp ? new Date(payload.exp * 1000) : undefined,
101
+ tokenType: "jwt",
102
+ };
103
+ }
104
+ catch {
105
+ // If JWT validation fails, try session validation via API
106
+ return this.validateSessionViaAPI(token);
107
+ }
108
+ }
109
+ /**
110
+ * Validate session via WorkOS API
111
+ */
112
+ async validateSessionViaAPI(token) {
113
+ try {
114
+ const proxyFetch = createProxyFetch();
115
+ const response = await proxyFetch("https://api.workos.com/user_management/authenticate", {
116
+ method: "POST",
117
+ headers: {
118
+ Authorization: `Bearer ${this.apiKey}`,
119
+ "Content-Type": "application/json",
120
+ },
121
+ body: JSON.stringify({
122
+ session_token: token,
123
+ client_id: this.clientId,
124
+ }),
125
+ signal: AbortSignal.timeout(5000),
126
+ });
127
+ if (!response.ok) {
128
+ return {
129
+ valid: false,
130
+ error: `Session validation failed: HTTP ${response.status}`,
131
+ };
132
+ }
133
+ const data = (await response.json());
134
+ if (!data.user) {
135
+ return {
136
+ valid: false,
137
+ error: "User not found in session",
138
+ };
139
+ }
140
+ // Enforce organizationId if configured
141
+ if (this.organizationId && data.organization_id !== this.organizationId) {
142
+ return {
143
+ valid: false,
144
+ error: `Organization mismatch: expected ${this.organizationId}, got ${data.organization_id}`,
145
+ };
146
+ }
147
+ const user = {
148
+ id: data.user.id,
149
+ email: data.user.email,
150
+ name: data.user.first_name && data.user.last_name
151
+ ? `${data.user.first_name} ${data.user.last_name}`.trim()
152
+ : undefined,
153
+ picture: data.user.profile_picture_url,
154
+ emailVerified: data.user.email_verified,
155
+ roles: [],
156
+ permissions: [],
157
+ organizationId: data.organization_id,
158
+ createdAt: data.user.created_at
159
+ ? new Date(data.user.created_at)
160
+ : undefined,
161
+ metadata: data.user,
162
+ };
163
+ return {
164
+ valid: true,
165
+ payload: data,
166
+ user,
167
+ tokenType: "session",
168
+ };
169
+ }
170
+ catch (error) {
171
+ return {
172
+ valid: false,
173
+ error: error instanceof Error ? error.message : String(error),
174
+ };
175
+ }
176
+ }
177
+ /**
178
+ * Get user by ID via WorkOS API
179
+ */
180
+ async getUser(userId) {
181
+ try {
182
+ const proxyFetch = createProxyFetch();
183
+ const response = await proxyFetch(`https://api.workos.com/user_management/users/${userId}`, {
184
+ headers: {
185
+ Authorization: `Bearer ${this.apiKey}`,
186
+ },
187
+ });
188
+ if (!response.ok) {
189
+ if (response.status === 404) {
190
+ return null;
191
+ }
192
+ throw AuthError.create("PROVIDER_ERROR", `WorkOS API returned ${response.status}`, { details: { provider: "workos", statusCode: response.status } });
193
+ }
194
+ const data = (await response.json());
195
+ return {
196
+ id: data.id,
197
+ email: data.email,
198
+ name: data.first_name && data.last_name
199
+ ? `${data.first_name} ${data.last_name}`.trim()
200
+ : undefined,
201
+ picture: data.profile_picture_url,
202
+ emailVerified: data.email_verified,
203
+ roles: [],
204
+ permissions: [],
205
+ createdAt: data.created_at
206
+ ? new Date(data.created_at)
207
+ : undefined,
208
+ metadata: data,
209
+ };
210
+ }
211
+ catch (error) {
212
+ logger.error("Failed to fetch WorkOS user:", error instanceof Error ? error.message : String(error));
213
+ // Always rethrow -- transport errors should not be silenced as null
214
+ throw error;
215
+ }
216
+ }
217
+ /**
218
+ * Get user by email via WorkOS API
219
+ */
220
+ async getUserByEmail(email) {
221
+ try {
222
+ const proxyFetch = createProxyFetch();
223
+ const response = await proxyFetch(`https://api.workos.com/user_management/users?email=${encodeURIComponent(email)}`, {
224
+ headers: {
225
+ Authorization: `Bearer ${this.apiKey}`,
226
+ },
227
+ });
228
+ if (!response.ok) {
229
+ throw AuthError.create("PROVIDER_ERROR", `WorkOS API returned ${response.status}`, { details: { provider: "workos", statusCode: response.status } });
230
+ }
231
+ const result = (await response.json());
232
+ const users = result.data || [];
233
+ if (users.length === 0) {
234
+ return null;
235
+ }
236
+ const data = users[0];
237
+ return {
238
+ id: data.id,
239
+ email: data.email,
240
+ name: data.first_name && data.last_name
241
+ ? `${data.first_name} ${data.last_name}`.trim()
242
+ : undefined,
243
+ picture: data.profile_picture_url,
244
+ emailVerified: data.email_verified,
245
+ roles: [],
246
+ permissions: [],
247
+ createdAt: data.created_at
248
+ ? new Date(data.created_at)
249
+ : undefined,
250
+ metadata: data,
251
+ };
252
+ }
253
+ catch (error) {
254
+ logger.error("Failed to fetch WorkOS user by email:", error instanceof Error ? error.message : String(error));
255
+ // Rethrow AuthErrors, silence unknown transport errors
256
+ if (error instanceof Error && error.name === "AuthError") {
257
+ throw error;
258
+ }
259
+ return null;
260
+ }
261
+ }
262
+ /**
263
+ * Health check
264
+ */
265
+ async healthCheck() {
266
+ try {
267
+ const proxyFetch = createProxyFetch();
268
+ const response = await proxyFetch("https://api.workos.com/sso/jwks");
269
+ return {
270
+ healthy: response.ok,
271
+ providerConnected: response.ok,
272
+ sessionStorageHealthy: true,
273
+ };
274
+ }
275
+ catch (error) {
276
+ return {
277
+ healthy: false,
278
+ providerConnected: false,
279
+ sessionStorageHealthy: true,
280
+ error: error instanceof Error ? error.message : String(error),
281
+ };
282
+ }
283
+ }
284
+ }
285
+ //# sourceMappingURL=workos.js.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Bridge between auth providers and NeuroLink's server middleware.
3
+ * Converts an auth provider's authenticateToken() into the validate
4
+ * callback expected by the existing createAuthMiddleware.
5
+ */
6
+ import type { MastraAuthProvider } from "../types/authTypes.js";
7
+ /**
8
+ * Create a validate function for server auth middleware from an auth provider.
9
+ */
10
+ export declare function createAuthValidatorFromProvider(provider: MastraAuthProvider): (token: string, ctx: unknown) => Promise<{
11
+ id: string;
12
+ email?: string;
13
+ roles?: string[];
14
+ } | null>;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Bridge between auth providers and NeuroLink's server middleware.
3
+ * Converts an auth provider's authenticateToken() into the validate
4
+ * callback expected by the existing createAuthMiddleware.
5
+ */
6
+ /**
7
+ * Create a validate function for server auth middleware from an auth provider.
8
+ */
9
+ export function createAuthValidatorFromProvider(provider) {
10
+ return async (token, ctx) => {
11
+ const result = await provider.authenticateToken(token, ctx);
12
+ if (!result.valid) {
13
+ return null;
14
+ }
15
+ if (result.user) {
16
+ return {
17
+ id: result.user.id,
18
+ email: result.user.email,
19
+ roles: result.user.roles,
20
+ };
21
+ }
22
+ // Fail closed: valid token without a resolved user is treated as failure
23
+ return null;
24
+ };
25
+ }
26
+ //# sourceMappingURL=serverBridge.js.map
@@ -0,0 +1,142 @@
1
+ import type { AuthUser, AuthSession, SessionConfig } from "../types/authTypes.js";
2
+ /**
3
+ * Session storage interface for SessionManager
4
+ *
5
+ * Defines the contract for session storage backends (memory, Redis, custom).
6
+ * Note: This is a SessionManager-specific interface that uses `set()`/`getUserSessions()`/
7
+ * `deleteUserSessions()`/`isHealthy()` method names, which differ from the canonical
8
+ * `SessionStorage` type in `../types/authTypes.js` (which uses `save()`/`getForUser()`/
9
+ * `deleteAllForUser()`/`exists()`/`touch()`). Both interfaces coexist because
10
+ * SessionManager and BaseAuthProvider have separate storage patterns.
11
+ */
12
+ export interface SessionManagerStorage {
13
+ /** Get a session by ID */
14
+ get(sessionId: string): Promise<AuthSession | null>;
15
+ /** Store a session */
16
+ set(session: AuthSession): Promise<void>;
17
+ /** Delete a session */
18
+ delete(sessionId: string): Promise<void>;
19
+ /** Get all sessions for a user */
20
+ getUserSessions(userId: string): Promise<AuthSession[]>;
21
+ /** Delete all sessions for a user */
22
+ deleteUserSessions(userId: string): Promise<void>;
23
+ /** Clear all sessions (for cleanup) */
24
+ clear(): Promise<void>;
25
+ /** Health check */
26
+ isHealthy(): Promise<boolean>;
27
+ }
28
+ /**
29
+ * In-memory session storage
30
+ *
31
+ * Simple session storage using Map. Suitable for single-instance deployments
32
+ * or development. Sessions are lost on restart.
33
+ */
34
+ export declare class MemorySessionStorage implements SessionManagerStorage {
35
+ private sessions;
36
+ private userSessions;
37
+ get(sessionId: string): Promise<AuthSession | null>;
38
+ set(session: AuthSession): Promise<void>;
39
+ delete(sessionId: string): Promise<void>;
40
+ getUserSessions(userId: string): Promise<AuthSession[]>;
41
+ deleteUserSessions(userId: string): Promise<void>;
42
+ clear(): Promise<void>;
43
+ isHealthy(): Promise<boolean>;
44
+ }
45
+ /**
46
+ * Redis session storage
47
+ *
48
+ * Distributed session storage using Redis. Suitable for multi-instance
49
+ * deployments. Requires ioredis or similar Redis client.
50
+ *
51
+ * Note: Redis client must be provided or configured via environment.
52
+ */
53
+ export declare class RedisSessionStorage implements SessionManagerStorage {
54
+ private prefix;
55
+ private ttl;
56
+ private redisUrl;
57
+ private client;
58
+ private initPromise;
59
+ constructor(config: {
60
+ url: string;
61
+ prefix?: string;
62
+ ttl?: number;
63
+ });
64
+ private getClient;
65
+ private createClient;
66
+ private sessionKey;
67
+ private userSessionsKey;
68
+ get(sessionId: string): Promise<AuthSession | null>;
69
+ set(session: AuthSession): Promise<void>;
70
+ delete(sessionId: string): Promise<void>;
71
+ getUserSessions(userId: string): Promise<AuthSession[]>;
72
+ deleteUserSessions(userId: string): Promise<void>;
73
+ clear(): Promise<void>;
74
+ isHealthy(): Promise<boolean>;
75
+ disconnect(): Promise<void>;
76
+ }
77
+ /**
78
+ * Session Manager
79
+ *
80
+ * High-level session management that handles session lifecycle,
81
+ * automatic refresh, and storage abstraction.
82
+ */
83
+ export declare class SessionManager {
84
+ private storage;
85
+ private config;
86
+ constructor(config?: SessionConfig);
87
+ private createStorage;
88
+ /**
89
+ * Create a new session
90
+ */
91
+ createSession(user: AuthUser, metadata?: {
92
+ ipAddress?: string;
93
+ userAgent?: string;
94
+ deviceId?: string;
95
+ }): Promise<AuthSession>;
96
+ /**
97
+ * Get a session by ID
98
+ *
99
+ * Optionally auto-refreshes if close to expiration.
100
+ */
101
+ getSession(sessionId: string, autoRefresh?: boolean | undefined): Promise<AuthSession | null>;
102
+ /**
103
+ * Check if session should be refreshed
104
+ */
105
+ private shouldRefresh;
106
+ /**
107
+ * Refresh a session
108
+ */
109
+ refreshSession(sessionId: string): Promise<AuthSession | null>;
110
+ /**
111
+ * Destroy a session
112
+ */
113
+ destroySession(sessionId: string): Promise<void>;
114
+ /**
115
+ * Get all sessions for a user
116
+ */
117
+ getUserSessions(userId: string): Promise<AuthSession[]>;
118
+ /**
119
+ * Destroy all sessions for a user (global logout)
120
+ */
121
+ destroyAllUserSessions(userId: string): Promise<void>;
122
+ /**
123
+ * Validate a session is still active
124
+ */
125
+ validateSession(sessionId: string): Promise<boolean>;
126
+ /**
127
+ * Update session metadata
128
+ */
129
+ updateSessionMetadata(sessionId: string, metadata: Record<string, unknown>): Promise<AuthSession | null>;
130
+ /**
131
+ * Health check
132
+ */
133
+ isHealthy(): Promise<boolean>;
134
+ /**
135
+ * Clear all sessions (for testing/cleanup)
136
+ */
137
+ clear(): Promise<void>;
138
+ }
139
+ /**
140
+ * Create session storage based on configuration
141
+ */
142
+ export declare function createSessionStorage(config: SessionConfig): SessionManagerStorage;