@paydock/client-sdk 1.141.0 → 1.143.0-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +85 -0
  2. package/bundles/index.cjs +370 -204
  3. package/bundles/index.cjs.d.ts +535 -481
  4. package/bundles/index.mjs +205 -38
  5. package/bundles/index.mjs.d.ts +535 -481
  6. package/bundles/types/components/apple-pay-version.d.ts +29 -0
  7. package/bundles/types/components/apple-pay-version.d.ts.map +1 -0
  8. package/bundles/types/index.d.ts +2 -2
  9. package/bundles/types/index.d.ts.map +1 -1
  10. package/bundles/types/open-wallets/base/open-wallet-buttons.d.ts.map +1 -1
  11. package/bundles/types/open-wallets/index.d.ts +1 -1
  12. package/bundles/types/open-wallets/index.d.ts.map +1 -1
  13. package/bundles/types/open-wallets/services/apple-pay/apple-pay.open-wallet.service.d.ts.map +1 -1
  14. package/bundles/types/payment-source-widget/index.d.ts +1 -1
  15. package/bundles/types/payment-source-widget/index.d.ts.map +1 -1
  16. package/bundles/types/vault-display-widget/vault-display-widget.d.ts.map +1 -1
  17. package/bundles/types/wallet-buttons/wallet-services/apple.wallet-service.d.ts +1 -0
  18. package/bundles/types/wallet-buttons/wallet-services/apple.wallet-service.d.ts.map +1 -1
  19. package/bundles/types/wallet-buttons-express/base.wallet-button-express.d.ts +16 -0
  20. package/bundles/types/wallet-buttons-express/base.wallet-button-express.d.ts.map +1 -1
  21. package/bundles/types/wallet-buttons-express/index.d.ts +36 -0
  22. package/bundles/types/wallet-buttons-express/index.d.ts.map +1 -1
  23. package/bundles/types/wallet-buttons-express/services/apple-pay/apple-pay.wallet-button-express.d.ts.map +1 -1
  24. package/bundles/types/wallet-buttons-express/services/paypal/paypal.wallet-button-express.d.ts +1 -1
  25. package/bundles/types/wallet-buttons-express/services/paypal/paypal.wallet-button-express.d.ts.map +1 -1
  26. package/bundles/types/widget/html-multi-widget.d.ts +4 -1
  27. package/bundles/types/widget/html-multi-widget.d.ts.map +1 -1
  28. package/bundles/types/widget/index.d.ts +2 -1
  29. package/bundles/types/widget/index.d.ts.map +1 -1
  30. package/bundles/types/widget/widget-event-map.d.ts +37 -0
  31. package/bundles/types/widget/widget-event-map.d.ts.map +1 -0
  32. package/bundles/widget.umd.js +370 -204
  33. package/bundles/widget.umd.js.d.ts +535 -481
  34. package/bundles/widget.umd.js.min.d.ts +535 -481
  35. package/bundles/widget.umd.min.js +1 -1
  36. package/docs/wallet-buttons-express.md +85 -0
  37. package/package.json +12 -5
@@ -1198,7 +1198,7 @@
1198
1198
  version: 'x-sdk-version',
1199
1199
  type: 'x-sdk-type'
1200
1200
  });
1201
- SDK._version = 'v1.141.0';
1201
+ SDK._version = 'v1.143.0-beta';
1202
1202
 
1203
1203
  function isFunction(value) {
1204
1204
  return typeof value === 'function';
@@ -5039,7 +5039,7 @@
5039
5039
  }]);
5040
5040
  }();
5041
5041
 
5042
- var EVENT$5 = {
5042
+ var EVENT$4 = {
5043
5043
  AFTER_LOAD: 'afterLoad',
5044
5044
  SUBMIT: 'submit',
5045
5045
  FINISH: 'finish',
@@ -5096,9 +5096,9 @@
5096
5096
  }, {
5097
5097
  key: "on",
5098
5098
  value: function on(eventName, widgetId, cb) {
5099
- for (var event in EVENT$5) {
5100
- if (!EVENT$5.hasOwnProperty(event)) continue;
5101
- if (eventName === EVENT$5[event]) {
5099
+ for (var event in EVENT$4) {
5100
+ if (!EVENT$4.hasOwnProperty(event)) continue;
5101
+ if (eventName === EVENT$4[event]) {
5102
5102
  this.listeners.push({
5103
5103
  event: eventName,
5104
5104
  listener: cb,
@@ -5223,7 +5223,7 @@
5223
5223
  key: "setupIFrameEvents",
5224
5224
  value: function setupIFrameEvents(widgetId) {
5225
5225
  var _this = this;
5226
- this.iFrameEvent.on(EVENT$5.CHARGE_AUTH, widgetId, function (data) {
5226
+ this.iFrameEvent.on(EVENT$4.CHARGE_AUTH, widgetId, function (data) {
5227
5227
  if (data.status === IFRAME_STATUS.SKIPPED || data.status === IFRAME_STATUS.FINISHED) {
5228
5228
  if (data.info) _this.eventEmitter.emit(GPAYMENTS_EVENT.INFO, {
5229
5229
  info: data.info
@@ -5233,7 +5233,7 @@
5233
5233
  status: data.status
5234
5234
  }, data.charge_3ds_id));
5235
5235
  });
5236
- this.iFrameEvent.on(EVENT$5.CHARGE_AUTH_SUCCESS, widgetId, function (data) {
5236
+ this.iFrameEvent.on(EVENT$4.CHARGE_AUTH_SUCCESS, widgetId, function (data) {
5237
5237
  _this.processResult(data.charge_3ds_id);
5238
5238
  });
5239
5239
  }
@@ -6785,7 +6785,7 @@
6785
6785
  key: "setCompleteCheckoutListener",
6786
6786
  value: function setCompleteCheckoutListener() {
6787
6787
  var _this5 = this;
6788
- this.event.on(EVENT$5.FINISH, this.widgetId, function (event) {
6788
+ this.event.on(EVENT$4.FINISH, this.widgetId, function (event) {
6789
6789
  _this5.event.clear();
6790
6790
  clearInterval(_this5.checkInterval);
6791
6791
  if (_this5.checkoutTab && !_this5.checkoutTab.closed) {
@@ -6872,15 +6872,15 @@
6872
6872
  value: function setupIframeEventListeners() {
6873
6873
  var _this = this;
6874
6874
  if (!this.widgetId) return;
6875
- this.iframeEvent.on(EVENT$5.AFTER_LOAD, this.widgetId, function (_event) {
6875
+ this.iframeEvent.on(EVENT$4.AFTER_LOAD, this.widgetId, function (_event) {
6876
6876
  var _a;
6877
6877
  (_a = _this.onLoadCallback) === null || _a === void 0 ? void 0 : _a.call(_this);
6878
6878
  });
6879
- this.iframeEvent.on(EVENT$5.DISPATCH_SUCCESS, this.widgetId, function (_event) {
6879
+ this.iframeEvent.on(EVENT$4.DISPATCH_SUCCESS, this.widgetId, function (_event) {
6880
6880
  var _a, _b;
6881
6881
  (_b = (_a = _this.pushCallbacks) === null || _a === void 0 ? void 0 : _a.onSuccess) === null || _b === void 0 ? void 0 : _b.call(_a);
6882
6882
  });
6883
- this.iframeEvent.on(EVENT$5.DISPATCH_ERROR, this.widgetId, function (_event) {
6883
+ this.iframeEvent.on(EVENT$4.DISPATCH_ERROR, this.widgetId, function (_event) {
6884
6884
  var _a, _b;
6885
6885
  (_b = (_a = _this.pushCallbacks) === null || _a === void 0 ? void 0 : _a.onError) === null || _b === void 0 ? void 0 : _b.call(_a);
6886
6886
  });
@@ -8094,7 +8094,7 @@
8094
8094
  }]);
8095
8095
  }(WalletService);
8096
8096
 
8097
- /*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */
8097
+ /*! @license DOMPurify 3.4.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.0/LICENSE */
8098
8098
 
8099
8099
  var purify_cjs;
8100
8100
  var hasRequiredPurify_cjs;
@@ -8302,7 +8302,7 @@
8302
8302
 
8303
8303
  const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);
8304
8304
  const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);
8305
- const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);
8305
+ const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnalign', 'columnlines', 'columnspacing', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lquote', 'lspace', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);
8306
8306
  const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);
8307
8307
 
8308
8308
  // eslint-disable-next-line unicorn/better-regex
@@ -8399,7 +8399,7 @@
8399
8399
  function createDOMPurify() {
8400
8400
  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
8401
8401
  const DOMPurify = root => createDOMPurify(root);
8402
- DOMPurify.version = '3.3.3';
8402
+ DOMPurify.version = '3.4.0';
8403
8403
  DOMPurify.removed = [];
8404
8404
  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
8405
8405
  // Not running in a browser, provide a factory function
@@ -8675,7 +8675,7 @@
8675
8675
  NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
8676
8676
  MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;
8677
8677
  HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;
8678
- CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
8678
+ CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || create(null);
8679
8679
  if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
8680
8680
  CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
8681
8681
  }
@@ -8715,13 +8715,10 @@
8715
8715
  addToSet(ALLOWED_ATTR, xml);
8716
8716
  }
8717
8717
  }
8718
- /* Prevent function-based ADD_ATTR / ADD_TAGS from leaking across calls */
8719
- if (!objectHasOwnProperty(cfg, 'ADD_TAGS')) {
8720
- EXTRA_ELEMENT_HANDLING.tagCheck = null;
8721
- }
8722
- if (!objectHasOwnProperty(cfg, 'ADD_ATTR')) {
8723
- EXTRA_ELEMENT_HANDLING.attributeCheck = null;
8724
- }
8718
+ /* Always reset function-based ADD_TAGS / ADD_ATTR checks to prevent
8719
+ * leaking across calls when switching from function to array config */
8720
+ EXTRA_ELEMENT_HANDLING.tagCheck = null;
8721
+ EXTRA_ELEMENT_HANDLING.attributeCheck = null;
8725
8722
  /* Merge configuration parameters */
8726
8723
  if (cfg.ADD_TAGS) {
8727
8724
  if (typeof cfg.ADD_TAGS === 'function') {
@@ -9044,6 +9041,11 @@
9044
9041
  _forceRemove(currentNode);
9045
9042
  return true;
9046
9043
  }
9044
+ /* Remove risky CSS construction leading to mXSS */
9045
+ if (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && tagName === 'style' && _isNode(currentNode.firstElementChild)) {
9046
+ _forceRemove(currentNode);
9047
+ return true;
9048
+ }
9047
9049
  /* Remove any occurrence of processing instructions */
9048
9050
  if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {
9049
9051
  _forceRemove(currentNode);
@@ -9055,7 +9057,7 @@
9055
9057
  return true;
9056
9058
  }
9057
9059
  /* Remove element if anything forbids its presence */
9058
- if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {
9060
+ if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {
9059
9061
  /* Check if we have a custom element to handle */
9060
9062
  if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
9061
9063
  if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {
@@ -9294,7 +9296,7 @@
9294
9296
  *
9295
9297
  * @param fragment to iterate over recursively
9296
9298
  */
9297
- const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
9299
+ const _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {
9298
9300
  let shadowNode = null;
9299
9301
  const shadowIterator = _createNodeIterator(fragment);
9300
9302
  /* Execute a hook if present */
@@ -9308,7 +9310,7 @@
9308
9310
  _sanitizeAttributes(shadowNode);
9309
9311
  /* Deep shadow DOM detected */
9310
9312
  if (shadowNode.content instanceof DocumentFragment) {
9311
- _sanitizeShadowDOM(shadowNode.content);
9313
+ _sanitizeShadowDOM2(shadowNode.content);
9312
9314
  }
9313
9315
  }
9314
9316
  /* Execute a hook if present */
@@ -9403,7 +9405,7 @@
9403
9405
  _sanitizeAttributes(currentNode);
9404
9406
  /* Shadow DOM detected, sanitize it */
9405
9407
  if (currentNode.content instanceof DocumentFragment) {
9406
- _sanitizeShadowDOM(currentNode.content);
9408
+ _sanitizeShadowDOM2(currentNode.content);
9407
9409
  }
9408
9410
  }
9409
9411
  /* If we sanitized `dirty` in-place, return it. */
@@ -9412,6 +9414,14 @@
9412
9414
  }
9413
9415
  /* Return sanitized string or DOM */
9414
9416
  if (RETURN_DOM) {
9417
+ if (SAFE_FOR_TEMPLATES) {
9418
+ body.normalize();
9419
+ let html = body.innerHTML;
9420
+ arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
9421
+ html = stringReplace(html, expr, ' ');
9422
+ });
9423
+ body.innerHTML = html;
9424
+ }
9415
9425
  if (RETURN_DOM_FRAGMENT) {
9416
9426
  returnNode = createDocumentFragment.call(body.ownerDocument);
9417
9427
  while (body.firstChild) {
@@ -10244,6 +10254,44 @@
10244
10254
  }]);
10245
10255
  }(WalletService);
10246
10256
 
10257
+ /**
10258
+ * Maximum Apple Pay JS API version the SDK targets.
10259
+ * Bump this when adopting features from a newer version.
10260
+ */
10261
+ var APPLE_PAY_MAX_VERSION = 14;
10262
+ /**
10263
+ * Minimum Apple Pay JS API version the SDK can operate with.
10264
+ *
10265
+ * Version 3 (iOS 11 / macOS 10.13) is required because the SDK uses:
10266
+ * - `ApplePayError` constructor
10267
+ * - Object-form `completeShippingContactSelection(update)`
10268
+ * - Object-form `completeShippingMethodSelection(update)`
10269
+ * - `supportedCountries` in payment requests
10270
+ *
10271
+ * All of these were introduced in version 3.
10272
+ */
10273
+ var APPLE_PAY_MIN_VERSION = 3;
10274
+ /**
10275
+ * Detects the highest Apple Pay JS API version the current device supports,
10276
+ * starting from {@link APPLE_PAY_MAX_VERSION} down to {@link APPLE_PAY_MIN_VERSION}.
10277
+ *
10278
+ * Returns `0` if Apple Pay is not available or the device does not support
10279
+ * the minimum required version.
10280
+ *
10281
+ * @see https://developer.apple.com/documentation/apple_pay_on_the_web/applepaysession/supportsversion
10282
+ */
10283
+ function getSupportedApplePayVersion() {
10284
+ if (!window.ApplePaySession) {
10285
+ return 0;
10286
+ }
10287
+ for (var v = APPLE_PAY_MAX_VERSION; v >= APPLE_PAY_MIN_VERSION; v--) {
10288
+ if (ApplePaySession.supportsVersion(v)) {
10289
+ return v;
10290
+ }
10291
+ }
10292
+ return 0;
10293
+ }
10294
+
10247
10295
  var DEFAULT_APPLE_PAY_CAPABILITIES$2 = ['paymentCredentialsAvailable'];
10248
10296
  var AppleWalletService = /*#__PURE__*/function (_WalletService) {
10249
10297
  function AppleWalletService(publicKey, meta, gatewayName, eventEmitter) {
@@ -10572,13 +10620,32 @@
10572
10620
  }, {
10573
10621
  key: "onApplePayButtonClicked",
10574
10622
  value: function onApplePayButtonClicked() {
10575
- this.paymentSession = new ApplePaySession(14, this.createRequest());
10623
+ var _this5 = this;
10624
+ var applePayApiVersion = getSupportedApplePayVersion();
10625
+ if (applePayApiVersion === 0) {
10626
+ this.eventEmitter.emit(WALLET_EVENT.UNAVAILABLE, {
10627
+ wallet: WALLET_TYPE.APPLE
10628
+ });
10629
+ return;
10630
+ }
10631
+ this.paymentSession = new ApplePaySession(applePayApiVersion, this.createRequest());
10576
10632
  this.paymentSession.onvalidatemerchant = this.onValidateMerchant;
10577
10633
  this.paymentSession.onpaymentauthorized = this.onPaymentAuthorized;
10578
10634
  this.paymentSession.oncancel = this.onCancelPayment;
10579
10635
  this.paymentSession.onshippingcontactselected = this.onShippingContactSelected;
10580
10636
  this.paymentSession.onshippingmethodselected = this.onShippingMethodSelected;
10581
10637
  this.paymentSession.begin();
10638
+ // As part of PAYCA-2065 we detect that the paymentSession.onvalidatemerchant is not
10639
+ // executed if the browser is not safari. In that case, we handle it outside the
10640
+ // actual merchant validation function.
10641
+ var isIOS = /iPhone|iPad|iPod/.test(navigator.userAgent);
10642
+ var isDesktopRequestIOS = navigator.maxTouchPoints > 1 && /Macintosh/.test(navigator.userAgent);
10643
+ if (!window.safari && !isIOS && !isDesktopRequestIOS) {
10644
+ this.handleMerchantOnButtonClickEvent()["catch"](function (err) {
10645
+ console.error('Error while processing merchant callback', err);
10646
+ _this5.paymentSession.abort();
10647
+ });
10648
+ }
10582
10649
  }
10583
10650
  }, {
10584
10651
  key: "createRequest",
@@ -10622,22 +10689,22 @@
10622
10689
  }, {
10623
10690
  key: "getMerchantSession",
10624
10691
  value: function getMerchantSession() {
10625
- var _this5 = this;
10692
+ var _this6 = this;
10626
10693
  return new Promise(function (resolve, reject) {
10627
- return _this5.eventEmitter.emit(WALLET_EVENT.CALLBACK, {
10694
+ return _this6.eventEmitter.emit(WALLET_EVENT.CALLBACK, {
10628
10695
  data: _extends({
10629
10696
  request_type: 'CREATE_SESSION',
10630
10697
  wallet_type: WALLET_TYPE.APPLE,
10631
10698
  session_id: window.location.hostname
10632
- }, _this5.isShippingRequired() && {
10633
- request_shipping: _this5.meta.request_shipping
10699
+ }, _this6.isShippingRequired() && {
10700
+ request_shipping: _this6.meta.request_shipping
10634
10701
  }),
10635
10702
  onSuccess: function onSuccess(res) {
10636
10703
  return resolve(res);
10637
10704
  },
10638
10705
  onError: function onError(message) {
10639
10706
  console.error('Error generating order id', message);
10640
- _this5.eventEmitter.emit(WALLET_EVENT.PAYMENT_ERROR, {
10707
+ _this6.eventEmitter.emit(WALLET_EVENT.PAYMENT_ERROR, {
10641
10708
  message: message
10642
10709
  });
10643
10710
  reject(message);
@@ -11710,7 +11777,7 @@
11710
11777
  * @param {string} ON_CLICK=onClick
11711
11778
  * @param {string} LOADED=onWalletLoaded
11712
11779
  */
11713
- var EVENT$4 = {
11780
+ var EVENT$3 = {
11714
11781
  UNAVAILABLE: EventEnum.UNAVAILABLE,
11715
11782
  UPDATE: EventEnum.UPDATE,
11716
11783
  PAYMENT_SUCCESSFUL: EventEnum.PAYMENT_SUCCESSFUL,
@@ -11836,7 +11903,7 @@
11836
11903
  this.setupServiceCallbacks();
11837
11904
  this.service.load(this.container);
11838
11905
  } catch (err) {
11839
- this.eventEmitter.emit(EVENT$4.UNAVAILABLE, null);
11906
+ this.eventEmitter.emit(EVENT$3.UNAVAILABLE, null);
11840
11907
  throw err;
11841
11908
  }
11842
11909
  }
@@ -11973,7 +12040,7 @@
11973
12040
  key: "on",
11974
12041
  value: function on(eventName, cb) {
11975
12042
  var _this = this;
11976
- if (eventName === EVENT$4.UPDATE) {
12043
+ if (eventName === EVENT$3.UPDATE) {
11977
12044
  this.hasUpdateHandler = true;
11978
12045
  }
11979
12046
  if (typeof cb === 'function') {
@@ -12008,10 +12075,10 @@
12008
12075
  value: function onUnavailable(handler) {
12009
12076
  var _this2 = this;
12010
12077
  if (typeof handler === 'function') {
12011
- return this.eventEmitter.subscribe(EVENT$4.UNAVAILABLE, handler);
12078
+ return this.eventEmitter.subscribe(EVENT$3.UNAVAILABLE, handler);
12012
12079
  }
12013
12080
  return new Promise(function (resolve) {
12014
- return _this2.eventEmitter.subscribe(EVENT$4.UNAVAILABLE, function () {
12081
+ return _this2.eventEmitter.subscribe(EVENT$3.UNAVAILABLE, function () {
12015
12082
  return resolve();
12016
12083
  });
12017
12084
  });
@@ -12037,10 +12104,10 @@
12037
12104
  var _this3 = this;
12038
12105
  this.hasUpdateHandler = true;
12039
12106
  if (typeof handler === 'function') {
12040
- return this.eventEmitter.subscribe(EVENT$4.UPDATE, handler);
12107
+ return this.eventEmitter.subscribe(EVENT$3.UPDATE, handler);
12041
12108
  }
12042
12109
  return new Promise(function (resolve) {
12043
- return _this3.eventEmitter.subscribe(EVENT$4.UPDATE, function (data) {
12110
+ return _this3.eventEmitter.subscribe(EVENT$3.UPDATE, function (data) {
12044
12111
  return resolve(data);
12045
12112
  });
12046
12113
  });
@@ -12064,10 +12131,10 @@
12064
12131
  value: function onPaymentSuccessful(handler) {
12065
12132
  var _this4 = this;
12066
12133
  if (typeof handler === 'function') {
12067
- return this.eventEmitter.subscribe(EVENT$4.PAYMENT_SUCCESSFUL, handler);
12134
+ return this.eventEmitter.subscribe(EVENT$3.PAYMENT_SUCCESSFUL, handler);
12068
12135
  }
12069
12136
  return new Promise(function (resolve) {
12070
- return _this4.eventEmitter.subscribe(EVENT$4.PAYMENT_SUCCESSFUL, function (data) {
12137
+ return _this4.eventEmitter.subscribe(EVENT$3.PAYMENT_SUCCESSFUL, function (data) {
12071
12138
  return resolve(data);
12072
12139
  });
12073
12140
  });
@@ -12091,10 +12158,10 @@
12091
12158
  value: function onPaymentInReview(handler) {
12092
12159
  var _this5 = this;
12093
12160
  if (typeof handler === 'function') {
12094
- return this.eventEmitter.subscribe(EVENT$4.PAYMENT_IN_REVIEW, handler);
12161
+ return this.eventEmitter.subscribe(EVENT$3.PAYMENT_IN_REVIEW, handler);
12095
12162
  }
12096
12163
  return new Promise(function (resolve) {
12097
- return _this5.eventEmitter.subscribe(EVENT$4.PAYMENT_IN_REVIEW, function (data) {
12164
+ return _this5.eventEmitter.subscribe(EVENT$3.PAYMENT_IN_REVIEW, function (data) {
12098
12165
  return resolve(data);
12099
12166
  });
12100
12167
  });
@@ -12118,10 +12185,10 @@
12118
12185
  value: function onPaymentError(handler) {
12119
12186
  var _this6 = this;
12120
12187
  if (typeof handler === 'function') {
12121
- return this.eventEmitter.subscribe(EVENT$4.PAYMENT_ERROR, handler);
12188
+ return this.eventEmitter.subscribe(EVENT$3.PAYMENT_ERROR, handler);
12122
12189
  }
12123
12190
  return new Promise(function (resolve) {
12124
- return _this6.eventEmitter.subscribe(EVENT$4.PAYMENT_ERROR, function (err) {
12191
+ return _this6.eventEmitter.subscribe(EVENT$3.PAYMENT_ERROR, function (err) {
12125
12192
  return resolve(err);
12126
12193
  });
12127
12194
  });
@@ -12147,10 +12214,10 @@
12147
12214
  value: function onAuthTokensChanged(handler) {
12148
12215
  var _this7 = this;
12149
12216
  if (typeof handler === 'function') {
12150
- return this.eventEmitter.subscribe(EVENT$4.AUTH_TOKENS_CHANGED, handler);
12217
+ return this.eventEmitter.subscribe(EVENT$3.AUTH_TOKENS_CHANGED, handler);
12151
12218
  }
12152
12219
  return new Promise(function (resolve) {
12153
- return _this7.eventEmitter.subscribe(EVENT$4.AUTH_TOKENS_CHANGED, function (err) {
12220
+ return _this7.eventEmitter.subscribe(EVENT$3.AUTH_TOKENS_CHANGED, function (err) {
12154
12221
  return resolve(err);
12155
12222
  });
12156
12223
  });
@@ -12173,7 +12240,7 @@
12173
12240
  key: "onClick",
12174
12241
  value: function onClick(handler) {
12175
12242
  if (typeof handler === 'function') {
12176
- return this.eventEmitter.subscribe(EVENT$4.ON_CLICK, handler);
12243
+ return this.eventEmitter.subscribe(EVENT$3.ON_CLICK, handler);
12177
12244
  }
12178
12245
  }
12179
12246
  /**
@@ -12192,10 +12259,10 @@
12192
12259
  value: function onCheckoutOpen(handler) {
12193
12260
  var _this8 = this;
12194
12261
  if (typeof handler === 'function') {
12195
- return this.eventEmitter.subscribe(EVENT$4.ON_CHECKOUT_OPEN, handler);
12262
+ return this.eventEmitter.subscribe(EVENT$3.ON_CHECKOUT_OPEN, handler);
12196
12263
  }
12197
12264
  return new Promise(function (resolve) {
12198
- return _this8.eventEmitter.subscribe(EVENT$4.ON_CHECKOUT_OPEN, function (err) {
12265
+ return _this8.eventEmitter.subscribe(EVENT$3.ON_CHECKOUT_OPEN, function (err) {
12199
12266
  return resolve(err);
12200
12267
  });
12201
12268
  });
@@ -12216,10 +12283,10 @@
12216
12283
  value: function onCheckoutClose(handler) {
12217
12284
  var _this9 = this;
12218
12285
  if (typeof handler === 'function') {
12219
- return this.eventEmitter.subscribe(EVENT$4.ON_CHECKOUT_CLOSE, handler);
12286
+ return this.eventEmitter.subscribe(EVENT$3.ON_CHECKOUT_CLOSE, handler);
12220
12287
  }
12221
12288
  return new Promise(function (resolve) {
12222
- return _this9.eventEmitter.subscribe(EVENT$4.ON_CHECKOUT_CLOSE, function (err) {
12289
+ return _this9.eventEmitter.subscribe(EVENT$3.ON_CHECKOUT_CLOSE, function (err) {
12223
12290
  return resolve(err);
12224
12291
  });
12225
12292
  });
@@ -12245,8 +12312,8 @@
12245
12312
  value: function setupOnWalletLoadedCallback() {
12246
12313
  var _this0 = this;
12247
12314
  this.service.on(WALLET_EVENT.LOADED, function (eventData) {
12248
- _this0.eventEmitter.emit(EVENT$4.ON_WALLET_LOADED, {
12249
- event: EVENT$4.ON_WALLET_LOADED,
12315
+ _this0.eventEmitter.emit(EVENT$3.ON_WALLET_LOADED, {
12316
+ event: EVENT$3.ON_WALLET_LOADED,
12250
12317
  data: eventData
12251
12318
  });
12252
12319
  });
@@ -12256,8 +12323,8 @@
12256
12323
  value: function setupUnavailableCallback() {
12257
12324
  var _this1 = this;
12258
12325
  this.service.on(WALLET_EVENT.UNAVAILABLE, function (eventData) {
12259
- return _this1.eventEmitter.emit(EVENT$4.UNAVAILABLE, {
12260
- event: EVENT$4.UNAVAILABLE,
12326
+ return _this1.eventEmitter.emit(EVENT$3.UNAVAILABLE, {
12327
+ event: EVENT$3.UNAVAILABLE,
12261
12328
  data: eventData
12262
12329
  });
12263
12330
  });
@@ -12267,8 +12334,8 @@
12267
12334
  value: function setupUpdateCallback() {
12268
12335
  var _this10 = this;
12269
12336
  this.service.on(WALLET_EVENT.UPDATE, function (eventData) {
12270
- return _this10.hasUpdateHandler ? _this10.eventEmitter.emit(EVENT$4.UPDATE, {
12271
- event: EVENT$4.UPDATE,
12337
+ return _this10.hasUpdateHandler ? _this10.eventEmitter.emit(EVENT$3.UPDATE, {
12338
+ event: EVENT$3.UPDATE,
12272
12339
  data: eventData
12273
12340
  }) : _this10.update({
12274
12341
  success: true
@@ -12280,8 +12347,8 @@
12280
12347
  value: function setupOnClickCallback() {
12281
12348
  var _this11 = this;
12282
12349
  this.service.on(WALLET_EVENT.BUTTON_CLICK, function (data) {
12283
- return _this11.eventEmitter.emit(EVENT$4.ON_CLICK, {
12284
- event: EVENT$4.ON_CLICK,
12350
+ return _this11.eventEmitter.emit(EVENT$3.ON_CLICK, {
12351
+ event: EVENT$3.ON_CLICK,
12285
12352
  data: data
12286
12353
  });
12287
12354
  });
@@ -12291,8 +12358,8 @@
12291
12358
  value: function setupOnCheckoutOpenCallback() {
12292
12359
  var _this12 = this;
12293
12360
  this.service.on(WALLET_EVENT.CHECKOUT_OPEN, function (data) {
12294
- return _this12.eventEmitter.emit(EVENT$4.ON_CHECKOUT_OPEN, {
12295
- event: EVENT$4.ON_CHECKOUT_OPEN,
12361
+ return _this12.eventEmitter.emit(EVENT$3.ON_CHECKOUT_OPEN, {
12362
+ event: EVENT$3.ON_CHECKOUT_OPEN,
12296
12363
  data: data
12297
12364
  });
12298
12365
  });
@@ -12302,8 +12369,8 @@
12302
12369
  value: function setupOnCheckoutCloseCallback() {
12303
12370
  var _this13 = this;
12304
12371
  this.service.on(WALLET_EVENT.CHECKOUT_CLOSE, function (data) {
12305
- return _this13.eventEmitter.emit(EVENT$4.ON_CHECKOUT_CLOSE, {
12306
- event: EVENT$4.ON_CHECKOUT_CLOSE,
12372
+ return _this13.eventEmitter.emit(EVENT$3.ON_CHECKOUT_CLOSE, {
12373
+ event: EVENT$3.ON_CHECKOUT_CLOSE,
12307
12374
  data: data
12308
12375
  });
12309
12376
  });
@@ -12335,7 +12402,7 @@
12335
12402
  if (typeof onSuccess === 'function') {
12336
12403
  onSuccess();
12337
12404
  }
12338
- var event = captureResult.status === 'inreview' ? EVENT$4.PAYMENT_IN_REVIEW : EVENT$4.PAYMENT_SUCCESSFUL;
12405
+ var event = captureResult.status === 'inreview' ? EVENT$3.PAYMENT_IN_REVIEW : EVENT$3.PAYMENT_SUCCESSFUL;
12339
12406
  _this15.eventEmitter.emit(event, {
12340
12407
  event: event,
12341
12408
  data: _extends(_extends({}, captureResult), data.customer && {
@@ -12348,8 +12415,8 @@
12348
12415
  if (typeof onError === 'function') {
12349
12416
  onError(err);
12350
12417
  }
12351
- _this15.eventEmitter.emit(EVENT$4.PAYMENT_ERROR, {
12352
- event: EVENT$4.PAYMENT_ERROR,
12418
+ _this15.eventEmitter.emit(EVENT$3.PAYMENT_ERROR, {
12419
+ event: EVENT$3.PAYMENT_ERROR,
12353
12420
  data: err
12354
12421
  });
12355
12422
  });
@@ -12360,8 +12427,8 @@
12360
12427
  value: function setupPaymentSuccessCallback() {
12361
12428
  var _this16 = this;
12362
12429
  this.service.on(WALLET_EVENT.PAYMENT_SUCCESS, function (eventData) {
12363
- return _this16.eventEmitter.emit(EVENT$4.PAYMENT_SUCCESSFUL, {
12364
- event: EVENT$4.PAYMENT_SUCCESSFUL,
12430
+ return _this16.eventEmitter.emit(EVENT$3.PAYMENT_SUCCESSFUL, {
12431
+ event: EVENT$3.PAYMENT_SUCCESSFUL,
12365
12432
  data: eventData
12366
12433
  });
12367
12434
  });
@@ -12371,8 +12438,8 @@
12371
12438
  value: function setupPaymentInReviewCallback() {
12372
12439
  var _this17 = this;
12373
12440
  this.service.on(WALLET_EVENT.PAYMENT_IN_REVIEW, function (eventData) {
12374
- return _this17.eventEmitter.emit(EVENT$4.PAYMENT_IN_REVIEW, {
12375
- event: EVENT$4.PAYMENT_IN_REVIEW,
12441
+ return _this17.eventEmitter.emit(EVENT$3.PAYMENT_IN_REVIEW, {
12442
+ event: EVENT$3.PAYMENT_IN_REVIEW,
12376
12443
  data: eventData
12377
12444
  });
12378
12445
  });
@@ -12382,8 +12449,8 @@
12382
12449
  value: function setupPaymentErrorCallback() {
12383
12450
  var _this18 = this;
12384
12451
  this.service.on(WALLET_EVENT.PAYMENT_ERROR, function (eventData) {
12385
- return _this18.eventEmitter.emit(EVENT$4.PAYMENT_ERROR, {
12386
- event: EVENT$4.PAYMENT_ERROR,
12452
+ return _this18.eventEmitter.emit(EVENT$3.PAYMENT_ERROR, {
12453
+ event: EVENT$3.PAYMENT_ERROR,
12387
12454
  data: eventData
12388
12455
  });
12389
12456
  });
@@ -12393,8 +12460,8 @@
12393
12460
  value: function setupAuthTokensChangedCallback() {
12394
12461
  var _this19 = this;
12395
12462
  this.service.on(WALLET_EVENT.AUTH_TOKENS_CHANGED, function (eventData) {
12396
- return _this19.eventEmitter.emit(EVENT$4.AUTH_TOKENS_CHANGED, {
12397
- event: EVENT$4.AUTH_TOKENS_CHANGED,
12463
+ return _this19.eventEmitter.emit(EVENT$3.AUTH_TOKENS_CHANGED, {
12464
+ event: EVENT$3.AUTH_TOKENS_CHANGED,
12398
12465
  data: eventData
12399
12466
  });
12400
12467
  });
@@ -13909,7 +13976,7 @@
13909
13976
  }, {
13910
13977
  key: "handleErrorEvent",
13911
13978
  value: function handleErrorEvent(event, error, purpose) {
13912
- if (Object.values(EVENT$5).includes(event)) {
13979
+ if (Object.values(EVENT$4).includes(event)) {
13913
13980
  this.event.emit({
13914
13981
  error: error,
13915
13982
  event: event,
@@ -14095,7 +14162,7 @@
14095
14162
  }, function (error) {
14096
14163
  if (error instanceof EventError) {
14097
14164
  error.setContextId(_this2.link.getParams().widget_id);
14098
- _this2.handleErrorEvent(EVENT$5.ERROR, error.toJSON().error, error.purpose);
14165
+ _this2.handleErrorEvent(EVENT$4.ERROR, error.toJSON().error, error.purpose);
14099
14166
  }
14100
14167
  console.error('Error when creating a token, widget will not be loaded');
14101
14168
  });
@@ -14107,7 +14174,7 @@
14107
14174
  key: "afterLoad",
14108
14175
  value: function afterLoad() {
14109
14176
  var _this3 = this;
14110
- this.on(EVENT$5.VALIDATION, function (data) {
14177
+ this.on(EVENT$4.VALIDATION, function (data) {
14111
14178
  _this3.validationData = data;
14112
14179
  });
14113
14180
  }
@@ -14366,7 +14433,7 @@
14366
14433
  }, {
14367
14434
  key: "onFinishInsert",
14368
14435
  value: function onFinishInsert(selector, dataType) {
14369
- this.on(EVENT$5.FINISH, function (event) {
14436
+ this.on(EVENT$4.FINISH, function (event) {
14370
14437
  Event$1.insertToInput(selector, dataType, event);
14371
14438
  });
14372
14439
  }
@@ -14404,7 +14471,7 @@
14404
14471
  var formInterceptor = new FormInterceptor(selector);
14405
14472
  formInterceptor.beforeSubmit(function () {
14406
14473
  _this5.triggerElement.push(TRIGGER$1.SUBMIT_FORM, {});
14407
- _this5.event.on(EVENT$5.FINISH, _this5.link.getParams().widget_id, function () {
14474
+ _this5.event.on(EVENT$4.FINISH, _this5.link.getParams().widget_id, function () {
14408
14475
  formInterceptor.continueSubmit();
14409
14476
  });
14410
14477
  });
@@ -14417,13 +14484,13 @@
14417
14484
  value: function useCheckoutAutoSubmit() {
14418
14485
  var _this6 = this;
14419
14486
  this.setHiddenElements([ELEMENT.SUBMIT_BUTTON]);
14420
- this.on(EVENT$5.CHECKOUT_SUCCESS, function () {
14487
+ this.on(EVENT$4.CHECKOUT_SUCCESS, function () {
14421
14488
  _this6.trigger(TRIGGER$1.SUBMIT_FORM);
14422
14489
  });
14423
- this.on(EVENT$5.VALIDATION_ERROR, function () {
14490
+ this.on(EVENT$4.VALIDATION_ERROR, function () {
14424
14491
  _this6.trigger(TRIGGER$1.REFRESH_CHECKOUT);
14425
14492
  });
14426
- this.on(EVENT$5.SYSTEM_ERROR, function () {
14493
+ this.on(EVENT$4.SYSTEM_ERROR, function () {
14427
14494
  _this6.trigger(TRIGGER$1.REFRESH_CHECKOUT);
14428
14495
  });
14429
14496
  }
@@ -14440,7 +14507,7 @@
14440
14507
  key: "useAutoResize",
14441
14508
  value: function useAutoResize() {
14442
14509
  var _this7 = this;
14443
- this.on(EVENT$5.RESIZE, function (data) {
14510
+ this.on(EVENT$4.RESIZE, function (data) {
14444
14511
  if (_this7.iFrame.getElement()) {
14445
14512
  _this7.iFrame.getElement().scrolling = 'no';
14446
14513
  if (data.height) {
@@ -16177,7 +16244,7 @@
16177
16244
  key: "useAutoResize",
16178
16245
  value: function useAutoResize() {
16179
16246
  var _this = this;
16180
- this.event.on(EVENT$5.RESIZE, this.link.getParams().widget_id, function (data) {
16247
+ this.event.on(EVENT$4.RESIZE, this.link.getParams().widget_id, function (data) {
16181
16248
  if (_this.iFrame.getElement()) {
16182
16249
  _this.iFrame.getElement().scrolling = 'no';
16183
16250
  if (data.height) {
@@ -17018,7 +17085,7 @@
17018
17085
  var _this = this;
17019
17086
  this.widget = new WalletButtons(this.selector, context.payload.charge_token, context.payload.meta);
17020
17087
  this.widget.setEnv(this.getEnv(context.instruction_token));
17021
- this.widget.on(EVENT$4.ON_WALLET_LOADED, function () {
17088
+ this.widget.on(EVENT$3.ON_WALLET_LOADED, function () {
17022
17089
  addGoBackToPaymentsButton(_this.selector, _this.checkoutWidget, _this.api);
17023
17090
  });
17024
17091
  this.widget.load();
@@ -17039,7 +17106,7 @@
17039
17106
  var _this = this;
17040
17107
  this.widget = new WalletButtons(this.selector, context === null || context === void 0 ? void 0 : context.payload.charge_token, context === null || context === void 0 ? void 0 : context.payload.meta);
17041
17108
  this.widget.setEnv(this.getEnv(context.instruction_token));
17042
- this.widget.on(EVENT$4.ON_WALLET_LOADED, function () {
17109
+ this.widget.on(EVENT$3.ON_WALLET_LOADED, function () {
17043
17110
  addGoBackToPaymentsButton(_this.selector, _this.checkoutWidget, _this.api);
17044
17111
  hideLoadingSpinner();
17045
17112
  });
@@ -17372,7 +17439,7 @@
17372
17439
  this.widget.load();
17373
17440
  this.widget.useAutoResize();
17374
17441
  this.widget.setHiddenElements(['submit_button']);
17375
- this.widget.on(EVENT$5.AFTER_LOAD, function () {
17442
+ this.widget.on(EVENT$4.AFTER_LOAD, function () {
17376
17443
  _this.timeoutId = setTimeout(function () {
17377
17444
  _this.addSubmitButton();
17378
17445
  addGoBackToPaymentsButton(_this.selector, _this.checkoutWidget, _this.api);
@@ -17382,7 +17449,7 @@
17382
17449
  this.widget.on('submit', function () {
17383
17450
  return showLoadingSpinner();
17384
17451
  });
17385
- this.widget.on(EVENT$5.FINISH, function (event) {
17452
+ this.widget.on(EVENT$4.FINISH, function (event) {
17386
17453
  var _a;
17387
17454
  var get = new Api(context.instruction_token);
17388
17455
  (_a = _this.checkoutWidget) === null || _a === void 0 ? void 0 : _a.fetchInstruction();
@@ -17418,7 +17485,7 @@
17418
17485
  return console.error('callback.card_form.ott_created: error', error);
17419
17486
  });
17420
17487
  });
17421
- this.widget.on(EVENT$5.VALIDATION_ERROR, function (event) {
17488
+ this.widget.on(EVENT$4.VALIDATION_ERROR, function (event) {
17422
17489
  var _a;
17423
17490
  (_a = _this.checkoutWidget) === null || _a === void 0 ? void 0 : _a.fetchInstruction();
17424
17491
  _this.api.checkout().callback({
@@ -17703,7 +17770,7 @@
17703
17770
  var _this = this;
17704
17771
  this.widget = new WalletButtons(this.selector, context === null || context === void 0 ? void 0 : context.payload.charge_token, context === null || context === void 0 ? void 0 : context.payload.meta);
17705
17772
  this.widget.setEnv(this.getEnv(context.instruction_token));
17706
- this.widget.on(EVENT$4.ON_WALLET_LOADED, function () {
17773
+ this.widget.on(EVENT$3.ON_WALLET_LOADED, function () {
17707
17774
  addGoBackToPaymentsButton(_this.selector, _this.checkoutWidget, _this.api);
17708
17775
  hideLoadingSpinner();
17709
17776
  });
@@ -18018,7 +18085,7 @@
18018
18085
  standalone: true
18019
18086
  }));
18020
18087
  this.widget.setEnv(this.getEnv(context.instruction_token));
18021
- this.widget.on(EVENT$4.ON_WALLET_LOADED, function () {
18088
+ this.widget.on(EVENT$3.ON_WALLET_LOADED, function () {
18022
18089
  addGoBackToPaymentsButton(_this.selector, _this.checkoutWidget, _this.api);
18023
18090
  hideLoadingSpinner();
18024
18091
  });
@@ -18584,7 +18651,7 @@
18584
18651
  }
18585
18652
  }
18586
18653
 
18587
- var EVENT$3 = {
18654
+ var EVENT$2 = {
18588
18655
  PAYMENT_SUCCESSFUL: 'paymentSuccessful',
18589
18656
  PAYMENT_FAILURE: 'paymentFailure',
18590
18657
  PAYMENT_EXPIRED: 'paymentExpired'
@@ -18790,7 +18857,7 @@
18790
18857
  }, {
18791
18858
  key: "onPaymentSuccessful",
18792
18859
  value: function onPaymentSuccessful(handler) {
18793
- return this.eventEmitter.subscribe(EVENT$3.PAYMENT_SUCCESSFUL, handler);
18860
+ return this.eventEmitter.subscribe(EVENT$2.PAYMENT_SUCCESSFUL, handler);
18794
18861
  }
18795
18862
  /**
18796
18863
  * If the payment was not successful, the function passed as parameter will be called.
@@ -18804,7 +18871,7 @@
18804
18871
  }, {
18805
18872
  key: "onPaymentFailure",
18806
18873
  value: function onPaymentFailure(handler) {
18807
- return this.eventEmitter.subscribe(EVENT$3.PAYMENT_FAILURE, handler);
18874
+ return this.eventEmitter.subscribe(EVENT$2.PAYMENT_FAILURE, handler);
18808
18875
  }
18809
18876
  /**
18810
18877
  * If the payment was expired, the function passed as parameter will be called.
@@ -18818,7 +18885,7 @@
18818
18885
  }, {
18819
18886
  key: "onPaymentExpired",
18820
18887
  value: function onPaymentExpired(handler) {
18821
- return this.eventEmitter.subscribe(EVENT$3.PAYMENT_EXPIRED, handler);
18888
+ return this.eventEmitter.subscribe(EVENT$2.PAYMENT_EXPIRED, handler);
18822
18889
  }
18823
18890
  }, {
18824
18891
  key: "createWidgetStructure",
@@ -18894,7 +18961,7 @@
18894
18961
  /**
18895
18962
  * Events emitted during the OpenWallet payment lifecycle.
18896
18963
  */
18897
- var EVENT$2;
18964
+ var EVENT$1;
18898
18965
  (function (EVENT) {
18899
18966
  /** Emitted when the wallet button is clicked by the user. */
18900
18967
  EVENT["ON_CLICK"] = "onClick";
@@ -18912,7 +18979,7 @@
18912
18979
  EVENT["ON_SHIPPING_ADDRESS_CHANGE"] = "onShippingAddressChange";
18913
18980
  /** Emitted when the customer selects a shipping option. */
18914
18981
  EVENT["ON_SHIPPING_OPTIONS_CHANGE"] = "onShippingOptionsChange";
18915
- })(EVENT$2 || (EVENT$2 = {}));
18982
+ })(EVENT$1 || (EVENT$1 = {}));
18916
18983
 
18917
18984
  /**
18918
18985
  * @classdesc Abstract base class for Open Wallet buttons. **Do not instantiate directly.**
@@ -18934,6 +19001,13 @@
18934
19001
  _classCallCheck(this, OpenWalletButtons);
18935
19002
  this.env = DEFAULT_ENV;
18936
19003
  this.onShippingOptionsChangeHandlerRegistered = false;
19004
+ // Runtime guard: TypeScript's `abstract` keyword exists only at compile time.
19005
+ // Without this check, instantiating the base class directly silently fails
19006
+ // later when `this.validateWalletMeta()` resolves to `undefined`, producing
19007
+ // a confusing "is not a function" error far from the actual mistake.
19008
+ if ((this instanceof OpenWalletButtons ? this.constructor : void 0) === OpenWalletButtons) {
19009
+ throw new Error('OpenWalletButtons is an abstract base class and cannot be instantiated directly. ' + 'Use ApplePayOpenWalletButton or GooglePayOpenWalletButton instead.');
19010
+ }
18937
19011
  this.eventEmitter = new EventEmitter();
18938
19012
  this.container = new Container(selector);
18939
19013
  this.api = new ApiInternal(publicKeyOrAccessToken, this.getApiAuthType(publicKeyOrAccessToken));
@@ -19036,7 +19110,7 @@
19036
19110
  console.error('Wallet operation error:', error);
19037
19111
  }
19038
19112
  var errorData = {
19039
- event: EVENT$2.ERROR,
19113
+ event: EVENT$1.ERROR,
19040
19114
  data: {
19041
19115
  error: error,
19042
19116
  context: {
@@ -19044,7 +19118,7 @@
19044
19118
  }
19045
19119
  }
19046
19120
  };
19047
- this.eventEmitter.emit(EVENT$2.ERROR, errorData);
19121
+ this.eventEmitter.emit(EVENT$1.ERROR, errorData);
19048
19122
  }
19049
19123
  /**
19050
19124
  * Loads and initializes the wallet button based on the service configuration.
@@ -19166,7 +19240,7 @@
19166
19240
  key: "onClick",
19167
19241
  value: function onClick(handler) {
19168
19242
  if (typeof handler === 'function') {
19169
- this.eventEmitter.subscribe(EVENT$2.ON_CLICK, handler);
19243
+ this.eventEmitter.subscribe(EVENT$1.ON_CLICK, handler);
19170
19244
  return;
19171
19245
  }
19172
19246
  this.handleOnError(new Error('onClick event handler is required.'), exports.ERROR_OPERATION.HANDLER_REGISTRATION);
@@ -19205,7 +19279,7 @@
19205
19279
  value: function onSuccess(handler) {
19206
19280
  var _this2 = this;
19207
19281
  if (typeof handler === 'function') {
19208
- this.eventEmitter.subscribe(EVENT$2.SUCCESS, function (data) {
19282
+ this.eventEmitter.subscribe(EVENT$1.SUCCESS, function (data) {
19209
19283
  return __awaiter(_this2, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee2() {
19210
19284
  var _t3;
19211
19285
  return _regenerator().w(function (_context2) {
@@ -19257,7 +19331,7 @@
19257
19331
  value: function onUnavailable(handler) {
19258
19332
  var _this3 = this;
19259
19333
  if (typeof handler === 'function') {
19260
- this.eventEmitter.subscribe(EVENT$2.UNAVAILABLE, function (data) {
19334
+ this.eventEmitter.subscribe(EVENT$1.UNAVAILABLE, function (data) {
19261
19335
  return __awaiter(_this3, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee3() {
19262
19336
  var _t4;
19263
19337
  return _regenerator().w(function (_context3) {
@@ -19310,7 +19384,7 @@
19310
19384
  value: function onError(handler) {
19311
19385
  var _this4 = this;
19312
19386
  if (typeof handler === 'function') {
19313
- this.eventEmitter.subscribe(EVENT$2.ERROR, function (data) {
19387
+ this.eventEmitter.subscribe(EVENT$1.ERROR, function (data) {
19314
19388
  return __awaiter(_this4, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee4() {
19315
19389
  var _t5;
19316
19390
  return _regenerator().w(function (_context4) {
@@ -19362,7 +19436,7 @@
19362
19436
  value: function onCancel(handler) {
19363
19437
  var _this5 = this;
19364
19438
  if (typeof handler === 'function') {
19365
- this.eventEmitter.subscribe(EVENT$2.CHECKOUT_CLOSE, function (data) {
19439
+ this.eventEmitter.subscribe(EVENT$1.CHECKOUT_CLOSE, function (data) {
19366
19440
  return __awaiter(_this5, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee5() {
19367
19441
  var _t6;
19368
19442
  return _regenerator().w(function (_context5) {
@@ -19407,7 +19481,7 @@
19407
19481
  value: function onLoaded(handler) {
19408
19482
  var _this6 = this;
19409
19483
  if (typeof handler === 'function') {
19410
- this.eventEmitter.subscribe(EVENT$2.LOADED, function (data) {
19484
+ this.eventEmitter.subscribe(EVENT$1.LOADED, function (data) {
19411
19485
  return __awaiter(_this6, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee6() {
19412
19486
  var _t7;
19413
19487
  return _regenerator().w(function (_context6) {
@@ -19479,7 +19553,7 @@
19479
19553
  key: "onShippingAddressChange",
19480
19554
  value: function onShippingAddressChange(handler) {
19481
19555
  if (typeof handler === 'function') {
19482
- return this.eventEmitter.subscribe(EVENT$2.ON_SHIPPING_ADDRESS_CHANGE, handler);
19556
+ return this.eventEmitter.subscribe(EVENT$1.ON_SHIPPING_ADDRESS_CHANGE, handler);
19483
19557
  }
19484
19558
  this.handleOnError(new Error('onShippingAddressChange event handler is required.'), exports.ERROR_OPERATION.HANDLER_REGISTRATION);
19485
19559
  }
@@ -19524,7 +19598,7 @@
19524
19598
  value: function onShippingOptionsChange(handler) {
19525
19599
  if (typeof handler === 'function') {
19526
19600
  this.onShippingOptionsChangeHandlerRegistered = true;
19527
- return this.eventEmitter.subscribe(EVENT$2.ON_SHIPPING_OPTIONS_CHANGE, handler);
19601
+ return this.eventEmitter.subscribe(EVENT$1.ON_SHIPPING_OPTIONS_CHANGE, handler);
19528
19602
  }
19529
19603
  this.handleOnError(new Error('onShippingOptionsChange event handler is required.'), exports.ERROR_OPERATION.HANDLER_REGISTRATION);
19530
19604
  }
@@ -19638,8 +19712,8 @@
19638
19712
  return this.api.paymentSource().createOTT(requestData).then(function (response) {
19639
19713
  var cleanShipping = stripEmpty(shipping);
19640
19714
  var cleanBilling = stripEmpty(billing);
19641
- _this.eventEmitter.emit(EVENT$2.SUCCESS, {
19642
- event: EVENT$2.SUCCESS,
19715
+ _this.eventEmitter.emit(EVENT$1.SUCCESS, {
19716
+ event: EVENT$1.SUCCESS,
19643
19717
  data: _extends(_extends({
19644
19718
  token: response,
19645
19719
  amount: amount
@@ -19652,8 +19726,8 @@
19652
19726
  return response;
19653
19727
  })["catch"](function (err) {
19654
19728
  var _a, _b, _c, _d;
19655
- _this.eventEmitter.emit(EVENT$2.ERROR, {
19656
- event: EVENT$2.ERROR,
19729
+ _this.eventEmitter.emit(EVENT$1.ERROR, {
19730
+ event: EVENT$1.ERROR,
19657
19731
  data: {
19658
19732
  message: ((_a = err === null || err === void 0 ? void 0 : err.error) === null || _a === void 0 ? void 0 : _a.message) || (err === null || err === void 0 ? void 0 : err.message) || ((_b = err === null || err === void 0 ? void 0 : err.error_summary) === null || _b === void 0 ? void 0 : _b.message),
19659
19733
  code: ((_c = err === null || err === void 0 ? void 0 : err.error) === null || _c === void 0 ? void 0 : _c.code) || (err === null || err === void 0 ? void 0 : err.code) || ((_d = err === null || err === void 0 ? void 0 : err.error_summary) === null || _d === void 0 ? void 0 : _d.code)
@@ -19700,7 +19774,7 @@
19700
19774
  value: function handleOnUnavailable() {
19701
19775
  var reason = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Wallet not available';
19702
19776
  var unavailableData = {
19703
- event: EVENT$2.UNAVAILABLE,
19777
+ event: EVENT$1.UNAVAILABLE,
19704
19778
  data: {
19705
19779
  reason: reason,
19706
19780
  details: {
@@ -19708,7 +19782,7 @@
19708
19782
  }
19709
19783
  }
19710
19784
  };
19711
- this.eventEmitter.emit(EVENT$2.UNAVAILABLE, unavailableData);
19785
+ this.eventEmitter.emit(EVENT$1.UNAVAILABLE, unavailableData);
19712
19786
  }
19713
19787
  /**
19714
19788
  * Emits the {@link EVENT.ERROR} event and logs the error to the console.
@@ -19724,7 +19798,7 @@
19724
19798
  console.error('Wallet operation error:', error);
19725
19799
  }
19726
19800
  var errorData = {
19727
- event: EVENT$2.ERROR,
19801
+ event: EVENT$1.ERROR,
19728
19802
  data: {
19729
19803
  error: error,
19730
19804
  context: {
@@ -19732,7 +19806,7 @@
19732
19806
  }
19733
19807
  }
19734
19808
  };
19735
- this.eventEmitter.emit(EVENT$2.ERROR, errorData);
19809
+ this.eventEmitter.emit(EVENT$1.ERROR, errorData);
19736
19810
  }
19737
19811
  /**
19738
19812
  * Removes the wallet button element from the DOM.
@@ -19782,8 +19856,8 @@
19782
19856
  _this.serviceConfig = serviceConfig;
19783
19857
  _this.latestShippingData = {};
19784
19858
  _this.onCancelPayment = function () {
19785
- return _this.eventEmitter.emit(EVENT$2.CHECKOUT_CLOSE, {
19786
- event: EVENT$2.CHECKOUT_CLOSE
19859
+ return _this.eventEmitter.emit(EVENT$1.CHECKOUT_CLOSE, {
19860
+ event: EVENT$1.CHECKOUT_CLOSE
19787
19861
  });
19788
19862
  };
19789
19863
  _this.onValidateMerchant = function () {
@@ -19863,7 +19937,7 @@
19863
19937
  while (1) switch (_context.n) {
19864
19938
  case 0:
19865
19939
  return _context.a(2, this.handleMerchantOnShippingChangedEvent({
19866
- event: EVENT$2.ON_SHIPPING_ADDRESS_CHANGE,
19940
+ event: EVENT$1.ON_SHIPPING_ADDRESS_CHANGE,
19867
19941
  data: this.parseShippingContactUpdateEvent(data)
19868
19942
  }).then(function (response) {
19869
19943
  var _a, _b;
@@ -19912,7 +19986,7 @@
19912
19986
  while (1) switch (_context2.n) {
19913
19987
  case 0:
19914
19988
  return _context2.a(2, this.handleMerchantOnShippingChangedEvent({
19915
- event: EVENT$2.ON_SHIPPING_OPTIONS_CHANGE,
19989
+ event: EVENT$1.ON_SHIPPING_OPTIONS_CHANGE,
19916
19990
  data: this.parseShippingMethodUpdateEvent(data)
19917
19991
  }).then(function (response) {
19918
19992
  var _a;
@@ -20127,32 +20201,49 @@
20127
20201
  return;
20128
20202
  }
20129
20203
  applePayButton.addEventListener('click', this.onApplePayButtonClicked.bind(this));
20130
- this.eventEmitter.emit(EVENT$2.LOADED, {
20131
- event: EVENT$2.LOADED
20204
+ this.eventEmitter.emit(EVENT$1.LOADED, {
20205
+ event: EVENT$1.LOADED
20132
20206
  });
20133
20207
  }
20134
20208
  }, {
20135
20209
  key: "onApplePayButtonClicked",
20136
20210
  value: function onApplePayButtonClicked() {
20137
- this.paymentSession = new ApplePaySession(14, this.mapMetaToApplePayPaymentRequest());
20211
+ var _this7 = this;
20212
+ var applePayApiVersion = getSupportedApplePayVersion();
20213
+ if (applePayApiVersion === 0) {
20214
+ this.handleOnUnavailable('Apple Pay version not supported');
20215
+ return;
20216
+ }
20217
+ this.paymentSession = new ApplePaySession(applePayApiVersion, this.mapMetaToApplePayPaymentRequest());
20138
20218
  this.paymentSession.onvalidatemerchant = this.onValidateMerchant;
20139
20219
  this.paymentSession.onpaymentauthorized = this.onPaymentAuthorized;
20140
20220
  this.paymentSession.oncancel = this.onCancelPayment;
20141
20221
  this.paymentSession.onshippingcontactselected = this.onShippingContactUpdated;
20142
20222
  this.paymentSession.onshippingmethodselected = this.onShippingMethodUpdated;
20143
20223
  this.paymentSession.begin();
20224
+ // As part of PAYCA-2065 we detect that the paymentSession.onvalidatemerchant is not
20225
+ // executed if the browser is not safari. In that case, we handle it outside the
20226
+ // actual merchant validation function.
20227
+ var isIOS = /iPhone|iPad|iPod/.test(navigator.userAgent);
20228
+ var isDesktopRequestIOS = navigator.maxTouchPoints > 1 && /Macintosh/.test(navigator.userAgent);
20229
+ if (!window.safari && !isIOS && !isDesktopRequestIOS) {
20230
+ this.handleMerchantOnButtonClickEvent()["catch"](function (err) {
20231
+ console.error('Error while processing merchant callback', err);
20232
+ _this7.paymentSession.abort();
20233
+ });
20234
+ }
20144
20235
  }
20145
20236
  }, {
20146
20237
  key: "getMerchantSession",
20147
20238
  value: function getMerchantSession() {
20148
- var _this7 = this;
20239
+ var _this8 = this;
20149
20240
  return new Promise(function (resolve, reject) {
20150
- return _this7.api.paymentSource().createSession(_extends({
20151
- service_id: _this7.serviceId,
20241
+ return _this8.api.paymentSource().createSession(_extends({
20242
+ service_id: _this8.serviceId,
20152
20243
  session_id: window.location.hostname,
20153
- store_name: _this7.meta.store_name
20154
- }, _this7.isShippingRequired() && {
20155
- request_shipping: _this7.meta.request_shipping
20244
+ store_name: _this8.meta.store_name
20245
+ }, _this8.isShippingRequired() && {
20246
+ request_shipping: _this8.meta.request_shipping
20156
20247
  })).then(function (res) {
20157
20248
  resolve(res);
20158
20249
  })["catch"](function (err) {
@@ -20169,8 +20260,8 @@
20169
20260
  while (1) switch (_context4.n) {
20170
20261
  case 0:
20171
20262
  _context4.n = 1;
20172
- return this.eventEmitter.emitWithResult(EVENT$2.ON_CLICK, {
20173
- event: EVENT$2.ON_CLICK
20263
+ return this.eventEmitter.emitWithResult(EVENT$1.ON_CLICK, {
20264
+ event: EVENT$1.ON_CLICK
20174
20265
  });
20175
20266
  case 1:
20176
20267
  results = _context4.v;
@@ -20494,8 +20585,8 @@
20494
20585
  * Used to translate shipping-related Google Pay events to the unified event system.
20495
20586
  */
20496
20587
  ({
20497
- SHIPPING_ADDRESS: EVENT$2.ON_SHIPPING_ADDRESS_CHANGE,
20498
- SHIPPING_OPTION: EVENT$2.ON_SHIPPING_OPTIONS_CHANGE
20588
+ SHIPPING_ADDRESS: EVENT$1.ON_SHIPPING_ADDRESS_CHANGE,
20589
+ SHIPPING_OPTION: EVENT$1.ON_SHIPPING_OPTIONS_CHANGE
20499
20590
  });
20500
20591
 
20501
20592
  /**
@@ -20860,8 +20951,8 @@
20860
20951
  buttonColor: ((_c = this.getMetaStyles()) === null || _c === void 0 ? void 0 : _c.button_color) || 'default'
20861
20952
  });
20862
20953
  button.appendChild(googlePayButton);
20863
- this.eventEmitter.emit(EVENT$2.LOADED, {
20864
- event: EVENT$2.LOADED
20954
+ this.eventEmitter.emit(EVENT$1.LOADED, {
20955
+ event: EVENT$1.LOADED
20865
20956
  });
20866
20957
  }
20867
20958
  }, {
@@ -20890,8 +20981,8 @@
20890
20981
  while (1) switch (_context3.n) {
20891
20982
  case 0:
20892
20983
  _context3.n = 1;
20893
- return this.eventEmitter.emitWithResult(EVENT$2.ON_CLICK, {
20894
- event: EVENT$2.ON_CLICK
20984
+ return this.eventEmitter.emitWithResult(EVENT$1.ON_CLICK, {
20985
+ event: EVENT$1.ON_CLICK
20895
20986
  });
20896
20987
  case 1:
20897
20988
  results = _context3.v;
@@ -20917,8 +21008,8 @@
20917
21008
  while (1) switch (_context4.n) {
20918
21009
  case 0:
20919
21010
  return _context4.a(2, this.paymentsClient.loadPaymentData(this.createPaymentDataRequest())["catch"](function (err) {
20920
- _this6.eventEmitter.emit(EVENT$2.CHECKOUT_CLOSE, {
20921
- event: EVENT$2.CHECKOUT_CLOSE
21011
+ _this6.eventEmitter.emit(EVENT$1.CHECKOUT_CLOSE, {
21012
+ event: EVENT$1.CHECKOUT_CLOSE
20922
21013
  });
20923
21014
  _this6.processingButtonClick = false;
20924
21015
  throw err;
@@ -20982,13 +21073,13 @@
20982
21073
  if (intermediatePaymentData.callbackTrigger === 'INITIALIZE' || intermediatePaymentData.callbackTrigger === 'SHIPPING_ADDRESS') {
20983
21074
  callbackIntent = 'SHIPPING_ADDRESS';
20984
21075
  eventData = {
20985
- event: EVENT$2.ON_SHIPPING_ADDRESS_CHANGE,
21076
+ event: EVENT$1.ON_SHIPPING_ADDRESS_CHANGE,
20986
21077
  data: parsedUpdateData.shipping
20987
21078
  };
20988
21079
  } else if (intermediatePaymentData.callbackTrigger === 'SHIPPING_OPTION') {
20989
21080
  callbackIntent = 'SHIPPING_OPTION';
20990
21081
  eventData = {
20991
- event: EVENT$2.ON_SHIPPING_OPTIONS_CHANGE,
21082
+ event: EVENT$1.ON_SHIPPING_OPTIONS_CHANGE,
20992
21083
  data: {
20993
21084
  shipping_option_id: (_a = parsedUpdateData.selected_shipping_option) === null || _a === void 0 ? void 0 : _a.id,
20994
21085
  label: (_b = parsedUpdateData.selected_shipping_option) === null || _b === void 0 ? void 0 : _b.label,
@@ -21688,7 +21779,7 @@
21688
21779
  }, {
21689
21780
  key: "onSelectInsert",
21690
21781
  value: function onSelectInsert(selector, dataType) {
21691
- this.on(EVENT$5.SELECT, function (event) {
21782
+ this.on(EVENT$4.SELECT, function (event) {
21692
21783
  Event$1.insertToInput(selector, dataType, event);
21693
21784
  });
21694
21785
  }
@@ -22258,7 +22349,7 @@
22258
22349
  * @param {string} CHECKOUT_COMPLETED=checkoutCompleted Event sent on successful checkout by customer. Check [data](#EventDataCheckoutCompletedData) for more information.
22259
22350
  * @param {string} CHECKOUT_ERROR=checkoutError Event sent on error checkout by customer. Check [data](#EventData) for more information.
22260
22351
  */
22261
- var EVENT$1;
22352
+ var EVENT;
22262
22353
  (function (EVENT) {
22263
22354
  EVENT["IFRAME_LOADED"] = "iframeLoaded";
22264
22355
  EVENT["CHECKOUT_READY"] = "checkoutReady";
@@ -22266,7 +22357,7 @@
22266
22357
  EVENT["CHECKOUT_ERROR"] = "checkoutError";
22267
22358
  EVENT["CHECKOUT_POPUP_OPEN"] = "checkoutPopupOpen";
22268
22359
  EVENT["CHECKOUT_POPUP_CLOSE"] = "checkoutPopupClose";
22269
- })(EVENT$1 || (EVENT$1 = {}));
22360
+ })(EVENT || (EVENT = {}));
22270
22361
  /**
22271
22362
  * List of available event data types
22272
22363
  * @enum EVENT_DATA_TYPE
@@ -22436,25 +22527,25 @@
22436
22527
  var _this = this;
22437
22528
  var widgetId = this.link.getParams().widget_id;
22438
22529
  if (!widgetId) return;
22439
- this.iFrameEvent.on(EVENT$1.CHECKOUT_READY, widgetId, function (_ref) {
22530
+ this.iFrameEvent.on(EVENT.CHECKOUT_READY, widgetId, function (_ref) {
22440
22531
  var data = _ref.data;
22441
- _this.eventEmitter.emit(EVENT$1.CHECKOUT_READY, data);
22532
+ _this.eventEmitter.emit(EVENT.CHECKOUT_READY, data);
22442
22533
  });
22443
- this.iFrameEvent.on(EVENT$1.CHECKOUT_COMPLETED, widgetId, function (_ref2) {
22534
+ this.iFrameEvent.on(EVENT.CHECKOUT_COMPLETED, widgetId, function (_ref2) {
22444
22535
  var data = _ref2.data;
22445
- _this.eventEmitter.emit(EVENT$1.CHECKOUT_COMPLETED, data);
22536
+ _this.eventEmitter.emit(EVENT.CHECKOUT_COMPLETED, data);
22446
22537
  });
22447
- this.iFrameEvent.on(EVENT$1.CHECKOUT_POPUP_OPEN, widgetId, function (_ref3) {
22538
+ this.iFrameEvent.on(EVENT.CHECKOUT_POPUP_OPEN, widgetId, function (_ref3) {
22448
22539
  var data = _ref3.data;
22449
- _this.eventEmitter.emit(EVENT$1.CHECKOUT_POPUP_OPEN, data);
22540
+ _this.eventEmitter.emit(EVENT.CHECKOUT_POPUP_OPEN, data);
22450
22541
  });
22451
- this.iFrameEvent.on(EVENT$1.CHECKOUT_POPUP_CLOSE, widgetId, function (_ref4) {
22542
+ this.iFrameEvent.on(EVENT.CHECKOUT_POPUP_CLOSE, widgetId, function (_ref4) {
22452
22543
  var data = _ref4.data;
22453
- _this.eventEmitter.emit(EVENT$1.CHECKOUT_POPUP_CLOSE, data);
22544
+ _this.eventEmitter.emit(EVENT.CHECKOUT_POPUP_CLOSE, data);
22454
22545
  });
22455
- this.iFrameEvent.on(EVENT$1.CHECKOUT_ERROR, widgetId, function (_ref5) {
22546
+ this.iFrameEvent.on(EVENT.CHECKOUT_ERROR, widgetId, function (_ref5) {
22456
22547
  var data = _ref5.data;
22457
- _this.eventEmitter.emit(EVENT$1.CHECKOUT_ERROR, data);
22548
+ _this.eventEmitter.emit(EVENT.CHECKOUT_ERROR, data);
22458
22549
  });
22459
22550
  if (this.autoResize) this.useAutoResize(true);
22460
22551
  }
@@ -22477,7 +22568,7 @@
22477
22568
  if (iframeElement) {
22478
22569
  iframeElement.onload = function () {
22479
22570
  _this2.isIframeLoaded = true;
22480
- _this2.eventEmitter.emit(EVENT$1.IFRAME_LOADED, {});
22571
+ _this2.eventEmitter.emit(EVENT.IFRAME_LOADED, {});
22481
22572
  if (_this2.injectedCustomerData) {
22482
22573
  _this2.injectCustomerData(_this2.injectedCustomerData);
22483
22574
  _this2.injectedCustomerData = null;
@@ -22964,7 +23055,7 @@
22964
23055
  }]);
22965
23056
  }();
22966
23057
 
22967
- var EVENT;
23058
+ exports.WALLET_BUTTONS_EXPRESS_EVENT = void 0;
22968
23059
  (function (EVENT) {
22969
23060
  EVENT["UNAVAILABLE"] = "unavailable";
22970
23061
  EVENT["ERROR"] = "error";
@@ -22975,12 +23066,13 @@
22975
23066
  EVENT["ON_CHECKOUT_CLOSE"] = "onCheckoutClose";
22976
23067
  EVENT["ON_SHIPPING_ADDRESS_CHANGE"] = "onShippingAddressChange";
22977
23068
  EVENT["ON_SHIPPING_OPTIONS_CHANGE"] = "onShippingOptionsChange";
22978
- })(EVENT || (EVENT = {}));
23069
+ })(exports.WALLET_BUTTONS_EXPRESS_EVENT || (exports.WALLET_BUTTONS_EXPRESS_EVENT = {}));
22979
23070
 
22980
23071
  var BaseWalletButton = /*#__PURE__*/function () {
22981
23072
  function BaseWalletButton(selector, publicKeyOrAccessToken, gatewayId, meta, requiredMetaFields) {
22982
23073
  _classCallCheck(this, BaseWalletButton);
22983
23074
  this.env = DEFAULT_ENV;
23075
+ this.isDisabled = false;
22984
23076
  this.onShippingOptionsChangeHandlerRegistered = false;
22985
23077
  this.eventEmitter = new EventEmitter();
22986
23078
  this.container = new Container(selector);
@@ -23013,6 +23105,30 @@
23013
23105
  this.env = env;
23014
23106
  this.api.setEnv(env, alias);
23015
23107
  }
23108
+ /**
23109
+ * Enables the wallet button, restoring interactivity and visual appearance.
23110
+ *
23111
+ * @example
23112
+ * button.enable();
23113
+ */
23114
+ }, {
23115
+ key: "enable",
23116
+ value: function enable() {
23117
+ this.isDisabled = false;
23118
+ this.applyDisabledStyles();
23119
+ }
23120
+ /**
23121
+ * Disables the wallet button, preventing clicks and applying a visual disabled state.
23122
+ *
23123
+ * @example
23124
+ * button.disable();
23125
+ */
23126
+ }, {
23127
+ key: "disable",
23128
+ value: function disable() {
23129
+ this.isDisabled = true;
23130
+ this.applyDisabledStyles();
23131
+ }
23016
23132
  /**
23017
23133
  * Callback for onClick method.
23018
23134
  *
@@ -23040,7 +23156,7 @@
23040
23156
  key: "onClick",
23041
23157
  value: function onClick(handler) {
23042
23158
  if (typeof handler === 'function') {
23043
- return this.eventEmitter.subscribe(EVENT.ON_CLICK, handler);
23159
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_CLICK, handler);
23044
23160
  }
23045
23161
  this.handleOnError(new Error('onClick event handler is required to return the wallet token string.'));
23046
23162
  }
@@ -23069,10 +23185,10 @@
23069
23185
  value: function onPaymentSuccessful(handler) {
23070
23186
  var _this = this;
23071
23187
  if (typeof handler === 'function') {
23072
- return this.eventEmitter.subscribe(EVENT.PAYMENT_SUCCESSFUL, handler);
23188
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_SUCCESSFUL, handler);
23073
23189
  }
23074
23190
  return new Promise(function (resolve) {
23075
- return _this.eventEmitter.subscribe(EVENT.PAYMENT_SUCCESSFUL, function (data) {
23191
+ return _this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_SUCCESSFUL, function (data) {
23076
23192
  return resolve(data);
23077
23193
  });
23078
23194
  });
@@ -23102,10 +23218,10 @@
23102
23218
  value: function onPaymentInReview(handler) {
23103
23219
  var _this2 = this;
23104
23220
  if (typeof handler === 'function') {
23105
- return this.eventEmitter.subscribe(EVENT.PAYMENT_IN_REVIEW, handler);
23221
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_IN_REVIEW, handler);
23106
23222
  }
23107
23223
  return new Promise(function (resolve) {
23108
- return _this2.eventEmitter.subscribe(EVENT.PAYMENT_IN_REVIEW, function (data) {
23224
+ return _this2.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_IN_REVIEW, function (data) {
23109
23225
  return resolve(data);
23110
23226
  });
23111
23227
  });
@@ -23135,10 +23251,10 @@
23135
23251
  value: function onPaymentError(handler) {
23136
23252
  var _this3 = this;
23137
23253
  if (typeof handler === 'function') {
23138
- return this.eventEmitter.subscribe(EVENT.PAYMENT_ERROR, handler);
23254
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_ERROR, handler);
23139
23255
  }
23140
23256
  return new Promise(function (resolve) {
23141
- return _this3.eventEmitter.subscribe(EVENT.PAYMENT_ERROR, function (err) {
23257
+ return _this3.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_ERROR, function (err) {
23142
23258
  return resolve(err);
23143
23259
  });
23144
23260
  });
@@ -23164,10 +23280,10 @@
23164
23280
  value: function onCheckoutClose(handler) {
23165
23281
  var _this4 = this;
23166
23282
  if (typeof handler === 'function') {
23167
- return this.eventEmitter.subscribe(EVENT.ON_CHECKOUT_CLOSE, handler);
23283
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_CHECKOUT_CLOSE, handler);
23168
23284
  }
23169
23285
  return new Promise(function (resolve) {
23170
- return _this4.eventEmitter.subscribe(EVENT.ON_CHECKOUT_CLOSE, function (err) {
23286
+ return _this4.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_CHECKOUT_CLOSE, function (err) {
23171
23287
  return resolve(err);
23172
23288
  });
23173
23289
  });
@@ -23198,7 +23314,7 @@
23198
23314
  key: "onShippingAddressChange",
23199
23315
  value: function onShippingAddressChange(handler) {
23200
23316
  if (typeof handler === 'function') {
23201
- return this.eventEmitter.subscribe(EVENT.ON_SHIPPING_ADDRESS_CHANGE, handler);
23317
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_SHIPPING_ADDRESS_CHANGE, handler);
23202
23318
  }
23203
23319
  this.handleOnError(new Error('onShippingAddressChange event handler is required to return the wallet token string or reject.'));
23204
23320
  }
@@ -23229,7 +23345,7 @@
23229
23345
  value: function onShippingOptionsChange(handler) {
23230
23346
  if (typeof handler === 'function') {
23231
23347
  this.onShippingOptionsChangeHandlerRegistered = true;
23232
- return this.eventEmitter.subscribe(EVENT.ON_SHIPPING_OPTIONS_CHANGE, handler);
23348
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_SHIPPING_OPTIONS_CHANGE, handler);
23233
23349
  }
23234
23350
  this.handleOnError(new Error('onShippingOptionsChange event handler is required to return the wallet token string or reject.'));
23235
23351
  }
@@ -23254,10 +23370,10 @@
23254
23370
  value: function onUnavailable(handler) {
23255
23371
  var _this5 = this;
23256
23372
  if (typeof handler === 'function') {
23257
- return this.eventEmitter.subscribe(EVENT.UNAVAILABLE, handler);
23373
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.UNAVAILABLE, handler);
23258
23374
  }
23259
23375
  return new Promise(function (resolve) {
23260
- return _this5.eventEmitter.subscribe(EVENT.UNAVAILABLE, function (err) {
23376
+ return _this5.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.UNAVAILABLE, function (err) {
23261
23377
  return resolve(err);
23262
23378
  });
23263
23379
  });
@@ -23284,10 +23400,10 @@
23284
23400
  value: function onError(handler) {
23285
23401
  var _this6 = this;
23286
23402
  if (typeof handler === 'function') {
23287
- return this.eventEmitter.subscribe(EVENT.ERROR, handler);
23403
+ return this.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.ERROR, handler);
23288
23404
  }
23289
23405
  return new Promise(function (resolve) {
23290
- return _this6.eventEmitter.subscribe(EVENT.ERROR, function (err) {
23406
+ return _this6.eventEmitter.subscribe(exports.WALLET_BUTTONS_EXPRESS_EVENT.ERROR, function (err) {
23291
23407
  return resolve(err);
23292
23408
  });
23293
23409
  });
@@ -23324,8 +23440,8 @@
23324
23440
  var _this8 = this;
23325
23441
  return this.api.charge().walletCallback(data)["catch"](function (err) {
23326
23442
  var _a;
23327
- _this8.eventEmitter.emit(EVENT.PAYMENT_ERROR, {
23328
- event: EVENT.PAYMENT_ERROR,
23443
+ _this8.eventEmitter.emit(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_ERROR, {
23444
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_ERROR,
23329
23445
  chargeId: (_a = _this8.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge.id,
23330
23446
  data: _this8.eventDataFromApiError(err)
23331
23447
  });
@@ -23339,7 +23455,7 @@
23339
23455
  var _this9 = this;
23340
23456
  return this.api.charge().walletCapture(data).then(function (captureResult) {
23341
23457
  var _a;
23342
- var event = captureResult.status === 'inreview' ? EVENT.PAYMENT_IN_REVIEW : EVENT.PAYMENT_SUCCESSFUL;
23458
+ var event = captureResult.status === 'inreview' ? exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_IN_REVIEW : exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_SUCCESSFUL;
23343
23459
  _this9.eventEmitter.emit(event, {
23344
23460
  event: event,
23345
23461
  chargeId: (_a = _this9.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge.id,
@@ -23348,8 +23464,8 @@
23348
23464
  return captureResult;
23349
23465
  })["catch"](function (err) {
23350
23466
  var _a;
23351
- _this9.eventEmitter.emit(EVENT.PAYMENT_ERROR, {
23352
- event: EVENT.PAYMENT_ERROR,
23467
+ _this9.eventEmitter.emit(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_ERROR, {
23468
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_ERROR,
23353
23469
  chargeId: (_a = _this9.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge.id,
23354
23470
  data: _this9.eventDataFromApiError(err)
23355
23471
  });
@@ -23360,8 +23476,8 @@
23360
23476
  key: "handleMerchantOnExpressButtonClickEvent",
23361
23477
  value: function handleMerchantOnExpressButtonClickEvent() {
23362
23478
  var _this0 = this;
23363
- return this.eventEmitter.emitWithResult(EVENT.ON_CLICK, {
23364
- event: EVENT.ON_CLICK
23479
+ return this.eventEmitter.emitWithResult(exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_CLICK, {
23480
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_CLICK
23365
23481
  }).then(function (result) {
23366
23482
  var _a;
23367
23483
  if (!result || result.length === 0) {
@@ -23438,8 +23554,8 @@
23438
23554
  value: function handleCheckoutClose() {
23439
23555
  var _a;
23440
23556
  var chargeId = (_a = this.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge.id;
23441
- this.eventEmitter.emit(EVENT.ON_CHECKOUT_CLOSE, _extends({
23442
- event: EVENT.ON_CHECKOUT_CLOSE
23557
+ this.eventEmitter.emit(exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_CHECKOUT_CLOSE, _extends({
23558
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_CHECKOUT_CLOSE
23443
23559
  }, chargeId && {
23444
23560
  chargeId: chargeId
23445
23561
  }));
@@ -23447,8 +23563,8 @@
23447
23563
  }, {
23448
23564
  key: "handleOnUnavailable",
23449
23565
  value: function handleOnUnavailable() {
23450
- this.eventEmitter.emit(EVENT.UNAVAILABLE, {
23451
- event: EVENT.UNAVAILABLE
23566
+ this.eventEmitter.emit(exports.WALLET_BUTTONS_EXPRESS_EVENT.UNAVAILABLE, {
23567
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.UNAVAILABLE
23452
23568
  });
23453
23569
  }
23454
23570
  }, {
@@ -23459,8 +23575,8 @@
23459
23575
  console.error(error);
23460
23576
  }
23461
23577
  var chargeId = (_a = this.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge.id;
23462
- this.eventEmitter.emit(EVENT.ERROR, _extends(_extends({
23463
- event: EVENT.ERROR
23578
+ this.eventEmitter.emit(exports.WALLET_BUTTONS_EXPRESS_EVENT.ERROR, _extends(_extends({
23579
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.ERROR
23464
23580
  }, chargeId && {
23465
23581
  chargeId: chargeId
23466
23582
  }), {
@@ -23477,6 +23593,23 @@
23477
23593
  code: ((_c = err === null || err === void 0 ? void 0 : err.error) === null || _c === void 0 ? void 0 : _c.code) || (err === null || err === void 0 ? void 0 : err.code) || ((_d = err === null || err === void 0 ? void 0 : err.error_summary) === null || _d === void 0 ? void 0 : _d.code)
23478
23594
  };
23479
23595
  }
23596
+ }, {
23597
+ key: "applyDisabledStyles",
23598
+ value: function applyDisabledStyles() {
23599
+ var element = this.container.getElement();
23600
+ if (!element) {
23601
+ return;
23602
+ }
23603
+ if (this.isDisabled) {
23604
+ element.style.pointerEvents = 'none';
23605
+ element.style.opacity = '0.5';
23606
+ element.setAttribute('aria-disabled', 'true');
23607
+ } else {
23608
+ element.style.pointerEvents = '';
23609
+ element.style.opacity = '';
23610
+ element.removeAttribute('aria-disabled');
23611
+ }
23612
+ }
23480
23613
  }, {
23481
23614
  key: "validateRequiredMetaFields",
23482
23615
  value: function validateRequiredMetaFields(requiredMetaFields) {
@@ -23519,11 +23652,11 @@
23519
23652
  return "\n apple-pay-button {\n display: inline-block;\n --apple-pay-button-width: 100%;\n --apple-pay-button-height: 40px;\n --apple-pay-button-border-radius: 5px;\n --apple-pay-button-padding: 5px 0px;\n }\n ";
23520
23653
  };
23521
23654
 
23522
- var ContactShippingEditingMode;
23655
+ exports.ContactShippingEditingMode = void 0;
23523
23656
  (function (ContactShippingEditingMode) {
23524
23657
  ContactShippingEditingMode["AVAILABLE"] = "available";
23525
23658
  ContactShippingEditingMode["STORE_PICKUP"] = "store_pickup";
23526
- })(ContactShippingEditingMode || (ContactShippingEditingMode = {}));
23659
+ })(exports.ContactShippingEditingMode || (exports.ContactShippingEditingMode = {}));
23527
23660
 
23528
23661
  var DEFAULT_APPLE_PAY_CAPABILITIES = ['paymentCredentialsAvailable'];
23529
23662
  /**
@@ -23548,7 +23681,14 @@
23548
23681
  _classCallCheck(this, ApplePayWalletButtonExpress);
23549
23682
  _this = _callSuper(this, ApplePayWalletButtonExpress, [selector, publicKeyOrAccessToken, gatewayId, meta, ['amount_label', 'country']]);
23550
23683
  _this.onApplePayButtonClicked = function () {
23551
- var applePayApiVersion = 14;
23684
+ if (_this.isDisabled) {
23685
+ return;
23686
+ }
23687
+ var applePayApiVersion = getSupportedApplePayVersion();
23688
+ if (applePayApiVersion === 0) {
23689
+ _this.handleOnUnavailable();
23690
+ return;
23691
+ }
23552
23692
  _this.paymentSession = new ApplePaySession(applePayApiVersion, _this.createRequest());
23553
23693
  _this.paymentSession.onvalidatemerchant = _this.onValidateMerchant;
23554
23694
  _this.paymentSession.onpaymentauthorized = _this.onPaymentAuthorized;
@@ -23556,6 +23696,17 @@
23556
23696
  _this.paymentSession.onshippingmethodselected = _this.onApplePayShippingMethodUpdate;
23557
23697
  _this.paymentSession.onshippingcontactselected = _this.onApplePayShippingContactUpdate;
23558
23698
  _this.paymentSession.begin();
23699
+ // As part of PAYCA-2065 we detect that the paymentSession.onvalidatemerchant is not
23700
+ // executed if the browser is not safari. In that case, we handle it outside the
23701
+ // actual merchant validation function.
23702
+ var isIOS = /iPhone|iPad|iPod/.test(navigator.userAgent);
23703
+ var isDesktopRequestIOS = navigator.maxTouchPoints > 1 && /Macintosh/.test(navigator.userAgent);
23704
+ if (!window.safari && !isIOS && !isDesktopRequestIOS) {
23705
+ _this.handleMerchantOnExpressButtonClickEvent()["catch"](function (err) {
23706
+ console.error('Error while processing merchant callback', err);
23707
+ _this.paymentSession.abort();
23708
+ });
23709
+ }
23559
23710
  };
23560
23711
  _this.onValidateMerchant = function (event) {
23561
23712
  _this.handleMerchantOnExpressButtonClickEvent().then(function () {
@@ -23631,8 +23782,8 @@
23631
23782
  } catch (error) {
23632
23783
  // this ensures thatwe always call completePayment and emit error callback even if there's an uncaught exception
23633
23784
  _this.paymentSession.completePayment(ApplePaySession.STATUS_FAILURE);
23634
- _this.eventEmitter.emit(EVENT.PAYMENT_ERROR, {
23635
- event: EVENT.PAYMENT_ERROR,
23785
+ _this.eventEmitter.emit(exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_ERROR, {
23786
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.PAYMENT_ERROR,
23636
23787
  chargeId: (_k = _this.chargeWalletTokenMeta) === null || _k === void 0 ? void 0 : _k.charge.id,
23637
23788
  data: {
23638
23789
  message: error instanceof Error ? error.message : 'Payment processing failed',
@@ -23652,7 +23803,7 @@
23652
23803
  while (1) switch (_context.n) {
23653
23804
  case 0:
23654
23805
  return _context.a(2, this.handleMerchantOnShippingChangedEvent({
23655
- event: EVENT.ON_SHIPPING_ADDRESS_CHANGE,
23806
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_SHIPPING_ADDRESS_CHANGE,
23656
23807
  chargeId: (_a = this.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge.id,
23657
23808
  data: this.parseShippingContactUpdateEvent(data)
23658
23809
  }).then(function (response) {
@@ -23687,7 +23838,7 @@
23687
23838
  while (1) switch (_context2.n) {
23688
23839
  case 0:
23689
23840
  return _context2.a(2, this.handleMerchantOnShippingChangedEvent({
23690
- event: EVENT.ON_SHIPPING_OPTIONS_CHANGE,
23841
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_SHIPPING_OPTIONS_CHANGE,
23691
23842
  chargeId: (_b = this.chargeWalletTokenMeta) === null || _b === void 0 ? void 0 : _b.charge.id,
23692
23843
  data: this.parseShippingMethodUpdateEvent(data)
23693
23844
  }).then(function (_response) {
@@ -23815,6 +23966,7 @@
23815
23966
  return;
23816
23967
  }
23817
23968
  applePayButton.addEventListener('click', this.onApplePayButtonClicked.bind(this));
23969
+ this.applyDisabledStyles();
23818
23970
  }
23819
23971
  }, {
23820
23972
  key: "createRequest",
@@ -23823,7 +23975,7 @@
23823
23975
  // https://developer.apple.com/documentation/apple_pay_on_the_web/applepaypaymentrequest
23824
23976
  var shippingContactEditingMode;
23825
23977
  if (this.meta.shipping_editing_mode) {
23826
- shippingContactEditingMode = this.meta.shipping_editing_mode === ContactShippingEditingMode.AVAILABLE ? 'available' : 'storePickup';
23978
+ shippingContactEditingMode = this.meta.shipping_editing_mode === exports.ContactShippingEditingMode.AVAILABLE ? 'available' : 'storePickup';
23827
23979
  }
23828
23980
  return _extends(_extends({
23829
23981
  countryCode: this.meta.country,
@@ -24007,13 +24159,20 @@
24007
24159
  key: "load",
24008
24160
  value: function load() {
24009
24161
  var _this2 = this;
24010
- if (!window.Promise) return this.handleOnUnavailable();
24162
+ if (!window.Promise) {
24163
+ return this.handleOnUnavailable();
24164
+ }
24011
24165
  this.getGatewayWalletConfig().then(function (config) {
24012
- if (!config || config.type !== 'Paypal' || !config.credentials || !config.credentials.client_auth) throw new Error('Invalid configuration');
24166
+ if (!config || config.type !== 'Paypal' || !config.credentials || !config.credentials.client_auth) {
24167
+ throw new Error('Invalid configuration');
24168
+ }
24013
24169
  _this2.config = config;
24014
24170
  _this2.renderPaypalButton();
24171
+ _this2.applyDisabledStyles();
24015
24172
  })["catch"](function (err) {
24016
- if (err) _this2.handleOnError(err);
24173
+ if (err) {
24174
+ _this2.handleOnError(err);
24175
+ }
24017
24176
  _this2.handleOnUnavailable();
24018
24177
  });
24019
24178
  }
@@ -24030,6 +24189,7 @@
24030
24189
  value: function setMeta(meta) {
24031
24190
  this.meta = meta;
24032
24191
  this.renderPaypalButton();
24192
+ this.applyDisabledStyles();
24033
24193
  }
24034
24194
  }, {
24035
24195
  key: "renderPaypalButton",
@@ -24046,7 +24206,7 @@
24046
24206
  var _this3 = this;
24047
24207
  var _a, _b;
24048
24208
  var buttonId = ((_a = this.container.getElement()) === null || _a === void 0 ? void 0 : _a.id) || '';
24049
- var paypalScript = document.createElement("script");
24209
+ var paypalScript = document.createElement('script');
24050
24210
  paypalScript.src = "https://www.paypal.com/sdk/js?client-id=".concat((_b = this.config.credentials) === null || _b === void 0 ? void 0 : _b.client_auth, "&currency=").concat(this.meta.currency).concat(this.meta.pay_later === true ? '&enable-funding=paylater&disable-funding=card' : '&disable-funding=credit,card').concat(!this.meta.capture ? '&intent=authorize' : '');
24051
24211
  paypalScript.async = true;
24052
24212
  paypalScript.onload = function () {
@@ -24065,7 +24225,7 @@
24065
24225
  var _this4 = this;
24066
24226
  var _a, _b, _c;
24067
24227
  var buttonId = ((_a = this.container.getElement()) === null || _a === void 0 ? void 0 : _a.id) || '';
24068
- var paypalScript = document.createElement("script");
24228
+ var paypalScript = document.createElement('script');
24069
24229
  // buyer-country is only used in Sandbox. It shouldn't be used in production. Based on buyer's geolocation this parameter determine which funding sources are eligible for a given buyer. Refer the link https://developer.paypal.com/sdk/js/configuration/#link-buyercountry
24070
24230
  paypalScript.src = "https://www.paypal.com/sdk/js?client-id=".concat((_b = this.config.credentials) === null || _b === void 0 ? void 0 : _b.client_auth, "&currency=").concat(this.meta.currency, "&components=buttons,funding-eligibility,messages&enable-funding=paylater").concat(!this.meta.capture ? '&intent=authorize' : '').concat(((_c = this.config) === null || _c === void 0 ? void 0 : _c.mode) === 'live' ? '' : '&buyer-country=AU');
24071
24231
  paypalScript.async = true;
@@ -24106,6 +24266,9 @@
24106
24266
  style: this.meta.style
24107
24267
  }), {
24108
24268
  onClick: function onClick(_data, actions) {
24269
+ if (_this5.isDisabled) {
24270
+ return actions.reject();
24271
+ }
24109
24272
  return _this5.handleMerchantOnExpressButtonClickEvent().then(function () {
24110
24273
  return actions.resolve();
24111
24274
  })["catch"](function () {
@@ -24116,7 +24279,9 @@
24116
24279
  createOrder: function createOrder() {
24117
24280
  return new Promise(function (resolve, reject) {
24118
24281
  var _a, _b;
24119
- if (!_this5.api.auth) return reject(new Error('Wallet Token not injected. Please handle onClick correctly.'));
24282
+ if (!_this5.api.auth) {
24283
+ return reject(new Error('Wallet Token not injected. Please handle onClick correctly.'));
24284
+ }
24120
24285
  var shipping = (_b = (_a = _this5.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge) === null || _b === void 0 ? void 0 : _b.shipping;
24121
24286
  if (shipping) {
24122
24287
  var hasCompleteShippingAddress = ['address_line1', 'address_city', 'address_country', 'address_state', 'address_postcode'].every(function (key) {
@@ -24135,7 +24300,9 @@
24135
24300
  });
24136
24301
  },
24137
24302
  onApprove: function onApprove(data) {
24138
- if (_this5.pendingApprovalPromise) return _this5.pendingApprovalPromise;
24303
+ if (_this5.pendingApprovalPromise) {
24304
+ return _this5.pendingApprovalPromise;
24305
+ }
24139
24306
  _this5.pendingApprovalPromise = _this5.executeWalletCapture({
24140
24307
  payment_method_id: data.orderID,
24141
24308
  customer: {
@@ -24179,7 +24346,7 @@
24179
24346
  return _context.a(2);
24180
24347
  case 1:
24181
24348
  return _context.a(2, this.handleMerchantOnShippingChangedEvent({
24182
- event: EVENT.ON_SHIPPING_ADDRESS_CHANGE,
24349
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_SHIPPING_ADDRESS_CHANGE,
24183
24350
  chargeId: (_a = this.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge.id,
24184
24351
  data: {
24185
24352
  address_city: data.shippingAddress.city,
@@ -24214,7 +24381,7 @@
24214
24381
  while (1) switch (_context2.n) {
24215
24382
  case 0:
24216
24383
  return _context2.a(2, this.handleMerchantOnShippingChangedEvent({
24217
- event: EVENT.ON_SHIPPING_OPTIONS_CHANGE,
24384
+ event: exports.WALLET_BUTTONS_EXPRESS_EVENT.ON_SHIPPING_OPTIONS_CHANGE,
24218
24385
  chargeId: (_a = this.chargeWalletTokenMeta) === null || _a === void 0 ? void 0 : _a.charge.id,
24219
24386
  data: {
24220
24387
  shipping_option_id: data.selectedShippingOption.id,
@@ -44324,7 +44491,7 @@
44324
44491
  exports.ClickToPay = ClickToPay;
44325
44492
  exports.Configuration = Configuration;
44326
44493
  exports.ELEMENT = ELEMENT;
44327
- exports.EVENT = EVENT$5;
44494
+ exports.EVENT = EVENT$4;
44328
44495
  exports.ExternalCheckoutBuilder = Builder$1;
44329
44496
  exports.ExternalCheckoutChecker = Checker;
44330
44497
  exports.FORM_FIELD = FORM_FIELD$1;
@@ -44336,7 +44503,6 @@
44336
44503
  exports.HtmlWidget = HtmlWidget;
44337
44504
  exports.InstructionDebugger = InstructionDebugger;
44338
44505
  exports.MultiWidget = MultiWidget;
44339
- exports.OpenWalletButtons = OpenWalletButtons;
44340
44506
  exports.PAYMENT_TYPE = PAYMENT_TYPE;
44341
44507
  exports.PayPalDataCollector = PayPalDataCollector;
44342
44508
  exports.PayPalSavePaymentSourceWidget = PayPalSavePaymentSourceWidget;