feat(credits): solde IA unique (option M), packs Stripe et polish billing
Un pot de crédits global (BASIC 100 / PRO 1 000 / BUSINESS 4 000) remplace les seaux par fonction côté débit. Packs one-shot S/M/L, admin sans seaux legacy, usage multi-features, hints de coût, anti-flash thème et hydratation admin. Inclut aussi le pipeline slides renforcé et la page publique polishée.
This commit is contained in:
@@ -19,6 +19,9 @@ const BILLING_CONFIG_KEYS = [
|
||||
'STRIPE_PRICE_PRO_ANNUAL',
|
||||
'STRIPE_PRICE_BUSINESS_MONTHLY',
|
||||
'STRIPE_PRICE_BUSINESS_ANNUAL',
|
||||
'STRIPE_PRICE_CREDITS_S',
|
||||
'STRIPE_PRICE_CREDITS_M',
|
||||
'STRIPE_PRICE_CREDITS_L',
|
||||
] as const
|
||||
|
||||
const TIERS: TierType[] = ['BASIC', 'PRO', 'BUSINESS', 'ENTERPRISE']
|
||||
@@ -54,7 +57,42 @@ export async function getBillingAdminData() {
|
||||
BILLING_CONFIG_KEYS.map((key) => [key, config[key] ?? '']),
|
||||
)
|
||||
|
||||
return { entitlements, billingConfig, usageOverview, features: [...VALID_FEATURES], tiers: TIERS }
|
||||
const { CREDIT_ALLOCATIONS, CREDIT_COSTS, slideGenerateCreditCost } = await import('@/lib/credits')
|
||||
const { CREDIT_PACKS, CREDIT_PACK_IDS } = await import('@/lib/billing/credit-packs')
|
||||
|
||||
const creditAllocations = TIERS.map((tier) => {
|
||||
const raw = CREDIT_ALLOCATIONS[tier]
|
||||
return {
|
||||
tier,
|
||||
monthlyCredits: raw === 'unlimited' ? null : raw,
|
||||
unlimited: raw === 'unlimited',
|
||||
}
|
||||
})
|
||||
|
||||
const creditCosts = {
|
||||
...CREDIT_COSTS,
|
||||
slide_generate_example: slideGenerateCreditCost(7),
|
||||
}
|
||||
|
||||
const creditPacks = CREDIT_PACK_IDS.map((id) => {
|
||||
const p = CREDIT_PACKS[id]
|
||||
return {
|
||||
id: p.id,
|
||||
credits: p.credits,
|
||||
defaultDisplay: p.defaultDisplay,
|
||||
}
|
||||
})
|
||||
|
||||
return {
|
||||
entitlements,
|
||||
billingConfig,
|
||||
usageOverview,
|
||||
features: [...VALID_FEATURES],
|
||||
tiers: TIERS,
|
||||
creditAllocations,
|
||||
creditCosts,
|
||||
creditPacks,
|
||||
}
|
||||
}
|
||||
|
||||
export async function updatePlanEntitlement(
|
||||
|
||||
Reference in New Issue
Block a user