92f5973a95
api/billing.ts (getWallet) + BillingView тянет GET /api/billing/wallet на mount (шапка + BalanceCard, loading/error-state). BalanceCard на реальные props с nullable-тарифом. featureLabel для feature-слагов. Sprint 2 Plan C, audit E3 (frontend pt1). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
32 lines
982 B
TypeScript
32 lines
982 B
TypeScript
import { apiClient } from './client';
|
|
|
|
/**
|
|
* API-модуль биллинга (Sprint 2 Plan C).
|
|
*
|
|
* Эндпоинты под [auth:sanctum, tenant]: GET wallet/transactions/invoices
|
|
* (E3), POST topup (E1 — добавляется в Task 5). GET'ы не требуют CSRF-cookie.
|
|
*/
|
|
|
|
/** Тариф в составе ответа GET /api/billing/wallet. */
|
|
export interface WalletTariff {
|
|
code: string;
|
|
name: string;
|
|
price_monthly: string | null;
|
|
billing_model: string;
|
|
features: string[];
|
|
}
|
|
|
|
/** Ответ GET /api/billing/wallet — кошелёк тенанта. */
|
|
export interface Wallet {
|
|
balance_rub: string;
|
|
balance_leads: number;
|
|
runway_days: number | null;
|
|
tariff: WalletTariff | null;
|
|
}
|
|
|
|
/** GET /api/billing/wallet — балансы + текущий тариф + runway. */
|
|
export async function getWallet(): Promise<Wallet> {
|
|
const { data } = await apiClient.get<Wallet>('/api/billing/wallet');
|
|
return data;
|
|
}
|