Fix local dev bug; bump to v0.0.17 (#230)

This commit is contained in:
Ben Senescu 2026-05-28 17:42:09 -04:00 committed by GitHub
parent 03fd3588ef
commit 3d38b89c32
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 36 additions and 12 deletions

View File

@ -2,7 +2,7 @@
"name": "open-seo",
"private": true,
"sideEffects": false,
"version": "0.0.16",
"version": "0.0.17",
"type": "module",
"packageManager": "pnpm@10.30.1",
"scripts": {

11
release-notes/v0.0.17.md Normal file
View File

@ -0,0 +1,11 @@
Bug fixes and an internal code cleanup.
## Fixed
- Fixed an infinite redirect loop between `/verify-email` and the app when `BYPASS_EMAIL_VERIFICATION=true` (local dev). The email-verification bypass is now honored consistently across the auth route guard, onboarding redirect, and verify-email page. Production behavior is unchanged.
## Improved
- Simplified complex client code across audit, backlinks, domain, keywords, and rank-tracking features (removed single-use wrappers, dead helpers, and redundant guards) while preserving type safety and behavior.
Full Changelog: https://github.com/every-app/open-seo/compare/v0.0.16...v0.0.17

View File

@ -1,7 +1,10 @@
import { useNavigate } from "@tanstack/react-router";
import { useEffect } from "react";
import { useSession } from "@/lib/auth-client";
import { isHostedClientAuthMode } from "@/lib/auth-mode";
import {
isEmailVerificationBypassed,
isHostedClientAuthMode,
} from "@/lib/auth-mode";
import {
getCurrentAuthRedirectFromHref,
getSignInSearch,
@ -12,6 +15,8 @@ export function useHostedAuthRouteGuard() {
const navigate = useNavigate();
const { data: session, isPending } = useSession();
const isHostedMode = isHostedClientAuthMode();
const emailVerified =
session?.user?.emailVerified === true || isEmailVerificationBypassed();
useEffect(() => {
if (isPending || !isHostedMode) {
@ -29,7 +34,7 @@ export function useHostedAuthRouteGuard() {
return;
}
if (!session.user.emailVerified) {
if (!emailVerified) {
void navigate({
to: "/verify-email",
search: getVerifyEmailSearch(session.user.email, redirectTo),
@ -39,16 +44,14 @@ export function useHostedAuthRouteGuard() {
}, [
isPending,
isHostedMode,
emailVerified,
session?.user?.email,
session?.user?.emailVerified,
session?.user?.id,
navigate,
]);
const hasVerifiedHostedSession =
!isPending &&
Boolean(session?.user?.id) &&
session?.user?.emailVerified === true;
!isPending && Boolean(session?.user?.id) && emailVerified;
return {
isHostedMode,

View File

@ -3,13 +3,17 @@ import { useNavigate } from "@tanstack/react-router";
import { useEffect } from "react";
import { onboardingAnswersQueryOptions } from "@/client/features/onboarding/onboardingModel";
import { useSession } from "@/lib/auth-client";
import { isHostedClientAuthMode } from "@/lib/auth-mode";
import {
isEmailVerificationBypassed,
isHostedClientAuthMode,
} from "@/lib/auth-mode";
export function useOnboardingRedirect() {
const navigate = useNavigate();
const { data: session } = useSession();
const isHostedMode = isHostedClientAuthMode();
const isEmailVerified = session?.user?.emailVerified === true;
const isEmailVerified =
session?.user?.emailVerified === true || isEmailVerificationBypassed();
const onboardingQuery = useQuery({
...onboardingAnswersQueryOptions(),
enabled: isHostedMode && Boolean(session?.user?.id) && isEmailVerified,

View File

@ -22,3 +22,7 @@ export function isHostedClientAuthMode() {
// AUTH_MODE=hosted in both the client build environment and the runtime.
return isHostedAuthMode(import.meta.env.AUTH_MODE);
}
export function isEmailVerificationBypassed() {
return import.meta.env.BYPASS_EMAIL_VERIFICATION === "true";
}

View File

@ -8,7 +8,10 @@ import {
} from "@/client/features/auth/AuthPage";
import { captureClientEvent } from "@/client/lib/posthog";
import { authClient, useSession } from "@/lib/auth-client";
import { isHostedClientAuthMode } from "@/lib/auth-mode";
import {
isEmailVerificationBypassed,
isHostedClientAuthMode,
} from "@/lib/auth-mode";
import { getSignInSearch, normalizeAuthRedirect } from "@/lib/auth-redirect";
import { z } from "zod";
@ -102,8 +105,7 @@ function VerifyEmailPage() {
const redirectTo = normalizeAuthRedirect(search.redirect);
const isHostedMode = isHostedClientAuthMode();
const { data: session, isPending } = useSession();
const bypassEmailVerification =
import.meta.env.BYPASS_EMAIL_VERIFICATION === "true";
const bypassEmailVerification = isEmailVerificationBypassed();
const errorMessage = getVerificationErrorMessage(search.error);
const verificationIssueType = search.error
? verificationIssueSchema.parse(search.error)