We just tagged v1.0.1-alpha-30. This is a feature release focused on boundary-payments: the IPaymentProvider port is extended with off-session payments, checkout-session expiry and mandate-aware checkout options (BOU-62). This is preparatory work for the Stripe PaymentIntents adapter (BOU-63) and the boundary-license billing engine.
Added: off-session, expiry and mandate-aware checkout on IPaymentProvider
The port gains two new methods and richer checkout options:
-
create-off-session-payment— charge a stored mandate without the customer present, returning a:pending,:paidor:failedresult. -
expire-checkout-session— programmatically expire an open checkout session. -
create-checkout-sessionnow acceptssetup-future-usage,customer-emailandprovider-customer-id, so a checkout can establish a mandate for later off-session charges.
The schemas follow suit: a shared PaymentStatus enum (:pending :paid :failed :cancelled :expired :chargeback) aligned with boundary-license, new OffSessionPaymentRequest/Result and ExpireCheckoutResult schemas, and optional payment-id / mandate fields on CheckoutResult and PaymentStatusResult.
The mock adapter implements all new methods (auto-approve by default, with a :mock-status metadata override and mock mandate ids), so application code and tests can target the full port today. The Stripe and Mollie adapters stub the new methods with clear {:type :not-implemented} errors until BOU-63 lands.
Fixed: Mollie expired payments
Two corrections to expiry handling in the Mollie adapter:
-
Mollie’s
"expired"status now maps to:expiredinstead of:failed, matching the new shared status enum. -
Mollie sends a webhook when a payment expires, but the event normalizer had no
"expired"entry —process-webhookthrew an:internal-errorand:expiredwas only reachable via polling. A new:payment.expiredevent type lets expired webhooks flow through normally.
Fixed: GitHub release creation in the publish workflow
The publish workflow introduced in alpha-29 could publish to Clojars but lacked permission to create the GitHub release; publish.yml now grants contents: write so the release is created automatically alongside the Clojars deploy.
Version alignment
All 25 libraries bumped to v1.0.1-alpha-30 to maintain lockstep versioning.
Upgrade
Re-run the installer to pick up the latest release:
curl -fsSL https://get.boundary-app.org | bash
The port changes are additive — existing IPaymentProvider consumers keep working. Note one behavioural change: Mollie payments that expire now surface as :expired rather than :failed; if you branch on :failed to detect expiry, switch to :expired.
Feedback and issues welcome on GitHub.