@fusionauth/angular-sdk 0.1.5 → 1.0.1
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 +42 -69
- package/{esm2020 → esm2022}/lib/components/fusionauth-login.button/fusion-auth-login-button.component.mjs +5 -5
- package/esm2022/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs +18 -0
- package/esm2022/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs +20 -0
- package/esm2022/lib/core.mjs +241 -0
- package/esm2022/lib/fusion-auth.module.mjs +43 -0
- package/esm2022/lib/fusion-auth.service.mjs +91 -0
- package/esm2022/lib/types.mjs +2 -0
- package/fesm2022/fusionauth-angular-sdk.mjs +429 -0
- package/fesm2022/fusionauth-angular-sdk.mjs.map +1 -0
- package/lib/components/fusionauth-login.button/fusion-auth-login-button.component.d.ts +1 -1
- package/lib/components/fusionauth-register.button/fusion-auth-register-button.component.d.ts +1 -1
- package/lib/core.d.ts +57 -0
- package/lib/fusion-auth.service.d.ts +26 -17
- package/lib/types.d.ts +44 -2
- package/package.json +9 -21
- package/esm2020/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs +0 -18
- package/esm2020/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs +0 -20
- package/esm2020/lib/fusion-auth.module.mjs +0 -40
- package/esm2020/lib/fusion-auth.service.mjs +0 -126
- package/esm2020/lib/types.mjs +0 -2
- package/fesm2015/fusionauth-angular-sdk.mjs +0 -228
- package/fesm2015/fusionauth-angular-sdk.mjs.map +0 -1
- package/fesm2020/fusionauth-angular-sdk.mjs +0 -222
- package/fesm2020/fusionauth-angular-sdk.mjs.map +0 -1
- /package/{esm2020 → esm2022}/fusionauth-angular-sdk.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { SDKCore } from './core';
|
|
2
|
+
import { Observable, catchError, BehaviorSubject } from 'rxjs';
|
|
3
|
+
/**
|
|
4
|
+
* Service class to use with FusionAuth backend endpoints.
|
|
5
|
+
*/
|
|
6
|
+
export class FusionAuthService {
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.core = new SDKCore({
|
|
9
|
+
...config,
|
|
10
|
+
onTokenExpiration: () => {
|
|
11
|
+
this.isLoggedInSubject.next(false);
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
this.isLoggedInSubject = new BehaviorSubject(this.core.isLoggedIn);
|
|
15
|
+
this.isLoggedIn$ = this.isLoggedInSubject.asObservable();
|
|
16
|
+
this.core.handlePostRedirect(config.onRedirect);
|
|
17
|
+
if (config.shouldAutoRefresh && this.core.isLoggedIn) {
|
|
18
|
+
this.initAutoRefresh();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** A function that returns whether the user is logged in. This returned value is non-observable. */
|
|
22
|
+
isLoggedIn() {
|
|
23
|
+
return this.core.isLoggedIn;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Refreshes the access token a single time.
|
|
27
|
+
* Automatic token refreshing can be enabled if the SDK is configured with `shouldAutoRefresh`.
|
|
28
|
+
*/
|
|
29
|
+
async refreshToken() {
|
|
30
|
+
return await this.core.refreshToken();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Initializes automatic access token refreshing.
|
|
34
|
+
* This is handled automatically if the SDK is configured with `shouldAutoRefresh`.
|
|
35
|
+
*/
|
|
36
|
+
initAutoRefresh() {
|
|
37
|
+
if (this.autoRefreshTimer) {
|
|
38
|
+
clearTimeout(this.autoRefreshTimer);
|
|
39
|
+
}
|
|
40
|
+
this.autoRefreshTimer = this.core.initAutoRefresh();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns an observable request that fetches userInfo, and catches error.
|
|
44
|
+
*/
|
|
45
|
+
getUserInfoObservable(callbacks) {
|
|
46
|
+
callbacks?.onBegin?.();
|
|
47
|
+
return new Observable(observer => {
|
|
48
|
+
this.core
|
|
49
|
+
.fetchUserInfo()
|
|
50
|
+
.then(userInfo => {
|
|
51
|
+
observer.next(userInfo);
|
|
52
|
+
})
|
|
53
|
+
.catch(error => {
|
|
54
|
+
observer.error(error);
|
|
55
|
+
})
|
|
56
|
+
.finally(() => {
|
|
57
|
+
callbacks?.onDone?.();
|
|
58
|
+
});
|
|
59
|
+
}).pipe(catchError(error => {
|
|
60
|
+
throw error;
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Fetches userInfo from the 'me' endpoint.
|
|
65
|
+
* @throws {Error} - if an error occurred while fetching.
|
|
66
|
+
*/
|
|
67
|
+
async getUserInfo() {
|
|
68
|
+
return await this.core.fetchUserInfo();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Initiates login flow.
|
|
72
|
+
* @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.
|
|
73
|
+
*/
|
|
74
|
+
startLogin(state) {
|
|
75
|
+
this.core.startLogin(state);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Initiates register flow.
|
|
79
|
+
* @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.
|
|
80
|
+
*/
|
|
81
|
+
startRegistration(state) {
|
|
82
|
+
this.core.startRegister(state);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Initiates logout flow.
|
|
86
|
+
*/
|
|
87
|
+
logout() {
|
|
88
|
+
this.core.startLogout();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9mdXNpb24tYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUs1QixZQUFZLE1BQXdCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUM7WUFDdEIsR0FBRyxNQUFNO1lBQ1QsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO2dCQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoRCxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUtELG9HQUFvRztJQUNwRyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFlBQVk7UUFDaEIsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gscUJBQXFCLENBQUMsU0FHckI7UUFDQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUN2QixPQUFPLElBQUksVUFBVSxDQUFXLFFBQVEsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxJQUFJO2lCQUNOLGFBQWEsRUFBRTtpQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2YsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNiLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDO2lCQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ0wsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTREtDb3JlIH0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IEZ1c2lvbkF1dGhDb25maWcsIFVzZXJJbmZvIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBTZXJ2aWNlIGNsYXNzIHRvIHVzZSB3aXRoIEZ1c2lvbkF1dGggYmFja2VuZCBlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBGdXNpb25BdXRoU2VydmljZSB7XG4gIHByaXZhdGUgY29yZTogU0RLQ29yZTtcbiAgcHJpdmF0ZSBhdXRvUmVmcmVzaFRpbWVyPzogTm9kZUpTLlRpbWVvdXQ7XG4gIHByaXZhdGUgaXNMb2dnZWRJblN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEZ1c2lvbkF1dGhDb25maWcpIHtcbiAgICB0aGlzLmNvcmUgPSBuZXcgU0RLQ29yZSh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBvblRva2VuRXhwaXJhdGlvbjogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9nZ2VkSW5TdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuaXNMb2dnZWRJblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuY29yZS5pc0xvZ2dlZEluKTtcbiAgICB0aGlzLmlzTG9nZ2VkSW4kID0gdGhpcy5pc0xvZ2dlZEluU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHRoaXMuY29yZS5oYW5kbGVQb3N0UmVkaXJlY3QoY29uZmlnLm9uUmVkaXJlY3QpO1xuXG4gICAgaWYgKGNvbmZpZy5zaG91bGRBdXRvUmVmcmVzaCAmJiB0aGlzLmNvcmUuaXNMb2dnZWRJbikge1xuICAgICAgdGhpcy5pbml0QXV0b1JlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKiogQW4gb2JzZXJ2YWJsZSByZXByZXNlbnRpbmcgd2hldGhlciB0aGUgdXNlciBpcyBsb2dnZWQgaW4uICovXG4gIGlzTG9nZ2VkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB3aGV0aGVyIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi4gVGhpcyByZXR1cm5lZCB2YWx1ZSBpcyBub24tb2JzZXJ2YWJsZS4gKi9cbiAgaXNMb2dnZWRJbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmlzTG9nZ2VkSW47XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4gYSBzaW5nbGUgdGltZS5cbiAgICogQXV0b21hdGljIHRva2VuIHJlZnJlc2hpbmcgY2FuIGJlIGVuYWJsZWQgaWYgdGhlIFNESyBpcyBjb25maWd1cmVkIHdpdGggYHNob3VsZEF1dG9SZWZyZXNoYC5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb3JlLnJlZnJlc2hUb2tlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGF1dG9tYXRpYyBhY2Nlc3MgdG9rZW4gcmVmcmVzaGluZy5cbiAgICogVGhpcyBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIFNESyBpcyBjb25maWd1cmVkIHdpdGggYHNob3VsZEF1dG9SZWZyZXNoYC5cbiAgICovXG4gIGluaXRBdXRvUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5hdXRvUmVmcmVzaFRpbWVyKTtcbiAgICB9XG5cbiAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSB0aGlzLmNvcmUuaW5pdEF1dG9SZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHJlcXVlc3QgdGhhdCBmZXRjaGVzIHVzZXJJbmZvLCBhbmQgY2F0Y2hlcyBlcnJvci5cbiAgICovXG4gIGdldFVzZXJJbmZvT2JzZXJ2YWJsZShjYWxsYmFja3M/OiB7XG4gICAgb25CZWdpbj86ICgpID0+IHZvaWQ7XG4gICAgb25Eb25lPzogKCkgPT4gdm9pZDtcbiAgfSk6IE9ic2VydmFibGU8VXNlckluZm8+IHtcbiAgICBjYWxsYmFja3M/Lm9uQmVnaW4/LigpO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxVc2VySW5mbz4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgdGhpcy5jb3JlXG4gICAgICAgIC5mZXRjaFVzZXJJbmZvKClcbiAgICAgICAgLnRoZW4odXNlckluZm8gPT4ge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQodXNlckluZm8pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrcz8ub25Eb25lPy4oKTtcbiAgICAgICAgfSk7XG4gICAgfSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB1c2VySW5mbyBmcm9tIHRoZSAnbWUnIGVuZHBvaW50LlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBpZiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBmZXRjaGluZy5cbiAgICovXG4gIGFzeW5jIGdldFVzZXJJbmZvKCk6IFByb21pc2U8VXNlckluZm8+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb3JlLmZldGNoVXNlckluZm8oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgbG9naW4gZmxvdy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdGF0ZV0gLSBPcHRpb25hbCB2YWx1ZSB0byBiZSBlY2hvZWQgYmFjayB0byB0aGUgU0RLIHVwb24gcmVkaXJlY3QuXG4gICAqL1xuICBzdGFydExvZ2luKHN0YXRlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb3JlLnN0YXJ0TG9naW4oc3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyByZWdpc3RlciBmbG93LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0YXRlXSAtIE9wdGlvbmFsIHZhbHVlIHRvIGJlIGVjaG9lZCBiYWNrIHRvIHRoZSBTREsgdXBvbiByZWRpcmVjdC5cbiAgICovXG4gIHN0YXJ0UmVnaXN0cmF0aW9uKHN0YXRlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb3JlLnN0YXJ0UmVnaXN0ZXIoc3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyBsb2dvdXQgZmxvdy5cbiAgICovXG4gIGxvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvcmUuc3RhcnRMb2dvdXQoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlnIGZvciBGdXNpb25BdXRoIEFuZ3VsYXIgU0RLXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVzaW9uQXV0aENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBzZXJ2ZXIgdGhhdCBwZXJmb3JtcyB0aGUgdG9rZW4gZXhjaGFuZ2UuXG4gICAqL1xuICBzZXJ2ZXJVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBpZCBvZiB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBjbGllbnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVkaXJlY3QgVVJJIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAgICovXG4gIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPQXV0aDIgc2NvcGUgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgYC9vYXV0aDIvYXV0aG9yaXplYCBlbmRwb2ludC4gSWYgbm90IHNwZWNpZmllZCBmdXNpb25hdXRoIHdpbGwgZGVmYXVsdCB0aGlzIHRvIGBvcGVuaWQgb2ZmbGluZV9hY2Nlc3NgLlxuICAgKi9cbiAgc2NvcGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYXV0b21hdGljIHRva2VuIHJlZnJlc2hpbmcuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgc2hvdWxkQXV0b1JlZnJlc2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJ5IHdoZW4gdGhlIGF1dG8gcmVmcmVzaCBmdW5jdGlvbmFsaXR5IGtpY2tzIGluIGlmIGVuYWJsZWQuIERlZmF1bHQgaXMgMTAuXG4gICAqL1xuICBhdXRvUmVmcmVzaFNlY29uZHNCZWZvcmVFeHBpcnk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2l0aCB0aGUgYHN0YXRlYCB2YWx1ZSB1cG9uIHJlZGlyZWN0IGZyb20gbG9naW4gb3IgcmVnaXN0ZXIuXG4gICAqL1xuICBvblJlZGlyZWN0PzogKHN0YXRlPzogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgbG9naW4gZW5kcG9pbnQuXG4gICAqL1xuICBsb2dpblBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSByZWdpc3RlciBlbmRwb2ludC5cbiAgICovXG4gIHJlZ2lzdGVyUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIGxvZ291dCBlbmRwb2ludC5cbiAgICovXG4gIGxvZ291dFBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSB0b2tlbiByZWZyZXNoIGVuZHBvaW50LlxuICAgKi9cbiAgdG9rZW5SZWZyZXNoUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIG1lIGVuZHBvaW50LlxuICAgKi9cbiAgbWVQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJbmZvIHtcbiAgYXBwbGljYXRpb25JZD86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGVtYWlsX3ZlcmlmaWVkPzogYm9vbGVhbjtcbiAgZmFtaWx5X25hbWU/OiBzdHJpbmc7XG4gIGdpdmVuX25hbWU/OiBzdHJpbmc7XG4gIHBpY3R1cmU/OiBzdHJpbmc7XG4gIHJvbGVzPzogYW55W107XG4gIHNpZD86IHN0cmluZztcbiAgc3ViPzogc3RyaW5nO1xuICB0aWQ/OiBzdHJpbmc7XG4gIHBob25lX251bWJlcj86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import { BehaviorSubject, Observable, catchError } from 'rxjs';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { Component, Input, NgModule } from '@angular/core';
|
|
4
|
+
|
|
5
|
+
// @ts-nocheck
|
|
6
|
+
const u = Object.defineProperty;
|
|
7
|
+
const d = (r, e, t) => e in r
|
|
8
|
+
? u(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t })
|
|
9
|
+
: (r[e] = t);
|
|
10
|
+
const i = (r, e, t) => (d(r, typeof e != 'symbol' ? e + '' : e, t), t);
|
|
11
|
+
class g {
|
|
12
|
+
constructor(e) {
|
|
13
|
+
i(this, 'serverUrl');
|
|
14
|
+
i(this, 'clientId');
|
|
15
|
+
i(this, 'redirectUri');
|
|
16
|
+
i(this, 'scope');
|
|
17
|
+
i(this, 'mePath');
|
|
18
|
+
i(this, 'loginPath');
|
|
19
|
+
i(this, 'registerPath');
|
|
20
|
+
i(this, 'logoutPath');
|
|
21
|
+
i(this, 'tokenRefreshPath');
|
|
22
|
+
(this.serverUrl = e.serverUrl),
|
|
23
|
+
(this.clientId = e.clientId),
|
|
24
|
+
(this.redirectUri = e.redirectUri),
|
|
25
|
+
(this.scope = e.scope),
|
|
26
|
+
(this.mePath = e.mePath ?? '/app/me'),
|
|
27
|
+
(this.loginPath = e.loginPath ?? '/app/login'),
|
|
28
|
+
(this.registerPath = e.registerPath ?? '/app/register'),
|
|
29
|
+
(this.logoutPath = e.logoutPath ?? '/app/logout'),
|
|
30
|
+
(this.tokenRefreshPath = e.tokenRefreshPath ?? '/app/refresh');
|
|
31
|
+
}
|
|
32
|
+
getMeUrl() {
|
|
33
|
+
return this.generateUrl(this.mePath);
|
|
34
|
+
}
|
|
35
|
+
getLoginUrl(e) {
|
|
36
|
+
return this.generateUrl(this.loginPath, {
|
|
37
|
+
client_id: this.clientId,
|
|
38
|
+
redirect_uri: this.redirectUri,
|
|
39
|
+
scope: this.scope,
|
|
40
|
+
state: e,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
getRegisterUrl(e) {
|
|
44
|
+
return this.generateUrl(this.registerPath, {
|
|
45
|
+
client_id: this.clientId,
|
|
46
|
+
redirect_uri: this.redirectUri,
|
|
47
|
+
scope: this.scope,
|
|
48
|
+
state: e,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
getLogoutUrl() {
|
|
52
|
+
return this.generateUrl(this.logoutPath, {
|
|
53
|
+
client_id: this.clientId,
|
|
54
|
+
post_logout_redirect_uri: this.redirectUri,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
getTokenRefreshUrl() {
|
|
58
|
+
return this.generateUrl(this.tokenRefreshPath, {
|
|
59
|
+
client_id: this.clientId,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
generateUrl(e, t) {
|
|
63
|
+
const s = new URL(this.serverUrl);
|
|
64
|
+
if (((s.pathname = e), t)) {
|
|
65
|
+
const n = this.generateURLSearchParams(t);
|
|
66
|
+
s.search = n.toString();
|
|
67
|
+
}
|
|
68
|
+
return s;
|
|
69
|
+
}
|
|
70
|
+
generateURLSearchParams(e) {
|
|
71
|
+
const t = new URLSearchParams();
|
|
72
|
+
return (Object.entries(e).forEach(([s, n]) => {
|
|
73
|
+
n && t.append(s, n);
|
|
74
|
+
}),
|
|
75
|
+
t);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
class o {
|
|
79
|
+
/**
|
|
80
|
+
* Parses document.cookie for the access token expiration cookie value.
|
|
81
|
+
* @returns {(number | null)} The moment of expiration in milliseconds since epoch.
|
|
82
|
+
*/
|
|
83
|
+
static getAccessTokenExpirationMoment(e = 'app.at_exp') {
|
|
84
|
+
const t = document.cookie
|
|
85
|
+
.split('; ')
|
|
86
|
+
.map(n => n.split('='))
|
|
87
|
+
.find(([n]) => n === e), s = t == null ? void 0 : t[1];
|
|
88
|
+
return s ? parseInt(s) * 1e3 : null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
class p {
|
|
92
|
+
constructor(e) {
|
|
93
|
+
i(this, 'url');
|
|
94
|
+
this.url = e;
|
|
95
|
+
}
|
|
96
|
+
/** Refresh token a single time */
|
|
97
|
+
async refreshToken() {
|
|
98
|
+
const e = await fetch(this.url.href, {
|
|
99
|
+
method: 'POST',
|
|
100
|
+
credentials: 'include',
|
|
101
|
+
headers: {
|
|
102
|
+
'Content-Type': 'text/plain',
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
if (!(e.status >= 200 && e.status < 300))
|
|
106
|
+
throw new Error('error refreshing access token in fusionauth');
|
|
107
|
+
}
|
|
108
|
+
/** Initializes continuous automatic token refresh. */
|
|
109
|
+
initAutoRefresh(e = 10, t) {
|
|
110
|
+
const s = o.getAccessTokenExpirationMoment(t);
|
|
111
|
+
if (!s)
|
|
112
|
+
return;
|
|
113
|
+
const n = e * 1e3, a = /* @__PURE__ */ new Date().getTime(), h = s - n, c = Math.max(h - a, 0);
|
|
114
|
+
return setTimeout(async () => {
|
|
115
|
+
try {
|
|
116
|
+
await this.refreshToken(), this.initAutoRefresh(e);
|
|
117
|
+
}
|
|
118
|
+
catch (l) {
|
|
119
|
+
console.error(l);
|
|
120
|
+
}
|
|
121
|
+
}, c);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
class m {
|
|
125
|
+
/**
|
|
126
|
+
* Schedules a callback to be invoked at the given moment.
|
|
127
|
+
* @param expirationMoment - the access token expiration moment in milliseconds since the epoch.
|
|
128
|
+
* @param onExpiration - the callback to be invoked at the `expirationMoment`.
|
|
129
|
+
*/
|
|
130
|
+
static scheduleTokenExpirationCallback(e, t) {
|
|
131
|
+
const s = /* @__PURE__ */ new Date().getTime(), n = e - s;
|
|
132
|
+
n > 0 && setTimeout(t, n);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
class R {
|
|
136
|
+
constructor() {
|
|
137
|
+
i(this, 'REDIRECT_VALUE', 'fa-sdk-redirect-value');
|
|
138
|
+
}
|
|
139
|
+
handlePreRedirect(e) {
|
|
140
|
+
const t = `${this.generateRandomString()}:${e ?? ''}`;
|
|
141
|
+
localStorage.setItem(this.REDIRECT_VALUE, t);
|
|
142
|
+
}
|
|
143
|
+
handlePostRedirect(e) {
|
|
144
|
+
const t = this.stateValue ?? void 0;
|
|
145
|
+
e == null || e(t), localStorage.removeItem(this.REDIRECT_VALUE);
|
|
146
|
+
}
|
|
147
|
+
get didRedirect() {
|
|
148
|
+
return !!localStorage.getItem(this.REDIRECT_VALUE);
|
|
149
|
+
}
|
|
150
|
+
get stateValue() {
|
|
151
|
+
const e = localStorage.getItem(this.REDIRECT_VALUE);
|
|
152
|
+
if (!e)
|
|
153
|
+
return null;
|
|
154
|
+
const [, ...t] = e.split(':');
|
|
155
|
+
return t.join(':');
|
|
156
|
+
}
|
|
157
|
+
generateRandomString() {
|
|
158
|
+
const e = new Uint32Array(28);
|
|
159
|
+
return (window.crypto.getRandomValues(e),
|
|
160
|
+
Array.from(e, t => ('0' + t.toString(16)).substring(-2)).join(''));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
class T {
|
|
164
|
+
constructor(e) {
|
|
165
|
+
i(this, 'config');
|
|
166
|
+
i(this, 'urlHelper');
|
|
167
|
+
i(this, 'tokenRefresher');
|
|
168
|
+
i(this, 'redirectHelper', new R());
|
|
169
|
+
(this.config = e),
|
|
170
|
+
(this.urlHelper = new g({
|
|
171
|
+
serverUrl: e.serverUrl,
|
|
172
|
+
clientId: e.clientId,
|
|
173
|
+
redirectUri: e.redirectUri,
|
|
174
|
+
scope: e.scope,
|
|
175
|
+
mePath: e.mePath,
|
|
176
|
+
loginPath: e.loginPath,
|
|
177
|
+
registerPath: e.registerPath,
|
|
178
|
+
logoutPath: e.logoutPath,
|
|
179
|
+
tokenRefreshPath: e.tokenRefreshPath,
|
|
180
|
+
})),
|
|
181
|
+
(this.tokenRefresher = new p(this.urlHelper.getTokenRefreshUrl())),
|
|
182
|
+
this.scheduleTokenExpirationEvent();
|
|
183
|
+
}
|
|
184
|
+
startLogin(e) {
|
|
185
|
+
this.redirectHelper.handlePreRedirect(e),
|
|
186
|
+
window.location.assign(this.urlHelper.getLoginUrl(e));
|
|
187
|
+
}
|
|
188
|
+
startRegister(e) {
|
|
189
|
+
this.redirectHelper.handlePreRedirect(e),
|
|
190
|
+
window.location.assign(this.urlHelper.getRegisterUrl(e));
|
|
191
|
+
}
|
|
192
|
+
startLogout() {
|
|
193
|
+
window.location.assign(this.urlHelper.getLogoutUrl());
|
|
194
|
+
}
|
|
195
|
+
async fetchUserInfo() {
|
|
196
|
+
const e = await fetch(this.urlHelper.getMeUrl(), {
|
|
197
|
+
credentials: 'include',
|
|
198
|
+
});
|
|
199
|
+
if (!e.ok)
|
|
200
|
+
throw new Error(`Unable to fetch userInfo in fusionauth. Request failed with status code ${e == null ? void 0 : e.status}`);
|
|
201
|
+
return await e.json();
|
|
202
|
+
}
|
|
203
|
+
async refreshToken() {
|
|
204
|
+
return await this.tokenRefresher.refreshToken();
|
|
205
|
+
}
|
|
206
|
+
initAutoRefresh() {
|
|
207
|
+
return this.tokenRefresher.initAutoRefresh(this.config.autoRefreshSecondsBeforeExpiry, this.config.accessTokenExpireCookieName);
|
|
208
|
+
}
|
|
209
|
+
handlePostRedirect(e) {
|
|
210
|
+
this.isLoggedIn &&
|
|
211
|
+
this.redirectHelper.didRedirect &&
|
|
212
|
+
this.redirectHelper.handlePostRedirect(e);
|
|
213
|
+
}
|
|
214
|
+
get isLoggedIn() {
|
|
215
|
+
return this.accessTokenExpirationMoment
|
|
216
|
+
? this.accessTokenExpirationMoment > /* @__PURE__ */ new Date().getTime()
|
|
217
|
+
: !1;
|
|
218
|
+
}
|
|
219
|
+
get accessTokenExpirationMoment() {
|
|
220
|
+
return o.getAccessTokenExpirationMoment(this.config.accessTokenExpireCookieName);
|
|
221
|
+
}
|
|
222
|
+
scheduleTokenExpirationEvent() {
|
|
223
|
+
this.accessTokenExpirationMoment &&
|
|
224
|
+
this.config.onTokenExpiration &&
|
|
225
|
+
m.scheduleTokenExpirationCallback(this.accessTokenExpirationMoment, this.config.onTokenExpiration);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function U() {
|
|
229
|
+
const r = /* @__PURE__ */ new Date();
|
|
230
|
+
r.setHours(r.getHours() + 1);
|
|
231
|
+
const e = r.getTime() / 1e3;
|
|
232
|
+
document.cookie = `app.at_exp=${e}`;
|
|
233
|
+
}
|
|
234
|
+
function P() {
|
|
235
|
+
document.cookie = 'app.at_exp=;expires=Thu, 01 Jan 1970 00:00:00 GMT';
|
|
236
|
+
}
|
|
237
|
+
function E(r) {
|
|
238
|
+
const e = {
|
|
239
|
+
...window.location,
|
|
240
|
+
assign: r.fn(),
|
|
241
|
+
};
|
|
242
|
+
return r.spyOn(window, 'location', 'get').mockReturnValue(e), e;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Service class to use with FusionAuth backend endpoints.
|
|
247
|
+
*/
|
|
248
|
+
class FusionAuthService {
|
|
249
|
+
constructor(config) {
|
|
250
|
+
this.core = new T({
|
|
251
|
+
...config,
|
|
252
|
+
onTokenExpiration: () => {
|
|
253
|
+
this.isLoggedInSubject.next(false);
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
this.isLoggedInSubject = new BehaviorSubject(this.core.isLoggedIn);
|
|
257
|
+
this.isLoggedIn$ = this.isLoggedInSubject.asObservable();
|
|
258
|
+
this.core.handlePostRedirect(config.onRedirect);
|
|
259
|
+
if (config.shouldAutoRefresh && this.core.isLoggedIn) {
|
|
260
|
+
this.initAutoRefresh();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/** A function that returns whether the user is logged in. This returned value is non-observable. */
|
|
264
|
+
isLoggedIn() {
|
|
265
|
+
return this.core.isLoggedIn;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Refreshes the access token a single time.
|
|
269
|
+
* Automatic token refreshing can be enabled if the SDK is configured with `shouldAutoRefresh`.
|
|
270
|
+
*/
|
|
271
|
+
async refreshToken() {
|
|
272
|
+
return await this.core.refreshToken();
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Initializes automatic access token refreshing.
|
|
276
|
+
* This is handled automatically if the SDK is configured with `shouldAutoRefresh`.
|
|
277
|
+
*/
|
|
278
|
+
initAutoRefresh() {
|
|
279
|
+
if (this.autoRefreshTimer) {
|
|
280
|
+
clearTimeout(this.autoRefreshTimer);
|
|
281
|
+
}
|
|
282
|
+
this.autoRefreshTimer = this.core.initAutoRefresh();
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Returns an observable request that fetches userInfo, and catches error.
|
|
286
|
+
*/
|
|
287
|
+
getUserInfoObservable(callbacks) {
|
|
288
|
+
callbacks?.onBegin?.();
|
|
289
|
+
return new Observable(observer => {
|
|
290
|
+
this.core
|
|
291
|
+
.fetchUserInfo()
|
|
292
|
+
.then(userInfo => {
|
|
293
|
+
observer.next(userInfo);
|
|
294
|
+
})
|
|
295
|
+
.catch(error => {
|
|
296
|
+
observer.error(error);
|
|
297
|
+
})
|
|
298
|
+
.finally(() => {
|
|
299
|
+
callbacks?.onDone?.();
|
|
300
|
+
});
|
|
301
|
+
}).pipe(catchError(error => {
|
|
302
|
+
throw error;
|
|
303
|
+
}));
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Fetches userInfo from the 'me' endpoint.
|
|
307
|
+
* @throws {Error} - if an error occurred while fetching.
|
|
308
|
+
*/
|
|
309
|
+
async getUserInfo() {
|
|
310
|
+
return await this.core.fetchUserInfo();
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Initiates login flow.
|
|
314
|
+
* @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.
|
|
315
|
+
*/
|
|
316
|
+
startLogin(state) {
|
|
317
|
+
this.core.startLogin(state);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Initiates register flow.
|
|
321
|
+
* @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.
|
|
322
|
+
*/
|
|
323
|
+
startRegistration(state) {
|
|
324
|
+
this.core.startRegister(state);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Initiates logout flow.
|
|
328
|
+
*/
|
|
329
|
+
logout() {
|
|
330
|
+
this.core.startLogout();
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
class FusionAuthLoginButtonComponent {
|
|
335
|
+
constructor(fusionAuth) {
|
|
336
|
+
this.fusionAuth = fusionAuth;
|
|
337
|
+
}
|
|
338
|
+
login() {
|
|
339
|
+
this.fusionAuth.startLogin(this.state);
|
|
340
|
+
}
|
|
341
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
342
|
+
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"] }); }
|
|
343
|
+
}
|
|
344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
|
|
345
|
+
type: Component,
|
|
346
|
+
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"] }]
|
|
347
|
+
}], ctorParameters: () => [{ type: FusionAuthService }], propDecorators: { state: [{
|
|
348
|
+
type: Input
|
|
349
|
+
}] } });
|
|
350
|
+
|
|
351
|
+
class FusionAuthLogoutButtonComponent {
|
|
352
|
+
constructor(fusionAuth) {
|
|
353
|
+
this.fusionAuth = fusionAuth;
|
|
354
|
+
}
|
|
355
|
+
logout() {
|
|
356
|
+
this.fusionAuth.logout();
|
|
357
|
+
}
|
|
358
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
359
|
+
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"] }); }
|
|
360
|
+
}
|
|
361
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
|
|
362
|
+
type: Component,
|
|
363
|
+
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"] }]
|
|
364
|
+
}], ctorParameters: () => [{ type: FusionAuthService }] });
|
|
365
|
+
|
|
366
|
+
class FusionAuthRegisterButtonComponent {
|
|
367
|
+
constructor(fusionAuth) {
|
|
368
|
+
this.fusionAuth = fusionAuth;
|
|
369
|
+
}
|
|
370
|
+
register() {
|
|
371
|
+
this.fusionAuth.startRegistration(this.state);
|
|
372
|
+
}
|
|
373
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
374
|
+
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"] }); }
|
|
375
|
+
}
|
|
376
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
|
|
377
|
+
type: Component,
|
|
378
|
+
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"] }]
|
|
379
|
+
}], ctorParameters: () => [{ type: FusionAuthService }], propDecorators: { state: [{
|
|
380
|
+
type: Input
|
|
381
|
+
}] } });
|
|
382
|
+
|
|
383
|
+
class FusionAuthModule {
|
|
384
|
+
static forRoot(fusionAuthConfig) {
|
|
385
|
+
return {
|
|
386
|
+
ngModule: FusionAuthModule,
|
|
387
|
+
providers: [
|
|
388
|
+
{
|
|
389
|
+
provide: FusionAuthService,
|
|
390
|
+
useValue: new FusionAuthService(fusionAuthConfig),
|
|
391
|
+
},
|
|
392
|
+
],
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
396
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
|
|
397
|
+
FusionAuthLogoutButtonComponent,
|
|
398
|
+
FusionAuthRegisterButtonComponent], exports: [FusionAuthLoginButtonComponent,
|
|
399
|
+
FusionAuthLogoutButtonComponent,
|
|
400
|
+
FusionAuthRegisterButtonComponent] }); }
|
|
401
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule }); }
|
|
402
|
+
}
|
|
403
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, decorators: [{
|
|
404
|
+
type: NgModule,
|
|
405
|
+
args: [{
|
|
406
|
+
declarations: [
|
|
407
|
+
FusionAuthLoginButtonComponent,
|
|
408
|
+
FusionAuthLogoutButtonComponent,
|
|
409
|
+
FusionAuthRegisterButtonComponent,
|
|
410
|
+
],
|
|
411
|
+
imports: [],
|
|
412
|
+
exports: [
|
|
413
|
+
FusionAuthLoginButtonComponent,
|
|
414
|
+
FusionAuthLogoutButtonComponent,
|
|
415
|
+
FusionAuthRegisterButtonComponent,
|
|
416
|
+
],
|
|
417
|
+
}]
|
|
418
|
+
}] });
|
|
419
|
+
|
|
420
|
+
/*
|
|
421
|
+
* Public API Surface of fusionauth-angular-sdk
|
|
422
|
+
*/
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Generated bundle index. Do not edit.
|
|
426
|
+
*/
|
|
427
|
+
|
|
428
|
+
export { FusionAuthLoginButtonComponent, FusionAuthLogoutButtonComponent, FusionAuthModule, FusionAuthRegisterButtonComponent, FusionAuthService };
|
|
429
|
+
//# sourceMappingURL=fusionauth-angular-sdk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fusionauth-angular-sdk.mjs","sources":["../../../projects/fusionauth-angular-sdk/src/lib/core.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/fusion-auth.module.ts","../../../projects/fusionauth-angular-sdk/src/public-api.ts","../../../projects/fusionauth-angular-sdk/src/fusionauth-angular-sdk.ts"],"sourcesContent":["// @ts-nocheck\nconst u = Object.defineProperty;\nconst d = (r, e, t) =>\n e in r\n ? u(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t })\n : (r[e] = t);\nconst i = (r, e, t) => (d(r, typeof e != 'symbol' ? e + '' : e, t), t);\nclass g {\n constructor(e) {\n i(this, 'serverUrl');\n i(this, 'clientId');\n i(this, 'redirectUri');\n i(this, 'scope');\n i(this, 'mePath');\n i(this, 'loginPath');\n i(this, 'registerPath');\n i(this, 'logoutPath');\n i(this, 'tokenRefreshPath');\n (this.serverUrl = e.serverUrl),\n (this.clientId = e.clientId),\n (this.redirectUri = e.redirectUri),\n (this.scope = e.scope),\n (this.mePath = e.mePath ?? '/app/me'),\n (this.loginPath = e.loginPath ?? '/app/login'),\n (this.registerPath = e.registerPath ?? '/app/register'),\n (this.logoutPath = e.logoutPath ?? '/app/logout'),\n (this.tokenRefreshPath = e.tokenRefreshPath ?? '/app/refresh');\n }\n getMeUrl() {\n return this.generateUrl(this.mePath);\n }\n getLoginUrl(e) {\n return this.generateUrl(this.loginPath, {\n client_id: this.clientId,\n redirect_uri: this.redirectUri,\n scope: this.scope,\n state: e,\n });\n }\n getRegisterUrl(e) {\n return this.generateUrl(this.registerPath, {\n client_id: this.clientId,\n redirect_uri: this.redirectUri,\n scope: this.scope,\n state: e,\n });\n }\n getLogoutUrl() {\n return this.generateUrl(this.logoutPath, {\n client_id: this.clientId,\n post_logout_redirect_uri: this.redirectUri,\n });\n }\n getTokenRefreshUrl() {\n return this.generateUrl(this.tokenRefreshPath, {\n client_id: this.clientId,\n });\n }\n generateUrl(e, t) {\n const s = new URL(this.serverUrl);\n if (((s.pathname = e), t)) {\n const n = this.generateURLSearchParams(t);\n s.search = n.toString();\n }\n return s;\n }\n generateURLSearchParams(e) {\n const t = new URLSearchParams();\n return (\n Object.entries(e).forEach(([s, n]) => {\n n && t.append(s, n);\n }),\n t\n );\n }\n}\nclass o {\n /**\n * Parses document.cookie for the access token expiration cookie value.\n * @returns {(number | null)} The moment of expiration in milliseconds since epoch.\n */\n static getAccessTokenExpirationMoment(e = 'app.at_exp') {\n const t = document.cookie\n .split('; ')\n .map(n => n.split('='))\n .find(([n]) => n === e),\n s = t == null ? void 0 : t[1];\n return s ? parseInt(s) * 1e3 : null;\n }\n}\nclass p {\n constructor(e) {\n i(this, 'url');\n this.url = e;\n }\n /** Refresh token a single time */\n async refreshToken() {\n const e = await fetch(this.url.href, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'text/plain',\n },\n });\n if (!(e.status >= 200 && e.status < 300))\n throw new Error('error refreshing access token in fusionauth');\n }\n /** Initializes continuous automatic token refresh. */\n initAutoRefresh(e = 10, t) {\n const s = o.getAccessTokenExpirationMoment(t);\n if (!s) return;\n const n = e * 1e3,\n a = /* @__PURE__ */ new Date().getTime(),\n h = s - n,\n c = Math.max(h - a, 0);\n return setTimeout(async () => {\n try {\n await this.refreshToken(), this.initAutoRefresh(e);\n } catch (l) {\n console.error(l);\n }\n }, c);\n }\n}\nclass m {\n /**\n * Schedules a callback to be invoked at the given moment.\n * @param expirationMoment - the access token expiration moment in milliseconds since the epoch.\n * @param onExpiration - the callback to be invoked at the `expirationMoment`.\n */\n static scheduleTokenExpirationCallback(e, t) {\n const s = /* @__PURE__ */ new Date().getTime(),\n n = e - s;\n n > 0 && setTimeout(t, n);\n }\n}\nclass R {\n constructor() {\n i(this, 'REDIRECT_VALUE', 'fa-sdk-redirect-value');\n }\n handlePreRedirect(e) {\n const t = `${this.generateRandomString()}:${e ?? ''}`;\n localStorage.setItem(this.REDIRECT_VALUE, t);\n }\n handlePostRedirect(e) {\n const t = this.stateValue ?? void 0;\n e == null || e(t), localStorage.removeItem(this.REDIRECT_VALUE);\n }\n get didRedirect() {\n return !!localStorage.getItem(this.REDIRECT_VALUE);\n }\n get stateValue() {\n const e = localStorage.getItem(this.REDIRECT_VALUE);\n if (!e) return null;\n const [, ...t] = e.split(':');\n return t.join(':');\n }\n generateRandomString() {\n const e = new Uint32Array(28);\n return (\n window.crypto.getRandomValues(e),\n Array.from(e, t => ('0' + t.toString(16)).substring(-2)).join('')\n );\n }\n}\nclass T {\n constructor(e) {\n i(this, 'config');\n i(this, 'urlHelper');\n i(this, 'tokenRefresher');\n i(this, 'redirectHelper', new R());\n (this.config = e),\n (this.urlHelper = new g({\n serverUrl: e.serverUrl,\n clientId: e.clientId,\n redirectUri: e.redirectUri,\n scope: e.scope,\n mePath: e.mePath,\n loginPath: e.loginPath,\n registerPath: e.registerPath,\n logoutPath: e.logoutPath,\n tokenRefreshPath: e.tokenRefreshPath,\n })),\n (this.tokenRefresher = new p(this.urlHelper.getTokenRefreshUrl())),\n this.scheduleTokenExpirationEvent();\n }\n startLogin(e) {\n this.redirectHelper.handlePreRedirect(e),\n window.location.assign(this.urlHelper.getLoginUrl(e));\n }\n startRegister(e) {\n this.redirectHelper.handlePreRedirect(e),\n window.location.assign(this.urlHelper.getRegisterUrl(e));\n }\n startLogout() {\n window.location.assign(this.urlHelper.getLogoutUrl());\n }\n async fetchUserInfo() {\n const e = await fetch(this.urlHelper.getMeUrl(), {\n credentials: 'include',\n });\n if (!e.ok)\n throw new Error(\n `Unable to fetch userInfo in fusionauth. Request failed with status code ${e == null ? void 0 : e.status}`,\n );\n return await e.json();\n }\n async refreshToken() {\n return await this.tokenRefresher.refreshToken();\n }\n initAutoRefresh() {\n return this.tokenRefresher.initAutoRefresh(\n this.config.autoRefreshSecondsBeforeExpiry,\n this.config.accessTokenExpireCookieName,\n );\n }\n handlePostRedirect(e) {\n this.isLoggedIn &&\n this.redirectHelper.didRedirect &&\n this.redirectHelper.handlePostRedirect(e);\n }\n get isLoggedIn() {\n return this.accessTokenExpirationMoment\n ? this.accessTokenExpirationMoment > /* @__PURE__ */ new Date().getTime()\n : !1;\n }\n get accessTokenExpirationMoment() {\n return o.getAccessTokenExpirationMoment(\n this.config.accessTokenExpireCookieName,\n );\n }\n scheduleTokenExpirationEvent() {\n this.accessTokenExpirationMoment &&\n this.config.onTokenExpiration &&\n m.scheduleTokenExpirationCallback(\n this.accessTokenExpirationMoment,\n this.config.onTokenExpiration,\n );\n }\n}\nfunction U() {\n const r = /* @__PURE__ */ new Date();\n r.setHours(r.getHours() + 1);\n const e = r.getTime() / 1e3;\n document.cookie = `app.at_exp=${e}`;\n}\nfunction P() {\n document.cookie = 'app.at_exp=;expires=Thu, 01 Jan 1970 00:00:00 GMT';\n}\nfunction E(r) {\n const e = {\n ...window.location,\n assign: r.fn(),\n };\n return r.spyOn(window, 'location', 'get').mockReturnValue(e), e;\n}\nexport {\n o as CookieHelpers,\n T as SDKCore,\n p as TokenRefresher,\n g as UrlHelper,\n U as mockIsLoggedIn,\n E as mockWindowLocation,\n P as removeAt_expCookie,\n};\n","import { SDKCore } from './core';\nimport { FusionAuthConfig, UserInfo } from './types';\nimport { Observable, catchError, BehaviorSubject } from 'rxjs';\n\n/**\n * Service class to use with FusionAuth backend endpoints.\n */\nexport class FusionAuthService {\n private core: SDKCore;\n private autoRefreshTimer?: NodeJS.Timeout;\n private isLoggedInSubject: BehaviorSubject<boolean>;\n\n constructor(config: FusionAuthConfig) {\n this.core = new SDKCore({\n ...config,\n onTokenExpiration: () => {\n this.isLoggedInSubject.next(false);\n },\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<void> {\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<UserInfo> {\n callbacks?.onBegin?.();\n return new Observable<UserInfo>(observer => {\n this.core\n .fetchUserInfo()\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(): Promise<UserInfo> {\n return await this.core.fetchUserInfo();\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","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 { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FusionAuthConfig } from './types';\nimport { FusionAuthService } from './fusion-auth.service';\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';\n\n@NgModule({\n declarations: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n ],\n imports: [],\n exports: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n ],\n})\nexport class FusionAuthModule {\n static forRoot(\n fusionAuthConfig: FusionAuthConfig,\n ): ModuleWithProviders<FusionAuthModule> {\n return {\n ngModule: FusionAuthModule,\n providers: [\n {\n provide: FusionAuthService,\n useValue: new FusionAuthService(fusionAuthConfig),\n },\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/fusion-auth.module';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["SDKCore","i1.FusionAuthService"],"mappings":"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"}
|
|
@@ -6,5 +6,5 @@ export declare class FusionAuthLoginButtonComponent {
|
|
|
6
6
|
constructor(fusionAuth: FusionAuthService);
|
|
7
7
|
login(): void;
|
|
8
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<FusionAuthLoginButtonComponent, never>;
|
|
9
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthLoginButtonComponent, "fa-login", never, { "state": "state"; }, {}, never, never, false, never>;
|
|
9
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthLoginButtonComponent, "fa-login", never, { "state": { "alias": "state"; "required": false; }; }, {}, never, never, false, never>;
|
|
10
10
|
}
|
package/lib/components/fusionauth-register.button/fusion-auth-register-button.component.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export declare class FusionAuthRegisterButtonComponent {
|
|
|
6
6
|
constructor(fusionAuth: FusionAuthService);
|
|
7
7
|
register(): void;
|
|
8
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<FusionAuthRegisterButtonComponent, never>;
|
|
9
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthRegisterButtonComponent, "fa-register", never, { "state": "state"; }, {}, never, never, false, never>;
|
|
9
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthRegisterButtonComponent, "fa-register", never, { "state": { "alias": "state"; "required": false; }; }, {}, never, never, false, never>;
|
|
10
10
|
}
|