clearauth 0.3.2 → 0.4.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 +83 -0
- package/README.md +102 -15
- package/dist/auth/handler.d.ts +2 -0
- package/dist/auth/handler.js +183 -12
- package/dist/auth/handler.js.map +1 -1
- package/dist/auth/magic-link.d.ts +94 -0
- package/dist/auth/magic-link.js +188 -0
- package/dist/auth/magic-link.js.map +1 -0
- package/dist/auth/utils.d.ts +18 -0
- package/dist/auth/utils.js +38 -0
- package/dist/auth/utils.js.map +1 -1
- package/dist/database/providers/d1.d.ts +72 -0
- package/dist/database/providers/d1.js +117 -0
- package/dist/database/providers/d1.js.map +1 -0
- package/dist/database/providers/index.d.ts +18 -0
- package/dist/database/providers/index.js +19 -0
- package/dist/database/providers/index.js.map +1 -0
- package/dist/database/providers/neon.d.ts +41 -0
- package/dist/database/providers/neon.js +135 -0
- package/dist/database/providers/neon.js.map +1 -0
- package/dist/database/providers/planetscale.d.ts +51 -0
- package/dist/database/providers/planetscale.js +145 -0
- package/dist/database/providers/planetscale.js.map +1 -0
- package/dist/database/providers/supabase.d.ts +44 -0
- package/dist/database/providers/supabase.js +148 -0
- package/dist/database/providers/supabase.js.map +1 -0
- package/dist/database/providers/turso.d.ts +45 -0
- package/dist/database/providers/turso.js +149 -0
- package/dist/database/providers/turso.js.map +1 -0
- package/dist/database/schema.d.ts +28 -0
- package/dist/database/schema.js +6 -0
- package/dist/database/schema.js.map +1 -1
- package/dist/edge.d.ts +47 -0
- package/dist/edge.js +47 -0
- package/dist/edge.js.map +1 -1
- package/dist/email/manager.d.ts +26 -0
- package/dist/email/manager.js +88 -0
- package/dist/email/manager.js.map +1 -0
- package/dist/email/providers/postmark.d.ts +17 -0
- package/dist/email/providers/postmark.js +42 -0
- package/dist/email/providers/postmark.js.map +1 -0
- package/dist/email/providers/resend.d.ts +17 -0
- package/dist/email/providers/resend.js +40 -0
- package/dist/email/providers/resend.js.map +1 -0
- package/dist/email/providers/sendgrid.d.ts +20 -0
- package/dist/email/providers/sendgrid.js +52 -0
- package/dist/email/providers/sendgrid.js.map +1 -0
- package/dist/email/templates.d.ts +20 -0
- package/dist/email/templates.js +82 -0
- package/dist/email/templates.js.map +1 -0
- package/dist/index.d.ts +13 -3
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/oauth/apple.d.ts +9 -0
- package/dist/oauth/apple.js +36 -0
- package/dist/oauth/apple.js.map +1 -0
- package/dist/oauth/arctic-providers.d.ts +26 -1
- package/dist/oauth/arctic-providers.js +103 -1
- package/dist/oauth/arctic-providers.js.map +1 -1
- package/dist/oauth/callbacks.d.ts +3 -3
- package/dist/oauth/callbacks.js +2 -2
- package/dist/oauth/callbacks.js.map +1 -1
- package/dist/oauth/discord.d.ts +9 -0
- package/dist/oauth/discord.js +40 -0
- package/dist/oauth/discord.js.map +1 -0
- package/dist/oauth/handler.d.ts +1 -14
- package/dist/oauth/handler.js +103 -178
- package/dist/oauth/handler.js.map +1 -1
- package/dist/oauth/linkedin.d.ts +9 -0
- package/dist/oauth/linkedin.js +42 -0
- package/dist/oauth/linkedin.js.map +1 -0
- package/dist/oauth/meta.d.ts +9 -0
- package/dist/oauth/meta.js +40 -0
- package/dist/oauth/meta.js.map +1 -0
- package/dist/oauth/microsoft.d.ts +10 -0
- package/dist/oauth/microsoft.js +38 -0
- package/dist/oauth/microsoft.js.map +1 -0
- package/dist/react.d.ts +2 -0
- package/dist/react.js +16 -1
- package/dist/react.js.map +1 -1
- package/dist/session/validate.d.ts +87 -0
- package/dist/session/validate.js +125 -0
- package/dist/session/validate.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/utils/cookies.d.ts +70 -0
- package/dist/utils/cookies.js +90 -0
- package/dist/utils/cookies.js.map +1 -0
- package/package.json +18 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,89 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.4.0] - 2026-01-12
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Multi-Database Provider Support** - Expanded database compatibility beyond Mech Storage
|
|
15
|
+
- **Neon PostgreSQL** - Serverless PostgreSQL with HTTP API (edge-compatible)
|
|
16
|
+
- **Turso (libSQL)** - Edge-hosted distributed SQLite database
|
|
17
|
+
- **Cloudflare D1** - Native SQLite for Cloudflare Workers
|
|
18
|
+
- **PlanetScale** - Serverless MySQL with HTTP API (edge-compatible)
|
|
19
|
+
- **Supabase PostgreSQL** - PostgreSQL with connection pooler for edge
|
|
20
|
+
- Complete Kysely adapters for all providers with consistent API
|
|
21
|
+
- Dynamic imports to avoid bundling unused providers
|
|
22
|
+
- Connection pooling at Driver level for optimal performance
|
|
23
|
+
- Comprehensive documentation in `docs/DATABASE_PROVIDERS.md`
|
|
24
|
+
- Transparent limitations documentation in `docs/DATABASE_PROVIDERS_LIMITATIONS.md`
|
|
25
|
+
- Complete migration scripts for SQLite (Turso/D1) and MySQL (PlanetScale)
|
|
26
|
+
- All 5 database tables supported: users, sessions, email_verification_tokens, password_reset_tokens, magic_link_tokens
|
|
27
|
+
- 29 passing tests covering all providers
|
|
28
|
+
- Error sanitization to prevent credential exposure in logs
|
|
29
|
+
- Helpful error messages with installation instructions
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **Connection Pooling** - Clients now cached at Driver level instead of per-query
|
|
34
|
+
- Turso: Proper client caching with cleanup via `close()`
|
|
35
|
+
- Supabase: postgres.js client cached with cleanup via `end()`
|
|
36
|
+
- PlanetScale: Connection cached (stateless HTTP)
|
|
37
|
+
- Prevents memory leaks and improves performance
|
|
38
|
+
- **Error Handling** - Better module detection and credential sanitization
|
|
39
|
+
- Detects missing modules in both CJS and ESM environments
|
|
40
|
+
- Sanitizes connection strings, auth tokens, and passwords in error messages
|
|
41
|
+
- Provides helpful installation instructions with GitHub links
|
|
42
|
+
- **SQLite Trigger** - Fixed potential infinite recursion in timestamp update trigger
|
|
43
|
+
- Added WHEN clause to only trigger when timestamp hasn't changed
|
|
44
|
+
|
|
45
|
+
### Documentation
|
|
46
|
+
|
|
47
|
+
- Added `DATABASE_PROVIDERS.md` with setup guides for all 6 providers
|
|
48
|
+
- Added `DATABASE_PROVIDERS_LIMITATIONS.md` documenting:
|
|
49
|
+
- Schema type differences (PostgreSQL vs SQLite vs MySQL)
|
|
50
|
+
- Transaction support limitations
|
|
51
|
+
- Connection pooling constraints
|
|
52
|
+
- Edge runtime requirements
|
|
53
|
+
- Security considerations
|
|
54
|
+
- Type conversion examples and workarounds
|
|
55
|
+
- Updated migration READMEs with complete setup instructions
|
|
56
|
+
|
|
57
|
+
## [0.3.2] - Previous Release
|
|
58
|
+
|
|
59
|
+
### Added
|
|
60
|
+
|
|
61
|
+
- **Magic Link Authentication** - Passwordless login via email
|
|
62
|
+
- `POST /auth/request-magic-link` - Request magic link for existing users
|
|
63
|
+
- `GET /auth/magic-link/verify` - Verify magic link and redirect with session cookie
|
|
64
|
+
- Login-only flow (existing users only, prevents signup spam)
|
|
65
|
+
- 15-minute token expiration for security
|
|
66
|
+
- One-time use tokens (deleted after consumption)
|
|
67
|
+
- Email enumeration prevention (always returns success)
|
|
68
|
+
- Automatic email verification on successful login
|
|
69
|
+
- `returnTo` redirect support with same-origin validation
|
|
70
|
+
- React `requestMagicLink(email, returnTo?)` action
|
|
71
|
+
- Comprehensive test coverage (19 tests)
|
|
72
|
+
- Database schema: `magic_link_tokens` table
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- **Cloudflare Pages Functions Compatibility** - Fixed request body parsing for edge runtimes
|
|
77
|
+
- Changed from `request.json()` to `request.text()` + `JSON.parse()` approach
|
|
78
|
+
- Resolves "Invalid JSON body" errors in Cloudflare Pages Functions
|
|
79
|
+
- Better error messages for empty bodies, consumed streams, and malformed JSON
|
|
80
|
+
- Added comprehensive test coverage (14 tests) for various body types and edge cases
|
|
81
|
+
- Compatible with ReadableStream, Uint8Array, and standard string bodies
|
|
82
|
+
- Fixes issue where POST requests (register, login, etc.) would fail in Cloudflare Pages Functions
|
|
83
|
+
|
|
84
|
+
- Fixed password reset payload mismatch between React client and server handler
|
|
85
|
+
- Server now accepts both `password` (canonical) and `newPassword` (deprecated) fields for backward compatibility
|
|
86
|
+
- React client updated to send `password` field to match server contract
|
|
87
|
+
- Resolves issue where password reset requests from React client would fail
|
|
88
|
+
- Added comprehensive test coverage for backward compatibility behavior
|
|
89
|
+
- `newPassword` field support will be removed in v2.0.0
|
|
90
|
+
|
|
8
91
|
## [0.3.0] - 2025-12-12
|
|
9
92
|
|
|
10
93
|
### 🎉 Major Refactor - Arctic Migration
|
package/README.md
CHANGED
|
@@ -49,7 +49,7 @@ Or add to `package.json`:
|
|
|
49
49
|
- **`clearauth/edge`**
|
|
50
50
|
- **Environment:** Cloudflare Workers / edge runtimes
|
|
51
51
|
- **Default password hasher:** PBKDF2 (no native dependencies)
|
|
52
|
-
- **API:** `createClearAuth(...)`
|
|
52
|
+
- **API:** `createClearAuth(...)`, `handleClearAuthEdgeRequest(...)`, `validateSession(...)`, `getSessionFromCookie(...)`, `parseCookies(...)`, `createSessionCookie(...)`, `createMechKysely(...)`
|
|
53
53
|
- **`clearauth/argon2`**
|
|
54
54
|
- **Environment:** Node.js
|
|
55
55
|
- **Export:** `createArgon2idPasswordHasher(...)` (use to explicitly override)
|
|
@@ -104,29 +104,25 @@ export async function POST(request: Request) {
|
|
|
104
104
|
|
|
105
105
|
### Cloudflare Workers
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
ClearAuth runs entirely on Cloudflare Workers with no Node.js backend required. See [CLOUDFLARE.md](./CLOUDFLARE.md) for the full guide.
|
|
108
108
|
|
|
109
109
|
```ts
|
|
110
110
|
import { createClearAuth, handleClearAuthEdgeRequest } from "clearauth/edge"
|
|
111
111
|
|
|
112
|
-
export function createAuth(env: Env) {
|
|
113
|
-
return createClearAuth({
|
|
114
|
-
secret: env.AUTH_SECRET,
|
|
115
|
-
baseUrl: "https://your-worker.workers.dev",
|
|
116
|
-
database: {
|
|
117
|
-
appId: env.MECH_APP_ID,
|
|
118
|
-
apiKey: env.MECH_API_KEY,
|
|
119
|
-
},
|
|
120
|
-
isProduction: true,
|
|
121
|
-
})
|
|
122
|
-
}
|
|
123
|
-
|
|
124
112
|
export default {
|
|
125
113
|
async fetch(request: Request, env: Env): Promise<Response> {
|
|
126
114
|
const url = new URL(request.url)
|
|
127
115
|
|
|
128
116
|
if (url.pathname.startsWith("/auth")) {
|
|
129
|
-
const config =
|
|
117
|
+
const config = createClearAuth({
|
|
118
|
+
secret: env.AUTH_SECRET,
|
|
119
|
+
baseUrl: "https://your-worker.workers.dev",
|
|
120
|
+
database: {
|
|
121
|
+
appId: env.MECH_APP_ID,
|
|
122
|
+
apiKey: env.MECH_API_KEY,
|
|
123
|
+
},
|
|
124
|
+
isProduction: true,
|
|
125
|
+
})
|
|
130
126
|
return handleClearAuthEdgeRequest(request, config)
|
|
131
127
|
}
|
|
132
128
|
|
|
@@ -135,6 +131,64 @@ export default {
|
|
|
135
131
|
}
|
|
136
132
|
```
|
|
137
133
|
|
|
134
|
+
#### Session Validation Middleware
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
import { getSessionFromCookie, createMechKysely } from "clearauth/edge"
|
|
138
|
+
|
|
139
|
+
// In your worker
|
|
140
|
+
const db = createMechKysely({ appId: env.MECH_APP_ID, apiKey: env.MECH_API_KEY })
|
|
141
|
+
const session = await getSessionFromCookie(request, db)
|
|
142
|
+
|
|
143
|
+
if (!session) {
|
|
144
|
+
return new Response("Unauthorized", { status: 401 })
|
|
145
|
+
}
|
|
146
|
+
// session.user.email, session.user.id, etc.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
See [`examples/cloudflare-workers/`](./examples/cloudflare-workers/) for a complete example.
|
|
150
|
+
|
|
151
|
+
### Express API
|
|
152
|
+
|
|
153
|
+
```ts
|
|
154
|
+
import express from 'express';
|
|
155
|
+
import { handleClearAuthRequest, validateSession, parseCookies } from 'clearauth';
|
|
156
|
+
import { createClearAuthNode } from 'clearauth/node';
|
|
157
|
+
|
|
158
|
+
const app = express();
|
|
159
|
+
const auth = createClearAuthNode({
|
|
160
|
+
secret: process.env.AUTH_SECRET,
|
|
161
|
+
baseUrl: process.env.BASE_URL,
|
|
162
|
+
database: { appId: process.env.MECH_APP_ID, apiKey: process.env.MECH_API_KEY },
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
// Mount ClearAuth routes
|
|
166
|
+
app.all('/api/auth/*', async (req, res) => {
|
|
167
|
+
const request = new Request(`${req.protocol}://${req.get('host')}${req.originalUrl}`, {
|
|
168
|
+
method: req.method,
|
|
169
|
+
headers: new Headers(req.headers),
|
|
170
|
+
body: req.method !== 'GET' ? JSON.stringify(req.body) : undefined,
|
|
171
|
+
});
|
|
172
|
+
const response = await handleClearAuthRequest(request, auth);
|
|
173
|
+
res.status(response.status).send(await response.text());
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// Auth middleware
|
|
177
|
+
async function requireAuth(req, res, next) {
|
|
178
|
+
const cookies = parseCookies(req.headers.cookie || '');
|
|
179
|
+
const sessionId = cookies.get('session');
|
|
180
|
+
if (sessionId) {
|
|
181
|
+
const result = await validateSession(sessionId, auth.database);
|
|
182
|
+
if (result) { req.user = result.user; return next(); }
|
|
183
|
+
}
|
|
184
|
+
res.status(401).json({ error: 'Unauthorized' });
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
app.get('/api/me', requireAuth, (req, res) => res.json({ user: req.user }));
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
See [`examples/express-api/`](./examples/express-api/) for a complete example.
|
|
191
|
+
|
|
138
192
|
### React Client
|
|
139
193
|
|
|
140
194
|
Wrap your app with `AuthProvider`:
|
|
@@ -206,6 +260,39 @@ All configuration must be passed explicitly to `createClearAuth()`:
|
|
|
206
260
|
| `password` | `PasswordConfig` | Password validation rules (minLength) |
|
|
207
261
|
| `cors` | `CorsConfig` | CORS configuration for browser clients |
|
|
208
262
|
|
|
263
|
+
### Email Providers (Verification / Reset / Magic Link)
|
|
264
|
+
|
|
265
|
+
ClearAuth supports two approaches:
|
|
266
|
+
|
|
267
|
+
1. **Callbacks** via `config.email.sendVerificationEmail`, `config.email.sendPasswordResetEmail`, `config.email.sendMagicLink`.
|
|
268
|
+
2. **Built-in provider adapters** via `config.email.provider` (default templates).
|
|
269
|
+
|
|
270
|
+
Supported built-in provider adapters:
|
|
271
|
+
- `ResendProvider`
|
|
272
|
+
- `PostmarkProvider`
|
|
273
|
+
- `SendGridProvider`
|
|
274
|
+
|
|
275
|
+
Example (Resend):
|
|
276
|
+
|
|
277
|
+
```ts
|
|
278
|
+
import { createClearAuthNode, ResendProvider } from "clearauth"
|
|
279
|
+
|
|
280
|
+
const auth = createClearAuthNode({
|
|
281
|
+
secret: process.env.AUTH_SECRET!,
|
|
282
|
+
baseUrl: process.env.BASE_URL!,
|
|
283
|
+
database: {
|
|
284
|
+
appId: process.env.MECH_APP_ID!,
|
|
285
|
+
apiKey: process.env.MECH_API_KEY!,
|
|
286
|
+
},
|
|
287
|
+
email: {
|
|
288
|
+
provider: new ResendProvider({
|
|
289
|
+
apiKey: process.env.RESEND_API_KEY!,
|
|
290
|
+
from: "Your App <no-reply@yourdomain.com>",
|
|
291
|
+
}),
|
|
292
|
+
},
|
|
293
|
+
})
|
|
294
|
+
```
|
|
295
|
+
|
|
209
296
|
### Session Presets
|
|
210
297
|
|
|
211
298
|
Three session configurations are available:
|
package/dist/auth/handler.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ import type { ClearAuthConfig } from '../types.js';
|
|
|
17
17
|
*
|
|
18
18
|
* Supported routes:
|
|
19
19
|
* - GET /auth/session - Get current user session
|
|
20
|
+
* - GET /auth/magic-link/verify - Verify magic link and redirect
|
|
20
21
|
* - POST /auth/register - Register new user
|
|
21
22
|
* - POST /auth/verify-email - Verify email with token
|
|
22
23
|
* - POST /auth/resend-verification - Resend verification email
|
|
@@ -24,6 +25,7 @@ import type { ClearAuthConfig } from '../types.js';
|
|
|
24
25
|
* - POST /auth/logout - Logout user
|
|
25
26
|
* - POST /auth/request-reset - Request password reset
|
|
26
27
|
* - POST /auth/reset-password - Reset password with token
|
|
28
|
+
* - POST /auth/request-magic-link - Request magic link for passwordless login
|
|
27
29
|
*
|
|
28
30
|
* @param request - HTTP request
|
|
29
31
|
* @param config - Clear Auth configuration
|
package/dist/auth/handler.js
CHANGED
|
@@ -13,22 +13,50 @@ import { registerUser, toPublicRegisterResult } from './register.js';
|
|
|
13
13
|
import { verifyEmail, resendVerificationEmail } from './verify-email.js';
|
|
14
14
|
import { loginUser, toPublicLoginResult } from './login.js';
|
|
15
15
|
import { requestPasswordReset, resetPassword } from './reset-password.js';
|
|
16
|
+
import { requestMagicLink, consumeMagicLink } from './magic-link.js';
|
|
16
17
|
import { deleteSession, validateSession, parseCookies, createDeleteCookieHeader, createCookieHeader, } from '../oauth/callbacks.js';
|
|
17
|
-
import { AuthError } from './utils.js';
|
|
18
|
+
import { AuthError, isValidReturnTo } from './utils.js';
|
|
18
19
|
import { toPublicUser } from '../database/schema.js';
|
|
20
|
+
import { EmailManager } from '../email/manager.js';
|
|
19
21
|
/**
|
|
20
22
|
* Parse JSON request body
|
|
21
23
|
*
|
|
24
|
+
* This implementation uses request.text() + JSON.parse() instead of request.json()
|
|
25
|
+
* to ensure compatibility with Cloudflare Pages Functions and other edge runtimes
|
|
26
|
+
* where the request body stream may be consumed or locked.
|
|
27
|
+
*
|
|
22
28
|
* @param request - HTTP request
|
|
23
29
|
* @returns Parsed JSON body
|
|
30
|
+
* @throws {AuthError} If body is empty, already consumed, or contains invalid JSON
|
|
24
31
|
* @internal
|
|
25
32
|
*/
|
|
26
33
|
async function parseJsonBody(request) {
|
|
27
34
|
try {
|
|
28
|
-
|
|
35
|
+
// Check if body has already been consumed
|
|
36
|
+
if (request.bodyUsed) {
|
|
37
|
+
throw new AuthError('Request body has already been consumed', 'BODY_CONSUMED', 400);
|
|
38
|
+
}
|
|
39
|
+
// Read body as text first (more reliable across different runtimes)
|
|
40
|
+
const bodyText = await request.text();
|
|
41
|
+
// Check if body is empty
|
|
42
|
+
if (!bodyText || !bodyText.trim()) {
|
|
43
|
+
throw new AuthError('Request body is empty', 'EMPTY_BODY', 400);
|
|
44
|
+
}
|
|
45
|
+
// Parse JSON manually with better error messages
|
|
46
|
+
try {
|
|
47
|
+
return JSON.parse(bodyText);
|
|
48
|
+
}
|
|
49
|
+
catch (parseError) {
|
|
50
|
+
throw new AuthError(`Invalid JSON in request body: ${parseError instanceof Error ? parseError.message : 'Unknown error'}`, 'INVALID_JSON', 400);
|
|
51
|
+
}
|
|
29
52
|
}
|
|
30
53
|
catch (error) {
|
|
31
|
-
|
|
54
|
+
// If it's already an AuthError, re-throw it
|
|
55
|
+
if (error instanceof AuthError) {
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
// Handle other errors (e.g., network issues, stream errors)
|
|
59
|
+
throw new AuthError(`Failed to read request body: ${error instanceof Error ? error.message : 'Unknown error'}`, 'BODY_READ_ERROR', 400);
|
|
32
60
|
}
|
|
33
61
|
}
|
|
34
62
|
/**
|
|
@@ -119,6 +147,18 @@ async function handleRegister(request, config) {
|
|
|
119
147
|
const context = getRequestContext(request);
|
|
120
148
|
const result = await registerUser(config.database, email, password, context, config.passwordHasher);
|
|
121
149
|
const publicResult = toPublicRegisterResult(result);
|
|
150
|
+
// Send verification email if required
|
|
151
|
+
if (config.emailPassword?.requireEmailVerification) {
|
|
152
|
+
const emailManager = new EmailManager(config);
|
|
153
|
+
const verificationUrl = `/auth/verify-email?token=${result.verificationToken}`;
|
|
154
|
+
try {
|
|
155
|
+
await emailManager.sendVerificationEmail(email, result.verificationToken, verificationUrl);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error('[ClearAuth] Failed to send verification email:', error);
|
|
159
|
+
// Don't fail registration if email sending fails
|
|
160
|
+
}
|
|
161
|
+
}
|
|
122
162
|
const cookieName = config.session?.cookie?.name ?? 'session';
|
|
123
163
|
const expiresInSeconds = config.session?.expiresIn ?? 2592000;
|
|
124
164
|
const sessionCookie = createCookieHeader(cookieName, result.sessionId, {
|
|
@@ -192,6 +232,16 @@ async function handleResendVerification(request, config) {
|
|
|
192
232
|
throw new AuthError('Email is required', 'MISSING_EMAIL', 400);
|
|
193
233
|
}
|
|
194
234
|
const result = await resendVerificationEmail(config.database, email);
|
|
235
|
+
// Send the new verification email
|
|
236
|
+
const emailManager = new EmailManager(config);
|
|
237
|
+
const verificationUrl = `/auth/verify-email?token=${result.token}`;
|
|
238
|
+
try {
|
|
239
|
+
await emailManager.sendVerificationEmail(email, result.token, verificationUrl);
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
console.error('[ClearAuth] Failed to send verification email:', error);
|
|
243
|
+
// Don't fail the request if email sending fails
|
|
244
|
+
}
|
|
195
245
|
return jsonResponse(result);
|
|
196
246
|
}
|
|
197
247
|
/**
|
|
@@ -340,9 +390,17 @@ async function handleRequestReset(request, config) {
|
|
|
340
390
|
if (!email) {
|
|
341
391
|
throw new AuthError('Email is required', 'MISSING_EMAIL', 400);
|
|
342
392
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
393
|
+
const emailManager = new EmailManager(config);
|
|
394
|
+
await requestPasswordReset(config.database, email, async (resolvedEmail, token) => {
|
|
395
|
+
const resetUrl = `/auth/reset-password?token=${token}`;
|
|
396
|
+
try {
|
|
397
|
+
await emailManager.sendPasswordResetEmail(resolvedEmail, token, resetUrl);
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
console.error('[ClearAuth] Failed to send password reset email:', error);
|
|
401
|
+
// Don't fail the request if email sending fails
|
|
402
|
+
}
|
|
403
|
+
});
|
|
346
404
|
// Always return success to prevent email enumeration
|
|
347
405
|
return jsonResponse({
|
|
348
406
|
success: true,
|
|
@@ -371,13 +429,116 @@ async function handleRequestReset(request, config) {
|
|
|
371
429
|
*/
|
|
372
430
|
async function handleResetPassword(request, config) {
|
|
373
431
|
const body = await parseJsonBody(request);
|
|
374
|
-
const { token, password } = body;
|
|
375
|
-
|
|
432
|
+
const { token, password, newPassword } = body;
|
|
433
|
+
// Backward compatibility: Accept both 'password' (canonical) and 'newPassword' (deprecated)
|
|
434
|
+
// TODO: Remove 'newPassword' support in v2.0.0
|
|
435
|
+
const resolvedPassword = password ?? newPassword;
|
|
436
|
+
if (!token || !resolvedPassword) {
|
|
376
437
|
throw new AuthError('Token and password are required', 'MISSING_FIELDS', 400);
|
|
377
438
|
}
|
|
378
|
-
const result = await resetPassword(config.database, token,
|
|
439
|
+
const result = await resetPassword(config.database, token, resolvedPassword, config.passwordHasher);
|
|
379
440
|
return jsonResponse(result);
|
|
380
441
|
}
|
|
442
|
+
/**
|
|
443
|
+
* Handle POST /auth/request-magic-link
|
|
444
|
+
*
|
|
445
|
+
* Request a magic link for passwordless login.
|
|
446
|
+
*
|
|
447
|
+
* **Security Note:** This endpoint always returns success, even if the email doesn't exist.
|
|
448
|
+
* This prevents email enumeration attacks.
|
|
449
|
+
*
|
|
450
|
+
* Request body:
|
|
451
|
+
* ```json
|
|
452
|
+
* {
|
|
453
|
+
* "email": "user@example.com",
|
|
454
|
+
* "returnTo": "/dashboard"
|
|
455
|
+
* }
|
|
456
|
+
* ```
|
|
457
|
+
*
|
|
458
|
+
* Response (always):
|
|
459
|
+
* ```json
|
|
460
|
+
* {
|
|
461
|
+
* "success": true,
|
|
462
|
+
* "message": "If your email is registered, you will receive a magic link to sign in."
|
|
463
|
+
* }
|
|
464
|
+
* ```
|
|
465
|
+
*/
|
|
466
|
+
async function handleRequestMagicLink(request, config) {
|
|
467
|
+
const body = await parseJsonBody(request);
|
|
468
|
+
const { email, returnTo } = body;
|
|
469
|
+
if (!email) {
|
|
470
|
+
throw new AuthError('Email is required', 'MISSING_EMAIL', 400);
|
|
471
|
+
}
|
|
472
|
+
// Validate returnTo if provided
|
|
473
|
+
if (returnTo && !isValidReturnTo(returnTo, config.baseUrl)) {
|
|
474
|
+
throw new AuthError('Invalid returnTo URL', 'INVALID_RETURN_TO', 400);
|
|
475
|
+
}
|
|
476
|
+
const emailManager = new EmailManager(config);
|
|
477
|
+
await requestMagicLink(config.database, email, returnTo, async (resolvedEmail, token, linkUrl) => {
|
|
478
|
+
// linkUrl is relative and already includes returnTo encoding when provided
|
|
479
|
+
try {
|
|
480
|
+
await emailManager.sendMagicLink(resolvedEmail, token, linkUrl);
|
|
481
|
+
}
|
|
482
|
+
catch (error) {
|
|
483
|
+
console.error('[ClearAuth] Failed to send magic link email:', error);
|
|
484
|
+
// Don't fail the request if email sending fails
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
// Always return success to prevent email enumeration
|
|
488
|
+
return jsonResponse({
|
|
489
|
+
success: true,
|
|
490
|
+
message: 'If your email is registered, you will receive a magic link to sign in.',
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Handle GET /auth/magic-link/verify
|
|
495
|
+
*
|
|
496
|
+
* Verify magic link token and log user in with HTTP redirect.
|
|
497
|
+
*
|
|
498
|
+
* Query parameters:
|
|
499
|
+
* - token: Magic link token (required)
|
|
500
|
+
* - returnTo: URL to redirect to after login (optional)
|
|
501
|
+
*
|
|
502
|
+
* Success: 302 redirect to returnTo (or default)
|
|
503
|
+
* Error: 400/404 with JSON error
|
|
504
|
+
*/
|
|
505
|
+
async function handleVerifyMagicLink(request, config) {
|
|
506
|
+
const url = new URL(request.url);
|
|
507
|
+
const token = url.searchParams.get('token');
|
|
508
|
+
const returnTo = url.searchParams.get('returnTo');
|
|
509
|
+
if (!token) {
|
|
510
|
+
throw new AuthError('Magic link token is required', 'MISSING_TOKEN', 400);
|
|
511
|
+
}
|
|
512
|
+
const context = getRequestContext(request);
|
|
513
|
+
const result = await consumeMagicLink(config.database, token, context);
|
|
514
|
+
// Determine redirect URL
|
|
515
|
+
let redirectUrl = '/';
|
|
516
|
+
if (returnTo && isValidReturnTo(returnTo, config.baseUrl)) {
|
|
517
|
+
redirectUrl = returnTo;
|
|
518
|
+
}
|
|
519
|
+
else if (result.returnTo && isValidReturnTo(result.returnTo, config.baseUrl)) {
|
|
520
|
+
redirectUrl = result.returnTo;
|
|
521
|
+
}
|
|
522
|
+
// Create session cookie
|
|
523
|
+
const cookieName = config.session?.cookie?.name ?? 'session';
|
|
524
|
+
const expiresInSeconds = config.session?.expiresIn ?? 2592000;
|
|
525
|
+
const sessionCookie = createCookieHeader(cookieName, result.sessionId, {
|
|
526
|
+
httpOnly: config.session?.cookie?.httpOnly ?? true,
|
|
527
|
+
secure: config.session?.cookie?.secure ?? config.isProduction ?? true,
|
|
528
|
+
sameSite: config.session?.cookie?.sameSite ?? 'lax',
|
|
529
|
+
path: config.session?.cookie?.path ?? '/',
|
|
530
|
+
domain: config.session?.cookie?.domain,
|
|
531
|
+
maxAge: expiresInSeconds,
|
|
532
|
+
});
|
|
533
|
+
// HTTP 302 redirect with session cookie
|
|
534
|
+
return new Response(null, {
|
|
535
|
+
status: 302,
|
|
536
|
+
headers: {
|
|
537
|
+
'Location': redirectUrl,
|
|
538
|
+
'Set-Cookie': sessionCookie,
|
|
539
|
+
},
|
|
540
|
+
});
|
|
541
|
+
}
|
|
381
542
|
/**
|
|
382
543
|
* Handle GET /auth/session
|
|
383
544
|
*
|
|
@@ -429,6 +590,7 @@ async function handleSession(request, config) {
|
|
|
429
590
|
*
|
|
430
591
|
* Supported routes:
|
|
431
592
|
* - GET /auth/session - Get current user session
|
|
593
|
+
* - GET /auth/magic-link/verify - Verify magic link and redirect
|
|
432
594
|
* - POST /auth/register - Register new user
|
|
433
595
|
* - POST /auth/verify-email - Verify email with token
|
|
434
596
|
* - POST /auth/resend-verification - Resend verification email
|
|
@@ -436,6 +598,7 @@ async function handleSession(request, config) {
|
|
|
436
598
|
* - POST /auth/logout - Logout user
|
|
437
599
|
* - POST /auth/request-reset - Request password reset
|
|
438
600
|
* - POST /auth/reset-password - Reset password with token
|
|
601
|
+
* - POST /auth/request-magic-link - Request magic link for passwordless login
|
|
439
602
|
*
|
|
440
603
|
* @param request - HTTP request
|
|
441
604
|
* @param config - Clear Auth configuration
|
|
@@ -451,9 +614,15 @@ export async function handleAuthRequest(request, config) {
|
|
|
451
614
|
try {
|
|
452
615
|
const url = new URL(request.url);
|
|
453
616
|
const path = url.pathname.startsWith('/api/auth') ? url.pathname.replace(/^\/api/, '') : url.pathname;
|
|
454
|
-
// Handle GET
|
|
455
|
-
if (request.method === 'GET'
|
|
456
|
-
|
|
617
|
+
// Handle GET requests
|
|
618
|
+
if (request.method === 'GET') {
|
|
619
|
+
if (path === '/auth/session') {
|
|
620
|
+
return await handleSession(request, config);
|
|
621
|
+
}
|
|
622
|
+
if (path === '/auth/magic-link/verify') {
|
|
623
|
+
return await handleVerifyMagicLink(request, config);
|
|
624
|
+
}
|
|
625
|
+
return jsonResponse({ error: 'Not found' }, 404);
|
|
457
626
|
}
|
|
458
627
|
// Only handle POST requests for other routes
|
|
459
628
|
if (request.method !== 'POST') {
|
|
@@ -475,6 +644,8 @@ export async function handleAuthRequest(request, config) {
|
|
|
475
644
|
return await handleRequestReset(request, config);
|
|
476
645
|
case '/auth/reset-password':
|
|
477
646
|
return await handleResetPassword(request, config);
|
|
647
|
+
case '/auth/request-magic-link':
|
|
648
|
+
return await handleRequestMagicLink(request, config);
|
|
478
649
|
default:
|
|
479
650
|
return jsonResponse({ error: 'Not found' }, 404);
|
|
480
651
|
}
|
package/dist/auth/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/auth/handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/auth/handler.ts"],"names":[],"mappings":"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"}
|