@internetarchive/donation-form 0.5.17 → 0.5.18-alpha.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.
Files changed (420) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +115 -115
  3. package/dist/demo/braintree-endpoint-manager.d.ts +9 -9
  4. package/dist/demo/braintree-endpoint-manager.js +45 -45
  5. package/dist/demo/braintree-endpoint-manager.js.map +1 -1
  6. package/dist/demo/demo-analytics-handler.d.ts +17 -17
  7. package/dist/demo/demo-analytics-handler.js +13 -13
  8. package/dist/demo/demo-analytics-handler.js.map +1 -1
  9. package/dist/demo/submit-form-with.d.ts +7 -7
  10. package/dist/demo/submit-form-with.js +21 -21
  11. package/dist/demo/submit-form-with.js.map +1 -1
  12. package/dist/index.d.ts +7 -7
  13. package/dist/index.js +7 -7
  14. package/dist/index.js.map +1 -1
  15. package/dist/src/braintree-manager/braintree-interfaces.d.ts +147 -147
  16. package/dist/src/braintree-manager/braintree-interfaces.js +5 -5
  17. package/dist/src/braintree-manager/braintree-interfaces.js.map +1 -1
  18. package/dist/src/braintree-manager/braintree-manager.d.ts +124 -124
  19. package/dist/src/braintree-manager/braintree-manager.js +149 -149
  20. package/dist/src/braintree-manager/braintree-manager.js.map +1 -1
  21. package/dist/src/braintree-manager/payment-clients.d.ts +47 -47
  22. package/dist/src/braintree-manager/payment-clients.js +116 -116
  23. package/dist/src/braintree-manager/payment-clients.js.map +1 -1
  24. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.d.ts +8 -8
  25. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.js.map +1 -1
  26. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.d.ts +6 -6
  27. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.js.map +1 -1
  28. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts +10 -10
  29. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -1
  30. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.d.ts +21 -21
  31. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js +99 -99
  32. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -1
  33. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.d.ts +10 -10
  34. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js +12 -12
  35. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -1
  36. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.d.ts +20 -20
  37. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js +71 -71
  38. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js.map +1 -1
  39. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.d.ts +16 -16
  40. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.js.map +1 -1
  41. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.d.ts +29 -29
  42. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js +99 -99
  43. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js.map +1 -1
  44. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.d.ts +11 -11
  45. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js +7 -7
  46. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js.map +1 -1
  47. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.d.ts +34 -34
  48. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js +52 -52
  49. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map +1 -1
  50. package/dist/src/braintree-manager/payment-providers/google-pay-interface.d.ts +7 -7
  51. package/dist/src/braintree-manager/payment-providers/google-pay-interface.js.map +1 -1
  52. package/dist/src/braintree-manager/payment-providers/google-pay.d.ts +18 -18
  53. package/dist/src/braintree-manager/payment-providers/google-pay.js +40 -40
  54. package/dist/src/braintree-manager/payment-providers/google-pay.js.map +1 -1
  55. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.d.ts +145 -145
  56. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js +60 -60
  57. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
  58. package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.d.ts +11 -11
  59. package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.js.map +1 -1
  60. package/dist/src/braintree-manager/payment-providers/paypal/paypal.d.ts +23 -23
  61. package/dist/src/braintree-manager/payment-providers/paypal/paypal.js +46 -46
  62. package/dist/src/braintree-manager/payment-providers/paypal/paypal.js.map +1 -1
  63. package/dist/src/braintree-manager/payment-providers/venmo-interface.d.ts +6 -6
  64. package/dist/src/braintree-manager/payment-providers/venmo-interface.js.map +1 -1
  65. package/dist/src/braintree-manager/payment-providers/venmo.d.ts +28 -28
  66. package/dist/src/braintree-manager/payment-providers/venmo.js +50 -50
  67. package/dist/src/braintree-manager/payment-providers/venmo.js.map +1 -1
  68. package/dist/src/braintree-manager/payment-providers-interface.d.ts +16 -16
  69. package/dist/src/braintree-manager/payment-providers-interface.js.map +1 -1
  70. package/dist/src/braintree-manager/payment-providers.d.ts +45 -45
  71. package/dist/src/braintree-manager/payment-providers.js +105 -105
  72. package/dist/src/braintree-manager/payment-providers.js.map +1 -1
  73. package/dist/src/donation-form-controller.d.ts +116 -116
  74. package/dist/src/donation-form-controller.js +562 -562
  75. package/dist/src/donation-form-controller.js.map +1 -1
  76. package/dist/src/donation-form-error.d.ts +3 -3
  77. package/dist/src/donation-form-error.js +6 -6
  78. package/dist/src/donation-form-error.js.map +1 -1
  79. package/dist/src/donation-form.d.ts +120 -120
  80. package/dist/src/donation-form.js +530 -530
  81. package/dist/src/donation-form.js.map +1 -1
  82. package/dist/src/form-elements/badged-input.d.ts +32 -32
  83. package/dist/src/form-elements/badged-input.js +124 -124
  84. package/dist/src/form-elements/badged-input.js.map +1 -1
  85. package/dist/src/form-elements/contact-form/autocomplete-field-options.d.ts +1 -1
  86. package/dist/src/form-elements/contact-form/autocomplete-field-options.js.map +1 -1
  87. package/dist/src/form-elements/contact-form/contact-form.d.ts +53 -53
  88. package/dist/src/form-elements/contact-form/contact-form.js +428 -428
  89. package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
  90. package/dist/src/form-elements/contact-form/countries.d.ts +3 -3
  91. package/dist/src/form-elements/contact-form/countries.js +252 -252
  92. package/dist/src/form-elements/contact-form/countries.js.map +1 -1
  93. package/dist/src/form-elements/header/donation-form-header.d.ts +27 -27
  94. package/dist/src/form-elements/header/donation-form-header.js +97 -97
  95. package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
  96. package/dist/src/form-elements/header/donation-summary.d.ts +11 -11
  97. package/dist/src/form-elements/header/donation-summary.js +57 -57
  98. package/dist/src/form-elements/header/donation-summary.js.map +1 -1
  99. package/dist/src/form-elements/payment-selector.d.ts +25 -25
  100. package/dist/src/form-elements/payment-selector.js +286 -286
  101. package/dist/src/form-elements/payment-selector.js.map +1 -1
  102. package/dist/src/form-elements/total-amount.d.ts +8 -8
  103. package/dist/src/form-elements/total-amount.js +47 -47
  104. package/dist/src/form-elements/total-amount.js.map +1 -1
  105. package/dist/src/modals/confirm-donation-modal-content.d.ts +31 -31
  106. package/dist/src/modals/confirm-donation-modal-content.js +168 -168
  107. package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
  108. package/dist/src/modals/error-modal-content.d.ts +14 -14
  109. package/dist/src/modals/error-modal-content.js +49 -49
  110. package/dist/src/modals/error-modal-content.js.map +1 -1
  111. package/dist/src/modals/upsell-modal-content.d.ts +32 -32
  112. package/dist/src/modals/upsell-modal-content.js +294 -294
  113. package/dist/src/modals/upsell-modal-content.js.map +1 -1
  114. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.d.ts +181 -181
  115. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +252 -252
  116. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
  117. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.d.ts +21 -21
  118. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js +76 -76
  119. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
  120. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.d.ts +70 -70
  121. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js +140 -140
  122. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
  123. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.d.ts +22 -22
  124. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js +74 -74
  125. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
  126. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.d.ts +52 -52
  127. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js +239 -239
  128. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
  129. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.d.ts +30 -30
  130. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js +89 -89
  131. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
  132. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.d.ts +75 -75
  133. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js +94 -94
  134. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
  135. package/dist/src/payment-flow-handlers/payment-flow-handlers.d.ts +111 -111
  136. package/dist/src/payment-flow-handlers/payment-flow-handlers.js +107 -107
  137. package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
  138. package/dist/src/recaptcha-manager/recaptcha-manager.d.ts +48 -48
  139. package/dist/src/recaptcha-manager/recaptcha-manager.js +88 -88
  140. package/dist/src/recaptcha-manager/recaptcha-manager.js.map +1 -1
  141. package/dist/src/util/promisedSleep.d.ts +1 -1
  142. package/dist/src/util/promisedSleep.js +3 -3
  143. package/dist/src/util/promisedSleep.js.map +1 -1
  144. package/dist/test/helpers/fillInContactForm.d.ts +2 -2
  145. package/dist/test/helpers/fillInContactForm.js +19 -19
  146. package/dist/test/helpers/fillInContactForm.js.map +1 -1
  147. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.d.ts +7 -7
  148. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js +9 -9
  149. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js.map +1 -1
  150. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.d.ts +15 -15
  151. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js +32 -32
  152. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
  153. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.d.ts +9 -9
  154. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js +15 -15
  155. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js.map +1 -1
  156. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.d.ts +15 -15
  157. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js +30 -30
  158. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js.map +1 -1
  159. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.d.ts +9 -9
  160. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js +17 -17
  161. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js.map +1 -1
  162. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.d.ts +30 -30
  163. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js +29 -29
  164. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
  165. package/dist/test/mocks/mock-braintree-manager.d.ts +45 -45
  166. package/dist/test/mocks/mock-braintree-manager.js +71 -71
  167. package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
  168. package/dist/test/mocks/mock-donation-info.d.ts +4 -4
  169. package/dist/test/mocks/mock-donation-info.js +10 -10
  170. package/dist/test/mocks/mock-donation-info.js.map +1 -1
  171. package/dist/test/mocks/mock-endpoint-manager.d.ts +12 -12
  172. package/dist/test/mocks/mock-endpoint-manager.js +19 -19
  173. package/dist/test/mocks/mock-endpoint-manager.js.map +1 -1
  174. package/dist/test/mocks/mock-hosted-fields-config.d.ts +4 -4
  175. package/dist/test/mocks/mock-hosted-fields-config.js +37 -37
  176. package/dist/test/mocks/mock-hosted-fields-config.js.map +1 -1
  177. package/dist/test/mocks/mock-hosted-fields-container.d.ts +13 -13
  178. package/dist/test/mocks/mock-hosted-fields-container.js +27 -27
  179. package/dist/test/mocks/mock-hosted-fields-container.js.map +1 -1
  180. package/dist/test/mocks/mock-lazy-loader.d.ts +15 -15
  181. package/dist/test/mocks/mock-lazy-loader.js +20 -20
  182. package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
  183. package/dist/test/mocks/mock-modal-manager.d.ts +17 -17
  184. package/dist/test/mocks/mock-modal-manager.js +26 -26
  185. package/dist/test/mocks/mock-modal-manager.js.map +1 -1
  186. package/dist/test/mocks/mock-payment-clients.d.ts +29 -29
  187. package/dist/test/mocks/mock-payment-clients.js +78 -78
  188. package/dist/test/mocks/mock-payment-clients.js.map +1 -1
  189. package/dist/test/mocks/mock-paypal-button-renderer.d.ts +5 -5
  190. package/dist/test/mocks/mock-paypal-button-renderer.js +6 -6
  191. package/dist/test/mocks/mock-paypal-button-renderer.js.map +1 -1
  192. package/dist/test/mocks/mock-recaptcha-manager.d.ts +7 -7
  193. package/dist/test/mocks/mock-recaptcha-manager.js +14 -14
  194. package/dist/test/mocks/mock-recaptcha-manager.js.map +1 -1
  195. package/dist/test/mocks/models/mock-billing-info.d.ts +2 -2
  196. package/dist/test/mocks/models/mock-billing-info.js +9 -9
  197. package/dist/test/mocks/models/mock-billing-info.js.map +1 -1
  198. package/dist/test/mocks/models/mock-custom-fields.d.ts +2 -2
  199. package/dist/test/mocks/models/mock-custom-fields.js +7 -7
  200. package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
  201. package/dist/test/mocks/models/mock-customer-info.d.ts +2 -2
  202. package/dist/test/mocks/models/mock-customer-info.js +6 -6
  203. package/dist/test/mocks/models/mock-customer-info.js.map +1 -1
  204. package/dist/test/mocks/models/mock-donation-request.d.ts +2 -2
  205. package/dist/test/mocks/models/mock-donation-request.js +18 -18
  206. package/dist/test/mocks/models/mock-donation-request.js.map +1 -1
  207. package/dist/test/mocks/models/mock-success-response.d.ts +2 -2
  208. package/dist/test/mocks/models/mock-success-response.js +14 -14
  209. package/dist/test/mocks/models/mock-success-response.js.map +1 -1
  210. package/dist/test/mocks/payment-clients/mock-applepay-client.d.ts +21 -21
  211. package/dist/test/mocks/payment-clients/mock-applepay-client.js +72 -72
  212. package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
  213. package/dist/test/mocks/payment-clients/mock-applepay-payment.d.ts +6 -6
  214. package/dist/test/mocks/payment-clients/mock-applepay-payment.js +42 -42
  215. package/dist/test/mocks/payment-clients/mock-applepay-payment.js.map +1 -1
  216. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.d.ts +22 -22
  217. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js +35 -35
  218. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
  219. package/dist/test/mocks/payment-clients/mock-applepay-session.d.ts +30 -30
  220. package/dist/test/mocks/payment-clients/mock-applepay-session.js +52 -52
  221. package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
  222. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.d.ts +10 -10
  223. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js +12 -12
  224. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
  225. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.d.ts +22 -22
  226. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js +34 -34
  227. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js.map +1 -1
  228. package/dist/test/mocks/payment-clients/mock-braintree-client.d.ts +14 -14
  229. package/dist/test/mocks/payment-clients/mock-braintree-client.js +19 -19
  230. package/dist/test/mocks/payment-clients/mock-braintree-client.js.map +1 -1
  231. package/dist/test/mocks/payment-clients/mock-data-collector.d.ts +11 -11
  232. package/dist/test/mocks/payment-clients/mock-data-collector.js +17 -17
  233. package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
  234. package/dist/test/mocks/payment-clients/mock-googlepay-client.d.ts +22 -22
  235. package/dist/test/mocks/payment-clients/mock-googlepay-client.js +42 -42
  236. package/dist/test/mocks/payment-clients/mock-googlepay-client.js.map +1 -1
  237. package/dist/test/mocks/payment-clients/mock-googlepay-library.d.ts +10 -10
  238. package/dist/test/mocks/payment-clients/mock-googlepay-library.js +22 -22
  239. package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
  240. package/dist/test/mocks/payment-clients/mock-grecaptcha.d.ts +23 -23
  241. package/dist/test/mocks/payment-clients/mock-grecaptcha.js +62 -62
  242. package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
  243. package/dist/test/mocks/payment-clients/mock-hostedfields-client.d.ts +33 -33
  244. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js +54 -54
  245. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
  246. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.d.ts +1 -1
  247. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js +50 -50
  248. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js.map +1 -1
  249. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.d.ts +1 -1
  250. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js +13 -13
  251. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js.map +1 -1
  252. package/dist/test/mocks/payment-clients/mock-paypal-client.d.ts +23 -23
  253. package/dist/test/mocks/payment-clients/mock-paypal-client.js +62 -62
  254. package/dist/test/mocks/payment-clients/mock-paypal-client.js.map +1 -1
  255. package/dist/test/mocks/payment-clients/mock-paypal-library.d.ts +4 -4
  256. package/dist/test/mocks/payment-clients/mock-paypal-library.js +9 -9
  257. package/dist/test/mocks/payment-clients/mock-paypal-library.js.map +1 -1
  258. package/dist/test/mocks/payment-clients/mock-venmo-client.d.ts +22 -22
  259. package/dist/test/mocks/payment-clients/mock-venmo-client.js +36 -36
  260. package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
  261. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.d.ts +10 -10
  262. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js +14 -14
  263. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js.map +1 -1
  264. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.d.ts +9 -9
  265. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js +19 -19
  266. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js.map +1 -1
  267. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.d.ts +18 -18
  268. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js +41 -41
  269. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
  270. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.d.ts +8 -8
  271. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js +16 -16
  272. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js.map +1 -1
  273. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.d.ts +28 -28
  274. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js +52 -52
  275. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
  276. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.d.ts +11 -11
  277. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js +37 -37
  278. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
  279. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.d.ts +12 -12
  280. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js +15 -15
  281. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js.map +1 -1
  282. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.d.ts +7 -7
  283. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js +22 -22
  284. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js.map +1 -1
  285. package/dist/test/mocks/payment-providers/mock-payment-providers.d.ts +21 -21
  286. package/dist/test/mocks/payment-providers/mock-payment-providers.js +45 -45
  287. package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
  288. package/dist/test/tests/braintree-manager.test.d.ts +1 -1
  289. package/dist/test/tests/braintree-manager.test.js +166 -166
  290. package/dist/test/tests/braintree-manager.test.js.map +1 -1
  291. package/dist/test/tests/donation-form-controller.test.d.ts +1 -1
  292. package/dist/test/tests/donation-form-controller.test.js +188 -188
  293. package/dist/test/tests/donation-form-controller.test.js.map +1 -1
  294. package/dist/test/tests/donation-form.test.d.ts +1 -1
  295. package/dist/test/tests/donation-form.test.js +109 -109
  296. package/dist/test/tests/donation-form.test.js.map +1 -1
  297. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.d.ts +1 -1
  298. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +216 -216
  299. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
  300. package/dist/test/tests/form-elements/donation-summary.test.d.ts +1 -1
  301. package/dist/test/tests/form-elements/donation-summary.test.js +36 -36
  302. package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
  303. package/dist/test/tests/form-elements/payment-selector.test.d.ts +1 -1
  304. package/dist/test/tests/form-elements/payment-selector.test.js +69 -69
  305. package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
  306. package/dist/test/tests/modals/error-modal-content.test.d.ts +1 -1
  307. package/dist/test/tests/modals/error-modal-content.test.js +14 -14
  308. package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
  309. package/dist/test/tests/modals/upsell-modal-content.test.d.ts +1 -1
  310. package/dist/test/tests/modals/upsell-modal-content.test.js +163 -163
  311. package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
  312. package/dist/test/tests/models/donation-payment-info.test.d.ts +1 -1
  313. package/dist/test/tests/models/donation-payment-info.test.js +74 -74
  314. package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
  315. package/dist/test/tests/payment-clients.test.d.ts +1 -1
  316. package/dist/test/tests/payment-clients.test.js +130 -130
  317. package/dist/test/tests/payment-clients.test.js.map +1 -1
  318. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.d.ts +1 -1
  319. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js +160 -160
  320. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
  321. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.d.ts +1 -1
  322. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js +36 -36
  323. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js.map +1 -1
  324. package/dist/test/tests/payment-providers/applepay.test.d.ts +1 -1
  325. package/dist/test/tests/payment-providers/applepay.test.js +78 -78
  326. package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
  327. package/dist/test/tests/payment-providers/creditcard.test.d.ts +1 -1
  328. package/dist/test/tests/payment-providers/creditcard.test.js +190 -190
  329. package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
  330. package/dist/test/tests/payment-providers/googlepay.test.d.ts +1 -1
  331. package/dist/test/tests/payment-providers/googlepay.test.js +48 -48
  332. package/dist/test/tests/payment-providers/googlepay.test.js.map +1 -1
  333. package/dist/test/tests/payment-providers/payment-providers.test.d.ts +1 -1
  334. package/dist/test/tests/payment-providers/payment-providers.test.js +38 -38
  335. package/dist/test/tests/payment-providers/payment-providers.test.js.map +1 -1
  336. package/dist/test/tests/payment-providers/paypal-button-datasource.test.d.ts +1 -1
  337. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js +162 -162
  338. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
  339. package/dist/test/tests/payment-providers/paypal.test.d.ts +1 -1
  340. package/dist/test/tests/payment-providers/paypal.test.js +38 -38
  341. package/dist/test/tests/payment-providers/paypal.test.js.map +1 -1
  342. package/dist/test/tests/payment-providers/venmo.test.d.ts +1 -1
  343. package/dist/test/tests/payment-providers/venmo.test.js +77 -77
  344. package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
  345. package/dist/test/tests/recaptcha-manager.test.d.ts +1 -1
  346. package/dist/test/tests/recaptcha-manager.test.js +70 -70
  347. package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
  348. package/package.json +101 -101
  349. package/src/@types/analytics-handler/index.d.ts +8 -8
  350. package/src/@types/braintree-web/LICENSE +21 -21
  351. package/src/@types/braintree-web/index.d.ts +93 -93
  352. package/src/@types/braintree-web/modules/american-express.d.ts +50 -50
  353. package/src/@types/braintree-web/modules/apple-pay.d.ts +213 -213
  354. package/src/@types/braintree-web/modules/client.d.ts +103 -103
  355. package/src/@types/braintree-web/modules/core.d.ts +34 -34
  356. package/src/@types/braintree-web/modules/data-collector.d.ts +13 -13
  357. package/src/@types/braintree-web/modules/google-payment.d.ts +269 -269
  358. package/src/@types/braintree-web/modules/hosted-fields.d.ts +366 -366
  359. package/src/@types/braintree-web/modules/paypal-checkout.d.ts +262 -262
  360. package/src/@types/braintree-web/modules/paypal.d.ts +177 -177
  361. package/src/@types/braintree-web/modules/three-d-secure.d.ts +141 -141
  362. package/src/@types/braintree-web/modules/unionpay.d.ts +224 -224
  363. package/src/@types/braintree-web/modules/us-bank-account.d.ts +81 -81
  364. package/src/@types/braintree-web/modules/venmo.d.ts +110 -110
  365. package/src/@types/braintree-web/package.json +64 -64
  366. package/src/@types/paypal-checkout-components/LICENSE +21 -21
  367. package/src/@types/paypal-checkout-components/index.d.ts +67 -67
  368. package/src/@types/paypal-checkout-components/modules/button.d.ts +50 -50
  369. package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +244 -244
  370. package/src/@types/paypal-checkout-components/modules/configuration.d.ts +114 -114
  371. package/src/@types/paypal-checkout-components/package.json +58 -58
  372. package/src/braintree-manager/braintree-interfaces.ts +172 -172
  373. package/src/braintree-manager/braintree-manager.ts +283 -283
  374. package/src/braintree-manager/payment-clients.ts +148 -148
  375. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts +13 -13
  376. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts +8 -8
  377. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts +10 -10
  378. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts +119 -119
  379. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts +21 -21
  380. package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +98 -98
  381. package/src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts +21 -21
  382. package/src/braintree-manager/payment-providers/credit-card/credit-card.ts +130 -130
  383. package/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts +19 -19
  384. package/src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts +85 -85
  385. package/src/braintree-manager/payment-providers/google-pay-interface.ts +8 -8
  386. package/src/braintree-manager/payment-providers/google-pay.ts +59 -59
  387. package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +218 -218
  388. package/src/braintree-manager/payment-providers/paypal/paypal-interface.ts +13 -13
  389. package/src/braintree-manager/payment-providers/paypal/paypal.ts +78 -78
  390. package/src/braintree-manager/payment-providers/venmo-interface.ts +8 -8
  391. package/src/braintree-manager/payment-providers/venmo.ts +67 -67
  392. package/src/braintree-manager/payment-providers-interface.ts +25 -25
  393. package/src/braintree-manager/payment-providers.ts +147 -147
  394. package/src/donation-form-controller.ts +619 -619
  395. package/src/donation-form-error.ts +6 -6
  396. package/src/donation-form.ts +566 -566
  397. package/src/form-elements/badged-input.ts +113 -113
  398. package/src/form-elements/contact-form/autocomplete-field-options.ts +63 -63
  399. package/src/form-elements/contact-form/contact-form.ts +427 -427
  400. package/src/form-elements/contact-form/countries.ts +252 -252
  401. package/src/form-elements/header/donation-form-header.ts +100 -100
  402. package/src/form-elements/header/donation-summary.ts +61 -61
  403. package/src/form-elements/payment-selector.ts +293 -293
  404. package/src/form-elements/total-amount.ts +46 -46
  405. package/src/modals/confirm-donation-modal-content.ts +160 -160
  406. package/src/modals/error-modal-content.ts +48 -48
  407. package/src/modals/upsell-modal-content.ts +294 -294
  408. package/src/payment-flow-handlers/donation-flow-modal-manager.ts +450 -450
  409. package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +108 -108
  410. package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +231 -231
  411. package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +113 -113
  412. package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +332 -332
  413. package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +118 -118
  414. package/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.ts +127 -127
  415. package/src/payment-flow-handlers/payment-flow-handlers.ts +218 -218
  416. package/src/recaptcha-manager/recaptcha-manager.ts +123 -123
  417. package/src/util/promisedSleep.ts +3 -3
  418. package/dist/test/mocks/mock-analytics-handler.d.ts +0 -8
  419. package/dist/test/mocks/mock-analytics-handler.js +0 -10
  420. package/dist/test/mocks/mock-analytics-handler.js.map +0 -1
@@ -1,332 +1,332 @@
1
- import { createNanoEvents, Emitter, Unsubscribe } from 'nanoevents';
2
-
3
- import {
4
- PayPalButtonDataSourceInterface,
5
- PayPalButtonDataSourceDelegate,
6
- } from '../../braintree-manager/payment-providers/paypal/paypal-button-datasource';
7
- import {
8
- DonationResponse,
9
- DonationType,
10
- DonationPaymentInfo,
11
- SuccessResponse,
12
- CustomerInfo,
13
- BillingInfo,
14
- PaymentProvider,
15
- ErrorResponse,
16
- } from '@internetarchive/donation-form-data-models';
17
- import { BraintreeManagerInterface } from '../../braintree-manager/braintree-interfaces';
18
-
19
- import { UpsellModalCTAMode } from '../../modals/upsell-modal-content';
20
- import {
21
- DonationFlowModalManagerInterface,
22
- DonationFlowModalManager,
23
- } from '../donation-flow-modal-manager';
24
-
25
- export interface PayPalFlowHandlerInterface {
26
- updateDonationInfo(donationInfo: DonationPaymentInfo): void;
27
- updateUpsellDonationInfo(donationInfo: DonationPaymentInfo): void;
28
- renderPayPalButton(donationInfo: DonationPaymentInfo): Promise<void>;
29
- on<E extends keyof PayPalFlowHandlerEvents>(
30
- event: E,
31
- callback: PayPalFlowHandlerEvents[E],
32
- ): Unsubscribe;
33
- }
34
-
35
- /**
36
- * This is a class to combine the data from the one-time purchase to the upsell
37
- *
38
- * @class UpsellDataSourceContainer
39
- */
40
- class UpsellDataSourceContainer {
41
- upsellButtonDataSource: PayPalButtonDataSourceInterface;
42
- oneTimePayload: paypal.TokenizePayload;
43
- oneTimeSuccessResponse: SuccessResponse;
44
-
45
- constructor(options: {
46
- upsellButtonDataSource: PayPalButtonDataSourceInterface;
47
- oneTimePayload: paypal.TokenizePayload;
48
- oneTimeSuccessResponse: SuccessResponse;
49
- }) {
50
- this.upsellButtonDataSource = options.upsellButtonDataSource;
51
- this.oneTimePayload = options.oneTimePayload;
52
- this.oneTimeSuccessResponse = options.oneTimeSuccessResponse;
53
- }
54
- }
55
-
56
- export interface PayPalFlowHandlerEvents {
57
- payPalPaymentStarted: (dataSource: PayPalButtonDataSourceInterface, options: object) => void;
58
- payPalPaymentCancelled: (dataSource: PayPalButtonDataSourceInterface, data: object) => void;
59
- payPalPaymentError: (dataSource: PayPalButtonDataSourceInterface, error: string) => void;
60
- payPalPaymentConfirmed: (dataSource: PayPalButtonDataSourceInterface, data: object) => void;
61
- }
62
-
63
- /**
64
- * This class manages the user-flow for PayPal.
65
- *
66
- * @export
67
- * @class PayPalFlowHandler
68
- * @implements {PayPalFlowHandlerInterface}
69
- * @implements {PayPalButtonDataSourceDelegate}
70
- */
71
- export class PayPalFlowHandler
72
- implements PayPalFlowHandlerInterface, PayPalButtonDataSourceDelegate {
73
- private upsellButtonDataSourceContainer?: UpsellDataSourceContainer;
74
-
75
- private buttonDataSource?: PayPalButtonDataSourceInterface;
76
-
77
- private donationFlowModalManager: DonationFlowModalManagerInterface;
78
-
79
- private braintreeManager: BraintreeManagerInterface;
80
-
81
- private emitter: Emitter<PayPalFlowHandlerEvents> = createNanoEvents<PayPalFlowHandlerEvents>();
82
-
83
- updateDonationInfo(donationInfo: DonationPaymentInfo): void {
84
- if (this.buttonDataSource) {
85
- this.buttonDataSource.donationInfo = donationInfo;
86
- }
87
- }
88
-
89
- updateUpsellDonationInfo(donationInfo: DonationPaymentInfo): void {
90
- if (this.upsellButtonDataSourceContainer) {
91
- this.upsellButtonDataSourceContainer.upsellButtonDataSource.donationInfo = donationInfo;
92
- }
93
- }
94
-
95
- constructor(options: {
96
- braintreeManager: BraintreeManagerInterface;
97
- donationFlowModalManager: DonationFlowModalManagerInterface;
98
- }) {
99
- this.braintreeManager = options.braintreeManager;
100
- this.donationFlowModalManager = options.donationFlowModalManager;
101
- }
102
-
103
- on<E extends keyof PayPalFlowHandlerEvents>(
104
- event: E,
105
- callback: PayPalFlowHandlerEvents[E],
106
- ): Unsubscribe {
107
- return this.emitter.on(event, callback);
108
- }
109
-
110
- async payPalPaymentStarted(
111
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
112
- dataSource: PayPalButtonDataSourceInterface,
113
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
114
- options: object,
115
- ): Promise<void> {
116
- this.emitter.emit('payPalPaymentStarted', dataSource, options);
117
- }
118
-
119
- /**
120
- * Once we have the dataSource & payload, we ask patron to confirm donation.
121
- * Once confirmed, we move forward to: `payPalPaymentConfirmed`
122
- */
123
- async payPalPaymentAuthorized(dataSource: PayPalButtonDataSourceInterface,
124
- payload: paypal.TokenizePayload
125
- ): Promise<void> {
126
-
127
- const { donationType, total } = dataSource.donationInfo;
128
- this.donationFlowModalManager.showConfirmationStepModal({
129
- donationType,
130
- amount: total,
131
- currencyType: 'USD', // defaults to USD for now
132
- confirmDonationCB: () => {
133
- this.payPalPaymentConfirmed(dataSource, payload);
134
- },
135
- cancelDonationCB: () => {
136
- this.donationFlowModalManager.closeModal();
137
- this.payPalPaymentCancelled(dataSource, {});
138
- }
139
- });
140
- }
141
-
142
- async payPalPaymentConfirmed(
143
- dataSource: PayPalButtonDataSourceInterface,
144
- payload: paypal.TokenizePayload,
145
- ): Promise<void> {
146
- this.emitter.emit('payPalPaymentConfirmed', dataSource, {});
147
- this.donationFlowModalManager.showProcessingModal();
148
-
149
- const donationType = dataSource.donationInfo.donationType;
150
-
151
- const details = payload?.details;
152
-
153
- const customerInfo = new CustomerInfo({
154
- email: details?.email,
155
- firstName: details?.firstName,
156
- lastName: details?.lastName,
157
- });
158
-
159
- const shippingAddress = details.shippingAddress;
160
-
161
- const billingInfo = new BillingInfo({
162
- streetAddress: shippingAddress?.line1,
163
- extendedAddress: shippingAddress?.line2,
164
- locality: shippingAddress?.city,
165
- region: shippingAddress?.state,
166
- postalCode: shippingAddress?.postalCode,
167
- countryCodeAlpha2: shippingAddress?.countryCode,
168
- });
169
-
170
- const oneTimeTransaction = this.upsellButtonDataSourceContainer
171
- ? this.upsellButtonDataSourceContainer.oneTimeSuccessResponse.transaction_id
172
- : undefined;
173
-
174
- const response: DonationResponse = await this.braintreeManager.submitDonation({
175
- nonce: payload.nonce,
176
- paymentProvider: PaymentProvider.PayPal,
177
- donationInfo: dataSource.donationInfo,
178
- customerInfo: customerInfo,
179
- billingInfo: billingInfo,
180
- upsellOnetimeTransactionId: oneTimeTransaction,
181
- });
182
-
183
- if (!response.success) {
184
- const error = response.value as ErrorResponse;
185
- this.donationFlowModalManager.showErrorModal({
186
- message: error.message,
187
- });
188
- return;
189
- }
190
-
191
- const successResponse = response.value as SuccessResponse;
192
-
193
- switch (donationType) {
194
- case DonationType.OneTime:
195
- this.showUpsellModal(payload, successResponse);
196
- break;
197
- case DonationType.Monthly:
198
- // show thank you, redirect
199
- this.donationFlowModalManager.showThankYouModal({ successResponse });
200
- break;
201
- case DonationType.Upsell:
202
- if (this.upsellButtonDataSourceContainer) {
203
- this.donationFlowModalManager.showThankYouModal({
204
- successResponse: this.upsellButtonDataSourceContainer.oneTimeSuccessResponse,
205
- upsellSuccessResponse: successResponse,
206
- });
207
- } else {
208
- // we're in the upsell flow, but no upsell data source container.. this should not happen
209
- this.donationFlowModalManager.showErrorModal({
210
- message: 'Error setting up monthly donation',
211
- });
212
- }
213
- break;
214
- }
215
- }
216
-
217
- async payPalPaymentCancelled(
218
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
219
- dataSource: PayPalButtonDataSourceInterface,
220
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
221
- data: object,
222
- ): Promise<void> {
223
- this.emitter.emit('payPalPaymentCancelled', dataSource, data);
224
- }
225
-
226
- async payPalPaymentError(
227
- dataSource: PayPalButtonDataSourceInterface,
228
- error: string,
229
- ): Promise<void> {
230
- this.emitter.emit('payPalPaymentError', dataSource, error);
231
- console.error(
232
- 'PaymentSector:payPalPaymentError error:',
233
- dataSource,
234
- dataSource.donationInfo,
235
- error,
236
- );
237
- }
238
-
239
- async renderPayPalButton(donationInfo: DonationPaymentInfo): Promise<void> {
240
- const handler = await this.braintreeManager?.paymentProviders.paypalHandler.get();
241
-
242
- this.buttonDataSource = await handler?.renderPayPalButton({
243
- selector: '#paypal-button',
244
- style: {
245
- color: 'blue' as paypal.ButtonColorOption, // I'm not sure why I can't access the enum directly here.. I get a UMD error
246
- label: 'paypal' as paypal.ButtonLabelOption,
247
- shape: 'rect' as paypal.ButtonShapeOption,
248
- size: 'medium' as paypal.ButtonSizeOption,
249
- tagline: false,
250
- },
251
- donationInfo: donationInfo,
252
- });
253
-
254
- if (this.buttonDataSource) {
255
- this.buttonDataSource.delegate = this;
256
- }
257
- }
258
-
259
- private async showUpsellModal(
260
- oneTimePayload: paypal.TokenizePayload,
261
- oneTimeSuccessResponse: SuccessResponse,
262
- ): Promise<void> {
263
- this.donationFlowModalManager.showUpsellModal({
264
- oneTimeAmount: oneTimeSuccessResponse.amount,
265
- amountChanged: this.upsellAmountChanged.bind(this),
266
- noSelected: () => {
267
- this.donationFlowModalManager.showThankYouModal({
268
- successResponse: oneTimeSuccessResponse,
269
- });
270
- },
271
- ctaMode: UpsellModalCTAMode.PayPalUpsellSlot,
272
- userClosedModalCallback: () => {
273
- this.donationFlowModalManager.showThankYouModal({
274
- successResponse: oneTimeSuccessResponse,
275
- });
276
- },
277
- });
278
-
279
- const amount = DonationFlowModalManager.getDefaultUpsellAmount(oneTimeSuccessResponse.amount);
280
-
281
- const upsellDonationInfo = new DonationPaymentInfo({
282
- amount: amount,
283
- donationType: DonationType.Upsell,
284
- coverFees: false,
285
- });
286
-
287
- if (!this.upsellButtonDataSourceContainer) {
288
- this.renderUpsellPayPalButton({
289
- donationInfo: upsellDonationInfo,
290
- oneTimePayload,
291
- oneTimeSuccessResponse,
292
- });
293
- }
294
- }
295
-
296
- private upsellAmountChanged(amount: number): void {
297
- if (this.upsellButtonDataSourceContainer) {
298
- this.upsellButtonDataSourceContainer.upsellButtonDataSource.donationInfo.amount = amount;
299
- }
300
- }
301
-
302
- private async renderUpsellPayPalButton(options: {
303
- donationInfo: DonationPaymentInfo;
304
- oneTimePayload: paypal.TokenizePayload;
305
- oneTimeSuccessResponse: SuccessResponse;
306
- }): Promise<void> {
307
- const handler = await this.braintreeManager?.paymentProviders.paypalHandler.get();
308
-
309
- const upsellButtonDataSource = await handler?.renderPayPalButton({
310
- selector: '#paypal-upsell-button',
311
- style: {
312
- color: 'blue' as paypal.ButtonColorOption,
313
- label: 'paypal' as paypal.ButtonLabelOption,
314
- shape: 'rect' as paypal.ButtonShapeOption,
315
- size: 'responsive' as paypal.ButtonSizeOption,
316
- tagline: false,
317
- },
318
- donationInfo: options.donationInfo,
319
- });
320
-
321
- if (upsellButtonDataSource) {
322
- upsellButtonDataSource.delegate = this;
323
- this.upsellButtonDataSourceContainer = new UpsellDataSourceContainer({
324
- upsellButtonDataSource: upsellButtonDataSource,
325
- oneTimePayload: options.oneTimePayload,
326
- oneTimeSuccessResponse: options.oneTimeSuccessResponse,
327
- });
328
- } else {
329
- console.error('error rendering paypal upsell button');
330
- }
331
- }
332
- }
1
+ import { createNanoEvents, Emitter, Unsubscribe } from 'nanoevents';
2
+
3
+ import {
4
+ PayPalButtonDataSourceInterface,
5
+ PayPalButtonDataSourceDelegate,
6
+ } from '../../braintree-manager/payment-providers/paypal/paypal-button-datasource';
7
+ import {
8
+ DonationResponse,
9
+ DonationType,
10
+ DonationPaymentInfo,
11
+ SuccessResponse,
12
+ CustomerInfo,
13
+ BillingInfo,
14
+ PaymentProvider,
15
+ ErrorResponse,
16
+ } from '@internetarchive/donation-form-data-models';
17
+ import { BraintreeManagerInterface } from '../../braintree-manager/braintree-interfaces';
18
+
19
+ import { UpsellModalCTAMode } from '../../modals/upsell-modal-content';
20
+ import {
21
+ DonationFlowModalManagerInterface,
22
+ DonationFlowModalManager,
23
+ } from '../donation-flow-modal-manager';
24
+
25
+ export interface PayPalFlowHandlerInterface {
26
+ updateDonationInfo(donationInfo: DonationPaymentInfo): void;
27
+ updateUpsellDonationInfo(donationInfo: DonationPaymentInfo): void;
28
+ renderPayPalButton(donationInfo: DonationPaymentInfo): Promise<void>;
29
+ on<E extends keyof PayPalFlowHandlerEvents>(
30
+ event: E,
31
+ callback: PayPalFlowHandlerEvents[E],
32
+ ): Unsubscribe;
33
+ }
34
+
35
+ /**
36
+ * This is a class to combine the data from the one-time purchase to the upsell
37
+ *
38
+ * @class UpsellDataSourceContainer
39
+ */
40
+ class UpsellDataSourceContainer {
41
+ upsellButtonDataSource: PayPalButtonDataSourceInterface;
42
+ oneTimePayload: paypal.TokenizePayload;
43
+ oneTimeSuccessResponse: SuccessResponse;
44
+
45
+ constructor(options: {
46
+ upsellButtonDataSource: PayPalButtonDataSourceInterface;
47
+ oneTimePayload: paypal.TokenizePayload;
48
+ oneTimeSuccessResponse: SuccessResponse;
49
+ }) {
50
+ this.upsellButtonDataSource = options.upsellButtonDataSource;
51
+ this.oneTimePayload = options.oneTimePayload;
52
+ this.oneTimeSuccessResponse = options.oneTimeSuccessResponse;
53
+ }
54
+ }
55
+
56
+ export interface PayPalFlowHandlerEvents {
57
+ payPalPaymentStarted: (dataSource: PayPalButtonDataSourceInterface, options: object) => void;
58
+ payPalPaymentCancelled: (dataSource: PayPalButtonDataSourceInterface, data: object) => void;
59
+ payPalPaymentError: (dataSource: PayPalButtonDataSourceInterface, error: string) => void;
60
+ payPalPaymentConfirmed: (dataSource: PayPalButtonDataSourceInterface, data: object) => void;
61
+ }
62
+
63
+ /**
64
+ * This class manages the user-flow for PayPal.
65
+ *
66
+ * @export
67
+ * @class PayPalFlowHandler
68
+ * @implements {PayPalFlowHandlerInterface}
69
+ * @implements {PayPalButtonDataSourceDelegate}
70
+ */
71
+ export class PayPalFlowHandler
72
+ implements PayPalFlowHandlerInterface, PayPalButtonDataSourceDelegate {
73
+ private upsellButtonDataSourceContainer?: UpsellDataSourceContainer;
74
+
75
+ private buttonDataSource?: PayPalButtonDataSourceInterface;
76
+
77
+ private donationFlowModalManager: DonationFlowModalManagerInterface;
78
+
79
+ private braintreeManager: BraintreeManagerInterface;
80
+
81
+ private emitter: Emitter<PayPalFlowHandlerEvents> = createNanoEvents<PayPalFlowHandlerEvents>();
82
+
83
+ updateDonationInfo(donationInfo: DonationPaymentInfo): void {
84
+ if (this.buttonDataSource) {
85
+ this.buttonDataSource.donationInfo = donationInfo;
86
+ }
87
+ }
88
+
89
+ updateUpsellDonationInfo(donationInfo: DonationPaymentInfo): void {
90
+ if (this.upsellButtonDataSourceContainer) {
91
+ this.upsellButtonDataSourceContainer.upsellButtonDataSource.donationInfo = donationInfo;
92
+ }
93
+ }
94
+
95
+ constructor(options: {
96
+ braintreeManager: BraintreeManagerInterface;
97
+ donationFlowModalManager: DonationFlowModalManagerInterface;
98
+ }) {
99
+ this.braintreeManager = options.braintreeManager;
100
+ this.donationFlowModalManager = options.donationFlowModalManager;
101
+ }
102
+
103
+ on<E extends keyof PayPalFlowHandlerEvents>(
104
+ event: E,
105
+ callback: PayPalFlowHandlerEvents[E],
106
+ ): Unsubscribe {
107
+ return this.emitter.on(event, callback);
108
+ }
109
+
110
+ async payPalPaymentStarted(
111
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
112
+ dataSource: PayPalButtonDataSourceInterface,
113
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
114
+ options: object,
115
+ ): Promise<void> {
116
+ this.emitter.emit('payPalPaymentStarted', dataSource, options);
117
+ }
118
+
119
+ /**
120
+ * Once we have the dataSource & payload, we ask patron to confirm donation.
121
+ * Once confirmed, we move forward to: `payPalPaymentConfirmed`
122
+ */
123
+ async payPalPaymentAuthorized(dataSource: PayPalButtonDataSourceInterface,
124
+ payload: paypal.TokenizePayload
125
+ ): Promise<void> {
126
+
127
+ const { donationType, total } = dataSource.donationInfo;
128
+ this.donationFlowModalManager.showConfirmationStepModal({
129
+ donationType,
130
+ amount: total,
131
+ currencyType: 'USD', // defaults to USD for now
132
+ confirmDonationCB: () => {
133
+ this.payPalPaymentConfirmed(dataSource, payload);
134
+ },
135
+ cancelDonationCB: () => {
136
+ this.donationFlowModalManager.closeModal();
137
+ this.payPalPaymentCancelled(dataSource, {});
138
+ }
139
+ });
140
+ }
141
+
142
+ async payPalPaymentConfirmed(
143
+ dataSource: PayPalButtonDataSourceInterface,
144
+ payload: paypal.TokenizePayload,
145
+ ): Promise<void> {
146
+ this.emitter.emit('payPalPaymentConfirmed', dataSource, {});
147
+ this.donationFlowModalManager.showProcessingModal();
148
+
149
+ const donationType = dataSource.donationInfo.donationType;
150
+
151
+ const details = payload?.details;
152
+
153
+ const customerInfo = new CustomerInfo({
154
+ email: details?.email,
155
+ firstName: details?.firstName,
156
+ lastName: details?.lastName,
157
+ });
158
+
159
+ const shippingAddress = details.shippingAddress;
160
+
161
+ const billingInfo = new BillingInfo({
162
+ streetAddress: shippingAddress?.line1,
163
+ extendedAddress: shippingAddress?.line2,
164
+ locality: shippingAddress?.city,
165
+ region: shippingAddress?.state,
166
+ postalCode: shippingAddress?.postalCode,
167
+ countryCodeAlpha2: shippingAddress?.countryCode,
168
+ });
169
+
170
+ const oneTimeTransaction = this.upsellButtonDataSourceContainer
171
+ ? this.upsellButtonDataSourceContainer.oneTimeSuccessResponse.transaction_id
172
+ : undefined;
173
+
174
+ const response: DonationResponse = await this.braintreeManager.submitDonation({
175
+ nonce: payload.nonce,
176
+ paymentProvider: PaymentProvider.PayPal,
177
+ donationInfo: dataSource.donationInfo,
178
+ customerInfo: customerInfo,
179
+ billingInfo: billingInfo,
180
+ upsellOnetimeTransactionId: oneTimeTransaction,
181
+ });
182
+
183
+ if (!response.success) {
184
+ const error = response.value as ErrorResponse;
185
+ this.donationFlowModalManager.showErrorModal({
186
+ message: error.message,
187
+ });
188
+ return;
189
+ }
190
+
191
+ const successResponse = response.value as SuccessResponse;
192
+
193
+ switch (donationType) {
194
+ case DonationType.OneTime:
195
+ this.showUpsellModal(payload, successResponse);
196
+ break;
197
+ case DonationType.Monthly:
198
+ // show thank you, redirect
199
+ this.donationFlowModalManager.showThankYouModal({ successResponse });
200
+ break;
201
+ case DonationType.Upsell:
202
+ if (this.upsellButtonDataSourceContainer) {
203
+ this.donationFlowModalManager.showThankYouModal({
204
+ successResponse: this.upsellButtonDataSourceContainer.oneTimeSuccessResponse,
205
+ upsellSuccessResponse: successResponse,
206
+ });
207
+ } else {
208
+ // we're in the upsell flow, but no upsell data source container.. this should not happen
209
+ this.donationFlowModalManager.showErrorModal({
210
+ message: 'Error setting up monthly donation',
211
+ });
212
+ }
213
+ break;
214
+ }
215
+ }
216
+
217
+ async payPalPaymentCancelled(
218
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
219
+ dataSource: PayPalButtonDataSourceInterface,
220
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
221
+ data: object,
222
+ ): Promise<void> {
223
+ this.emitter.emit('payPalPaymentCancelled', dataSource, data);
224
+ }
225
+
226
+ async payPalPaymentError(
227
+ dataSource: PayPalButtonDataSourceInterface,
228
+ error: string,
229
+ ): Promise<void> {
230
+ this.emitter.emit('payPalPaymentError', dataSource, error);
231
+ console.error(
232
+ 'PaymentSector:payPalPaymentError error:',
233
+ dataSource,
234
+ dataSource.donationInfo,
235
+ error,
236
+ );
237
+ }
238
+
239
+ async renderPayPalButton(donationInfo: DonationPaymentInfo): Promise<void> {
240
+ const handler = await this.braintreeManager?.paymentProviders.paypalHandler.get();
241
+
242
+ this.buttonDataSource = await handler?.renderPayPalButton({
243
+ selector: '#paypal-button',
244
+ style: {
245
+ color: 'blue' as paypal.ButtonColorOption, // I'm not sure why I can't access the enum directly here.. I get a UMD error
246
+ label: 'paypal' as paypal.ButtonLabelOption,
247
+ shape: 'rect' as paypal.ButtonShapeOption,
248
+ size: 'medium' as paypal.ButtonSizeOption,
249
+ tagline: false,
250
+ },
251
+ donationInfo: donationInfo,
252
+ });
253
+
254
+ if (this.buttonDataSource) {
255
+ this.buttonDataSource.delegate = this;
256
+ }
257
+ }
258
+
259
+ private async showUpsellModal(
260
+ oneTimePayload: paypal.TokenizePayload,
261
+ oneTimeSuccessResponse: SuccessResponse,
262
+ ): Promise<void> {
263
+ this.donationFlowModalManager.showUpsellModal({
264
+ oneTimeAmount: oneTimeSuccessResponse.amount,
265
+ amountChanged: this.upsellAmountChanged.bind(this),
266
+ noSelected: () => {
267
+ this.donationFlowModalManager.showThankYouModal({
268
+ successResponse: oneTimeSuccessResponse,
269
+ });
270
+ },
271
+ ctaMode: UpsellModalCTAMode.PayPalUpsellSlot,
272
+ userClosedModalCallback: () => {
273
+ this.donationFlowModalManager.showThankYouModal({
274
+ successResponse: oneTimeSuccessResponse,
275
+ });
276
+ },
277
+ });
278
+
279
+ const amount = DonationFlowModalManager.getDefaultUpsellAmount(oneTimeSuccessResponse.amount);
280
+
281
+ const upsellDonationInfo = new DonationPaymentInfo({
282
+ amount: amount,
283
+ donationType: DonationType.Upsell,
284
+ coverFees: false,
285
+ });
286
+
287
+ if (!this.upsellButtonDataSourceContainer) {
288
+ this.renderUpsellPayPalButton({
289
+ donationInfo: upsellDonationInfo,
290
+ oneTimePayload,
291
+ oneTimeSuccessResponse,
292
+ });
293
+ }
294
+ }
295
+
296
+ private upsellAmountChanged(amount: number): void {
297
+ if (this.upsellButtonDataSourceContainer) {
298
+ this.upsellButtonDataSourceContainer.upsellButtonDataSource.donationInfo.amount = amount;
299
+ }
300
+ }
301
+
302
+ private async renderUpsellPayPalButton(options: {
303
+ donationInfo: DonationPaymentInfo;
304
+ oneTimePayload: paypal.TokenizePayload;
305
+ oneTimeSuccessResponse: SuccessResponse;
306
+ }): Promise<void> {
307
+ const handler = await this.braintreeManager?.paymentProviders.paypalHandler.get();
308
+
309
+ const upsellButtonDataSource = await handler?.renderPayPalButton({
310
+ selector: '#paypal-upsell-button',
311
+ style: {
312
+ color: 'blue' as paypal.ButtonColorOption,
313
+ label: 'paypal' as paypal.ButtonLabelOption,
314
+ shape: 'rect' as paypal.ButtonShapeOption,
315
+ size: 'responsive' as paypal.ButtonSizeOption,
316
+ tagline: false,
317
+ },
318
+ donationInfo: options.donationInfo,
319
+ });
320
+
321
+ if (upsellButtonDataSource) {
322
+ upsellButtonDataSource.delegate = this;
323
+ this.upsellButtonDataSourceContainer = new UpsellDataSourceContainer({
324
+ upsellButtonDataSource: upsellButtonDataSource,
325
+ oneTimePayload: options.oneTimePayload,
326
+ oneTimeSuccessResponse: options.oneTimeSuccessResponse,
327
+ });
328
+ } else {
329
+ console.error('error rendering paypal upsell button');
330
+ }
331
+ }
332
+ }