Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
'use strict';
var EventEmitter = require('@braintree/event-emitter');
function EventedModel() {
EventEmitter.call(this);
this._attributes = this.resetAttributes();
}
EventEmitter.createChild(EventedModel);
EventedModel.prototype.get = function get(compoundKey) {
var i, key, keys;
var traversal = this._attributes;
if (compoundKey == null) { return traversal; }
keys = compoundKey.split('.');
for (i = 0; i < keys.length; i++) {
key = keys[i];
if (!traversal.hasOwnProperty(key)) {
return; // eslint-disable-line consistent-return
}
);
}
});
this._destructor.registerFunctionForTeardown(function () {
destroyFocusIntercept();
});
this._destructor.registerFunctionForTeardown(function () {
var methodNames = methods(HostedFields.prototype).concat(methods(EventEmitter.prototype));
convertMethodsToError(self, methodNames);
});
}
EventEmitter.createChild(HostedFields);
HostedFields.prototype._setupLabelFocus = function (type, container) {
var labels, i;
var shouldSkipLabelFocus = browserDetection.isIos();
var bus = this._bus;
if (shouldSkipLabelFocus) { return; }
if (container.id == null) { return; }
function triggerFocus() {
bus.emit(events.TRIGGER_INPUT_FOCUS, type);
}
labels = Array.prototype.slice.call(document.querySelectorAll('label[for="' + container.id + '"]'));
labels = labels.concat(findParentTags(container, 'label'));
this._componentId = uuid();
this._client = options.client;
this._enabledPaymentMethods = {
basicCard: enabledPaymentMethods.basicCard !== false,
googlePay: enabledPaymentMethods.googlePay !== false
};
this._googlePayVersion = options.googlePayVersion === 2 ? 2 : 1;
this._googleMerchantId = BRAINTREE_GOOGLE_PAY_MERCHANT_ID;
this._supportedPaymentMethods = this._constructDefaultSupportedPaymentMethods();
this._defaultSupportedPaymentMethods = Object.keys(this._supportedPaymentMethods).map(function (key) {
return this._supportedPaymentMethods[key];
}.bind(this));
this._bus = new Bus({channel: this._componentId});
}
EventEmitter.createChild(PaymentRequestComponent);
PaymentRequestComponent.prototype._constructDefaultSupportedPaymentMethods = function () {
var configuration = this._client.getConfiguration();
var androidPayConfiguration = configuration.gatewayConfiguration.androidPay;
var cardConfiguration = configuration.gatewayConfiguration.creditCards;
var supportedPaymentMethods = {};
if (this._enabledPaymentMethods.basicCard && cardConfiguration && cardConfiguration.supportedCardTypes.length > 0) {
supportedPaymentMethods.basicCard = {
supportedMethods: 'basic-card',
data: {
supportedNetworks: cardConfiguration.supportedCardTypes.reduce(function (types, cardType) {
if (cardType in CARD_TYPE_MAPPINGS) {
types.push(CARD_TYPE_MAPPINGS[cardType]);
}
* @classdesc This class represents a Drop-in component, that will create a pre-made UI for accepting cards and PayPal on your page. Instances of this class have methods for requesting a payment method and subscribing to events. For more information, see the [Drop-in guide](https://developers.braintreepayments.com/guides/drop-in/javascript/v3) in the Braintree Developer Docs. To be used in conjunction with the [Braintree Server SDKs](https://developers.braintreepayments.com/start/hello-server/).
*/
function Dropin(options) {
this._client = options.client;
this._componentID = uuid();
this._dropinWrapper = document.createElement('div');
this._dropinWrapper.id = 'braintree--dropin__' + this._componentID;
this._dropinWrapper.setAttribute('data-braintree-id', 'wrapper');
this._dropinWrapper.style.display = 'none';
this._dropinWrapper.className = 'braintree-loading';
this._merchantConfiguration = options.merchantConfiguration;
EventEmitter.call(this);
}
EventEmitter.createChild(Dropin);
Dropin.prototype._initialize = function (callback) {
var localizedStrings, localizedHTML;
var self = this;
var container = self._merchantConfiguration.container || self._merchantConfiguration.selector;
self._injectStylesheet();
if (!container) {
analytics.sendEvent(self._client, 'configuration-error');
callback(new DropinError('options.container is required.'));
return;
} else if (self._merchantConfiguration.container && self._merchantConfiguration.selector) {
analytics.sendEvent(self._client, 'configuration-error');
callback(new DropinError('Must only have one options.selector or options.container.'));
*
* **Note**: 3D Secure 2.0 is documented below and will become the default integration method in a future version of Braintree-web. Until then, version 1.0 will continue to be supported. To view 3D Secure 1.0 documentation, look at Braintree-web documentation from version [3.40.0](https://braintree.github.io/braintree-web/3.40.0/ThreeDSecure.html) and earlier, or upgrade your integration by referring to the [3D Secure 2.0 adoption guide](https://developers.braintreepayments.com/guides/3d-secure/migration/javascript/v3).
*/
function ThreeDSecure(options) {
var self = this;
var Framework = FRAMEWORKS[options.framework];
EventEmitter.call(this);
this._framework = new Framework(options);
this._framework.setUpEventListeners(function () {
self._emit.apply(self, arguments);
});
}
EventEmitter.createChild(ThreeDSecure);
/**
* Launch the 3D Secure login flow, returning a nonce payload.
*
* @public
* @param {object} options Options for card verification.
* @param {string} options.nonce The nonce representing the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.nonce`.
* @param {string} options.bin The numeric Bank Identification Number (bin) of the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.details.bin`.
* @param {string} options.amount The amount of the transaction in the current merchant account's currency. This must be expressed in numbers with an optional decimal (using `.`) and precision up to the hundredths place. For example, if you're processing a transaction for 1.234,56 € then `amount` should be `1234.56`.
* @param {boolean} [options.challengeRequested] If set to true, an authentication challenge will be forced if possible.
* @param {boolean} [options.exemptionRequested] If set to true, an exemption to the authentication challenge will be requested.
* @param {function} [options.onLookupComplete] *Deprecated:* Use {@link ThreeDSecure#event:lookup-complete|`threeDSecureInstance.on('lookup-complete')`} instead. Function to execute when lookup completes. The first argument, `data`, is a {@link ThreeDSecure~verificationData|verificationData} object, and the second argument, `next`, is a callback. `next` must be called to continue.
* @param {string} [options.email] The email used for verification.
* @param {string} [options.mobilePhoneNumber] The mobile phone number used for verification. Only numbers; remove dashes, parenthesis and other characters.
* @param {object} [options.billingAddress] An {@link ThreeDSecure~billingAddress|billingAddress} object for verification.
* @param {object} [options.additionalInformation] An {@link ThreeDSecure~additionalInformation|additionalInformation} object for verification.
function DropinModel(options) {
this.componentID = options.componentID;
this.merchantConfiguration = options.merchantConfiguration;
this.isGuestCheckout = isGuestCheckout(options.client);
this.dependenciesInitializing = 0;
this.dependencySuccessCount = 0;
this.failedDependencies = {};
this._options = options;
this._setupComplete = false;
EventEmitter.call(this);
}
EventEmitter.createChild(DropinModel);
DropinModel.prototype.initialize = function () {
var self = this;
return vaultManager.create({
client: self._options.client
}).then(function (vaultManagerInstance) {
self._vaultManager = vaultManagerInstance;
return getSupportedPaymentOptions(self._options);
}).then(function (paymentOptions) {
self.supportedPaymentOptions = paymentOptions;
return self.getVaultedPaymentMethods();
}).then(function (paymentMethods) {
self._paymentMethods = paymentMethods;