@kolektor/nucleus-identity 0.0.8-pre.5672 → 0.0.9-pre.5707

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 (32) 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 +343 -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 +100 -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} +132 -133
  21. package/fesm2015/kolektor-nucleus-identity.mjs.map +1 -0
  22. package/fesm2020/kolektor-nucleus-identity.mjs +1042 -0
  23. package/fesm2020/kolektor-nucleus-identity.mjs.map +1 -0
  24. package/package.json +22 -9
  25. package/bundles/kolektor-nucleus-identity.umd.js +0 -1910
  26. package/bundles/kolektor-nucleus-identity.umd.js.map +0 -1
  27. package/esm2015/lib/nucleus-identity.service.js +0 -385
  28. package/esm2015/lib/nucleus-token-interceptor.service.js +0 -66
  29. package/esm2015/lib/utils/oidc-configuration.service.js +0 -95
  30. package/esm2015/lib/utils/secrets-store.js +0 -113
  31. package/esm2015/lib/utils/token-client.js +0 -159
  32. 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,100 @@
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._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login fith existing refresh tokens will fail
10
+ this._servicePrincipalKey = `Nucleus.Identity.${clientId}.SvcP`;
11
+ }
12
+ removeServicePrincipal() {
13
+ this._servicePrincipal = null;
14
+ return this.clear(this._servicePrincipalKey);
15
+ }
16
+ async setServicePrincipal(servicePrincipal) {
17
+ this._servicePrincipal = servicePrincipal;
18
+ await this.save(this._servicePrincipalKey, servicePrincipal);
19
+ }
20
+ async getServicePrincipal() {
21
+ if (!this._servicePrincipal) {
22
+ this._servicePrincipal = await this.load(this._servicePrincipalKey);
23
+ }
24
+ return this._servicePrincipal;
25
+ }
26
+ setToken(token, id = null) {
27
+ return this.setTokenInternal(token, true, id);
28
+ }
29
+ getIdentity(id = null) {
30
+ const key = this.getTokenKey(id);
31
+ return this._identities[key];
32
+ }
33
+ async getToken(id = null) {
34
+ const key = this.getTokenKey(id);
35
+ // if token is not there or it is invalid we check storage again before returning
36
+ if (!this._tokens[key] || !this._tokens[key].isValid()) {
37
+ await this.reloadTokenFromStorage(id);
38
+ }
39
+ return this._tokens[key];
40
+ }
41
+ removeToken(id = null) {
42
+ const key = this.getTokenKey(id);
43
+ delete this._tokens[key];
44
+ delete this._identities[key];
45
+ return this.clear(key);
46
+ }
47
+ async reloadTokenFromStorage(id) {
48
+ const key = this.getTokenKey(id);
49
+ const storedToken = await this.load(key);
50
+ if (storedToken) {
51
+ const res = new TokenResponse(storedToken);
52
+ if (res?.accessToken || res?.idToken) {
53
+ await this.setTokenInternal(res, false, id);
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ async setTokenInternal(token, save, id = null) {
59
+ const key = this.getTokenKey(id);
60
+ if (token == null) {
61
+ await this.removeToken(id);
62
+ }
63
+ else {
64
+ this._tokens[key] = token;
65
+ this._identities[key] = Identity.createFromResponse(token);
66
+ if (save) {
67
+ try {
68
+ await this.save(key, token.toJson());
69
+ }
70
+ catch (e) {
71
+ console.warn('Nucleus.Identity: Could not save to SecureStorage.');
72
+ }
73
+ }
74
+ }
75
+ }
76
+ getTokenKey(id = null) {
77
+ return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;
78
+ }
79
+ clear(key) {
80
+ return SecureStoragePlugin.remove({ key });
81
+ }
82
+ save(key, value) {
83
+ return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });
84
+ }
85
+ async load(key) {
86
+ try {
87
+ const x = await SecureStoragePlugin.get({ key });
88
+ if (x?.value) {
89
+ return JSON.parse(x.value);
90
+ }
91
+ else {
92
+ return null;
93
+ }
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9zZWNyZXRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBWSxRQUFnQjtRQU1wQixZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUErQixFQUFFLENBQUM7UUFObkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLHFFQUFxRTtRQUNuSSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLFFBQVEsT0FBTyxDQUFDO0lBQ2xFLENBQUM7SUFRTSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBa0M7UUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQzFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFN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QUNGO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhLElBQUk7UUFDbkMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDbkYsQ0FBQztJQUVPLEtBQUssQ0FBQyxHQUFXO1FBQ3ZCLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sSUFBSSxDQUFJLEdBQVcsRUFBRSxLQUFRO1FBQ25DLE9BQU8sbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUksQ0FBSSxHQUFXO1FBQy9CLElBQUk7WUFDRixNQUFNLENBQUMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO2dCQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFNLENBQUM7YUFDakM7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQUMsTUFBTTtZQUNOLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ2NhcGFjaXRvci1zZWN1cmUtc3RvcmFnZS1wbHVnaW4nO1xyXG5pbXBvcnQgeyBUb2tlblJlc3BvbnNlLCBUb2tlblJlc3BvbnNlSnNvbiB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcbmltcG9ydCB7IElkZW50aXR5IH0gZnJvbSAnLi4vbW9kZWxzL2lkZW50aXR5JztcclxuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJy4uL21vZGVscy9zZXJ2aWNlLXByaW5jaXBhbCc7XHJcbmltcG9ydCB7IFNlY3VyZVN0b3JhZ2VQbHVnaW4gfSBmcm9tICdjYXBhY2l0b3Itc2VjdXJlLXN0b3JhZ2UtcGx1Z2luJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWNyZXRzU3RvcmUge1xyXG4gIGNvbnN0cnVjdG9yKGNsaWVudElkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeCA9IGBOdWNsZXVzLklkZW50aXR5LiR7Y2xpZW50SWR9YDsgLy8gZG8gbm90IGNoYW5nZSB0aGlzIG9yIGxvZ2luIGZpdGggZXhpc3RpbmcgcmVmcmVzaCB0b2tlbnMgd2lsbCBmYWlsXHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5ID0gYE51Y2xldXMuSWRlbnRpdHkuJHtjbGllbnRJZH0uU3ZjUGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b2tlblN0b3JhZ2VLZXlQcmVmaXg6IHN0cmluZztcclxuICBwcml2YXRlIF90b2tlbnM6IHsgW2lkOiBzdHJpbmddOiBUb2tlblJlc3BvbnNlIH0gPSB7fTtcclxuICBwcml2YXRlIF9pZGVudGl0aWVzOiB7IFtpZDogc3RyaW5nXTogSWRlbnRpdHkgfSA9IHt9O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxLZXk7XHJcbiAgcHJpdmF0ZSBfc2VydmljZVByaW5jaXBhbDogU2VydmljZVByaW5jaXBhbDtcclxuXHJcbiAgcHVibGljIHJlbW92ZVNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLmNsZWFyKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFNlcnZpY2VQcmluY2lwYWwoc2VydmljZVByaW5jaXBhbDogU2VydmljZVByaW5jaXBhbCkge1xyXG4gICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IHNlcnZpY2VQcmluY2lwYWw7XHJcbiAgICBhd2FpdCB0aGlzLnNhdmUodGhpcy5fc2VydmljZVByaW5jaXBhbEtleSwgc2VydmljZVByaW5jaXBhbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGlmICghdGhpcy5fc2VydmljZVByaW5jaXBhbCkge1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gYXdhaXQgdGhpcy5sb2FkPFNlcnZpY2VQcmluY2lwYWw+KHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VQcmluY2lwYWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IFRva2VuUmVzcG9uc2UsIGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRUb2tlbkludGVybmFsKHRva2VuLCB0cnVlLCBpZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SWRlbnRpdHkoaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkZW50aXRpZXNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUb2tlbihpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcblxyXG4gICAgLy8gaWYgdG9rZW4gaXMgbm90IHRoZXJlIG9yIGl0IGlzIGludmFsaWQgd2UgY2hlY2sgc3RvcmFnZSBhZ2FpbiBiZWZvcmUgcmV0dXJuaW5nXHJcbiAgICBpZiAoIXRoaXMuX3Rva2Vuc1trZXldIHx8ICF0aGlzLl90b2tlbnNba2V5XS5pc1ZhbGlkKCkpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZWxvYWRUb2tlbkZyb21TdG9yYWdlKGlkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl90b2tlbnNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVUb2tlbihpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICBkZWxldGUgdGhpcy5fdG9rZW5zW2tleV07XHJcbiAgICBkZWxldGUgdGhpcy5faWRlbnRpdGllc1trZXldO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xlYXIoa2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVsb2FkVG9rZW5Gcm9tU3RvcmFnZShpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGNvbnN0IHN0b3JlZFRva2VuID0gYXdhaXQgdGhpcy5sb2FkPFRva2VuUmVzcG9uc2VKc29uPihrZXkpO1xyXG4gICAgaWYgKHN0b3JlZFRva2VuKSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBUb2tlblJlc3BvbnNlKHN0b3JlZFRva2VuKTtcclxuICAgICAgaWYgKHJlcz8uYWNjZXNzVG9rZW4gfHwgcmVzPy5pZFRva2VuKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRUb2tlbkludGVybmFsKHJlcywgZmFsc2UsIGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldFRva2VuSW50ZXJuYWwodG9rZW46IFRva2VuUmVzcG9uc2UsIHNhdmU6IGJvb2xlYW4sIGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGlmICh0b2tlbiA9PSBudWxsKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlVG9rZW4oaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdG9rZW5zW2tleV0gPSB0b2tlbjtcclxuICAgICAgdGhpcy5faWRlbnRpdGllc1trZXldID0gSWRlbnRpdHkuY3JlYXRlRnJvbVJlc3BvbnNlKHRva2VuKTtcclxuICAgICAgaWYgKHNhdmUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zYXZlKGtleSwgdG9rZW4udG9Kc29uKCkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogQ291bGQgbm90IHNhdmUgdG8gU2VjdXJlU3RvcmFnZS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VG9rZW5LZXkoaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiBpZCA/IGAke3RoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeH0uJHtpZH1gIDogdGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhcihrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIFNlY3VyZVN0b3JhZ2VQbHVnaW4ucmVtb3ZlKHsga2V5IH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8eyB2YWx1ZTogYm9vbGVhbiB9PiB7XHJcbiAgICByZXR1cm4gU2VjdXJlU3RvcmFnZVBsdWdpbi5zZXQoeyBrZXksIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWQ8VD4oa2V5OiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHggPSBhd2FpdCBTZWN1cmVTdG9yYWdlUGx1Z2luLmdldCh7IGtleSB9KTtcclxuICAgICAgaWYgKHg/LnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoeC52YWx1ZSkgYXMgVDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -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=