createOrGetStripeCustomer([ 'email' => $account->stripeEmail(), 'name' => $account->stripeName(), ]); $owner = $account->owner; $metadata = array_filter([ 'utm_source' => $owner?->utm_source, 'utm_medium' => $owner?->utm_medium, 'utm_campaign' => $owner?->utm_campaign, 'utm_term' => $owner?->utm_term, 'utm_content' => $owner?->utm_content, 'gclid' => $owner?->gclid, 'fbclid' => $owner?->fbclid, 'li_fat_id' => $owner?->li_fat_id, 'ttclid' => $owner?->ttclid, 'rdt_cid' => $owner?->rdt_cid, 'epik' => $owner?->epik, 'persona' => $owner?->persona?->value, 'goals' => implode(',', $owner?->goals ?? []), 'referral_source' => $owner?->referral_source?->value, ]); $subscription = $account->newSubscription(Account::SUBSCRIPTION_NAME, $priceId) ->quantity(max(1, $account->workspaces()->count())) ->withMetadata(array_map( fn (string $value): string => Str::limit($value, 500, ''), $metadata, )); ConfigureSubscriptionCheckout::apply($subscription, $account); $session = $subscription->checkout([ 'success_url' => route('app.billing.processing').'?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => $cancelUrl, ]); return Inertia::location($session->url); } }