11import { createServerClient } from '@supabase/ssr'
22import { NextResponse , type NextRequest } from 'next/server'
3+ import { getSubscriptionAccessState } from '@/lib/subscription-access'
34
45// Routes available on the free plan (auth still required)
56const SUBSCRIPTION_EXEMPT_ROUTES = [
@@ -19,13 +20,6 @@ function isSubscriptionExemptRoute(pathname: string): boolean {
1920 return SUBSCRIPTION_EXEMPT_ROUTES . some ( route => pathname . startsWith ( route ) )
2021}
2122
22- function isFutureDate ( value : string | null | undefined ) : boolean {
23- if ( ! value ) return false
24- const parsed = Date . parse ( value )
25- if ( Number . isNaN ( parsed ) ) return false
26- return parsed > Date . now ( )
27- }
28-
2923export async function updateSession ( request : NextRequest ) {
3024 // Debug logging
3125 console . log ( '🔍 updateSession running on:' , request . nextUrl . pathname )
@@ -112,7 +106,7 @@ export async function updateSession(request: NextRequest) {
112106 console . log ( '🧭 Subscription check for path:' , pathname )
113107 const { data : subscription } = await supabase
114108 . from ( 'subscriptions' )
115- . select ( 'stripe_subscription_id, subscription_status, current_period_end, trial_end' )
109+ . select ( 'subscription_plan, stripe_subscription_id, subscription_status, current_period_end, trial_end' )
116110 . eq ( 'user_id' , user . id )
117111 . maybeSingle ( )
118112
@@ -123,23 +117,13 @@ export async function updateSession(request: NextRequest) {
123117 trial_end : subscription ?. trial_end ,
124118 } )
125119
126- const status = subscription ?. subscription_status
127- const isTrialing = isFutureDate ( subscription ?. trial_end )
128- const isWithinAccessWindow = isFutureDate ( subscription ?. current_period_end )
129-
130- // Access rules for protected routes:
131- // - active subscriptions are allowed
132- // - canceled subscriptions are allowed only until current_period_end
133- // - active trials are always allowed
134- const hasProtectedRouteAccess =
135- status === 'active' ||
136- isTrialing ||
137- ( status === 'canceled' && isWithinAccessWindow )
120+ const subscriptionState = getSubscriptionAccessState ( subscription )
121+ const hasProtectedRouteAccess = subscriptionState . hasProAccess
138122
139123 console . log ( '✅ accessCheck:' , {
140- status,
141- isTrialing,
142- isWithinAccessWindow,
124+ status : subscription ?. subscription_status ,
125+ isTrialing : subscriptionState . isTrialing ,
126+ isWithinAccessWindow : subscriptionState . isWithinAccessWindow ,
143127 hasProtectedRouteAccess,
144128 } )
145129
0 commit comments