@internetarchive/donation-form 1.0.2 → 1.0.3-alpha-webdev7960.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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
package/README.md
CHANGED
|
@@ -1,115 +1,115 @@
|
|
|
1
|
-
# \<donation-form>
|
|
2
|
-
|
|
3
|
-
The Internet Archive Donation Form
|
|
4
|
-
|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
## Installation
|
|
8
|
-
```bash
|
|
9
|
-
yarn add @internetarchive/donation-form
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Usage
|
|
13
|
-
```html
|
|
14
|
-
<script type="module">
|
|
15
|
-
import '@internetarchive/donation-form';
|
|
16
|
-
import '@internetarchive/modal-manager';
|
|
17
|
-
// create an endpoint manager that conforms to `BraintreeEndpointManagerInterface`
|
|
18
|
-
import BraintreeEndpointManager from './braintree-endpoint-manager.js';
|
|
19
|
-
|
|
20
|
-
// instantiate the endpoint manager
|
|
21
|
-
const endpointManager = new BraintreeEndpointManager();
|
|
22
|
-
const formController = document.querySelector('donation-form-controller');
|
|
23
|
-
const modalManager = document.querySelector('modal-manager');
|
|
24
|
-
const recaptchaElement = document.querySelector('#recaptcha');
|
|
25
|
-
|
|
26
|
-
// pass in all of the dependencies to the <donation-form-controller>
|
|
27
|
-
formController.endpointManager = endpointManager;
|
|
28
|
-
formController.modalManager = modalManager;
|
|
29
|
-
formController.recaptchaElement = recaptchaElement;
|
|
30
|
-
formController.analyticsHandler = window.archive_analytics;
|
|
31
|
-
</script>
|
|
32
|
-
|
|
33
|
-
<!--
|
|
34
|
-
There's some environment-specific styling, depending on the host
|
|
35
|
-
layout and configuration
|
|
36
|
-
-->
|
|
37
|
-
<style>
|
|
38
|
-
donation-form-controller {
|
|
39
|
-
min-height: 362px;
|
|
40
|
-
display: block;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
body.modal-manager-open {
|
|
44
|
-
overflow: hidden;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
modal-manager {
|
|
48
|
-
display: none;
|
|
49
|
-
--modalBottomMargin: 10px;
|
|
50
|
-
--modalWidth: 320px;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
modal-manager[mode='open'] {
|
|
54
|
-
display: block;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
#recaptcha {
|
|
58
|
-
position: absolute;
|
|
59
|
-
z-index: 10;
|
|
60
|
-
}
|
|
61
|
-
</style>
|
|
62
|
-
|
|
63
|
-
<!--
|
|
64
|
-
The <donation-form-controller> orchestrates the interactions
|
|
65
|
-
between the donation-form itself and other dependencies like
|
|
66
|
-
the modal manager, recaptcha, and some clear DOM dependencies
|
|
67
|
-
like the PayPal button and Braintree hosted fields.
|
|
68
|
-
|
|
69
|
-
The <donation-form> component can be used independently of the
|
|
70
|
-
controller, but will need something to handle some of the interactions.
|
|
71
|
-
-->
|
|
72
|
-
<donation-form-controller
|
|
73
|
-
environment='dev/prod'
|
|
74
|
-
braintreeAuthToken='{braintree_auth_token}'
|
|
75
|
-
recaptchaSiteKey='{recaptcha_key}'
|
|
76
|
-
venmoProfileId='{venmo_profile_id}'
|
|
77
|
-
googlePayMerchantId='{google_merchant_id}'
|
|
78
|
-
referrer='{referrer}'
|
|
79
|
-
loggedInUser='{logged_in_user}'>
|
|
80
|
-
</donation-form-controller>
|
|
81
|
-
|
|
82
|
-
<div id="recaptcha"></div>
|
|
83
|
-
|
|
84
|
-
<modal-manager>
|
|
85
|
-
<!--
|
|
86
|
-
The PayPal button does not work in the shadow DOM so it
|
|
87
|
-
must be slotted in from the top.
|
|
88
|
-
-->
|
|
89
|
-
<div slot="paypal-upsell-button">
|
|
90
|
-
<div id="paypal-upsell-button"></div>
|
|
91
|
-
</div>
|
|
92
|
-
</modal-manager>
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
# Development
|
|
96
|
-
|
|
97
|
-
## Prerequisite
|
|
98
|
-
```bash
|
|
99
|
-
yarn install
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## Start Development Server
|
|
103
|
-
```bash
|
|
104
|
-
yarn run start
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Testing
|
|
108
|
-
```bash
|
|
109
|
-
yarn run test
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## Linting
|
|
113
|
-
```bash
|
|
114
|
-
yarn lint
|
|
115
|
-
```
|
|
1
|
+
# \<donation-form>
|
|
2
|
+
|
|
3
|
+
The Internet Archive Donation Form
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
```bash
|
|
9
|
+
yarn add @internetarchive/donation-form
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
```html
|
|
14
|
+
<script type="module">
|
|
15
|
+
import '@internetarchive/donation-form';
|
|
16
|
+
import '@internetarchive/modal-manager';
|
|
17
|
+
// create an endpoint manager that conforms to `BraintreeEndpointManagerInterface`
|
|
18
|
+
import BraintreeEndpointManager from './braintree-endpoint-manager.js';
|
|
19
|
+
|
|
20
|
+
// instantiate the endpoint manager
|
|
21
|
+
const endpointManager = new BraintreeEndpointManager();
|
|
22
|
+
const formController = document.querySelector('donation-form-controller');
|
|
23
|
+
const modalManager = document.querySelector('modal-manager');
|
|
24
|
+
const recaptchaElement = document.querySelector('#recaptcha');
|
|
25
|
+
|
|
26
|
+
// pass in all of the dependencies to the <donation-form-controller>
|
|
27
|
+
formController.endpointManager = endpointManager;
|
|
28
|
+
formController.modalManager = modalManager;
|
|
29
|
+
formController.recaptchaElement = recaptchaElement;
|
|
30
|
+
formController.analyticsHandler = window.archive_analytics;
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<!--
|
|
34
|
+
There's some environment-specific styling, depending on the host
|
|
35
|
+
layout and configuration
|
|
36
|
+
-->
|
|
37
|
+
<style>
|
|
38
|
+
donation-form-controller {
|
|
39
|
+
min-height: 362px;
|
|
40
|
+
display: block;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
body.modal-manager-open {
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
modal-manager {
|
|
48
|
+
display: none;
|
|
49
|
+
--modalBottomMargin: 10px;
|
|
50
|
+
--modalWidth: 320px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
modal-manager[mode='open'] {
|
|
54
|
+
display: block;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#recaptcha {
|
|
58
|
+
position: absolute;
|
|
59
|
+
z-index: 10;
|
|
60
|
+
}
|
|
61
|
+
</style>
|
|
62
|
+
|
|
63
|
+
<!--
|
|
64
|
+
The <donation-form-controller> orchestrates the interactions
|
|
65
|
+
between the donation-form itself and other dependencies like
|
|
66
|
+
the modal manager, recaptcha, and some clear DOM dependencies
|
|
67
|
+
like the PayPal button and Braintree hosted fields.
|
|
68
|
+
|
|
69
|
+
The <donation-form> component can be used independently of the
|
|
70
|
+
controller, but will need something to handle some of the interactions.
|
|
71
|
+
-->
|
|
72
|
+
<donation-form-controller
|
|
73
|
+
environment='dev/prod'
|
|
74
|
+
braintreeAuthToken='{braintree_auth_token}'
|
|
75
|
+
recaptchaSiteKey='{recaptcha_key}'
|
|
76
|
+
venmoProfileId='{venmo_profile_id}'
|
|
77
|
+
googlePayMerchantId='{google_merchant_id}'
|
|
78
|
+
referrer='{referrer}'
|
|
79
|
+
loggedInUser='{logged_in_user}'>
|
|
80
|
+
</donation-form-controller>
|
|
81
|
+
|
|
82
|
+
<div id="recaptcha"></div>
|
|
83
|
+
|
|
84
|
+
<modal-manager>
|
|
85
|
+
<!--
|
|
86
|
+
The PayPal button does not work in the shadow DOM so it
|
|
87
|
+
must be slotted in from the top.
|
|
88
|
+
-->
|
|
89
|
+
<div slot="paypal-upsell-button">
|
|
90
|
+
<div id="paypal-upsell-button"></div>
|
|
91
|
+
</div>
|
|
92
|
+
</modal-manager>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
# Development
|
|
96
|
+
|
|
97
|
+
## Prerequisite
|
|
98
|
+
```bash
|
|
99
|
+
yarn install
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Start Development Server
|
|
103
|
+
```bash
|
|
104
|
+
yarn run start
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Testing
|
|
108
|
+
```bash
|
|
109
|
+
yarn run test
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Linting
|
|
113
|
+
```bash
|
|
114
|
+
yarn lint
|
|
115
|
+
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braintree-endpoint-manager.js","sourceRoot":"","sources":["../../demo/braintree-endpoint-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,QAAQ,MAAM,aAAa,CAAC;AAUnC,MAAM,OAAO,wBAAwB;IAC7B,UAAU,CAAC,OAAwB;;YACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,mFAAmF,EACnF;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,MAAM,EAAE,kBAAkB;iBAC3B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CACF,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,kBAAkB,CAAC,OAGlB;QACC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;QACzC,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAErD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,OAAO,GAA0C;YACrD,MAAM,EAAE,GAAG,aAAa,EAAE;YAC1B,WAAW,EAAE,QAAQ,CAAC,cAAc;YACpC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY;YAClE,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;YACvC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ;YACrC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK;SAC/B,CAAC;QAEF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;YAC3C,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC;YACrD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YACnD,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,mBAAmB,EAAE,CAAC;YACpD,OAAO,CAAC,kBAAkB,CAAC,GAAG,cAAc,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAEpD,cAAc,CAAC;YACb,MAAM,EAAE,8DAA8D,OAAO,EAAE;YAC/E,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { submitFormWith } from './submit-form-with';\nimport currency from 'currency.js';\n\nimport {\n SuccessResponse,\n DonationRequest,\n DonationResponse,\n} from '@internetarchive/donation-form-data-models';\n\nimport { BraintreeEndpointManagerInterface } from '../index';\n\nexport class BraintreeEndpointManager implements BraintreeEndpointManagerInterface {\n async submitData(request: DonationRequest): Promise<DonationResponse> {\n const response = await fetch(\n 'https://ia-petabox.archive.org/services/donations/braintree-charge.php?debug=true',\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(request),\n },\n );\n const json = await response.json();\n return json;\n }\n\n donationSuccessful(options: {\n successResponse: SuccessResponse;\n upsellSuccessResponse?: SuccessResponse;\n }): void {\n const response = options.successResponse;\n const upsellResponse = options.upsellSuccessResponse;\n\n const displayAmount = currency(response.amount);\n\n const payload: { [key: string]: string | undefined } = {\n amount: `${displayAmount}`,\n 'charge-id': response.transaction_id,\n 'donation-type': upsellResponse ? 'upsell' : response.donationType,\n first_name: response.customer.firstName,\n last_name: response.customer.lastName,\n email: response.customer.email,\n };\n\n if (upsellResponse) {\n const upsellAmount = upsellResponse.amount;\n const upsellChargeId = upsellResponse.transaction_id;\n const displayUpsellAmount = currency(upsellAmount);\n payload['upsell-amount'] = `${displayUpsellAmount}`;\n payload['upsell-charge-id'] = upsellChargeId;\n }\n\n const service = encodeURI(response.paymentProvider);\n\n submitFormWith({\n action: `https://www-jasonb.archive.org/services/donate.php?service=${service}`,\n fields: payload,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"braintree-endpoint-manager.js","sourceRoot":"","sources":["../../demo/braintree-endpoint-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,QAAQ,MAAM,aAAa,CAAC;AAUnC,MAAM,OAAO,wBAAwB;IAC7B,UAAU,CAAC,OAAwB;;YACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,mFAAmF,EACnF;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,MAAM,EAAE,kBAAkB;iBAC3B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CACF,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,kBAAkB,CAAC,OAGlB;QACC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;QACzC,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAErD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,OAAO,GAA0C;YACrD,MAAM,EAAE,GAAG,aAAa,EAAE;YAC1B,WAAW,EAAE,QAAQ,CAAC,cAAc;YACpC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY;YAClE,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;YACvC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ;YACrC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK;SAC/B,CAAC;QAEF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;YAC3C,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC;YACrD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YACnD,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,mBAAmB,EAAE,CAAC;YACpD,OAAO,CAAC,kBAAkB,CAAC,GAAG,cAAc,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAEpD,cAAc,CAAC;YACb,MAAM,EAAE,8DAA8D,OAAO,EAAE;YAC/E,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { submitFormWith } from './submit-form-with';\r\nimport currency from 'currency.js';\r\n\r\nimport {\r\n SuccessResponse,\r\n DonationRequest,\r\n DonationResponse,\r\n} from '@internetarchive/donation-form-data-models';\r\n\r\nimport { BraintreeEndpointManagerInterface } from '../index';\r\n\r\nexport class BraintreeEndpointManager implements BraintreeEndpointManagerInterface {\r\n async submitData(request: DonationRequest): Promise<DonationResponse> {\r\n const response = await fetch(\r\n 'https://ia-petabox.archive.org/services/donations/braintree-charge.php?debug=true',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n },\r\n body: JSON.stringify(request),\r\n },\r\n );\r\n const json = await response.json();\r\n return json;\r\n }\r\n\r\n donationSuccessful(options: {\r\n successResponse: SuccessResponse;\r\n upsellSuccessResponse?: SuccessResponse;\r\n }): void {\r\n const response = options.successResponse;\r\n const upsellResponse = options.upsellSuccessResponse;\r\n\r\n const displayAmount = currency(response.amount);\r\n\r\n const payload: { [key: string]: string | undefined } = {\r\n amount: `${displayAmount}`,\r\n 'charge-id': response.transaction_id,\r\n 'donation-type': upsellResponse ? 'upsell' : response.donationType,\r\n first_name: response.customer.firstName,\r\n last_name: response.customer.lastName,\r\n email: response.customer.email,\r\n };\r\n\r\n if (upsellResponse) {\r\n const upsellAmount = upsellResponse.amount;\r\n const upsellChargeId = upsellResponse.transaction_id;\r\n const displayUpsellAmount = currency(upsellAmount);\r\n payload['upsell-amount'] = `${displayUpsellAmount}`;\r\n payload['upsell-charge-id'] = upsellChargeId;\r\n }\r\n\r\n const service = encodeURI(response.paymentProvider);\r\n\r\n submitFormWith({\r\n action: `https://www-jasonb.archive.org/services/donate.php?service=${service}`,\r\n fields: payload,\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo-analytics-handler.js","sourceRoot":"","sources":["../../demo/demo-analytics-handler.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAoB;IAG/B,SAAS,CAAC,OAKT;QACC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,aAAa,OAAO,CAAC,QAAQ,cAAc,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,KAAK,EAAE,CAAC;QACpH,OAAO,CAAC,KAAK,CACX,oCAAoC,oBAC/B,OAAO,GACZ,IAAI,CAAC,YAAY,CAAC,SAAS,CAC5B,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAKnB;QACC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,aAAa,OAAO,CAAC,QAAQ,cAAc,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,KAAK,EAAE,CAAC;QACpH,OAAO,CAAC,KAAK,CACX,8CAA8C,oBACzC,OAAO,GACZ,IAAI,CAAC,YAAY,CAAC,SAAS,CAC5B,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,MAA2B;QAClC,OAAO,CAAC,KAAK,CAAC,mCAAmC,oBAAO,MAAM,EAAG,CAAC;IACpE,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';\nexport class DemoAnalyticsHandler implements AnalyticsManagerInterface {\n nodeToUpdate!: HTMLElement;\n\n sendEvent(options: {\n category: string;\n action: string;\n label?: string;\n additionalEventParams?: object;\n }): void {\n this.nodeToUpdate.innerHTML = `Category: ${options.category} - Action: ${options.action} - Label: ${options.label}`;\n console.debug(\n 'DemoAnalyticsHandler -- sendEvent ',\n { ...options },\n this.nodeToUpdate.innerHTML,\n );\n }\n\n sendEventNoSampling(options: {\n category: string;\n action: string;\n label?: string;\n additionalEventParams?: object;\n }): void {\n this.nodeToUpdate.innerHTML = `Category: ${options.category} - Action: ${options.action} - Label: ${options.label}`;\n console.debug(\n 'DemoAnalyticsHandler -- sendEventNoSampling ',\n { ...options },\n this.nodeToUpdate.innerHTML,\n );\n }\n\n sendPing(values: Record<string, any>): void {\n console.debug('DemoAnalyticsHandler -- sendPing ', { ...values });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"demo-analytics-handler.js","sourceRoot":"","sources":["../../demo/demo-analytics-handler.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAoB;IAG/B,SAAS,CAAC,OAKT;QACC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,aAAa,OAAO,CAAC,QAAQ,cAAc,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,KAAK,EAAE,CAAC;QACpH,OAAO,CAAC,KAAK,CACX,oCAAoC,oBAC/B,OAAO,GACZ,IAAI,CAAC,YAAY,CAAC,SAAS,CAC5B,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAKnB;QACC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,aAAa,OAAO,CAAC,QAAQ,cAAc,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,KAAK,EAAE,CAAC;QACpH,OAAO,CAAC,KAAK,CACX,8CAA8C,oBACzC,OAAO,GACZ,IAAI,CAAC,YAAY,CAAC,SAAS,CAC5B,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,MAA2B;QAClC,OAAO,CAAC,KAAK,CAAC,mCAAmC,oBAAO,MAAM,EAAG,CAAC;IACpE,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';\r\nexport class DemoAnalyticsHandler implements AnalyticsManagerInterface {\r\n nodeToUpdate!: HTMLElement;\r\n\r\n sendEvent(options: {\r\n category: string;\r\n action: string;\r\n label?: string;\r\n additionalEventParams?: object;\r\n }): void {\r\n this.nodeToUpdate.innerHTML = `Category: ${options.category} - Action: ${options.action} - Label: ${options.label}`;\r\n console.debug(\r\n 'DemoAnalyticsHandler -- sendEvent ',\r\n { ...options },\r\n this.nodeToUpdate.innerHTML,\r\n );\r\n }\r\n\r\n sendEventNoSampling(options: {\r\n category: string;\r\n action: string;\r\n label?: string;\r\n additionalEventParams?: object;\r\n }): void {\r\n this.nodeToUpdate.innerHTML = `Category: ${options.category} - Action: ${options.action} - Label: ${options.label}`;\r\n console.debug(\r\n 'DemoAnalyticsHandler -- sendEventNoSampling ',\r\n { ...options },\r\n this.nodeToUpdate.innerHTML,\r\n );\r\n }\r\n\r\n sendPing(values: Record<string, any>): void {\r\n console.debug('DemoAnalyticsHandler -- sendPing ', { ...values });\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-form-with.js","sourceRoot":"","sources":["../../demo/submit-form-with.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,OAI9B;;IACC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAoB,CAAC;IAC/D,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,MAAM,CAAC;IACvC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAErB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;IAEpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAElB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,CAAC","sourcesContent":["export function submitFormWith(options: {\n method?: string;\n fields: { [key: string]: string | undefined };\n action: string;\n}): void {\n const form = document.createElement('form') as HTMLFormElement;\n form.method = options.method ?? 'POST';\n form.action = options.action;\n form.style.display = 'none';\n form.target = '_top';\n\n document.body.appendChild(form);\n\n const fields = options.fields ?? {};\n\n Object.keys(fields).forEach((name: string) => {\n const input = document.createElement('input');\n input.type = 'text';\n input.name = name;\n\n const value = fields[name];\n\n if (value) {\n input.value = value;\n }\n\n form.appendChild(input);\n });\n\n form.submit();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"submit-form-with.js","sourceRoot":"","sources":["../../demo/submit-form-with.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,OAI9B;;IACC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAoB,CAAC;IAC/D,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,MAAM,CAAC;IACvC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAErB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;IAEpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAElB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,CAAC","sourcesContent":["export function submitFormWith(options: {\r\n method?: string;\r\n fields: { [key: string]: string | undefined };\r\n action: string;\r\n}): void {\r\n const form = document.createElement('form') as HTMLFormElement;\r\n form.method = options.method ?? 'POST';\r\n form.action = options.action;\r\n form.style.display = 'none';\r\n form.target = '_top';\r\n\r\n document.body.appendChild(form);\r\n\r\n const fields = options.fields ?? {};\r\n\r\n Object.keys(fields).forEach((name: string) => {\r\n const input = document.createElement('input');\r\n input.type = 'text';\r\n input.name = name;\r\n\r\n const value = fields[name];\r\n\r\n if (value) {\r\n input.value = value;\r\n }\r\n\r\n form.appendChild(input);\r\n });\r\n\r\n form.submit();\r\n}\r\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,GACnB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,gBAAgB,GAEjB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,mBAAmB,GAEpB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,cAAc,EAA2B,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC","sourcesContent":["export {\n BraintreeManagerInterface,\n BraintreeEndpointManagerInterface,\n HostingEnvironment,\n} from './src/braintree-manager/braintree-interfaces';\n\nexport { DonationFormController } from './src/donation-form-controller';\nexport { DonationForm } from './src/donation-form';\nexport {\n RecaptchaManager,\n RecaptchaManagerInterface,\n} from './src/recaptcha-manager/recaptcha-manager';\nexport {\n PaymentFlowHandlers,\n PaymentFlowHandlersInterface,\n} from './src/payment-flow-handlers/payment-flow-handlers';\nexport { PaymentClients, PaymentClientsInterface } from './src/braintree-manager/payment-clients';\nexport { BraintreeManager } from './src/braintree-manager/braintree-manager';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,GACnB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,gBAAgB,GAEjB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,mBAAmB,GAEpB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,cAAc,EAA2B,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC","sourcesContent":["export {\r\n BraintreeManagerInterface,\r\n BraintreeEndpointManagerInterface,\r\n HostingEnvironment,\r\n} from './src/braintree-manager/braintree-interfaces';\r\n\r\nexport { DonationFormController } from './src/donation-form-controller';\r\nexport { DonationForm } from './src/donation-form';\r\nexport {\r\n RecaptchaManager,\r\n RecaptchaManagerInterface,\r\n} from './src/recaptcha-manager/recaptcha-manager';\r\nexport {\r\n PaymentFlowHandlers,\r\n PaymentFlowHandlersInterface,\r\n} from './src/payment-flow-handlers/payment-flow-handlers';\r\nexport { PaymentClients, PaymentClientsInterface } from './src/braintree-manager/payment-clients';\r\nexport { BraintreeManager } from './src/braintree-manager/braintree-manager';\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braintree-interfaces.js","sourceRoot":"","sources":["../../../src/braintree-manager/braintree-interfaces.ts"],"names":[],"mappings":"AAwKA,MAAM,CAAN,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,yCAAmB,CAAA;AACrB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,QAG7B","sourcesContent":["import {\n DonationRequest,\n DonationResponse,\n SuccessResponse,\n PaymentProvider,\n DonationPaymentInfo,\n CustomerInfo,\n BillingInfo,\n} from '@internetarchive/donation-form-data-models';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { Unsubscribe } from 'nanoevents';\nimport { PaymentProvidersInterface } from './payment-providers-interface';\n\nexport interface BraintreeManagerEvents {\n paymentProvidersHostedFieldsRetry: (retryNumber: number) => void;\n paymentProvidersHostedFieldsFailed: (error: unknown) => void;\n}\n\n/**\n * The BraintreeManager is the main entrypoint for much of the common braintree functionality.\n *\n * A single instance of it gets created and passed down through all of the components.\n *\n * @export\n * @interface BraintreeManagerInterface\n */\nexport interface BraintreeManagerInterface {\n on<E extends keyof BraintreeManagerEvents>(\n event: E,\n callback: BraintreeManagerEvents[E],\n ): Unsubscribe;\n\n /**\n * The PaymentProviders class contains the IA-specific handlers for each of the\n * different payment providers.\n *\n * They are generally data-focused, as opposed to UI-focused, but there\n * is some cross-polination between PaymentProviders and FlowHandlers.\n *\n * @type {PaymentProvidersInterface}\n * @memberof BraintreeManagerInterface\n */\n paymentProviders: PaymentProvidersInterface;\n\n /**\n * The Braintree Client instance.\n *\n * This gets used to isntantiate clients for all of the payment providers.\n *\n * @type {PromisedSingleton<braintree.Client>}\n * @memberof BraintreeManagerInterface\n */\n instance: PromisedSingleton<braintree.Client>;\n\n /**\n * Set the referrer for later submission\n *\n * @param {string} referrer\n * @memberof BraintreeManagerInterface\n */\n setReferrer(referrer: string): void;\n\n /**\n * Set the origin for later submission\n *\n * @param {string} origin\n * @memberof BraintreeManagerInterface\n */\n setOrigin(origin: string): void;\n\n /**\n * Set the logged-in user for later submission\n *\n * @param {string} loggedInUser\n * @memberof BraintreeManagerInterface\n */\n setLoggedInUser(loggedInUser: string): void;\n\n /**\n * Perform startup tasts like session resuming\n *\n * @memberof BraintreeManagerInterface\n */\n startup(): void;\n\n /**\n * Submit donation to the backend\n *\n * @param {{\n * nonce: string;\n * paymentProvider: PaymentProvider;\n * donationInfo: DonationPaymentInfo;\n * billingInfo: BillingInfo;\n * customerInfo: CustomerInfo;\n * upsellOnetimeTransactionId?: string;\n * customerId?: string;\n * recaptchaToken?: string;\n * bin?: string; // first 6 digits of CC\n * binName?: string; // credit card bank name\n * }} options\n * @returns {Promise<DonationResponse>}\n * @memberof BraintreeManagerInterface\n */\n submitDonation(options: {\n nonce: string;\n paymentProvider: PaymentProvider;\n donationInfo: DonationPaymentInfo;\n billingInfo: BillingInfo;\n customerInfo: CustomerInfo;\n upsellOnetimeTransactionId?: string;\n customerId?: string;\n recaptchaToken?: string;\n bin?: string; // first 6 digits of CC\n binName?: string; // credit card bank name\n }): Promise<DonationResponse>;\n\n /**\n * Submit the upsell donation\n *\n * @param {{\n * oneTimeDonationResponse: SuccessResponse;\n * amount: number;\n * }} options\n * @returns {Promise<DonationResponse>}\n * @memberof BraintreeManagerInterface\n */\n submitUpsellDonation(options: {\n oneTimeDonationResponse: SuccessResponse;\n amount: number;\n }): Promise<DonationResponse>;\n\n /**\n * Finish the donation after a successful completion.\n *\n * @param {{\n * successResponse: SuccessResponse;\n * upsellSuccessResponse?: SuccessResponse;\n * }} options\n * @memberof BraintreeManagerInterface\n */\n donationSuccessful(options: {\n successResponse: SuccessResponse;\n upsellSuccessResponse?: SuccessResponse;\n }): void;\n}\n\nexport interface BraintreeEndpointManagerInterface {\n /**\n * Responsible for submitting a data object to the backend\n * and returning a Promise of the JSON object response.\n *\n * @param {object} data\n * @returns {Promise<object>}\n * @memberof BraintreeEndpointManagerInterface\n */\n submitData(request: DonationRequest): Promise<DonationResponse>;\n\n /**\n * Once the user is finished with the donation flow, either after\n * a monthly donation or an upsell, we notify the endpoint manager\n * so it can redirect the user to the thank you page.\n */\n donationSuccessful(options: {\n successResponse: SuccessResponse;\n upsellSuccessResponse?: SuccessResponse;\n }): void;\n}\n\nexport enum HostingEnvironment {\n Development = 'dev',\n Production = 'prod',\n}\n"]}
|
|
1
|
+
{"version":3,"file":"braintree-interfaces.js","sourceRoot":"","sources":["../../../src/braintree-manager/braintree-interfaces.ts"],"names":[],"mappings":"AAwKA,MAAM,CAAN,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,yCAAmB,CAAA;AACrB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,QAG7B","sourcesContent":["import {\r\n DonationRequest,\r\n DonationResponse,\r\n SuccessResponse,\r\n PaymentProvider,\r\n DonationPaymentInfo,\r\n CustomerInfo,\r\n BillingInfo,\r\n} from '@internetarchive/donation-form-data-models';\r\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { Unsubscribe } from 'nanoevents';\r\nimport { PaymentProvidersInterface } from './payment-providers-interface';\r\n\r\nexport interface BraintreeManagerEvents {\r\n paymentProvidersHostedFieldsRetry: (retryNumber: number) => void;\r\n paymentProvidersHostedFieldsFailed: (error: unknown) => void;\r\n}\r\n\r\n/**\r\n * The BraintreeManager is the main entrypoint for much of the common braintree functionality.\r\n *\r\n * A single instance of it gets created and passed down through all of the components.\r\n *\r\n * @export\r\n * @interface BraintreeManagerInterface\r\n */\r\nexport interface BraintreeManagerInterface {\r\n on<E extends keyof BraintreeManagerEvents>(\r\n event: E,\r\n callback: BraintreeManagerEvents[E],\r\n ): Unsubscribe;\r\n\r\n /**\r\n * The PaymentProviders class contains the IA-specific handlers for each of the\r\n * different payment providers.\r\n *\r\n * They are generally data-focused, as opposed to UI-focused, but there\r\n * is some cross-polination between PaymentProviders and FlowHandlers.\r\n *\r\n * @type {PaymentProvidersInterface}\r\n * @memberof BraintreeManagerInterface\r\n */\r\n paymentProviders: PaymentProvidersInterface;\r\n\r\n /**\r\n * The Braintree Client instance.\r\n *\r\n * This gets used to isntantiate clients for all of the payment providers.\r\n *\r\n * @type {PromisedSingleton<braintree.Client>}\r\n * @memberof BraintreeManagerInterface\r\n */\r\n instance: PromisedSingleton<braintree.Client>;\r\n\r\n /**\r\n * Set the referrer for later submission\r\n *\r\n * @param {string} referrer\r\n * @memberof BraintreeManagerInterface\r\n */\r\n setReferrer(referrer: string): void;\r\n\r\n /**\r\n * Set the origin for later submission\r\n *\r\n * @param {string} origin\r\n * @memberof BraintreeManagerInterface\r\n */\r\n setOrigin(origin: string): void;\r\n\r\n /**\r\n * Set the logged-in user for later submission\r\n *\r\n * @param {string} loggedInUser\r\n * @memberof BraintreeManagerInterface\r\n */\r\n setLoggedInUser(loggedInUser: string): void;\r\n\r\n /**\r\n * Perform startup tasts like session resuming\r\n *\r\n * @memberof BraintreeManagerInterface\r\n */\r\n startup(): void;\r\n\r\n /**\r\n * Submit donation to the backend\r\n *\r\n * @param {{\r\n * nonce: string;\r\n * paymentProvider: PaymentProvider;\r\n * donationInfo: DonationPaymentInfo;\r\n * billingInfo: BillingInfo;\r\n * customerInfo: CustomerInfo;\r\n * upsellOnetimeTransactionId?: string;\r\n * customerId?: string;\r\n * recaptchaToken?: string;\r\n * bin?: string; // first 6 digits of CC\r\n * binName?: string; // credit card bank name\r\n * }} options\r\n * @returns {Promise<DonationResponse>}\r\n * @memberof BraintreeManagerInterface\r\n */\r\n submitDonation(options: {\r\n nonce: string;\r\n paymentProvider: PaymentProvider;\r\n donationInfo: DonationPaymentInfo;\r\n billingInfo: BillingInfo;\r\n customerInfo: CustomerInfo;\r\n upsellOnetimeTransactionId?: string;\r\n customerId?: string;\r\n recaptchaToken?: string;\r\n bin?: string; // first 6 digits of CC\r\n binName?: string; // credit card bank name\r\n }): Promise<DonationResponse>;\r\n\r\n /**\r\n * Submit the upsell donation\r\n *\r\n * @param {{\r\n * oneTimeDonationResponse: SuccessResponse;\r\n * amount: number;\r\n * }} options\r\n * @returns {Promise<DonationResponse>}\r\n * @memberof BraintreeManagerInterface\r\n */\r\n submitUpsellDonation(options: {\r\n oneTimeDonationResponse: SuccessResponse;\r\n amount: number;\r\n }): Promise<DonationResponse>;\r\n\r\n /**\r\n * Finish the donation after a successful completion.\r\n *\r\n * @param {{\r\n * successResponse: SuccessResponse;\r\n * upsellSuccessResponse?: SuccessResponse;\r\n * }} options\r\n * @memberof BraintreeManagerInterface\r\n */\r\n donationSuccessful(options: {\r\n successResponse: SuccessResponse;\r\n upsellSuccessResponse?: SuccessResponse;\r\n }): void;\r\n}\r\n\r\nexport interface BraintreeEndpointManagerInterface {\r\n /**\r\n * Responsible for submitting a data object to the backend\r\n * and returning a Promise of the JSON object response.\r\n *\r\n * @param {object} data\r\n * @returns {Promise<object>}\r\n * @memberof BraintreeEndpointManagerInterface\r\n */\r\n submitData(request: DonationRequest): Promise<DonationResponse>;\r\n\r\n /**\r\n * Once the user is finished with the donation flow, either after\r\n * a monthly donation or an upsell, we notify the endpoint manager\r\n * so it can redirect the user to the thank you page.\r\n */\r\n donationSuccessful(options: {\r\n successResponse: SuccessResponse;\r\n upsellSuccessResponse?: SuccessResponse;\r\n }): void;\r\n}\r\n\r\nexport enum HostingEnvironment {\r\n Development = 'dev',\r\n Production = 'prod',\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braintree-manager.js","sourceRoot":"","sources":["../../../src/braintree-manager/braintree-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DonationResponse,\n DonationRequest,\n DonationRequestCustomFields,\n DonationType,\n CustomerInfo,\n BillingInfo,\n DonationPaymentInfo,\n PaymentProvider,\n SuccessResponse,\n} from '@internetarchive/donation-form-data-models';\n\nimport { PaymentProviders } from './payment-providers';\nimport { PaymentClientsInterface } from './payment-clients';\nimport {\n BraintreeManagerInterface,\n BraintreeEndpointManagerInterface,\n HostingEnvironment,\n BraintreeManagerEvents,\n} from './braintree-interfaces';\nimport { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { PaymentProvidersInterface } from './payment-providers-interface';\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\n\n/** @inheritdoc */\nexport class BraintreeManager implements BraintreeManagerInterface {\n private referrer?: string;\n\n /**\n * The origin is made up of campaign / ABTest information that the user originated from.\n *\n * The field is a freeform string so it can be anything, but make sure it's something\n * identifiable so it can be queried in CiviCRM.\n *\n * For instance, we use this format for the Donation Banner:\n * - `{Source}-{Test Name}-{Variant Name}`, eg:\n * - `DonateBanner-Campaign Start 2020-IADefault`\n * - `DonateBanner-Mid Campaign-IAThermometer`\n *\n * For additional specificity, you could add additional info, ie.\n * - `DonateBanner-MidJuly2020 Campaign-VariantA-Button1`\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private origin?: string;\n\n private loggedInUser?: string;\n\n /**\n * The Device Data token generated by the DataCollector.\n *\n * This gets submitted for several of the payment providers as an anti-fraud mechanism.\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private deviceData?: string;\n\n private emitter = createNanoEvents<BraintreeManagerEvents>();\n\n on<E extends keyof BraintreeManagerEvents>(\n event: E,\n callback: BraintreeManagerEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n /** @inheritdoc */\n paymentProviders: PaymentProvidersInterface;\n\n /** @inheritdoc */\n async startup(): Promise<void> {\n return this.collectDeviceData();\n }\n\n /** @inheritdoc */\n instance = new PromisedSingleton<braintree.Client>({\n generator: async (): Promise<braintree.Client> => {\n const client = await this.paymentClients.braintreeClient.get();\n return client?.create({ authorization: this.authorizationToken });\n },\n });\n\n /** @inheritdoc */\n async submitDonation(options: {\n nonce: string;\n paymentProvider: PaymentProvider;\n donationInfo: DonationPaymentInfo;\n billingInfo: BillingInfo;\n customerInfo: CustomerInfo;\n upsellOnetimeTransactionId?: string;\n customerId?: string;\n recaptchaToken?: string;\n bin?: string; // first 6 digits of CC\n binName?: string; // credit card bank name\n }): Promise<DonationResponse> {\n const customFields = new DonationRequestCustomFields();\n customFields.fee_amount_covered = options.donationInfo.feeAmountCovered;\n customFields.logged_in_user = this.loggedInUser;\n customFields.referrer = this.referrer;\n customFields.origin = this.origin;\n\n // This is interesting and applies only to Venmo, but will work for other providers as well.\n // In Safari, `donationInfo` actually comes through as a DonationPaymentInfo object,\n // but in Chrome, it comes through as a plain object so you can't call `.total()` on it to\n // get the total amount and instead have to calculate the total\n const total = DonationPaymentInfo.calculateTotal(\n options.donationInfo.amount,\n options.donationInfo.coverFees,\n );\n\n const donationRequest = new DonationRequest({\n deviceData: this.deviceData,\n paymentProvider: options.paymentProvider,\n paymentMethodNonce: options.nonce,\n amount: total,\n donationType: options.donationInfo.donationType,\n customer: options.customerInfo,\n billing: options.billingInfo,\n customFields: customFields,\n upsellOnetimeTransactionId: options.upsellOnetimeTransactionId,\n customerId: options.customerId,\n recaptchaToken: options.recaptchaToken,\n bin: options.bin,\n binName: options.binName,\n });\n\n const jsonResponse = await this.endpointManager.submitData(donationRequest);\n const modeledResponse = new DonationResponse(jsonResponse);\n return modeledResponse;\n }\n\n /** @inheritdoc */\n async submitUpsellDonation(options: {\n oneTimeDonationResponse: SuccessResponse;\n amount: number;\n }): Promise<DonationResponse> {\n const response = options.oneTimeDonationResponse;\n\n const donationInfo = new DonationPaymentInfo({\n amount: options.amount,\n donationType: DonationType.Upsell,\n coverFees: false,\n });\n\n return this.submitDonation({\n nonce: response.paymentMethodNonce,\n paymentProvider: response.paymentProvider,\n customerId: response.customer_id,\n donationInfo: donationInfo,\n customerInfo: response.customer,\n billingInfo: response.billing,\n upsellOnetimeTransactionId: response.transaction_id,\n });\n }\n\n /** @inheritdoc */\n donationSuccessful(options: {\n successResponse: SuccessResponse;\n upsellSuccessResponse?: SuccessResponse;\n }): void {\n this.endpointManager.donationSuccessful(options);\n }\n\n private deviceDataCollectionStarted = false;\n\n /**\n * Collect Braintree device data. This is used to help fraud detection.\n *\n * @private\n * @returns {Promise<void>}\n * @memberof BraintreeManager\n */\n private async collectDeviceData(): Promise<void> {\n if (this.deviceDataCollectionStarted) {\n return;\n }\n this.deviceDataCollectionStarted = true;\n\n const instance = await this.instance.get();\n if (!instance) {\n return;\n }\n\n return this.paymentClients.dataCollector\n .get()\n .then((collector?: braintree.DataCollector) => {\n return collector?.create({ client: instance, kount: false, paypal: true });\n })\n .then(instance => {\n this.deviceData = instance?.deviceData;\n });\n }\n\n /**\n * Braintree Authorization Token\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private authorizationToken: string;\n\n /**\n * The endpoint manager for network communications\n *\n * @private\n * @type {BraintreeEndpointManagerInterface}\n * @memberof BraintreeManager\n */\n private endpointManager: BraintreeEndpointManagerInterface;\n\n /**\n * The payment clients container containing the braintree, paypal, and google clients\n *\n * @private\n * @type {PaymentClientsInterface}\n * @memberof BraintreeManager\n */\n private paymentClients: PaymentClientsInterface;\n\n private hostingEnvironment: HostingEnvironment = HostingEnvironment.Development;\n\n constructor(options: {\n authorizationToken: string;\n paymentClients: PaymentClientsInterface;\n endpointManager: BraintreeEndpointManagerInterface;\n hostedFieldConfig: HostedFieldConfiguration;\n hostingEnvironment: HostingEnvironment;\n venmoProfileId?: string;\n googlePayMerchantId?: string;\n referrer?: string;\n loggedInUser?: string;\n origin?: string;\n }) {\n this.authorizationToken = options.authorizationToken;\n this.endpointManager = options.endpointManager;\n this.hostingEnvironment = options.hostingEnvironment;\n this.paymentClients = options.paymentClients;\n\n this.referrer = options.referrer;\n this.loggedInUser = options.loggedInUser;\n this.origin = options.origin;\n\n this.paymentProviders = new PaymentProviders({\n braintreeManager: this,\n paymentClients: this.paymentClients,\n venmoProfileId: options.venmoProfileId,\n googlePayMerchantId: options.googlePayMerchantId,\n hostingEnvironment: options.hostingEnvironment,\n hostedFieldConfig: options.hostedFieldConfig,\n });\n\n this.paymentProviders.on('hostedFieldsRetry', (retryNumber: number) => {\n this.emitter.emit('paymentProvidersHostedFieldsRetry', retryNumber);\n });\n\n this.paymentProviders.on('hostedFieldsFailed', (error: unknown) => {\n this.emitter.emit('paymentProvidersHostedFieldsFailed', error);\n });\n }\n\n /** @inheritdoc */\n setReferrer(referrer: string): void {\n this.referrer = referrer;\n }\n\n /** @inheritdoc */\n setLoggedInUser(loggedInUser: string): void {\n this.loggedInUser = loggedInUser;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this.origin = origin;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"braintree-manager.js","sourceRoot":"","sources":["../../../src/braintree-manager/braintree-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n DonationResponse,\r\n DonationRequest,\r\n DonationRequestCustomFields,\r\n DonationType,\r\n CustomerInfo,\r\n BillingInfo,\r\n DonationPaymentInfo,\r\n PaymentProvider,\r\n SuccessResponse,\r\n} from '@internetarchive/donation-form-data-models';\r\n\r\nimport { PaymentProviders } from './payment-providers';\r\nimport { PaymentClientsInterface } from './payment-clients';\r\nimport {\r\n BraintreeManagerInterface,\r\n BraintreeEndpointManagerInterface,\r\n HostingEnvironment,\r\n BraintreeManagerEvents,\r\n} from './braintree-interfaces';\r\nimport { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration';\r\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { PaymentProvidersInterface } from './payment-providers-interface';\r\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\r\n\r\n/** @inheritdoc */\r\nexport class BraintreeManager implements BraintreeManagerInterface {\r\n private referrer?: string;\r\n\r\n /**\r\n * The origin is made up of campaign / ABTest information that the user originated from.\r\n *\r\n * The field is a freeform string so it can be anything, but make sure it's something\r\n * identifiable so it can be queried in CiviCRM.\r\n *\r\n * For instance, we use this format for the Donation Banner:\r\n * - `{Source}-{Test Name}-{Variant Name}`, eg:\r\n * - `DonateBanner-Campaign Start 2020-IADefault`\r\n * - `DonateBanner-Mid Campaign-IAThermometer`\r\n *\r\n * For additional specificity, you could add additional info, ie.\r\n * - `DonateBanner-MidJuly2020 Campaign-VariantA-Button1`\r\n *\r\n * @private\r\n * @type {string}\r\n * @memberof BraintreeManager\r\n */\r\n private origin?: string;\r\n\r\n private loggedInUser?: string;\r\n\r\n /**\r\n * The Device Data token generated by the DataCollector.\r\n *\r\n * This gets submitted for several of the payment providers as an anti-fraud mechanism.\r\n *\r\n * @private\r\n * @type {string}\r\n * @memberof BraintreeManager\r\n */\r\n private deviceData?: string;\r\n\r\n private emitter = createNanoEvents<BraintreeManagerEvents>();\r\n\r\n on<E extends keyof BraintreeManagerEvents>(\r\n event: E,\r\n callback: BraintreeManagerEvents[E],\r\n ): Unsubscribe {\r\n return this.emitter.on(event, callback);\r\n }\r\n\r\n /** @inheritdoc */\r\n paymentProviders: PaymentProvidersInterface;\r\n\r\n /** @inheritdoc */\r\n async startup(): Promise<void> {\r\n return this.collectDeviceData();\r\n }\r\n\r\n /** @inheritdoc */\r\n instance = new PromisedSingleton<braintree.Client>({\r\n generator: async (): Promise<braintree.Client> => {\r\n const client = await this.paymentClients.braintreeClient.get();\r\n return client?.create({ authorization: this.authorizationToken });\r\n },\r\n });\r\n\r\n /** @inheritdoc */\r\n async submitDonation(options: {\r\n nonce: string;\r\n paymentProvider: PaymentProvider;\r\n donationInfo: DonationPaymentInfo;\r\n billingInfo: BillingInfo;\r\n customerInfo: CustomerInfo;\r\n upsellOnetimeTransactionId?: string;\r\n customerId?: string;\r\n recaptchaToken?: string;\r\n bin?: string; // first 6 digits of CC\r\n binName?: string; // credit card bank name\r\n }): Promise<DonationResponse> {\r\n const customFields = new DonationRequestCustomFields();\r\n customFields.fee_amount_covered = options.donationInfo.feeAmountCovered;\r\n customFields.logged_in_user = this.loggedInUser;\r\n customFields.referrer = this.referrer;\r\n customFields.origin = this.origin;\r\n\r\n // This is interesting and applies only to Venmo, but will work for other providers as well.\r\n // In Safari, `donationInfo` actually comes through as a DonationPaymentInfo object,\r\n // but in Chrome, it comes through as a plain object so you can't call `.total()` on it to\r\n // get the total amount and instead have to calculate the total\r\n const total = DonationPaymentInfo.calculateTotal(\r\n options.donationInfo.amount,\r\n options.donationInfo.coverFees,\r\n );\r\n\r\n const donationRequest = new DonationRequest({\r\n deviceData: this.deviceData,\r\n paymentProvider: options.paymentProvider,\r\n paymentMethodNonce: options.nonce,\r\n amount: total,\r\n donationType: options.donationInfo.donationType,\r\n customer: options.customerInfo,\r\n billing: options.billingInfo,\r\n customFields: customFields,\r\n upsellOnetimeTransactionId: options.upsellOnetimeTransactionId,\r\n customerId: options.customerId,\r\n recaptchaToken: options.recaptchaToken,\r\n bin: options.bin,\r\n binName: options.binName,\r\n });\r\n\r\n const jsonResponse = await this.endpointManager.submitData(donationRequest);\r\n const modeledResponse = new DonationResponse(jsonResponse);\r\n return modeledResponse;\r\n }\r\n\r\n /** @inheritdoc */\r\n async submitUpsellDonation(options: {\r\n oneTimeDonationResponse: SuccessResponse;\r\n amount: number;\r\n }): Promise<DonationResponse> {\r\n const response = options.oneTimeDonationResponse;\r\n\r\n const donationInfo = new DonationPaymentInfo({\r\n amount: options.amount,\r\n donationType: DonationType.Upsell,\r\n coverFees: false,\r\n });\r\n\r\n return this.submitDonation({\r\n nonce: response.paymentMethodNonce,\r\n paymentProvider: response.paymentProvider,\r\n customerId: response.customer_id,\r\n donationInfo: donationInfo,\r\n customerInfo: response.customer,\r\n billingInfo: response.billing,\r\n upsellOnetimeTransactionId: response.transaction_id,\r\n });\r\n }\r\n\r\n /** @inheritdoc */\r\n donationSuccessful(options: {\r\n successResponse: SuccessResponse;\r\n upsellSuccessResponse?: SuccessResponse;\r\n }): void {\r\n this.endpointManager.donationSuccessful(options);\r\n }\r\n\r\n private deviceDataCollectionStarted = false;\r\n\r\n /**\r\n * Collect Braintree device data. This is used to help fraud detection.\r\n *\r\n * @private\r\n * @returns {Promise<void>}\r\n * @memberof BraintreeManager\r\n */\r\n private async collectDeviceData(): Promise<void> {\r\n if (this.deviceDataCollectionStarted) {\r\n return;\r\n }\r\n this.deviceDataCollectionStarted = true;\r\n\r\n const instance = await this.instance.get();\r\n if (!instance) {\r\n return;\r\n }\r\n\r\n return this.paymentClients.dataCollector\r\n .get()\r\n .then((collector?: braintree.DataCollector) => {\r\n return collector?.create({ client: instance, kount: false, paypal: true });\r\n })\r\n .then(instance => {\r\n this.deviceData = instance?.deviceData;\r\n });\r\n }\r\n\r\n /**\r\n * Braintree Authorization Token\r\n *\r\n * @private\r\n * @type {string}\r\n * @memberof BraintreeManager\r\n */\r\n private authorizationToken: string;\r\n\r\n /**\r\n * The endpoint manager for network communications\r\n *\r\n * @private\r\n * @type {BraintreeEndpointManagerInterface}\r\n * @memberof BraintreeManager\r\n */\r\n private endpointManager: BraintreeEndpointManagerInterface;\r\n\r\n /**\r\n * The payment clients container containing the braintree, paypal, and google clients\r\n *\r\n * @private\r\n * @type {PaymentClientsInterface}\r\n * @memberof BraintreeManager\r\n */\r\n private paymentClients: PaymentClientsInterface;\r\n\r\n private hostingEnvironment: HostingEnvironment = HostingEnvironment.Development;\r\n\r\n constructor(options: {\r\n authorizationToken: string;\r\n paymentClients: PaymentClientsInterface;\r\n endpointManager: BraintreeEndpointManagerInterface;\r\n hostedFieldConfig: HostedFieldConfiguration;\r\n hostingEnvironment: HostingEnvironment;\r\n venmoProfileId?: string;\r\n googlePayMerchantId?: string;\r\n referrer?: string;\r\n loggedInUser?: string;\r\n origin?: string;\r\n }) {\r\n this.authorizationToken = options.authorizationToken;\r\n this.endpointManager = options.endpointManager;\r\n this.hostingEnvironment = options.hostingEnvironment;\r\n this.paymentClients = options.paymentClients;\r\n\r\n this.referrer = options.referrer;\r\n this.loggedInUser = options.loggedInUser;\r\n this.origin = options.origin;\r\n\r\n this.paymentProviders = new PaymentProviders({\r\n braintreeManager: this,\r\n paymentClients: this.paymentClients,\r\n venmoProfileId: options.venmoProfileId,\r\n googlePayMerchantId: options.googlePayMerchantId,\r\n hostingEnvironment: options.hostingEnvironment,\r\n hostedFieldConfig: options.hostedFieldConfig,\r\n });\r\n\r\n this.paymentProviders.on('hostedFieldsRetry', (retryNumber: number) => {\r\n this.emitter.emit('paymentProvidersHostedFieldsRetry', retryNumber);\r\n });\r\n\r\n this.paymentProviders.on('hostedFieldsFailed', (error: unknown) => {\r\n this.emitter.emit('paymentProvidersHostedFieldsFailed', error);\r\n });\r\n }\r\n\r\n /** @inheritdoc */\r\n setReferrer(referrer: string): void {\r\n this.referrer = referrer;\r\n }\r\n\r\n /** @inheritdoc */\r\n setLoggedInUser(loggedInUser: string): void {\r\n this.loggedInUser = loggedInUser;\r\n }\r\n\r\n /** @inheritdoc */\r\n setOrigin(origin: string): void {\r\n this.origin = origin;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-clients.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-clients.ts"],"names":[],"mappings":"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","sourcesContent":["import { LazyLoaderServiceInterface } from '@internetarchive/lazy-loader-service';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { HostingEnvironment } from './braintree-interfaces';\n\nexport interface PaymentClientsInterface {\n braintreeClient: PromisedSingleton<braintree.Client>;\n dataCollector: PromisedSingleton<braintree.DataCollector>;\n hostedFields: PromisedSingleton<braintree.HostedFields>;\n venmo: PromisedSingleton<braintree.Venmo>;\n payPal: PromisedSingleton<braintree.PayPalCheckout>;\n applePay: PromisedSingleton<braintree.ApplePay>;\n googlePayBraintreeClient: PromisedSingleton<braintree.GooglePayment>;\n\n googlePaymentsClient: PromisedSingleton<google.payments.api.PaymentsClient>;\n recaptchaLibrary: PromisedSingleton<ReCaptchaV2.ReCaptcha>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n paypalLibrary: PromisedSingleton<any>;\n}\n\n/**\n * The PaymentClients class is responsible for loading and passing around\n * all of the payment libraries. Internally it uses the LazyLoaderService to lazy load\n * the javascript clients.\n *\n * For instance, it carries around the braintree and paypal libraries, as well as the specific\n * payment-provider clients for each of the providers. This allows us to pass around typed\n * objects instead of the untyped libraries we get from the providers.\n *\n * @export\n * @class PaymentClients\n * @implements {PaymentClientsInterface}\n */\nexport class PaymentClients implements PaymentClientsInterface {\n braintreeClient = new PromisedSingleton<braintree.Client>({\n generator: async (): Promise<braintree.Client> => {\n await this.loadBraintreeScript('client');\n return window.braintree.client;\n },\n });\n\n dataCollector = new PromisedSingleton<braintree.DataCollector>({\n generator: async (): Promise<braintree.DataCollector> => {\n await this.loadBraintreeScript('data-collector');\n return window.braintree.dataCollector;\n },\n });\n\n hostedFields = new PromisedSingleton<braintree.HostedFields>({\n generator: async (): Promise<braintree.HostedFields> => {\n await this.loadBraintreeScript('hosted-fields');\n return window.braintree.hostedFields;\n },\n });\n\n venmo = new PromisedSingleton<braintree.Venmo>({\n generator: async (): Promise<braintree.Venmo> => {\n await this.loadBraintreeScript('venmo');\n return window.braintree.venmo;\n },\n });\n\n payPal = new PromisedSingleton<braintree.PayPalCheckout>({\n generator: async (): Promise<braintree.PayPalCheckout> => {\n await this.loadBraintreeScript('paypal-checkout');\n return window.braintree.paypalCheckout;\n },\n });\n\n applePay = new PromisedSingleton<braintree.ApplePay>({\n generator: async (): Promise<braintree.ApplePay> => {\n await this.loadBraintreeScript('apple-pay');\n return window.braintree.applePay;\n },\n });\n\n googlePayBraintreeClient = new PromisedSingleton<braintree.GooglePayment>({\n generator: async (): Promise<braintree.GooglePayment> => {\n await this.loadBraintreeScript('google-payment');\n return window.braintree.googlePayment;\n },\n });\n\n googlePaymentsClient = new PromisedSingleton<google.payments.api.PaymentsClient>({\n generator: async (): Promise<google.payments.api.PaymentsClient> => {\n await this.lazyLoader.loadScript({ src: 'https://pay.google.com/gp/p/js/pay.js' });\n return new google.payments.api.PaymentsClient({\n environment: this.environment === HostingEnvironment.Development ? 'TEST' : 'PRODUCTION',\n });\n },\n });\n\n recaptchaLibrary = new PromisedSingleton<ReCaptchaV2.ReCaptcha>({\n generator: (): Promise<ReCaptchaV2.ReCaptcha> =>\n new Promise(resolve => {\n // The loader for the recaptcha library is relying on an onload callback from the recaptcha\n // library because even when the library has loaded, it is still not ready\n // As recommended by Recaptcha, we attach a callback to the window object before starting\n // the load and remove it once the load is complete and resolve the promise.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).donationFormGrecaptchaLoadedCallback = (): void => {\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delete (window as any).donationFormGrecaptchaLoadedCallback;\n }, 10);\n resolve(window.grecaptcha);\n };\n\n this.lazyLoader.loadScript({\n src: 'https://www.google.com/recaptcha/api.js?onload=donationFormGrecaptchaLoadedCallback&render=explicit',\n });\n }),\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n paypalLibrary = new PromisedSingleton<any>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n generator: async (): Promise<any> => {\n await this.lazyLoader.loadScript({\n src: 'https://www.paypalobjects.com/api/checkout.js',\n attributes: {\n 'data-version-4': '',\n 'log-level': 'warn',\n },\n });\n return window.paypal;\n },\n });\n\n constructor(lazyLoader: LazyLoaderServiceInterface, environment: HostingEnvironment) {\n this.lazyLoader = lazyLoader;\n this.environment = environment;\n }\n\n private async loadBraintreeScript(scriptName: string): Promise<void> {\n const extension = this.environment === HostingEnvironment.Production ? 'min.js' : 'js';\n const scriptWithSuffix = `${scriptName}.${extension}`;\n const url = `https://js.braintreegateway.com/web/${this.braintreeVersion}/js/${scriptWithSuffix}`;\n await this.lazyLoader.loadScript({ src: url });\n }\n\n private braintreeVersion = '3.62.2';\n\n private environment: HostingEnvironment = HostingEnvironment.Development;\n\n private lazyLoader: LazyLoaderServiceInterface;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"payment-clients.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-clients.ts"],"names":[],"mappings":"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","sourcesContent":["import { LazyLoaderServiceInterface } from '@internetarchive/lazy-loader-service';\r\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { HostingEnvironment } from './braintree-interfaces';\r\n\r\nexport interface PaymentClientsInterface {\r\n braintreeClient: PromisedSingleton<braintree.Client>;\r\n dataCollector: PromisedSingleton<braintree.DataCollector>;\r\n hostedFields: PromisedSingleton<braintree.HostedFields>;\r\n venmo: PromisedSingleton<braintree.Venmo>;\r\n payPal: PromisedSingleton<braintree.PayPalCheckout>;\r\n applePay: PromisedSingleton<braintree.ApplePay>;\r\n googlePayBraintreeClient: PromisedSingleton<braintree.GooglePayment>;\r\n\r\n googlePaymentsClient: PromisedSingleton<google.payments.api.PaymentsClient>;\r\n recaptchaLibrary: PromisedSingleton<ReCaptchaV2.ReCaptcha>;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n paypalLibrary: PromisedSingleton<any>;\r\n}\r\n\r\n/**\r\n * The PaymentClients class is responsible for loading and passing around\r\n * all of the payment libraries. Internally it uses the LazyLoaderService to lazy load\r\n * the javascript clients.\r\n *\r\n * For instance, it carries around the braintree and paypal libraries, as well as the specific\r\n * payment-provider clients for each of the providers. This allows us to pass around typed\r\n * objects instead of the untyped libraries we get from the providers.\r\n *\r\n * @export\r\n * @class PaymentClients\r\n * @implements {PaymentClientsInterface}\r\n */\r\nexport class PaymentClients implements PaymentClientsInterface {\r\n braintreeClient = new PromisedSingleton<braintree.Client>({\r\n generator: async (): Promise<braintree.Client> => {\r\n await this.loadBraintreeScript('client');\r\n return window.braintree.client;\r\n },\r\n });\r\n\r\n dataCollector = new PromisedSingleton<braintree.DataCollector>({\r\n generator: async (): Promise<braintree.DataCollector> => {\r\n await this.loadBraintreeScript('data-collector');\r\n return window.braintree.dataCollector;\r\n },\r\n });\r\n\r\n hostedFields = new PromisedSingleton<braintree.HostedFields>({\r\n generator: async (): Promise<braintree.HostedFields> => {\r\n await this.loadBraintreeScript('hosted-fields');\r\n return window.braintree.hostedFields;\r\n },\r\n });\r\n\r\n venmo = new PromisedSingleton<braintree.Venmo>({\r\n generator: async (): Promise<braintree.Venmo> => {\r\n await this.loadBraintreeScript('venmo');\r\n return window.braintree.venmo;\r\n },\r\n });\r\n\r\n payPal = new PromisedSingleton<braintree.PayPalCheckout>({\r\n generator: async (): Promise<braintree.PayPalCheckout> => {\r\n await this.loadBraintreeScript('paypal-checkout');\r\n return window.braintree.paypalCheckout;\r\n },\r\n });\r\n\r\n applePay = new PromisedSingleton<braintree.ApplePay>({\r\n generator: async (): Promise<braintree.ApplePay> => {\r\n await this.loadBraintreeScript('apple-pay');\r\n return window.braintree.applePay;\r\n },\r\n });\r\n\r\n googlePayBraintreeClient = new PromisedSingleton<braintree.GooglePayment>({\r\n generator: async (): Promise<braintree.GooglePayment> => {\r\n await this.loadBraintreeScript('google-payment');\r\n return window.braintree.googlePayment;\r\n },\r\n });\r\n\r\n googlePaymentsClient = new PromisedSingleton<google.payments.api.PaymentsClient>({\r\n generator: async (): Promise<google.payments.api.PaymentsClient> => {\r\n await this.lazyLoader.loadScript({ src: 'https://pay.google.com/gp/p/js/pay.js' });\r\n return new google.payments.api.PaymentsClient({\r\n environment: this.environment === HostingEnvironment.Development ? 'TEST' : 'PRODUCTION',\r\n });\r\n },\r\n });\r\n\r\n recaptchaLibrary = new PromisedSingleton<ReCaptchaV2.ReCaptcha>({\r\n generator: (): Promise<ReCaptchaV2.ReCaptcha> =>\r\n new Promise(resolve => {\r\n // The loader for the recaptcha library is relying on an onload callback from the recaptcha\r\n // library because even when the library has loaded, it is still not ready\r\n // As recommended by Recaptcha, we attach a callback to the window object before starting\r\n // the load and remove it once the load is complete and resolve the promise.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (window as any).donationFormGrecaptchaLoadedCallback = (): void => {\r\n setTimeout(() => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n delete (window as any).donationFormGrecaptchaLoadedCallback;\r\n }, 10);\r\n resolve(window.grecaptcha);\r\n };\r\n\r\n this.lazyLoader.loadScript({\r\n src: 'https://www.google.com/recaptcha/api.js?onload=donationFormGrecaptchaLoadedCallback&render=explicit',\r\n });\r\n }),\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n paypalLibrary = new PromisedSingleton<any>({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n generator: async (): Promise<any> => {\r\n await this.lazyLoader.loadScript({\r\n src: 'https://www.paypalobjects.com/api/checkout.js',\r\n attributes: {\r\n 'data-version-4': '',\r\n 'log-level': 'warn',\r\n },\r\n });\r\n return window.paypal;\r\n },\r\n });\r\n\r\n constructor(lazyLoader: LazyLoaderServiceInterface, environment: HostingEnvironment) {\r\n this.lazyLoader = lazyLoader;\r\n this.environment = environment;\r\n }\r\n\r\n private async loadBraintreeScript(scriptName: string): Promise<void> {\r\n const extension = this.environment === HostingEnvironment.Production ? 'min.js' : 'js';\r\n const scriptWithSuffix = `${scriptName}.${extension}`;\r\n const url = `https://js.braintreegateway.com/web/${this.braintreeVersion}/js/${scriptWithSuffix}`;\r\n await this.lazyLoader.loadScript({ src: url });\r\n }\r\n\r\n private braintreeVersion = '3.62.2';\r\n\r\n private environment: HostingEnvironment = HostingEnvironment.Development;\r\n\r\n private lazyLoader: LazyLoaderServiceInterface;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-pay-interface.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\nimport { ApplePaySessionDataSourceInterface } from './apple-pay-session-datasource-interface';\n\nexport interface ApplePayHandlerInterface {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: PromisedSingleton<any | undefined>;\n isAvailable(): Promise<boolean>;\n createPaymentRequest(\n e: Event,\n donationInfo: DonationPaymentInfo,\n ): Promise<ApplePaySessionDataSourceInterface>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"apple-pay-interface.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\r\nimport { ApplePaySessionDataSourceInterface } from './apple-pay-session-datasource-interface';\r\n\r\nexport interface ApplePayHandlerInterface {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n instance: PromisedSingleton<any | undefined>;\r\n isAvailable(): Promise<boolean>;\r\n createPaymentRequest(\r\n e: Event,\r\n donationInfo: DonationPaymentInfo,\r\n ): Promise<ApplePaySessionDataSourceInterface>;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-pay-session-datasource-delegate.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts"],"names":[],"mappings":"","sourcesContent":["import { DonationResponse } from '@internetarchive/donation-form-data-models';\n\nexport interface ApplePaySessionDataSourceDelegate {\n paymentComplete(response: DonationResponse): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n paymentFailed(error: any): void;\n paymentCancelled(): void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"apple-pay-session-datasource-delegate.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts"],"names":[],"mappings":"","sourcesContent":["import { DonationResponse } from '@internetarchive/donation-form-data-models';\r\n\r\nexport interface ApplePaySessionDataSourceDelegate {\r\n paymentComplete(response: DonationResponse): void;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n paymentFailed(error: any): void;\r\n paymentCancelled(): void;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-pay-session-datasource-interface.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\nimport { ApplePaySessionDataSourceDelegate } from './apple-pay-session-datasource-delegate';\n\nexport interface ApplePaySessionDataSourceInterface {\n delegate?: ApplePaySessionDataSourceDelegate;\n donationInfo: DonationPaymentInfo;\n onvalidatemerchant(event: ApplePayJS.ApplePayValidateMerchantEvent): Promise<void>;\n onpaymentauthorized(event: ApplePayJS.ApplePayPaymentAuthorizedEvent): Promise<void>;\n oncancel(): Promise<void>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"apple-pay-session-datasource-interface.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\r\nimport { ApplePaySessionDataSourceDelegate } from './apple-pay-session-datasource-delegate';\r\n\r\nexport interface ApplePaySessionDataSourceInterface {\r\n delegate?: ApplePaySessionDataSourceDelegate;\r\n donationInfo: DonationPaymentInfo;\r\n onvalidatemerchant(event: ApplePayJS.ApplePayValidateMerchantEvent): Promise<void>;\r\n onpaymentauthorized(event: ApplePayJS.ApplePayPaymentAuthorizedEvent): Promise<void>;\r\n oncancel(): Promise<void>;\r\n}\r\n"]}
|
package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-pay-session-datasource.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DonationPaymentInfo,\n BillingInfo,\n CustomerInfo,\n PaymentProvider,\n} from '@internetarchive/donation-form-data-models';\nimport { BraintreeManagerInterface } from '../../braintree-interfaces';\nimport { ApplePaySessionDataSourceInterface } from './apple-pay-session-datasource-interface';\nimport { ApplePaySessionDataSourceDelegate } from './apple-pay-session-datasource-delegate';\n\nexport class ApplePaySessionDataSource implements ApplePaySessionDataSourceInterface {\n delegate?: ApplePaySessionDataSourceDelegate;\n donationInfo: DonationPaymentInfo;\n\n private session: ApplePaySession;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private applePayInstance: any;\n private braintreeManager: BraintreeManagerInterface;\n\n constructor(options: {\n donationInfo: DonationPaymentInfo;\n session: ApplePaySession;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n applePayInstance: any;\n braintreeManager: BraintreeManagerInterface;\n }) {\n this.session = options.session;\n this.donationInfo = options.donationInfo;\n this.applePayInstance = options.applePayInstance;\n this.braintreeManager = options.braintreeManager;\n }\n\n async onvalidatemerchant(event: ApplePayJS.ApplePayValidateMerchantEvent): Promise<void> {\n return new Promise((resolve, reject) => {\n this.applePayInstance.performValidation(\n {\n validationURL: event.validationURL,\n displayName: 'Internet Archive',\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (validationErr: any, validationData: any) => {\n if (validationErr) {\n this.delegate?.paymentFailed(validationErr);\n this.session.abort();\n reject(`Merchant validation error: ${validationErr}`);\n } else {\n this.session.completeMerchantValidation(validationData);\n resolve();\n }\n },\n );\n });\n }\n\n async oncancel(): Promise<void> {\n this.delegate?.paymentCancelled();\n }\n\n async onpaymentauthorized(event: ApplePayJS.ApplePayPaymentAuthorizedEvent): Promise<void> {\n let payload;\n try {\n payload = await this.applePayInstance.tokenize({\n token: event.payment.token,\n });\n } catch (err) {\n this.delegate?.paymentFailed(err);\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\n return;\n }\n\n const payment = event.payment;\n const billingContact = payment.billingContact;\n const shippingContact = payment.shippingContact;\n const addressLines = billingContact?.addressLines;\n\n let line1: string | undefined = undefined;\n let line2: string | undefined = undefined;\n\n if (addressLines) {\n line1 = addressLines[0];\n line2 = addressLines[1];\n }\n\n const billingInfo = new BillingInfo({\n streetAddress: line1,\n extendedAddress: line2,\n locality: billingContact?.locality,\n region: billingContact?.administrativeArea,\n postalCode: billingContact?.postalCode,\n countryCodeAlpha2: billingContact?.countryCode,\n });\n\n const customerInfo = new CustomerInfo({\n email: shippingContact?.emailAddress,\n firstName: shippingContact?.givenName,\n lastName: shippingContact?.familyName,\n });\n\n try {\n const donationResponse = await this.braintreeManager.submitDonation({\n nonce: payload.nonce,\n paymentProvider: PaymentProvider.ApplePay,\n donationInfo: this.donationInfo,\n billingInfo: billingInfo,\n customerInfo: customerInfo,\n });\n if (donationResponse.success) {\n this.delegate?.paymentComplete(donationResponse);\n this.session.completePayment(ApplePaySession.STATUS_SUCCESS);\n } else {\n this.delegate?.paymentFailed('Failure submitting data');\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\n }\n } catch (err) {\n this.delegate?.paymentFailed(err);\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"apple-pay-session-datasource.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n DonationPaymentInfo,\r\n BillingInfo,\r\n CustomerInfo,\r\n PaymentProvider,\r\n} from '@internetarchive/donation-form-data-models';\r\nimport { BraintreeManagerInterface } from '../../braintree-interfaces';\r\nimport { ApplePaySessionDataSourceInterface } from './apple-pay-session-datasource-interface';\r\nimport { ApplePaySessionDataSourceDelegate } from './apple-pay-session-datasource-delegate';\r\n\r\nexport class ApplePaySessionDataSource implements ApplePaySessionDataSourceInterface {\r\n delegate?: ApplePaySessionDataSourceDelegate;\r\n donationInfo: DonationPaymentInfo;\r\n\r\n private session: ApplePaySession;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private applePayInstance: any;\r\n private braintreeManager: BraintreeManagerInterface;\r\n\r\n constructor(options: {\r\n donationInfo: DonationPaymentInfo;\r\n session: ApplePaySession;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n applePayInstance: any;\r\n braintreeManager: BraintreeManagerInterface;\r\n }) {\r\n this.session = options.session;\r\n this.donationInfo = options.donationInfo;\r\n this.applePayInstance = options.applePayInstance;\r\n this.braintreeManager = options.braintreeManager;\r\n }\r\n\r\n async onvalidatemerchant(event: ApplePayJS.ApplePayValidateMerchantEvent): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.applePayInstance.performValidation(\r\n {\r\n validationURL: event.validationURL,\r\n displayName: 'Internet Archive',\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (validationErr: any, validationData: any) => {\r\n if (validationErr) {\r\n this.delegate?.paymentFailed(validationErr);\r\n this.session.abort();\r\n reject(`Merchant validation error: ${validationErr}`);\r\n } else {\r\n this.session.completeMerchantValidation(validationData);\r\n resolve();\r\n }\r\n },\r\n );\r\n });\r\n }\r\n\r\n async oncancel(): Promise<void> {\r\n this.delegate?.paymentCancelled();\r\n }\r\n\r\n async onpaymentauthorized(event: ApplePayJS.ApplePayPaymentAuthorizedEvent): Promise<void> {\r\n let payload;\r\n try {\r\n payload = await this.applePayInstance.tokenize({\r\n token: event.payment.token,\r\n });\r\n } catch (err) {\r\n this.delegate?.paymentFailed(err);\r\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\r\n return;\r\n }\r\n\r\n const payment = event.payment;\r\n const billingContact = payment.billingContact;\r\n const shippingContact = payment.shippingContact;\r\n const addressLines = billingContact?.addressLines;\r\n\r\n let line1: string | undefined = undefined;\r\n let line2: string | undefined = undefined;\r\n\r\n if (addressLines) {\r\n line1 = addressLines[0];\r\n line2 = addressLines[1];\r\n }\r\n\r\n const billingInfo = new BillingInfo({\r\n streetAddress: line1,\r\n extendedAddress: line2,\r\n locality: billingContact?.locality,\r\n region: billingContact?.administrativeArea,\r\n postalCode: billingContact?.postalCode,\r\n countryCodeAlpha2: billingContact?.countryCode,\r\n });\r\n\r\n const customerInfo = new CustomerInfo({\r\n email: shippingContact?.emailAddress,\r\n firstName: shippingContact?.givenName,\r\n lastName: shippingContact?.familyName,\r\n });\r\n\r\n try {\r\n const donationResponse = await this.braintreeManager.submitDonation({\r\n nonce: payload.nonce,\r\n paymentProvider: PaymentProvider.ApplePay,\r\n donationInfo: this.donationInfo,\r\n billingInfo: billingInfo,\r\n customerInfo: customerInfo,\r\n });\r\n if (donationResponse.success) {\r\n this.delegate?.paymentComplete(donationResponse);\r\n this.session.completePayment(ApplePaySession.STATUS_SUCCESS);\r\n } else {\r\n this.delegate?.paymentFailed('Failure submitting data');\r\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\r\n }\r\n } catch (err) {\r\n this.delegate?.paymentFailed(err);\r\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\r\n }\r\n }\r\n}\r\n"]}
|
package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-pay-session-manager.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,sBAAsB;IAGjC,eAAe;QACb,OAAO,CACL,iBAAiB,IAAI,MAAM;YAC3B,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAC/D,eAAe,CAAC,eAAe,EAAE,CAClC,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,cAAiD;QACvE,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACpF,OAAO,OAAO,CAAC;IACjB,CAAC;;AAbM,8BAAO,GAAG,CAAC,CAAC","sourcesContent":["export interface ApplePaySessionManagerInterface {\n canMakePayments(): boolean;\n createNewPaymentSession(paymentRequest: ApplePayJS.ApplePayPaymentRequest): ApplePaySession;\n}\n\nexport class ApplePaySessionManager implements ApplePaySessionManagerInterface {\n static VERSION = 3;\n\n canMakePayments(): boolean {\n return (\n 'ApplePaySession' in window &&\n ApplePaySession.supportsVersion(ApplePaySessionManager.VERSION) &&\n ApplePaySession.canMakePayments()\n );\n }\n\n createNewPaymentSession(paymentRequest: ApplePayJS.ApplePayPaymentRequest): ApplePaySession {\n const session = new ApplePaySession(ApplePaySessionManager.VERSION, paymentRequest);\n return session;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"apple-pay-session-manager.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,sBAAsB;IAGjC,eAAe;QACb,OAAO,CACL,iBAAiB,IAAI,MAAM;YAC3B,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAC/D,eAAe,CAAC,eAAe,EAAE,CAClC,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,cAAiD;QACvE,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACpF,OAAO,OAAO,CAAC;IACjB,CAAC;;AAbM,8BAAO,GAAG,CAAC,CAAC","sourcesContent":["export interface ApplePaySessionManagerInterface {\r\n canMakePayments(): boolean;\r\n createNewPaymentSession(paymentRequest: ApplePayJS.ApplePayPaymentRequest): ApplePaySession;\r\n}\r\n\r\nexport class ApplePaySessionManager implements ApplePaySessionManagerInterface {\r\n static VERSION = 3;\r\n\r\n canMakePayments(): boolean {\r\n return (\r\n 'ApplePaySession' in window &&\r\n ApplePaySession.supportsVersion(ApplePaySessionManager.VERSION) &&\r\n ApplePaySession.canMakePayments()\r\n );\r\n }\r\n\r\n createNewPaymentSession(paymentRequest: ApplePayJS.ApplePayPaymentRequest): ApplePaySession {\r\n const session = new ApplePaySession(ApplePaySessionManager.VERSION, paymentRequest);\r\n return session;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-pay.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAuB,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,MAAM,OAAO,eAAe;IAI1B,YAAY,OAMX;;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAE7D,IAAI,CAAC,QAAQ;YACX,MAAA,OAAO,CAAC,yBAAyB;YACjC,8DAA8D;YAC9D,IAAI,iBAAiB,CAAkB;gBACrC,8DAA8D;gBAC9D,SAAS,EAAE,GAAmC,EAAE;oBAC9C,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,EAAE,CAAC;wBACnD,OAAO,SAAS,CAAC;oBACnB,CAAC;oBAED,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;oBACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;wBAChD,MAAM,EAAE,eAAe;qBACxB,CAAC,CAAC;oBAEH,OAAO,QAAQ,CAAC;gBAClB,CAAC,CAAA;aACF,CAAC,CAAC;IACP,CAAC;IAQK,WAAW;;YACf,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC3C,OAAO,CAAC,CAAC,QAAQ,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KAAA;IAED,wEAAwE;IACxE,uEAAuE;IACvE,wCAAwC;IAClC,oBAAoB,CACxB,CAAQ,EACR,YAAiC;;YAEjC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAEnD,IAAI,KAAK,GAAG,0BAA0B,CAAC;YACvC,IAAI,YAAY,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;gBACvD,KAAK,GAAG,kBAAkB,CAAC;YAC7B,CAAC;YAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,oBAAoB,CAAC;gBAC3D,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,YAAY,CAAC,KAAK;iBAC3B;gBACD,4BAA4B,EAAE,CAAC,eAAe,CAAC;gBAC/C,6BAA6B,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;aACjD,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;YAEpF,MAAM,iBAAiB,GAAG,IAAI,yBAAyB,CAAC;gBACtD,YAAY,EAAE,YAAY;gBAC1B,OAAO,EAAE,OAAO;gBAChB,gBAAgB,EAAE,gBAAgB;gBAClC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC,CAAC,CAAC;YAEH,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC1F,OAAO,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC5F,OAAO,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEtE,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;KAAA;CACF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { BraintreeManagerInterface } from '../../braintree-interfaces';\nimport { ApplePaySessionManagerInterface } from './apple-pay-session-manager';\nimport { DonationType, DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\nimport { ApplePaySessionDataSource } from './apple-pay-session-datasource';\nimport { ApplePayHandlerInterface } from './apple-pay-interface';\n\nexport class ApplePayHandler implements ApplePayHandlerInterface {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: PromisedSingleton<any | undefined>;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n applePayClient: braintree.ApplePay;\n applePaySessionManager: ApplePaySessionManagerInterface;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instancePromisedSingleton?: PromisedSingleton<any | undefined>;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.applePayClient = options.applePayClient;\n this.applePaySessionManager = options.applePaySessionManager;\n\n this.instance =\n options.instancePromisedSingleton ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new PromisedSingleton<any | undefined>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n generator: async (): Promise<any | undefined> => {\n if (!this.applePaySessionManager.canMakePayments()) {\n return undefined;\n }\n\n const braintreeClient = await this.braintreeManager.instance.get();\n const instance = await this.applePayClient.create({\n client: braintreeClient,\n });\n\n return instance;\n },\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n\n private applePaySessionManager: ApplePaySessionManagerInterface;\n\n private applePayClient: braintree.ApplePay;\n\n async isAvailable(): Promise<boolean> {\n try {\n const instance = await this.instance.get();\n return !!instance;\n } catch (err) {\n return false;\n }\n }\n\n // In order to trigger the Apple Pay flow, you HAVE to pass in the event\n // that triggered the launch. Notice we're not actually using the event\n // but ApplePay won't launch without it.\n async createPaymentRequest(\n e: Event,\n donationInfo: DonationPaymentInfo,\n ): Promise<ApplePaySessionDataSource> {\n const applePayInstance = await this.instance.get();\n\n let label = 'Internet Archive Monthly';\n if (donationInfo.donationType === DonationType.OneTime) {\n label = 'Internet Archive';\n }\n\n const paymentRequest = applePayInstance.createPaymentRequest({\n total: {\n label: label,\n amount: donationInfo.total,\n },\n requiredBillingContactFields: ['postalAddress'],\n requiredShippingContactFields: ['name', 'email'],\n });\n const session = this.applePaySessionManager.createNewPaymentSession(paymentRequest);\n\n const sessionDataSource = new ApplePaySessionDataSource({\n donationInfo: donationInfo,\n session: session,\n applePayInstance: applePayInstance,\n braintreeManager: this.braintreeManager,\n });\n\n session.onvalidatemerchant = sessionDataSource.onvalidatemerchant.bind(sessionDataSource);\n session.onpaymentauthorized = sessionDataSource.onpaymentauthorized.bind(sessionDataSource);\n session.oncancel = sessionDataSource.oncancel.bind(sessionDataSource);\n\n session.begin();\n\n return sessionDataSource;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"apple-pay.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAuB,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,MAAM,OAAO,eAAe;IAI1B,YAAY,OAMX;;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAE7D,IAAI,CAAC,QAAQ;YACX,MAAA,OAAO,CAAC,yBAAyB;YACjC,8DAA8D;YAC9D,IAAI,iBAAiB,CAAkB;gBACrC,8DAA8D;gBAC9D,SAAS,EAAE,GAAmC,EAAE;oBAC9C,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,EAAE,CAAC;wBACnD,OAAO,SAAS,CAAC;oBACnB,CAAC;oBAED,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;oBACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;wBAChD,MAAM,EAAE,eAAe;qBACxB,CAAC,CAAC;oBAEH,OAAO,QAAQ,CAAC;gBAClB,CAAC,CAAA;aACF,CAAC,CAAC;IACP,CAAC;IAQK,WAAW;;YACf,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC3C,OAAO,CAAC,CAAC,QAAQ,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KAAA;IAED,wEAAwE;IACxE,uEAAuE;IACvE,wCAAwC;IAClC,oBAAoB,CACxB,CAAQ,EACR,YAAiC;;YAEjC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAEnD,IAAI,KAAK,GAAG,0BAA0B,CAAC;YACvC,IAAI,YAAY,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;gBACvD,KAAK,GAAG,kBAAkB,CAAC;YAC7B,CAAC;YAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,oBAAoB,CAAC;gBAC3D,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,YAAY,CAAC,KAAK;iBAC3B;gBACD,4BAA4B,EAAE,CAAC,eAAe,CAAC;gBAC/C,6BAA6B,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;aACjD,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;YAEpF,MAAM,iBAAiB,GAAG,IAAI,yBAAyB,CAAC;gBACtD,YAAY,EAAE,YAAY;gBAC1B,OAAO,EAAE,OAAO;gBAChB,gBAAgB,EAAE,gBAAgB;gBAClC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC,CAAC,CAAC;YAEH,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC1F,OAAO,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC5F,OAAO,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEtE,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;KAAA;CACF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { BraintreeManagerInterface } from '../../braintree-interfaces';\r\nimport { ApplePaySessionManagerInterface } from './apple-pay-session-manager';\r\nimport { DonationType, DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\r\nimport { ApplePaySessionDataSource } from './apple-pay-session-datasource';\r\nimport { ApplePayHandlerInterface } from './apple-pay-interface';\r\n\r\nexport class ApplePayHandler implements ApplePayHandlerInterface {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n instance: PromisedSingleton<any | undefined>;\r\n\r\n constructor(options: {\r\n braintreeManager: BraintreeManagerInterface;\r\n applePayClient: braintree.ApplePay;\r\n applePaySessionManager: ApplePaySessionManagerInterface;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n instancePromisedSingleton?: PromisedSingleton<any | undefined>;\r\n }) {\r\n this.braintreeManager = options.braintreeManager;\r\n this.applePayClient = options.applePayClient;\r\n this.applePaySessionManager = options.applePaySessionManager;\r\n\r\n this.instance =\r\n options.instancePromisedSingleton ??\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n new PromisedSingleton<any | undefined>({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n generator: async (): Promise<any | undefined> => {\r\n if (!this.applePaySessionManager.canMakePayments()) {\r\n return undefined;\r\n }\r\n\r\n const braintreeClient = await this.braintreeManager.instance.get();\r\n const instance = await this.applePayClient.create({\r\n client: braintreeClient,\r\n });\r\n\r\n return instance;\r\n },\r\n });\r\n }\r\n\r\n private braintreeManager: BraintreeManagerInterface;\r\n\r\n private applePaySessionManager: ApplePaySessionManagerInterface;\r\n\r\n private applePayClient: braintree.ApplePay;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n try {\r\n const instance = await this.instance.get();\r\n return !!instance;\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n // In order to trigger the Apple Pay flow, you HAVE to pass in the event\r\n // that triggered the launch. Notice we're not actually using the event\r\n // but ApplePay won't launch without it.\r\n async createPaymentRequest(\r\n e: Event,\r\n donationInfo: DonationPaymentInfo,\r\n ): Promise<ApplePaySessionDataSource> {\r\n const applePayInstance = await this.instance.get();\r\n\r\n let label = 'Internet Archive Monthly';\r\n if (donationInfo.donationType === DonationType.OneTime) {\r\n label = 'Internet Archive';\r\n }\r\n\r\n const paymentRequest = applePayInstance.createPaymentRequest({\r\n total: {\r\n label: label,\r\n amount: donationInfo.total,\r\n },\r\n requiredBillingContactFields: ['postalAddress'],\r\n requiredShippingContactFields: ['name', 'email'],\r\n });\r\n const session = this.applePaySessionManager.createNewPaymentSession(paymentRequest);\r\n\r\n const sessionDataSource = new ApplePaySessionDataSource({\r\n donationInfo: donationInfo,\r\n session: session,\r\n applePayInstance: applePayInstance,\r\n braintreeManager: this.braintreeManager,\r\n });\r\n\r\n session.onvalidatemerchant = sessionDataSource.onvalidatemerchant.bind(sessionDataSource);\r\n session.onpaymentauthorized = sessionDataSource.onpaymentauthorized.bind(sessionDataSource);\r\n session.oncancel = sessionDataSource.oncancel.bind(sessionDataSource);\r\n\r\n session.begin();\r\n\r\n return sessionDataSource;\r\n }\r\n}\r\n"]}
|
package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit-card-interface.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { Unsubscribe } from 'nanoevents';\nimport { HostedFieldName } from './hosted-field-container';\n\nexport interface CreditCardHandlerEvents {\n hostedFieldsRetry: (retryNumber: number) => void;\n hostedFieldsFailed: (error: unknown) => void;\n}\n\nexport interface CreditCardHandlerInterface {\n instance: PromisedSingleton<braintree.HostedFields | undefined>;\n tokenizeHostedFields(): Promise<braintree.HostedFieldsTokenizePayload | undefined>;\n markFieldErrors(fields: HostedFieldName[]): void;\n removeFieldErrors(fields: HostedFieldName[]): void;\n showErrorMessage(message?: string): void;\n hideErrorMessage(): void;\n on<E extends keyof CreditCardHandlerEvents>(\n event: E,\n callback: CreditCardHandlerEvents[E],\n ): Unsubscribe;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"credit-card-interface.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { Unsubscribe } from 'nanoevents';\r\nimport { HostedFieldName } from './hosted-field-container';\r\n\r\nexport interface CreditCardHandlerEvents {\r\n hostedFieldsRetry: (retryNumber: number) => void;\r\n hostedFieldsFailed: (error: unknown) => void;\r\n}\r\n\r\nexport interface CreditCardHandlerInterface {\r\n instance: PromisedSingleton<braintree.HostedFields | undefined>;\r\n tokenizeHostedFields(): Promise<braintree.HostedFieldsTokenizePayload | undefined>;\r\n markFieldErrors(fields: HostedFieldName[]): void;\r\n removeFieldErrors(fields: HostedFieldName[]): void;\r\n showErrorMessage(message?: string): void;\r\n hideErrorMessage(): void;\r\n on<E extends keyof CreditCardHandlerEvents>(\r\n event: E,\r\n callback: CreditCardHandlerEvents[E],\r\n ): Unsubscribe;\r\n}\r\n"]}
|