clearauth 0.6.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +182 -61
- package/dist/auth/handler.js +29 -16
- package/dist/auth/handler.js.map +1 -1
- package/dist/createMechAuth.d.ts +2 -0
- package/dist/createMechAuth.js +1 -0
- package/dist/createMechAuth.js.map +1 -1
- package/dist/handler.d.ts +5 -0
- package/dist/handler.js +76 -10
- package/dist/handler.js.map +1 -1
- package/dist/jwt/handlers.d.ts +7 -0
- package/dist/jwt/handlers.js +9 -2
- package/dist/jwt/handlers.js.map +1 -1
- package/dist/jwt/issue-token-pair.d.ts +30 -0
- package/dist/jwt/issue-token-pair.js +32 -0
- package/dist/jwt/issue-token-pair.js.map +1 -0
- package/dist/jwt/refresh-tokens.d.ts +11 -0
- package/dist/jwt/refresh-tokens.js +19 -0
- package/dist/jwt/refresh-tokens.js.map +1 -1
- package/dist/jwt/signer.d.ts +1 -1
- package/dist/jwt/signer.js +10 -3
- package/dist/jwt/signer.js.map +1 -1
- package/dist/jwt/types.d.ts +7 -0
- package/dist/jwt/types.js.map +1 -1
- package/dist/oauth/callbacks.d.ts +1 -31
- package/dist/oauth/callbacks.js +2 -63
- package/dist/oauth/callbacks.js.map +1 -1
- package/dist/oauth/handler.js +23 -3
- package/dist/oauth/handler.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/utils/session.d.ts +30 -0
- package/dist/utils/session.js +69 -0
- package/dist/utils/session.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/oauth/callbacks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/oauth/callbacks.ts"],"names":[],"mappings":"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"}
|
package/dist/oauth/handler.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Handles OAuth-related HTTP requests for various providers.
|
|
5
5
|
* Provides login initiation and callback handling endpoints.
|
|
6
6
|
*/
|
|
7
|
+
import { issueTokenPair } from '../jwt/issue-token-pair.js';
|
|
7
8
|
import { generateGitHubAuthUrl, handleGitHubCallback } from './github.js';
|
|
8
9
|
import { generateGoogleAuthUrl, handleGoogleCallback } from './google.js';
|
|
9
10
|
import { generateDiscordAuthUrl, handleDiscordCallback } from './discord.js';
|
|
@@ -64,7 +65,7 @@ async function handleOAuthLogin(config, providerName, authUrlGenerator) {
|
|
|
64
65
|
return new Response(null, { status: 302, headers });
|
|
65
66
|
}
|
|
66
67
|
catch (error) {
|
|
67
|
-
console.error(
|
|
68
|
+
console.error(providerName + ' login error:', error); // nosemgrep
|
|
68
69
|
return new Response('OAuth configuration error', { status: 500 });
|
|
69
70
|
}
|
|
70
71
|
}
|
|
@@ -112,11 +113,30 @@ async function handleOAuthCallbackRequest(request, config, providerName, callbac
|
|
|
112
113
|
if (codeVerifier) {
|
|
113
114
|
deleteCookies.push(createDeleteCookieHeader('oauth_code_verifier', { path: '/' }));
|
|
114
115
|
}
|
|
115
|
-
const
|
|
116
|
+
const additionalCookies = [];
|
|
117
|
+
if (config.jwt) {
|
|
118
|
+
const tokens = await issueTokenPair(config.database, user, config.jwt);
|
|
119
|
+
const jwtCookieBase = {
|
|
120
|
+
httpOnly: true,
|
|
121
|
+
secure: config.session?.cookie?.secure ?? config.isProduction ?? true,
|
|
122
|
+
sameSite: config.session?.cookie?.sameSite ?? 'lax',
|
|
123
|
+
path: config.session?.cookie?.path ?? '/',
|
|
124
|
+
domain: config.session?.cookie?.domain,
|
|
125
|
+
};
|
|
126
|
+
additionalCookies.push(createCookieHeader('jwt_access_token', tokens.accessToken, {
|
|
127
|
+
...jwtCookieBase,
|
|
128
|
+
maxAge: tokens.expiresIn,
|
|
129
|
+
}));
|
|
130
|
+
additionalCookies.push(createCookieHeader('jwt_refresh_token', tokens.refreshToken, {
|
|
131
|
+
...jwtCookieBase,
|
|
132
|
+
maxAge: tokens.refreshTokenExpiresIn,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
const headers = createHeadersWithCookies([sessionCookie, ...additionalCookies, ...deleteCookies], '/');
|
|
116
136
|
return new Response(null, { status: 302, headers });
|
|
117
137
|
}
|
|
118
138
|
catch (error) {
|
|
119
|
-
console.error(
|
|
139
|
+
console.error(providerName + ' callback error:', error); // nosemgrep
|
|
120
140
|
const message = error instanceof Error ? error.message : 'OAuth callback failed';
|
|
121
141
|
return new Response(message, { status: 400 });
|
|
122
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/oauth/handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAClF,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC/E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;GASG;AACH,SAAS,wBAAwB,CAAC,OAAiB,EAAE,QAAiB;IACpE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,gBAAgB,CAC7B,MAAuB,EACvB,YAAoB,EACpB,gBAA0G;IAE1G,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAA;QAEnE,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,KAAK,EAAE;YACpD,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;YACnC,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,GAAG,EAAE,aAAa;SAC3B,CAAC,CAAC,CAAA;QAEH,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,YAAY,EAAE;gBACnE,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;gBACnC,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,GAAG;gBACT,MAAM,EAAE,GAAG,EAAE,aAAa;aAC3B,CAAC,CAAC,CAAA;QACL,CAAC;QAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QACjE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/oauth/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { Kysely } from 'kysely';
|
|
|
7
7
|
import type { Database } from './database/schema.js';
|
|
8
8
|
import type { PasswordHasher } from './password-hasher.js';
|
|
9
9
|
import type { Logger } from './logger.js';
|
|
10
|
+
import type { JwtConfig } from './jwt/types.js';
|
|
10
11
|
/**
|
|
11
12
|
* OAuth Provider Configuration
|
|
12
13
|
*/
|
|
@@ -224,6 +225,13 @@ export interface ClearAuthConfig {
|
|
|
224
225
|
* Production mode flag
|
|
225
226
|
*/
|
|
226
227
|
isProduction?: boolean;
|
|
228
|
+
/**
|
|
229
|
+
* JWT configuration for stateless token issuance
|
|
230
|
+
*
|
|
231
|
+
* When provided, login/register responses will include JWT token pairs.
|
|
232
|
+
* Also enables /auth/token, /auth/refresh, and /auth/revoke routes.
|
|
233
|
+
*/
|
|
234
|
+
jwt?: JwtConfig;
|
|
227
235
|
/**
|
|
228
236
|
* Android device authentication configuration
|
|
229
237
|
*
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session utilities
|
|
3
|
+
*
|
|
4
|
+
* Session validation and cookie parsing helpers. Kept in a shared utils module
|
|
5
|
+
* so the main request handler (and other non-OAuth code) can import them without
|
|
6
|
+
* creating a direct dependency on the OAuth callbacks module.
|
|
7
|
+
*/
|
|
8
|
+
import type { Kysely } from 'kysely';
|
|
9
|
+
import type { Database, User } from '../database/schema.js';
|
|
10
|
+
import type { Logger } from '../logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Validate session
|
|
13
|
+
*
|
|
14
|
+
* Checks if a session exists and is not expired.
|
|
15
|
+
*
|
|
16
|
+
* @param db - Kysely database instance
|
|
17
|
+
* @param sessionId - Session ID to validate
|
|
18
|
+
* @param logger - Optional logger for error reporting
|
|
19
|
+
* @returns User if session is valid, null otherwise
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateSession(db: Kysely<Database>, sessionId: string, logger?: Logger): Promise<User | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Parse cookie header
|
|
24
|
+
*
|
|
25
|
+
* Parses the Cookie header and returns a map of cookie names to values.
|
|
26
|
+
*
|
|
27
|
+
* @param cookieHeader - Cookie header string
|
|
28
|
+
* @returns Map of cookie names to values
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseCookies(cookieHeader: string): Record<string, string>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session utilities
|
|
3
|
+
*
|
|
4
|
+
* Session validation and cookie parsing helpers. Kept in a shared utils module
|
|
5
|
+
* so the main request handler (and other non-OAuth code) can import them without
|
|
6
|
+
* creating a direct dependency on the OAuth callbacks module.
|
|
7
|
+
*/
|
|
8
|
+
import { getDefaultLogger } from '../logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Validate session
|
|
11
|
+
*
|
|
12
|
+
* Checks if a session exists and is not expired.
|
|
13
|
+
*
|
|
14
|
+
* @param db - Kysely database instance
|
|
15
|
+
* @param sessionId - Session ID to validate
|
|
16
|
+
* @param logger - Optional logger for error reporting
|
|
17
|
+
* @returns User if session is valid, null otherwise
|
|
18
|
+
*/
|
|
19
|
+
export async function validateSession(db, sessionId, logger = getDefaultLogger()) {
|
|
20
|
+
try {
|
|
21
|
+
const result = await db
|
|
22
|
+
.selectFrom('sessions')
|
|
23
|
+
.innerJoin('users', 'users.id', 'sessions.user_id')
|
|
24
|
+
.selectAll('users')
|
|
25
|
+
.where('sessions.id', '=', sessionId)
|
|
26
|
+
.where('sessions.expires_at', '>', new Date())
|
|
27
|
+
.executeTakeFirst();
|
|
28
|
+
return result || null;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
// Redact sessionId to avoid exposing sensitive tokens in logs
|
|
32
|
+
const redactedSessionId = sessionId ? `${sessionId.slice(0, 8)}...` : 'unknown';
|
|
33
|
+
logger.error('Session validation error', { error, sessionId: redactedSessionId });
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parse cookie header
|
|
39
|
+
*
|
|
40
|
+
* Parses the Cookie header and returns a map of cookie names to values.
|
|
41
|
+
*
|
|
42
|
+
* @param cookieHeader - Cookie header string
|
|
43
|
+
* @returns Map of cookie names to values
|
|
44
|
+
*/
|
|
45
|
+
export function parseCookies(cookieHeader) {
|
|
46
|
+
const cookies = {};
|
|
47
|
+
if (!cookieHeader) {
|
|
48
|
+
return cookies;
|
|
49
|
+
}
|
|
50
|
+
const pairs = cookieHeader.split(';');
|
|
51
|
+
for (const pair of pairs) {
|
|
52
|
+
const trimmed = pair.trim();
|
|
53
|
+
const eqIdx = trimmed.indexOf('=');
|
|
54
|
+
if (eqIdx === -1)
|
|
55
|
+
continue;
|
|
56
|
+
const name = trimmed.slice(0, eqIdx).trim();
|
|
57
|
+
const value = trimmed.slice(eqIdx + 1);
|
|
58
|
+
if (name) {
|
|
59
|
+
try {
|
|
60
|
+
cookies[name] = decodeURIComponent(value);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
cookies[name] = value;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return cookies;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAoB,EACpB,SAAiB,EACjB,SAAiB,gBAAgB,EAAE;IAEnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE;aACpB,UAAU,CAAC,UAAU,CAAC;aACtB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,kBAAkB,CAAC;aAClD,SAAS,CAAC,OAAO,CAAC;aAClB,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,SAAS,CAAC;aACpC,KAAK,CAAC,qBAAqB,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;aAC7C,gBAAgB,EAAE,CAAA;QAErB,OAAO,MAAM,IAAI,IAAI,CAAA;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,8DAA8D;QAC9D,MAAM,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAC/E,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAA;QACjF,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,MAAM,OAAO,GAA2B,EAAE,CAAA;IAE1C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAQ;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACtC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
|