@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
JavaScript
;
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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