oidc-auth-client 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +240 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/src/auth/Client.d.ts +135 -0
- package/dist/src/auth/Client.d.ts.map +1 -0
- package/dist/src/auth/Client.js +734 -0
- package/dist/src/auth/Client.js.map +1 -0
- package/dist/src/auth/Events.d.ts +51 -0
- package/dist/src/auth/Events.d.ts.map +1 -0
- package/dist/src/auth/Events.js +139 -0
- package/dist/src/auth/Events.js.map +1 -0
- package/dist/src/auth/Session.d.ts +132 -0
- package/dist/src/auth/Session.d.ts.map +1 -0
- package/dist/src/auth/Session.js +355 -0
- package/dist/src/auth/Session.js.map +1 -0
- package/dist/src/auth/Settings.d.ts +178 -0
- package/dist/src/auth/Settings.d.ts.map +1 -0
- package/dist/src/auth/Settings.js +210 -0
- package/dist/src/auth/Settings.js.map +1 -0
- package/dist/src/crypto/Crypto.d.ts +14 -0
- package/dist/src/crypto/Crypto.d.ts.map +1 -0
- package/dist/src/crypto/Crypto.js +107 -0
- package/dist/src/crypto/Crypto.js.map +1 -0
- package/dist/src/models/User.d.ts +31 -0
- package/dist/src/models/User.d.ts.map +1 -0
- package/dist/src/models/User.js +57 -0
- package/dist/src/models/User.js.map +1 -0
- package/dist/src/navigation/Navigator.d.ts +106 -0
- package/dist/src/navigation/Navigator.d.ts.map +1 -0
- package/dist/src/navigation/Navigator.js +441 -0
- package/dist/src/navigation/Navigator.js.map +1 -0
- package/dist/src/protocol/Requests.d.ts +50 -0
- package/dist/src/protocol/Requests.d.ts.map +1 -0
- package/dist/src/protocol/Requests.js +109 -0
- package/dist/src/protocol/Requests.js.map +1 -0
- package/dist/src/protocol/ResponseValidator.d.ts +39 -0
- package/dist/src/protocol/ResponseValidator.d.ts.map +1 -0
- package/dist/src/protocol/ResponseValidator.js +366 -0
- package/dist/src/protocol/ResponseValidator.js.map +1 -0
- package/dist/src/protocol/Responses.d.ts +44 -0
- package/dist/src/protocol/Responses.d.ts.map +1 -0
- package/dist/src/protocol/Responses.js +77 -0
- package/dist/src/protocol/Responses.js.map +1 -0
- package/dist/src/protocol/TokenService.d.ts +38 -0
- package/dist/src/protocol/TokenService.d.ts.map +1 -0
- package/dist/src/protocol/TokenService.js +259 -0
- package/dist/src/protocol/TokenService.js.map +1 -0
- package/dist/src/services/Http.d.ts +55 -0
- package/dist/src/services/Http.d.ts.map +1 -0
- package/dist/src/services/Http.js +276 -0
- package/dist/src/services/Http.js.map +1 -0
- package/dist/src/services/Timer.d.ts +18 -0
- package/dist/src/services/Timer.d.ts.map +1 -0
- package/dist/src/services/Timer.js +56 -0
- package/dist/src/services/Timer.js.map +1 -0
- package/dist/src/storage/Storage.d.ts +23 -0
- package/dist/src/storage/Storage.d.ts.map +1 -0
- package/dist/src/storage/Storage.js +65 -0
- package/dist/src/storage/Storage.js.map +1 -0
- package/dist/src/types/crypto.d.ts +32 -0
- package/dist/src/types/crypto.d.ts.map +1 -0
- package/dist/src/types/crypto.js +3 -0
- package/dist/src/types/crypto.js.map +1 -0
- package/dist/src/types/navigator.d.ts +33 -0
- package/dist/src/types/navigator.d.ts.map +1 -0
- package/dist/src/types/navigator.js +3 -0
- package/dist/src/types/navigator.js.map +1 -0
- package/dist/src/types/storage.d.ts +7 -0
- package/dist/src/types/storage.d.ts.map +1 -0
- package/dist/src/types/storage.js +3 -0
- package/dist/src/types/storage.js.map +1 -0
- package/dist/src/types/user.d.ts +6 -0
- package/dist/src/types/user.d.ts.map +1 -0
- package/dist/src/types/user.js +3 -0
- package/dist/src/types/user.js.map +1 -0
- package/dist/src/utils/Event.d.ts +10 -0
- package/dist/src/utils/Event.d.ts.map +1 -0
- package/dist/src/utils/Event.js +24 -0
- package/dist/src/utils/Event.js.map +1 -0
- package/dist/src/utils/Global.d.ts +14 -0
- package/dist/src/utils/Global.d.ts.map +1 -0
- package/dist/src/utils/Global.js +50 -0
- package/dist/src/utils/Global.js.map +1 -0
- package/dist/src/utils/Log.d.ts +30 -0
- package/dist/src/utils/Log.d.ts.map +1 -0
- package/dist/src/utils/Log.js +68 -0
- package/dist/src/utils/Log.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { MetadataService } from '../services/Http.js';
|
|
2
|
+
import { UserInfoService, TokenClient } from './TokenService.js';
|
|
3
|
+
import type { JoseUtilType } from '../crypto/Crypto.js';
|
|
4
|
+
import type { SigninResponse } from './Responses.js';
|
|
5
|
+
import type { SignoutResponse } from './Responses.js';
|
|
6
|
+
import type { SigninState, State } from '../auth/Session.js';
|
|
7
|
+
export interface ValidatorSettings {
|
|
8
|
+
authority?: string;
|
|
9
|
+
client_id?: string;
|
|
10
|
+
clockSkew?: number;
|
|
11
|
+
loadUserInfo?: boolean;
|
|
12
|
+
mergeClaims?: boolean;
|
|
13
|
+
filterProtocolClaims?: boolean;
|
|
14
|
+
getEpochTime(): Promise<number>;
|
|
15
|
+
}
|
|
16
|
+
export declare class ResponseValidator {
|
|
17
|
+
private _settings;
|
|
18
|
+
private _metadataService;
|
|
19
|
+
private _userInfoService;
|
|
20
|
+
private _joseUtil;
|
|
21
|
+
private _tokenClient;
|
|
22
|
+
constructor(settings: ValidatorSettings, MetadataServiceCtor?: typeof MetadataService, UserInfoServiceCtor?: typeof UserInfoService, joseUtil?: JoseUtilType, TokenClientCtor?: typeof TokenClient);
|
|
23
|
+
validateSigninResponse(state: SigninState, response: SigninResponse): Promise<SigninResponse>;
|
|
24
|
+
validateSignoutResponse(state: State, response: SignoutResponse): Promise<SignoutResponse>;
|
|
25
|
+
private _processSigninParams;
|
|
26
|
+
private _processClaims;
|
|
27
|
+
private _mergeClaims;
|
|
28
|
+
private _filterProtocolClaims;
|
|
29
|
+
private _validateTokens;
|
|
30
|
+
private _processCode;
|
|
31
|
+
private _validateIdTokenAttributes;
|
|
32
|
+
private _validateIdTokenAndAccessToken;
|
|
33
|
+
private _getSigningKeyForJwt;
|
|
34
|
+
private _getSigningKeyForJwtWithSingleRetry;
|
|
35
|
+
private _validateIdToken;
|
|
36
|
+
private _filterByAlg;
|
|
37
|
+
private _validateAccessToken;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ResponseValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResponseValidator.d.ts","sourceRoot":"","sources":["../../../src/protocol/ResponseValidator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI7D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,YAAY,CAAc;gBAGhC,QAAQ,EAAE,iBAAiB,EAC3B,mBAAmB,GAAE,OAAO,eAAiC,EAC7D,mBAAmB,GAAE,OAAO,eAAiC,EAC7D,QAAQ,GAAE,YAAuB,EACjC,eAAe,GAAE,OAAO,WAAyB;IAUnD,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAc7F,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAoB1F,OAAO,CAAC,oBAAoB;IA+D5B,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,0BAA0B;IAuBlC,OAAO,CAAC,8BAA8B;IAItC,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,mCAAmC;IAU3C,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,YAAY;YAYN,oBAAoB;CA+CnC"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
|
|
2
|
+
import { Log } from '../utils/Log.js';
|
|
3
|
+
import { MetadataService } from '../services/Http.js';
|
|
4
|
+
import { UserInfoService, TokenClient } from './TokenService.js';
|
|
5
|
+
import { ErrorResponse } from './Responses.js';
|
|
6
|
+
import { JoseUtil } from '../crypto/Crypto.js';
|
|
7
|
+
const ProtocolClaims = ['nonce', 'at_hash', 'iat', 'nbf', 'exp', 'aud', 'iss', 'c_hash'];
|
|
8
|
+
export class ResponseValidator {
|
|
9
|
+
constructor(settings, MetadataServiceCtor = MetadataService, UserInfoServiceCtor = UserInfoService, joseUtil = JoseUtil, TokenClientCtor = TokenClient) {
|
|
10
|
+
if (!settings) {
|
|
11
|
+
Log.error('ResponseValidator.ctor: No settings passed to ResponseValidator');
|
|
12
|
+
throw new Error('settings');
|
|
13
|
+
}
|
|
14
|
+
this._settings = settings;
|
|
15
|
+
this._metadataService = new MetadataServiceCtor(this._settings);
|
|
16
|
+
this._userInfoService = new UserInfoServiceCtor(this._settings);
|
|
17
|
+
this._joseUtil = joseUtil;
|
|
18
|
+
this._tokenClient = new TokenClientCtor(this._settings);
|
|
19
|
+
}
|
|
20
|
+
validateSigninResponse(state, response) {
|
|
21
|
+
Log.debug('ResponseValidator.validateSigninResponse');
|
|
22
|
+
return this._processSigninParams(state, response).then(response => {
|
|
23
|
+
Log.debug('ResponseValidator.validateSigninResponse: state processed');
|
|
24
|
+
return this._validateTokens(state, response).then(response => {
|
|
25
|
+
Log.debug('ResponseValidator.validateSigninResponse: tokens validated');
|
|
26
|
+
return this._processClaims(state, response).then(response => {
|
|
27
|
+
Log.debug('ResponseValidator.validateSigninResponse: claims processed');
|
|
28
|
+
return response;
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
validateSignoutResponse(state, response) {
|
|
34
|
+
if (state.id !== response.state) {
|
|
35
|
+
Log.error('ResponseValidator.validateSignoutResponse: State does not match');
|
|
36
|
+
return Promise.reject(new Error('State does not match'));
|
|
37
|
+
}
|
|
38
|
+
Log.debug('ResponseValidator.validateSignoutResponse: state validated');
|
|
39
|
+
response.state = state.data;
|
|
40
|
+
if (response.error) {
|
|
41
|
+
Log.warn('ResponseValidator.validateSignoutResponse: Response was error', response.error);
|
|
42
|
+
return Promise.reject(new ErrorResponse({
|
|
43
|
+
error: response.error,
|
|
44
|
+
error_description: response.error_description,
|
|
45
|
+
error_uri: response.error_uri,
|
|
46
|
+
state: typeof response.state === 'string' ? response.state : undefined,
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
return Promise.resolve(response);
|
|
50
|
+
}
|
|
51
|
+
_processSigninParams(state, response) {
|
|
52
|
+
if (state.id !== response.state) {
|
|
53
|
+
Log.error('ResponseValidator._processSigninParams: State does not match');
|
|
54
|
+
return Promise.reject(new Error('State does not match'));
|
|
55
|
+
}
|
|
56
|
+
if (!state.client_id) {
|
|
57
|
+
Log.error('ResponseValidator._processSigninParams: No client_id on state');
|
|
58
|
+
return Promise.reject(new Error('No client_id on state'));
|
|
59
|
+
}
|
|
60
|
+
if (!state.authority) {
|
|
61
|
+
Log.error('ResponseValidator._processSigninParams: No authority on state');
|
|
62
|
+
return Promise.reject(new Error('No authority on state'));
|
|
63
|
+
}
|
|
64
|
+
if (!this._settings.authority) {
|
|
65
|
+
this._settings.authority = state.authority;
|
|
66
|
+
}
|
|
67
|
+
else if (this._settings.authority !== state.authority) {
|
|
68
|
+
Log.error('ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state');
|
|
69
|
+
return Promise.reject(new Error('authority mismatch on settings vs. signin state'));
|
|
70
|
+
}
|
|
71
|
+
if (!this._settings.client_id) {
|
|
72
|
+
this._settings.client_id = state.client_id;
|
|
73
|
+
}
|
|
74
|
+
else if (this._settings.client_id !== state.client_id) {
|
|
75
|
+
Log.error('ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state');
|
|
76
|
+
return Promise.reject(new Error('client_id mismatch on settings vs. signin state'));
|
|
77
|
+
}
|
|
78
|
+
Log.debug('ResponseValidator._processSigninParams: state validated');
|
|
79
|
+
response.state = state.data;
|
|
80
|
+
if (response.error) {
|
|
81
|
+
Log.warn('ResponseValidator._processSigninParams: Response was error', response.error);
|
|
82
|
+
return Promise.reject(new ErrorResponse({
|
|
83
|
+
error: response.error,
|
|
84
|
+
error_description: response.error_description,
|
|
85
|
+
error_uri: response.error_uri,
|
|
86
|
+
state: typeof response.state === 'string' ? response.state : undefined,
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
if (state.nonce && !response.id_token) {
|
|
90
|
+
Log.error('ResponseValidator._processSigninParams: Expecting id_token in response');
|
|
91
|
+
return Promise.reject(new Error('No id_token in response'));
|
|
92
|
+
}
|
|
93
|
+
if (!state.nonce && response.id_token) {
|
|
94
|
+
Log.error('ResponseValidator._processSigninParams: Not expecting id_token in response');
|
|
95
|
+
return Promise.reject(new Error('Unexpected id_token in response'));
|
|
96
|
+
}
|
|
97
|
+
if (state.code_verifier && !response.code) {
|
|
98
|
+
Log.error('ResponseValidator._processSigninParams: Expecting code in response');
|
|
99
|
+
return Promise.reject(new Error('No code in response'));
|
|
100
|
+
}
|
|
101
|
+
if (!state.code_verifier && response.code) {
|
|
102
|
+
Log.error('ResponseValidator._processSigninParams: Not expecting code in response');
|
|
103
|
+
return Promise.reject(new Error('Unexpected code in response'));
|
|
104
|
+
}
|
|
105
|
+
if (!response.scope) {
|
|
106
|
+
response.scope = state.scope;
|
|
107
|
+
}
|
|
108
|
+
return Promise.resolve(response);
|
|
109
|
+
}
|
|
110
|
+
_processClaims(state, response) {
|
|
111
|
+
if (response.isOpenIdConnect) {
|
|
112
|
+
Log.debug('ResponseValidator._processClaims: response is OIDC, processing claims');
|
|
113
|
+
response.profile = this._filterProtocolClaims(response.profile);
|
|
114
|
+
if (state.skipUserInfo !== true && this._settings.loadUserInfo && response.access_token) {
|
|
115
|
+
Log.debug('ResponseValidator._processClaims: loading user info');
|
|
116
|
+
return this._userInfoService.getClaims(response.access_token).then(claims => {
|
|
117
|
+
Log.debug('ResponseValidator._processClaims: user info claims received from user info endpoint');
|
|
118
|
+
if (claims.sub !== response.profile.sub) {
|
|
119
|
+
Log.error('ResponseValidator._processClaims: sub from user info endpoint does not match sub in id_token');
|
|
120
|
+
return Promise.reject(new Error('sub from user info endpoint does not match sub in id_token'));
|
|
121
|
+
}
|
|
122
|
+
response.profile = this._mergeClaims(response.profile, claims);
|
|
123
|
+
Log.debug('ResponseValidator._processClaims: user info claims received, updated profile:', response.profile);
|
|
124
|
+
return response;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
Log.debug('ResponseValidator._processClaims: not loading user info');
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
Log.debug('ResponseValidator._processClaims: response is not OIDC, not processing claims');
|
|
131
|
+
}
|
|
132
|
+
return Promise.resolve(response);
|
|
133
|
+
}
|
|
134
|
+
_mergeClaims(claims1, claims2) {
|
|
135
|
+
const result = Object.assign({}, claims1);
|
|
136
|
+
for (const name in claims2) {
|
|
137
|
+
let values = claims2[name];
|
|
138
|
+
if (!Array.isArray(values))
|
|
139
|
+
values = [values];
|
|
140
|
+
for (const value of values) {
|
|
141
|
+
if (!result[name]) {
|
|
142
|
+
result[name] = value;
|
|
143
|
+
}
|
|
144
|
+
else if (Array.isArray(result[name])) {
|
|
145
|
+
if (!result[name].includes(value)) {
|
|
146
|
+
result[name].push(value);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else if (result[name] !== value) {
|
|
150
|
+
if (typeof value === 'object' && value !== null && this._settings.mergeClaims) {
|
|
151
|
+
result[name] = this._mergeClaims(result[name], value);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
result[name] = [result[name], value];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
_filterProtocolClaims(claims) {
|
|
162
|
+
Log.debug('ResponseValidator._filterProtocolClaims, incoming claims:', claims);
|
|
163
|
+
if (!claims)
|
|
164
|
+
return claims;
|
|
165
|
+
const result = Object.assign({}, claims);
|
|
166
|
+
if (this._settings.filterProtocolClaims) {
|
|
167
|
+
ProtocolClaims.forEach(type => delete result[type]);
|
|
168
|
+
Log.debug('ResponseValidator._filterProtocolClaims: protocol claims filtered', result);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
Log.debug('ResponseValidator._filterProtocolClaims: protocol claims not filtered');
|
|
172
|
+
}
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
_validateTokens(state, response) {
|
|
176
|
+
if (response.code) {
|
|
177
|
+
Log.debug('ResponseValidator._validateTokens: Validating code');
|
|
178
|
+
return this._processCode(state, response);
|
|
179
|
+
}
|
|
180
|
+
if (response.id_token) {
|
|
181
|
+
if (response.access_token) {
|
|
182
|
+
Log.debug('ResponseValidator._validateTokens: Validating id_token and access_token');
|
|
183
|
+
return this._validateIdTokenAndAccessToken(state, response);
|
|
184
|
+
}
|
|
185
|
+
Log.debug('ResponseValidator._validateTokens: Validating id_token');
|
|
186
|
+
return this._validateIdToken(state, response);
|
|
187
|
+
}
|
|
188
|
+
Log.debug('ResponseValidator._validateTokens: No code to process or id_token to validate');
|
|
189
|
+
return Promise.resolve(response);
|
|
190
|
+
}
|
|
191
|
+
_processCode(state, response) {
|
|
192
|
+
const request = {
|
|
193
|
+
client_id: state.client_id,
|
|
194
|
+
client_secret: state.client_secret,
|
|
195
|
+
code: response.code,
|
|
196
|
+
redirect_uri: state.redirect_uri,
|
|
197
|
+
code_verifier: state.code_verifier,
|
|
198
|
+
};
|
|
199
|
+
if (state.extraTokenParams && typeof state.extraTokenParams === 'object') {
|
|
200
|
+
Object.assign(request, state.extraTokenParams);
|
|
201
|
+
}
|
|
202
|
+
return this._tokenClient.exchangeCode(request).then(tokenResponse => {
|
|
203
|
+
for (const key in tokenResponse) {
|
|
204
|
+
response[key] = tokenResponse[key];
|
|
205
|
+
}
|
|
206
|
+
if (response.id_token) {
|
|
207
|
+
Log.debug('ResponseValidator._processCode: token response successful, processing id_token');
|
|
208
|
+
return this._validateIdTokenAttributes(state, response);
|
|
209
|
+
}
|
|
210
|
+
Log.debug('ResponseValidator._processCode: token response successful, returning response');
|
|
211
|
+
return response;
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
_validateIdTokenAttributes(state, response) {
|
|
215
|
+
return this._metadataService.getIssuer().then(issuer => {
|
|
216
|
+
const audience = state.client_id; // guarded by _processSigninParams
|
|
217
|
+
const clockSkewInSeconds = this._settings.clockSkew;
|
|
218
|
+
Log.debug('ResponseValidator._validateIdTokenAttributes: Validating JWT attributes; using clock skew (in seconds) of: ', clockSkewInSeconds);
|
|
219
|
+
return this._settings.getEpochTime().then(now => {
|
|
220
|
+
return this._joseUtil.validateJwtAttributes(response.id_token, issuer, audience, clockSkewInSeconds, now)
|
|
221
|
+
.then(payload => {
|
|
222
|
+
if (state.nonce && state.nonce !== payload.nonce) {
|
|
223
|
+
Log.error('ResponseValidator._validateIdTokenAttributes: Invalid nonce in id_token');
|
|
224
|
+
return Promise.reject(new Error('Invalid nonce in id_token'));
|
|
225
|
+
}
|
|
226
|
+
if (!payload.sub) {
|
|
227
|
+
Log.error('ResponseValidator._validateIdTokenAttributes: No sub present in id_token');
|
|
228
|
+
return Promise.reject(new Error('No sub present in id_token'));
|
|
229
|
+
}
|
|
230
|
+
response.profile = payload;
|
|
231
|
+
return response;
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
_validateIdTokenAndAccessToken(state, response) {
|
|
237
|
+
return this._validateIdToken(state, response).then(response => this._validateAccessToken(response));
|
|
238
|
+
}
|
|
239
|
+
_getSigningKeyForJwt(jwt) {
|
|
240
|
+
return this._metadataService.getSigningKeys().then(keys => {
|
|
241
|
+
const signingKeys = keys;
|
|
242
|
+
const kid = jwt.header.kid;
|
|
243
|
+
if (!signingKeys) {
|
|
244
|
+
Log.error('ResponseValidator._validateIdToken: No signing keys from metadata');
|
|
245
|
+
return Promise.reject(new Error('No signing keys from metadata'));
|
|
246
|
+
}
|
|
247
|
+
Log.debug('ResponseValidator._validateIdToken: Received signing keys');
|
|
248
|
+
if (!kid) {
|
|
249
|
+
const filtered = this._filterByAlg(signingKeys, jwt.header.alg);
|
|
250
|
+
if (filtered.length > 1) {
|
|
251
|
+
Log.error('ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata');
|
|
252
|
+
return Promise.reject(new Error('No kid found in id_token and more than one key found in metadata'));
|
|
253
|
+
}
|
|
254
|
+
return Promise.resolve(filtered[0]);
|
|
255
|
+
}
|
|
256
|
+
return Promise.resolve(signingKeys.find(k => k.kid === kid));
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
_getSigningKeyForJwtWithSingleRetry(jwt) {
|
|
260
|
+
return this._getSigningKeyForJwt(jwt).then(key => {
|
|
261
|
+
if (!key) {
|
|
262
|
+
this._metadataService.resetSigningKeys();
|
|
263
|
+
return this._getSigningKeyForJwt(jwt);
|
|
264
|
+
}
|
|
265
|
+
return Promise.resolve(key);
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
_validateIdToken(state, response) {
|
|
269
|
+
if (!state.nonce) {
|
|
270
|
+
Log.error('ResponseValidator._validateIdToken: No nonce on state');
|
|
271
|
+
return Promise.reject(new Error('No nonce on state'));
|
|
272
|
+
}
|
|
273
|
+
const jwt = this._joseUtil.parseJwt(response.id_token);
|
|
274
|
+
if (!jwt?.header || !jwt?.payload) {
|
|
275
|
+
Log.error('ResponseValidator._validateIdToken: Failed to parse id_token', jwt);
|
|
276
|
+
return Promise.reject(new Error('Failed to parse id_token'));
|
|
277
|
+
}
|
|
278
|
+
if (state.nonce !== jwt.payload.nonce) {
|
|
279
|
+
Log.error('ResponseValidator._validateIdToken: Invalid nonce in id_token');
|
|
280
|
+
return Promise.reject(new Error('Invalid nonce in id_token'));
|
|
281
|
+
}
|
|
282
|
+
return this._metadataService.getIssuer().then(issuer => {
|
|
283
|
+
Log.debug('ResponseValidator._validateIdToken: Received issuer');
|
|
284
|
+
return this._getSigningKeyForJwtWithSingleRetry(jwt).then(key => {
|
|
285
|
+
if (!key) {
|
|
286
|
+
Log.error('ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys');
|
|
287
|
+
return Promise.reject(new Error('No key matching kid or alg found in signing keys'));
|
|
288
|
+
}
|
|
289
|
+
const audience = state.client_id; // guarded by _processSigninParams
|
|
290
|
+
const clockSkewInSeconds = this._settings.clockSkew;
|
|
291
|
+
Log.debug('ResponseValidator._validateIdToken: Validating JWT; using clock skew (in seconds) of: ', clockSkewInSeconds);
|
|
292
|
+
return this._joseUtil.validateJwt(response.id_token, key, issuer, audience, clockSkewInSeconds).then(() => {
|
|
293
|
+
Log.debug('ResponseValidator._validateIdToken: JWT validation successful');
|
|
294
|
+
if (!jwt.payload.sub) {
|
|
295
|
+
Log.error('ResponseValidator._validateIdToken: No sub present in id_token');
|
|
296
|
+
return Promise.reject(new Error('No sub present in id_token'));
|
|
297
|
+
}
|
|
298
|
+
response.profile = jwt.payload;
|
|
299
|
+
return response;
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
_filterByAlg(keys, alg) {
|
|
305
|
+
let kty = null;
|
|
306
|
+
if (alg.startsWith('RS'))
|
|
307
|
+
kty = 'RSA';
|
|
308
|
+
else if (alg.startsWith('PS'))
|
|
309
|
+
kty = 'PS';
|
|
310
|
+
else if (alg.startsWith('ES'))
|
|
311
|
+
kty = 'EC';
|
|
312
|
+
else {
|
|
313
|
+
Log.debug('ResponseValidator._filterByAlg: alg not supported: ', alg);
|
|
314
|
+
return [];
|
|
315
|
+
}
|
|
316
|
+
Log.debug('ResponseValidator._filterByAlg: Looking for keys that match kty: ', kty);
|
|
317
|
+
keys = keys.filter(k => k.kty === kty);
|
|
318
|
+
Log.debug('ResponseValidator._filterByAlg: Number of keys that match kty: ', kty, keys.length);
|
|
319
|
+
return keys;
|
|
320
|
+
}
|
|
321
|
+
async _validateAccessToken(response) {
|
|
322
|
+
if (!response.profile) {
|
|
323
|
+
Log.error('ResponseValidator._validateAccessToken: No profile loaded from id_token');
|
|
324
|
+
return Promise.reject(new Error('No profile loaded from id_token'));
|
|
325
|
+
}
|
|
326
|
+
if (!response.profile.at_hash) {
|
|
327
|
+
Log.error('ResponseValidator._validateAccessToken: No at_hash in id_token');
|
|
328
|
+
return Promise.reject(new Error('No at_hash in id_token'));
|
|
329
|
+
}
|
|
330
|
+
if (!response.id_token) {
|
|
331
|
+
Log.error('ResponseValidator._validateAccessToken: No id_token');
|
|
332
|
+
return Promise.reject(new Error('No id_token'));
|
|
333
|
+
}
|
|
334
|
+
const jwt = this._joseUtil.parseJwt(response.id_token);
|
|
335
|
+
if (!jwt?.header) {
|
|
336
|
+
Log.error('ResponseValidator._validateAccessToken: Failed to parse id_token', jwt);
|
|
337
|
+
return Promise.reject(new Error('Failed to parse id_token'));
|
|
338
|
+
}
|
|
339
|
+
const hashAlg = jwt.header.alg;
|
|
340
|
+
if (!hashAlg || hashAlg.length !== 5) {
|
|
341
|
+
Log.error('ResponseValidator._validateAccessToken: Unsupported alg:', hashAlg);
|
|
342
|
+
return Promise.reject(new Error('Unsupported alg: ' + hashAlg));
|
|
343
|
+
}
|
|
344
|
+
const hashBitsStr = hashAlg.substring(2, 5);
|
|
345
|
+
const hashBits = parseInt(hashBitsStr);
|
|
346
|
+
if (hashBits !== 256 && hashBits !== 384 && hashBits !== 512) {
|
|
347
|
+
Log.error('ResponseValidator._validateAccessToken: Unsupported alg:', hashAlg, hashBits);
|
|
348
|
+
return Promise.reject(new Error('Unsupported alg: ' + hashAlg));
|
|
349
|
+
}
|
|
350
|
+
const sha = 'sha' + hashBits;
|
|
351
|
+
const hash = await this._joseUtil.hashString(response.access_token, sha);
|
|
352
|
+
if (!hash) {
|
|
353
|
+
Log.error('ResponseValidator._validateAccessToken: access_token hash failed:', sha);
|
|
354
|
+
return Promise.reject(new Error('Failed to validate at_hash'));
|
|
355
|
+
}
|
|
356
|
+
const left = hash.substring(0, hash.length / 2);
|
|
357
|
+
const left_b64u = this._joseUtil.hexToBase64Url(left);
|
|
358
|
+
if (left_b64u !== response.profile.at_hash) {
|
|
359
|
+
Log.error('ResponseValidator._validateAccessToken: Failed to validate at_hash', left_b64u, response.profile.at_hash);
|
|
360
|
+
return Promise.reject(new Error('Failed to validate at_hash'));
|
|
361
|
+
}
|
|
362
|
+
Log.debug('ResponseValidator._validateAccessToken: success');
|
|
363
|
+
return Promise.resolve(response);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=ResponseValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResponseValidator.js","sourceRoot":"","sources":["../../../src/protocol/ResponseValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { UserProfile } from '../types/user.js';
|
|
2
|
+
export declare class SigninResponse {
|
|
3
|
+
error: string | undefined;
|
|
4
|
+
error_description: string | undefined;
|
|
5
|
+
error_uri: string | undefined;
|
|
6
|
+
code: string | undefined;
|
|
7
|
+
state: unknown;
|
|
8
|
+
id_token: string | undefined;
|
|
9
|
+
session_state: string | undefined;
|
|
10
|
+
access_token: string | undefined;
|
|
11
|
+
token_type: string | undefined;
|
|
12
|
+
scope: string | undefined;
|
|
13
|
+
profile: UserProfile | undefined;
|
|
14
|
+
expires_at: number | undefined;
|
|
15
|
+
constructor(url: string, delimiter?: string);
|
|
16
|
+
get expires_in(): number | undefined;
|
|
17
|
+
set expires_in(value: string | number | undefined);
|
|
18
|
+
get expired(): boolean | undefined;
|
|
19
|
+
get scopes(): string[];
|
|
20
|
+
get isOpenIdConnect(): boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare class SignoutResponse {
|
|
23
|
+
error: string | undefined;
|
|
24
|
+
error_description: string | undefined;
|
|
25
|
+
error_uri: string | undefined;
|
|
26
|
+
state: unknown;
|
|
27
|
+
constructor(url: string);
|
|
28
|
+
}
|
|
29
|
+
export interface ErrorResponseData {
|
|
30
|
+
error: string;
|
|
31
|
+
error_description?: string;
|
|
32
|
+
error_uri?: string;
|
|
33
|
+
state?: string;
|
|
34
|
+
session_state?: string;
|
|
35
|
+
}
|
|
36
|
+
export declare class ErrorResponse extends Error {
|
|
37
|
+
error: string;
|
|
38
|
+
error_description: string | undefined;
|
|
39
|
+
error_uri: string | undefined;
|
|
40
|
+
state: string | undefined;
|
|
41
|
+
session_state: string | undefined;
|
|
42
|
+
constructor({ error, error_description, error_uri, state, session_state }: ErrorResponseData);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=Responses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Responses.d.ts","sourceRoot":"","sources":["../../../src/protocol/Responses.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQpD,qBAAa,cAAc;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEnB,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY;IAiBhD,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAMnC;IACD,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAMhD;IAED,IAAI,OAAO,IAAI,OAAO,GAAG,SAAS,CAGjC;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;CACF;AAMD,qBAAa,eAAe;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;gBAEH,GAAG,EAAE,MAAM;CAOxB;AAMD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEtB,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,iBAAiB;CAgB7F"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
|
|
2
|
+
import { Log } from '../utils/Log.js';
|
|
3
|
+
import { UrlUtility } from '../services/Http.js';
|
|
4
|
+
const OidcScope = 'openid';
|
|
5
|
+
//=============================================================================
|
|
6
|
+
// SigninResponse
|
|
7
|
+
//=============================================================================
|
|
8
|
+
export class SigninResponse {
|
|
9
|
+
constructor(url, delimiter = '#') {
|
|
10
|
+
const values = UrlUtility.parseUrlFragment(url, delimiter);
|
|
11
|
+
this.error = values.error;
|
|
12
|
+
this.error_description = values.error_description;
|
|
13
|
+
this.error_uri = values.error_uri;
|
|
14
|
+
this.code = values.code;
|
|
15
|
+
this.state = values.state;
|
|
16
|
+
this.id_token = values.id_token;
|
|
17
|
+
this.session_state = values.session_state;
|
|
18
|
+
this.access_token = values.access_token;
|
|
19
|
+
this.token_type = values.token_type;
|
|
20
|
+
this.scope = values.scope;
|
|
21
|
+
this.profile = undefined;
|
|
22
|
+
this.expires_in = values.expires_in;
|
|
23
|
+
}
|
|
24
|
+
get expires_in() {
|
|
25
|
+
if (this.expires_at) {
|
|
26
|
+
const now = Math.floor(Date.now() / 1000);
|
|
27
|
+
return this.expires_at - now;
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
set expires_in(value) {
|
|
32
|
+
const expires_in = parseInt(String(value));
|
|
33
|
+
if (typeof expires_in === 'number' && expires_in > 0) {
|
|
34
|
+
const now = Math.floor(Date.now() / 1000);
|
|
35
|
+
this.expires_at = now + expires_in;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
get expired() {
|
|
39
|
+
const expires_in = this.expires_in;
|
|
40
|
+
return expires_in !== undefined ? expires_in <= 0 : undefined;
|
|
41
|
+
}
|
|
42
|
+
get scopes() {
|
|
43
|
+
return (this.scope || '').split(' ');
|
|
44
|
+
}
|
|
45
|
+
get isOpenIdConnect() {
|
|
46
|
+
return this.scopes.indexOf(OidcScope) >= 0 || !!this.id_token;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//=============================================================================
|
|
50
|
+
// SignoutResponse
|
|
51
|
+
//=============================================================================
|
|
52
|
+
export class SignoutResponse {
|
|
53
|
+
constructor(url) {
|
|
54
|
+
const values = UrlUtility.parseUrlFragment(url, '?');
|
|
55
|
+
this.error = values.error;
|
|
56
|
+
this.error_description = values.error_description;
|
|
57
|
+
this.error_uri = values.error_uri;
|
|
58
|
+
this.state = values.state;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export class ErrorResponse extends Error {
|
|
62
|
+
constructor({ error, error_description, error_uri, state, session_state }) {
|
|
63
|
+
if (!error) {
|
|
64
|
+
Log.error('No error passed to ErrorResponse');
|
|
65
|
+
throw new Error('error');
|
|
66
|
+
}
|
|
67
|
+
const message = error_description ? `${error}: ${error_description}` : error;
|
|
68
|
+
super(message);
|
|
69
|
+
this.name = error;
|
|
70
|
+
this.error = error;
|
|
71
|
+
this.error_description = error_description;
|
|
72
|
+
this.error_uri = error_uri;
|
|
73
|
+
this.state = state;
|
|
74
|
+
this.session_state = session_state;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=Responses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Responses.js","sourceRoot":"","sources":["../../../src/protocol/Responses.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { JsonService, MetadataService } from '../services/Http.js';
|
|
2
|
+
import type { JoseUtilType } from '../crypto/Crypto.js';
|
|
3
|
+
export interface TokenSettings {
|
|
4
|
+
authority?: string;
|
|
5
|
+
client_id?: string;
|
|
6
|
+
client_secret?: string;
|
|
7
|
+
redirect_uri?: string;
|
|
8
|
+
client_authentication?: string;
|
|
9
|
+
userInfoJwtIssuer?: string;
|
|
10
|
+
clockSkew?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class TokenClient {
|
|
13
|
+
private _settings;
|
|
14
|
+
private _jsonService;
|
|
15
|
+
private _metadataService;
|
|
16
|
+
constructor(settings: TokenSettings, JsonServiceCtor?: typeof JsonService, MetadataServiceCtor?: typeof MetadataService);
|
|
17
|
+
exchangeCode(args?: Record<string, any>): Promise<any>;
|
|
18
|
+
exchangeRefreshToken(args?: Record<string, any>): Promise<any>;
|
|
19
|
+
}
|
|
20
|
+
export declare class TokenRevocationClient {
|
|
21
|
+
private _settings;
|
|
22
|
+
private _XMLHttpRequestCtor;
|
|
23
|
+
private _metadataService;
|
|
24
|
+
constructor(settings: TokenSettings, XMLHttpRequestCtor?: typeof XMLHttpRequest, MetadataServiceCtor?: typeof MetadataService);
|
|
25
|
+
revoke(token: string, required?: boolean, type?: string): Promise<void>;
|
|
26
|
+
private _revoke;
|
|
27
|
+
}
|
|
28
|
+
export declare class UserInfoService {
|
|
29
|
+
private _settings;
|
|
30
|
+
private _jsonService;
|
|
31
|
+
private _metadataService;
|
|
32
|
+
private _joseUtil;
|
|
33
|
+
constructor(settings: TokenSettings, JsonServiceCtor?: typeof JsonService, MetadataServiceCtor?: typeof MetadataService, joseUtil?: JoseUtilType);
|
|
34
|
+
getClaims(token: string): Promise<any>;
|
|
35
|
+
private _getClaimsFromJwt;
|
|
36
|
+
private _filterByAlg;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=TokenService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenService.d.ts","sourceRoot":"","sources":["../../../src/protocol/TokenService.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,gBAAgB,CAAkB;gBAGxC,QAAQ,EAAE,aAAa,EACvB,eAAe,GAAE,OAAO,WAAyB,EACjD,mBAAmB,GAAE,OAAO,eAAiC;IAQ/D,YAAY,CAAC,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmC1D,oBAAoB,CAAC,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CA2BnE;AASD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,mBAAmB,CAAwB;IACnD,OAAO,CAAC,gBAAgB,CAAkB;gBAGxC,QAAQ,EAAE,aAAa,EACvB,kBAAkB,GAAE,OAAO,cAAuC,EAClE,mBAAmB,GAAE,OAAO,eAAiC;IAQ/D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,GAAE,MAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvF,OAAO,CAAC,OAAO;CAwBhB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,SAAS,CAAe;gBAG9B,QAAQ,EAAE,aAAa,EACvB,eAAe,GAAE,OAAO,WAAyB,EACjD,mBAAmB,GAAE,OAAO,eAAiC,EAC7D,QAAQ,GAAE,YAAuB;IAanC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAWtC,OAAO,CAAC,iBAAiB;IAkEzB,OAAO,CAAC,YAAY;CAWrB"}
|