@internetarchive/elements 1.1.7-webdev-9378.0 → 1.1.7-webdev-9054.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/elements/ia-donation-form/analytics.d.ts +12 -0
- package/dist/src/elements/ia-donation-form/analytics.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/analytics.js +2 -0
- package/dist/src/elements/ia-donation-form/analytics.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.d.ts +79 -0
- package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.js +2 -0
- package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/braintree-manager.d.ts +73 -0
- package/dist/src/elements/ia-donation-form/braintree/braintree-manager.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/braintree-manager.js +126 -0
- package/dist/src/elements/ia-donation-form/braintree/braintree-manager.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/hosting-environment.d.ts +10 -0
- package/dist/src/elements/ia-donation-form/braintree/hosting-environment.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/hosting-environment.js +9 -0
- package/dist/src/elements/ia-donation-form/braintree/hosting-environment.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-clients.d.ts +47 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-clients.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-clients.js +104 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-clients.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.d.ts +11 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.js +2 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts +20 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.js +2 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.d.ts +21 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.js +83 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.d.ts +11 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.js +13 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.d.ts +27 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.js +67 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.d.ts +19 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.js +2 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.d.ts +42 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.js +99 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.d.ts +14 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.js +9 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.d.ts +40 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.js +58 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.d.ts +8 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.js +2 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.d.ts +19 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.js +45 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.d.ts +57 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.js +44 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.d.ts +14 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.js +2 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.d.ts +27 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.js +44 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.d.ts +8 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.js +2 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.d.ts +44 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.js +65 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.d.ts +25 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.js +42 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.d.ts +18 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.js +2 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.js.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers.d.ts +42 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers.js +99 -0
- package/dist/src/elements/ia-donation-form/braintree/payment-providers.js.map +1 -0
- package/dist/src/elements/ia-donation-form/donation-form-error.d.ts +5 -0
- package/dist/src/elements/ia-donation-form/donation-form-error.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/donation-form-error.js +8 -0
- package/dist/src/elements/ia-donation-form/donation-form-error.js.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.d.ts +118 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.js +194 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.js.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.d.ts +24 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.js +70 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.js.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.d.ts +44 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.js +116 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.js.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.d.ts +24 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.js +74 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.js.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.d.ts +47 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.js +204 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.js.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.d.ts +30 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.js +77 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.js.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.d.ts +80 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.js +72 -0
- package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.d.ts +2 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.js +2 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.d.ts +3 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.js +254 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.d.ts +68 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.js +483 -0
- package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.d.ts +26 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.js +163 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.d.ts +39 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.js +212 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.d.ts +118 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.js +774 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.d.ts +31 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.js +93 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.d.ts +33 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.js +380 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.d.ts +11 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.js +59 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.js.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.d.ts +10 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.js +75 -0
- package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.js.map +1 -0
- package/dist/src/elements/ia-donation-form/ia-donation-form-controller.d.ts +111 -0
- package/dist/src/elements/ia-donation-form/ia-donation-form-controller.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/ia-donation-form-controller.js +522 -0
- package/dist/src/elements/ia-donation-form/ia-donation-form-controller.js.map +1 -0
- package/dist/src/elements/ia-donation-form/ia-donation-form.d.ts +95 -0
- package/dist/src/elements/ia-donation-form/ia-donation-form.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/ia-donation-form.js +522 -0
- package/dist/src/elements/ia-donation-form/ia-donation-form.js.map +1 -0
- package/dist/src/elements/ia-donation-form/icons/apple-pay.svg +22 -0
- package/dist/src/elements/ia-donation-form/icons/calendar.svg +12 -0
- package/dist/src/elements/ia-donation-form/icons/credit-card.svg +7 -0
- package/dist/src/elements/ia-donation-form/icons/google-pay.svg +38 -0
- package/dist/src/elements/ia-donation-form/icons/lock.svg +6 -0
- package/dist/src/elements/ia-donation-form/icons/paypal.svg +39 -0
- package/dist/src/elements/ia-donation-form/icons/venmo.svg +9 -0
- package/dist/src/elements/ia-donation-form/icons.d.ts +9 -0
- package/dist/src/elements/ia-donation-form/icons.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/icons.js +27 -0
- package/dist/src/elements/ia-donation-form/icons.js.map +1 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.d.ts +27 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.js +195 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.js.map +1 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.d.ts +7 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.js +63 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.js.map +1 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.d.ts +28 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.js +313 -0
- package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.js.map +1 -0
- package/dist/src/elements/ia-donation-form/recaptcha-manager.d.ts +36 -0
- package/dist/src/elements/ia-donation-form/recaptcha-manager.d.ts.map +1 -0
- package/dist/src/elements/ia-donation-form/recaptcha-manager.js +76 -0
- package/dist/src/elements/ia-donation-form/recaptcha-manager.js.map +1 -0
- package/dist/src/elements/ia-image-viewer/image-viewer-gestures.d.ts.map +1 -1
- package/dist/src/elements/ia-image-viewer/image-viewer-gestures.js +2 -4
- package/dist/src/elements/ia-image-viewer/image-viewer-gestures.js.map +1 -1
- package/package.json +12 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
export class VenmoHandler {
|
|
3
|
+
constructor(options) {
|
|
4
|
+
this.braintreeManager = options.braintreeManager;
|
|
5
|
+
this.venmoClient = options.venmoClient;
|
|
6
|
+
this.venmoProfileId = options.venmoProfileId;
|
|
7
|
+
this.instance =
|
|
8
|
+
options.instancePromisedSingleton ??
|
|
9
|
+
new PromisedSingleton({
|
|
10
|
+
generator: async () => {
|
|
11
|
+
const braintreeInstance = await this.braintreeManager.instance.get();
|
|
12
|
+
return this.venmoClient.create({
|
|
13
|
+
client: braintreeInstance,
|
|
14
|
+
profileId: this.venmoProfileId,
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async isBrowserSupported() {
|
|
20
|
+
if (this.isMobileFirefox()) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const instance = await this.instance.get();
|
|
24
|
+
return instance?.isBrowserSupported() ?? false;
|
|
25
|
+
}
|
|
26
|
+
async startPayment() {
|
|
27
|
+
const instance = await this.instance.get();
|
|
28
|
+
return instance.tokenize();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Venmo doesn't work in mobile Firefox, but Braintree's browser detection
|
|
32
|
+
* says it does. On iOS it opens the Venmo app and returns to Safari, and on
|
|
33
|
+
* Android it lands on the "Download Venmo" page.
|
|
34
|
+
*/
|
|
35
|
+
isMobileFirefox() {
|
|
36
|
+
const isFirefoxIos = navigator.userAgent.indexOf('FxiOS') !== -1;
|
|
37
|
+
const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
|
|
38
|
+
const isMobile = navigator.userAgent.indexOf('Mobile') !== -1;
|
|
39
|
+
return (isFirefox || isFirefoxIos) && isMobile;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=venmo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venmo.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAKxE,MAAM,OAAO,YAAY;IAGvB,YAAY,OAKX;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAE7C,IAAI,CAAC,QAAQ;YACX,OAAO,CAAC,yBAAyB;gBACjC,IAAI,iBAAiB,CAAkB;oBACrC,SAAS,EAAE,KAAK,IAAI,EAAE;wBACpB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;wBACrE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;4BAC7B,MAAM,EAAE,iBAAiB;4BACzB,SAAS,EAAE,IAAI,CAAC,cAAc;yBAC/B,CAAC,CAAC;oBACL,CAAC;iBACF,CAAC,CAAC;IACP,CAAC;IAQD,KAAK,CAAC,kBAAkB;QACtB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3C,OAAO,QAAQ,EAAE,kBAAkB,EAAE,IAAI,KAAK,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3C,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACK,eAAe;QACrB,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC;IACjD,CAAC;CACF","sourcesContent":["import type * as braintree from 'braintree-web';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nimport type { BraintreeManagerInterface } from '../../braintree-manager-interface';\nimport type { VenmoHandlerInterface } from './venmo-interface';\n\nexport class VenmoHandler implements VenmoHandlerInterface {\n instance: PromisedSingleton<braintree.Venmo>;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n venmoClient: typeof braintree.venmo;\n venmoProfileId: string;\n instancePromisedSingleton?: PromisedSingleton<braintree.Venmo>;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.venmoClient = options.venmoClient;\n this.venmoProfileId = options.venmoProfileId;\n\n this.instance =\n options.instancePromisedSingleton ??\n new PromisedSingleton<braintree.Venmo>({\n generator: async () => {\n const braintreeInstance = await this.braintreeManager.instance.get();\n return this.venmoClient.create({\n client: braintreeInstance,\n profileId: this.venmoProfileId,\n });\n },\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n\n private venmoClient: typeof braintree.venmo;\n\n private venmoProfileId: string;\n\n async isBrowserSupported(): Promise<boolean> {\n if (this.isMobileFirefox()) {\n return false;\n }\n const instance = await this.instance.get();\n return instance?.isBrowserSupported() ?? false;\n }\n\n async startPayment(): Promise<braintree.VenmoTokenizePayload> {\n const instance = await this.instance.get();\n return instance.tokenize();\n }\n\n /**\n * Venmo doesn't work in mobile Firefox, but Braintree's browser detection\n * says it does. On iOS it opens the Venmo app and returns to Safari, and on\n * Android it lands on the \"Download Venmo\" page.\n */\n private isMobileFirefox(): boolean {\n const isFirefoxIos = navigator.userAgent.indexOf('FxiOS') !== -1;\n const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;\n const isMobile = navigator.userAgent.indexOf('Mobile') !== -1;\n return (isFirefox || isFirefoxIos) && isMobile;\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
import type { Unsubscribe } from 'nanoevents';
|
|
3
|
+
import type { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface.js';
|
|
4
|
+
import type { CreditCardHandlerEvents, CreditCardHandlerInterface } from './payment-providers/credit-card/credit-card-interface.js';
|
|
5
|
+
import type { GooglePayHandlerInterface } from './payment-providers/google-pay/google-pay-interface.js';
|
|
6
|
+
import type { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface.js';
|
|
7
|
+
import type { VenmoHandlerInterface } from './payment-providers/venmo/venmo-interface.js';
|
|
8
|
+
/** The child handler events that bubble up through the providers. */
|
|
9
|
+
export type PaymentProvidersEvents = CreditCardHandlerEvents;
|
|
10
|
+
export interface PaymentProvidersInterface {
|
|
11
|
+
on<E extends keyof PaymentProvidersEvents>(event: E, callback: PaymentProvidersEvents[E]): Unsubscribe;
|
|
12
|
+
creditCardHandler: PromisedSingleton<CreditCardHandlerInterface>;
|
|
13
|
+
applePayHandler: PromisedSingleton<ApplePayHandlerInterface>;
|
|
14
|
+
venmoHandler: PromisedSingleton<VenmoHandlerInterface | undefined>;
|
|
15
|
+
paypalHandler: PromisedSingleton<PayPalHandlerInterface>;
|
|
16
|
+
googlePayHandler: PromisedSingleton<GooglePayHandlerInterface>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=payment-providers-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-providers-interface.d.ts","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/braintree/payment-providers-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAClG,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,uDAAuD,CAAC;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AACrG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAEvF,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAE7D,MAAM,WAAW,yBAAyB;IACxC,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACvC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAClC,WAAW,CAAC;IACf,iBAAiB,EAAE,iBAAiB,CAAC,0BAA0B,CAAC,CAAC;IACjE,eAAe,EAAE,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;IAC7D,YAAY,EAAE,iBAAiB,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IACnE,aAAa,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IACzD,gBAAgB,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;CAChE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-providers-interface.js","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/braintree/payment-providers-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport type { Unsubscribe } from 'nanoevents';\n\nimport type { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface';\nimport type {\n CreditCardHandlerEvents,\n CreditCardHandlerInterface,\n} from './payment-providers/credit-card/credit-card-interface';\nimport type { GooglePayHandlerInterface } from './payment-providers/google-pay/google-pay-interface';\nimport type { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface';\nimport type { VenmoHandlerInterface } from './payment-providers/venmo/venmo-interface';\n\n/** The child handler events that bubble up through the providers. */\nexport type PaymentProvidersEvents = CreditCardHandlerEvents;\n\nexport interface PaymentProvidersInterface {\n on<E extends keyof PaymentProvidersEvents>(\n event: E,\n callback: PaymentProvidersEvents[E],\n ): Unsubscribe;\n creditCardHandler: PromisedSingleton<CreditCardHandlerInterface>;\n applePayHandler: PromisedSingleton<ApplePayHandlerInterface>;\n venmoHandler: PromisedSingleton<VenmoHandlerInterface | undefined>;\n paypalHandler: PromisedSingleton<PayPalHandlerInterface>;\n googlePayHandler: PromisedSingleton<GooglePayHandlerInterface>;\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
import { type Unsubscribe } from 'nanoevents';
|
|
3
|
+
import type { BraintreeManagerInterface } from './braintree-manager-interface.js';
|
|
4
|
+
import { HostingEnvironment } from './hosting-environment.js';
|
|
5
|
+
import type { PaymentClientsInterface } from './payment-clients.js';
|
|
6
|
+
import type { PaymentProvidersEvents, PaymentProvidersInterface } from './payment-providers-interface.js';
|
|
7
|
+
import type { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface.js';
|
|
8
|
+
import type { CreditCardHandlerInterface } from './payment-providers/credit-card/credit-card-interface.js';
|
|
9
|
+
import type { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration.js';
|
|
10
|
+
import type { GooglePayHandlerInterface } from './payment-providers/google-pay/google-pay-interface.js';
|
|
11
|
+
import type { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface.js';
|
|
12
|
+
import type { VenmoHandlerInterface } from './payment-providers/venmo/venmo-interface.js';
|
|
13
|
+
/**
|
|
14
|
+
* The IA-specific handlers for each payment provider, each created on first
|
|
15
|
+
* request. They're data-focused rather than UI-focused, though there's some
|
|
16
|
+
* overlap with the flow handlers.
|
|
17
|
+
*/
|
|
18
|
+
export declare class PaymentProviders implements PaymentProvidersInterface {
|
|
19
|
+
on<E extends keyof PaymentProvidersEvents>(event: E, callback: PaymentProvidersEvents[E]): Unsubscribe;
|
|
20
|
+
creditCardHandler: PromisedSingleton<CreditCardHandlerInterface>;
|
|
21
|
+
applePayHandler: PromisedSingleton<ApplePayHandlerInterface>;
|
|
22
|
+
/** Undefined when no Venmo profile id was configured, so Venmo isn't offered. */
|
|
23
|
+
venmoHandler: PromisedSingleton<VenmoHandlerInterface | undefined>;
|
|
24
|
+
paypalHandler: PromisedSingleton<PayPalHandlerInterface>;
|
|
25
|
+
googlePayHandler: PromisedSingleton<GooglePayHandlerInterface>;
|
|
26
|
+
private braintreeManager;
|
|
27
|
+
private venmoProfileId?;
|
|
28
|
+
private googlePayMerchantId?;
|
|
29
|
+
private hostedFieldConfig;
|
|
30
|
+
private hostingEnvironment;
|
|
31
|
+
private paymentClients;
|
|
32
|
+
private emitter;
|
|
33
|
+
constructor(options: {
|
|
34
|
+
braintreeManager: BraintreeManagerInterface;
|
|
35
|
+
paymentClients: PaymentClientsInterface;
|
|
36
|
+
venmoProfileId?: string;
|
|
37
|
+
googlePayMerchantId?: string;
|
|
38
|
+
hostingEnvironment: HostingEnvironment;
|
|
39
|
+
hostedFieldConfig: HostedFieldConfiguration;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=payment-providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-providers.d.ts","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/braintree/payment-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAGlG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uDAAuD,CAAC;AACxG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AAE3G,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AAErG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAE1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAEvF;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,yBAAyB;IAChE,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACvC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAClC,WAAW;IAId,iBAAiB,gDAmBd;IAEH,eAAe,8CASZ;IAEH,iFAAiF;IACjF,YAAY,uDAYT;IAEH,aAAa,4CAaV;IAEH,gBAAgB,+CAab;IAEH,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,cAAc,CAAC,CAAS;IAEhC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IAErC,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,kBAAkB,CACO;IAEjC,OAAO,CAAC,cAAc,CAA0B;IAEhD,OAAO,CAAC,OAAO,CAA8C;gBAEjD,OAAO,EAAE;QACnB,gBAAgB,EAAE,yBAAyB,CAAC;QAC5C,cAAc,EAAE,uBAAuB,CAAC;QACxC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,iBAAiB,EAAE,wBAAwB,CAAC;KAC7C;CAQF"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
import { createNanoEvents } from 'nanoevents';
|
|
3
|
+
import { HostingEnvironment } from './hosting-environment.js';
|
|
4
|
+
import { ApplePayHandler } from './payment-providers/apple-pay/apple-pay.js';
|
|
5
|
+
import { ApplePaySessionManager } from './payment-providers/apple-pay/apple-pay-session-manager.js';
|
|
6
|
+
import { CreditCardHandler } from './payment-providers/credit-card/credit-card.js';
|
|
7
|
+
import { GooglePayHandler } from './payment-providers/google-pay/google-pay.js';
|
|
8
|
+
import { PayPalHandler } from './payment-providers/paypal/paypal.js';
|
|
9
|
+
import { VenmoHandler } from './payment-providers/venmo/venmo.js';
|
|
10
|
+
/**
|
|
11
|
+
* The IA-specific handlers for each payment provider, each created on first
|
|
12
|
+
* request. They're data-focused rather than UI-focused, though there's some
|
|
13
|
+
* overlap with the flow handlers.
|
|
14
|
+
*/
|
|
15
|
+
export class PaymentProviders {
|
|
16
|
+
on(event, callback) {
|
|
17
|
+
return this.emitter.on(event, callback);
|
|
18
|
+
}
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.creditCardHandler = new PromisedSingleton({
|
|
21
|
+
generator: async () => {
|
|
22
|
+
const client = await this.paymentClients.hostedFields.get();
|
|
23
|
+
const handler = new CreditCardHandler({
|
|
24
|
+
braintreeManager: this.braintreeManager,
|
|
25
|
+
hostedFieldClient: client,
|
|
26
|
+
hostedFieldConfig: this.hostedFieldConfig,
|
|
27
|
+
});
|
|
28
|
+
handler.on('hostedFieldsRetry', (retryNumber) => {
|
|
29
|
+
this.emitter.emit('hostedFieldsRetry', retryNumber);
|
|
30
|
+
});
|
|
31
|
+
handler.on('hostedFieldsFailed', (error) => {
|
|
32
|
+
this.emitter.emit('hostedFieldsFailed', error);
|
|
33
|
+
});
|
|
34
|
+
return handler;
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
this.applePayHandler = new PromisedSingleton({
|
|
38
|
+
generator: async () => {
|
|
39
|
+
const client = await this.paymentClients.applePay.get();
|
|
40
|
+
return new ApplePayHandler({
|
|
41
|
+
braintreeManager: this.braintreeManager,
|
|
42
|
+
applePayClient: client,
|
|
43
|
+
applePaySessionManager: new ApplePaySessionManager(),
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
/** Undefined when no Venmo profile id was configured, so Venmo isn't offered. */
|
|
48
|
+
this.venmoHandler = new PromisedSingleton({
|
|
49
|
+
generator: async () => {
|
|
50
|
+
const client = await this.paymentClients.venmo.get();
|
|
51
|
+
if (!this.venmoProfileId) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return new VenmoHandler({
|
|
55
|
+
braintreeManager: this.braintreeManager,
|
|
56
|
+
venmoClient: client,
|
|
57
|
+
venmoProfileId: this.venmoProfileId,
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
this.paypalHandler = new PromisedSingleton({
|
|
62
|
+
generator: async () => {
|
|
63
|
+
const [client, paypalLibrary] = await Promise.all([
|
|
64
|
+
this.paymentClients.payPal.get(),
|
|
65
|
+
this.paymentClients.paypalLibrary.get(),
|
|
66
|
+
]);
|
|
67
|
+
return new PayPalHandler({
|
|
68
|
+
braintreeManager: this.braintreeManager,
|
|
69
|
+
paypalClient: client,
|
|
70
|
+
paypalButton: paypalLibrary.Button,
|
|
71
|
+
hostingEnvironment: this.hostingEnvironment,
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
this.googlePayHandler = new PromisedSingleton({
|
|
76
|
+
generator: async () => {
|
|
77
|
+
const [braintreeClient, googlePaymentsClient] = await Promise.all([
|
|
78
|
+
this.paymentClients.googlePayBraintreeClient.get(),
|
|
79
|
+
this.paymentClients.googlePaymentsClient.get(),
|
|
80
|
+
]);
|
|
81
|
+
return new GooglePayHandler({
|
|
82
|
+
braintreeManager: this.braintreeManager,
|
|
83
|
+
googlePayMerchantId: this.googlePayMerchantId,
|
|
84
|
+
googlePayBraintreeClient: braintreeClient,
|
|
85
|
+
googlePaymentsClient,
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
this.hostingEnvironment = HostingEnvironment.Development;
|
|
90
|
+
this.emitter = createNanoEvents();
|
|
91
|
+
this.braintreeManager = options.braintreeManager;
|
|
92
|
+
this.venmoProfileId = options.venmoProfileId;
|
|
93
|
+
this.googlePayMerchantId = options.googlePayMerchantId;
|
|
94
|
+
this.paymentClients = options.paymentClients;
|
|
95
|
+
this.hostingEnvironment = options.hostingEnvironment;
|
|
96
|
+
this.hostedFieldConfig = options.hostedFieldConfig;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=payment-providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-providers.js","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/braintree/payment-providers.ts"],"names":[],"mappings":"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","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { createNanoEvents, type Unsubscribe } from 'nanoevents';\n\nimport type { BraintreeManagerInterface } from './braintree-manager-interface';\nimport { HostingEnvironment } from './hosting-environment';\nimport type { PaymentClientsInterface } from './payment-clients';\nimport type {\n PaymentProvidersEvents,\n PaymentProvidersInterface,\n} from './payment-providers-interface';\nimport { ApplePayHandler } from './payment-providers/apple-pay/apple-pay';\nimport type { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface';\nimport { ApplePaySessionManager } from './payment-providers/apple-pay/apple-pay-session-manager';\nimport { CreditCardHandler } from './payment-providers/credit-card/credit-card';\nimport type { CreditCardHandlerInterface } from './payment-providers/credit-card/credit-card-interface';\nimport type { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration';\nimport { GooglePayHandler } from './payment-providers/google-pay/google-pay';\nimport type { GooglePayHandlerInterface } from './payment-providers/google-pay/google-pay-interface';\nimport { PayPalHandler } from './payment-providers/paypal/paypal';\nimport type { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface';\nimport { VenmoHandler } from './payment-providers/venmo/venmo';\nimport type { VenmoHandlerInterface } from './payment-providers/venmo/venmo-interface';\n\n/**\n * The IA-specific handlers for each payment provider, each created on first\n * request. They're data-focused rather than UI-focused, though there's some\n * overlap with the flow handlers.\n */\nexport class PaymentProviders implements PaymentProvidersInterface {\n on<E extends keyof PaymentProvidersEvents>(\n event: E,\n callback: PaymentProvidersEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n creditCardHandler = new PromisedSingleton<CreditCardHandlerInterface>({\n generator: async () => {\n const client = await this.paymentClients.hostedFields.get();\n const handler = new CreditCardHandler({\n braintreeManager: this.braintreeManager,\n hostedFieldClient: client,\n hostedFieldConfig: this.hostedFieldConfig,\n });\n\n handler.on('hostedFieldsRetry', (retryNumber: number) => {\n this.emitter.emit('hostedFieldsRetry', retryNumber);\n });\n\n handler.on('hostedFieldsFailed', (error: unknown) => {\n this.emitter.emit('hostedFieldsFailed', error);\n });\n\n return handler;\n },\n });\n\n applePayHandler = new PromisedSingleton<ApplePayHandlerInterface>({\n generator: async () => {\n const client = await this.paymentClients.applePay.get();\n return new ApplePayHandler({\n braintreeManager: this.braintreeManager,\n applePayClient: client,\n applePaySessionManager: new ApplePaySessionManager(),\n });\n },\n });\n\n /** Undefined when no Venmo profile id was configured, so Venmo isn't offered. */\n venmoHandler = new PromisedSingleton<VenmoHandlerInterface | undefined>({\n generator: async () => {\n const client = await this.paymentClients.venmo.get();\n if (!this.venmoProfileId) {\n return undefined;\n }\n return new VenmoHandler({\n braintreeManager: this.braintreeManager,\n venmoClient: client,\n venmoProfileId: this.venmoProfileId,\n });\n },\n });\n\n paypalHandler = new PromisedSingleton<PayPalHandlerInterface>({\n generator: async () => {\n const [client, paypalLibrary] = await Promise.all([\n this.paymentClients.payPal.get(),\n this.paymentClients.paypalLibrary.get(),\n ]);\n return new PayPalHandler({\n braintreeManager: this.braintreeManager,\n paypalClient: client,\n paypalButton: paypalLibrary.Button,\n hostingEnvironment: this.hostingEnvironment,\n });\n },\n });\n\n googlePayHandler = new PromisedSingleton<GooglePayHandlerInterface>({\n generator: async () => {\n const [braintreeClient, googlePaymentsClient] = await Promise.all([\n this.paymentClients.googlePayBraintreeClient.get(),\n this.paymentClients.googlePaymentsClient.get(),\n ]);\n return new GooglePayHandler({\n braintreeManager: this.braintreeManager,\n googlePayMerchantId: this.googlePayMerchantId,\n googlePayBraintreeClient: braintreeClient,\n googlePaymentsClient,\n });\n },\n });\n\n private braintreeManager: BraintreeManagerInterface;\n\n private venmoProfileId?: string;\n\n private googlePayMerchantId?: string;\n\n private hostedFieldConfig: HostedFieldConfiguration;\n\n private hostingEnvironment: HostingEnvironment =\n HostingEnvironment.Development;\n\n private paymentClients: PaymentClientsInterface;\n\n private emitter = createNanoEvents<PaymentProvidersEvents>();\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n paymentClients: PaymentClientsInterface;\n venmoProfileId?: string;\n googlePayMerchantId?: string;\n hostingEnvironment: HostingEnvironment;\n hostedFieldConfig: HostedFieldConfiguration;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.venmoProfileId = options.venmoProfileId;\n this.googlePayMerchantId = options.googlePayMerchantId;\n this.paymentClients = options.paymentClients;\n this.hostingEnvironment = options.hostingEnvironment;\n this.hostedFieldConfig = options.hostedFieldConfig;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"donation-form-error.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-donation-form/donation-form-error.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** An error raised by the donation form itself, as opposed to one from a payment library. */
|
|
2
|
+
export class DonationFormError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'DonationFormError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=donation-form-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"donation-form-error.js","sourceRoot":"","sources":["../../../../src/elements/ia-donation-form/donation-form-error.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF","sourcesContent":["/** An error raised by the donation form itself, as opposed to one from a payment library. */\nexport class DonationFormError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'DonationFormError';\n }\n}\n"]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { type ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
2
|
+
import type { DonationEventLoggerInterface } from '../analytics.js';
|
|
3
|
+
import type { BraintreeManagerInterface } from '../braintree/braintree-manager-interface.js';
|
|
4
|
+
import type { DonationPaymentInfo } from '../models/donation-payment-info.js';
|
|
5
|
+
import { type DonationResponse, type SuccessResponse } from '../models/donation-response.js';
|
|
6
|
+
import { DonationType } from '../models/donation-type.js';
|
|
7
|
+
import type { BillingInfo, CustomerInfo } from '../models/donor-contact-info.js';
|
|
8
|
+
import type { PaymentProvider } from '../models/payment-provider.js';
|
|
9
|
+
import { UpsellModalCTAMode } from '../modals/ia-donation-upsell-modal-content.js';
|
|
10
|
+
import '../modals/ia-donation-confirm-modal.js';
|
|
11
|
+
import '../modals/ia-donation-error-modal-content.js';
|
|
12
|
+
import '../modals/ia-donation-upsell-modal-content.js';
|
|
13
|
+
/**
|
|
14
|
+
* The high-level modal flow. Each payment provider gets the donor to a nonce
|
|
15
|
+
* differently (PayPal button, Apple Pay sheet, the Venmo app), but from there
|
|
16
|
+
* the modals are the same: processing, upsell, thank you, error. The flow
|
|
17
|
+
* handlers call this to take the donor through them.
|
|
18
|
+
*/
|
|
19
|
+
export interface DonationFlowModalManagerInterface {
|
|
20
|
+
showConfirmationStepModal(options: {
|
|
21
|
+
amount: number;
|
|
22
|
+
donationType: DonationType;
|
|
23
|
+
currencyType: string;
|
|
24
|
+
confirmDonationCB: () => void;
|
|
25
|
+
cancelDonationCB: () => void;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
closeModal(): void;
|
|
28
|
+
showProcessingModal(): void;
|
|
29
|
+
showThankYouModal(options: {
|
|
30
|
+
successResponse: SuccessResponse;
|
|
31
|
+
upsellSuccessResponse?: SuccessResponse;
|
|
32
|
+
}): void;
|
|
33
|
+
showErrorModal(options: {
|
|
34
|
+
message: string;
|
|
35
|
+
userClosedModalCallback?: () => void;
|
|
36
|
+
}): void;
|
|
37
|
+
showUpsellModal(options: {
|
|
38
|
+
oneTimeAmount: number;
|
|
39
|
+
ctaMode?: UpsellModalCTAMode;
|
|
40
|
+
yesSelected?: (amount: number) => void;
|
|
41
|
+
noSelected?: () => void;
|
|
42
|
+
amountChanged?: (amount: number) => void;
|
|
43
|
+
userClosedModalCallback?: () => void;
|
|
44
|
+
}): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* The main flow, once the provider has handed back a nonce: show
|
|
47
|
+
* processing, submit, then the upsell or thank you or error.
|
|
48
|
+
*/
|
|
49
|
+
startDonationSubmissionFlow(options: {
|
|
50
|
+
nonce: string;
|
|
51
|
+
paymentProvider: PaymentProvider;
|
|
52
|
+
donationInfo: DonationPaymentInfo;
|
|
53
|
+
billingInfo: BillingInfo;
|
|
54
|
+
customerInfo: CustomerInfo;
|
|
55
|
+
upsellOnetimeTransactionId?: string;
|
|
56
|
+
customerId?: string;
|
|
57
|
+
recaptchaToken?: string;
|
|
58
|
+
bin?: string;
|
|
59
|
+
binName?: string;
|
|
60
|
+
}): Promise<DonationResponse | undefined>;
|
|
61
|
+
/**
|
|
62
|
+
* What happens after a successful donation depends on its type: a one-time
|
|
63
|
+
* donation gets the monthly upsell, a monthly one goes straight to thanks.
|
|
64
|
+
*/
|
|
65
|
+
handleSuccessfulDonationResponse(donationInfo: DonationPaymentInfo, response: SuccessResponse): void;
|
|
66
|
+
}
|
|
67
|
+
export declare class DonationFlowModalManager implements DonationFlowModalManagerInterface {
|
|
68
|
+
private braintreeManager;
|
|
69
|
+
private modalManager;
|
|
70
|
+
private analytics;
|
|
71
|
+
constructor(options: {
|
|
72
|
+
braintreeManager: BraintreeManagerInterface;
|
|
73
|
+
modalManager: ModalManagerInterface;
|
|
74
|
+
analytics: DonationEventLoggerInterface;
|
|
75
|
+
});
|
|
76
|
+
closeModal(): void;
|
|
77
|
+
showProcessingModal(): void;
|
|
78
|
+
showThankYouModal(options: {
|
|
79
|
+
successResponse: SuccessResponse;
|
|
80
|
+
upsellSuccessResponse?: SuccessResponse;
|
|
81
|
+
}): void;
|
|
82
|
+
showErrorModal(options: {
|
|
83
|
+
message: string;
|
|
84
|
+
userClosedModalCallback?: () => void;
|
|
85
|
+
}): void;
|
|
86
|
+
showConfirmationStepModal(options: {
|
|
87
|
+
amount: number;
|
|
88
|
+
donationType: DonationType;
|
|
89
|
+
currencyType: string;
|
|
90
|
+
confirmDonationCB: () => void;
|
|
91
|
+
cancelDonationCB: () => void;
|
|
92
|
+
}): Promise<void>;
|
|
93
|
+
showUpsellModal(options: {
|
|
94
|
+
oneTimeAmount: number;
|
|
95
|
+
yesSelected?: (amount: number) => void;
|
|
96
|
+
noSelected?: () => void;
|
|
97
|
+
amountChanged?: (amount: number) => void;
|
|
98
|
+
userClosedModalCallback?: () => void;
|
|
99
|
+
ctaMode?: UpsellModalCTAMode;
|
|
100
|
+
}): Promise<void>;
|
|
101
|
+
startDonationSubmissionFlow(options: {
|
|
102
|
+
nonce: string;
|
|
103
|
+
paymentProvider: PaymentProvider;
|
|
104
|
+
donationInfo: DonationPaymentInfo;
|
|
105
|
+
billingInfo: BillingInfo;
|
|
106
|
+
customerInfo: CustomerInfo;
|
|
107
|
+
upsellOnetimeTransactionId?: string;
|
|
108
|
+
customerId?: string;
|
|
109
|
+
recaptchaToken?: string;
|
|
110
|
+
bin?: string;
|
|
111
|
+
binName?: string;
|
|
112
|
+
}): Promise<DonationResponse | undefined>;
|
|
113
|
+
private upsellModalYesSelected;
|
|
114
|
+
/** The monthly amount the upsell suggests, stepped up with the one-time gift. */
|
|
115
|
+
static getDefaultUpsellAmount(oneTimeAmount: number): number;
|
|
116
|
+
handleSuccessfulDonationResponse(donationInfo: DonationPaymentInfo, response: SuccessResponse): void;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=donation-flow-modal-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"donation-flow-modal-manager.d.ts","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import { msg } from '@lit/localize';
|
|
3
|
+
import { ModalConfig, } from '@internetarchive/modal-manager';
|
|
4
|
+
import { DonationType } from '../models/donation-type.js';
|
|
5
|
+
import { UpsellModalCTAMode } from '../modals/ia-donation-upsell-modal-content.js';
|
|
6
|
+
import '../modals/ia-donation-confirm-modal.js';
|
|
7
|
+
import '../modals/ia-donation-error-modal-content.js';
|
|
8
|
+
import '../modals/ia-donation-upsell-modal-content.js';
|
|
9
|
+
const ModalHeaderColor = {
|
|
10
|
+
Blue: '#497fbf',
|
|
11
|
+
Green: '#55A183',
|
|
12
|
+
Red: '#691916',
|
|
13
|
+
};
|
|
14
|
+
export class DonationFlowModalManager {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.modalManager = options.modalManager;
|
|
17
|
+
this.braintreeManager = options.braintreeManager;
|
|
18
|
+
this.analytics = options.analytics;
|
|
19
|
+
}
|
|
20
|
+
closeModal() {
|
|
21
|
+
this.modalManager.closeModal();
|
|
22
|
+
}
|
|
23
|
+
showProcessingModal() {
|
|
24
|
+
const modalConfig = new ModalConfig({
|
|
25
|
+
headerColor: ModalHeaderColor.Blue,
|
|
26
|
+
showProcessingIndicator: true,
|
|
27
|
+
closeOnBackdropClick: false,
|
|
28
|
+
showCloseButton: false,
|
|
29
|
+
processingImageMode: 'processing',
|
|
30
|
+
title: html `${msg('Processing...')}`,
|
|
31
|
+
});
|
|
32
|
+
this.modalManager.showModal({ config: modalConfig });
|
|
33
|
+
}
|
|
34
|
+
showThankYouModal(options) {
|
|
35
|
+
const modalConfig = new ModalConfig({
|
|
36
|
+
showProcessingIndicator: true,
|
|
37
|
+
processingImageMode: 'complete',
|
|
38
|
+
headerColor: ModalHeaderColor.Green,
|
|
39
|
+
title: html `${msg('Thank You!')}`,
|
|
40
|
+
});
|
|
41
|
+
this.modalManager.showModal({ config: modalConfig });
|
|
42
|
+
const selectedPayment = options.successResponse.paymentProvider.replace(/\s+/g, '');
|
|
43
|
+
let action = `Donated-${selectedPayment}`;
|
|
44
|
+
if (options.upsellSuccessResponse) {
|
|
45
|
+
action += `-upsell`;
|
|
46
|
+
}
|
|
47
|
+
const label = options.successResponse.donationType;
|
|
48
|
+
this.analytics.logDonationFlowEvent(action, label);
|
|
49
|
+
this.braintreeManager.donationSuccessful(options);
|
|
50
|
+
}
|
|
51
|
+
showErrorModal(options) {
|
|
52
|
+
const modalConfig = new ModalConfig({
|
|
53
|
+
headerColor: ModalHeaderColor.Red,
|
|
54
|
+
title: html `${msg('Processing error')}`,
|
|
55
|
+
headline: html `${msg("There's been a problem completing your donation.")}`,
|
|
56
|
+
message: html `${options.message}`,
|
|
57
|
+
});
|
|
58
|
+
this.modalManager.showModal({
|
|
59
|
+
config: modalConfig,
|
|
60
|
+
userClosedModalCallback: options.userClosedModalCallback,
|
|
61
|
+
customModalContent: html `
|
|
62
|
+
<ia-donation-error-modal-content></ia-donation-error-modal-content>
|
|
63
|
+
`,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
showConfirmationStepModal(options) {
|
|
67
|
+
const modalTitle = options.donationType === DonationType.Upsell
|
|
68
|
+
? msg('Confirm monthly donation')
|
|
69
|
+
: msg('Complete donation');
|
|
70
|
+
const modalConfig = new ModalConfig({
|
|
71
|
+
closeOnBackdropClick: false,
|
|
72
|
+
headerColor: ModalHeaderColor.Green,
|
|
73
|
+
title: html `${modalTitle}`,
|
|
74
|
+
message: html `
|
|
75
|
+
<ia-donation-confirm-modal
|
|
76
|
+
.amount=${options.amount}
|
|
77
|
+
.currencyType=${options.currencyType}
|
|
78
|
+
.donationType=${options.donationType}
|
|
79
|
+
.confirmDonation=${options.confirmDonationCB}
|
|
80
|
+
.cancelDonation=${options.cancelDonationCB}
|
|
81
|
+
></ia-donation-confirm-modal>
|
|
82
|
+
`,
|
|
83
|
+
});
|
|
84
|
+
return this.modalManager.showModal({
|
|
85
|
+
config: modalConfig,
|
|
86
|
+
userClosedModalCallback: options.cancelDonationCB,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
showUpsellModal(options) {
|
|
90
|
+
const modalConfig = new ModalConfig({
|
|
91
|
+
headerColor: ModalHeaderColor.Green,
|
|
92
|
+
title: html `${msg('Donation received')}`,
|
|
93
|
+
processingImageMode: 'complete',
|
|
94
|
+
showProcessingIndicator: true,
|
|
95
|
+
});
|
|
96
|
+
const upsellAmount = DonationFlowModalManager.getDefaultUpsellAmount(options.oneTimeAmount);
|
|
97
|
+
options.amountChanged?.(upsellAmount);
|
|
98
|
+
const modalContent = html `
|
|
99
|
+
<ia-donation-upsell-modal-content
|
|
100
|
+
.amount=${upsellAmount}
|
|
101
|
+
.yesButtonMode=${options.ctaMode ?? UpsellModalCTAMode.YesButton}
|
|
102
|
+
@yesSelected=${(e) => options.yesSelected?.(e.detail.amount)}
|
|
103
|
+
@noThanksSelected=${options.noSelected}
|
|
104
|
+
@amountChanged=${(e) => options.amountChanged?.(e.detail.amount)}
|
|
105
|
+
>
|
|
106
|
+
<slot name="paypal-upsell-button"></slot>
|
|
107
|
+
</ia-donation-upsell-modal-content>
|
|
108
|
+
`;
|
|
109
|
+
return this.modalManager.showModal({
|
|
110
|
+
config: modalConfig,
|
|
111
|
+
customModalContent: modalContent,
|
|
112
|
+
userClosedModalCallback: options.userClosedModalCallback,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async startDonationSubmissionFlow(options) {
|
|
116
|
+
this.showProcessingModal();
|
|
117
|
+
try {
|
|
118
|
+
const response = await this.braintreeManager.submitDonation(options);
|
|
119
|
+
if (response.success) {
|
|
120
|
+
this.handleSuccessfulDonationResponse(options.donationInfo, response.value);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const error = response.value;
|
|
124
|
+
this.showErrorModal({ message: error.message });
|
|
125
|
+
}
|
|
126
|
+
return response;
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
this.showErrorModal({ message: `${error}` });
|
|
130
|
+
console.error('error getting a response', error);
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async upsellModalYesSelected(oneTimeDonationResponse, amount) {
|
|
135
|
+
this.showProcessingModal();
|
|
136
|
+
try {
|
|
137
|
+
const response = await this.braintreeManager.submitUpsellDonation({
|
|
138
|
+
oneTimeDonationResponse,
|
|
139
|
+
amount,
|
|
140
|
+
});
|
|
141
|
+
if (response.success) {
|
|
142
|
+
this.showThankYouModal({
|
|
143
|
+
successResponse: oneTimeDonationResponse,
|
|
144
|
+
upsellSuccessResponse: response.value,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
const error = response.value;
|
|
149
|
+
this.showErrorModal({ message: error.message });
|
|
150
|
+
}
|
|
151
|
+
return response;
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
this.showErrorModal({ message: `${error}` });
|
|
155
|
+
console.error('error getting a response', error);
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/** The monthly amount the upsell suggests, stepped up with the one-time gift. */
|
|
160
|
+
static getDefaultUpsellAmount(oneTimeAmount) {
|
|
161
|
+
if (oneTimeAmount <= 10)
|
|
162
|
+
return 8;
|
|
163
|
+
if (oneTimeAmount <= 25)
|
|
164
|
+
return 10;
|
|
165
|
+
if (oneTimeAmount <= 100)
|
|
166
|
+
return 25;
|
|
167
|
+
return 50;
|
|
168
|
+
}
|
|
169
|
+
handleSuccessfulDonationResponse(donationInfo, response) {
|
|
170
|
+
switch (donationInfo.donationType) {
|
|
171
|
+
case DonationType.OneTime:
|
|
172
|
+
this.showUpsellModal({
|
|
173
|
+
oneTimeAmount: response.amount,
|
|
174
|
+
yesSelected: (amount) => {
|
|
175
|
+
this.upsellModalYesSelected(response, amount);
|
|
176
|
+
},
|
|
177
|
+
noSelected: () => {
|
|
178
|
+
this.showThankYouModal({ successResponse: response });
|
|
179
|
+
},
|
|
180
|
+
userClosedModalCallback: () => {
|
|
181
|
+
this.showThankYouModal({ successResponse: response });
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
break;
|
|
185
|
+
case DonationType.Monthly:
|
|
186
|
+
this.showThankYouModal({ successResponse: response });
|
|
187
|
+
break;
|
|
188
|
+
// The upsell itself is completed in `upsellModalYesSelected`
|
|
189
|
+
case DonationType.Upsell:
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=donation-flow-modal-manager.js.map
|