@recursyve/nice-auth0-kit 18.0.0-beta.22 → 21.0.0-beta.21
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/fesm2022/recursyve-nice-auth0-kit.mjs +24 -24
- package/fesm2022/recursyve-nice-auth0-kit.mjs.map +1 -1
- package/package.json +5 -7
- package/types/recursyve-nice-auth0-kit.d.ts +170 -0
- package/esm2022/lib/api/auth0.api.mjs +0 -13
- package/esm2022/lib/api/authorization/authorization.api.mjs +0 -40
- package/esm2022/lib/api/authorization/models/authorization-flow-request.model.mjs +0 -2
- package/esm2022/lib/api/exceptions/base.exception.mjs +0 -6
- package/esm2022/lib/api/index.mjs +0 -3
- package/esm2022/lib/api/interceptors/auth.interceptor.mjs +0 -42
- package/esm2022/lib/api/mfa/exceptions/association-required.exception.mjs +0 -4
- package/esm2022/lib/api/mfa/exceptions/mfa.exception.mjs +0 -5
- package/esm2022/lib/api/mfa/mfa.api.mjs +0 -59
- package/esm2022/lib/api/mfa/model/mfa-request.model.mjs +0 -2
- package/esm2022/lib/api/mfa/model/mfa-response.model.mjs +0 -2
- package/esm2022/lib/api/nice-auth0.service.mjs +0 -24
- package/esm2022/lib/api/token/exceptions/mfa-required.exception.mjs +0 -7
- package/esm2022/lib/api/token/exceptions/token.exception.mjs +0 -5
- package/esm2022/lib/api/token/models/token-response.model.mjs +0 -2
- package/esm2022/lib/api/token/token.api.mjs +0 -93
- package/esm2022/lib/nice-auht0-kit.module.mjs +0 -49
- package/esm2022/lib/nice-auth0-kit.constant.mjs +0 -3
- package/esm2022/lib/nice-auth0-kit.options.mjs +0 -2
- package/esm2022/lib/providers/authentication.service.mjs +0 -247
- package/esm2022/lib/providers/exceptions/no-authenticator.exception.mjs +0 -3
- package/esm2022/lib/providers/index.mjs +0 -3
- package/esm2022/public-api.mjs +0 -8
- package/esm2022/recursyve-nice-auth0-kit.mjs +0 -5
- package/index.d.ts +0 -5
- package/lib/api/auth0.api.d.ts +0 -6
- package/lib/api/authorization/authorization.api.d.ts +0 -12
- package/lib/api/authorization/models/authorization-flow-request.model.d.ts +0 -4
- package/lib/api/exceptions/base.exception.d.ts +0 -5
- package/lib/api/index.d.ts +0 -2
- package/lib/api/interceptors/auth.interceptor.d.ts +0 -13
- package/lib/api/mfa/exceptions/association-required.exception.d.ts +0 -3
- package/lib/api/mfa/exceptions/mfa.exception.d.ts +0 -3
- package/lib/api/mfa/mfa.api.d.ts +0 -16
- package/lib/api/mfa/model/mfa-request.model.d.ts +0 -10
- package/lib/api/mfa/model/mfa-response.model.d.ts +0 -6
- package/lib/api/nice-auth0.service.d.ts +0 -12
- package/lib/api/token/exceptions/mfa-required.exception.d.ts +0 -5
- package/lib/api/token/exceptions/token.exception.d.ts +0 -3
- package/lib/api/token/models/token-response.model.d.ts +0 -7
- package/lib/api/token/token.api.d.ts +0 -18
- package/lib/nice-auht0-kit.module.d.ts +0 -9
- package/lib/nice-auth0-kit.constant.d.ts +0 -2
- package/lib/nice-auth0-kit.options.d.ts +0 -12
- package/lib/providers/authentication.service.d.ts +0 -65
- package/lib/providers/exceptions/no-authenticator.exception.d.ts +0 -2
- package/lib/providers/index.d.ts +0 -2
- package/public-api.d.ts +0 -4
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from "@angular/core";
|
|
2
|
-
import { jwtDecode } from "jwt-decode";
|
|
3
|
-
import { BehaviorSubject, of, shareReplay, throwError } from "rxjs";
|
|
4
|
-
import { catchError, map, share, tap } from "rxjs/operators";
|
|
5
|
-
import { NiceAuth0Service } from "../api";
|
|
6
|
-
import { Auth0AssociationRequiredException } from "../api/mfa/exceptions/association-required.exception";
|
|
7
|
-
import { Auth0MfaRequiredException } from "../api/token/exceptions/mfa-required.exception";
|
|
8
|
-
import { NICE_AUTH0_OPTIONS } from "../nice-auth0-kit.constant";
|
|
9
|
-
import { NoAuthenticatorException } from "./exceptions/no-authenticator.exception";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "../api";
|
|
12
|
-
export var AuthorizationStateValidationResult;
|
|
13
|
-
(function (AuthorizationStateValidationResult) {
|
|
14
|
-
AuthorizationStateValidationResult["Omitted"] = "omitted";
|
|
15
|
-
AuthorizationStateValidationResult["Success"] = "success";
|
|
16
|
-
AuthorizationStateValidationResult["Failure"] = "failure";
|
|
17
|
-
})(AuthorizationStateValidationResult || (AuthorizationStateValidationResult = {}));
|
|
18
|
-
export class NiceAuthenticationService {
|
|
19
|
-
constructor(options, auth0Service) {
|
|
20
|
-
this.options = options;
|
|
21
|
-
this.auth0Service = auth0Service;
|
|
22
|
-
this.activeRefreshTokenRequest = null;
|
|
23
|
-
this.currentUser$ = new BehaviorSubject(this.currentUser);
|
|
24
|
-
}
|
|
25
|
-
get idToken() {
|
|
26
|
-
return localStorage.getItem("auth0_id_token");
|
|
27
|
-
}
|
|
28
|
-
set idToken(accessToken) {
|
|
29
|
-
localStorage.setItem("auth0_id_token", accessToken);
|
|
30
|
-
this.currentUser$.next(this.currentUser);
|
|
31
|
-
}
|
|
32
|
-
get accessToken() {
|
|
33
|
-
return localStorage.getItem("auth0_access_token");
|
|
34
|
-
}
|
|
35
|
-
set accessToken(accessToken) {
|
|
36
|
-
localStorage.setItem("auth0_access_token", accessToken);
|
|
37
|
-
}
|
|
38
|
-
get refreshToken() {
|
|
39
|
-
return localStorage.getItem("auth0_refresh_token");
|
|
40
|
-
}
|
|
41
|
-
set refreshToken(refreshToken) {
|
|
42
|
-
localStorage.setItem("auth0_refresh_token", refreshToken);
|
|
43
|
-
}
|
|
44
|
-
get authToken() {
|
|
45
|
-
if (this.options.authToken === "idToken") {
|
|
46
|
-
return this.idToken;
|
|
47
|
-
}
|
|
48
|
-
return this.accessToken;
|
|
49
|
-
}
|
|
50
|
-
get idTokenPayload() {
|
|
51
|
-
try {
|
|
52
|
-
return jwtDecode(this.idToken);
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
console.log("Failed to decode payload: " + e);
|
|
56
|
-
return {};
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
get accessTokenPayload() {
|
|
60
|
-
try {
|
|
61
|
-
const decodedPayload = atob(this.accessToken.split(".")[1]);
|
|
62
|
-
return JSON.parse(decodedPayload);
|
|
63
|
-
}
|
|
64
|
-
catch (e) {
|
|
65
|
-
console.log("Failed to decode payload: " + e);
|
|
66
|
-
return {};
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
get authTokenPayload() {
|
|
70
|
-
if (this.options.authToken === "idToken") {
|
|
71
|
-
return this.idTokenPayload;
|
|
72
|
-
}
|
|
73
|
-
return this.accessTokenPayload;
|
|
74
|
-
}
|
|
75
|
-
get currentUser() {
|
|
76
|
-
return this.idTokenPayload;
|
|
77
|
-
}
|
|
78
|
-
checkLoggedIn() {
|
|
79
|
-
if (this.validateToken()) {
|
|
80
|
-
return of(true);
|
|
81
|
-
}
|
|
82
|
-
return this.getAuthorizationToken().pipe(map((token) => token != null), catchError(() => of(false)));
|
|
83
|
-
}
|
|
84
|
-
getAuthorizationToken() {
|
|
85
|
-
if (!this.authToken) {
|
|
86
|
-
return of(null);
|
|
87
|
-
}
|
|
88
|
-
if (this.validateToken()) {
|
|
89
|
-
return of(this.authToken);
|
|
90
|
-
}
|
|
91
|
-
if (this.refreshToken) {
|
|
92
|
-
return this.generateNewToken();
|
|
93
|
-
}
|
|
94
|
-
return of(null);
|
|
95
|
-
}
|
|
96
|
-
validateToken() {
|
|
97
|
-
if (!this.authToken) {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
const exp = this.authTokenPayload.exp;
|
|
101
|
-
const now = new Date().getTime() / 1000;
|
|
102
|
-
return now < exp;
|
|
103
|
-
}
|
|
104
|
-
passwordGrant(username, password) {
|
|
105
|
-
return this.auth0Service.token.authWithPassword(username, password).pipe(map(value => {
|
|
106
|
-
if (value) {
|
|
107
|
-
this.refreshToken = value.refresh_token;
|
|
108
|
-
this.idToken = value.id_token;
|
|
109
|
-
this.accessToken = value.access_token;
|
|
110
|
-
}
|
|
111
|
-
return {
|
|
112
|
-
success: true,
|
|
113
|
-
mfaRequired: false
|
|
114
|
-
};
|
|
115
|
-
}), catchError((e) => this.catchGrantError(e)));
|
|
116
|
-
}
|
|
117
|
-
authorizationCodeGrant(code, redirectUrl) {
|
|
118
|
-
return this.auth0Service.token.authWithAuthorizationCode(code, redirectUrl).pipe(map(value => {
|
|
119
|
-
this.refreshToken = value.refresh_token;
|
|
120
|
-
this.idToken = value.id_token;
|
|
121
|
-
this.accessToken = value.access_token;
|
|
122
|
-
return {
|
|
123
|
-
success: true,
|
|
124
|
-
mfaRequired: false
|
|
125
|
-
};
|
|
126
|
-
}), catchError((e) => this.catchGrantError(e)));
|
|
127
|
-
}
|
|
128
|
-
getAuthFlowRequestUri(redirectUrl, options) {
|
|
129
|
-
return this.auth0Service.authorization.buildAuthFlowRequest(redirectUrl, options?.connection ?? undefined).pipe(map(request => {
|
|
130
|
-
if (options?.useStateValidation) {
|
|
131
|
-
localStorage.setItem("auth0_auth_flow_state", request.state);
|
|
132
|
-
}
|
|
133
|
-
return request.uri;
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
checkAuthFlowResponse(expectedResponsePath) {
|
|
137
|
-
if (typeof expectedResponsePath === "string") {
|
|
138
|
-
expectedResponsePath = [expectedResponsePath];
|
|
139
|
-
}
|
|
140
|
-
const path = expectedResponsePath?.find(x => window.location.pathname === x);
|
|
141
|
-
if (!expectedResponsePath || path) {
|
|
142
|
-
const params = new URLSearchParams(window.location.search);
|
|
143
|
-
const code = params.get("code");
|
|
144
|
-
if (!code) {
|
|
145
|
-
return of(null);
|
|
146
|
-
}
|
|
147
|
-
const response = {
|
|
148
|
-
path,
|
|
149
|
-
code,
|
|
150
|
-
stateValidationResult: AuthorizationStateValidationResult.Omitted
|
|
151
|
-
};
|
|
152
|
-
const savedAuthorizationState = localStorage.getItem("auth0_auth_flow_state");
|
|
153
|
-
if (savedAuthorizationState) {
|
|
154
|
-
if (!params.has("state") || savedAuthorizationState !== params.get("state")) {
|
|
155
|
-
response.stateValidationResult = AuthorizationStateValidationResult.Failure;
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
response.stateValidationResult = AuthorizationStateValidationResult.Success;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return of(response);
|
|
162
|
-
}
|
|
163
|
-
return of(null);
|
|
164
|
-
}
|
|
165
|
-
validateOobCode(code) {
|
|
166
|
-
return this.auth0Service.token.authWithOobCode(this.lastMfaChallengeToken, this.lastMfaOobCode, code).pipe(map(value => {
|
|
167
|
-
this.refreshToken = value.refresh_token;
|
|
168
|
-
this.idToken = value.id_token;
|
|
169
|
-
this.accessToken = value.access_token;
|
|
170
|
-
}));
|
|
171
|
-
}
|
|
172
|
-
logout() {
|
|
173
|
-
const refreshToken = localStorage.getItem("auth0_refresh_token");
|
|
174
|
-
if (!refreshToken) {
|
|
175
|
-
return of();
|
|
176
|
-
}
|
|
177
|
-
localStorage.removeItem("auth0_id_token");
|
|
178
|
-
localStorage.removeItem("auth0_access_token");
|
|
179
|
-
localStorage.removeItem("auth0_refresh_token");
|
|
180
|
-
return this.auth0Service.token.revokeRefreshToken(refreshToken);
|
|
181
|
-
}
|
|
182
|
-
generateNewToken() {
|
|
183
|
-
if (this.activeRefreshTokenRequest) {
|
|
184
|
-
return this.activeRefreshTokenRequest.pipe(map(value => value?.access_token ?? null));
|
|
185
|
-
}
|
|
186
|
-
const refreshToken = this.refreshToken;
|
|
187
|
-
if (!refreshToken) {
|
|
188
|
-
return of(null);
|
|
189
|
-
}
|
|
190
|
-
this.activeRefreshTokenRequest = this.auth0Service.token.refreshToken(refreshToken).pipe(catchError(() => of(null)), shareReplay());
|
|
191
|
-
return this.activeRefreshTokenRequest.pipe(share(), tap({
|
|
192
|
-
next: value => {
|
|
193
|
-
if (!value) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
this.refreshToken = value.refresh_token;
|
|
197
|
-
this.idToken = value.id_token;
|
|
198
|
-
this.accessToken = value.access_token;
|
|
199
|
-
},
|
|
200
|
-
finalize: () => {
|
|
201
|
-
this.activeRefreshTokenRequest = null;
|
|
202
|
-
}
|
|
203
|
-
}), map(value => value?.access_token ?? null));
|
|
204
|
-
}
|
|
205
|
-
addMfaAuthenticator(authenticator) {
|
|
206
|
-
return this.auth0Service.mfa.associateOobAuthenticator({
|
|
207
|
-
mfaToken: this.lastMfaChallengeToken,
|
|
208
|
-
channels: [authenticator.type],
|
|
209
|
-
email: authenticator.email,
|
|
210
|
-
phoneNumber: authenticator.phoneNumber
|
|
211
|
-
}).pipe(map(value => {
|
|
212
|
-
this.lastMfaOobCode = value.oob_code;
|
|
213
|
-
}));
|
|
214
|
-
}
|
|
215
|
-
triggerMfaChallenge() {
|
|
216
|
-
return this.auth0Service.mfa.challenge({
|
|
217
|
-
type: "oob",
|
|
218
|
-
mfaToken: this.lastMfaChallengeToken
|
|
219
|
-
}).pipe(map(value => {
|
|
220
|
-
this.lastMfaOobCode = value.oob_code;
|
|
221
|
-
}));
|
|
222
|
-
}
|
|
223
|
-
catchGrantError(e) {
|
|
224
|
-
if (e instanceof Auth0MfaRequiredException) {
|
|
225
|
-
this.lastMfaChallengeToken = e.mfaToken;
|
|
226
|
-
return this.triggerMfaChallenge().pipe(map(() => ({
|
|
227
|
-
success: true,
|
|
228
|
-
mfaRequired: true
|
|
229
|
-
})), catchError((err) => {
|
|
230
|
-
if (err instanceof Auth0AssociationRequiredException) {
|
|
231
|
-
return throwError(() => new NoAuthenticatorException());
|
|
232
|
-
}
|
|
233
|
-
return throwError(() => err);
|
|
234
|
-
}));
|
|
235
|
-
}
|
|
236
|
-
return throwError(() => e);
|
|
237
|
-
}
|
|
238
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NiceAuthenticationService, deps: [{ token: NICE_AUTH0_OPTIONS }, { token: i1.NiceAuth0Service }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
239
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NiceAuthenticationService }); }
|
|
240
|
-
}
|
|
241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NiceAuthenticationService, decorators: [{
|
|
242
|
-
type: Injectable
|
|
243
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
244
|
-
type: Inject,
|
|
245
|
-
args: [NICE_AUTH0_OPTIONS]
|
|
246
|
-
}] }, { type: i1.NiceAuth0Service }] });
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtYXV0aDAta2l0L3NyYy9saWIvcHJvdmlkZXJzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDekcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQXNCbkYsTUFBTSxDQUFOLElBQVksa0NBSVg7QUFKRCxXQUFZLGtDQUFrQztJQUMxQyx5REFBbUIsQ0FBQTtJQUNuQix5REFBbUIsQ0FBQTtJQUNuQix5REFBbUIsQ0FBQTtBQUN2QixDQUFDLEVBSlcsa0NBQWtDLEtBQWxDLGtDQUFrQyxRQUk3QztBQVNELE1BQU0sT0FBTyx5QkFBeUI7SUFPbEMsWUFDd0MsT0FBeUIsRUFDckQsWUFBOEI7UUFERixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUNyRCxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFObEMsOEJB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QUFDLEdBQUcsRUFBRSxDQUFDLElBQUksd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO2dCQUNELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQzsrR0E1UlEseUJBQXlCLGtCQVF0QixrQkFBa0I7bUhBUnJCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVTs7MEJBU0YsTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSBcImp3dC1kZWNvZGVcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2hhcmUsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgTmljZUF1dGgwU2VydmljZSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IEF1dGgwQXNzb2NpYXRpb25SZXF1aXJlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9hcGkvbWZhL2V4Y2VwdGlvbnMvYXNzb2NpYXRpb24tcmVxdWlyZWQuZXhjZXB0aW9uXCI7XG5pbXBvcnQgeyBBdXRoME1mYVJlcXVpcmVkRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2FwaS90b2tlbi9leGNlcHRpb25zL21mYS1yZXF1aXJlZC5leGNlcHRpb25cIjtcbmltcG9ydCB7IEF1dGgwVG9rZW5SZXNwb25zZSB9IGZyb20gXCIuLi9hcGkvdG9rZW4vbW9kZWxzL3Rva2VuLXJlc3BvbnNlLm1vZGVsXCI7XG5pbXBvcnQgeyBOSUNFX0FVVEgwX09QVElPTlMgfSBmcm9tIFwiLi4vbmljZS1hdXRoMC1raXQuY29uc3RhbnRcIjtcbmltcG9ydCB7IE5pY2VBdXRoME9wdGlvbnMgfSBmcm9tIFwiLi4vbmljZS1hdXRoMC1raXQub3B0aW9uc1wiO1xuaW1wb3J0IHsgTm9BdXRoZW50aWNhdG9yRXhjZXB0aW9uIH0gZnJvbSBcIi4vZXhjZXB0aW9ucy9uby1hdXRoZW50aWNhdG9yLmV4Y2VwdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVzcG9uc2Uge1xuICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgbWZhUmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU21zQXV0aGVudGljYXRvciB7XG4gICAgdHlwZTogXCJzbXNcIjtcbiAgICBwaG9uZU51bWJlcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQXV0aGVudGljYXRvciB7XG4gICAgdHlwZTogXCJlbWFpbFwiO1xuICAgIGVtYWlsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXphdGlvbkZsb3dPcHRpb25zIHtcbiAgICBjb25uZWN0aW9uPzogc3RyaW5nO1xuICAgIHVzZVN0YXRlVmFsaWRhdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEF1dGhvcml6YXRpb25TdGF0ZVZhbGlkYXRpb25SZXN1bHQge1xuICAgIE9taXR0ZWQgPSBcIm9taXR0ZWRcIixcbiAgICBTdWNjZXNzID0gXCJzdWNjZXNzXCIsXG4gICAgRmFpbHVyZSA9IFwiZmFpbHVyZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXphdGlvbkZsb3dSZXNwb25zZSB7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgc3RhdGVWYWxpZGF0aW9uUmVzdWx0OiBBdXRob3JpemF0aW9uU3RhdGVWYWxpZGF0aW9uUmVzdWx0O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmljZUF1dGhlbnRpY2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSBsYXN0TWZhQ2hhbGxlbmdlVG9rZW46IHN0cmluZztcbiAgICBwcml2YXRlIGxhc3RNZmFPb2JDb2RlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBhY3RpdmVSZWZyZXNoVG9rZW5SZXF1ZXN0OiBPYnNlcnZhYmxlPEF1dGgwVG9rZW5SZXNwb25zZSB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgY3VycmVudFVzZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmN1cnJlbnRVc2VyKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KE5JQ0VfQVVUSDBfT1BUSU9OUykgcHJpdmF0ZSBvcHRpb25zOiBOaWNlQXV0aDBPcHRpb25zLFxuICAgICAgICBwcml2YXRlIGF1dGgwU2VydmljZTogTmljZUF1dGgwU2VydmljZVxuICAgICkge31cblxuICAgIHB1YmxpYyBnZXQgaWRUb2tlbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhdXRoMF9pZF90b2tlblwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGlkVG9rZW4oYWNjZXNzVG9rZW46IHN0cmluZykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImF1dGgwX2lkX3Rva2VuXCIsIGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciQubmV4dCh0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjY2Vzc1Rva2VuKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImF1dGgwX2FjY2Vzc190b2tlblwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGFjY2Vzc1Rva2VuKGFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJhdXRoMF9hY2Nlc3NfdG9rZW5cIiwgYWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVmcmVzaFRva2VuKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImF1dGgwX3JlZnJlc2hfdG9rZW5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJhdXRoMF9yZWZyZXNoX3Rva2VuXCIsIHJlZnJlc2hUb2tlbik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRoVG9rZW4gPT09IFwiaWRUb2tlblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZFRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWRUb2tlblBheWxvYWQoKTogYW55IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBqd3REZWNvZGUodGhpcy5pZFRva2VuKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGYWlsZWQgdG8gZGVjb2RlIHBheWxvYWQ6IFwiICsgZSk7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjY2Vzc1Rva2VuUGF5bG9hZCgpOiBhbnkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlZFBheWxvYWQgPSBhdG9iKHRoaXMuYWNjZXNzVG9rZW4uc3BsaXQoXCIuXCIpWzFdKTtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZWRQYXlsb2FkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGYWlsZWQgdG8gZGVjb2RlIHBheWxvYWQ6IFwiICsgZSk7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dGhUb2tlblBheWxvYWQoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRoVG9rZW4gPT09IFwiaWRUb2tlblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZFRva2VuUGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hY2Nlc3NUb2tlblBheWxvYWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VXNlcigpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5pZFRva2VuUGF5bG9hZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tMb2dnZWRJbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVUb2tlbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdXRob3JpemF0aW9uVG9rZW4oKS5waXBlKFxuICAgICAgICAgICAgbWFwKCh0b2tlbjogc3RyaW5nIHwgbnVsbCkgPT4gdG9rZW4gIT0gbnVsbCksXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXV0aG9yaXphdGlvblRva2VuKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIXRoaXMuYXV0aFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVRva2VuKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmF1dGhUb2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlTmV3VG9rZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGVUb2tlbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwID0gdGhpcy5hdXRoVG9rZW5QYXlsb2FkLmV4cDtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwO1xuICAgICAgICByZXR1cm4gbm93IDwgZXhwO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXNzd29yZEdyYW50KHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvZ2luUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aDBTZXJ2aWNlLnRva2VuLmF1dGhXaXRoUGFzc3dvcmQodXNlcm5hbWUsIHBhc3N3b3JkKS5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSB2YWx1ZS5yZWZyZXNoX3Rva2VuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlkVG9rZW4gPSB2YWx1ZS5pZF90b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IHZhbHVlLmFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWZhUmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4gdGhpcy5jYXRjaEdyYW50RXJyb3IoZSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGF1dGhvcml6YXRpb25Db2RlR3JhbnQoY29kZTogc3RyaW5nLCByZWRpcmVjdFVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2dpblJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGgwU2VydmljZS50b2tlbi5hdXRoV2l0aEF1dGhvcml6YXRpb25Db2RlKGNvZGUsIHJlZGlyZWN0VXJsKS5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHZhbHVlLnJlZnJlc2hfdG9rZW47XG4gICAgICAgICAgICAgICAgdGhpcy5pZFRva2VuID0gdmFsdWUuaWRfdG9rZW47XG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IHZhbHVlLmFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZmFSZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB0aGlzLmNhdGNoR3JhbnRFcnJvcihlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXV0aEZsb3dSZXF1ZXN0VXJpKHJlZGlyZWN0VXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBBdXRob3JpemF0aW9uRmxvd09wdGlvbnMpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoMFNlcnZpY2UuYXV0aG9yaXphdGlvbi5idWlsZEF1dGhGbG93UmVxdWVzdChyZWRpcmVjdFVybCwgb3B0aW9ucz8uY29ubmVjdGlvbiA/PyB1bmRlZmluZWQpLnBpcGUobWFwKHJlcXVlc3QgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LnVzZVN0YXRlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiYXV0aDBfYXV0aF9mbG93X3N0YXRlXCIsIHJlcXVlc3Quc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QudXJpO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrQXV0aEZsb3dSZXNwb25zZShleHBlY3RlZFJlc3BvbnNlUGF0aD86IHN0cmluZyB8IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxBdXRob3JpemF0aW9uRmxvd1Jlc3BvbnNlIHwgbnVsbD4ge1xuICAgICAgICBpZiAodHlwZW9mIGV4cGVjdGVkUmVzcG9uc2VQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBleHBlY3RlZFJlc3BvbnNlUGF0aCA9IFtleHBlY3RlZFJlc3BvbnNlUGF0aF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXRoID0gZXhwZWN0ZWRSZXNwb25zZVBhdGg/LmZpbmQoeCA9PiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPT09IHgpO1xuICAgICAgICBpZiAoIWV4cGVjdGVkUmVzcG9uc2VQYXRoIHx8IHBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gcGFyYW1zLmdldChcImNvZGVcIik7XG4gICAgICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlOiBBdXRob3JpemF0aW9uRmxvd1Jlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgICBzdGF0ZVZhbGlkYXRpb25SZXN1bHQ6IEF1dGhvcml6YXRpb25TdGF0ZVZhbGlkYXRpb25SZXN1bHQuT21pdHRlZFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3Qgc2F2ZWRBdXRob3JpemF0aW9uU3RhdGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImF1dGgwX2F1dGhfZmxvd19zdGF0ZVwiKTtcbiAgICAgICAgICAgIGlmIChzYXZlZEF1dGhvcml6YXRpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICghcGFyYW1zLmhhcyhcInN0YXRlXCIpIHx8IHNhdmVkQXV0aG9yaXphdGlvblN0YXRlICE9PSBwYXJhbXMuZ2V0KFwic3RhdGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdGVWYWxpZGF0aW9uUmVzdWx0ID0gQXV0aG9yaXphdGlvblN0YXRlVmFsaWRhdGlvblJlc3VsdC5GYWlsdXJlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXRlVmFsaWRhdGlvblJlc3VsdCA9IEF1dGhvcml6YXRpb25TdGF0ZVZhbGlkYXRpb25SZXN1bHQuU3VjY2VzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvZihyZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlT29iQ29kZShjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aDBTZXJ2aWNlLnRva2VuLmF1dGhXaXRoT29iQ29kZSh0aGlzLmxhc3RNZmFDaGFsbGVuZ2VUb2tlbiwgdGhpcy5sYXN0TWZhT29iQ29kZSwgY29kZSkucGlwZShcbiAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSB2YWx1ZS5yZWZyZXNoX3Rva2VuO1xuICAgICAgICAgICAgICAgIHRoaXMuaWRUb2tlbiA9IHZhbHVlLmlkX3Rva2VuO1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSB2YWx1ZS5hY2Nlc3NfdG9rZW47XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2dvdXQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYXV0aDBfcmVmcmVzaF90b2tlblwiKTtcbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhdXRoMF9pZF90b2tlblwiKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhdXRoMF9hY2Nlc3NfdG9rZW5cIik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYXV0aDBfcmVmcmVzaF90b2tlblwiKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoMFNlcnZpY2UudG9rZW4ucmV2b2tlUmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbik7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlTmV3VG9rZW4oKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVJlZnJlc2hUb2tlblJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVJlZnJlc2hUb2tlblJlcXVlc3QucGlwZShtYXAodmFsdWUgPT4gdmFsdWU/LmFjY2Vzc190b2tlbiA/PyBudWxsKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlUmVmcmVzaFRva2VuUmVxdWVzdCA9IHRoaXMuYXV0aDBTZXJ2aWNlLnRva2VuLnJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW4pLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlUmVmcmVzaFRva2VuUmVxdWVzdC5waXBlKFxuICAgICAgICAgICAgc2hhcmUoKSxcbiAgICAgICAgICAgIHRhcCh7XG4gICAgICAgICAgICAgICAgbmV4dDogdmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IHZhbHVlLnJlZnJlc2hfdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWRUb2tlbiA9IHZhbHVlLmlkX3Rva2VuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gdmFsdWUuYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmluYWxpemU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWZyZXNoVG9rZW5SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB2YWx1ZT8uYWNjZXNzX3Rva2VuID8/IG51bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE1mYUF1dGhlbnRpY2F0b3IoYXV0aGVudGljYXRvcjogU21zQXV0aGVudGljYXRvciB8IEVtYWlsQXV0aGVudGljYXRvcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoMFNlcnZpY2UubWZhLmFzc29jaWF0ZU9vYkF1dGhlbnRpY2F0b3Ioe1xuICAgICAgICAgICAgbWZhVG9rZW46IHRoaXMubGFzdE1mYUNoYWxsZW5nZVRva2VuLFxuICAgICAgICAgICAgY2hhbm5lbHM6IFthdXRoZW50aWNhdG9yLnR5cGVdLFxuICAgICAgICAgICAgZW1haWw6IChhdXRoZW50aWNhdG9yIGFzIEVtYWlsQXV0aGVudGljYXRvcikuZW1haWwsXG4gICAgICAgICAgICBwaG9uZU51bWJlcjogKGF1dGhlbnRpY2F0b3IgYXMgU21zQXV0aGVudGljYXRvcikucGhvbmVOdW1iZXJcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0TWZhT29iQ29kZSA9IHZhbHVlLm9vYl9jb2RlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlck1mYUNoYWxsZW5nZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aDBTZXJ2aWNlLm1mYS5jaGFsbGVuZ2Uoe1xuICAgICAgICAgICAgdHlwZTogXCJvb2JcIixcbiAgICAgICAgICAgIG1mYVRva2VuOiB0aGlzLmxhc3RNZmFDaGFsbGVuZ2VUb2tlblxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RNZmFPb2JDb2RlID0gdmFsdWUub29iX2NvZGU7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2F0Y2hHcmFudEVycm9yKGU6IGFueSk6IE9ic2VydmFibGU8TG9naW5SZXNwb25zZT4ge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEF1dGgwTWZhUmVxdWlyZWRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubGFzdE1mYUNoYWxsZW5nZVRva2VuID0gZS5tZmFUb2tlbjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJNZmFDaGFsbGVuZ2UoKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZmFSZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEF1dGgwQXNzb2NpYXRpb25SZXF1aXJlZEV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IE5vQXV0aGVudGljYXRvckV4Y2VwdGlvbigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export class NoAuthenticatorException {
|
|
2
|
-
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tYXV0aGVudGljYXRvci5leGNlcHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLWF1dGgwLWtpdC9zcmMvbGliL3Byb3ZpZGVycy9leGNlcHRpb25zL25vLWF1dGhlbnRpY2F0b3IuZXhjZXB0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyx3QkFBd0I7Q0FBRyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBOb0F1dGhlbnRpY2F0b3JFeGNlcHRpb24ge31cbiJdfQ==
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export * from "./exceptions/no-authenticator.exception";
|
|
2
|
-
export * from "./authentication.service";
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLWF1dGgwLWtpdC9zcmMvbGliL3Byb3ZpZGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9leGNlcHRpb25zL25vLWF1dGhlbnRpY2F0b3IuZXhjZXB0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XG4iXX0=
|
package/esm2022/public-api.mjs
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of nice-auth0-kit
|
|
3
|
-
*/
|
|
4
|
-
export * from "./lib/nice-auht0-kit.module";
|
|
5
|
-
export * from "./lib/nice-auth0-kit.options";
|
|
6
|
-
export * from "./lib/api";
|
|
7
|
-
export * from "./lib/providers";
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25pY2UtYXV0aDAta2l0L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5pY2UtYXV0aDAta2l0XG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vbGliL25pY2UtYXVodDAta2l0Lm1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL25pY2UtYXV0aDAta2l0Lm9wdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9hcGlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9wcm92aWRlcnNcIjtcbiJdfQ==
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzeXZlLW5pY2UtYXV0aDAta2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmljZS1hdXRoMC1raXQvc3JjL3JlY3Vyc3l2ZS1uaWNlLWF1dGgwLWtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
package/index.d.ts
DELETED
package/lib/api/auth0.api.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Auth0Api } from "../auth0.api";
|
|
2
|
-
import { NiceAuth0Options } from "../../nice-auth0-kit.options";
|
|
3
|
-
import { Observable } from "rxjs";
|
|
4
|
-
import { AuthorizationFlowRequest } from "./models/authorization-flow-request.model";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class Auth0AuthorizationApi extends Auth0Api {
|
|
7
|
-
private options;
|
|
8
|
-
constructor(options: NiceAuth0Options);
|
|
9
|
-
buildAuthFlowRequest(redirectUrl: string, connection?: string): Observable<AuthorizationFlowRequest>;
|
|
10
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<Auth0AuthorizationApi, never>;
|
|
11
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<Auth0AuthorizationApi>;
|
|
12
|
-
}
|
package/lib/api/index.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from "@angular/common/http";
|
|
2
|
-
import { Observable } from "rxjs";
|
|
3
|
-
import { NiceAuth0Options } from "../../nice-auth0-kit.options";
|
|
4
|
-
import { NiceAuthenticationService } from "../../providers/authentication.service";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class NiceAuthInterceptor implements HttpInterceptor {
|
|
7
|
-
private options;
|
|
8
|
-
private authService;
|
|
9
|
-
constructor(options: NiceAuth0Options, authService: NiceAuthenticationService);
|
|
10
|
-
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
|
|
11
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NiceAuthInterceptor, never>;
|
|
12
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<NiceAuthInterceptor>;
|
|
13
|
-
}
|
package/lib/api/mfa/mfa.api.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from "@angular/common/http";
|
|
2
|
-
import { Observable } from "rxjs";
|
|
3
|
-
import { NiceAuth0Options } from "../../nice-auth0-kit.options";
|
|
4
|
-
import { Auth0Api } from "../auth0.api";
|
|
5
|
-
import { Auth0MfaAddOobAuthenticatorRequest, Auth0MfaChallengeRequest } from "./model/mfa-request.model";
|
|
6
|
-
import { Auth0ChallengeResponse } from "./model/mfa-response.model";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export declare class Auth0MfaApi extends Auth0Api {
|
|
9
|
-
private options;
|
|
10
|
-
private http;
|
|
11
|
-
constructor(options: NiceAuth0Options, http: HttpClient);
|
|
12
|
-
challenge(req: Auth0MfaChallengeRequest): Observable<Auth0ChallengeResponse>;
|
|
13
|
-
associateOobAuthenticator(req: Auth0MfaAddOobAuthenticatorRequest): Observable<Auth0ChallengeResponse>;
|
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<Auth0MfaApi, never>;
|
|
15
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<Auth0MfaApi>;
|
|
16
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Auth0MfaApi } from "./mfa/mfa.api";
|
|
2
|
-
import { Auth0TokenApi } from "./token/token.api";
|
|
3
|
-
import { Auth0AuthorizationApi } from "./authorization/authorization.api";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class NiceAuth0Service {
|
|
6
|
-
mfa: Auth0MfaApi;
|
|
7
|
-
token: Auth0TokenApi;
|
|
8
|
-
authorization: Auth0AuthorizationApi;
|
|
9
|
-
constructor(mfa: Auth0MfaApi, token: Auth0TokenApi, authorization: Auth0AuthorizationApi);
|
|
10
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NiceAuth0Service, never>;
|
|
11
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<NiceAuth0Service>;
|
|
12
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from "@angular/common/http";
|
|
2
|
-
import { Observable } from "rxjs";
|
|
3
|
-
import { NiceAuth0Options } from "../../nice-auth0-kit.options";
|
|
4
|
-
import { Auth0Api } from "../auth0.api";
|
|
5
|
-
import { Auth0TokenResponse } from "./models/token-response.model";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class Auth0TokenApi extends Auth0Api {
|
|
8
|
-
private options;
|
|
9
|
-
private http;
|
|
10
|
-
constructor(options: NiceAuth0Options, http: HttpClient);
|
|
11
|
-
authWithPassword(username: string, password: string): Observable<Auth0TokenResponse>;
|
|
12
|
-
authWithOobCode(mfaToken: string, oobCode: string, bindingCode: string): Observable<Auth0TokenResponse>;
|
|
13
|
-
authWithAuthorizationCode(authCode: string, redirectUrl: string): Observable<Auth0TokenResponse>;
|
|
14
|
-
refreshToken(refreshToken: string): Observable<Auth0TokenResponse>;
|
|
15
|
-
revokeRefreshToken(refreshToken: string): Observable<void>;
|
|
16
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<Auth0TokenApi, never>;
|
|
17
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<Auth0TokenApi>;
|
|
18
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { ModuleWithProviders } from "@angular/core";
|
|
2
|
-
import { NiceAuth0Options } from "./nice-auth0-kit.options";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class NiceAuth0Module {
|
|
5
|
-
static forRoot(options: NiceAuth0Options): ModuleWithProviders<NiceAuth0Module>;
|
|
6
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NiceAuth0Module, never>;
|
|
7
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<NiceAuth0Module, never, never, never>;
|
|
8
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<NiceAuth0Module>;
|
|
9
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface NiceAuth0Options {
|
|
2
|
-
domain: string;
|
|
3
|
-
clientId: string;
|
|
4
|
-
clientSecret: string;
|
|
5
|
-
audience: string;
|
|
6
|
-
scopes: string[];
|
|
7
|
-
urlWhiteList?: string[];
|
|
8
|
-
/**
|
|
9
|
-
* Token to send in the Authorization Header
|
|
10
|
-
*/
|
|
11
|
-
authToken?: "accessToken" | "idToken";
|
|
12
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject, Observable } from "rxjs";
|
|
2
|
-
import { NiceAuth0Service } from "../api";
|
|
3
|
-
import { NiceAuth0Options } from "../nice-auth0-kit.options";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export interface LoginResponse {
|
|
6
|
-
success: boolean;
|
|
7
|
-
mfaRequired: boolean;
|
|
8
|
-
}
|
|
9
|
-
export interface SmsAuthenticator {
|
|
10
|
-
type: "sms";
|
|
11
|
-
phoneNumber: string;
|
|
12
|
-
}
|
|
13
|
-
export interface EmailAuthenticator {
|
|
14
|
-
type: "email";
|
|
15
|
-
email: string;
|
|
16
|
-
}
|
|
17
|
-
export interface AuthorizationFlowOptions {
|
|
18
|
-
connection?: string;
|
|
19
|
-
useStateValidation?: boolean;
|
|
20
|
-
}
|
|
21
|
-
export declare enum AuthorizationStateValidationResult {
|
|
22
|
-
Omitted = "omitted",
|
|
23
|
-
Success = "success",
|
|
24
|
-
Failure = "failure"
|
|
25
|
-
}
|
|
26
|
-
export interface AuthorizationFlowResponse {
|
|
27
|
-
path?: string;
|
|
28
|
-
code: string;
|
|
29
|
-
stateValidationResult: AuthorizationStateValidationResult;
|
|
30
|
-
}
|
|
31
|
-
export declare class NiceAuthenticationService {
|
|
32
|
-
private options;
|
|
33
|
-
private auth0Service;
|
|
34
|
-
private lastMfaChallengeToken;
|
|
35
|
-
private lastMfaOobCode;
|
|
36
|
-
private activeRefreshTokenRequest;
|
|
37
|
-
currentUser$: BehaviorSubject<any>;
|
|
38
|
-
constructor(options: NiceAuth0Options, auth0Service: NiceAuth0Service);
|
|
39
|
-
get idToken(): string;
|
|
40
|
-
set idToken(accessToken: string);
|
|
41
|
-
get accessToken(): string;
|
|
42
|
-
set accessToken(accessToken: string);
|
|
43
|
-
get refreshToken(): string;
|
|
44
|
-
set refreshToken(refreshToken: string);
|
|
45
|
-
get authToken(): string;
|
|
46
|
-
get idTokenPayload(): any;
|
|
47
|
-
get accessTokenPayload(): any;
|
|
48
|
-
get authTokenPayload(): any;
|
|
49
|
-
get currentUser(): any;
|
|
50
|
-
checkLoggedIn(): Observable<boolean>;
|
|
51
|
-
getAuthorizationToken(): Observable<string | null>;
|
|
52
|
-
validateToken(): boolean;
|
|
53
|
-
passwordGrant(username: string, password: string): Observable<LoginResponse>;
|
|
54
|
-
authorizationCodeGrant(code: string, redirectUrl: string): Observable<LoginResponse>;
|
|
55
|
-
getAuthFlowRequestUri(redirectUrl: string, options?: AuthorizationFlowOptions): Observable<string>;
|
|
56
|
-
checkAuthFlowResponse(expectedResponsePath?: string | string[]): Observable<AuthorizationFlowResponse | null>;
|
|
57
|
-
validateOobCode(code: string): Observable<void>;
|
|
58
|
-
logout(): Observable<void>;
|
|
59
|
-
generateNewToken(): Observable<string | null>;
|
|
60
|
-
addMfaAuthenticator(authenticator: SmsAuthenticator | EmailAuthenticator): Observable<void>;
|
|
61
|
-
triggerMfaChallenge(): Observable<void>;
|
|
62
|
-
private catchGrantError;
|
|
63
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NiceAuthenticationService, never>;
|
|
64
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<NiceAuthenticationService>;
|
|
65
|
-
}
|
package/lib/providers/index.d.ts
DELETED
package/public-api.d.ts
DELETED