@internetarchive/donation-form 0.6.2 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/demo/braintree-endpoint-manager.js.map +1 -1
- package/dist/demo/submit-form-with.js.map +1 -1
- package/dist/src/braintree-manager/braintree-manager.js.map +1 -1
- package/dist/src/braintree-manager/payment-clients.d.ts +0 -2
- package/dist/src/braintree-manager/payment-clients.js +0 -1
- package/dist/src/braintree-manager/payment-clients.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.d.ts +0 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.d.ts +0 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js +2 -2
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-manager.d.ts +0 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js +0 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js +2 -2
- package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/google-pay-interface.d.ts +0 -1
- package/dist/src/braintree-manager/payment-providers/google-pay.d.ts +0 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js +3 -3
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/venmo.js +1 -1
- package/dist/src/braintree-manager/payment-providers/venmo.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers.js.map +1 -1
- package/dist/src/donation-form-controller.js +0 -1
- package/dist/src/donation-form-controller.js.map +1 -1
- package/dist/src/donation-form.js +18 -15
- package/dist/src/donation-form.js.map +1 -1
- package/dist/src/form-elements/badged-input.js.map +1 -1
- package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
- package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
- package/dist/src/form-elements/header/donation-summary.js.map +1 -1
- package/dist/src/form-elements/payment-selector.js +1 -1
- package/dist/src/form-elements/payment-selector.js.map +1 -1
- package/dist/src/form-elements/total-amount.js.map +1 -1
- package/dist/src/modals/confirm-donation-modal-content.js +0 -2
- package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
- package/dist/src/modals/error-modal-content.js.map +1 -1
- package/dist/src/modals/upsell-modal-content.js.map +1 -1
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +0 -1
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js +1 -1
- package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js +1 -1
- package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js +1 -1
- package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js +6 -14
- package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js +1 -1
- package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/payment-flow-handlers.js +1 -1
- package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
- package/dist/src/recaptcha-manager/recaptcha-manager.d.ts +0 -1
- package/dist/src/recaptcha-manager/recaptcha-manager.js.map +1 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js +0 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
- package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js +1 -1
- package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
- package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
- package/dist/test/mocks/mock-lazy-loader.js.map +1 -1
- package/dist/test/mocks/mock-modal-manager.js +0 -1
- package/dist/test/mocks/mock-modal-manager.js.map +1 -1
- package/dist/test/mocks/mock-payment-clients.d.ts +0 -2
- package/dist/test/mocks/mock-payment-clients.js +0 -1
- package/dist/test/mocks/mock-payment-clients.js.map +1 -1
- package/dist/test/mocks/mock-recaptcha-manager.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-payment.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-applepay-session.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-applepay-session.js +0 -2
- package/dist/test/mocks/payment-clients/mock-applepay-session.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-applepay-validatemerchantevent.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-data-collector.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-googlepay-client.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-googlepay-library.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-grecaptcha.d.ts +0 -1
- package/dist/test/mocks/payment-clients/mock-grecaptcha.js +0 -1
- package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-hostedfieldtokenizepayload.d.ts +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-googlepay-handler.d.ts +0 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js +2 -2
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
- package/dist/test/tests/braintree-manager.test.js +12 -13
- package/dist/test/tests/braintree-manager.test.js.map +1 -1
- package/dist/test/tests/donation-form-controller.test.js +21 -21
- package/dist/test/tests/donation-form.test.js +7 -7
- package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +8 -8
- package/dist/test/tests/form-elements/donation-summary.test.js +2 -2
- package/dist/test/tests/form-elements/payment-selector.test.js +8 -8
- package/dist/test/tests/modals/upsell-modal-content.test.js +21 -21
- package/dist/test/tests/models/donation-payment-info.test.js +7 -7
- package/dist/test/tests/models/donation-payment-info.test.js.map +1 -1
- package/dist/test/tests/payment-providers/applepay-sessiondatasource.test.js.map +1 -1
- package/dist/test/tests/payment-providers/creditcard.test.js.map +1 -1
- package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
- package/package.json +40 -40
- package/src/braintree-manager/payment-clients.ts +0 -1
- package/src/braintree-manager/payment-providers/apple-pay/apple-pay.ts +0 -1
- package/src/donation-form-controller.ts +0 -1
- package/src/donation-form.ts +9 -6
- package/src/modals/confirm-donation-modal-content.ts +0 -2
- package/src/payment-flow-handlers/donation-flow-modal-manager.ts +0 -1
- package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +2 -4
- package/src/payment-flow-handlers/payment-flow-handlers.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braintree-endpoint-manager.js","sourceRoot":"","sources":["../../demo/braintree-endpoint-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,QAAQ,MAAM,aAAa,CAAC;AAUnC,MAAM,OAAO,wBAAwB;IAC7B,UAAU,CAAC,OAAwB;;YACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,mFAAmF,EACnF;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,MAAM,EAAE,kBAAkB;iBAC3B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CACF,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,kBAAkB,CAAC,OAGlB;QACC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;QACzC,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAErD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,OAAO,GAA0C;YACrD,MAAM,EAAE,GAAG,aAAa,EAAE;YAC1B,WAAW,EAAE,QAAQ,CAAC,cAAc;YACpC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY;YAClE,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;YACvC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ;YACrC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK;SAC/B,CAAC;QAEF,IAAI,cAAc,EAAE;
|
|
1
|
+
{"version":3,"file":"braintree-endpoint-manager.js","sourceRoot":"","sources":["../../demo/braintree-endpoint-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,QAAQ,MAAM,aAAa,CAAC;AAUnC,MAAM,OAAO,wBAAwB;IAC7B,UAAU,CAAC,OAAwB;;YACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,mFAAmF,EACnF;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,MAAM,EAAE,kBAAkB;iBAC3B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CACF,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,kBAAkB,CAAC,OAGlB;QACC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;QACzC,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAErD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,OAAO,GAA0C;YACrD,MAAM,EAAE,GAAG,aAAa,EAAE;YAC1B,WAAW,EAAE,QAAQ,CAAC,cAAc;YACpC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY;YAClE,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;YACvC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ;YACrC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK;SAC/B,CAAC;QAEF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;YAC3C,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC;YACrD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YACnD,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,mBAAmB,EAAE,CAAC;YACpD,OAAO,CAAC,kBAAkB,CAAC,GAAG,cAAc,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAEpD,cAAc,CAAC;YACb,MAAM,EAAE,8DAA8D,OAAO,EAAE;YAC/E,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { submitFormWith } from './submit-form-with';\nimport currency from 'currency.js';\n\nimport {\n SuccessResponse,\n DonationRequest,\n DonationResponse,\n} from '@internetarchive/donation-form-data-models';\n\nimport { BraintreeEndpointManagerInterface } from '../index';\n\nexport class BraintreeEndpointManager implements BraintreeEndpointManagerInterface {\n async submitData(request: DonationRequest): Promise<DonationResponse> {\n const response = await fetch(\n 'https://ia-petabox.archive.org/services/donations/braintree-charge.php?debug=true',\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(request),\n },\n );\n const json = await response.json();\n return json;\n }\n\n donationSuccessful(options: {\n successResponse: SuccessResponse;\n upsellSuccessResponse?: SuccessResponse;\n }): void {\n const response = options.successResponse;\n const upsellResponse = options.upsellSuccessResponse;\n\n const displayAmount = currency(response.amount);\n\n const payload: { [key: string]: string | undefined } = {\n amount: `${displayAmount}`,\n 'charge-id': response.transaction_id,\n 'donation-type': upsellResponse ? 'upsell' : response.donationType,\n first_name: response.customer.firstName,\n last_name: response.customer.lastName,\n email: response.customer.email,\n };\n\n if (upsellResponse) {\n const upsellAmount = upsellResponse.amount;\n const upsellChargeId = upsellResponse.transaction_id;\n const displayUpsellAmount = currency(upsellAmount);\n payload['upsell-amount'] = `${displayUpsellAmount}`;\n payload['upsell-charge-id'] = upsellChargeId;\n }\n\n const service = encodeURI(response.paymentProvider);\n\n submitFormWith({\n action: `https://www-jasonb.archive.org/services/donate.php?service=${service}`,\n fields: payload,\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-form-with.js","sourceRoot":"","sources":["../../demo/submit-form-with.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,OAI9B;;IACC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAoB,CAAC;IAC/D,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,MAAM,CAAC;IACvC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAErB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;IAEpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAElB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"submit-form-with.js","sourceRoot":"","sources":["../../demo/submit-form-with.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,OAI9B;;IACC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAoB,CAAC;IAC/D,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,MAAM,CAAC;IACvC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAErB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;IAEpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAElB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,CAAC","sourcesContent":["export function submitFormWith(options: {\n method?: string;\n fields: { [key: string]: string | undefined };\n action: string;\n}): void {\n const form = document.createElement('form') as HTMLFormElement;\n form.method = options.method ?? 'POST';\n form.action = options.action;\n form.style.display = 'none';\n form.target = '_top';\n\n document.body.appendChild(form);\n\n const fields = options.fields ?? {};\n\n Object.keys(fields).forEach((name: string) => {\n const input = document.createElement('input');\n input.type = 'text';\n input.name = name;\n\n const value = fields[name];\n\n if (value) {\n input.value = value;\n }\n\n form.appendChild(input);\n });\n\n form.submit();\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braintree-manager.js","sourceRoot":"","sources":["../../../src/braintree-manager/braintree-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DonationResponse,\n DonationRequest,\n DonationRequestCustomFields,\n DonationType,\n CustomerInfo,\n BillingInfo,\n DonationPaymentInfo,\n PaymentProvider,\n SuccessResponse,\n} from '@internetarchive/donation-form-data-models';\n\nimport { PaymentProviders } from './payment-providers';\nimport { PaymentClientsInterface } from './payment-clients';\nimport {\n BraintreeManagerInterface,\n BraintreeEndpointManagerInterface,\n HostingEnvironment,\n BraintreeManagerEvents,\n} from './braintree-interfaces';\nimport { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { PaymentProvidersInterface } from './payment-providers-interface';\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\n\n/** @inheritdoc */\nexport class BraintreeManager implements BraintreeManagerInterface {\n private referrer?: string;\n\n /**\n * The origin is made up of campaign / ABTest information that the user originated from.\n *\n * The field is a freeform string so it can be anything, but make sure it's something\n * identifiable so it can be queried in CiviCRM.\n *\n * For instance, we use this format for the Donation Banner:\n * - `{Source}-{Test Name}-{Variant Name}`, eg:\n * - `DonateBanner-Campaign Start 2020-IADefault`\n * - `DonateBanner-Mid Campaign-IAThermometer`\n *\n * For additional specificity, you could add additional info, ie.\n * - `DonateBanner-MidJuly2020 Campaign-VariantA-Button1`\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private origin?: string;\n\n private loggedInUser?: string;\n\n /**\n * The Device Data token generated by the DataCollector.\n *\n * This gets submitted for several of the payment providers as an anti-fraud mechanism.\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private deviceData?: string;\n\n private emitter = createNanoEvents<BraintreeManagerEvents>();\n\n on<E extends keyof BraintreeManagerEvents>(\n event: E,\n callback: BraintreeManagerEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n /** @inheritdoc */\n paymentProviders: PaymentProvidersInterface;\n\n /** @inheritdoc */\n async startup(): Promise<void> {\n return this.collectDeviceData();\n }\n\n /** @inheritdoc */\n instance = new PromisedSingleton<braintree.Client>({\n generator: async (): Promise<braintree.Client> => {\n const client = await this.paymentClients.braintreeClient.get();\n return client?.create({ authorization: this.authorizationToken });\n },\n });\n\n /** @inheritdoc */\n async submitDonation(options: {\n nonce: string;\n paymentProvider: PaymentProvider;\n donationInfo: DonationPaymentInfo;\n billingInfo: BillingInfo;\n customerInfo: CustomerInfo;\n upsellOnetimeTransactionId?: string;\n customerId?: string;\n recaptchaToken?: string;\n bin?: string; // first 6 digits of CC\n binName?: string; // credit card bank name\n }): Promise<DonationResponse> {\n const customFields = new DonationRequestCustomFields();\n customFields.fee_amount_covered = options.donationInfo.feeAmountCovered;\n customFields.logged_in_user = this.loggedInUser;\n customFields.referrer = this.referrer;\n customFields.origin = this.origin;\n\n // This is interesting and applies only to Venmo, but will work for other providers as well.\n // In Safari, `donationInfo` actually comes through as a DonationPaymentInfo object,\n // but in Chrome, it comes through as a plain object so you can't call `.total()` on it to\n // get the total amount and instead have to calculate the total\n const total = DonationPaymentInfo.calculateTotal(\n options.donationInfo.amount,\n options.donationInfo.coverFees,\n );\n\n const donationRequest = new DonationRequest({\n deviceData: this.deviceData,\n paymentProvider: options.paymentProvider,\n paymentMethodNonce: options.nonce,\n amount: total,\n donationType: options.donationInfo.donationType,\n customer: options.customerInfo,\n billing: options.billingInfo,\n customFields: customFields,\n upsellOnetimeTransactionId: options.upsellOnetimeTransactionId,\n customerId: options.customerId,\n recaptchaToken: options.recaptchaToken,\n bin: options.bin,\n binName: options.binName,\n });\n\n const jsonResponse = await this.endpointManager.submitData(donationRequest);\n const modeledResponse = new DonationResponse(jsonResponse);\n return modeledResponse;\n }\n\n /** @inheritdoc */\n async submitUpsellDonation(options: {\n oneTimeDonationResponse: SuccessResponse;\n amount: number;\n }): Promise<DonationResponse> {\n const response = options.oneTimeDonationResponse;\n\n const donationInfo = new DonationPaymentInfo({\n amount: options.amount,\n donationType: DonationType.Upsell,\n coverFees: false,\n });\n\n return this.submitDonation({\n nonce: response.paymentMethodNonce,\n paymentProvider: response.paymentProvider,\n customerId: response.customer_id,\n donationInfo: donationInfo,\n customerInfo: response.customer,\n billingInfo: response.billing,\n upsellOnetimeTransactionId: response.transaction_id,\n });\n }\n\n /** @inheritdoc */\n donationSuccessful(options: {\n successResponse: SuccessResponse;\n upsellSuccessResponse?: SuccessResponse;\n }): void {\n this.endpointManager.donationSuccessful(options);\n }\n\n private deviceDataCollectionStarted = false;\n\n /**\n * Collect Braintree device data. This is used to help fraud detection.\n *\n * @private\n * @returns {Promise<void>}\n * @memberof BraintreeManager\n */\n private async collectDeviceData(): Promise<void> {\n if (this.deviceDataCollectionStarted) {\n return;\n }\n this.deviceDataCollectionStarted = true;\n\n const instance = await this.instance.get();\n if (!instance) {\n return;\n }\n\n return this.paymentClients.dataCollector\n .get()\n .then((collector?: braintree.DataCollector) => {\n return collector?.create({ client: instance, kount: false, paypal: true });\n })\n .then(instance => {\n this.deviceData = instance?.deviceData;\n });\n }\n\n /**\n * Braintree Authorization Token\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private authorizationToken: string;\n\n /**\n * The endpoint manager for network communications\n *\n * @private\n * @type {BraintreeEndpointManagerInterface}\n * @memberof BraintreeManager\n */\n private endpointManager: BraintreeEndpointManagerInterface;\n\n /**\n * The payment clients container containing the braintree, paypal, and google clients\n *\n * @private\n * @type {PaymentClientsInterface}\n * @memberof BraintreeManager\n */\n private paymentClients: PaymentClientsInterface;\n\n private hostingEnvironment: HostingEnvironment = HostingEnvironment.Development;\n\n constructor(options: {\n authorizationToken: string;\n paymentClients: PaymentClientsInterface;\n endpointManager: BraintreeEndpointManagerInterface;\n hostedFieldConfig: HostedFieldConfiguration;\n hostingEnvironment: HostingEnvironment;\n venmoProfileId?: string;\n googlePayMerchantId?: string;\n referrer?: string;\n loggedInUser?: string;\n origin?: string;\n }) {\n this.authorizationToken = options.authorizationToken;\n this.endpointManager = options.endpointManager;\n this.hostingEnvironment = options.hostingEnvironment;\n this.paymentClients = options.paymentClients;\n\n this.referrer = options.referrer;\n this.loggedInUser = options.loggedInUser;\n this.origin = options.origin;\n\n this.paymentProviders = new PaymentProviders({\n braintreeManager: this,\n paymentClients: this.paymentClients,\n venmoProfileId: options.venmoProfileId,\n googlePayMerchantId: options.googlePayMerchantId,\n hostingEnvironment: options.hostingEnvironment,\n hostedFieldConfig: options.hostedFieldConfig,\n });\n\n this.paymentProviders.on('hostedFieldsRetry', (retryNumber: number) => {\n this.emitter.emit('paymentProvidersHostedFieldsRetry', retryNumber);\n });\n\n this.paymentProviders.on('hostedFieldsFailed', (error: unknown) => {\n this.emitter.emit('paymentProvidersHostedFieldsFailed', error);\n });\n }\n\n /** @inheritdoc */\n setReferrer(referrer: string): void {\n this.referrer = referrer;\n }\n\n /** @inheritdoc */\n setLoggedInUser(loggedInUser: string): void {\n this.loggedInUser = loggedInUser;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this.origin = origin;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"braintree-manager.js","sourceRoot":"","sources":["../../../src/braintree-manager/braintree-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DonationResponse,\n DonationRequest,\n DonationRequestCustomFields,\n DonationType,\n CustomerInfo,\n BillingInfo,\n DonationPaymentInfo,\n PaymentProvider,\n SuccessResponse,\n} from '@internetarchive/donation-form-data-models';\n\nimport { PaymentProviders } from './payment-providers';\nimport { PaymentClientsInterface } from './payment-clients';\nimport {\n BraintreeManagerInterface,\n BraintreeEndpointManagerInterface,\n HostingEnvironment,\n BraintreeManagerEvents,\n} from './braintree-interfaces';\nimport { HostedFieldConfiguration } from './payment-providers/credit-card/hosted-field-configuration';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { PaymentProvidersInterface } from './payment-providers-interface';\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\n\n/** @inheritdoc */\nexport class BraintreeManager implements BraintreeManagerInterface {\n private referrer?: string;\n\n /**\n * The origin is made up of campaign / ABTest information that the user originated from.\n *\n * The field is a freeform string so it can be anything, but make sure it's something\n * identifiable so it can be queried in CiviCRM.\n *\n * For instance, we use this format for the Donation Banner:\n * - `{Source}-{Test Name}-{Variant Name}`, eg:\n * - `DonateBanner-Campaign Start 2020-IADefault`\n * - `DonateBanner-Mid Campaign-IAThermometer`\n *\n * For additional specificity, you could add additional info, ie.\n * - `DonateBanner-MidJuly2020 Campaign-VariantA-Button1`\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private origin?: string;\n\n private loggedInUser?: string;\n\n /**\n * The Device Data token generated by the DataCollector.\n *\n * This gets submitted for several of the payment providers as an anti-fraud mechanism.\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private deviceData?: string;\n\n private emitter = createNanoEvents<BraintreeManagerEvents>();\n\n on<E extends keyof BraintreeManagerEvents>(\n event: E,\n callback: BraintreeManagerEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n /** @inheritdoc */\n paymentProviders: PaymentProvidersInterface;\n\n /** @inheritdoc */\n async startup(): Promise<void> {\n return this.collectDeviceData();\n }\n\n /** @inheritdoc */\n instance = new PromisedSingleton<braintree.Client>({\n generator: async (): Promise<braintree.Client> => {\n const client = await this.paymentClients.braintreeClient.get();\n return client?.create({ authorization: this.authorizationToken });\n },\n });\n\n /** @inheritdoc */\n async submitDonation(options: {\n nonce: string;\n paymentProvider: PaymentProvider;\n donationInfo: DonationPaymentInfo;\n billingInfo: BillingInfo;\n customerInfo: CustomerInfo;\n upsellOnetimeTransactionId?: string;\n customerId?: string;\n recaptchaToken?: string;\n bin?: string; // first 6 digits of CC\n binName?: string; // credit card bank name\n }): Promise<DonationResponse> {\n const customFields = new DonationRequestCustomFields();\n customFields.fee_amount_covered = options.donationInfo.feeAmountCovered;\n customFields.logged_in_user = this.loggedInUser;\n customFields.referrer = this.referrer;\n customFields.origin = this.origin;\n\n // This is interesting and applies only to Venmo, but will work for other providers as well.\n // In Safari, `donationInfo` actually comes through as a DonationPaymentInfo object,\n // but in Chrome, it comes through as a plain object so you can't call `.total()` on it to\n // get the total amount and instead have to calculate the total\n const total = DonationPaymentInfo.calculateTotal(\n options.donationInfo.amount,\n options.donationInfo.coverFees,\n );\n\n const donationRequest = new DonationRequest({\n deviceData: this.deviceData,\n paymentProvider: options.paymentProvider,\n paymentMethodNonce: options.nonce,\n amount: total,\n donationType: options.donationInfo.donationType,\n customer: options.customerInfo,\n billing: options.billingInfo,\n customFields: customFields,\n upsellOnetimeTransactionId: options.upsellOnetimeTransactionId,\n customerId: options.customerId,\n recaptchaToken: options.recaptchaToken,\n bin: options.bin,\n binName: options.binName,\n });\n\n const jsonResponse = await this.endpointManager.submitData(donationRequest);\n const modeledResponse = new DonationResponse(jsonResponse);\n return modeledResponse;\n }\n\n /** @inheritdoc */\n async submitUpsellDonation(options: {\n oneTimeDonationResponse: SuccessResponse;\n amount: number;\n }): Promise<DonationResponse> {\n const response = options.oneTimeDonationResponse;\n\n const donationInfo = new DonationPaymentInfo({\n amount: options.amount,\n donationType: DonationType.Upsell,\n coverFees: false,\n });\n\n return this.submitDonation({\n nonce: response.paymentMethodNonce,\n paymentProvider: response.paymentProvider,\n customerId: response.customer_id,\n donationInfo: donationInfo,\n customerInfo: response.customer,\n billingInfo: response.billing,\n upsellOnetimeTransactionId: response.transaction_id,\n });\n }\n\n /** @inheritdoc */\n donationSuccessful(options: {\n successResponse: SuccessResponse;\n upsellSuccessResponse?: SuccessResponse;\n }): void {\n this.endpointManager.donationSuccessful(options);\n }\n\n private deviceDataCollectionStarted = false;\n\n /**\n * Collect Braintree device data. This is used to help fraud detection.\n *\n * @private\n * @returns {Promise<void>}\n * @memberof BraintreeManager\n */\n private async collectDeviceData(): Promise<void> {\n if (this.deviceDataCollectionStarted) {\n return;\n }\n this.deviceDataCollectionStarted = true;\n\n const instance = await this.instance.get();\n if (!instance) {\n return;\n }\n\n return this.paymentClients.dataCollector\n .get()\n .then((collector?: braintree.DataCollector) => {\n return collector?.create({ client: instance, kount: false, paypal: true });\n })\n .then(instance => {\n this.deviceData = instance?.deviceData;\n });\n }\n\n /**\n * Braintree Authorization Token\n *\n * @private\n * @type {string}\n * @memberof BraintreeManager\n */\n private authorizationToken: string;\n\n /**\n * The endpoint manager for network communications\n *\n * @private\n * @type {BraintreeEndpointManagerInterface}\n * @memberof BraintreeManager\n */\n private endpointManager: BraintreeEndpointManagerInterface;\n\n /**\n * The payment clients container containing the braintree, paypal, and google clients\n *\n * @private\n * @type {PaymentClientsInterface}\n * @memberof BraintreeManager\n */\n private paymentClients: PaymentClientsInterface;\n\n private hostingEnvironment: HostingEnvironment = HostingEnvironment.Development;\n\n constructor(options: {\n authorizationToken: string;\n paymentClients: PaymentClientsInterface;\n endpointManager: BraintreeEndpointManagerInterface;\n hostedFieldConfig: HostedFieldConfiguration;\n hostingEnvironment: HostingEnvironment;\n venmoProfileId?: string;\n googlePayMerchantId?: string;\n referrer?: string;\n loggedInUser?: string;\n origin?: string;\n }) {\n this.authorizationToken = options.authorizationToken;\n this.endpointManager = options.endpointManager;\n this.hostingEnvironment = options.hostingEnvironment;\n this.paymentClients = options.paymentClients;\n\n this.referrer = options.referrer;\n this.loggedInUser = options.loggedInUser;\n this.origin = options.origin;\n\n this.paymentProviders = new PaymentProviders({\n braintreeManager: this,\n paymentClients: this.paymentClients,\n venmoProfileId: options.venmoProfileId,\n googlePayMerchantId: options.googlePayMerchantId,\n hostingEnvironment: options.hostingEnvironment,\n hostedFieldConfig: options.hostedFieldConfig,\n });\n\n this.paymentProviders.on('hostedFieldsRetry', (retryNumber: number) => {\n this.emitter.emit('paymentProvidersHostedFieldsRetry', retryNumber);\n });\n\n this.paymentProviders.on('hostedFieldsFailed', (error: unknown) => {\n this.emitter.emit('paymentProvidersHostedFieldsFailed', error);\n });\n }\n\n /** @inheritdoc */\n setReferrer(referrer: string): void {\n this.referrer = referrer;\n }\n\n /** @inheritdoc */\n setLoggedInUser(loggedInUser: string): void {\n this.loggedInUser = loggedInUser;\n }\n\n /** @inheritdoc */\n setOrigin(origin: string): void {\n this.origin = origin;\n }\n}\n"]}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="googlepay" />
|
|
2
|
-
/// <reference types="grecaptcha" />
|
|
3
1
|
import { LazyLoaderServiceInterface } from '@internetarchive/lazy-loader-service';
|
|
4
2
|
import { PromisedSingleton } from '@internetarchive/promised-singleton';
|
|
5
3
|
import { HostingEnvironment } from './braintree-interfaces';
|
|
@@ -104,7 +104,6 @@ export class PaymentClients {
|
|
|
104
104
|
this.lazyLoader = lazyLoader;
|
|
105
105
|
this.environment = environment;
|
|
106
106
|
}
|
|
107
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
107
|
loadBraintreeScript(scriptName) {
|
|
109
108
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
109
|
const extension = this.environment === HostingEnvironment.Production ? 'min.js' : 'js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-clients.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-clients.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"payment-clients.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-clients.ts"],"names":[],"mappings":"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","sourcesContent":["import { LazyLoaderServiceInterface } from '@internetarchive/lazy-loader-service';\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { HostingEnvironment } from './braintree-interfaces';\n\nexport interface PaymentClientsInterface {\n braintreeClient: PromisedSingleton<braintree.Client>;\n dataCollector: PromisedSingleton<braintree.DataCollector>;\n hostedFields: PromisedSingleton<braintree.HostedFields>;\n venmo: PromisedSingleton<braintree.Venmo>;\n payPal: PromisedSingleton<braintree.PayPalCheckout>;\n applePay: PromisedSingleton<braintree.ApplePay>;\n googlePayBraintreeClient: PromisedSingleton<braintree.GooglePayment>;\n\n googlePaymentsClient: PromisedSingleton<google.payments.api.PaymentsClient>;\n recaptchaLibrary: PromisedSingleton<ReCaptchaV2.ReCaptcha>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n paypalLibrary: PromisedSingleton<any>;\n}\n\n/**\n * The PaymentClients class is responsible for loading and passing around\n * all of the payment libraries. Internally it uses the LazyLoaderService to lazy load\n * the javascript clients.\n *\n * For instance, it carries around the braintree and paypal libraries, as well as the specific\n * payment-provider clients for each of the providers. This allows us to pass around typed\n * objects instead of the untyped libraries we get from the providers.\n *\n * @export\n * @class PaymentClients\n * @implements {PaymentClientsInterface}\n */\nexport class PaymentClients implements PaymentClientsInterface {\n braintreeClient = new PromisedSingleton<braintree.Client>({\n generator: async (): Promise<braintree.Client> => {\n await this.loadBraintreeScript('client');\n return window.braintree.client;\n },\n });\n\n dataCollector = new PromisedSingleton<braintree.DataCollector>({\n generator: async (): Promise<braintree.DataCollector> => {\n await this.loadBraintreeScript('data-collector');\n return window.braintree.dataCollector;\n },\n });\n\n hostedFields = new PromisedSingleton<braintree.HostedFields>({\n generator: async (): Promise<braintree.HostedFields> => {\n await this.loadBraintreeScript('hosted-fields');\n return window.braintree.hostedFields;\n },\n });\n\n venmo = new PromisedSingleton<braintree.Venmo>({\n generator: async (): Promise<braintree.Venmo> => {\n await this.loadBraintreeScript('venmo');\n return window.braintree.venmo;\n },\n });\n\n payPal = new PromisedSingleton<braintree.PayPalCheckout>({\n generator: async (): Promise<braintree.PayPalCheckout> => {\n await this.loadBraintreeScript('paypal-checkout');\n return window.braintree.paypalCheckout;\n },\n });\n\n applePay = new PromisedSingleton<braintree.ApplePay>({\n generator: async (): Promise<braintree.ApplePay> => {\n await this.loadBraintreeScript('apple-pay');\n return window.braintree.applePay;\n },\n });\n\n googlePayBraintreeClient = new PromisedSingleton<braintree.GooglePayment>({\n generator: async (): Promise<braintree.GooglePayment> => {\n await this.loadBraintreeScript('google-payment');\n return window.braintree.googlePayment;\n },\n });\n\n googlePaymentsClient = new PromisedSingleton<google.payments.api.PaymentsClient>({\n generator: async (): Promise<google.payments.api.PaymentsClient> => {\n await this.lazyLoader.loadScript({ src: 'https://pay.google.com/gp/p/js/pay.js' });\n return new google.payments.api.PaymentsClient({\n environment: this.environment === HostingEnvironment.Development ? 'TEST' : 'PRODUCTION',\n });\n },\n });\n\n recaptchaLibrary = new PromisedSingleton<ReCaptchaV2.ReCaptcha>({\n generator: (): Promise<ReCaptchaV2.ReCaptcha> =>\n new Promise(resolve => {\n // The loader for the recaptcha library is relying on an onload callback from the recaptcha\n // library because even when the library has loaded, it is still not ready\n // As recommended by Recaptcha, we attach a callback to the window object before starting\n // the load and remove it once the load is complete and resolve the promise.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).donationFormGrecaptchaLoadedCallback = (): void => {\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delete (window as any).donationFormGrecaptchaLoadedCallback;\n }, 10);\n resolve(window.grecaptcha);\n };\n\n this.lazyLoader.loadScript({\n src: 'https://www.google.com/recaptcha/api.js?onload=donationFormGrecaptchaLoadedCallback&render=explicit',\n });\n }),\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n paypalLibrary = new PromisedSingleton<any>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n generator: async (): Promise<any> => {\n await this.lazyLoader.loadScript({\n src: 'https://www.paypalobjects.com/api/checkout.js',\n attributes: {\n 'data-version-4': '',\n 'log-level': 'warn',\n },\n });\n return window.paypal;\n },\n });\n\n constructor(lazyLoader: LazyLoaderServiceInterface, environment: HostingEnvironment) {\n this.lazyLoader = lazyLoader;\n this.environment = environment;\n }\n\n private async loadBraintreeScript(scriptName: string): Promise<void> {\n const extension = this.environment === HostingEnvironment.Production ? 'min.js' : 'js';\n const scriptWithSuffix = `${scriptName}.${extension}`;\n const url = `https://js.braintreegateway.com/web/${this.braintreeVersion}/js/${scriptWithSuffix}`;\n await this.lazyLoader.loadScript({ src: url });\n }\n\n private braintreeVersion = '3.62.2';\n\n private environment: HostingEnvironment = HostingEnvironment.Development;\n\n private lazyLoader: LazyLoaderServiceInterface;\n}\n"]}
|
package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="applepayjs" />
|
|
2
1
|
import { DonationPaymentInfo } from '@internetarchive/donation-form-data-models';
|
|
3
2
|
import { BraintreeManagerInterface } from '../../braintree-interfaces';
|
|
4
3
|
import { ApplePaySessionDataSourceInterface } from './apple-pay-session-datasource-interface';
|
package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js
CHANGED
|
@@ -31,14 +31,14 @@ export class ApplePaySessionDataSource {
|
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
33
|
oncancel() {
|
|
34
|
-
var _a;
|
|
35
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
var _a;
|
|
36
36
|
(_a = this.delegate) === null || _a === void 0 ? void 0 : _a.paymentCancelled();
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
onpaymentauthorized(event) {
|
|
40
|
-
var _a, _b, _c, _d;
|
|
41
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
var _a, _b, _c, _d;
|
|
42
42
|
let payload;
|
|
43
43
|
try {
|
|
44
44
|
payload = yield this.applePayInstance.tokenize({
|
package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-pay-session-datasource.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,4CAA4C,CAAC;AAKpD,MAAM,OAAO,yBAAyB;IASpC,YAAY,OAMX;QACC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACnD,CAAC;IAEK,kBAAkB,CAAC,KAA+C;;YACtE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CACrC;oBACE,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,WAAW,EAAE,kBAAkB;iBAChC;gBACD,8DAA8D;gBAC9D,CAAC,aAAkB,EAAE,cAAmB,EAAE,EAAE;;oBAC1C,IAAI,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"apple-pay-session-datasource.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DonationPaymentInfo,\n BillingInfo,\n CustomerInfo,\n PaymentProvider,\n} from '@internetarchive/donation-form-data-models';\nimport { BraintreeManagerInterface } from '../../braintree-interfaces';\nimport { ApplePaySessionDataSourceInterface } from './apple-pay-session-datasource-interface';\nimport { ApplePaySessionDataSourceDelegate } from './apple-pay-session-datasource-delegate';\n\nexport class ApplePaySessionDataSource implements ApplePaySessionDataSourceInterface {\n delegate?: ApplePaySessionDataSourceDelegate;\n donationInfo: DonationPaymentInfo;\n\n private session: ApplePaySession;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private applePayInstance: any;\n private braintreeManager: BraintreeManagerInterface;\n\n constructor(options: {\n donationInfo: DonationPaymentInfo;\n session: ApplePaySession;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n applePayInstance: any;\n braintreeManager: BraintreeManagerInterface;\n }) {\n this.session = options.session;\n this.donationInfo = options.donationInfo;\n this.applePayInstance = options.applePayInstance;\n this.braintreeManager = options.braintreeManager;\n }\n\n async onvalidatemerchant(event: ApplePayJS.ApplePayValidateMerchantEvent): Promise<void> {\n return new Promise((resolve, reject) => {\n this.applePayInstance.performValidation(\n {\n validationURL: event.validationURL,\n displayName: 'Internet Archive',\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (validationErr: any, validationData: any) => {\n if (validationErr) {\n this.delegate?.paymentFailed(validationErr);\n this.session.abort();\n reject(`Merchant validation error: ${validationErr}`);\n } else {\n this.session.completeMerchantValidation(validationData);\n resolve();\n }\n },\n );\n });\n }\n\n async oncancel(): Promise<void> {\n this.delegate?.paymentCancelled();\n }\n\n async onpaymentauthorized(event: ApplePayJS.ApplePayPaymentAuthorizedEvent): Promise<void> {\n let payload;\n try {\n payload = await this.applePayInstance.tokenize({\n token: event.payment.token,\n });\n } catch (err) {\n this.delegate?.paymentFailed(err);\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\n return;\n }\n\n const payment = event.payment;\n const billingContact = payment.billingContact;\n const shippingContact = payment.shippingContact;\n const addressLines = billingContact?.addressLines;\n\n let line1: string | undefined = undefined;\n let line2: string | undefined = undefined;\n\n if (addressLines) {\n line1 = addressLines[0];\n line2 = addressLines[1];\n }\n\n const billingInfo = new BillingInfo({\n streetAddress: line1,\n extendedAddress: line2,\n locality: billingContact?.locality,\n region: billingContact?.administrativeArea,\n postalCode: billingContact?.postalCode,\n countryCodeAlpha2: billingContact?.countryCode,\n });\n\n const customerInfo = new CustomerInfo({\n email: shippingContact?.emailAddress,\n firstName: shippingContact?.givenName,\n lastName: shippingContact?.familyName,\n });\n\n try {\n const donationResponse = await this.braintreeManager.submitDonation({\n nonce: payload.nonce,\n paymentProvider: PaymentProvider.ApplePay,\n donationInfo: this.donationInfo,\n billingInfo: billingInfo,\n customerInfo: customerInfo,\n });\n if (donationResponse.success) {\n this.delegate?.paymentComplete(donationResponse);\n this.session.completePayment(ApplePaySession.STATUS_SUCCESS);\n } else {\n this.delegate?.paymentFailed('Failure submitting data');\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\n }\n } catch (err) {\n this.delegate?.paymentFailed(err);\n this.session.completePayment(ApplePaySession.STATUS_FAILURE);\n }\n }\n}\n"]}
|
|
@@ -8,7 +8,6 @@ export class ApplePayHandler {
|
|
|
8
8
|
this.braintreeManager = options.braintreeManager;
|
|
9
9
|
this.applePayClient = options.applePayClient;
|
|
10
10
|
this.applePaySessionManager = options.applePaySessionManager;
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
11
|
this.instance =
|
|
13
12
|
(_a = options.instancePromisedSingleton) !== null && _a !== void 0 ? _a :
|
|
14
13
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apple-pay.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAuB,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,MAAM,OAAO,eAAe;IAI1B,YAAY,OAMX;;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAE7D,
|
|
1
|
+
{"version":3,"file":"apple-pay.js","sourceRoot":"","sources":["../../../../../src/braintree-manager/payment-providers/apple-pay/apple-pay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAuB,MAAM,4CAA4C,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,MAAM,OAAO,eAAe;IAI1B,YAAY,OAMX;;QACC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAE7D,IAAI,CAAC,QAAQ;YACX,MAAA,OAAO,CAAC,yBAAyB;YACjC,8DAA8D;YAC9D,IAAI,iBAAiB,CAAkB;gBACrC,8DAA8D;gBAC9D,SAAS,EAAE,GAAmC,EAAE;oBAC9C,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,EAAE,CAAC;wBACnD,OAAO,SAAS,CAAC;oBACnB,CAAC;oBAED,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;oBACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;wBAChD,MAAM,EAAE,eAAe;qBACxB,CAAC,CAAC;oBAEH,OAAO,QAAQ,CAAC;gBAClB,CAAC,CAAA;aACF,CAAC,CAAC;IACP,CAAC;IAQK,WAAW;;YACf,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC3C,OAAO,CAAC,CAAC,QAAQ,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KAAA;IAED,wEAAwE;IACxE,uEAAuE;IACvE,wCAAwC;IAClC,oBAAoB,CACxB,CAAQ,EACR,YAAiC;;YAEjC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAEnD,IAAI,KAAK,GAAG,0BAA0B,CAAC;YACvC,IAAI,YAAY,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;gBACvD,KAAK,GAAG,kBAAkB,CAAC;YAC7B,CAAC;YAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,oBAAoB,CAAC;gBAC3D,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,YAAY,CAAC,KAAK;iBAC3B;gBACD,4BAA4B,EAAE,CAAC,eAAe,CAAC;gBAC/C,6BAA6B,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;aACjD,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;YAEpF,MAAM,iBAAiB,GAAG,IAAI,yBAAyB,CAAC;gBACtD,YAAY,EAAE,YAAY;gBAC1B,OAAO,EAAE,OAAO;gBAChB,gBAAgB,EAAE,gBAAgB;gBAClC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC,CAAC,CAAC;YAEH,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC1F,OAAO,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC5F,OAAO,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEtE,OAAO,CAAC,KAAK,EAAE,CAAC;YAEhB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;KAAA;CACF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { BraintreeManagerInterface } from '../../braintree-interfaces';\nimport { ApplePaySessionManagerInterface } from './apple-pay-session-manager';\nimport { DonationType, DonationPaymentInfo } from '@internetarchive/donation-form-data-models';\nimport { ApplePaySessionDataSource } from './apple-pay-session-datasource';\nimport { ApplePayHandlerInterface } from './apple-pay-interface';\n\nexport class ApplePayHandler implements ApplePayHandlerInterface {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: PromisedSingleton<any | undefined>;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n applePayClient: braintree.ApplePay;\n applePaySessionManager: ApplePaySessionManagerInterface;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instancePromisedSingleton?: PromisedSingleton<any | undefined>;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.applePayClient = options.applePayClient;\n this.applePaySessionManager = options.applePaySessionManager;\n\n this.instance =\n options.instancePromisedSingleton ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new PromisedSingleton<any | undefined>({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n generator: async (): Promise<any | undefined> => {\n if (!this.applePaySessionManager.canMakePayments()) {\n return undefined;\n }\n\n const braintreeClient = await this.braintreeManager.instance.get();\n const instance = await this.applePayClient.create({\n client: braintreeClient,\n });\n\n return instance;\n },\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n\n private applePaySessionManager: ApplePaySessionManagerInterface;\n\n private applePayClient: braintree.ApplePay;\n\n async isAvailable(): Promise<boolean> {\n try {\n const instance = await this.instance.get();\n return !!instance;\n } catch (err) {\n return false;\n }\n }\n\n // In order to trigger the Apple Pay flow, you HAVE to pass in the event\n // that triggered the launch. Notice we're not actually using the event\n // but ApplePay won't launch without it.\n async createPaymentRequest(\n e: Event,\n donationInfo: DonationPaymentInfo,\n ): Promise<ApplePaySessionDataSource> {\n const applePayInstance = await this.instance.get();\n\n let label = 'Internet Archive Monthly';\n if (donationInfo.donationType === DonationType.OneTime) {\n label = 'Internet Archive';\n }\n\n const paymentRequest = applePayInstance.createPaymentRequest({\n total: {\n label: label,\n amount: donationInfo.total,\n },\n requiredBillingContactFields: ['postalAddress'],\n requiredShippingContactFields: ['name', 'email'],\n });\n const session = this.applePaySessionManager.createNewPaymentSession(paymentRequest);\n\n const sessionDataSource = new ApplePaySessionDataSource({\n donationInfo: donationInfo,\n session: session,\n applePayInstance: applePayInstance,\n braintreeManager: this.braintreeManager,\n });\n\n session.onvalidatemerchant = sessionDataSource.onvalidatemerchant.bind(sessionDataSource);\n session.onpaymentauthorized = sessionDataSource.onpaymentauthorized.bind(sessionDataSource);\n session.oncancel = sessionDataSource.oncancel.bind(sessionDataSource);\n\n session.begin();\n\n return sessionDataSource;\n }\n}\n"]}
|
|
@@ -22,8 +22,8 @@ export class CreditCardHandler {
|
|
|
22
22
|
this.maxRetryCount = (_a = options.maxRetryCount) !== null && _a !== void 0 ? _a : 2;
|
|
23
23
|
this.loadTimeout = ((_b = options.loadTimeout) !== null && _b !== void 0 ? _b : 6) * 1000;
|
|
24
24
|
}
|
|
25
|
-
createHostedFields(
|
|
26
|
-
return __awaiter(this,
|
|
25
|
+
createHostedFields(braintreeClient_1) {
|
|
26
|
+
return __awaiter(this, arguments, void 0, function* (braintreeClient, retryCount = 0) {
|
|
27
27
|
// we mainly want to do this for retry events, but it doesn't
|
|
28
28
|
// hurt to do it on the first try
|
|
29
29
|
this.hostedFieldConfig.hostedFieldContainer.resetHostedFields();
|
|
@@ -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,
|
|
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"]}
|
package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map
CHANGED
|
@@ -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;
|
|
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"]}
|
|
@@ -9,8 +9,8 @@ export class PayPalButtonDataSource {
|
|
|
9
9
|
}
|
|
10
10
|
/** @inheritdoc */
|
|
11
11
|
payment() {
|
|
12
|
-
var _a;
|
|
13
12
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
var _a;
|
|
14
14
|
const donationType = this.donationInfo.donationType;
|
|
15
15
|
const flow = donationType === DonationType.OneTime ? 'checkout' : 'vault';
|
|
16
16
|
const options = {
|
|
@@ -31,16 +31,16 @@ export class PayPalButtonDataSource {
|
|
|
31
31
|
}
|
|
32
32
|
/** @inheritdoc */
|
|
33
33
|
onAuthorize(data) {
|
|
34
|
-
var _a;
|
|
35
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
var _a;
|
|
36
36
|
const payload = yield this.paypalInstance.tokenizePayment(data);
|
|
37
37
|
(_a = this.delegate) === null || _a === void 0 ? void 0 : _a.payPalPaymentAuthorized(this, payload);
|
|
38
38
|
return payload;
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
onConfirm(data) {
|
|
42
|
-
var _a;
|
|
43
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
var _a;
|
|
44
44
|
const payload = yield this.paypalInstance.tokenizePayment(data);
|
|
45
45
|
(_a = this.delegate) === null || _a === void 0 ? void 0 : _a.payPalPaymentConfirmed(this, payload);
|
|
46
46
|
return payload;
|
|
@@ -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;
|
|
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.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;
|
|
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.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;
|
|
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.js","sourceRoot":"","sources":["../../../src/braintree-manager/payment-providers.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AAEjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAA6B,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQvF,OAAO,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IAC3B,EAAE,CACA,KAAQ,EACR,QAAmC;QAEnC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IA+FD,YAAY,OAOX;QApGD,sBAAiB,GAAG,IAAI,iBAAiB,CAA6B;YACpE,SAAS,EAAE,GAA8C,EAAE;gBACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;gBAC5D,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;oBACpC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,iBAAiB,EAAE,MAAM;oBACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;iBAC1C,CAAC,CAAC;gBAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,WAAmB,EAAE,EAAE;oBACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAc,EAAE,EAAE;oBAClD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC;gBAEH,OAAO,OAAO,CAAC;YACjB,CAAC,CAAA;SACF,CAAC,CAAC;QAEH,oBAAe,GAAG,IAAI,iBAAiB,CAA2B;YAChE,SAAS,EAAE,GAA4C,EAAE;gBACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACxD,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC;gBAC5D,OAAO,IAAI,eAAe,CAAC;oBACzB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,cAAc,EAAE,MAAM;oBACtB,sBAAsB,EAAE,sBAAsB;iBAC/C,CAAC,CAAC;YACL,CAAC,CAAA;SACF,CAAC,CAAC;QAEH,iBAAY,GAAG,IAAI,iBAAiB,CAAoC;YACtE,SAAS,EAAE,GAAqD,EAAE;gBAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;
|
|
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"]}
|