@agent-native/core 0.66.1 → 0.66.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
@@ -542,12 +542,36 @@ function authLoginResponse(event, token, email) {
542
542
  */
543
543
  const EXPECTED_AUTH_FAILURE_PATTERNS = [
544
544
  /invalid\s+(email|password|credentials)/i,
545
+ /\[?body\.email\]?\s+invalid input/i,
545
546
  /password.*incorrect/i,
546
547
  /user\s+(not\s+found|already\s+exists)/i,
547
548
  /email\s+already/i,
548
549
  /already\s+(exists|registered|in\s+use)/i,
549
550
  /not\s+verified/i,
550
551
  ];
552
+ const VALID_AUTH_EMAIL_MESSAGE = "Enter a valid email address, like you@example.com.";
553
+ const AUTH_EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
554
+ function normalizeAuthEmail(value) {
555
+ if (typeof value !== "string")
556
+ return null;
557
+ const email = value.trim().toLowerCase();
558
+ return AUTH_EMAIL_PATTERN.test(email) ? email : null;
559
+ }
560
+ function publicAuthError(error, fallback) {
561
+ const message = error?.message;
562
+ if (typeof message === "string") {
563
+ if (isAuthEmailValidationMessage(message)) {
564
+ return { message: VALID_AUTH_EMAIL_MESSAGE, statusCode: 400 };
565
+ }
566
+ if (message.trim())
567
+ return { message };
568
+ }
569
+ return { message: fallback };
570
+ }
571
+ function isAuthEmailValidationMessage(message) {
572
+ return (/\bemail\b/i.test(message) &&
573
+ /(invalid|input|required|format)/i.test(message));
574
+ }
551
575
  export function isExpectedAuthFailure(error) {
552
576
  const msg = error?.message;
553
577
  if (typeof msg !== "string")
@@ -2394,12 +2418,17 @@ async function mountBetterAuthRoutes(app, options) {
2394
2418
  }
2395
2419
  const body = await readBody(event);
2396
2420
  // Email/password login via Better Auth
2397
- const email = body?.email?.trim?.()?.toLowerCase?.();
2421
+ const rawEmail = typeof body?.email === "string" ? body.email : "";
2422
+ const email = normalizeAuthEmail(rawEmail);
2398
2423
  const password = body?.password;
2399
- if (!email || !password) {
2424
+ if (!rawEmail.trim() || !password) {
2400
2425
  setResponseStatus(event, 400);
2401
2426
  return { error: "Email and password are required" };
2402
2427
  }
2428
+ if (!email) {
2429
+ setResponseStatus(event, 400);
2430
+ return { error: VALID_AUTH_EMAIL_MESSAGE };
2431
+ }
2403
2432
  try {
2404
2433
  const result = await auth.api.signInEmail({
2405
2434
  body: { email, password },
@@ -2428,8 +2457,9 @@ async function mountBetterAuthRoutes(app, options) {
2428
2457
  if (!isExpectedAuthFailure(e)) {
2429
2458
  captureAuthError(e, { route: "login", email });
2430
2459
  }
2431
- setResponseStatus(event, 401);
2432
- return { error: e?.message || "Invalid email or password" };
2460
+ const authError = publicAuthError(e, "Invalid email or password");
2461
+ setResponseStatus(event, authError.statusCode ?? 401);
2462
+ return { error: authError.message };
2433
2463
  }
2434
2464
  }));
2435
2465
  // Backward-compat: POST /_agent-native/auth/register
@@ -2439,14 +2469,15 @@ async function mountBetterAuthRoutes(app, options) {
2439
2469
  return { error: "Method not allowed" };
2440
2470
  }
2441
2471
  const body = await readBody(event);
2442
- const email = body?.email?.trim?.()?.toLowerCase?.();
2472
+ const rawEmail = typeof body?.email === "string" ? body.email : "";
2473
+ const email = normalizeAuthEmail(rawEmail);
2443
2474
  const password = body?.password;
2444
2475
  const callbackURL = typeof body?.callbackURL === "string"
2445
2476
  ? safeReturnPath(body.callbackURL)
2446
2477
  : "/";
2447
- if (!email || typeof email !== "string" || !email.includes("@")) {
2478
+ if (!email) {
2448
2479
  setResponseStatus(event, 400);
2449
- return { error: "Valid email is required" };
2480
+ return { error: VALID_AUTH_EMAIL_MESSAGE };
2450
2481
  }
2451
2482
  if (!password || typeof password !== "string" || password.length < 8) {
2452
2483
  setResponseStatus(event, 400);
@@ -2462,8 +2493,9 @@ async function mountBetterAuthRoutes(app, options) {
2462
2493
  if (!isExpectedAuthFailure(e)) {
2463
2494
  captureAuthError(e, { route: "signup", email });
2464
2495
  }
2465
- setResponseStatus(event, 409);
2466
- return { error: e?.message || "Registration failed" };
2496
+ const authError = publicAuthError(e, "Registration failed");
2497
+ setResponseStatus(event, authError.statusCode ?? 409);
2498
+ return { error: authError.message };
2467
2499
  }
2468
2500
  }));
2469
2501
  // Backward-compat: POST /_agent-native/auth/logout
@@ -2598,12 +2630,17 @@ function mountAuthFallbackRoutes(app) {
2598
2630
  return { error: "Method not allowed" };
2599
2631
  }
2600
2632
  const body = await readBody(event);
2601
- const email = body?.email?.trim?.()?.toLowerCase?.();
2633
+ const rawEmail = typeof body?.email === "string" ? body.email : "";
2634
+ const email = normalizeAuthEmail(rawEmail);
2602
2635
  const password = body?.password;
2603
- if (!email || !password) {
2636
+ if (!rawEmail.trim() || !password) {
2604
2637
  setResponseStatus(event, 400);
2605
2638
  return { error: "Email and password are required" };
2606
2639
  }
2640
+ if (!email) {
2641
+ setResponseStatus(event, 400);
2642
+ return { error: VALID_AUTH_EMAIL_MESSAGE };
2643
+ }
2607
2644
  try {
2608
2645
  const auth = await getBetterAuth();
2609
2646
  const result = await auth.api.signInEmail({
@@ -2630,8 +2667,9 @@ function mountAuthFallbackRoutes(app) {
2630
2667
  if (!isExpectedAuthFailure(e)) {
2631
2668
  captureAuthError(e, { route: "login", email });
2632
2669
  }
2633
- setResponseStatus(event, 401);
2634
- return { error: e?.message || "Invalid email or password" };
2670
+ const authError = publicAuthError(e, "Invalid email or password");
2671
+ setResponseStatus(event, authError.statusCode ?? 401);
2672
+ return { error: authError.message };
2635
2673
  }
2636
2674
  }));
2637
2675
  app.use("/_agent-native/auth/register", defineEventHandler(async (event) => {
@@ -2640,11 +2678,12 @@ function mountAuthFallbackRoutes(app) {
2640
2678
  return { error: "Method not allowed" };
2641
2679
  }
2642
2680
  const body = await readBody(event);
2643
- const email = body?.email?.trim?.()?.toLowerCase?.();
2681
+ const rawEmail = typeof body?.email === "string" ? body.email : "";
2682
+ const email = normalizeAuthEmail(rawEmail);
2644
2683
  const password = body?.password;
2645
- if (!email || typeof email !== "string" || !email.includes("@")) {
2684
+ if (!email) {
2646
2685
  setResponseStatus(event, 400);
2647
- return { error: "Valid email is required" };
2686
+ return { error: VALID_AUTH_EMAIL_MESSAGE };
2648
2687
  }
2649
2688
  if (!password || typeof password !== "string" || password.length < 8) {
2650
2689
  setResponseStatus(event, 400);
@@ -2661,8 +2700,9 @@ function mountAuthFallbackRoutes(app) {
2661
2700
  if (!isExpectedAuthFailure(e)) {
2662
2701
  captureAuthError(e, { route: "signup", email });
2663
2702
  }
2664
- setResponseStatus(event, 409);
2665
- return { error: e?.message || "Registration failed" };
2703
+ const authError = publicAuthError(e, "Registration failed");
2704
+ setResponseStatus(event, authError.statusCode ?? 409);
2705
+ return { error: authError.message };
2666
2706
  }
2667
2707
  }));
2668
2708
  app.use("/_agent-native/auth/logout", defineEventHandler(async (event) => {