@internetarchive/donation-form 1.0.3-alpha-webdev7960.0 → 1.0.3-webdev-8122.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +115 -115
  3. package/dist/demo/braintree-endpoint-manager.js.map +1 -1
  4. package/dist/demo/demo-analytics-handler.js.map +1 -1
  5. package/dist/demo/submit-form-with.js.map +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/braintree-manager/braintree-interfaces.js.map +1 -1
  8. package/dist/src/braintree-manager/braintree-manager.js.map +1 -1
  9. package/dist/src/braintree-manager/payment-clients.js.map +1 -1
  10. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.js.map +1 -1
  11. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.js.map +1 -1
  12. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -1
  13. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -1
  14. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -1
  15. package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js.map +1 -1
  16. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.js.map +1 -1
  17. package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js.map +1 -1
  18. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.js.map +1 -1
  19. package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map +1 -1
  20. package/dist/src/braintree-manager/payment-providers/google-pay-interface.js.map +1 -1
  21. package/dist/src/braintree-manager/payment-providers/google-pay.js.map +1 -1
  22. package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
  23. package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.js.map +1 -1
  24. package/dist/src/braintree-manager/payment-providers/paypal/paypal.js.map +1 -1
  25. package/dist/src/braintree-manager/payment-providers/venmo-interface.js.map +1 -1
  26. package/dist/src/braintree-manager/payment-providers/venmo.js.map +1 -1
  27. package/dist/src/braintree-manager/payment-providers-interface.js.map +1 -1
  28. package/dist/src/braintree-manager/payment-providers.js.map +1 -1
  29. package/dist/src/donation-form-controller.js +123 -123
  30. package/dist/src/donation-form-controller.js.map +1 -1
  31. package/dist/src/donation-form-error.js.map +1 -1
  32. package/dist/src/donation-form.js +107 -107
  33. package/dist/src/donation-form.js.map +1 -1
  34. package/dist/src/form-elements/badged-input.js +47 -47
  35. package/dist/src/form-elements/badged-input.js.map +1 -1
  36. package/dist/src/form-elements/contact-form/autocomplete-field-options.js.map +1 -1
  37. package/dist/src/form-elements/contact-form/contact-form.js +159 -157
  38. package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
  39. package/dist/src/form-elements/contact-form/countries.js.map +1 -1
  40. package/dist/src/form-elements/header/donation-form-header.js +14 -14
  41. package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
  42. package/dist/src/form-elements/header/donation-summary.js +15 -15
  43. package/dist/src/form-elements/header/donation-summary.js.map +1 -1
  44. package/dist/src/form-elements/payment-selector.js +164 -164
  45. package/dist/src/form-elements/payment-selector.js.map +1 -1
  46. package/dist/src/form-elements/total-amount.js +16 -16
  47. package/dist/src/form-elements/total-amount.js.map +1 -1
  48. package/dist/src/modals/confirm-donation-modal-content.js +51 -51
  49. package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
  50. package/dist/src/modals/error-modal-content.js +22 -22
  51. package/dist/src/modals/error-modal-content.js.map +1 -1
  52. package/dist/src/modals/upsell-modal-content.js +182 -182
  53. package/dist/src/modals/upsell-modal-content.js.map +1 -1
  54. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +20 -20
  55. package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
  56. package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
  57. package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
  58. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js +2 -0
  59. package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
  60. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js +2 -0
  61. package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
  62. package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
  63. package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
  64. package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
  65. package/dist/src/recaptcha-manager/recaptcha-manager.js.map +1 -1
  66. package/dist/src/util/promisedSleep.js.map +1 -1
  67. package/dist/test/helpers/fillInContactForm.js.map +1 -1
  68. package/dist/test/mocks/flow-handlers/individual-handlers/mock-applepay-flow-handler.js.map +1 -1
  69. package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
  70. package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js.map +1 -1
  71. package/dist/test/mocks/flow-handlers/individual-handlers/mock-paypal-flow-handler.js.map +1 -1
  72. package/dist/test/mocks/flow-handlers/individual-handlers/mock-venmo-flow-handler.js.map +1 -1
  73. package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
  74. package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
  75. package/dist/test/mocks/mock-donation-info.js.map +1 -1
  76. package/dist/test/mocks/mock-endpoint-manager.js.map +1 -1
  77. package/dist/test/mocks/mock-hosted-fields-config.js.map +1 -1
  78. package/dist/test/mocks/mock-hosted-fields-container.js.map +1 -1
  79. package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
  80. package/dist/test/mocks/mock-modal-manager.js.map +1 -1
  81. package/dist/test/mocks/mock-payment-clients.js.map +1 -1
  82. package/dist/test/mocks/mock-paypal-button-renderer.js.map +1 -1
  83. package/dist/test/mocks/mock-recaptcha-manager.js.map +1 -1
  84. package/dist/test/mocks/models/mock-billing-info.js +2 -0
  85. package/dist/test/mocks/models/mock-billing-info.js.map +1 -1
  86. package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
  87. package/dist/test/mocks/models/mock-customer-info.js.map +1 -1
  88. package/dist/test/mocks/models/mock-donation-request.js.map +1 -1
  89. package/dist/test/mocks/models/mock-success-response.js.map +1 -1
  90. package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
  91. package/dist/test/mocks/payment-clients/mock-applepay-payment.js.map +1 -1
  92. package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
  93. package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
  94. package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
  95. package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.js.map +1 -1
  96. package/dist/test/mocks/payment-clients/mock-braintree-client.js.map +1 -1
  97. package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
  98. package/dist/test/mocks/payment-clients/mock-googlepay-client.js.map +1 -1
  99. package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
  100. package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
  101. package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
  102. package/dist/test/mocks/payment-clients/mock-hostedfieldstateobject-generator.js.map +1 -1
  103. package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.js.map +1 -1
  104. package/dist/test/mocks/payment-clients/mock-paypal-client.js.map +1 -1
  105. package/dist/test/mocks/payment-clients/mock-paypal-library.js.map +1 -1
  106. package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
  107. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-datasource-delegate.js.map +1 -1
  108. package/dist/test/mocks/payment-providers/individual-providers/mock-applepay-handler.js.map +1 -1
  109. package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
  110. package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.js.map +1 -1
  111. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
  112. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
  113. package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-handler.js.map +1 -1
  114. package/dist/test/mocks/payment-providers/individual-providers/mock-venmo-handler.js.map +1 -1
  115. package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
  116. package/dist/test/tests/braintree-manager.test.js.map +1 -1
  117. package/dist/test/tests/donation-form-controller.test.js +39 -39
  118. package/dist/test/tests/donation-form-controller.test.js.map +1 -1
  119. package/dist/test/tests/donation-form.test.js +4 -4
  120. package/dist/test/tests/donation-form.test.js.map +1 -1
  121. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +16 -14
  122. package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
  123. package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
  124. package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
  125. package/dist/test/tests/modals/error-modal-content.test.js +2 -2
  126. package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
  127. package/dist/test/tests/modals/upsell-modal-content.test.js +31 -31
  128. package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
  129. package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
  130. package/dist/test/tests/payment-clients.test.js.map +1 -1
  131. package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
  132. package/dist/test/tests/payment-providers/applepay-sessionmanager.test.js.map +1 -1
  133. package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
  134. package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
  135. package/dist/test/tests/payment-providers/googlepay.test.js.map +1 -1
  136. package/dist/test/tests/payment-providers/payment-providers.test.js.map +1 -1
  137. package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
  138. package/dist/test/tests/payment-providers/paypal.test.js.map +1 -1
  139. package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
  140. package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
  141. package/package.json +107 -107
  142. package/src/@types/analytics-handler/index.d.ts +8 -8
  143. package/src/@types/braintree-web/LICENSE +21 -21
  144. package/src/@types/braintree-web/index.d.ts +93 -93
  145. package/src/@types/braintree-web/modules/american-express.d.ts +50 -50
  146. package/src/@types/braintree-web/modules/apple-pay.d.ts +213 -213
  147. package/src/@types/braintree-web/modules/client.d.ts +103 -103
  148. package/src/@types/braintree-web/modules/core.d.ts +34 -34
  149. package/src/@types/braintree-web/modules/data-collector.d.ts +13 -13
  150. package/src/@types/braintree-web/modules/google-payment.d.ts +269 -269
  151. package/src/@types/braintree-web/modules/hosted-fields.d.ts +366 -366
  152. package/src/@types/braintree-web/modules/paypal-checkout.d.ts +262 -262
  153. package/src/@types/braintree-web/modules/paypal.d.ts +177 -177
  154. package/src/@types/braintree-web/modules/three-d-secure.d.ts +141 -141
  155. package/src/@types/braintree-web/modules/unionpay.d.ts +224 -224
  156. package/src/@types/braintree-web/modules/us-bank-account.d.ts +81 -81
  157. package/src/@types/braintree-web/modules/venmo.d.ts +110 -110
  158. package/src/@types/braintree-web/package.json +64 -64
  159. package/src/@types/paypal-checkout-components/LICENSE +21 -21
  160. package/src/@types/paypal-checkout-components/index.d.ts +67 -67
  161. package/src/@types/paypal-checkout-components/modules/button.d.ts +50 -50
  162. package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +244 -244
  163. package/src/@types/paypal-checkout-components/modules/configuration.d.ts +114 -114
  164. package/src/@types/paypal-checkout-components/package.json +58 -58
  165. package/src/braintree-manager/braintree-interfaces.ts +172 -172
  166. package/src/braintree-manager/braintree-manager.ts +281 -281
  167. package/src/braintree-manager/payment-clients.ts +146 -146
  168. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.ts +13 -13
  169. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.ts +8 -8
  170. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.ts +10 -10
  171. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts +119 -119
  172. package/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.ts +21 -21
  173. package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +97 -97
  174. package/src/braintree-manager/payment-providers/credit-card/credit-card-interface.ts +21 -21
  175. package/src/braintree-manager/payment-providers/credit-card/credit-card.ts +130 -130
  176. package/src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts +19 -19
  177. package/src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts +85 -85
  178. package/src/braintree-manager/payment-providers/google-pay-interface.ts +8 -8
  179. package/src/braintree-manager/payment-providers/google-pay.ts +59 -59
  180. package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +218 -218
  181. package/src/braintree-manager/payment-providers/paypal/paypal-interface.ts +13 -13
  182. package/src/braintree-manager/payment-providers/paypal/paypal.ts +78 -78
  183. package/src/braintree-manager/payment-providers/venmo-interface.ts +8 -8
  184. package/src/braintree-manager/payment-providers/venmo.ts +67 -67
  185. package/src/braintree-manager/payment-providers-interface.ts +25 -25
  186. package/src/braintree-manager/payment-providers.ts +147 -147
  187. package/src/donation-form-controller.ts +623 -623
  188. package/src/donation-form-error.ts +6 -6
  189. package/src/donation-form.ts +576 -576
  190. package/src/form-elements/badged-input.ts +109 -109
  191. package/src/form-elements/contact-form/autocomplete-field-options.ts +63 -63
  192. package/src/form-elements/contact-form/contact-form.ts +436 -434
  193. package/src/form-elements/contact-form/countries.ts +252 -252
  194. package/src/form-elements/header/donation-form-header.ts +98 -98
  195. package/src/form-elements/header/donation-summary.ts +61 -61
  196. package/src/form-elements/payment-selector.ts +365 -365
  197. package/src/form-elements/total-amount.ts +46 -46
  198. package/src/modals/confirm-donation-modal-content.ts +168 -168
  199. package/src/modals/error-modal-content.ts +48 -48
  200. package/src/modals/upsell-modal-content.ts +284 -284
  201. package/src/payment-flow-handlers/donation-flow-modal-manager.ts +439 -439
  202. package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +109 -109
  203. package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +232 -232
  204. package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +113 -111
  205. package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +333 -331
  206. package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +119 -119
  207. package/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.ts +127 -127
  208. package/src/payment-flow-handlers/payment-flow-handlers.ts +218 -218
  209. package/src/recaptcha-manager/recaptcha-manager.ts +123 -123
  210. package/src/util/promisedSleep.ts +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"credit-card.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/credit-card/credit-card.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAKxE,OAAO,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,MAAM,OAAO,iBAAiB;IAC5B,EAAE,CACA,KAAQ,EACR,QAAoC;QAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAgBD,YAAY,OAMX;;QApBD,aAAQ,GAAG,IAAI,iBAAiB,CAAqC;YACnE,SAAS,EAAE,GAAsD,EAAE;gBACjE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACnE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;gBACpE,OAAO,YAAY,CAAC;YACtB,CAAC,CAAA;SACF,CAAC,CAAC;QAEK,YAAO,GAAG,gBAAgB,EAA2B,CAAC;QAa5D,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,MAAA,OAAO,CAAC,aAAa,mCAAI,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,CAAC,MAAA,OAAO,CAAC,WAAW,mCAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvD,CAAC;IAMa,kBAAkB;6DAC9B,eAAiC,EACjC,UAAU,GAAG,CAAC;YAEd,6DAA6D;YAC7D,iCAAiC;YACjC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;YAChE,IAAI,CAAC;gBACH,uEAAuE;gBACvE,qEAAqE;gBACrE,uEAAuE;gBACvE,wDAAwD;gBACxD,uEAAuE;gBACvE,sEAAsE;gBACtE,qEAAqE;gBACrE,kEAAkE;gBAClE,IAAI,OAAe,CAAC;gBAEpB,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC3D,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;wBAC/B,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,+BAA+B,CAAC,CAAC;wBACrE,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBAEH,MAAM,mBAAmB,GAAG,IAAI,OAAO,CACrC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;oBACxB,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;4BACjD,MAAM,EAAE,eAAe;4BACvB,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB;4BAC/C,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,uBAAuB;yBACvD,CAAC,CAAC;wBACH,kFAAkF;wBAClF,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;wBAC7B,OAAO,CAAC,MAAM,CAAC,CAAC;oBAClB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;4BAChF,6DAA6D;wBAC/D,CAAC;6BAAM,CAAC;4BACN,8DAA8D;4BAC9D,MAAM,CAAC,KAAK,CAAC,CAAC;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC,CAAA,CACF,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBAEzE,OAAO,MAAgC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;oBAC/C,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,aAAa,GAAG,UAAU,GAAG,CAAC,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;KAAA;IAEK,oBAAoB;;YACxB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC/C,OAAO,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,EAAE,CAAC;QAClC,CAAC;KAAA;IAED,eAAe,CAAC,MAAyB;QACvC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,iBAAiB,CAAC,MAAyB;QACzC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;IAED,gBAAgB,CAAC,OAAgB;QAC/B,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;IACjE,CAAC;CACF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { BraintreeManagerInterface } from '../../braintree-interfaces';\r\nimport { HostedFieldConfiguration } from './hosted-field-configuration';\r\nimport { HostedFieldName } from './hosted-field-container';\r\nimport { CreditCardHandlerEvents, CreditCardHandlerInterface } from './credit-card-interface';\r\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\r\nimport { DonationFormError } from '../../../donation-form-error';\r\n\r\nexport class CreditCardHandler implements CreditCardHandlerInterface {\r\n on<E extends keyof CreditCardHandlerEvents>(\r\n event: E,\r\n callback: CreditCardHandlerEvents[E],\r\n ): Unsubscribe {\r\n return this.emitter.on(event, callback);\r\n }\r\n\r\n instance = new PromisedSingleton<braintree.HostedFields | undefined>({\r\n generator: async (): Promise<braintree.HostedFields | undefined> => {\r\n const braintreeClient = await this.braintreeManager.instance.get();\r\n const hostedFields = await this.createHostedFields(braintreeClient);\r\n return hostedFields;\r\n },\r\n });\r\n\r\n private emitter = createNanoEvents<CreditCardHandlerEvents>();\r\n\r\n private maxRetryCount: number;\r\n\r\n private loadTimeout: number;\r\n\r\n constructor(options: {\r\n braintreeManager: BraintreeManagerInterface;\r\n hostedFieldClient: braintree.HostedFields;\r\n hostedFieldConfig: HostedFieldConfiguration;\r\n maxRetryCount?: number;\r\n loadTimeout?: number;\r\n }) {\r\n this.braintreeManager = options.braintreeManager;\r\n this.hostedFieldClient = options.hostedFieldClient;\r\n this.hostedFieldConfig = options.hostedFieldConfig;\r\n this.maxRetryCount = options.maxRetryCount ?? 2;\r\n this.loadTimeout = (options.loadTimeout ?? 6) * 1000;\r\n }\r\n\r\n private braintreeManager: BraintreeManagerInterface;\r\n private hostedFieldClient: braintree.HostedFields;\r\n private hostedFieldConfig: HostedFieldConfiguration;\r\n\r\n private async createHostedFields(\r\n braintreeClient: braintree.Client,\r\n retryCount = 0,\r\n ): Promise<braintree.HostedFields | undefined> {\r\n // we mainly want to do this for retry events, but it doesn't\r\n // hurt to do it on the first try\r\n this.hostedFieldConfig.hostedFieldContainer.resetHostedFields();\r\n try {\r\n // The hosted fields have a 60 second timeout internally, but braintree\r\n // support recommended setting a shorter timeout because 99% of users\r\n // load the hosted fields in under 4 seconds and 99.9% with 18 seconds.\r\n // What we're doing here is creating a \"timeout\" promise\r\n // and a \"create hosted fields\" promise and doing a `Promise.race()` to\r\n // resolve when the first one finishes. If the timeout finishes first,\r\n // we throw an error to trigger the retry logic. If the hosted fields\r\n // finishes first, we cancel the timeout promise since we're done.\r\n let timeout: number;\r\n\r\n const timeoutPromise = new Promise<void>((resolve, reject) => {\r\n timeout = window.setTimeout(() => {\r\n const error = new DonationFormError('Timeout loading Hosted Fields');\r\n reject(error);\r\n }, this.loadTimeout);\r\n });\r\n\r\n const hostedFieldsPromise = new Promise<braintree.HostedFields | undefined>(\r\n async (resolve, reject) => {\r\n try {\r\n const fields = await this.hostedFieldClient.create({\r\n client: braintreeClient,\r\n styles: this.hostedFieldConfig.hostedFieldStyle,\r\n fields: this.hostedFieldConfig.hostedFieldFieldOptions,\r\n });\r\n // clear the timeout when this finishes so we don't also get the timeout rejection\r\n window.clearTimeout(timeout);\r\n resolve(fields);\r\n } catch (error) {\r\n if (error instanceof Error && error.message.includes('Hosted Fields timed out')) {\r\n // this is the timeout error, so we don't need to do anything\r\n } else {\r\n // this is some other error. reject so it bubbles up to Sentry\r\n reject(error);\r\n }\r\n }\r\n },\r\n );\r\n\r\n const result = await Promise.race([timeoutPromise, hostedFieldsPromise]);\r\n\r\n return result as braintree.HostedFields;\r\n } catch (error) {\r\n if (retryCount >= this.maxRetryCount) {\r\n this.emitter.emit('hostedFieldsFailed', error);\r\n throw error;\r\n }\r\n const newRetryCount = retryCount + 1;\r\n this.emitter.emit('hostedFieldsRetry', newRetryCount);\r\n return this.createHostedFields(braintreeClient, newRetryCount);\r\n }\r\n }\r\n\r\n async tokenizeHostedFields(): Promise<braintree.HostedFieldsTokenizePayload | undefined> {\r\n const hostedFields = await this.instance.get();\r\n return hostedFields?.tokenize();\r\n }\r\n\r\n markFieldErrors(fields: HostedFieldName[]): void {\r\n this.hostedFieldConfig.hostedFieldContainer.markFieldErrors(fields);\r\n }\r\n\r\n removeFieldErrors(fields: HostedFieldName[]): void {\r\n this.hostedFieldConfig.hostedFieldContainer.removeFieldErrors(fields);\r\n }\r\n\r\n showErrorMessage(message?: string): void {\r\n this.hostedFieldConfig.hostedFieldContainer.showErrorMessage(message);\r\n }\r\n\r\n hideErrorMessage(): void {\r\n this.hostedFieldConfig.hostedFieldContainer.hideErrorMessage();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"credit-card.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/credit-card/credit-card.ts"],"names":[],"mappings":"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","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { BraintreeManagerInterface } from '../../braintree-interfaces';\nimport { HostedFieldConfiguration } from './hosted-field-configuration';\nimport { HostedFieldName } from './hosted-field-container';\nimport { CreditCardHandlerEvents, CreditCardHandlerInterface } from './credit-card-interface';\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\nimport { DonationFormError } from '../../../donation-form-error';\n\nexport class CreditCardHandler implements CreditCardHandlerInterface {\n on<E extends keyof CreditCardHandlerEvents>(\n event: E,\n callback: CreditCardHandlerEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n instance = new PromisedSingleton<braintree.HostedFields | undefined>({\n generator: async (): Promise<braintree.HostedFields | undefined> => {\n const braintreeClient = await this.braintreeManager.instance.get();\n const hostedFields = await this.createHostedFields(braintreeClient);\n return hostedFields;\n },\n });\n\n private emitter = createNanoEvents<CreditCardHandlerEvents>();\n\n private maxRetryCount: number;\n\n private loadTimeout: number;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n hostedFieldClient: braintree.HostedFields;\n hostedFieldConfig: HostedFieldConfiguration;\n maxRetryCount?: number;\n loadTimeout?: number;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.hostedFieldClient = options.hostedFieldClient;\n this.hostedFieldConfig = options.hostedFieldConfig;\n this.maxRetryCount = options.maxRetryCount ?? 2;\n this.loadTimeout = (options.loadTimeout ?? 6) * 1000;\n }\n\n private braintreeManager: BraintreeManagerInterface;\n private hostedFieldClient: braintree.HostedFields;\n private hostedFieldConfig: HostedFieldConfiguration;\n\n private async createHostedFields(\n braintreeClient: braintree.Client,\n retryCount = 0,\n ): Promise<braintree.HostedFields | undefined> {\n // we mainly want to do this for retry events, but it doesn't\n // hurt to do it on the first try\n this.hostedFieldConfig.hostedFieldContainer.resetHostedFields();\n try {\n // The hosted fields have a 60 second timeout internally, but braintree\n // support recommended setting a shorter timeout because 99% of users\n // load the hosted fields in under 4 seconds and 99.9% with 18 seconds.\n // What we're doing here is creating a \"timeout\" promise\n // and a \"create hosted fields\" promise and doing a `Promise.race()` to\n // resolve when the first one finishes. If the timeout finishes first,\n // we throw an error to trigger the retry logic. If the hosted fields\n // finishes first, we cancel the timeout promise since we're done.\n let timeout: number;\n\n const timeoutPromise = new Promise<void>((resolve, reject) => {\n timeout = window.setTimeout(() => {\n const error = new DonationFormError('Timeout loading Hosted Fields');\n reject(error);\n }, this.loadTimeout);\n });\n\n const hostedFieldsPromise = new Promise<braintree.HostedFields | undefined>(\n async (resolve, reject) => {\n try {\n const fields = await this.hostedFieldClient.create({\n client: braintreeClient,\n styles: this.hostedFieldConfig.hostedFieldStyle,\n fields: this.hostedFieldConfig.hostedFieldFieldOptions,\n });\n // clear the timeout when this finishes so we don't also get the timeout rejection\n window.clearTimeout(timeout);\n resolve(fields);\n } catch (error) {\n if (error instanceof Error && error.message.includes('Hosted Fields timed out')) {\n // this is the timeout error, so we don't need to do anything\n } else {\n // this is some other error. reject so it bubbles up to Sentry\n reject(error);\n }\n }\n },\n );\n\n const result = await Promise.race([timeoutPromise, hostedFieldsPromise]);\n\n return result as braintree.HostedFields;\n } catch (error) {\n if (retryCount >= this.maxRetryCount) {\n this.emitter.emit('hostedFieldsFailed', error);\n throw error;\n }\n const newRetryCount = retryCount + 1;\n this.emitter.emit('hostedFieldsRetry', newRetryCount);\n return this.createHostedFields(braintreeClient, newRetryCount);\n }\n }\n\n async tokenizeHostedFields(): Promise<braintree.HostedFieldsTokenizePayload | undefined> {\n const hostedFields = await this.instance.get();\n return hostedFields?.tokenize();\n }\n\n markFieldErrors(fields: HostedFieldName[]): void {\n this.hostedFieldConfig.hostedFieldContainer.markFieldErrors(fields);\n }\n\n removeFieldErrors(fields: HostedFieldName[]): void {\n this.hostedFieldConfig.hostedFieldContainer.removeFieldErrors(fields);\n }\n\n showErrorMessage(message?: string): void {\n this.hostedFieldConfig.hostedFieldContainer.showErrorMessage(message);\n }\n\n hideErrorMessage(): void {\n this.hostedFieldConfig.hostedFieldContainer.hideErrorMessage();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-field-configuration.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,wBAAwB;IAOnC,YAAY,OAIX;QACC,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;QAC/D,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAC3D,CAAC;CACF","sourcesContent":["import { HostedFieldContainerInterface } from './hosted-field-container';\r\n\r\nexport class HostedFieldConfiguration {\r\n hostedFieldStyle: Record<string, Record<string, string>>;\r\n\r\n hostedFieldFieldOptions: braintree.HostedFieldFieldOptions;\r\n\r\n hostedFieldContainer: HostedFieldContainerInterface;\r\n\r\n constructor(options: {\r\n hostedFieldStyle: Record<string, Record<string, string>>;\r\n hostedFieldFieldOptions: braintree.HostedFieldFieldOptions;\r\n hostedFieldContainer: HostedFieldContainerInterface;\r\n }) {\r\n this.hostedFieldFieldOptions = options.hostedFieldFieldOptions;\r\n this.hostedFieldStyle = options.hostedFieldStyle;\r\n this.hostedFieldContainer = options.hostedFieldContainer;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"hosted-field-configuration.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/credit-card/hosted-field-configuration.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,wBAAwB;IAOnC,YAAY,OAIX;QACC,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;QAC/D,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAC3D,CAAC;CACF","sourcesContent":["import { HostedFieldContainerInterface } from './hosted-field-container';\n\nexport class HostedFieldConfiguration {\n hostedFieldStyle: Record<string, Record<string, string>>;\n\n hostedFieldFieldOptions: braintree.HostedFieldFieldOptions;\n\n hostedFieldContainer: HostedFieldContainerInterface;\n\n constructor(options: {\n hostedFieldStyle: Record<string, Record<string, string>>;\n hostedFieldFieldOptions: braintree.HostedFieldFieldOptions;\n hostedFieldContainer: HostedFieldContainerInterface;\n }) {\n this.hostedFieldFieldOptions = options.hostedFieldFieldOptions;\n this.hostedFieldStyle = options.hostedFieldStyle;\n this.hostedFieldContainer = options.hostedFieldContainer;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-field-container.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,8BAAW,CAAA;IACX,oDAAiC,CAAA;AACnC,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAcD,MAAM,OAAO,oBAAoB;IAS/B,QAAQ,CAAC,KAAsB;QAC7B,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,eAAe,CAAC,MAAM;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB,KAAK,eAAe,CAAC,GAAG;gBACtB,OAAO,IAAI,CAAC,GAAG,CAAC;YAClB,KAAK,eAAe,CAAC,cAAc;gBACjC,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,eAAe,CAAC,MAAyB;QACvC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,aAA6B,CAAC,KAAK,GAAG,IAAI,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,MAAyB;QACzC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,aAA6B,CAAC,KAAK,GAAG,KAAK,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,OAAgB;QAC/B,MAAM,KAAK,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,yDAAyD,CAAC;QACnF,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC9C,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7C,CAAC;IAED,iBAAiB;QACf,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1B,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,OAKX;QACC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC/C,CAAC;CACF","sourcesContent":["import { BadgedInput } from '../../../form-elements/badged-input';\r\n\r\nexport enum HostedFieldName {\r\n Number = 'number',\r\n CVV = 'cvv',\r\n ExpirationDate = 'expirationDate',\r\n}\r\n\r\nexport interface HostedFieldContainerInterface {\r\n fieldFor(field: HostedFieldName): HTMLDivElement;\r\n markFieldErrors(fields: HostedFieldName[]): void;\r\n removeFieldErrors(fields: HostedFieldName[]): void;\r\n showErrorMessage(message?: string): void;\r\n hideErrorMessage(): void;\r\n /**\r\n * Reset the hosted fields to retry in case of timeout\r\n */\r\n resetHostedFields(): void;\r\n}\r\n\r\nexport class HostedFieldContainer implements HostedFieldContainerInterface {\r\n private number: HTMLDivElement;\r\n\r\n private cvv: HTMLDivElement;\r\n\r\n private expirationDate: HTMLDivElement;\r\n\r\n private errorContainer: HTMLDivElement;\r\n\r\n fieldFor(field: HostedFieldName): HTMLDivElement {\r\n switch (field) {\r\n case HostedFieldName.Number:\r\n return this.number;\r\n case HostedFieldName.CVV:\r\n return this.cvv;\r\n case HostedFieldName.ExpirationDate:\r\n return this.expirationDate;\r\n }\r\n }\r\n\r\n markFieldErrors(fields: HostedFieldName[]): void {\r\n fields.forEach(field => {\r\n const input = this.fieldFor(field);\r\n (input.parentElement as BadgedInput).error = true;\r\n });\r\n }\r\n\r\n removeFieldErrors(fields: HostedFieldName[]): void {\r\n fields.forEach(field => {\r\n const input = this.fieldFor(field);\r\n (input.parentElement as BadgedInput).error = false;\r\n });\r\n }\r\n\r\n showErrorMessage(message?: string): void {\r\n const error = message ?? 'Some payment information below is missing or incorrect.';\r\n this.errorContainer.innerHTML = error;\r\n this.errorContainer.style.display = 'block';\r\n }\r\n\r\n hideErrorMessage(): void {\r\n this.errorContainer.style.display = 'none';\r\n }\r\n\r\n resetHostedFields(): void {\r\n const elements = [this.number, this.cvv, this.expirationDate];\r\n elements.forEach(element => {\r\n while (element.firstChild) {\r\n element.firstChild.remove();\r\n }\r\n });\r\n }\r\n\r\n constructor(options: {\r\n number: HTMLDivElement;\r\n cvv: HTMLDivElement;\r\n expirationDate: HTMLDivElement;\r\n errorContainer: HTMLDivElement;\r\n }) {\r\n this.number = options.number;\r\n this.cvv = options.cvv;\r\n this.expirationDate = options.expirationDate;\r\n this.errorContainer = options.errorContainer;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"hosted-field-container.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/credit-card/hosted-field-container.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,8BAAW,CAAA;IACX,oDAAiC,CAAA;AACnC,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAcD,MAAM,OAAO,oBAAoB;IAS/B,QAAQ,CAAC,KAAsB;QAC7B,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,eAAe,CAAC,MAAM;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB,KAAK,eAAe,CAAC,GAAG;gBACtB,OAAO,IAAI,CAAC,GAAG,CAAC;YAClB,KAAK,eAAe,CAAC,cAAc;gBACjC,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,eAAe,CAAC,MAAyB;QACvC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,aAA6B,CAAC,KAAK,GAAG,IAAI,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,MAAyB;QACzC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,aAA6B,CAAC,KAAK,GAAG,KAAK,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,OAAgB;QAC/B,MAAM,KAAK,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,yDAAyD,CAAC;QACnF,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC9C,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7C,CAAC;IAED,iBAAiB;QACf,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1B,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,OAKX;QACC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC/C,CAAC;CACF","sourcesContent":["import { BadgedInput } from '../../../form-elements/badged-input';\n\nexport enum HostedFieldName {\n Number = 'number',\n CVV = 'cvv',\n ExpirationDate = 'expirationDate',\n}\n\nexport interface HostedFieldContainerInterface {\n fieldFor(field: HostedFieldName): HTMLDivElement;\n markFieldErrors(fields: HostedFieldName[]): void;\n removeFieldErrors(fields: HostedFieldName[]): void;\n showErrorMessage(message?: string): void;\n hideErrorMessage(): void;\n /**\n * Reset the hosted fields to retry in case of timeout\n */\n resetHostedFields(): void;\n}\n\nexport class HostedFieldContainer implements HostedFieldContainerInterface {\n private number: HTMLDivElement;\n\n private cvv: HTMLDivElement;\n\n private expirationDate: HTMLDivElement;\n\n private errorContainer: HTMLDivElement;\n\n fieldFor(field: HostedFieldName): HTMLDivElement {\n switch (field) {\n case HostedFieldName.Number:\n return this.number;\n case HostedFieldName.CVV:\n return this.cvv;\n case HostedFieldName.ExpirationDate:\n return this.expirationDate;\n }\n }\n\n markFieldErrors(fields: HostedFieldName[]): void {\n fields.forEach(field => {\n const input = this.fieldFor(field);\n (input.parentElement as BadgedInput).error = true;\n });\n }\n\n removeFieldErrors(fields: HostedFieldName[]): void {\n fields.forEach(field => {\n const input = this.fieldFor(field);\n (input.parentElement as BadgedInput).error = false;\n });\n }\n\n showErrorMessage(message?: string): void {\n const error = message ?? 'Some payment information below is missing or incorrect.';\n this.errorContainer.innerHTML = error;\n this.errorContainer.style.display = 'block';\n }\n\n hideErrorMessage(): void {\n this.errorContainer.style.display = 'none';\n }\n\n resetHostedFields(): void {\n const elements = [this.number, this.cvv, this.expirationDate];\n elements.forEach(element => {\n while (element.firstChild) {\n element.firstChild.remove();\n }\n });\n }\n\n constructor(options: {\n number: HTMLDivElement;\n cvv: HTMLDivElement;\n expirationDate: HTMLDivElement;\n errorContainer: HTMLDivElement;\n }) {\n this.number = options.number;\n this.cvv = options.cvv;\n this.expirationDate = options.expirationDate;\n this.errorContainer = options.errorContainer;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"google-pay-interface.js","sourceRoot":"","sources":["../../../../src/braintree-manager/payment-providers/google-pay-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\n\r\nexport interface GooglePayHandlerInterface {\r\n paymentsClient: google.payments.api.PaymentsClient;\r\n instance: PromisedSingleton<braintree.GooglePayment>;\r\n\r\n isBrowserSupported(): Promise<boolean>;\r\n}\r\n"]}
1
+ {"version":3,"file":"google-pay-interface.js","sourceRoot":"","sources":["../../../../src/braintree-manager/payment-providers/google-pay-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nexport interface GooglePayHandlerInterface {\n paymentsClient: google.payments.api.PaymentsClient;\n instance: PromisedSingleton<braintree.GooglePayment>;\n\n isBrowserSupported(): Promise<boolean>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"google-pay.js","sourceRoot":"","sources":["../../../../src/braintree-manager/payment-providers/google-pay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAKxE,MAAM,OAAO,gBAAgB;IAKrB,kBAAkB;;YACtB,OAAO,IAAI,CAAC,cAAc;iBACvB,YAAY,CAAC;gBACZ,qGAAqG;gBACrG,UAAU,EAAE,CAAC;gBACb,eAAe,EAAE,CAAC;gBAClB,qBAAqB,EAAE;oBACrB;wBACE,IAAI,EAAE,MAAM;wBACZ,UAAU,EAAE;4BACV,kBAAkB,EAAE,CAAC,UAAU,CAAC;4BAChC,mBAAmB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC;yBAClF;qBACF;iBACF;gBACD,6BAA6B,EAAE,KAAK;aACrC,CAAC;iBACD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;KAAA;IAED,YAAY,OAKX;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAEnD,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAA0B;YAC7D,SAAS,EAAE,GAAqC,EAAE,CAChD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,iBAAmC,EAAE,EAAE;gBAChF,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;oBAC1C,MAAM,EAAE,iBAAiB;oBACzB,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,IAAI,CAAC,mBAAmB;iBAC3C,CAAC,CAAC;YACL,CAAC,CAAC;SACL,CAAC,CAAC;IACL,CAAC;CAOF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\n\r\nimport { BraintreeManagerInterface } from '../braintree-interfaces';\r\nimport { GooglePayHandlerInterface } from './google-pay-interface';\r\n\r\nexport class GooglePayHandler implements GooglePayHandlerInterface {\r\n paymentsClient: google.payments.api.PaymentsClient;\r\n\r\n instance: PromisedSingleton<braintree.GooglePayment>;\r\n\r\n async isBrowserSupported(): Promise<boolean> {\r\n return this.paymentsClient\r\n .isReadyToPay({\r\n // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest for all options\r\n apiVersion: 2,\r\n apiVersionMinor: 0,\r\n allowedPaymentMethods: [\r\n {\r\n type: 'CARD',\r\n parameters: {\r\n allowedAuthMethods: ['PAN_ONLY'],\r\n allowedCardNetworks: ['AMEX', 'DISCOVER', 'INTERAC', 'JCB', 'MASTERCARD', 'VISA'],\r\n },\r\n },\r\n ],\r\n existingPaymentMethodRequired: false,\r\n })\r\n .then(isReadyToPay => isReadyToPay.result);\r\n }\r\n\r\n constructor(options: {\r\n braintreeManager: BraintreeManagerInterface;\r\n googlePayMerchantId?: string;\r\n googlePayBraintreeClient: braintree.GooglePayment;\r\n googlePaymentsClient: google.payments.api.PaymentsClient;\r\n }) {\r\n this.braintreeManager = options.braintreeManager;\r\n this.googlePayMerchantId = options.googlePayMerchantId;\r\n this.googlePayBraintreeClient = options.googlePayBraintreeClient;\r\n this.paymentsClient = options.googlePaymentsClient;\r\n\r\n this.instance = new PromisedSingleton<braintree.GooglePayment>({\r\n generator: (): Promise<braintree.GooglePayment> =>\r\n this.braintreeManager.instance.get().then((braintreeInstance: braintree.Client) => {\r\n return this.googlePayBraintreeClient.create({\r\n client: braintreeInstance,\r\n googlePayVersion: 2,\r\n googleMerchantId: this.googlePayMerchantId,\r\n });\r\n }),\r\n });\r\n }\r\n\r\n private braintreeManager: BraintreeManagerInterface;\r\n\r\n private googlePayMerchantId?: string;\r\n\r\n private googlePayBraintreeClient: braintree.GooglePayment;\r\n}\r\n"]}
1
+ {"version":3,"file":"google-pay.js","sourceRoot":"","sources":["../../../../src/braintree-manager/payment-providers/google-pay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAKxE,MAAM,OAAO,gBAAgB;IAKrB,kBAAkB;;YACtB,OAAO,IAAI,CAAC,cAAc;iBACvB,YAAY,CAAC;gBACZ,qGAAqG;gBACrG,UAAU,EAAE,CAAC;gBACb,eAAe,EAAE,CAAC;gBAClB,qBAAqB,EAAE;oBACrB;wBACE,IAAI,EAAE,MAAM;wBACZ,UAAU,EAAE;4BACV,kBAAkB,EAAE,CAAC,UAAU,CAAC;4BAChC,mBAAmB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC;yBAClF;qBACF;iBACF;gBACD,6BAA6B,EAAE,KAAK;aACrC,CAAC;iBACD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;KAAA;IAED,YAAY,OAKX;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAEnD,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAA0B;YAC7D,SAAS,EAAE,GAAqC,EAAE,CAChD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,iBAAmC,EAAE,EAAE;gBAChF,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;oBAC1C,MAAM,EAAE,iBAAiB;oBACzB,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,IAAI,CAAC,mBAAmB;iBAC3C,CAAC,CAAC;YACL,CAAC,CAAC;SACL,CAAC,CAAC;IACL,CAAC;CAOF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nimport { BraintreeManagerInterface } from '../braintree-interfaces';\nimport { GooglePayHandlerInterface } from './google-pay-interface';\n\nexport class GooglePayHandler implements GooglePayHandlerInterface {\n paymentsClient: google.payments.api.PaymentsClient;\n\n instance: PromisedSingleton<braintree.GooglePayment>;\n\n async isBrowserSupported(): Promise<boolean> {\n return this.paymentsClient\n .isReadyToPay({\n // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest for all options\n apiVersion: 2,\n apiVersionMinor: 0,\n allowedPaymentMethods: [\n {\n type: 'CARD',\n parameters: {\n allowedAuthMethods: ['PAN_ONLY'],\n allowedCardNetworks: ['AMEX', 'DISCOVER', 'INTERAC', 'JCB', 'MASTERCARD', 'VISA'],\n },\n },\n ],\n existingPaymentMethodRequired: false,\n })\n .then(isReadyToPay => isReadyToPay.result);\n }\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n googlePayMerchantId?: string;\n googlePayBraintreeClient: braintree.GooglePayment;\n googlePaymentsClient: google.payments.api.PaymentsClient;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.googlePayMerchantId = options.googlePayMerchantId;\n this.googlePayBraintreeClient = options.googlePayBraintreeClient;\n this.paymentsClient = options.googlePaymentsClient;\n\n this.instance = new PromisedSingleton<braintree.GooglePayment>({\n generator: (): Promise<braintree.GooglePayment> =>\n this.braintreeManager.instance.get().then((braintreeInstance: braintree.Client) => {\n return this.googlePayBraintreeClient.create({\n client: braintreeInstance,\n googlePayVersion: 2,\n googleMerchantId: this.googlePayMerchantId,\n });\n }),\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n\n private googlePayMerchantId?: string;\n\n private googlePayBraintreeClient: braintree.GooglePayment;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"paypal-button-datasource.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAAuB,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE/F,OAAO,QAAQ,MAAM,aAAa,CAAC;AA0InC,kBAAkB;AAClB,MAAM,OAAO,sBAAsB;IAgBjC,YAAY,OAGX;QACC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED,kBAAkB;IACZ,OAAO;;;YACX,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACpD,MAAM,IAAI,GAAG,YAAY,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAE1E,MAAM,OAAO,GAAiD;gBAC5D,IAAI,EAAE,IAAuB;gBAC7B,MAAM,EAAE,SAAS;aAClB,CAAC;YACF,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAErC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBACzC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,2BAA2B,GAAG,uBAAuB,QAAQ,CACnE,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC,MAAM,EAAE,UAAU,CAAC;YACvB,CAAC;YAED,MAAA,IAAI,CAAC,QAAQ,0CAAE,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEnD,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;KAAA;IAED,kBAAkB;IACZ,WAAW,CAAC,IAA8B;;;YAC9C,MAAM,OAAO,GAA2B,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAExF,MAAA,IAAI,CAAC,QAAQ,0CAAE,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEtD,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAEK,SAAS,CAAC,IAA8B;;;YAC5C,MAAM,OAAO,GAA2B,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACxF,MAAA,IAAI,CAAC,QAAQ,0CAAE,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAErD,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAED,kBAAkB;IAClB,QAAQ,CAAC,IAAY;;QACnB,MAAA,IAAI,CAAC,QAAQ,0CAAE,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,KAAa;;QACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,MAAA,IAAI,CAAC,QAAQ,0CAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';\r\n\r\nimport currency from 'currency.js';\r\n\r\n/**\r\n * PayPayButtonDataSource is responsible for communicating with the PayPal button.\r\n *\r\n * The PayPal button cannot live in the ShadowDOM so we have to instantiate it at the\r\n * top of the DOM and it lives in the global sphere. This makes it difficult to communicate\r\n * with it directly. The PayPalButtonDataSource provides an object that we can pass around\r\n * that hooks into all of the PayPal button's callbacks and provides callbacks to its\r\n * delegate that is interested in the various events.\r\n *\r\n * @export\r\n * @interface PayPalButtonDataSourceInterface\r\n */\r\nexport interface PayPalButtonDataSourceInterface {\r\n /**\r\n * The delegate to inform about button events\r\n *\r\n * @type {PayPalButtonDataSourceDelegate}\r\n * @memberof PayPalButtonDataSourceInterface\r\n */\r\n delegate?: PayPalButtonDataSourceDelegate;\r\n\r\n /**\r\n * The Donation Info associated with this button.\r\n *\r\n * Since the user initiates the checkout flow from the button itself (not programatically by us),\r\n * we need to have up-to-date donation information so whenever the user updates donation info\r\n * from the form, we update this.\r\n *\r\n * @type {DonationPaymentInfo}\r\n * @memberof PayPalButtonDataSourceInterface\r\n */\r\n donationInfo: DonationPaymentInfo;\r\n\r\n /**\r\n * The payment has been started by the user (they clicked the PayPal button)\r\n *\r\n * @returns {Promise<string>}\r\n * @memberof PayPalButtonDataSourceInterface\r\n */\r\n payment(): Promise<string>;\r\n\r\n /**\r\n * The user has authorized the donation\r\n *\r\n * @param {paypal.AuthorizationData} data\r\n * @param {object} actions\r\n * @returns {(Promise<paypal.TokenizePayload | undefined>)}\r\n * @memberof PayPalButtonDataSourceInterface\r\n */\r\n onAuthorize(\r\n data: paypal.AuthorizationData,\r\n actions: object,\r\n ): Promise<paypal.TokenizePayload | undefined>;\r\n\r\n /**\r\n * The user cancelled the donation\r\n *\r\n * @param {paypal.CancellationData} data\r\n * @memberof PayPalButtonDataSourceInterface\r\n */\r\n onCancel(data: paypal.CancellationData): void;\r\n\r\n /**\r\n * An error occurred\r\n *\r\n * @param {string} error\r\n * @memberof PayPalButtonDataSourceInterface\r\n */\r\n onError(error: string): void;\r\n}\r\n\r\n/**\r\n * The PayPalButtonDataSourceDelegate is an interface for any object interested\r\n * in events emitted by the paypal button.\r\n *\r\n * @export\r\n * @interface PayPalButtonDataSourceDelegate\r\n */\r\nexport interface PayPalButtonDataSourceDelegate {\r\n /**\r\n * Payment has been started\r\n *\r\n * @param {PayPalButtonDataSourceInterface} dataSource\r\n * @param {object} options\r\n * @returns {Promise<void>}\r\n * @memberof PayPalButtonDataSourceDelegate\r\n */\r\n payPalPaymentStarted(dataSource: PayPalButtonDataSourceInterface, options: object): Promise<void>;\r\n\r\n /**\r\n * Payment has been authorized by patron and submits to PayPal\r\n *\r\n * @param {PayPalButtonDataSourceInterface} dataSource\r\n * @param {paypal.TokenizePayload} payload\r\n * @returns {Promise<void>}\r\n * @memberof PayPalButtonDataSourceDelegate\r\n */\r\n payPalPaymentAuthorized(\r\n dataSource: PayPalButtonDataSourceInterface,\r\n payload: paypal.TokenizePayload,\r\n ): Promise<void>;\r\n\r\n /**\r\n * Payment has been authorized\r\n *\r\n * @param {PayPalButtonDataSourceInterface} dataSource\r\n * @param {paypal.TokenizePayload} payload\r\n * @returns {Promise<void>}\r\n * @memberof PayPalButtonDataSourceDelegate\r\n */\r\n payPalPaymentConfirmed(\r\n dataSource: PayPalButtonDataSourceInterface,\r\n payload: paypal.TokenizePayload,\r\n ): Promise<void>;\r\n\r\n /**\r\n * Payment has been cancelled\r\n *\r\n * @param {PayPalButtonDataSourceInterface} dataSource\r\n * @param {object} data\r\n * @returns {Promise<void>}\r\n * @memberof PayPalButtonDataSourceDelegate\r\n */\r\n payPalPaymentCancelled(dataSource: PayPalButtonDataSourceInterface, data: object): Promise<void>;\r\n\r\n /**\r\n * There was a payment error\r\n *\r\n * @param {PayPalButtonDataSourceInterface} dataSource\r\n * @param {string} error\r\n * @returns {Promise<void>}\r\n * @memberof PayPalButtonDataSourceDelegate\r\n */\r\n payPalPaymentError(dataSource: PayPalButtonDataSourceInterface, error: string): Promise<void>;\r\n}\r\n\r\n/** @inheritdoc */\r\nexport class PayPalButtonDataSource implements PayPalButtonDataSourceInterface {\r\n /** @inheritdoc */\r\n delegate?: PayPalButtonDataSourceDelegate;\r\n\r\n /** @inheritdoc */\r\n donationInfo: DonationPaymentInfo;\r\n\r\n /**\r\n * The PayPal instance\r\n *\r\n * @private\r\n * @type {braintree.PayPalCheckout}\r\n * @memberof PayPalButtonDataSource\r\n */\r\n private paypalInstance: braintree.PayPalCheckout;\r\n\r\n constructor(options: {\r\n donationInfo: DonationPaymentInfo;\r\n paypalInstance: braintree.PayPalCheckout;\r\n }) {\r\n this.donationInfo = options.donationInfo;\r\n this.paypalInstance = options.paypalInstance;\r\n }\r\n\r\n /** @inheritdoc */\r\n async payment(): Promise<string> {\r\n const donationType = this.donationInfo.donationType;\r\n const flow = donationType === DonationType.OneTime ? 'checkout' : 'vault';\r\n\r\n const options: braintree.PayPalCheckoutCreatePaymentOptions = {\r\n flow: flow as paypal.FlowType,\r\n intent: 'capture',\r\n };\r\n options.enableShippingAddress = true;\r\n\r\n if (flow === 'checkout') {\r\n options.amount = this.donationInfo.total;\r\n options.currency = 'USD';\r\n } else {\r\n options.billingAgreementDescription = `Subscribe to donate ${currency(\r\n this.donationInfo.total,\r\n { symbol: '$' },\r\n ).format()} monthly`;\r\n }\r\n\r\n this.delegate?.payPalPaymentStarted(this, options);\r\n\r\n return this.paypalInstance.createPayment(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n async onAuthorize(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {\r\n const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);\r\n\r\n this.delegate?.payPalPaymentAuthorized(this, payload);\r\n\r\n return payload;\r\n }\r\n\r\n async onConfirm(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {\r\n const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);\r\n this.delegate?.payPalPaymentConfirmed(this, payload);\r\n\r\n return payload;\r\n }\r\n\r\n /** @inheritdoc */\r\n onCancel(data: object): void {\r\n this.delegate?.payPalPaymentCancelled(this, data);\r\n }\r\n\r\n /** @inheritdoc */\r\n onError(error: string): void {\r\n console.error('PayPal error', error);\r\n this.delegate?.payPalPaymentError(this, error);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"paypal-button-datasource.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAAuB,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE/F,OAAO,QAAQ,MAAM,aAAa,CAAC;AA0InC,kBAAkB;AAClB,MAAM,OAAO,sBAAsB;IAgBjC,YAAY,OAGX;QACC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED,kBAAkB;IACZ,OAAO;;;YACX,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACpD,MAAM,IAAI,GAAG,YAAY,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAE1E,MAAM,OAAO,GAAiD;gBAC5D,IAAI,EAAE,IAAuB;gBAC7B,MAAM,EAAE,SAAS;aAClB,CAAC;YACF,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAErC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBACzC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,2BAA2B,GAAG,uBAAuB,QAAQ,CACnE,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC,MAAM,EAAE,UAAU,CAAC;YACvB,CAAC;YAED,MAAA,IAAI,CAAC,QAAQ,0CAAE,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEnD,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;KAAA;IAED,kBAAkB;IACZ,WAAW,CAAC,IAA8B;;;YAC9C,MAAM,OAAO,GAA2B,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAExF,MAAA,IAAI,CAAC,QAAQ,0CAAE,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEtD,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAEK,SAAS,CAAC,IAA8B;;;YAC5C,MAAM,OAAO,GAA2B,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACxF,MAAA,IAAI,CAAC,QAAQ,0CAAE,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAErD,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAED,kBAAkB;IAClB,QAAQ,CAAC,IAAY;;QACnB,MAAA,IAAI,CAAC,QAAQ,0CAAE,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,KAAa;;QACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,MAAA,IAAI,CAAC,QAAQ,0CAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';\n\nimport currency from 'currency.js';\n\n/**\n * PayPayButtonDataSource is responsible for communicating with the PayPal button.\n *\n * The PayPal button cannot live in the ShadowDOM so we have to instantiate it at the\n * top of the DOM and it lives in the global sphere. This makes it difficult to communicate\n * with it directly. The PayPalButtonDataSource provides an object that we can pass around\n * that hooks into all of the PayPal button's callbacks and provides callbacks to its\n * delegate that is interested in the various events.\n *\n * @export\n * @interface PayPalButtonDataSourceInterface\n */\nexport interface PayPalButtonDataSourceInterface {\n /**\n * The delegate to inform about button events\n *\n * @type {PayPalButtonDataSourceDelegate}\n * @memberof PayPalButtonDataSourceInterface\n */\n delegate?: PayPalButtonDataSourceDelegate;\n\n /**\n * The Donation Info associated with this button.\n *\n * Since the user initiates the checkout flow from the button itself (not programatically by us),\n * we need to have up-to-date donation information so whenever the user updates donation info\n * from the form, we update this.\n *\n * @type {DonationPaymentInfo}\n * @memberof PayPalButtonDataSourceInterface\n */\n donationInfo: DonationPaymentInfo;\n\n /**\n * The payment has been started by the user (they clicked the PayPal button)\n *\n * @returns {Promise<string>}\n * @memberof PayPalButtonDataSourceInterface\n */\n payment(): Promise<string>;\n\n /**\n * The user has authorized the donation\n *\n * @param {paypal.AuthorizationData} data\n * @param {object} actions\n * @returns {(Promise<paypal.TokenizePayload | undefined>)}\n * @memberof PayPalButtonDataSourceInterface\n */\n onAuthorize(\n data: paypal.AuthorizationData,\n actions: object,\n ): Promise<paypal.TokenizePayload | undefined>;\n\n /**\n * The user cancelled the donation\n *\n * @param {paypal.CancellationData} data\n * @memberof PayPalButtonDataSourceInterface\n */\n onCancel(data: paypal.CancellationData): void;\n\n /**\n * An error occurred\n *\n * @param {string} error\n * @memberof PayPalButtonDataSourceInterface\n */\n onError(error: string): void;\n}\n\n/**\n * The PayPalButtonDataSourceDelegate is an interface for any object interested\n * in events emitted by the paypal button.\n *\n * @export\n * @interface PayPalButtonDataSourceDelegate\n */\nexport interface PayPalButtonDataSourceDelegate {\n /**\n * Payment has been started\n *\n * @param {PayPalButtonDataSourceInterface} dataSource\n * @param {object} options\n * @returns {Promise<void>}\n * @memberof PayPalButtonDataSourceDelegate\n */\n payPalPaymentStarted(dataSource: PayPalButtonDataSourceInterface, options: object): Promise<void>;\n\n /**\n * Payment has been authorized by patron and submits to PayPal\n *\n * @param {PayPalButtonDataSourceInterface} dataSource\n * @param {paypal.TokenizePayload} payload\n * @returns {Promise<void>}\n * @memberof PayPalButtonDataSourceDelegate\n */\n payPalPaymentAuthorized(\n dataSource: PayPalButtonDataSourceInterface,\n payload: paypal.TokenizePayload,\n ): Promise<void>;\n\n /**\n * Payment has been authorized\n *\n * @param {PayPalButtonDataSourceInterface} dataSource\n * @param {paypal.TokenizePayload} payload\n * @returns {Promise<void>}\n * @memberof PayPalButtonDataSourceDelegate\n */\n payPalPaymentConfirmed(\n dataSource: PayPalButtonDataSourceInterface,\n payload: paypal.TokenizePayload,\n ): Promise<void>;\n\n /**\n * Payment has been cancelled\n *\n * @param {PayPalButtonDataSourceInterface} dataSource\n * @param {object} data\n * @returns {Promise<void>}\n * @memberof PayPalButtonDataSourceDelegate\n */\n payPalPaymentCancelled(dataSource: PayPalButtonDataSourceInterface, data: object): Promise<void>;\n\n /**\n * There was a payment error\n *\n * @param {PayPalButtonDataSourceInterface} dataSource\n * @param {string} error\n * @returns {Promise<void>}\n * @memberof PayPalButtonDataSourceDelegate\n */\n payPalPaymentError(dataSource: PayPalButtonDataSourceInterface, error: string): Promise<void>;\n}\n\n/** @inheritdoc */\nexport class PayPalButtonDataSource implements PayPalButtonDataSourceInterface {\n /** @inheritdoc */\n delegate?: PayPalButtonDataSourceDelegate;\n\n /** @inheritdoc */\n donationInfo: DonationPaymentInfo;\n\n /**\n * The PayPal instance\n *\n * @private\n * @type {braintree.PayPalCheckout}\n * @memberof PayPalButtonDataSource\n */\n private paypalInstance: braintree.PayPalCheckout;\n\n constructor(options: {\n donationInfo: DonationPaymentInfo;\n paypalInstance: braintree.PayPalCheckout;\n }) {\n this.donationInfo = options.donationInfo;\n this.paypalInstance = options.paypalInstance;\n }\n\n /** @inheritdoc */\n async payment(): Promise<string> {\n const donationType = this.donationInfo.donationType;\n const flow = donationType === DonationType.OneTime ? 'checkout' : 'vault';\n\n const options: braintree.PayPalCheckoutCreatePaymentOptions = {\n flow: flow as paypal.FlowType,\n intent: 'capture',\n };\n options.enableShippingAddress = true;\n\n if (flow === 'checkout') {\n options.amount = this.donationInfo.total;\n options.currency = 'USD';\n } else {\n options.billingAgreementDescription = `Subscribe to donate ${currency(\n this.donationInfo.total,\n { symbol: '$' },\n ).format()} monthly`;\n }\n\n this.delegate?.payPalPaymentStarted(this, options);\n\n return this.paypalInstance.createPayment(options);\n }\n\n /** @inheritdoc */\n async onAuthorize(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {\n const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);\n\n this.delegate?.payPalPaymentAuthorized(this, payload);\n\n return payload;\n }\n\n async onConfirm(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {\n const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);\n this.delegate?.payPalPaymentConfirmed(this, payload);\n\n return payload;\n }\n\n /** @inheritdoc */\n onCancel(data: object): void {\n this.delegate?.payPalPaymentCancelled(this, data);\n }\n\n /** @inheritdoc */\n onError(error: string): void {\n console.error('PayPal error', error);\n this.delegate?.payPalPaymentError(this, error);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"paypal-interface.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/paypal/paypal-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\r\nimport { PayPalButtonDataSourceInterface } from './paypal-button-datasource';\r\n\r\nexport interface PayPalHandlerInterface {\r\n instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;\r\n\r\n renderPayPalButton(params: {\r\n selector: string;\r\n style: paypal.ButtonStyle;\r\n donationInfo: DonationPaymentInfo;\r\n }): Promise<PayPalButtonDataSourceInterface | undefined>;\r\n}\r\n"]}
1
+ {"version":3,"file":"paypal-interface.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/paypal/paypal-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\nimport { PayPalButtonDataSourceInterface } from './paypal-button-datasource';\n\nexport interface PayPalHandlerInterface {\n instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;\n\n renderPayPalButton(params: {\n selector: string;\n style: paypal.ButtonStyle;\n donationInfo: DonationPaymentInfo;\n }): Promise<PayPalButtonDataSourceInterface | undefined>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"paypal.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/paypal/paypal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAA6B,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE3F,OAAO,EAEL,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,OAAO,aAAa;IAGxB,YAAY,OAKX;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAErD,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAAuC;YAC1E,SAAS,EAAE,GAAsC,EAAE,CACjD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBAC1D,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;oBAC9B,MAAM,EAAE,eAAe;iBACxB,CAAC,CAAC;YACL,CAAC,CAAC;SACL,CAAC,CAAC;IACL,CAAC;IAUK,kBAAkB,CAAC,MAIxB;;YACC,MAAM,GAAG,GAAuB,CAC9B,IAAI,CAAC,kBAAkB,KAAK,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAChE,CAAC;YAExB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACjD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,sBAAsB,CAAC;gBAC5C,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,cAAc,EAAE,cAAc;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAC/B;gBACE,GAAG;gBACH,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;gBACpD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC9C,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,OAAO,EAAE;oBACP,UAAU,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;iBACnC;aACF,EACD,MAAM,CAAC,QAAQ,CAChB,CAAC;YAEF,OAAO,UAAU,CAAC;QACpB,CAAC;KAAA;CACF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { BraintreeManagerInterface, HostingEnvironment } from '../../braintree-interfaces';\r\nimport { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\r\nimport {\r\n PayPalButtonDataSourceInterface,\r\n PayPalButtonDataSource,\r\n} from './paypal-button-datasource';\r\nimport { PayPalHandlerInterface } from './paypal-interface';\r\n\r\nexport class PayPalHandler implements PayPalHandlerInterface {\r\n instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;\r\n\r\n constructor(options: {\r\n braintreeManager: BraintreeManagerInterface;\r\n paypalClient: braintree.PayPalCheckout;\r\n paypalButton: paypal.ButtonRenderer;\r\n hostingEnvironment: HostingEnvironment;\r\n }) {\r\n this.braintreeManager = options.braintreeManager;\r\n this.paypalClient = options.paypalClient;\r\n this.paypalButtonGenerator = options.paypalButton;\r\n this.hostingEnvironment = options.hostingEnvironment;\r\n\r\n this.instance = new PromisedSingleton<braintree.PayPalCheckout | undefined>({\r\n generator: (): Promise<braintree.PayPalCheckout> =>\r\n this.braintreeManager.instance.get().then(braintreeClient => {\r\n return this.paypalClient.create({\r\n client: braintreeClient,\r\n });\r\n }),\r\n });\r\n }\r\n\r\n private braintreeManager: BraintreeManagerInterface;\r\n\r\n private paypalClient: braintree.PayPalCheckout;\r\n\r\n private paypalButtonGenerator: paypal.ButtonRenderer;\r\n\r\n private hostingEnvironment: HostingEnvironment;\r\n\r\n async renderPayPalButton(params: {\r\n selector: string;\r\n style: paypal.ButtonStyle;\r\n donationInfo: DonationPaymentInfo;\r\n }): Promise<PayPalButtonDataSourceInterface | undefined> {\r\n const env: paypal.Environment = (\r\n this.hostingEnvironment === HostingEnvironment.Development ? 'sandbox' : 'production'\r\n ) as paypal.Environment;\r\n\r\n const paypalInstance = await this.instance.get();\r\n if (!paypalInstance) {\r\n return;\r\n }\r\n\r\n const dataSource = new PayPalButtonDataSource({\r\n donationInfo: params.donationInfo,\r\n paypalInstance: paypalInstance,\r\n });\r\n\r\n this.paypalButtonGenerator.render(\r\n {\r\n env,\r\n style: params.style,\r\n payment: dataSource.payment.bind(dataSource),\r\n onAuthorize: dataSource.onAuthorize.bind(dataSource),\r\n onCancel: dataSource.onCancel.bind(dataSource),\r\n onError: dataSource.onError.bind(dataSource),\r\n funding: {\r\n disallowed: [paypal.FUNDING.VENMO],\r\n },\r\n },\r\n params.selector,\r\n );\r\n\r\n return dataSource;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"paypal.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/paypal/paypal.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAA6B,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE3F,OAAO,EAEL,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,OAAO,aAAa;IAGxB,YAAY,OAKX;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAErD,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAAuC;YAC1E,SAAS,EAAE,GAAsC,EAAE,CACjD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBAC1D,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;oBAC9B,MAAM,EAAE,eAAe;iBACxB,CAAC,CAAC;YACL,CAAC,CAAC;SACL,CAAC,CAAC;IACL,CAAC;IAUK,kBAAkB,CAAC,MAIxB;;YACC,MAAM,GAAG,GAAuB,CAC9B,IAAI,CAAC,kBAAkB,KAAK,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAChE,CAAC;YAExB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACjD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,sBAAsB,CAAC;gBAC5C,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,cAAc,EAAE,cAAc;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAC/B;gBACE,GAAG;gBACH,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;gBACpD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC9C,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,OAAO,EAAE;oBACP,UAAU,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;iBACnC;aACF,EACD,MAAM,CAAC,QAAQ,CAChB,CAAC;YAEF,OAAO,UAAU,CAAC;QACpB,CAAC;KAAA;CACF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { BraintreeManagerInterface, HostingEnvironment } from '../../braintree-interfaces';\nimport { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\nimport {\n PayPalButtonDataSourceInterface,\n PayPalButtonDataSource,\n} from './paypal-button-datasource';\nimport { PayPalHandlerInterface } from './paypal-interface';\n\nexport class PayPalHandler implements PayPalHandlerInterface {\n instance: PromisedSingleton<braintree.PayPalCheckout | undefined>;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n paypalClient: braintree.PayPalCheckout;\n paypalButton: paypal.ButtonRenderer;\n hostingEnvironment: HostingEnvironment;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.paypalClient = options.paypalClient;\n this.paypalButtonGenerator = options.paypalButton;\n this.hostingEnvironment = options.hostingEnvironment;\n\n this.instance = new PromisedSingleton<braintree.PayPalCheckout | undefined>({\n generator: (): Promise<braintree.PayPalCheckout> =>\n this.braintreeManager.instance.get().then(braintreeClient => {\n return this.paypalClient.create({\n client: braintreeClient,\n });\n }),\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n\n private paypalClient: braintree.PayPalCheckout;\n\n private paypalButtonGenerator: paypal.ButtonRenderer;\n\n private hostingEnvironment: HostingEnvironment;\n\n async renderPayPalButton(params: {\n selector: string;\n style: paypal.ButtonStyle;\n donationInfo: DonationPaymentInfo;\n }): Promise<PayPalButtonDataSourceInterface | undefined> {\n const env: paypal.Environment = (\n this.hostingEnvironment === HostingEnvironment.Development ? 'sandbox' : 'production'\n ) as paypal.Environment;\n\n const paypalInstance = await this.instance.get();\n if (!paypalInstance) {\n return;\n }\n\n const dataSource = new PayPalButtonDataSource({\n donationInfo: params.donationInfo,\n paypalInstance: paypalInstance,\n });\n\n this.paypalButtonGenerator.render(\n {\n env,\n style: params.style,\n payment: dataSource.payment.bind(dataSource),\n onAuthorize: dataSource.onAuthorize.bind(dataSource),\n onCancel: dataSource.onCancel.bind(dataSource),\n onError: dataSource.onError.bind(dataSource),\n funding: {\n disallowed: [paypal.FUNDING.VENMO],\n },\n },\n params.selector,\n );\n\n return dataSource;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"venmo-interface.js","sourceRoot":"","sources":["../../../../src/braintree-manager/payment-providers/venmo-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\n\r\nexport interface VenmoHandlerInterface {\r\n instance: PromisedSingleton<braintree.Venmo>;\r\n\r\n isBrowserSupported(): Promise<boolean>;\r\n startPayment(): Promise<braintree.VenmoTokenizePayload>;\r\n}\r\n"]}
1
+ {"version":3,"file":"venmo-interface.js","sourceRoot":"","sources":["../../../../src/braintree-manager/payment-providers/venmo-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nexport interface VenmoHandlerInterface {\n instance: PromisedSingleton<braintree.Venmo>;\n\n isBrowserSupported(): Promise<boolean>;\n startPayment(): Promise<braintree.VenmoTokenizePayload>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"venmo.js","sourceRoot":"","sources":["../../../../src/braintree-manager/payment-providers/venmo.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAKxE,MAAM,OAAO,YAAY;IAGvB,YAAY,OAKX;;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAE7C,IAAI,CAAC,QAAQ;YACX,MAAA,OAAO,CAAC,yBAAyB,mCACjC,IAAI,iBAAiB,CAAkB;gBACrC,SAAS,EAAE,GAA6B,EAAE,CACxC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;wBAC7B,MAAM,EAAE,iBAAiB;wBACzB,SAAS,EAAE,IAAI,CAAC,cAAc;qBAC/B,CAAC,CAAC;gBACL,CAAC,CAAC;aACL,CAAC,CAAC;IACP,CAAC;IAQK,kBAAkB;;;YACtB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC3C,OAAO,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,kBAAkB,EAAE,mCAAI,KAAK,CAAC;QACjD,CAAC;KAAA;IAEK,YAAY;;YAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC3C,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,EAAE,CAAC;QAC9B,CAAC;KAAA;IAED;;;;;;;;;OASG;IACK,eAAe;QACrB,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\n\r\nimport { BraintreeManagerInterface } from '../braintree-interfaces';\r\nimport { VenmoHandlerInterface } from './venmo-interface';\r\n\r\nexport class VenmoHandler implements VenmoHandlerInterface {\r\n instance: PromisedSingleton<braintree.Venmo>;\r\n\r\n constructor(options: {\r\n braintreeManager: BraintreeManagerInterface;\r\n venmoClient: braintree.Venmo;\r\n venmoProfileId: string;\r\n instancePromisedSingleton?: PromisedSingleton<braintree.Venmo>;\r\n }) {\r\n this.braintreeManager = options.braintreeManager;\r\n this.venmoClient = options.venmoClient;\r\n this.venmoProfileId = options.venmoProfileId;\r\n\r\n this.instance =\r\n options.instancePromisedSingleton ??\r\n new PromisedSingleton<braintree.Venmo>({\r\n generator: (): Promise<braintree.Venmo> =>\r\n this.braintreeManager.instance.get().then(braintreeInstance => {\r\n return this.venmoClient.create({\r\n client: braintreeInstance,\r\n profileId: this.venmoProfileId,\r\n });\r\n }),\r\n });\r\n }\r\n\r\n private braintreeManager: BraintreeManagerInterface;\r\n\r\n private venmoClient: braintree.Venmo;\r\n\r\n private venmoProfileId: string;\r\n\r\n async isBrowserSupported(): Promise<boolean> {\r\n if (this.isMobileFirefox()) {\r\n return false;\r\n }\r\n const instance = await this.instance.get();\r\n return instance?.isBrowserSupported() ?? false;\r\n }\r\n\r\n async startPayment(): Promise<braintree.VenmoTokenizePayload> {\r\n const instance = await this.instance.get();\r\n return instance?.tokenize();\r\n }\r\n\r\n /**\r\n * Venmo does not work in mobile Firefox, but their browser detector returns supported for it.\r\n *\r\n * On iOS, it opens the Venmo app, but returns you to Safari.\r\n * On Android, it takes you to the \"Download Venmo\" page.\r\n *\r\n * @private\r\n * @returns {boolean}\r\n * @memberof VenmoHandler\r\n */\r\n private isMobileFirefox(): boolean {\r\n const isFirefoxIos = navigator.userAgent.indexOf('FxiOS') !== -1;\r\n const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;\r\n const isMobile = navigator.userAgent.indexOf('Mobile') !== -1;\r\n return (isFirefox || isFirefoxIos) && isMobile;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"venmo.js","sourceRoot":"","sources":["../../../../src/braintree-manager/payment-providers/venmo.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAKxE,MAAM,OAAO,YAAY;IAGvB,YAAY,OAKX;;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAE7C,IAAI,CAAC,QAAQ;YACX,MAAA,OAAO,CAAC,yBAAyB,mCACjC,IAAI,iBAAiB,CAAkB;gBACrC,SAAS,EAAE,GAA6B,EAAE,CACxC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;wBAC7B,MAAM,EAAE,iBAAiB;wBACzB,SAAS,EAAE,IAAI,CAAC,cAAc;qBAC/B,CAAC,CAAC;gBACL,CAAC,CAAC;aACL,CAAC,CAAC;IACP,CAAC;IAQK,kBAAkB;;;YACtB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC3C,OAAO,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,kBAAkB,EAAE,mCAAI,KAAK,CAAC;QACjD,CAAC;KAAA;IAEK,YAAY;;YAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC3C,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,EAAE,CAAC;QAC9B,CAAC;KAAA;IAED;;;;;;;;;OASG;IACK,eAAe;QACrB,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nimport { BraintreeManagerInterface } from '../braintree-interfaces';\nimport { VenmoHandlerInterface } from './venmo-interface';\n\nexport class VenmoHandler implements VenmoHandlerInterface {\n instance: PromisedSingleton<braintree.Venmo>;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n venmoClient: braintree.Venmo;\n venmoProfileId: string;\n instancePromisedSingleton?: PromisedSingleton<braintree.Venmo>;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.venmoClient = options.venmoClient;\n this.venmoProfileId = options.venmoProfileId;\n\n this.instance =\n options.instancePromisedSingleton ??\n new PromisedSingleton<braintree.Venmo>({\n generator: (): Promise<braintree.Venmo> =>\n this.braintreeManager.instance.get().then(braintreeInstance => {\n return this.venmoClient.create({\n client: braintreeInstance,\n profileId: this.venmoProfileId,\n });\n }),\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n\n private venmoClient: braintree.Venmo;\n\n private venmoProfileId: string;\n\n async isBrowserSupported(): Promise<boolean> {\n if (this.isMobileFirefox()) {\n return false;\n }\n const instance = await this.instance.get();\n return instance?.isBrowserSupported() ?? false;\n }\n\n async startPayment(): Promise<braintree.VenmoTokenizePayload> {\n const instance = await this.instance.get();\n return instance?.tokenize();\n }\n\n /**\n * Venmo does not work in mobile Firefox, but their browser detector returns supported for it.\n *\n * On iOS, it opens the Venmo app, but returns you to Safari.\n * On Android, it takes you to the \"Download Venmo\" page.\n *\n * @private\n * @returns {boolean}\n * @memberof VenmoHandler\n */\n private isMobileFirefox(): boolean {\n const isFirefoxIos = navigator.userAgent.indexOf('FxiOS') !== -1;\n const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;\n const isMobile = navigator.userAgent.indexOf('Mobile') !== -1;\n return (isFirefox || isFirefoxIos) && isMobile;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"payment-providers-interface.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-providers-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\nimport { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface';\r\nimport {\r\n CreditCardHandlerEvents,\r\n CreditCardHandlerInterface,\r\n} from './payment-providers/credit-card/credit-card-interface';\r\nimport { VenmoHandlerInterface } from './payment-providers/venmo-interface';\r\nimport { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface';\r\nimport { GooglePayHandlerInterface } from './payment-providers/google-pay-interface';\r\nimport { Unsubscribe } from 'nanoevents';\r\n\r\n// this will bubble up child events\r\nexport type PaymentProvidersEvents = CreditCardHandlerEvents;\r\n\r\nexport interface PaymentProvidersInterface {\r\n on<E extends keyof PaymentProvidersEvents>(\r\n event: E,\r\n callback: PaymentProvidersEvents[E],\r\n ): Unsubscribe;\r\n creditCardHandler: PromisedSingleton<CreditCardHandlerInterface>;\r\n applePayHandler: PromisedSingleton<ApplePayHandlerInterface>;\r\n venmoHandler: PromisedSingleton<VenmoHandlerInterface | undefined>;\r\n paypalHandler: PromisedSingleton<PayPalHandlerInterface>;\r\n googlePayHandler: PromisedSingleton<GooglePayHandlerInterface>;\r\n}\r\n"]}
1
+ {"version":3,"file":"payment-providers-interface.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-providers-interface.ts"],"names":[],"mappings":"","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface';\nimport {\n CreditCardHandlerEvents,\n CreditCardHandlerInterface,\n} from './payment-providers/credit-card/credit-card-interface';\nimport { VenmoHandlerInterface } from './payment-providers/venmo-interface';\nimport { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface';\nimport { GooglePayHandlerInterface } from './payment-providers/google-pay-interface';\nimport { Unsubscribe } from 'nanoevents';\n\n// this will bubble up child events\nexport type PaymentProvidersEvents = CreditCardHandlerEvents;\n\nexport interface PaymentProvidersInterface {\n on<E extends keyof PaymentProvidersEvents>(\n event: E,\n callback: PaymentProvidersEvents[E],\n ): Unsubscribe;\n creditCardHandler: PromisedSingleton<CreditCardHandlerInterface>;\n applePayHandler: PromisedSingleton<ApplePayHandlerInterface>;\n venmoHandler: PromisedSingleton<VenmoHandlerInterface | undefined>;\n paypalHandler: PromisedSingleton<PayPalHandlerInterface>;\n googlePayHandler: PromisedSingleton<GooglePayHandlerInterface>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"payment-providers.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-providers.ts"],"names":[],"mappings":"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","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\r\n\r\nimport { CreditCardHandler } from './payment-providers/credit-card/credit-card';\r\nimport { ApplePayHandler } from './payment-providers/apple-pay/apple-pay';\r\nimport { VenmoHandler } from './payment-providers/venmo';\r\nimport { PayPalHandler } from './payment-providers/paypal/paypal';\r\nimport { ApplePaySessionManager } from './payment-providers/apple-pay/apple-pay-session-manager';\r\nimport { PaymentClientsInterface } from './payment-clients';\r\nimport { GooglePayHandler } from './payment-providers/google-pay';\r\nimport { BraintreeManagerInterface, HostingEnvironment } from './braintree-interfaces';\r\nimport { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration';\r\nimport { PaymentProvidersEvents, PaymentProvidersInterface } from './payment-providers-interface';\r\nimport { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface';\r\nimport { CreditCardHandlerInterface } from './payment-providers/credit-card/credit-card-interface';\r\nimport { VenmoHandlerInterface } from './payment-providers/venmo-interface';\r\nimport { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface';\r\nimport { GooglePayHandlerInterface } from './payment-providers/google-pay-interface';\r\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\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 * @export\r\n * @class PaymentProviders\r\n * @implements {PaymentProvidersInterface}\r\n */\r\nexport class PaymentProviders implements PaymentProvidersInterface {\r\n on<E extends keyof PaymentProvidersEvents>(\r\n event: E,\r\n callback: PaymentProvidersEvents[E],\r\n ): Unsubscribe {\r\n return this.emitter.on(event, callback);\r\n }\r\n\r\n creditCardHandler = new PromisedSingleton<CreditCardHandlerInterface>({\r\n generator: async (): Promise<CreditCardHandlerInterface> => {\r\n const client = await this.paymentClients.hostedFields.get();\r\n const handler = new CreditCardHandler({\r\n braintreeManager: this.braintreeManager,\r\n hostedFieldClient: client,\r\n hostedFieldConfig: this.hostedFieldConfig,\r\n });\r\n\r\n handler.on('hostedFieldsRetry', (retryNumber: number) => {\r\n this.emitter.emit('hostedFieldsRetry', retryNumber);\r\n });\r\n\r\n handler.on('hostedFieldsFailed', (error: unknown) => {\r\n this.emitter.emit('hostedFieldsFailed', error);\r\n });\r\n\r\n return handler;\r\n },\r\n });\r\n\r\n applePayHandler = new PromisedSingleton<ApplePayHandlerInterface>({\r\n generator: async (): Promise<ApplePayHandlerInterface> => {\r\n const client = await this.paymentClients.applePay.get();\r\n const applePaySessionManager = new ApplePaySessionManager();\r\n return new ApplePayHandler({\r\n braintreeManager: this.braintreeManager,\r\n applePayClient: client,\r\n applePaySessionManager: applePaySessionManager,\r\n });\r\n },\r\n });\r\n\r\n venmoHandler = new PromisedSingleton<VenmoHandlerInterface | undefined>({\r\n generator: async (): Promise<VenmoHandlerInterface | undefined> => {\r\n const client = await this.paymentClients.venmo.get();\r\n if (!this.venmoProfileId) {\r\n return undefined;\r\n }\r\n return new VenmoHandler({\r\n braintreeManager: this.braintreeManager,\r\n venmoClient: client,\r\n venmoProfileId: this.venmoProfileId,\r\n });\r\n },\r\n });\r\n\r\n paypalHandler = new PromisedSingleton<PayPalHandlerInterface>({\r\n generator: async (): Promise<PayPalHandlerInterface> => {\r\n const paypalLibrary = this.paymentClients.paypalLibrary.get();\r\n const client = this.paymentClients.payPal.get();\r\n\r\n const values = await Promise.all([client, paypalLibrary]);\r\n const handler = new PayPalHandler({\r\n braintreeManager: this.braintreeManager,\r\n paypalClient: values[0],\r\n paypalButton: values[1].Button,\r\n hostingEnvironment: this.hostingEnvironment,\r\n });\r\n return handler;\r\n },\r\n });\r\n\r\n googlePayHandler = new PromisedSingleton<GooglePayHandlerInterface>({\r\n generator: async (): Promise<GooglePayHandlerInterface> => {\r\n const googlePaymentsClient = this.paymentClients.googlePaymentsClient.get();\r\n const braintreeClient = this.paymentClients.googlePayBraintreeClient.get();\r\n\r\n const values = await Promise.all([braintreeClient, googlePaymentsClient]);\r\n const handler = new GooglePayHandler({\r\n braintreeManager: this.braintreeManager,\r\n googlePayMerchantId: this.googlePayMerchantId,\r\n googlePayBraintreeClient: values[0],\r\n googlePaymentsClient: values[1],\r\n });\r\n return handler;\r\n },\r\n });\r\n\r\n private braintreeManager: BraintreeManagerInterface;\r\n\r\n private venmoProfileId?: string;\r\n\r\n private googlePayMerchantId?: string;\r\n\r\n private hostedFieldConfig: HostedFieldConfiguration;\r\n\r\n private hostingEnvironment: HostingEnvironment = HostingEnvironment.Development;\r\n\r\n private paymentClients: PaymentClientsInterface;\r\n\r\n private emitter = createNanoEvents<PaymentProvidersEvents>();\r\n\r\n constructor(options: {\r\n braintreeManager: BraintreeManagerInterface;\r\n paymentClients: PaymentClientsInterface;\r\n venmoProfileId?: string;\r\n googlePayMerchantId?: string;\r\n hostingEnvironment: HostingEnvironment;\r\n hostedFieldConfig: HostedFieldConfiguration;\r\n }) {\r\n this.braintreeManager = options.braintreeManager;\r\n this.venmoProfileId = options.venmoProfileId;\r\n this.googlePayMerchantId = options.googlePayMerchantId;\r\n this.paymentClients = options.paymentClients;\r\n this.hostingEnvironment = options.hostingEnvironment;\r\n this.hostedFieldConfig = options.hostedFieldConfig;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"payment-providers.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-providers.ts"],"names":[],"mappings":"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","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nimport { CreditCardHandler } from './payment-providers/credit-card/credit-card';\nimport { ApplePayHandler } from './payment-providers/apple-pay/apple-pay';\nimport { VenmoHandler } from './payment-providers/venmo';\nimport { PayPalHandler } from './payment-providers/paypal/paypal';\nimport { ApplePaySessionManager } from './payment-providers/apple-pay/apple-pay-session-manager';\nimport { PaymentClientsInterface } from './payment-clients';\nimport { GooglePayHandler } from './payment-providers/google-pay';\nimport { BraintreeManagerInterface, HostingEnvironment } from './braintree-interfaces';\nimport { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration';\nimport { PaymentProvidersEvents, PaymentProvidersInterface } from './payment-providers-interface';\nimport { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface';\nimport { CreditCardHandlerInterface } from './payment-providers/credit-card/credit-card-interface';\nimport { VenmoHandlerInterface } from './payment-providers/venmo-interface';\nimport { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface';\nimport { GooglePayHandlerInterface } from './payment-providers/google-pay-interface';\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\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 * @export\n * @class PaymentProviders\n * @implements {PaymentProvidersInterface}\n */\nexport class PaymentProviders implements PaymentProvidersInterface {\n on<E extends keyof PaymentProvidersEvents>(\n event: E,\n callback: PaymentProvidersEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n creditCardHandler = new PromisedSingleton<CreditCardHandlerInterface>({\n generator: async (): Promise<CreditCardHandlerInterface> => {\n const client = await this.paymentClients.hostedFields.get();\n const handler = new CreditCardHandler({\n braintreeManager: this.braintreeManager,\n hostedFieldClient: client,\n hostedFieldConfig: this.hostedFieldConfig,\n });\n\n handler.on('hostedFieldsRetry', (retryNumber: number) => {\n this.emitter.emit('hostedFieldsRetry', retryNumber);\n });\n\n handler.on('hostedFieldsFailed', (error: unknown) => {\n this.emitter.emit('hostedFieldsFailed', error);\n });\n\n return handler;\n },\n });\n\n applePayHandler = new PromisedSingleton<ApplePayHandlerInterface>({\n generator: async (): Promise<ApplePayHandlerInterface> => {\n const client = await this.paymentClients.applePay.get();\n const applePaySessionManager = new ApplePaySessionManager();\n return new ApplePayHandler({\n braintreeManager: this.braintreeManager,\n applePayClient: client,\n applePaySessionManager: applePaySessionManager,\n });\n },\n });\n\n venmoHandler = new PromisedSingleton<VenmoHandlerInterface | undefined>({\n generator: async (): Promise<VenmoHandlerInterface | undefined> => {\n const client = await this.paymentClients.venmo.get();\n if (!this.venmoProfileId) {\n return undefined;\n }\n return new VenmoHandler({\n braintreeManager: this.braintreeManager,\n venmoClient: client,\n venmoProfileId: this.venmoProfileId,\n });\n },\n });\n\n paypalHandler = new PromisedSingleton<PayPalHandlerInterface>({\n generator: async (): Promise<PayPalHandlerInterface> => {\n const paypalLibrary = this.paymentClients.paypalLibrary.get();\n const client = this.paymentClients.payPal.get();\n\n const values = await Promise.all([client, paypalLibrary]);\n const handler = new PayPalHandler({\n braintreeManager: this.braintreeManager,\n paypalClient: values[0],\n paypalButton: values[1].Button,\n hostingEnvironment: this.hostingEnvironment,\n });\n return handler;\n },\n });\n\n googlePayHandler = new PromisedSingleton<GooglePayHandlerInterface>({\n generator: async (): Promise<GooglePayHandlerInterface> => {\n const googlePaymentsClient = this.paymentClients.googlePaymentsClient.get();\n const braintreeClient = this.paymentClients.googlePayBraintreeClient.get();\n\n const values = await Promise.all([braintreeClient, googlePaymentsClient]);\n const handler = new GooglePayHandler({\n braintreeManager: this.braintreeManager,\n googlePayMerchantId: this.googlePayMerchantId,\n googlePayBraintreeClient: values[0],\n googlePaymentsClient: values[1],\n });\n return handler;\n },\n });\n\n private braintreeManager: BraintreeManagerInterface;\n\n private venmoProfileId?: string;\n\n private googlePayMerchantId?: string;\n\n private hostedFieldConfig: HostedFieldConfiguration;\n\n private hostingEnvironment: HostingEnvironment = HostingEnvironment.Development;\n\n private paymentClients: PaymentClientsInterface;\n\n private emitter = createNanoEvents<PaymentProvidersEvents>();\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n paymentClients: PaymentClientsInterface;\n venmoProfileId?: string;\n googlePayMerchantId?: string;\n hostingEnvironment: HostingEnvironment;\n hostedFieldConfig: HostedFieldConfiguration;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.venmoProfileId = options.venmoProfileId;\n this.googlePayMerchantId = options.googlePayMerchantId;\n this.paymentClients = options.paymentClients;\n this.hostingEnvironment = options.hostingEnvironment;\n this.hostedFieldConfig = options.hostedFieldConfig;\n }\n}\n"]}
@@ -258,70 +258,70 @@ let DonationFormController = class DonationFormController extends LitElement {
258
258
  }
259
259
  /** @inheritdoc */
260
260
  render() {
261
- return html `
262
- <div class="donation-form-controller-container">
263
- <donation-form
264
- .environment=${this.environment}
265
- .braintreeManager=${this.braintreeManager}
266
- .contactForm=${this.contactForm}
267
- .amountOptions=${this.amountOptions}
268
- .donationInfo=${this.donationInfo}
269
- .amountSelectionLayout=${this.amountSelectionLayout}
270
- .frequencySelectionMode=${this.frequencySelectionMode}
271
- @donationInfoChanged=${this.donationInfoChanged}
272
- @paymentProviderSelected=${this.paymentProviderSelected}
273
- @paymentFlowStarted=${this.paymentFlowStarted}
274
- @paymentFlowConfirmed=${this.paymentFlowConfirmed}
275
- @paymentFlowCancelled=${this.paymentFlowCancelled}
276
- @paymentFlowError=${this.paymentFlowError}
277
- >
278
- <!--
279
- Why are these slots here?
280
-
281
- Due to the way Braintree, PayPal, and Recaptcha work, they cannot exist
282
- in the shadowDOM so must exist in the clearDOM and get passed
283
- in through a <slot>.
284
-
285
- Braintree / PayPal are working on a solution to this. See:
286
- - https://github.com/braintree/braintree-web-drop-in/issues/614#issuecomment-616796104
287
- - https://github.com/braintree/braintree-web-drop-in/issues/296#issuecomment-616749307
288
- - https://github.com/paypal/paypal-checkout-components/issues/353#issuecomment-595956216
289
- -->
290
- <div slot="braintree-hosted-fields">
291
- <div id="braintree-error-message"></div>
292
- <div class="braintree-row">
293
- <badged-input .icon=${creditCardImg} ?required=${true} class="creditcard">
294
- <div class="braintree-input" id="braintree-creditcard"></div>
295
- </badged-input>
296
- </div>
297
- <div class="braintree-row">
298
- <badged-input .icon=${calendarImg} ?required=${true} class="expiration">
299
- <div class="braintree-input" id="braintree-expiration"></div>
300
- </badged-input>
301
- <badged-input .icon=${lockImg} ?required=${true} class="cvv">
302
- <div class="braintree-input" id="braintree-cvv"></div>
303
- </badged-input>
304
- </div>
305
- </div>
306
-
307
- <!--
308
- Form autocompletion does not work in the shadowDOM so
309
- we slot the contact form in from the lightDOM and pass
310
- in a reference to it in the <donation-form> tag above
311
- -->
312
- <div slot="contact-form">
313
- <contact-form .donorEmail=${this.donorEmail}></contact-form>
314
- </div>
315
-
316
- <div slot="paypal-button">
317
- <div id="paypal-button"></div>
318
- </div>
319
-
320
- <slot name="recaptcha" slot="recaptcha"> </slot>
321
- </donation-form>
322
- </div>
323
-
324
- ${this.getStyles}
261
+ return html `
262
+ <div class="donation-form-controller-container">
263
+ <donation-form
264
+ .environment=${this.environment}
265
+ .braintreeManager=${this.braintreeManager}
266
+ .contactForm=${this.contactForm}
267
+ .amountOptions=${this.amountOptions}
268
+ .donationInfo=${this.donationInfo}
269
+ .amountSelectionLayout=${this.amountSelectionLayout}
270
+ .frequencySelectionMode=${this.frequencySelectionMode}
271
+ @donationInfoChanged=${this.donationInfoChanged}
272
+ @paymentProviderSelected=${this.paymentProviderSelected}
273
+ @paymentFlowStarted=${this.paymentFlowStarted}
274
+ @paymentFlowConfirmed=${this.paymentFlowConfirmed}
275
+ @paymentFlowCancelled=${this.paymentFlowCancelled}
276
+ @paymentFlowError=${this.paymentFlowError}
277
+ >
278
+ <!--
279
+ Why are these slots here?
280
+
281
+ Due to the way Braintree, PayPal, and Recaptcha work, they cannot exist
282
+ in the shadowDOM so must exist in the clearDOM and get passed
283
+ in through a <slot>.
284
+
285
+ Braintree / PayPal are working on a solution to this. See:
286
+ - https://github.com/braintree/braintree-web-drop-in/issues/614#issuecomment-616796104
287
+ - https://github.com/braintree/braintree-web-drop-in/issues/296#issuecomment-616749307
288
+ - https://github.com/paypal/paypal-checkout-components/issues/353#issuecomment-595956216
289
+ -->
290
+ <div slot="braintree-hosted-fields">
291
+ <div id="braintree-error-message"></div>
292
+ <div class="braintree-row">
293
+ <badged-input .icon=${creditCardImg} ?required=${true} class="creditcard">
294
+ <div class="braintree-input" id="braintree-creditcard"></div>
295
+ </badged-input>
296
+ </div>
297
+ <div class="braintree-row">
298
+ <badged-input .icon=${calendarImg} ?required=${true} class="expiration">
299
+ <div class="braintree-input" id="braintree-expiration"></div>
300
+ </badged-input>
301
+ <badged-input .icon=${lockImg} ?required=${true} class="cvv">
302
+ <div class="braintree-input" id="braintree-cvv"></div>
303
+ </badged-input>
304
+ </div>
305
+ </div>
306
+
307
+ <!--
308
+ Form autocompletion does not work in the shadowDOM so
309
+ we slot the contact form in from the lightDOM and pass
310
+ in a reference to it in the <donation-form> tag above
311
+ -->
312
+ <div slot="contact-form">
313
+ <contact-form .donorEmail=${this.donorEmail}></contact-form>
314
+ </div>
315
+
316
+ <div slot="paypal-button">
317
+ <div id="paypal-button"></div>
318
+ </div>
319
+
320
+ <slot name="recaptcha" slot="recaptcha"> </slot>
321
+ </donation-form>
322
+ </div>
323
+
324
+ ${this.getStyles}
325
325
  `;
326
326
  }
327
327
  /** @inheritdoc */
@@ -412,65 +412,65 @@ let DonationFormController = class DonationFormController extends LitElement {
412
412
  * @memberof IADonationFormController
413
413
  */
414
414
  get getStyles() {
415
- return html `
416
- <style>
417
- .donation-form-controller-container {
418
- color: var(--donateFormTextColor, #333);
419
- background-color: var(--donateFormBgColor, transparent);
420
-
421
- --formSectionContentBackgroundColor: var(--donateFormBgColor, transparent);
422
-
423
- --editFormBadgeBgColor: var(--donateFormBadgeBgColor, #333);
424
- --formSectionBadgeBackgroundColor: var(--donateFormBadgeBgColor, #333);
425
-
426
- --editFormBadgeFontColor: var(--donateFormBadgeTextColor, #fff);
427
- --formSectionBadgeFontColor: var(--donateFormBadgeTextColor, #fff);
428
-
429
- --paymentButtonFontColor: var(--donateFormPaymentOptionTextColor);
430
- --paymentButtonColor: var(--donateFormPaymentOptionBgColor);
431
-
432
- --paymentButtonSelectedColor: var(--donateFormSelectedOptionBgColor);
433
- --paymentButtonSelectedFontColor: var(--donateFormSelectedOptionTextColor);
434
- }
435
- .donation-form-controller-container donation-form:focus {
436
- outline: none;
437
- }
438
-
439
- .donation-form-controller-container #paypal-button {
440
- opacity: 0.001;
441
- width: 5rem;
442
- height: 3rem;
443
- overflow: hidden;
444
- }
445
-
446
- .donation-form-controller-container .braintree-row {
447
- display: flex;
448
- margin-top: -1px;
449
- }
450
-
451
- .donation-form-controller-container badged-input {
452
- width: 100%;
453
- }
454
-
455
- .donation-form-controller-container badged-input.cvv {
456
- margin-left: -1px;
457
- }
458
-
459
- .donation-form-controller-container .braintree-input {
460
- width: 100%;
461
- height: 100%;
462
- }
463
-
464
- .donation-form-controller-container #braintree-error-message {
465
- color: red;
466
- font-size: 1.4rem;
467
- margin-bottom: 0.6rem;
468
- }
469
-
470
- .donation-form-controller-container div[slot='braintree-hosted-fields'] {
471
- background-color: white;
472
- }
473
- </style>
415
+ return html `
416
+ <style>
417
+ .donation-form-controller-container {
418
+ color: var(--donateFormTextColor, #333);
419
+ background-color: var(--donateFormBgColor, transparent);
420
+
421
+ --formSectionContentBackgroundColor: var(--donateFormBgColor, transparent);
422
+
423
+ --editFormBadgeBgColor: var(--donateFormBadgeBgColor, #333);
424
+ --formSectionBadgeBackgroundColor: var(--donateFormBadgeBgColor, #333);
425
+
426
+ --editFormBadgeFontColor: var(--donateFormBadgeTextColor, #fff);
427
+ --formSectionBadgeFontColor: var(--donateFormBadgeTextColor, #fff);
428
+
429
+ --paymentButtonFontColor: var(--donateFormPaymentOptionTextColor);
430
+ --paymentButtonColor: var(--donateFormPaymentOptionBgColor);
431
+
432
+ --paymentButtonSelectedColor: var(--donateFormSelectedOptionBgColor);
433
+ --paymentButtonSelectedFontColor: var(--donateFormSelectedOptionTextColor);
434
+ }
435
+ .donation-form-controller-container donation-form:focus {
436
+ outline: none;
437
+ }
438
+
439
+ .donation-form-controller-container #paypal-button {
440
+ opacity: 0.001;
441
+ width: 5rem;
442
+ height: 3rem;
443
+ overflow: hidden;
444
+ }
445
+
446
+ .donation-form-controller-container .braintree-row {
447
+ display: flex;
448
+ margin-top: -1px;
449
+ }
450
+
451
+ .donation-form-controller-container badged-input {
452
+ width: 100%;
453
+ }
454
+
455
+ .donation-form-controller-container badged-input.cvv {
456
+ margin-left: -1px;
457
+ }
458
+
459
+ .donation-form-controller-container .braintree-input {
460
+ width: 100%;
461
+ height: 100%;
462
+ }
463
+
464
+ .donation-form-controller-container #braintree-error-message {
465
+ color: red;
466
+ font-size: 1.4rem;
467
+ margin-bottom: 0.6rem;
468
+ }
469
+
470
+ .donation-form-controller-container div[slot='braintree-hosted-fields'] {
471
+ background-color: white;
472
+ }
473
+ </style>
474
474
  `;
475
475
  }
476
476
  };