Skip to main content

Drop-in Changelog

v0.13.1
Bug fixes
Apple Pay: Double-clicking the Apple Pay button no longer kills the checkout — clicks are ignored while the payment sheet is open.
v0.13.0

Adds Adyen Apple Pay and dynamic theme loading from a CDN. Apple Pay and PayPal initialization failures now surface instead of leaving a dead button.

New features
Adyen: Added Apple Pay.
Apple Pay / Google Pay / PayPal: Express buttons apply the theme's borderRadius.
Theme configuration can be loaded from a CDN per entity.
Card form input survives a session refresh.

Refreshing a session — an amount update, for example — no longer resets the card form. Input is preserved unless the payment method configuration itself changes.

Minor: Custom apiPaths passed to a bundle that enforces its own API URLs now log a console warning instead of being silently ignored.
Bug fixes
PayPal: Initialization errors surface instead of failing silently, and the pay button deactivates on a partnerError.

Applies to both Wallet and BNPL. The button no longer stays active after a failed attempt.

Apple Pay: Initialization failures and unsupported clients no longer leave a dead button or halt the checkout.

An incomplete server-side configuration surfaces a visible error. A client that does not support Apple Pay disables the method instead of killing the checkout.

Rapid amount adjustments no longer exhaust the session step budget.

onAmountUpdate is debounced trailing-only, so /init fires once the amount settles. Previously, repeated adjustments — gift card entry, for example — could reach SESSION_MAX_STEPS_REACHED.

v0.12.1
Bug fixes
The ESM build no longer fails to load on Safari and iOS 16.3 and below.

The build target is pinned explicitly again. A dependency bump had picked up a narrower default that stopped downleveling ES2022 syntax.

v0.12.0

Locale, theme, and hidePayButton can now be updated on a live instance via setConfig(). The token registration checkbox honours save_token_mode. Validation error keys are renamed.

Breaking changes
Validation error keys *CannotBeEmptyError are deprecated in favour of *RequiredError.low impact
Migration guide

panCannotBeEmptyError becomes panRequiredError, cvvCannotBeEmptyError becomes cvvRequiredError, and so on. The old keys still resolve but will be removed in a future major.

// Before
const options = { hostedForm: { panCannotBeEmptyError: 'Card number is required.' } };

// After
const options = { hostedForm: { panRequiredError: 'Card number is required.' } };
New features
setConfig() updates locale, theme, and hidePayButton on a live instance without remounting.
dropinInstance.setConfig({
  locale: 'fr-FR',
  theme: { fontFamily: 'Montserrat', primaryColor: '#ff0000' },
});

Google Pay buttons strip the region tag from the locale (fr-FR becomes fr) so they render in the right language.

The token registration checkbox honours the save_token_mode configured per payment method.
  • ALWAYS: hidden, tokenization forced by the backend
  • PREFER: visible, pre-checked
  • PREFER_NO (default): visible, unchecked
  • NEVER: hidden, tokenization disabled
Bug fixes
Apple Pay: Validation fails early when the session token is missing, and stale session data is cleared before re-initialization.
Lyra: Google Pay, Apple Pay, and XPay initialize when plugin_result.logs is absent.
PayPal: Initialization errors are surfaced instead of being swallowed.

Errors returned by the Purse API during initialization — NOT_AUTHORIZED, for example — previously stalled the checkout with no feedback for Wallet and BNPL.

The checkout no longer crashes when a payment method is removed during a session replacement.
save_token: false overrides any conflicting save_token_mode.
Minor: The drop-in fills the width of its parent container.
v0.11.0

This release introduces Stripe Apple Pay as a new payment method, expanding payment options for your buyers. We've also enhanced the Drop-in UI with new theming capabilities for dark backgrounds and addressed several critical integration issues, including preventing unintended form submissions and improving the reliability of hosted fields and session refreshing.

New features
Stripe: Apple Pay is now supported as a new payment method.
New theming options are available to better adapt the Drop-in UI for dark backgrounds.

You can now set title.color independently from primary text color for better contrast. Additionally, you can configure button styles for Apple Pay and Google Pay (xpay.apple.buttonstyle, xpay.google.buttonColor) to match dark themes.

// Example for Drop-in configuration
Purse.createDropinCheckout('elementId', {
  theme: {
    title: {
      color: '#FFFFFF' // New option
    },
    xpay: {
      apple: {
        buttonStyle: 'white' // New option ('white', 'white-outline', 'black', 'black-outline')
      },
      google: {
        buttonColor: 'black' // New option ('black', 'white')
      }
    }
  }
});
Bug fixes
Ingenico: Apple Pay and Google Pay no longer crash when Ingenico returns incomplete initialization data.
When hosted fields are requested, the checkout now prioritizes the first payment method that supports them.
Hosted fields are now correctly identified for partners where the session vault did not explicitly declare support but the plugin does.
Buttons in the Drop-in UI now correctly prevent unintended form submissions when embedded within a merchant's form.
Token lists now correctly handle malformed API responses without crashing.
Payment method UI resolution now correctly prioritizes session templates before partner-specific plugins.
The session refresh functionality now reliably reinitializes the Drop-in UI after an expired session.

The onRefreshSession callback now correctly handles new session data, ensuring the payment flow can resume smoothly after a session expires.

v0.10.1
Bug fixes
The payment form now robustly handles unexpected responses from the buyer wallet service, preventing crashes.
v0.10.0
New features
Added onRefreshSession hook. Called when the drop-in detects an expired or terminated session, giving you a chance to reinitialize with a fresh one.
PurseDropin.init({
  session: mySession,
  hooks: {
    onRefreshSession: async () => {
      return await fetchNewSession();
    },
  },
});
v0.9.0
New features
PayPal: Added disableMaxWidth option to PayPal button configuration.
Worldpay: Added direct credit card payment method.
Added hideHolderName option to HostedFieldsOptions. When true, hides the cardholder name field if the payment method does not require it; the field remains enforced when holder name is mandatory.
Payment method items now expose additionalAssets with card scheme badge URLs and labels, enabling multi-brand icon display for co-branded cards.
Bug fixes
Apple Pay / Google Pay: X-Pay button interactions now correctly dispatch the unified selection/deselection events via partner-ui, fixing a gap where Lyra X-Pay flows did not signal method selection.
Google Pay (Ingenico / Worldline): Corrected default gateway and network settings when paymentProduct320SpecificData is absent, resolving silent tokenization failures.
Lyra: payzen-xpay no longer triggers validation when the payment sheet failed to open.
Oney: External 3DS flow for tokenized Oney cards now handles pin code verification correctly.
Expiration date field no longer rejects 4-digit years.
Malformed expiry dates from vault (e.g. month 001) are no longer sent during validation.
getHostedFields() forms are now included in checkout validation; they were previously skipped silently.
Worldpay: Card brand list is now correctly filtered.
Card form iframes are now destroyed when initialization is aborted mid-flight, preventing Could not find frame errors on rapid re-initialization.
Saved payment tokens now display their user-defined name instead of the masked card number.
v0.8.0

This release significantly enhances the stability and reliability of the Purse drop-in SDK, ensuring a smoother payment experience for your buyers. We've resolved several critical issues, including payment flow errors during redirection and crashes with Apple Pay. Additionally, payment information such as currency display for gift cards and validation for cardholder names is now more accurate.

Bug fixes
Apple Pay: The payment sheet no longer crashes when buyers cancel a transaction.
Currency display for gift cards and vouchers is now consistent with the payment session currency.
The payment process now gracefully handles cases where a redirection URL is unexpectedly missing during validation, preventing errors.
The cardholder name field now correctly prevents the use of semicolons, improving data validation.
The SDK now correctly parses wallet session data from widget_data, ensuring seamless wallet payment experiences.
Payments initiated off-session are no longer incorrectly filtered by amount, improving success rates for recurring or tokenized payments.
Minor: Fixed the display string for financing costs with APRC.
v0.7.0

This release introduces several new payment options, including Apple Pay and Google Pay for Sogecommerce, PayPal's Buy Now, Pay Later, and Younited Installments. We've also enhanced existing payment flows with better error handling for Lyra and ANCV Connect, refined UI behavior for Oney private cards and single-method layouts, and improved overall stability.

New features
Alma: The SDK now validates payment details before displaying the Alma popup, preventing abandoned sessions.
Oney: The card form now collects the buyer's birthdate instead of the CVV for Oney private cards.
PayPal: Buyers can now pay using Buy Now, Pay Later (BNPL) options.
Sogecommerce: Buyers can now pay using Apple Pay and Google Pay.
Younited: Buyers can now pay using Younited Installments.
Drop-in elements now include unique IDs, simplifying end-to-end testing.
Bug fixes
Adyen: The SDK now ensures the payment manager correctly handles 3DS redirections for Adyen credit card payments.
ANCV Connect: Cancelling the payment process now correctly aborts pending token polls, and the SDK properly handles existing ANCV transactions with a 'pending authorization' status.
Lyra: The SDK now gracefully handles 725 errors and situations where 3DS authentication URLs are absent, and payment methods are softly disabled for zero-amount transactions, preventing crashes.
Maxxing: Loyalty tokens are now correctly generated, resolving issues where Maxxing loyalty was unintentionally disabled.
Younited: The payment method now correctly initializes on both session and amount updates.
Payment methods that support OFF_SESSION registrations are now correctly displayed and enabled for information requests with zero amount.
Accordion items now debounce rapid clicks, preventing errors in embedded iframes.
The correct payment method is now passed to the onBeforeValidate hook, resolving issues with Payzen split payments.
Redirection logic has been refined, preventing duplicate calls and ensuring the payment manager correctly handles final redirections.
The card form no longer displays duplicate CVV input fields, even under slow network conditions.
The vault integration now waits for the UI to be fully ready before allowing interactions, improving stability.
The drop-in layout now automatically displays the payment form directly when only a single payment method is active, removing the accordion for a cleaner experience.
The payment method list no longer displays empty slots for unsupported or misconfigured XPay plugins.
Minor: Miscellaneous UI improvements: pretty partner names on redirection pages, fixed minor CSS issues for Younited, removed unnecessary spacing above payment methods, and now display card brand names in a user-friendly format.