@vunexa/lixa 0.1.6-alpha.8 → 0.1.6-alpha.9
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/dao/session-cache.d.ts +2 -1
- package/dist/dao/session-cache.d.ts.map +1 -1
- package/dist/dao/state-cache.d.ts +4 -0
- package/dist/dao/state-cache.d.ts.map +1 -1
- package/dist/dao/types.d.ts +21 -75
- package/dist/dao/types.d.ts.map +1 -1
- package/dist/export-types/index.d.ts +177 -94
- package/dist/express.d.ts +103 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/index.cjs +212 -98
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +166 -95
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +206 -97
- package/dist/index.js.map +1 -1
- package/dist/lixa.d.ts +14 -19
- package/dist/lixa.d.ts.map +1 -1
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cookies.d.ts +1 -1
- package/dist/utils/cookies.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,8 @@ declare class LocalSessionHandler implements SessionHandler {
|
|
|
5
5
|
private emailToSessionMap;
|
|
6
6
|
sessionStorage: SessionStorage;
|
|
7
7
|
constructor(defaultTtlSeconds?: number);
|
|
8
|
-
|
|
8
|
+
generateSession<T extends Session>(tokenData: OAuthTokenResponse, _providerMetadata?: ProviderMetadata): Promise<T>;
|
|
9
|
+
GenerateSession<T extends Session>(tokenData: OAuthTokenResponse, providerMetadata?: ProviderMetadata): Promise<T>;
|
|
9
10
|
}
|
|
10
11
|
export { LocalSessionHandler };
|
|
11
12
|
//# sourceMappingURL=session-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-cache.d.ts","sourceRoot":"","sources":["../../src/dao/session-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEvF,cAAM,mBAAoB,YAAW,cAAc;IACjD,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,iBAAiB,CAAkC;IACpD,cAAc,EAAE,cAAc,CAAC;gBAE1B,iBAAiB,GAAE,MAAY;
|
|
1
|
+
{"version":3,"file":"session-cache.d.ts","sourceRoot":"","sources":["../../src/dao/session-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEvF,cAAM,mBAAoB,YAAW,cAAc;IACjD,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,iBAAiB,CAAkC;IACpD,cAAc,EAAE,cAAc,CAAC;gBAE1B,iBAAiB,GAAE,MAAY;IAwDrC,eAAe,CAAC,CAAC,SAAS,OAAO,EACrC,SAAS,EAAE,kBAAkB,EAC7B,iBAAiB,CAAC,EAAE,gBAAgB,GACnC,OAAO,CAAC,CAAC,CAAC;IAcP,eAAe,CAAC,CAAC,SAAS,OAAO,EACrC,SAAS,EAAE,kBAAkB,EAC7B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,CAAC,CAAC;CAGd;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -7,6 +7,10 @@ declare class LocalStateHandler implements StateHandler {
|
|
|
7
7
|
state: string;
|
|
8
8
|
data: StateData;
|
|
9
9
|
}>;
|
|
10
|
+
GenerateState(provider: string): Promise<{
|
|
11
|
+
state: string;
|
|
12
|
+
data: StateData;
|
|
13
|
+
}>;
|
|
10
14
|
}
|
|
11
15
|
export { LocalStateHandler };
|
|
12
16
|
//# sourceMappingURL=state-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-cache.d.ts","sourceRoot":"","sources":["../../src/dao/state-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEhE,cAAM,iBAAkB,YAAW,YAAY;IAC7C,OAAO,CAAC,KAAK,CAAY;IAClB,YAAY,EAAE,YAAY,CAAC;gBAEtB,iBAAiB,GAAE,MAAY;IAoBrC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"state-cache.d.ts","sourceRoot":"","sources":["../../src/dao/state-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEhE,cAAM,iBAAkB,YAAW,YAAY;IAC7C,OAAO,CAAC,KAAK,CAAY;IAClB,YAAY,EAAE,YAAY,CAAC;gBAEtB,iBAAiB,GAAE,MAAY;IAoBrC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IAe5E,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;CAGnF;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/dao/types.d.ts
CHANGED
|
@@ -164,10 +164,20 @@ export interface StateHandler {
|
|
|
164
164
|
* }
|
|
165
165
|
* ```
|
|
166
166
|
*/
|
|
167
|
+
/**
|
|
168
|
+
* Generates OAuth state parameter and associated data (camelCase).
|
|
169
|
+
*/
|
|
167
170
|
generateState?(provider: string): Promise<{
|
|
168
171
|
state: string;
|
|
169
172
|
data: StateData;
|
|
170
173
|
}>;
|
|
174
|
+
/**
|
|
175
|
+
* Generates OAuth state parameter and associated data (PascalCase alias for backward compatibility).
|
|
176
|
+
*/
|
|
177
|
+
GenerateState?(provider: string): Promise<{
|
|
178
|
+
state: string;
|
|
179
|
+
data: StateData;
|
|
180
|
+
}>;
|
|
171
181
|
/**
|
|
172
182
|
* State storage operations.
|
|
173
183
|
*
|
|
@@ -193,7 +203,7 @@ export interface SessionStorage {
|
|
|
193
203
|
* Saves a session with expiration.
|
|
194
204
|
*
|
|
195
205
|
* @param sessionId - Unique session identifier
|
|
196
|
-
* @param session - Session data from
|
|
206
|
+
* @param session - Session data from generateSession()
|
|
197
207
|
* @param expiresInSeconds - TTL in seconds (typically 86400 for 24 hours)
|
|
198
208
|
*/
|
|
199
209
|
saveSession<T extends Session>(sessionId: string, session: T, expiresInSeconds: number): Promise<void>;
|
|
@@ -273,13 +283,13 @@ export interface ResourceHandler {
|
|
|
273
283
|
* @remarks
|
|
274
284
|
* The SessionHandler manages session generation and storage after successful OAuth authentication.
|
|
275
285
|
*
|
|
276
|
-
* -
|
|
286
|
+
* - generateSession: Optional. Customizes how OAuth tokens are converted into session data.
|
|
277
287
|
* If not provided, uses default implementation (access token as session token).
|
|
278
288
|
*
|
|
279
|
-
* -
|
|
289
|
+
* - sessionStorage: Optional. Provides custom session storage (save/get/delete operations).
|
|
280
290
|
* If not provided, uses in-memory cache (not suitable for production).
|
|
281
291
|
*
|
|
282
|
-
* For production, implement both
|
|
292
|
+
* For production, implement both generateSession (for user creation/lookup) and sessionStorage
|
|
283
293
|
* (for persistent session storage with Redis, database, etc.).
|
|
284
294
|
*
|
|
285
295
|
* @example
|
|
@@ -288,7 +298,7 @@ export interface ResourceHandler {
|
|
|
288
298
|
* import { SessionHandler, Session, OAuthTokenResponse, ProviderMetadata, extractUserInfo } from '@vunexa/lixa';
|
|
289
299
|
*
|
|
290
300
|
* const sessionHandler: SessionHandler = {
|
|
291
|
-
*
|
|
301
|
+
* generateSession: async (tokenData, providerMetadata) => {
|
|
292
302
|
* // Extract user info and create/retrieve user
|
|
293
303
|
* const { userInfo } = await extractUserInfo(tokenData, providerMetadata);
|
|
294
304
|
* const user = await db.users.upsert({
|
|
@@ -307,7 +317,7 @@ export interface ResourceHandler {
|
|
|
307
317
|
* };
|
|
308
318
|
* },
|
|
309
319
|
*
|
|
310
|
-
*
|
|
320
|
+
* sessionStorage: {
|
|
311
321
|
* saveSession: async (sessionId, session, expiresInSeconds) => {
|
|
312
322
|
* const expiresAt = new Date(Date.now() + expiresInSeconds * 1000);
|
|
313
323
|
* await db.sessions.create({
|
|
@@ -333,78 +343,21 @@ export interface ResourceHandler {
|
|
|
333
343
|
* };
|
|
334
344
|
* ```
|
|
335
345
|
*
|
|
336
|
-
* @example
|
|
337
|
-
* Minimal implementation (uses defaults):
|
|
338
|
-
* ```typescript
|
|
339
|
-
* const sessionHandler: SessionHandler = {
|
|
340
|
-
* storage: {
|
|
341
|
-
* saveSession: async (sessionId, session, expiresInSeconds) => {
|
|
342
|
-
* await redis.setex(sessionId, expiresInSeconds, JSON.stringify(session));
|
|
343
|
-
* },
|
|
344
|
-
* getSession: async (sessionId) => {
|
|
345
|
-
* const data = await redis.get(sessionId);
|
|
346
|
-
* return data ? JSON.parse(data) : null;
|
|
347
|
-
* },
|
|
348
|
-
* deleteSession: async (sessionId) => {
|
|
349
|
-
* await redis.del(sessionId);
|
|
350
|
-
* }
|
|
351
|
-
* }
|
|
352
|
-
* };
|
|
353
|
-
* ```
|
|
354
|
-
*
|
|
355
346
|
* @public
|
|
356
347
|
*/
|
|
357
348
|
export interface SessionHandler {
|
|
358
349
|
/**
|
|
359
|
-
* Generates session data from OAuth token data.
|
|
350
|
+
* Generates session data from OAuth token data (camelCase).
|
|
360
351
|
*
|
|
361
352
|
* @param tokenData - The token data received from the OAuth provider's token endpoint
|
|
362
353
|
* @param providerMetadata - Provider metadata including name and endpoints
|
|
363
354
|
* @returns A Promise that resolves to session data
|
|
364
|
-
*
|
|
365
|
-
* @remarks
|
|
366
|
-
* This method is responsible for creating session data from OAuth tokens.
|
|
367
|
-
* It is called after successfully exchanging the authorization code for tokens.
|
|
368
|
-
*
|
|
369
|
-
* Token Data:
|
|
370
|
-
* - access_token: OAuth access token
|
|
371
|
-
* - refresh_token: OAuth refresh token (optional)
|
|
372
|
-
* - expires_in: Token expiration time in seconds
|
|
373
|
-
* - token_type: Token type (usually "Bearer")
|
|
374
|
-
* - id_token: OpenID Connect ID token (for OIDC providers)
|
|
375
|
-
* - scope: Granted scopes
|
|
376
|
-
*
|
|
377
|
-
* Provider Metadata:
|
|
378
|
-
* - name: The provider name (e.g., 'google', 'github')
|
|
379
|
-
* - endpoints: Provider endpoints (authorization, token, userInfo)
|
|
380
|
-
*
|
|
381
|
-
* Your implementation should:
|
|
382
|
-
* 1. Extract user info (using extractUserInfo or decode ID token)
|
|
383
|
-
* 2. Create or lookup users in your database
|
|
384
|
-
* 3. Build and return session data with any custom fields
|
|
385
|
-
*
|
|
386
|
-
* Note: This method should NOT store the session. Storage is handled by the storage object.
|
|
387
|
-
*
|
|
388
|
-
* If not provided, defaults to using the access token as the session token.
|
|
389
|
-
*
|
|
390
|
-
* @example
|
|
391
|
-
* ```typescript
|
|
392
|
-
* GenerateSession: async (tokenData, providerMetadata) => {
|
|
393
|
-
* const { userInfo } = await extractUserInfo(tokenData, providerMetadata);
|
|
394
|
-
* const user = await db.users.upsert({ email: userInfo.email });
|
|
395
|
-
*
|
|
396
|
-
* return {
|
|
397
|
-
* token: tokenData.access_token,
|
|
398
|
-
* raw: {
|
|
399
|
-
* ...tokenData,
|
|
400
|
-
* userId: user.id,
|
|
401
|
-
* provider: providerMetadata.name
|
|
402
|
-
* }
|
|
403
|
-
* };
|
|
404
|
-
* }
|
|
405
|
-
* ```
|
|
406
355
|
*/
|
|
407
356
|
generateSession?<T extends Session>(tokenData: import('../models/session').OAuthTokenResponse, providerMetadata: import('../models/session').ProviderMetadata): Promise<T>;
|
|
357
|
+
/**
|
|
358
|
+
* Generates session data from OAuth token data (PascalCase alias for backward compatibility).
|
|
359
|
+
*/
|
|
360
|
+
GenerateSession?<T extends Session>(tokenData: import('../models/session').OAuthTokenResponse, providerMetadata: import('../models/session').ProviderMetadata): Promise<T>;
|
|
408
361
|
/**
|
|
409
362
|
* Session storage operations.
|
|
410
363
|
*
|
|
@@ -415,12 +368,5 @@ export interface SessionHandler {
|
|
|
415
368
|
* If not provided, uses in-memory cache (not suitable for production).
|
|
416
369
|
*/
|
|
417
370
|
sessionStorage?: SessionStorage;
|
|
418
|
-
/**
|
|
419
|
-
* Optional method to generate session data from OAuth tokens.
|
|
420
|
-
*
|
|
421
|
-
* @remarks
|
|
422
|
-
* If not provided, uses default implementation from LocalSessionHandler.
|
|
423
|
-
*/
|
|
424
|
-
generateSession?<T extends Session>(tokenData: import('../models/session').OAuthTokenResponse, providerMetadata: import('../models/session').ProviderMetadata): Promise<T>;
|
|
425
371
|
}
|
|
426
372
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/dao/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dao/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnF;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,aAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAE9E;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvG;;;;;OAKG;IACH,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEpE;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACzG;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,mBAAmB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvH;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,mBAAmB,EAAE,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAE7G;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEzG;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dao/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnF;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH;;OAEG;IACH,aAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAE9E;;OAEG;IACH,aAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAE9E;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvG;;;;;OAKG;IACH,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEpE;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACzG;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,mBAAmB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvH;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,mBAAmB,EAAE,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAE7G;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEzG;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,CAAC,SAAS,OAAO,EAChC,SAAS,EAAE,OAAO,mBAAmB,EAAE,kBAAkB,EACzD,gBAAgB,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,GAC7D,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;OAEG;IACH,eAAe,CAAC,CAAC,CAAC,SAAS,OAAO,EAChC,SAAS,EAAE,OAAO,mBAAmB,EAAE,kBAAkB,EACzD,gBAAgB,EAAE,OAAO,mBAAmB,EAAE,gBAAgB,GAC7D,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC"}
|
|
@@ -149,6 +149,16 @@ export declare class AccountUnlinkError extends LixaError {
|
|
|
149
149
|
*/
|
|
150
150
|
export declare function clearSessionCookie(options?: CookieOptions): CookiePayload;
|
|
151
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Clears the session cookie on an Express response.
|
|
154
|
+
*
|
|
155
|
+
* @param res - Express response object
|
|
156
|
+
* @param options - Optional cookie attribute overrides
|
|
157
|
+
*
|
|
158
|
+
* @public
|
|
159
|
+
*/
|
|
160
|
+
export declare function clearSessionCookieOnResponse(res: ExpressLikeResponse, options?: CookieOptions): void;
|
|
161
|
+
|
|
152
162
|
/**
|
|
153
163
|
* Generates an expired OAuth state cookie payload to clean up the state cookie after callback.
|
|
154
164
|
*
|
|
@@ -158,6 +168,16 @@ export declare function clearSessionCookie(options?: CookieOptions): CookiePaylo
|
|
|
158
168
|
*/
|
|
159
169
|
export declare function clearStateCookie(options?: CookieOptions): CookiePayload;
|
|
160
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Clears the OAuth CSRF state cookie on an Express response.
|
|
173
|
+
*
|
|
174
|
+
* @param res - Express response object
|
|
175
|
+
* @param options - Optional cookie attribute overrides
|
|
176
|
+
*
|
|
177
|
+
* @public
|
|
178
|
+
*/
|
|
179
|
+
export declare function clearStateCookieOnResponse(res: ExpressLikeResponse, options?: CookieOptions): void;
|
|
180
|
+
|
|
161
181
|
/**
|
|
162
182
|
* Type representing the keys of configured providers
|
|
163
183
|
*/
|
|
@@ -243,6 +263,27 @@ export declare interface CookiePayload {
|
|
|
243
263
|
header: string;
|
|
244
264
|
}
|
|
245
265
|
|
|
266
|
+
/**
|
|
267
|
+
* Creates an Express authentication middleware that verifies the session cookie and populates req.sessionInfo.
|
|
268
|
+
*
|
|
269
|
+
* @param lixa - Lixa instance
|
|
270
|
+
* @param options - Optional session cookie name and custom unauthorized handler
|
|
271
|
+
*
|
|
272
|
+
* @example
|
|
273
|
+
* ```typescript
|
|
274
|
+
* const requireAuth = createRequireAuthMiddleware(lixa);
|
|
275
|
+
* app.get('/protected', requireAuth, (req, res) => {
|
|
276
|
+
* res.json({ user: req.sessionInfo });
|
|
277
|
+
* });
|
|
278
|
+
* ```
|
|
279
|
+
*
|
|
280
|
+
* @public
|
|
281
|
+
*/
|
|
282
|
+
export declare function createRequireAuthMiddleware(lixa: Lixa<any>, options?: {
|
|
283
|
+
sessionCookieName?: string;
|
|
284
|
+
unauthorizedHandler?: (req: ExpressLikeRequest, res: ExpressLikeResponse) => void;
|
|
285
|
+
}): ExpressLikeRequestHandler;
|
|
286
|
+
|
|
246
287
|
/**
|
|
247
288
|
* Generates a session cookie payload with secure default options.
|
|
248
289
|
*
|
|
@@ -297,7 +338,7 @@ export declare const DEFAULT_SESSION_MAX_AGE_SECONDS: number;
|
|
|
297
338
|
export declare const DEFAULT_STATE_COOKIE_NAME = "lixa_oauth_state";
|
|
298
339
|
|
|
299
340
|
/**
|
|
300
|
-
* Default OAuth state max age in seconds (
|
|
341
|
+
* Default OAuth state max age in seconds (5 minutes / 300 seconds).
|
|
301
342
|
* @public
|
|
302
343
|
*/
|
|
303
344
|
export declare const DEFAULT_STATE_MAX_AGE_SECONDS: number;
|
|
@@ -318,6 +359,53 @@ export declare class EmailNotVerifiedError extends LixaError {
|
|
|
318
359
|
constructor(email?: string, details?: Record<string, unknown>);
|
|
319
360
|
}
|
|
320
361
|
|
|
362
|
+
/**
|
|
363
|
+
* Options for Express authentication helpers.
|
|
364
|
+
* @public
|
|
365
|
+
*/
|
|
366
|
+
export declare interface ExpressAuthHelperOptions {
|
|
367
|
+
sessionCookieName?: string;
|
|
368
|
+
sessionCookieOptions?: CookieOptions;
|
|
369
|
+
stateCookieOptions?: CookieOptions;
|
|
370
|
+
successRedirectUrl?: string;
|
|
371
|
+
errorRedirectUrl?: string;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Express-compatible NextFunction type.
|
|
376
|
+
* @public
|
|
377
|
+
*/
|
|
378
|
+
declare type ExpressLikeNextFunction = (err?: any) => void;
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Duck-typed Express request interface for framework-agnostic typing.
|
|
382
|
+
* @public
|
|
383
|
+
*/
|
|
384
|
+
declare interface ExpressLikeRequest {
|
|
385
|
+
cookies?: Record<string, string>;
|
|
386
|
+
sessionInfo?: any;
|
|
387
|
+
sessionId?: string;
|
|
388
|
+
[key: string]: any;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Express-compatible RequestHandler type.
|
|
393
|
+
* @public
|
|
394
|
+
*/
|
|
395
|
+
declare type ExpressLikeRequestHandler = (req: ExpressLikeRequest, res: ExpressLikeResponse, next: ExpressLikeNextFunction) => any;
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Duck-typed Express response interface for framework-agnostic typing.
|
|
399
|
+
* @public
|
|
400
|
+
*/
|
|
401
|
+
declare interface ExpressLikeResponse {
|
|
402
|
+
cookie(name: string, value: string, options?: any): any;
|
|
403
|
+
status(code: number): this;
|
|
404
|
+
json(body: any): any;
|
|
405
|
+
redirect?(url: string): any;
|
|
406
|
+
[key: string]: any;
|
|
407
|
+
}
|
|
408
|
+
|
|
321
409
|
/**
|
|
322
410
|
* Extract user info from OAuth token data
|
|
323
411
|
*
|
|
@@ -620,8 +708,11 @@ declare interface LinkedAccount {
|
|
|
620
708
|
export declare class Lixa<TConfig extends LixaConfig<Record<string, ProviderConfig>> = LixaConfig> {
|
|
621
709
|
private static DEFAULT_PROVIDERS;
|
|
622
710
|
private static CONFIGURED_PROVIDERS;
|
|
623
|
-
private
|
|
624
|
-
private
|
|
711
|
+
private localStateHandler;
|
|
712
|
+
private localSessionHandler;
|
|
713
|
+
private localResourceHandler;
|
|
714
|
+
private userResourceStore;
|
|
715
|
+
private refreshMutexes;
|
|
625
716
|
private config;
|
|
626
717
|
private stateHandler;
|
|
627
718
|
private sessionHandler;
|
|
@@ -658,16 +749,12 @@ export declare class Lixa<TConfig extends LixaConfig<Record<string, ProviderConf
|
|
|
658
749
|
*/
|
|
659
750
|
private validateProviderImplementation;
|
|
660
751
|
/**
|
|
661
|
-
* Structured
|
|
752
|
+
* Structured logging with standardized format and custom logger support.
|
|
662
753
|
*
|
|
663
|
-
* @param level - Log level (INFO, WARN, ERROR)
|
|
664
|
-
* @param context - Context of the log (Init, Auth, Token, Session, State)
|
|
754
|
+
* @param level - Log level (INFO, WARN, ERROR, DEBUG)
|
|
755
|
+
* @param context - Context of the log (Init, Auth, Token, Session, State, AccountLinking, Resource)
|
|
665
756
|
* @param message - Log message
|
|
666
757
|
* @param data - Optional data to log
|
|
667
|
-
*
|
|
668
|
-
* @remarks
|
|
669
|
-
* Format: [Lixa] [timestamp] [level] [context] message
|
|
670
|
-
* Only logs when debug mode is enabled.
|
|
671
758
|
*/
|
|
672
759
|
private log;
|
|
673
760
|
/**
|
|
@@ -866,7 +953,7 @@ export declare class Lixa<TConfig extends LixaConfig<Record<string, ProviderConf
|
|
|
866
953
|
*/
|
|
867
954
|
getAuthUrl(provider: ConfiguredProviderKey<TConfig> | string, state?: string): Promise<string>;
|
|
868
955
|
/**
|
|
869
|
-
* Restricts primary authentication scopes strictly to AuthN identity scopes.
|
|
956
|
+
* Restricts primary authentication scopes strictly to AuthN identity scopes unless allowNonAuthScopes is true.
|
|
870
957
|
*/
|
|
871
958
|
private resolveAuthNScopes;
|
|
872
959
|
/**
|
|
@@ -932,14 +1019,6 @@ export declare class Lixa<TConfig extends LixaConfig<Record<string, ProviderConf
|
|
|
932
1019
|
prompt?: string;
|
|
933
1020
|
extraConfig?: Record<string, string>;
|
|
934
1021
|
}): Promise<string>;
|
|
935
|
-
/**
|
|
936
|
-
* Handles the OAuth callback for a connected resource provider and stores resource tokens on the session.
|
|
937
|
-
*
|
|
938
|
-
* @param params - Object containing sessionId, provider, code, state, and requested scopes
|
|
939
|
-
* @returns Updated Session containing stored resource tokens under session.resources[provider]
|
|
940
|
-
*/
|
|
941
|
-
private static userResourceStore;
|
|
942
|
-
static LOCAL_RESOURCE_HANDLER: ResourceHandler;
|
|
943
1022
|
private getUserKeyFromSession;
|
|
944
1023
|
/**
|
|
945
1024
|
* Handles the OAuth callback for a connected resource provider and stores resource tokens bound to user account.
|
|
@@ -972,11 +1051,16 @@ export declare class Lixa<TConfig extends LixaConfig<Record<string, ProviderConf
|
|
|
972
1051
|
getConnectedResource(sessionId: string, provider: string): Promise<ConnectedResource | null>;
|
|
973
1052
|
/**
|
|
974
1053
|
* Refreshes a user's resource access token using its refresh token.
|
|
1054
|
+
* Deduplicates concurrent refresh requests via an in-flight promise mutex.
|
|
975
1055
|
*
|
|
976
1056
|
* @param userIdOrEmail - User identifier or email
|
|
977
1057
|
* @param provider - Provider identifier (e.g. 'google', 'github')
|
|
978
1058
|
*/
|
|
979
1059
|
refreshUserResourceToken(userIdOrEmail: string, provider: string, existingResource?: ConnectedResource): Promise<ConnectedResource>;
|
|
1060
|
+
/**
|
|
1061
|
+
* Internal execution of refresh token exchange.
|
|
1062
|
+
*/
|
|
1063
|
+
private executeRefreshUserResourceToken;
|
|
980
1064
|
/**
|
|
981
1065
|
* Refreshes a connected resource access token for an active session.
|
|
982
1066
|
*/
|
|
@@ -1057,6 +1141,11 @@ export declare interface LixaConfig<TProviders extends Record<string, ProviderCo
|
|
|
1057
1141
|
* Format: [Lixa] [timestamp] [level] [context] message
|
|
1058
1142
|
*/
|
|
1059
1143
|
debug?: boolean;
|
|
1144
|
+
/**
|
|
1145
|
+
* Optional custom structured logger implementation.
|
|
1146
|
+
* If provided, all Lixa logs will be routed through this logger.
|
|
1147
|
+
*/
|
|
1148
|
+
logger?: LixaLogger;
|
|
1060
1149
|
}
|
|
1061
1150
|
|
|
1062
1151
|
/**
|
|
@@ -1076,6 +1165,26 @@ export declare class LixaError extends Error {
|
|
|
1076
1165
|
constructor(message: string, code?: string, details?: Record<string, unknown>);
|
|
1077
1166
|
}
|
|
1078
1167
|
|
|
1168
|
+
/**
|
|
1169
|
+
* Custom logger interface for Lixa.
|
|
1170
|
+
* @public
|
|
1171
|
+
*/
|
|
1172
|
+
export declare interface LixaLogger {
|
|
1173
|
+
log(level: LogLevel, context: LogContext, message: string, data?: Record<string, unknown>): void;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
/**
|
|
1177
|
+
* Log context for Lixa structured logging.
|
|
1178
|
+
* @public
|
|
1179
|
+
*/
|
|
1180
|
+
export declare type LogContext = "Init" | "Auth" | "Token" | "Session" | "State" | "AccountLinking" | "Resource";
|
|
1181
|
+
|
|
1182
|
+
/**
|
|
1183
|
+
* Log level for Lixa structured logging.
|
|
1184
|
+
* @public
|
|
1185
|
+
*/
|
|
1186
|
+
export declare type LogLevel = "INFO" | "WARN" | "ERROR" | "DEBUG";
|
|
1187
|
+
|
|
1079
1188
|
/**
|
|
1080
1189
|
* OAuth 2.0 token response structure.
|
|
1081
1190
|
* Based on RFC 6749 Section 5.1 and OpenID Connect Core 1.0 Section 3.1.3.3
|
|
@@ -1170,6 +1279,12 @@ export declare type ProviderConfig = {
|
|
|
1170
1279
|
redirectUri: string;
|
|
1171
1280
|
/** Array of OAuth scopes to request */
|
|
1172
1281
|
scopes: string[];
|
|
1282
|
+
/**
|
|
1283
|
+
* Set to true to allow non-identity (resource) scopes during primary authentication flow.
|
|
1284
|
+
* By default (false), Lixa restricts primary AuthN scopes to identity scopes to maintain
|
|
1285
|
+
* clean AuthN vs AuthZ separation.
|
|
1286
|
+
*/
|
|
1287
|
+
allowNonAuthScopes?: boolean;
|
|
1173
1288
|
/** Additional provider-specific configuration parameters */
|
|
1174
1289
|
extraConfig?: Record<string, string>;
|
|
1175
1290
|
} & ({
|
|
@@ -1339,13 +1454,13 @@ export declare interface Session<TRaw = OAuthTokenResponse> {
|
|
|
1339
1454
|
* @remarks
|
|
1340
1455
|
* The SessionHandler manages session generation and storage after successful OAuth authentication.
|
|
1341
1456
|
*
|
|
1342
|
-
* -
|
|
1457
|
+
* - generateSession: Optional. Customizes how OAuth tokens are converted into session data.
|
|
1343
1458
|
* If not provided, uses default implementation (access token as session token).
|
|
1344
1459
|
*
|
|
1345
|
-
* -
|
|
1460
|
+
* - sessionStorage: Optional. Provides custom session storage (save/get/delete operations).
|
|
1346
1461
|
* If not provided, uses in-memory cache (not suitable for production).
|
|
1347
1462
|
*
|
|
1348
|
-
* For production, implement both
|
|
1463
|
+
* For production, implement both generateSession (for user creation/lookup) and sessionStorage
|
|
1349
1464
|
* (for persistent session storage with Redis, database, etc.).
|
|
1350
1465
|
*
|
|
1351
1466
|
* @example
|
|
@@ -1354,7 +1469,7 @@ export declare interface Session<TRaw = OAuthTokenResponse> {
|
|
|
1354
1469
|
* import { SessionHandler, Session, OAuthTokenResponse, ProviderMetadata, extractUserInfo } from '@vunexa/lixa';
|
|
1355
1470
|
*
|
|
1356
1471
|
* const sessionHandler: SessionHandler = {
|
|
1357
|
-
*
|
|
1472
|
+
* generateSession: async (tokenData, providerMetadata) => {
|
|
1358
1473
|
* // Extract user info and create/retrieve user
|
|
1359
1474
|
* const { userInfo } = await extractUserInfo(tokenData, providerMetadata);
|
|
1360
1475
|
* const user = await db.users.upsert({
|
|
@@ -1373,7 +1488,7 @@ export declare interface Session<TRaw = OAuthTokenResponse> {
|
|
|
1373
1488
|
* };
|
|
1374
1489
|
* },
|
|
1375
1490
|
*
|
|
1376
|
-
*
|
|
1491
|
+
* sessionStorage: {
|
|
1377
1492
|
* saveSession: async (sessionId, session, expiresInSeconds) => {
|
|
1378
1493
|
* const expiresAt = new Date(Date.now() + expiresInSeconds * 1000);
|
|
1379
1494
|
* await db.sessions.create({
|
|
@@ -1399,78 +1514,21 @@ export declare interface Session<TRaw = OAuthTokenResponse> {
|
|
|
1399
1514
|
* };
|
|
1400
1515
|
* ```
|
|
1401
1516
|
*
|
|
1402
|
-
* @example
|
|
1403
|
-
* Minimal implementation (uses defaults):
|
|
1404
|
-
* ```typescript
|
|
1405
|
-
* const sessionHandler: SessionHandler = {
|
|
1406
|
-
* storage: {
|
|
1407
|
-
* saveSession: async (sessionId, session, expiresInSeconds) => {
|
|
1408
|
-
* await redis.setex(sessionId, expiresInSeconds, JSON.stringify(session));
|
|
1409
|
-
* },
|
|
1410
|
-
* getSession: async (sessionId) => {
|
|
1411
|
-
* const data = await redis.get(sessionId);
|
|
1412
|
-
* return data ? JSON.parse(data) : null;
|
|
1413
|
-
* },
|
|
1414
|
-
* deleteSession: async (sessionId) => {
|
|
1415
|
-
* await redis.del(sessionId);
|
|
1416
|
-
* }
|
|
1417
|
-
* }
|
|
1418
|
-
* };
|
|
1419
|
-
* ```
|
|
1420
|
-
*
|
|
1421
1517
|
* @public
|
|
1422
1518
|
*/
|
|
1423
1519
|
export declare interface SessionHandler {
|
|
1424
1520
|
/**
|
|
1425
|
-
* Generates session data from OAuth token data.
|
|
1521
|
+
* Generates session data from OAuth token data (camelCase).
|
|
1426
1522
|
*
|
|
1427
1523
|
* @param tokenData - The token data received from the OAuth provider's token endpoint
|
|
1428
1524
|
* @param providerMetadata - Provider metadata including name and endpoints
|
|
1429
1525
|
* @returns A Promise that resolves to session data
|
|
1430
|
-
*
|
|
1431
|
-
* @remarks
|
|
1432
|
-
* This method is responsible for creating session data from OAuth tokens.
|
|
1433
|
-
* It is called after successfully exchanging the authorization code for tokens.
|
|
1434
|
-
*
|
|
1435
|
-
* Token Data:
|
|
1436
|
-
* - access_token: OAuth access token
|
|
1437
|
-
* - refresh_token: OAuth refresh token (optional)
|
|
1438
|
-
* - expires_in: Token expiration time in seconds
|
|
1439
|
-
* - token_type: Token type (usually "Bearer")
|
|
1440
|
-
* - id_token: OpenID Connect ID token (for OIDC providers)
|
|
1441
|
-
* - scope: Granted scopes
|
|
1442
|
-
*
|
|
1443
|
-
* Provider Metadata:
|
|
1444
|
-
* - name: The provider name (e.g., 'google', 'github')
|
|
1445
|
-
* - endpoints: Provider endpoints (authorization, token, userInfo)
|
|
1446
|
-
*
|
|
1447
|
-
* Your implementation should:
|
|
1448
|
-
* 1. Extract user info (using extractUserInfo or decode ID token)
|
|
1449
|
-
* 2. Create or lookup users in your database
|
|
1450
|
-
* 3. Build and return session data with any custom fields
|
|
1451
|
-
*
|
|
1452
|
-
* Note: This method should NOT store the session. Storage is handled by the storage object.
|
|
1453
|
-
*
|
|
1454
|
-
* If not provided, defaults to using the access token as the session token.
|
|
1455
|
-
*
|
|
1456
|
-
* @example
|
|
1457
|
-
* ```typescript
|
|
1458
|
-
* GenerateSession: async (tokenData, providerMetadata) => {
|
|
1459
|
-
* const { userInfo } = await extractUserInfo(tokenData, providerMetadata);
|
|
1460
|
-
* const user = await db.users.upsert({ email: userInfo.email });
|
|
1461
|
-
*
|
|
1462
|
-
* return {
|
|
1463
|
-
* token: tokenData.access_token,
|
|
1464
|
-
* raw: {
|
|
1465
|
-
* ...tokenData,
|
|
1466
|
-
* userId: user.id,
|
|
1467
|
-
* provider: providerMetadata.name
|
|
1468
|
-
* }
|
|
1469
|
-
* };
|
|
1470
|
-
* }
|
|
1471
|
-
* ```
|
|
1472
1526
|
*/
|
|
1473
1527
|
generateSession?<T extends Session>(tokenData: OAuthTokenResponse, providerMetadata: ProviderMetadata): Promise<T>;
|
|
1528
|
+
/**
|
|
1529
|
+
* Generates session data from OAuth token data (PascalCase alias for backward compatibility).
|
|
1530
|
+
*/
|
|
1531
|
+
GenerateSession?<T extends Session>(tokenData: OAuthTokenResponse, providerMetadata: ProviderMetadata): Promise<T>;
|
|
1474
1532
|
/**
|
|
1475
1533
|
* Session storage operations.
|
|
1476
1534
|
*
|
|
@@ -1481,13 +1539,6 @@ export declare interface SessionHandler {
|
|
|
1481
1539
|
* If not provided, uses in-memory cache (not suitable for production).
|
|
1482
1540
|
*/
|
|
1483
1541
|
sessionStorage?: SessionStorage;
|
|
1484
|
-
/**
|
|
1485
|
-
* Optional method to generate session data from OAuth tokens.
|
|
1486
|
-
*
|
|
1487
|
-
* @remarks
|
|
1488
|
-
* If not provided, uses default implementation from LocalSessionHandler.
|
|
1489
|
-
*/
|
|
1490
|
-
generateSession?<T extends Session>(tokenData: OAuthTokenResponse, providerMetadata: ProviderMetadata): Promise<T>;
|
|
1491
1542
|
}
|
|
1492
1543
|
|
|
1493
1544
|
/**
|
|
@@ -1513,7 +1564,7 @@ export declare interface SessionStorage {
|
|
|
1513
1564
|
* Saves a session with expiration.
|
|
1514
1565
|
*
|
|
1515
1566
|
* @param sessionId - Unique session identifier
|
|
1516
|
-
* @param session - Session data from
|
|
1567
|
+
* @param session - Session data from generateSession()
|
|
1517
1568
|
* @param expiresInSeconds - TTL in seconds (typically 86400 for 24 hours)
|
|
1518
1569
|
*/
|
|
1519
1570
|
saveSession<T extends Session>(sessionId: string, session: T, expiresInSeconds: number): Promise<void>;
|
|
@@ -1541,6 +1592,28 @@ export declare interface SessionStorage {
|
|
|
1541
1592
|
} | null>;
|
|
1542
1593
|
}
|
|
1543
1594
|
|
|
1595
|
+
/**
|
|
1596
|
+
* Sets an RFC 6265bis compliant session cookie on an Express response.
|
|
1597
|
+
*
|
|
1598
|
+
* @param res - Express response object
|
|
1599
|
+
* @param sessionId - Unique session ID
|
|
1600
|
+
* @param options - Optional cookie attribute overrides
|
|
1601
|
+
*
|
|
1602
|
+
* @public
|
|
1603
|
+
*/
|
|
1604
|
+
export declare function setSessionCookieOnResponse(res: ExpressLikeResponse, sessionId: string, options?: CookieOptions): void;
|
|
1605
|
+
|
|
1606
|
+
/**
|
|
1607
|
+
* Sets an OAuth CSRF state cookie on an Express response.
|
|
1608
|
+
*
|
|
1609
|
+
* @param res - Express response object
|
|
1610
|
+
* @param state - OAuth state parameter
|
|
1611
|
+
* @param options - Optional cookie attribute overrides
|
|
1612
|
+
*
|
|
1613
|
+
* @public
|
|
1614
|
+
*/
|
|
1615
|
+
export declare function setStateCookieOnResponse(res: ExpressLikeResponse, state: string, options?: CookieOptions): void;
|
|
1616
|
+
|
|
1544
1617
|
/**
|
|
1545
1618
|
* OAuth state data structure.
|
|
1546
1619
|
*
|
|
@@ -1675,10 +1748,20 @@ export declare interface StateHandler {
|
|
|
1675
1748
|
* }
|
|
1676
1749
|
* ```
|
|
1677
1750
|
*/
|
|
1751
|
+
/**
|
|
1752
|
+
* Generates OAuth state parameter and associated data (camelCase).
|
|
1753
|
+
*/
|
|
1678
1754
|
generateState?(provider: string): Promise<{
|
|
1679
1755
|
state: string;
|
|
1680
1756
|
data: StateData;
|
|
1681
1757
|
}>;
|
|
1758
|
+
/**
|
|
1759
|
+
* Generates OAuth state parameter and associated data (PascalCase alias for backward compatibility).
|
|
1760
|
+
*/
|
|
1761
|
+
GenerateState?(provider: string): Promise<{
|
|
1762
|
+
state: string;
|
|
1763
|
+
data: StateData;
|
|
1764
|
+
}>;
|
|
1682
1765
|
/**
|
|
1683
1766
|
* State storage operations.
|
|
1684
1767
|
*
|