@fusionauth/angular-sdk 0.1.7 → 1.0.2
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/README.md +41 -66
- package/esm2022/lib/components/fusionauth-login.button/fusion-auth-login-button.component.mjs +3 -3
- package/esm2022/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs +3 -3
- package/esm2022/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs +3 -3
- package/esm2022/lib/core.mjs +217 -0
- package/esm2022/lib/fusion-auth.module.mjs +4 -4
- package/esm2022/lib/fusion-auth.service.mjs +58 -94
- package/esm2022/lib/types.mjs +1 -1
- package/fesm2022/fusionauth-angular-sdk.mjs +285 -106
- package/fesm2022/fusionauth-angular-sdk.mjs.map +1 -1
- package/lib/core.d.ts +35 -0
- package/lib/fusion-auth.service.d.ts +26 -17
- package/lib/types.d.ts +48 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,23 +3,15 @@ An SDK for using FusionAuth in Angular applications.
|
|
|
3
3
|
# Table of Contents
|
|
4
4
|
|
|
5
5
|
- [Overview](#overview)
|
|
6
|
-
|
|
7
6
|
- [Getting Started](#getting-started)
|
|
8
|
-
|
|
9
7
|
- [Installation](#installation)
|
|
10
|
-
|
|
11
8
|
- [Usage](#usage)
|
|
12
|
-
|
|
9
|
+
- [FusionAuthService](#fusionauthservice)
|
|
13
10
|
- [Pre-built buttons](#pre-built-buttons)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- [Known issues](#known-issues)
|
|
18
|
-
|
|
11
|
+
- [State Parameter](#state-parameter)
|
|
12
|
+
- [Known issues](#known-issues)
|
|
19
13
|
- [Quickstart](#quickstart)
|
|
20
|
-
|
|
21
14
|
- [Documentation](#documentation)
|
|
22
|
-
|
|
23
15
|
- [Releases](#releases)
|
|
24
16
|
|
|
25
17
|
<!--
|
|
@@ -34,9 +26,7 @@ Please also use ``` instead of indenting for code blocks. The backticks are tran
|
|
|
34
26
|
tag::forDocSite[]
|
|
35
27
|
-->
|
|
36
28
|
|
|
37
|
-
This SDK
|
|
38
|
-
your Angular application. You can do this via pre-built buttons, or with
|
|
39
|
-
the FusionAuthService in your own components.
|
|
29
|
+
This SDK helps manage authentication state for your Angular app and provides functionality to login, register, and logout users. It also can be configured to automatically manage your refresh token.
|
|
40
30
|
|
|
41
31
|
Your users will be sent to FusionAuth’s themeable hosted login pages and
|
|
42
32
|
then log in. After that, they are sent back to your Angular application.
|
|
@@ -96,6 +86,7 @@ import { FusionAuthModule } from '@fusionauth/angular-sdk';
|
|
|
96
86
|
clientId: '', // Your FusionAuth client ID
|
|
97
87
|
serverUrl: '', // The base URL of the server that performs the token exchange
|
|
98
88
|
redirectUri: '', // The URI that the user is directed to after the login/register/logout action
|
|
89
|
+
shouldAutoRefresh: true // option to configure the SDK to automatically handle token refresh. Defaults to false if not specified here.
|
|
99
90
|
}),
|
|
100
91
|
],
|
|
101
92
|
providers: [],
|
|
@@ -106,6 +97,41 @@ export class AppModule { }
|
|
|
106
97
|
|
|
107
98
|
## Usage
|
|
108
99
|
|
|
100
|
+
### FusionAuthService
|
|
101
|
+
|
|
102
|
+
The injectable `FusionAuthService` class provides observable properties to which components may subscribe.
|
|
103
|
+
|
|
104
|
+
Note, you can also use the non-observable `getUserInfo` method if you wish to implement your observables.
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
class AppComponent implements OnInit, OnDestroy {
|
|
108
|
+
private fusionAuthService: FusionAuthService = inject(FusionAuthService);
|
|
109
|
+
|
|
110
|
+
isLoggedIn: boolean = this.fusionAuthService.isLoggedIn();
|
|
111
|
+
userInfo: UserInfo | null = null;
|
|
112
|
+
isGettingUserInfo: boolean = false;
|
|
113
|
+
subscription?: Subscription;
|
|
114
|
+
|
|
115
|
+
ngOnInit(): void {
|
|
116
|
+
if (this.isLoggedIn) {
|
|
117
|
+
this.subscription = this.fusionAuthService
|
|
118
|
+
.getUserInfoObservable({
|
|
119
|
+
onBegin: () => (this.isGettingUserInfo = true),
|
|
120
|
+
onDone: () => (this.isGettingUserInfo = false),
|
|
121
|
+
})
|
|
122
|
+
.subscribe({
|
|
123
|
+
next: (userInfo) => (this.userInfo = userInfo),
|
|
124
|
+
error: (error) => console.error(error),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
ngOnDestroy(): void {
|
|
130
|
+
this.subscription?.unsubscribe();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
109
135
|
### Pre-built buttons
|
|
110
136
|
|
|
111
137
|
There are three pre-styled buttons that are configured to perform
|
|
@@ -137,56 +163,6 @@ export class LogoutComponent {}
|
|
|
137
163
|
export class RegisterComponent {}
|
|
138
164
|
```
|
|
139
165
|
|
|
140
|
-
### Service usage
|
|
141
|
-
|
|
142
|
-
Alternatively, you may interact with the SDK Service by injecting the FusionAuthService into any component or service.
|
|
143
|
-
|
|
144
|
-
```typescript
|
|
145
|
-
import { Component, OnInit } from '@angular/core';
|
|
146
|
-
import { FusionAuthService, UserInfo } from '@fusionauth/angular-sdk';
|
|
147
|
-
|
|
148
|
-
@Component({
|
|
149
|
-
selector: 'app-root',
|
|
150
|
-
templateUrl: './app.component.html',
|
|
151
|
-
styleUrls: ['./app.component.scss']
|
|
152
|
-
})
|
|
153
|
-
export class AppComponent implements OnInit {
|
|
154
|
-
private userInfo: UserInfo;
|
|
155
|
-
|
|
156
|
-
constructor(
|
|
157
|
-
private fusionAuth: FusionAuthService,
|
|
158
|
-
) {}
|
|
159
|
-
|
|
160
|
-
async ngOnInit(): Promise<void> {
|
|
161
|
-
this.fusionAuth.initAutoRefresh();
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
login() {
|
|
165
|
-
this.fusionAuth.startLogin();
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
register() {
|
|
169
|
-
this.fusionAuth.startRegistration();
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
logout() {
|
|
173
|
-
this.fusionAuth.logout();
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
refreshToken() {
|
|
177
|
-
this.fusionAuth.refreshToken();
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
async getUserInfo() {
|
|
181
|
-
this.userInfo = await this.fusionAuth.getUserInfo();
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
isLoggedIn(): boolean {
|
|
185
|
-
return this.fusionAuth.isLoggedIn();
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
```
|
|
189
|
-
|
|
190
166
|
#### State parameter
|
|
191
167
|
|
|
192
168
|
The `startLogin` and `startRegistration` functions both accept an optional string
|
|
@@ -208,8 +184,7 @@ See the [FusionAuth Angular Quickstart](https://fusionauth.io/docs/quickstarts/q
|
|
|
208
184
|
|
|
209
185
|
## Documentation
|
|
210
186
|
|
|
211
|
-
[Full library
|
|
212
|
-
documentation](https://github.com/FusionAuth/fusionauth-angular-sdk/blob/main/docs/documentation.md)
|
|
187
|
+
[Full library documentation](https://github.com/FusionAuth/fusionauth-javascript-sdk/tree/main/packages/sdk-angular/docs)
|
|
213
188
|
|
|
214
189
|
<!--
|
|
215
190
|
end::forDocSite[]
|
package/esm2022/lib/components/fusionauth-login.button/fusion-auth-login-button.component.mjs
CHANGED
|
@@ -8,10 +8,10 @@ export class FusionAuthLoginButtonComponent {
|
|
|
8
8
|
login() {
|
|
9
9
|
this.fusionAuth.startLogin(this.state);
|
|
10
10
|
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
12
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: FusionAuthLoginButtonComponent, selector: "fa-login", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
|
|
15
15
|
type: Component,
|
|
16
16
|
args: [{ selector: 'fa-login', template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
|
|
17
17
|
}], ctorParameters: () => [{ type: i1.FusionAuthService }], propDecorators: { state: [{
|
package/esm2022/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs
CHANGED
|
@@ -8,10 +8,10 @@ export class FusionAuthLogoutButtonComponent {
|
|
|
8
8
|
logout() {
|
|
9
9
|
this.fusionAuth.logout();
|
|
10
10
|
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
12
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: FusionAuthLogoutButtonComponent, selector: "fa-logout", ngImport: i0, template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
|
|
15
15
|
type: Component,
|
|
16
16
|
args: [{ selector: 'fa-logout', template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] }]
|
|
17
17
|
}], ctorParameters: () => [{ type: i1.FusionAuthService }] });
|
package/esm2022/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs
CHANGED
|
@@ -8,10 +8,10 @@ export class FusionAuthRegisterButtonComponent {
|
|
|
8
8
|
register() {
|
|
9
9
|
this.fusionAuth.startRegistration(this.state);
|
|
10
10
|
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
12
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: FusionAuthRegisterButtonComponent, selector: "fa-register", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }); }
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
|
|
15
15
|
type: Component,
|
|
16
16
|
args: [{ selector: 'fa-register', template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
|
|
17
17
|
}], ctorParameters: () => [{ type: i1.FusionAuthService }], propDecorators: { state: [{
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
const u = Object.defineProperty;
|
|
3
|
+
const d = (r, e, t) => e in r
|
|
4
|
+
? u(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t })
|
|
5
|
+
: (r[e] = t);
|
|
6
|
+
const i = (r, e, t) => (d(r, typeof e != 'symbol' ? e + '' : e, t), t);
|
|
7
|
+
class g {
|
|
8
|
+
constructor(e) {
|
|
9
|
+
i(this, 'serverUrl');
|
|
10
|
+
i(this, 'clientId');
|
|
11
|
+
i(this, 'redirectUri');
|
|
12
|
+
i(this, 'scope');
|
|
13
|
+
i(this, 'mePath');
|
|
14
|
+
i(this, 'loginPath');
|
|
15
|
+
i(this, 'registerPath');
|
|
16
|
+
i(this, 'logoutPath');
|
|
17
|
+
i(this, 'tokenRefreshPath');
|
|
18
|
+
(this.serverUrl = e.serverUrl),
|
|
19
|
+
(this.clientId = e.clientId),
|
|
20
|
+
(this.redirectUri = e.redirectUri),
|
|
21
|
+
(this.scope = e.scope),
|
|
22
|
+
(this.mePath = e.mePath ?? '/app/me'),
|
|
23
|
+
(this.loginPath = e.loginPath ?? '/app/login'),
|
|
24
|
+
(this.registerPath = e.registerPath ?? '/app/register'),
|
|
25
|
+
(this.logoutPath = e.logoutPath ?? '/app/logout'),
|
|
26
|
+
(this.tokenRefreshPath = e.tokenRefreshPath ?? '/app/refresh');
|
|
27
|
+
}
|
|
28
|
+
getMeUrl() {
|
|
29
|
+
return this.generateUrl(this.mePath);
|
|
30
|
+
}
|
|
31
|
+
getLoginUrl(e) {
|
|
32
|
+
return this.generateUrl(this.loginPath, {
|
|
33
|
+
client_id: this.clientId,
|
|
34
|
+
redirect_uri: this.redirectUri,
|
|
35
|
+
scope: this.scope,
|
|
36
|
+
state: e,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
getRegisterUrl(e) {
|
|
40
|
+
return this.generateUrl(this.registerPath, {
|
|
41
|
+
client_id: this.clientId,
|
|
42
|
+
redirect_uri: this.redirectUri,
|
|
43
|
+
scope: this.scope,
|
|
44
|
+
state: e,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
getLogoutUrl() {
|
|
48
|
+
return this.generateUrl(this.logoutPath, {
|
|
49
|
+
client_id: this.clientId,
|
|
50
|
+
post_logout_redirect_uri: this.redirectUri,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
getTokenRefreshUrl() {
|
|
54
|
+
return this.generateUrl(this.tokenRefreshPath, {
|
|
55
|
+
client_id: this.clientId,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
generateUrl(e, t) {
|
|
59
|
+
const s = new URL(this.serverUrl);
|
|
60
|
+
if (((s.pathname = e), t)) {
|
|
61
|
+
const o = this.generateURLSearchParams(t);
|
|
62
|
+
s.search = o.toString();
|
|
63
|
+
}
|
|
64
|
+
return s;
|
|
65
|
+
}
|
|
66
|
+
generateURLSearchParams(e) {
|
|
67
|
+
const t = new URLSearchParams();
|
|
68
|
+
return (Object.entries(e).forEach(([s, o]) => {
|
|
69
|
+
o && t.append(s, o);
|
|
70
|
+
}),
|
|
71
|
+
t);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
class p {
|
|
75
|
+
constructor() {
|
|
76
|
+
i(this, 'REDIRECT_VALUE', 'fa-sdk-redirect-value');
|
|
77
|
+
}
|
|
78
|
+
handlePreRedirect(e) {
|
|
79
|
+
const t = `${this.generateRandomString()}:${e ?? ''}`;
|
|
80
|
+
localStorage.setItem(this.REDIRECT_VALUE, t);
|
|
81
|
+
}
|
|
82
|
+
handlePostRedirect(e) {
|
|
83
|
+
const t = this.stateValue ?? void 0;
|
|
84
|
+
e == null || e(t), localStorage.removeItem(this.REDIRECT_VALUE);
|
|
85
|
+
}
|
|
86
|
+
get didRedirect() {
|
|
87
|
+
return !!localStorage.getItem(this.REDIRECT_VALUE);
|
|
88
|
+
}
|
|
89
|
+
get stateValue() {
|
|
90
|
+
const e = localStorage.getItem(this.REDIRECT_VALUE);
|
|
91
|
+
if (!e)
|
|
92
|
+
return null;
|
|
93
|
+
const [, ...t] = e.split(':');
|
|
94
|
+
return t.join(':');
|
|
95
|
+
}
|
|
96
|
+
generateRandomString() {
|
|
97
|
+
const e = new Uint32Array(28);
|
|
98
|
+
return (window.crypto.getRandomValues(e),
|
|
99
|
+
Array.from(e, t => ('0' + t.toString(16)).substring(-2)).join(''));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function m(r = 'app.at_exp') {
|
|
103
|
+
const e = document.cookie
|
|
104
|
+
.split('; ')
|
|
105
|
+
.map(s => s.split('='))
|
|
106
|
+
.find(([s]) => s === r), t = e == null ? void 0 : e[1];
|
|
107
|
+
return t ? parseInt(t) * 1e3 : null;
|
|
108
|
+
}
|
|
109
|
+
class U {
|
|
110
|
+
constructor(e) {
|
|
111
|
+
i(this, 'config');
|
|
112
|
+
i(this, 'urlHelper');
|
|
113
|
+
i(this, 'redirectHelper', new p());
|
|
114
|
+
i(this, 'tokenExpirationTimeout');
|
|
115
|
+
(this.config = e),
|
|
116
|
+
(this.urlHelper = new g({
|
|
117
|
+
serverUrl: e.serverUrl,
|
|
118
|
+
clientId: e.clientId,
|
|
119
|
+
redirectUri: e.redirectUri,
|
|
120
|
+
scope: e.scope,
|
|
121
|
+
mePath: e.mePath,
|
|
122
|
+
loginPath: e.loginPath,
|
|
123
|
+
registerPath: e.registerPath,
|
|
124
|
+
logoutPath: e.logoutPath,
|
|
125
|
+
tokenRefreshPath: e.tokenRefreshPath,
|
|
126
|
+
})),
|
|
127
|
+
this.scheduleTokenExpiration();
|
|
128
|
+
}
|
|
129
|
+
startLogin(e) {
|
|
130
|
+
this.redirectHelper.handlePreRedirect(e),
|
|
131
|
+
window.location.assign(this.urlHelper.getLoginUrl(e));
|
|
132
|
+
}
|
|
133
|
+
startRegister(e) {
|
|
134
|
+
this.redirectHelper.handlePreRedirect(e),
|
|
135
|
+
window.location.assign(this.urlHelper.getRegisterUrl(e));
|
|
136
|
+
}
|
|
137
|
+
startLogout() {
|
|
138
|
+
window.location.assign(this.urlHelper.getLogoutUrl());
|
|
139
|
+
}
|
|
140
|
+
async fetchUserInfo() {
|
|
141
|
+
const e = await fetch(this.urlHelper.getMeUrl(), {
|
|
142
|
+
credentials: 'include',
|
|
143
|
+
});
|
|
144
|
+
if (!e.ok)
|
|
145
|
+
throw new Error(`Unable to fetch userInfo in fusionauth. Request failed with status code ${e == null ? void 0 : e.status}`);
|
|
146
|
+
return await e.json();
|
|
147
|
+
}
|
|
148
|
+
async refreshToken() {
|
|
149
|
+
const e = await fetch(this.urlHelper.getTokenRefreshUrl(), {
|
|
150
|
+
method: 'POST',
|
|
151
|
+
credentials: 'include',
|
|
152
|
+
headers: {
|
|
153
|
+
'Content-Type': 'text/plain',
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
if (!(e.status >= 200 && e.status < 300)) {
|
|
157
|
+
const t = (await (e == null ? void 0 : e.text())) ||
|
|
158
|
+
'Error refreshing access token in fusionauth';
|
|
159
|
+
throw new Error(t);
|
|
160
|
+
}
|
|
161
|
+
return this.scheduleTokenExpiration(), e;
|
|
162
|
+
}
|
|
163
|
+
initAutoRefresh() {
|
|
164
|
+
const e = this.at_exp, t = this.config.autoRefreshSecondsBeforeExpiry ?? 10;
|
|
165
|
+
if (!e)
|
|
166
|
+
return;
|
|
167
|
+
const s = t * 1e3, o = /* @__PURE__ */ new Date().getTime(), h = e - s, l = Math.max(h - o, 0);
|
|
168
|
+
return setTimeout(async () => {
|
|
169
|
+
let n, a;
|
|
170
|
+
try {
|
|
171
|
+
await this.refreshToken(), this.initAutoRefresh();
|
|
172
|
+
}
|
|
173
|
+
catch (c) {
|
|
174
|
+
(a = (n = this.config).onAutoRefreshFailure) == null || a.call(n, c);
|
|
175
|
+
}
|
|
176
|
+
}, l);
|
|
177
|
+
}
|
|
178
|
+
handlePostRedirect(e) {
|
|
179
|
+
this.isLoggedIn &&
|
|
180
|
+
this.redirectHelper.didRedirect &&
|
|
181
|
+
this.redirectHelper.handlePostRedirect(e);
|
|
182
|
+
}
|
|
183
|
+
get isLoggedIn() {
|
|
184
|
+
return this.at_exp
|
|
185
|
+
? this.at_exp > /* @__PURE__ */ new Date().getTime()
|
|
186
|
+
: !1;
|
|
187
|
+
}
|
|
188
|
+
/** The moment of access token expiration in milliseconds since epoch. */
|
|
189
|
+
get at_exp() {
|
|
190
|
+
return m(this.config.accessTokenExpireCookieName);
|
|
191
|
+
}
|
|
192
|
+
/** Schedules `onTokenExpiration` at moment of access token expiration. */
|
|
193
|
+
scheduleTokenExpiration() {
|
|
194
|
+
clearTimeout(this.tokenExpirationTimeout);
|
|
195
|
+
const e = this.at_exp ?? -1, t = /* @__PURE__ */ new Date().getTime(), s = e - t;
|
|
196
|
+
s > 0 &&
|
|
197
|
+
(this.tokenExpirationTimeout = setTimeout(this.config.onTokenExpiration, s));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function P() {
|
|
201
|
+
const r = /* @__PURE__ */ new Date();
|
|
202
|
+
r.setHours(r.getHours() + 1);
|
|
203
|
+
const e = r.getTime() / 1e3;
|
|
204
|
+
document.cookie = `app.at_exp=${e}`;
|
|
205
|
+
}
|
|
206
|
+
function f() {
|
|
207
|
+
document.cookie = 'app.at_exp=;expires=Thu, 01 Jan 1970 00:00:00 GMT';
|
|
208
|
+
}
|
|
209
|
+
function w(r) {
|
|
210
|
+
const e = {
|
|
211
|
+
...window.location,
|
|
212
|
+
assign: r.fn(),
|
|
213
|
+
};
|
|
214
|
+
return r.spyOn(window, 'location', 'get').mockReturnValue(e), e;
|
|
215
|
+
}
|
|
216
|
+
export { U as SDKCore, P as mockIsLoggedIn, w as mockWindowLocation, f as removeAt_expCookie, };
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWM7QUFDZCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNwQixDQUFDLElBQUksQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE1BQU0sQ0FBQztJQUNMLFlBQVksQ0FBQztRQUNYLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLElBQUksRUFB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QUNELFNBQVMsQ0FBQztJQUNSLFFBQVEsQ0FBQyxNQUFNLEdBQUcsbURBQW1ELENBQUM7QUFDeEUsQ0FBQztBQUNELFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDVixNQUFNLENBQUMsR0FBRztRQUNSLEdBQUcsTUFBTSxDQUFDLFFBQVE7UUFDbEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7S0FDZixDQUFDO0lBQ0YsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBQ0QsT0FBTyxFQUNMLENBQUMsSUFBSSxPQUFPLEVBQ1osQ0FBQyxJQUFJLGNBQWMsRUFDbkIsQ0FBQyxJQUFJLGtCQUFrQixFQUN2QixDQUFDLElBQUksa0JBQWtCLEdBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtbm9jaGVja1xuY29uc3QgdSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbmNvbnN0IGQgPSAociwgZSwgdCkgPT5cbiAgZSBpbiByXG4gICAgPyB1KHIsIGUsIHsgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCwgdmFsdWU6IHQgfSlcbiAgICA6IChyW2VdID0gdCk7XG5jb25zdCBpID0gKHIsIGUsIHQpID0+IChkKHIsIHR5cGVvZiBlICE9ICdzeW1ib2wnID8gZSArICcnIDogZSwgdCksIHQpO1xuY2xhc3MgZyB7XG4gIGNvbnN0cnVjdG9yKGUpIHtcbiAgICBpKHRoaXMsICdzZXJ2ZXJVcmwnKTtcbiAgICBpKHRoaXMsICdjbGllbnRJZCcpO1xuICAgIGkodGhpcywgJ3JlZGlyZWN0VXJpJyk7XG4gICAgaSh0aGlzLCAnc2NvcGUnKTtcbiAgICBpKHRoaXMsICdtZVBhdGgnKTtcbiAgICBpKHRoaXMsICdsb2dpblBhdGgnKTtcbiAgICBpKHRoaXMsICdyZWdpc3RlclBhdGgnKTtcbiAgICBpKHRoaXMsICdsb2dvdXRQYXRoJyk7XG4gICAgaSh0aGlzLCAndG9rZW5SZWZyZXNoUGF0aCcpO1xuICAgICh0aGlzLnNlcnZlclVybCA9IGUuc2VydmVyVXJsKSxcbiAgICAgICh0aGlzLmNsaWVudElkID0gZS5jbGllbnRJZCksXG4gICAgICAodGhpcy5yZWRpcmVjdFVyaSA9IGUucmVkaXJlY3RVcmkpLFxuICAgICAgKHRoaXMuc2NvcGUgPSBlLnNjb3BlKSxcbiAgICAgICh0aGlzLm1lUGF0aCA9IGUubWVQYXRoID8/ICcvYXBwL21lJyksXG4gICAgICAodGhpcy5sb2dpblBhdGggPSBlLmxvZ2luUGF0aCA/PyAnL2FwcC9sb2dpbicpLFxuICAgICAgKHRoaXMucmVnaXN0ZXJQYXRoID0gZS5yZWdpc3RlclBhdGggPz8gJy9hcHAvcmVnaXN0ZXInKSxcbiAgICAgICh0aGlzLmxvZ291dFBhdGggPSBlLmxvZ291dFBhdGggPz8gJy9hcHAvbG9nb3V0JyksXG4gICAgICAodGhpcy50b2tlblJlZnJlc2hQYXRoID0gZS50b2tlblJlZnJlc2hQYXRoID8/ICcvYXBwL3JlZnJlc2gnKTtcbiAgfVxuICBnZXRNZVVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVVybCh0aGlzLm1lUGF0aCk7XG4gIH1cbiAgZ2V0TG9naW5VcmwoZSkge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlVXJsKHRoaXMubG9naW5QYXRoLCB7XG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6IHRoaXMucmVkaXJlY3RVcmksXG4gICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgIHN0YXRlOiBlLFxuICAgIH0pO1xuICB9XG4gIGdldFJlZ2lzdGVyVXJsKGUpIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVVybCh0aGlzLnJlZ2lzdGVyUGF0aCwge1xuICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0VXJpLFxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGUsXG4gICAgICBzdGF0ZTogZSxcbiAgICB9KTtcbiAgfVxuICBnZXRMb2dvdXRVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVVcmwodGhpcy5sb2dvdXRQYXRoLCB7XG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk6IHRoaXMucmVkaXJlY3RVcmksXG4gICAgfSk7XG4gIH1cbiAgZ2V0VG9rZW5SZWZyZXNoVXJsKCkge1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlVXJsKHRoaXMudG9rZW5SZWZyZXNoUGF0aCwge1xuICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgIH0pO1xuICB9XG4gIGdlbmVyYXRlVXJsKGUsIHQpIHtcbiAgICBjb25zdCBzID0gbmV3IFVSTCh0aGlzLnNlcnZlclVybCk7XG4gICAgaWYgKCgocy5wYXRobmFtZSA9IGUpLCB0KSkge1xuICAgICAgY29uc3QgbyA9IHRoaXMuZ2VuZXJhdGVVUkxTZWFyY2hQYXJhbXModCk7XG4gICAgICBzLnNlYXJjaCA9IG8udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgZ2VuZXJhdGVVUkxTZWFyY2hQYXJhbXMoZSkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKFtzLCBvXSkgPT4ge1xuICAgICAgICBvICYmIHQuYXBwZW5kKHMsIG8pO1xuICAgICAgfSksXG4gICAgICB0XG4gICAgKTtcbiAgfVxufVxuY2xhc3MgcCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGkodGhpcywgJ1JFRElSRUNUX1ZBTFVFJywgJ2ZhLXNkay1yZWRpcmVjdC12YWx1ZScpO1xuICB9XG4gIGhhbmRsZVByZVJlZGlyZWN0KGUpIHtcbiAgICBjb25zdCB0ID0gYCR7dGhpcy5nZW5lcmF0ZVJhbmRvbVN0cmluZygpfToke2UgPz8gJyd9YDtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlJFRElSRUNUX1ZBTFVFLCB0KTtcbiAgfVxuICBoYW5kbGVQb3N0UmVkaXJlY3QoZSkge1xuICAgIGNvbnN0IHQgPSB0aGlzLnN0YXRlVmFsdWUgPz8gdm9pZCAwO1xuICAgIGUgPT0gbnVsbCB8fCBlKHQpLCBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlJFRElSRUNUX1ZBTFVFKTtcbiAgfVxuICBnZXQgZGlkUmVkaXJlY3QoKSB7XG4gICAgcmV0dXJuICEhbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5SRURJUkVDVF9WQUxVRSk7XG4gIH1cbiAgZ2V0IHN0YXRlVmFsdWUoKSB7XG4gICAgY29uc3QgZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuUkVESVJFQ1RfVkFMVUUpO1xuICAgIGlmICghZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgWywgLi4udF0gPSBlLnNwbGl0KCc6Jyk7XG4gICAgcmV0dXJuIHQuam9pbignOicpO1xuICB9XG4gIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCkge1xuICAgIGNvbnN0IGUgPSBuZXcgVWludDMyQXJyYXkoMjgpO1xuICAgIHJldHVybiAoXG4gICAgICB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxcbiAgICAgIEFycmF5LmZyb20oZSwgdCA9PiAoJzAnICsgdC50b1N0cmluZygxNikpLnN1YnN0cmluZygtMikpLmpvaW4oJycpXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gbShyID0gJ2FwcC5hdF9leHAnKSB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWVcbiAgICAgIC5zcGxpdCgnOyAnKVxuICAgICAgLm1hcChzID0+IHMuc3BsaXQoJz0nKSlcbiAgICAgIC5maW5kKChbc10pID0+IHMgPT09IHIpLFxuICAgIHQgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlWzFdO1xuICByZXR1cm4gdCA/IHBhcnNlSW50KHQpICogMWUzIDogbnVsbDtcbn1cbmNsYXNzIFUge1xuICBjb25zdHJ1Y3RvcihlKSB7XG4gICAgaSh0aGlzLCAnY29uZmlnJyk7XG4gICAgaSh0aGlzLCAndXJsSGVscGVyJyk7XG4gICAgaSh0aGlzLCAncmVkaXJlY3RIZWxwZXInLCBuZXcgcCgpKTtcbiAgICBpKHRoaXMsICd0b2tlbkV4cGlyYXRpb25UaW1lb3V0Jyk7XG4gICAgKHRoaXMuY29uZmlnID0gZSksXG4gICAgICAodGhpcy51cmxIZWxwZXIgPSBuZXcgZyh7XG4gICAgICAgIHNlcnZlclVybDogZS5zZXJ2ZXJVcmwsXG4gICAgICAgIGNsaWVudElkOiBlLmNsaWVudElkLFxuICAgICAgICByZWRpcmVjdFVyaTogZS5yZWRpcmVjdFVyaSxcbiAgICAgICAgc2NvcGU6IGUuc2NvcGUsXG4gICAgICAgIG1lUGF0aDogZS5tZVBhdGgsXG4gICAgICAgIGxvZ2luUGF0aDogZS5sb2dpblBhdGgsXG4gICAgICAgIHJlZ2lzdGVyUGF0aDogZS5yZWdpc3RlclBhdGgsXG4gICAgICAgIGxvZ291dFBhdGg6IGUubG9nb3V0UGF0aCxcbiAgICAgICAgdG9rZW5SZWZyZXNoUGF0aDogZS50b2tlblJlZnJlc2hQYXRoLFxuICAgICAgfSkpLFxuICAgICAgdGhpcy5zY2hlZHVsZVRva2VuRXhwaXJhdGlvbigpO1xuICB9XG4gIHN0YXJ0TG9naW4oZSkge1xuICAgIHRoaXMucmVkaXJlY3RIZWxwZXIuaGFuZGxlUHJlUmVkaXJlY3QoZSksXG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRoaXMudXJsSGVscGVyLmdldExvZ2luVXJsKGUpKTtcbiAgfVxuICBzdGFydFJlZ2lzdGVyKGUpIHtcbiAgICB0aGlzLnJlZGlyZWN0SGVscGVyLmhhbmRsZVByZVJlZGlyZWN0KGUpLFxuICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih0aGlzLnVybEhlbHBlci5nZXRSZWdpc3RlclVybChlKSk7XG4gIH1cbiAgc3RhcnRMb2dvdXQoKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih0aGlzLnVybEhlbHBlci5nZXRMb2dvdXRVcmwoKSk7XG4gIH1cbiAgYXN5bmMgZmV0Y2hVc2VySW5mbygpIHtcbiAgICBjb25zdCBlID0gYXdhaXQgZmV0Y2godGhpcy51cmxIZWxwZXIuZ2V0TWVVcmwoKSwge1xuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICB9KTtcbiAgICBpZiAoIWUub2spXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbmFibGUgdG8gZmV0Y2ggdXNlckluZm8gaW4gZnVzaW9uYXV0aC4gUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAke2UgPT0gbnVsbCA/IHZvaWQgMCA6IGUuc3RhdHVzfWAsXG4gICAgICApO1xuICAgIHJldHVybiBhd2FpdCBlLmpzb24oKTtcbiAgfVxuICBhc3luYyByZWZyZXNoVG9rZW4oKSB7XG4gICAgY29uc3QgZSA9IGF3YWl0IGZldGNoKHRoaXMudXJsSGVscGVyLmdldFRva2VuUmVmcmVzaFVybCgpLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbicsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmICghKGUuc3RhdHVzID49IDIwMCAmJiBlLnN0YXR1cyA8IDMwMCkpIHtcbiAgICAgIGNvbnN0IHQgPVxuICAgICAgICAoYXdhaXQgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGV4dCgpKSkgfHxcbiAgICAgICAgJ0Vycm9yIHJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGluIGZ1c2lvbmF1dGgnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZVRva2VuRXhwaXJhdGlvbigpLCBlO1xuICB9XG4gIGluaXRBdXRvUmVmcmVzaCgpIHtcbiAgICBjb25zdCBlID0gdGhpcy5hdF9leHAsXG4gICAgICB0ID0gdGhpcy5jb25maWcuYXV0b1JlZnJlc2hTZWNvbmRzQmVmb3JlRXhwaXJ5ID8/IDEwO1xuICAgIGlmICghZSkgcmV0dXJuO1xuICAgIGNvbnN0IHMgPSB0ICogMWUzLFxuICAgICAgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgIGggPSBlIC0gcyxcbiAgICAgIGwgPSBNYXRoLm1heChoIC0gbywgMCk7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IG4sIGE7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbigpLCB0aGlzLmluaXRBdXRvUmVmcmVzaCgpO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAoYSA9IChuID0gdGhpcy5jb25maWcpLm9uQXV0b1JlZnJlc2hGYWlsdXJlKSA9PSBudWxsIHx8IGEuY2FsbChuLCBjKTtcbiAgICAgIH1cbiAgICB9LCBsKTtcbiAgfVxuICBoYW5kbGVQb3N0UmVkaXJlY3QoZSkge1xuICAgIHRoaXMuaXNMb2dnZWRJbiAmJlxuICAgICAgdGhpcy5yZWRpcmVjdEhlbHBlci5kaWRSZWRpcmVjdCAmJlxuICAgICAgdGhpcy5yZWRpcmVjdEhlbHBlci5oYW5kbGVQb3N0UmVkaXJlY3QoZSk7XG4gIH1cbiAgZ2V0IGlzTG9nZ2VkSW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXRfZXhwXG4gICAgICA/IHRoaXMuYXRfZXhwID4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICA6ICExO1xuICB9XG4gIC8qKiBUaGUgbW9tZW50IG9mIGFjY2VzcyB0b2tlbiBleHBpcmF0aW9uIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBlcG9jaC4gKi9cbiAgZ2V0IGF0X2V4cCgpIHtcbiAgICByZXR1cm4gbSh0aGlzLmNvbmZpZy5hY2Nlc3NUb2tlbkV4cGlyZUNvb2tpZU5hbWUpO1xuICB9XG4gIC8qKiBTY2hlZHVsZXMgYG9uVG9rZW5FeHBpcmF0aW9uYCBhdCBtb21lbnQgb2YgYWNjZXNzIHRva2VuIGV4cGlyYXRpb24uICovXG4gIHNjaGVkdWxlVG9rZW5FeHBpcmF0aW9uKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRva2VuRXhwaXJhdGlvblRpbWVvdXQpO1xuICAgIGNvbnN0IGUgPSB0aGlzLmF0X2V4cCA/PyAtMSxcbiAgICAgIHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICBzID0gZSAtIHQ7XG4gICAgcyA+IDAgJiZcbiAgICAgICh0aGlzLnRva2VuRXhwaXJhdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICB0aGlzLmNvbmZpZy5vblRva2VuRXhwaXJhdGlvbixcbiAgICAgICAgcyxcbiAgICAgICkpO1xuICB9XG59XG5mdW5jdGlvbiBQKCkge1xuICBjb25zdCByID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIHIuc2V0SG91cnMoci5nZXRIb3VycygpICsgMSk7XG4gIGNvbnN0IGUgPSByLmdldFRpbWUoKSAvIDFlMztcbiAgZG9jdW1lbnQuY29va2llID0gYGFwcC5hdF9leHA9JHtlfWA7XG59XG5mdW5jdGlvbiBmKCkge1xuICBkb2N1bWVudC5jb29raWUgPSAnYXBwLmF0X2V4cD07ZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCc7XG59XG5mdW5jdGlvbiB3KHIpIHtcbiAgY29uc3QgZSA9IHtcbiAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgYXNzaWduOiByLmZuKCksXG4gIH07XG4gIHJldHVybiByLnNweU9uKHdpbmRvdywgJ2xvY2F0aW9uJywgJ2dldCcpLm1vY2tSZXR1cm5WYWx1ZShlKSwgZTtcbn1cbmV4cG9ydCB7XG4gIFUgYXMgU0RLQ29yZSxcbiAgUCBhcyBtb2NrSXNMb2dnZWRJbixcbiAgdyBhcyBtb2NrV2luZG93TG9jYXRpb24sXG4gIGYgYXMgcmVtb3ZlQXRfZXhwQ29va2llLFxufTtcbiJdfQ==
|
|
@@ -16,15 +16,15 @@ export class FusionAuthModule {
|
|
|
16
16
|
],
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
20
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
19
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
20
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
|
|
21
21
|
FusionAuthLogoutButtonComponent,
|
|
22
22
|
FusionAuthRegisterButtonComponent], exports: [FusionAuthLoginButtonComponent,
|
|
23
23
|
FusionAuthLogoutButtonComponent,
|
|
24
24
|
FusionAuthRegisterButtonComponent] }); }
|
|
25
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
25
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule }); }
|
|
26
26
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, decorators: [{
|
|
28
28
|
type: NgModule,
|
|
29
29
|
args: [{
|
|
30
30
|
declarations: [
|