UNPKG

52.7 kBMarkdownView Raw
1CHANGELOG
2=========
3
4## 3.74.0
5* PayPal Checkout
6 * Default `intent` parameter to `authorize` in `loadPayPalSDK` when using `vault: true` to eliminate console error about using `tokenize` for intent (#544)
7 * Fix issue where dispatch frame would not get cleaned up when calling `teardown` (#555)
8* Local Payments
9 * Add `bic` property to `options` parameter for iDEAL transactions
10 * Update default size of window to 1282 X 720
11 * Allow height and width of the window to be specified with `windowOptions.height` and `windowOptions.width` when calling `startPayment`
12
13## 3.73.1
14* Update framebus to v5.1.2
15 * Fix issue where components dependent on framebus (Hosted Fields, PayPal, etc) would not load in IE11 (#554)
16
17## 3.73.0
18* Venmo
19 * Add `cancelTokenization` for programatic cancelation of the `tokenize` flow
20 * Fix issue where venmo component may not yet be ready when beginning tokenization
21 * Fix issue where Venmo would fail when embedded in an iframe
22
23## 3.72.0
24* 3D Secure
25 * Add `accountType` param to `verifyCard`
26
27## 3.71.1
28* Update framebus to v5.1.0
29* Data Collector
30 * Fix issue where sandbox environment was not set for Advanced Fraud Protection
31
32## 3.71.0
33* Update promise-polyfill to v8.2.0
34* Update credit-card-type to v9.1.0
35* Hosted Fields
36 * Fix issue where card number would present as invalid when autofilled from cardholder name field (#547)
37 * Allow maxlength field to be greater than 10 for postal code inputs (#551)
38
39## 3.70.0
40* Local Payments
41 * Add `paymentTypeCountryCode` as supported field when starting a local payment
42
43## 3.69.0
44* Update @braintree/browser-detection to v1.11.0
45* Update @braintree/extended-promise to v0.4.1
46* Update framebus to v5.0.0
47* Hosted Fields
48 * Fix issue where multiple Hosted Fields instances would issue warnings in the console about duplicate ids (closes #533)
49* PayPal Checkout
50 * Support displaying a customer's vaulted PayPal account when rendering the PayPal SDK using `options.autoSetDataUserIdToken` in the create call
51
52## 3.68.0
53* Update framebus to v4.0.4
54* Apple Pay
55 * Support Maestro cards
56* Hosted Fields
57 * Support `text-align` style
58* PayPal Checkout
59 * Fix issue in `loadPayPalSDK` where PayPal SDK should have been loaded in the head of the document instead of the body to allow re-loading the SDK dynamically
60
61## 3.67.0
62* Update @braintree/sanitize-url to v5.0.0
63* Client
64 * Provide `CLIENT_AUTHORIZATION_INVALID` error when client token has expired or a tokenization key has been deactivated or deleted
65* Venmo
66 * Add `allowWebviews` configuration to `isBrowserSupported`
67
68## 3.66.0
69* Hosted Fields
70 * Fix issue where cardholder name field would present a number keyboard on iOS devices (closes #523)
71 * Fix issue where incorrect keyboard would be used for mobile devices that do not support input formatting
72 * Fix issue where autocomplete cannot run multiple times (closes #479)
73 * Add autofill handling for every hosted field (closes #480)
74* PayPal Checkout
75 * In sandbox, use client id found in merchant configuration for `loadPayPalSDK` instead of always using `sb`
76 * Allow data attributes to be passed to `loadPayPalSDK`
77 * Fix issue when tokenizing during `requestBillingAgreement: true` flows
78 * Fix issue where `intent` used in `createPayment` was not passed to `tokenizePayment` in PayPal JS SDK
79* Venmo
80 * Remove use of `global` (use `window` instead for better compatibility)
81* 3D Secure
82 * Add `authentication-modal-render` and `authentication-modal-close` events
83
84## 3.65.0
85* Update @braintree/event-emitter to v0.4.1
86* Update card-validator to v8.1.0
87* Update restricted-input to v3.0.3
88* Hosted Fields
89 * Allow setting `margin-top`, `margin-right`, `margin-bottom`, `margin-left` in styles (#513)
90 * Allow setting `padding-top`, `padding-right`, `padding-bottom`, `padding-left` in styles (#513)
91 * Fix issue where autofilling with a Google Pay card while using `maskInput` would fail to fill the card number
92 * Fix issue where fields in shadow DOM would have incorrect high compared to container
93 * Add `cardholderName` as supported field
94 * Add `cardholderName` as a field in the tokenization payload
95* PayPal Checkout
96 * Add `requestBillingAgreement` and `billingAgreementDetails` to createPayment
97* 3D Secure
98 * Add event for when a customer cancels the verification
99 * Add `rawCardinalSDKVerificationData` to `verifyCard` payload
100
101## 3.64.2
102* Update inject-stylesheet to v4.0.0
103* Hosted Fields
104 * Fix issue where inputs would not load if `-moz` attributes are used in Google Chrome (#516)
105 * Fix issue where `preventAutofill` did not work in the Chrome browser
106
107## 3.64.1
108* Update restricted-input to v3.0.2
109
110## 3.64.0
111* Use @braintree/uuid for uuid generation
112* Update @braintree/browser-detection to v1.10.0
113* Update card-validator to v8.0.0
114* Update credit-card-type to v9.0.1
115* Update iframer to v1.1.0
116* Update inject-stylesheet to v3.0.0
117* Update restricted-input to v3.0.1
118* Update @braintree/asset-loader to v0.4.4
119* Update @braintree/class-list to v0.2.0
120* Update @braintree/event-emitter to v0.4.0
121* Update @braintree/extended-promise to v0.4.0
122* Update @braintree/sanitize-url to v4.1.1
123* Update @braintree/wrap-promise to v2.1.0
124* Hosted Fields
125 * Allow internal labels to be configured for localization with `internalLabel` field property
126 * Mark hidden inputs inside iframe (used to support autofill capabilities in browsers) with `aria-hidden`
127 * Fix issue where autofill would not function in Chrome for iOS (closes #491)
128 * Allow opt out of credit card autofill with `preventAutofill` option
129 * Support web components (closes #495)
130
131## 3.63.0
132* Update framebus to v4.0.2 (fixes #504)
133* Update restricted-input to v2.1.1
134* Update @braintree/extended-promise to v0.3.1
135* Use `window` instead of `global` in source code (closes #401)
136* PayPal Checkout
137 * Add `loadPayPalSDK` method to dynamically load the v5 PayPal SDK
138
139## 3.62.2
140* Update framebus to v4.0.1
141
142## 3.62.1
143* Google Pay
144 * Fix issue where PayPal via Google Pay would not be enabled for eligible merchants
145
146## 3.62.0
147* Venmo
148 * Fix issue where a single page app's router may disrupt the Venmo tokenization
149 * Add `ignoreHistoryChanges` to create options
150 * Fix issue where Android webviews could not app switch correctly
151
152## 3.61.0
153* Update sanitize-url to v4.0.1
154* Google Pay
155 * Add `bin` to GooglePayment `tokenizedPayload`
156
157## 3.60.0
158* Apple Pay
159 * Add `useDeferredClient` option when creating instance
160 * `createPaymentRequest` will return a promise if instantiated with `useDeferredClient` and `authorization` instead of a client
161* Google Pay
162 * Add `useDeferredClient` option when creating instance
163 * `createPaymentDataRequest` will return a promise if instantiated with `useDeferredClient` and `authorization` instead of a client
164* PayPal Checkout
165 * Added `cobrandedCardLabel` to the `tokenizePayment` response
166* 3D Secure
167 * Update to use deferred client
168* Venmo
169 * Update to use deferred client
170* Vault Manager
171 * Update to use deferred client
172
173## 3.59.0
174* Data Collector
175 * Add `useDeferredClient` option when creating instance
176 * Add `getDeviceData` method to get device data asynchronously
177* Hosted Fields
178 * add `getChallenges` method
179 * add `getSupportedCardTypes` method
180* PayPal Checkout
181 * Provide way to opt-out of auto-vaulting behavior
182 * Add `getClientId` method
183
184## 3.58.0
185* Update `@braintree/extended-promise` to v0.3.0
186* Data Collector
187 * Hide Kount iframe from screen readers (#484 thanks @iamstratos)
188* Hosted Fields
189 * Fixes issue where React frameworks could not pass DOM nodes in as `container` in `fields` (#487)
190* Venmo
191 * Fix issue where webview integrations could not tokenize
192 * Add `processResultsDelay` configuration to `tokenize`
193
194## 3.57.0
195* 3D Secure
196 * Fix issue where cardinal sdk options were not being used
197 * Falls back to a v1 flow if v2 SDK setup fails
198
199## 3.56.0
200* 3D Secure
201 * Add `cardinalSDKConfig` option to `create` method. Supported properties:
202 * `timeout`
203 * `maxRequestRetries`
204 * `logging`
205 * `payment.displayLoading`
206 * `payment.displayExitButton`
207* Venmo
208 * Use `hashchange` event listener to detect when Venmo tokenization has completed
209
210## 3.55.0
211* Fix issue where not passing in an `authorization` to components would throw a misleading error
212* Update restricted-input to v2.1.0
213* Client
214 * Retry failed connections to Braintree Gateway due to TCP Preconnect errors in all browsers
215* Google Pay
216 * Add support for `isNetworkTokenized` param in `parseResponse` method
217* Hosted Fields
218 * Fix issue where pasting a card number over an Amex number could cut off the last digit
219* PayPal Checkout
220 * Added support for shipping_options
221 * Add `vaultInitiatedCheckoutPaymentMethodToken` parameter to `createPayment`
222
223## 3.54.2
224* Update @braintree/sanitize-url to v4.0.0
225* Client
226 * Fix issue where client may emit an uncaught exception error in the console for an invalid authorization (fixes #465)
227* Local Payments
228 * Fix issue where callback could not be used in Mobile fallback flow
229
230## 3.54.1
231* Venmo
232 * Fix issue where params may be malformed upon tokenization
233
234## 3.54.0
235* 3D Secure
236 * Add `2-bootstrap3-modal` as a `version` option
237 * Add `2-inline-iframe` as a `version` option
238 * Fix issue where billing address information was not being sent to lookup if no additional information was sent
239
240## 3.53.0
241* Update `@braintree/browser-detection` to v1.9.0
242* Hosted Fields
243 * Pass back new regulation environments dynamically as they become available
244 * Fix issue where Firefox would require two shift-tabs to navigate away from a field
245 * Fix issue where IE9-11 could not tab correctly
246* 3D Secure
247 * Allow raw string to be passed into `initializeChallengeWithLookupResponse` method
248 * Deprecate `onLookupComplete` param in `verifyCard` in favor of setting a listener for `lookup-complete`
249 * Add `requiresUserAuthentication` param to lookup data in `onLookupComplete` callback
250 * Fix issue where `initializeChallengeFrameWithLookupResponse` would error if called too quickly after creation
251
252## 3.52.1
253* Update credit-card-type to v8.3.0
254* Hosted Fields
255 * Software keyboards can now navigate hosted fields even when they're interspersed with merchant fields
256 * Fix bug on desktop where fields could not navigate between fields with native inputs between the hosted fields
257 * Fix issue where regulation environment information was not parsed correctly
258
259## 3.52.0
260* Update event-emitter to v0.3.0
261* Hosted Fields
262 * Add `margin` to allowed CSS rules (closes #449)
263* 3D Secure
264 * Fix issue where `bin` was not being passed along to Cardinal SDK
265
266## 3.51.0
267* Hosted Fields
268 * Add `authenticationInsight` option to tokenization
269 * Fix issue where validation errors without field errors could cause a syntax error
270* 3D Secure
271 * Enable `cancelVerifyCard` method for 3D Secure version 2 integrations
272 * Update songbird.js script urls
273
274## 3.50.1
275* Update restricted-input to v2.0.2
276* Update browser-detection to v1.8.0
277* 3D Secure
278 * Fix issue where an error may be thrown when cancelling the 3D Secure flow
279 * Add better handling for lookup errors
280 * Fix issue where component would throw an error when creating a 3ds component without a Cardinal Authentication JWT
281* Google Pay
282 * Fix issue where Google Pay would error in Edge (#446)
283* Hosted Fields
284 * Fix issue where chrome books could not input correctly with a soft keyboard
285
286## 3.50.0
287* Hosted Fields
288 * Add `expirationMonth` and `expirationYear` to tokenization payload
289
290## 3.49.0
291* Hosted Fields
292 * Add `binAvailable` event
293* 3D Secure
294 * Add `threeDSecureInfo` to the `verifyCard` response
295
296## 3.48.0
297* Us Bank Account
298 * Bring out of Beta into General Availability
299
300## 3.47.0
301* Update `asset-loader` to v0.3.1
302* Update `event-emitter` to v0.2.0
303* Data Collector
304 * Pass back invalid options error at beginning of data collector setup
305* Hosted Fields
306 * Add `container` param for field, to pass in CSS selector or a DOM node as field container
307 * Make `selector` param an alias for `container`
308 * Add `off` method for unsubscribing from events without tearing down
309 * Add `setMonthOptions` method to dynamically update options for expiration month's configured as select elements (#393)
310* 3D Secure
311 * Add 3DS version 2 support
312 * Deprecate version 1 flow
313* UnionPay
314 * Fix issue where calling `fetchCapabilities` twice in quick succession causes the subsequent requests to not fire (#441)
315
316## 3.46.0
317* Update restricted-input to v2.0.1
318* Update inject-stylesheet to v2.0.0
319* Add `title` and `aria-hidden` attributes to iframes created within `frameService` for accessibility (#434, thanks @TomPridham)
320* Hosted Fields
321 * Add configuration to validate specific card brands, overriding merchant control panel settings
322
323## 3.45.0
324* Update @braintree/wrap-promise to v2.0.0 - errors thrown inside developer supplied callback functions will log to the console
325* Update restricted-input to v2.0.0
326* Google Pay
327 * Throw an error if an unsupported version of Google Pay API is used
328 * Use GooglePayment PayPal client ID
329* Hosted Fields
330 * Allow specifying only a subset of fields to be validated and tokenized
331 * Fix issue where Chrome iOS autofill would not fill in full card number
332* Local Payments
333 * Update endpoint for creating local payments
334
335## 3.44.2
336* Update @braintree/sanitize-url to v3.1.0
337* Google Pay
338 * Fix issue where tokenization details for Google Payments could accidentally be dropped
339* Masterpass
340 * Fix issue with invalid callback url
341* PayPal Checkout
342 * Fix bug where merchant account id was not being applied in vault flows
343
344## 3.44.1
345* Hosted Fields
346 * Fix issue tabbing between fields on mobile devices
347 * Update credit-card-type to v8.2.0, fixes an issue where UnionPay cards of lengths 14 or 15 were not marked as valid
348* Local Payment
349 * Fix typo where the fallback scenario could not succesfully tokenize
350
351## 3.44.0
352* Data Collector
353 * Fix issue where PayPal data collection could not teardown all scripts
354 * Fix issue where PayPal data collection would not setup correctly when initialized more than once
355 * Speed up PayPal data collection setup when initialized more than once
356* Local Payment
357 * Fix issue where fallback URL was not decoded correctly
358
359## 3.43.0
360* Update credit-card-type to v8.1.0
361* Client
362 * Add bin to credit card tokenization payload
363* Hosted Fields
364 * Add bin to credit card tokenization payload
365* Payment Request
366 * Add bin to credit card tokenization payload
367* PayPal Checkout
368 * Update component for compatibility with https://www.paypal.com/sdk/js
369
370## 3.42.0
371* Update @braintree/sanitize-url to v3.0.0
372* Hosted Fields
373 * Fixes issue where inputs would not focus after initial touch event on iOS Safari (#405, thanks @lgodziejewski)
374 * Allow `maxCardLength` in `number` field
375 * Fix issue where UnionPay cards were not checked for luhn validity
376* PayPal Checkout
377 * When passing in `authorization` instead of a `client` in component creation, the client will be created in the background (improves loading time)
378* Payment Request
379 * Add canMakePayment method
380
381## 3.41.0
382* Add Local Payments component
383* PayPal Checkout
384 * Add support for `lineItems`
385* Payment Request
386 * Support Google Pay v2
387 * Support PayPal in Google Pay
388
389## 3.40.0
390* Update framebus to v3.0.2
391* 3D Secure
392 * Allow creating component with an `authorization` instead of a `client`
393* American Express
394 * Allow creating component with an `authorization` instead of a `client`
395* Apple Pay
396 * Allow creating component with an `authorization` instead of a `client`
397* Data Collector
398 * Allow creating component with an `authorization` instead of a `client`
399* Google Payment
400 * Allow Google Pay Version 2 requests
401 * Allow direct tokenization of PayPal accounts
402 * Allow creating component with an `authorization` instead of a `client`
403* Hosted Fields
404 * Allow creating component with an `authorization` instead of a `client` (added in v3.38.1, documented in v3.40.0)
405* Masterpass
406 * Allow creating component with an `authorization` instead of a `client`
407* Payment Request
408 * Allow creating component with an `authorization` instead of a `client`
409* PayPal
410 * Allow creating component with an `authorization` instead of a `client`
411* PayPal Checkout
412 * Fix issue where `merchantAccountId` option could not be used when the default Merchant Account did not have PayPal enabled
413 * Allow creating component with an `authorization` instead of a `client`
414* UnionPay
415 * Allow creating component with an `authorization` instead of a `client`
416* US Bank Account
417 * Allow creating component with an `authorization` instead of a `client`
418* Vault Manager
419 * Allow creating component with an `authorization` instead of a `client`
420* Venmo
421 * Fix issue where url may be overwritten when a hash is not present #394 (thanks @arettberg)
422 * Add `deepLinkReturnUrl` to `venmo.create`
423 * Allow creating component with an `authorization` instead of a `client`
424* Visa Checkout
425 * Allow creating component with an `authorization` instead of a `client`
426
427## 3.39.0
428* PayPal Checkout
429 * Add `merchantAccountId` to PayPal `options`
430* Update promise-polyfill to v8.1.0
431* Use @braintree/class-list for manipulating classes
432* Use @braintree/asset-loader for loading assets
433* Client
434 * Speed up client creation caching and prevent race conditions
435* Hosted Fields
436 * Fix issue where analytics in iframe could be out of sync with analytics on merchant page
437
438## 3.38.1
439* Update credit-card-type to v8.0.0
440* Update card-validator to v6.0.0
441
442## 3.38.0
443* Hosted Fields
444 * Only accepts Luhn valid UnionPay cards. Previously, non-Luhn valid card numbers were accepted even though they were not supported by Braintree
445* Payment Request
446 * Fix issue where npm browser builds could not load payment request (#388)
447
448## 3.37.0
449* Provide browser compatible files on npm for each component in `dist/browser/component-name.js` (#366)
450* Update credit-card-type to v7.1.0
451* Hosted Fields
452 * Detect if `Mir` credit card is entered
453 * Fix issue where Android text field would be selected when focused after inputting data (#379)
454 * Fix error emitted by Chrome (in verbose logging mode) for not using a passive flag for `touchstart` event
455
456## 3.36.0
457* Update promise-polyfill to v8.0.0
458* Provide browser compatible file on npm in `dist/browser` (#366)
459* Google Pay
460 * Preserve `allowedCardNetworks` from default configuration in `cardRequirements` if not overwritten in `createPaymentDataRequest`
461* Hosted Fields
462 * Add option to reveal last four of credit card number when masking input
463 * Expose error when no field keys are passed into fields object (#355)
464
465## 3.35.0
466* Add title attribute to iframes to improve accessibility for screenreaders (#374)
467* Vault Manager
468 * Expose if fetched payment methods have an associated subscription
469
470## 3.34.1
471* Update credit-card-type to v7.0.0
472* Update card-validator to v5.0.0
473* Client
474 * Fix client cache issue when using teardown
475* Data Collector
476 * Hide 1px Kount iframe
477* Hosted Fields
478 * Fix improper validation on iPad keyboards for expiration date field [#369](https://github.com/braintree/braintree-web/issues/369)
479 * Fix issue where extra history events would be added in Chrome and Firefox
480* Venmo
481 * Add validation for profile ids (must be strings)
482
483## 3.34.0
484* Apple Pay
485 * Fix issue with Apple Pay configuration [#365](https://github.com/braintree/braintree-web/issues/365)
486* Hosted Fields
487 * Include data about the containers for invalid fields in tokenization error (#359)
488 * Fix issue where inputs would not mask in iOS
489* 3D Secure
490 * Fix issue where payment method details were not provided in the flow where an iframe is not needed
491 * Fix issue where description in verify card payload was coming back with `+` symbols instead of spaces
492 * Add binData property to verify card payload
493
494## 3.33.0
495* Internal performance optimizations
496* Update framebus to v3.0.1
497* Update credit-card-type to v6.3.0
498* Hosted Fields
499 * Allow passing in class name for style configuration (#361)
500 * Fix issue where tokenization could not take place because the `window.length` variable had been overwritten
501 * Fix regression where sending card numbers with - or spaces would result in cardType unknown in the payload (#241)
502* Payment Request
503 * Fix issue with changing shipping address and shipping options which could cause Chrome to crash
504
505## 3.32.1
506* Payment Request
507 * Expose errors more gracefully
508* Hosted Fields
509 * Revert fix issue where Roboform could not autofill cards [#356](https://github.com/braintree/braintree-web/issues/356). It was causing an issue where the inputs would be hidden in Safari if their container was changed from `display: none` to `display: block`
510
511## 3.32.0
512* Venmo
513 * Add support for Venmo profile IDs
514* Google Pay is no longer in beta.
515* Masterpass
516 * Fix issue where error would not surface correctly for window being blocked by a popup blocker
517* PayPal
518 * Fix issue where error would not surface correctly for window being blocked by a popup blocker
519* Hosted Fields
520 * Fix issue where autocomplete properties were not applied (closes #353)
521 * Ensure that focus state is maintained when focus is called programatically
522 * Cards that cannot be processed by the merchant can invalidate Hosted Fields by adding a `fields.number.rejectUnsupportedCards` option to the object passed into Hosted Fields `create`. See documentation for adding this property.
523 * Fix issue where Roboform could not autofill cards [#356](https://github.com/braintree/braintree-web/issues/356)
524* PayPal Checkout
525 * Fix error handling around not having a linked PayPal sandbox account
526* 3D Secure
527 * Add support for American Express SafeKey params
528
529## 3.31.0
530* Update credit-card-type to v6.2.0
531* Update card-validator to v4.3.0
532* Venmo
533 * Add browser support detection helper as static method on `braintree.venmo.isBrowserSuppported`
534
535## 3.30.0
536* Update promise-polyfill to v7.0.2 (#350 thanks @Macavity)
537 * Fixes issues with promises not working in IE from v3.28.0-v3.29.0
538* Hosted Fields
539 * Add `padding` to supported CSS attributes (#104)
540
541## 3.29.0
542* Update credit-card-type to v6.1.1
543* Update jsdoc-template to v3.2.0
544* Hosted Fields
545 * Fix issue where some series 2 Mastercard bin ranges were not being detected (internal assets for v3.19.1 forward have this fix applied)
546
547__BREAKING CHANGES__
548
549* Google Pay - Beta
550 * Switch from using iframe based solution to Google pay.js script tag solution
551 * `braintree.googlePayment.isSupported` has been removed
552 * `tokenize` and `createSupportedPaymentMethodsConfiguration` and `on` methods and has been removed. See documentation example for new integration pattern.
553
554## 3.28.1
555* Update @braintree/sanitize-url to v2.1.0
556
557## 3.28.0
558* Update promise-polyfill to v7.0.0
559* American Express
560 * Add missing `teardown` method
561* Apple Pay
562 * Add missing `teardown` method
563* Client
564 * Add missing `teardown` method
565* Google Pay
566 * References to Pay with Google have now been converted to Google Pay in accordance with Google's brand guidelines
567* PayPal Checkout
568 * Add missing `teardown` method
569* Vault Manager
570 * Add missing `teardown` method
571* Venmo
572 * Add missing `teardown` method
573* Visa Checkout
574 * Add missing `teardown` method
575
576__BREAKING CHANGES__
577
578* Google Pay - Beta
579 * Error codes that included `PAY_WITH_GOOGLE` have been updated to `GOOGLE_PAYMENT`
580 * PAYMENT_REQUEST_PAY_WITH_GOOGLE_FAILED_TO_TOKENIZE -> PAYMENT_REQUEST_GOOGLE_PAYMENT_FAILED_TO_TOKENIZE
581 * PAYMENT_REQUEST_PAY_WITH_GOOGLE_PARSING_ERROR -> PAYMENT_REQUEST_GOOGLE_PAYMENT_PARSING_ERROR
582* Payment Request - Beta
583 * Change `payWithGoogle` property to `googlePay` property when instantiating a Payment Request component with `enabledPaymentMethods` option
584
585## 3.27.0
586
587* Update card-validator to v4.2.0
588* Internal performance optimizations
589* Prefer popup bridge before browser supporting popups in frame service (#341, thanks @night)
590* Hosted Fields
591 * Send back timeout error if Hosted Fields takes longer than 60 seconds to set up
592 * Allow locality (the city) to be sent as part of billing address fields
593 * Allow region (the state) to be sent as part of billing address fields
594 * Allow cvv to have minlength be applied when using cvv only integration
595* Masterpass
596 * Throw MASTERPASS_POPUP_FAILED if required params returned by masterpass are missing
597* Payment Request - Beta
598 * Support `requestShipping` option
599* Pay with Google - Beta
600 * Support `requestShipping` option
601
602## 3.26.0
603
604* Hosted Fields
605 * Correct bug where pasting in on an iOS device would mangle the input (https://github.com/braintree/restricted-input/pull/46)
606 * Update credit-card-type to version 6.1.0 (accept JCB cards of length 17-19)
607
608## 3.25.0
609
610* Hosted Fields
611 * Add `setMessage` for screenreader-compatible error messages
612 * Fix issue where autofill would not work in selects with month values 1-9 (##331)
613 * Allow fields to be prefilled with values
614* Payment Request - Beta
615 * Add `lastFour` to tokenize payload
616
617## 3.24.1
618
619* Update credit-card-type to v6.0.0
620* Update card-validator to v4.1.1
621* Hosted Fields
622 * `niceType` for Mastercard will now render as `Mastercard` instead of `MasterCard` to match Mastercard's brand guidelines
623* Pay with Google - Beta
624 * Correct isSupported to only return true on Android Chrome v61 and higher
625
626## 3.24.0
627
628* 3D Secure
629 * Error early in creation if a tokenization key is used for authorization
630 * Add liablity shift info to top level of cancelVerifyCard payload
631* Payment Request - Beta
632 * Add billing address details to tokenization payload
633* Pay with Google - Beta
634 * Apply field to allow tokenization with tokenization key
635 * Properly wrap Pay with Google so callbacks can be used
636
637__BREAKING CHANGES__
638
639* Payment Request and Pay with Google - Beta
640 * Some non-essential fields from tokenize payload removed
641
642## 3.23.0
643
644* Add beta Pay with Google Component
645* Add beta Payment Request Component
646* Update sanitize-url to version 2.0.2
647* Update restricted-input to version 1.2.6
648* Data Collector
649 * Update sjcl to 1.0.7
650 * Provide raw device data object as `instance.rawDeviceData`
651* Hosted Fields
652 * Add `billingAddress.extendedAddress` as a tokenization option
653 * Add `billingAddress.company` as a tokenization option
654 * Add `billingAddress.firstName` as a tokenization option
655 * Add `billingAddress.lastName` as a tokenization option
656* 3D Secure
657 * Allow opting out of bank frame loader
658* Vault Manager
659 * Provide bin data if present
660
661## 3.22.2
662
663* Update sanitize-url to version 2.0.0
664* 3D Secure
665 * Add `liabilityShifted` and `liabilityShiftPossible` to the top level when 3DS lookup fails to open a 3DS iframe.
666* Hosted Fields
667 * Fix issue where inputs would not mask correctly when autofilled
668 * Update credit-card-type to version 5.0.4
669 * Fix issue where placeholder would not load in IE9
670
671## 3.22.1
672
673* Security improvements
674* Data Collector
675 * Fix bug where Data Collector with Kount could not be torn down more than once (#314)
676
677## 3.22.0
678
679* Hosted Fields
680 * Fix regression where postal code input would not display alpha numeric keyboard on iOS
681 * Add bin data to tokenization payload
682 * Add option for input masking
683
684## 3.21.1
685
686* Hosted Fields
687 * Fix regression where iframes could not load on IE 9 and 10
688
689## 3.21.0
690
691* Hosted Fields
692 * Fix issue where phone number keyboard would display on iOS devices
693 * Allow passing `countryName`, `countryCodeAlpha2`, `countryCodeAlpha3`, and `countryCodeNumeric` under `billingAddress` as a tokenization option
694 * Fix issue where Apple based browsers (Safari, iOS Chrome, iOS Firefox, etc) would add multiple history states when Hosted Fields loads
695
696## 3.20.1
697
698* Update browser-detection to v1.6.0
699* Hosted Fields
700 * Fix issue where field would not blur on iOS when tapping out of the Hosted Fields inputs
701* PayPal
702 * Fix issue in iOS Firefox where PayPal window would not open
703
704## 3.20.0
705
706* Client
707 * Add request retries for TCP preconnect errors in Internet Explorer and Edge
708* Hosted Fields
709 * Update restricted-input to version 1.2.5
710 * Fix bug where placeholder would be set to null after autocomplete fires if no placeholder was set
711 * Allow passing `streetAddress` under `billingAddress` as a tokenization option
712 * Fix issue where Hosted Fields would not load intermittently in Edge and IE11
713 * Fix issue where Hosted Fields validity would not update after paste events (#308)
714
715## 3.19.1
716
717* Client
718 * Cache client creation when using the same authorization
719* Hosted Fields
720 * Update credit-card-type to v5.0.3 to fix a bug where certain MasterCard bins were not being marked as potentially valid
721* Inline JS in HTML frames
722
723## 3.19.0
724
725* Hosted Fields
726 * Allow `cardholderName` to be passed while tokenizing the card
727 * Fix bug disabling fields when enter is pressed
728
729## 3.18.0
730
731* Hosted Fields
732 * Fix autofill issues for Chrome and Safari (#239)
733
734## 3.17.0
735
736* Hosted Fields
737 * Add `minlength` to fields options to set the `minlength` of postal code inputs
738 * Update credit-card-type dependency (UnionPay detection fixes)
739 * Update restricted-input dependency to 1.2.1 (Browser Detection updates)
740* PayPal
741 * Frame fixes in iOS
742
743## 3.16.0
744
745* Client
746 * Access version with `getVersion()`
747* Hosted Fields
748 * Fix bug where inputs would not load intermittently on old browsers (#233)
749 * Typing `1/` in an expiration date field will now result in `01 / ` formatting (#221)
750 * Fix bug where certain webviews would cause inputs to be untypable after tapping a second time (#207)
751* Masterpass
752 * Enable Masterpass as a payment option
753* PayPal
754 * Mark PayPal component as deprecated in favor of using PayPal Checkout
755
756## 3.15.0
757
758* Hosted Fields
759 * Fix bug where expiration dates using select boxes would print an error when selected on mobile devices
760 * Fix a bug where Android Webviews on KitKat could not enter more than 4 characters in inputs
761 * Add supportsInputFormatting method to check if browser will support input formatting
762* Data Collector
763 * Cache and reuse device data when created multiple times with the same Kount merchant id
764 * Fix issue where Kount data was not collected by additional Data Collector instances
765
766## 3.14.0
767
768* American Express
769 * `americanExpress.create` returns a promise if no callback is provided
770 * `americanExpress.getRewardsBalance` returns a promise if no callback is provided
771 * `americanExpress.getExpressCheckoutProfile` returns a promise if no callback is provided
772* Apple Pay
773 * `applePay.create` returns a promise if no callback is provided
774 * `applePay.performValidation` returns a promise if no callback is provided
775 * `applePay.tokenize` returns a promise if no callback is provided
776* Hosted Fields
777 * `hostedFields.tokenize` returns a promise if no callback is provided
778 * `hostedFields.addClass` returns a promise if no callback is provided
779 * `hostedFields.removeClass` returns a promise if no callback is provided
780 * `hostedFields.setAttribute` returns a promise if no callback is provided
781 * `hostedFields.removeAttribute` returns a promise if no callback is provided
782 * `hostedFields.setPlaceholder` returns a promise if no callback is provided
783 * `hostedFields.clear` returns a promise if no callback is provided
784 * `hostedFields.focus` returns a promise if no callback is provided
785* PayPal
786 * Add support for PayPal Credit in Vault flow
787 * `paypal.create` returns a promise if no callback is provided
788 * `paypal.tokenize` returns a promise if no callback is provided
789 * `paypal.teardown` returns a promise if no callback is provided
790 * `paypal.closeWindow` closes the PayPal window if open
791 * `paypal.focusWindow` focuses the PayPal window if open
792* PayPal Checkout
793 * Add support for PayPal Credit in Vault flow
794* 3D Secure
795 * `threeDSecure.create` returns a promise if no callback is provided
796 * `threeDSecure.verifyCard` returns a promise if no callback is provided
797 * `threeDSecure.cancelVerifyCard` returns a promise if no callback is provided
798 * `threeDSecure.teardown` returns a promise if no callback is provided
799* Union Pay
800 * `unionPay.create` returns a promise if no callback is provided
801 * `unionPay.enroll` returns a promise if no callback is provided
802 * `unionPay.fetchCapabilities` returns a promise if no callback is provided
803 * `unionPay.teardown` returns a promise if no callback is provided
804 * `unionPay.tokenize` returns a promise if no callback is provided
805* Visa Checkout
806 * `visaCheckout.create` returns a promise if no callback is provided
807 * `visaCheckout.tokenize` returns a promise if no callback is provided
808
809## 3.13.0
810
811* Hosted Fields
812 * Fix an issue where Firefox did not receive focus/blur events consistently when navigating fields via tab key
813 * Provide specific errors for problems with tokenization
814 * Add `focus` to allow programmatic focusing of inputs
815 * Add `maxlength` to fields options to set the `maxlength` of CVV and postal code inputs. Use cases:
816 * Limiting the length of the CVV input for CVV-only verifications when the card type is known
817 * Limiting the length of the postal code input when cards are coming from a known region
818
819## 3.12.1
820
821* PayPal
822 * Fix bug where PayPal did not detect when the Popup was closed by the customer
823
824## 3.12.0
825
826* Client
827 * Fix a bug where `atob` was not being called with the window context
828* Hosted Fields
829 * Add support for `appearance` CSS rule
830* PayPal
831 * Fix support issues
832* Visa Checkout
833 * Add Visa Checkout component
834
835## 3.11.1
836
837* Client
838 * Fix a bug where errors within the request callback function were being caught by the request promise instead of bubbling up
839* PayPal Checkout
840 * Allow tokenization keys to use the `vault` flow
841
842## 3.11.0
843
844* Hosted Fields
845 * `hostedFields.create` now returns a promise if no callback is provided
846 * `hostedFields.tokenize` now returns a promise if no callback is provided
847* PayPal Checkout
848 * Enable webview support
849 * `intent` property is now passed in correctly
850* Vault Manager
851 * Create the Vault Manager component
852
853## 3.10.0
854
855* Client
856 * Fix bug where creation errors did not bubble up correctly
857* Data Collector
858 * Fix bug where creation errors did not bubble up correctly
859* Hosted Fields
860 * Add `removeAttribute` to allow removal of certain input attributes
861 * Add RTL language support
862* PayPal
863 * Add synchronous method to determine if PayPal supports the browser
864* PayPal Checkout
865 * Add synchronous method to determine if PayPal Checkout supports the browser
866 * Fix bug that caused some errors to be uncatchable
867 * Add `landingPageType` as a tokenization option
868 * `login` - A PayPal account login landing page is used
869 * `billing` - A non-PayPal account landing page is used
870 * Provide error when PayPal Checkout can not be used because there is no linked PayPal Sandbox account
871
872## 3.9.0
873
874* Client
875 * `client.request` now returns a promise if no callback is provided.
876 * `client.create` now returns a promise if no callback is provided
877* Data Collector
878 * `dataCollector.create` now returns a promise if no callback is provided
879 * `dataCollectorInstance.teardown` now returns a promise if no callback is provided
880* Hosted Fields
881 * Fix bug where some versions of IE could not render Hosted Fields inputs because of `window.top` being undefined
882 * Fix autofill for 1Password extensions
883 * Correct detection of Samsung browsers to disable input formatting in old versions
884 * Allow passing `postalCode` as an option when the `postalCode` field is not enabled
885* PayPal
886 * Add `landingPageType` as a tokenization option
887 * `login` - A PayPal account login landing page is used
888 * `billing` - A non-PayPal account landing page is used
889 * Add support for PopupBridge
890* PayPal Checkout
891 * Pass in correlation id from billing agreement token or ec token when tokenizing
892
893## 3.8.0
894
895* Pre-bundled files are now published to npm, fixing parsing errors when using webpack
896* Hosted Fields
897 * Fix a bug where Mobile Safari would not emit blur events consistently
898 * Add support for new Visa card numbers with 18 or 19 digits
899 * Add `setAttribute` to allow dynamic updating of input attributes
900 * Validate `setPlaceholder` to accept only strings and numbers
901* 3D Secure
902 * HTTPS is no longer required for sandbox environments
903* PayPal Checkout
904 * Return PayPal Credit financing details when calling `tokenizePayment`
905* American Express
906 * Fix bug where arguments to `getRewardsBalance` were mutated
907* PayPal
908 * Call callback with BROWSER_NOT_SUPPORTED error when using Chrome for iOS v47 or lower
909
910## 3.7.0
911
912* Client
913 * Fix issue where `getConfiguration` and `toJSON` were not returning the same object
914* Hosted Fields
915 * Fix a bug when placeholders aren't supplied for expiration month/year
916 * Fix a bug where CVV field wouldn't validate all possible card type CVV lengths
917 * Fix a bug where Samsung keyboards would incorrectly highlight the first character typed
918 * Disable input formatting in the Android Samsung Internet browser
919* PayPal
920 * Return PayPal Credit financing details in `tokenizePayload.creditFinancingOffered`
921* PayPal Checkout
922 * Create the PayPal Checkout component to integrate with PayPal's [checkout.js library](https://github.com/paypal/paypal-checkout)
923
924## 3.6.3
925
926* Hosted Fields
927 * Fix bug where Samsung Keyboards would format incorrectly in Android Chrome
928
929## 3.6.2
930
931* American Express
932 * Fix bug where additional options were not passed along in getRewardsBalance request
933* Hosted Fields
934 * Fix a bug where unformatted inputs could not tokenize card numbers with hyphens or spaces
935 * Fix a bug where postal codes of length 3 (e.g. in Iceland) were considered invalid
936 * Fix input formatting with third party keyboards on Android Chrome
937
938## 3.6.1
939
940* Hosted Fields
941 * Fix a bug where iOS Safari autocomplete would not print credit card number
942* PayPal
943 * Fix bug where the PayPal authorization flow began when the `flow` option was missing or invalid
944* 3D Secure
945 * Fix bug where failing `verifyCard` call put component in an inconsistent state
946
947## 3.6.0
948
949* Data Collector
950 * Fix iframe styling in PayPal fraud tools
951* Hosted Fields
952 * Add support for `letter-spacing` CSS property
953 * Fix a bug where Safari autocomplete would mangle credit card input
954* PayPal
955 * Return a `MERCHANT` error when `tokenize` is called outside of a user action event
956 * Show loading indicator in popup when a successful authorization is being processed and tokenized
957
958## 3.5.0
959
960* Hosted Fields
961 * Add dropdown support for expiration month and expiration year
962
963## 3.4.0
964
965* Client
966 * More helpful error when a client token is generated with insufficient privileges
967* Hosted Fields
968 * Fix a bug where IE9 inputs would stutter when formatting
969 * Enable input formatting on Android
970* Apple Pay
971 * Add support for Apple Pay integrations that are web-only
972* UnionPay
973 * Return a proper error when calling some functions without callbacks
974
975## 3.3.0
976
977* The `index.js` and `debug.js` files are now full `braintree-web` bundles and can be safely loaded in non-CommonJS environments
978* Hosted Fields
979 * Add input formatting to browsers on iOS
980 * Maestro cards beginning with `6` are now correctly identified
981* Data Collector
982 * Use custom build of [SJCL](https://bitwiseshiftleft.github.io/sjcl/) to reduce file size
983
984## 3.2.0
985
986* Hosted Fields
987 * Add `type` property for field configuration to allow things such as `type: "password"` for input masking of particular fields
988 * For browsers that support it, the `month` input type can be used for `expirationDate`
989 * Fix a bug where unformatted `expirationDate` inputs would fail validation if user typed in a space, hyphen or slash
990* PayPal
991 * Utility iframes are now annotated with the `braintree-dispatch-frame` class to assist with CSS targeting
992
993## 3.1.0
994
995* PayPal
996 * Add focus handle to tokenize method
997 * Move a utility iframe far out of view with `position: absolute`
998
999__BREAKING CHANGES__
1000* Apple Pay
1001 * Fix a bug with tokenization parameters—no more workaround required
1002
1003## 3.0.2
1004
1005* Client
1006 * Provide better error messaging when actions that require a client token are attempted with a tokenization key
1007* Hosted Fields
1008 * Pass back client error when attempting to vault with an invalid authorization
1009* UnionPay
1010 * Pass back client error when attempting to vault with an invalid authorization
1011 * Remove vault option from tokenization
1012* Apple Pay
1013 * Add `merchantIdentifier` property for use with `ApplePaySession.canMakePaymentsWithActiveCard`
1014 * Fix a bug where `decoratePaymentRequest` (now called `createPaymentRequest`) failed to set `merchantCapabilities`. The default is now `['supports3DS']`, which is the most commonly used value.
1015
1016__BREAKING CHANGES__
1017* Apple Pay
1018 * `decoratePaymentRequest` has been renamed to `createPaymentRequest`. This method returns a new object and does not mutate the argument
1019 * Return better error messages when Apple Pay merchant domain validation fails
1020 * The error code `APPLE_PAY_MERCHANT_VALIDATION` has been replaced with `APPLE_PAY_MERCHANT_VALIDATION_FAILED` and `APPLE_PAY_MERCHANT_VALIDATION_NETWORK`
1021
1022## 3.0.1
1023
1024* PayPal
1025 * Fix a bug where vault flows that used a tokenization key could not tokenize
1026
1027## 3.0.0
1028
1029* Add prefix to `BraintreeError` codes to prevent namespace collisions
1030* PayPal
1031 * Return a `PAYPAL_POPUP_CLOSED` error code when the customer closes the popup
1032 * Return a `PAYPAL_INVALID_PAYMENT_OPTION` error code when PayPal options are invalid
1033 * Fix a bug where some locale codes were not accepted
1034 * Fix bug where JPY could not be used as PayPal currency
1035 * vault flows will automatically vault PayPal accounts if client token was generated with a customer id
1036* Hosted Fields
1037 * Automatic input formatting disabled for iOS and Android
1038* Apple Pay
1039 * Use error codes
1040* Some wrapped errors were inconsistently placed under the `err.details` property; they are now under `err.details.originalError`
1041* Client
1042 * Errors are now always instances of BraintreeError
1043* UnionPay
1044 * Add `vault` as an option to `tokenize` which allows cards to be vaulted on tokenization
1045
1046## 3.0.0-beta.12
1047
1048* Some error messages have been changed to be more consistent across components
1049* Update `BraintreeError` to include a `code`, which can be used to check for specific errors:
1050
1051 ```
1052 hostedFieldsInstance.tokenize(function (err, payload) {
1053 if (err && err.code === 'FIELDS_EMPTY') {
1054 // Handle user input error
1055 }
1056 });
1057 ```
1058
1059* Fix an incorrect `<script>` tag example in API docs
1060* Fix an error in Require.js API docs
1061* Hosted Fields
1062 * Automatic input formatting disabled for Android Firefox
1063 * Add `vault` as an option to `tokenize` which allows cards to be vaulted on tokenization
1064 * Add `addClass` and `removeClass` for updating classes on fields
1065 * Stop applying `invalid` CSS classes to `potentiallyValid` fields on tokenization attempts
1066* PayPal
1067 * Consistently return `BraintreeError` objects when the PayPal flow is canceled
1068 * Return error during `create` when using a webview
1069* UnionPay
1070 * Add `type` to tokenize payload
1071* Add Apple Pay component.
1072
1073## 3.0.0-beta.11
1074
1075* Update create error messages to be more consistent
1076* Add `type` to Hosted Fields and PayPal tokenize payloads
1077* Hosted Fields
1078 * Add `getState` method that returns the state of all fields and possible card types
1079 * Fixes a regression where expiration dates with a past month within the current year were treated as valid
1080* PayPal
1081 * Add `useraction` option to `paypal.tokenize`
1082
1083__BREAKING CHANGES__
1084* UnionPay improvements.
1085 * Card capabilities
1086 * Renamed `isUnionPayEnrollmentRequired` to `isSupported`.
1087 * When `isSupported` is false, Braintree cannot process UnionPay card. Customer would need to use a different card.
1088 * Enrollment response has `smsCodeRequired` flag.
1089 * If `true`, customer will receive an SMS code, that is required for tokenization.
1090 * If `false`, SMS code should not be passed during tokenization. Tokenization can be done immediately.
1091
1092## 3.0.0-beta.10
1093
1094* Return a human readable error message when requests are rate-limited.
1095* Add 3D Secure component.
1096* Hosted Fields
1097 * Throw an error when initializing with an invalid field key. See __BREAKING CHANGES__.
1098 * The formatting for expiration dates no longer inserts a leading `0` if the date begins with `1`. This prevents the numbers from jumping around for dates beginning `01`, `10`, `11`, or `12`.
1099
1100__BREAKING CHANGES__
1101* An error is now returned when initializing Hosted Fields with an invalid field; it is no longer silently ignored.
1102
1103## 3.0.0-beta.9
1104
1105* No longer throws exceptions when using `require('braintree-web')` during server-side rendering with libraries such as React.js.
1106* `index.js` and `debug.js` in the npm/bower modules no longer reference `package.json`.
1107* Ajax errors in IE9 now report as general error instead of an empty string. It is impossible to get details additional about network errors in IE9 XDomainRequests.
1108* Add 3D Secure component
1109* UnionPay
1110 * Expiration date or month/year together are now optional as some UnionPay cards do not have expiration dates.
1111* PayPal
1112 * All `create` options aside from `client` have now moved to `tokenize`. See __BREAKING CHANGES__.
1113 * For one-time checkout, add `intent` option which can be `sale` or `authorize`
1114 * HTTPS is no longer required
1115 * Add `offerCredit` as an option to `tokenize` for offering customers PayPal Credit as a form of payment
1116
1117__BREAKING CHANGES__
1118* PayPal's `create` options have moved to `tokenize`. Deferring these options to tokenization time allows greater flexibility in your checkout experience.
1119
1120 ```
1121 braintree.paypal.create({
1122 client: clientInstance
1123 }, function (err, paypalInstance) {
1124 paypalInstance.tokenize({
1125 flow: 'checkout',
1126 amount: '10.00',
1127 currency: 'USD'
1128 }, function (tokenizeErr, payload) {
1129 // ...
1130 });
1131 });
1132 ```
1133
1134## 3.0.0-beta.8
1135
1136* Hosted Fields
1137 * Update `card-validator` to `2.2.8`
1138 * Throw a proper error when creating without a callback
1139* UnionPay
1140 * Fix tokenization bugs
1141* Data Collector
1142 * Throw a proper error when creating without a callback
1143* Improved error messaging when two components' versions do not match one another.
1144
1145__BREAKING CHANGES__
1146* Data Collector
1147 * The `create` API has changed. `options.kount` for `dataCollector.create` is now a simple boolean:
1148
1149 ```
1150 dataCollector.create({
1151 client: clientInstance,
1152 kount: true,
1153 paypal: true
1154 }, function (err, collector) {});
1155 ```
1156
1157## 3.0.0-beta.7
1158
1159* Hosted Fields
1160 * Add `inputSubmitRequest` event which is called when the user presses the Enter key (or equivalent) in a Hosted Fields input.
1161
1162__BREAKING CHANGES__
1163* Make all callbacks consistently called asynchronously
1164* Hosted Fields
1165 * The `fieldStateChange` event is now 4 events: `empty`, `notEmpty`, `validityChange`, and `cardTypeChange`
1166 * Change event payloads to always return the full state of the form and all possible card types
1167* Data Collector
1168 * A `client` option is now required
1169
1170## 3.0.0-beta.6
1171
1172* Hosted Fields
1173 * `postalCode` field now has a maximum length of 10 characters
1174 * Fix issues when pasting into fields
1175* UnionPay
1176 * Added support for UnionPay and Hosted Fields
1177 * Updated the API
1178 * Added `teardown` to cleanly destroy a UnionPay instance
1179* PayPal
1180 * Add support for `billingAgreementDescription`
1181
1182__BREAKING CHANGES__
1183* UnionPay
1184 * `fetchCapabilities` now takes `card: {number: '4111'}` instead of `cardNumber: '4111'`
1185 * `enroll` now takes mobile phone data under the `mobile` property instead of the `card` property
1186 * `enroll` now returns a property called `enrollmentId` instead of `unionpayEnrollmentId`
1187 * Removed the `options.options` property from `tokenize`; `smsCode` and `enrollmentId` are now top-level options
1188
1189## 3.0.0-beta.5
1190
1191* Improve documentation of callbacks
1192* Hosted Fields
1193 * Calling methods (such as `tokenize` or `setPlaceholder`) after Hosted Fields has been torn down throws an error
1194* PayPal
1195 * Calling methods (such as `tokenize`) after PayPal has been torn down throws an error
1196* DataCollector
1197 * Throw an error when trying to tear down twice
1198* American Express
1199 * `getRewardsBalance` to get the rewards balance of a Braintree nonce
1200 * `getExpressCheckoutProfile` to get the Express Checkout profile of an Amex nonce
1201* UnionPay
1202 * `fetchCapabilities` to fetch card capabilities, and determine if a card requires enrollment
1203 * `enroll` to process enrollment for a card
1204 * `tokenize` UnionPay cards
1205
1206## 3.0.0-beta.4
1207
1208* Client
1209 * `client` components no longer have a `teardown` function
1210* Hosted Fields
1211 * Add `setPlaceholder` to allow dynamic updating of field placeholders
1212 * Client component version must match Hosted Fields' component version
1213 * Throw `BraintreeError` if tokenize does not include a callback
1214* PayPal
1215 * Bugfixes in teardown
1216 * Client component version must match PayPal's component version
1217 * Make teardown callback optional
1218 * Throw `BraintreeError` if tokenize does not include a callback
1219
1220## 3.0.0-beta.3
1221
1222* npm packaging fixes
1223
1224## 3.0.0-beta.2
1225
1226* Hosted Fields
1227 * Allow expiration dates with leading zeroes when formatting is enabled
1228* PayPal
1229 * Bugfixes
1230
1231__BREAKING CHANGES__
1232* PayPal
1233 * Replace `shippingAddressOverride.editable` with `shippingAddressEditable`, which disables user editing of shipping address when set to false.
1234 * Replace `singleUse` boolean property with `flow` string property. `singleUse: true` is now `flow: 'checkout'`. `flow` is required; use `flow: 'vault'` for Vault flow.
1235
1236| Old | New |
1237| --- | --- |
1238| `singleUse` omitted | `flow: 'vault'` |
1239| `singleUse: false` | `flow: 'vault'` |
1240| `singleUse: true` | `flow: 'checkout'` |
1241
1242## 3.0.0-beta.1
1243
1244This release contains a number of new features for developers and their users, the key benefits are listed below. This is a significant departure from our earlier versions of the JS SDK. It is a composable SDK instead of a collection of pre-defined integration patterns (better for more advanced developers):
1245
1246* Smaller File Size
1247
1248 > Results in faster load times and improves performance of their web applications. A merchant has the choice to control the size by controlling the components they use. To illustrate the implications of this: a merchant who is only using PayPal does not need to include (and subsequently force their users to download) the code for Hosted Fields, DataCollector, etc. if they are not leveraging these features.
1249
1250* Modular Architecture for Advanced Developers
1251
1252 > Rebuilt with a module-first approach. Developers have the choice and control over the specific JS SDK components they’d like to use instead of using the full SDK. The value of this is that it results in a simpler integration and also has been something many advanced developers have requested.
1253
1254* Custom PayPal Button
1255
1256 > Developers have the option to customize the PayPal button that is displayed on their page. We provide only a bindable programmatic handler.
1257
1258* Hosted Fields Formatting
1259
1260 > Many developers who use Hosted Fields have asked us for more robust abilities to format input into the Hosted Fields Form Fields for UX reasons. The new SDK allows fields to be formatted. One example of this is clean spacing between card numbers (4111 1111 1111 1111 instead of 4111111111111111).
1261
1262* No Dependency on Form Submissions
1263
1264 > Traditionally, our SDK has required developers to submit payment information in the context of a form. We no longer require developers to integrate with this pattern. Modern web applications tend to be built with richer client-side functionality (validation, multiple payment options, AJAX submission, etc.). Deferring the mechanics of tokenization to a simple API call in our SDK allows our libraries to be much less intrusive as far as developer experience goes.
1265
1266* CORS Support, as opposed to JSONP
1267
1268 > CORS is a Web Security technology that allows developers tight control over which third party services can be rendered within their web page. This is now the default.
1269
1270* Improved .NET Experience
1271
1272 > .NET developers who use the WebForms Technology have run into many issues with previous versions of our SDK related to competing form submission handling. Since we no longer rely on form submissions, native .NET form handling is left untouched.
1273
1274* Improved Documentation
1275
1276 > By its very nature, this new release is more low-level and less opinionated about contextual integration. This means we can provide an API reference and simpler getting started guides.
1277
1278* Modern distribution
1279
1280 > By focusing on npm and GitHub as release channels the SDK fits better with newer build pipelines and tooling.
1281
1282* Improved error messaging
1283
1284 > Better error handling and presentation everywhere, with clearer error messaging.
1285
\No newline at end of file