@internetarchive/donation-form 1.0.2 → 1.0.3-alpha-webdev7960.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/LICENSE +661 -661
- package/README.md +115 -115
- package/dist/demo/braintree-endpoint-manager.js.map +1 -1
- package/dist/demo/demo-analytics-handler.js.map +1 -1
- package/dist/demo/submit-form-with.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/braintree-manager/braintree-interfaces.js.map +1 -1
- package/dist/src/braintree-manager/braintree-manager.js.map +1 -1
- package/dist/src/braintree-manager/payment-clients.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/google-pay-interface.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/google-pay.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/venmo-interface.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/venmo.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers-interface.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers.js.map +1 -1
- package/dist/src/donation-form-controller.js +123 -123
- package/dist/src/donation-form-controller.js.map +1 -1
- package/dist/src/donation-form-error.js.map +1 -1
- package/dist/src/donation-form.js +107 -107
- package/dist/src/donation-form.js.map +1 -1
- package/dist/src/form-elements/badged-input.js +47 -47
- package/dist/src/form-elements/badged-input.js.map +1 -1
- package/dist/src/form-elements/contact-form/autocomplete-field-options.js.map +1 -1
- package/dist/src/form-elements/contact-form/contact-form.js +157 -157
- package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
- package/dist/src/form-elements/contact-form/countries.js.map +1 -1
- package/dist/src/form-elements/header/donation-form-header.js +14 -14
- package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
- package/dist/src/form-elements/header/donation-summary.js +15 -15
- package/dist/src/form-elements/header/donation-summary.js.map +1 -1
- package/dist/src/form-elements/payment-selector.js +164 -164
- package/dist/src/form-elements/payment-selector.js.map +1 -1
- package/dist/src/form-elements/total-amount.js +16 -16
- package/dist/src/form-elements/total-amount.js.map +1 -1
- package/dist/src/modals/confirm-donation-modal-content.js +51 -51
- package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
- package/dist/src/modals/error-modal-content.js +22 -22
- package/dist/src/modals/error-modal-content.js.map +1 -1
- package/dist/src/modals/upsell-modal-content.js +182 -182
- package/dist/src/modals/upsell-modal-content.js.map +1 -1
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +20 -20
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
- package/dist/src/recaptcha-manager/recaptcha-manager.js.map +1 -1
- package/dist/src/util/promisedSleep.js.map +1 -1
- package/dist/test/helpers/fillInContactForm.js.map +1 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js.map +1 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js.map +1 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js.map +1 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js.map +1 -1
- package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
- package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
- package/dist/test/mocks/mock-donation-info.js.map +1 -1
- package/dist/test/mocks/mock-endpoint-manager.js.map +1 -1
- package/dist/test/mocks/mock-hosted-fields-config.js.map +1 -1
- package/dist/test/mocks/mock-hosted-fields-container.js.map +1 -1
- package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
- package/dist/test/mocks/mock-modal-manager.js.map +1 -1
- package/dist/test/mocks/mock-payment-clients.js.map +1 -1
- package/dist/test/mocks/mock-paypal-button-renderer.js.map +1 -1
- package/dist/test/mocks/mock-recaptcha-manager.js.map +1 -1
- package/dist/test/mocks/models/mock-billing-info.js.map +1 -1
- package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
- package/dist/test/mocks/models/mock-customer-info.js.map +1 -1
- package/dist/test/mocks/models/mock-donation-request.js.map +1 -1
- package/dist/test/mocks/models/mock-success-response.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-payment.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-braintree-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-googlepay-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-paypal-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-paypal-library.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js.map +1 -1
- package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
- package/dist/test/tests/braintree-manager.test.js.map +1 -1
- package/dist/test/tests/donation-form-controller.test.js +39 -39
- package/dist/test/tests/donation-form-controller.test.js.map +1 -1
- package/dist/test/tests/donation-form.test.js +4 -4
- package/dist/test/tests/donation-form.test.js.map +1 -1
- package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +14 -14
- package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
- package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
- package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
- package/dist/test/tests/modals/error-modal-content.test.js +2 -2
- package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
- package/dist/test/tests/modals/upsell-modal-content.test.js +31 -31
- package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
- package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
- package/dist/test/tests/payment-clients.test.js.map +1 -1
- package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
- package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js.map +1 -1
- package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
- package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
- package/dist/test/tests/payment-providers/googlepay.test.js.map +1 -1
- package/dist/test/tests/payment-providers/payment-providers.test.js.map +1 -1
- package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
- package/dist/test/tests/payment-providers/paypal.test.js.map +1 -1
- package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
- package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
- package/package.json +107 -107
- package/src/@types/analytics-handler/index.d.ts +8 -8
- package/src/@types/braintree-web/LICENSE +21 -21
- package/src/@types/braintree-web/index.d.ts +93 -93
- package/src/@types/braintree-web/modules/american-express.d.ts +50 -50
- package/src/@types/braintree-web/modules/apple-pay.d.ts +213 -213
- package/src/@types/braintree-web/modules/client.d.ts +103 -103
- package/src/@types/braintree-web/modules/core.d.ts +34 -34
- package/src/@types/braintree-web/modules/data-collector.d.ts +13 -13
- package/src/@types/braintree-web/modules/google-payment.d.ts +269 -269
- package/src/@types/braintree-web/modules/hosted-fields.d.ts +366 -366
- package/src/@types/braintree-web/modules/paypal-checkout.d.ts +262 -262
- package/src/@types/braintree-web/modules/paypal.d.ts +177 -177
- package/src/@types/braintree-web/modules/three-d-secure.d.ts +141 -141
- package/src/@types/braintree-web/modules/unionpay.d.ts +224 -224
- package/src/@types/braintree-web/modules/us-bank-account.d.ts +81 -81
- package/src/@types/braintree-web/modules/venmo.d.ts +110 -110
- package/src/@types/braintree-web/package.json +64 -64
- package/src/@types/paypal-checkout-components/LICENSE +21 -21
- package/src/@types/paypal-checkout-components/index.d.ts +67 -67
- package/src/@types/paypal-checkout-components/modules/button.d.ts +50 -50
- package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +244 -244
- package/src/@types/paypal-checkout-components/modules/configuration.d.ts +114 -114
- package/src/@types/paypal-checkout-components/package.json +58 -58
- package/src/braintree-manager/braintree-interfaces.ts +172 -172
- package/src/braintree-manager/braintree-manager.ts +281 -281
- package/src/braintree-manager/payment-clients.ts +146 -146
- package/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts +13 -13
- package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts +8 -8
- package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts +10 -10
- package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts +119 -119
- package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts +21 -21
- package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +97 -97
- package/src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts +21 -21
- package/src/braintree-manager/payment-providers/credit-card/credit-card.ts +130 -130
- package/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts +19 -19
- package/src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts +85 -85
- package/src/braintree-manager/payment-providers/google-pay-interface.ts +8 -8
- package/src/braintree-manager/payment-providers/google-pay.ts +59 -59
- package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +218 -218
- package/src/braintree-manager/payment-providers/paypal/paypal-interface.ts +13 -13
- package/src/braintree-manager/payment-providers/paypal/paypal.ts +78 -78
- package/src/braintree-manager/payment-providers/venmo-interface.ts +8 -8
- package/src/braintree-manager/payment-providers/venmo.ts +67 -67
- package/src/braintree-manager/payment-providers-interface.ts +25 -25
- package/src/braintree-manager/payment-providers.ts +147 -147
- package/src/donation-form-controller.ts +623 -623
- package/src/donation-form-error.ts +6 -6
- package/src/donation-form.ts +576 -576
- package/src/form-elements/badged-input.ts +109 -109
- package/src/form-elements/contact-form/autocomplete-field-options.ts +63 -63
- package/src/form-elements/contact-form/contact-form.ts +434 -434
- package/src/form-elements/contact-form/countries.ts +252 -252
- package/src/form-elements/header/donation-form-header.ts +98 -98
- package/src/form-elements/header/donation-summary.ts +61 -61
- package/src/form-elements/payment-selector.ts +365 -365
- package/src/form-elements/total-amount.ts +46 -46
- package/src/modals/confirm-donation-modal-content.ts +168 -168
- package/src/modals/error-modal-content.ts +48 -48
- package/src/modals/upsell-modal-content.ts +284 -284
- package/src/payment-flow-handlers/donation-flow-modal-manager.ts +439 -439
- package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +109 -109
- package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +232 -232
- package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +111 -111
- package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +331 -331
- package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +119 -119
- package/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.ts +127 -127
- package/src/payment-flow-handlers/payment-flow-handlers.ts +218 -218
- package/src/recaptcha-manager/recaptcha-manager.ts +123 -123
- package/src/util/promisedSleep.ts +3 -3
- package/dist/demo/app-root.d.ts +0 -0
- package/dist/demo/app-root.js +0 -2
- package/dist/demo/app-root.js.map +0 -1
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';
|
|
2
|
-
|
|
3
|
-
import currency from 'currency.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* PayPayButtonDataSource is responsible for communicating with the PayPal button.
|
|
7
|
-
*
|
|
8
|
-
* The PayPal button cannot live in the ShadowDOM so we have to instantiate it at the
|
|
9
|
-
* top of the DOM and it lives in the global sphere. This makes it difficult to communicate
|
|
10
|
-
* with it directly. The PayPalButtonDataSource provides an object that we can pass around
|
|
11
|
-
* that hooks into all of the PayPal button's callbacks and provides callbacks to its
|
|
12
|
-
* delegate that is interested in the various events.
|
|
13
|
-
*
|
|
14
|
-
* @export
|
|
15
|
-
* @interface PayPalButtonDataSourceInterface
|
|
16
|
-
*/
|
|
17
|
-
export interface PayPalButtonDataSourceInterface {
|
|
18
|
-
/**
|
|
19
|
-
* The delegate to inform about button events
|
|
20
|
-
*
|
|
21
|
-
* @type {PayPalButtonDataSourceDelegate}
|
|
22
|
-
* @memberof PayPalButtonDataSourceInterface
|
|
23
|
-
*/
|
|
24
|
-
delegate?: PayPalButtonDataSourceDelegate;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* The Donation Info associated with this button.
|
|
28
|
-
*
|
|
29
|
-
* Since the user initiates the checkout flow from the button itself (not programatically by us),
|
|
30
|
-
* we need to have up-to-date donation information so whenever the user updates donation info
|
|
31
|
-
* from the form, we update this.
|
|
32
|
-
*
|
|
33
|
-
* @type {DonationPaymentInfo}
|
|
34
|
-
* @memberof PayPalButtonDataSourceInterface
|
|
35
|
-
*/
|
|
36
|
-
donationInfo: DonationPaymentInfo;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* The payment has been started by the user (they clicked the PayPal button)
|
|
40
|
-
*
|
|
41
|
-
* @returns {Promise<string>}
|
|
42
|
-
* @memberof PayPalButtonDataSourceInterface
|
|
43
|
-
*/
|
|
44
|
-
payment(): Promise<string>;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* The user has authorized the donation
|
|
48
|
-
*
|
|
49
|
-
* @param {paypal.AuthorizationData} data
|
|
50
|
-
* @param {object} actions
|
|
51
|
-
* @returns {(Promise<paypal.TokenizePayload | undefined>)}
|
|
52
|
-
* @memberof PayPalButtonDataSourceInterface
|
|
53
|
-
*/
|
|
54
|
-
onAuthorize(
|
|
55
|
-
data: paypal.AuthorizationData,
|
|
56
|
-
actions: object,
|
|
57
|
-
): Promise<paypal.TokenizePayload | undefined>;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* The user cancelled the donation
|
|
61
|
-
*
|
|
62
|
-
* @param {paypal.CancellationData} data
|
|
63
|
-
* @memberof PayPalButtonDataSourceInterface
|
|
64
|
-
*/
|
|
65
|
-
onCancel(data: paypal.CancellationData): void;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* An error occurred
|
|
69
|
-
*
|
|
70
|
-
* @param {string} error
|
|
71
|
-
* @memberof PayPalButtonDataSourceInterface
|
|
72
|
-
*/
|
|
73
|
-
onError(error: string): void;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* The PayPalButtonDataSourceDelegate is an interface for any object interested
|
|
78
|
-
* in events emitted by the paypal button.
|
|
79
|
-
*
|
|
80
|
-
* @export
|
|
81
|
-
* @interface PayPalButtonDataSourceDelegate
|
|
82
|
-
*/
|
|
83
|
-
export interface PayPalButtonDataSourceDelegate {
|
|
84
|
-
/**
|
|
85
|
-
* Payment has been started
|
|
86
|
-
*
|
|
87
|
-
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
88
|
-
* @param {object} options
|
|
89
|
-
* @returns {Promise<void>}
|
|
90
|
-
* @memberof PayPalButtonDataSourceDelegate
|
|
91
|
-
*/
|
|
92
|
-
payPalPaymentStarted(dataSource: PayPalButtonDataSourceInterface, options: object): Promise<void>;
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Payment has been authorized by patron and submits to PayPal
|
|
96
|
-
*
|
|
97
|
-
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
98
|
-
* @param {paypal.TokenizePayload} payload
|
|
99
|
-
* @returns {Promise<void>}
|
|
100
|
-
* @memberof PayPalButtonDataSourceDelegate
|
|
101
|
-
*/
|
|
102
|
-
payPalPaymentAuthorized(
|
|
103
|
-
dataSource: PayPalButtonDataSourceInterface,
|
|
104
|
-
payload: paypal.TokenizePayload,
|
|
105
|
-
): Promise<void>;
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Payment has been authorized
|
|
109
|
-
*
|
|
110
|
-
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
111
|
-
* @param {paypal.TokenizePayload} payload
|
|
112
|
-
* @returns {Promise<void>}
|
|
113
|
-
* @memberof PayPalButtonDataSourceDelegate
|
|
114
|
-
*/
|
|
115
|
-
payPalPaymentConfirmed(
|
|
116
|
-
dataSource: PayPalButtonDataSourceInterface,
|
|
117
|
-
payload: paypal.TokenizePayload,
|
|
118
|
-
): Promise<void>;
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Payment has been cancelled
|
|
122
|
-
*
|
|
123
|
-
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
124
|
-
* @param {object} data
|
|
125
|
-
* @returns {Promise<void>}
|
|
126
|
-
* @memberof PayPalButtonDataSourceDelegate
|
|
127
|
-
*/
|
|
128
|
-
payPalPaymentCancelled(dataSource: PayPalButtonDataSourceInterface, data: object): Promise<void>;
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* There was a payment error
|
|
132
|
-
*
|
|
133
|
-
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
134
|
-
* @param {string} error
|
|
135
|
-
* @returns {Promise<void>}
|
|
136
|
-
* @memberof PayPalButtonDataSourceDelegate
|
|
137
|
-
*/
|
|
138
|
-
payPalPaymentError(dataSource: PayPalButtonDataSourceInterface, error: string): Promise<void>;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/** @inheritdoc */
|
|
142
|
-
export class PayPalButtonDataSource implements PayPalButtonDataSourceInterface {
|
|
143
|
-
/** @inheritdoc */
|
|
144
|
-
delegate?: PayPalButtonDataSourceDelegate;
|
|
145
|
-
|
|
146
|
-
/** @inheritdoc */
|
|
147
|
-
donationInfo: DonationPaymentInfo;
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* The PayPal instance
|
|
151
|
-
*
|
|
152
|
-
* @private
|
|
153
|
-
* @type {braintree.PayPalCheckout}
|
|
154
|
-
* @memberof PayPalButtonDataSource
|
|
155
|
-
*/
|
|
156
|
-
private paypalInstance: braintree.PayPalCheckout;
|
|
157
|
-
|
|
158
|
-
constructor(options: {
|
|
159
|
-
donationInfo: DonationPaymentInfo;
|
|
160
|
-
paypalInstance: braintree.PayPalCheckout;
|
|
161
|
-
}) {
|
|
162
|
-
this.donationInfo = options.donationInfo;
|
|
163
|
-
this.paypalInstance = options.paypalInstance;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/** @inheritdoc */
|
|
167
|
-
async payment(): Promise<string> {
|
|
168
|
-
const donationType = this.donationInfo.donationType;
|
|
169
|
-
const flow = donationType === DonationType.OneTime ? 'checkout' : 'vault';
|
|
170
|
-
|
|
171
|
-
const options: braintree.PayPalCheckoutCreatePaymentOptions = {
|
|
172
|
-
flow: flow as paypal.FlowType,
|
|
173
|
-
intent: 'capture',
|
|
174
|
-
};
|
|
175
|
-
options.enableShippingAddress = true;
|
|
176
|
-
|
|
177
|
-
if (flow === 'checkout') {
|
|
178
|
-
options.amount = this.donationInfo.total;
|
|
179
|
-
options.currency = 'USD';
|
|
180
|
-
} else {
|
|
181
|
-
options.billingAgreementDescription = `Subscribe to donate ${currency(
|
|
182
|
-
this.donationInfo.total,
|
|
183
|
-
{ symbol: '$' },
|
|
184
|
-
).format()} monthly`;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
this.delegate?.payPalPaymentStarted(this, options);
|
|
188
|
-
|
|
189
|
-
return this.paypalInstance.createPayment(options);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/** @inheritdoc */
|
|
193
|
-
async onAuthorize(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {
|
|
194
|
-
const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);
|
|
195
|
-
|
|
196
|
-
this.delegate?.payPalPaymentAuthorized(this, payload);
|
|
197
|
-
|
|
198
|
-
return payload;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
async onConfirm(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {
|
|
202
|
-
const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);
|
|
203
|
-
this.delegate?.payPalPaymentConfirmed(this, payload);
|
|
204
|
-
|
|
205
|
-
return payload;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/** @inheritdoc */
|
|
209
|
-
onCancel(data: object): void {
|
|
210
|
-
this.delegate?.payPalPaymentCancelled(this, data);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/** @inheritdoc */
|
|
214
|
-
onError(error: string): void {
|
|
215
|
-
console.error('PayPal error', error);
|
|
216
|
-
this.delegate?.payPalPaymentError(this, error);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
1
|
+
import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';
|
|
2
|
+
|
|
3
|
+
import currency from 'currency.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* PayPayButtonDataSource is responsible for communicating with the PayPal button.
|
|
7
|
+
*
|
|
8
|
+
* The PayPal button cannot live in the ShadowDOM so we have to instantiate it at the
|
|
9
|
+
* top of the DOM and it lives in the global sphere. This makes it difficult to communicate
|
|
10
|
+
* with it directly. The PayPalButtonDataSource provides an object that we can pass around
|
|
11
|
+
* that hooks into all of the PayPal button's callbacks and provides callbacks to its
|
|
12
|
+
* delegate that is interested in the various events.
|
|
13
|
+
*
|
|
14
|
+
* @export
|
|
15
|
+
* @interface PayPalButtonDataSourceInterface
|
|
16
|
+
*/
|
|
17
|
+
export interface PayPalButtonDataSourceInterface {
|
|
18
|
+
/**
|
|
19
|
+
* The delegate to inform about button events
|
|
20
|
+
*
|
|
21
|
+
* @type {PayPalButtonDataSourceDelegate}
|
|
22
|
+
* @memberof PayPalButtonDataSourceInterface
|
|
23
|
+
*/
|
|
24
|
+
delegate?: PayPalButtonDataSourceDelegate;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The Donation Info associated with this button.
|
|
28
|
+
*
|
|
29
|
+
* Since the user initiates the checkout flow from the button itself (not programatically by us),
|
|
30
|
+
* we need to have up-to-date donation information so whenever the user updates donation info
|
|
31
|
+
* from the form, we update this.
|
|
32
|
+
*
|
|
33
|
+
* @type {DonationPaymentInfo}
|
|
34
|
+
* @memberof PayPalButtonDataSourceInterface
|
|
35
|
+
*/
|
|
36
|
+
donationInfo: DonationPaymentInfo;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The payment has been started by the user (they clicked the PayPal button)
|
|
40
|
+
*
|
|
41
|
+
* @returns {Promise<string>}
|
|
42
|
+
* @memberof PayPalButtonDataSourceInterface
|
|
43
|
+
*/
|
|
44
|
+
payment(): Promise<string>;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The user has authorized the donation
|
|
48
|
+
*
|
|
49
|
+
* @param {paypal.AuthorizationData} data
|
|
50
|
+
* @param {object} actions
|
|
51
|
+
* @returns {(Promise<paypal.TokenizePayload | undefined>)}
|
|
52
|
+
* @memberof PayPalButtonDataSourceInterface
|
|
53
|
+
*/
|
|
54
|
+
onAuthorize(
|
|
55
|
+
data: paypal.AuthorizationData,
|
|
56
|
+
actions: object,
|
|
57
|
+
): Promise<paypal.TokenizePayload | undefined>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The user cancelled the donation
|
|
61
|
+
*
|
|
62
|
+
* @param {paypal.CancellationData} data
|
|
63
|
+
* @memberof PayPalButtonDataSourceInterface
|
|
64
|
+
*/
|
|
65
|
+
onCancel(data: paypal.CancellationData): void;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* An error occurred
|
|
69
|
+
*
|
|
70
|
+
* @param {string} error
|
|
71
|
+
* @memberof PayPalButtonDataSourceInterface
|
|
72
|
+
*/
|
|
73
|
+
onError(error: string): void;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The PayPalButtonDataSourceDelegate is an interface for any object interested
|
|
78
|
+
* in events emitted by the paypal button.
|
|
79
|
+
*
|
|
80
|
+
* @export
|
|
81
|
+
* @interface PayPalButtonDataSourceDelegate
|
|
82
|
+
*/
|
|
83
|
+
export interface PayPalButtonDataSourceDelegate {
|
|
84
|
+
/**
|
|
85
|
+
* Payment has been started
|
|
86
|
+
*
|
|
87
|
+
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
88
|
+
* @param {object} options
|
|
89
|
+
* @returns {Promise<void>}
|
|
90
|
+
* @memberof PayPalButtonDataSourceDelegate
|
|
91
|
+
*/
|
|
92
|
+
payPalPaymentStarted(dataSource: PayPalButtonDataSourceInterface, options: object): Promise<void>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Payment has been authorized by patron and submits to PayPal
|
|
96
|
+
*
|
|
97
|
+
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
98
|
+
* @param {paypal.TokenizePayload} payload
|
|
99
|
+
* @returns {Promise<void>}
|
|
100
|
+
* @memberof PayPalButtonDataSourceDelegate
|
|
101
|
+
*/
|
|
102
|
+
payPalPaymentAuthorized(
|
|
103
|
+
dataSource: PayPalButtonDataSourceInterface,
|
|
104
|
+
payload: paypal.TokenizePayload,
|
|
105
|
+
): Promise<void>;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Payment has been authorized
|
|
109
|
+
*
|
|
110
|
+
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
111
|
+
* @param {paypal.TokenizePayload} payload
|
|
112
|
+
* @returns {Promise<void>}
|
|
113
|
+
* @memberof PayPalButtonDataSourceDelegate
|
|
114
|
+
*/
|
|
115
|
+
payPalPaymentConfirmed(
|
|
116
|
+
dataSource: PayPalButtonDataSourceInterface,
|
|
117
|
+
payload: paypal.TokenizePayload,
|
|
118
|
+
): Promise<void>;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Payment has been cancelled
|
|
122
|
+
*
|
|
123
|
+
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
124
|
+
* @param {object} data
|
|
125
|
+
* @returns {Promise<void>}
|
|
126
|
+
* @memberof PayPalButtonDataSourceDelegate
|
|
127
|
+
*/
|
|
128
|
+
payPalPaymentCancelled(dataSource: PayPalButtonDataSourceInterface, data: object): Promise<void>;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* There was a payment error
|
|
132
|
+
*
|
|
133
|
+
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
134
|
+
* @param {string} error
|
|
135
|
+
* @returns {Promise<void>}
|
|
136
|
+
* @memberof PayPalButtonDataSourceDelegate
|
|
137
|
+
*/
|
|
138
|
+
payPalPaymentError(dataSource: PayPalButtonDataSourceInterface, error: string): Promise<void>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** @inheritdoc */
|
|
142
|
+
export class PayPalButtonDataSource implements PayPalButtonDataSourceInterface {
|
|
143
|
+
/** @inheritdoc */
|
|
144
|
+
delegate?: PayPalButtonDataSourceDelegate;
|
|
145
|
+
|
|
146
|
+
/** @inheritdoc */
|
|
147
|
+
donationInfo: DonationPaymentInfo;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* The PayPal instance
|
|
151
|
+
*
|
|
152
|
+
* @private
|
|
153
|
+
* @type {braintree.PayPalCheckout}
|
|
154
|
+
* @memberof PayPalButtonDataSource
|
|
155
|
+
*/
|
|
156
|
+
private paypalInstance: braintree.PayPalCheckout;
|
|
157
|
+
|
|
158
|
+
constructor(options: {
|
|
159
|
+
donationInfo: DonationPaymentInfo;
|
|
160
|
+
paypalInstance: braintree.PayPalCheckout;
|
|
161
|
+
}) {
|
|
162
|
+
this.donationInfo = options.donationInfo;
|
|
163
|
+
this.paypalInstance = options.paypalInstance;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** @inheritdoc */
|
|
167
|
+
async payment(): Promise<string> {
|
|
168
|
+
const donationType = this.donationInfo.donationType;
|
|
169
|
+
const flow = donationType === DonationType.OneTime ? 'checkout' : 'vault';
|
|
170
|
+
|
|
171
|
+
const options: braintree.PayPalCheckoutCreatePaymentOptions = {
|
|
172
|
+
flow: flow as paypal.FlowType,
|
|
173
|
+
intent: 'capture',
|
|
174
|
+
};
|
|
175
|
+
options.enableShippingAddress = true;
|
|
176
|
+
|
|
177
|
+
if (flow === 'checkout') {
|
|
178
|
+
options.amount = this.donationInfo.total;
|
|
179
|
+
options.currency = 'USD';
|
|
180
|
+
} else {
|
|
181
|
+
options.billingAgreementDescription = `Subscribe to donate ${currency(
|
|
182
|
+
this.donationInfo.total,
|
|
183
|
+
{ symbol: '$' },
|
|
184
|
+
).format()} monthly`;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
this.delegate?.payPalPaymentStarted(this, options);
|
|
188
|
+
|
|
189
|
+
return this.paypalInstance.createPayment(options);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** @inheritdoc */
|
|
193
|
+
async onAuthorize(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {
|
|
194
|
+
const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);
|
|
195
|
+
|
|
196
|
+
this.delegate?.payPalPaymentAuthorized(this, payload);
|
|
197
|
+
|
|
198
|
+
return payload;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
async onConfirm(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {
|
|
202
|
+
const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);
|
|
203
|
+
this.delegate?.payPalPaymentConfirmed(this, payload);
|
|
204
|
+
|
|
205
|
+
return payload;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** @inheritdoc */
|
|
209
|
+
onCancel(data: object): void {
|
|
210
|
+
this.delegate?.payPalPaymentCancelled(this, data);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** @inheritdoc */
|
|
214
|
+
onError(error: string): void {
|
|
215
|
+
console.error('PayPal error', error);
|
|
216
|
+
this.delegate?.payPalPaymentError(this, error);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
-
import { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';
|
|
3
|
-
import { PayPalButtonDataSourceInterface } from './paypal-button-datasource';
|
|
4
|
-
|
|
5
|
-
export interface PayPalHandlerInterface {
|
|
6
|
-
instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;
|
|
7
|
-
|
|
8
|
-
renderPayPalButton(params: {
|
|
9
|
-
selector: string;
|
|
10
|
-
style: paypal.ButtonStyle;
|
|
11
|
-
donationInfo: DonationPaymentInfo;
|
|
12
|
-
}): Promise<PayPalButtonDataSourceInterface | undefined>;
|
|
13
|
-
}
|
|
1
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
import { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';
|
|
3
|
+
import { PayPalButtonDataSourceInterface } from './paypal-button-datasource';
|
|
4
|
+
|
|
5
|
+
export interface PayPalHandlerInterface {
|
|
6
|
+
instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;
|
|
7
|
+
|
|
8
|
+
renderPayPalButton(params: {
|
|
9
|
+
selector: string;
|
|
10
|
+
style: paypal.ButtonStyle;
|
|
11
|
+
donationInfo: DonationPaymentInfo;
|
|
12
|
+
}): Promise<PayPalButtonDataSourceInterface | undefined>;
|
|
13
|
+
}
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
-
import { BraintreeManagerInterface, HostingEnvironment } from '../../braintree-interfaces';
|
|
3
|
-
import { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';
|
|
4
|
-
import {
|
|
5
|
-
PayPalButtonDataSourceInterface,
|
|
6
|
-
PayPalButtonDataSource,
|
|
7
|
-
} from './paypal-button-datasource';
|
|
8
|
-
import { PayPalHandlerInterface } from './paypal-interface';
|
|
9
|
-
|
|
10
|
-
export class PayPalHandler implements PayPalHandlerInterface {
|
|
11
|
-
instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;
|
|
12
|
-
|
|
13
|
-
constructor(options: {
|
|
14
|
-
braintreeManager: BraintreeManagerInterface;
|
|
15
|
-
paypalClient: braintree.PayPalCheckout;
|
|
16
|
-
paypalButton: paypal.ButtonRenderer;
|
|
17
|
-
hostingEnvironment: HostingEnvironment;
|
|
18
|
-
}) {
|
|
19
|
-
this.braintreeManager = options.braintreeManager;
|
|
20
|
-
this.paypalClient = options.paypalClient;
|
|
21
|
-
this.paypalButtonGenerator = options.paypalButton;
|
|
22
|
-
this.hostingEnvironment = options.hostingEnvironment;
|
|
23
|
-
|
|
24
|
-
this.instance = new PromisedSingleton<braintree.PayPalCheckout | undefined>({
|
|
25
|
-
generator: (): Promise<braintree.PayPalCheckout> =>
|
|
26
|
-
this.braintreeManager.instance.get().then(braintreeClient => {
|
|
27
|
-
return this.paypalClient.create({
|
|
28
|
-
client: braintreeClient,
|
|
29
|
-
});
|
|
30
|
-
}),
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
private braintreeManager: BraintreeManagerInterface;
|
|
35
|
-
|
|
36
|
-
private paypalClient: braintree.PayPalCheckout;
|
|
37
|
-
|
|
38
|
-
private paypalButtonGenerator: paypal.ButtonRenderer;
|
|
39
|
-
|
|
40
|
-
private hostingEnvironment: HostingEnvironment;
|
|
41
|
-
|
|
42
|
-
async renderPayPalButton(params: {
|
|
43
|
-
selector: string;
|
|
44
|
-
style: paypal.ButtonStyle;
|
|
45
|
-
donationInfo: DonationPaymentInfo;
|
|
46
|
-
}): Promise<PayPalButtonDataSourceInterface | undefined> {
|
|
47
|
-
const env: paypal.Environment = (
|
|
48
|
-
this.hostingEnvironment === HostingEnvironment.Development ? 'sandbox' : 'production'
|
|
49
|
-
) as paypal.Environment;
|
|
50
|
-
|
|
51
|
-
const paypalInstance = await this.instance.get();
|
|
52
|
-
if (!paypalInstance) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const dataSource = new PayPalButtonDataSource({
|
|
57
|
-
donationInfo: params.donationInfo,
|
|
58
|
-
paypalInstance: paypalInstance,
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
this.paypalButtonGenerator.render(
|
|
62
|
-
{
|
|
63
|
-
env,
|
|
64
|
-
style: params.style,
|
|
65
|
-
payment: dataSource.payment.bind(dataSource),
|
|
66
|
-
onAuthorize: dataSource.onAuthorize.bind(dataSource),
|
|
67
|
-
onCancel: dataSource.onCancel.bind(dataSource),
|
|
68
|
-
onError: dataSource.onError.bind(dataSource),
|
|
69
|
-
funding: {
|
|
70
|
-
disallowed: [paypal.FUNDING.VENMO],
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
params.selector,
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
return dataSource;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
1
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
import { BraintreeManagerInterface, HostingEnvironment } from '../../braintree-interfaces';
|
|
3
|
+
import { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';
|
|
4
|
+
import {
|
|
5
|
+
PayPalButtonDataSourceInterface,
|
|
6
|
+
PayPalButtonDataSource,
|
|
7
|
+
} from './paypal-button-datasource';
|
|
8
|
+
import { PayPalHandlerInterface } from './paypal-interface';
|
|
9
|
+
|
|
10
|
+
export class PayPalHandler implements PayPalHandlerInterface {
|
|
11
|
+
instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;
|
|
12
|
+
|
|
13
|
+
constructor(options: {
|
|
14
|
+
braintreeManager: BraintreeManagerInterface;
|
|
15
|
+
paypalClient: braintree.PayPalCheckout;
|
|
16
|
+
paypalButton: paypal.ButtonRenderer;
|
|
17
|
+
hostingEnvironment: HostingEnvironment;
|
|
18
|
+
}) {
|
|
19
|
+
this.braintreeManager = options.braintreeManager;
|
|
20
|
+
this.paypalClient = options.paypalClient;
|
|
21
|
+
this.paypalButtonGenerator = options.paypalButton;
|
|
22
|
+
this.hostingEnvironment = options.hostingEnvironment;
|
|
23
|
+
|
|
24
|
+
this.instance = new PromisedSingleton<braintree.PayPalCheckout | undefined>({
|
|
25
|
+
generator: (): Promise<braintree.PayPalCheckout> =>
|
|
26
|
+
this.braintreeManager.instance.get().then(braintreeClient => {
|
|
27
|
+
return this.paypalClient.create({
|
|
28
|
+
client: braintreeClient,
|
|
29
|
+
});
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private braintreeManager: BraintreeManagerInterface;
|
|
35
|
+
|
|
36
|
+
private paypalClient: braintree.PayPalCheckout;
|
|
37
|
+
|
|
38
|
+
private paypalButtonGenerator: paypal.ButtonRenderer;
|
|
39
|
+
|
|
40
|
+
private hostingEnvironment: HostingEnvironment;
|
|
41
|
+
|
|
42
|
+
async renderPayPalButton(params: {
|
|
43
|
+
selector: string;
|
|
44
|
+
style: paypal.ButtonStyle;
|
|
45
|
+
donationInfo: DonationPaymentInfo;
|
|
46
|
+
}): Promise<PayPalButtonDataSourceInterface | undefined> {
|
|
47
|
+
const env: paypal.Environment = (
|
|
48
|
+
this.hostingEnvironment === HostingEnvironment.Development ? 'sandbox' : 'production'
|
|
49
|
+
) as paypal.Environment;
|
|
50
|
+
|
|
51
|
+
const paypalInstance = await this.instance.get();
|
|
52
|
+
if (!paypalInstance) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const dataSource = new PayPalButtonDataSource({
|
|
57
|
+
donationInfo: params.donationInfo,
|
|
58
|
+
paypalInstance: paypalInstance,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
this.paypalButtonGenerator.render(
|
|
62
|
+
{
|
|
63
|
+
env,
|
|
64
|
+
style: params.style,
|
|
65
|
+
payment: dataSource.payment.bind(dataSource),
|
|
66
|
+
onAuthorize: dataSource.onAuthorize.bind(dataSource),
|
|
67
|
+
onCancel: dataSource.onCancel.bind(dataSource),
|
|
68
|
+
onError: dataSource.onError.bind(dataSource),
|
|
69
|
+
funding: {
|
|
70
|
+
disallowed: [paypal.FUNDING.VENMO],
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
params.selector,
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
return dataSource;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
-
|
|
3
|
-
export interface VenmoHandlerInterface {
|
|
4
|
-
instance: PromisedSingleton<braintree.Venmo>;
|
|
5
|
-
|
|
6
|
-
isBrowserSupported(): Promise<boolean>;
|
|
7
|
-
startPayment(): Promise<braintree.VenmoTokenizePayload>;
|
|
8
|
-
}
|
|
1
|
+
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
2
|
+
|
|
3
|
+
export interface VenmoHandlerInterface {
|
|
4
|
+
instance: PromisedSingleton<braintree.Venmo>;
|
|
5
|
+
|
|
6
|
+
isBrowserSupported(): Promise<boolean>;
|
|
7
|
+
startPayment(): Promise<braintree.VenmoTokenizePayload>;
|
|
8
|
+
}
|