ngx-better-auth 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/fesm2022/ngx-better-auth.mjs +348 -40
- package/fesm2022/ngx-better-auth.mjs.map +1 -1
- package/index.d.ts +497 -2256
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -54,8 +54,19 @@ You can inject different services depending on your needs:
|
|
|
54
54
|
### Global services
|
|
55
55
|
- `AuthService`
|
|
56
56
|
- `SessionService`
|
|
57
|
+
- `AccountService`
|
|
57
58
|
|
|
58
59
|
### Plugin services
|
|
60
|
+
Authentication:
|
|
61
|
+
- `TwoFactorService`
|
|
62
|
+
- `PasskeyService`
|
|
63
|
+
- `GenericOauthService`
|
|
64
|
+
- `EmailOtpService`
|
|
65
|
+
- `OneTapService`
|
|
66
|
+
- `MagicLinkService`
|
|
67
|
+
- `UsernameService`
|
|
68
|
+
|
|
69
|
+
Authorization:
|
|
59
70
|
- `AdminService`
|
|
60
71
|
- `OrganizationService`
|
|
61
72
|
|
|
@@ -1,14 +1,27 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, signal, computed,
|
|
3
|
-
import { Observable, filter, map, shareReplay, defer } from 'rxjs';
|
|
2
|
+
import { inject, Injectable, signal, computed, InjectionToken, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
+
import { Observable, filter, map, shareReplay, defer, switchMap, tap } from 'rxjs';
|
|
4
4
|
import { createAuthClient } from 'better-auth/client';
|
|
5
5
|
import { Router } from '@angular/router';
|
|
6
6
|
|
|
7
|
-
class
|
|
7
|
+
class MainService {
|
|
8
8
|
config = inject(BETTER_AUTH_CONFIG_TOKEN);
|
|
9
9
|
authClient = createAuthClient({
|
|
10
10
|
...this.config,
|
|
11
11
|
});
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MainService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
13
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MainService, providedIn: 'root' });
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MainService, decorators: [{
|
|
16
|
+
type: Injectable,
|
|
17
|
+
args: [{
|
|
18
|
+
providedIn: 'root',
|
|
19
|
+
}]
|
|
20
|
+
}] });
|
|
21
|
+
|
|
22
|
+
class AuthService {
|
|
23
|
+
mainService = inject(MainService);
|
|
24
|
+
client = this.mainService.authClient;
|
|
12
25
|
/**
|
|
13
26
|
* Current authenticated session
|
|
14
27
|
*/
|
|
@@ -25,7 +38,7 @@ class AuthService {
|
|
|
25
38
|
constructor() {
|
|
26
39
|
this.session$();
|
|
27
40
|
const useSession$ = new Observable((subscriber) => {
|
|
28
|
-
this.
|
|
41
|
+
this.client.useSession.subscribe((value) => subscriber.next(value));
|
|
29
42
|
});
|
|
30
43
|
this.sessionState$ = useSession$.pipe(filter((session) => !session.isPending), map((session) => {
|
|
31
44
|
if (session.error) {
|
|
@@ -43,7 +56,7 @@ class AuthService {
|
|
|
43
56
|
return this.sessionState$.pipe(map((session) => !!session?.session));
|
|
44
57
|
}
|
|
45
58
|
session$() {
|
|
46
|
-
this.
|
|
59
|
+
this.client.useSession.subscribe((session) => {
|
|
47
60
|
if (session.isPending) {
|
|
48
61
|
this.session.set(null);
|
|
49
62
|
return;
|
|
@@ -60,16 +73,46 @@ class AuthService {
|
|
|
60
73
|
});
|
|
61
74
|
}
|
|
62
75
|
signInEmail(data) {
|
|
63
|
-
return defer(() => this.
|
|
76
|
+
return defer(() => this.client.signIn.email(data)).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))));
|
|
64
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Sign up a new user using email and password.
|
|
80
|
+
*
|
|
81
|
+
* Parameters username and displayUsername can be used if the username's plugin is enabled.
|
|
82
|
+
* @param data
|
|
83
|
+
*/
|
|
65
84
|
signUpEmail(data) {
|
|
66
|
-
return defer(() => this.
|
|
85
|
+
return defer(() => this.client.signUp.email(data)).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))));
|
|
67
86
|
}
|
|
68
87
|
signInProvider(provider) {
|
|
69
|
-
return defer(() => this.
|
|
88
|
+
return defer(() => this.client.signIn.social({ provider })).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))));
|
|
70
89
|
}
|
|
71
90
|
signOut() {
|
|
72
|
-
return defer(() => this.
|
|
91
|
+
return defer(() => this.client.signOut()).pipe(tap(() => this.sessionState$.pipe(filter((s) => s === null))));
|
|
92
|
+
}
|
|
93
|
+
sendVerificationEmail(data) {
|
|
94
|
+
return defer(() => this.client.sendVerificationEmail(data));
|
|
95
|
+
}
|
|
96
|
+
requestPasswordReset(data) {
|
|
97
|
+
return defer(() => this.client.requestPasswordReset(data));
|
|
98
|
+
}
|
|
99
|
+
resetPassword(data) {
|
|
100
|
+
return defer(() => this.client.resetPassword(data));
|
|
101
|
+
}
|
|
102
|
+
changePassword(data) {
|
|
103
|
+
return defer(() => this.client.changePassword(data));
|
|
104
|
+
}
|
|
105
|
+
changeEmail(data) {
|
|
106
|
+
return defer(() => this.client.changeEmail(data));
|
|
107
|
+
}
|
|
108
|
+
updateUser(data) {
|
|
109
|
+
return defer(() => this.client.updateUser(data));
|
|
110
|
+
}
|
|
111
|
+
isUsernameAvailable(data) {
|
|
112
|
+
return defer(() => this.client.isUsernameAvailable(data));
|
|
113
|
+
}
|
|
114
|
+
deleteUser(data) {
|
|
115
|
+
return defer(() => this.client.deleteUser(data)).pipe(tap(() => this.sessionState$.pipe(filter((s) => s === null))));
|
|
73
116
|
}
|
|
74
117
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
75
118
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
@@ -81,7 +124,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImpor
|
|
|
81
124
|
}]
|
|
82
125
|
}], ctorParameters: () => [] });
|
|
83
126
|
|
|
84
|
-
|
|
127
|
+
class SessionService {
|
|
128
|
+
mainService = inject(MainService);
|
|
129
|
+
client = this.mainService.authClient;
|
|
130
|
+
listSessions() {
|
|
131
|
+
return defer(() => this.client.listSessions());
|
|
132
|
+
}
|
|
133
|
+
revokeSession(sessionToken) {
|
|
134
|
+
return defer(() => this.client.revokeSession({ token: sessionToken }));
|
|
135
|
+
}
|
|
136
|
+
revokeOtherSessions() {
|
|
137
|
+
return defer(() => this.client.revokeOtherSessions());
|
|
138
|
+
}
|
|
139
|
+
revokeAllSessions() {
|
|
140
|
+
return defer(() => this.client.revokeSessions());
|
|
141
|
+
}
|
|
142
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: SessionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
143
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: SessionService, providedIn: 'root' });
|
|
144
|
+
}
|
|
145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: SessionService, decorators: [{
|
|
146
|
+
type: Injectable,
|
|
147
|
+
args: [{ providedIn: 'root' }]
|
|
148
|
+
}] });
|
|
149
|
+
|
|
150
|
+
class AccountService {
|
|
151
|
+
mainService = inject(MainService);
|
|
152
|
+
client = this.mainService.authClient;
|
|
153
|
+
listAccounts() {
|
|
154
|
+
return defer(() => this.client.listAccounts());
|
|
155
|
+
}
|
|
156
|
+
linkSocial(data) {
|
|
157
|
+
return defer(() => this.client.linkSocial(data));
|
|
158
|
+
}
|
|
159
|
+
unlinkAccount(data) {
|
|
160
|
+
return defer(() => this.client.unlinkAccount(data));
|
|
161
|
+
}
|
|
162
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: AccountService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
163
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: AccountService, providedIn: 'root' });
|
|
164
|
+
}
|
|
165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: AccountService, decorators: [{
|
|
166
|
+
type: Injectable,
|
|
167
|
+
args: [{ providedIn: 'root' }]
|
|
168
|
+
}] });
|
|
169
|
+
|
|
170
|
+
function validatePlugin(client, property) {
|
|
85
171
|
if (!client) {
|
|
86
172
|
throw new Error('AuthClient is not initialized.');
|
|
87
173
|
}
|
|
@@ -90,12 +176,176 @@ function validateAdminPlugin(client, property) {
|
|
|
90
176
|
}
|
|
91
177
|
}
|
|
92
178
|
|
|
93
|
-
class
|
|
179
|
+
class TwoFactorService {
|
|
180
|
+
mainService = inject(MainService);
|
|
181
|
+
twoFactor;
|
|
182
|
+
constructor() {
|
|
183
|
+
const client = this.mainService.authClient;
|
|
184
|
+
validatePlugin(client, 'twoFactor');
|
|
185
|
+
this.twoFactor = client.twoFactor;
|
|
186
|
+
}
|
|
187
|
+
enable(data) {
|
|
188
|
+
return defer(() => this.twoFactor.enable(data));
|
|
189
|
+
}
|
|
190
|
+
disable(data) {
|
|
191
|
+
return defer(() => this.twoFactor.disable(data));
|
|
192
|
+
}
|
|
193
|
+
getTotpUri(data) {
|
|
194
|
+
return defer(() => this.twoFactor.getTotpUri(data));
|
|
195
|
+
}
|
|
196
|
+
verifyTotp(data) {
|
|
197
|
+
return defer(() => this.twoFactor.verifyTotp(data));
|
|
198
|
+
}
|
|
199
|
+
sendOtp(data) {
|
|
200
|
+
return defer(() => this.twoFactor.sendOtp(data));
|
|
201
|
+
}
|
|
202
|
+
verifyOtp(data) {
|
|
203
|
+
return defer(() => this.twoFactor.verifyOtp(data));
|
|
204
|
+
}
|
|
205
|
+
generateBackupCodes(data) {
|
|
206
|
+
return defer(() => this.twoFactor.generateBackupCodes(data));
|
|
207
|
+
}
|
|
208
|
+
verifyBackupCode(data) {
|
|
209
|
+
return defer(() => this.twoFactor.verifyBackupCode(data));
|
|
210
|
+
}
|
|
211
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TwoFactorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
212
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TwoFactorService, providedIn: 'root' });
|
|
213
|
+
}
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: TwoFactorService, decorators: [{
|
|
215
|
+
type: Injectable,
|
|
216
|
+
args: [{ providedIn: 'root' }]
|
|
217
|
+
}], ctorParameters: () => [] });
|
|
218
|
+
|
|
219
|
+
class PasskeyService {
|
|
220
|
+
mainService = inject(MainService);
|
|
221
|
+
passkey;
|
|
222
|
+
constructor() {
|
|
223
|
+
const client = this.mainService.authClient;
|
|
224
|
+
validatePlugin(client, 'passkey');
|
|
225
|
+
this.passkey = client.passkey;
|
|
226
|
+
}
|
|
227
|
+
addPasskey(data) {
|
|
228
|
+
return defer(() => this.passkey.addPasskey(data));
|
|
229
|
+
}
|
|
230
|
+
listUserPasskeys() {
|
|
231
|
+
return defer(() => this.passkey.listUserPasskeys());
|
|
232
|
+
}
|
|
233
|
+
deletePasskey(data) {
|
|
234
|
+
return defer(() => this.passkey.deletePasskey(data));
|
|
235
|
+
}
|
|
236
|
+
updatePasskey(data) {
|
|
237
|
+
return defer(() => this.passkey.updatePasskey(data));
|
|
238
|
+
}
|
|
239
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PasskeyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
240
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PasskeyService, providedIn: 'root' });
|
|
241
|
+
}
|
|
242
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: PasskeyService, decorators: [{
|
|
243
|
+
type: Injectable,
|
|
244
|
+
args: [{ providedIn: 'root' }]
|
|
245
|
+
}], ctorParameters: () => [] });
|
|
246
|
+
|
|
247
|
+
class GenericOauthService {
|
|
248
|
+
mainService = inject(MainService);
|
|
94
249
|
authService = inject(AuthService);
|
|
250
|
+
oauth;
|
|
251
|
+
constructor() {
|
|
252
|
+
const client = this.mainService.authClient;
|
|
253
|
+
validatePlugin(client, 'oauth2');
|
|
254
|
+
this.oauth = client.oauth2;
|
|
255
|
+
}
|
|
256
|
+
signIn(data) {
|
|
257
|
+
return defer(() => this.mainService.authClient.signIn.oauth2(data)).pipe(switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))));
|
|
258
|
+
}
|
|
259
|
+
link(data) {
|
|
260
|
+
return defer(() => this.oauth.link(data));
|
|
261
|
+
}
|
|
262
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GenericOauthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
263
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GenericOauthService, providedIn: 'root' });
|
|
264
|
+
}
|
|
265
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: GenericOauthService, decorators: [{
|
|
266
|
+
type: Injectable,
|
|
267
|
+
args: [{ providedIn: 'root' }]
|
|
268
|
+
}], ctorParameters: () => [] });
|
|
269
|
+
|
|
270
|
+
class EmailOtpService {
|
|
271
|
+
mainService = inject(MainService);
|
|
272
|
+
authService = inject(AuthService);
|
|
273
|
+
emailOtp;
|
|
274
|
+
constructor() {
|
|
275
|
+
const client = this.mainService.authClient;
|
|
276
|
+
validatePlugin(client, 'emailOtp');
|
|
277
|
+
this.emailOtp = client.emailOtp;
|
|
278
|
+
}
|
|
279
|
+
signInEmailOtp(data) {
|
|
280
|
+
return defer(() => this.mainService.authClient.signIn.emailOtp(data)).pipe(switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))));
|
|
281
|
+
}
|
|
282
|
+
sendVerificationOtp(data) {
|
|
283
|
+
return defer(() => this.emailOtp.sendVerificationOtp(data));
|
|
284
|
+
}
|
|
285
|
+
checkVerificationOtp(data) {
|
|
286
|
+
return defer(() => this.emailOtp.checkVerificationOtp(data));
|
|
287
|
+
}
|
|
288
|
+
verifyEmail(data) {
|
|
289
|
+
return defer(() => this.emailOtp.verifyEmail(data));
|
|
290
|
+
}
|
|
291
|
+
resetPassword(data) {
|
|
292
|
+
return defer(() => this.emailOtp.resetPassword(data));
|
|
293
|
+
}
|
|
294
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: EmailOtpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
295
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: EmailOtpService, providedIn: 'root' });
|
|
296
|
+
}
|
|
297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: EmailOtpService, decorators: [{
|
|
298
|
+
type: Injectable,
|
|
299
|
+
args: [{ providedIn: 'root' }]
|
|
300
|
+
}], ctorParameters: () => [] });
|
|
301
|
+
|
|
302
|
+
class OneTapService {
|
|
303
|
+
mainService = inject(MainService);
|
|
304
|
+
oneTap;
|
|
305
|
+
constructor() {
|
|
306
|
+
const client = this.mainService.authClient;
|
|
307
|
+
validatePlugin(client, 'oneTap');
|
|
308
|
+
this.oneTap = client.oneTap;
|
|
309
|
+
}
|
|
310
|
+
signIn(data) {
|
|
311
|
+
return defer(() => this.oneTap(data));
|
|
312
|
+
}
|
|
313
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: OneTapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
314
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: OneTapService, providedIn: 'root' });
|
|
315
|
+
}
|
|
316
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: OneTapService, decorators: [{
|
|
317
|
+
type: Injectable,
|
|
318
|
+
args: [{ providedIn: 'root' }]
|
|
319
|
+
}], ctorParameters: () => [] });
|
|
320
|
+
|
|
321
|
+
class MagicLinkService {
|
|
322
|
+
mainService = inject(MainService);
|
|
323
|
+
magicLink;
|
|
324
|
+
constructor() {
|
|
325
|
+
const client = this.mainService.authClient;
|
|
326
|
+
validatePlugin(client, 'magicLink');
|
|
327
|
+
this.magicLink = client.magicLink;
|
|
328
|
+
}
|
|
329
|
+
signIn(data) {
|
|
330
|
+
return defer(() => this.mainService.authClient.signIn.magicLink(data));
|
|
331
|
+
}
|
|
332
|
+
verify(data) {
|
|
333
|
+
return defer(() => this.magicLink.verify(data));
|
|
334
|
+
}
|
|
335
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MagicLinkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
336
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MagicLinkService, providedIn: 'root' });
|
|
337
|
+
}
|
|
338
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: MagicLinkService, decorators: [{
|
|
339
|
+
type: Injectable,
|
|
340
|
+
args: [{ providedIn: 'root' }]
|
|
341
|
+
}], ctorParameters: () => [] });
|
|
342
|
+
|
|
343
|
+
class AdminService {
|
|
344
|
+
mainService = inject(MainService);
|
|
95
345
|
admin;
|
|
96
346
|
constructor() {
|
|
97
|
-
const client = this.
|
|
98
|
-
|
|
347
|
+
const client = this.mainService.authClient;
|
|
348
|
+
validatePlugin(client, 'admin');
|
|
99
349
|
this.admin = client.admin;
|
|
100
350
|
}
|
|
101
351
|
setRole(data) {
|
|
@@ -143,46 +393,104 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImpor
|
|
|
143
393
|
}], ctorParameters: () => [] });
|
|
144
394
|
|
|
145
395
|
class OrganizationService {
|
|
146
|
-
|
|
396
|
+
mainService = inject(MainService);
|
|
147
397
|
organization;
|
|
148
398
|
constructor() {
|
|
149
|
-
const client = this.
|
|
150
|
-
|
|
399
|
+
const client = this.mainService.authClient;
|
|
400
|
+
validatePlugin(client, 'organization');
|
|
151
401
|
this.organization = client.organization;
|
|
152
402
|
}
|
|
153
403
|
createOrganization(data) {
|
|
154
404
|
return defer(() => this.organization.create(data));
|
|
155
405
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: OrganizationService, decorators: [{
|
|
160
|
-
type: Injectable,
|
|
161
|
-
args: [{ providedIn: 'root' }]
|
|
162
|
-
}], ctorParameters: () => [] });
|
|
163
|
-
|
|
164
|
-
class SessionService {
|
|
165
|
-
authService = inject(AuthService);
|
|
166
|
-
client = this.authService.authClient;
|
|
167
|
-
listSessions() {
|
|
168
|
-
return defer(() => this.client.listSessions());
|
|
406
|
+
checkSlug(data) {
|
|
407
|
+
return defer(() => this.organization.checkSlug(data));
|
|
169
408
|
}
|
|
170
|
-
|
|
171
|
-
return defer(() => this.
|
|
409
|
+
list() {
|
|
410
|
+
return defer(() => this.organization.list());
|
|
172
411
|
}
|
|
173
|
-
|
|
174
|
-
return defer(() => this.
|
|
412
|
+
setActive(data) {
|
|
413
|
+
return defer(() => this.organization.setActive(data));
|
|
175
414
|
}
|
|
176
|
-
|
|
177
|
-
return defer(() => this.
|
|
415
|
+
getFullOrganization(data) {
|
|
416
|
+
return defer(() => this.organization.getFullOrganization(data));
|
|
178
417
|
}
|
|
179
|
-
|
|
180
|
-
|
|
418
|
+
update(data) {
|
|
419
|
+
return defer(() => this.organization.update(data));
|
|
420
|
+
}
|
|
421
|
+
delete(data) {
|
|
422
|
+
return defer(() => this.organization.delete(data));
|
|
423
|
+
}
|
|
424
|
+
inviteMember(data) {
|
|
425
|
+
return defer(() => this.organization.inviteMember(data));
|
|
426
|
+
}
|
|
427
|
+
acceptInvitation(data) {
|
|
428
|
+
return defer(() => this.organization.acceptInvitation(data));
|
|
429
|
+
}
|
|
430
|
+
cancelInvitation(data) {
|
|
431
|
+
return defer(() => this.organization.cancelInvitation(data));
|
|
432
|
+
}
|
|
433
|
+
rejectInvitation(data) {
|
|
434
|
+
return defer(() => this.organization.rejectInvitation(data));
|
|
435
|
+
}
|
|
436
|
+
getInvitation(data) {
|
|
437
|
+
return defer(() => this.organization.getInvitation(data));
|
|
438
|
+
}
|
|
439
|
+
listInvitations(data) {
|
|
440
|
+
return defer(() => this.organization.listInvitations(data));
|
|
441
|
+
}
|
|
442
|
+
listUserInvitations() {
|
|
443
|
+
return defer(() => this.organization.listUserInvitations());
|
|
444
|
+
}
|
|
445
|
+
listMembers(data = {}) {
|
|
446
|
+
return defer(() => this.organization.listMembers(data));
|
|
447
|
+
}
|
|
448
|
+
removeMember(data) {
|
|
449
|
+
return defer(() => this.organization.removeMember(data));
|
|
450
|
+
}
|
|
451
|
+
updateMemberRoles(data) {
|
|
452
|
+
return defer(() => this.organization.updateMemberRoles(data));
|
|
453
|
+
}
|
|
454
|
+
getActiveMember() {
|
|
455
|
+
return defer(() => this.organization.getActiveMember());
|
|
456
|
+
}
|
|
457
|
+
leave(data) {
|
|
458
|
+
return defer(() => this.organization.leave(data));
|
|
459
|
+
}
|
|
460
|
+
createTeam(data) {
|
|
461
|
+
return defer(() => this.organization.createTeam(data));
|
|
462
|
+
}
|
|
463
|
+
listTeams(data) {
|
|
464
|
+
return defer(() => this.organization.listTeams(data));
|
|
465
|
+
}
|
|
466
|
+
updateTeam(data) {
|
|
467
|
+
return defer(() => this.organization.updateTeam(data));
|
|
468
|
+
}
|
|
469
|
+
removeTeam(data) {
|
|
470
|
+
return defer(() => this.organization.removeTeam(data));
|
|
471
|
+
}
|
|
472
|
+
setActiveTeam(data) {
|
|
473
|
+
return defer(() => this.organization.setActiveTeam(data));
|
|
474
|
+
}
|
|
475
|
+
listUsersTeams() {
|
|
476
|
+
return defer(() => this.organization.listUsersTeams());
|
|
477
|
+
}
|
|
478
|
+
listTeamMembers(data) {
|
|
479
|
+
return defer(() => this.organization.listTeamMembers(data));
|
|
480
|
+
}
|
|
481
|
+
addTeamMember(data) {
|
|
482
|
+
return defer(() => this.organization.addTeamMember(data));
|
|
483
|
+
}
|
|
484
|
+
removeTeamMember(data) {
|
|
485
|
+
return defer(() => this.organization.removeTeamMember(data));
|
|
486
|
+
}
|
|
487
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: OrganizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
488
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: OrganizationService, providedIn: 'root' });
|
|
181
489
|
}
|
|
182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type:
|
|
490
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: OrganizationService, decorators: [{
|
|
183
491
|
type: Injectable,
|
|
184
492
|
args: [{ providedIn: 'root' }]
|
|
185
|
-
}] });
|
|
493
|
+
}], ctorParameters: () => [] });
|
|
186
494
|
|
|
187
495
|
const BETTER_AUTH_CONFIG_TOKEN = new InjectionToken('BETTER_AUTH_CONFIG');
|
|
188
496
|
const DEFAULT_CONFIG = {};
|
|
@@ -253,5 +561,5 @@ function canActivate(pipe) {
|
|
|
253
561
|
* Generated bundle index. Do not edit.
|
|
254
562
|
*/
|
|
255
563
|
|
|
256
|
-
export { AdminService, AuthService, BETTER_AUTH_CONFIG_TOKEN, OrganizationService, SessionService, canActivate, hasRole, provideBetterAuth, redirectLoggedInTo, redirectUnauthorizedTo };
|
|
564
|
+
export { AccountService, AdminService, AuthService, BETTER_AUTH_CONFIG_TOKEN, EmailOtpService, GenericOauthService, MagicLinkService, OneTapService, OrganizationService, PasskeyService, SessionService, TwoFactorService, canActivate, hasRole, provideBetterAuth, redirectLoggedInTo, redirectUnauthorizedTo };
|
|
257
565
|
//# sourceMappingURL=ngx-better-auth.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-better-auth.mjs","sources":["../../../src/lib/services/auth.service.ts","../../../src/lib/utils/validate-plugin.ts","../../../src/lib/services/admin.service.ts","../../../src/lib/services/organization.service.ts","../../../src/lib/services/session.service.ts","../../../src/lib/providers.ts","../../../src/lib/guards/auth-guard.utils.ts","../../../src/lib/guards/auth-guard.factory.ts","../../../src/ngx-better-auth.ts"],"sourcesContent":["import { computed, inject, Injectable, signal } from '@angular/core'\nimport { BETTER_AUTH_CONFIG_TOKEN } from '../providers'\nimport { BetterFetchError, createAuthClient } from 'better-auth/client'\nimport { AuthSession, Provider } from '../models'\nimport { defer, filter, map, Observable, shareReplay } from 'rxjs'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly config = inject(BETTER_AUTH_CONFIG_TOKEN)\n\n readonly authClient = createAuthClient({\n ...this.config,\n })\n\n /**\n * Current authenticated session\n */\n readonly session = signal<AuthSession | null>(null)\n\n /**\n * Whether there is an active session\n */\n readonly isLoggedIn = computed(() => !!this.session()?.session)\n\n /**\n * Observable stream of the session state. Emits only when the session is resolved (not pending).\n * This is intended for guards and other async operations.\n */\n readonly sessionState$!: Observable<AuthSession | null>\n\n constructor() {\n this.session$()\n\n const useSession$ = new Observable<{\n data: AuthSession | null\n error: BetterFetchError | null\n isPending: boolean\n }>((subscriber) => {\n this.authClient.useSession.subscribe((value) => subscriber.next(value))\n })\n\n this.sessionState$ = useSession$.pipe(\n filter((session) => !session.isPending),\n map((session) => {\n if (session.error) {\n return null\n }\n return session.data\n }),\n shareReplay(1),\n )\n }\n\n /**\n * Asynchronously checks if the user is authenticated.\n * Ideal for route guards.\n * @returns An Observable that emits true for an active session, and false otherwise.\n */\n isLoggedIn$(): Observable<boolean> {\n return this.sessionState$.pipe(map((session) => !!session?.session))\n }\n\n private session$() {\n this.authClient.useSession.subscribe((session) => {\n if (session.isPending) {\n this.session.set(null)\n return\n }\n if (session.error) {\n const error: BetterFetchError = session.error\n if (error.status !== 401) {\n console.error('Error fetching session:', error)\n }\n this.session.set(null)\n return\n }\n this.session.set(session.data)\n })\n }\n\n signInEmail(data: { email: string; password: string; rememberMe?: boolean }) {\n return defer(() => this.authClient.signIn.email(data))\n }\n\n signUpEmail(data: { name: string; email: string; password: string }) {\n return defer(() => this.authClient.signUp.email(data))\n }\n\n signInProvider(provider: Provider) {\n return defer(() => this.authClient.signIn.social({ provider }))\n }\n\n signOut() {\n return defer(() => this.authClient.signOut())\n }\n}\n","export function validateAdminPlugin(client: any, property: string) {\n if (!client) {\n throw new Error('AuthClient is not initialized.')\n }\n\n if (!client[property]) {\n throw new Error(\n `Property '${property}' is not available on authClient. Please ensure the plugin providing this property is included in the plugins array.`,\n )\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { AuthService } from './auth.service'\nimport { validateAdminPlugin } from '../utils/validate-plugin'\n\n@Injectable({ providedIn: 'root' })\nexport class AdminService {\n private readonly authService = inject(AuthService)\n\n admin: any\n\n constructor() {\n const client = this.authService.authClient as { admin?: any }\n validateAdminPlugin(client, 'admin')\n this.admin = client.admin\n }\n\n setRole(data: { userId: string; role: any }) {\n return defer(() => this.admin.setRole(data))\n }\n\n setUserPassword(data: { userId: string; newPassword: string }) {\n return defer(() => this.admin.setUserPassword(data))\n }\n\n banUser(data: { userId: string; banReason?: string; banExpiresIn?: number }) {\n return defer(() => this.admin.banUser(data))\n }\n\n unbanUser(data: { userId: string }) {\n return defer(() => this.admin.unbanUser(data))\n }\n\n listUserSessions(data: { userId: string }) {\n return defer(() => this.admin.listUserSessions(data))\n }\n\n revokeUserSession(data: { sessionToken: string }) {\n return defer(() => this.admin.revokeUserSession(data))\n }\n\n revokeUserSessions(data: { userId: string }) {\n return defer(() => this.admin.revokeUserSessions(data))\n }\n\n impersonateUser(data: { userId: string }) {\n return defer(() => this.admin.impersonateUser(data))\n }\n\n stopImpersonating() {\n return defer(() => this.admin.stopImpersonating())\n }\n\n removeUser(data: { userId: string }) {\n return defer(() => this.admin.removeUser(data))\n }\n\n hasPermission(data: { userId?: string; permission?: any; permissions?: any }) {\n return defer(() => this.admin.hasPermission(data))\n }\n\n checkRolePermission(data: { role: any; permission: any }) {\n return this.admin.checkRolePermission(data)\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { AuthService } from './auth.service'\nimport { validateAdminPlugin } from '../utils/validate-plugin'\n\n@Injectable({ providedIn: 'root' })\nexport class OrganizationService {\n private readonly authService = inject(AuthService)\n\n organization: any\n\n constructor() {\n const client = this.authService.authClient as { organization?: any }\n validateAdminPlugin(client, 'organization')\n this.organization = client.organization\n }\n\n createOrganization(data: { name: string; slug: string }) {\n return defer(() => this.organization.create(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { AuthService } from './auth.service'\nimport { defer } from 'rxjs'\n\n@Injectable({ providedIn: 'root' })\nexport class SessionService {\n private readonly authService = inject(AuthService)\n\n private readonly client = this.authService.authClient\n\n listSessions() {\n return defer(() => this.client.listSessions())\n }\n\n revokeSession(sessionToken: string) {\n return defer(() => this.client.revokeSession({ token: sessionToken }))\n }\n\n revokeOtherSessions() {\n return defer(() => this.client.revokeOtherSessions())\n }\n\n revokeAllSessions() {\n return defer(() => this.client.revokeSessions())\n }\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core'\nimport { type BetterAuthOptions } from 'better-auth'\nimport { AuthService } from './services'\n\nexport const BETTER_AUTH_CONFIG_TOKEN = new InjectionToken<BetterAuthOptions>('BETTER_AUTH_CONFIG')\n\nconst DEFAULT_CONFIG: Partial<BetterAuthOptions> = {}\n\nexport function provideBetterAuth(options: BetterAuthOptions): EnvironmentProviders {\n const config: BetterAuthOptions = { ...DEFAULT_CONFIG, ...options }\n\n // if baseURL is not a url, it might be because of a proxy in development\n if (!config.baseURL?.startsWith('http')) {\n config.baseURL = window.location.origin\n }\n\n return makeEnvironmentProviders([{ provide: BETTER_AUTH_CONFIG_TOKEN, useValue: config }, AuthService])\n}\n","import { inject } from '@angular/core'\nimport { Router, UrlTree } from '@angular/router'\nimport { AuthService } from '../services'\nimport { map, Observable } from 'rxjs'\n\n/**\n * Redirects unauthorized users to the specified commands (route).\n */\nexport function redirectUnauthorizedTo(commands: string[] = ['/login']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n return auth.isLoggedIn$().pipe(map((isLoggedIn) => (isLoggedIn ? true : router.createUrlTree(commands))))\n }\n}\n\n/**\n * Redirects logged-in users to the specified commands (route).\n */\nexport function redirectLoggedInTo(commands: string[] = ['/']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n return auth.isLoggedIn$().pipe(map((isLoggedIn) => (isLoggedIn ? router.createUrlTree(commands) : true)))\n }\n}\n\n/**\n * Allows access only to users with at least one of the specified roles.\n * Redirects unauthorized users to the specified commands (route).\n */\nexport function hasRole(requiredRoles: string[], redirectTo: string[] = ['/unauthorized']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n\n return auth.sessionState$.pipe(\n map((session) => {\n if (!session || !session.user) {\n return router.createUrlTree(redirectTo)\n }\n\n const role = session?.user?.role\n if (Array.isArray(role)) {\n if (role.some((r) => requiredRoles.includes(r))) {\n return true\n }\n } else if (typeof role === 'string') {\n if (requiredRoles.includes(role)) {\n return true\n }\n }\n\n return router.createUrlTree(redirectTo)\n }),\n )\n }\n}\n","import { CanActivateFn, UrlTree } from '@angular/router'\nimport { Observable } from 'rxjs'\n\nexport function canActivate(\n pipe: () => Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree,\n): {\n canActivate: [CanActivateFn]\n} {\n return {\n canActivate: [() => pipe()],\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-better-auth.mjs","sources":["../../../src/lib/services/main.service.ts","../../../src/lib/services/auth.service.ts","../../../src/lib/services/session.service.ts","../../../src/lib/services/account.service.ts","../../../src/lib/utils/validate-plugin.ts","../../../src/lib/services/two-factor.service.ts","../../../src/lib/services/passkey.service.ts","../../../src/lib/services/generic-oauth.service.ts","../../../src/lib/services/email-otp.service.ts","../../../src/lib/services/one-tap.service.ts","../../../src/lib/services/magic-link.service.ts","../../../src/lib/services/admin.service.ts","../../../src/lib/services/organization.service.ts","../../../src/lib/providers.ts","../../../src/lib/guards/auth-guard.utils.ts","../../../src/lib/guards/auth-guard.factory.ts","../../../src/ngx-better-auth.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core'\nimport { BETTER_AUTH_CONFIG_TOKEN } from '../providers'\nimport { createAuthClient } from 'better-auth/client'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MainService {\n private readonly config = inject(BETTER_AUTH_CONFIG_TOKEN)\n\n readonly authClient = createAuthClient({\n ...this.config,\n })\n}\n","import { computed, inject, Injectable, signal } from '@angular/core'\nimport { BetterFetchError } from 'better-auth/client'\nimport { AuthSession, Provider } from '../models'\nimport { defer, filter, map, Observable, shareReplay, switchMap, tap } from 'rxjs'\nimport { MainService } from './main.service'\nimport { SocialProviderList } from 'better-auth/social-providers'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly mainService = inject(MainService)\n\n private readonly client = this.mainService.authClient\n\n /**\n * Current authenticated session\n */\n readonly session = signal<AuthSession | null>(null)\n\n /**\n * Whether there is an active session\n */\n readonly isLoggedIn = computed(() => !!this.session()?.session)\n\n /**\n * Observable stream of the session state. Emits only when the session is resolved (not pending).\n * This is intended for guards and other async operations.\n */\n readonly sessionState$!: Observable<AuthSession | null>\n\n constructor() {\n this.session$()\n\n const useSession$ = new Observable<{\n data: AuthSession | null\n error: BetterFetchError | null\n isPending: boolean\n }>((subscriber) => {\n this.client.useSession.subscribe((value) => subscriber.next(value))\n })\n\n this.sessionState$ = useSession$.pipe(\n filter((session) => !session.isPending),\n map((session) => {\n if (session.error) {\n return null\n }\n return session.data\n }),\n shareReplay(1),\n )\n }\n\n /**\n * Asynchronously checks if the user is authenticated.\n * Ideal for route guards.\n * @returns An Observable that emits true for an active session, and false otherwise.\n */\n isLoggedIn$(): Observable<boolean> {\n return this.sessionState$.pipe(map((session) => !!session?.session))\n }\n\n private session$() {\n this.client.useSession.subscribe((session) => {\n if (session.isPending) {\n this.session.set(null)\n return\n }\n if (session.error) {\n const error: BetterFetchError = session.error\n if (error.status !== 401) {\n console.error('Error fetching session:', error)\n }\n this.session.set(null)\n return\n }\n this.session.set(session.data)\n })\n }\n\n signInEmail(data: { email: string; password: string; rememberMe?: boolean }) {\n return defer(() => this.client.signIn.email(data)).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))))\n }\n\n /**\n * Sign up a new user using email and password.\n *\n * Parameters username and displayUsername can be used if the username's plugin is enabled.\n * @param data\n */\n signUpEmail(data: { name: string; email: string; password: string; username: string; displayUsername?: string }) {\n return defer(() => this.client.signUp.email(data)).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))))\n }\n\n signInProvider(provider: Provider) {\n return defer(() => this.client.signIn.social({ provider })).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))))\n }\n\n signOut() {\n return defer(() => this.client.signOut()).pipe(tap(() => this.sessionState$.pipe(filter((s) => s === null))))\n }\n\n sendVerificationEmail(data: { email: string; callbackURL?: string }) {\n return defer(() => this.client.sendVerificationEmail(data))\n }\n\n requestPasswordReset(data: { email: string; redirectTo?: string }) {\n return defer(() => this.client.requestPasswordReset(data))\n }\n\n resetPassword(data: { newPassword: string; token: string }) {\n return defer(() => this.client.resetPassword(data))\n }\n\n changePassword(data: { currentPassword: string; newPassword: string; revokeOtherSessions?: boolean }) {\n return defer(() => this.client.changePassword(data))\n }\n\n changeEmail(data: { newEmail: string; callbackURL?: string }) {\n return defer(() => this.client.changeEmail(data))\n }\n\n updateUser(data: { name?: string; image?: string; username?: string; displayUsername?: string }) {\n return defer(() => this.client.updateUser(data))\n }\n\n isUsernameAvailable(data: { username: string }) {\n return defer(() => (this.client as any).isUsernameAvailable(data))\n }\n\n deleteUser(data: { callbackURL?: string; token?: string; password?: string }) {\n return defer(() => this.client.deleteUser(data)).pipe(tap(() => this.sessionState$.pipe(filter((s) => s === null))))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { MainService } from './main.service'\n\n@Injectable({ providedIn: 'root' })\nexport class SessionService {\n private readonly mainService = inject(MainService)\n\n private readonly client = this.mainService.authClient\n\n listSessions() {\n return defer(() => this.client.listSessions())\n }\n\n revokeSession(sessionToken: string) {\n return defer(() => this.client.revokeSession({ token: sessionToken }))\n }\n\n revokeOtherSessions() {\n return defer(() => this.client.revokeOtherSessions())\n }\n\n revokeAllSessions() {\n return defer(() => this.client.revokeSessions())\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Provider } from '../models'\n\n@Injectable({ providedIn: 'root' })\nexport class AccountService {\n private readonly mainService = inject(MainService)\n\n private readonly client = this.mainService.authClient\n\n listAccounts() {\n return defer(() => this.client.listAccounts())\n }\n\n linkSocial(data: {\n provider: Provider\n callbackURL?: string\n scopes?: string[]\n idToken?: {\n token: string\n nonce?: string\n accessToken?: string\n refreshToken?: string\n }\n }) {\n return defer(() => this.client.linkSocial(data))\n }\n\n unlinkAccount(data: { providerId: Provider; accountId: string }) {\n return defer(() => this.client.unlinkAccount(data))\n }\n}\n","export function validatePlugin(client: any, property: string) {\n if (!client) {\n throw new Error('AuthClient is not initialized.')\n }\n\n if (!client[property]) {\n throw new Error(\n `Property '${property}' is not available on authClient. Please ensure the plugin providing this property is included in the plugins array.`,\n )\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\n\n@Injectable({ providedIn: 'root' })\nexport class TwoFactorService {\n private readonly mainService = inject(MainService)\n\n twoFactor: any\n\n constructor() {\n const client = this.mainService.authClient as { twoFactor?: any }\n validatePlugin(client, 'twoFactor')\n this.twoFactor = client.twoFactor\n }\n\n enable(data: { password: string; issuer?: string }) {\n return defer(() => this.twoFactor.enable(data))\n }\n\n disable(data: { password: string }) {\n return defer(() => this.twoFactor.disable(data))\n }\n\n getTotpUri(data: { password: string }) {\n return defer(() => this.twoFactor.getTotpUri(data))\n }\n\n verifyTotp(data: { code: string; trustDevice?: boolean }) {\n return defer(() => this.twoFactor.verifyTotp(data))\n }\n\n sendOtp(data: { trustDevice?: boolean }) {\n return defer(() => this.twoFactor.sendOtp(data))\n }\n\n verifyOtp(data: { code: string; trustDevice?: boolean }) {\n return defer(() => this.twoFactor.verifyOtp(data))\n }\n\n generateBackupCodes(data: { password: string }) {\n return defer(() => this.twoFactor.generateBackupCodes(data))\n }\n\n verifyBackupCode(data: { code: string; disableSession?: boolean; trustDevice?: boolean }) {\n return defer(() => this.twoFactor.verifyBackupCode(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { MainService } from './main.service'\nimport { validatePlugin } from '../utils/validate-plugin'\n\n@Injectable({ providedIn: 'root' })\nexport class PasskeyService {\n private readonly mainService = inject(MainService)\n\n passkey: any\n\n constructor() {\n const client = this.mainService.authClient as { passkey?: any }\n validatePlugin(client, 'passkey')\n this.passkey = client.passkey\n }\n\n addPasskey(data: { name?: string; authenticatorAttachment?: 'platform' | 'cross-platform' }) {\n return defer(() => this.passkey.addPasskey(data))\n }\n\n listUserPasskeys() {\n return defer(() => this.passkey.listUserPasskeys())\n }\n\n deletePasskey(data: { id: string }) {\n return defer(() => this.passkey.deletePasskey(data))\n }\n\n updatePasskey(data: { id: string; name: string }) {\n return defer(() => this.passkey.updatePasskey(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, filter, switchMap } from 'rxjs'\nimport { MainService } from './main.service'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { AuthService } from './auth.service'\n\n@Injectable({ providedIn: 'root' })\nexport class GenericOauthService {\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\n\n oauth: any\n\n constructor() {\n const client = this.mainService.authClient as { oauth2?: any }\n validatePlugin(client, 'oauth2')\n this.oauth = client.oauth2\n }\n\n signIn(data: {\n providerId: string\n callbackURL?: string\n errorCallbackURL?: string\n newUserCallbackURL?: string\n disableRedirect?: boolean\n scopes?: string[]\n requestSignUp?: boolean\n }) {\n return defer(() => (this.mainService.authClient.signIn as any).oauth2(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n link(data: { providerId: string; callbackURL: string }) {\n return defer(() => this.oauth.link(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, filter, switchMap } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\nimport { AuthService } from './auth.service'\n\n@Injectable({ providedIn: 'root' })\nexport class EmailOtpService {\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\n\n emailOtp: any\n\n constructor() {\n const client = this.mainService.authClient as { emailOtp?: any }\n validatePlugin(client, 'emailOtp')\n this.emailOtp = client.emailOtp\n }\n\n signInEmailOtp(data: { email: string; otp: string }) {\n return defer(() => (this.mainService.authClient.signIn as any).emailOtp(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n sendVerificationOtp(data: { email: string; type: 'sign-in' | 'email-verification' | 'forget-password' }) {\n return defer(() => this.emailOtp.sendVerificationOtp(data))\n }\n\n checkVerificationOtp(data: { email: string; type: 'sign-in' | 'email-verification' | 'forget-password'; otp: string }) {\n return defer(() => this.emailOtp.checkVerificationOtp(data))\n }\n\n verifyEmail(data: { email: string; otp: string }) {\n return defer(() => this.emailOtp.verifyEmail(data))\n }\n\n resetPassword(data: { email: string; otp: string; password: string }) {\n return defer(() => this.emailOtp.resetPassword(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\n\n@Injectable({ providedIn: 'root' })\nexport class OneTapService {\n private readonly mainService = inject(MainService)\n\n oneTap: any\n\n constructor() {\n const client = this.mainService.authClient as { oneTap?: any }\n validatePlugin(client, 'oneTap')\n this.oneTap = client.oneTap\n }\n\n signIn(data?: {\n fetchOptions?: {\n onSuccess: () => void\n }\n callbackURL?: string\n onPromptNotification?: (notification: any) => void\n }) {\n return defer(() => this.oneTap(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\n\n@Injectable({ providedIn: 'root' })\nexport class MagicLinkService {\n private readonly mainService = inject(MainService)\n\n magicLink: any\n\n constructor() {\n const client = this.mainService.authClient as { magicLink?: any }\n validatePlugin(client, 'magicLink')\n this.magicLink = client.magicLink\n }\n\n signIn(data: { email: string; name?: string; callbackURL?: string; newUserCallbackURL?: string; errorCallbackURL?: string }) {\n return defer(() => (this.mainService.authClient.signIn as any).magicLink(data))\n }\n\n verify(data: { token: string; callbackURL?: string }) {\n return defer(() => this.magicLink.verify(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\n\n@Injectable({ providedIn: 'root' })\nexport class AdminService {\n private readonly mainService = inject(MainService)\n\n admin: any\n\n constructor() {\n const client = this.mainService.authClient as { admin?: any }\n validatePlugin(client, 'admin')\n this.admin = client.admin\n }\n\n setRole(data: { userId: string; role: any }) {\n return defer(() => this.admin.setRole(data))\n }\n\n setUserPassword(data: { userId: string; newPassword: string }) {\n return defer(() => this.admin.setUserPassword(data))\n }\n\n banUser(data: { userId: string; banReason?: string; banExpiresIn?: number }) {\n return defer(() => this.admin.banUser(data))\n }\n\n unbanUser(data: { userId: string }) {\n return defer(() => this.admin.unbanUser(data))\n }\n\n listUserSessions(data: { userId: string }) {\n return defer(() => this.admin.listUserSessions(data))\n }\n\n revokeUserSession(data: { sessionToken: string }) {\n return defer(() => this.admin.revokeUserSession(data))\n }\n\n revokeUserSessions(data: { userId: string }) {\n return defer(() => this.admin.revokeUserSessions(data))\n }\n\n impersonateUser(data: { userId: string }) {\n return defer(() => this.admin.impersonateUser(data))\n }\n\n stopImpersonating() {\n return defer(() => this.admin.stopImpersonating())\n }\n\n removeUser(data: { userId: string }) {\n return defer(() => this.admin.removeUser(data))\n }\n\n hasPermission(data: { userId?: string; permission?: any; permissions?: any }) {\n return defer(() => this.admin.hasPermission(data))\n }\n\n checkRolePermission(data: { role: any; permission: any }) {\n return this.admin.checkRolePermission(data)\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\n\n@Injectable({ providedIn: 'root' })\nexport class OrganizationService {\n private readonly mainService = inject(MainService)\n\n organization: any\n\n constructor() {\n const client = this.mainService.authClient as { organization?: any }\n validatePlugin(client, 'organization')\n this.organization = client.organization\n }\n\n createOrganization(data: {\n name: string\n slug: string\n logo?: string\n metadata?: Record<string, any>\n keepCurrentActiveOrganization?: boolean\n }) {\n return defer(() => this.organization.create(data))\n }\n\n checkSlug(data: { slug: string }) {\n return defer(() => this.organization.checkSlug(data))\n }\n\n list() {\n return defer(() => this.organization.list())\n }\n\n setActive(data: { organizationId?: string | null; organizationSlug?: string }) {\n return defer(() => this.organization.setActive(data))\n }\n\n getFullOrganization(data: { organizationId?: string; organizationSlug?: string; membersLimit?: number }) {\n return defer(() => this.organization.getFullOrganization(data))\n }\n\n update(data: {\n data: {\n name?: string\n slug?: string\n logo?: string\n metadata?: Record<string, any>\n }\n organizationId?: string\n }) {\n return defer(() => this.organization.update(data))\n }\n\n delete(data: { organizationId: string }) {\n return defer(() => this.organization.delete(data))\n }\n\n inviteMember(data: { email: string; role: string | string[]; organizationId?: string; resend?: boolean; teamId?: string }) {\n return defer(() => this.organization.inviteMember(data))\n }\n\n acceptInvitation(data: { invitationId: string }) {\n return defer(() => this.organization.acceptInvitation(data))\n }\n\n cancelInvitation(data: { invitationId: string }) {\n return defer(() => this.organization.cancelInvitation(data))\n }\n\n rejectInvitation(data: { invitationId: string }) {\n return defer(() => this.organization.rejectInvitation(data))\n }\n\n getInvitation(data: { id: string }) {\n return defer(() => this.organization.getInvitation(data))\n }\n\n listInvitations(data: { organizationId?: string }) {\n return defer(() => this.organization.listInvitations(data))\n }\n\n listUserInvitations() {\n return defer(() => this.organization.listUserInvitations())\n }\n\n listMembers(\n data: {\n organizationId?: string\n limit?: number\n offset?: number\n sortBy?: string\n sortDirection?: 'asc' | 'desc'\n filterField?: string\n filterOperator?: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin' | 'contains'\n filterValue?: string\n } = {},\n ) {\n return defer(() => this.organization.listMembers(data))\n }\n\n removeMember(data: { memberIdOrEmail: string; organizationId?: string }) {\n return defer(() => this.organization.removeMember(data))\n }\n\n updateMemberRoles(data: { memberId: string; role: string | string[]; organizationId?: string }) {\n return defer(() => this.organization.updateMemberRoles(data))\n }\n\n getActiveMember() {\n return defer(() => this.organization.getActiveMember())\n }\n\n leave(data: { organizationId?: string }) {\n return defer(() => this.organization.leave(data))\n }\n\n createTeam(data: { name: string; organizationId?: string }) {\n return defer(() => this.organization.createTeam(data))\n }\n\n listTeams(data: { organizationId?: string }) {\n return defer(() => this.organization.listTeams(data))\n }\n\n updateTeam(data: { teamId: string; data: { name?: string; organizationId?: string; createdAt?: Date; updatedAt?: Date } }) {\n return defer(() => this.organization.updateTeam(data))\n }\n\n removeTeam(data: { teamId: string; organizationId?: string }) {\n return defer(() => this.organization.removeTeam(data))\n }\n\n setActiveTeam(data: { teamId?: string }) {\n return defer(() => this.organization.setActiveTeam(data))\n }\n\n listUsersTeams() {\n return defer(() => this.organization.listUsersTeams())\n }\n\n listTeamMembers(data: { teamId: string }) {\n return defer(() => this.organization.listTeamMembers(data))\n }\n\n addTeamMember(data: { teamId: string; userId: string }) {\n return defer(() => this.organization.addTeamMember(data))\n }\n\n removeTeamMember(data: { teamId: string; userId: string }) {\n return defer(() => this.organization.removeTeamMember(data))\n }\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core'\nimport { type BetterAuthOptions } from 'better-auth'\nimport { AuthService } from './services'\n\nexport const BETTER_AUTH_CONFIG_TOKEN = new InjectionToken<BetterAuthOptions>('BETTER_AUTH_CONFIG')\n\nconst DEFAULT_CONFIG: Partial<BetterAuthOptions> = {}\n\nexport function provideBetterAuth(options: BetterAuthOptions): EnvironmentProviders {\n const config: BetterAuthOptions = { ...DEFAULT_CONFIG, ...options }\n\n // if baseURL is not a url, it might be because of a proxy in development\n if (!config.baseURL?.startsWith('http')) {\n config.baseURL = window.location.origin\n }\n\n return makeEnvironmentProviders([{ provide: BETTER_AUTH_CONFIG_TOKEN, useValue: config }, AuthService])\n}\n","import { inject } from '@angular/core'\nimport { Router, UrlTree } from '@angular/router'\nimport { AuthService } from '../services'\nimport { map, Observable } from 'rxjs'\n\n/**\n * Redirects unauthorized users to the specified commands (route).\n */\nexport function redirectUnauthorizedTo(commands: string[] = ['/login']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n return auth.isLoggedIn$().pipe(map((isLoggedIn) => (isLoggedIn ? true : router.createUrlTree(commands))))\n }\n}\n\n/**\n * Redirects logged-in users to the specified commands (route).\n */\nexport function redirectLoggedInTo(commands: string[] = ['/']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n return auth.isLoggedIn$().pipe(map((isLoggedIn) => (isLoggedIn ? router.createUrlTree(commands) : true)))\n }\n}\n\n/**\n * Allows access only to users with at least one of the specified roles.\n * Redirects unauthorized users to the specified commands (route).\n */\nexport function hasRole(requiredRoles: string[], redirectTo: string[] = ['/unauthorized']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n\n return auth.sessionState$.pipe(\n map((session) => {\n if (!session || !session.user) {\n return router.createUrlTree(redirectTo)\n }\n\n const role = session?.user?.role\n if (Array.isArray(role)) {\n if (role.some((r) => requiredRoles.includes(r))) {\n return true\n }\n } else if (typeof role === 'string') {\n if (requiredRoles.includes(role)) {\n return true\n }\n }\n\n return router.createUrlTree(redirectTo)\n }),\n )\n }\n}\n","import { CanActivateFn, UrlTree } from '@angular/router'\nimport { Observable } from 'rxjs'\n\nexport function canActivate(\n pipe: () => Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree,\n): {\n canActivate: [CanActivateFn]\n} {\n return {\n canActivate: [() => pipe()],\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|