@kolektor/nucleus-identity 0.0.8-pre.5676 → 0.0.9-pre.5874

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 (34) hide show
  1. package/{esm2015/kolektor-nucleus-identity.js → esm2020/kolektor-nucleus-identity.mjs} +0 -0
  2. package/{esm2015/lib/models/client-registration.js → esm2020/lib/models/client-registration.mjs} +0 -0
  3. package/{esm2015/lib/models/device-code.js → esm2020/lib/models/device-code.mjs} +0 -0
  4. package/{esm2015/lib/models/identity.js → esm2020/lib/models/identity.mjs} +0 -0
  5. package/{esm2015/lib/models/otp.js → esm2020/lib/models/otp.mjs} +0 -0
  6. package/{esm2015/lib/models/service-principal.js → esm2020/lib/models/service-principal.mjs} +0 -0
  7. package/{esm2015/lib/nucleus-identity-config.js → esm2020/lib/nucleus-identity-config.mjs} +0 -0
  8. package/{esm2015/lib/nucleus-identity.module.js → esm2020/lib/nucleus-identity.module.mjs} +4 -4
  9. package/esm2020/lib/nucleus-identity.service.mjs +338 -0
  10. package/esm2020/lib/nucleus-token-interceptor.service.mjs +64 -0
  11. package/{esm2015/lib/utils/angular-requestor.js → esm2020/lib/utils/angular-requestor.mjs} +5 -6
  12. package/{esm2015/lib/utils/authorization-service-configuration.js → esm2020/lib/utils/authorization-service-configuration.mjs} +0 -0
  13. package/{esm2015/lib/utils/location.service.js → esm2020/lib/utils/location.service.mjs} +3 -3
  14. package/{esm2015/lib/utils/nucleus-authorization-notifier.js → esm2020/lib/utils/nucleus-authorization-notifier.mjs} +0 -0
  15. package/{esm2015/lib/utils/nucleus-crypto.js → esm2020/lib/utils/nucleus-crypto.mjs} +0 -0
  16. package/esm2020/lib/utils/oidc-configuration.service.mjs +90 -0
  17. package/esm2020/lib/utils/secrets-store.mjs +117 -0
  18. package/esm2020/lib/utils/token-client.mjs +140 -0
  19. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  20. package/fesm2015/{kolektor-nucleus-identity.js → kolektor-nucleus-identity.mjs} +177 -166
  21. package/fesm2015/kolektor-nucleus-identity.mjs.map +1 -0
  22. package/fesm2020/kolektor-nucleus-identity.mjs +1054 -0
  23. package/fesm2020/kolektor-nucleus-identity.mjs.map +1 -0
  24. package/lib/nucleus-identity.service.d.ts +3 -2
  25. package/lib/utils/secrets-store.d.ts +3 -0
  26. package/package.json +22 -9
  27. package/bundles/kolektor-nucleus-identity.umd.js +0 -1910
  28. package/bundles/kolektor-nucleus-identity.umd.js.map +0 -1
  29. package/esm2015/lib/nucleus-identity.service.js +0 -385
  30. package/esm2015/lib/nucleus-token-interceptor.service.js +0 -66
  31. package/esm2015/lib/utils/oidc-configuration.service.js +0 -95
  32. package/esm2015/lib/utils/secrets-store.js +0 -113
  33. package/esm2015/lib/utils/token-client.js +0 -159
  34. package/fesm2015/kolektor-nucleus-identity.js.map +0 -1
@@ -0,0 +1,90 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { NucleusAppService } from '@kolektor/nucleus-common';
3
+ import { NucleusIdentityConfig } from '../nucleus-identity-config';
4
+ import { AngularRequestor } from './angular-requestor';
5
+ import { NucleusAuthorizationServiceConfiguration } from './authorization-service-configuration';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./angular-requestor";
8
+ import * as i2 from "../nucleus-identity-config";
9
+ import * as i3 from "@kolektor/nucleus-common";
10
+ export class OidcConfigurationService {
11
+ constructor(requestor, config, appService) {
12
+ this.requestor = requestor;
13
+ this.config = config;
14
+ this.appService = appService;
15
+ this._configuration = null;
16
+ }
17
+ async getConfiguration() {
18
+ await this.assureConfiguration();
19
+ return this._configuration;
20
+ }
21
+ get clientId() {
22
+ return this.config.clientId;
23
+ }
24
+ get requestedScopes() {
25
+ return this.config.requestedScopes;
26
+ }
27
+ get servicePrincipalRequestedScopes() {
28
+ return this.config.servicePrincipalRequestedScopes;
29
+ }
30
+ get authProviderHint() {
31
+ return this.config.authProviderHint;
32
+ }
33
+ get redirectUrl() {
34
+ let uri = window.location.href;
35
+ const platform = this.appService.platform;
36
+ if (platform === 'android' && this.config.androidRedirectUri) {
37
+ uri = this.config.androidRedirectUri;
38
+ }
39
+ else if (platform === 'ios' && this.config.iOSRedirectUri) {
40
+ uri = this.config.iOSRedirectUri;
41
+ }
42
+ else if (this.config.redirectUri) {
43
+ uri = this.config.redirectUri;
44
+ }
45
+ return this.NormalizeRedirectUri(uri);
46
+ }
47
+ getServerUrl(relativeUri = null) {
48
+ let authority = this.config.authority;
49
+ if (!authority || authority === 'origin') {
50
+ authority = window.origin;
51
+ }
52
+ let url = new URL(authority);
53
+ if (relativeUri) {
54
+ url = new URL(relativeUri, url);
55
+ }
56
+ return url.href;
57
+ }
58
+ NormalizeRedirectUri(uri) {
59
+ const i = uri.indexOf('#');
60
+ if (i > 0) {
61
+ uri = uri.substring(0, i);
62
+ }
63
+ return uri;
64
+ }
65
+ async assureConfiguration() {
66
+ if (this._configuration != null) {
67
+ return;
68
+ }
69
+ let authority = this.getServerUrl();
70
+ if (authority[authority.length - 1] === '/') {
71
+ authority = authority.slice(0, -1);
72
+ }
73
+ try {
74
+ this._configuration = await NucleusAuthorizationServiceConfiguration.fetchFromIssuer(authority, this.requestor);
75
+ }
76
+ catch (e) {
77
+ console.error('Nucleus.Identity: Cannot load OIDC configuration: ' + e.message);
78
+ throw e;
79
+ }
80
+ }
81
+ }
82
+ OidcConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: OidcConfigurationService, deps: [{ token: i1.AngularRequestor }, { token: i2.NucleusIdentityConfig }, { token: i3.NucleusAppService }], target: i0.ɵɵFactoryTarget.Injectable });
83
+ OidcConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: OidcConfigurationService, providedIn: 'root' });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: OidcConfigurationService, decorators: [{
85
+ type: Injectable,
86
+ args: [{
87
+ providedIn: 'root'
88
+ }]
89
+ }], ctorParameters: function () { return [{ type: i1.AngularRequestor }, { type: i2.NucleusIdentityConfig }, { type: i3.NucleusAppService }]; } });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkYy1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udWNsZXVzLWlkZW50aXR5L3NyYy9saWIvdXRpbHMvb2lkYy1jb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7QUFLakcsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUNVLFNBQTJCLEVBQzNCLE1BQTZCLEVBQzdCLFVBQTZCO1FBRjdCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBQzdCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBSS9CLG1CQUFjLEdBQTZDLElBQUksQ0FBQztJQUZ4RSxDQUFDO0lBSU0sS0FBSyxDQUFDLGdCQUFnQjtRQUN6QixNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFXLCtCQUErQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUM7SUFDckQsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzFDLElBQUksUUFBUSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFO1lBQzVELEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1NBQ3RDO2FBQU0sSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFO1lBQzNELEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztTQUNsQzthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDbEMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxjQUFzQixJQUFJO1FBQzVDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUN4QyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUMzQjtRQUVELElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdCLElBQUksV0FBVyxFQUFFO1lBQ2YsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNqQztRQUVELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRU8sb0JBQW9CLENBQUMsR0FBVztRQUN0QyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNULEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRTtZQUMvQixPQUFPO1NBQ1I7UUFDRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDM0MsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEM7UUFDRCxJQUFJO1lBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLHdDQUF3QyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2pIO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLG9EQUFvRCxHQUFJLENBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzRixNQUFNLENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQzs7cUhBakZVLHdCQUF3Qjt5SEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07MkZBRVAsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTnVjbGV1c0FwcFNlcnZpY2UgfSBmcm9tICdAa29sZWt0b3IvbnVjbGV1cy1jb21tb24nO1xyXG5pbXBvcnQgeyBOdWNsZXVzSWRlbnRpdHlDb25maWcgfSBmcm9tICcuLi9udWNsZXVzLWlkZW50aXR5LWNvbmZpZyc7XHJcbmltcG9ydCB7IEFuZ3VsYXJSZXF1ZXN0b3IgfSBmcm9tICcuL2FuZ3VsYXItcmVxdWVzdG9yJztcclxuaW1wb3J0IHsgTnVjbGV1c0F1dGhvcml6YXRpb25TZXJ2aWNlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYXV0aG9yaXphdGlvbi1zZXJ2aWNlLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVxdWVzdG9yOiBBbmd1bGFyUmVxdWVzdG9yLFxyXG4gICAgcHJpdmF0ZSBjb25maWc6IE51Y2xldXNJZGVudGl0eUNvbmZpZyxcclxuICAgIHByaXZhdGUgYXBwU2VydmljZTogTnVjbGV1c0FwcFNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb25maWd1cmF0aW9uOiBOdWNsZXVzQXV0aG9yaXphdGlvblNlcnZpY2VDb25maWd1cmF0aW9uID0gbnVsbDtcclxuXHJcbiAgcHVibGljIGFzeW5jIGdldENvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuYXNzdXJlQ29uZmlndXJhdGlvbigpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2xpZW50SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2xpZW50SWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlcXVlc3RlZFNjb3BlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0ZWRTY29wZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlcnZpY2VQcmluY2lwYWxSZXF1ZXN0ZWRTY29wZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuc2VydmljZVByaW5jaXBhbFJlcXVlc3RlZFNjb3BlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXV0aFByb3ZpZGVySGludCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hdXRoUHJvdmlkZXJIaW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZWRpcmVjdFVybCgpIHtcclxuICAgIGxldCB1cmkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIGNvbnN0IHBsYXRmb3JtID0gdGhpcy5hcHBTZXJ2aWNlLnBsYXRmb3JtO1xyXG4gICAgaWYgKHBsYXRmb3JtID09PSAnYW5kcm9pZCcgJiYgdGhpcy5jb25maWcuYW5kcm9pZFJlZGlyZWN0VXJpKSB7XHJcbiAgICAgIHVyaSA9IHRoaXMuY29uZmlnLmFuZHJvaWRSZWRpcmVjdFVyaTtcclxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdpb3MnICYmIHRoaXMuY29uZmlnLmlPU1JlZGlyZWN0VXJpKSB7XHJcbiAgICAgIHVyaSA9IHRoaXMuY29uZmlnLmlPU1JlZGlyZWN0VXJpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5yZWRpcmVjdFVyaSkge1xyXG4gICAgICB1cmkgPSB0aGlzLmNvbmZpZy5yZWRpcmVjdFVyaTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLk5vcm1hbGl6ZVJlZGlyZWN0VXJpKHVyaSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VydmVyVXJsKHJlbGF0aXZlVXJpOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBsZXQgYXV0aG9yaXR5ID0gdGhpcy5jb25maWcuYXV0aG9yaXR5O1xyXG4gICAgaWYgKCFhdXRob3JpdHkgfHwgYXV0aG9yaXR5ID09PSAnb3JpZ2luJykge1xyXG4gICAgICBhdXRob3JpdHkgPSB3aW5kb3cub3JpZ2luO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB1cmwgPSBuZXcgVVJMKGF1dGhvcml0eSk7XHJcblxyXG4gICAgaWYgKHJlbGF0aXZlVXJpKSB7XHJcbiAgICAgIHVybCA9IG5ldyBVUkwocmVsYXRpdmVVcmksIHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVybC5ocmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBOb3JtYWxpemVSZWRpcmVjdFVyaSh1cmk6IHN0cmluZykge1xyXG4gICAgY29uc3QgaSA9IHVyaS5pbmRleE9mKCcjJyk7XHJcbiAgICBpZiAoaSA+IDApIHtcclxuICAgICAgdXJpID0gdXJpLnN1YnN0cmluZygwLCBpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1cmk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGFzc3VyZUNvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5fY29uZmlndXJhdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBhdXRob3JpdHkgPSB0aGlzLmdldFNlcnZlclVybCgpO1xyXG4gICAgaWYgKGF1dGhvcml0eVthdXRob3JpdHkubGVuZ3RoIC0gMV0gPT09ICcvJykge1xyXG4gICAgICBhdXRob3JpdHkgPSBhdXRob3JpdHkuc2xpY2UoMCwgLTEpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGF3YWl0IE51Y2xldXNBdXRob3JpemF0aW9uU2VydmljZUNvbmZpZ3VyYXRpb24uZmV0Y2hGcm9tSXNzdWVyKGF1dGhvcml0eSwgdGhpcy5yZXF1ZXN0b3IpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdOdWNsZXVzLklkZW50aXR5OiBDYW5ub3QgbG9hZCBPSURDIGNvbmZpZ3VyYXRpb246ICcgKyAoZSBhcyBFcnJvcikubWVzc2FnZSk7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,117 @@
1
+ import 'capacitor-secure-storage-plugin';
2
+ import { TokenResponse } from '@openid/appauth';
3
+ import { Identity } from '../models/identity';
4
+ import { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';
5
+ export class SecretsStore {
6
+ constructor(clientId) {
7
+ this._tokens = {};
8
+ this._identities = {};
9
+ // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity
10
+ this._defaultIdentityId = null;
11
+ this._defaultIdentityIdStorageKey = null;
12
+ this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail
13
+ this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;
14
+ this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
15
+ this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
16
+ }
17
+ removeServicePrincipal() {
18
+ this._servicePrincipal = null;
19
+ return this.clear(this._servicePrincipalKey);
20
+ }
21
+ async setServicePrincipal(servicePrincipal) {
22
+ this._servicePrincipal = servicePrincipal;
23
+ await this.save(this._servicePrincipalKey, servicePrincipal);
24
+ }
25
+ async getServicePrincipal() {
26
+ if (!this._servicePrincipal) {
27
+ this._servicePrincipal = await this.load(this._servicePrincipalKey);
28
+ }
29
+ return this._servicePrincipal;
30
+ }
31
+ setToken(token, id = null) {
32
+ return this.setTokenInternal(token, true, id);
33
+ }
34
+ getIdentity(id = null) {
35
+ const key = this.getTokenKey(id);
36
+ return this._identities[key];
37
+ }
38
+ setDefaultIdentityId(id) {
39
+ this._defaultIdentityId = id;
40
+ if (this._defaultIdentityId) {
41
+ localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);
42
+ }
43
+ else {
44
+ localStorage.removeItem(this._defaultIdentityIdStorageKey);
45
+ }
46
+ }
47
+ async getToken(id = null) {
48
+ const key = this.getTokenKey(id);
49
+ // if token is not there or it is invalid we check storage again before returning
50
+ if (!this._tokens[key] || !this._tokens[key].isValid()) {
51
+ await this.reloadTokenFromStorage(id);
52
+ }
53
+ return this._tokens[key];
54
+ }
55
+ removeToken(id = null) {
56
+ const key = this.getTokenKey(id);
57
+ delete this._tokens[key];
58
+ delete this._identities[key];
59
+ return this.clear(key);
60
+ }
61
+ async reloadTokenFromStorage(id) {
62
+ const key = this.getTokenKey(id);
63
+ const storedToken = await this.load(key);
64
+ if (storedToken) {
65
+ const res = new TokenResponse(storedToken);
66
+ if (res?.accessToken || res?.idToken) {
67
+ await this.setTokenInternal(res, false, id);
68
+ }
69
+ }
70
+ return null;
71
+ }
72
+ async setTokenInternal(token, save, id = null) {
73
+ const key = this.getTokenKey(id);
74
+ if (token == null) {
75
+ await this.removeToken(id);
76
+ }
77
+ else {
78
+ this._tokens[key] = token;
79
+ this._identities[key] = Identity.createFromResponse(token);
80
+ if (save) {
81
+ try {
82
+ await this.save(key, token.toJson());
83
+ }
84
+ catch (e) {
85
+ console.warn('Nucleus.Identity: Could not save to SecureStorage.');
86
+ }
87
+ }
88
+ }
89
+ }
90
+ getTokenKey(id = null) {
91
+ if (!id) {
92
+ id = this._defaultIdentityId;
93
+ }
94
+ return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;
95
+ }
96
+ clear(key) {
97
+ return SecureStoragePlugin.remove({ key });
98
+ }
99
+ save(key, value) {
100
+ return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });
101
+ }
102
+ async load(key) {
103
+ try {
104
+ const x = await SecureStoragePlugin.get({ key });
105
+ if (x?.value) {
106
+ return JSON.parse(x.value);
107
+ }
108
+ else {
109
+ return null;
110
+ }
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9zZWNyZXRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBWSxRQUFnQjtRQU9wQixZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUErQixFQUFFLENBQUM7UUFHckQsNEdBQTRHO1FBQ3BHLHVCQUFrQixHQUFXLElBQUksQ0FBQztRQUNsQyxpQ0FBNEIsR0FBVyxJQUFJLENBQUM7UUFabEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLDZEQUE2RDtRQUMzSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUNsRSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUMxRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBVU0sc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsZ0JBQWtD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LENBQUM7SUFDeEUsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFJLENBQUksR0FBVztRQUMvQixJQUFJO1lBQ0YsTUFBTSxDQUFDLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtnQkFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBTSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUFDLE1BQU07WUFDTixPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdjYXBhY2l0b3Itc2VjdXJlLXN0b3JhZ2UtcGx1Z2luJztcclxuaW1wb3J0IHsgVG9rZW5SZXNwb25zZSwgVG9rZW5SZXNwb25zZUpzb24gfSBmcm9tICdAb3BlbmlkL2FwcGF1dGgnO1xyXG5pbXBvcnQgeyBJZGVudGl0eSB9IGZyb20gJy4uL21vZGVscy9pZGVudGl0eSc7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tICcuLi9tb2RlbHMvc2VydmljZS1wcmluY2lwYWwnO1xyXG5pbXBvcnQgeyBTZWN1cmVTdG9yYWdlUGx1Z2luIH0gZnJvbSAnY2FwYWNpdG9yLXNlY3VyZS1zdG9yYWdlLXBsdWdpbic7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VjcmV0c1N0b3JlIHtcclxuICBjb25zdHJ1Y3RvcihjbGllbnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXggPSBgTnVjbGV1cy5JZGVudGl0eS4ke2NsaWVudElkfWA7IC8vIGRvIG5vdCBjaGFuZ2UgdGhpcyBvciBsb2dpbiB3aXRoIGV4aXN0aW5nIHRva2VucyB3aWxsIGZhaWxcclxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkgPSBgJHt0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXh9LlN2Y1BgO1xyXG4gICAgdGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5ID0gYCR7dGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4fS5JZElkYDtcclxuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG9rZW5TdG9yYWdlS2V5UHJlZml4OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdG9rZW5zOiB7IFtpZDogc3RyaW5nXTogVG9rZW5SZXNwb25zZSB9ID0ge307XHJcbiAgcHJpdmF0ZSBfaWRlbnRpdGllczogeyBbaWQ6IHN0cmluZ106IElkZW50aXR5IH0gPSB7fTtcclxuICBwcml2YXRlIF9zZXJ2aWNlUHJpbmNpcGFsS2V5O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWw6IFNlcnZpY2VQcmluY2lwYWw7XHJcbiAgLy8gdGhpcyBzcGVjaWZ5IHdoaWNoIGlkZW50aXR5IGlkIGlzIHVzZWQgYnkgZGVmYXVsdCwgd2hlbiBJZiBpZCBpcyBub3Qgc3BlY2lmaWVkIGluIGdldFRva2VuIG9yIGdldElkZW50aXR5XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdElkZW50aXR5SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgcmVtb3ZlU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWwgPSBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xlYXIodGhpcy5fc2VydmljZVByaW5jaXBhbEtleSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0U2VydmljZVByaW5jaXBhbChzZXJ2aWNlUHJpbmNpcGFsOiBTZXJ2aWNlUHJpbmNpcGFsKSB7XHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gc2VydmljZVByaW5jaXBhbDtcclxuICAgIGF3YWl0IHRoaXMuc2F2ZSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5LCBzZXJ2aWNlUHJpbmNpcGFsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsKCkge1xyXG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsKSB7XHJcbiAgICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWwgPSBhd2FpdCB0aGlzLmxvYWQ8U2VydmljZVByaW5jaXBhbD4odGhpcy5fc2VydmljZVByaW5jaXBhbEtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVByaW5jaXBhbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUb2tlbih0b2tlbjogVG9rZW5SZXNwb25zZSwgaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLnNldFRva2VuSW50ZXJuYWwodG9rZW4sIHRydWUsIGlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJZGVudGl0eShpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5faWRlbnRpdGllc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlZmF1bHRJZGVudGl0eUlkKGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkID0gaWQ7XHJcbiAgICBpZiAodGhpcy5fZGVmYXVsdElkZW50aXR5SWQpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5LCB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZFN0b3JhZ2VLZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRva2VuKGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuXHJcbiAgICAvLyBpZiB0b2tlbiBpcyBub3QgdGhlcmUgb3IgaXQgaXMgaW52YWxpZCB3ZSBjaGVjayBzdG9yYWdlIGFnYWluIGJlZm9yZSByZXR1cm5pbmdcclxuICAgIGlmICghdGhpcy5fdG9rZW5zW2tleV0gfHwgIXRoaXMuX3Rva2Vuc1trZXldLmlzVmFsaWQoKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbG9hZFRva2VuRnJvbVN0b3JhZ2UoaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3Rva2Vuc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVRva2VuKGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGRlbGV0ZSB0aGlzLl90b2tlbnNba2V5XTtcclxuICAgIGRlbGV0ZSB0aGlzLl9pZGVudGl0aWVzW2tleV07XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhcihrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZWxvYWRUb2tlbkZyb21TdG9yYWdlKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgY29uc3Qgc3RvcmVkVG9rZW4gPSBhd2FpdCB0aGlzLmxvYWQ8VG9rZW5SZXNwb25zZUpzb24+KGtleSk7XHJcbiAgICBpZiAoc3RvcmVkVG9rZW4pIHtcclxuICAgICAgY29uc3QgcmVzID0gbmV3IFRva2VuUmVzcG9uc2Uoc3RvcmVkVG9rZW4pO1xyXG4gICAgICBpZiAocmVzPy5hY2Nlc3NUb2tlbiB8fCByZXM/LmlkVG9rZW4pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNldFRva2VuSW50ZXJuYWwocmVzLCBmYWxzZSwgaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0VG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSwgc2F2ZTogYm9vbGVhbiwgaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgaWYgKHRva2VuID09IG51bGwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVUb2tlbihpZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl90b2tlbnNba2V5XSA9IHRva2VuO1xyXG4gICAgICB0aGlzLl9pZGVudGl0aWVzW2tleV0gPSBJZGVudGl0eS5jcmVhdGVGcm9tUmVzcG9uc2UodG9rZW4pO1xyXG4gICAgICBpZiAoc2F2ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNhdmUoa2V5LCB0b2tlbi50b0pzb24oKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBDb3VsZCBub3Qgc2F2ZSB0byBTZWN1cmVTdG9yYWdlLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb2tlbktleShpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICBpZCA9IHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkID8gYCR7dGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4fS4ke2lkfWAgOiB0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gU2VjdXJlU3RvcmFnZVBsdWdpbi5yZW1vdmUoeyBrZXkgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmU8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogUHJvbWlzZTx7IHZhbHVlOiBib29sZWFuIH0+IHtcclxuICAgIHJldHVybiBTZWN1cmVTdG9yYWdlUGx1Z2luLnNldCh7IGtleSwgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZDxUPihrZXk6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgeCA9IGF3YWl0IFNlY3VyZVN0b3JhZ2VQbHVnaW4uZ2V0KHsga2V5IH0pO1xyXG4gICAgICBpZiAoeD8udmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh4LnZhbHVlKSBhcyBUO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -0,0 +1,140 @@
1
+ import { AppAuthError, BaseTokenRequestHandler, BasicQueryStringUtils, GRANT_TYPE_AUTHORIZATION_CODE, GRANT_TYPE_REFRESH_TOKEN, TokenRequest } from '@openid/appauth';
2
+ import { OidcConfigurationService } from './oidc-configuration.service';
3
+ import { AngularRequestor } from './angular-requestor';
4
+ import { Injectable } from '@angular/core';
5
+ import { DeviceCode } from '../models/device-code';
6
+ import { ClientRegistrationResponse } from '../models/client-registration';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./angular-requestor";
9
+ import * as i2 from "./oidc-configuration.service";
10
+ export class TokenClient {
11
+ constructor(requestor, config) {
12
+ this.requestor = requestor;
13
+ this.config = config;
14
+ this._tokenHandler = new BaseTokenRequestHandler(requestor);
15
+ this._utils = new BasicQueryStringUtils();
16
+ }
17
+ async getByAuthorizationCode(redirectUrl, code, codeVerifier) {
18
+ const config = await this.config.getConfiguration();
19
+ const redirectUri = redirectUrl;
20
+ const req = new TokenRequest({
21
+ client_id: this.config.clientId,
22
+ redirect_uri: redirectUri,
23
+ grant_type: GRANT_TYPE_AUTHORIZATION_CODE,
24
+ code,
25
+ extras: { code_verifier: codeVerifier }
26
+ });
27
+ return await this._tokenHandler.performTokenRequest(config, req);
28
+ }
29
+ async getByRefreshToken(refreshToken) {
30
+ const config = await this.config.getConfiguration();
31
+ const redirectUri = this.config.redirectUrl;
32
+ const req = new TokenRequest({
33
+ client_id: this.config.clientId,
34
+ redirect_uri: redirectUri,
35
+ grant_type: GRANT_TYPE_REFRESH_TOKEN,
36
+ refresh_token: refreshToken
37
+ });
38
+ return await this._tokenHandler.performTokenRequest(config, req);
39
+ }
40
+ async getByClientCredentials(clientId, clientSecret, scope) {
41
+ const config = await this.config.getConfiguration();
42
+ const req = new TokenRequest({
43
+ client_id: clientId,
44
+ redirect_uri: null,
45
+ grant_type: 'client_credentials',
46
+ extras: {
47
+ client_secret: clientSecret,
48
+ scope,
49
+ }
50
+ });
51
+ return await this._tokenHandler.performTokenRequest(config, req);
52
+ }
53
+ async getBySecret(provider, secret, assertionToken, scope) {
54
+ const config = await this.config.getConfiguration();
55
+ const req = new TokenRequest({
56
+ client_id: this.config.clientId,
57
+ redirect_uri: null,
58
+ grant_type: 'urn:kolektor:nucleus:secret',
59
+ extras: {
60
+ secret_provider: provider,
61
+ secret_value: secret,
62
+ client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
63
+ client_assertion: assertionToken,
64
+ scope,
65
+ }
66
+ });
67
+ return await this._tokenHandler.performTokenRequest(config, req);
68
+ }
69
+ async getByDeviceCode(deviceCode) {
70
+ const config = await this.config.getConfiguration();
71
+ const req = new TokenRequest({
72
+ client_id: this.config.clientId,
73
+ redirect_uri: null,
74
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
75
+ extras: {
76
+ device_code: deviceCode
77
+ }
78
+ });
79
+ return await this._tokenHandler.performTokenRequest(config, req);
80
+ }
81
+ async registerServicePrincipal(token) {
82
+ const config = await this.config.getConfiguration();
83
+ const response = await this.requestor.xhr({
84
+ url: config.registrationEndpoint,
85
+ method: 'POST',
86
+ dataType: 'json',
87
+ headers: {
88
+ 'Content-Type': 'application/json',
89
+ Authorization: `Bearer ${token}`
90
+ }
91
+ // data: this._utils.stringify(map)
92
+ });
93
+ if (response.error === undefined) {
94
+ return new ClientRegistrationResponse(response);
95
+ }
96
+ else {
97
+ throw new AppAuthError(response.error);
98
+ }
99
+ }
100
+ async getRegistrationCode(existingServicePrincipalId = null) {
101
+ const params = {
102
+ custom_action: 'sp_register',
103
+ service_principal_id: existingServicePrincipalId
104
+ };
105
+ return this.getDeviceCodeInternal(params);
106
+ }
107
+ async getDeviceCode(scope) {
108
+ const params = {
109
+ scope,
110
+ };
111
+ return this.getDeviceCodeInternal(params);
112
+ }
113
+ async getDeviceCodeInternal(params) {
114
+ const config = await this.config.getConfiguration();
115
+ params['client_id'] = this.config.clientId;
116
+ const map = params;
117
+ const response = await this.requestor.xhr({
118
+ url: config.deviceAuthorizationEndpoint,
119
+ method: 'POST',
120
+ dataType: 'json',
121
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
122
+ data: this._utils.stringify(map)
123
+ });
124
+ if (response.error === undefined) {
125
+ return new DeviceCode(response);
126
+ }
127
+ else {
128
+ throw new AppAuthError(response.error);
129
+ }
130
+ }
131
+ }
132
+ TokenClient.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TokenClient, deps: [{ token: i1.AngularRequestor }, { token: i2.OidcConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
133
+ TokenClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TokenClient, providedIn: 'root' });
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: TokenClient, decorators: [{
135
+ type: Injectable,
136
+ args: [{
137
+ providedIn: 'root'
138
+ }]
139
+ }], ctorParameters: function () { return [{ type: i1.AngularRequestor }, { type: i2.OidcConfigurationService }]; } });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL3V0aWxzL3Rva2VuLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsNkJBQTZCLEVBQzdCLHdCQUF3QixFQUl4QixZQUFZLEVBQ1EsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQWtCLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFFLDBCQUEwQixFQUFrQyxNQUFNLCtCQUErQixDQUFDOzs7O0FBSzNHLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQ1UsU0FBMkIsRUFDM0IsTUFBZ0M7UUFEaEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBMEI7UUFFeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFLTSxLQUFLLENBQUMsc0JBQXNCLENBQUMsV0FBbUIsRUFBRSxJQUFZLEVBQUUsWUFBb0I7UUFDekYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDO1lBQzNC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RSxDQUFDO1FBRXJELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBYyxNQUFNLENBQUM7UUFFOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBa0M7WUFDekUsR0FBRyxFQUFFLE1BQU0sQ0FBQywyQkFBMkI7WUFDdkMsTUFBTSxFQUFFLE1BQU07WUFDZCxRQUFRLEVBQUUsTUFBTTtZQUNoQixPQUFPLEVBQUUsRUFBQyxjQUFjLEVBQUUsbUNBQW1DLEVBQUM7WUFDOUQsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztTQUNqQyxDQUFDLENBQUM7UUFFSCxJQUFLLFFBQTJCLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUNwRCxPQUFPLElBQUksVUFBVSxDQUFDLFFBQTBCLENBQUMsQ0FBQztTQUNuRDthQUFNO1lBQ0wsTUFBTSxJQUFJLFlBQVksQ0FBRSxRQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVEO0lBQ0gsQ0FBQzs7d0dBeklVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFwcEF1dGhFcnJvcixcclxuICBCYXNlVG9rZW5SZXF1ZXN0SGFuZGxlcixcclxuICBCYXNpY1F1ZXJ5U3RyaW5nVXRpbHMsXHJcbiAgR1JBTlRfVFlQRV9BVVRIT1JJWkFUSU9OX0NPREUsXHJcbiAgR1JBTlRfVFlQRV9SRUZSRVNIX1RPS0VOLFxyXG4gIFF1ZXJ5U3RyaW5nVXRpbHMsXHJcbiAgU3RyaW5nTWFwLFxyXG4gIFRva2VuRXJyb3JKc29uLFxyXG4gIFRva2VuUmVxdWVzdCxcclxuICBUb2tlblJlcXVlc3RIYW5kbGVyfSBmcm9tICdAb3BlbmlkL2FwcGF1dGgnO1xyXG5pbXBvcnQgeyBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL29pZGMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5ndWxhclJlcXVlc3RvciB9IGZyb20gJy4vYW5ndWxhci1yZXF1ZXN0b3InO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERldmljZUNvZGUsIERldmljZUNvZGVKc29uIH0gZnJvbSAnLi4vbW9kZWxzL2RldmljZS1jb2RlJztcclxuaW1wb3J0IHsgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2UsIENsaWVudFJlZ2lzdHJhdGlvblJlc3BvbnNlSnNvbiB9IGZyb20gJy4uL21vZGVscy9jbGllbnQtcmVnaXN0cmF0aW9uJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRva2VuQ2xpZW50ICB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlcXVlc3RvcjogQW5ndWxhclJlcXVlc3RvcixcclxuICAgIHByaXZhdGUgY29uZmlnOiBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3Rva2VuSGFuZGxlciA9IG5ldyBCYXNlVG9rZW5SZXF1ZXN0SGFuZGxlcihyZXF1ZXN0b3IpO1xyXG4gICAgdGhpcy5fdXRpbHMgPSBuZXcgQmFzaWNRdWVyeVN0cmluZ1V0aWxzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b2tlbkhhbmRsZXI6IFRva2VuUmVxdWVzdEhhbmRsZXI7XHJcbiAgcHJpdmF0ZSBfdXRpbHM6IFF1ZXJ5U3RyaW5nVXRpbHM7XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRCeUF1dGhvcml6YXRpb25Db2RlKHJlZGlyZWN0VXJsOiBzdHJpbmcsIGNvZGU6IHN0cmluZywgY29kZVZlcmlmaWVyOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcclxuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gcmVkaXJlY3RVcmw7XHJcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcclxuICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcclxuICAgICAgcmVkaXJlY3RfdXJpOiByZWRpcmVjdFVyaSxcclxuICAgICAgZ3JhbnRfdHlwZTogR1JBTlRfVFlQRV9BVVRIT1JJWkFUSU9OX0NPREUsXHJcbiAgICAgIGNvZGUsXHJcbiAgICAgIGV4dHJhczogeyBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fdG9rZW5IYW5kbGVyLnBlcmZvcm1Ub2tlblJlcXVlc3QoY29uZmlnLCByZXEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEJ5UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICBjb25zdCByZWRpcmVjdFVyaSA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xyXG4gICAgY29uc3QgcmVxID0gbmV3IFRva2VuUmVxdWVzdCh7XHJcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXHJcbiAgICAgIHJlZGlyZWN0X3VyaTogcmVkaXJlY3RVcmksXHJcbiAgICAgIGdyYW50X3R5cGU6IEdSQU5UX1RZUEVfUkVGUkVTSF9UT0tFTixcclxuICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl90b2tlbkhhbmRsZXIucGVyZm9ybVRva2VuUmVxdWVzdChjb25maWcsIHJlcSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QnlDbGllbnRDcmVkZW50aWFscyhjbGllbnRJZDogc3RyaW5nLCBjbGllbnRTZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0Q29uZmlndXJhdGlvbigpO1xyXG4gICAgY29uc3QgcmVxID0gbmV3IFRva2VuUmVxdWVzdCh7XHJcbiAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsXHJcbiAgICAgIHJlZGlyZWN0X3VyaTogbnVsbCxcclxuICAgICAgZ3JhbnRfdHlwZTogJ2NsaWVudF9jcmVkZW50aWFscycsXHJcbiAgICAgIGV4dHJhczoge1xyXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IGNsaWVudFNlY3JldCxcclxuICAgICAgICBzY29wZSxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fdG9rZW5IYW5kbGVyLnBlcmZvcm1Ub2tlblJlcXVlc3QoY29uZmlnLCByZXEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEJ5U2VjcmV0KHByb3ZpZGVyOiBzdHJpbmcsIHNlY3JldDogc3RyaW5nLCBhc3NlcnRpb25Ub2tlbjogc3RyaW5nLCBzY29wZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcclxuICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcclxuICAgICAgcmVkaXJlY3RfdXJpOiBudWxsLFxyXG4gICAgICBncmFudF90eXBlOiAndXJuOmtvbGVrdG9yOm51Y2xldXM6c2VjcmV0JyxcclxuICAgICAgZXh0cmFzOiB7XHJcbiAgICAgICAgc2VjcmV0X3Byb3ZpZGVyOiBwcm92aWRlcixcclxuICAgICAgICBzZWNyZXRfdmFsdWU6IHNlY3JldCxcclxuICAgICAgICBjbGllbnRfYXNzZXJ0aW9uX3R5cGU6ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1iZWFyZXInLFxyXG4gICAgICAgIGNsaWVudF9hc3NlcnRpb246IGFzc2VydGlvblRva2VuLFxyXG4gICAgICAgIHNjb3BlLFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fdG9rZW5IYW5kbGVyLnBlcmZvcm1Ub2tlblJlcXVlc3QoY29uZmlnLCByZXEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEJ5RGV2aWNlQ29kZShkZXZpY2VDb2RlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9ICBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcclxuICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcclxuICAgICAgcmVkaXJlY3RfdXJpOiBudWxsLFxyXG4gICAgICBncmFudF90eXBlOiAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGUnLFxyXG4gICAgICBleHRyYXM6IHtcclxuICAgICAgICBkZXZpY2VfY29kZTogZGV2aWNlQ29kZVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl90b2tlbkhhbmRsZXIucGVyZm9ybVRva2VuUmVxdWVzdChjb25maWcsIHJlcSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJTZXJ2aWNlUHJpbmNpcGFsKHRva2VuOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9ICBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3Rvci54aHI8Q2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2VKc29uIHwgVG9rZW5FcnJvckpzb24+KHtcclxuICAgICAgdXJsOiBjb25maWcucmVnaXN0cmF0aW9uRW5kcG9pbnQsXHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YFxyXG4gICAgICB9XHJcbiAgICAgIC8vIGRhdGE6IHRoaXMuX3V0aWxzLnN0cmluZ2lmeShtYXApXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoKHJlc3BvbnNlIGFzIFRva2VuRXJyb3JKc29uKS5lcnJvciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2UocmVzcG9uc2UgYXMgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2VKc29uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBBcHBBdXRoRXJyb3IoKHJlc3BvbnNlIGFzIFRva2VuRXJyb3JKc29uKS5lcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmVnaXN0cmF0aW9uQ29kZShleGlzdGluZ1NlcnZpY2VQcmluY2lwYWxJZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICBjdXN0b21fYWN0aW9uOiAnc3BfcmVnaXN0ZXInLFxyXG4gICAgICBzZXJ2aWNlX3ByaW5jaXBhbF9pZDogZXhpc3RpbmdTZXJ2aWNlUHJpbmNpcGFsSWRcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5nZXREZXZpY2VDb2RlSW50ZXJuYWwocGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VDb2RlKHNjb3BlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgc2NvcGUsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGV2aWNlQ29kZUludGVybmFsKHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldERldmljZUNvZGVJbnRlcm5hbChwYXJhbXM6IFN0cmluZ01hcCkge1xyXG4gICAgY29uc3QgY29uZmlnID0gIGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICBwYXJhbXNbJ2NsaWVudF9pZCddID0gdGhpcy5jb25maWcuY2xpZW50SWQ7XHJcbiAgICBjb25zdCBtYXA6IFN0cmluZ01hcCA9IHBhcmFtcztcclxuXHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdG9yLnhocjxEZXZpY2VDb2RlSnNvbiB8IFRva2VuRXJyb3JKc29uPih7XHJcbiAgICAgIHVybDogY29uZmlnLmRldmljZUF1dGhvcml6YXRpb25FbmRwb2ludCxcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LFxyXG4gICAgICBkYXRhOiB0aGlzLl91dGlscy5zdHJpbmdpZnkobWFwKVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKChyZXNwb25zZSBhcyBUb2tlbkVycm9ySnNvbikuZXJyb3IgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gbmV3IERldmljZUNvZGUocmVzcG9uc2UgYXMgRGV2aWNlQ29kZUpzb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEFwcEF1dGhFcnJvcigocmVzcG9uc2UgYXMgVG9rZW5FcnJvckpzb24pLmVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=