Skip to content

Composable checkout — follow-ups (tracking) #369

Description

@field123

Follow-ups from #368 (merged) that aren't covered by existing PRD slices.

Already tracked elsewhere — not duplicated here: account checkout → #322 · 3DS/requires_action#324 · legacy pipeline rip-out → #326.

Genuinely-new (no existing slice):

  • HIGH — payment integrity: harden free-vs-paid when cart meta.display_price is unavailable. pay.ts falls back to summing parsed items and treats 0 as free, so a paid cart could settle free with no charge if items don't parse (latent — the cart-hash 409 guards it today). Fix must not break legitimately-free orders that lack meta.
  • verify confirmOrder paymentID + stop swallowing its failure (charged order could be left unreconciled).
  • order custom fields (EP Flows, net-new in feat(ep-commerce): composable single-page checkout + EP-native Stripe + order custom fields #368): allow-list / namespace shopper-supplied keys so a client can't overwrite defined slugs (e.g. consent flags).
  • confirmation page: real download links for digital products (order-items / file-href fetch).
  • EPStripePayment: optionally suppress the PaymentElement's default Country+Postal (granular billingDetails).
  • reusable EPCheckoutError / EPOrderConfirmation primitives (so consumers don't hand-wire success/error surfacing).
  • better-auth migration (retire the cookie/session bridge).

Context: #368 delivered the guest Stripe happy path (≈ slices #320/#321, now closed) with ISO divergences — single-page EPCheckoutFormProvider form layer (vs refAction-driven existing components), card-only EPStripePayment, shipping optional — plus net-new order custom fields (Flows), a zero-total/free path, and a confirmation redirect. The form-layer divergence is worth a conscious reconciliation with the PRD owner (#317).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions