@fusionauth/angular-sdk 1.3.0 → 2.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/README.md +7 -5
- package/fesm2022/fusionauth-angular-sdk.mjs +71 -38
- package/fesm2022/fusionauth-angular-sdk.mjs.map +1 -1
- package/package.json +16 -8
- package/types/fusionauth-angular-sdk.d.ts +183 -0
- package/esm2022/fusionauth-angular-sdk.mjs +0 -5
- package/esm2022/lib/SSRCookieAdapter.mjs +0 -23
- package/esm2022/lib/components/fusionauth-account.button/fusion-auth-account-button.component.mjs +0 -18
- package/esm2022/lib/components/fusionauth-login.button/fusion-auth-login-button.component.mjs +0 -20
- package/esm2022/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs +0 -18
- package/esm2022/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs +0 -20
- package/esm2022/lib/fusion-auth.module.mjs +0 -47
- package/esm2022/lib/fusion-auth.service.mjs +0 -118
- package/esm2022/lib/injectionToken.mjs +0 -3
- package/esm2022/lib/types.mjs +0 -2
- package/esm2022/public-api.mjs +0 -11
- package/esm2022/sdkcore/CookieHelpers/CookieHelpers.mjs +0 -34
- package/esm2022/sdkcore/CookieHelpers/index.mjs +0 -2
- package/esm2022/sdkcore/RedirectHelper/RedirectHelper.mjs +0 -47
- package/esm2022/sdkcore/RedirectHelper/index.mjs +0 -2
- package/esm2022/sdkcore/SDKConfig/SDKConfig.mjs +0 -2
- package/esm2022/sdkcore/SDKConfig/index.mjs +0 -2
- package/esm2022/sdkcore/SDKContext/SDKContext.mjs +0 -2
- package/esm2022/sdkcore/SDKContext/index.mjs +0 -2
- package/esm2022/sdkcore/SDKCore/SDKCore.mjs +0 -113
- package/esm2022/sdkcore/SDKCore/index.mjs +0 -2
- package/esm2022/sdkcore/UrlHelper/UrlHelper.mjs +0 -69
- package/esm2022/sdkcore/UrlHelper/UrlHelperTypes.mjs +0 -2
- package/esm2022/sdkcore/UrlHelper/index.mjs +0 -3
- package/esm2022/sdkcore/index.mjs +0 -4
- package/esm2022/sdkcore/testUtils/index.mjs +0 -3
- package/esm2022/sdkcore/testUtils/mockLoggedIn.mjs +0 -13
- package/esm2022/sdkcore/testUtils/mockWindowLocation.mjs +0 -10
- package/index.d.ts +0 -5
- package/lib/SSRCookieAdapter.d.ts +0 -7
- package/lib/components/fusionauth-account.button/fusion-auth-account-button.component.d.ts +0 -9
- package/lib/components/fusionauth-login.button/fusion-auth-login-button.component.d.ts +0 -10
- package/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.d.ts +0 -9
- package/lib/components/fusionauth-register.button/fusion-auth-register-button.component.d.ts +0 -10
- package/lib/fusion-auth.module.d.ts +0 -13
- package/lib/fusion-auth.service.d.ts +0 -59
- package/lib/injectionToken.d.ts +0 -3
- package/lib/types.d.ts +0 -78
- package/public-api.d.ts +0 -7
- package/sdkcore/CookieHelpers/CookieHelpers.d.ts +0 -11
- package/sdkcore/CookieHelpers/index.d.ts +0 -1
- package/sdkcore/RedirectHelper/RedirectHelper.d.ts +0 -10
- package/sdkcore/RedirectHelper/index.d.ts +0 -1
- package/sdkcore/SDKConfig/SDKConfig.d.ts +0 -79
- package/sdkcore/SDKConfig/index.d.ts +0 -1
- package/sdkcore/SDKContext/SDKContext.d.ts +0 -69
- package/sdkcore/SDKContext/index.d.ts +0 -1
- package/sdkcore/SDKCore/SDKCore.d.ts +0 -28
- package/sdkcore/SDKCore/index.d.ts +0 -1
- package/sdkcore/UrlHelper/UrlHelper.d.ts +0 -23
- package/sdkcore/UrlHelper/UrlHelperTypes.d.ts +0 -11
- package/sdkcore/UrlHelper/index.d.ts +0 -2
- package/sdkcore/index.d.ts +0 -5
- package/sdkcore/testUtils/index.d.ts +0 -2
- package/sdkcore/testUtils/mockLoggedIn.d.ts +0 -5
- package/sdkcore/testUtils/mockWindowLocation.d.ts +0 -18
package/README.md
CHANGED
|
@@ -4,6 +4,7 @@ An SDK for using FusionAuth in Angular applications.
|
|
|
4
4
|
|
|
5
5
|
- [Overview](#overview)
|
|
6
6
|
- [Getting Started](#getting-started)
|
|
7
|
+
- [Quickstart](#quickstart)
|
|
7
8
|
- [Installation](#installation)
|
|
8
9
|
- [Usage](#usage)
|
|
9
10
|
- [FusionAuthService](#fusionauthservice)
|
|
@@ -11,7 +12,6 @@ An SDK for using FusionAuth in Angular applications.
|
|
|
11
12
|
- [State Parameter](#state-parameter)
|
|
12
13
|
- [SSR](#ssr)
|
|
13
14
|
- [Known issues](#known-issues)
|
|
14
|
-
- [Quickstart](#quickstart)
|
|
15
15
|
- [Documentation](#documentation)
|
|
16
16
|
- [Releases](#releases)
|
|
17
17
|
|
|
@@ -57,6 +57,12 @@ compliant identity server.
|
|
|
57
57
|
|
|
58
58
|
## Getting Started
|
|
59
59
|
|
|
60
|
+
If you are new to Angular development, you may want to start with the Quickstart guide. If you are already familiar with Angular development, skip to the Installation section.
|
|
61
|
+
|
|
62
|
+
### Quickstart
|
|
63
|
+
|
|
64
|
+
See the [FusionAuth Angular Quickstart](https://fusionauth.io/docs/quickstarts/quickstart-javascript-angular-web) for a full tutorial on using FusionAuth and Angular.
|
|
65
|
+
|
|
60
66
|
### Installation
|
|
61
67
|
|
|
62
68
|
NPM:
|
|
@@ -183,10 +189,6 @@ The SDK supports Angular applications using SSR. No additional configuration is
|
|
|
183
189
|
|
|
184
190
|
None.
|
|
185
191
|
|
|
186
|
-
## Quickstart
|
|
187
|
-
|
|
188
|
-
See the [FusionAuth Angular Quickstart](https://fusionauth.io/docs/quickstarts/quickstart-javascript-angular-web) for a full tutorial on using FusionAuth and Angular.
|
|
189
|
-
|
|
190
192
|
## Documentation
|
|
191
193
|
|
|
192
194
|
[Full library documentation](https://github.com/FusionAuth/fusionauth-javascript-sdk/tree/main/packages/sdk-angular/docs)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, PLATFORM_ID, Injectable,
|
|
2
|
+
import { InjectionToken, PLATFORM_ID, Inject, Injectable, Input, Component, NgModule } from '@angular/core';
|
|
3
3
|
import { isPlatformBrowser } from '@angular/common';
|
|
4
4
|
import { BehaviorSubject, Observable, catchError } from 'rxjs';
|
|
5
5
|
|
|
@@ -10,6 +10,7 @@ class UrlHelper {
|
|
|
10
10
|
this.clientId = config.clientId;
|
|
11
11
|
this.redirectUri = config.redirectUri;
|
|
12
12
|
this.scope = config.scope;
|
|
13
|
+
this.authParams = config.authParams;
|
|
13
14
|
this.postLogoutRedirectUri = config.postLogoutRedirectUri;
|
|
14
15
|
this.mePath = config.mePath ?? '/app/me/';
|
|
15
16
|
this.loginPath = config.loginPath ?? '/app/login/';
|
|
@@ -25,6 +26,7 @@ class UrlHelper {
|
|
|
25
26
|
client_id: this.clientId,
|
|
26
27
|
redirect_uri: this.redirectUri,
|
|
27
28
|
scope: this.scope,
|
|
29
|
+
authParams: this.authParams,
|
|
28
30
|
state,
|
|
29
31
|
});
|
|
30
32
|
}
|
|
@@ -33,6 +35,7 @@ class UrlHelper {
|
|
|
33
35
|
client_id: this.clientId,
|
|
34
36
|
redirect_uri: this.redirectUri,
|
|
35
37
|
scope: this.scope,
|
|
38
|
+
authParams: this.authParams,
|
|
36
39
|
state,
|
|
37
40
|
});
|
|
38
41
|
}
|
|
@@ -63,12 +66,21 @@ class UrlHelper {
|
|
|
63
66
|
}
|
|
64
67
|
generateURLSearchParams(params) {
|
|
65
68
|
const urlSearchParams = new URLSearchParams();
|
|
69
|
+
this.appendParams(params, urlSearchParams);
|
|
70
|
+
return urlSearchParams;
|
|
71
|
+
}
|
|
72
|
+
appendParams(params, // or a more specific type if known
|
|
73
|
+
urlSearchParams) {
|
|
66
74
|
Object.entries(params).forEach(([key, value]) => {
|
|
67
|
-
if (value) {
|
|
68
|
-
|
|
75
|
+
if ((value && typeof value === 'object') || Array.isArray(value)) {
|
|
76
|
+
// Recursively handle nested objects
|
|
77
|
+
this.appendParams(value, urlSearchParams);
|
|
78
|
+
}
|
|
79
|
+
else if (value !== undefined && value !== null) {
|
|
80
|
+
// Append primitive values
|
|
81
|
+
urlSearchParams.append(key, String(value));
|
|
69
82
|
}
|
|
70
83
|
});
|
|
71
|
-
return urlSearchParams;
|
|
72
84
|
}
|
|
73
85
|
}
|
|
74
86
|
|
|
@@ -97,20 +109,21 @@ class RedirectHelper {
|
|
|
97
109
|
this.storage.setItem(this.REDIRECT_VALUE, valueForStorage);
|
|
98
110
|
}
|
|
99
111
|
handlePostRedirect(callback) {
|
|
100
|
-
const
|
|
101
|
-
|
|
112
|
+
const didRedirect = Boolean(this.storage.getItem(this.REDIRECT_VALUE));
|
|
113
|
+
if (!didRedirect) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const state = this.state;
|
|
117
|
+
callback?.(state);
|
|
102
118
|
this.storage.removeItem(this.REDIRECT_VALUE);
|
|
103
119
|
}
|
|
104
|
-
get
|
|
105
|
-
return Boolean(this.storage.getItem(this.REDIRECT_VALUE));
|
|
106
|
-
}
|
|
107
|
-
get stateValue() {
|
|
120
|
+
get state() {
|
|
108
121
|
const redirectValue = this.storage.getItem(this.REDIRECT_VALUE);
|
|
109
122
|
if (!redirectValue) {
|
|
110
|
-
return
|
|
123
|
+
return;
|
|
111
124
|
}
|
|
112
125
|
const [, ...stateValue] = redirectValue.split(':');
|
|
113
|
-
return stateValue.join(':');
|
|
126
|
+
return stateValue.join(':') || undefined;
|
|
114
127
|
}
|
|
115
128
|
generateRandomString() {
|
|
116
129
|
const array = new Uint32Array(56 / 2);
|
|
@@ -157,12 +170,14 @@ function toMilliseconds(seconds) {
|
|
|
157
170
|
class SDKCore {
|
|
158
171
|
constructor(config) {
|
|
159
172
|
this.redirectHelper = new RedirectHelper();
|
|
173
|
+
this.isDisposed = false;
|
|
160
174
|
this.config = config;
|
|
161
175
|
this.urlHelper = new UrlHelper({
|
|
162
176
|
serverUrl: config.serverUrl,
|
|
163
177
|
clientId: config.clientId,
|
|
164
178
|
redirectUri: config.redirectUri,
|
|
165
179
|
scope: config.scope,
|
|
180
|
+
authParams: config.authParams,
|
|
166
181
|
mePath: config.mePath,
|
|
167
182
|
loginPath: config.loginPath,
|
|
168
183
|
registerPath: config.registerPath,
|
|
@@ -172,6 +187,11 @@ class SDKCore {
|
|
|
172
187
|
});
|
|
173
188
|
this.scheduleTokenExpiration();
|
|
174
189
|
}
|
|
190
|
+
dispose() {
|
|
191
|
+
clearTimeout(this.tokenExpirationTimeout);
|
|
192
|
+
clearTimeout(this.refreshTokenTimeout);
|
|
193
|
+
this.isDisposed = true;
|
|
194
|
+
}
|
|
175
195
|
startLogin(state) {
|
|
176
196
|
this.redirectHelper.handlePreRedirect(state);
|
|
177
197
|
window.location.assign(this.urlHelper.getLoginUrl(state));
|
|
@@ -218,7 +238,10 @@ class SDKCore {
|
|
|
218
238
|
return response;
|
|
219
239
|
}
|
|
220
240
|
initAutoRefresh() {
|
|
221
|
-
|
|
241
|
+
// Clear any pending refresh so repeated calls (e.g. a reactive framework
|
|
242
|
+
// re-running an effect) doesn't leave duplicate timers running.
|
|
243
|
+
clearTimeout(this.refreshTokenTimeout);
|
|
244
|
+
if (!this.isLoggedIn || this.isDisposed) {
|
|
222
245
|
return;
|
|
223
246
|
}
|
|
224
247
|
const secondsBeforeRefresh = this.config.autoRefreshSecondsBeforeExpiry ?? 10;
|
|
@@ -226,7 +249,7 @@ class SDKCore {
|
|
|
226
249
|
const now = new Date().getTime();
|
|
227
250
|
const refreshTime = this.at_exp - millisecondsBeforeRefresh;
|
|
228
251
|
const timeTillRefresh = Math.max(refreshTime - now, 0);
|
|
229
|
-
|
|
252
|
+
this.refreshTokenTimeout = setTimeout(async () => {
|
|
230
253
|
try {
|
|
231
254
|
await this.refreshToken();
|
|
232
255
|
this.initAutoRefresh();
|
|
@@ -235,9 +258,19 @@ class SDKCore {
|
|
|
235
258
|
this.config.onAutoRefreshFailure?.(error);
|
|
236
259
|
}
|
|
237
260
|
}, timeTillRefresh);
|
|
261
|
+
return this.refreshTokenTimeout;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Cancels a pending automatic token refresh without disposing the core.
|
|
265
|
+
* Unlike {@link dispose}, the core remains usable and auto refresh can be
|
|
266
|
+
* restarted via {@link initAutoRefresh}. This makes it safe to stop/start
|
|
267
|
+
* across React StrictMode's mount → unmount → remount cycle.
|
|
268
|
+
*/
|
|
269
|
+
stopAutoRefresh() {
|
|
270
|
+
clearTimeout(this.refreshTokenTimeout);
|
|
238
271
|
}
|
|
239
272
|
handlePostRedirect(callback) {
|
|
240
|
-
if (this.isLoggedIn
|
|
273
|
+
if (this.isLoggedIn) {
|
|
241
274
|
this.redirectHelper.handlePostRedirect(callback);
|
|
242
275
|
}
|
|
243
276
|
}
|
|
@@ -404,10 +437,10 @@ class FusionAuthService {
|
|
|
404
437
|
manageAccount() {
|
|
405
438
|
this.core.manageAccount();
|
|
406
439
|
}
|
|
407
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
408
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
440
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthService, deps: [{ token: FUSIONAUTH_SERVICE_CONFIG }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
441
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthService, providedIn: 'root' }); }
|
|
409
442
|
}
|
|
410
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
443
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthService, decorators: [{
|
|
411
444
|
type: Injectable,
|
|
412
445
|
args: [{
|
|
413
446
|
providedIn: 'root',
|
|
@@ -427,12 +460,12 @@ class FusionAuthLoginButtonComponent {
|
|
|
427
460
|
login() {
|
|
428
461
|
this.fusionAuth.startLogin(this.state);
|
|
429
462
|
}
|
|
430
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
431
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
463
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
464
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: FusionAuthLoginButtonComponent, isStandalone: false, 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}.fa-button:hover{cursor:pointer}.fa-button{width:400px}\n", ""] }); }
|
|
432
465
|
}
|
|
433
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
466
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
|
|
434
467
|
type: Component,
|
|
435
|
-
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
|
|
468
|
+
args: [{ standalone: false, 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}.fa-button:hover{cursor:pointer}.fa-button{width:400px}\n"] }]
|
|
436
469
|
}], ctorParameters: () => [{ type: FusionAuthService }], propDecorators: { state: [{
|
|
437
470
|
type: Input
|
|
438
471
|
}] } });
|
|
@@ -444,12 +477,12 @@ class FusionAuthLogoutButtonComponent {
|
|
|
444
477
|
logout() {
|
|
445
478
|
this.fusionAuth.logout();
|
|
446
479
|
}
|
|
447
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
448
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
480
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
481
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: FusionAuthLogoutButtonComponent, isStandalone: false, selector: "fa-logout", ngImport: i0, template: "<button class=\"fa-button\" (click)=\"logout()\">\n <span>Logout</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}.fa-button:hover{cursor:pointer}.fa-button{width:400px}\n", ""] }); }
|
|
449
482
|
}
|
|
450
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
483
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
|
|
451
484
|
type: Component,
|
|
452
|
-
args: [{ selector: 'fa-logout', template: "<button class=\"fa-
|
|
485
|
+
args: [{ standalone: false, selector: 'fa-logout', template: "<button class=\"fa-button\" (click)=\"logout()\">\n <span>Logout</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}.fa-button:hover{cursor:pointer}.fa-button{width:400px}\n"] }]
|
|
453
486
|
}], ctorParameters: () => [{ type: FusionAuthService }] });
|
|
454
487
|
|
|
455
488
|
class FusionAuthRegisterButtonComponent {
|
|
@@ -459,12 +492,12 @@ class FusionAuthRegisterButtonComponent {
|
|
|
459
492
|
register() {
|
|
460
493
|
this.fusionAuth.startRegistration(this.state);
|
|
461
494
|
}
|
|
462
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
463
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
495
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
496
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: FusionAuthRegisterButtonComponent, isStandalone: false, 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}.fa-button:hover{cursor:pointer}.fa-button{width:400px}\n", ""] }); }
|
|
464
497
|
}
|
|
465
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
498
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
|
|
466
499
|
type: Component,
|
|
467
|
-
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
|
|
500
|
+
args: [{ standalone: false, 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}.fa-button:hover{cursor:pointer}.fa-button{width:400px}\n"] }]
|
|
468
501
|
}], ctorParameters: () => [{ type: FusionAuthService }], propDecorators: { state: [{
|
|
469
502
|
type: Input
|
|
470
503
|
}] } });
|
|
@@ -476,12 +509,12 @@ class FusionAuthAccountButtonComponent {
|
|
|
476
509
|
manageAccount() {
|
|
477
510
|
this.fusionAuth.manageAccount();
|
|
478
511
|
}
|
|
479
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
480
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
512
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthAccountButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
513
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: FusionAuthAccountButtonComponent, isStandalone: false, selector: "fa-account", ngImport: i0, template: "<button class=\"fa-button\" (click)=\"manageAccount()\">\n <span>manage account</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}.fa-button:hover{cursor:pointer}.fa-button{width:400px}\n"] }); }
|
|
481
514
|
}
|
|
482
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
515
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthAccountButtonComponent, decorators: [{
|
|
483
516
|
type: Component,
|
|
484
|
-
args: [{ selector: 'fa-account', template: "<button class=\"fa-button\" (click)=\"manageAccount()\">\n <span>manage account</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
|
|
517
|
+
args: [{ standalone: false, selector: 'fa-account', template: "<button class=\"fa-button\" (click)=\"manageAccount()\">\n <span>manage account</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}.fa-button:hover{cursor:pointer}.fa-button{width:400px}\n"] }]
|
|
485
518
|
}], ctorParameters: () => [{ type: FusionAuthService }] });
|
|
486
519
|
|
|
487
520
|
class FusionAuthModule {
|
|
@@ -494,17 +527,17 @@ class FusionAuthModule {
|
|
|
494
527
|
],
|
|
495
528
|
};
|
|
496
529
|
}
|
|
497
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
498
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
530
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
531
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
|
|
499
532
|
FusionAuthLogoutButtonComponent,
|
|
500
533
|
FusionAuthRegisterButtonComponent,
|
|
501
534
|
FusionAuthAccountButtonComponent], exports: [FusionAuthLoginButtonComponent,
|
|
502
535
|
FusionAuthLogoutButtonComponent,
|
|
503
536
|
FusionAuthRegisterButtonComponent,
|
|
504
537
|
FusionAuthAccountButtonComponent] }); }
|
|
505
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
538
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthModule }); }
|
|
506
539
|
}
|
|
507
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
540
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: FusionAuthModule, decorators: [{
|
|
508
541
|
type: NgModule,
|
|
509
542
|
args: [{
|
|
510
543
|
declarations: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fusionauth-angular-sdk.mjs","sources":["../../../projects/fusionauth-angular-sdk/src/sdkcore/UrlHelper/UrlHelper.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/RedirectHelper/RedirectHelper.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/CookieHelpers/CookieHelpers.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/SDKCore/SDKCore.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/testUtils/mockLoggedIn.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/testUtils/mockWindowLocation.ts","../../../projects/fusionauth-angular-sdk/src/lib/SSRCookieAdapter.ts","../../../projects/fusionauth-angular-sdk/src/lib/injectionToken.ts","../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.module.ts","../../../projects/fusionauth-angular-sdk/src/public-api.ts","../../../projects/fusionauth-angular-sdk/src/fusionauth-angular-sdk.ts"],"sourcesContent":["import { UrlHelperConfig, UrlHelperQueryParams } from './UrlHelperTypes';\n\n/** A class responsible for generating URLs that FusionAuth SDKs interact with. */\nexport class UrlHelper {\n serverUrl: string;\n clientId: string;\n redirectUri: string;\n scope?: string;\n\n mePath: string;\n loginPath: string;\n registerPath: string;\n logoutPath: string;\n tokenRefreshPath: string;\n postLogoutRedirectUri?: string;\n\n constructor(config: UrlHelperConfig) {\n this.serverUrl = config.serverUrl;\n this.clientId = config.clientId;\n this.redirectUri = config.redirectUri;\n this.scope = config.scope;\n this.postLogoutRedirectUri = config.postLogoutRedirectUri;\n\n this.mePath = config.mePath ?? '/app/me/';\n this.loginPath = config.loginPath ?? '/app/login/';\n this.registerPath = config.registerPath ?? '/app/register/';\n this.logoutPath = config.logoutPath ?? '/app/logout/';\n this.tokenRefreshPath = config.tokenRefreshPath ?? '/app/refresh/';\n }\n\n getMeUrl(): URL {\n return this.generateUrl(this.mePath);\n }\n\n getLoginUrl(state?: string): URL {\n return this.generateUrl(this.loginPath, {\n client_id: this.clientId,\n redirect_uri: this.redirectUri,\n scope: this.scope,\n state,\n });\n }\n\n getRegisterUrl(state?: string): URL {\n return this.generateUrl(this.registerPath, {\n client_id: this.clientId,\n redirect_uri: this.redirectUri,\n scope: this.scope,\n state,\n });\n }\n\n getLogoutUrl(): URL {\n return this.generateUrl(this.logoutPath, {\n client_id: this.clientId,\n post_logout_redirect_uri: this.postLogoutRedirectUri || this.redirectUri,\n });\n }\n\n getTokenRefreshUrl(): URL {\n return this.generateUrl(this.tokenRefreshPath, {\n client_id: this.clientId,\n });\n }\n\n getAccountManagementUrl(): URL {\n return this.generateUrl('/account/', {\n client_id: this.clientId,\n });\n }\n\n private generateUrl(path: string, params?: UrlHelperQueryParams): URL {\n const url = new URL(this.serverUrl);\n url.pathname = path;\n\n if (params) {\n const urlSearchParams = this.generateURLSearchParams(params);\n url.search = urlSearchParams.toString();\n }\n\n return url;\n }\n\n private generateURLSearchParams(\n params: UrlHelperQueryParams,\n ): URLSearchParams {\n const urlSearchParams = new URLSearchParams();\n\n Object.entries(params).forEach(([key, value]) => {\n if (value) {\n urlSearchParams.append(key, value);\n }\n });\n\n return urlSearchParams;\n }\n}\n","/** A class responsible for storing a redirect value in localStorage and cleanup afterward. */\nexport class RedirectHelper {\n private readonly REDIRECT_VALUE = 'fa-sdk-redirect-value';\n private get storage(): Storage {\n try {\n return localStorage;\n } catch {\n // fallback for non-browser environments where localStorage is not defined.\n return {\n /* eslint-disable */\n setItem(_key: string, _value: string) {},\n getItem(_key: string) {},\n removeItem(_key: string) {},\n /* eslint-enable */\n } as Storage;\n }\n }\n\n handlePreRedirect(state?: string) {\n const valueForStorage = `${this.generateRandomString()}:${state ?? ''}`;\n this.storage.setItem(this.REDIRECT_VALUE, valueForStorage);\n }\n\n handlePostRedirect(callback?: (state?: string) => void) {\n const stateValue = this.stateValue ?? undefined;\n callback?.(stateValue);\n this.storage.removeItem(this.REDIRECT_VALUE);\n }\n\n get didRedirect() {\n return Boolean(this.storage.getItem(this.REDIRECT_VALUE));\n }\n\n private get stateValue() {\n const redirectValue = this.storage.getItem(this.REDIRECT_VALUE);\n\n if (!redirectValue) {\n return null;\n }\n\n const [, ...stateValue] = redirectValue.split(':');\n return stateValue.join(':');\n }\n\n private generateRandomString() {\n const array = new Uint32Array(56 / 2);\n window.crypto.getRandomValues(array);\n return Array.from(array, (n: number) =>\n ('0' + n.toString(16)).substring(-2),\n ).join('');\n }\n}\n","/**\n * Gets the `app.at_exp` cookie and converts it to milliseconds since epoch.\n * Returns -1 if the cookie is not present.\n * @param cookieName - defaults to `app.at_exp`.\n * @param adapter - SSR frameworks like Nuxt, Next, and angular/ssr will pass in an adapter.\n */\nexport function getAccessTokenExpirationMoment(\n cookieName: string = 'app.at_exp',\n adapter?: CookieAdapter,\n): number | -1 {\n if (adapter) {\n return toMilliseconds(adapter.at_exp(cookieName));\n }\n\n let cookie;\n\n try {\n // `document` throws a ReferenceError if this runs in a\n // non-browser environment such as an SSR framework like Nuxt or Next.\n cookie = document.cookie;\n } catch {\n console.error(\n 'Error accessing cookies in fusionauth. If you are using SSR you must configure the SDK with a cookie adapter',\n );\n return -1;\n }\n\n const expCookie = cookie\n .split('; ')\n .map(c => c.split('='))\n .find(([name]) => name === cookieName);\n const cookieValue = expCookie?.[1];\n\n return toMilliseconds(cookieValue);\n}\n\nexport interface CookieAdapter {\n /** returns the `app.at_exp` cookie without manipulating the value. */\n at_exp: (cookieName?: string) => number | string | undefined;\n}\n\nfunction toMilliseconds(seconds?: number | string): number {\n if (!seconds) return -1;\n else return Number(seconds) * 1000;\n}\n","import { UrlHelper } from '../UrlHelper';\nimport { SDKConfig } from '../SDKConfig';\nimport { UserInfo } from '../SDKContext';\nimport { RedirectHelper } from '../RedirectHelper';\nimport { getAccessTokenExpirationMoment } from '../CookieHelpers';\n\n/** A class containing framework-agnostic SDK methods */\nexport class SDKCore {\n private config: SDKConfig;\n private urlHelper: UrlHelper;\n private redirectHelper: RedirectHelper = new RedirectHelper();\n private tokenExpirationTimeout?: NodeJS.Timeout;\n\n constructor(config: SDKConfig) {\n this.config = config;\n this.urlHelper = new UrlHelper({\n serverUrl: config.serverUrl,\n clientId: config.clientId,\n redirectUri: config.redirectUri,\n scope: config.scope,\n mePath: config.mePath,\n loginPath: config.loginPath,\n registerPath: config.registerPath,\n logoutPath: config.logoutPath,\n tokenRefreshPath: config.tokenRefreshPath,\n postLogoutRedirectUri: config.postLogoutRedirectUri,\n });\n this.scheduleTokenExpiration();\n }\n\n startLogin(state?: string) {\n this.redirectHelper.handlePreRedirect(state);\n window.location.assign(this.urlHelper.getLoginUrl(state));\n }\n\n startRegister(state?: string) {\n this.redirectHelper.handlePreRedirect(state);\n window.location.assign(this.urlHelper.getRegisterUrl(state));\n }\n\n startLogout() {\n window.location.assign(this.urlHelper.getLogoutUrl());\n }\n\n manageAccount() {\n window.location.assign(this.urlHelper.getAccountManagementUrl());\n }\n\n async fetchUserInfo<T = UserInfo>() {\n const userInfoResponse = await fetch(this.urlHelper.getMeUrl(), {\n credentials: 'include',\n });\n\n if (!userInfoResponse.ok) {\n throw new Error(\n `Unable to fetch userInfo in fusionauth. Request failed with status code ${userInfoResponse?.status}`,\n );\n }\n\n const userInfo: T = await userInfoResponse.json();\n return userInfo;\n }\n\n async refreshToken(): Promise<Response> {\n const response = await fetch(this.urlHelper.getTokenRefreshUrl(), {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'text/plain',\n },\n });\n if (!(response.status >= 200 && response.status < 300)) {\n const errorDetails = {\n status: response.status,\n details:\n (await response?.text()) ||\n 'Failed to refresh fusionauth access token',\n };\n throw new Error(JSON.stringify(errorDetails));\n }\n\n // a successful request means that app_exp was bumped into the future.\n // reschedule the access token expiration event.\n this.scheduleTokenExpiration();\n\n return response;\n }\n\n initAutoRefresh(): NodeJS.Timeout | undefined {\n if (!this.isLoggedIn) {\n return;\n }\n\n const secondsBeforeRefresh =\n this.config.autoRefreshSecondsBeforeExpiry ?? 10;\n\n const millisecondsBeforeRefresh = secondsBeforeRefresh * 1000;\n\n const now = new Date().getTime();\n const refreshTime = this.at_exp - millisecondsBeforeRefresh;\n const timeTillRefresh = Math.max(refreshTime - now, 0);\n\n return setTimeout(async () => {\n try {\n await this.refreshToken();\n this.initAutoRefresh();\n } catch (error) {\n this.config.onAutoRefreshFailure?.(error as Error);\n }\n }, timeTillRefresh);\n }\n\n handlePostRedirect(callback?: (state?: string) => void) {\n if (this.isLoggedIn && this.redirectHelper.didRedirect) {\n this.redirectHelper.handlePostRedirect(callback);\n }\n }\n\n get isLoggedIn() {\n return this.at_exp > new Date().getTime();\n }\n\n /** The moment of access token expiration in milliseconds since epoch. */\n private get at_exp(): number | -1 {\n return getAccessTokenExpirationMoment(\n this.config.accessTokenExpireCookieName,\n this.config.cookieAdapter,\n );\n }\n\n /**\n * Schedules `onTokenExpiration` at moment of access token expiration.\n * SDKCore is not necessarily reactive like React, Angular, and Vue.\n * so `onTokenExpiration` is for reactive frameworks to hook in and perform actions as on token expiration.\n */\n private scheduleTokenExpiration(): void {\n clearTimeout(this.tokenExpirationTimeout);\n\n const now = new Date().getTime();\n const millisecondsTillExpiration = this.at_exp - now;\n\n if (millisecondsTillExpiration > 0) {\n this.tokenExpirationTimeout = setTimeout(\n this.config.onTokenExpiration,\n millisecondsTillExpiration,\n );\n }\n }\n}\n","/** Sets `app.at_exp` moment cookie so the user will be logged in for 1 hour. */\nfunction mockIsLoggedIn() {\n const expirationMoment = new Date();\n expirationMoment.setHours(expirationMoment.getHours() + 1);\n const oneHourInTheFutureInMilliseconds = expirationMoment.getTime() / 1000;\n document.cookie = `app.at_exp=${oneHourInTheFutureInMilliseconds}`;\n}\n\n/** Removes the `app.at_exp` cookie. */\nfunction removeAt_expCookie() {\n document.cookie = 'app.at_exp' + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT';\n}\n\nexport { mockIsLoggedIn, removeAt_expCookie };\n","import { VitestUtils } from 'vitest';\n\nfunction mockWindowLocation(vi: VitestUtils) {\n const mockedLocation = {\n ...window.location,\n assign: vi.fn(),\n };\n vi.spyOn(window, 'location', 'get').mockReturnValue(mockedLocation);\n return mockedLocation;\n}\n\nexport { mockWindowLocation };\n","import { CookieAdapter } from '../sdkcore';\n\n/** An adapter class that supports accessing cookies with SSR */\nexport class SSRCookieAdapter implements CookieAdapter {\n constructor(private isBrowser: boolean) {}\n\n at_exp(cookieName: string = 'app.at_exp') {\n if (!this.isBrowser) {\n return;\n }\n\n try {\n const expCookie = document.cookie\n .split('; ')\n .map(c => c.split('='))\n .find(([name]) => name === cookieName);\n return expCookie?.[1];\n } catch (error) {\n console.error('Error within the SSRCookieAdapter: ', error);\n return -1;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { FusionAuthConfig } from './types';\n\nexport const FUSIONAUTH_SERVICE_CONFIG = new InjectionToken<FusionAuthConfig>(\n 'FUSIONAUTH_SERVICE_CONFIG',\n);\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Observable, catchError, BehaviorSubject } from 'rxjs';\n\nimport { SDKCore } from '../sdkcore';\nimport { SSRCookieAdapter } from './SSRCookieAdapter';\nimport { FusionAuthConfig, UserInfo } from './types';\nimport { FUSIONAUTH_SERVICE_CONFIG } from './injectionToken';\n\n/**\n * Service class to use with FusionAuth backend endpoints.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class FusionAuthService<T = UserInfo> {\n private core: SDKCore;\n private autoRefreshTimer?: NodeJS.Timeout;\n private isLoggedInSubject: BehaviorSubject<boolean>;\n\n constructor(\n @Inject(FUSIONAUTH_SERVICE_CONFIG) config: FusionAuthConfig,\n @Inject(PLATFORM_ID) platformId: Object,\n ) {\n this.core = new SDKCore({\n ...config,\n onTokenExpiration: () => {\n this.isLoggedInSubject.next(false);\n },\n cookieAdapter: new SSRCookieAdapter(isPlatformBrowser(platformId)),\n });\n\n this.isLoggedInSubject = new BehaviorSubject(this.core.isLoggedIn);\n this.isLoggedIn$ = this.isLoggedInSubject.asObservable();\n\n this.core.handlePostRedirect(config.onRedirect);\n\n if (config.shouldAutoRefresh && this.core.isLoggedIn) {\n this.initAutoRefresh();\n }\n }\n\n /** An observable representing whether the user is logged in. */\n isLoggedIn$: Observable<boolean>;\n\n /** A function that returns whether the user is logged in. This returned value is non-observable. */\n isLoggedIn() {\n return this.core.isLoggedIn;\n }\n\n /**\n * Refreshes the access token a single time.\n * Automatic token refreshing can be enabled if the SDK is configured with `shouldAutoRefresh`.\n */\n async refreshToken(): Promise<Response> {\n return await this.core.refreshToken();\n }\n\n /**\n * Initializes automatic access token refreshing.\n * This is handled automatically if the SDK is configured with `shouldAutoRefresh`.\n */\n initAutoRefresh(): void {\n if (this.autoRefreshTimer) {\n clearTimeout(this.autoRefreshTimer);\n }\n\n this.autoRefreshTimer = this.core.initAutoRefresh();\n }\n\n /**\n * Returns an observable request that fetches userInfo, and catches error.\n */\n getUserInfoObservable(callbacks?: {\n onBegin?: () => void;\n onDone?: () => void;\n }): Observable<T> {\n callbacks?.onBegin?.();\n return new Observable<T>(observer => {\n this.core\n .fetchUserInfo<T>()\n .then(userInfo => {\n observer.next(userInfo);\n })\n .catch(error => {\n observer.error(error);\n })\n .finally(() => {\n callbacks?.onDone?.();\n });\n }).pipe(\n catchError(error => {\n throw error;\n }),\n );\n }\n\n /**\n * Fetches userInfo from the 'me' endpoint.\n * @throws {Error} - if an error occurred while fetching.\n */\n async getUserInfo<T>(): Promise<T> {\n return await this.core.fetchUserInfo<T>();\n }\n\n /**\n * Initiates login flow.\n * @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.\n */\n startLogin(state?: string): void {\n this.core.startLogin(state);\n }\n\n /**\n * Initiates register flow.\n * @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.\n */\n startRegistration(state?: string): void {\n this.core.startRegister(state);\n }\n\n /**\n * Initiates logout flow.\n */\n logout(): void {\n this.core.startLogout();\n }\n\n /**\n * Redirects to [self service account management](https://fusionauth.io/docs/lifecycle/manage-users/account-management/)\n * Self service account management is only available in FusionAuth paid plans.\n */\n manageAccount(): void {\n this.core.manageAccount();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-login',\n templateUrl: './fusion-auth-login-button.component.html',\n styleUrls: ['./fusion-auth-login-button.component.scss'],\n})\nexport class FusionAuthLoginButtonComponent {\n @Input() state: string | undefined;\n\n constructor(private fusionAuth: FusionAuthService) {}\n\n login() {\n this.fusionAuth.startLogin(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n","import { Component } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-logout',\n templateUrl: './fusion-auth-logout-button.component.html',\n styleUrls: ['./fusion-auth-logout-button.component.scss'],\n})\nexport class FusionAuthLogoutButtonComponent {\n constructor(private fusionAuth: FusionAuthService) {}\n\n logout() {\n this.fusionAuth.logout();\n }\n}\n","<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-register',\n templateUrl: './fusion-auth-register-button.component.html',\n styleUrls: ['./fusion-auth-register-button.component.scss'],\n})\nexport class FusionAuthRegisterButtonComponent {\n @Input() state: string | undefined;\n\n constructor(private fusionAuth: FusionAuthService) {}\n\n register() {\n this.fusionAuth.startRegistration(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n","import { Component } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-account',\n templateUrl: './fusion-auth-account-button.component.html',\n styleUrls: ['./fusion-auth-account-button.component.scss'],\n})\nexport class FusionAuthAccountButtonComponent {\n constructor(private fusionAuth: FusionAuthService) {}\n\n manageAccount() {\n this.fusionAuth.manageAccount();\n }\n}\n","<button class=\"fa-button\" (click)=\"manageAccount()\">\n <span>manage account</span>\n</button>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FusionAuthConfig } from './types';\nimport { FusionAuthService } from './fusion-auth.service';\nimport { FUSIONAUTH_SERVICE_CONFIG } from './injectionToken';\nimport { FusionAuthLoginButtonComponent } from './components/fusionauth-login.button/fusion-auth-login-button.component';\nimport { FusionAuthLogoutButtonComponent } from './components/fusionauth-logout.button/fusion-auth-logout-button.component';\nimport { FusionAuthRegisterButtonComponent } from './components/fusionauth-register.button/fusion-auth-register-button.component';\nimport { FusionAuthAccountButtonComponent } from './components/fusionauth-account.button/fusion-auth-account-button.component';\n\n@NgModule({\n declarations: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n FusionAuthAccountButtonComponent,\n ],\n imports: [],\n exports: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n FusionAuthAccountButtonComponent,\n ],\n})\nexport class FusionAuthModule {\n static forRoot(\n fusionAuthConfig: FusionAuthConfig,\n ): ModuleWithProviders<FusionAuthModule> {\n return {\n ngModule: FusionAuthModule,\n providers: [\n { provide: FUSIONAUTH_SERVICE_CONFIG, useValue: fusionAuthConfig },\n FusionAuthService,\n ],\n };\n }\n}\n","/*\n * Public API Surface of fusionauth-angular-sdk\n */\n\nexport * from './lib/fusion-auth.service';\nexport * from './lib/components/fusionauth-login.button/fusion-auth-login-button.component';\nexport * from './lib/components/fusionauth-logout.button/fusion-auth-logout-button.component';\nexport * from './lib/components/fusionauth-register.button/fusion-auth-register-button.component';\nexport * from './lib/components/fusionauth-account.button/fusion-auth-account-button.component';\nexport * from './lib/fusion-auth.module';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FusionAuthService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fusionauth-angular-sdk.mjs","sources":["../../../projects/fusionauth-angular-sdk/src/sdkcore/UrlHelper/UrlHelper.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/RedirectHelper/RedirectHelper.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/CookieHelpers/CookieHelpers.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/SDKCore/SDKCore.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/testUtils/mockLoggedIn.ts","../../../projects/fusionauth-angular-sdk/src/sdkcore/testUtils/mockWindowLocation.ts","../../../projects/fusionauth-angular-sdk/src/lib/SSRCookieAdapter.ts","../../../projects/fusionauth-angular-sdk/src/lib/injectionToken.ts","../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.module.ts","../../../projects/fusionauth-angular-sdk/src/public-api.ts","../../../projects/fusionauth-angular-sdk/src/fusionauth-angular-sdk.ts"],"sourcesContent":["import { UrlHelperConfig, UrlHelperQueryParams } from './UrlHelperTypes';\n\n/** A class responsible for generating URLs that FusionAuth SDKs interact with. */\nexport class UrlHelper {\n serverUrl: string;\n clientId: string;\n redirectUri: string;\n scope?: string;\n authParams?: { [key: string]: any }[];\n\n mePath: string;\n loginPath: string;\n registerPath: string;\n logoutPath: string;\n tokenRefreshPath: string;\n postLogoutRedirectUri?: string;\n\n constructor(config: UrlHelperConfig) {\n this.serverUrl = config.serverUrl;\n this.clientId = config.clientId;\n this.redirectUri = config.redirectUri;\n this.scope = config.scope;\n this.authParams = config.authParams;\n this.postLogoutRedirectUri = config.postLogoutRedirectUri;\n\n this.mePath = config.mePath ?? '/app/me/';\n this.loginPath = config.loginPath ?? '/app/login/';\n this.registerPath = config.registerPath ?? '/app/register/';\n this.logoutPath = config.logoutPath ?? '/app/logout/';\n this.tokenRefreshPath = config.tokenRefreshPath ?? '/app/refresh/';\n }\n\n getMeUrl(): URL {\n return this.generateUrl(this.mePath);\n }\n\n getLoginUrl(state?: string): URL {\n return this.generateUrl(this.loginPath, {\n client_id: this.clientId,\n redirect_uri: this.redirectUri,\n scope: this.scope,\n authParams: this.authParams,\n state,\n });\n }\n\n getRegisterUrl(state?: string): URL {\n return this.generateUrl(this.registerPath, {\n client_id: this.clientId,\n redirect_uri: this.redirectUri,\n scope: this.scope,\n authParams: this.authParams,\n state,\n });\n }\n\n getLogoutUrl(): URL {\n return this.generateUrl(this.logoutPath, {\n client_id: this.clientId,\n post_logout_redirect_uri: this.postLogoutRedirectUri || this.redirectUri,\n });\n }\n\n getTokenRefreshUrl(): URL {\n return this.generateUrl(this.tokenRefreshPath, {\n client_id: this.clientId,\n });\n }\n\n getAccountManagementUrl(): URL {\n return this.generateUrl('/account/', {\n client_id: this.clientId,\n });\n }\n\n private generateUrl(path: string, params?: UrlHelperQueryParams): URL {\n const url = new URL(this.serverUrl);\n url.pathname = path;\n\n if (params) {\n const urlSearchParams = this.generateURLSearchParams(params);\n url.search = urlSearchParams.toString();\n }\n\n return url;\n }\n\n private generateURLSearchParams(\n params: UrlHelperQueryParams,\n ): URLSearchParams {\n const urlSearchParams = new URLSearchParams();\n this.appendParams(params, urlSearchParams);\n return urlSearchParams;\n }\n\n private appendParams(\n params: Record<string, any>, // or a more specific type if known\n urlSearchParams: URLSearchParams,\n ): void {\n Object.entries(params).forEach(([key, value]) => {\n if ((value && typeof value === 'object') || Array.isArray(value)) {\n // Recursively handle nested objects\n this.appendParams(value, urlSearchParams);\n } else if (value !== undefined && value !== null) {\n // Append primitive values\n urlSearchParams.append(key, String(value));\n }\n });\n }\n}\n","/** A class responsible for storing a redirect value in localStorage and cleanup afterward. */\nexport class RedirectHelper {\n private readonly REDIRECT_VALUE = 'fa-sdk-redirect-value';\n private get storage(): Storage {\n try {\n return localStorage;\n } catch {\n // fallback for non-browser environments where localStorage is not defined.\n return {\n /* eslint-disable */\n setItem(_key: string, _value: string) {},\n getItem(_key: string) {},\n removeItem(_key: string) {},\n /* eslint-enable */\n } as Storage;\n }\n }\n\n handlePreRedirect(state?: string) {\n const valueForStorage = `${this.generateRandomString()}:${state ?? ''}`;\n this.storage.setItem(this.REDIRECT_VALUE, valueForStorage);\n }\n\n handlePostRedirect(callback?: (state?: string) => void) {\n const didRedirect = Boolean(this.storage.getItem(this.REDIRECT_VALUE));\n if (!didRedirect) {\n return;\n }\n\n const state = this.state;\n callback?.(state);\n this.storage.removeItem(this.REDIRECT_VALUE);\n }\n\n private get state() {\n const redirectValue = this.storage.getItem(this.REDIRECT_VALUE);\n\n if (!redirectValue) {\n return;\n }\n\n const [, ...stateValue] = redirectValue.split(':');\n return stateValue.join(':') || undefined;\n }\n\n private generateRandomString() {\n const array = new Uint32Array(56 / 2);\n window.crypto.getRandomValues(array);\n return Array.from(array, (n: number) =>\n ('0' + n.toString(16)).substring(-2),\n ).join('');\n }\n}\n","/**\n * Gets the `app.at_exp` cookie and converts it to milliseconds since epoch.\n * Returns -1 if the cookie is not present.\n * @param cookieName - defaults to `app.at_exp`.\n * @param adapter - SSR frameworks like Nuxt, Next, and angular/ssr will pass in an adapter.\n */\nexport function getAccessTokenExpirationMoment(\n cookieName: string = 'app.at_exp',\n adapter?: CookieAdapter,\n): number | -1 {\n if (adapter) {\n return toMilliseconds(adapter.at_exp(cookieName));\n }\n\n let cookie;\n\n try {\n // `document` throws a ReferenceError if this runs in a\n // non-browser environment such as an SSR framework like Nuxt or Next.\n cookie = document.cookie;\n } catch {\n console.error(\n 'Error accessing cookies in fusionauth. If you are using SSR you must configure the SDK with a cookie adapter',\n );\n return -1;\n }\n\n const expCookie = cookie\n .split('; ')\n .map(c => c.split('='))\n .find(([name]) => name === cookieName);\n const cookieValue = expCookie?.[1];\n\n return toMilliseconds(cookieValue);\n}\n\nexport interface CookieAdapter {\n /** returns the `app.at_exp` cookie without manipulating the value. */\n at_exp: (cookieName?: string) => number | string | undefined;\n}\n\nfunction toMilliseconds(seconds?: number | string): number {\n if (!seconds) return -1;\n else return Number(seconds) * 1000;\n}\n","import { UrlHelper } from '../UrlHelper';\nimport { SDKConfig } from '../SDKConfig';\nimport { UserInfo } from '../SDKContext';\nimport { RedirectHelper } from '../RedirectHelper';\nimport { getAccessTokenExpirationMoment } from '../CookieHelpers';\n\n/** A class containing framework-agnostic SDK methods */\nexport class SDKCore {\n private config: SDKConfig;\n private urlHelper: UrlHelper;\n private redirectHelper: RedirectHelper = new RedirectHelper();\n private tokenExpirationTimeout?: NodeJS.Timeout;\n private refreshTokenTimeout?: NodeJS.Timeout;\n private isDisposed = false;\n\n constructor(config: SDKConfig) {\n this.config = config;\n this.urlHelper = new UrlHelper({\n serverUrl: config.serverUrl,\n clientId: config.clientId,\n redirectUri: config.redirectUri,\n scope: config.scope,\n authParams: config.authParams,\n mePath: config.mePath,\n loginPath: config.loginPath,\n registerPath: config.registerPath,\n logoutPath: config.logoutPath,\n tokenRefreshPath: config.tokenRefreshPath,\n postLogoutRedirectUri: config.postLogoutRedirectUri,\n });\n this.scheduleTokenExpiration();\n }\n\n dispose() {\n clearTimeout(this.tokenExpirationTimeout);\n clearTimeout(this.refreshTokenTimeout);\n this.isDisposed = true;\n }\n\n startLogin(state?: string) {\n this.redirectHelper.handlePreRedirect(state);\n window.location.assign(this.urlHelper.getLoginUrl(state));\n }\n\n startRegister(state?: string) {\n this.redirectHelper.handlePreRedirect(state);\n window.location.assign(this.urlHelper.getRegisterUrl(state));\n }\n\n startLogout() {\n window.location.assign(this.urlHelper.getLogoutUrl());\n }\n\n manageAccount() {\n window.location.assign(this.urlHelper.getAccountManagementUrl());\n }\n\n async fetchUserInfo<T = UserInfo>() {\n const userInfoResponse = await fetch(this.urlHelper.getMeUrl(), {\n credentials: 'include',\n });\n\n if (!userInfoResponse.ok) {\n throw new Error(\n `Unable to fetch userInfo in fusionauth. Request failed with status code ${userInfoResponse?.status}`,\n );\n }\n\n const userInfo: T = await userInfoResponse.json();\n return userInfo;\n }\n\n async refreshToken(): Promise<Response> {\n const response = await fetch(this.urlHelper.getTokenRefreshUrl(), {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'text/plain',\n },\n });\n if (!(response.status >= 200 && response.status < 300)) {\n const errorDetails = {\n status: response.status,\n details:\n (await response?.text()) ||\n 'Failed to refresh fusionauth access token',\n };\n throw new Error(JSON.stringify(errorDetails));\n }\n\n // a successful request means that app_exp was bumped into the future.\n // reschedule the access token expiration event.\n this.scheduleTokenExpiration();\n\n return response;\n }\n\n initAutoRefresh(): NodeJS.Timeout | undefined {\n // Clear any pending refresh so repeated calls (e.g. a reactive framework\n // re-running an effect) doesn't leave duplicate timers running.\n clearTimeout(this.refreshTokenTimeout);\n\n if (!this.isLoggedIn || this.isDisposed) {\n return;\n }\n\n const secondsBeforeRefresh =\n this.config.autoRefreshSecondsBeforeExpiry ?? 10;\n\n const millisecondsBeforeRefresh = secondsBeforeRefresh * 1000;\n\n const now = new Date().getTime();\n const refreshTime = this.at_exp - millisecondsBeforeRefresh;\n const timeTillRefresh = Math.max(refreshTime - now, 0);\n\n this.refreshTokenTimeout = setTimeout(async () => {\n try {\n await this.refreshToken();\n this.initAutoRefresh();\n } catch (error) {\n this.config.onAutoRefreshFailure?.(error as Error);\n }\n }, timeTillRefresh);\n\n return this.refreshTokenTimeout;\n }\n\n /**\n * Cancels a pending automatic token refresh without disposing the core.\n * Unlike {@link dispose}, the core remains usable and auto refresh can be\n * restarted via {@link initAutoRefresh}. This makes it safe to stop/start\n * across React StrictMode's mount → unmount → remount cycle.\n */\n stopAutoRefresh(): void {\n clearTimeout(this.refreshTokenTimeout);\n }\n\n handlePostRedirect(callback?: (state?: string) => void) {\n if (this.isLoggedIn) {\n this.redirectHelper.handlePostRedirect(callback);\n }\n }\n\n get isLoggedIn() {\n return this.at_exp > new Date().getTime();\n }\n\n /** The moment of access token expiration in milliseconds since epoch. */\n private get at_exp(): number | -1 {\n return getAccessTokenExpirationMoment(\n this.config.accessTokenExpireCookieName,\n this.config.cookieAdapter,\n );\n }\n\n /**\n * Schedules `onTokenExpiration` at moment of access token expiration.\n * SDKCore is not necessarily reactive like React, Angular, and Vue.\n * so `onTokenExpiration` is for reactive frameworks to hook in and perform actions as on token expiration.\n */\n private scheduleTokenExpiration(): void {\n clearTimeout(this.tokenExpirationTimeout);\n\n const now = new Date().getTime();\n const millisecondsTillExpiration = this.at_exp - now;\n\n if (millisecondsTillExpiration > 0) {\n this.tokenExpirationTimeout = setTimeout(\n this.config.onTokenExpiration,\n millisecondsTillExpiration,\n );\n }\n }\n}\n","/** Sets `app.at_exp` moment cookie so the user will be logged in for 1 hour. */\nfunction mockIsLoggedIn() {\n const expirationMoment = new Date();\n expirationMoment.setHours(expirationMoment.getHours() + 1);\n const oneHourInTheFutureInMilliseconds = expirationMoment.getTime() / 1000;\n document.cookie = `app.at_exp=${oneHourInTheFutureInMilliseconds}`;\n}\n\n/** Removes the `app.at_exp` cookie. */\nfunction removeAt_expCookie() {\n document.cookie = 'app.at_exp' + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT';\n}\n\nexport { mockIsLoggedIn, removeAt_expCookie };\n","import { VitestUtils } from 'vitest';\n\nfunction mockWindowLocation(vi: VitestUtils) {\n const mockedLocation = {\n ...window.location,\n assign: vi.fn(),\n };\n vi.spyOn(window, 'location', 'get').mockReturnValue(mockedLocation);\n return mockedLocation;\n}\n\nexport { mockWindowLocation };\n","import { CookieAdapter } from '../sdkcore';\n\n/** An adapter class that supports accessing cookies with SSR */\nexport class SSRCookieAdapter implements CookieAdapter {\n constructor(private isBrowser: boolean) {}\n\n at_exp(cookieName: string = 'app.at_exp') {\n if (!this.isBrowser) {\n return;\n }\n\n try {\n const expCookie = document.cookie\n .split('; ')\n .map(c => c.split('='))\n .find(([name]) => name === cookieName);\n return expCookie?.[1];\n } catch (error) {\n console.error('Error within the SSRCookieAdapter: ', error);\n return -1;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { FusionAuthConfig } from './types';\n\nexport const FUSIONAUTH_SERVICE_CONFIG = new InjectionToken<FusionAuthConfig>(\n 'FUSIONAUTH_SERVICE_CONFIG',\n);\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Observable, catchError, BehaviorSubject } from 'rxjs';\n\nimport { SDKCore } from '../sdkcore';\nimport { SSRCookieAdapter } from './SSRCookieAdapter';\nimport { FusionAuthConfig, UserInfo } from './types';\nimport { FUSIONAUTH_SERVICE_CONFIG } from './injectionToken';\n\n/**\n * Service class to use with FusionAuth backend endpoints.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class FusionAuthService<T = UserInfo> {\n private core: SDKCore;\n private autoRefreshTimer?: NodeJS.Timeout;\n private isLoggedInSubject: BehaviorSubject<boolean>;\n\n constructor(\n @Inject(FUSIONAUTH_SERVICE_CONFIG) config: FusionAuthConfig,\n @Inject(PLATFORM_ID) platformId: Object,\n ) {\n this.core = new SDKCore({\n ...config,\n onTokenExpiration: () => {\n this.isLoggedInSubject.next(false);\n },\n cookieAdapter: new SSRCookieAdapter(isPlatformBrowser(platformId)),\n });\n\n this.isLoggedInSubject = new BehaviorSubject(this.core.isLoggedIn);\n this.isLoggedIn$ = this.isLoggedInSubject.asObservable();\n\n this.core.handlePostRedirect(config.onRedirect);\n\n if (config.shouldAutoRefresh && this.core.isLoggedIn) {\n this.initAutoRefresh();\n }\n }\n\n /** An observable representing whether the user is logged in. */\n isLoggedIn$: Observable<boolean>;\n\n /** A function that returns whether the user is logged in. This returned value is non-observable. */\n isLoggedIn() {\n return this.core.isLoggedIn;\n }\n\n /**\n * Refreshes the access token a single time.\n * Automatic token refreshing can be enabled if the SDK is configured with `shouldAutoRefresh`.\n */\n async refreshToken(): Promise<Response> {\n return await this.core.refreshToken();\n }\n\n /**\n * Initializes automatic access token refreshing.\n * This is handled automatically if the SDK is configured with `shouldAutoRefresh`.\n */\n initAutoRefresh(): void {\n if (this.autoRefreshTimer) {\n clearTimeout(this.autoRefreshTimer);\n }\n\n this.autoRefreshTimer = this.core.initAutoRefresh();\n }\n\n /**\n * Returns an observable request that fetches userInfo, and catches error.\n */\n getUserInfoObservable(callbacks?: {\n onBegin?: () => void;\n onDone?: () => void;\n }): Observable<T> {\n callbacks?.onBegin?.();\n return new Observable<T>(observer => {\n this.core\n .fetchUserInfo<T>()\n .then(userInfo => {\n observer.next(userInfo);\n })\n .catch(error => {\n observer.error(error);\n })\n .finally(() => {\n callbacks?.onDone?.();\n });\n }).pipe(\n catchError(error => {\n throw error;\n }),\n );\n }\n\n /**\n * Fetches userInfo from the 'me' endpoint.\n * @throws {Error} - if an error occurred while fetching.\n */\n async getUserInfo<T>(): Promise<T> {\n return await this.core.fetchUserInfo<T>();\n }\n\n /**\n * Initiates login flow.\n * @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.\n */\n startLogin(state?: string): void {\n this.core.startLogin(state);\n }\n\n /**\n * Initiates register flow.\n * @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.\n */\n startRegistration(state?: string): void {\n this.core.startRegister(state);\n }\n\n /**\n * Initiates logout flow.\n */\n logout(): void {\n this.core.startLogout();\n }\n\n /**\n * Redirects to [self service account management](https://fusionauth.io/docs/lifecycle/manage-users/account-management/)\n * Self service account management is only available in FusionAuth paid plans.\n */\n manageAccount(): void {\n this.core.manageAccount();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n standalone: false,\n selector: 'fa-login',\n templateUrl: './fusion-auth-login-button.component.html',\n styleUrls: ['../fa-button.scss', './fusion-auth-login-button.component.scss'],\n})\nexport class FusionAuthLoginButtonComponent {\n @Input() state: string | undefined;\n\n constructor(private fusionAuth: FusionAuthService) {}\n\n login() {\n this.fusionAuth.startLogin(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n","import { Component } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n standalone: false,\n selector: 'fa-logout',\n templateUrl: './fusion-auth-logout-button.component.html',\n styleUrls: [\n '../fa-button.scss',\n './fusion-auth-logout-button.component.scss',\n ],\n})\nexport class FusionAuthLogoutButtonComponent {\n constructor(private fusionAuth: FusionAuthService) {}\n\n logout() {\n this.fusionAuth.logout();\n }\n}\n","<button class=\"fa-button\" (click)=\"logout()\">\n <span>Logout</span>\n</button>\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n standalone: false,\n selector: 'fa-register',\n templateUrl: './fusion-auth-register-button.component.html',\n styleUrls: [\n '../fa-button.scss',\n './fusion-auth-register-button.component.scss',\n ],\n})\nexport class FusionAuthRegisterButtonComponent {\n @Input() state: string | undefined;\n\n constructor(private fusionAuth: FusionAuthService) {}\n\n register() {\n this.fusionAuth.startRegistration(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n","import { Component } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n standalone: false,\n selector: 'fa-account',\n templateUrl: './fusion-auth-account-button.component.html',\n styleUrls: ['./fusion-auth-account-button.component.scss'],\n})\nexport class FusionAuthAccountButtonComponent {\n constructor(private fusionAuth: FusionAuthService) {}\n\n manageAccount() {\n this.fusionAuth.manageAccount();\n }\n}\n","<button class=\"fa-button\" (click)=\"manageAccount()\">\n <span>manage account</span>\n</button>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FusionAuthConfig } from './types';\nimport { FusionAuthService } from './fusion-auth.service';\nimport { FUSIONAUTH_SERVICE_CONFIG } from './injectionToken';\nimport { FusionAuthLoginButtonComponent } from './components/fusionauth-login.button/fusion-auth-login-button.component';\nimport { FusionAuthLogoutButtonComponent } from './components/fusionauth-logout.button/fusion-auth-logout-button.component';\nimport { FusionAuthRegisterButtonComponent } from './components/fusionauth-register.button/fusion-auth-register-button.component';\nimport { FusionAuthAccountButtonComponent } from './components/fusionauth-account.button/fusion-auth-account-button.component';\n\n@NgModule({\n declarations: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n FusionAuthAccountButtonComponent,\n ],\n imports: [],\n exports: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n FusionAuthAccountButtonComponent,\n ],\n})\nexport class FusionAuthModule {\n static forRoot(\n fusionAuthConfig: FusionAuthConfig,\n ): ModuleWithProviders<FusionAuthModule> {\n return {\n ngModule: FusionAuthModule,\n providers: [\n { provide: FUSIONAUTH_SERVICE_CONFIG, useValue: fusionAuthConfig },\n FusionAuthService,\n ],\n };\n }\n}\n","/*\n * Public API Surface of fusionauth-angular-sdk\n */\n\nexport * from './lib/fusion-auth.service';\nexport * from './lib/components/fusionauth-login.button/fusion-auth-login-button.component';\nexport * from './lib/components/fusionauth-logout.button/fusion-auth-logout-button.component';\nexport * from './lib/components/fusionauth-register.button/fusion-auth-register-button.component';\nexport * from './lib/components/fusionauth-account.button/fusion-auth-account-button.component';\nexport * from './lib/fusion-auth.module';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FusionAuthService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusionauth/angular-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": ">=
|
|
6
|
-
"@angular/core": ">=
|
|
5
|
+
"@angular/common": ">=22.0.0",
|
|
6
|
+
"@angular/core": ">=22.0.0"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"tslib": "^2.3.0"
|
|
10
10
|
},
|
|
11
11
|
"sideEffects": false,
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/FusionAuth/fusionauth-javascript-sdk"
|
|
15
|
+
},
|
|
16
|
+
"author": "FusionAuth",
|
|
17
|
+
"license": "Apache",
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/FusionAuth/fusionauth-javascript-sdk/issues"
|
|
20
|
+
},
|
|
12
21
|
"module": "fesm2022/fusionauth-angular-sdk.mjs",
|
|
13
|
-
"typings": "
|
|
22
|
+
"typings": "types/fusionauth-angular-sdk.d.ts",
|
|
14
23
|
"exports": {
|
|
15
24
|
"./package.json": {
|
|
16
25
|
"default": "./package.json"
|
|
17
26
|
},
|
|
18
27
|
".": {
|
|
19
|
-
"types": "./
|
|
20
|
-
"esm2022": "./esm2022/fusionauth-angular-sdk.mjs",
|
|
21
|
-
"esm": "./esm2022/fusionauth-angular-sdk.mjs",
|
|
28
|
+
"types": "./types/fusionauth-angular-sdk.d.ts",
|
|
22
29
|
"default": "./fesm2022/fusionauth-angular-sdk.mjs"
|
|
23
30
|
}
|
|
24
|
-
}
|
|
31
|
+
},
|
|
32
|
+
"type": "module"
|
|
25
33
|
}
|