@fusionauth/angular-sdk 0.1.7 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -66
- package/esm2022/lib/components/fusionauth-login.button/fusion-auth-login-button.component.mjs +3 -3
- package/esm2022/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs +3 -3
- package/esm2022/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs +3 -3
- package/esm2022/lib/core.mjs +217 -0
- package/esm2022/lib/fusion-auth.module.mjs +4 -4
- package/esm2022/lib/fusion-auth.service.mjs +58 -94
- package/esm2022/lib/types.mjs +1 -1
- package/fesm2022/fusionauth-angular-sdk.mjs +285 -106
- package/fesm2022/fusionauth-angular-sdk.mjs.map +1 -1
- package/lib/core.d.ts +35 -0
- package/lib/fusion-auth.service.d.ts +26 -17
- package/lib/types.d.ts +48 -2
- package/package.json +1 -1
|
@@ -1,130 +1,309 @@
|
|
|
1
|
+
import { BehaviorSubject, Observable, catchError } from 'rxjs';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
3
|
import { Component, Input, NgModule } from '@angular/core';
|
|
3
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 o = this.generateURLSearchParams(t);
|
|
66
|
+
s.search = o.toString();
|
|
67
|
+
}
|
|
68
|
+
return s;
|
|
69
|
+
}
|
|
70
|
+
generateURLSearchParams(e) {
|
|
71
|
+
const t = new URLSearchParams();
|
|
72
|
+
return (Object.entries(e).forEach(([s, o]) => {
|
|
73
|
+
o && t.append(s, o);
|
|
74
|
+
}),
|
|
75
|
+
t);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
class p {
|
|
79
|
+
constructor() {
|
|
80
|
+
i(this, 'REDIRECT_VALUE', 'fa-sdk-redirect-value');
|
|
81
|
+
}
|
|
82
|
+
handlePreRedirect(e) {
|
|
83
|
+
const t = `${this.generateRandomString()}:${e ?? ''}`;
|
|
84
|
+
localStorage.setItem(this.REDIRECT_VALUE, t);
|
|
85
|
+
}
|
|
86
|
+
handlePostRedirect(e) {
|
|
87
|
+
const t = this.stateValue ?? void 0;
|
|
88
|
+
e == null || e(t), localStorage.removeItem(this.REDIRECT_VALUE);
|
|
89
|
+
}
|
|
90
|
+
get didRedirect() {
|
|
91
|
+
return !!localStorage.getItem(this.REDIRECT_VALUE);
|
|
92
|
+
}
|
|
93
|
+
get stateValue() {
|
|
94
|
+
const e = localStorage.getItem(this.REDIRECT_VALUE);
|
|
95
|
+
if (!e)
|
|
96
|
+
return null;
|
|
97
|
+
const [, ...t] = e.split(':');
|
|
98
|
+
return t.join(':');
|
|
99
|
+
}
|
|
100
|
+
generateRandomString() {
|
|
101
|
+
const e = new Uint32Array(28);
|
|
102
|
+
return (window.crypto.getRandomValues(e),
|
|
103
|
+
Array.from(e, t => ('0' + t.toString(16)).substring(-2)).join(''));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function m(r = 'app.at_exp') {
|
|
107
|
+
const e = document.cookie
|
|
108
|
+
.split('; ')
|
|
109
|
+
.map(s => s.split('='))
|
|
110
|
+
.find(([s]) => s === r), t = e == null ? void 0 : e[1];
|
|
111
|
+
return t ? parseInt(t) * 1e3 : null;
|
|
112
|
+
}
|
|
113
|
+
class U {
|
|
114
|
+
constructor(e) {
|
|
115
|
+
i(this, 'config');
|
|
116
|
+
i(this, 'urlHelper');
|
|
117
|
+
i(this, 'redirectHelper', new p());
|
|
118
|
+
i(this, 'tokenExpirationTimeout');
|
|
119
|
+
(this.config = e),
|
|
120
|
+
(this.urlHelper = new g({
|
|
121
|
+
serverUrl: e.serverUrl,
|
|
122
|
+
clientId: e.clientId,
|
|
123
|
+
redirectUri: e.redirectUri,
|
|
124
|
+
scope: e.scope,
|
|
125
|
+
mePath: e.mePath,
|
|
126
|
+
loginPath: e.loginPath,
|
|
127
|
+
registerPath: e.registerPath,
|
|
128
|
+
logoutPath: e.logoutPath,
|
|
129
|
+
tokenRefreshPath: e.tokenRefreshPath,
|
|
130
|
+
})),
|
|
131
|
+
this.scheduleTokenExpiration();
|
|
132
|
+
}
|
|
133
|
+
startLogin(e) {
|
|
134
|
+
this.redirectHelper.handlePreRedirect(e),
|
|
135
|
+
window.location.assign(this.urlHelper.getLoginUrl(e));
|
|
136
|
+
}
|
|
137
|
+
startRegister(e) {
|
|
138
|
+
this.redirectHelper.handlePreRedirect(e),
|
|
139
|
+
window.location.assign(this.urlHelper.getRegisterUrl(e));
|
|
140
|
+
}
|
|
141
|
+
startLogout() {
|
|
142
|
+
window.location.assign(this.urlHelper.getLogoutUrl());
|
|
143
|
+
}
|
|
144
|
+
async fetchUserInfo() {
|
|
145
|
+
const e = await fetch(this.urlHelper.getMeUrl(), {
|
|
146
|
+
credentials: 'include',
|
|
147
|
+
});
|
|
148
|
+
if (!e.ok)
|
|
149
|
+
throw new Error(`Unable to fetch userInfo in fusionauth. Request failed with status code ${e == null ? void 0 : e.status}`);
|
|
150
|
+
return await e.json();
|
|
151
|
+
}
|
|
152
|
+
async refreshToken() {
|
|
153
|
+
const e = await fetch(this.urlHelper.getTokenRefreshUrl(), {
|
|
154
|
+
method: 'POST',
|
|
155
|
+
credentials: 'include',
|
|
156
|
+
headers: {
|
|
157
|
+
'Content-Type': 'text/plain',
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
if (!(e.status >= 200 && e.status < 300)) {
|
|
161
|
+
const t = (await (e == null ? void 0 : e.text())) ||
|
|
162
|
+
'Error refreshing access token in fusionauth';
|
|
163
|
+
throw new Error(t);
|
|
164
|
+
}
|
|
165
|
+
return this.scheduleTokenExpiration(), e;
|
|
166
|
+
}
|
|
167
|
+
initAutoRefresh() {
|
|
168
|
+
const e = this.at_exp, t = this.config.autoRefreshSecondsBeforeExpiry ?? 10;
|
|
169
|
+
if (!e)
|
|
170
|
+
return;
|
|
171
|
+
const s = t * 1e3, o = /* @__PURE__ */ new Date().getTime(), h = e - s, l = Math.max(h - o, 0);
|
|
172
|
+
return setTimeout(async () => {
|
|
173
|
+
let n, a;
|
|
174
|
+
try {
|
|
175
|
+
await this.refreshToken(), this.initAutoRefresh();
|
|
176
|
+
}
|
|
177
|
+
catch (c) {
|
|
178
|
+
(a = (n = this.config).onAutoRefreshFailure) == null || a.call(n, c);
|
|
179
|
+
}
|
|
180
|
+
}, l);
|
|
181
|
+
}
|
|
182
|
+
handlePostRedirect(e) {
|
|
183
|
+
this.isLoggedIn &&
|
|
184
|
+
this.redirectHelper.didRedirect &&
|
|
185
|
+
this.redirectHelper.handlePostRedirect(e);
|
|
186
|
+
}
|
|
187
|
+
get isLoggedIn() {
|
|
188
|
+
return this.at_exp
|
|
189
|
+
? this.at_exp > /* @__PURE__ */ new Date().getTime()
|
|
190
|
+
: !1;
|
|
191
|
+
}
|
|
192
|
+
/** The moment of access token expiration in milliseconds since epoch. */
|
|
193
|
+
get at_exp() {
|
|
194
|
+
return m(this.config.accessTokenExpireCookieName);
|
|
195
|
+
}
|
|
196
|
+
/** Schedules `onTokenExpiration` at moment of access token expiration. */
|
|
197
|
+
scheduleTokenExpiration() {
|
|
198
|
+
clearTimeout(this.tokenExpirationTimeout);
|
|
199
|
+
const e = this.at_exp ?? -1, t = /* @__PURE__ */ new Date().getTime(), s = e - t;
|
|
200
|
+
s > 0 &&
|
|
201
|
+
(this.tokenExpirationTimeout = setTimeout(this.config.onTokenExpiration, s));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function P() {
|
|
205
|
+
const r = /* @__PURE__ */ new Date();
|
|
206
|
+
r.setHours(r.getHours() + 1);
|
|
207
|
+
const e = r.getTime() / 1e3;
|
|
208
|
+
document.cookie = `app.at_exp=${e}`;
|
|
209
|
+
}
|
|
210
|
+
function f() {
|
|
211
|
+
document.cookie = 'app.at_exp=;expires=Thu, 01 Jan 1970 00:00:00 GMT';
|
|
212
|
+
}
|
|
213
|
+
function w(r) {
|
|
214
|
+
const e = {
|
|
215
|
+
...window.location,
|
|
216
|
+
assign: r.fn(),
|
|
217
|
+
};
|
|
218
|
+
return r.spyOn(window, 'location', 'get').mockReturnValue(e), e;
|
|
219
|
+
}
|
|
220
|
+
|
|
4
221
|
/**
|
|
5
222
|
* Service class to use with FusionAuth backend endpoints.
|
|
6
223
|
*/
|
|
7
224
|
class FusionAuthService {
|
|
8
225
|
constructor(config) {
|
|
9
|
-
this.
|
|
226
|
+
this.core = new U({
|
|
227
|
+
...config,
|
|
228
|
+
onTokenExpiration: () => {
|
|
229
|
+
this.isLoggedInSubject.next(false);
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
this.isLoggedInSubject = new BehaviorSubject(this.core.isLoggedIn);
|
|
233
|
+
this.isLoggedIn$ = this.isLoggedInSubject.asObservable();
|
|
234
|
+
this.core.handlePostRedirect(config.onRedirect);
|
|
235
|
+
if (config.shouldAutoRefresh && this.core.isLoggedIn) {
|
|
236
|
+
this.initAutoRefresh();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/** A function that returns whether the user is logged in. This returned value is non-observable. */
|
|
240
|
+
isLoggedIn() {
|
|
241
|
+
return this.core.isLoggedIn;
|
|
10
242
|
}
|
|
11
243
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
244
|
+
* Refreshes the access token a single time.
|
|
245
|
+
* Automatic token refreshing can be enabled if the SDK is configured with `shouldAutoRefresh`.
|
|
14
246
|
*/
|
|
15
|
-
async
|
|
16
|
-
|
|
17
|
-
const uri = this.getUrlForPath(path);
|
|
18
|
-
const resp = await fetch(uri.href, {
|
|
19
|
-
credentials: 'include',
|
|
20
|
-
});
|
|
21
|
-
return JSON.parse(await resp.text());
|
|
247
|
+
async refreshToken() {
|
|
248
|
+
return await this.core.refreshToken();
|
|
22
249
|
}
|
|
23
250
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
251
|
+
* Initializes automatic access token refreshing.
|
|
252
|
+
* This is handled automatically if the SDK is configured with `shouldAutoRefresh`.
|
|
26
253
|
*/
|
|
27
254
|
initAutoRefresh() {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const refreshBeforeSeconds = this.config.autoRefreshSecondsBeforeExpiry
|
|
31
|
-
? this.config.autoRefreshSecondsBeforeExpiry
|
|
32
|
-
: 10;
|
|
33
|
-
const now = new Date().getTime();
|
|
34
|
-
const refreshTime = exp - refreshBeforeSeconds * 1000;
|
|
35
|
-
let timeTillThen = refreshTime - now;
|
|
36
|
-
if (timeTillThen <= 0) {
|
|
37
|
-
timeTillThen = 0;
|
|
38
|
-
}
|
|
39
|
-
setTimeout(async () => {
|
|
40
|
-
try {
|
|
41
|
-
await this.refreshToken();
|
|
42
|
-
this.initAutoRefresh();
|
|
43
|
-
}
|
|
44
|
-
catch (e) {
|
|
45
|
-
console.error(e);
|
|
46
|
-
}
|
|
47
|
-
}, timeTillThen);
|
|
255
|
+
if (this.autoRefreshTimer) {
|
|
256
|
+
clearTimeout(this.autoRefreshTimer);
|
|
48
257
|
}
|
|
258
|
+
this.autoRefreshTimer = this.core.initAutoRefresh();
|
|
49
259
|
}
|
|
50
260
|
/**
|
|
51
|
-
*
|
|
52
|
-
* @return {boolean} app.at_exp is present and not for a time in the past
|
|
261
|
+
* Returns an observable request that fetches userInfo, and catches error.
|
|
53
262
|
*/
|
|
54
|
-
|
|
55
|
-
|
|
263
|
+
getUserInfoObservable(callbacks) {
|
|
264
|
+
callbacks?.onBegin?.();
|
|
265
|
+
return new Observable(observer => {
|
|
266
|
+
this.core
|
|
267
|
+
.fetchUserInfo()
|
|
268
|
+
.then(userInfo => {
|
|
269
|
+
observer.next(userInfo);
|
|
270
|
+
})
|
|
271
|
+
.catch(error => {
|
|
272
|
+
observer.error(error);
|
|
273
|
+
})
|
|
274
|
+
.finally(() => {
|
|
275
|
+
callbacks?.onDone?.();
|
|
276
|
+
});
|
|
277
|
+
}).pipe(catchError(error => {
|
|
278
|
+
throw error;
|
|
279
|
+
}));
|
|
56
280
|
}
|
|
57
281
|
/**
|
|
58
|
-
*
|
|
282
|
+
* Fetches userInfo from the 'me' endpoint.
|
|
283
|
+
* @throws {Error} - if an error occurred while fetching.
|
|
59
284
|
*/
|
|
60
|
-
async
|
|
61
|
-
|
|
62
|
-
? `${this.config.tokenRefreshPath}/${this.config.clientId}`
|
|
63
|
-
: `/app/refresh/${this.config.clientId}`;
|
|
64
|
-
const uri = this.getUrlForPath(path);
|
|
65
|
-
const resp = await fetch(uri.href, {
|
|
66
|
-
method: 'POST',
|
|
67
|
-
credentials: 'include',
|
|
68
|
-
headers: {
|
|
69
|
-
'Content-Type': 'text/plain',
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
if (!(resp.status >= 200 && resp.status < 300)) {
|
|
73
|
-
throw new Error('error refreshing access token in fusionauth');
|
|
74
|
-
}
|
|
285
|
+
async getUserInfo() {
|
|
286
|
+
return await this.core.fetchUserInfo();
|
|
75
287
|
}
|
|
76
288
|
/**
|
|
77
|
-
*
|
|
289
|
+
* Initiates login flow.
|
|
290
|
+
* @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.
|
|
78
291
|
*/
|
|
79
292
|
startLogin(state) {
|
|
80
|
-
|
|
81
|
-
state
|
|
82
|
-
? this.doRedirectForPath(path, { state })
|
|
83
|
-
: this.doRedirectForPath(path);
|
|
293
|
+
this.core.startLogin(state);
|
|
84
294
|
}
|
|
85
295
|
/**
|
|
86
|
-
*
|
|
296
|
+
* Initiates register flow.
|
|
297
|
+
* @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.
|
|
87
298
|
*/
|
|
88
299
|
startRegistration(state) {
|
|
89
|
-
|
|
90
|
-
? this.config.registerPath
|
|
91
|
-
: '/app/register';
|
|
92
|
-
state
|
|
93
|
-
? this.doRedirectForPath(path, { state })
|
|
94
|
-
: this.doRedirectForPath(path);
|
|
300
|
+
this.core.startRegister(state);
|
|
95
301
|
}
|
|
96
302
|
/**
|
|
97
|
-
*
|
|
303
|
+
* Initiates logout flow.
|
|
98
304
|
*/
|
|
99
305
|
logout() {
|
|
100
|
-
|
|
101
|
-
? this.config.logoutPath
|
|
102
|
-
: '/app/logout';
|
|
103
|
-
this.doRedirectForPath(path);
|
|
104
|
-
}
|
|
105
|
-
doRedirectForPath(path, params = {}) {
|
|
106
|
-
path = path + `/${this.config.clientId}`;
|
|
107
|
-
if (this.config.redirectUri) {
|
|
108
|
-
params['redirect_uri'] = this.config.redirectUri;
|
|
109
|
-
}
|
|
110
|
-
const location = this.getUrlForPath(path, params);
|
|
111
|
-
window.location.assign(location);
|
|
112
|
-
}
|
|
113
|
-
getUrlForPath(path, params = {}) {
|
|
114
|
-
const url = new URL(this.config.serverUrl);
|
|
115
|
-
url.pathname = path;
|
|
116
|
-
if (Object.entries(params).length > 0) {
|
|
117
|
-
const urlParams = new URLSearchParams(params);
|
|
118
|
-
url.search = urlParams.toString();
|
|
119
|
-
}
|
|
120
|
-
return url;
|
|
121
|
-
}
|
|
122
|
-
getExpTime() {
|
|
123
|
-
const expCookie = document.cookie
|
|
124
|
-
.split('; ')
|
|
125
|
-
.map(c => c.split('='))
|
|
126
|
-
.find(([name]) => name === 'app.at_exp');
|
|
127
|
-
return expCookie ? parseInt(expCookie?.[1] ?? '0') * 1000 : null;
|
|
306
|
+
this.core.startLogout();
|
|
128
307
|
}
|
|
129
308
|
}
|
|
130
309
|
|
|
@@ -135,10 +314,10 @@ class FusionAuthLoginButtonComponent {
|
|
|
135
314
|
login() {
|
|
136
315
|
this.fusionAuth.startLogin(this.state);
|
|
137
316
|
}
|
|
138
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
139
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
317
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
318
|
+
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"] }); }
|
|
140
319
|
}
|
|
141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
|
|
142
321
|
type: Component,
|
|
143
322
|
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"] }]
|
|
144
323
|
}], ctorParameters: () => [{ type: FusionAuthService }], propDecorators: { state: [{
|
|
@@ -152,10 +331,10 @@ class FusionAuthLogoutButtonComponent {
|
|
|
152
331
|
logout() {
|
|
153
332
|
this.fusionAuth.logout();
|
|
154
333
|
}
|
|
155
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
156
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
334
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
335
|
+
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"] }); }
|
|
157
336
|
}
|
|
158
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
337
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
|
|
159
338
|
type: Component,
|
|
160
339
|
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"] }]
|
|
161
340
|
}], ctorParameters: () => [{ type: FusionAuthService }] });
|
|
@@ -167,10 +346,10 @@ class FusionAuthRegisterButtonComponent {
|
|
|
167
346
|
register() {
|
|
168
347
|
this.fusionAuth.startRegistration(this.state);
|
|
169
348
|
}
|
|
170
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
171
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
349
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
350
|
+
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"] }); }
|
|
172
351
|
}
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
352
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
|
|
174
353
|
type: Component,
|
|
175
354
|
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"] }]
|
|
176
355
|
}], ctorParameters: () => [{ type: FusionAuthService }], propDecorators: { state: [{
|
|
@@ -189,15 +368,15 @@ class FusionAuthModule {
|
|
|
189
368
|
],
|
|
190
369
|
};
|
|
191
370
|
}
|
|
192
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
193
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
371
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
372
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
|
|
194
373
|
FusionAuthLogoutButtonComponent,
|
|
195
374
|
FusionAuthRegisterButtonComponent], exports: [FusionAuthLoginButtonComponent,
|
|
196
375
|
FusionAuthLogoutButtonComponent,
|
|
197
376
|
FusionAuthRegisterButtonComponent] }); }
|
|
198
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
377
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule }); }
|
|
199
378
|
}
|
|
200
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: FusionAuthModule, decorators: [{
|
|
201
380
|
type: NgModule,
|
|
202
381
|
args: [{
|
|
203
382
|
declarations: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fusionauth-angular-sdk.mjs","sources":["../../../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":["import { FusionAuthConfig, UserInfo } from './types';\n\n/**\n * Service class to use with FusionAuth backend endpoints.\n */\nexport class FusionAuthService {\n constructor(private config: FusionAuthConfig) {}\n\n /**\n * Calls the 'me' endpoint to retrieve user info.\n * @return {Promise<UserInfo>} the user info response.\n */\n async getUserInfo(): Promise<UserInfo> {\n const path = this.config.mePath ? this.config.mePath : '/app/me';\n const uri = this.getUrlForPath(path);\n const resp = await fetch(uri.href, {\n credentials: 'include',\n });\n return JSON.parse(await resp.text()) as UserInfo;\n }\n\n /**\n * Checks for the 'app.at_exp' cookie and if present sets a timer to refresh the access token.\n * Will attempt to refresh the configured seconds before the access token expires (default is ten seconds).\n */\n initAutoRefresh(): void {\n const exp = this.getExpTime();\n if (exp) {\n const refreshBeforeSeconds = this.config.autoRefreshSecondsBeforeExpiry\n ? this.config.autoRefreshSecondsBeforeExpiry\n : 10;\n const now = new Date().getTime();\n const refreshTime = exp - refreshBeforeSeconds * 1000;\n let timeTillThen = refreshTime - now;\n if (timeTillThen <= 0) {\n timeTillThen = 0;\n }\n setTimeout(async () => {\n try {\n await this.refreshToken();\n this.initAutoRefresh();\n } catch (e) {\n console.error(e);\n }\n }, timeTillThen);\n }\n }\n\n /**\n * Checks that the 'app.at_exp' cookie is present and for a time in the future to determine logged-in state.\n * @return {boolean} app.at_exp is present and not for a time in the past\n */\n isLoggedIn(): boolean {\n return (this.getExpTime() ?? 0) > new Date().getTime();\n }\n\n /**\n * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.\n */\n async refreshToken(): Promise<void> {\n const path = this.config.tokenRefreshPath\n ? `${this.config.tokenRefreshPath}/${this.config.clientId}`\n : `/app/refresh/${this.config.clientId}`;\n const uri = this.getUrlForPath(path);\n const resp = await fetch(uri.href, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'text/plain',\n },\n });\n if (!(resp.status >= 200 && resp.status < 300)) {\n throw new Error('error refreshing access token in fusionauth');\n }\n }\n\n /**\n * Invokes a redirect to the configured 'login' endpoint.\n */\n startLogin(state?: string): void {\n const path = this.config.loginPath ? this.config.loginPath : '/app/login';\n state\n ? this.doRedirectForPath(path, { state })\n : this.doRedirectForPath(path);\n }\n\n /**\n * Invokes a redirect to the configured 'refresh' endpoint.\n */\n startRegistration(state?: string): void {\n const path = this.config.registerPath\n ? this.config.registerPath\n : '/app/register';\n state\n ? this.doRedirectForPath(path, { state })\n : this.doRedirectForPath(path);\n }\n\n /**\n * Invokes a redirect to the configured 'logout' endpoint.\n */\n logout(): void {\n const path = this.config.logoutPath\n ? this.config.logoutPath\n : '/app/logout';\n this.doRedirectForPath(path);\n }\n\n private doRedirectForPath(path: string, params: Record<string, any> = {}) {\n path = path + `/${this.config.clientId}`;\n if (this.config.redirectUri) {\n params['redirect_uri'] = this.config.redirectUri;\n }\n const location = this.getUrlForPath(path, params);\n window.location.assign(location);\n }\n\n private getUrlForPath(path: string, params: Record<string, any> = {}): URL {\n const url = new URL(this.config.serverUrl);\n url.pathname = path;\n if (Object.entries(params).length > 0) {\n const urlParams = new URLSearchParams(params);\n url.search = urlParams.toString();\n }\n return url;\n }\n\n private getExpTime(): number | null {\n const expCookie = document.cookie\n .split('; ')\n .map(c => c.split('='))\n .find(([name]) => name === 'app.at_exp');\n return expCookie ? parseInt(expCookie?.[1] ?? '0') * 1000 : null;\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":["i1.FusionAuthService"],"mappings":"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"}
|
|
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 o = this.generateURLSearchParams(t);\n s.search = o.toString();\n }\n return s;\n }\n generateURLSearchParams(e) {\n const t = new URLSearchParams();\n return (\n Object.entries(e).forEach(([s, o]) => {\n o && t.append(s, o);\n }),\n t\n );\n }\n}\nclass p {\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}\nfunction m(r = 'app.at_exp') {\n const e = document.cookie\n .split('; ')\n .map(s => s.split('='))\n .find(([s]) => s === r),\n t = e == null ? void 0 : e[1];\n return t ? parseInt(t) * 1e3 : null;\n}\nclass U {\n constructor(e) {\n i(this, 'config');\n i(this, 'urlHelper');\n i(this, 'redirectHelper', new p());\n i(this, 'tokenExpirationTimeout');\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.scheduleTokenExpiration();\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 const e = await fetch(this.urlHelper.getTokenRefreshUrl(), {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'text/plain',\n },\n });\n if (!(e.status >= 200 && e.status < 300)) {\n const t =\n (await (e == null ? void 0 : e.text())) ||\n 'Error refreshing access token in fusionauth';\n throw new Error(t);\n }\n return this.scheduleTokenExpiration(), e;\n }\n initAutoRefresh() {\n const e = this.at_exp,\n t = this.config.autoRefreshSecondsBeforeExpiry ?? 10;\n if (!e) return;\n const s = t * 1e3,\n o = /* @__PURE__ */ new Date().getTime(),\n h = e - s,\n l = Math.max(h - o, 0);\n return setTimeout(async () => {\n let n, a;\n try {\n await this.refreshToken(), this.initAutoRefresh();\n } catch (c) {\n (a = (n = this.config).onAutoRefreshFailure) == null || a.call(n, c);\n }\n }, l);\n }\n handlePostRedirect(e) {\n this.isLoggedIn &&\n this.redirectHelper.didRedirect &&\n this.redirectHelper.handlePostRedirect(e);\n }\n get isLoggedIn() {\n return this.at_exp\n ? this.at_exp > /* @__PURE__ */ new Date().getTime()\n : !1;\n }\n /** The moment of access token expiration in milliseconds since epoch. */\n get at_exp() {\n return m(this.config.accessTokenExpireCookieName);\n }\n /** Schedules `onTokenExpiration` at moment of access token expiration. */\n scheduleTokenExpiration() {\n clearTimeout(this.tokenExpirationTimeout);\n const e = this.at_exp ?? -1,\n t = /* @__PURE__ */ new Date().getTime(),\n s = e - t;\n s > 0 &&\n (this.tokenExpirationTimeout = setTimeout(\n this.config.onTokenExpiration,\n s,\n ));\n }\n}\nfunction P() {\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 f() {\n document.cookie = 'app.at_exp=;expires=Thu, 01 Jan 1970 00:00:00 GMT';\n}\nfunction w(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 U as SDKCore,\n P as mockIsLoggedIn,\n w as mockWindowLocation,\n f 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<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<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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"}
|
package/lib/core.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
declare class U {
|
|
3
|
+
constructor(e: any);
|
|
4
|
+
startLogin(e: any): void;
|
|
5
|
+
startRegister(e: any): void;
|
|
6
|
+
startLogout(): void;
|
|
7
|
+
fetchUserInfo(): Promise<any>;
|
|
8
|
+
refreshToken(): Promise<Response>;
|
|
9
|
+
initAutoRefresh(): NodeJS.Timeout | undefined;
|
|
10
|
+
handlePostRedirect(e: any): void;
|
|
11
|
+
get isLoggedIn(): boolean;
|
|
12
|
+
/** The moment of access token expiration in milliseconds since epoch. */
|
|
13
|
+
get at_exp(): number | null;
|
|
14
|
+
/** Schedules `onTokenExpiration` at moment of access token expiration. */
|
|
15
|
+
scheduleTokenExpiration(): void;
|
|
16
|
+
}
|
|
17
|
+
declare function P(): void;
|
|
18
|
+
declare function f(): void;
|
|
19
|
+
declare function w(r: any): {
|
|
20
|
+
assign: any;
|
|
21
|
+
ancestorOrigins: DOMStringList;
|
|
22
|
+
hash: string;
|
|
23
|
+
host: string;
|
|
24
|
+
hostname: string;
|
|
25
|
+
href: string;
|
|
26
|
+
toString(): string;
|
|
27
|
+
origin: string;
|
|
28
|
+
pathname: string;
|
|
29
|
+
port: string;
|
|
30
|
+
protocol: string;
|
|
31
|
+
search: string;
|
|
32
|
+
reload(): void;
|
|
33
|
+
replace(url: string | URL): void;
|
|
34
|
+
};
|
|
35
|
+
export { U as SDKCore, P as mockIsLoggedIn, w as mockWindowLocation, f as removeAt_expCookie, };
|