@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,58 @@
|
|
|
1
|
+
/** The three hosted credit card fields. The values are Braintree's field names. */
|
|
2
|
+
export const HostedFieldName = {
|
|
3
|
+
Number: 'number',
|
|
4
|
+
CVV: 'cvv',
|
|
5
|
+
ExpirationDate: 'expirationDate',
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Holds the DOM containers Braintree renders its hosted fields into, and
|
|
9
|
+
* toggles their error state. Each container's parent is the badged input
|
|
10
|
+
* wrapping it, which is what shows the error.
|
|
11
|
+
*/
|
|
12
|
+
export class HostedFieldContainer {
|
|
13
|
+
fieldFor(field) {
|
|
14
|
+
switch (field) {
|
|
15
|
+
case HostedFieldName.Number:
|
|
16
|
+
return this.number;
|
|
17
|
+
case HostedFieldName.CVV:
|
|
18
|
+
return this.cvv;
|
|
19
|
+
case HostedFieldName.ExpirationDate:
|
|
20
|
+
return this.expirationDate;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
markFieldErrors(fields) {
|
|
24
|
+
fields.forEach((field) => {
|
|
25
|
+
const input = this.fieldFor(field);
|
|
26
|
+
input.parentElement.error = true;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
removeFieldErrors(fields) {
|
|
30
|
+
fields.forEach((field) => {
|
|
31
|
+
const input = this.fieldFor(field);
|
|
32
|
+
input.parentElement.error = false;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
showErrorMessage(message) {
|
|
36
|
+
const error = message ?? 'Some payment information below is missing or incorrect.';
|
|
37
|
+
this.errorContainer.textContent = error;
|
|
38
|
+
this.errorContainer.style.display = 'block';
|
|
39
|
+
}
|
|
40
|
+
hideErrorMessage() {
|
|
41
|
+
this.errorContainer.style.display = 'none';
|
|
42
|
+
}
|
|
43
|
+
resetHostedFields() {
|
|
44
|
+
const elements = [this.number, this.cvv, this.expirationDate];
|
|
45
|
+
elements.forEach((element) => {
|
|
46
|
+
while (element.firstChild) {
|
|
47
|
+
element.firstChild.remove();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
constructor(options) {
|
|
52
|
+
this.number = options.number;
|
|
53
|
+
this.cvv = options.cvv;
|
|
54
|
+
this.expirationDate = options.expirationDate;
|
|
55
|
+
this.errorContainer = options.errorContainer;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=hosted-field-container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-field-container.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,cAAc,EAAE,gBAAgB;CACxB,CAAC;AAuBX;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IAS/B,QAAQ,CAAC,KAAsB;QAC7B,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,eAAe,CAAC,MAAM;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB,KAAK,eAAe,CAAC,GAAG;gBACtB,OAAO,IAAI,CAAC,GAAG,CAAC;YAClB,KAAK,eAAe,CAAC,cAAc;gBACjC,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,eAAe,CAAC,MAAyB;QACvC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,aAA+B,CAAC,KAAK,GAAG,IAAI,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,MAAyB;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,aAA+B,CAAC,KAAK,GAAG,KAAK,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,OAAgB;QAC/B,MAAM,KAAK,GACT,OAAO,IAAI,yDAAyD,CAAC;QACvE,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC9C,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7C,CAAC;IAED,iBAAiB;QACf,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1B,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,OAKX;QACC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC/C,CAAC;CACF","sourcesContent":["/** The three hosted credit card fields. The values are Braintree's field names. */\nexport const HostedFieldName = {\n Number: 'number',\n CVV: 'cvv',\n ExpirationDate: 'expirationDate',\n} as const;\n\nexport type HostedFieldName =\n (typeof HostedFieldName)[keyof typeof HostedFieldName];\n\n/**\n * An element that can show an error state, like the form's badged input. The\n * hosted field containers sit inside one.\n */\ninterface ErrorMarkable extends HTMLElement {\n error: boolean;\n}\n\nexport interface HostedFieldContainerInterface {\n fieldFor(field: HostedFieldName): HTMLDivElement;\n markFieldErrors(fields: HostedFieldName[]): void;\n removeFieldErrors(fields: HostedFieldName[]): void;\n showErrorMessage(message?: string): void;\n hideErrorMessage(): void;\n /** Empty the hosted field containers so they can be re-rendered after a timeout */\n resetHostedFields(): void;\n}\n\n/**\n * Holds the DOM containers Braintree renders its hosted fields into, and\n * toggles their error state. Each container's parent is the badged input\n * wrapping it, which is what shows the error.\n */\nexport class HostedFieldContainer implements HostedFieldContainerInterface {\n private number: HTMLDivElement;\n\n private cvv: HTMLDivElement;\n\n private expirationDate: HTMLDivElement;\n\n private errorContainer: HTMLDivElement;\n\n fieldFor(field: HostedFieldName): HTMLDivElement {\n switch (field) {\n case HostedFieldName.Number:\n return this.number;\n case HostedFieldName.CVV:\n return this.cvv;\n case HostedFieldName.ExpirationDate:\n return this.expirationDate;\n }\n }\n\n markFieldErrors(fields: HostedFieldName[]): void {\n fields.forEach((field) => {\n const input = this.fieldFor(field);\n (input.parentElement as ErrorMarkable).error = true;\n });\n }\n\n removeFieldErrors(fields: HostedFieldName[]): void {\n fields.forEach((field) => {\n const input = this.fieldFor(field);\n (input.parentElement as ErrorMarkable).error = false;\n });\n }\n\n showErrorMessage(message?: string): void {\n const error =\n message ?? 'Some payment information below is missing or incorrect.';\n this.errorContainer.textContent = error;\n this.errorContainer.style.display = 'block';\n }\n\n hideErrorMessage(): void {\n this.errorContainer.style.display = 'none';\n }\n\n resetHostedFields(): void {\n const elements = [this.number, this.cvv, this.expirationDate];\n elements.forEach((element) => {\n while (element.firstChild) {\n element.firstChild.remove();\n }\n });\n }\n\n constructor(options: {\n number: HTMLDivElement;\n cvv: HTMLDivElement;\n expirationDate: HTMLDivElement;\n errorContainer: HTMLDivElement;\n }) {\n this.number = options.number;\n this.cvv = options.cvv;\n this.expirationDate = options.expirationDate;\n this.errorContainer = options.errorContainer;\n }\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type * as braintree from 'braintree-web';
|
|
2
|
+
import type { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
3
|
+
export interface GooglePayHandlerInterface {
|
|
4
|
+
paymentsClient: google.payments.api.PaymentsClient;
|
|
5
|
+
instance: PromisedSingleton<braintree.GooglePayment>;
|
|
6
|
+
isBrowserSupported(): Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=google-pay-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-pay-interface.d.ts","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;IACnD,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAErD,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-pay-interface.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type * as braintree from 'braintree-web';\nimport type { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nexport interface GooglePayHandlerInterface {\n paymentsClient: google.payments.api.PaymentsClient;\n instance: PromisedSingleton<braintree.GooglePayment>;\n\n isBrowserSupported(): Promise<boolean>;\n}\n"]}
|
package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type * as braintree from 'braintree-web';
|
|
2
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
3
|
+
import type { BraintreeManagerInterface } from '../../braintree-manager-interface.js';
|
|
4
|
+
import type { GooglePayHandlerInterface } from './google-pay-interface.js';
|
|
5
|
+
export declare class GooglePayHandler implements GooglePayHandlerInterface {
|
|
6
|
+
paymentsClient: google.payments.api.PaymentsClient;
|
|
7
|
+
instance: PromisedSingleton<braintree.GooglePayment>;
|
|
8
|
+
isBrowserSupported(): Promise<boolean>;
|
|
9
|
+
constructor(options: {
|
|
10
|
+
braintreeManager: BraintreeManagerInterface;
|
|
11
|
+
googlePayMerchantId?: string;
|
|
12
|
+
googlePayBraintreeClient: typeof braintree.googlePayment;
|
|
13
|
+
googlePaymentsClient: google.payments.api.PaymentsClient;
|
|
14
|
+
});
|
|
15
|
+
private braintreeManager;
|
|
16
|
+
private googlePayMerchantId?;
|
|
17
|
+
private googlePayBraintreeClient;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=google-pay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-pay.d.ts","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAExE,qBAAa,gBAAiB,YAAW,yBAAyB;IAChE,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;IAEnD,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAE/C,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;gBA0BhC,OAAO,EAAE;QACnB,gBAAgB,EAAE,yBAAyB,CAAC;QAC5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,wBAAwB,EAAE,OAAO,SAAS,CAAC,aAAa,CAAC;QACzD,oBAAoB,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;KAC1D;IAkBD,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,mBAAmB,CAAC,CAAS;IAErC,OAAO,CAAC,wBAAwB,CAAiC;CAClE"}
|
package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
export class GooglePayHandler {
|
|
3
|
+
async isBrowserSupported() {
|
|
4
|
+
// See https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest
|
|
5
|
+
const response = await this.paymentsClient.isReadyToPay({
|
|
6
|
+
apiVersion: 2,
|
|
7
|
+
apiVersionMinor: 0,
|
|
8
|
+
allowedPaymentMethods: [
|
|
9
|
+
{
|
|
10
|
+
type: 'CARD',
|
|
11
|
+
parameters: {
|
|
12
|
+
allowedAuthMethods: ['PAN_ONLY'],
|
|
13
|
+
allowedCardNetworks: [
|
|
14
|
+
'AMEX',
|
|
15
|
+
'DISCOVER',
|
|
16
|
+
'INTERAC',
|
|
17
|
+
'JCB',
|
|
18
|
+
'MASTERCARD',
|
|
19
|
+
'VISA',
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
existingPaymentMethodRequired: false,
|
|
25
|
+
});
|
|
26
|
+
return response.result;
|
|
27
|
+
}
|
|
28
|
+
constructor(options) {
|
|
29
|
+
this.braintreeManager = options.braintreeManager;
|
|
30
|
+
this.googlePayMerchantId = options.googlePayMerchantId;
|
|
31
|
+
this.googlePayBraintreeClient = options.googlePayBraintreeClient;
|
|
32
|
+
this.paymentsClient = options.googlePaymentsClient;
|
|
33
|
+
this.instance = new PromisedSingleton({
|
|
34
|
+
generator: async () => {
|
|
35
|
+
const braintreeInstance = await this.braintreeManager.instance.get();
|
|
36
|
+
return this.googlePayBraintreeClient.create({
|
|
37
|
+
client: braintreeInstance,
|
|
38
|
+
googlePayVersion: 2,
|
|
39
|
+
googleMerchantId: this.googlePayMerchantId,
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=google-pay.js.map
|
package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-pay.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAKxE,MAAM,OAAO,gBAAgB;IAK3B,KAAK,CAAC,kBAAkB;QACtB,qFAAqF;QACrF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;YACtD,UAAU,EAAE,CAAC;YACb,eAAe,EAAE,CAAC;YAClB,qBAAqB,EAAE;gBACrB;oBACE,IAAI,EAAE,MAAM;oBACZ,UAAU,EAAE;wBACV,kBAAkB,EAAE,CAAC,UAAU,CAAC;wBAChC,mBAAmB,EAAE;4BACnB,MAAM;4BACN,UAAU;4BACV,SAAS;4BACT,KAAK;4BACL,YAAY;4BACZ,MAAM;yBACP;qBACF;iBACF;aACF;YACD,6BAA6B,EAAE,KAAK;SACrC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,YAAY,OAKX;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAEnD,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAA0B;YAC7D,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACrE,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;oBAC1C,MAAM,EAAE,iBAAiB;oBACzB,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,IAAI,CAAC,mBAAmB;iBAC3C,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CAOF","sourcesContent":["import type * as braintree from 'braintree-web';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nimport type { BraintreeManagerInterface } from '../../braintree-manager-interface';\nimport type { GooglePayHandlerInterface } from './google-pay-interface';\n\nexport class GooglePayHandler implements GooglePayHandlerInterface {\n paymentsClient: google.payments.api.PaymentsClient;\n\n instance: PromisedSingleton<braintree.GooglePayment>;\n\n async isBrowserSupported(): Promise<boolean> {\n // See https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest\n const response = await this.paymentsClient.isReadyToPay({\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY'],\n allowedCardNetworks: [\n 'AMEX',\n 'DISCOVER',\n 'INTERAC',\n 'JCB',\n 'MASTERCARD',\n 'VISA',\n ],\n },\n },\n ],\n existingPaymentMethodRequired: false,\n });\n return response.result;\n }\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n googlePayMerchantId?: string;\n googlePayBraintreeClient: typeof braintree.googlePayment;\n googlePaymentsClient: google.payments.api.PaymentsClient;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.googlePayMerchantId = options.googlePayMerchantId;\n this.googlePayBraintreeClient = options.googlePayBraintreeClient;\n this.paymentsClient = options.googlePaymentsClient;\n\n this.instance = new PromisedSingleton<braintree.GooglePayment>({\n generator: async () => {\n const braintreeInstance = await this.braintreeManager.instance.get();\n return this.googlePayBraintreeClient.create({\n client: braintreeInstance,\n googlePayVersion: 2,\n googleMerchantId: this.googlePayMerchantId,\n });\n },\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n\n private googlePayMerchantId?: string;\n\n private googlePayBraintreeClient: typeof braintree.googlePayment;\n}\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type * as braintree from 'braintree-web';
|
|
2
|
+
import type * as paypal from 'paypal-checkout-components';
|
|
3
|
+
import type { DonationPaymentInfo } from '../../../models/donation-payment-info.js';
|
|
4
|
+
/**
|
|
5
|
+
* The go-between for the PayPal button.
|
|
6
|
+
*
|
|
7
|
+
* The button can't live in the shadow DOM, so it's rendered at the top of the
|
|
8
|
+
* page in the global scope, which makes it hard to talk to directly. The data
|
|
9
|
+
* source hooks into all of the button's callbacks and relays them to a
|
|
10
|
+
* delegate that cares about the events.
|
|
11
|
+
*/
|
|
12
|
+
export interface PayPalButtonDataSourceInterface {
|
|
13
|
+
/** The delegate to tell about button events */
|
|
14
|
+
delegate?: PayPalButtonDataSourceDelegate;
|
|
15
|
+
/**
|
|
16
|
+
* The donation info for this button. The donor starts checkout from the
|
|
17
|
+
* button itself, not from our code, so this has to be kept current as they
|
|
18
|
+
* change the form.
|
|
19
|
+
*/
|
|
20
|
+
donationInfo: DonationPaymentInfo;
|
|
21
|
+
/** The donor pressed the button */
|
|
22
|
+
payment(): Promise<string>;
|
|
23
|
+
/** The donor authorized the donation */
|
|
24
|
+
onAuthorize(data: paypal.AuthorizationData, actions: object): Promise<paypal.TokenizePayload | undefined>;
|
|
25
|
+
/** The donor cancelled the donation */
|
|
26
|
+
onCancel(data: paypal.CancellationData): void;
|
|
27
|
+
/** Something went wrong */
|
|
28
|
+
onError(error: string): void;
|
|
29
|
+
}
|
|
30
|
+
/** Anything interested in what the PayPal button is doing. */
|
|
31
|
+
export interface PayPalButtonDataSourceDelegate {
|
|
32
|
+
/** The donor pressed the button */
|
|
33
|
+
payPalPaymentStarted(dataSource: PayPalButtonDataSourceInterface, options: object): Promise<void>;
|
|
34
|
+
/** PayPal authorized the payment and handed back a payload to submit */
|
|
35
|
+
payPalPaymentAuthorized(dataSource: PayPalButtonDataSourceInterface, payload: paypal.TokenizePayload): Promise<void>;
|
|
36
|
+
/** The donor confirmed the donation in our confirmation step */
|
|
37
|
+
payPalPaymentConfirmed(dataSource: PayPalButtonDataSourceInterface, payload: paypal.TokenizePayload): Promise<void>;
|
|
38
|
+
/** The donor cancelled */
|
|
39
|
+
payPalPaymentCancelled(dataSource: PayPalButtonDataSourceInterface, data: object): Promise<void>;
|
|
40
|
+
/** Something went wrong */
|
|
41
|
+
payPalPaymentError(dataSource: PayPalButtonDataSourceInterface, error: string): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export declare class PayPalButtonDataSource implements PayPalButtonDataSourceInterface {
|
|
44
|
+
delegate?: PayPalButtonDataSourceDelegate;
|
|
45
|
+
donationInfo: DonationPaymentInfo;
|
|
46
|
+
private paypalInstance;
|
|
47
|
+
constructor(options: {
|
|
48
|
+
donationInfo: DonationPaymentInfo;
|
|
49
|
+
paypalInstance: braintree.PayPalCheckout;
|
|
50
|
+
});
|
|
51
|
+
payment(): Promise<string>;
|
|
52
|
+
onAuthorize(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload>;
|
|
53
|
+
onConfirm(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload>;
|
|
54
|
+
onCancel(data: object): void;
|
|
55
|
+
onError(error: string): void;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=paypal-button-datasource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paypal-button-datasource.d.ts","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAG1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAGjF;;;;;;;GAOG;AACH,MAAM,WAAW,+BAA+B;IAC9C,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IAE1C;;;;OAIG;IACH,YAAY,EAAE,mBAAmB,CAAC;IAElC,mCAAmC;IACnC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3B,wCAAwC;IACxC,WAAW,CACT,IAAI,EAAE,MAAM,CAAC,iBAAiB,EAC9B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAE/C,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAE9C,2BAA2B;IAC3B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,8DAA8D;AAC9D,MAAM,WAAW,8BAA8B;IAC7C,mCAAmC;IACnC,oBAAoB,CAClB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,wEAAwE;IACxE,uBAAuB,CACrB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,MAAM,CAAC,eAAe,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,gEAAgE;IAChE,sBAAsB,CACpB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,MAAM,CAAC,eAAe,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,0BAA0B;IAC1B,sBAAsB,CACpB,UAAU,EAAE,+BAA+B,EAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,2BAA2B;IAC3B,kBAAkB,CAChB,UAAU,EAAE,+BAA+B,EAC3C,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,qBAAa,sBAAuB,YAAW,+BAA+B;IAC5E,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IAE1C,YAAY,EAAE,mBAAmB,CAAC;IAElC,OAAO,CAAC,cAAc,CAA2B;gBAErC,OAAO,EAAE;QACnB,YAAY,EAAE,mBAAmB,CAAC;QAClC,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC;KAC1C;IAKK,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAyB1B,WAAW,CACf,IAAI,EAAE,MAAM,CAAC,iBAAiB,GAC7B,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;IAQ5B,SAAS,CACb,IAAI,EAAE,MAAM,CAAC,iBAAiB,GAC7B,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;IAOlC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAI7B"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import currency from 'currency.js';
|
|
2
|
+
import { DonationType } from '../../../models/donation-type.js';
|
|
3
|
+
export class PayPalButtonDataSource {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.donationInfo = options.donationInfo;
|
|
6
|
+
this.paypalInstance = options.paypalInstance;
|
|
7
|
+
}
|
|
8
|
+
async payment() {
|
|
9
|
+
const donationType = this.donationInfo.donationType;
|
|
10
|
+
const flow = donationType === DonationType.OneTime ? 'checkout' : 'vault';
|
|
11
|
+
const options = {
|
|
12
|
+
flow: flow,
|
|
13
|
+
intent: 'capture',
|
|
14
|
+
enableShippingAddress: true,
|
|
15
|
+
};
|
|
16
|
+
if (flow === 'checkout') {
|
|
17
|
+
options.amount = this.donationInfo.total;
|
|
18
|
+
options.currency = 'USD';
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
options.billingAgreementDescription = `Subscribe to donate ${currency(this.donationInfo.total, { symbol: '$' }).format()} monthly`;
|
|
22
|
+
}
|
|
23
|
+
this.delegate?.payPalPaymentStarted(this, options);
|
|
24
|
+
return this.paypalInstance.createPayment(options);
|
|
25
|
+
}
|
|
26
|
+
async onAuthorize(data) {
|
|
27
|
+
const payload = await this.paypalInstance.tokenizePayment(data);
|
|
28
|
+
this.delegate?.payPalPaymentAuthorized(this, payload);
|
|
29
|
+
return payload;
|
|
30
|
+
}
|
|
31
|
+
async onConfirm(data) {
|
|
32
|
+
const payload = await this.paypalInstance.tokenizePayment(data);
|
|
33
|
+
this.delegate?.payPalPaymentConfirmed(this, payload);
|
|
34
|
+
return payload;
|
|
35
|
+
}
|
|
36
|
+
onCancel(data) {
|
|
37
|
+
this.delegate?.payPalPaymentCancelled(this, data);
|
|
38
|
+
}
|
|
39
|
+
onError(error) {
|
|
40
|
+
console.error('PayPal error', error);
|
|
41
|
+
this.delegate?.payPalPaymentError(this, error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=paypal-button-datasource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paypal-button-datasource.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,aAAa,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAsE7D,MAAM,OAAO,sBAAsB;IAOjC,YAAY,OAGX;QACC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QACpD,MAAM,IAAI,GAAG,YAAY,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;QAE1E,MAAM,OAAO,GAAiD;YAC5D,IAAI,EAAE,IAAuB;YAC7B,MAAM,EAAE,SAA0B;YAClC,qBAAqB,EAAE,IAAI;SAC5B,CAAC;QAEF,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACzC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,2BAA2B,GAAG,uBAAuB,QAAQ,CACnE,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC,MAAM,EAAE,UAAU,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,WAAW,CACf,IAA8B;QAE9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAEhE,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAS,CACb,IAA8B;QAE9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAErD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACF","sourcesContent":["import type * as braintree from 'braintree-web';\nimport type * as paypal from 'paypal-checkout-components';\nimport currency from 'currency.js';\n\nimport type { DonationPaymentInfo } from '../../../models/donation-payment-info';\nimport { DonationType } from '../../../models/donation-type';\n\n/**\n * The go-between for the PayPal button.\n *\n * The button can't live in the shadow DOM, so it's rendered at the top of the\n * page in the global scope, which makes it hard to talk to directly. The data\n * source hooks into all of the button's callbacks and relays them to a\n * delegate that cares about the events.\n */\nexport interface PayPalButtonDataSourceInterface {\n /** The delegate to tell about button events */\n delegate?: PayPalButtonDataSourceDelegate;\n\n /**\n * The donation info for this button. The donor starts checkout from the\n * button itself, not from our code, so this has to be kept current as they\n * change the form.\n */\n donationInfo: DonationPaymentInfo;\n\n /** The donor pressed the button */\n payment(): Promise<string>;\n\n /** The donor authorized the donation */\n onAuthorize(\n data: paypal.AuthorizationData,\n actions: object,\n ): Promise<paypal.TokenizePayload | undefined>;\n\n /** The donor cancelled the donation */\n onCancel(data: paypal.CancellationData): void;\n\n /** Something went wrong */\n onError(error: string): void;\n}\n\n/** Anything interested in what the PayPal button is doing. */\nexport interface PayPalButtonDataSourceDelegate {\n /** The donor pressed the button */\n payPalPaymentStarted(\n dataSource: PayPalButtonDataSourceInterface,\n options: object,\n ): Promise<void>;\n\n /** PayPal authorized the payment and handed back a payload to submit */\n payPalPaymentAuthorized(\n dataSource: PayPalButtonDataSourceInterface,\n payload: paypal.TokenizePayload,\n ): Promise<void>;\n\n /** The donor confirmed the donation in our confirmation step */\n payPalPaymentConfirmed(\n dataSource: PayPalButtonDataSourceInterface,\n payload: paypal.TokenizePayload,\n ): Promise<void>;\n\n /** The donor cancelled */\n payPalPaymentCancelled(\n dataSource: PayPalButtonDataSourceInterface,\n data: object,\n ): Promise<void>;\n\n /** Something went wrong */\n payPalPaymentError(\n dataSource: PayPalButtonDataSourceInterface,\n error: string,\n ): Promise<void>;\n}\n\nexport class PayPalButtonDataSource implements PayPalButtonDataSourceInterface {\n delegate?: PayPalButtonDataSourceDelegate;\n\n donationInfo: DonationPaymentInfo;\n\n private paypalInstance: braintree.PayPalCheckout;\n\n constructor(options: {\n donationInfo: DonationPaymentInfo;\n paypalInstance: braintree.PayPalCheckout;\n }) {\n this.donationInfo = options.donationInfo;\n this.paypalInstance = options.paypalInstance;\n }\n\n async payment(): Promise<string> {\n const donationType = this.donationInfo.donationType;\n const flow = donationType === DonationType.OneTime ? 'checkout' : 'vault';\n\n const options: braintree.PayPalCheckoutCreatePaymentOptions = {\n flow: flow as paypal.FlowType,\n intent: 'capture' as paypal.Intent,\n enableShippingAddress: true,\n };\n\n if (flow === 'checkout') {\n options.amount = this.donationInfo.total;\n options.currency = 'USD';\n } else {\n options.billingAgreementDescription = `Subscribe to donate ${currency(\n this.donationInfo.total,\n { symbol: '$' },\n ).format()} monthly`;\n }\n\n this.delegate?.payPalPaymentStarted(this, options);\n\n return this.paypalInstance.createPayment(options);\n }\n\n async onAuthorize(\n data: paypal.AuthorizationData,\n ): Promise<paypal.TokenizePayload> {\n const payload = await this.paypalInstance.tokenizePayment(data);\n\n this.delegate?.payPalPaymentAuthorized(this, payload);\n\n return payload;\n }\n\n async onConfirm(\n data: paypal.AuthorizationData,\n ): Promise<paypal.TokenizePayload> {\n const payload = await this.paypalInstance.tokenizePayment(data);\n this.delegate?.payPalPaymentConfirmed(this, payload);\n\n return payload;\n }\n\n onCancel(data: object): void {\n this.delegate?.payPalPaymentCancelled(this, data);\n }\n\n onError(error: string): void {\n console.error('PayPal error', error);\n this.delegate?.payPalPaymentError(this, error);\n }\n}\n"]}
|
package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type * as braintree from 'braintree-web';
|
|
2
|
+
import type * as paypal from 'paypal-checkout-components';
|
|
3
|
+
import type { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
4
|
+
import type { DonationPaymentInfo } from '../../../models/donation-payment-info.js';
|
|
5
|
+
import type { PayPalButtonDataSourceInterface } from './paypal-button-datasource.js';
|
|
6
|
+
export interface PayPalHandlerInterface {
|
|
7
|
+
instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;
|
|
8
|
+
renderPayPalButton(params: {
|
|
9
|
+
selector: string;
|
|
10
|
+
style: paypal.ButtonStyle;
|
|
11
|
+
donationInfo: DonationPaymentInfo;
|
|
12
|
+
}): Promise<PayPalButtonDataSourceInterface | undefined>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=paypal-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paypal-interface.d.ts","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAElE,kBAAkB,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;QAC1B,YAAY,EAAE,mBAAmB,CAAC;KACnC,GAAG,OAAO,CAAC,+BAA+B,GAAG,SAAS,CAAC,CAAC;CAC1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paypal-interface.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type * as braintree from 'braintree-web';\nimport type * as paypal from 'paypal-checkout-components';\nimport type { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nimport type { DonationPaymentInfo } from '../../../models/donation-payment-info';\nimport type { PayPalButtonDataSourceInterface } from './paypal-button-datasource';\n\nexport interface PayPalHandlerInterface {\n instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;\n\n renderPayPalButton(params: {\n selector: string;\n style: paypal.ButtonStyle;\n donationInfo: DonationPaymentInfo;\n }): Promise<PayPalButtonDataSourceInterface | undefined>;\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type * as braintree from 'braintree-web';
|
|
2
|
+
import type * as paypal from 'paypal-checkout-components';
|
|
3
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
4
|
+
import type { DonationPaymentInfo } from '../../../models/donation-payment-info.js';
|
|
5
|
+
import type { BraintreeManagerInterface } from '../../braintree-manager-interface.js';
|
|
6
|
+
import { HostingEnvironment } from '../../hosting-environment.js';
|
|
7
|
+
import { type PayPalButtonDataSourceInterface } from './paypal-button-datasource.js';
|
|
8
|
+
import type { PayPalHandlerInterface } from './paypal-interface.js';
|
|
9
|
+
export declare class PayPalHandler implements PayPalHandlerInterface {
|
|
10
|
+
instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;
|
|
11
|
+
constructor(options: {
|
|
12
|
+
braintreeManager: BraintreeManagerInterface;
|
|
13
|
+
paypalClient: typeof braintree.paypalCheckout;
|
|
14
|
+
paypalButton: paypal.ButtonRenderer;
|
|
15
|
+
hostingEnvironment: HostingEnvironment;
|
|
16
|
+
});
|
|
17
|
+
private braintreeManager;
|
|
18
|
+
private paypalClient;
|
|
19
|
+
private paypalButtonGenerator;
|
|
20
|
+
private hostingEnvironment;
|
|
21
|
+
renderPayPalButton(params: {
|
|
22
|
+
selector: string;
|
|
23
|
+
style: paypal.ButtonStyle;
|
|
24
|
+
donationInfo: DonationPaymentInfo;
|
|
25
|
+
}): Promise<PayPalButtonDataSourceInterface | undefined>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=paypal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paypal.d.ts","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,qBAAa,aAAc,YAAW,sBAAsB;IAC1D,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;gBAEtD,OAAO,EAAE;QACnB,gBAAgB,EAAE,yBAAyB,CAAC;QAC5C,YAAY,EAAE,OAAO,SAAS,CAAC,cAAc,CAAC;QAC9C,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC;QACpC,kBAAkB,EAAE,kBAAkB,CAAC;KACxC;IAgBD,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,YAAY,CAAkC;IAEtD,OAAO,CAAC,qBAAqB,CAAwB;IAErD,OAAO,CAAC,kBAAkB,CAAqB;IAEzC,kBAAkB,CAAC,MAAM,EAAE;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;QAC1B,YAAY,EAAE,mBAAmB,CAAC;KACnC,GAAG,OAAO,CAAC,+BAA+B,GAAG,SAAS,CAAC;CAoCzD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
import { HostingEnvironment } from '../../hosting-environment.js';
|
|
3
|
+
import { PayPalButtonDataSource, } from './paypal-button-datasource.js';
|
|
4
|
+
export class PayPalHandler {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.braintreeManager = options.braintreeManager;
|
|
7
|
+
this.paypalClient = options.paypalClient;
|
|
8
|
+
this.paypalButtonGenerator = options.paypalButton;
|
|
9
|
+
this.hostingEnvironment = options.hostingEnvironment;
|
|
10
|
+
this.instance = new PromisedSingleton({
|
|
11
|
+
generator: async () => {
|
|
12
|
+
const braintreeClient = await this.braintreeManager.instance.get();
|
|
13
|
+
return this.paypalClient.create({ client: braintreeClient });
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async renderPayPalButton(params) {
|
|
18
|
+
const env = (this.hostingEnvironment === HostingEnvironment.Development
|
|
19
|
+
? 'sandbox'
|
|
20
|
+
: 'production');
|
|
21
|
+
const paypalInstance = await this.instance.get();
|
|
22
|
+
if (!paypalInstance) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const dataSource = new PayPalButtonDataSource({
|
|
26
|
+
donationInfo: params.donationInfo,
|
|
27
|
+
paypalInstance,
|
|
28
|
+
});
|
|
29
|
+
// Venmo has its own button, so keep it out of the PayPal one. The
|
|
30
|
+
// funding constants come from the PayPal script once it has loaded.
|
|
31
|
+
const venmoFunding = window.paypal?.FUNDING?.VENMO;
|
|
32
|
+
this.paypalButtonGenerator.render({
|
|
33
|
+
env,
|
|
34
|
+
style: params.style,
|
|
35
|
+
payment: dataSource.payment.bind(dataSource),
|
|
36
|
+
onAuthorize: dataSource.onAuthorize.bind(dataSource),
|
|
37
|
+
onCancel: dataSource.onCancel.bind(dataSource),
|
|
38
|
+
onError: dataSource.onError.bind(dataSource),
|
|
39
|
+
funding: venmoFunding ? { disallowed: [venmoFunding] } : undefined,
|
|
40
|
+
}, params.selector);
|
|
41
|
+
return dataSource;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=paypal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paypal.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAIxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,sBAAsB,GAEvB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,OAAO,aAAa;IAGxB,YAAY,OAKX;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAErD,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CACnC;YACE,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACnE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;YAC/D,CAAC;SACF,CACF,CAAC;IACJ,CAAC;IAUD,KAAK,CAAC,kBAAkB,CAAC,MAIxB;QACC,MAAM,GAAG,GAAG,CACV,IAAI,CAAC,kBAAkB,KAAK,kBAAkB,CAAC,WAAW;YACxD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,YAAY,CACK,CAAC;QAExB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,sBAAsB,CAAC;YAC5C,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,cAAc;SACf,CAAC,CAAC;QAEH,kEAAkE;QAClE,oEAAoE;QACpE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QAEnD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAC/B;YACE,GAAG;YACH,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;YACpD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9C,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SACnE,EACD,MAAM,CAAC,QAAQ,CAChB,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC;CACF","sourcesContent":["import type * as braintree from 'braintree-web';\nimport type * as paypal from 'paypal-checkout-components';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nimport type { DonationPaymentInfo } from '../../../models/donation-payment-info';\nimport type { BraintreeManagerInterface } from '../../braintree-manager-interface';\nimport { HostingEnvironment } from '../../hosting-environment';\nimport {\n PayPalButtonDataSource,\n type PayPalButtonDataSourceInterface,\n} from './paypal-button-datasource';\nimport type { PayPalHandlerInterface } from './paypal-interface';\n\nexport class PayPalHandler implements PayPalHandlerInterface {\n instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n paypalClient: typeof braintree.paypalCheckout;\n paypalButton: paypal.ButtonRenderer;\n hostingEnvironment: HostingEnvironment;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.paypalClient = options.paypalClient;\n this.paypalButtonGenerator = options.paypalButton;\n this.hostingEnvironment = options.hostingEnvironment;\n\n this.instance = new PromisedSingleton<braintree.PayPalCheckout | undefined>(\n {\n generator: async () => {\n const braintreeClient = await this.braintreeManager.instance.get();\n return this.paypalClient.create({ client: braintreeClient });\n },\n },\n );\n }\n\n private braintreeManager: BraintreeManagerInterface;\n\n private paypalClient: typeof braintree.paypalCheckout;\n\n private paypalButtonGenerator: paypal.ButtonRenderer;\n\n private hostingEnvironment: HostingEnvironment;\n\n async renderPayPalButton(params: {\n selector: string;\n style: paypal.ButtonStyle;\n donationInfo: DonationPaymentInfo;\n }): Promise<PayPalButtonDataSourceInterface | undefined> {\n const env = (\n this.hostingEnvironment === HostingEnvironment.Development\n ? 'sandbox'\n : 'production'\n ) as paypal.Environment;\n\n const paypalInstance = await this.instance.get();\n if (!paypalInstance) {\n return;\n }\n\n const dataSource = new PayPalButtonDataSource({\n donationInfo: params.donationInfo,\n paypalInstance,\n });\n\n // Venmo has its own button, so keep it out of the PayPal one. The\n // funding constants come from the PayPal script once it has loaded.\n const venmoFunding = window.paypal?.FUNDING?.VENMO;\n\n this.paypalButtonGenerator.render(\n {\n env,\n style: params.style,\n payment: dataSource.payment.bind(dataSource),\n onAuthorize: dataSource.onAuthorize.bind(dataSource),\n onCancel: dataSource.onCancel.bind(dataSource),\n onError: dataSource.onError.bind(dataSource),\n funding: venmoFunding ? { disallowed: [venmoFunding] } : undefined,\n },\n params.selector,\n );\n\n return dataSource;\n }\n}\n"]}
|
package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type * as braintree from 'braintree-web';
|
|
2
|
+
import type { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
3
|
+
export interface VenmoHandlerInterface {
|
|
4
|
+
instance: PromisedSingleton<braintree.Venmo>;
|
|
5
|
+
isBrowserSupported(): Promise<boolean>;
|
|
6
|
+
startPayment(): Promise<braintree.VenmoTokenizePayload>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=venmo-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venmo-interface.d.ts","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE7C,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;CACzD"}
|
package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venmo-interface.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type * as braintree from 'braintree-web';\nimport type { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nexport interface VenmoHandlerInterface {\n instance: PromisedSingleton<braintree.Venmo>;\n\n isBrowserSupported(): Promise<boolean>;\n startPayment(): Promise<braintree.VenmoTokenizePayload>;\n}\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { DonationPaymentInfo } from '../../../models/donation-payment-info.js';
|
|
2
|
+
import type { DonorContactInfo } from '../../../models/donor-contact-info.js';
|
|
3
|
+
export interface VenmoRestorationStateHandlerInterface {
|
|
4
|
+
/** Persist the session state */
|
|
5
|
+
persistState(contactInfo: DonorContactInfo, donationInfo: DonationPaymentInfo): void;
|
|
6
|
+
/** Get the session restoration state */
|
|
7
|
+
getRestorationState(): Promise<VenmoRestorationState | undefined>;
|
|
8
|
+
/** Clear the restoration state */
|
|
9
|
+
clearState(): void;
|
|
10
|
+
}
|
|
11
|
+
/** What gets stored while the donor is off in the Venmo app. */
|
|
12
|
+
export declare class VenmoRestorationState {
|
|
13
|
+
contactInfo: DonorContactInfo;
|
|
14
|
+
donationInfo: DonationPaymentInfo;
|
|
15
|
+
constructor(params: {
|
|
16
|
+
contactInfo: DonorContactInfo;
|
|
17
|
+
donationInfo: DonationPaymentInfo;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Persists and restores a Venmo checkout session.
|
|
22
|
+
*
|
|
23
|
+
* Venmo takes the donor out of the browser into its app to authorize the
|
|
24
|
+
* payment, then redirects back to the site, possibly in a new tab, which is
|
|
25
|
+
* effectively a new session. So the contact and donation info is written to
|
|
26
|
+
* storage when the Venmo flow starts and read back when it resumes.
|
|
27
|
+
*/
|
|
28
|
+
export declare class VenmoRestorationStateHandler implements VenmoRestorationStateHandlerInterface {
|
|
29
|
+
private persistenceKey;
|
|
30
|
+
private storageSystem?;
|
|
31
|
+
constructor(options?: {
|
|
32
|
+
storageSystem?: Storage;
|
|
33
|
+
});
|
|
34
|
+
clearState(): void;
|
|
35
|
+
persistState(contactInfo: DonorContactInfo, donationInfo: DonationPaymentInfo): void;
|
|
36
|
+
getRestorationState(): Promise<VenmoRestorationState | undefined>;
|
|
37
|
+
/**
|
|
38
|
+
* Resolves a storage system (localStorage or sessionStorage) and returns it
|
|
39
|
+
* if it can be written to. Some browsers (Safari private browsing) throw from
|
|
40
|
+
* reading the storage global itself, so the lookup happens inside the guard.
|
|
41
|
+
*/
|
|
42
|
+
private getAvailableStorageSystem;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=venmo-restoration-state-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venmo-restoration-state-handler.d.ts","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,MAAM,WAAW,qCAAqC;IACpD,gCAAgC;IAChC,YAAY,CACV,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,mBAAmB,GAChC,IAAI,CAAC;IAER,wCAAwC;IACxC,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IAElE,kCAAkC;IAClC,UAAU,IAAI,IAAI,CAAC;CACpB;AAED,gEAAgE;AAChE,qBAAa,qBAAqB;IAChC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,YAAY,EAAE,mBAAmB,CAAC;gBAEtB,MAAM,EAAE;QAClB,WAAW,EAAE,gBAAgB,CAAC;QAC9B,YAAY,EAAE,mBAAmB,CAAC;KACnC;CAIF;AAED;;;;;;;GAOG;AACH,qBAAa,4BACX,YAAW,qCAAqC;IAEhD,OAAO,CAAC,cAAc,CAA+B;IAErD,OAAO,CAAC,aAAa,CAAC,CAAU;gBAEpB,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE;IAOjD,UAAU,IAAI,IAAI;IAIlB,YAAY,CACV,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,mBAAmB,GAChC,IAAI;IASD,mBAAmB,IAAI,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAgBvE;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;CAYlC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** What gets stored while the donor is off in the Venmo app. */
|
|
2
|
+
export class VenmoRestorationState {
|
|
3
|
+
constructor(params) {
|
|
4
|
+
this.contactInfo = params.contactInfo;
|
|
5
|
+
this.donationInfo = params.donationInfo;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Persists and restores a Venmo checkout session.
|
|
10
|
+
*
|
|
11
|
+
* Venmo takes the donor out of the browser into its app to authorize the
|
|
12
|
+
* payment, then redirects back to the site, possibly in a new tab, which is
|
|
13
|
+
* effectively a new session. So the contact and donation info is written to
|
|
14
|
+
* storage when the Venmo flow starts and read back when it resumes.
|
|
15
|
+
*/
|
|
16
|
+
export class VenmoRestorationStateHandler {
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.persistenceKey = 'venmoRestorationStateInfo';
|
|
19
|
+
this.storageSystem =
|
|
20
|
+
options?.storageSystem ??
|
|
21
|
+
this.getAvailableStorageSystem(() => localStorage) ??
|
|
22
|
+
this.getAvailableStorageSystem(() => sessionStorage);
|
|
23
|
+
}
|
|
24
|
+
clearState() {
|
|
25
|
+
this.storageSystem?.removeItem(this.persistenceKey);
|
|
26
|
+
}
|
|
27
|
+
persistState(contactInfo, donationInfo) {
|
|
28
|
+
const venmoRestoration = new VenmoRestorationState({
|
|
29
|
+
contactInfo,
|
|
30
|
+
donationInfo,
|
|
31
|
+
});
|
|
32
|
+
const serialized = JSON.stringify(venmoRestoration);
|
|
33
|
+
this.storageSystem?.setItem(this.persistenceKey, serialized);
|
|
34
|
+
}
|
|
35
|
+
async getRestorationState() {
|
|
36
|
+
const stored = this.storageSystem?.getItem(this.persistenceKey);
|
|
37
|
+
if (!stored) {
|
|
38
|
+
console.error('restoreState: No stored data');
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
const deserialized = JSON.parse(stored);
|
|
42
|
+
if (!deserialized) {
|
|
43
|
+
console.error('restoreState: Data could not be deserialized');
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
return new VenmoRestorationState(deserialized);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolves a storage system (localStorage or sessionStorage) and returns it
|
|
50
|
+
* if it can be written to. Some browsers (Safari private browsing) throw from
|
|
51
|
+
* reading the storage global itself, so the lookup happens inside the guard.
|
|
52
|
+
*/
|
|
53
|
+
getAvailableStorageSystem(getSystem) {
|
|
54
|
+
try {
|
|
55
|
+
const system = getSystem();
|
|
56
|
+
system.setItem('foo', 'bar');
|
|
57
|
+
system.removeItem('foo');
|
|
58
|
+
return system;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=venmo-restoration-state-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venmo-restoration-state-handler.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.ts"],"names":[],"mappings":"AAiBA,gEAAgE;AAChE,MAAM,OAAO,qBAAqB;IAIhC,YAAY,MAGX;QACC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,4BAA4B;IAOvC,YAAY,OAAqC;QAJzC,mBAAc,GAAG,2BAA2B,CAAC;QAKnD,IAAI,CAAC,aAAa;YAChB,OAAO,EAAE,aAAa;gBACtB,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;gBAClD,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,UAAU;QACR,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;IAED,YAAY,CACV,WAA6B,EAC7B,YAAiC;QAEjC,MAAM,gBAAgB,GAAG,IAAI,qBAAqB,CAAC;YACjD,WAAW;YACX,YAAY;SACb,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACK,yBAAyB,CAC/B,SAAwB;QAExB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;CACF","sourcesContent":["import type { DonationPaymentInfo } from '../../../models/donation-payment-info';\nimport type { DonorContactInfo } from '../../../models/donor-contact-info';\n\nexport interface VenmoRestorationStateHandlerInterface {\n /** Persist the session state */\n persistState(\n contactInfo: DonorContactInfo,\n donationInfo: DonationPaymentInfo,\n ): void;\n\n /** Get the session restoration state */\n getRestorationState(): Promise<VenmoRestorationState | undefined>;\n\n /** Clear the restoration state */\n clearState(): void;\n}\n\n/** What gets stored while the donor is off in the Venmo app. */\nexport class VenmoRestorationState {\n contactInfo: DonorContactInfo;\n donationInfo: DonationPaymentInfo;\n\n constructor(params: {\n contactInfo: DonorContactInfo;\n donationInfo: DonationPaymentInfo;\n }) {\n this.contactInfo = params.contactInfo;\n this.donationInfo = params.donationInfo;\n }\n}\n\n/**\n * Persists and restores a Venmo checkout session.\n *\n * Venmo takes the donor out of the browser into its app to authorize the\n * payment, then redirects back to the site, possibly in a new tab, which is\n * effectively a new session. So the contact and donation info is written to\n * storage when the Venmo flow starts and read back when it resumes.\n */\nexport class VenmoRestorationStateHandler\n implements VenmoRestorationStateHandlerInterface\n{\n private persistenceKey = 'venmoRestorationStateInfo';\n\n private storageSystem?: Storage;\n\n constructor(options?: { storageSystem?: Storage }) {\n this.storageSystem =\n options?.storageSystem ??\n this.getAvailableStorageSystem(() => localStorage) ??\n this.getAvailableStorageSystem(() => sessionStorage);\n }\n\n clearState(): void {\n this.storageSystem?.removeItem(this.persistenceKey);\n }\n\n persistState(\n contactInfo: DonorContactInfo,\n donationInfo: DonationPaymentInfo,\n ): void {\n const venmoRestoration = new VenmoRestorationState({\n contactInfo,\n donationInfo,\n });\n const serialized = JSON.stringify(venmoRestoration);\n this.storageSystem?.setItem(this.persistenceKey, serialized);\n }\n\n async getRestorationState(): Promise<VenmoRestorationState | undefined> {\n const stored = this.storageSystem?.getItem(this.persistenceKey);\n if (!stored) {\n console.error('restoreState: No stored data');\n return undefined;\n }\n\n const deserialized = JSON.parse(stored);\n if (!deserialized) {\n console.error('restoreState: Data could not be deserialized');\n return undefined;\n }\n\n return new VenmoRestorationState(deserialized);\n }\n\n /**\n * Resolves a storage system (localStorage or sessionStorage) and returns it\n * if it can be written to. Some browsers (Safari private browsing) throw from\n * reading the storage global itself, so the lookup happens inside the guard.\n */\n private getAvailableStorageSystem(\n getSystem: () => Storage,\n ): Storage | undefined {\n try {\n const system = getSystem();\n system.setItem('foo', 'bar');\n system.removeItem('foo');\n return system;\n } catch {\n return undefined;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type * as braintree from 'braintree-web';
|
|
2
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
3
|
+
import type { BraintreeManagerInterface } from '../../braintree-manager-interface.js';
|
|
4
|
+
import type { VenmoHandlerInterface } from './venmo-interface.js';
|
|
5
|
+
export declare class VenmoHandler implements VenmoHandlerInterface {
|
|
6
|
+
instance: PromisedSingleton<braintree.Venmo>;
|
|
7
|
+
constructor(options: {
|
|
8
|
+
braintreeManager: BraintreeManagerInterface;
|
|
9
|
+
venmoClient: typeof braintree.venmo;
|
|
10
|
+
venmoProfileId: string;
|
|
11
|
+
instancePromisedSingleton?: PromisedSingleton<braintree.Venmo>;
|
|
12
|
+
});
|
|
13
|
+
private braintreeManager;
|
|
14
|
+
private venmoClient;
|
|
15
|
+
private venmoProfileId;
|
|
16
|
+
isBrowserSupported(): Promise<boolean>;
|
|
17
|
+
startPayment(): Promise<braintree.VenmoTokenizePayload>;
|
|
18
|
+
/**
|
|
19
|
+
* Venmo doesn't work in mobile Firefox, but Braintree's browser detection
|
|
20
|
+
* says it does. On iOS it opens the Venmo app and returns to Safari, and on
|
|
21
|
+
* Android it lands on the "Download Venmo" page.
|
|
22
|
+
*/
|
|
23
|
+
private isMobileFirefox;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=venmo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"venmo.d.ts","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,qBAAa,YAAa,YAAW,qBAAqB;IACxD,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAEjC,OAAO,EAAE;QACnB,gBAAgB,EAAE,yBAAyB,CAAC;QAC5C,WAAW,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC;QACpC,cAAc,EAAE,MAAM,CAAC;QACvB,yBAAyB,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAChE;IAkBD,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,WAAW,CAAyB;IAE5C,OAAO,CAAC,cAAc,CAAS;IAEzB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAQtC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC;IAK7D;;;;OAIG;IACH,OAAO,CAAC,eAAe;CAMxB"}
|