/** * Compile-time-only type-accuracy check for SDK 0.67.0's bonus-spend preview * surface. Same pattern as types.reorder.typecheck.ts: no runtime assertions, * never imported by index.ts — `bun:test` won't pick it up (the name doesn't * match `*.test.ts`) and `bun build` won't bundle it, but `tsc --noEmit` / * `tsc --emitDeclarationOnly` fails loudly if the types drift from the wire. * * What is pinned here, and WHY each is worth a compile-time fixture: * * - The seven MONEY/echo CheckoutPreview fields are REQUIRED. There is no * deployment that answers this route with a subset of THOSE — it either * exists and sends all seven or 404s — so an optional money field would push * a phantom `undefined` branch into every storefront that renders the * breakdown. The eighth field, `bonusExpiringSoon`, is optional on purpose * and is EXEMPTED BY NAME below rather than by relaxing the pin: it postdates * the route, so an API deployed in between answers 200 without the key. The * exemption is spelled out so the next additive field has to be argued for * too, instead of arriving under a blanket `Partial`. * * - CheckoutPreview is NOT InsufficientBalanceDetails with different names. * The two describe the same arithmetic at different moments and share a field * NAME (`shortfallAmount`) with a DIFFERENT floor: the 402's is never below 1 * (a refusal always needs a real top-up), the preview's is 0 on an affordable * cart. A maintainer "harmonizing" the two shapes would silently offer buyers * a 1 ₽ top-up they don't need — or hide a top-up they do. * * - `useBonus` is NOT a CheckoutRequest body field in this SDK. It travels in * the create OPTIONS. Two spellings for one decision would need a precedence * rule, and picking the wrong one spends bonuses the buyer withheld. * * - `checkout.create`'s second parameter accepts BOTH a bare key string and the * options bag. Shipped storefronts call it positionally, so the union may * only ever be EXTENDED. This has to be pinned HERE, in typechecked scope: * tsconfig excludes `*.test.ts`, so the wire tests' positional calls are * never compiled, and bun's runner never typechecks. Narrowing the parameter * to `CheckoutCreateOptions` alone would therefore pass both `tsc` and the * whole suite while breaking every consumer's build — a silent break of the * one interface those storefronts depend on. */ export {};