diff --git a/apps/epic-web/src/lib/users.ts b/apps/epic-web/src/lib/users.ts index c3c38fcf4..7d752e8e1 100644 --- a/apps/epic-web/src/lib/users.ts +++ b/apps/epic-web/src/lib/users.ts @@ -99,7 +99,7 @@ export async function getUserAndSubscriber({ user = user ? user : await getUserByEmail(subscriber.email_address) res.setHeader( 'Set-Cookie', - serialize('ck_subscriber', JSON.stringify(subscriber), { + serialize('ck_subscriber', JSON.stringify(deepOmitNull(subscriber)), { httpOnly: true, secure: process.env.NODE_ENV === 'production', path: '/', @@ -113,3 +113,21 @@ export async function getUserAndSubscriber({ subscriber: convertToSerializeForNextResponse(subscriber), } } + +function deepOmitNull(obj: any): any { + if (Array.isArray(obj)) { + return obj.map(deepOmitNull).filter((x) => x !== null) + } + + if (obj && typeof obj === 'object') { + return Object.entries(obj).reduce((acc, [key, value]) => { + const cleaned = deepOmitNull(value) + if (cleaned !== null) { + acc[key] = cleaned + } + return acc + }, {} as Record) + } + + return obj === null ? undefined : obj +} diff --git a/packages/skill-lesson/trpc/routers/convertkit.ts b/packages/skill-lesson/trpc/routers/convertkit.ts index 78b0abc40..d32ab5a03 100644 --- a/packages/skill-lesson/trpc/routers/convertkit.ts +++ b/packages/skill-lesson/trpc/routers/convertkit.ts @@ -44,7 +44,7 @@ export const convertkitRouter = router({ const convertkitCookie = serialize( `ck_subscriber`, - JSON.stringify(updatedSubscriber.subscriber), + JSON.stringify(deepOmitNull(updatedSubscriber.subscriber)), { secure: process.env.NODE_ENV === 'production', path: '/', @@ -86,7 +86,7 @@ export const convertkitRouter = router({ const convertkitCookie = serialize( `ck_subscriber`, - JSON.stringify(updatedSubscriber.subscriber), + JSON.stringify(deepOmitNull(updatedSubscriber.subscriber)), { secure: process.env.NODE_ENV === 'production', path: '/', @@ -167,7 +167,7 @@ export const convertkitRouter = router({ const convertkitCookie = serialize( `ck_subscriber`, - JSON.stringify(updatedSubscriber.subscriber), + JSON.stringify(deepOmitNull(updatedSubscriber.subscriber)), { secure: process.env.NODE_ENV === 'production', path: '/', @@ -226,7 +226,7 @@ export const convertkitRouter = router({ const convertkitCookie = serialize( `ck_subscriber`, - JSON.stringify(updatedSubscriber.subscriber), + JSON.stringify(deepOmitNull(updatedSubscriber.subscriber)), { secure: process.env.NODE_ENV === 'production', path: '/', @@ -321,3 +321,21 @@ export const convertkitRouter = router({ } }), }) + +function deepOmitNull(obj: any): any { + if (Array.isArray(obj)) { + return obj.map(deepOmitNull).filter((x) => x !== null) + } + + if (obj && typeof obj === 'object') { + return Object.entries(obj).reduce((acc, [key, value]) => { + const cleaned = deepOmitNull(value) + if (cleaned !== null) { + acc[key] = cleaned + } + return acc + }, {} as Record) + } + + return obj === null ? undefined : obj +} diff --git a/packages/skill-lesson/trpc/routers/pricing.ts b/packages/skill-lesson/trpc/routers/pricing.ts index 04ceab49e..22492643b 100644 --- a/packages/skill-lesson/trpc/routers/pricing.ts +++ b/packages/skill-lesson/trpc/routers/pricing.ts @@ -211,7 +211,7 @@ export const pricing = router({ user = user ? user : await getUserByEmail(subscriber.email_address) ctx.res.setHeader( 'Set-Cookie', - serialize('ck_subscriber', JSON.stringify(subscriber), { + serialize('ck_subscriber', JSON.stringify(deepOmitNull(subscriber)), { httpOnly: true, secure: process.env.NODE_ENV === 'production', path: '/', @@ -305,3 +305,21 @@ export const pricing = router({ return null }), }) + +function deepOmitNull(obj: any): any { + if (Array.isArray(obj)) { + return obj.map(deepOmitNull).filter((x) => x !== null) + } + + if (obj && typeof obj === 'object') { + return Object.entries(obj).reduce((acc, [key, value]) => { + const cleaned = deepOmitNull(value) + if (cleaned !== null) { + acc[key] = cleaned + } + return acc + }, {} as Record) + } + + return obj === null ? undefined : obj +} diff --git a/packages/skill-lesson/utils/ck-set-subscriber-cookie.ts b/packages/skill-lesson/utils/ck-set-subscriber-cookie.ts index 6ee6c7bc8..4787c1393 100644 --- a/packages/skill-lesson/utils/ck-set-subscriber-cookie.ts +++ b/packages/skill-lesson/utils/ck-set-subscriber-cookie.ts @@ -12,7 +12,7 @@ export function convertkitSetSubscriberCookie({ if (subscriber) { const convertkitCookie = serialize( `ck_subscriber`, - JSON.stringify(subscriber), + JSON.stringify(deepOmitNull(subscriber)), { secure: process.env.NODE_ENV === 'production', path: '/', @@ -25,3 +25,21 @@ export function convertkitSetSubscriberCookie({ res.setHeader('Set-Cookie', convertkitCookie) } } + +function deepOmitNull(obj: any): any { + if (Array.isArray(obj)) { + return obj.map(deepOmitNull).filter((x) => x !== null) + } + + if (obj && typeof obj === 'object') { + return Object.entries(obj).reduce((acc, [key, value]) => { + const cleaned = deepOmitNull(value) + if (cleaned !== null) { + acc[key] = cleaned + } + return acc + }, {} as Record) + } + + return obj === null ? undefined : obj +}