keycloak-angular 7.3.1 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +133 -158
  2. package/bundles/keycloak-angular.umd.js +404 -310
  3. package/bundles/keycloak-angular.umd.js.map +1 -1
  4. package/esm2015/keycloak-angular.js +1 -1
  5. package/esm2015/lib/core/core.module.js +16 -18
  6. package/esm2015/lib/core/interceptors/keycloak-bearer.interceptor.js +6 -9
  7. package/esm2015/lib/core/interfaces/keycloak-event.js +1 -1
  8. package/esm2015/lib/core/interfaces/keycloak-options.js +2 -1
  9. package/esm2015/lib/core/services/keycloak-auth-guard.js +1 -1
  10. package/esm2015/lib/core/services/keycloak.service.js +18 -30
  11. package/esm2015/lib/keycloak-angular.module.js +8 -10
  12. package/esm2015/public_api.js +1 -1
  13. package/fesm2015/keycloak-angular.js +44 -65
  14. package/fesm2015/keycloak-angular.js.map +1 -1
  15. package/keycloak-angular.metadata.json +1 -1
  16. package/lib/core/interfaces/keycloak-options.d.ts +1 -2
  17. package/lib/core/services/keycloak.service.d.ts +1 -1
  18. package/package.json +10 -16
  19. package/public_api.d.ts +0 -2
  20. package/bundles/keycloak-angular.umd.min.js +0 -16
  21. package/bundles/keycloak-angular.umd.min.js.map +0 -1
  22. package/esm2015/lib/core/interfaces/keycloak-config.js +0 -1
  23. package/esm2015/lib/core/utils/to-promise.js +0 -10
  24. package/esm5/keycloak-angular.js +0 -2
  25. package/esm5/lib/core/core.module.js +0 -26
  26. package/esm5/lib/core/interceptors/keycloak-bearer.interceptor.js +0 -48
  27. package/esm5/lib/core/interfaces/keycloak-config.js +0 -1
  28. package/esm5/lib/core/interfaces/keycloak-event.js +0 -11
  29. package/esm5/lib/core/interfaces/keycloak-options.js +0 -1
  30. package/esm5/lib/core/services/keycloak-auth-guard.js +0 -40
  31. package/esm5/lib/core/services/keycloak.service.js +0 -321
  32. package/esm5/lib/core/utils/to-promise.js +0 -10
  33. package/esm5/lib/keycloak-angular.module.js +0 -15
  34. package/esm5/public_api.js +0 -7
  35. package/fesm5/keycloak-angular.js +0 -453
  36. package/fesm5/keycloak-angular.js.map +0 -1
  37. package/lib/core/interfaces/keycloak-config.d.ts +0 -9
  38. package/lib/core/utils/to-promise.d.ts +0 -7
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEtleWNsb2FrQ29uZmlnIH0gZnJvbSAnLi9rZXljbG9hay1jb25maWcnO1xuXG4vKipcbiAqIEhUVFAgTWV0aG9kc1xuICovXG5leHBvcnQgdHlwZSBIdHRwTWV0aG9kcyA9XG4gIHwgJ0dFVCdcbiAgfCAnUE9TVCdcbiAgfCAnUFVUJ1xuICB8ICdERUxFVEUnXG4gIHwgJ09QVElPTlMnXG4gIHwgJ0hFQUQnXG4gIHwgJ1BBVENIJztcblxuLyoqXG4gKiBFeGNsdWRlZFVybCB0eXBlIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHVybCBhbmQgdGhlIEhUVFAgbWV0aG9kIHRoYXRcbiAqIHNob3VsZCBub3QgYmUgaW50ZXJjZXB0ZWQgYnkgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IuXG4gKlxuICogRXhhbXBsZTpcbiAqIGNvbnN0IGV4Y2x1ZGVkVXJsOiBFeGNsdWRlZFVybFtdID0gW1xuICogIHtcbiAqICAgIHVybDogJ3JlcG9ydHMvcHVibGljJ1xuICogICAgaHR0cE1ldGhvZHM6IFsnR0VUJ11cbiAqICB9XG4gKiBdXG4gKlxuICogSW4gdGhlIGV4YW1wbGUgYWJvdmUgZm9yIFVSTCByZXBvcnRzL3B1YmxpYyBhbmQgSFRUUCBNZXRob2QgR0VUIHRoZVxuICogYmVhcmVyIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQuXG4gKlxuICogSWYgdGhlIHVybCBpcyBpbmZvcm1lZCBidXQgaHR0cE1ldGhvZCBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIGJlYXJlclxuICogd2lsbCBub3QgYmUgYWRkZWQgZm9yIGFsbCBIVFRQIE1ldGhvZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVkZWRVcmwge1xuICB1cmw6IHN0cmluZztcbiAgaHR0cE1ldGhvZHM/OiBIdHRwTWV0aG9kc1tdO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gRXhjbHVkZWRVcmwsIGNvbnRhaW5zIHRoZSBIVFRQIG1ldGhvZHMgYW5kIGEgcmVnZXggdG9cbiAqIGluY2x1ZGUgdGhlIHVybCBwYXR0ZXJucy5cbiAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgS2V5Y2xvYWtTZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2x1ZGVkVXJsUmVnZXgge1xuICB1cmxQYXR0ZXJuOiBSZWdFeHA7XG4gIGh0dHBNZXRob2RzPzogSHR0cE1ldGhvZHNbXTtcbn1cblxuLyoqXG4gKiBrZXljbG9hay1hbmd1bGFyIGluaXRpYWxpemF0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Y2xvYWtPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbmZpZ3MgdG8gaW5pdCB0aGUga2V5Y2xvYWstanMgbGlicmFyeS4gSWYgdW5kZWZpbmVkLCB3aWxsIGxvb2sgZm9yIGEga2V5Y2xvYWsuanNvbiBmaWxlXG4gICAqIGF0IHJvb3Qgb2YgdGhlIHByb2plY3QuXG4gICAqIElmIG5vdCB1bmRlZmluZWQsIGNhbiBiZSBhIHN0cmluZyBtZWFuaW5nIHRoZSB1cmwgdG8gdGhlIGtleWNsb2FrLmpzb24gZmlsZSBvciBhbiBvYmplY3RcbiAgICogb2Yge0BsaW5rIEtleWNsb2FrQ29uZmlnfS4gVXNlIHRoaXMgY29uZmlndXJhdGlvbiBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBrZXljbG9hayBzZXJ2ZXIsXG4gICAqIHJlYWxtLCBjbGllbnRJZC4gVGhpcyBpcyB1c2VmdWxsIGlmIHlvdSBoYXZlIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBmb3IgcHJvZHVjdGlvbiwgc3RhZ2VcbiAgICogYW5kIGRldmVsb3BtZW50IGVudmlyb25tZW50cy4gSGludDogTWFrZSB1c2Ugb2YgQW5ndWxhciBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgY29uZmlnPzogc3RyaW5nIHwgS2V5Y2xvYWtDb25maWc7XG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIGluaXRpYWxpemUgdGhlIEtleWNsb2FrIGFkYXB0ZXIsIG1hdGNoZXMgdGhlIG9wdGlvbnMgYXMgcHJvdmlkZWQgYnkgS2V5Y2xvYWsgaXRzZWxmLlxuICAgKi9cbiAgaW5pdE9wdGlvbnM/OiBLZXljbG9hay5LZXljbG9ha0luaXRPcHRpb25zO1xuICAvKipcbiAgICogQnkgZGVmYXVsdCBhbGwgcmVxdWVzdHMgbWFkZSBieSBBbmd1bGFyIEh0dHBDbGllbnQgd2lsbCBiZSBpbnRlcmNlcHRlZCBpbiBvcmRlciB0b1xuICAgKiBhZGQgdGhlIGJlYXJlciBpbiB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlci4gSG93ZXZlciwgaWYgdGhpcyBpcyBhIG5vdCBkZXNpcmVkXG4gICAqIGZlYXR1cmUsIHRoZSBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciBtdXN0IGJlIGZhbHNlLlxuICAgKlxuICAgKiBCcmllZmx5LCBpZiBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciA9PT0gZmFsc2UsIHRoZSBiZWFyZXIgd2lsbCBub3QgYmUgYWRkZWRcbiAgICogdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I/OiBib29sZWFuO1xuICAvKipcbiAgICogRm9yY2VzIHRoZSBleGVjdXRpb24gb2YgbG9hZFVzZXJQcm9maWxlIGFmdGVyIHRoZSBrZXljbG9hayBpbml0aWFsaXphdGlvbiBjb25zaWRlcmluZyB0aGF0IHRoZVxuICAgKiB1c2VyIGxvZ2dlZCBpbi5cbiAgICogVGhpcyBvcHRpb24gaXMgcmVjb21tZW5kZWQgaWYgaXMgZGVzaXJhYmxlIHRvIGhhdmUgdGhlIHVzZXIgZGV0YWlscyBhdCB0aGUgYmVnaW5uaW5nLFxuICAgKiBzbyBhZnRlciB0aGUgbG9naW4sIHRoZSBsb2FkVXNlclByb2ZpbGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYW5kIGl0J3MgdmFsdWUgY2FjaGVkLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFN0cmluZyBBcnJheSB0byBleGNsdWRlIHRoZSB1cmxzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlciBhdXRvbWF0aWNhbGx5XG4gICAqIGFkZGVkLiBUaGlzIGxpYnJhcnkgbWFrZXMgdXNlIG9mIEFuZ3VsYXIgSHR0cCBJbnRlcmNlcHRvciwgdG8gYXV0b21hdGljYWxseSBhZGQgdGhlIEJlYXJlclxuICAgKiB0b2tlbiB0byB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGJlYXJlckV4Y2x1ZGVkVXJscz86IChzdHJpbmcgfCBFeGNsdWRlZFVybClbXTtcbiAgLyoqXG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIG5hbWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzXG4gICAqICoqQXV0aG9yaXphdGlvbioqLiBJZiB0aGUgYmFja2VuZCBleHBlY3RzIHJlcXVlc3RzIHRvIGhhdmUgYSB0b2tlbiBpbiBhIGRpZmZlcmVudCBoZWFkZXIsIHlvdVxuICAgKiBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUsIGkuZTogKipKV1QtQXV0aG9yaXphdGlvbioqLiBUaGlzIHdpbGwgcmVzdWx0IGluIGEgSHR0cCBIZWFkZXJcbiAgICogQXV0aG9yaXphdGlvbiBhcyBcIkpXVC1BdXRob3JpemF0aW9uOiBiZWFyZXIgPHRva2VuPlwiLlxuICAgKi9cbiAgYXV0aG9yaXphdGlvbkhlYWRlck5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgcGFyYW0uIFRoZSBkZWZhdWx0IHZhbHVlIGlzXG4gICAqICoqYmVhcmVyKiosIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgSHR0cCBIZWFkZXIgQXV0aG9yaXphdGlvbiBhcyBcIkF1dGhvcml6YXRpb246IGJlYXJlciA8dG9rZW4+XCIuXG4gICAqIElmIGFueSBvdGhlciB2YWx1ZSBpcyBuZWVkZWQgYnkgdGhlIGJhY2tlbmQgaW4gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLCB5b3Ugc2hvdWxkIGNoYW5nZSB0aGlzXG4gICAqIHZhbHVlLCBpLmU6ICoqQmVhcmVyKiouXG4gICAqXG4gICAqIFdhcm5pbmc6IHRoaXMgdmFsdWUgbXVzdCBiZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGtleWNsb2FrIHNlcnZlciBpbnN0YW5jZSBhbmQgdGhlIGFkYXB0ZXIuXG4gICAqL1xuICBiZWFyZXJQcmVmaXg/OiBzdHJpbmc7XG59XG4iXX0=
@@ -1,40 +0,0 @@
1
- import { __awaiter, __generator } from "tslib";
2
- var KeycloakAuthGuard = (function () {
3
- function KeycloakAuthGuard(router, keycloakAngular) {
4
- this.router = router;
5
- this.keycloakAngular = keycloakAngular;
6
- }
7
- KeycloakAuthGuard.prototype.canActivate = function (route, state) {
8
- var _this = this;
9
- return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
10
- var _a, _b, result, error_1;
11
- return __generator(this, function (_c) {
12
- switch (_c.label) {
13
- case 0:
14
- _c.trys.push([0, 4, , 5]);
15
- _a = this;
16
- return [4, this.keycloakAngular.isLoggedIn()];
17
- case 1:
18
- _a.authenticated = _c.sent();
19
- _b = this;
20
- return [4, this.keycloakAngular.getUserRoles(true)];
21
- case 2:
22
- _b.roles = _c.sent();
23
- return [4, this.isAccessAllowed(route, state)];
24
- case 3:
25
- result = _c.sent();
26
- resolve(result);
27
- return [3, 5];
28
- case 4:
29
- error_1 = _c.sent();
30
- reject('An error happened during access validation. Details:' + error_1);
31
- return [3, 5];
32
- case 5: return [2];
33
- }
34
- });
35
- }); });
36
- };
37
- return KeycloakAuthGuard;
38
- }());
39
- export { KeycloakAuthGuard };
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYXV0aC1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay1hdXRoLWd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFrQkE7SUFVRSwyQkFBc0IsTUFBYyxFQUFZLGVBQWdDO1FBQTFELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBWSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFBRyxDQUFDO0lBU3BGLHVDQUFXLEdBQVgsVUFBWSxLQUE2QixFQUFFLEtBQTBCO1FBQXJFLGlCQVlDO1FBWEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFPLE9BQU8sRUFBRSxNQUFNOzs7Ozs7d0JBRXJDLEtBQUEsSUFBSSxDQUFBO3dCQUFpQixXQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEVBQUE7O3dCQUE1RCxHQUFLLGFBQWEsR0FBRyxTQUF1QyxDQUFDO3dCQUM3RCxLQUFBLElBQUksQ0FBQTt3QkFBUyxXQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFBOzt3QkFBMUQsR0FBSyxLQUFLLEdBQUcsU0FBNkMsQ0FBQzt3QkFFNUMsV0FBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBQTs7d0JBQWpELE1BQU0sR0FBRyxTQUF3Qzt3QkFDdkQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7O3dCQUVoQixNQUFNLENBQUMsc0RBQXNELEdBQUcsT0FBSyxDQUFDLENBQUM7Ozs7O2FBRTFFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFlSCx3QkFBQztBQUFELENBQUMsQUE5Q0QsSUE4Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDYW5BY3RpdmF0ZSwgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAnLi9rZXljbG9hay5zZXJ2aWNlJztcblxuLyoqXG4gKiBBIHNpbXBsZSBndWFyZCBpbXBsZW1lbnRhdGlvbiBvdXQgb2YgdGhlIGJveC4gVGhpcyBjbGFzcyBzaG91bGQgYmUgaW5oZXJpdGVkIGFuZFxuICogaW1wbGVtZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiBUaGUgb25seSBtZXRob2QgdGhhdCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaXMgI2lzQWNjZXNzQWxsb3dlZC5cbiAqIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgYXV0aG9yaXphdGlvbiBmbG93IGlzIHVzdWFsbHkgbm90IHVuaXF1ZSwgc28gaW4gdGhpcyB3YXkgeW91IHdpbGxcbiAqIGhhdmUgbW9yZSBmcmVlZG9tIHRvIGN1c3RvbWl6ZSB5b3VyIGF1dGhvcml6YXRpb24gZmxvdy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEtleWNsb2FrQXV0aEd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LlxuICAgKi9cbiAgcHJvdGVjdGVkIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSb2xlcyBvZiB0aGUgbG9nZ2VkIHVzZXIuIEl0IGNvbnRhaW5zIHRoZSBjbGllbnRJZCBhbmQgcmVhbG0gdXNlciByb2xlcy5cbiAgICovXG4gIHByb3RlY3RlZCByb2xlczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLCBwcm90ZWN0ZWQga2V5Y2xvYWtBbmd1bGFyOiBLZXljbG9ha1NlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIENhbkFjdGl2YXRlIGNoZWNrcyBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gYW5kIGdldCB0aGUgZnVsbCBsaXN0IG9mIHJvbGVzIChSRUFMTSArIENMSUVOVClcbiAgICogb2YgdGhlIGxvZ2dlZCB1c2VyLiBUaGlzIHZhbHVlcyBhcmUgc2V0IHRvIGF1dGhlbnRpY2F0ZWQgYW5kIHJvbGVzIHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHJvdXRlXG4gICAqIEBwYXJhbSBzdGF0ZVxuICAgKi9cbiAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBhd2FpdCB0aGlzLmtleWNsb2FrQW5ndWxhci5pc0xvZ2dlZEluKCk7XG4gICAgICAgIHRoaXMucm9sZXMgPSBhd2FpdCB0aGlzLmtleWNsb2FrQW5ndWxhci5nZXRVc2VyUm9sZXModHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5pc0FjY2Vzc0FsbG93ZWQocm91dGUsIHN0YXRlKTtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KCdBbiBlcnJvciBoYXBwZW5lZCBkdXJpbmcgYWNjZXNzIHZhbGlkYXRpb24uIERldGFpbHM6JyArIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgeW91ciBvd24gY3VzdG9taXplZCBhdXRob3JpemF0aW9uIGZsb3cgaW4gdGhpcyBtZXRob2QuIEZyb20gaGVyZSB5b3UgYWxyZWFkeSBrbm93blxuICAgKiBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkICh0aGlzLmF1dGhlbnRpY2F0ZWQpIGFuZCB0aGUgdXNlciByb2xlcyAodGhpcy5yb2xlcykuXG4gICAqXG4gICAqIFJldHVybiBhIFVybFRyZWUgaWYgdGhlIHVzZXIgc2hvdWxkIGJlIHJlZGlyZWN0ZWQgdG8gYW5vdGhlciByb3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIHJvdXRlXG4gICAqIEBwYXJhbSBzdGF0ZVxuICAgKi9cbiAgYWJzdHJhY3QgaXNBY2Nlc3NBbGxvd2VkKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+O1xufVxuIl19
@@ -1,321 +0,0 @@
1
- import { __awaiter, __decorate, __generator, __read, __spread, __values } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { HttpHeaders } from '@angular/common/http';
4
- import { Subject, from } from 'rxjs';
5
- import { map } from 'rxjs/operators';
6
- import * as Keycloak_ from 'keycloak-js';
7
- export var Keycloak = Keycloak_;
8
- import { KeycloakEventType } from '../interfaces/keycloak-event';
9
- import { toPromise } from '../utils/to-promise';
10
- var KeycloakService = (function () {
11
- function KeycloakService() {
12
- this._keycloakEvents$ = new Subject();
13
- }
14
- KeycloakService.prototype.bindsKeycloakEvents = function () {
15
- var _this = this;
16
- this._instance.onAuthError = function (errorData) {
17
- _this._keycloakEvents$.next({
18
- args: errorData,
19
- type: KeycloakEventType.OnAuthError,
20
- });
21
- };
22
- this._instance.onAuthLogout = function () {
23
- _this._keycloakEvents$.next({ type: KeycloakEventType.OnAuthLogout });
24
- };
25
- this._instance.onAuthRefreshSuccess = function () {
26
- _this._keycloakEvents$.next({
27
- type: KeycloakEventType.OnAuthRefreshSuccess,
28
- });
29
- };
30
- this._instance.onAuthRefreshError = function () {
31
- _this._keycloakEvents$.next({
32
- type: KeycloakEventType.OnAuthRefreshError,
33
- });
34
- };
35
- this._instance.onAuthSuccess = function () {
36
- _this._keycloakEvents$.next({ type: KeycloakEventType.OnAuthSuccess });
37
- };
38
- this._instance.onTokenExpired = function () {
39
- _this._keycloakEvents$.next({
40
- type: KeycloakEventType.OnTokenExpired,
41
- });
42
- };
43
- this._instance.onReady = function (authenticated) {
44
- _this._keycloakEvents$.next({
45
- args: authenticated,
46
- type: KeycloakEventType.OnReady,
47
- });
48
- };
49
- };
50
- KeycloakService.prototype.loadExcludedUrls = function (bearerExcludedUrls) {
51
- var e_1, _a;
52
- var excludedUrls = [];
53
- try {
54
- for (var bearerExcludedUrls_1 = __values(bearerExcludedUrls), bearerExcludedUrls_1_1 = bearerExcludedUrls_1.next(); !bearerExcludedUrls_1_1.done; bearerExcludedUrls_1_1 = bearerExcludedUrls_1.next()) {
55
- var item = bearerExcludedUrls_1_1.value;
56
- var excludedUrl = void 0;
57
- if (typeof item === 'string') {
58
- excludedUrl = { urlPattern: new RegExp(item, 'i'), httpMethods: [] };
59
- }
60
- else {
61
- excludedUrl = {
62
- urlPattern: new RegExp(item.url, 'i'),
63
- httpMethods: item.httpMethods,
64
- };
65
- }
66
- excludedUrls.push(excludedUrl);
67
- }
68
- }
69
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
70
- finally {
71
- try {
72
- if (bearerExcludedUrls_1_1 && !bearerExcludedUrls_1_1.done && (_a = bearerExcludedUrls_1.return)) _a.call(bearerExcludedUrls_1);
73
- }
74
- finally { if (e_1) throw e_1.error; }
75
- }
76
- return excludedUrls;
77
- };
78
- KeycloakService.prototype.initServiceValues = function (_a) {
79
- var _b = _a.enableBearerInterceptor, enableBearerInterceptor = _b === void 0 ? true : _b, _c = _a.loadUserProfileAtStartUp, loadUserProfileAtStartUp = _c === void 0 ? true : _c, _d = _a.bearerExcludedUrls, bearerExcludedUrls = _d === void 0 ? [] : _d, _e = _a.authorizationHeaderName, authorizationHeaderName = _e === void 0 ? 'Authorization' : _e, _f = _a.bearerPrefix, bearerPrefix = _f === void 0 ? 'bearer' : _f, initOptions = _a.initOptions;
80
- this._enableBearerInterceptor = enableBearerInterceptor;
81
- this._loadUserProfileAtStartUp = loadUserProfileAtStartUp;
82
- this._authorizationHeaderName = authorizationHeaderName;
83
- this._bearerPrefix = bearerPrefix.trim().concat(' ');
84
- this._excludedUrls = this.loadExcludedUrls(bearerExcludedUrls);
85
- this._silentRefresh = initOptions ? initOptions.flow === 'implicit' : false;
86
- };
87
- KeycloakService.prototype.init = function (options) {
88
- if (options === void 0) { options = {}; }
89
- return __awaiter(this, void 0, void 0, function () {
90
- var config, initOptions, authenticated;
91
- return __generator(this, function (_a) {
92
- switch (_a.label) {
93
- case 0:
94
- this.initServiceValues(options);
95
- config = options.config, initOptions = options.initOptions;
96
- this._instance = Keycloak(config);
97
- this.bindsKeycloakEvents();
98
- return [4, toPromise(this._instance.init(initOptions))];
99
- case 1:
100
- authenticated = _a.sent();
101
- if (!(authenticated && this._loadUserProfileAtStartUp)) return [3, 3];
102
- return [4, this.loadUserProfile()];
103
- case 2:
104
- _a.sent();
105
- _a.label = 3;
106
- case 3: return [2, authenticated];
107
- }
108
- });
109
- });
110
- };
111
- KeycloakService.prototype.login = function (options) {
112
- if (options === void 0) { options = {}; }
113
- return __awaiter(this, void 0, void 0, function () {
114
- return __generator(this, function (_a) {
115
- switch (_a.label) {
116
- case 0: return [4, toPromise(this._instance.login(options))];
117
- case 1:
118
- _a.sent();
119
- if (!this._loadUserProfileAtStartUp) return [3, 3];
120
- return [4, this.loadUserProfile()];
121
- case 2:
122
- _a.sent();
123
- _a.label = 3;
124
- case 3: return [2];
125
- }
126
- });
127
- });
128
- };
129
- KeycloakService.prototype.logout = function (redirectUri) {
130
- return __awaiter(this, void 0, void 0, function () {
131
- var options;
132
- return __generator(this, function (_a) {
133
- switch (_a.label) {
134
- case 0:
135
- options = {
136
- redirectUri: redirectUri,
137
- };
138
- return [4, toPromise(this._instance.logout(options))];
139
- case 1:
140
- _a.sent();
141
- this._userProfile = undefined;
142
- return [2];
143
- }
144
- });
145
- });
146
- };
147
- KeycloakService.prototype.register = function (options) {
148
- if (options === void 0) { options = { action: 'register' }; }
149
- return __awaiter(this, void 0, void 0, function () {
150
- return __generator(this, function (_a) {
151
- switch (_a.label) {
152
- case 0: return [4, toPromise(this._instance.register(options))];
153
- case 1:
154
- _a.sent();
155
- return [2];
156
- }
157
- });
158
- });
159
- };
160
- KeycloakService.prototype.isUserInRole = function (role, resource) {
161
- var hasRole;
162
- hasRole = this._instance.hasResourceRole(role, resource);
163
- if (!hasRole) {
164
- hasRole = this._instance.hasRealmRole(role);
165
- }
166
- return hasRole;
167
- };
168
- KeycloakService.prototype.getUserRoles = function (allRoles) {
169
- if (allRoles === void 0) { allRoles = true; }
170
- var roles = [];
171
- if (this._instance.resourceAccess) {
172
- for (var key in this._instance.resourceAccess) {
173
- if (this._instance.resourceAccess.hasOwnProperty(key)) {
174
- var resourceAccess = this._instance.resourceAccess[key];
175
- var clientRoles = resourceAccess['roles'] || [];
176
- roles = roles.concat(clientRoles);
177
- }
178
- }
179
- }
180
- if (allRoles && this._instance.realmAccess) {
181
- var realmRoles = this._instance.realmAccess['roles'] || [];
182
- roles.push.apply(roles, __spread(realmRoles));
183
- }
184
- return roles;
185
- };
186
- KeycloakService.prototype.isLoggedIn = function () {
187
- return __awaiter(this, void 0, void 0, function () {
188
- var error_1;
189
- return __generator(this, function (_a) {
190
- switch (_a.label) {
191
- case 0:
192
- _a.trys.push([0, 2, , 3]);
193
- if (!this._instance.authenticated) {
194
- return [2, false];
195
- }
196
- return [4, this.updateToken(20)];
197
- case 1:
198
- _a.sent();
199
- return [2, true];
200
- case 2:
201
- error_1 = _a.sent();
202
- return [2, false];
203
- case 3: return [2];
204
- }
205
- });
206
- });
207
- };
208
- KeycloakService.prototype.isTokenExpired = function (minValidity) {
209
- if (minValidity === void 0) { minValidity = 0; }
210
- return this._instance.isTokenExpired(minValidity);
211
- };
212
- KeycloakService.prototype.updateToken = function (minValidity) {
213
- if (minValidity === void 0) { minValidity = 5; }
214
- return __awaiter(this, void 0, void 0, function () {
215
- return __generator(this, function (_a) {
216
- if (this._silentRefresh) {
217
- if (this.isTokenExpired()) {
218
- throw new Error('Failed to refresh the token, or the session is expired');
219
- }
220
- return [2, true];
221
- }
222
- if (!this._instance) {
223
- throw new Error('Keycloak Angular library is not initialized.');
224
- }
225
- return [2, toPromise(this._instance.updateToken(minValidity))];
226
- });
227
- });
228
- };
229
- KeycloakService.prototype.loadUserProfile = function (forceReload) {
230
- if (forceReload === void 0) { forceReload = false; }
231
- return __awaiter(this, void 0, void 0, function () {
232
- var _a;
233
- return __generator(this, function (_b) {
234
- switch (_b.label) {
235
- case 0:
236
- if (this._userProfile && !forceReload) {
237
- return [2, this._userProfile];
238
- }
239
- if (!this._instance.authenticated) {
240
- throw new Error('The user profile was not loaded as the user is not logged in.');
241
- }
242
- _a = this;
243
- return [4, toPromise(this._instance.loadUserProfile())];
244
- case 1: return [2, (_a._userProfile = _b.sent())];
245
- }
246
- });
247
- });
248
- };
249
- KeycloakService.prototype.getToken = function (forceLogin) {
250
- if (forceLogin === void 0) { forceLogin = true; }
251
- return __awaiter(this, void 0, void 0, function () {
252
- var error_2;
253
- return __generator(this, function (_a) {
254
- switch (_a.label) {
255
- case 0:
256
- _a.trys.push([0, 2, , 3]);
257
- return [4, this.updateToken(10)];
258
- case 1:
259
- _a.sent();
260
- return [2, this._instance.token];
261
- case 2:
262
- error_2 = _a.sent();
263
- if (forceLogin) {
264
- this.login();
265
- }
266
- else {
267
- throw error_2;
268
- }
269
- return [3, 3];
270
- case 3: return [2];
271
- }
272
- });
273
- });
274
- };
275
- KeycloakService.prototype.getUsername = function () {
276
- if (!this._userProfile) {
277
- throw new Error('User not logged in or user profile was not loaded.');
278
- }
279
- return this._userProfile.username;
280
- };
281
- KeycloakService.prototype.clearToken = function () {
282
- this._instance.clearToken();
283
- };
284
- KeycloakService.prototype.addTokenToHeader = function (headers) {
285
- var _this = this;
286
- if (headers === void 0) { headers = new HttpHeaders(); }
287
- return from(this.getToken()).pipe(map(function (token) {
288
- return headers.set(_this._authorizationHeaderName, _this._bearerPrefix + token);
289
- }));
290
- };
291
- KeycloakService.prototype.getKeycloakInstance = function () {
292
- return this._instance;
293
- };
294
- Object.defineProperty(KeycloakService.prototype, "excludedUrls", {
295
- get: function () {
296
- return this._excludedUrls;
297
- },
298
- enumerable: true,
299
- configurable: true
300
- });
301
- Object.defineProperty(KeycloakService.prototype, "enableBearerInterceptor", {
302
- get: function () {
303
- return this._enableBearerInterceptor;
304
- },
305
- enumerable: true,
306
- configurable: true
307
- });
308
- Object.defineProperty(KeycloakService.prototype, "keycloakEvents$", {
309
- get: function () {
310
- return this._keycloakEvents$;
311
- },
312
- enumerable: true,
313
- configurable: true
314
- });
315
- KeycloakService = __decorate([
316
- Injectable()
317
- ], KeycloakService);
318
- return KeycloakService;
319
- }());
320
- export { KeycloakService };
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFRQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckMsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDekMsTUFBTSxDQUFDLElBQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztBQU9sQyxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVWhEO0lBQUE7UUFzQ1UscUJBQWdCLEdBQTJCLElBQUksT0FBTyxFQUUzRCxDQUFDO0lBa2ROLENBQUM7SUF6Y1MsNkNBQW1CLEdBQTNCO1FBQUEsaUJBd0NDO1FBdkNDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFVBQUMsU0FBUztZQUNyQyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsaUJBQWlCLENBQUMsV0FBVzthQUNwQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRztZQUM1QixLQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDO1FB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QWdCLEdBQXZCLFVBQXdCLE9BQXdDO1FBQWhFLGlCQU1DO1FBTnVCLHdCQUFBLEVBQUEsY0FBMkIsV0FBVyxFQUFFO1FBQzlELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDL0IsR0FBRyxDQUFDLFVBQUMsS0FBSztZQUNSLE9BQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFJLENBQUMsd0JBQXdCLEVBQUUsS0FBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFBdEUsQ0FBc0UsQ0FDdkUsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQVNELDZDQUFtQixHQUFuQjtRQUNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBU0Qsc0JBQUkseUNBQVk7YUFBaEI7WUFDRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUIsQ0FBQzs7O09BQUE7SUFRRCxzQkFBSSxvREFBdUI7YUFBM0I7WUFDRSxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUN2QyxDQUFDOzs7T0FBQTtJQXFCRCxzQkFBSSw0Q0FBZTthQUFuQjtZQUNFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLENBQUM7OztPQUFBO0lBemZVLGVBQWU7UUFEM0IsVUFBVSxFQUFFO09BQ0EsZUFBZSxDQTBmM0I7SUFBRCxzQkFBQztDQUFBLEFBMWZELElBMGZDO1NBMWZZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgU3ViamVjdCwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vLyBXb3JrYXJvdW5kIGZvciByb2xsdXAgbGlicmFyeSBiZWhhdmlvdXIsIGFzIHBvaW50ZWQgb3V0IG9uIGlzc3VlICMxMjY3IChodHRwczovL2dpdGh1Yi5jb20vcm9sbHVwL3JvbGx1cC9pc3N1ZXMvMTI2NykuXG5pbXBvcnQgKiBhcyBLZXljbG9ha18gZnJvbSAna2V5Y2xvYWstanMnO1xuZXhwb3J0IGNvbnN0IEtleWNsb2FrID0gS2V5Y2xvYWtfO1xuXG5pbXBvcnQge1xuICBFeGNsdWRlZFVybCxcbiAgRXhjbHVkZWRVcmxSZWdleCxcbiAgS2V5Y2xvYWtPcHRpb25zLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2tleWNsb2FrLW9wdGlvbnMnO1xuaW1wb3J0IHsgS2V5Y2xvYWtFdmVudCwgS2V5Y2xvYWtFdmVudFR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2tleWNsb2FrLWV2ZW50JztcbmltcG9ydCB7IHRvUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL3RvLXByb21pc2UnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gZXhwb3NlIGV4aXN0ZW50IG1ldGhvZHMgZnJvbSB0aGUgS2V5Y2xvYWsgSlMgYWRhcHRlciwgYWRkaW5nIG5ld1xuICogZnVuY3Rpb25hbGl0aWVzIHRvIGltcHJvdmUgdGhlIHVzZSBvZiBrZXljbG9hayBpbiBBbmd1bGFyIHYgPiA0LjMgYXBwbGljYXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluamVjdGVkIGluIHRoZSBhcHBsaWNhdGlvbiBib290c3RyYXAsIHNvIHRoZSBzYW1lIGluc3RhbmNlIHdpbGwgYmUgdXNlZFxuICogYWxvbmcgdGhlIHdlYiBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrU2VydmljZSB7XG4gIC8qKlxuICAgKiBLZXljbG9hay1qcyBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlO1xuICAvKipcbiAgICogVXNlciBwcm9maWxlIGFzIEtleWNsb2FrUHJvZmlsZSBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIF91c2VyUHJvZmlsZTogS2V5Y2xvYWsuS2V5Y2xvYWtQcm9maWxlO1xuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2VuYWJsZUJlYXJlckludGVyY2VwdG9yOiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0aGUgaW1wbGljaXQgZmxvdyBpcyBjaG9vc2VuIHRoZXJlIG11c3QgZXhpc3QgYSBzaWxlbnRSZWZyZXNoLCBhcyB0aGVyZSBpc1xuICAgKiBubyByZWZyZXNoIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2lsZW50UmVmcmVzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHByb2ZpbGUgc2hvdWxkIGJlIGxvYWRlZCBhdCB0aGUga2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24sXG4gICAqIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luLlxuICAgKi9cbiAgcHJpdmF0ZSBfbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGJlYXJlciBwcmVmaXggdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2JlYXJlclByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogVmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXhjbHVkZWQgdXJscyBwYXR0ZXJucyB0aGF0IG11c3Qgc2tpcCB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAgICovXG4gIHByaXZhdGUgX2V4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdO1xuICAvKipcbiAgICogT2JzZXJ2ZXIgZm9yIHRoZSBrZXljbG9hayBldmVudHNcbiAgICovXG4gIHByaXZhdGUgX2tleWNsb2FrRXZlbnRzJDogU3ViamVjdDxLZXljbG9ha0V2ZW50PiA9IG5ldyBTdWJqZWN0PFxuICAgIEtleWNsb2FrRXZlbnRcbiAgPigpO1xuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUga2V5Y2xvYWstanMgZXZlbnRzIHRvIHRoZSBrZXljbG9ha0V2ZW50cyBTdWJqZWN0XG4gICAqIHdoaWNoIGlzIGEgZ29vZCB3YXkgdG8gbW9uaXRvciBmb3IgY2hhbmdlcywgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBUaGUga2V5Y2xvYWtFdmVudHMgcmV0dXJucyB0aGUga2V5Y2xvYWstanMgZXZlbnQgdHlwZSBhbmQgYW55XG4gICAqIGFyZ3VtZW50IGlmIHRoZSBzb3VyY2UgZnVuY3Rpb24gcHJvdmlkZXMgYW55LlxuICAgKi9cbiAgcHJpdmF0ZSBiaW5kc0tleWNsb2FrRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aEVycm9yID0gKGVycm9yRGF0YSkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBlcnJvckRhdGEsXG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aEVycm9yLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aExvZ291dCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoTG9nb3V0IH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhSZWZyZXNoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaFN1Y2Nlc3MsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoUmVmcmVzaEVycm9yID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhSZWZyZXNoRXJyb3IsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoU3VjY2VzcyB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25Ub2tlbkV4cGlyZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uVG9rZW5FeHBpcmVkLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uUmVhZHkgPSAoYXV0aGVudGljYXRlZCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBhdXRoZW50aWNhdGVkLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PblJlYWR5LFxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgYmVhcmVyRXhjbHVkZWRVcmwgY29udGVudCBpbiBhIHVuaWZvcm0gdHlwZTogRXhjbHVkZWRVcmwsXG4gICAqIHNvIGl0IGJlY29tZXMgZWFzaWVyIHRvIGhhbmRsZS5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlckV4Y2x1ZGVkVXJscyBhcnJheSBvZiBzdHJpbmdzIG9yIEV4Y2x1ZGVkVXJsIHRoYXQgaW5jbHVkZXNcbiAgICogdGhlIHVybCBhbmQgSHR0cE1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgbG9hZEV4Y2x1ZGVkVXJscyhcbiAgICBiZWFyZXJFeGNsdWRlZFVybHM6IChzdHJpbmcgfCBFeGNsdWRlZFVybClbXVxuICApOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIGNvbnN0IGV4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGJlYXJlckV4Y2x1ZGVkVXJscykge1xuICAgICAgbGV0IGV4Y2x1ZGVkVXJsOiBFeGNsdWRlZFVybFJlZ2V4O1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBleGNsdWRlZFVybCA9IHsgdXJsUGF0dGVybjogbmV3IFJlZ0V4cChpdGVtLCAnaScpLCBodHRwTWV0aG9kczogW10gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4Y2x1ZGVkVXJsID0ge1xuICAgICAgICAgIHVybFBhdHRlcm46IG5ldyBSZWdFeHAoaXRlbS51cmwsICdpJyksXG4gICAgICAgICAgaHR0cE1ldGhvZHM6IGl0ZW0uaHR0cE1ldGhvZHMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBleGNsdWRlZFVybHMucHVzaChleGNsdWRlZFVybCk7XG4gICAgfVxuICAgIHJldHVybiBleGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY2xhc3MgdmFsdWVzIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0U2VydmljZVZhbHVlcyh7XG4gICAgZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSB0cnVlLFxuICAgIGxvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcCA9IHRydWUsXG4gICAgYmVhcmVyRXhjbHVkZWRVcmxzID0gW10sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSAnQXV0aG9yaXphdGlvbicsXG4gICAgYmVhcmVyUHJlZml4ID0gJ2JlYXJlcicsXG4gICAgaW5pdE9wdGlvbnMsXG4gIH06IEtleWNsb2FrT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX2VuYWJsZUJlYXJlckludGVyY2VwdG9yID0gZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I7XG4gICAgdGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwID0gbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwO1xuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lID0gYXV0aG9yaXphdGlvbkhlYWRlck5hbWU7XG4gICAgdGhpcy5fYmVhcmVyUHJlZml4ID0gYmVhcmVyUHJlZml4LnRyaW0oKS5jb25jYXQoJyAnKTtcbiAgICB0aGlzLl9leGNsdWRlZFVybHMgPSB0aGlzLmxvYWRFeGNsdWRlZFVybHMoYmVhcmVyRXhjbHVkZWRVcmxzKTtcbiAgICB0aGlzLl9zaWxlbnRSZWZyZXNoID0gaW5pdE9wdGlvbnMgPyBpbml0T3B0aW9ucy5mbG93ID09PSAnaW1wbGljaXQnIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogS2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24uIEl0IHNob3VsZCBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYWRhcHRlci5cbiAgICogT3B0aW9ucyBpcyBhIG9iamVjdCB3aXRoIDIgbWFpbiBwYXJhbWV0ZXJzOiBjb25maWcgYW5kIGluaXRPcHRpb25zLiBUaGUgZmlyc3Qgb25lXG4gICAqIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIEtleWNsb2FrIGluc3RhbmNlLiBUaGUgc2Vjb25kIG9uZSBhcmUgb3B0aW9ucyB0byBpbml0aWFsaXplIHRoZVxuICAgKiBrZXljbG9hayBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQ29uZmlnOiBtYXkgYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBrZXljbG9hayBVUkkgb3IgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAqIGZvbGxvd2luZyBjb250ZW50OlxuICAgKiAtIHVybDogS2V5Y2xvYWsganNvbiBVUkxcbiAgICogLSByZWFsbTogcmVhbG0gbmFtZVxuICAgKiAtIGNsaWVudElkOiBjbGllbnQgaWRcbiAgICpcbiAgICogaW5pdE9wdGlvbnM6XG4gICAqIE9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgS2V5Y2xvYWsgYWRhcHRlciwgbWF0Y2hlcyB0aGUgb3B0aW9ucyBhcyBwcm92aWRlZCBieSBLZXljbG9hayBpdHNlbGYuXG4gICAqXG4gICAqIGVuYWJsZUJlYXJlckludGVyY2VwdG9yOlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiZWFyZXIgd2lsbCBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIGxvYWRVc2VyUHJvZmlsZUluU3RhcnRVcDpcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgcHJvZmlsZSBzaG91bGQgYmUgbG9hZGVkIGF0IHRoZSBrZXljbG9hayBpbml0aWFsaXphdGlvbixcbiAgICoganVzdCBhZnRlciB0aGUgbG9naW4uXG4gICAqXG4gICAqIGJlYXJlckV4Y2x1ZGVkVXJsczpcbiAgICogU3RyaW5nIEFycmF5IHRvIGV4Y2x1ZGUgdGhlIHVybHMgdGhhdCBzaG91bGQgbm90IGhhdmUgdGhlIEF1dGhvcml6YXRpb24gSGVhZGVyIGF1dG9tYXRpY2FsbHlcbiAgICogYWRkZWQuXG4gICAqXG4gICAqIGF1dGhvcml6YXRpb25IZWFkZXJOYW1lOlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBuYW1lLlxuICAgKlxuICAgKiBiZWFyZXJQcmVmaXg6XG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBwYXJhbS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBQcm9taXNlIHdpdGggYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGluaXQob3B0aW9uczogS2V5Y2xvYWtPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmluaXRTZXJ2aWNlVmFsdWVzKG9wdGlvbnMpO1xuICAgIGNvbnN0IHsgY29uZmlnLCBpbml0T3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICAgIHRoaXMuX2luc3RhbmNlID0gS2V5Y2xvYWsoY29uZmlnKTtcbiAgICB0aGlzLmJpbmRzS2V5Y2xvYWtFdmVudHMoKTtcblxuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZWQgPSBhd2FpdCB0b1Byb21pc2UodGhpcy5faW5zdGFuY2UuaW5pdChpbml0T3B0aW9ucykpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWQgJiYgdGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byBsb2dpbiBmb3JtIG9uIChvcHRpb25zIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoIHJlZGlyZWN0VXJpIGFuZC9vclxuICAgKiBwcm9tcHQgZmllbGRzKS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogT2JqZWN0LCB3aGVyZTpcbiAgICogIC0gcmVkaXJlY3RVcmk6IFNwZWNpZmllcyB0aGUgdXJpIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ2luLlxuICAgKiAgLSBwcm9tcHQ6QnkgZGVmYXVsdCB0aGUgbG9naW4gc2NyZWVuIGlzIGRpc3BsYXllZCBpZiB0aGUgdXNlciBpcyBub3QgbG9nZ2VkLWluIHRvIEtleWNsb2FrLlxuICAgKiBUbyBvbmx5IGF1dGhlbnRpY2F0ZSB0byB0aGUgYXBwbGljYXRpb24gaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQtaW4gYW5kIG5vdCBkaXNwbGF5IHRoZVxuICAgKiBsb2dpbiBwYWdlIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4sIHNldCB0aGlzIG9wdGlvbiB0byBub25lLiBUbyBhbHdheXMgcmVxdWlyZVxuICAgKiByZS1hdXRoZW50aWNhdGlvbiBhbmQgaWdub3JlIFNTTywgc2V0IHRoaXMgb3B0aW9uIHRvIGxvZ2luIC5cbiAgICogIC0gbWF4QWdlOiBVc2VkIGp1c3QgaWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuIFNwZWNpZmllcyBtYXhpbXVtIHRpbWUgc2luY2UgdGhlXG4gICAqIGF1dGhlbnRpY2F0aW9uIG9mIHVzZXIgaGFwcGVuZWQuIElmIHVzZXIgaXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkIGZvciBsb25nZXIgdGltZSB0aGFuXG4gICAqIG1heEFnZSwgdGhlIFNTTyBpcyBpZ25vcmVkIGFuZCBoZSB3aWxsIG5lZWQgdG8gcmUtYXV0aGVudGljYXRlIGFnYWluLlxuICAgKiAgLSBsb2dpbkhpbnQ6IFVzZWQgdG8gcHJlLWZpbGwgdGhlIHVzZXJuYW1lL2VtYWlsIGZpZWxkIG9uIHRoZSBsb2dpbiBmb3JtLlxuICAgKiAgLSBhY3Rpb246IElmIHZhbHVlIGlzICdyZWdpc3RlcicgdGhlbiB1c2VyIGlzIHJlZGlyZWN0ZWQgdG8gcmVnaXN0cmF0aW9uIHBhZ2UsIG90aGVyd2lzZSB0b1xuICAgKiBsb2dpbiBwYWdlLlxuICAgKiAgLSBsb2NhbGU6IFNwZWNpZmllcyB0aGUgZGVzaXJlZCBsb2NhbGUgZm9yIHRoZSBVSS5cbiAgICogQHJldHVybnNcbiAgICogQSB2b2lkIFByb21pc2UgaWYgdGhlIGxvZ2luIGlzIHN1Y2Nlc3NmdWwgYW5kIGFmdGVyIHRoZSB1c2VyIHByb2ZpbGUgbG9hZGluZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dpbihvcHRpb25zOiBLZXljbG9hay5LZXljbG9ha0xvZ2luT3B0aW9ucyA9IHt9KSB7XG4gICAgYXdhaXQgdG9Qcm9taXNlKHRoaXMuX2luc3RhbmNlLmxvZ2luKG9wdGlvbnMpKTtcblxuICAgIGlmICh0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXApIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFVzZXJQcm9maWxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byBsb2dvdXQuXG4gICAqXG4gICAqIEBwYXJhbSByZWRpcmVjdFVyaVxuICAgKiBTcGVjaWZpZXMgdGhlIHVyaSB0byByZWRpcmVjdCB0byBhZnRlciBsb2dvdXQuXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSBsb2dvdXQgd2FzIHN1Y2Nlc3NmdWwsIGNsZWFuaW5nIGFsc28gdGhlIHVzZXJQcm9maWxlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvZ291dChyZWRpcmVjdFVyaT86IHN0cmluZykge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByZWRpcmVjdFVyaSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdG9Qcm9taXNlKHRoaXMuX2luc3RhbmNlLmxvZ291dChvcHRpb25zKSk7XG4gICAgdGhpcy5fdXNlclByb2ZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3RzIHRvIHJlZ2lzdHJhdGlvbiBmb3JtLiBTaG9ydGN1dCBmb3IgbG9naW4gd2l0aCBvcHRpb25cbiAgICogYWN0aW9uID0gJ3JlZ2lzdGVyJy4gT3B0aW9ucyBhcmUgc2FtZSBhcyBmb3IgdGhlIGxvZ2luIG1ldGhvZCBidXQgJ2FjdGlvbicgaXMgc2V0IHRvXG4gICAqICdyZWdpc3RlcicuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIGxvZ2luIG9wdGlvbnNcbiAgICogQHJldHVybnNcbiAgICogQSB2b2lkIFByb21pc2UgaWYgdGhlIHJlZ2lzdGVyIGZsb3cgd2FzIHN1Y2Nlc3NmdWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIoXG4gICAgb3B0aW9uczogS2V5Y2xvYWsuS2V5Y2xvYWtMb2dpbk9wdGlvbnMgPSB7IGFjdGlvbjogJ3JlZ2lzdGVyJyB9XG4gICkge1xuICAgIGF3YWl0IHRvUHJvbWlzZSh0aGlzLl9pbnN0YW5jZS5yZWdpc3RlcihvcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFjY2VzcyB0byB0aGUgc3BlY2lmaWVkIHJvbGUuIEl0IHdpbGwgbG9vayBmb3Igcm9sZXMgaW5cbiAgICogcmVhbG0gYW5kIGNsaWVudElkLCBidXQgd2lsbCBub3QgY2hlY2sgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSByb2xlXG4gICAqIHJvbGUgbmFtZVxuICAgKiBAcGFyYW0gcmVzb3VyY2VcbiAgICogcmVzb3VyY2UgbmFtZSBJZiBub3Qgc3BlY2lmaWVkLCBgY2xpZW50SWRgIGlzIHVzZWRcbiAgICogQHJldHVybnNcbiAgICogQSBib29sZWFuIG1lYW5pbmcgaWYgdGhlIHVzZXIgaGFzIHRoZSBzcGVjaWZpZWQgUm9sZS5cbiAgICovXG4gIGlzVXNlckluUm9sZShyb2xlOiBzdHJpbmcsIHJlc291cmNlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc1JvbGU6IGJvb2xlYW47XG4gICAgaGFzUm9sZSA9IHRoaXMuX2luc3RhbmNlLmhhc1Jlc291cmNlUm9sZShyb2xlLCByZXNvdXJjZSk7XG4gICAgaWYgKCFoYXNSb2xlKSB7XG4gICAgICBoYXNSb2xlID0gdGhpcy5faW5zdGFuY2UuaGFzUmVhbG1Sb2xlKHJvbGUpO1xuICAgIH1cbiAgICByZXR1cm4gaGFzUm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJvbGVzIG9mIHRoZSBsb2dnZWQgdXNlci4gVGhlIGFsbFJvbGVzIHBhcmFtZXRlciwgd2l0aCBkZWZhdWx0IHZhbHVlXG4gICAqIHRydWUsIHdpbGwgcmV0dXJuIHRoZSBjbGllbnRJZCBhbmQgcmVhbG0gcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci4gSWYgc2V0IHRvIGZhbHNlXG4gICAqIGl0IHdpbGwgb25seSByZXR1cm4gdGhlIHVzZXIgcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGllbnRJZC5cbiAgICpcbiAgICogQHBhcmFtIGFsbFJvbGVzXG4gICAqIEZsYWcgdG8gc2V0IGlmIGFsbCByb2xlcyBzaG91bGQgYmUgcmV0dXJuZWQuKE9wdGlvbmFsOiBkZWZhdWx0IHZhbHVlIGlzIHRydWUpXG4gICAqIEByZXR1cm5zXG4gICAqIEFycmF5IG9mIFJvbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9nZ2VkIHVzZXIuXG4gICAqL1xuICBnZXRVc2VyUm9sZXMoYWxsUm9sZXM6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nW10ge1xuICAgIGxldCByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzKSB7XG4gICAgICAgIGlmICh0aGlzLl9pbnN0YW5jZS5yZXNvdXJjZUFjY2Vzcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgY29uc3QgcmVzb3VyY2VBY2Nlc3M6IGFueSA9IHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzW2tleV07XG4gICAgICAgICAgY29uc3QgY2xpZW50Um9sZXMgPSByZXNvdXJjZUFjY2Vzc1sncm9sZXMnXSB8fCBbXTtcbiAgICAgICAgICByb2xlcyA9IHJvbGVzLmNvbmNhdChjbGllbnRSb2xlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFsbFJvbGVzICYmIHRoaXMuX2luc3RhbmNlLnJlYWxtQWNjZXNzKSB7XG4gICAgICBjb25zdCByZWFsbVJvbGVzID0gdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3NbJ3JvbGVzJ10gfHwgW107XG4gICAgICByb2xlcy5wdXNoKC4uLnJlYWxtUm9sZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcm9sZXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqL1xuICBhc3luYyBpc0xvZ2dlZEluKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuX2luc3RhbmNlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVUb2tlbigyMCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIGhhcyBsZXNzIHRoYW4gbWluVmFsaWRpdHkgc2Vjb25kcyBsZWZ0IGJlZm9yZVxuICAgKiBpdCBleHBpcmVzLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmFsaWRpdHlcbiAgICogU2Vjb25kcyBsZWZ0LiAobWluVmFsaWRpdHkpIGlzIG9wdGlvbmFsLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gICAqIEByZXR1cm5zXG4gICAqIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gaXMgZXhwaXJlZC5cbiAgICovXG4gIGlzVG9rZW5FeHBpcmVkKG1pblZhbGlkaXR5OiBudW1iZXIgPSAwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmlzVG9rZW5FeHBpcmVkKG1pblZhbGlkaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdG9rZW4gZXhwaXJlcyB3aXRoaW4gbWluVmFsaWRpdHkgc2Vjb25kcyB0aGUgdG9rZW4gaXMgcmVmcmVzaGVkLiBJZiB0aGVcbiAgICogc2Vzc2lvbiBzdGF0dXMgaWZyYW1lIGlzIGVuYWJsZWQsIHRoZSBzZXNzaW9uIHN0YXR1cyBpcyBhbHNvIGNoZWNrZWQuXG4gICAqIFJldHVybnMgYSBwcm9taXNlIHRlbGxpbmcgaWYgdGhlIHRva2VuIHdhcyByZWZyZXNoZWQgb3Igbm90LiBJZiB0aGUgc2Vzc2lvbiBpcyBub3QgYWN0aXZlXG4gICAqIGFueW1vcmUsIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmFsaWRpdHlcbiAgICogU2Vjb25kcyBsZWZ0LiAobWluVmFsaWRpdHkgaXMgb3B0aW9uYWwsIGlmIG5vdCBzcGVjaWZpZWQgNSBpcyB1c2VkKVxuICAgKiBAcmV0dXJuc1xuICAgKiBQcm9taXNlIHdpdGggYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRva2VuIHdhcyBzdWNjZXNmdWxseSB1cGRhdGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVRva2VuKG1pblZhbGlkaXR5ID0gNSkge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSB3b3JrYXJvdW5kIHVudGlsIHRoZSBzaWxlbnQgcmVmcmVzaCAoaXNzdWUgIzQzKVxuICAgIC8vIGlzIG5vdCBpbXBsZW1lbnRlZCwgYXZvaWRpbmcgdGhlIHJlZGlyZWN0IGxvb3AuXG4gICAgaWYgKHRoaXMuX3NpbGVudFJlZnJlc2gpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdGYWlsZWQgdG8gcmVmcmVzaCB0aGUgdG9rZW4sIG9yIHRoZSBzZXNzaW9uIGlzIGV4cGlyZWQnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignS2V5Y2xvYWsgQW5ndWxhciBsaWJyYXJ5IGlzIG5vdCBpbml0aWFsaXplZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9Qcm9taXNlKHRoaXMuX2luc3RhbmNlLnVwZGF0ZVRva2VuKG1pblZhbGlkaXR5KSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogUmV0dXJucyBwcm9taXNlIHRvIHNldCBmdW5jdGlvbnMgdG8gYmUgaW52b2tlZCBpZiB0aGUgcHJvZmlsZSB3YXMgbG9hZGVkXG4gICAqIHN1Y2Nlc3NmdWxseSwgb3IgaWYgdGhlIHByb2ZpbGUgY291bGQgbm90IGJlIGxvYWRlZC5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlUmVsb2FkXG4gICAqIElmIHRydWUgd2lsbCBmb3JjZSB0aGUgbG9hZFVzZXJQcm9maWxlIGV2ZW4gaWYgaXRzIGFscmVhZHkgbG9hZGVkLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHByb21pc2Ugd2l0aCB0aGUgS2V5Y2xvYWtQcm9maWxlIGRhdGEgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRVc2VyUHJvZmlsZShmb3JjZVJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3VzZXJQcm9maWxlICYmICFmb3JjZVJlbG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHVzZXIgcHJvZmlsZSB3YXMgbm90IGxvYWRlZCBhcyB0aGUgdXNlciBpcyBub3QgbG9nZ2VkIGluLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLl91c2VyUHJvZmlsZSA9IGF3YWl0IHRvUHJvbWlzZShcbiAgICAgIHRoaXMuX2luc3RhbmNlLmxvYWRVc2VyUHJvZmlsZSgpXG4gICAgKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXV0aGVudGljYXRlZCB0b2tlbiwgY2FsbGluZyB1cGRhdGVUb2tlbiB0byBnZXQgYSByZWZyZXNoZWQgb25lIGlmXG4gICAqIG5lY2Vzc2FyeS4gSWYgdGhlIHNlc3Npb24gaXMgZXhwaXJlZCBhbmQgdGhlIGZvcmNlTG9naW4gZmxhZyBpcyBzZXQgdG8gdHJ1ZSxcbiAgICogdGhpcyBtZXRob2QgY2FsbHMgdGhlIGxvZ2luIG1ldGhvZCBmb3IgYSBuZXcgbG9naW4sIG90aGVyd2lzZSByZWplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VMb2dpblxuICAgKiBGbGFnIHdoZXRoZXIgYSBsb2dpbiBzaG91bGQgYmUgZW5mb3JjZWQgaWYgdGhlIHNlc3Npb24gaXMgZXhwaXJlZC5cbiAgICogQHJldHVybnNcbiAgICogUHJvbWlzZSB3aXRoIHRoZSBnZW5lcmF0ZWQgdG9rZW4uXG4gICAqL1xuICBhc3luYyBnZXRUb2tlbihmb3JjZUxvZ2luID0gdHJ1ZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVG9rZW4oMTApO1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLnRva2VuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZm9yY2VMb2dpbikge1xuICAgICAgICB0aGlzLmxvZ2luKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbG9nZ2VkIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgbG9nZ2VkIHVzZXJuYW1lLlxuICAgKi9cbiAgcHVibGljIGdldFVzZXJuYW1lKCkge1xuICAgIGlmICghdGhpcy5fdXNlclByb2ZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkIGluIG9yIHVzZXIgcHJvZmlsZSB3YXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGUudXNlcm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYXV0aGVudGljYXRpb24gc3RhdGUsIGluY2x1ZGluZyB0b2tlbnMuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBhcHBsaWNhdGlvblxuICAgKiBoYXMgZGV0ZWN0ZWQgdGhlIHNlc3Npb24gd2FzIGV4cGlyZWQsIGZvciBleGFtcGxlIGlmIHVwZGF0aW5nIHRva2VuIGZhaWxzLlxuICAgKiBJbnZva2luZyB0aGlzIHJlc3VsdHMgaW4gb25BdXRoTG9nb3V0IGNhbGxiYWNrIGxpc3RlbmVyIGJlaW5nIGludm9rZWQuXG4gICAqL1xuICBjbGVhclRva2VuKCk6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLmNsZWFyVG9rZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgdmFsaWQgdG9rZW4gaW4gaGVhZGVyLiBUaGUga2V5ICYgdmFsdWUgZm9ybWF0IGlzOlxuICAgKiBBdXRob3JpemF0aW9uIEJlYXJlciA8dG9rZW4+LlxuICAgKiBJZiB0aGUgaGVhZGVycyBwYXJhbSBpcyB1bmRlZmluZWQgaXQgd2lsbCBjcmVhdGUgdGhlIEFuZ3VsYXIgaGVhZGVycyBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBoZWFkZXJzXG4gICAqIFVwZGF0ZWQgaGVhZGVyIHdpdGggQXV0aG9yaXphdGlvbiBhbmQgS2V5Y2xvYWsgdG9rZW4uXG4gICAqIEByZXR1cm5zXG4gICAqIEFuIG9ic2VydmFibGUgd2l0aCB3aXRoIHRoZSBIVFRQIEF1dGhvcml6YXRpb24gaGVhZGVyIGFuZCB0aGUgY3VycmVudCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhZGRUb2tlblRvSGVhZGVyKGhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmdldFRva2VuKCkpLnBpcGUoXG4gICAgICBtYXAoKHRva2VuKSA9PlxuICAgICAgICBoZWFkZXJzLnNldCh0aGlzLl9hdXRob3JpemF0aW9uSGVhZGVyTmFtZSwgdGhpcy5fYmVhcmVyUHJlZml4ICsgdG9rZW4pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBLZXljbG9hayBpbnN0YW5jZSwgaWYgeW91IG5lZWQgYW55IGN1c3RvbWl6YXRpb24gdGhhdFxuICAgKiB0aGlzIEFuZ3VsYXIgc2VydmljZSBkb2VzIG5vdCBzdXBwb3J0IHlldC4gVXNlIHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIEtleWNsb2FrSW5zdGFuY2UgZnJvbSBrZXljbG9hay1qcy5cbiAgICovXG4gIGdldEtleWNsb2FrSW5zdGFuY2UoKTogS2V5Y2xvYWsuS2V5Y2xvYWtJbnN0YW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4Y2x1ZGVkIFVSTHMgdGhhdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYnlcbiAgICogdGhlIGh0dHAgaW50ZXJjZXB0b3Igd2hpY2ggYXV0b21hdGljYWxseSBhZGRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBpbiB0aGUgSHR0cCBSZXF1ZXN0LlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgZXhjbHVkZWQgdXJscyB0aGF0IG11c3Qgbm90IGJlIGludGVyY2VwdGVkIGJ5IHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLlxuICAgKi9cbiAgZ2V0IGV4Y2x1ZGVkVXJscygpOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBSZXR1cm5zIGlmIHRoZSBiZWFyZXIgaW50ZXJjZXB0b3Igd2FzIHNldCB0byBiZSBkaXNhYmxlZC5cbiAgICovXG4gIGdldCBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I7XG4gIH1cblxuICAvKipcbiAgICogS2V5Y2xvYWsgc3ViamVjdCB0byBtb25pdG9yIHRoZSBldmVudHMgdHJpZ2dlcmVkIGJ5IGtleWNsb2FrLWpzLlxuICAgKiBUaGUgZm9sbG93aW5nIGV2ZW50cyBhcyBhdmFpbGFibGUgKGFzIGRlc2NyaWJlZCBhdCBrZXljbG9hayBkb2NzIC1cbiAgICogaHR0cHM6Ly93d3cua2V5Y2xvYWsub3JnL2RvY3MvbGF0ZXN0L3NlY3VyaW5nX2FwcHMvaW5kZXguaHRtbCNjYWxsYmFjay1ldmVudHMpOlxuICAgKiAtIE9uQXV0aEVycm9yXG4gICAqIC0gT25BdXRoTG9nb3V0XG4gICAqIC0gT25BdXRoUmVmcmVzaEVycm9yXG4gICAqIC0gT25BdXRoUmVmcmVzaFN1Y2Nlc3NcbiAgICogLSBPbkF1dGhTdWNjZXNzXG4gICAqIC0gT25SZWFkeVxuICAgKiAtIE9uVG9rZW5FeHBpcmVcbiAgICogSW4gZWFjaCBvY2N1cnJlbmNlIG9mIGFueSBvZiB0aGVzZSwgdGhpcyBzdWJqZWN0IHdpbGwgcmV0dXJuIHRoZSBldmVudCB0eXBlLFxuICAgKiBkZXNjcmliZWQgYXQge0BsaW5rIEtleWNsb2FrRXZlbnRUeXBlfSBlbnVtIGFuZCB0aGUgZnVuY3Rpb24gYXJncyBmcm9tIHRoZSBrZXljbG9hay1qc1xuICAgKiBpZiBwcm92aWRlZCBhbnkuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgc3ViamVjdCB3aXRoIHRoZSB7QGxpbmsgS2V5Y2xvYWtFdmVudH0gd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCB0eXBlIGFuZCBhdHRhY2hlcyB0aGVcbiAgICogZnVuY3Rpb24gYXJncy5cbiAgICovXG4gIGdldCBrZXljbG9ha0V2ZW50cyQoKTogU3ViamVjdDxLZXljbG9ha0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX2tleWNsb2FrRXZlbnRzJDtcbiAgfVxufVxuIl19
@@ -1,10 +0,0 @@
1
- export function toPromise(originalPromise) {
2
- if (originalPromise instanceof Promise) {
3
- return originalPromise;
4
- }
5
- return new Promise(function (resolve, reject) {
6
- originalPromise.success(resolve);
7
- originalPromise.error(reject);
8
- });
9
- }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tcHJvbWlzZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY29yZS91dGlscy90by1wcm9taXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sVUFBVSxTQUFTLENBQU8sZUFBb0U7SUFDbEcsSUFBSSxlQUFlLFlBQVksT0FBTyxFQUFFO1FBQ3RDLE9BQU8sZUFBZSxDQUFDO0tBQ3hCO0lBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBSSxVQUFDLE9BQU8sRUFBRSxNQUFNO1FBQ3BDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXljbG9ha1Byb21pc2UgfSBmcm9tICdrZXljbG9hay1qcyc7XG5cbmludGVyZmFjZSBMZWdhY3lLZXljbG9ha1Byb21pc2U8VCwgRT4ge1xuICBzdWNjZXNzKGNhbGxiYWNrOiAocmVzdWx0OiBUKSA9PiB2b2lkKTogTGVnYWN5S2V5Y2xvYWtQcm9taXNlPFQsIEU+O1xuICBlcnJvcihjYWxsYmFjazogKHJlc3VsdDogRSkgPT4gdm9pZCk6IExlZ2FjeUtleWNsb2FrUHJvbWlzZTxULCBFPjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhICdsZWdhY3knIEtleWNsb2FrIHByb21pc2UgdG8gYSBzdGFuZGFyZGl6ZWQgb25lLlxuICpcbiAqIEBwYXJhbSBvcmlnaW5hbFByb21pc2UgVGhlIEtleWNsb2FrIHByb21pc2UgdG8gY29udmVydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHJvbWlzZTxULCBFPihvcmlnaW5hbFByb21pc2U6IExlZ2FjeUtleWNsb2FrUHJvbWlzZTxULCBFPiB8IEtleWNsb2FrUHJvbWlzZTxULCBFPikge1xuICBpZiAob3JpZ2luYWxQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgIHJldHVybiBvcmlnaW5hbFByb21pc2U7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG9yaWdpbmFsUHJvbWlzZS5zdWNjZXNzKHJlc29sdmUpO1xuICAgIG9yaWdpbmFsUHJvbWlzZS5lcnJvcihyZWplY3QpO1xuICB9KTtcbn1cbiJdfQ==
@@ -1,15 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { NgModule } from '@angular/core';
3
- import { CoreModule } from './core/core.module';
4
- var KeycloakAngularModule = (function () {
5
- function KeycloakAngularModule() {
6
- }
7
- KeycloakAngularModule = __decorate([
8
- NgModule({
9
- imports: [CoreModule]
10
- })
11
- ], KeycloakAngularModule);
12
- return KeycloakAngularModule;
13
- }());
14
- export { KeycloakAngularModule };
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9rZXljbG9hay1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2tleWNsb2FrLWFuZ3VsYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFRQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUtoRDtJQUFBO0lBQW9DLENBQUM7SUFBeEIscUJBQXFCO1FBSGpDLFFBQVEsQ0FBQztZQUNSLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQztTQUN0QixDQUFDO09BQ1cscUJBQXFCLENBQUc7SUFBRCw0QkFBQztDQUFBLEFBQXJDLElBQXFDO1NBQXhCLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICcuL2NvcmUvY29yZS5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29yZU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgS2V5Y2xvYWtBbmd1bGFyTW9kdWxlIHt9XG4iXX0=
@@ -1,7 +0,0 @@
1
- export { KeycloakEventType } from './lib/core/interfaces/keycloak-event';
2
- export { KeycloakAuthGuard } from './lib/core/services/keycloak-auth-guard';
3
- export { KeycloakService } from './lib/core/services/keycloak.service';
4
- export { KeycloakBearerInterceptor } from './lib/core/interceptors/keycloak-bearer.interceptor';
5
- export { CoreModule } from './lib/core/core.module';
6
- export { KeycloakAngularModule } from './lib/keycloak-angular.module';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2tleWNsb2FrLWFuZ3VsYXIvIiwic291cmNlcyI6WyJwdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFFTCxpQkFBaUIsRUFDbEIsTUFBTSxzQ0FBc0MsQ0FBQztBQU05QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUNMLHlCQUF5QixFQUMxQixNQUFNLHFEQUFxRCxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvTElDRU5TRVxuICovXG5cbmV4cG9ydCB7IEtleWNsb2FrQ29uZmlnIH0gZnJvbSAnLi9saWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLWNvbmZpZyc7XG5leHBvcnQge1xuICBLZXljbG9ha0V2ZW50LFxuICBLZXljbG9ha0V2ZW50VHlwZVxufSBmcm9tICcuL2xpYi9jb3JlL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgS2V5Y2xvYWsncyBpbnRlcm5hbCB0eXBlcyBpbnN0ZWFkLlxuICovXG5leHBvcnQgdHlwZSBLZXljbG9ha0luaXRPcHRpb25zID0gS2V5Y2xvYWsuS2V5Y2xvYWtJbml0T3B0aW9ucztcbmV4cG9ydCB7IEtleWNsb2FrT3B0aW9ucyB9IGZyb20gJy4vbGliL2NvcmUvaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcbmV4cG9ydCB7IEtleWNsb2FrQXV0aEd1YXJkIH0gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9rZXljbG9hay1hdXRoLWd1YXJkJztcbmV4cG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5leHBvcnQge1xuICBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yXG59IGZyb20gJy4vbGliL2NvcmUvaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvcic7XG5leHBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnLi9saWIvY29yZS9jb3JlLm1vZHVsZSc7XG5leHBvcnQgeyBLZXljbG9ha0FuZ3VsYXJNb2R1bGUgfSBmcm9tICcuL2xpYi9rZXljbG9hay1hbmd1bGFyLm1vZHVsZSc7XG4iXX0=