/** * The Signup Mirror flow is gated by the ``signup_mirror`` flag, which * dashboard-api sets at registration for every new signup and exposes on * ``/me``. Accounts that registered before the flow shipped have it false, so * they keep the standard onboarding. */ /** The /me fields that decide where a mirror account resumes. */ export interface SignupMirrorUser { signup_mirror?: boolean; signup_mirror_completed_at?: string | null; launch_discount_status?: 'ELIGIBLE' | 'USED' | 'SKIPPED'; } /** * Whether this account is in the Signup Mirror flow at all. * * @param {SignupMirrorUser | null} user - The /me flags for this account. * @return {boolean} True when the mirror flag is set. */ export const isSignupMirrorUser = (user?: SignupMirrorUser | null): boolean => !!user?.signup_mirror; /** * Whether the merchant still owes the Mirror (flag set, not yet completed). * * @param {SignupMirrorUser | null} user - The /me flags for this account. * @return {boolean} True when the Mirror is still pending. */ export const isSignupMirrorPending = ( user?: SignupMirrorUser | null ): boolean => !!user?.signup_mirror && !user?.signup_mirror_completed_at; export const isLaunchDiscountActioned = ( user?: SignupMirrorUser | null ): boolean => !!user?.launch_discount_status && user.launch_discount_status !== 'ELIGIBLE'; export const signupMirrorRedirect = ( user?: SignupMirrorUser | null ): string | null => { if (!user?.signup_mirror) return null; if (user.signup_mirror_completed_at) return null; if (isLaunchDiscountActioned(user)) return '/onboarding-chain'; return '/signup-mirror'; };