/** * Compile-time-only type-accuracy check for SDK 0.59.0's coin PURCHASE surface * (spec 2026-07-27-gc-coins-purchase). * * Same contract as the other `*.typecheck.ts` files: no runtime assertions, * never imported by index.ts, not matched by `bun:test` — it exists so * `bun run typecheck` / `bun run build` fails loudly if these types drift from * the wire contract in apps/api (`routes/coins.ts`, `routes/checkout.ts`). * Test files live outside tsc's scope (tsconfig `exclude`), so shape checks * that must be enforced by the COMPILER belong here, not in coins.test.ts. * * What is pinned: * - `CoinWallet.coinCurrency` / `.minPurchase` / `.maxPurchase` are REQUIRED — * `/coins/me` merges COIN_CONFIG_DEFAULTS server-side, so they always ship. * Optional would push a pointless `?? "RUB"` into every purchase form. * - `CoinPurchaseResult` / `CoinPurchaseStatus` / `CoinTransaction` match the * route projections field-for-field (excess-property checks on the literals * catch both a missing field and one that should not be there). * - The coin fields on the checkout surfaces are OPTIONAL — every one of them * is absent on the RUB rails, and `coinsUsed`/`newCoinBalance` are absent * even on the coins rail for an already-processed replay / failed read. */ import type { CheckoutRequest, CheckoutResponse, CoinPriceChangedDetails, CoinPurchaseResult, CoinPurchaseStatus, CoinTransaction, CompleteWithBalanceResult, InsufficientCoinsDetails } from "./types"; export declare const _typecheckOnly: { _insufficientWithBalance: InsufficientCoinsDetails; _insufficientUnknownBalance: InsufficientCoinsDetails; _insufficientCoinsCurrencyIsRequired: true; _priceChanged: CoinPriceChangedDetails; _walletDenominationIsRequired: true; _purchase: CoinPurchaseResult; _purchaseWithoutUrl: CoinPurchaseResult; _status: CoinPurchaseStatus; _spend: CoinTransaction; _credit: CoinTransaction; _rubCompletion: CompleteWithBalanceResult; _coinCompletion: CompleteWithBalanceResult; _coinCheckoutRequest: CheckoutRequest; _coinCheckoutResponse: CheckoutResponse; };