UNPKG

@repeatgg/react-paypal-button-v2

Version:

An easy and simple to use React button component to implement PayPal's Checkout with Smart Payment Buttons V2 (Version 2).

190 lines (188 loc) 33.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PayPalButton = void 0; var _react = _interopRequireDefault(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); var _propTypes = _interopRequireDefault(require("prop-types")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var PayPalButton = exports.PayPalButton = /*#__PURE__*/function (_React$Component) { function PayPalButton(props) { var _this; _classCallCheck(this, PayPalButton); _this = _callSuper(this, PayPalButton, [props]); _this.state = { isSdkReady: false }; return _this; } _inherits(PayPalButton, _React$Component); return _createClass(PayPalButton, [{ key: "componentDidMount", value: function componentDidMount() { if (typeof window !== "undefined" && window !== undefined && window.paypal === undefined) { this.addPaypalSdk(); } else if (typeof window !== "undefined" && window !== undefined && window.paypal !== undefined && this.props.onButtonReady) { this.props.onButtonReady(); } } }, { key: "createOrder", value: function createOrder(data, actions) { var _this$props = this.props, currency = _this$props.currency, options = _this$props.options, amount = _this$props.amount, shippingPreference = _this$props.shippingPreference; return actions.order.create({ purchase_units: [{ amount: { currency_code: currency ? currency : options && options.currency ? options.currency : "USD", value: amount.toString() } }], application_context: { shipping_preference: shippingPreference } }); } }, { key: "onApprove", value: function onApprove(data, actions) { var _this2 = this; return actions.order.capture().then(function (details) { if (_this2.props.onSuccess) { return _this2.props.onSuccess(details, data); } })["catch"](function (err) { if (_this2.props.catchError) { return _this2.props.catchError(err); } }); } }, { key: "render", value: function render() { var _this3 = this; var _this$props2 = this.props, amount = _this$props2.amount, onSuccess = _this$props2.onSuccess, createOrder = _this$props2.createOrder, createSubscription = _this$props2.createSubscription, onApprove = _this$props2.onApprove, onClick = _this$props2.onClick, onCancel = _this$props2.onCancel, style = _this$props2.style; var isSdkReady = this.state.isSdkReady; if (!isSdkReady && (typeof window === "undefined" || window.paypal === undefined)) { return null; } var Button = window.paypal.Buttons.driver("react", { React: _react["default"], ReactDOM: _reactDom["default"] }); var createOrderFn = amount && !createOrder ? function (data, actions) { return _this3.createOrder(data, actions); } : function (data, actions) { return createOrder(data, actions); }; return /*#__PURE__*/_react["default"].createElement(Button, _extends({}, this.props, { createOrder: createSubscription ? undefined : createOrderFn, createSubscription: createSubscription, onApprove: onSuccess ? function (data, actions) { return _this3.onApprove(data, actions); } : function (data, actions) { return onApprove(data, actions); }, onCancel: onCancel, onClick: onClick, style: style })); } }, { key: "addPaypalSdk", value: function addPaypalSdk() { var _this4 = this; var _this$props3 = this.props, options = _this$props3.options, onButtonReady = _this$props3.onButtonReady; var queryParams = []; // replacing camelCase with dashes Object.keys(options).forEach(function (k) { var name = k.split(/(?=[A-Z])/).join("-").toLowerCase(); queryParams.push("".concat(name, "=").concat(options[k])); }); var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://www.paypal.com/sdk/js?".concat(queryParams.join("&")); script.async = true; script.onload = function () { _this4.setState({ isSdkReady: true }); if (onButtonReady) { onButtonReady(); } }; script.onerror = function () { throw new Error("Paypal SDK could not be loaded."); }; document.body.appendChild(script); } }]); }(_react["default"].Component); _defineProperty(PayPalButton, "propTypes", { amount: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]), currency: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]), shippingPreference: _propTypes["default"].string, onSuccess: _propTypes["default"].func, catchError: _propTypes["default"].func, onError: _propTypes["default"].func, createOrder: _propTypes["default"].func, createSubscription: _propTypes["default"].func, onApprove: _propTypes["default"].func, onCancel: _propTypes["default"].func, onClick: _propTypes["default"].func, style: _propTypes["default"].object, options: _propTypes["default"].shape({ clientId: _propTypes["default"].string, merchantId: _propTypes["default"].string, currency: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]), intent: _propTypes["default"].string, commit: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].string]), vault: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].string]), component: _propTypes["default"].string, disableFunding: _propTypes["default"].string, disableCard: _propTypes["default"].string, integrationDate: _propTypes["default"].string, locale: _propTypes["default"].string, buyerCountry: _propTypes["default"].string, debug: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].string]) }), onButtonReady: _propTypes["default"].func }); _defineProperty(PayPalButton, "defaultProps", { style: {}, options: { clientId: "sb", currency: "USD" }, shippingPreference: "GET_FROM_FILE" }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdERvbSIsIl9wcm9wVHlwZXMiLCJlIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9leHRlbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwiYmluZCIsIm4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ0IiwiciIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFwcGx5IiwiX2NsYXNzQ2FsbENoZWNrIiwiYSIsIlR5cGVFcnJvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX2luaGVyaXRzIiwiY3JlYXRlIiwidmFsdWUiLCJfc2V0UHJvdG90eXBlT2YiLCJfZGVmaW5lUHJvcGVydHkiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJQYXlQYWxCdXR0b24iLCJleHBvcnRzIiwiX1JlYWN0JENvbXBvbmVudCIsInByb3BzIiwiX3RoaXMiLCJzdGF0ZSIsImlzU2RrUmVhZHkiLCJjb21wb25lbnREaWRNb3VudCIsIndpbmRvdyIsInVuZGVmaW5lZCIsInBheXBhbCIsImFkZFBheXBhbFNkayIsIm9uQnV0dG9uUmVhZHkiLCJjcmVhdGVPcmRlciIsImRhdGEiLCJhY3Rpb25zIiwiX3RoaXMkcHJvcHMiLCJjdXJyZW5jeSIsIm9wdGlvbnMiLCJhbW91bnQiLCJzaGlwcGluZ1ByZWZlcmVuY2UiLCJvcmRlciIsInB1cmNoYXNlX3VuaXRzIiwiY3VycmVuY3lfY29kZSIsInRvU3RyaW5nIiwiYXBwbGljYXRpb25fY29udGV4dCIsInNoaXBwaW5nX3ByZWZlcmVuY2UiLCJvbkFwcHJvdmUiLCJfdGhpczIiLCJjYXB0dXJlIiwidGhlbiIsImRldGFpbHMiLCJvblN1Y2Nlc3MiLCJlcnIiLCJjYXRjaEVycm9yIiwicmVuZGVyIiwiX3RoaXMzIiwiX3RoaXMkcHJvcHMyIiwiY3JlYXRlU3Vic2NyaXB0aW9uIiwib25DbGljayIsIm9uQ2FuY2VsIiwic3R5bGUiLCJCdXR0b24iLCJCdXR0b25zIiwiZHJpdmVyIiwiUmVhY3QiLCJSZWFjdERPTSIsImNyZWF0ZU9yZGVyRm4iLCJjcmVhdGVFbGVtZW50IiwiX3RoaXM0IiwiX3RoaXMkcHJvcHMzIiwicXVlcnlQYXJhbXMiLCJrZXlzIiwiZm9yRWFjaCIsImsiLCJuYW1lIiwic3BsaXQiLCJqb2luIiwidG9Mb3dlckNhc2UiLCJwdXNoIiwiY29uY2F0Iiwic2NyaXB0IiwiZG9jdW1lbnQiLCJ0eXBlIiwic3JjIiwiYXN5bmMiLCJvbmxvYWQiLCJzZXRTdGF0ZSIsIm9uZXJyb3IiLCJFcnJvciIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9uZU9mVHlwZSIsIm51bWJlciIsInN0cmluZyIsImZ1bmMiLCJvbkVycm9yIiwib2JqZWN0Iiwic2hhcGUiLCJjbGllbnRJZCIsIm1lcmNoYW50SWQiLCJpbnRlbnQiLCJjb21taXQiLCJib29sIiwidmF1bHQiLCJjb21wb25lbnQiLCJkaXNhYmxlRnVuZGluZyIsImRpc2FibGVDYXJkIiwiaW50ZWdyYXRpb25EYXRlIiwibG9jYWxlIiwiYnV5ZXJDb3VudHJ5IiwiZGVidWciXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHsgcGF5cGFsOiBhbnkgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBheVBhbEJ1dHRvblByb3BzIHtcbiAgICBhbW91bnQ/OiBudW1iZXJ8c3RyaW5nLFxuICAgIGN1cnJlbmN5PzogbnVtYmVyfHN0cmluZyxcbiAgICBzaGlwcGluZ1ByZWZlcmVuY2U/OiBcIk5PX1NISVBQSU5HXCIgfCBcIkdFVF9GUk9NX0ZJTEVcIiB8IFwiU0VUX1BST1ZJREVEX0FERFJFU1NcIixcbiAgICBvblN1Y2Nlc3M/OiBGdW5jdGlvbixcbiAgICBjYXRjaEVycm9yPzogRnVuY3Rpb24sXG4gICAgb25FcnJvcj86IEZ1bmN0aW9uLFxuICAgIGNyZWF0ZU9yZGVyPzogRnVuY3Rpb24sXG4gICAgY3JlYXRlU3Vic2NyaXB0aW9uPzogRnVuY3Rpb24sXG4gICAgb25BcHByb3ZlPzogRnVuY3Rpb24sXG4gICAgc3R5bGU/OiBvYmplY3QsXG4gICAgb3B0aW9ucz86IFBheXBhbE9wdGlvbnMsXG4gICAgb25CdXR0b25SZWFkeT86IEZ1bmN0aW9uLFxuICAgIG9uQ2FuY2VsPzogRnVuY3Rpb24sXG4gICAgb25DbGljaz86IEZ1bmN0aW9uLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBheVBhbEJ1dHRvblN0YXRlIHtcbiAgICBpc1Nka1JlYWR5OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF5cGFsT3B0aW9ucyB7XG4gICAgY2xpZW50SWQ/OiBzdHJpbmcsXG4gICAgbWVyY2hhbnRJZD86IHN0cmluZyxcbiAgICBjdXJyZW5jeT86IG51bWJlcnxzdHJpbmcsXG4gICAgaW50ZW50Pzogc3RyaW5nLFxuICAgIGNvbW1pdD86IGJvb2xlYW58c3RyaW5nLFxuICAgIHZhdWx0PzogYm9vbGVhbnxzdHJpbmcsXG4gICAgY29tcG9uZW50Pzogc3RyaW5nLFxuICAgIGRpc2FibGVGdW5kaW5nPzogc3RyaW5nLFxuICAgIGRpc2FibGVDYXJkPzogc3RyaW5nLFxuICAgIGludGVncmF0aW9uRGF0ZT86IHN0cmluZyxcbiAgICBsb2NhbGU/OiBzdHJpbmcsXG4gICAgYnV5ZXJDb3VudHJ5Pzogc3RyaW5nLFxuICAgIGRlYnVnPzogYm9vbGVhbnxzdHJpbmdcbn1cblxuY2xhc3MgUGF5UGFsQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFBheVBhbEJ1dHRvblByb3BzLCBQYXlQYWxCdXR0b25TdGF0ZT4ge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAgIGFtb3VudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgICAgICBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICAgICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgXSksXG4gICAgICAgIGN1cnJlbmN5OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgICAgICAgIFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBdKSxcbiAgICAgICAgc2hpcHBpbmdQcmVmZXJlbmNlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBvblN1Y2Nlc3M6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBjYXRjaEVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgb25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGNyZWF0ZU9yZGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgY3JlYXRlU3Vic2NyaXB0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgb25BcHByb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgb25DYW5jZWw6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICBjbGllbnRJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgIG1lcmNoYW50SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW5jeTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgICAgICAgICAgUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgICAgICAgICBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBpbnRlbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgICBjb21taXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICAgICAgICAgIFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgICAgIFByb3BUeXBlcy5zdHJpbmdcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgdmF1bHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICAgICAgICAgIFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgICAgIFByb3BUeXBlcy5zdHJpbmdcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY29tcG9uZW50OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICAgICAgZGlzYWJsZUZ1bmRpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgICAgICBkaXNhYmxlQ2FyZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgIGludGVncmF0aW9uRGF0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgIGJ1eWVyQ291bnRyeTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgICAgIGRlYnVnOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgICAgICAgICAgICBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgICAgICAgICBQcm9wVHlwZXMuc3RyaW5nXG4gICAgICAgICAgICBdKVxuICAgICAgICB9KSxcbiAgICAgICAgb25CdXR0b25SZWFkeTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgfVxuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBjbGllbnRJZDogXCJzYlwiLFxuICAgICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2hpcHBpbmdQcmVmZXJlbmNlOiBcIkdFVF9GUk9NX0ZJTEVcIixcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUGF5UGFsQnV0dG9uUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpc1Nka1JlYWR5OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgd2luZG93ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHdpbmRvdy5wYXlwYWwgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkUGF5cGFsU2RrKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICB3aW5kb3cgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgd2luZG93LnBheXBhbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQnV0dG9uUmVhZHlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQnV0dG9uUmVhZHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZU9yZGVyKGRhdGE6IGFueSwgYWN0aW9uczogYW55KSB7XG5cbiAgICAgICAgY29uc3QgeyBjdXJyZW5jeSwgb3B0aW9ucywgYW1vdW50LCBzaGlwcGluZ1ByZWZlcmVuY2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnMub3JkZXIuY3JlYXRlKHtcbiAgICAgICAgICBwdXJjaGFzZV91bml0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhbW91bnQ6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW5jeV9jb2RlOiBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgPyBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgOiBvcHRpb25zICYmIG9wdGlvbnMuY3VycmVuY3lcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgOiBcIlVTRFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhbW91bnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBhcHBsaWNhdGlvbl9jb250ZXh0OiB7XG4gICAgICAgICAgICBzaGlwcGluZ19wcmVmZXJlbmNlOiBzaGlwcGluZ1ByZWZlcmVuY2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQXBwcm92ZShkYXRhOiBhbnksIGFjdGlvbnM6IGFueSkge1xuICAgICAgICByZXR1cm4gYWN0aW9ucy5vcmRlclxuICAgICAgICAgICAgLmNhcHR1cmUoKVxuICAgICAgICAgICAgLnRoZW4oKGRldGFpbHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMub25TdWNjZXNzKGRldGFpbHMsIGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmNhdGNoRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2F0Y2hFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgYW1vdW50LFxuICAgICAgICAgICAgb25TdWNjZXNzLFxuICAgICAgICAgICAgY3JlYXRlT3JkZXIsXG4gICAgICAgICAgICBjcmVhdGVTdWJzY3JpcHRpb24sXG4gICAgICAgICAgICBvbkFwcHJvdmUsXG4gICAgICAgICAgICBvbkNsaWNrLFxuICAgICAgICAgICAgb25DYW5jZWwsXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgaXNTZGtSZWFkeSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNTZGtSZWFkeSAmJlxuICAgICAgICAgICAgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgd2luZG93LnBheXBhbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgQnV0dG9uID0gd2luZG93LnBheXBhbC5CdXR0b25zLmRyaXZlcihcInJlYWN0XCIsIHtcbiAgICAgICAgICAgIFJlYWN0LFxuICAgICAgICAgICAgUmVhY3RET00sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yZGVyRm4gPVxuICAgICAgICAgICAgYW1vdW50ICYmICFjcmVhdGVPcmRlclxuICAgICAgICAgICAgICAgID8gKGRhdGE6IGFueSwgYWN0aW9uczogYW55KSA9PiB0aGlzLmNyZWF0ZU9yZGVyKGRhdGEsIGFjdGlvbnMpXG4gICAgICAgICAgICAgICAgOiAoZGF0YTogYW55LCBhY3Rpb25zOiBhbnkpID0+IGNyZWF0ZU9yZGVyKGRhdGEsIGFjdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgY3JlYXRlT3JkZXI9e2NyZWF0ZVN1YnNjcmlwdGlvbiA/IHVuZGVmaW5lZCA6IGNyZWF0ZU9yZGVyRm59XG4gICAgICAgICAgICAgICAgY3JlYXRlU3Vic2NyaXB0aW9uPXtjcmVhdGVTdWJzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgb25BcHByb3ZlPXtcbiAgICAgICAgICAgICAgICAgICAgb25TdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChkYXRhOiBhbnksIGFjdGlvbnM6IGFueSkgPT4gdGhpcy5vbkFwcHJvdmUoZGF0YSwgYWN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKGRhdGE6IGFueSwgYWN0aW9uczogYW55KSA9PiBvbkFwcHJvdmUoZGF0YSwgYWN0aW9ucylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFBheXBhbFNkaygpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zLCBvbkJ1dHRvblJlYWR5IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAvLyByZXBsYWNpbmcgY2FtZWxDYXNlIHdpdGggZGFzaGVzXG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gay5zcGxpdCgvKD89W0EtWl0pLykuam9pbihcIi1cIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goYCR7bmFtZX09JHtvcHRpb25zW2tdfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICBzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgICAgIHNjcmlwdC5zcmMgPSBgaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9zZGsvanM/JHtxdWVyeVBhcmFtcy5qb2luKFwiJlwiKX1gO1xuICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzU2RrUmVhZHk6IHRydWUgfSk7XG5cbiAgICAgICAgICAgIGlmIChvbkJ1dHRvblJlYWR5KSB7XG4gICAgICAgICAgICAgICAgb25CdXR0b25SZWFkeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBheXBhbCBTREsgY291bGQgbm90IGJlIGxvYWRlZC5cIik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgUGF5UGFsQnV0dG9uIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElB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