@kolektor/nucleus-identity 0.0.12-pre.7931 → 0.1.0-pre.124

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 (63) hide show
  1. package/README.md +7 -0
  2. package/esm2022/index.mjs +7 -0
  3. package/esm2022/kolektor-nucleus-identity.mjs +5 -0
  4. package/esm2022/lib/models/client-registration.mjs +8 -0
  5. package/esm2022/lib/models/device-code.mjs +19 -0
  6. package/esm2022/lib/models/identity.mjs +52 -0
  7. package/esm2022/lib/models/otp.mjs +11 -0
  8. package/esm2022/lib/models/service-principal.mjs +16 -0
  9. package/esm2022/lib/nucleus-identity-config.mjs +7 -0
  10. package/esm2022/lib/nucleus-identity.module.mjs +32 -0
  11. package/esm2022/lib/nucleus-identity.service.mjs +350 -0
  12. package/esm2022/lib/nucleus-token-interceptor.service.mjs +69 -0
  13. package/esm2022/lib/utils/angular-requestor.mjs +44 -0
  14. package/esm2022/lib/utils/authorization-service-configuration.mjs +28 -0
  15. package/esm2022/lib/utils/location.service.mjs +72 -0
  16. package/esm2022/lib/utils/nucleus-authorization-notifier.mjs +15 -0
  17. package/esm2022/lib/utils/oidc-configuration.service.mjs +95 -0
  18. package/esm2022/lib/utils/secrets-store.mjs +120 -0
  19. package/esm2022/lib/utils/token-client.mjs +140 -0
  20. package/{fesm2020 → fesm2022}/kolektor-nucleus-identity.mjs +980 -1012
  21. package/fesm2022/kolektor-nucleus-identity.mjs.map +1 -0
  22. package/index.d.ts +6 -5
  23. package/lib/models/client-registration.d.ts +11 -11
  24. package/lib/models/device-code.d.ts +19 -19
  25. package/lib/models/identity.d.ts +14 -14
  26. package/lib/models/otp.d.ts +14 -14
  27. package/lib/models/service-principal.d.ts +12 -12
  28. package/lib/nucleus-identity-config.d.ts +12 -12
  29. package/lib/nucleus-identity.module.d.ts +9 -9
  30. package/lib/nucleus-identity.service.d.ts +63 -63
  31. package/lib/nucleus-token-interceptor.service.d.ts +19 -19
  32. package/lib/utils/angular-requestor.d.ts +11 -11
  33. package/lib/utils/authorization-service-configuration.d.ts +12 -12
  34. package/lib/utils/location.service.d.ts +25 -25
  35. package/lib/utils/nucleus-authorization-notifier.d.ts +9 -9
  36. package/lib/utils/oidc-configuration.service.d.ts +23 -23
  37. package/lib/utils/secrets-store.d.ts +33 -33
  38. package/lib/utils/token-client.d.ts +23 -23
  39. package/package.json +29 -33
  40. package/esm2020/kolektor-nucleus-identity.mjs +0 -5
  41. package/esm2020/lib/models/client-registration.mjs +0 -8
  42. package/esm2020/lib/models/device-code.mjs +0 -19
  43. package/esm2020/lib/models/identity.mjs +0 -49
  44. package/esm2020/lib/models/otp.mjs +0 -11
  45. package/esm2020/lib/models/service-principal.mjs +0 -16
  46. package/esm2020/lib/nucleus-identity-config.mjs +0 -8
  47. package/esm2020/lib/nucleus-identity.module.mjs +0 -28
  48. package/esm2020/lib/nucleus-identity.service.mjs +0 -341
  49. package/esm2020/lib/nucleus-token-interceptor.service.mjs +0 -64
  50. package/esm2020/lib/utils/angular-requestor.mjs +0 -38
  51. package/esm2020/lib/utils/authorization-service-configuration.mjs +0 -23
  52. package/esm2020/lib/utils/location.service.mjs +0 -72
  53. package/esm2020/lib/utils/nucleus-authorization-notifier.mjs +0 -13
  54. package/esm2020/lib/utils/nucleus-crypto.mjs +0 -68
  55. package/esm2020/lib/utils/oidc-configuration.service.mjs +0 -90
  56. package/esm2020/lib/utils/secrets-store.mjs +0 -120
  57. package/esm2020/lib/utils/token-client.mjs +0 -140
  58. package/esm2020/public-api.mjs +0 -11
  59. package/fesm2015/kolektor-nucleus-identity.mjs +0 -1139
  60. package/fesm2015/kolektor-nucleus-identity.mjs.map +0 -1
  61. package/fesm2020/kolektor-nucleus-identity.mjs.map +0 -1
  62. package/lib/utils/nucleus-crypto.d.ts +0 -9
  63. package/public-api.d.ts +0 -7
@@ -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: codeVerifier ? { code_verifier: codeVerifier } : undefined,
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: '',
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: '',
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: '',
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TokenClient, deps: [{ token: i1.AngularRequestor }, { token: i2.OidcConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
132
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TokenClient, providedIn: 'root' }); }
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy9udWNsZXVzLWlkZW50aXR5L3NyYy9saWIvdXRpbHMvdG9rZW4tY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQiw2QkFBNkIsRUFDN0Isd0JBQXdCLEVBSXhCLFlBQVksR0FFYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBa0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsMEJBQTBCLEdBRTNCLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFLdkMsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDVSxTQUEyQixFQUMzQixNQUFnQztRQURoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUEwQjtRQUV4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUtNLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsV0FBbUIsRUFDbkIsSUFBWSxFQUNaLFlBQXFCO1FBRXJCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FB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bkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFcEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFjLE1BQU0sQ0FBQztRQUU5QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFrQztZQUN6RSxHQUFHLEVBQUUsTUFBTSxDQUFDLDJCQUEyQjtZQUN2QyxNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRTtZQUNoRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUVILElBQUssUUFBMkIsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3BELE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBMEIsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDTCxNQUFNLElBQUksWUFBWSxDQUFFLFFBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDOytHQTVKVSxXQUFXO21IQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcEF1dGhFcnJvcixcbiAgQmFzZVRva2VuUmVxdWVzdEhhbmRsZXIsXG4gIEJhc2ljUXVlcnlTdHJpbmdVdGlscyxcbiAgR1JBTlRfVFlQRV9BVVRIT1JJWkFUSU9OX0NPREUsXG4gIEdSQU5UX1RZUEVfUkVGUkVTSF9UT0tFTixcbiAgUXVlcnlTdHJpbmdVdGlscyxcbiAgU3RyaW5nTWFwLFxuICBUb2tlbkVycm9ySnNvbixcbiAgVG9rZW5SZXF1ZXN0LFxuICBUb2tlblJlcXVlc3RIYW5kbGVyLFxufSBmcm9tICdAb3BlbmlkL2FwcGF1dGgnO1xuaW1wb3J0IHsgT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9vaWRjLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyUmVxdWVzdG9yIH0gZnJvbSAnLi9hbmd1bGFyLXJlcXVlc3Rvcic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VDb2RlLCBEZXZpY2VDb2RlSnNvbiB9IGZyb20gJy4uL21vZGVscy9kZXZpY2UtY29kZSc7XG5pbXBvcnQge1xuICBDbGllbnRSZWdpc3RyYXRpb25SZXNwb25zZSxcbiAgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2VKc29uLFxufSBmcm9tICcuLi9tb2RlbHMvY2xpZW50LXJlZ2lzdHJhdGlvbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVxdWVzdG9yOiBBbmd1bGFyUmVxdWVzdG9yLFxuICAgIHByaXZhdGUgY29uZmlnOiBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5fdG9rZW5IYW5kbGVyID0gbmV3IEJhc2VUb2tlblJlcXVlc3RIYW5kbGVyKHJlcXVlc3Rvcik7XG4gICAgdGhpcy5fdXRpbHMgPSBuZXcgQmFzaWNRdWVyeVN0cmluZ1V0aWxzKCk7XG4gIH1cblxuICBwcml2YXRlIF90b2tlbkhhbmRsZXI6IFRva2VuUmVxdWVzdEhhbmRsZXI7XG4gIHByaXZhdGUgX3V0aWxzOiBRdWVyeVN0cmluZ1V0aWxzO1xuXG4gIHB1YmxpYyBhc3luYyBnZXRCeUF1dGhvcml6YXRpb25Db2RlKFxuICAgIHJlZGlyZWN0VXJsOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIGNvZGVWZXJpZmllcj86IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSByZWRpcmVjdFVybDtcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgZ3JhbnRfdHlwZTogR1JBTlRfVFlQRV9BVVRIT1JJWkFUSU9OX0NPREUsXG4gICAgICBjb2RlLFxuICAgICAgZXh0cmFzOiBjb2RlVmVyaWZpZXIgPyB7IGNvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllciB9IDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl90b2tlbkhhbmRsZXIucGVyZm9ybVRva2VuUmVxdWVzdChjb25maWcsIHJlcSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QnlSZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSB0aGlzLmNvbmZpZy5yZWRpcmVjdFVybDtcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgZ3JhbnRfdHlwZTogR1JBTlRfVFlQRV9SRUZSRVNIX1RPS0VOLFxuICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl90b2tlbkhhbmRsZXIucGVyZm9ybVRva2VuUmVxdWVzdChjb25maWcsIHJlcSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QnlDbGllbnRDcmVkZW50aWFscyhcbiAgICBjbGllbnRJZDogc3RyaW5nLFxuICAgIGNsaWVudFNlY3JldDogc3RyaW5nLFxuICAgIHNjb3BlOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0Q29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHJlcSA9IG5ldyBUb2tlblJlcXVlc3Qoe1xuICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0X3VyaTogJycsXG4gICAgICBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgIGV4dHJhczoge1xuICAgICAgICBjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fdG9rZW5IYW5kbGVyLnBlcmZvcm1Ub2tlblJlcXVlc3QoY29uZmlnLCByZXEpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEJ5U2VjcmV0KFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgc2VjcmV0OiBzdHJpbmcsXG4gICAgYXNzZXJ0aW9uVG9rZW46IHN0cmluZyxcbiAgICBzY29wZTogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6ICcnLFxuICAgICAgZ3JhbnRfdHlwZTogJ3Vybjprb2xla3RvcjpudWNsZXVzOnNlY3JldCcsXG4gICAgICBleHRyYXM6IHtcbiAgICAgICAgc2VjcmV0X3Byb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgc2VjcmV0X3ZhbHVlOiBzZWNyZXQsXG4gICAgICAgIGNsaWVudF9hc3NlcnRpb25fdHlwZTpcbiAgICAgICAgICAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmNsaWVudC1hc3NlcnRpb24tdHlwZTpqd3QtYmVhcmVyJyxcbiAgICAgICAgY2xpZW50X2Fzc2VydGlvbjogYXNzZXJ0aW9uVG9rZW4sXG4gICAgICAgIHNjb3BlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl90b2tlbkhhbmRsZXIucGVyZm9ybVRva2VuUmVxdWVzdChjb25maWcsIHJlcSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QnlEZXZpY2VDb2RlKGRldmljZUNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6ICcnLFxuICAgICAgZ3JhbnRfdHlwZTogJ3VybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlJyxcbiAgICAgIGV4dHJhczoge1xuICAgICAgICBkZXZpY2VfY29kZTogZGV2aWNlQ29kZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3Rva2VuSGFuZGxlci5wZXJmb3JtVG9rZW5SZXF1ZXN0KGNvbmZpZywgcmVxKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlclNlcnZpY2VQcmluY2lwYWwodG9rZW46IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0b3IueGhyPFxuICAgICAgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2VKc29uIHwgVG9rZW5FcnJvckpzb25cbiAgICA+KHtcbiAgICAgIHVybDogY29uZmlnLnJlZ2lzdHJhdGlvbkVuZHBvaW50LFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgIH0sXG4gICAgICAvLyBkYXRhOiB0aGlzLl91dGlscy5zdHJpbmdpZnkobWFwKVxuICAgIH0pO1xuXG4gICAgaWYgKChyZXNwb25zZSBhcyBUb2tlbkVycm9ySnNvbikuZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBDbGllbnRSZWdpc3RyYXRpb25SZXNwb25zZShcbiAgICAgICAgcmVzcG9uc2UgYXMgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2VKc29uXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgQXBwQXV0aEVycm9yKChyZXNwb25zZSBhcyBUb2tlbkVycm9ySnNvbikuZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWdpc3RyYXRpb25Db2RlKGV4aXN0aW5nU2VydmljZVByaW5jaXBhbElkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGN1c3RvbV9hY3Rpb246ICdzcF9yZWdpc3RlcicsXG4gICAgICBzZXJ2aWNlX3ByaW5jaXBhbF9pZDogZXhpc3RpbmdTZXJ2aWNlUHJpbmNpcGFsSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmdldERldmljZUNvZGVJbnRlcm5hbChwYXJhbXMgYXMgU3RyaW5nTWFwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VDb2RlKHNjb3BlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBzY29wZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldERldmljZUNvZGVJbnRlcm5hbChwYXJhbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VDb2RlSW50ZXJuYWwocGFyYW1zOiBTdHJpbmdNYXApIHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XG5cbiAgICBwYXJhbXNbJ2NsaWVudF9pZCddID0gdGhpcy5jb25maWcuY2xpZW50SWQ7XG4gICAgY29uc3QgbWFwOiBTdHJpbmdNYXAgPSBwYXJhbXM7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdG9yLnhocjxEZXZpY2VDb2RlSnNvbiB8IFRva2VuRXJyb3JKc29uPih7XG4gICAgICB1cmw6IGNvbmZpZy5kZXZpY2VBdXRob3JpemF0aW9uRW5kcG9pbnQsXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgZGF0YTogdGhpcy5fdXRpbHMuc3RyaW5naWZ5KG1hcCksXG4gICAgfSk7XG5cbiAgICBpZiAoKHJlc3BvbnNlIGFzIFRva2VuRXJyb3JKc29uKS5lcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IERldmljZUNvZGUocmVzcG9uc2UgYXMgRGV2aWNlQ29kZUpzb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgQXBwQXV0aEVycm9yKChyZXNwb25zZSBhcyBUb2tlbkVycm9ySnNvbikuZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19