Fold every component into ONE authoritative total: subtotal − discount + shipping + tax, each a non-negative whole cent and the discount never exceeding the subtotal. The single place the order total is composed once shipping (a ShippingOption) and tax (a TaxResult) are resolved — so the cart drawer, checkout summary, order record, and the Stripe charge can never disagree.
Deprecated
@suluk/stripe is DEPRECATED and gutted (C048) — it is now a thin re-export shell over @suluk/payments and will be REMOVED in the next major. Import everything below from
@suluk/paymentsinstead.What moved to @suluk/payments (re-exported here for backward compatibility): the pricing primitives, the Stripe webhook surface (signature verification + the event router), and the Stripe form-encoder/transport. What was DELETED (dead — no consumer): the Stripe usage-billing (Billing Meters), the checkout-param builders, the shipping/tax adapters, the
PaymentProvider/StripeLiketypes, andrestStripe/retrievePaymentIntent. Use@suluk/payments'PaymentConnector(agnostic) orstripeConnectorfor payment flows.