mirror of
https://github.com/yusufipk/OpenFrame.git
synced 2026-09-11 09:36:08 +00:00
- Moved registration logic to a new client component for better separation of concerns. - Integrated invite code requirement based on feature flags in the registration process. - Enhanced dashboard functionality to conditionally enable Bunny uploads based on feature flags. - Updated various components and API routes to check for Bunny uploads and Stripe billing feature flags. - Added new feature flag utilities for managing feature toggles in the application.
46 lines
2.1 KiB
TypeScript
46 lines
2.1 KiB
TypeScript
import { auth } from '@/lib/auth';
|
|
import { apiErrors, successResponse, withCacheControl } from '@/lib/api-response';
|
|
import { getBillingOverview } from '@/lib/billing';
|
|
import { isStripeFeatureEnabled } from '@/lib/feature-flags';
|
|
import { hasStripeRuntimeConfig, isStripeConfigured } from '@/lib/stripe';
|
|
|
|
export async function GET() {
|
|
try {
|
|
const session = await auth();
|
|
if (!session?.user?.id) {
|
|
return apiErrors.unauthorized();
|
|
}
|
|
|
|
const billing = await getBillingOverview(session.user.id);
|
|
const isEnabled = isStripeFeatureEnabled();
|
|
const isConfigured = hasStripeRuntimeConfig();
|
|
const response = successResponse({
|
|
isEnabled,
|
|
isConfigured,
|
|
status: !isEnabled ? 'disabled' : isStripeConfigured() ? 'ready' : 'misconfigured',
|
|
checkoutAvailable: isStripeConfigured() && !billing.subscription.hasActiveSubscription,
|
|
portalAvailable: isStripeConfigured() && Boolean(billing.subscription.stripeCustomerId),
|
|
subscription: {
|
|
status: billing.subscription.status,
|
|
label: billing.subscription.label,
|
|
hasActiveSubscription: billing.subscription.hasActiveSubscription,
|
|
hasActiveTrial: billing.subscription.hasActiveTrial,
|
|
hasBillingAccess: billing.subscription.hasBillingAccess,
|
|
priceId: billing.subscription.stripePriceId,
|
|
currentPeriodEnd: billing.subscription.currentPeriodEnd?.toISOString() ?? null,
|
|
cancelAtPeriodEnd: billing.subscription.cancelAtPeriodEnd ?? false,
|
|
cancelAt: billing.subscription.cancelAt?.toISOString() ?? null,
|
|
trialEndsAt: billing.subscription.trialEndsAt?.toISOString() ?? null,
|
|
billingAccessEndedAt: billing.subscription.billingAccessEndedAt?.toISOString() ?? null,
|
|
storageCleanupEligibleAt: billing.subscription.storageCleanupEligibleAt?.toISOString() ?? null,
|
|
},
|
|
workspaceCreation: billing.workspaceCreation,
|
|
});
|
|
|
|
return withCacheControl(response, 'private, no-store');
|
|
} catch (error) {
|
|
console.error('Error fetching billing overview:', error);
|
|
return apiErrors.internalError('Failed to fetch billing overview');
|
|
}
|
|
}
|