@internetarchive/elements 1.1.7-webdev-9378.0 → 1.1.7-webdev-9054.0
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 +15 -0
- package/dist/src/elements/ia-donation-form/icons/credit-card.svg +15 -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,204 @@
|
|
|
1
|
+
import { createNanoEvents } from 'nanoevents';
|
|
2
|
+
import { msg } from '@lit/localize';
|
|
3
|
+
import { DonationPaymentInfo } from '../../models/donation-payment-info.js';
|
|
4
|
+
import { DonationType } from '../../models/donation-type.js';
|
|
5
|
+
import { BillingInfo, CustomerInfo } from '../../models/donor-contact-info.js';
|
|
6
|
+
import { PaymentProvider } from '../../models/payment-provider.js';
|
|
7
|
+
import { UpsellModalCTAMode } from '../../modals/ia-donation-upsell-modal-content.js';
|
|
8
|
+
import { DonationFlowModalManager, } from '../donation-flow-modal-manager.js';
|
|
9
|
+
/** The one-time donation's results, kept for the upsell that follows it. */
|
|
10
|
+
class UpsellDataSourceContainer {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.upsellButtonDataSource = options.upsellButtonDataSource;
|
|
13
|
+
this.oneTimePayload = options.oneTimePayload;
|
|
14
|
+
this.oneTimeSuccessResponse = options.oneTimeSuccessResponse;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** The PayPal flow: button press, authorization, our confirmation step, submit, upsell. */
|
|
18
|
+
export class PayPalFlowHandler {
|
|
19
|
+
updateDonationInfo(donationInfo) {
|
|
20
|
+
if (this.buttonDataSource) {
|
|
21
|
+
this.buttonDataSource.donationInfo = donationInfo;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
updateUpsellDonationInfo(donationInfo) {
|
|
25
|
+
if (this.upsellButtonDataSourceContainer) {
|
|
26
|
+
this.upsellButtonDataSourceContainer.upsellButtonDataSource.donationInfo =
|
|
27
|
+
donationInfo;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
constructor(options) {
|
|
31
|
+
this.emitter = createNanoEvents();
|
|
32
|
+
this.braintreeManager = options.braintreeManager;
|
|
33
|
+
this.donationFlowModalManager = options.donationFlowModalManager;
|
|
34
|
+
}
|
|
35
|
+
on(event, callback) {
|
|
36
|
+
return this.emitter.on(event, callback);
|
|
37
|
+
}
|
|
38
|
+
async payPalPaymentStarted(dataSource, options) {
|
|
39
|
+
this.emitter.emit('payPalPaymentStarted', dataSource, options);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* PayPal has authorized the payment. The donor confirms the amount in our
|
|
43
|
+
* own step before it's submitted, which leads to `payPalPaymentConfirmed`.
|
|
44
|
+
*/
|
|
45
|
+
async payPalPaymentAuthorized(dataSource, payload) {
|
|
46
|
+
const { donationType, total } = dataSource.donationInfo;
|
|
47
|
+
this.donationFlowModalManager.showConfirmationStepModal({
|
|
48
|
+
donationType,
|
|
49
|
+
amount: total,
|
|
50
|
+
currencyType: 'USD',
|
|
51
|
+
confirmDonationCB: () => {
|
|
52
|
+
this.payPalPaymentConfirmed(dataSource, payload);
|
|
53
|
+
},
|
|
54
|
+
cancelDonationCB: () => {
|
|
55
|
+
this.donationFlowModalManager.closeModal();
|
|
56
|
+
this.payPalPaymentCancelled(dataSource, {});
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async payPalPaymentConfirmed(dataSource, payload) {
|
|
61
|
+
this.emitter.emit('payPalPaymentConfirmed', dataSource, {});
|
|
62
|
+
this.donationFlowModalManager.showProcessingModal();
|
|
63
|
+
const donationType = dataSource.donationInfo.donationType;
|
|
64
|
+
const details = payload.details;
|
|
65
|
+
const customerInfo = new CustomerInfo({
|
|
66
|
+
email: details?.email,
|
|
67
|
+
firstName: details?.firstName,
|
|
68
|
+
lastName: details?.lastName,
|
|
69
|
+
});
|
|
70
|
+
const shippingAddress = details?.shippingAddress;
|
|
71
|
+
const billingInfo = new BillingInfo({
|
|
72
|
+
streetAddress: shippingAddress?.line1,
|
|
73
|
+
extendedAddress: shippingAddress?.line2,
|
|
74
|
+
locality: shippingAddress?.city,
|
|
75
|
+
region: shippingAddress?.state,
|
|
76
|
+
postalCode: shippingAddress?.postalCode,
|
|
77
|
+
countryCodeAlpha2: shippingAddress?.countryCode,
|
|
78
|
+
});
|
|
79
|
+
const oneTimeTransaction = this.upsellButtonDataSourceContainer?.oneTimeSuccessResponse
|
|
80
|
+
.transaction_id;
|
|
81
|
+
const response = await this.braintreeManager.submitDonation({
|
|
82
|
+
nonce: payload.nonce,
|
|
83
|
+
paymentProvider: PaymentProvider.PayPal,
|
|
84
|
+
donationInfo: dataSource.donationInfo,
|
|
85
|
+
customerInfo,
|
|
86
|
+
billingInfo,
|
|
87
|
+
upsellOnetimeTransactionId: oneTimeTransaction,
|
|
88
|
+
});
|
|
89
|
+
if (!response.success) {
|
|
90
|
+
const error = response.value;
|
|
91
|
+
this.donationFlowModalManager.showErrorModal({ message: error.message });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const successResponse = response.value;
|
|
95
|
+
switch (donationType) {
|
|
96
|
+
case DonationType.OneTime:
|
|
97
|
+
this.showUpsellModal(payload, successResponse);
|
|
98
|
+
break;
|
|
99
|
+
case DonationType.Monthly:
|
|
100
|
+
this.donationFlowModalManager.showThankYouModal({ successResponse });
|
|
101
|
+
break;
|
|
102
|
+
case DonationType.Upsell:
|
|
103
|
+
if (this.upsellButtonDataSourceContainer) {
|
|
104
|
+
this.donationFlowModalManager.showThankYouModal({
|
|
105
|
+
successResponse: this.upsellButtonDataSourceContainer.oneTimeSuccessResponse,
|
|
106
|
+
upsellSuccessResponse: successResponse,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// An upsell with no record of the one-time donation it follows
|
|
111
|
+
this.donationFlowModalManager.showErrorModal({
|
|
112
|
+
message: msg('Error setting up monthly donation'),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async payPalPaymentCancelled(dataSource, data) {
|
|
119
|
+
this.emitter.emit('payPalPaymentCancelled', dataSource, data);
|
|
120
|
+
}
|
|
121
|
+
async payPalPaymentError(dataSource, error) {
|
|
122
|
+
this.emitter.emit('payPalPaymentError', dataSource, error);
|
|
123
|
+
console.error('PayPalFlowHandler payment error:', dataSource, dataSource.donationInfo, error);
|
|
124
|
+
}
|
|
125
|
+
async renderPayPalButton(donationInfo) {
|
|
126
|
+
const handler = await this.braintreeManager.paymentProviders.paypalHandler.get();
|
|
127
|
+
this.buttonDataSource = await handler.renderPayPalButton({
|
|
128
|
+
selector: '#paypal-button',
|
|
129
|
+
style: {
|
|
130
|
+
color: 'blue',
|
|
131
|
+
label: 'paypal',
|
|
132
|
+
shape: 'rect',
|
|
133
|
+
size: 'medium',
|
|
134
|
+
tagline: false,
|
|
135
|
+
},
|
|
136
|
+
donationInfo,
|
|
137
|
+
});
|
|
138
|
+
if (this.buttonDataSource) {
|
|
139
|
+
this.buttonDataSource.delegate = this;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async showUpsellModal(oneTimePayload, oneTimeSuccessResponse) {
|
|
143
|
+
this.donationFlowModalManager.showUpsellModal({
|
|
144
|
+
oneTimeAmount: oneTimeSuccessResponse.amount,
|
|
145
|
+
amountChanged: this.upsellAmountChanged.bind(this),
|
|
146
|
+
noSelected: () => {
|
|
147
|
+
this.donationFlowModalManager.showThankYouModal({
|
|
148
|
+
successResponse: oneTimeSuccessResponse,
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
ctaMode: UpsellModalCTAMode.PayPalUpsellSlot,
|
|
152
|
+
userClosedModalCallback: () => {
|
|
153
|
+
this.donationFlowModalManager.showThankYouModal({
|
|
154
|
+
successResponse: oneTimeSuccessResponse,
|
|
155
|
+
});
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
const amount = DonationFlowModalManager.getDefaultUpsellAmount(oneTimeSuccessResponse.amount);
|
|
159
|
+
const upsellDonationInfo = new DonationPaymentInfo({
|
|
160
|
+
amount,
|
|
161
|
+
donationType: DonationType.Upsell,
|
|
162
|
+
coverFees: false,
|
|
163
|
+
});
|
|
164
|
+
if (!this.upsellButtonDataSourceContainer) {
|
|
165
|
+
this.renderUpsellPayPalButton({
|
|
166
|
+
donationInfo: upsellDonationInfo,
|
|
167
|
+
oneTimePayload,
|
|
168
|
+
oneTimeSuccessResponse,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
upsellAmountChanged(amount) {
|
|
173
|
+
if (this.upsellButtonDataSourceContainer) {
|
|
174
|
+
this.upsellButtonDataSourceContainer.upsellButtonDataSource.donationInfo.amount =
|
|
175
|
+
amount;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async renderUpsellPayPalButton(options) {
|
|
179
|
+
const handler = await this.braintreeManager.paymentProviders.paypalHandler.get();
|
|
180
|
+
const upsellButtonDataSource = await handler.renderPayPalButton({
|
|
181
|
+
selector: '#paypal-upsell-button',
|
|
182
|
+
style: {
|
|
183
|
+
color: 'blue',
|
|
184
|
+
label: 'paypal',
|
|
185
|
+
shape: 'rect',
|
|
186
|
+
size: 'responsive',
|
|
187
|
+
tagline: false,
|
|
188
|
+
},
|
|
189
|
+
donationInfo: options.donationInfo,
|
|
190
|
+
});
|
|
191
|
+
if (upsellButtonDataSource) {
|
|
192
|
+
upsellButtonDataSource.delegate = this;
|
|
193
|
+
this.upsellButtonDataSourceContainer = new UpsellDataSourceContainer({
|
|
194
|
+
upsellButtonDataSource,
|
|
195
|
+
oneTimePayload: options.oneTimePayload,
|
|
196
|
+
oneTimeSuccessResponse: options.oneTimeSuccessResponse,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
console.error('error rendering paypal upsell button');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=paypal-flow-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paypal-flow-handler.js","sourceRoot":"","sources":["../../../../../../src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAkC,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAOpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAMzE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EACL,wBAAwB,GAEzB,MAAM,gCAAgC,CAAC;AAYxC,4EAA4E;AAC5E,MAAM,yBAAyB;IAK7B,YAAY,OAIX;QACC,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC7D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAC/D,CAAC;CACF;AAqBD,2FAA2F;AAC3F,MAAM,OAAO,iBAAiB;IAc5B,kBAAkB,CAAC,YAAiC;QAClD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,YAAY,CAAC;QACpD,CAAC;IACH,CAAC;IAED,wBAAwB,CAAC,YAAiC;QACxD,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACzC,IAAI,CAAC,+BAA+B,CAAC,sBAAsB,CAAC,YAAY;gBACtE,YAAY,CAAC;QACjB,CAAC;IACH,CAAC;IAED,YAAY,OAGX;QAnBO,YAAO,GACb,gBAAgB,EAA2B,CAAC;QAmB5C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IACnE,CAAC;IAED,EAAE,CACA,KAAQ,EACR,QAAoC;QAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,UAA2C,EAC3C,OAAe;QAEf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,uBAAuB,CAC3B,UAA2C,EAC3C,OAA+B;QAE/B,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,yBAAyB,CAAC;YACtD,YAAY;YACZ,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,KAAK;YACnB,iBAAiB,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;YACD,gBAAgB,EAAE,GAAG,EAAE;gBACrB,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,CAAC;gBAC3C,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC9C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,UAA2C,EAC3C,OAA+B;QAE/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,EAAE,CAAC;QAEpD,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;QAE1D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAEhC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;YACpC,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,QAAQ,EAAE,OAAO,EAAE,QAAQ;SAC5B,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,CAAC;QAEjD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;YAClC,aAAa,EAAE,eAAe,EAAE,KAAK;YACrC,eAAe,EAAE,eAAe,EAAE,KAAK;YACvC,QAAQ,EAAE,eAAe,EAAE,IAAI;YAC/B,MAAM,EAAE,eAAe,EAAE,KAAK;YAC9B,UAAU,EAAE,eAAe,EAAE,UAAU;YACvC,iBAAiB,EAAE,eAAe,EAAE,WAAW;SAChD,CAAC,CAAC;QAEH,MAAM,kBAAkB,GACtB,IAAI,CAAC,+BAA+B,EAAE,sBAAsB;aACzD,cAAc,CAAC;QAEpB,MAAM,QAAQ,GACZ,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;YACzC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,eAAe,CAAC,MAAM;YACvC,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,YAAY;YACZ,WAAW;YACX,0BAA0B,EAAE,kBAAkB;SAC/C,CAAC,CAAC;QAEL,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAsB,CAAC;YAC9C,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAwB,CAAC;QAE1D,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,YAAY,CAAC,OAAO;gBACvB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBAC/C,MAAM;YACR,KAAK,YAAY,CAAC,OAAO;gBACvB,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;gBACrE,MAAM;YACR,KAAK,YAAY,CAAC,MAAM;gBACtB,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC;oBACzC,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC;wBAC9C,eAAe,EACb,IAAI,CAAC,+BAA+B,CAAC,sBAAsB;wBAC7D,qBAAqB,EAAE,eAAe;qBACvC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,+DAA+D;oBAC/D,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC;wBAC3C,OAAO,EAAE,GAAG,CAAC,mCAAmC,CAAC;qBAClD,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,UAA2C,EAC3C,IAAY;QAEZ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,UAA2C,EAC3C,KAAa;QAEb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CACX,kCAAkC,EAClC,UAAU,EACV,UAAU,CAAC,YAAY,EACvB,KAAK,CACN,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,YAAiC;QACxD,MAAM,OAAO,GACX,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;QAEnE,IAAI,CAAC,gBAAgB,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC;YACvD,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE;gBACL,KAAK,EAAE,MAAkC;gBACzC,KAAK,EAAE,QAAoC;gBAC3C,KAAK,EAAE,MAAkC;gBACzC,IAAI,EAAE,QAAmC;gBACzC,OAAO,EAAE,KAAK;aACf;YACD,YAAY;SACb,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,cAAsC,EACtC,sBAAuC;QAEvC,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC;YAC5C,aAAa,EAAE,sBAAsB,CAAC,MAAM;YAC5C,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAClD,UAAU,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC;oBAC9C,eAAe,EAAE,sBAAsB;iBACxC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,kBAAkB,CAAC,gBAAgB;YAC5C,uBAAuB,EAAE,GAAG,EAAE;gBAC5B,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC;oBAC9C,eAAe,EAAE,sBAAsB;iBACxC,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,wBAAwB,CAAC,sBAAsB,CAC5D,sBAAsB,CAAC,MAAM,CAC9B,CAAC;QAEF,MAAM,kBAAkB,GAAG,IAAI,mBAAmB,CAAC;YACjD,MAAM;YACN,YAAY,EAAE,YAAY,CAAC,MAAM;YACjC,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC;YAC1C,IAAI,CAAC,wBAAwB,CAAC;gBAC5B,YAAY,EAAE,kBAAkB;gBAChC,cAAc;gBACd,sBAAsB;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,MAAc;QACxC,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACzC,IAAI,CAAC,+BAA+B,CAAC,sBAAsB,CAAC,YAAY,CAAC,MAAM;gBAC7E,MAAM,CAAC;QACX,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,OAItC;QACC,MAAM,OAAO,GACX,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;QAEnE,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC;YAC9D,QAAQ,EAAE,uBAAuB;YACjC,KAAK,EAAE;gBACL,KAAK,EAAE,MAAkC;gBACzC,KAAK,EAAE,QAAoC;gBAC3C,KAAK,EAAE,MAAkC;gBACzC,IAAI,EAAE,YAAuC;gBAC7C,OAAO,EAAE,KAAK;aACf;YACD,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;QAEH,IAAI,sBAAsB,EAAE,CAAC;YAC3B,sBAAsB,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC,+BAA+B,GAAG,IAAI,yBAAyB,CAAC;gBACnE,sBAAsB;gBACtB,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;aACvD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF","sourcesContent":["import type * as paypal from 'paypal-checkout-components';\nimport { createNanoEvents, type Emitter, type Unsubscribe } from 'nanoevents';\nimport { msg } from '@lit/localize';\n\nimport type { BraintreeManagerInterface } from '../../braintree/braintree-manager-interface';\nimport type {\n PayPalButtonDataSourceDelegate,\n PayPalButtonDataSourceInterface,\n} from '../../braintree/payment-providers/paypal/paypal-button-datasource';\nimport { DonationPaymentInfo } from '../../models/donation-payment-info';\nimport type {\n DonationResponse,\n ErrorResponse,\n SuccessResponse,\n} from '../../models/donation-response';\nimport { DonationType } from '../../models/donation-type';\nimport { BillingInfo, CustomerInfo } from '../../models/donor-contact-info';\nimport { PaymentProvider } from '../../models/payment-provider';\nimport { UpsellModalCTAMode } from '../../modals/ia-donation-upsell-modal-content';\nimport {\n DonationFlowModalManager,\n type DonationFlowModalManagerInterface,\n} from '../donation-flow-modal-manager';\n\nexport interface PayPalFlowHandlerInterface {\n updateDonationInfo(donationInfo: DonationPaymentInfo): void;\n updateUpsellDonationInfo(donationInfo: DonationPaymentInfo): void;\n renderPayPalButton(donationInfo: DonationPaymentInfo): Promise<void>;\n on<E extends keyof PayPalFlowHandlerEvents>(\n event: E,\n callback: PayPalFlowHandlerEvents[E],\n ): Unsubscribe;\n}\n\n/** The one-time donation's results, kept for the upsell that follows it. */\nclass UpsellDataSourceContainer {\n upsellButtonDataSource: PayPalButtonDataSourceInterface;\n oneTimePayload: paypal.TokenizePayload;\n oneTimeSuccessResponse: SuccessResponse;\n\n constructor(options: {\n upsellButtonDataSource: PayPalButtonDataSourceInterface;\n oneTimePayload: paypal.TokenizePayload;\n oneTimeSuccessResponse: SuccessResponse;\n }) {\n this.upsellButtonDataSource = options.upsellButtonDataSource;\n this.oneTimePayload = options.oneTimePayload;\n this.oneTimeSuccessResponse = options.oneTimeSuccessResponse;\n }\n}\n\nexport interface PayPalFlowHandlerEvents {\n payPalPaymentStarted: (\n dataSource: PayPalButtonDataSourceInterface,\n options: object,\n ) => void;\n payPalPaymentCancelled: (\n dataSource: PayPalButtonDataSourceInterface,\n data: object,\n ) => void;\n payPalPaymentError: (\n dataSource: PayPalButtonDataSourceInterface,\n error: string,\n ) => void;\n payPalPaymentConfirmed: (\n dataSource: PayPalButtonDataSourceInterface,\n data: object,\n ) => void;\n}\n\n/** The PayPal flow: button press, authorization, our confirmation step, submit, upsell. */\nexport class PayPalFlowHandler\n implements PayPalFlowHandlerInterface, PayPalButtonDataSourceDelegate\n{\n private upsellButtonDataSourceContainer?: UpsellDataSourceContainer;\n\n private buttonDataSource?: PayPalButtonDataSourceInterface;\n\n private donationFlowModalManager: DonationFlowModalManagerInterface;\n\n private braintreeManager: BraintreeManagerInterface;\n\n private emitter: Emitter<PayPalFlowHandlerEvents> =\n createNanoEvents<PayPalFlowHandlerEvents>();\n\n updateDonationInfo(donationInfo: DonationPaymentInfo): void {\n if (this.buttonDataSource) {\n this.buttonDataSource.donationInfo = donationInfo;\n }\n }\n\n updateUpsellDonationInfo(donationInfo: DonationPaymentInfo): void {\n if (this.upsellButtonDataSourceContainer) {\n this.upsellButtonDataSourceContainer.upsellButtonDataSource.donationInfo =\n donationInfo;\n }\n }\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n donationFlowModalManager: DonationFlowModalManagerInterface;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.donationFlowModalManager = options.donationFlowModalManager;\n }\n\n on<E extends keyof PayPalFlowHandlerEvents>(\n event: E,\n callback: PayPalFlowHandlerEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n async payPalPaymentStarted(\n dataSource: PayPalButtonDataSourceInterface,\n options: object,\n ): Promise<void> {\n this.emitter.emit('payPalPaymentStarted', dataSource, options);\n }\n\n /**\n * PayPal has authorized the payment. The donor confirms the amount in our\n * own step before it's submitted, which leads to `payPalPaymentConfirmed`.\n */\n async payPalPaymentAuthorized(\n dataSource: PayPalButtonDataSourceInterface,\n payload: paypal.TokenizePayload,\n ): Promise<void> {\n const { donationType, total } = dataSource.donationInfo;\n this.donationFlowModalManager.showConfirmationStepModal({\n donationType,\n amount: total,\n currencyType: 'USD',\n confirmDonationCB: () => {\n this.payPalPaymentConfirmed(dataSource, payload);\n },\n cancelDonationCB: () => {\n this.donationFlowModalManager.closeModal();\n this.payPalPaymentCancelled(dataSource, {});\n },\n });\n }\n\n async payPalPaymentConfirmed(\n dataSource: PayPalButtonDataSourceInterface,\n payload: paypal.TokenizePayload,\n ): Promise<void> {\n this.emitter.emit('payPalPaymentConfirmed', dataSource, {});\n this.donationFlowModalManager.showProcessingModal();\n\n const donationType = dataSource.donationInfo.donationType;\n\n const details = payload.details;\n\n const customerInfo = new CustomerInfo({\n email: details?.email,\n firstName: details?.firstName,\n lastName: details?.lastName,\n });\n\n const shippingAddress = details?.shippingAddress;\n\n const billingInfo = new BillingInfo({\n streetAddress: shippingAddress?.line1,\n extendedAddress: shippingAddress?.line2,\n locality: shippingAddress?.city,\n region: shippingAddress?.state,\n postalCode: shippingAddress?.postalCode,\n countryCodeAlpha2: shippingAddress?.countryCode,\n });\n\n const oneTimeTransaction =\n this.upsellButtonDataSourceContainer?.oneTimeSuccessResponse\n .transaction_id;\n\n const response: DonationResponse =\n await this.braintreeManager.submitDonation({\n nonce: payload.nonce,\n paymentProvider: PaymentProvider.PayPal,\n donationInfo: dataSource.donationInfo,\n customerInfo,\n billingInfo,\n upsellOnetimeTransactionId: oneTimeTransaction,\n });\n\n if (!response.success) {\n const error = response.value as ErrorResponse;\n this.donationFlowModalManager.showErrorModal({ message: error.message });\n return;\n }\n\n const successResponse = response.value as SuccessResponse;\n\n switch (donationType) {\n case DonationType.OneTime:\n this.showUpsellModal(payload, successResponse);\n break;\n case DonationType.Monthly:\n this.donationFlowModalManager.showThankYouModal({ successResponse });\n break;\n case DonationType.Upsell:\n if (this.upsellButtonDataSourceContainer) {\n this.donationFlowModalManager.showThankYouModal({\n successResponse:\n this.upsellButtonDataSourceContainer.oneTimeSuccessResponse,\n upsellSuccessResponse: successResponse,\n });\n } else {\n // An upsell with no record of the one-time donation it follows\n this.donationFlowModalManager.showErrorModal({\n message: msg('Error setting up monthly donation'),\n });\n }\n break;\n }\n }\n\n async payPalPaymentCancelled(\n dataSource: PayPalButtonDataSourceInterface,\n data: object,\n ): Promise<void> {\n this.emitter.emit('payPalPaymentCancelled', dataSource, data);\n }\n\n async payPalPaymentError(\n dataSource: PayPalButtonDataSourceInterface,\n error: string,\n ): Promise<void> {\n this.emitter.emit('payPalPaymentError', dataSource, error);\n console.error(\n 'PayPalFlowHandler payment error:',\n dataSource,\n dataSource.donationInfo,\n error,\n );\n }\n\n async renderPayPalButton(donationInfo: DonationPaymentInfo): Promise<void> {\n const handler =\n await this.braintreeManager.paymentProviders.paypalHandler.get();\n\n this.buttonDataSource = await handler.renderPayPalButton({\n selector: '#paypal-button',\n style: {\n color: 'blue' as paypal.ButtonColorOption,\n label: 'paypal' as paypal.ButtonLabelOption,\n shape: 'rect' as paypal.ButtonShapeOption,\n size: 'medium' as paypal.ButtonSizeOption,\n tagline: false,\n },\n donationInfo,\n });\n\n if (this.buttonDataSource) {\n this.buttonDataSource.delegate = this;\n }\n }\n\n private async showUpsellModal(\n oneTimePayload: paypal.TokenizePayload,\n oneTimeSuccessResponse: SuccessResponse,\n ): Promise<void> {\n this.donationFlowModalManager.showUpsellModal({\n oneTimeAmount: oneTimeSuccessResponse.amount,\n amountChanged: this.upsellAmountChanged.bind(this),\n noSelected: () => {\n this.donationFlowModalManager.showThankYouModal({\n successResponse: oneTimeSuccessResponse,\n });\n },\n ctaMode: UpsellModalCTAMode.PayPalUpsellSlot,\n userClosedModalCallback: () => {\n this.donationFlowModalManager.showThankYouModal({\n successResponse: oneTimeSuccessResponse,\n });\n },\n });\n\n const amount = DonationFlowModalManager.getDefaultUpsellAmount(\n oneTimeSuccessResponse.amount,\n );\n\n const upsellDonationInfo = new DonationPaymentInfo({\n amount,\n donationType: DonationType.Upsell,\n coverFees: false,\n });\n\n if (!this.upsellButtonDataSourceContainer) {\n this.renderUpsellPayPalButton({\n donationInfo: upsellDonationInfo,\n oneTimePayload,\n oneTimeSuccessResponse,\n });\n }\n }\n\n private upsellAmountChanged(amount: number): void {\n if (this.upsellButtonDataSourceContainer) {\n this.upsellButtonDataSourceContainer.upsellButtonDataSource.donationInfo.amount =\n amount;\n }\n }\n\n private async renderUpsellPayPalButton(options: {\n donationInfo: DonationPaymentInfo;\n oneTimePayload: paypal.TokenizePayload;\n oneTimeSuccessResponse: SuccessResponse;\n }): Promise<void> {\n const handler =\n await this.braintreeManager.paymentProviders.paypalHandler.get();\n\n const upsellButtonDataSource = await handler.renderPayPalButton({\n selector: '#paypal-upsell-button',\n style: {\n color: 'blue' as paypal.ButtonColorOption,\n label: 'paypal' as paypal.ButtonLabelOption,\n shape: 'rect' as paypal.ButtonShapeOption,\n size: 'responsive' as paypal.ButtonSizeOption,\n tagline: false,\n },\n donationInfo: options.donationInfo,\n });\n\n if (upsellButtonDataSource) {\n upsellButtonDataSource.delegate = this;\n this.upsellButtonDataSourceContainer = new UpsellDataSourceContainer({\n upsellButtonDataSource,\n oneTimePayload: options.oneTimePayload,\n oneTimeSuccessResponse: options.oneTimeSuccessResponse,\n });\n } else {\n console.error('error rendering paypal upsell button');\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BraintreeManagerInterface } from '../../braintree/braintree-manager-interface.js';
|
|
2
|
+
import { type VenmoRestorationStateHandlerInterface } from '../../braintree/payment-providers/venmo/venmo-restoration-state-handler.js';
|
|
3
|
+
import type { DonationPaymentInfo } from '../../models/donation-payment-info.js';
|
|
4
|
+
import type { DonorContactInfo } from '../../models/donor-contact-info.js';
|
|
5
|
+
import type { DonationFlowModalManagerInterface } from '../donation-flow-modal-manager.js';
|
|
6
|
+
export interface VenmoFlowHandlerInterface {
|
|
7
|
+
startup(): Promise<void>;
|
|
8
|
+
paymentInitiated(contactInfo: DonorContactInfo, donationInfo: DonationPaymentInfo): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The Venmo flow. Venmo sends the donor to its app and back, possibly in a
|
|
12
|
+
* new tab, so the donation info is stashed before leaving and restored on
|
|
13
|
+
* startup if a tokenization result is waiting.
|
|
14
|
+
*/
|
|
15
|
+
export declare class VenmoFlowHandler implements VenmoFlowHandlerInterface {
|
|
16
|
+
private donationFlowModalManager;
|
|
17
|
+
private braintreeManager;
|
|
18
|
+
private restorationStateHandler;
|
|
19
|
+
constructor(options: {
|
|
20
|
+
braintreeManager: BraintreeManagerInterface;
|
|
21
|
+
donationFlowModalManager: DonationFlowModalManagerInterface;
|
|
22
|
+
restorationStateHandler?: VenmoRestorationStateHandlerInterface;
|
|
23
|
+
});
|
|
24
|
+
/** Resume a Venmo payment if the app redirected back to us with a result. */
|
|
25
|
+
startup(): Promise<void>;
|
|
26
|
+
paymentInitiated(contactInfo: DonorContactInfo, donationInfo: DonationPaymentInfo): Promise<void>;
|
|
27
|
+
private handleTokenizationResult;
|
|
28
|
+
private handleTokenizationError;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=venmo-flow-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venmo-flow-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAEL,KAAK,qCAAqC,EAC3C,MAAM,yEAAyE,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AAExF,MAAM,WAAW,yBAAyB;IACxC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,gBAAgB,CACd,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,yBAAyB;IAChE,OAAO,CAAC,wBAAwB,CAAoC;IAEpE,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,uBAAuB,CAAwC;gBAE3D,OAAO,EAAE;QACnB,gBAAgB,EAAE,yBAAyB,CAAC;QAC5C,wBAAwB,EAAE,iCAAiC,CAAC;QAC5D,uBAAuB,CAAC,EAAE,qCAAqC,CAAC;KACjE;IAOD,6EAA6E;IACvE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxB,gBAAgB,CACpB,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,IAAI,CAAC;YA2BF,wBAAwB;IAgBtC,OAAO,CAAC,uBAAuB;CAYhC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { msg } from '@lit/localize';
|
|
2
|
+
import { VenmoRestorationStateHandler, } from '../../braintree/payment-providers/venmo/venmo-restoration-state-handler.js';
|
|
3
|
+
import { PaymentProvider } from '../../models/payment-provider.js';
|
|
4
|
+
/**
|
|
5
|
+
* The Venmo flow. Venmo sends the donor to its app and back, possibly in a
|
|
6
|
+
* new tab, so the donation info is stashed before leaving and restored on
|
|
7
|
+
* startup if a tokenization result is waiting.
|
|
8
|
+
*/
|
|
9
|
+
export class VenmoFlowHandler {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.braintreeManager = options.braintreeManager;
|
|
12
|
+
this.donationFlowModalManager = options.donationFlowModalManager;
|
|
13
|
+
this.restorationStateHandler =
|
|
14
|
+
options.restorationStateHandler ?? new VenmoRestorationStateHandler();
|
|
15
|
+
}
|
|
16
|
+
/** Resume a Venmo payment if the app redirected back to us with a result. */
|
|
17
|
+
async startup() {
|
|
18
|
+
const handler = await this.braintreeManager.paymentProviders.venmoHandler.get();
|
|
19
|
+
const instance = await handler?.instance.get();
|
|
20
|
+
if (instance?.hasTokenizationResult()) {
|
|
21
|
+
const restoredInfo = await this.restorationStateHandler.getRestorationState();
|
|
22
|
+
if (restoredInfo) {
|
|
23
|
+
this.paymentInitiated(restoredInfo.contactInfo, restoredInfo.donationInfo);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.error('no restoration info');
|
|
27
|
+
this.donationFlowModalManager.showErrorModal({
|
|
28
|
+
message: msg('Error restoring donation session'),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async paymentInitiated(contactInfo, donationInfo) {
|
|
34
|
+
// Stashed in case Venmo brings the donor back in a new tab
|
|
35
|
+
this.restorationStateHandler.persistState(contactInfo, donationInfo);
|
|
36
|
+
try {
|
|
37
|
+
const handler = await this.braintreeManager.paymentProviders.venmoHandler.get();
|
|
38
|
+
const result = await handler?.startPayment();
|
|
39
|
+
if (!result) {
|
|
40
|
+
this.restorationStateHandler.clearState();
|
|
41
|
+
this.donationFlowModalManager.showErrorModal({
|
|
42
|
+
message: msg('Error setting up the donation'),
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.handleTokenizationResult(result, contactInfo, donationInfo);
|
|
47
|
+
}
|
|
48
|
+
catch (tokenizeError) {
|
|
49
|
+
this.restorationStateHandler.clearState();
|
|
50
|
+
this.handleTokenizationError(tokenizeError);
|
|
51
|
+
this.donationFlowModalManager.showErrorModal({
|
|
52
|
+
message: msg('There was a problem loading your donation information. Please try again.'),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async handleTokenizationResult(payload, contactInfo, donationInfo) {
|
|
57
|
+
this.restorationStateHandler.clearState();
|
|
58
|
+
this.donationFlowModalManager.startDonationSubmissionFlow({
|
|
59
|
+
nonce: payload.nonce,
|
|
60
|
+
paymentProvider: PaymentProvider.Venmo,
|
|
61
|
+
donationInfo,
|
|
62
|
+
customerInfo: contactInfo.customer,
|
|
63
|
+
billingInfo: contactInfo.billing,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
handleTokenizationError(tokenizeError) {
|
|
67
|
+
switch (tokenizeError.code) {
|
|
68
|
+
// The donor backed out, nothing to report
|
|
69
|
+
case 'VENMO_APP_CANCELED':
|
|
70
|
+
case 'VENMO_CANCELED':
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
console.error('Venmo tokenization error', tokenizeError);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=venmo-flow-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venmo-flow-handler.js","sourceRoot":"","sources":["../../../../../../src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as braintree from 'braintree-web';\nimport { msg } from '@lit/localize';\n\nimport type { BraintreeManagerInterface } from '../../braintree/braintree-manager-interface';\nimport {\n VenmoRestorationStateHandler,\n type VenmoRestorationStateHandlerInterface,\n} from '../../braintree/payment-providers/venmo/venmo-restoration-state-handler';\nimport type { DonationPaymentInfo } from '../../models/donation-payment-info';\nimport type { DonorContactInfo } from '../../models/donor-contact-info';\nimport { PaymentProvider } from '../../models/payment-provider';\nimport type { DonationFlowModalManagerInterface } from '../donation-flow-modal-manager';\n\nexport interface VenmoFlowHandlerInterface {\n startup(): Promise<void>;\n paymentInitiated(\n contactInfo: DonorContactInfo,\n donationInfo: DonationPaymentInfo,\n ): Promise<void>;\n}\n\n/**\n * The Venmo flow. Venmo sends the donor to its app and back, possibly in a\n * new tab, so the donation info is stashed before leaving and restored on\n * startup if a tokenization result is waiting.\n */\nexport class VenmoFlowHandler implements VenmoFlowHandlerInterface {\n private donationFlowModalManager: DonationFlowModalManagerInterface;\n\n private braintreeManager: BraintreeManagerInterface;\n\n private restorationStateHandler: VenmoRestorationStateHandlerInterface;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n donationFlowModalManager: DonationFlowModalManagerInterface;\n restorationStateHandler?: VenmoRestorationStateHandlerInterface;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.donationFlowModalManager = options.donationFlowModalManager;\n this.restorationStateHandler =\n options.restorationStateHandler ?? new VenmoRestorationStateHandler();\n }\n\n /** Resume a Venmo payment if the app redirected back to us with a result. */\n async startup(): Promise<void> {\n const handler =\n await this.braintreeManager.paymentProviders.venmoHandler.get();\n const instance = await handler?.instance.get();\n if (instance?.hasTokenizationResult()) {\n const restoredInfo =\n await this.restorationStateHandler.getRestorationState();\n if (restoredInfo) {\n this.paymentInitiated(\n restoredInfo.contactInfo,\n restoredInfo.donationInfo,\n );\n } else {\n console.error('no restoration info');\n this.donationFlowModalManager.showErrorModal({\n message: msg('Error restoring donation session'),\n });\n }\n }\n }\n\n async paymentInitiated(\n contactInfo: DonorContactInfo,\n donationInfo: DonationPaymentInfo,\n ): Promise<void> {\n // Stashed in case Venmo brings the donor back in a new tab\n this.restorationStateHandler.persistState(contactInfo, donationInfo);\n\n try {\n const handler =\n await this.braintreeManager.paymentProviders.venmoHandler.get();\n const result = await handler?.startPayment();\n if (!result) {\n this.restorationStateHandler.clearState();\n this.donationFlowModalManager.showErrorModal({\n message: msg('Error setting up the donation'),\n });\n return;\n }\n this.handleTokenizationResult(result, contactInfo, donationInfo);\n } catch (tokenizeError) {\n this.restorationStateHandler.clearState();\n this.handleTokenizationError(tokenizeError as braintree.BraintreeError);\n this.donationFlowModalManager.showErrorModal({\n message: msg(\n 'There was a problem loading your donation information. Please try again.',\n ),\n });\n }\n }\n\n private async handleTokenizationResult(\n payload: braintree.VenmoTokenizePayload,\n contactInfo: DonorContactInfo,\n donationInfo: DonationPaymentInfo,\n ): Promise<void> {\n this.restorationStateHandler.clearState();\n\n this.donationFlowModalManager.startDonationSubmissionFlow({\n nonce: payload.nonce,\n paymentProvider: PaymentProvider.Venmo,\n donationInfo,\n customerInfo: contactInfo.customer,\n billingInfo: contactInfo.billing,\n });\n }\n\n private handleTokenizationError(\n tokenizeError: braintree.BraintreeError,\n ): void {\n switch (tokenizeError.code) {\n // The donor backed out, nothing to report\n case 'VENMO_APP_CANCELED':\n case 'VENMO_CANCELED':\n break;\n default:\n console.error('Venmo tokenization error', tokenizeError);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,80 @@
|
|
|
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 { DonationType } from '../models/donation-type.js';
|
|
5
|
+
import type { UpsellModalCTAMode } from '../modals/ia-donation-upsell-modal-content.js';
|
|
6
|
+
import type { RecaptchaManagerInterface } from '../recaptcha-manager.js';
|
|
7
|
+
import { type ApplePayFlowHandlerInterface } from './handlers/apple-pay-flow-handler.js';
|
|
8
|
+
import { type CreditCardFlowHandlerInterface } from './handlers/credit-card-flow-handler.js';
|
|
9
|
+
import { type GooglePayFlowHandlerInterface } from './handlers/google-pay-flow-handler.js';
|
|
10
|
+
import { type PayPalFlowHandlerInterface } from './handlers/paypal-flow-handler.js';
|
|
11
|
+
import { type VenmoFlowHandlerInterface } from './handlers/venmo-flow-handler.js';
|
|
12
|
+
export interface PaymentFlowHandlersInterface {
|
|
13
|
+
startup(): Promise<void>;
|
|
14
|
+
showUpsellModal(options: {
|
|
15
|
+
oneTimeAmount: number;
|
|
16
|
+
ctaMode?: UpsellModalCTAMode;
|
|
17
|
+
yesSelected?: (amount: number) => void;
|
|
18
|
+
noSelected?: () => void;
|
|
19
|
+
amountChanged?: (amount: number) => void;
|
|
20
|
+
userClosedModalCallback?: () => void;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
showConfirmationStepModal(options: {
|
|
23
|
+
amount: number;
|
|
24
|
+
donationType: DonationType;
|
|
25
|
+
currencyType: string;
|
|
26
|
+
confirmDonationCB: () => void;
|
|
27
|
+
cancelDonationCB: () => void;
|
|
28
|
+
}): Promise<void>;
|
|
29
|
+
creditCardHandler: CreditCardFlowHandlerInterface | undefined;
|
|
30
|
+
paypalHandler: PayPalFlowHandlerInterface | undefined;
|
|
31
|
+
applePayHandler: ApplePayFlowHandlerInterface | undefined;
|
|
32
|
+
venmoHandler: VenmoFlowHandlerInterface | undefined;
|
|
33
|
+
googlePayHandler: GooglePayFlowHandlerInterface | undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The container for the per-provider flow handlers.
|
|
37
|
+
*
|
|
38
|
+
* A flow handler owns the steps between the UI and the data for one
|
|
39
|
+
* provider. For a credit card, that's: read the contact form, run recaptcha,
|
|
40
|
+
* tokenize the hosted fields, submit, show the upsell, finish. For PayPal the
|
|
41
|
+
* donor starts from PayPal's own button and the handler picks up from there.
|
|
42
|
+
*/
|
|
43
|
+
export declare class PaymentFlowHandlers implements PaymentFlowHandlersInterface {
|
|
44
|
+
startup(): Promise<void>;
|
|
45
|
+
showUpsellModal(options: {
|
|
46
|
+
oneTimeAmount: number;
|
|
47
|
+
ctaMode?: UpsellModalCTAMode;
|
|
48
|
+
yesSelected?: (amount: number) => void;
|
|
49
|
+
noSelected?: () => void;
|
|
50
|
+
amountChanged?: (amount: number) => void;
|
|
51
|
+
userClosedModalCallback?: () => void;
|
|
52
|
+
}): Promise<void>;
|
|
53
|
+
showConfirmationStepModal(options: {
|
|
54
|
+
amount: number;
|
|
55
|
+
donationType: DonationType;
|
|
56
|
+
currencyType: string;
|
|
57
|
+
confirmDonationCB: () => void;
|
|
58
|
+
cancelDonationCB: () => void;
|
|
59
|
+
}): Promise<void>;
|
|
60
|
+
get creditCardHandler(): CreditCardFlowHandlerInterface;
|
|
61
|
+
get paypalHandler(): PayPalFlowHandlerInterface;
|
|
62
|
+
get applePayHandler(): ApplePayFlowHandlerInterface;
|
|
63
|
+
get venmoHandler(): VenmoFlowHandlerInterface;
|
|
64
|
+
get googlePayHandler(): GooglePayFlowHandlerInterface;
|
|
65
|
+
private creditCardHandlerCache?;
|
|
66
|
+
private paypalHandlerCache?;
|
|
67
|
+
private applePayHandlerCache?;
|
|
68
|
+
private venmoHandlerCache?;
|
|
69
|
+
private googlePayHandlerCache?;
|
|
70
|
+
constructor(options: {
|
|
71
|
+
braintreeManager: BraintreeManagerInterface;
|
|
72
|
+
modalManager: ModalManagerInterface;
|
|
73
|
+
recaptchaManager: RecaptchaManagerInterface;
|
|
74
|
+
analytics: DonationEventLoggerInterface;
|
|
75
|
+
});
|
|
76
|
+
private braintreeManager;
|
|
77
|
+
private recaptchaManager;
|
|
78
|
+
private donationFlowModalManager;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=payment-flow-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-flow-handlers.d.ts","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DonationFlowModalManager, } from './donation-flow-modal-manager.js';
|
|
2
|
+
import { ApplePayFlowHandler, } from './handlers/apple-pay-flow-handler.js';
|
|
3
|
+
import { CreditCardFlowHandler, } from './handlers/credit-card-flow-handler.js';
|
|
4
|
+
import { GooglePayFlowHandler, } from './handlers/google-pay-flow-handler.js';
|
|
5
|
+
import { PayPalFlowHandler, } from './handlers/paypal-flow-handler.js';
|
|
6
|
+
import { VenmoFlowHandler, } from './handlers/venmo-flow-handler.js';
|
|
7
|
+
/**
|
|
8
|
+
* The container for the per-provider flow handlers.
|
|
9
|
+
*
|
|
10
|
+
* A flow handler owns the steps between the UI and the data for one
|
|
11
|
+
* provider. For a credit card, that's: read the contact form, run recaptcha,
|
|
12
|
+
* tokenize the hosted fields, submit, show the upsell, finish. For PayPal the
|
|
13
|
+
* donor starts from PayPal's own button and the handler picks up from there.
|
|
14
|
+
*/
|
|
15
|
+
export class PaymentFlowHandlers {
|
|
16
|
+
async startup() {
|
|
17
|
+
this.venmoHandler?.startup();
|
|
18
|
+
this.creditCardHandler?.startup();
|
|
19
|
+
}
|
|
20
|
+
async showUpsellModal(options) {
|
|
21
|
+
return this.donationFlowModalManager.showUpsellModal(options);
|
|
22
|
+
}
|
|
23
|
+
showConfirmationStepModal(options) {
|
|
24
|
+
return this.donationFlowModalManager.showConfirmationStepModal(options);
|
|
25
|
+
}
|
|
26
|
+
get creditCardHandler() {
|
|
27
|
+
this.creditCardHandlerCache ??= new CreditCardFlowHandler({
|
|
28
|
+
braintreeManager: this.braintreeManager,
|
|
29
|
+
donationFlowModalManager: this.donationFlowModalManager,
|
|
30
|
+
recaptchaManager: this.recaptchaManager,
|
|
31
|
+
});
|
|
32
|
+
return this.creditCardHandlerCache;
|
|
33
|
+
}
|
|
34
|
+
get paypalHandler() {
|
|
35
|
+
this.paypalHandlerCache ??= new PayPalFlowHandler({
|
|
36
|
+
braintreeManager: this.braintreeManager,
|
|
37
|
+
donationFlowModalManager: this.donationFlowModalManager,
|
|
38
|
+
});
|
|
39
|
+
return this.paypalHandlerCache;
|
|
40
|
+
}
|
|
41
|
+
get applePayHandler() {
|
|
42
|
+
this.applePayHandlerCache ??= new ApplePayFlowHandler({
|
|
43
|
+
braintreeManager: this.braintreeManager,
|
|
44
|
+
donationFlowModalManager: this.donationFlowModalManager,
|
|
45
|
+
});
|
|
46
|
+
return this.applePayHandlerCache;
|
|
47
|
+
}
|
|
48
|
+
get venmoHandler() {
|
|
49
|
+
this.venmoHandlerCache ??= new VenmoFlowHandler({
|
|
50
|
+
braintreeManager: this.braintreeManager,
|
|
51
|
+
donationFlowModalManager: this.donationFlowModalManager,
|
|
52
|
+
});
|
|
53
|
+
return this.venmoHandlerCache;
|
|
54
|
+
}
|
|
55
|
+
get googlePayHandler() {
|
|
56
|
+
this.googlePayHandlerCache ??= new GooglePayFlowHandler({
|
|
57
|
+
braintreeManager: this.braintreeManager,
|
|
58
|
+
donationFlowModalManager: this.donationFlowModalManager,
|
|
59
|
+
});
|
|
60
|
+
return this.googlePayHandlerCache;
|
|
61
|
+
}
|
|
62
|
+
constructor(options) {
|
|
63
|
+
this.braintreeManager = options.braintreeManager;
|
|
64
|
+
this.recaptchaManager = options.recaptchaManager;
|
|
65
|
+
this.donationFlowModalManager = new DonationFlowModalManager({
|
|
66
|
+
braintreeManager: this.braintreeManager,
|
|
67
|
+
modalManager: options.modalManager,
|
|
68
|
+
analytics: options.analytics,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=payment-flow-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-flow-handlers.js","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,wBAAwB,GAEzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,GAEpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,qBAAqB,GAEtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,oBAAoB,GAErB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,iBAAiB,GAElB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,gBAAgB,GAEjB,MAAM,+BAA+B,CAAC;AA6BvC;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAmB;IAC9B,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAOrB;QACC,OAAO,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,yBAAyB,CAAC,OAMzB;QACC,OAAO,IAAI,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,iBAAiB;QACnB,IAAI,CAAC,sBAAsB,KAAK,IAAI,qBAAqB,CAAC;YACxD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;YACvD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACrC,CAAC;IAED,IAAI,aAAa;QACf,IAAI,CAAC,kBAAkB,KAAK,IAAI,iBAAiB,CAAC;YAChD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAI,eAAe;QACjB,IAAI,CAAC,oBAAoB,KAAK,IAAI,mBAAmB,CAAC;YACpD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED,IAAI,YAAY;QACd,IAAI,CAAC,iBAAiB,KAAK,IAAI,gBAAgB,CAAC;YAC9C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,IAAI,gBAAgB;QAClB,IAAI,CAAC,qBAAqB,KAAK,IAAI,oBAAoB,CAAC;YACtD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAQD,YAAY,OAKX;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAEjD,IAAI,CAAC,wBAAwB,GAAG,IAAI,wBAAwB,CAAC;YAC3D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC;CAKF","sourcesContent":["import type { ModalManagerInterface } from '@internetarchive/modal-manager';\n\nimport type { DonationEventLoggerInterface } from '../analytics';\nimport type { BraintreeManagerInterface } from '../braintree/braintree-manager-interface';\nimport type { DonationType } from '../models/donation-type';\nimport type { UpsellModalCTAMode } from '../modals/ia-donation-upsell-modal-content';\nimport type { RecaptchaManagerInterface } from '../recaptcha-manager';\nimport {\n DonationFlowModalManager,\n type DonationFlowModalManagerInterface,\n} from './donation-flow-modal-manager';\nimport {\n ApplePayFlowHandler,\n type ApplePayFlowHandlerInterface,\n} from './handlers/apple-pay-flow-handler';\nimport {\n CreditCardFlowHandler,\n type CreditCardFlowHandlerInterface,\n} from './handlers/credit-card-flow-handler';\nimport {\n GooglePayFlowHandler,\n type GooglePayFlowHandlerInterface,\n} from './handlers/google-pay-flow-handler';\nimport {\n PayPalFlowHandler,\n type PayPalFlowHandlerInterface,\n} from './handlers/paypal-flow-handler';\nimport {\n VenmoFlowHandler,\n type VenmoFlowHandlerInterface,\n} from './handlers/venmo-flow-handler';\n\nexport interface PaymentFlowHandlersInterface {\n startup(): Promise<void>;\n\n showUpsellModal(options: {\n oneTimeAmount: number;\n ctaMode?: UpsellModalCTAMode;\n yesSelected?: (amount: number) => void;\n noSelected?: () => void;\n amountChanged?: (amount: number) => void;\n userClosedModalCallback?: () => void;\n }): Promise<void>;\n\n showConfirmationStepModal(options: {\n amount: number;\n donationType: DonationType;\n currencyType: string;\n confirmDonationCB: () => void;\n cancelDonationCB: () => void;\n }): Promise<void>;\n\n creditCardHandler: CreditCardFlowHandlerInterface | undefined;\n paypalHandler: PayPalFlowHandlerInterface | undefined;\n applePayHandler: ApplePayFlowHandlerInterface | undefined;\n venmoHandler: VenmoFlowHandlerInterface | undefined;\n googlePayHandler: GooglePayFlowHandlerInterface | undefined;\n}\n\n/**\n * The container for the per-provider flow handlers.\n *\n * A flow handler owns the steps between the UI and the data for one\n * provider. For a credit card, that's: read the contact form, run recaptcha,\n * tokenize the hosted fields, submit, show the upsell, finish. For PayPal the\n * donor starts from PayPal's own button and the handler picks up from there.\n */\nexport class PaymentFlowHandlers implements PaymentFlowHandlersInterface {\n async startup(): Promise<void> {\n this.venmoHandler?.startup();\n this.creditCardHandler?.startup();\n }\n\n async showUpsellModal(options: {\n oneTimeAmount: number;\n ctaMode?: UpsellModalCTAMode;\n yesSelected?: (amount: number) => void;\n noSelected?: () => void;\n amountChanged?: (amount: number) => void;\n userClosedModalCallback?: () => void;\n }): Promise<void> {\n return this.donationFlowModalManager.showUpsellModal(options);\n }\n\n showConfirmationStepModal(options: {\n amount: number;\n donationType: DonationType;\n currencyType: string;\n confirmDonationCB: () => void;\n cancelDonationCB: () => void;\n }): Promise<void> {\n return this.donationFlowModalManager.showConfirmationStepModal(options);\n }\n\n get creditCardHandler(): CreditCardFlowHandlerInterface {\n this.creditCardHandlerCache ??= new CreditCardFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n recaptchaManager: this.recaptchaManager,\n });\n return this.creditCardHandlerCache;\n }\n\n get paypalHandler(): PayPalFlowHandlerInterface {\n this.paypalHandlerCache ??= new PayPalFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n });\n return this.paypalHandlerCache;\n }\n\n get applePayHandler(): ApplePayFlowHandlerInterface {\n this.applePayHandlerCache ??= new ApplePayFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n });\n return this.applePayHandlerCache;\n }\n\n get venmoHandler(): VenmoFlowHandlerInterface {\n this.venmoHandlerCache ??= new VenmoFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n });\n return this.venmoHandlerCache;\n }\n\n get googlePayHandler(): GooglePayFlowHandlerInterface {\n this.googlePayHandlerCache ??= new GooglePayFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n });\n return this.googlePayHandlerCache;\n }\n\n private creditCardHandlerCache?: CreditCardFlowHandlerInterface;\n private paypalHandlerCache?: PayPalFlowHandlerInterface;\n private applePayHandlerCache?: ApplePayFlowHandlerInterface;\n private venmoHandlerCache?: VenmoFlowHandlerInterface;\n private googlePayHandlerCache?: GooglePayFlowHandlerInterface;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n modalManager: ModalManagerInterface;\n recaptchaManager: RecaptchaManagerInterface;\n analytics: DonationEventLoggerInterface;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.recaptchaManager = options.recaptchaManager;\n\n this.donationFlowModalManager = new DonationFlowModalManager({\n braintreeManager: this.braintreeManager,\n modalManager: options.modalManager,\n analytics: options.analytics,\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n private recaptchaManager: RecaptchaManagerInterface;\n private donationFlowModalManager: DonationFlowModalManagerInterface;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export type AutoCompleteFieldOptions = 'on' | 'off' | 'additional-name' | 'address-level1' | 'address-level2' | 'address-level3' | 'address-level4' | 'address-line1' | 'address-line2' | 'address-line3' | 'bday' | 'bday-year' | 'bday-day' | 'bday-month' | 'billing' | 'cc-additional-name' | 'cc-csc' | 'cc-exp' | 'cc-exp-month' | 'cc-exp-year' | 'cc-family-name' | 'cc-given-name' | 'cc-name' | 'cc-number' | 'cc-type' | 'country' | 'country-name' | 'current-password' | 'email' | 'family-name' | 'fax' | 'given-name' | 'home' | 'honorific-prefix' | 'honorific-suffix' | 'impp' | 'language' | 'mobile' | 'name' | 'new-password' | 'nickname' | 'organization' | 'organization-title' | 'pager' | 'photo' | 'postal-code' | 'sex' | 'shipping' | 'street-address' | 'tel-area-code' | 'tel' | 'tel-country-code' | 'tel-extension' | 'tel-local' | 'tel-local-prefix' | 'tel-local-suffix' | 'tel-national' | 'transaction-amount' | 'transaction-currency' | 'url' | 'username' | 'work';
|
|
2
|
+
//# sourceMappingURL=autocomplete-field-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete-field-options.d.ts","sourceRoot":"","sources":["../../../../../../src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAChC,IAAI,GACJ,KAAK,GACL,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,eAAe,GACf,MAAM,GACN,WAAW,GACX,UAAU,GACV,YAAY,GACZ,SAAS,GACT,oBAAoB,GACpB,QAAQ,GACR,QAAQ,GACR,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,WAAW,GACX,SAAS,GACT,SAAS,GACT,cAAc,GACd,kBAAkB,GAClB,OAAO,GACP,aAAa,GACb,KAAK,GACL,YAAY,GACZ,MAAM,GACN,kBAAkB,GAClB,kBAAkB,GAClB,MAAM,GACN,UAAU,GACV,QAAQ,GACR,MAAM,GACN,cAAc,GACd,UAAU,GACV,cAAc,GACd,oBAAoB,GACpB,OAAO,GACP,OAAO,GACP,aAAa,GACb,KAAK,GACL,UAAU,GACV,gBAAgB,GAChB,eAAe,GACf,KAAK,GACL,kBAAkB,GAClB,eAAe,GACf,WAAW,GACX,kBAAkB,GAClB,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,sBAAsB,GACtB,KAAK,GACL,UAAU,GACV,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete-field-options.js","sourceRoot":"","sources":["../../../../../../src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.ts"],"names":[],"mappings":"","sourcesContent":["export type AutoCompleteFieldOptions =\n | 'on'\n | 'off'\n | 'additional-name'\n | 'address-level1'\n | 'address-level2'\n | 'address-level3'\n | 'address-level4'\n | 'address-line1'\n | 'address-line2'\n | 'address-line3'\n | 'bday'\n | 'bday-year'\n | 'bday-day'\n | 'bday-month'\n | 'billing'\n | 'cc-additional-name'\n | 'cc-csc'\n | 'cc-exp'\n | 'cc-exp-month'\n | 'cc-exp-year'\n | 'cc-family-name'\n | 'cc-given-name'\n | 'cc-name'\n | 'cc-number'\n | 'cc-type'\n | 'country'\n | 'country-name'\n | 'current-password'\n | 'email'\n | 'family-name'\n | 'fax'\n | 'given-name'\n | 'home'\n | 'honorific-prefix'\n | 'honorific-suffix'\n | 'impp'\n | 'language'\n | 'mobile'\n | 'name'\n | 'new-password'\n | 'nickname'\n | 'organization'\n | 'organization-title'\n | 'pager'\n | 'photo'\n | 'postal-code'\n | 'sex'\n | 'shipping'\n | 'street-address'\n | 'tel-area-code'\n | 'tel'\n | 'tel-country-code'\n | 'tel-extension'\n | 'tel-local'\n | 'tel-local-prefix'\n | 'tel-local-suffix'\n | 'tel-national'\n | 'transaction-amount'\n | 'transaction-currency'\n | 'url'\n | 'username'\n | 'work';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countries.d.ts","sourceRoot":"","sources":["../../../../../../src/elements/ia-donation-form/form-elements/contact-form/countries.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2P5C,CAAC"}
|