@auth0/angular-jwt
Advanced tools
Comparing version 1.0.0-beta.7 to 1.0.0-beta.8
(function webpackUniversalModuleDefinition(root, factory) { | ||
if(typeof exports === 'object' && typeof module === 'object') | ||
module.exports = factory(require("@angular/core"), require("@angular/common/http")); | ||
module.exports = factory(require("@angular/core"), require("rxjs/Observable"), require("rxjs/add/observable/fromPromise"), require("rxjs/add/operator/mergeMap"), require("@angular/common/http")); | ||
else if(typeof define === 'function' && define.amd) | ||
define(["@angular/core", "@angular/common/http"], factory); | ||
define(["@angular/core", "rxjs/Observable", "rxjs/add/observable/fromPromise", "rxjs/add/operator/mergeMap", "@angular/common/http"], factory); | ||
else if(typeof exports === 'object') | ||
exports["angular-jwt"] = factory(require("@angular/core"), require("@angular/common/http")); | ||
exports["angular-jwt"] = factory(require("@angular/core"), require("rxjs/Observable"), require("rxjs/add/observable/fromPromise"), require("rxjs/add/operator/mergeMap"), require("@angular/common/http")); | ||
else | ||
root["angular-jwt"] = factory(root["@angular/core"], root["@angular/common/http"]); | ||
})(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_5__) { | ||
root["angular-jwt"] = factory(root["@angular/core"], root["rxjs/Observable"], root["rxjs/add/observable/fromPromise"], root["rxjs/add/operator/mergeMap"], root["@angular/common/http"]); | ||
})(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__, __WEBPACK_EXTERNAL_MODULE_7__, __WEBPACK_EXTERNAL_MODULE_8__) { | ||
return /******/ (function(modules) { // webpackBootstrap | ||
@@ -226,2 +226,8 @@ /******/ // The module cache | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jwtoptions_token__ = __webpack_require__(1); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__ = __webpack_require__(5); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_add_observable_fromPromise__ = __webpack_require__(6); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_add_observable_fromPromise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_add_observable_fromPromise__); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_mergeMap__ = __webpack_require__(7); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_mergeMap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_rxjs_add_operator_mergeMap__); | ||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | ||
@@ -242,2 +248,5 @@ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | ||
var JwtInterceptor = (function () { | ||
@@ -248,3 +257,6 @@ function JwtInterceptor(config, jwtHelper) { | ||
this.headerName = config.headerName || 'Authorization'; | ||
this.authScheme = (config.authScheme || config.authScheme === '') ? config.authScheme : 'Bearer '; | ||
this.authScheme = | ||
config.authScheme || config.authScheme === '' | ||
? config.authScheme | ||
: 'Bearer '; | ||
this.whitelistedDomains = config.whitelistedDomains || []; | ||
@@ -258,6 +270,7 @@ this.throwNoTokenError = config.throwNoTokenError || false; | ||
requestUrl = new URL(request.url); | ||
return this.whitelistedDomains.findIndex(function (domain) { | ||
return typeof domain === 'string' ? domain === requestUrl.host : | ||
domain instanceof RegExp ? domain.test(requestUrl.host) : false; | ||
}) > -1; | ||
return (this.whitelistedDomains.findIndex(function (domain) { | ||
return typeof domain === 'string' | ||
? domain === requestUrl.host | ||
: domain instanceof RegExp ? domain.test(requestUrl.host) : false; | ||
}) > -1); | ||
} | ||
@@ -271,4 +284,3 @@ catch (err) { | ||
}; | ||
JwtInterceptor.prototype.intercept = function (request, next) { | ||
var token = this.tokenGetter(); | ||
JwtInterceptor.prototype.handleInterception = function (token, request, next) { | ||
var tokenIsExpired; | ||
@@ -279,7 +291,5 @@ if (!token && this.throwNoTokenError) { | ||
if (this.skipWhenExpired) { | ||
tokenIsExpired = token ? this.jwtHelper.isTokenExpired() : true; | ||
tokenIsExpired = token ? this.jwtHelper.isTokenExpired(token) : true; | ||
} | ||
if (token && | ||
tokenIsExpired && | ||
this.skipWhenExpired) { | ||
if (token && tokenIsExpired && this.skipWhenExpired) { | ||
request = request.clone(); | ||
@@ -297,2 +307,14 @@ } | ||
}; | ||
JwtInterceptor.prototype.intercept = function (request, next) { | ||
var _this = this; | ||
var token = this.tokenGetter(); | ||
if (token instanceof Promise) { | ||
return __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__["Observable"].fromPromise(token).mergeMap(function (asyncToken) { | ||
return _this.handleInterception(asyncToken, request, next); | ||
}); | ||
} | ||
else { | ||
return this.handleInterception(token, request, next); | ||
} | ||
}; | ||
return JwtInterceptor; | ||
@@ -319,3 +341,3 @@ }()); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_jwthelper_service__ = __webpack_require__(2); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_common_http__ = __webpack_require__(5); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_common_http__ = __webpack_require__(8); | ||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_common_http___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__angular_common_http__); | ||
@@ -361,6 +383,7 @@ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_jwtoptions_token__ = __webpack_require__(1); | ||
}, | ||
{ | ||
provide: __WEBPACK_IMPORTED_MODULE_4__src_jwtoptions_token__["a" /* JWT_OPTIONS */], | ||
useValue: options.config | ||
}, | ||
options.jwtOptionsProvider || | ||
{ | ||
provide: __WEBPACK_IMPORTED_MODULE_4__src_jwtoptions_token__["a" /* JWT_OPTIONS */], | ||
useValue: options.config | ||
}, | ||
__WEBPACK_IMPORTED_MODULE_2__src_jwthelper_service__["a" /* JwtHelperService */] | ||
@@ -387,5 +410,23 @@ ] | ||
/***/ }), | ||
/* 6 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_6__; | ||
/***/ }), | ||
/* 7 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_7__; | ||
/***/ }), | ||
/* 8 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_8__; | ||
/***/ }) | ||
/******/ ]); | ||
}); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCAxZmIwOGIxMTU0MTdhYjY4ZjAzZiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYW5ndWxhci9jb3JlXCIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2p3dG9wdGlvbnMudG9rZW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2p3dGhlbHBlci5zZXJ2aWNlLnRzIiwid2VicGFjazovLy8uL3NyYy9qd3QuaW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDN0RBLCtDOzs7Ozs7Ozs7O0FDQStDO0FBRXhDLElBQU0sV0FBVyxHQUFHLElBQUksNkRBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRlY7QUFDRjtBQUdqRCxJQUFhLGdCQUFnQjtJQUczQiwwQkFBaUMsTUFBVTtR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STtpQkFDWjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsMEVBQVc7b0JBQ3BCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDekI7Z0JBQ0QsZ0ZBQWdCO2FBQ2pCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFDSCxnQkFBQztBQUFELENBQUM7QUF4QlksU0FBUztJQURyQix1REFBUSxFQUFFO0lBR0ksa0VBQVEsRUFBRSxHQUFFLGtFQUFRLEVBQUU7cUNBQWUsU0FBUztHQUZoRCxTQUFTLENBd0JyQjtBQXhCcUI7Ozs7Ozs7O0FDdEJ0QiwrQyIsImZpbGUiOiJjb3JlLnVtZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIkBhbmd1bGFyL2NvcmVcIiksIHJlcXVpcmUoXCJAYW5ndWxhci9jb21tb24vaHR0cFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJAYW5ndWxhci9jb3JlXCIsIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiYW5ndWxhci1qd3RcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJAYW5ndWxhci9jb3JlXCIpLCByZXF1aXJlKFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImFuZ3VsYXItand0XCJdID0gZmFjdG9yeShyb290W1wiQGFuZ3VsYXIvY29yZVwiXSwgcm9vdFtcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzVfXykge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMWZiMDhiMTE1NDE3YWI2OGYwM2YiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiQGFuZ3VsYXIvY29yZVwiXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBKV1RfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignSldUX09QVElPTlMnKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvdHNsaW50LWxvYWRlciEuL3NyYy9qd3RvcHRpb25zLnRva2VuLnRzIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV1RfT1BUSU9OUyB9IGZyb20gJy4vand0b3B0aW9ucy50b2tlbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKd3RIZWxwZXJTZXJ2aWNlIHtcbiAgdG9rZW5HZXR0ZXI6ICgpID0+IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEpXVF9PUFRJT05TKSBjb25maWc6YW55KSB7XG4gICAgdGhpcy50b2tlbkdldHRlciA9IGNvbmZpZy50b2tlbkdldHRlcjtcbiAgfVxuXG4gIHB1YmxpYyB1cmxCYXNlNjREZWNvZGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBvdXRwdXQgPSBzdHIucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBzd2l0Y2ggKG91dHB1dC5sZW5ndGggJSA0KSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgb3V0cHV0ICs9ICc9PSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIG91dHB1dCArPSAnPSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyAnSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmI2NERlY29kZVVuaWNvZGUob3V0cHV0KTtcbiAgfVxuXG4gIC8vIGNyZWRpdHMgZm9yIGRlY29kZXIgZ29lcyB0byBodHRwczovL2dpdGh1Yi5jb20vYXRrXG4gIHByaXZhdGUgYjY0ZGVjb2RlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgY2hhcnMgPVxuICAgICAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcbiAgICBsZXQgb3V0cHV0OiBzdHJpbmcgPSAnJztcblxuICAgIHN0ciA9IFN0cmluZyhzdHIpLnJlcGxhY2UoLz0rJC8sICcnKTtcblxuICAgIGlmIChzdHIubGVuZ3RoICUgNCA9PT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChcbiAgICAgIC8vIGluaXRpYWxpemUgcmVzdWx0IGFuZCBjb3VudGVyc1xuICAgICAgbGV0IGJjOiBudW1iZXIgPSAwLCBiczogYW55LCBidWZmZXI6IGFueSwgaWR4OiBudW1iZXIgPSAwO1xuICAgICAgLy8gZ2V0IG5leHQgY2hhcmFjdGVyXG4gICAgICAoYnVmZmVyID0gc3RyLmNoYXJBdChpZHgrKykpO1xuICAgICAgLy8gY2hhcmFjdGVyIGZvdW5kIGluIHRhYmxlPyBpbml0aWFsaXplIGJpdCBzdG9yYWdlIGFuZCBhZGQgaXRzIGFzY2lpIHZhbHVlO1xuICAgICAgfmJ1ZmZlciAmJlxuICAgICAgKFxuICAgICAgICAoYnMgPSBiYyAlIDQgPyBicyAqIDY0ICsgYnVmZmVyIDogYnVmZmVyKSxcbiAgICAgICAgLy8gYW5kIGlmIG5vdCBmaXJzdCBvZiBlYWNoIDQgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIG9uZSBhc2NpaSBjaGFyYWN0ZXJcbiAgICAgICAgYmMrKyAlIDRcbiAgICAgIClcbiAgICAgICAgPyAob3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1ICYgKGJzID4+ICgoLTIgKiBiYykgJiA2KSkpKVxuICAgICAgICA6IDBcbiAgICApIHtcbiAgICAgIC8vIHRyeSB0byBmaW5kIGNoYXJhY3RlciBpbiB0YWJsZSAoMC02Mywgbm90IGZvdW5kID0+IC0xKVxuICAgICAgYnVmZmVyID0gY2hhcnMuaW5kZXhPZihidWZmZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBiNjREZWNvZGVVbmljb2RlKHN0cjogYW55KSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcbiAgICAgIEFycmF5LnByb3RvdHlwZS5tYXBcbiAgICAgICAgLmNhbGwodGhpcy5iNjRkZWNvZGUoc3RyKSwgKGM6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWNvZGVUb2tlbih0b2tlbjogc3RyaW5nID0gdGhpcy50b2tlbkdldHRlcigpKTogYW55IHtcbiAgICBsZXQgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5zcGVjdGVkIHRva2VuIGRvZXNuXFwndCBhcHBlYXIgdG8gYmUgYSBKV1QuIENoZWNrIHRvIG1ha2Ugc3VyZSBpdCBoYXMgdGhyZWUgcGFydHMgYW5kIHNlZSBodHRwczovL2p3dC5pbyBmb3IgbW9yZS4nKTtcbiAgICB9XG5cbiAgICBsZXQgZGVjb2RlZCA9IHRoaXMudXJsQmFzZTY0RGVjb2RlKHBhcnRzWzFdKTtcbiAgICBpZiAoIWRlY29kZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRlY29kZSB0aGUgdG9rZW4uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW5FeHBpcmF0aW9uRGF0ZSh0b2tlbjogc3RyaW5nID0gdGhpcy50b2tlbkdldHRlcigpKTogRGF0ZSB7XG4gICAgbGV0IGRlY29kZWQ6IGFueTtcbiAgICBkZWNvZGVkID0gdGhpcy5kZWNvZGVUb2tlbih0b2tlbik7XG5cbiAgICBpZiAoIWRlY29kZWQuaGFzT3duUHJvcGVydHkoJ2V4cCcpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7XG4gICAgZGF0ZS5zZXRVVENTZWNvbmRzKGRlY29kZWQuZXhwKTtcblxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgcHVibGljIGlzVG9rZW5FeHBpcmVkKHRva2VuOiBzdHJpbmcgPSB0aGlzLnRva2VuR2V0dGVyKCksIG9mZnNldFNlY29uZHM/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBsZXQgZGF0ZSA9IHRoaXMuZ2V0VG9rZW5FeHBpcmF0aW9uRGF0ZSh0b2tlbik7XG4gICAgb2Zmc2V0U2Vjb25kcyA9IG9mZnNldFNlY29uZHMgfHwgMDtcblxuICAgIGlmIChkYXRlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoZGF0ZS52YWx1ZU9mKCkgPiBuZXcgRGF0ZSgpLnZhbHVlT2YoKSArIG9mZnNldFNlY29uZHMgKiAxMDAwKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL3RzbGludC1sb2FkZXIhLi9zcmMvand0aGVscGVyLnNlcnZpY2UudHMiLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBSZXF1ZXN0LFxuICBIdHRwSGFuZGxlcixcbiAgSHR0cEV2ZW50LFxuICBIdHRwSW50ZXJjZXB0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi9qd3RoZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBKV1RfT1BUSU9OUyB9IGZyb20gJy4vand0b3B0aW9ucy50b2tlbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKd3RJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIHRva2VuR2V0dGVyOiAoKSA9PiBzdHJpbmc7XG4gIGhlYWRlck5hbWU6IHN0cmluZztcbiAgYXV0aFNjaGVtZTogc3RyaW5nO1xuICB3aGl0ZWxpc3RlZERvbWFpbnM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIHRocm93Tm9Ub2tlbkVycm9yOiBib29sZWFuO1xuICBza2lwV2hlbkV4cGlyZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChKV1RfT1BUSU9OUykgY29uZmlnOiBhbnksXG4gICAgcHVibGljIGp3dEhlbHBlcjogSnd0SGVscGVyU2VydmljZVxuICApIHtcbiAgICB0aGlzLnRva2VuR2V0dGVyID0gY29uZmlnLnRva2VuR2V0dGVyO1xuICAgIHRoaXMuaGVhZGVyTmFtZSA9IGNvbmZpZy5oZWFkZXJOYW1lIHx8ICdBdXRob3JpemF0aW9uJztcbiAgICB0aGlzLmF1dGhTY2hlbWUgPSAoY29uZmlnLmF1dGhTY2hlbWUgfHwgY29uZmlnLmF1dGhTY2hlbWUgPT09ICcnKSA/IGNvbmZpZy5hdXRoU2NoZW1lIDogJ0JlYXJlciAnO1xuICAgIHRoaXMud2hpdGVsaXN0ZWREb21haW5zID0gY29uZmlnLndoaXRlbGlzdGVkRG9tYWlucyB8fCBbXTtcbiAgICB0aGlzLnRocm93Tm9Ub2tlbkVycm9yID0gY29uZmlnLnRocm93Tm9Ub2tlbkVycm9yIHx8IGZhbHNlO1xuICAgIHRoaXMuc2tpcFdoZW5FeHBpcmVkID0gY29uZmlnLnNraXBXaGVuRXhwaXJlZDtcbiAgfVxuXG4gIGlzV2hpdGVsaXN0ZWREb21haW4ocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IGJvb2xlYW4ge1xuICAgIGxldCByZXF1ZXN0VXJsOiBVUkw7XG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3RVcmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICAgIHJldHVybiB0aGlzLndoaXRlbGlzdGVkRG9tYWlucy5maW5kSW5kZXgoZG9tYWluID0+XG4gICAgICAgICAgdHlwZW9mIGRvbWFpbiA9PT0gJ3N0cmluZycgPyBkb21haW4gPT09IHJlcXVlc3RVcmwuaG9zdCA6XG4gICAgICAgICAgZG9tYWluIGluc3RhbmNlb2YgUmVnRXhwID8gZG9tYWluLnRlc3QocmVxdWVzdFVybC5ob3N0KSA6IGZhbHNlXG4gICAgICAgICkgPiAtMTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIHdlJ3JlIGhlcmUsIHRoZSByZXF1ZXN0IGlzIG1hZGVcbiAgICAgIC8vIHRvIHRoZSBzYW1lIGRvbWFpbiBhcyB0aGUgQW5ndWxhciBhcHBcbiAgICAgIC8vIHNvIGl0J3Mgc2FmZSB0byBwcm9jZWVkXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpbnRlcmNlcHQoXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PixcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuR2V0dGVyKCk7XG4gICAgbGV0IHRva2VuSXNFeHBpcmVkO1xuXG4gICAgaWYgKCF0b2tlbiAmJiB0aGlzLnRocm93Tm9Ub2tlbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgdG9rZW4gZnJvbSB0b2tlbkdldHRlciBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5za2lwV2hlbkV4cGlyZWQpIHtcbiAgICAgIHRva2VuSXNFeHBpcmVkID0gdG9rZW4gPyB0aGlzLmp3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCgpIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0b2tlbiAmJlxuICAgICAgdG9rZW5Jc0V4cGlyZWQgJiZcbiAgICAgIHRoaXMuc2tpcFdoZW5FeHBpcmVkXG4gICAgKSB7XG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSgpO1xuICAgIH0gZWxzZSBpZiAodG9rZW4gJiYgdGhpcy5pc1doaXRlbGlzdGVkRG9tYWluKHJlcXVlc3QpKSB7XG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgICBbdGhpcy5oZWFkZXJOYW1lXTogYCR7dGhpcy5hdXRoU2NoZW1lfSR7dG9rZW59YFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvdHNsaW50LWxvYWRlciEuL3NyYy9qd3QuaW50ZXJjZXB0b3IudHMiLCJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgT3B0aW9uYWwsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKd3RJbnRlcmNlcHRvciB9IGZyb20gJy4vc3JjL2p3dC5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi9zcmMvand0aGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBKV1RfT1BUSU9OUyB9IGZyb20gJy4vc3JjL2p3dG9wdGlvbnMudG9rZW4nO1xuXG5leHBvcnQgKiBmcm9tICcuL3NyYy9qd3QuaW50ZXJjZXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvand0aGVscGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvand0b3B0aW9ucy50b2tlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnd0TW9kdWxlT3B0aW9ucyB7XG4gIGNvbmZpZzoge1xuICAgIHRva2VuR2V0dGVyOiAoKSA9PiBzdHJpbmc7XG4gICAgaGVhZGVyTmFtZT86IHN0cmluZztcbiAgICBhdXRoU2NoZW1lPzogc3RyaW5nO1xuICAgIHdoaXRlbGlzdGVkRG9tYWlucz86IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gICAgdGhyb3dOb1Rva2VuRXJyb3I/OiBib29sZWFuO1xuICAgIHNraXBXaGVuRXhwaXJlZD86IGJvb2xlYW47XG4gIH1cbn1cblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBKd3RNb2R1bGUge1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHBhcmVudE1vZHVsZTogSnd0TW9kdWxlKSB7XG4gICAgaWYgKHBhcmVudE1vZHVsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdKd3RNb2R1bGUgaXMgYWxyZWFkeSBsb2FkZWQuIEl0IHNob3VsZCBvbmx5IGJlIGltcG9ydGVkIGluIHlvdXIgYXBwbGljYXRpb25cXCdzIG1haW4gbW9kdWxlLicpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgZm9yUm9vdChvcHRpb25zOiBKd3RNb2R1bGVPcHRpb25zKTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBKd3RNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICAgICAgICAgIHVzZUNsYXNzOiBKd3RJbnRlcmNlcHRvcixcbiAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogSldUX09QVElPTlMsXG4gICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnMuY29uZmlnXG4gICAgICAgIH0sXG4gICAgICAgIEp3dEhlbHBlclNlcnZpY2VcbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvdHNsaW50LWxvYWRlciEuL2luZGV4LnRzIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzVfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCJcbi8vIG1vZHVsZSBpZCA9IDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCAzNzA0N2M0MTdmNjBlNWMyOWVlNCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYW5ndWxhci9jb3JlXCIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2p3dG9wdGlvbnMudG9rZW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2p3dGhlbHBlci5zZXJ2aWNlLnRzIiwid2VicGFjazovLy8uL3NyYy9qd3QuaW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicnhqcy9PYnNlcnZhYmxlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tUHJvbWlzZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJ4anMvYWRkL29wZXJhdG9yL21lcmdlTWFwXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNB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Q0FBLCtDIiwiZmlsZSI6ImNvcmUudW1kLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiQGFuZ3VsYXIvY29yZVwiKSwgcmVxdWlyZShcInJ4anMvT2JzZXJ2YWJsZVwiKSwgcmVxdWlyZShcInJ4anMvYWRkL29ic2VydmFibGUvZnJvbVByb21pc2VcIiksIHJlcXVpcmUoXCJyeGpzL2FkZC9vcGVyYXRvci9tZXJnZU1hcFwiKSwgcmVxdWlyZShcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcIkBhbmd1bGFyL2NvcmVcIiwgXCJyeGpzL09ic2VydmFibGVcIiwgXCJyeGpzL2FkZC9vYnNlcnZhYmxlL2Zyb21Qcm9taXNlXCIsIFwicnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXBcIiwgXCJAYW5ndWxhci9jb21tb24vaHR0cFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJhbmd1bGFyLWp3dFwiXSA9IGZhY3RvcnkocmVxdWlyZShcIkBhbmd1bGFyL2NvcmVcIiksIHJlcXVpcmUoXCJyeGpzL09ic2VydmFibGVcIiksIHJlcXVpcmUoXCJyeGpzL2FkZC9vYnNlcnZhYmxlL2Zyb21Qcm9taXNlXCIpLCByZXF1aXJlKFwicnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXBcIiksIHJlcXVpcmUoXCJAYW5ndWxhci9jb21tb24vaHR0cFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiYW5ndWxhci1qd3RcIl0gPSBmYWN0b3J5KHJvb3RbXCJAYW5ndWxhci9jb3JlXCJdLCByb290W1wicnhqcy9PYnNlcnZhYmxlXCJdLCByb290W1wicnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tUHJvbWlzZVwiXSwgcm9vdFtcInJ4anMvYWRkL29wZXJhdG9yL21lcmdlTWFwXCJdLCByb290W1wiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfNV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzZfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV83X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfOF9fKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9cIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA0KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAzNzA0N2M0MTdmNjBlNWMyOWVlNCIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJAYW5ndWxhci9jb3JlXCJcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEpXVF9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuKCdKV1RfT1BUSU9OUycpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy90c2xpbnQtbG9hZGVyIS4vc3JjL2p3dG9wdGlvbnMudG9rZW4udHMiLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEpXVF9PUFRJT05TIH0gZnJvbSAnLi9qd3RvcHRpb25zLnRva2VuJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEp3dEhlbHBlclNlcnZpY2Uge1xuICB0b2tlbkdldHRlcjogKCkgPT4gc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoSldUX09QVElPTlMpIGNvbmZpZzphbnkpIHtcbiAgICB0aGlzLnRva2VuR2V0dGVyID0gY29uZmlnLnRva2VuR2V0dGVyO1xuICB9XG5cbiAgcHVibGljIHVybEJhc2U2NERlY29kZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IG91dHB1dCA9IHN0ci5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpO1xuICAgIHN3aXRjaCAob3V0cHV0Lmxlbmd0aCAlIDQpIHtcbiAgICAgIGNhc2UgMDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICBvdXRwdXQgKz0gJz09JztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDM6IHtcbiAgICAgICAgb3V0cHV0ICs9ICc9JztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93ICdJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYjY0RGVjb2RlVW5pY29kZShvdXRwdXQpO1xuICB9XG5cbiAgLy8gY3JlZGl0cyBmb3IgZGVjb2RlciBnb2VzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGtcbiAgcHJpdmF0ZSBiNjRkZWNvZGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBjaGFycyA9XG4gICAgICAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuICAgIGxldCBvdXRwdXQ6IHN0cmluZyA9ICcnO1xuXG4gICAgc3RyID0gU3RyaW5nKHN0cikucmVwbGFjZSgvPSskLywgJycpO1xuXG4gICAgaWYgKHN0ci5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKFxuICAgICAgLy8gaW5pdGlhbGl6ZSByZXN1bHQgYW5kIGNvdW50ZXJzXG4gICAgICBsZXQgYmM6IG51bWJlciA9IDAsIGJzOiBhbnksIGJ1ZmZlcjogYW55LCBpZHg6IG51bWJlciA9IDA7XG4gICAgICAvLyBnZXQgbmV4dCBjaGFyYWN0ZXJcbiAgICAgIChidWZmZXIgPSBzdHIuY2hhckF0KGlkeCsrKSk7XG4gICAgICAvLyBjaGFyYWN0ZXIgZm91bmQgaW4gdGFibGU/IGluaXRpYWxpemUgYml0IHN0b3JhZ2UgYW5kIGFkZCBpdHMgYXNjaWkgdmFsdWU7XG4gICAgICB+YnVmZmVyICYmXG4gICAgICAoXG4gICAgICAgIChicyA9IGJjICUgNCA/IGJzICogNjQgKyBidWZmZXIgOiBidWZmZXIpLFxuICAgICAgICAvLyBhbmQgaWYgbm90IGZpcnN0IG9mIGVhY2ggNCBjaGFyYWN0ZXJzLFxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gb25lIGFzY2lpIGNoYXJhY3RlclxuICAgICAgICBiYysrICUgNFxuICAgICAgKVxuICAgICAgICA/IChvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUgJiAoYnMgPj4gKCgtMiAqIGJjKSAmIDYpKSkpXG4gICAgICAgIDogMFxuICAgICkge1xuICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hhcmFjdGVyIGluIHRhYmxlICgwLTYzLCBub3QgZm91bmQgPT4gLTEpXG4gICAgICBidWZmZXIgPSBjaGFycy5pbmRleE9mKGJ1ZmZlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwcml2YXRlIGI2NERlY29kZVVuaWNvZGUoc3RyOiBhbnkpIHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFxuICAgICAgQXJyYXkucHJvdG90eXBlLm1hcFxuICAgICAgICAuY2FsbCh0aGlzLmI2NGRlY29kZShzdHIpLCAoYzogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignJylcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGRlY29kZVRva2VuKHRva2VuOiBzdHJpbmcgPSB0aGlzLnRva2VuR2V0dGVyKCkpOiBhbnkge1xuICAgIGxldCBwYXJ0cyA9IHRva2VuLnNwbGl0KCcuJyk7XG5cbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBpbnNwZWN0ZWQgdG9rZW4gZG9lc25cXCd0IGFwcGVhciB0byBiZSBhIEpXVC4gQ2hlY2sgdG8gbWFrZSBzdXJlIGl0IGhhcyB0aHJlZSBwYXJ0cyBhbmQgc2VlIGh0dHBzOi8vand0LmlvIGZvciBtb3JlLicpO1xuICAgIH1cblxuICAgIGxldCBkZWNvZGVkID0gdGhpcy51cmxCYXNlNjREZWNvZGUocGFydHNbMV0pO1xuICAgIGlmICghZGVjb2RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGVjb2RlIHRoZSB0b2tlbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUb2tlbkV4cGlyYXRpb25EYXRlKHRva2VuOiBzdHJpbmcgPSB0aGlzLnRva2VuR2V0dGVyKCkpOiBEYXRlIHtcbiAgICBsZXQgZGVjb2RlZDogYW55O1xuICAgIGRlY29kZWQgPSB0aGlzLmRlY29kZVRva2VuKHRva2VuKTtcblxuICAgIGlmICghZGVjb2RlZC5oYXNPd25Qcm9wZXJ0eSgnZXhwJykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwKTtcbiAgICBkYXRlLnNldFVUQ1NlY29uZHMoZGVjb2RlZC5leHApO1xuXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBwdWJsaWMgaXNUb2tlbkV4cGlyZWQodG9rZW46IHN0cmluZyA9IHRoaXMudG9rZW5HZXR0ZXIoKSwgb2Zmc2V0U2Vjb25kcz86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGxldCBkYXRlID0gdGhpcy5nZXRUb2tlbkV4cGlyYXRpb25EYXRlKHRva2VuKTtcbiAgICBvZmZzZXRTZWNvbmRzID0gb2Zmc2V0U2Vjb25kcyB8fCAwO1xuXG4gICAgaWYgKGRhdGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIShkYXRlLnZhbHVlT2YoKSA+IG5ldyBEYXRlKCkudmFsdWVPZigpICsgb2Zmc2V0U2Vjb25kcyAqIDEwMDApO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvdHNsaW50LWxvYWRlciEuL3NyYy9qd3RoZWxwZXIuc2VydmljZS50cyIsImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBJbnRlcmNlcHRvclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi9qd3RoZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBKV1RfT1BUSU9OUyB9IGZyb20gJy4vand0b3B0aW9ucy50b2tlbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tUHJvbWlzZSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL21lcmdlTWFwJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEp3dEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgdG9rZW5HZXR0ZXI6ICgpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgaGVhZGVyTmFtZTogc3RyaW5nO1xuICBhdXRoU2NoZW1lOiBzdHJpbmc7XG4gIHdoaXRlbGlzdGVkRG9tYWluczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgdGhyb3dOb1Rva2VuRXJyb3I6IGJvb2xlYW47XG4gIHNraXBXaGVuRXhwaXJlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEpXVF9PUFRJT05TKSBjb25maWc6IGFueSxcbiAgICBwdWJsaWMgand0SGVscGVyOiBKd3RIZWxwZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudG9rZW5HZXR0ZXIgPSBjb25maWcudG9rZW5HZXR0ZXI7XG4gICAgdGhpcy5oZWFkZXJOYW1lID0gY29uZmlnLmhlYWRlck5hbWUgfHwgJ0F1dGhvcml6YXRpb24nO1xuICAgIHRoaXMuYXV0aFNjaGVtZSA9XG4gICAgICBjb25maWcuYXV0aFNjaGVtZSB8fCBjb25maWcuYXV0aFNjaGVtZSA9PT0gJydcbiAgICAgICAgPyBjb25maWcuYXV0aFNjaGVtZVxuICAgICAgICA6ICdCZWFyZXIgJztcbiAgICB0aGlzLndoaXRlbGlzdGVkRG9tYWlucyA9IGNvbmZpZy53aGl0ZWxpc3RlZERvbWFpbnMgfHwgW107XG4gICAgdGhpcy50aHJvd05vVG9rZW5FcnJvciA9IGNvbmZpZy50aHJvd05vVG9rZW5FcnJvciB8fCBmYWxzZTtcbiAgICB0aGlzLnNraXBXaGVuRXhwaXJlZCA9IGNvbmZpZy5za2lwV2hlbkV4cGlyZWQ7XG4gIH1cblxuICBpc1doaXRlbGlzdGVkRG9tYWluKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiBib29sZWFuIHtcbiAgICBsZXQgcmVxdWVzdFVybDogVVJMO1xuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0VXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLndoaXRlbGlzdGVkRG9tYWlucy5maW5kSW5kZXgoXG4gICAgICAgICAgZG9tYWluID0+XG4gICAgICAgICAgICB0eXBlb2YgZG9tYWluID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICA/IGRvbWFpbiA9PT0gcmVxdWVzdFVybC5ob3N0XG4gICAgICAgICAgICAgIDogZG9tYWluIGluc3RhbmNlb2YgUmVnRXhwID8gZG9tYWluLnRlc3QocmVxdWVzdFVybC5ob3N0KSA6IGZhbHNlXG4gICAgICAgICkgPiAtMVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIHdlJ3JlIGhlcmUsIHRoZSByZXF1ZXN0IGlzIG1hZGVcbiAgICAgIC8vIHRvIHRoZSBzYW1lIGRvbWFpbiBhcyB0aGUgQW5ndWxhciBhcHBcbiAgICAgIC8vIHNvIGl0J3Mgc2FmZSB0byBwcm9jZWVkXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnRlcmNlcHRpb24oXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICkge1xuICAgIGxldCB0b2tlbklzRXhwaXJlZDogYm9vbGVhbjtcblxuICAgIGlmICghdG9rZW4gJiYgdGhpcy50aHJvd05vVG9rZW5FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IHRva2VuIGZyb20gdG9rZW5HZXR0ZXIgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2tpcFdoZW5FeHBpcmVkKSB7XG4gICAgICB0b2tlbklzRXhwaXJlZCA9IHRva2VuID8gdGhpcy5qd3RIZWxwZXIuaXNUb2tlbkV4cGlyZWQodG9rZW4pIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4gJiYgdG9rZW5Jc0V4cGlyZWQgJiYgdGhpcy5za2lwV2hlbkV4cGlyZWQpIHtcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKCk7XG4gICAgfSBlbHNlIGlmICh0b2tlbiAmJiB0aGlzLmlzV2hpdGVsaXN0ZWREb21haW4ocmVxdWVzdCkpIHtcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICAgIFt0aGlzLmhlYWRlck5hbWVdOiBgJHt0aGlzLmF1dGhTY2hlbWV9JHt0b2tlbn1gXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XG4gIH1cblxuICBpbnRlcmNlcHQoXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PixcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgY29uc3QgdG9rZW46IGFueSA9IHRoaXMudG9rZW5HZXR0ZXIoKTtcblxuICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHJldHVybiBPYnNlcnZhYmxlLmZyb21Qcm9taXNlKHRva2VuKS5tZXJnZU1hcCgoYXN5bmNUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUludGVyY2VwdGlvbihhc3luY1Rva2VuLCByZXF1ZXN0LCBuZXh0KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVJbnRlcmNlcHRpb24odG9rZW4sIHJlcXVlc3QsIG5leHQpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL3RzbGludC1sb2FkZXIhLi9zcmMvand0LmludGVyY2VwdG9yLnRzIiwiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE9wdGlvbmFsLCBTa2lwU2VsZiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEp3dEludGVyY2VwdG9yIH0gZnJvbSAnLi9zcmMvand0LmludGVyY2VwdG9yJztcbmltcG9ydCB7IEp3dEhlbHBlclNlcnZpY2UgfSBmcm9tICcuL3NyYy9qd3RoZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBIVFRQX0lOVEVSQ0VQVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEpXVF9PUFRJT05TIH0gZnJvbSAnLi9zcmMvand0b3B0aW9ucy50b2tlbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL2p3dC5pbnRlcmNlcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9qd3RoZWxwZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9qd3RvcHRpb25zLnRva2VuJztcblxuZXhwb3J0IGludGVyZmFjZSBKd3RNb2R1bGVPcHRpb25zIHtcbiAgand0T3B0aW9uc1Byb3ZpZGVyPzogUHJvdmlkZXIsXG4gIGNvbmZpZzoge1xuICAgIHRva2VuR2V0dGVyPzogKCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuICAgIGhlYWRlck5hbWU/OiBzdHJpbmc7XG4gICAgYXV0aFNjaGVtZT86IHN0cmluZztcbiAgICB3aGl0ZWxpc3RlZERvbWFpbnM/OiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xuICAgIHRocm93Tm9Ub2tlbkVycm9yPzogYm9vbGVhbjtcbiAgICBza2lwV2hlbkV4cGlyZWQ/OiBib29sZWFuO1xuICB9XG59XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgSnd0TW9kdWxlIHtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwYXJlbnRNb2R1bGU6IEp3dE1vZHVsZSkge1xuICAgIGlmIChwYXJlbnRNb2R1bGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSnd0TW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLiBJdCBzaG91bGQgb25seSBiZSBpbXBvcnRlZCBpbiB5b3VyIGFwcGxpY2F0aW9uXFwncyBtYWluIG1vZHVsZS4nKTtcbiAgICB9XG4gIH1cbiAgc3RhdGljIGZvclJvb3Qob3B0aW9uczogSnd0TW9kdWxlT3B0aW9ucyk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogSnd0TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcbiAgICAgICAgICB1c2VDbGFzczogSnd0SW50ZXJjZXB0b3IsXG4gICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucy5qd3RPcHRpb25zUHJvdmlkZXIgfHxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEpXVF9PUFRJT05TLFxuICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zLmNvbmZpZ1xuICAgICAgICB9LFxuICAgICAgICBKd3RIZWxwZXJTZXJ2aWNlXG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL3RzbGludC1sb2FkZXIhLi9pbmRleC50cyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV81X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyeGpzL09ic2VydmFibGVcIlxuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfNl9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tUHJvbWlzZVwiXG4vLyBtb2R1bGUgaWQgPSA2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV83X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyeGpzL2FkZC9vcGVyYXRvci9tZXJnZU1hcFwiXG4vLyBtb2R1bGUgaWQgPSA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV84X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJAYW5ndWxhci9jb21tb24vaHR0cFwiXG4vLyBtb2R1bGUgaWQgPSA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= |
@@ -1,2 +0,2 @@ | ||
import { ModuleWithProviders } from '@angular/core'; | ||
import { ModuleWithProviders, Provider } from '@angular/core'; | ||
export * from './src/jwt.interceptor'; | ||
@@ -6,4 +6,5 @@ export * from './src/jwthelper.service'; | ||
export interface JwtModuleOptions { | ||
jwtOptionsProvider?: Provider; | ||
config: { | ||
tokenGetter: () => string; | ||
tokenGetter?: () => string | Promise<string>; | ||
headerName?: string; | ||
@@ -10,0 +11,0 @@ authScheme?: string; |
@@ -24,6 +24,7 @@ import { NgModule, Optional, SkipSelf } from '@angular/core'; | ||
}, | ||
{ | ||
provide: JWT_OPTIONS, | ||
useValue: options.config | ||
}, | ||
options.jwtOptionsProvider || | ||
{ | ||
provide: JWT_OPTIONS, | ||
useValue: options.config | ||
}, | ||
JwtHelperService | ||
@@ -30,0 +31,0 @@ ] |
@@ -1,1 +0,1 @@ | ||
[{"__symbolic":"module","version":3,"metadata":{"JwtModuleOptions":{"__symbolic":"interface"},"JwtModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf"}}]],"parameters":[{"__symbolic":"reference","name":"JwtModule"}]}]},"statics":{"forRoot":{"__symbolic":"function","parameters":["options"],"value":{"ngModule":{"__symbolic":"reference","name":"JwtModule"},"providers":[{"provide":{"__symbolic":"reference","module":"@angular/common/http","name":"HTTP_INTERCEPTORS"},"useClass":{"__symbolic":"reference","module":"./src/jwt.interceptor","name":"JwtInterceptor"},"multi":true},{"provide":{"__symbolic":"reference","module":"./src/jwtoptions.token","name":"JWT_OPTIONS"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"options"},"member":"config"}},{"__symbolic":"reference","module":"./src/jwthelper.service","name":"JwtHelperService"}]}}}}},"exports":[{"from":"./src/jwt.interceptor"},{"from":"./src/jwthelper.service"},{"from":"./src/jwtoptions.token"}]},{"__symbolic":"module","version":1,"metadata":{"JwtModuleOptions":{"__symbolic":"interface"},"JwtModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf"}}]],"parameters":[{"__symbolic":"reference","name":"JwtModule"}]}]},"statics":{"forRoot":{"__symbolic":"function","parameters":["options"],"value":{"ngModule":{"__symbolic":"reference","name":"JwtModule"},"providers":[{"provide":{"__symbolic":"reference","module":"@angular/common/http","name":"HTTP_INTERCEPTORS"},"useClass":{"__symbolic":"reference","module":"./src/jwt.interceptor","name":"JwtInterceptor"},"multi":true},{"provide":{"__symbolic":"reference","module":"./src/jwtoptions.token","name":"JWT_OPTIONS"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"options"},"member":"config"}},{"__symbolic":"reference","module":"./src/jwthelper.service","name":"JwtHelperService"}]}}}}},"exports":[{"from":"./src/jwt.interceptor"},{"from":"./src/jwthelper.service"},{"from":"./src/jwtoptions.token"}]}] | ||
[{"__symbolic":"module","version":3,"metadata":{"JwtModuleOptions":{"__symbolic":"interface"},"JwtModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf"}}]],"parameters":[{"__symbolic":"reference","name":"JwtModule"}]}]},"statics":{"forRoot":{"__symbolic":"function","parameters":["options"],"value":{"ngModule":{"__symbolic":"reference","name":"JwtModule"},"providers":[{"provide":{"__symbolic":"reference","module":"@angular/common/http","name":"HTTP_INTERCEPTORS"},"useClass":{"__symbolic":"reference","module":"./src/jwt.interceptor","name":"JwtInterceptor"},"multi":true},{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"options"},"member":"jwtOptionsProvider"},"right":{"provide":{"__symbolic":"reference","module":"./src/jwtoptions.token","name":"JWT_OPTIONS"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"options"},"member":"config"}}},{"__symbolic":"reference","module":"./src/jwthelper.service","name":"JwtHelperService"}]}}}}},"exports":[{"from":"./src/jwt.interceptor"},{"from":"./src/jwthelper.service"},{"from":"./src/jwtoptions.token"}]},{"__symbolic":"module","version":1,"metadata":{"JwtModuleOptions":{"__symbolic":"interface"},"JwtModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional"}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"SkipSelf"}}]],"parameters":[{"__symbolic":"reference","name":"JwtModule"}]}]},"statics":{"forRoot":{"__symbolic":"function","parameters":["options"],"value":{"ngModule":{"__symbolic":"reference","name":"JwtModule"},"providers":[{"provide":{"__symbolic":"reference","module":"@angular/common/http","name":"HTTP_INTERCEPTORS"},"useClass":{"__symbolic":"reference","module":"./src/jwt.interceptor","name":"JwtInterceptor"},"multi":true},{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"options"},"member":"jwtOptionsProvider"},"right":{"provide":{"__symbolic":"reference","module":"./src/jwtoptions.token","name":"JWT_OPTIONS"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"options"},"member":"config"}}},{"__symbolic":"reference","module":"./src/jwthelper.service","name":"JwtHelperService"}]}}}}},"exports":[{"from":"./src/jwt.interceptor"},{"from":"./src/jwthelper.service"},{"from":"./src/jwtoptions.token"}]}] |
{ | ||
"name": "@auth0/angular-jwt", | ||
"version": "1.0.0-beta.7", | ||
"version": "1.0.0-beta.8", | ||
"description": "JSON Web Token helper library for Angular", | ||
@@ -5,0 +5,0 @@ "scripts": { |
@@ -177,2 +177,75 @@ # @auth0/angular-jwt | ||
## Using a Custom Options Factory Function | ||
In some cases, you may need to provide a custom factory function to properly handle your configuration options. This is the case if your `tokenGetter` function relies on a service or if you are using an asynchronous storage mechanism (like Ionic's `Storage`). | ||
Import the `JWT_OPTIONS` `InjectionToken` so that you can instruct it to use your custom factory function. | ||
Create a factory function and specify the options as you normally would if you were using `JwtModule.forRoot` directly. If you need to use a service in the function, list it as a parameter in the function and pass it in the `deps` array when you provide the function. | ||
```ts | ||
import { JwtModule, JWT_OPTIONS } from '@auth0/angular-jwt'; | ||
import { TokenService } from './app.tokenservice'; | ||
// ... | ||
export function jwtOptionsFactory(tokenService) { | ||
return { | ||
tokenGetter: () => { | ||
return tokenService.getAsyncToken(); | ||
} | ||
} | ||
} | ||
// ... | ||
@NgModule({ | ||
// ... | ||
imports: [ | ||
JwtModule.forRoot({ | ||
jwtOptionsProvider: { | ||
provide: JWT_OPTIONS, | ||
useFactory: jwtOptionsFactory, | ||
deps: [TokenService] | ||
} | ||
}) | ||
], | ||
providers: [TokenService] | ||
}) | ||
``` | ||
## Configuration for Ionic 2+ | ||
The custom factory function approach described above can be used to get a token asynchronously with Ionic's `Storage`. | ||
```ts | ||
import { JwtModule, JWT_OPTIONS } from '@auth0/angular-jwt'; | ||
import { Storage } from '@ionic/storage'; | ||
const storage = new Storage(); | ||
export function jwtOptionsFactory() { | ||
return { | ||
tokenGetter: () => { | ||
return storage.get('access_token'); | ||
} | ||
} | ||
} | ||
// ... | ||
@NgModule({ | ||
// ... | ||
imports: [ | ||
JwtModule.forRoot({ | ||
jwtOptionsProvider: { | ||
provide: JWT_OPTIONS, | ||
useFactory: jwtOptionsFactory | ||
} | ||
}) | ||
] | ||
}) | ||
``` | ||
## What is Auth0? | ||
@@ -179,0 +252,0 @@ |
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'; | ||
import { JwtHelperService } from './jwthelper.service'; | ||
import { Observable } from 'rxjs/Observable'; | ||
import { JwtHelperService } from './jwthelper.service'; | ||
import 'rxjs/add/observable/fromPromise'; | ||
import 'rxjs/add/operator/mergeMap'; | ||
export declare class JwtInterceptor implements HttpInterceptor { | ||
jwtHelper: JwtHelperService; | ||
tokenGetter: () => string; | ||
tokenGetter: () => string | Promise<string>; | ||
headerName: string; | ||
@@ -14,3 +16,4 @@ authScheme: string; | ||
isWhitelistedDomain(request: HttpRequest<any>): boolean; | ||
handleInterception(token: string, request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>; | ||
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>; | ||
} |
import { Injectable, Inject } from '@angular/core'; | ||
import { JwtHelperService } from './jwthelper.service'; | ||
import { JWT_OPTIONS } from './jwtoptions.token'; | ||
import { Observable } from 'rxjs/Observable'; | ||
import 'rxjs/add/observable/fromPromise'; | ||
import 'rxjs/add/operator/mergeMap'; | ||
var JwtInterceptor = (function () { | ||
@@ -9,3 +12,6 @@ function JwtInterceptor(config, jwtHelper) { | ||
this.headerName = config.headerName || 'Authorization'; | ||
this.authScheme = (config.authScheme || config.authScheme === '') ? config.authScheme : 'Bearer '; | ||
this.authScheme = | ||
config.authScheme || config.authScheme === '' | ||
? config.authScheme | ||
: 'Bearer '; | ||
this.whitelistedDomains = config.whitelistedDomains || []; | ||
@@ -19,6 +25,7 @@ this.throwNoTokenError = config.throwNoTokenError || false; | ||
requestUrl = new URL(request.url); | ||
return this.whitelistedDomains.findIndex(function (domain) { | ||
return typeof domain === 'string' ? domain === requestUrl.host : | ||
domain instanceof RegExp ? domain.test(requestUrl.host) : false; | ||
}) > -1; | ||
return (this.whitelistedDomains.findIndex(function (domain) { | ||
return typeof domain === 'string' | ||
? domain === requestUrl.host | ||
: domain instanceof RegExp ? domain.test(requestUrl.host) : false; | ||
}) > -1); | ||
} | ||
@@ -32,4 +39,3 @@ catch (err) { | ||
}; | ||
JwtInterceptor.prototype.intercept = function (request, next) { | ||
var token = this.tokenGetter(); | ||
JwtInterceptor.prototype.handleInterception = function (token, request, next) { | ||
var tokenIsExpired; | ||
@@ -40,7 +46,5 @@ if (!token && this.throwNoTokenError) { | ||
if (this.skipWhenExpired) { | ||
tokenIsExpired = token ? this.jwtHelper.isTokenExpired() : true; | ||
tokenIsExpired = token ? this.jwtHelper.isTokenExpired(token) : true; | ||
} | ||
if (token && | ||
tokenIsExpired && | ||
this.skipWhenExpired) { | ||
if (token && tokenIsExpired && this.skipWhenExpired) { | ||
request = request.clone(); | ||
@@ -58,2 +62,14 @@ } | ||
}; | ||
JwtInterceptor.prototype.intercept = function (request, next) { | ||
var _this = this; | ||
var token = this.tokenGetter(); | ||
if (token instanceof Promise) { | ||
return Observable.fromPromise(token).mergeMap(function (asyncToken) { | ||
return _this.handleInterception(asyncToken, request, next); | ||
}); | ||
} | ||
else { | ||
return this.handleInterception(token, request, next); | ||
} | ||
}; | ||
return JwtInterceptor; | ||
@@ -60,0 +76,0 @@ }()); |
@@ -1,1 +0,1 @@ | ||
[{"__symbolic":"module","version":3,"metadata":{"JwtInterceptor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"./jwtoptions.token","name":"JWT_OPTIONS"}]}],null],"parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"./jwthelper.service","name":"JwtHelperService"}]}],"isWhitelistedDomain":[{"__symbolic":"method"}],"intercept":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"JwtInterceptor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"./jwtoptions.token","name":"JWT_OPTIONS"}]}],null],"parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"./jwthelper.service","name":"JwtHelperService"}]}],"isWhitelistedDomain":[{"__symbolic":"method"}],"intercept":[{"__symbolic":"method"}]}}}}] | ||
[{"__symbolic":"module","version":3,"metadata":{"JwtInterceptor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"./jwtoptions.token","name":"JWT_OPTIONS"}]}],null],"parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"./jwthelper.service","name":"JwtHelperService"}]}],"isWhitelistedDomain":[{"__symbolic":"method"}],"handleInterception":[{"__symbolic":"method"}],"intercept":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"JwtInterceptor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject"},"arguments":[{"__symbolic":"reference","module":"./jwtoptions.token","name":"JWT_OPTIONS"}]}],null],"parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"./jwthelper.service","name":"JwtHelperService"}]}],"isWhitelistedDomain":[{"__symbolic":"method"}],"handleInterception":[{"__symbolic":"method"}],"intercept":[{"__symbolic":"method"}]}}}}] |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
78402
808
276