@internetarchive/elements 1.1.7-webdev-9378.0 → 1.1.7-webdev-9054.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/dist/src/elements/ia-donation-form/analytics.d.ts +12 -0
  2. package/dist/src/elements/ia-donation-form/analytics.d.ts.map +1 -0
  3. package/dist/src/elements/ia-donation-form/analytics.js +2 -0
  4. package/dist/src/elements/ia-donation-form/analytics.js.map +1 -0
  5. package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.d.ts +79 -0
  6. package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.d.ts.map +1 -0
  7. package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.js +2 -0
  8. package/dist/src/elements/ia-donation-form/braintree/braintree-manager-interface.js.map +1 -0
  9. package/dist/src/elements/ia-donation-form/braintree/braintree-manager.d.ts +73 -0
  10. package/dist/src/elements/ia-donation-form/braintree/braintree-manager.d.ts.map +1 -0
  11. package/dist/src/elements/ia-donation-form/braintree/braintree-manager.js +126 -0
  12. package/dist/src/elements/ia-donation-form/braintree/braintree-manager.js.map +1 -0
  13. package/dist/src/elements/ia-donation-form/braintree/hosting-environment.d.ts +10 -0
  14. package/dist/src/elements/ia-donation-form/braintree/hosting-environment.d.ts.map +1 -0
  15. package/dist/src/elements/ia-donation-form/braintree/hosting-environment.js +9 -0
  16. package/dist/src/elements/ia-donation-form/braintree/hosting-environment.js.map +1 -0
  17. package/dist/src/elements/ia-donation-form/braintree/payment-clients.d.ts +47 -0
  18. package/dist/src/elements/ia-donation-form/braintree/payment-clients.d.ts.map +1 -0
  19. package/dist/src/elements/ia-donation-form/braintree/payment-clients.js +104 -0
  20. package/dist/src/elements/ia-donation-form/braintree/payment-clients.js.map +1 -0
  21. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.d.ts +11 -0
  22. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.d.ts.map +1 -0
  23. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.js +2 -0
  24. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-interface.js.map +1 -0
  25. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts +20 -0
  26. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts.map +1 -0
  27. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.js +2 -0
  28. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource-interface.js.map +1 -0
  29. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.d.ts +21 -0
  30. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.d.ts.map +1 -0
  31. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.js +83 -0
  32. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -0
  33. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.d.ts +11 -0
  34. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.d.ts.map +1 -0
  35. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.js +13 -0
  36. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay-session-manager.js.map +1 -0
  37. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.d.ts +27 -0
  38. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.d.ts.map +1 -0
  39. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.js +67 -0
  40. package/dist/src/elements/ia-donation-form/braintree/payment-providers/apple-pay/apple-pay.js.map +1 -0
  41. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.d.ts +19 -0
  42. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.d.ts.map +1 -0
  43. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.js +2 -0
  44. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card-interface.js.map +1 -0
  45. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.d.ts +42 -0
  46. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.d.ts.map +1 -0
  47. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.js +99 -0
  48. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/credit-card.js.map +1 -0
  49. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.d.ts +14 -0
  50. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.d.ts.map +1 -0
  51. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.js +9 -0
  52. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-configuration.js.map +1 -0
  53. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.d.ts +40 -0
  54. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.d.ts.map +1 -0
  55. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.js +58 -0
  56. package/dist/src/elements/ia-donation-form/braintree/payment-providers/credit-card/hosted-field-container.js.map +1 -0
  57. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.d.ts +8 -0
  58. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.d.ts.map +1 -0
  59. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.js +2 -0
  60. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay-interface.js.map +1 -0
  61. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.d.ts +19 -0
  62. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.d.ts.map +1 -0
  63. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.js +45 -0
  64. package/dist/src/elements/ia-donation-form/braintree/payment-providers/google-pay/google-pay.js.map +1 -0
  65. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.d.ts +57 -0
  66. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.d.ts.map +1 -0
  67. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.js +44 -0
  68. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-button-datasource.js.map +1 -0
  69. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.d.ts +14 -0
  70. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.d.ts.map +1 -0
  71. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.js +2 -0
  72. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal-interface.js.map +1 -0
  73. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.d.ts +27 -0
  74. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.d.ts.map +1 -0
  75. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.js +44 -0
  76. package/dist/src/elements/ia-donation-form/braintree/payment-providers/paypal/paypal.js.map +1 -0
  77. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.d.ts +8 -0
  78. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.d.ts.map +1 -0
  79. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.js +2 -0
  80. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-interface.js.map +1 -0
  81. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.d.ts +44 -0
  82. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.d.ts.map +1 -0
  83. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.js +65 -0
  84. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo-restoration-state-handler.js.map +1 -0
  85. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.d.ts +25 -0
  86. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.d.ts.map +1 -0
  87. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.js +42 -0
  88. package/dist/src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.js.map +1 -0
  89. package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.d.ts +18 -0
  90. package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.d.ts.map +1 -0
  91. package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.js +2 -0
  92. package/dist/src/elements/ia-donation-form/braintree/payment-providers-interface.js.map +1 -0
  93. package/dist/src/elements/ia-donation-form/braintree/payment-providers.d.ts +42 -0
  94. package/dist/src/elements/ia-donation-form/braintree/payment-providers.d.ts.map +1 -0
  95. package/dist/src/elements/ia-donation-form/braintree/payment-providers.js +99 -0
  96. package/dist/src/elements/ia-donation-form/braintree/payment-providers.js.map +1 -0
  97. package/dist/src/elements/ia-donation-form/donation-form-error.d.ts +5 -0
  98. package/dist/src/elements/ia-donation-form/donation-form-error.d.ts.map +1 -0
  99. package/dist/src/elements/ia-donation-form/donation-form-error.js +8 -0
  100. package/dist/src/elements/ia-donation-form/donation-form-error.js.map +1 -0
  101. package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.d.ts +118 -0
  102. package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.d.ts.map +1 -0
  103. package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.js +194 -0
  104. package/dist/src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.js.map +1 -0
  105. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.d.ts +24 -0
  106. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.d.ts.map +1 -0
  107. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.js +70 -0
  108. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/apple-pay-flow-handler.js.map +1 -0
  109. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.d.ts +44 -0
  110. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.d.ts.map +1 -0
  111. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.js +116 -0
  112. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/credit-card-flow-handler.js.map +1 -0
  113. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.d.ts +24 -0
  114. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.d.ts.map +1 -0
  115. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.js +74 -0
  116. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/google-pay-flow-handler.js.map +1 -0
  117. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.d.ts +47 -0
  118. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.d.ts.map +1 -0
  119. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.js +204 -0
  120. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/paypal-flow-handler.js.map +1 -0
  121. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.d.ts +30 -0
  122. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.d.ts.map +1 -0
  123. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.js +77 -0
  124. package/dist/src/elements/ia-donation-form/flow-handlers/handlers/venmo-flow-handler.js.map +1 -0
  125. package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.d.ts +80 -0
  126. package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.d.ts.map +1 -0
  127. package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.js +72 -0
  128. package/dist/src/elements/ia-donation-form/flow-handlers/payment-flow-handlers.js.map +1 -0
  129. package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.d.ts +2 -0
  130. package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.d.ts.map +1 -0
  131. package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.js +2 -0
  132. package/dist/src/elements/ia-donation-form/form-elements/contact-form/autocomplete-field-options.js.map +1 -0
  133. package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.d.ts +3 -0
  134. package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.d.ts.map +1 -0
  135. package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.js +254 -0
  136. package/dist/src/elements/ia-donation-form/form-elements/contact-form/countries.js.map +1 -0
  137. package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.d.ts +68 -0
  138. package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.d.ts.map +1 -0
  139. package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.js +483 -0
  140. package/dist/src/elements/ia-donation-form/form-elements/contact-form/ia-donation-contact-form.js.map +1 -0
  141. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.d.ts +26 -0
  142. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.d.ts.map +1 -0
  143. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.js +163 -0
  144. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-badged-input.js.map +1 -0
  145. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.d.ts +39 -0
  146. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.d.ts.map +1 -0
  147. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.js +212 -0
  148. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-credit-card-fields.js.map +1 -0
  149. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.d.ts +118 -0
  150. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.d.ts.map +1 -0
  151. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.js +774 -0
  152. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-edit-donation.js.map +1 -0
  153. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.d.ts +31 -0
  154. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.d.ts.map +1 -0
  155. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.js +93 -0
  156. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-header.js.map +1 -0
  157. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.d.ts +33 -0
  158. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.d.ts.map +1 -0
  159. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.js +380 -0
  160. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-payment-selector.js.map +1 -0
  161. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.d.ts +11 -0
  162. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.d.ts.map +1 -0
  163. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.js +59 -0
  164. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-summary.js.map +1 -0
  165. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.d.ts +10 -0
  166. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.d.ts.map +1 -0
  167. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.js +75 -0
  168. package/dist/src/elements/ia-donation-form/form-elements/ia-donation-total-amount.js.map +1 -0
  169. package/dist/src/elements/ia-donation-form/ia-donation-form-controller.d.ts +111 -0
  170. package/dist/src/elements/ia-donation-form/ia-donation-form-controller.d.ts.map +1 -0
  171. package/dist/src/elements/ia-donation-form/ia-donation-form-controller.js +522 -0
  172. package/dist/src/elements/ia-donation-form/ia-donation-form-controller.js.map +1 -0
  173. package/dist/src/elements/ia-donation-form/ia-donation-form.d.ts +95 -0
  174. package/dist/src/elements/ia-donation-form/ia-donation-form.d.ts.map +1 -0
  175. package/dist/src/elements/ia-donation-form/ia-donation-form.js +522 -0
  176. package/dist/src/elements/ia-donation-form/ia-donation-form.js.map +1 -0
  177. package/dist/src/elements/ia-donation-form/icons/apple-pay.svg +22 -0
  178. package/dist/src/elements/ia-donation-form/icons/calendar.svg +15 -0
  179. package/dist/src/elements/ia-donation-form/icons/credit-card.svg +15 -0
  180. package/dist/src/elements/ia-donation-form/icons/google-pay.svg +38 -0
  181. package/dist/src/elements/ia-donation-form/icons/lock.svg +6 -0
  182. package/dist/src/elements/ia-donation-form/icons/paypal.svg +39 -0
  183. package/dist/src/elements/ia-donation-form/icons/venmo.svg +9 -0
  184. package/dist/src/elements/ia-donation-form/icons.d.ts +9 -0
  185. package/dist/src/elements/ia-donation-form/icons.d.ts.map +1 -0
  186. package/dist/src/elements/ia-donation-form/icons.js +27 -0
  187. package/dist/src/elements/ia-donation-form/icons.js.map +1 -0
  188. package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.d.ts +27 -0
  189. package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.d.ts.map +1 -0
  190. package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.js +195 -0
  191. package/dist/src/elements/ia-donation-form/modals/ia-donation-confirm-modal.js.map +1 -0
  192. package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.d.ts +7 -0
  193. package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.d.ts.map +1 -0
  194. package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.js +63 -0
  195. package/dist/src/elements/ia-donation-form/modals/ia-donation-error-modal-content.js.map +1 -0
  196. package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.d.ts +28 -0
  197. package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.d.ts.map +1 -0
  198. package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.js +313 -0
  199. package/dist/src/elements/ia-donation-form/modals/ia-donation-upsell-modal-content.js.map +1 -0
  200. package/dist/src/elements/ia-donation-form/recaptcha-manager.d.ts +36 -0
  201. package/dist/src/elements/ia-donation-form/recaptcha-manager.d.ts.map +1 -0
  202. package/dist/src/elements/ia-donation-form/recaptcha-manager.js +76 -0
  203. package/dist/src/elements/ia-donation-form/recaptcha-manager.js.map +1 -0
  204. package/dist/src/elements/ia-image-viewer/image-viewer-gestures.d.ts.map +1 -1
  205. package/dist/src/elements/ia-image-viewer/image-viewer-gestures.js +2 -4
  206. package/dist/src/elements/ia-image-viewer/image-viewer-gestures.js.map +1 -1
  207. package/package.json +12 -1
@@ -0,0 +1,42 @@
1
+ import { PromisedSingleton } from '@internetarchive/promised-singleton';
2
+ export class VenmoHandler {
3
+ constructor(options) {
4
+ this.braintreeManager = options.braintreeManager;
5
+ this.venmoClient = options.venmoClient;
6
+ this.venmoProfileId = options.venmoProfileId;
7
+ this.instance =
8
+ options.instancePromisedSingleton ??
9
+ new PromisedSingleton({
10
+ generator: async () => {
11
+ const braintreeInstance = await this.braintreeManager.instance.get();
12
+ return this.venmoClient.create({
13
+ client: braintreeInstance,
14
+ profileId: this.venmoProfileId,
15
+ });
16
+ },
17
+ });
18
+ }
19
+ async isBrowserSupported() {
20
+ if (this.isMobileFirefox()) {
21
+ return false;
22
+ }
23
+ const instance = await this.instance.get();
24
+ return instance?.isBrowserSupported() ?? false;
25
+ }
26
+ async startPayment() {
27
+ const instance = await this.instance.get();
28
+ return instance.tokenize();
29
+ }
30
+ /**
31
+ * Venmo doesn't work in mobile Firefox, but Braintree's browser detection
32
+ * says it does. On iOS it opens the Venmo app and returns to Safari, and on
33
+ * Android it lands on the "Download Venmo" page.
34
+ */
35
+ isMobileFirefox() {
36
+ const isFirefoxIos = navigator.userAgent.indexOf('FxiOS') !== -1;
37
+ const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
38
+ const isMobile = navigator.userAgent.indexOf('Mobile') !== -1;
39
+ return (isFirefox || isFirefoxIos) && isMobile;
40
+ }
41
+ }
42
+ //# sourceMappingURL=venmo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venmo.js","sourceRoot":"","sources":["../../../../../../../src/elements/ia-donation-form/braintree/payment-providers/venmo/venmo.ts"],"names":[],"mappings":"AACA,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,OAAO,CAAC,yBAAyB;gBACjC,IAAI,iBAAiB,CAAkB;oBACrC,SAAS,EAAE,KAAK,IAAI,EAAE;wBACpB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;wBACrE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;4BAC7B,MAAM,EAAE,iBAAiB;4BACzB,SAAS,EAAE,IAAI,CAAC,cAAc;yBAC/B,CAAC,CAAC;oBACL,CAAC;iBACF,CAAC,CAAC;IACP,CAAC;IAQD,KAAK,CAAC,kBAAkB;QACtB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3C,OAAO,QAAQ,EAAE,kBAAkB,EAAE,IAAI,KAAK,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3C,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED;;;;OAIG;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 type * as braintree from 'braintree-web';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\n\nimport type { BraintreeManagerInterface } from '../../braintree-manager-interface';\nimport type { VenmoHandlerInterface } from './venmo-interface';\n\nexport class VenmoHandler implements VenmoHandlerInterface {\n instance: PromisedSingleton<braintree.Venmo>;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n venmoClient: typeof 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: async () => {\n const braintreeInstance = await this.braintreeManager.instance.get();\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: typeof 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 doesn't work in mobile Firefox, but Braintree's browser detection\n * says it does. On iOS it opens the Venmo app and returns to Safari, and on\n * Android it lands on the \"Download Venmo\" page.\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"]}
@@ -0,0 +1,18 @@
1
+ import type { PromisedSingleton } from '@internetarchive/promised-singleton';
2
+ import type { Unsubscribe } from 'nanoevents';
3
+ import type { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface.js';
4
+ import type { CreditCardHandlerEvents, CreditCardHandlerInterface } from './payment-providers/credit-card/credit-card-interface.js';
5
+ import type { GooglePayHandlerInterface } from './payment-providers/google-pay/google-pay-interface.js';
6
+ import type { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface.js';
7
+ import type { VenmoHandlerInterface } from './payment-providers/venmo/venmo-interface.js';
8
+ /** The child handler events that bubble up through the providers. */
9
+ export type PaymentProvidersEvents = CreditCardHandlerEvents;
10
+ export interface PaymentProvidersInterface {
11
+ on<E extends keyof PaymentProvidersEvents>(event: E, callback: PaymentProvidersEvents[E]): Unsubscribe;
12
+ creditCardHandler: PromisedSingleton<CreditCardHandlerInterface>;
13
+ applePayHandler: PromisedSingleton<ApplePayHandlerInterface>;
14
+ venmoHandler: PromisedSingleton<VenmoHandlerInterface | undefined>;
15
+ paypalHandler: PromisedSingleton<PayPalHandlerInterface>;
16
+ googlePayHandler: PromisedSingleton<GooglePayHandlerInterface>;
17
+ }
18
+ //# sourceMappingURL=payment-providers-interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-providers-interface.d.ts","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/braintree/payment-providers-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAClG,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,uDAAuD,CAAC;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AACrG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAEvF,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAE7D,MAAM,WAAW,yBAAyB;IACxC,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACvC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAClC,WAAW,CAAC;IACf,iBAAiB,EAAE,iBAAiB,CAAC,0BAA0B,CAAC,CAAC;IACjE,eAAe,EAAE,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;IAC7D,YAAY,EAAE,iBAAiB,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IACnE,aAAa,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IACzD,gBAAgB,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;CAChE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=payment-providers-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-providers-interface.js","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/braintree/payment-providers-interface.ts"],"names":[],"mappings":"","sourcesContent":["import type { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport type { Unsubscribe } from 'nanoevents';\n\nimport type { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface';\nimport type {\n CreditCardHandlerEvents,\n CreditCardHandlerInterface,\n} from './payment-providers/credit-card/credit-card-interface';\nimport type { GooglePayHandlerInterface } from './payment-providers/google-pay/google-pay-interface';\nimport type { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface';\nimport type { VenmoHandlerInterface } from './payment-providers/venmo/venmo-interface';\n\n/** The child handler events that bubble up through the providers. */\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"]}
@@ -0,0 +1,42 @@
1
+ import { PromisedSingleton } from '@internetarchive/promised-singleton';
2
+ import { type Unsubscribe } from 'nanoevents';
3
+ import type { BraintreeManagerInterface } from './braintree-manager-interface.js';
4
+ import { HostingEnvironment } from './hosting-environment.js';
5
+ import type { PaymentClientsInterface } from './payment-clients.js';
6
+ import type { PaymentProvidersEvents, PaymentProvidersInterface } from './payment-providers-interface.js';
7
+ import type { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface.js';
8
+ import type { CreditCardHandlerInterface } from './payment-providers/credit-card/credit-card-interface.js';
9
+ import type { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration.js';
10
+ import type { GooglePayHandlerInterface } from './payment-providers/google-pay/google-pay-interface.js';
11
+ import type { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface.js';
12
+ import type { VenmoHandlerInterface } from './payment-providers/venmo/venmo-interface.js';
13
+ /**
14
+ * The IA-specific handlers for each payment provider, each created on first
15
+ * request. They're data-focused rather than UI-focused, though there's some
16
+ * overlap with the flow handlers.
17
+ */
18
+ export declare class PaymentProviders implements PaymentProvidersInterface {
19
+ on<E extends keyof PaymentProvidersEvents>(event: E, callback: PaymentProvidersEvents[E]): Unsubscribe;
20
+ creditCardHandler: PromisedSingleton<CreditCardHandlerInterface>;
21
+ applePayHandler: PromisedSingleton<ApplePayHandlerInterface>;
22
+ /** Undefined when no Venmo profile id was configured, so Venmo isn't offered. */
23
+ venmoHandler: PromisedSingleton<VenmoHandlerInterface | undefined>;
24
+ paypalHandler: PromisedSingleton<PayPalHandlerInterface>;
25
+ googlePayHandler: PromisedSingleton<GooglePayHandlerInterface>;
26
+ private braintreeManager;
27
+ private venmoProfileId?;
28
+ private googlePayMerchantId?;
29
+ private hostedFieldConfig;
30
+ private hostingEnvironment;
31
+ private paymentClients;
32
+ private emitter;
33
+ constructor(options: {
34
+ braintreeManager: BraintreeManagerInterface;
35
+ paymentClients: PaymentClientsInterface;
36
+ venmoProfileId?: string;
37
+ googlePayMerchantId?: string;
38
+ hostingEnvironment: HostingEnvironment;
39
+ hostedFieldConfig: HostedFieldConfiguration;
40
+ });
41
+ }
42
+ //# sourceMappingURL=payment-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-providers.d.ts","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/braintree/payment-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAGlG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uDAAuD,CAAC;AACxG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AAE3G,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AAErG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAE1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAEvF;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,yBAAyB;IAChE,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACvC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAClC,WAAW;IAId,iBAAiB,gDAmBd;IAEH,eAAe,8CASZ;IAEH,iFAAiF;IACjF,YAAY,uDAYT;IAEH,aAAa,4CAaV;IAEH,gBAAgB,+CAab;IAEH,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,cAAc,CAAC,CAAS;IAEhC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IAErC,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,kBAAkB,CACO;IAEjC,OAAO,CAAC,cAAc,CAA0B;IAEhD,OAAO,CAAC,OAAO,CAA8C;gBAEjD,OAAO,EAAE;QACnB,gBAAgB,EAAE,yBAAyB,CAAC;QAC5C,cAAc,EAAE,uBAAuB,CAAC;QACxC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,iBAAiB,EAAE,wBAAwB,CAAC;KAC7C;CAQF"}
@@ -0,0 +1,99 @@
1
+ import { PromisedSingleton } from '@internetarchive/promised-singleton';
2
+ import { createNanoEvents } from 'nanoevents';
3
+ import { HostingEnvironment } from './hosting-environment.js';
4
+ import { ApplePayHandler } from './payment-providers/apple-pay/apple-pay.js';
5
+ import { ApplePaySessionManager } from './payment-providers/apple-pay/apple-pay-session-manager.js';
6
+ import { CreditCardHandler } from './payment-providers/credit-card/credit-card.js';
7
+ import { GooglePayHandler } from './payment-providers/google-pay/google-pay.js';
8
+ import { PayPalHandler } from './payment-providers/paypal/paypal.js';
9
+ import { VenmoHandler } from './payment-providers/venmo/venmo.js';
10
+ /**
11
+ * The IA-specific handlers for each payment provider, each created on first
12
+ * request. They're data-focused rather than UI-focused, though there's some
13
+ * overlap with the flow handlers.
14
+ */
15
+ export class PaymentProviders {
16
+ on(event, callback) {
17
+ return this.emitter.on(event, callback);
18
+ }
19
+ constructor(options) {
20
+ this.creditCardHandler = new PromisedSingleton({
21
+ generator: async () => {
22
+ const client = await this.paymentClients.hostedFields.get();
23
+ const handler = new CreditCardHandler({
24
+ braintreeManager: this.braintreeManager,
25
+ hostedFieldClient: client,
26
+ hostedFieldConfig: this.hostedFieldConfig,
27
+ });
28
+ handler.on('hostedFieldsRetry', (retryNumber) => {
29
+ this.emitter.emit('hostedFieldsRetry', retryNumber);
30
+ });
31
+ handler.on('hostedFieldsFailed', (error) => {
32
+ this.emitter.emit('hostedFieldsFailed', error);
33
+ });
34
+ return handler;
35
+ },
36
+ });
37
+ this.applePayHandler = new PromisedSingleton({
38
+ generator: async () => {
39
+ const client = await this.paymentClients.applePay.get();
40
+ return new ApplePayHandler({
41
+ braintreeManager: this.braintreeManager,
42
+ applePayClient: client,
43
+ applePaySessionManager: new ApplePaySessionManager(),
44
+ });
45
+ },
46
+ });
47
+ /** Undefined when no Venmo profile id was configured, so Venmo isn't offered. */
48
+ this.venmoHandler = new PromisedSingleton({
49
+ generator: async () => {
50
+ const client = await this.paymentClients.venmo.get();
51
+ if (!this.venmoProfileId) {
52
+ return undefined;
53
+ }
54
+ return new VenmoHandler({
55
+ braintreeManager: this.braintreeManager,
56
+ venmoClient: client,
57
+ venmoProfileId: this.venmoProfileId,
58
+ });
59
+ },
60
+ });
61
+ this.paypalHandler = new PromisedSingleton({
62
+ generator: async () => {
63
+ const [client, paypalLibrary] = await Promise.all([
64
+ this.paymentClients.payPal.get(),
65
+ this.paymentClients.paypalLibrary.get(),
66
+ ]);
67
+ return new PayPalHandler({
68
+ braintreeManager: this.braintreeManager,
69
+ paypalClient: client,
70
+ paypalButton: paypalLibrary.Button,
71
+ hostingEnvironment: this.hostingEnvironment,
72
+ });
73
+ },
74
+ });
75
+ this.googlePayHandler = new PromisedSingleton({
76
+ generator: async () => {
77
+ const [braintreeClient, googlePaymentsClient] = await Promise.all([
78
+ this.paymentClients.googlePayBraintreeClient.get(),
79
+ this.paymentClients.googlePaymentsClient.get(),
80
+ ]);
81
+ return new GooglePayHandler({
82
+ braintreeManager: this.braintreeManager,
83
+ googlePayMerchantId: this.googlePayMerchantId,
84
+ googlePayBraintreeClient: braintreeClient,
85
+ googlePaymentsClient,
86
+ });
87
+ },
88
+ });
89
+ this.hostingEnvironment = HostingEnvironment.Development;
90
+ this.emitter = createNanoEvents();
91
+ this.braintreeManager = options.braintreeManager;
92
+ this.venmoProfileId = options.venmoProfileId;
93
+ this.googlePayMerchantId = options.googlePayMerchantId;
94
+ this.paymentClients = options.paymentClients;
95
+ this.hostingEnvironment = options.hostingEnvironment;
96
+ this.hostedFieldConfig = options.hostedFieldConfig;
97
+ }
98
+ }
99
+ //# sourceMappingURL=payment-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-providers.js","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/braintree/payment-providers.ts"],"names":[],"mappings":"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","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { createNanoEvents, type Unsubscribe } from 'nanoevents';\n\nimport type { BraintreeManagerInterface } from './braintree-manager-interface';\nimport { HostingEnvironment } from './hosting-environment';\nimport type { PaymentClientsInterface } from './payment-clients';\nimport type {\n PaymentProvidersEvents,\n PaymentProvidersInterface,\n} from './payment-providers-interface';\nimport { ApplePayHandler } from './payment-providers/apple-pay/apple-pay';\nimport type { ApplePayHandlerInterface } from './payment-providers/apple-pay/apple-pay-interface';\nimport { ApplePaySessionManager } from './payment-providers/apple-pay/apple-pay-session-manager';\nimport { CreditCardHandler } from './payment-providers/credit-card/credit-card';\nimport type { CreditCardHandlerInterface } from './payment-providers/credit-card/credit-card-interface';\nimport type { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration';\nimport { GooglePayHandler } from './payment-providers/google-pay/google-pay';\nimport type { GooglePayHandlerInterface } from './payment-providers/google-pay/google-pay-interface';\nimport { PayPalHandler } from './payment-providers/paypal/paypal';\nimport type { PayPalHandlerInterface } from './payment-providers/paypal/paypal-interface';\nimport { VenmoHandler } from './payment-providers/venmo/venmo';\nimport type { VenmoHandlerInterface } from './payment-providers/venmo/venmo-interface';\n\n/**\n * The IA-specific handlers for each payment provider, each created on first\n * request. They're data-focused rather than UI-focused, though there's some\n * overlap with the flow handlers.\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 () => {\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 () => {\n const client = await this.paymentClients.applePay.get();\n return new ApplePayHandler({\n braintreeManager: this.braintreeManager,\n applePayClient: client,\n applePaySessionManager: new ApplePaySessionManager(),\n });\n },\n });\n\n /** Undefined when no Venmo profile id was configured, so Venmo isn't offered. */\n venmoHandler = new PromisedSingleton<VenmoHandlerInterface | undefined>({\n generator: async () => {\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 () => {\n const [client, paypalLibrary] = await Promise.all([\n this.paymentClients.payPal.get(),\n this.paymentClients.paypalLibrary.get(),\n ]);\n return new PayPalHandler({\n braintreeManager: this.braintreeManager,\n paypalClient: client,\n paypalButton: paypalLibrary.Button,\n hostingEnvironment: this.hostingEnvironment,\n });\n },\n });\n\n googlePayHandler = new PromisedSingleton<GooglePayHandlerInterface>({\n generator: async () => {\n const [braintreeClient, googlePaymentsClient] = await Promise.all([\n this.paymentClients.googlePayBraintreeClient.get(),\n this.paymentClients.googlePaymentsClient.get(),\n ]);\n return new GooglePayHandler({\n braintreeManager: this.braintreeManager,\n googlePayMerchantId: this.googlePayMerchantId,\n googlePayBraintreeClient: braintreeClient,\n googlePaymentsClient,\n });\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 =\n 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"]}
@@ -0,0 +1,5 @@
1
+ /** An error raised by the donation form itself, as opposed to one from a payment library. */
2
+ export declare class DonationFormError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ //# sourceMappingURL=donation-form-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"donation-form-error.d.ts","sourceRoot":"","sources":["../../../../src/elements/ia-donation-form/donation-form-error.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B"}
@@ -0,0 +1,8 @@
1
+ /** An error raised by the donation form itself, as opposed to one from a payment library. */
2
+ export class DonationFormError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = 'DonationFormError';
6
+ }
7
+ }
8
+ //# sourceMappingURL=donation-form-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"donation-form-error.js","sourceRoot":"","sources":["../../../../src/elements/ia-donation-form/donation-form-error.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF","sourcesContent":["/** An error raised by the donation form itself, as opposed to one from a payment library. */\nexport class DonationFormError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'DonationFormError';\n }\n}\n"]}
@@ -0,0 +1,118 @@
1
+ import { type ModalManagerInterface } from '@internetarchive/modal-manager';
2
+ import type { DonationEventLoggerInterface } from '../analytics.js';
3
+ import type { BraintreeManagerInterface } from '../braintree/braintree-manager-interface.js';
4
+ import type { DonationPaymentInfo } from '../models/donation-payment-info.js';
5
+ import { type DonationResponse, type SuccessResponse } from '../models/donation-response.js';
6
+ import { DonationType } from '../models/donation-type.js';
7
+ import type { BillingInfo, CustomerInfo } from '../models/donor-contact-info.js';
8
+ import type { PaymentProvider } from '../models/payment-provider.js';
9
+ import { UpsellModalCTAMode } from '../modals/ia-donation-upsell-modal-content.js';
10
+ import '../modals/ia-donation-confirm-modal.js';
11
+ import '../modals/ia-donation-error-modal-content.js';
12
+ import '../modals/ia-donation-upsell-modal-content.js';
13
+ /**
14
+ * The high-level modal flow. Each payment provider gets the donor to a nonce
15
+ * differently (PayPal button, Apple Pay sheet, the Venmo app), but from there
16
+ * the modals are the same: processing, upsell, thank you, error. The flow
17
+ * handlers call this to take the donor through them.
18
+ */
19
+ export interface DonationFlowModalManagerInterface {
20
+ showConfirmationStepModal(options: {
21
+ amount: number;
22
+ donationType: DonationType;
23
+ currencyType: string;
24
+ confirmDonationCB: () => void;
25
+ cancelDonationCB: () => void;
26
+ }): Promise<void>;
27
+ closeModal(): void;
28
+ showProcessingModal(): void;
29
+ showThankYouModal(options: {
30
+ successResponse: SuccessResponse;
31
+ upsellSuccessResponse?: SuccessResponse;
32
+ }): void;
33
+ showErrorModal(options: {
34
+ message: string;
35
+ userClosedModalCallback?: () => void;
36
+ }): void;
37
+ showUpsellModal(options: {
38
+ oneTimeAmount: number;
39
+ ctaMode?: UpsellModalCTAMode;
40
+ yesSelected?: (amount: number) => void;
41
+ noSelected?: () => void;
42
+ amountChanged?: (amount: number) => void;
43
+ userClosedModalCallback?: () => void;
44
+ }): Promise<void>;
45
+ /**
46
+ * The main flow, once the provider has handed back a nonce: show
47
+ * processing, submit, then the upsell or thank you or error.
48
+ */
49
+ startDonationSubmissionFlow(options: {
50
+ nonce: string;
51
+ paymentProvider: PaymentProvider;
52
+ donationInfo: DonationPaymentInfo;
53
+ billingInfo: BillingInfo;
54
+ customerInfo: CustomerInfo;
55
+ upsellOnetimeTransactionId?: string;
56
+ customerId?: string;
57
+ recaptchaToken?: string;
58
+ bin?: string;
59
+ binName?: string;
60
+ }): Promise<DonationResponse | undefined>;
61
+ /**
62
+ * What happens after a successful donation depends on its type: a one-time
63
+ * donation gets the monthly upsell, a monthly one goes straight to thanks.
64
+ */
65
+ handleSuccessfulDonationResponse(donationInfo: DonationPaymentInfo, response: SuccessResponse): void;
66
+ }
67
+ export declare class DonationFlowModalManager implements DonationFlowModalManagerInterface {
68
+ private braintreeManager;
69
+ private modalManager;
70
+ private analytics;
71
+ constructor(options: {
72
+ braintreeManager: BraintreeManagerInterface;
73
+ modalManager: ModalManagerInterface;
74
+ analytics: DonationEventLoggerInterface;
75
+ });
76
+ closeModal(): void;
77
+ showProcessingModal(): void;
78
+ showThankYouModal(options: {
79
+ successResponse: SuccessResponse;
80
+ upsellSuccessResponse?: SuccessResponse;
81
+ }): void;
82
+ showErrorModal(options: {
83
+ message: string;
84
+ userClosedModalCallback?: () => void;
85
+ }): void;
86
+ showConfirmationStepModal(options: {
87
+ amount: number;
88
+ donationType: DonationType;
89
+ currencyType: string;
90
+ confirmDonationCB: () => void;
91
+ cancelDonationCB: () => void;
92
+ }): Promise<void>;
93
+ showUpsellModal(options: {
94
+ oneTimeAmount: number;
95
+ yesSelected?: (amount: number) => void;
96
+ noSelected?: () => void;
97
+ amountChanged?: (amount: number) => void;
98
+ userClosedModalCallback?: () => void;
99
+ ctaMode?: UpsellModalCTAMode;
100
+ }): Promise<void>;
101
+ startDonationSubmissionFlow(options: {
102
+ nonce: string;
103
+ paymentProvider: PaymentProvider;
104
+ donationInfo: DonationPaymentInfo;
105
+ billingInfo: BillingInfo;
106
+ customerInfo: CustomerInfo;
107
+ upsellOnetimeTransactionId?: string;
108
+ customerId?: string;
109
+ recaptchaToken?: string;
110
+ bin?: string;
111
+ binName?: string;
112
+ }): Promise<DonationResponse | undefined>;
113
+ private upsellModalYesSelected;
114
+ /** The monthly amount the upsell suggests, stepped up with the one-time gift. */
115
+ static getDefaultUpsellAmount(oneTimeAmount: number): number;
116
+ handleSuccessfulDonationResponse(donationInfo: DonationPaymentInfo, response: SuccessResponse): void;
117
+ }
118
+ //# sourceMappingURL=donation-flow-modal-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"donation-flow-modal-manager.d.ts","sourceRoot":"","sources":["../../../../../src/elements/ia-donation-form/flow-handlers/donation-flow-modal-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,194 @@
1
+ import { html } from 'lit';
2
+ import { msg } from '@lit/localize';
3
+ import { ModalConfig, } from '@internetarchive/modal-manager';
4
+ import { DonationType } from '../models/donation-type.js';
5
+ import { UpsellModalCTAMode } from '../modals/ia-donation-upsell-modal-content.js';
6
+ import '../modals/ia-donation-confirm-modal.js';
7
+ import '../modals/ia-donation-error-modal-content.js';
8
+ import '../modals/ia-donation-upsell-modal-content.js';
9
+ const ModalHeaderColor = {
10
+ Blue: '#497fbf',
11
+ Green: '#55A183',
12
+ Red: '#691916',
13
+ };
14
+ export class DonationFlowModalManager {
15
+ constructor(options) {
16
+ this.modalManager = options.modalManager;
17
+ this.braintreeManager = options.braintreeManager;
18
+ this.analytics = options.analytics;
19
+ }
20
+ closeModal() {
21
+ this.modalManager.closeModal();
22
+ }
23
+ showProcessingModal() {
24
+ const modalConfig = new ModalConfig({
25
+ headerColor: ModalHeaderColor.Blue,
26
+ showProcessingIndicator: true,
27
+ closeOnBackdropClick: false,
28
+ showCloseButton: false,
29
+ processingImageMode: 'processing',
30
+ title: html `${msg('Processing...')}`,
31
+ });
32
+ this.modalManager.showModal({ config: modalConfig });
33
+ }
34
+ showThankYouModal(options) {
35
+ const modalConfig = new ModalConfig({
36
+ showProcessingIndicator: true,
37
+ processingImageMode: 'complete',
38
+ headerColor: ModalHeaderColor.Green,
39
+ title: html `${msg('Thank You!')}`,
40
+ });
41
+ this.modalManager.showModal({ config: modalConfig });
42
+ const selectedPayment = options.successResponse.paymentProvider.replace(/\s+/g, '');
43
+ let action = `Donated-${selectedPayment}`;
44
+ if (options.upsellSuccessResponse) {
45
+ action += `-upsell`;
46
+ }
47
+ const label = options.successResponse.donationType;
48
+ this.analytics.logDonationFlowEvent(action, label);
49
+ this.braintreeManager.donationSuccessful(options);
50
+ }
51
+ showErrorModal(options) {
52
+ const modalConfig = new ModalConfig({
53
+ headerColor: ModalHeaderColor.Red,
54
+ title: html `${msg('Processing error')}`,
55
+ headline: html `${msg("There's been a problem completing your donation.")}`,
56
+ message: html `${options.message}`,
57
+ });
58
+ this.modalManager.showModal({
59
+ config: modalConfig,
60
+ userClosedModalCallback: options.userClosedModalCallback,
61
+ customModalContent: html `
62
+ <ia-donation-error-modal-content></ia-donation-error-modal-content>
63
+ `,
64
+ });
65
+ }
66
+ showConfirmationStepModal(options) {
67
+ const modalTitle = options.donationType === DonationType.Upsell
68
+ ? msg('Confirm monthly donation')
69
+ : msg('Complete donation');
70
+ const modalConfig = new ModalConfig({
71
+ closeOnBackdropClick: false,
72
+ headerColor: ModalHeaderColor.Green,
73
+ title: html `${modalTitle}`,
74
+ message: html `
75
+ <ia-donation-confirm-modal
76
+ .amount=${options.amount}
77
+ .currencyType=${options.currencyType}
78
+ .donationType=${options.donationType}
79
+ .confirmDonation=${options.confirmDonationCB}
80
+ .cancelDonation=${options.cancelDonationCB}
81
+ ></ia-donation-confirm-modal>
82
+ `,
83
+ });
84
+ return this.modalManager.showModal({
85
+ config: modalConfig,
86
+ userClosedModalCallback: options.cancelDonationCB,
87
+ });
88
+ }
89
+ showUpsellModal(options) {
90
+ const modalConfig = new ModalConfig({
91
+ headerColor: ModalHeaderColor.Green,
92
+ title: html `${msg('Donation received')}`,
93
+ processingImageMode: 'complete',
94
+ showProcessingIndicator: true,
95
+ });
96
+ const upsellAmount = DonationFlowModalManager.getDefaultUpsellAmount(options.oneTimeAmount);
97
+ options.amountChanged?.(upsellAmount);
98
+ const modalContent = html `
99
+ <ia-donation-upsell-modal-content
100
+ .amount=${upsellAmount}
101
+ .yesButtonMode=${options.ctaMode ?? UpsellModalCTAMode.YesButton}
102
+ @yesSelected=${(e) => options.yesSelected?.(e.detail.amount)}
103
+ @noThanksSelected=${options.noSelected}
104
+ @amountChanged=${(e) => options.amountChanged?.(e.detail.amount)}
105
+ >
106
+ <slot name="paypal-upsell-button"></slot>
107
+ </ia-donation-upsell-modal-content>
108
+ `;
109
+ return this.modalManager.showModal({
110
+ config: modalConfig,
111
+ customModalContent: modalContent,
112
+ userClosedModalCallback: options.userClosedModalCallback,
113
+ });
114
+ }
115
+ async startDonationSubmissionFlow(options) {
116
+ this.showProcessingModal();
117
+ try {
118
+ const response = await this.braintreeManager.submitDonation(options);
119
+ if (response.success) {
120
+ this.handleSuccessfulDonationResponse(options.donationInfo, response.value);
121
+ }
122
+ else {
123
+ const error = response.value;
124
+ this.showErrorModal({ message: error.message });
125
+ }
126
+ return response;
127
+ }
128
+ catch (error) {
129
+ this.showErrorModal({ message: `${error}` });
130
+ console.error('error getting a response', error);
131
+ return undefined;
132
+ }
133
+ }
134
+ async upsellModalYesSelected(oneTimeDonationResponse, amount) {
135
+ this.showProcessingModal();
136
+ try {
137
+ const response = await this.braintreeManager.submitUpsellDonation({
138
+ oneTimeDonationResponse,
139
+ amount,
140
+ });
141
+ if (response.success) {
142
+ this.showThankYouModal({
143
+ successResponse: oneTimeDonationResponse,
144
+ upsellSuccessResponse: response.value,
145
+ });
146
+ }
147
+ else {
148
+ const error = response.value;
149
+ this.showErrorModal({ message: error.message });
150
+ }
151
+ return response;
152
+ }
153
+ catch (error) {
154
+ this.showErrorModal({ message: `${error}` });
155
+ console.error('error getting a response', error);
156
+ return undefined;
157
+ }
158
+ }
159
+ /** The monthly amount the upsell suggests, stepped up with the one-time gift. */
160
+ static getDefaultUpsellAmount(oneTimeAmount) {
161
+ if (oneTimeAmount <= 10)
162
+ return 8;
163
+ if (oneTimeAmount <= 25)
164
+ return 10;
165
+ if (oneTimeAmount <= 100)
166
+ return 25;
167
+ return 50;
168
+ }
169
+ handleSuccessfulDonationResponse(donationInfo, response) {
170
+ switch (donationInfo.donationType) {
171
+ case DonationType.OneTime:
172
+ this.showUpsellModal({
173
+ oneTimeAmount: response.amount,
174
+ yesSelected: (amount) => {
175
+ this.upsellModalYesSelected(response, amount);
176
+ },
177
+ noSelected: () => {
178
+ this.showThankYouModal({ successResponse: response });
179
+ },
180
+ userClosedModalCallback: () => {
181
+ this.showThankYouModal({ successResponse: response });
182
+ },
183
+ });
184
+ break;
185
+ case DonationType.Monthly:
186
+ this.showThankYouModal({ successResponse: response });
187
+ break;
188
+ // The upsell itself is completed in `upsellModalYesSelected`
189
+ case DonationType.Upsell:
190
+ break;
191
+ }
192
+ }
193
+ }
194
+ //# sourceMappingURL=donation-flow-modal-manager.js.map