ngx-better-auth 1.6.0 → 1.6.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 +88 -1
- package/fesm2022/ngx-better-auth.mjs +99 -12
- package/fesm2022/ngx-better-auth.mjs.map +1 -1
- package/index.d.ts +63 -29
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -160,6 +160,81 @@ export class MyComponent {
|
|
|
160
160
|
}
|
|
161
161
|
```
|
|
162
162
|
|
|
163
|
+
## ⚡ Signal resources for reads
|
|
164
|
+
|
|
165
|
+
GET/list-style methods keep their existing `Observable` API and also expose Angular `resource` factories for zoneless-friendly templates.
|
|
166
|
+
|
|
167
|
+
Mutations such as sign in, sign out, update, delete, revoke, invite, and verify still use `Observable` because they are command workflows.
|
|
168
|
+
|
|
169
|
+
### Available resource factories
|
|
170
|
+
|
|
171
|
+
- `SessionService.sessionsResource()`
|
|
172
|
+
- `AccountService.accountsResource()`
|
|
173
|
+
- `PasskeyService.userPasskeysResource()`
|
|
174
|
+
- `OrganizationService.organizationsResource()`
|
|
175
|
+
- `OrganizationService.fullOrganizationResource(() => params)`
|
|
176
|
+
- `OrganizationService.invitationResource(() => params)`
|
|
177
|
+
- `OrganizationService.invitationsResource(() => params)`
|
|
178
|
+
- `OrganizationService.userInvitationsResource()`
|
|
179
|
+
- `OrganizationService.activeMemberResource()`
|
|
180
|
+
- `AdminService.usersResource(() => params)`
|
|
181
|
+
- `AdminService.userSessionsResource(() => params)`
|
|
182
|
+
|
|
183
|
+
### Simple read resource
|
|
184
|
+
|
|
185
|
+
```ts
|
|
186
|
+
import { Component, inject } from '@angular/core'
|
|
187
|
+
import { SessionService } from 'ngx-better-auth'
|
|
188
|
+
|
|
189
|
+
@Component({
|
|
190
|
+
// ...
|
|
191
|
+
})
|
|
192
|
+
export class SessionsComponent {
|
|
193
|
+
private readonly sessionService = inject(SessionService)
|
|
194
|
+
|
|
195
|
+
readonly sessions = this.sessionService.sessionsResource()
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
@if (sessions.isLoading()) {
|
|
201
|
+
<p>Loading sessions...</p>
|
|
202
|
+
} @else if (sessions.error()) {
|
|
203
|
+
<p>Unable to load sessions.</p>
|
|
204
|
+
} @else {
|
|
205
|
+
@for (session of sessions.value() ?? []; track session.token) {
|
|
206
|
+
<p>{{ session.ipAddress }}</p>
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Parameterized read resource
|
|
212
|
+
|
|
213
|
+
```ts
|
|
214
|
+
import { Component, inject, signal } from '@angular/core'
|
|
215
|
+
import { OrganizationService } from 'ngx-better-auth'
|
|
216
|
+
|
|
217
|
+
@Component({
|
|
218
|
+
// ...
|
|
219
|
+
})
|
|
220
|
+
export class OrganizationComponent {
|
|
221
|
+
private readonly organizationService = inject(OrganizationService)
|
|
222
|
+
|
|
223
|
+
readonly organizationId = signal<string | undefined>(undefined)
|
|
224
|
+
|
|
225
|
+
readonly organization = this.organizationService.fullOrganizationResource(() => ({
|
|
226
|
+
organizationId: this.organizationId(),
|
|
227
|
+
membersLimit: 20,
|
|
228
|
+
}))
|
|
229
|
+
|
|
230
|
+
selectOrganization(organizationId: string) {
|
|
231
|
+
this.organizationId.set(organizationId)
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Call `resource.reload()` after a mutation when you need to refresh a read resource manually.
|
|
237
|
+
|
|
163
238
|
## 🛡️ Guards
|
|
164
239
|
This library ships with guards to quickly set up route protection.
|
|
165
240
|
|
|
@@ -167,11 +242,13 @@ This library ships with guards to quickly set up route protection.
|
|
|
167
242
|
- `redirectUnauthorizedTo(['/login'])` → redirect if not logged in
|
|
168
243
|
- `redirectLoggedInTo(['/'])` → redirect if already logged in
|
|
169
244
|
- `hasRole(['admin'], ['/unauthorized'])` → restrict access by role and redirect if not authorized
|
|
245
|
+
- `hasOrganizationRole(['owner', 'admin'], ['/unauthorized'])` → restrict access by active organization role
|
|
246
|
+
- `hasActiveOrganization(['/select-organization'])` → require an active organization member
|
|
170
247
|
|
|
171
248
|
### Usage in routes
|
|
172
249
|
```ts
|
|
173
250
|
import { Routes } from '@angular/router'
|
|
174
|
-
import { canActivate, redirectLoggedInTo, redirectUnauthorizedTo, hasRole } from 'ngx-better-auth'
|
|
251
|
+
import { canActivate, redirectLoggedInTo, redirectUnauthorizedTo, hasRole, hasOrganizationRole, hasActiveOrganization } from 'ngx-better-auth'
|
|
175
252
|
|
|
176
253
|
export const routes: Routes = [
|
|
177
254
|
{
|
|
@@ -184,6 +261,16 @@ export const routes: Routes = [
|
|
|
184
261
|
component: AdminComponent,
|
|
185
262
|
...canActivate(hasRole(['admin'], ['/unauthorized']))
|
|
186
263
|
},
|
|
264
|
+
{
|
|
265
|
+
path: 'organization',
|
|
266
|
+
component: OrganizationComponent,
|
|
267
|
+
...canActivate(hasOrganizationRole(['owner', 'admin'], ['/unauthorized']))
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
path: 'organization/select',
|
|
271
|
+
component: SelectOrganizationComponent,
|
|
272
|
+
...canActivate(hasActiveOrganization(['/select-organization']))
|
|
273
|
+
},
|
|
187
274
|
{
|
|
188
275
|
path: 'login',
|
|
189
276
|
component: LoginComponent,
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Injectable, signal, computed, InjectionToken, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
-
import {
|
|
2
|
+
import { inject, Injector, resource, Injectable, signal, computed, InjectionToken, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
+
import { defer, map, Observable, filter, shareReplay, switchMap, first, catchError, of, timer } from 'rxjs';
|
|
4
4
|
import { createAuthClient } from 'better-auth/client';
|
|
5
5
|
import { HttpClient } from '@angular/common/http';
|
|
6
6
|
import { Router } from '@angular/router';
|
|
7
7
|
|
|
8
8
|
class MainService {
|
|
9
9
|
config = inject(BETTER_AUTH_CONFIG_TOKEN);
|
|
10
|
+
injector = inject(Injector);
|
|
10
11
|
authClient = createAuthClient({
|
|
11
12
|
...this.config,
|
|
12
13
|
});
|
|
@@ -17,6 +18,22 @@ class MainService {
|
|
|
17
18
|
}
|
|
18
19
|
return data.data;
|
|
19
20
|
}
|
|
21
|
+
read(loader) {
|
|
22
|
+
return defer(loader).pipe(map((data) => this.mapData(data)));
|
|
23
|
+
}
|
|
24
|
+
readResource(loader) {
|
|
25
|
+
return resource({
|
|
26
|
+
injector: this.injector,
|
|
27
|
+
loader: async () => this.mapData(await loader()),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
readResourceWithParams(params, loader) {
|
|
31
|
+
return resource({
|
|
32
|
+
injector: this.injector,
|
|
33
|
+
params,
|
|
34
|
+
loader: async ({ params }) => this.mapData(await loader(params)),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
20
37
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: MainService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
21
38
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: MainService, providedIn: 'root' });
|
|
22
39
|
}
|
|
@@ -136,7 +153,10 @@ class SessionService {
|
|
|
136
153
|
mainService = inject(MainService);
|
|
137
154
|
client = this.mainService.authClient;
|
|
138
155
|
listSessions() {
|
|
139
|
-
return
|
|
156
|
+
return this.mainService.read(() => this.client.listSessions());
|
|
157
|
+
}
|
|
158
|
+
sessionsResource() {
|
|
159
|
+
return this.mainService.readResource(() => this.client.listSessions());
|
|
140
160
|
}
|
|
141
161
|
revokeSession(data) {
|
|
142
162
|
return defer(() => this.client.revokeSession(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
@@ -159,7 +179,10 @@ class AccountService {
|
|
|
159
179
|
mainService = inject(MainService);
|
|
160
180
|
client = this.mainService.authClient;
|
|
161
181
|
listAccounts() {
|
|
162
|
-
return
|
|
182
|
+
return this.mainService.read(() => this.client.listAccounts());
|
|
183
|
+
}
|
|
184
|
+
accountsResource() {
|
|
185
|
+
return this.mainService.readResource(() => this.client.listAccounts());
|
|
163
186
|
}
|
|
164
187
|
linkSocial(data) {
|
|
165
188
|
return defer(() => this.client.linkSocial(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
@@ -240,7 +263,10 @@ class PasskeyService {
|
|
|
240
263
|
return defer(() => this.mainService.authClient.signIn.passkey(data));
|
|
241
264
|
}
|
|
242
265
|
listUserPasskeys() {
|
|
243
|
-
return
|
|
266
|
+
return this.mainService.read(() => this.passkey.listUserPasskeys());
|
|
267
|
+
}
|
|
268
|
+
userPasskeysResource() {
|
|
269
|
+
return this.mainService.readResource(() => this.passkey.listUserPasskeys());
|
|
244
270
|
}
|
|
245
271
|
deletePasskey(data) {
|
|
246
272
|
return defer(() => this.passkey.deletePasskey(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
@@ -408,10 +434,16 @@ class AdminService {
|
|
|
408
434
|
return defer(() => this.admin.updateUser(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
409
435
|
}
|
|
410
436
|
listUsers(data) {
|
|
411
|
-
return
|
|
437
|
+
return this.mainService.read(() => this.admin.listUsers(data));
|
|
438
|
+
}
|
|
439
|
+
usersResource(params) {
|
|
440
|
+
return this.mainService.readResourceWithParams(params, (data) => this.admin.listUsers(data));
|
|
412
441
|
}
|
|
413
442
|
listUserSessions(data) {
|
|
414
|
-
return
|
|
443
|
+
return this.mainService.read(() => this.admin.listUserSessions(data));
|
|
444
|
+
}
|
|
445
|
+
userSessionsResource(params) {
|
|
446
|
+
return this.mainService.readResourceWithParams(params, (data) => this.admin.listUserSessions(data));
|
|
415
447
|
}
|
|
416
448
|
unbanUser(data) {
|
|
417
449
|
return defer(() => this.admin.unbanUser(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
@@ -466,7 +498,10 @@ class OrganizationService {
|
|
|
466
498
|
return defer(() => this.organization.checkSlug(data));
|
|
467
499
|
}
|
|
468
500
|
list() {
|
|
469
|
-
return
|
|
501
|
+
return this.mainService.read(() => this.organization.list());
|
|
502
|
+
}
|
|
503
|
+
organizationsResource() {
|
|
504
|
+
return this.mainService.readResource(() => this.organization.list());
|
|
470
505
|
}
|
|
471
506
|
setActive(data) {
|
|
472
507
|
return defer(() => this.organization.setActive(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
@@ -474,6 +509,9 @@ class OrganizationService {
|
|
|
474
509
|
getFullOrganization(data) {
|
|
475
510
|
return defer(() => this.organization.getFullOrganization(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
476
511
|
}
|
|
512
|
+
fullOrganizationResource(params) {
|
|
513
|
+
return this.mainService.readResourceWithParams(params, (data) => this.organization.getFullOrganization(data));
|
|
514
|
+
}
|
|
477
515
|
update(data) {
|
|
478
516
|
return defer(() => this.organization.update(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
479
517
|
}
|
|
@@ -495,11 +533,20 @@ class OrganizationService {
|
|
|
495
533
|
getInvitation(data) {
|
|
496
534
|
return defer(() => this.organization.getInvitation(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
497
535
|
}
|
|
536
|
+
invitationResource(params) {
|
|
537
|
+
return this.mainService.readResourceWithParams(params, (data) => this.organization.getInvitation(data));
|
|
538
|
+
}
|
|
498
539
|
listInvitations(data) {
|
|
499
|
-
return
|
|
540
|
+
return this.mainService.read(() => this.organization.listInvitations(data));
|
|
541
|
+
}
|
|
542
|
+
invitationsResource(params) {
|
|
543
|
+
return this.mainService.readResourceWithParams(params, (data) => this.organization.listInvitations(data));
|
|
500
544
|
}
|
|
501
545
|
listUserInvitations() {
|
|
502
|
-
return
|
|
546
|
+
return this.mainService.read(() => this.organization.listUserInvitations());
|
|
547
|
+
}
|
|
548
|
+
userInvitationsResource() {
|
|
549
|
+
return this.mainService.readResource(() => this.organization.listUserInvitations());
|
|
503
550
|
}
|
|
504
551
|
listMembers(data = {}) {
|
|
505
552
|
return defer(() => this.organization.listMembers(data));
|
|
@@ -511,7 +558,10 @@ class OrganizationService {
|
|
|
511
558
|
return defer(() => this.organization.updateMemberRoles(data));
|
|
512
559
|
}
|
|
513
560
|
getActiveMember() {
|
|
514
|
-
return
|
|
561
|
+
return this.mainService.read(() => this.organization.getActiveMember());
|
|
562
|
+
}
|
|
563
|
+
activeMemberResource() {
|
|
564
|
+
return this.mainService.readResource(() => this.organization.getActiveMember());
|
|
515
565
|
}
|
|
516
566
|
leave(data) {
|
|
517
567
|
return defer(() => this.organization.leave(data)).pipe(map((data) => this.mainService.mapData(data)));
|
|
@@ -606,6 +656,12 @@ const normalizeRoles = (role) => {
|
|
|
606
656
|
}
|
|
607
657
|
return [];
|
|
608
658
|
};
|
|
659
|
+
const redirectResult = (router, redirectTo) => {
|
|
660
|
+
if (Array.isArray(redirectTo)) {
|
|
661
|
+
return router.createUrlTree(redirectTo);
|
|
662
|
+
}
|
|
663
|
+
return redirectTo;
|
|
664
|
+
};
|
|
609
665
|
/**
|
|
610
666
|
* Redirects unauthorized users to the specified commands (route).
|
|
611
667
|
*/
|
|
@@ -646,6 +702,37 @@ function hasRole(requiredRoles, redirectTo = ['/unauthorized']) {
|
|
|
646
702
|
}));
|
|
647
703
|
};
|
|
648
704
|
}
|
|
705
|
+
/**
|
|
706
|
+
* Allows access only when an active organization member exists.
|
|
707
|
+
* Redirects users without an active organization to the specified commands or UrlTree.
|
|
708
|
+
*/
|
|
709
|
+
function hasActiveOrganization(redirectTo = ['/unauthorized']) {
|
|
710
|
+
return () => {
|
|
711
|
+
const organization = inject(OrganizationService);
|
|
712
|
+
const router = inject(Router);
|
|
713
|
+
return organization.getActiveMember().pipe(map((member) => (member ? true : redirectResult(router, redirectTo))), catchError(() => of(redirectResult(router, redirectTo))));
|
|
714
|
+
};
|
|
715
|
+
}
|
|
716
|
+
/**
|
|
717
|
+
* Allows access only to active organization members with at least one of the specified roles.
|
|
718
|
+
* Redirects users without an active organization, active member, or matching role.
|
|
719
|
+
*/
|
|
720
|
+
function hasOrganizationRole(requiredRoles, redirectTo = ['/unauthorized']) {
|
|
721
|
+
return () => {
|
|
722
|
+
const organization = inject(OrganizationService);
|
|
723
|
+
const router = inject(Router);
|
|
724
|
+
return organization.getActiveMember().pipe(map((member) => {
|
|
725
|
+
if (!member) {
|
|
726
|
+
return redirectResult(router, redirectTo);
|
|
727
|
+
}
|
|
728
|
+
const roles = normalizeRoles(member.role);
|
|
729
|
+
if (roles.some((role) => requiredRoles.includes(role))) {
|
|
730
|
+
return true;
|
|
731
|
+
}
|
|
732
|
+
return redirectResult(router, redirectTo);
|
|
733
|
+
}), catchError(() => of(redirectResult(router, redirectTo))));
|
|
734
|
+
};
|
|
735
|
+
}
|
|
649
736
|
|
|
650
737
|
function canActivate(pipe) {
|
|
651
738
|
return {
|
|
@@ -684,5 +771,5 @@ function usernameAvailableValidator(usernameService, initialUsername) {
|
|
|
684
771
|
* Generated bundle index. Do not edit.
|
|
685
772
|
*/
|
|
686
773
|
|
|
687
|
-
export { AccountService, AdminService, AuthService, BETTER_AUTH_CONFIG_TOKEN, EmailOtpService, GenericOauthService, MagicLinkService, OneTapService, OrganizationService, PasskeyService, SessionService, SiweService, TwoFactorService, UsernameService, canActivate, hasRole, provideBetterAuth, redirectLoggedInTo, redirectUnauthorizedTo, usernameAvailableValidator };
|
|
774
|
+
export { AccountService, AdminService, AuthService, BETTER_AUTH_CONFIG_TOKEN, EmailOtpService, GenericOauthService, MagicLinkService, OneTapService, OrganizationService, PasskeyService, SessionService, SiweService, TwoFactorService, UsernameService, canActivate, hasActiveOrganization, hasOrganizationRole, hasRole, provideBetterAuth, redirectLoggedInTo, redirectUnauthorizedTo, usernameAvailableValidator };
|
|
688
775
|
//# sourceMappingURL=ngx-better-auth.mjs.map
|
|
@@ -1 +1 @@
|
|
|
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/plugins/two-factor.service.ts","../../../src/lib/services/plugins/passkey.service.ts","../../../src/lib/services/plugins/generic-oauth.service.ts","../../../src/lib/services/plugins/email-otp.service.ts","../../../src/lib/services/plugins/one-tap.service.ts","../../../src/lib/services/plugins/magic-link.service.ts","../../../src/lib/utils/email.util.ts","../../../src/lib/services/plugins/username.service.ts","../../../src/lib/services/plugins/admin.service.ts","../../../src/lib/services/plugins/organization.service.ts","../../../src/lib/services/plugins/siwe.service.ts","../../../src/lib/providers.ts","../../../src/lib/guards/auth-guard.utils.ts","../../../src/lib/guards/auth-guard.factory.ts","../../../src/lib/validators/username-available.validators.ts","../../../src/ngx-better-auth.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core'\nimport { BETTER_AUTH_CONFIG_TOKEN } from '../providers'\nimport { BetterFetchError, 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: any = createAuthClient({\n ...this.config,\n })\n\n readonly url = `${this.config.baseURL}${this.config.basePath || '/api/auth'}`\n\n mapData<T>(data: { data: T; error: BetterFetchError }): T {\n if (data.error) {\n throw data.error\n }\n return data.data\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core'\nimport { BetterFetchError } from 'better-auth/client'\nimport { defer, filter, first, map, Observable, shareReplay, switchMap } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Provider, Session, User } from '../models'\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<{ user: any; session: any } | 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<{ user: User; session: Session } | null>\n\n constructor() {\n this.session$()\n\n const useSession$ = new Observable<{\n data: { user: User; session: Session } | null\n error: BetterFetchError | null\n isPending: boolean\n }>((subscriber) => {\n this.client.useSession.subscribe((value: any) => subscriber.next(value as any))\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: any) => {\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 }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => this.client.signIn.email(data)).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\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: {\n name: string\n email: string\n password: string\n username: string\n displayUsername?: string\n }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => this.client.signUp.email(data)).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n signInProvider(data: {\n provider: Provider\n callbackURL?: string\n disableRedirect?: boolean\n errorCallbackURL?: string\n idToken?: string\n loginHint?: string\n newUserCallbackURL?: string\n requestSignUp?: boolean\n scopes?: string[]\n }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() =>\n this.client.signIn.social({\n callbackURL: window.location.origin,\n ...(data as any),\n }),\n ).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n signOut(): Observable<null> {\n return defer(() => this.client.signOut()).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s === null))),\n )\n }\n\n sendVerificationEmail(data: { email: string; callbackURL?: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.sendVerificationEmail(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n requestPasswordReset(data: { email: string; redirectTo?: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.requestPasswordReset(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n resetPassword(data: { newPassword: string; token: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.resetPassword(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n changePassword(data: { currentPassword: string; newPassword: string; revokeOtherSessions?: boolean }): Observable<{\n token: string\n user: User\n }> {\n return defer(() => this.client.changePassword(data)).pipe(\n map((data) => this.mainService.mapData<{ token: string; user: User }>(data as any)),\n )\n }\n\n changeEmail(data: { newEmail: string; callbackURL?: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.changeEmail(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n updateUser(\n data: Partial<{\n name: string\n image: string\n username: string\n displayUsername: string\n [key: string]: any\n }>,\n ): Observable<{ status: boolean }> {\n return defer(() => this.client.updateUser(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n deleteUser(data?: { callbackURL?: string; token?: string; password?: string }): Observable<null> {\n return defer(() => this.client.deleteUser(data)).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s === null))),\n first(),\n )\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Session } from '../models'\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(): Observable<Session[]> {\n return defer(() => this.client.listSessions()).pipe(map((data) => this.mainService.mapData<Session[]>(data as any)))\n }\n\n revokeSession(data: { token: string }): Observable<{ success: boolean }> {\n return defer(() => this.client.revokeSession(data)).pipe(\n map((data) => this.mainService.mapData<{ success: boolean }>(data as any)),\n )\n }\n\n revokeOtherSessions(): Observable<{ success: boolean }> {\n return defer(() => this.client.revokeOtherSessions()).pipe(\n map((data) => this.mainService.mapData<{ success: boolean }>(data as any)),\n )\n }\n\n revokeAllSessions(): Observable<{ success: boolean }> {\n return defer(() => this.client.revokeSessions()).pipe(\n map((data) => this.mainService.mapData<{ success: boolean }>(data as any)),\n )\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Account, 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(): Observable<Account[]> {\n return defer(() => this.client.listAccounts()).pipe(map((data) => this.mainService.mapData<Account[]>(data as any)))\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 }): Observable<{ url: string; redirect: boolean }> {\n return defer(() => this.client.linkSocial(data)).pipe(\n map((data) => this.mainService.mapData<{ url: string; redirect: boolean }>(data as any)),\n )\n }\n\n unlinkAccount(data: { providerId: Provider; accountId: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.unlinkAccount(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\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, filter, first, map, Observable, switchMap } from 'rxjs'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport { MainService } from '../main.service'\nimport { AuthService } from '../auth.service'\nimport { Session, User } from '../../models'\n\n@Injectable({ providedIn: 'root' })\nexport class TwoFactorService {\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\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 }): Observable<{ totpURI: string; backupCodes: string[] }> {\n return defer(() => this.twoFactor.enable(data)).pipe(\n map((data) =>\n this.mainService.mapData<{\n totpURI: string\n backupCodes: string[]\n }>(data as any),\n ),\n )\n }\n\n disable(data: { password: string }): Observable<{ status: boolean }> {\n return defer(() => this.twoFactor.disable(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n getTotpUri(data: { password: string }): Observable<{ totpURI: string }> {\n return defer(() => this.twoFactor.getTotpUri(data)).pipe(\n map((data) => this.mainService.mapData<{ totpURI: string }>(data as any)),\n )\n }\n\n verifyTotp(data: { code: string; trustDevice?: boolean }): Observable<{ status: boolean }> {\n return defer(() => this.twoFactor.verifyTotp(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\n first(),\n map(() => ({ status: true })),\n )\n }\n\n sendOtp(): Observable<{ status: boolean }> {\n return defer(() => this.twoFactor.sendOtp()).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n verifyOtp(data: { code: string; trustDevice?: boolean }): Observable<{ status: boolean }> {\n return defer(() => this.twoFactor.verifyOtp(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\n first(),\n map(() => ({ status: true })),\n )\n }\n\n generateBackupCodes(data: { password: string }): Observable<{ status: boolean; backupCodes: string[] }> {\n return defer(() => this.twoFactor.generateBackupCodes(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean; backupCodes: string[] }>(data as any)),\n )\n }\n\n verifyBackupCode(data: { code: string; disableSession?: boolean; trustDevice?: boolean }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => this.twoFactor.verifyBackupCode(data)).pipe(\n map((data) =>\n this.mainService.mapData<{\n user: User\n session: Session\n }>(data as any),\n ),\n )\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { MainService } from '../main.service'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport type { Passkey } from '@better-auth/passkey'\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: {\n name?: string\n authenticatorAttachment?: AuthenticatorAttachment\n }): Observable<{ passkey: Passkey }> {\n return defer(() => this.passkey.addPasskey(data)).pipe(\n map((data) => this.mainService.mapData<{ passkey: Passkey }>(data as any)),\n )\n }\n\n signIn(data: { email: string; autoFill?: boolean; callbackURL?: string }): Observable<unknown> {\n return defer(() => (this.mainService.authClient.signIn as any).passkey(data))\n }\n\n listUserPasskeys(): Observable<Passkey[]> {\n return defer(() => this.passkey.listUserPasskeys()).pipe(\n map((data) => this.mainService.mapData<Passkey[]>(data as any)),\n )\n }\n\n deletePasskey(data: { id: string }): Observable<{ status: boolean }> {\n return defer(() => this.passkey.deletePasskey(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n updatePasskey(data: { id: string; name: string }): Observable<{ passkey: Passkey }> {\n return defer(() => this.passkey.updatePasskey(data)).pipe(\n map((data) => this.mainService.mapData<{ passkey: Passkey }>(data as any)),\n )\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: {\n email: string\n type: 'sign-in' | 'email-verification' | 'forget-password'\n otp: string\n }) {\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: {\n email: string\n name?: string\n callbackURL?: string\n newUserCallbackURL?: string\n errorCallbackURL?: string\n }) {\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","export function isEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, filter, map, Observable, switchMap } from 'rxjs'\nimport { MainService } from '../main.service'\nimport { AuthService } from '../auth.service'\nimport { isEmail } from '../../utils/email.util'\nimport { Session, User } from '../../models'\nimport { HttpClient } from '@angular/common/http'\n\n@Injectable({ providedIn: 'root' })\nexport class UsernameService {\n private readonly http = inject(HttpClient)\n\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\n\n username: any = this.mainService.authClient\n\n /**\n * pass either email or username to sign in. Needs username plugin enabled to use username.\n * @param data : { email?: string; username?: string; password: string; rememberMe?: boolean }\n */\n signIn(data: { login: string; password: string; rememberMe?: boolean }): Observable<{\n user: User\n session: Session\n }> {\n if (isEmail(data.login)) {\n return this.authService.signInEmail({ email: data.login, password: data.password, rememberMe: data.rememberMe })\n } else {\n return this.signInUsername({ username: data.login, password: data.password, rememberMe: data.rememberMe })\n }\n }\n\n signInUsername(data: { username: string; password: string; rememberMe?: boolean }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => (this.username as any).signIn.username(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n isUsernameAvailable(data: { username: string }): Observable<boolean> {\n return this.http\n .post<{ available: boolean }>(`${this.mainService.url}/is-username-available`, data)\n .pipe(map((res) => res.available))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport { MainService } from '../main.service'\nimport { Session, User } from '../../models'\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: string | string[] }): Observable<{ user: User }> {\n return defer(() => this.admin.setRole(data)).pipe(\n map((data) => this.mainService.mapData<{ user: User }>(data as any)),\n )\n }\n\n createUser(data: {\n email: string\n password: string\n name: string\n role?: string | string[]\n data?: Record<string, any>\n }): Observable<{ user: User }> {\n return defer(() => this.admin.createUser(data)).pipe(\n map((data) => this.mainService.mapData<{ user: User }>(data as any)),\n )\n }\n\n updateUser(data: { userId: string; data: Partial<User> }): Observable<{ user: User }> {\n return defer(() => this.admin.updateUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ user: User }>(data)),\n )\n }\n\n listUsers(data: {\n searchValue?: string\n searchField?: 'email' | 'name'\n searchOperator?: 'contains' | 'start_with' | 'end_with'\n limit?: number\n offset?: number\n sortBy?: string\n sortDirection?: 'asc' | 'desc'\n filterField?: string\n filterValue?: string | number | boolean\n filterOperator?: 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte'\n }): Observable<{ users: User[]; total: number; limit: number; offset: number }> {\n return defer(() => this.admin.listUsers(data)).pipe(\n map((data: any) =>\n this.mainService.mapData<{ users: User[]; total: number; limit: number; offset: number }>(data as any),\n ),\n )\n }\n\n listUserSessions(data: { userId: string }): Observable<{ sessions: Session[] }> {\n return defer(() => this.admin.listUserSessions(data)).pipe(\n map((data: any) => this.mainService.mapData<{ sessions: Session[] }>(data)),\n )\n }\n\n unbanUser(data: { userId: string }): Observable<{ user: User }> {\n return defer(() => this.admin.unbanUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ user: User }>(data)),\n )\n }\n\n banUser(data: { userId: string; banReason?: string; banExpiresIn?: number }): Observable<{ user: User }> {\n return defer(() => this.admin.banUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ user: User }>(data)),\n )\n }\n\n impersonateUser(data: { userId: string }): Observable<{ session: Session; user: User }> {\n return defer(() => this.admin.impersonateUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ session: Session; user: User }>(data)),\n )\n }\n\n stopImpersonating(): Observable<unknown> {\n return defer(() => this.admin.stopImpersonating())\n }\n\n revokeUserSession(data: { sessionToken: string }): Observable<{ success: boolean }> {\n return defer(() => this.admin.revokeUserSession(data)).pipe(\n map((data: any) => this.mainService.mapData<{ success: boolean }>(data)),\n )\n }\n\n revokeUserSessions(data: { userId: string }): Observable<{ success: boolean }> {\n return defer(() => this.admin.revokeUserSessions(data)).pipe(\n map((data: any) => this.mainService.mapData<{ success: boolean }>(data)),\n )\n }\n\n removeUser(data: { userId: string }): Observable<{ success: boolean }> {\n return defer(() => this.admin.removeUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ success: boolean }>(data)),\n )\n }\n\n setUserPassword(data: { userId: string; newPassword: string }): Observable<{ success: boolean }> {\n return defer(() => this.admin.setUserPassword(data)).pipe(\n map((data: any) => this.mainService.mapData<{ success: boolean }>(data)),\n )\n }\n\n hasPermission(data: { userId?: string; permissions: Record<string, string[]> }) {\n return defer(() => this.admin.hasPermission(data))\n }\n\n checkRolePermission(data: { role: string; permissions: Record<string, string[]> }) {\n return defer(() => this.admin.checkRolePermission(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport { MainService } from '../main.service'\nimport type { Organization, Member, Invitation } from 'better-auth/plugins/organization'\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 create(data: {\n name: string\n slug: string\n logo?: string\n metadata?: Record<string, any>\n keepCurrentActiveOrganization?: boolean\n }): Observable<Organization> {\n return defer(() => this.organization.create(data)).pipe(\n map((data) => this.mainService.mapData<Organization>(data as any)),\n )\n }\n\n checkSlug(data: { slug: string }): Observable<unknown> {\n return defer(() => this.organization.checkSlug(data))\n }\n\n list(): Observable<Organization[]> {\n return defer(() => this.organization.list()).pipe(\n map((data) => this.mainService.mapData<Organization[]>(data as any)),\n )\n }\n\n setActive(data: { organizationId?: string; organizationSlug?: string }): Observable<Organization> {\n return defer(() => this.organization.setActive(data)).pipe(\n map((data) => this.mainService.mapData<Organization>(data as any)),\n )\n }\n\n getFullOrganization(data: {\n organizationId?: string\n organizationSlug?: string\n membersLimit?: number\n }): Observable<Organization> {\n return defer(() => this.organization.getFullOrganization(data)).pipe(\n map((data) => this.mainService.mapData<Organization>(data as any)),\n )\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 }): Observable<Organization> {\n return defer(() => this.organization.update(data)).pipe(\n map((data) => this.mainService.mapData<Organization>(data as any)),\n )\n }\n\n delete(data: { organizationId: string }): Observable<void> {\n return defer(() => this.organization.delete(data)).pipe(map((data) => this.mainService.mapData<void>(data as any)))\n }\n\n inviteMember(data: {\n email: string\n role: string | string[]\n organizationId?: string\n resend?: boolean\n teamId?: string\n }): Observable<Invitation> {\n return defer(() => this.organization.inviteMember(data)).pipe(\n map((data) => this.mainService.mapData<Invitation>(data as any)),\n )\n }\n\n acceptInvitation(data: { invitationId: string }): Observable<{ invitation: Invitation; member: Member }> {\n return defer(() => this.organization.acceptInvitation(data)).pipe(\n map((data) => this.mainService.mapData<{ invitation: Invitation; member: Member }>(data as any)),\n )\n }\n\n cancelInvitation(data: { invitationId: string }): Observable<void> {\n return defer(() => this.organization.cancelInvitation(data)).pipe(\n map((data) => this.mainService.mapData<void>(data as any)),\n )\n }\n\n rejectInvitation(data: { invitationId: string }): Observable<{ invitation: Invitation; member: null }> {\n return defer(() => this.organization.rejectInvitation(data)).pipe(\n map((data) => this.mainService.mapData<{ invitation: Invitation; member: null }>(data as any)),\n )\n }\n\n getInvitation(data: { id: string }): Observable<\n {\n organizationName: string\n organizationSlug: string\n inviterEmail: string\n } & Invitation\n > {\n return defer(() => this.organization.getInvitation(data)).pipe(\n map((data) =>\n this.mainService.mapData<\n {\n organizationName: string\n organizationSlug: string\n inviterEmail: string\n } & Invitation\n >(data as any),\n ),\n )\n }\n\n listInvitations(data: { organizationId?: string }): Observable<Invitation[]> {\n return defer(() => this.organization.listInvitations(data)).pipe(\n map((data) => this.mainService.mapData<Invitation[]>(data as any)),\n )\n }\n\n listUserInvitations(): Observable<Invitation[]> {\n return defer(() => this.organization.listUserInvitations()).pipe(\n map((data) => this.mainService.mapData<Invitation[]>(data as any)),\n )\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 }): Observable<{ member: Member }> {\n return defer(() => this.organization.removeMember(data)).pipe(\n map((data) => this.mainService.mapData<{ member: Member }>(data as any)),\n )\n }\n\n updateMemberRoles(data: { memberId: string; role: string | string[]; organizationId?: string }) {\n return defer(() => this.organization.updateMemberRoles(data))\n }\n\n getActiveMember(): Observable<Member> {\n return defer(() => this.organization.getActiveMember()).pipe(\n map((data) => this.mainService.mapData<Member>(data as any)),\n )\n }\n\n leave(data: { organizationId?: string }): Observable<void> {\n return defer(() => this.organization.leave(data)).pipe(map((data) => this.mainService.mapData<void>(data as any)))\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: {\n teamId: string\n data: { name?: string; organizationId?: string; createdAt?: Date; updatedAt?: Date }\n }) {\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 { inject, Injectable } from '@angular/core'\nimport { defer, filter, map, Observable, switchMap } from 'rxjs'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport { MainService } from '../main.service'\nimport { AuthService } from '../auth.service'\n\nexport interface SiweNonceResult {\n nonce: string\n}\n\nexport type SiweNonceRequest = {\n walletAddress?: string\n address?: string\n chainId?: number\n}\n\nexport interface SiweVerifyResult {\n token: string\n success: boolean\n user: {\n id: string\n walletAddress: string\n chainId: number\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SiweService {\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\n\n siwe: any\n\n constructor() {\n const client = this.mainService.authClient as { siwe?: any }\n validatePlugin(client, 'siwe')\n this.siwe = client.siwe\n }\n\n /**\n * Fetches a nonce for the given wallet address to be included in the SIWE message.\n * @param data - The wallet address and optional chain ID\n */\n getNonce(data: SiweNonceRequest): Observable<SiweNonceResult> {\n return defer(() => this.siwe.getNonce(data)).pipe(\n map((res) => this.mainService.mapData<SiweNonceResult>(res as any)),\n )\n }\n\n /**\n * Verifies a signed SIWE message and signs the user in.\n * On success, waits for the session to be established before emitting.\n * @param data - The signed message, signature, wallet address, optional chain ID and optional email\n */\n verifyMessage(data: {\n message: string\n signature: string\n walletAddress: string\n chainId?: number\n email?: string\n }): Observable<SiweVerifyResult> {\n return defer(() => this.siwe.verifySiweMessage(data)).pipe(\n map((res) => this.mainService.mapData<SiweVerifyResult>(res as any)),\n switchMap((result) =>\n this.authService.sessionState$.pipe(\n filter((s) => s !== null),\n map(() => result),\n ),\n ),\n )\n }\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core'\nimport { type BetterAuthClientOptions } from 'better-auth/client'\nimport { AuthService } from './services'\n\nexport const BETTER_AUTH_CONFIG_TOKEN = new InjectionToken<BetterAuthClientOptions>('BETTER_AUTH_CONFIG')\n\nconst DEFAULT_CONFIG: Partial<BetterAuthClientOptions> = {}\n\nexport function provideBetterAuth(options: BetterAuthClientOptions): EnvironmentProviders {\n const config: BetterAuthClientOptions = { ...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, type UrlTree } from '@angular/router'\nimport { map, type Observable } from 'rxjs'\nimport { AuthService } from '../services'\n\nconst normalizeRoles = (role: unknown): string[] => {\n if (Array.isArray(role)) {\n return role.map((value) => String(value).trim()).filter((value) => value.length > 0)\n }\n\n if (typeof role === 'string') {\n return role\n .split(',')\n .map((value) => value.trim())\n .filter((value) => value.length > 0)\n }\n\n return []\n}\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 roles = normalizeRoles((session.user as { role?: unknown }).role)\n if (roles.some((role) => requiredRoles.includes(role))) {\n return true\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","import { AbstractControl, AsyncValidatorFn } from '@angular/forms'\nimport { catchError, map, of, switchMap, timer } from 'rxjs'\nimport { UsernameService } from '../services'\n\nexport function usernameAvailableValidator(\n usernameService: UsernameService,\n initialUsername?: string,\n): AsyncValidatorFn {\n let lastValidationValue: string | null = null\n\n return (control: AbstractControl): any => {\n const username = control.value?.trim()\n\n if (!username || username === initialUsername) {\n lastValidationValue = null\n return of(null)\n }\n\n // If the value is the same as the last one we checked, don't check again\n if (username === lastValidationValue) {\n return of(null)\n }\n\n lastValidationValue = username\n\n return timer(500).pipe(\n switchMap(() => {\n const currentValue = control.value?.trim()\n\n // If the value has changed since the timer started, don't validate\n if (currentValue !== username) {\n return of(null)\n }\n\n if (!currentValue || currentValue === initialUsername) {\n return of(null)\n }\n\n return usernameService.isUsernameAvailable({ username: currentValue }).pipe(\n map((available) => (available ? null : { usernameTaken: true })),\n catchError(() => of(null)),\n )\n }),\n )\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/plugins/two-factor.service.ts","../../../src/lib/services/plugins/passkey.service.ts","../../../src/lib/services/plugins/generic-oauth.service.ts","../../../src/lib/services/plugins/email-otp.service.ts","../../../src/lib/services/plugins/one-tap.service.ts","../../../src/lib/services/plugins/magic-link.service.ts","../../../src/lib/utils/email.util.ts","../../../src/lib/services/plugins/username.service.ts","../../../src/lib/services/plugins/admin.service.ts","../../../src/lib/services/plugins/organization.service.ts","../../../src/lib/services/plugins/siwe.service.ts","../../../src/lib/providers.ts","../../../src/lib/guards/auth-guard.utils.ts","../../../src/lib/guards/auth-guard.factory.ts","../../../src/lib/validators/username-available.validators.ts","../../../src/ngx-better-auth.ts"],"sourcesContent":["import { inject, Injectable, Injector, resource, type ResourceRef } from '@angular/core'\nimport { BETTER_AUTH_CONFIG_TOKEN } from '../providers'\nimport { BetterFetchError, createAuthClient } from 'better-auth/client'\nimport { defer, map, type Observable } from 'rxjs'\n\ntype BetterAuthResponse<T> = { data: T; error: BetterFetchError }\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MainService {\n private readonly config = inject(BETTER_AUTH_CONFIG_TOKEN)\n private readonly injector = inject(Injector)\n\n readonly authClient: any = createAuthClient({\n ...this.config,\n })\n\n readonly url = `${this.config.baseURL}${this.config.basePath || '/api/auth'}`\n\n mapData<T>(data: { data: T; error: BetterFetchError }): T {\n if (data.error) {\n throw data.error\n }\n return data.data\n }\n\n read<T>(loader: () => Promise<BetterAuthResponse<T>>): Observable<T> {\n return defer(loader).pipe(map((data) => this.mapData<T>(data)))\n }\n\n readResource<T>(loader: () => Promise<BetterAuthResponse<T>>): ResourceRef<T | undefined> {\n return resource({\n injector: this.injector,\n loader: async () => this.mapData<T>(await loader()),\n })\n }\n\n readResourceWithParams<T, R>(\n params: () => R,\n loader: (params: R) => Promise<BetterAuthResponse<T>>,\n ): ResourceRef<T | undefined> {\n return resource({\n injector: this.injector,\n params,\n loader: async ({ params }) => this.mapData<T>(await loader(params)),\n })\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core'\nimport { BetterFetchError } from 'better-auth/client'\nimport { defer, filter, first, map, Observable, shareReplay, switchMap } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Provider, Session, User } from '../models'\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<{ user: any; session: any } | 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<{ user: User; session: Session } | null>\n\n constructor() {\n this.session$()\n\n const useSession$ = new Observable<{\n data: { user: User; session: Session } | null\n error: BetterFetchError | null\n isPending: boolean\n }>((subscriber) => {\n this.client.useSession.subscribe((value: any) => subscriber.next(value as any))\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: any) => {\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 }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => this.client.signIn.email(data)).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\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: {\n name: string\n email: string\n password: string\n username: string\n displayUsername?: string\n }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => this.client.signUp.email(data)).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n signInProvider(data: {\n provider: Provider\n callbackURL?: string\n disableRedirect?: boolean\n errorCallbackURL?: string\n idToken?: string\n loginHint?: string\n newUserCallbackURL?: string\n requestSignUp?: boolean\n scopes?: string[]\n }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() =>\n this.client.signIn.social({\n callbackURL: window.location.origin,\n ...(data as any),\n }),\n ).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n signOut(): Observable<null> {\n return defer(() => this.client.signOut()).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s === null))),\n )\n }\n\n sendVerificationEmail(data: { email: string; callbackURL?: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.sendVerificationEmail(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n requestPasswordReset(data: { email: string; redirectTo?: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.requestPasswordReset(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n resetPassword(data: { newPassword: string; token: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.resetPassword(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n changePassword(data: { currentPassword: string; newPassword: string; revokeOtherSessions?: boolean }): Observable<{\n token: string\n user: User\n }> {\n return defer(() => this.client.changePassword(data)).pipe(\n map((data) => this.mainService.mapData<{ token: string; user: User }>(data as any)),\n )\n }\n\n changeEmail(data: { newEmail: string; callbackURL?: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.changeEmail(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n updateUser(\n data: Partial<{\n name: string\n image: string\n username: string\n displayUsername: string\n [key: string]: any\n }>,\n ): Observable<{ status: boolean }> {\n return defer(() => this.client.updateUser(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n deleteUser(data?: { callbackURL?: string; token?: string; password?: string }): Observable<null> {\n return defer(() => this.client.deleteUser(data)).pipe(\n map((data) => this.mainService.mapData(data as any)),\n switchMap(() => this.sessionState$.pipe(filter((s) => s === null))),\n first(),\n )\n }\n}\n","import { inject, Injectable, type ResourceRef } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Session } from '../models'\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(): Observable<Session[]> {\n return this.mainService.read<Session[]>(() => this.client.listSessions())\n }\n\n sessionsResource(): ResourceRef<Session[] | undefined> {\n return this.mainService.readResource<Session[]>(() => this.client.listSessions())\n }\n\n revokeSession(data: { token: string }): Observable<{ success: boolean }> {\n return defer(() => this.client.revokeSession(data)).pipe(\n map((data) => this.mainService.mapData<{ success: boolean }>(data as any)),\n )\n }\n\n revokeOtherSessions(): Observable<{ success: boolean }> {\n return defer(() => this.client.revokeOtherSessions()).pipe(\n map((data) => this.mainService.mapData<{ success: boolean }>(data as any)),\n )\n }\n\n revokeAllSessions(): Observable<{ success: boolean }> {\n return defer(() => this.client.revokeSessions()).pipe(\n map((data) => this.mainService.mapData<{ success: boolean }>(data as any)),\n )\n }\n}\n","import { inject, Injectable, type ResourceRef } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Account, 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(): Observable<Account[]> {\n return this.mainService.read<Account[]>(() => this.client.listAccounts())\n }\n\n accountsResource(): ResourceRef<Account[] | undefined> {\n return this.mainService.readResource<Account[]>(() => 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 }): Observable<{ url: string; redirect: boolean }> {\n return defer(() => this.client.linkSocial(data)).pipe(\n map((data) => this.mainService.mapData<{ url: string; redirect: boolean }>(data as any)),\n )\n }\n\n unlinkAccount(data: { providerId: Provider; accountId: string }): Observable<{ status: boolean }> {\n return defer(() => this.client.unlinkAccount(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\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, filter, first, map, Observable, switchMap } from 'rxjs'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport { MainService } from '../main.service'\nimport { AuthService } from '../auth.service'\nimport { Session, User } from '../../models'\n\n@Injectable({ providedIn: 'root' })\nexport class TwoFactorService {\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\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 }): Observable<{ totpURI: string; backupCodes: string[] }> {\n return defer(() => this.twoFactor.enable(data)).pipe(\n map((data) =>\n this.mainService.mapData<{\n totpURI: string\n backupCodes: string[]\n }>(data as any),\n ),\n )\n }\n\n disable(data: { password: string }): Observable<{ status: boolean }> {\n return defer(() => this.twoFactor.disable(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n getTotpUri(data: { password: string }): Observable<{ totpURI: string }> {\n return defer(() => this.twoFactor.getTotpUri(data)).pipe(\n map((data) => this.mainService.mapData<{ totpURI: string }>(data as any)),\n )\n }\n\n verifyTotp(data: { code: string; trustDevice?: boolean }): Observable<{ status: boolean }> {\n return defer(() => this.twoFactor.verifyTotp(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\n first(),\n map(() => ({ status: true })),\n )\n }\n\n sendOtp(): Observable<{ status: boolean }> {\n return defer(() => this.twoFactor.sendOtp()).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n verifyOtp(data: { code: string; trustDevice?: boolean }): Observable<{ status: boolean }> {\n return defer(() => this.twoFactor.verifyOtp(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\n first(),\n map(() => ({ status: true })),\n )\n }\n\n generateBackupCodes(data: { password: string }): Observable<{ status: boolean; backupCodes: string[] }> {\n return defer(() => this.twoFactor.generateBackupCodes(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean; backupCodes: string[] }>(data as any)),\n )\n }\n\n verifyBackupCode(data: { code: string; disableSession?: boolean; trustDevice?: boolean }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => this.twoFactor.verifyBackupCode(data)).pipe(\n map((data) =>\n this.mainService.mapData<{\n user: User\n session: Session\n }>(data as any),\n ),\n )\n }\n}\n","import { inject, Injectable, type ResourceRef } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { MainService } from '../main.service'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport type { Passkey } from '@better-auth/passkey'\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: {\n name?: string\n authenticatorAttachment?: AuthenticatorAttachment\n }): Observable<{ passkey: Passkey }> {\n return defer(() => this.passkey.addPasskey(data)).pipe(\n map((data) => this.mainService.mapData<{ passkey: Passkey }>(data as any)),\n )\n }\n\n signIn(data: { email: string; autoFill?: boolean; callbackURL?: string }): Observable<unknown> {\n return defer(() => (this.mainService.authClient.signIn as any).passkey(data))\n }\n\n listUserPasskeys(): Observable<Passkey[]> {\n return this.mainService.read<Passkey[]>(() => this.passkey.listUserPasskeys())\n }\n\n userPasskeysResource(): ResourceRef<Passkey[] | undefined> {\n return this.mainService.readResource<Passkey[]>(() => this.passkey.listUserPasskeys())\n }\n\n deletePasskey(data: { id: string }): Observable<{ status: boolean }> {\n return defer(() => this.passkey.deletePasskey(data)).pipe(\n map((data) => this.mainService.mapData<{ status: boolean }>(data as any)),\n )\n }\n\n updatePasskey(data: { id: string; name: string }): Observable<{ passkey: Passkey }> {\n return defer(() => this.passkey.updatePasskey(data)).pipe(\n map((data) => this.mainService.mapData<{ passkey: Passkey }>(data as any)),\n )\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: {\n email: string\n type: 'sign-in' | 'email-verification' | 'forget-password'\n otp: string\n }) {\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: {\n email: string\n name?: string\n callbackURL?: string\n newUserCallbackURL?: string\n errorCallbackURL?: string\n }) {\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","export function isEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, filter, map, Observable, switchMap } from 'rxjs'\nimport { MainService } from '../main.service'\nimport { AuthService } from '../auth.service'\nimport { isEmail } from '../../utils/email.util'\nimport { Session, User } from '../../models'\nimport { HttpClient } from '@angular/common/http'\n\n@Injectable({ providedIn: 'root' })\nexport class UsernameService {\n private readonly http = inject(HttpClient)\n\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\n\n username: any = this.mainService.authClient\n\n /**\n * pass either email or username to sign in. Needs username plugin enabled to use username.\n * @param data : { email?: string; username?: string; password: string; rememberMe?: boolean }\n */\n signIn(data: { login: string; password: string; rememberMe?: boolean }): Observable<{\n user: User\n session: Session\n }> {\n if (isEmail(data.login)) {\n return this.authService.signInEmail({ email: data.login, password: data.password, rememberMe: data.rememberMe })\n } else {\n return this.signInUsername({ username: data.login, password: data.password, rememberMe: data.rememberMe })\n }\n }\n\n signInUsername(data: { username: string; password: string; rememberMe?: boolean }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => (this.username as any).signIn.username(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n isUsernameAvailable(data: { username: string }): Observable<boolean> {\n return this.http\n .post<{ available: boolean }>(`${this.mainService.url}/is-username-available`, data)\n .pipe(map((res) => res.available))\n }\n}\n","import { inject, Injectable, type ResourceRef } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport { MainService } from '../main.service'\nimport { Session, User } from '../../models'\n\ntype ListUsersParams = {\n searchValue?: string\n searchField?: 'email' | 'name'\n searchOperator?: 'contains' | 'start_with' | 'end_with'\n limit?: number\n offset?: number\n sortBy?: string\n sortDirection?: 'asc' | 'desc'\n filterField?: string\n filterValue?: string | number | boolean\n filterOperator?: 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte'\n}\n\ntype ListUsersResult = { users: User[]; total: number; limit: number; offset: number }\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: string | string[] }): Observable<{ user: User }> {\n return defer(() => this.admin.setRole(data)).pipe(\n map((data) => this.mainService.mapData<{ user: User }>(data as any)),\n )\n }\n\n createUser(data: {\n email: string\n password: string\n name: string\n role?: string | string[]\n data?: Record<string, any>\n }): Observable<{ user: User }> {\n return defer(() => this.admin.createUser(data)).pipe(\n map((data) => this.mainService.mapData<{ user: User }>(data as any)),\n )\n }\n\n updateUser(data: { userId: string; data: Partial<User> }): Observable<{ user: User }> {\n return defer(() => this.admin.updateUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ user: User }>(data)),\n )\n }\n\n listUsers(data: ListUsersParams): Observable<ListUsersResult> {\n return this.mainService.read<ListUsersResult>(() => this.admin.listUsers(data))\n }\n\n usersResource(params: () => ListUsersParams): ResourceRef<ListUsersResult | undefined> {\n return this.mainService.readResourceWithParams<ListUsersResult, ListUsersParams>(params, (data) =>\n this.admin.listUsers(data),\n )\n }\n\n listUserSessions(data: { userId: string }): Observable<{ sessions: Session[] }> {\n return this.mainService.read<{ sessions: Session[] }>(() => this.admin.listUserSessions(data))\n }\n\n userSessionsResource(params: () => { userId: string }): ResourceRef<{ sessions: Session[] } | undefined> {\n return this.mainService.readResourceWithParams<{ sessions: Session[] }, { userId: string }>(params, (data) =>\n this.admin.listUserSessions(data),\n )\n }\n\n unbanUser(data: { userId: string }): Observable<{ user: User }> {\n return defer(() => this.admin.unbanUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ user: User }>(data)),\n )\n }\n\n banUser(data: { userId: string; banReason?: string; banExpiresIn?: number }): Observable<{ user: User }> {\n return defer(() => this.admin.banUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ user: User }>(data)),\n )\n }\n\n impersonateUser(data: { userId: string }): Observable<{ session: Session; user: User }> {\n return defer(() => this.admin.impersonateUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ session: Session; user: User }>(data)),\n )\n }\n\n stopImpersonating(): Observable<unknown> {\n return defer(() => this.admin.stopImpersonating())\n }\n\n revokeUserSession(data: { sessionToken: string }): Observable<{ success: boolean }> {\n return defer(() => this.admin.revokeUserSession(data)).pipe(\n map((data: any) => this.mainService.mapData<{ success: boolean }>(data)),\n )\n }\n\n revokeUserSessions(data: { userId: string }): Observable<{ success: boolean }> {\n return defer(() => this.admin.revokeUserSessions(data)).pipe(\n map((data: any) => this.mainService.mapData<{ success: boolean }>(data)),\n )\n }\n\n removeUser(data: { userId: string }): Observable<{ success: boolean }> {\n return defer(() => this.admin.removeUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ success: boolean }>(data)),\n )\n }\n\n setUserPassword(data: { userId: string; newPassword: string }): Observable<{ success: boolean }> {\n return defer(() => this.admin.setUserPassword(data)).pipe(\n map((data: any) => this.mainService.mapData<{ success: boolean }>(data)),\n )\n }\n\n hasPermission(data: { userId?: string; permissions: Record<string, string[]> }) {\n return defer(() => this.admin.hasPermission(data))\n }\n\n checkRolePermission(data: { role: string; permissions: Record<string, string[]> }) {\n return defer(() => this.admin.checkRolePermission(data))\n }\n}\n","import { inject, Injectable, type ResourceRef } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport { MainService } from '../main.service'\nimport type { Organization, Member, Invitation } from 'better-auth/plugins/organization'\n\ntype FullOrganizationParams = {\n organizationId?: string\n organizationSlug?: string\n membersLimit?: number\n}\n\ntype InvitationDetails = {\n organizationName: string\n organizationSlug: string\n inviterEmail: string\n} & Invitation\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 create(data: {\n name: string\n slug: string\n logo?: string\n metadata?: Record<string, any>\n keepCurrentActiveOrganization?: boolean\n }): Observable<Organization> {\n return defer(() => this.organization.create(data)).pipe(\n map((data) => this.mainService.mapData<Organization>(data as any)),\n )\n }\n\n checkSlug(data: { slug: string }): Observable<unknown> {\n return defer(() => this.organization.checkSlug(data))\n }\n\n list(): Observable<Organization[]> {\n return this.mainService.read<Organization[]>(() => this.organization.list())\n }\n\n organizationsResource(): ResourceRef<Organization[] | undefined> {\n return this.mainService.readResource<Organization[]>(() => this.organization.list())\n }\n\n setActive(data: { organizationId?: string; organizationSlug?: string }): Observable<Organization> {\n return defer(() => this.organization.setActive(data)).pipe(\n map((data) => this.mainService.mapData<Organization>(data as any)),\n )\n }\n\n getFullOrganization(data: FullOrganizationParams): Observable<Organization> {\n return defer(() => this.organization.getFullOrganization(data)).pipe(\n map((data) => this.mainService.mapData<Organization>(data as any)),\n )\n }\n\n fullOrganizationResource(params: () => FullOrganizationParams): ResourceRef<Organization | undefined> {\n return this.mainService.readResourceWithParams<Organization, FullOrganizationParams>(params, (data) =>\n this.organization.getFullOrganization(data),\n )\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 }): Observable<Organization> {\n return defer(() => this.organization.update(data)).pipe(\n map((data) => this.mainService.mapData<Organization>(data as any)),\n )\n }\n\n delete(data: { organizationId: string }): Observable<void> {\n return defer(() => this.organization.delete(data)).pipe(map((data) => this.mainService.mapData<void>(data as any)))\n }\n\n inviteMember(data: {\n email: string\n role: string | string[]\n organizationId?: string\n resend?: boolean\n teamId?: string\n }): Observable<Invitation> {\n return defer(() => this.organization.inviteMember(data)).pipe(\n map((data) => this.mainService.mapData<Invitation>(data as any)),\n )\n }\n\n acceptInvitation(data: { invitationId: string }): Observable<{ invitation: Invitation; member: Member }> {\n return defer(() => this.organization.acceptInvitation(data)).pipe(\n map((data) => this.mainService.mapData<{ invitation: Invitation; member: Member }>(data as any)),\n )\n }\n\n cancelInvitation(data: { invitationId: string }): Observable<void> {\n return defer(() => this.organization.cancelInvitation(data)).pipe(\n map((data) => this.mainService.mapData<void>(data as any)),\n )\n }\n\n rejectInvitation(data: { invitationId: string }): Observable<{ invitation: Invitation; member: null }> {\n return defer(() => this.organization.rejectInvitation(data)).pipe(\n map((data) => this.mainService.mapData<{ invitation: Invitation; member: null }>(data as any)),\n )\n }\n\n getInvitation(data: { id: string }): Observable<InvitationDetails> {\n return defer(() => this.organization.getInvitation(data)).pipe(\n map((data) => this.mainService.mapData<InvitationDetails>(data as any)),\n )\n }\n\n invitationResource(params: () => { id: string }): ResourceRef<InvitationDetails | undefined> {\n return this.mainService.readResourceWithParams<InvitationDetails, { id: string }>(params, (data) =>\n this.organization.getInvitation(data),\n )\n }\n\n listInvitations(data: { organizationId?: string }): Observable<Invitation[]> {\n return this.mainService.read<Invitation[]>(() => this.organization.listInvitations(data))\n }\n\n invitationsResource(params: () => { organizationId?: string }): ResourceRef<Invitation[] | undefined> {\n return this.mainService.readResourceWithParams<Invitation[], { organizationId?: string }>(params, (data) =>\n this.organization.listInvitations(data),\n )\n }\n\n listUserInvitations(): Observable<Invitation[]> {\n return this.mainService.read<Invitation[]>(() => this.organization.listUserInvitations())\n }\n\n userInvitationsResource(): ResourceRef<Invitation[] | undefined> {\n return this.mainService.readResource<Invitation[]>(() => 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 }): Observable<{ member: Member }> {\n return defer(() => this.organization.removeMember(data)).pipe(\n map((data) => this.mainService.mapData<{ member: Member }>(data as any)),\n )\n }\n\n updateMemberRoles(data: { memberId: string; role: string | string[]; organizationId?: string }) {\n return defer(() => this.organization.updateMemberRoles(data))\n }\n\n getActiveMember(): Observable<Member> {\n return this.mainService.read<Member>(() => this.organization.getActiveMember())\n }\n\n activeMemberResource(): ResourceRef<Member | undefined> {\n return this.mainService.readResource<Member>(() => this.organization.getActiveMember())\n }\n\n leave(data: { organizationId?: string }): Observable<void> {\n return defer(() => this.organization.leave(data)).pipe(map((data) => this.mainService.mapData<void>(data as any)))\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: {\n teamId: string\n data: { name?: string; organizationId?: string; createdAt?: Date; updatedAt?: Date }\n }) {\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 { inject, Injectable } from '@angular/core'\nimport { defer, filter, map, Observable, switchMap } from 'rxjs'\nimport { validatePlugin } from '../../utils/validate-plugin'\nimport { MainService } from '../main.service'\nimport { AuthService } from '../auth.service'\n\nexport interface SiweNonceResult {\n nonce: string\n}\n\nexport type SiweNonceRequest = {\n walletAddress?: string\n address?: string\n chainId?: number\n}\n\nexport interface SiweVerifyResult {\n token: string\n success: boolean\n user: {\n id: string\n walletAddress: string\n chainId: number\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SiweService {\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\n\n siwe: any\n\n constructor() {\n const client = this.mainService.authClient as { siwe?: any }\n validatePlugin(client, 'siwe')\n this.siwe = client.siwe\n }\n\n /**\n * Fetches a nonce for the given wallet address to be included in the SIWE message.\n * @param data - The wallet address and optional chain ID\n */\n getNonce(data: SiweNonceRequest): Observable<SiweNonceResult> {\n return defer(() => this.siwe.getNonce(data)).pipe(\n map((res) => this.mainService.mapData<SiweNonceResult>(res as any)),\n )\n }\n\n /**\n * Verifies a signed SIWE message and signs the user in.\n * On success, waits for the session to be established before emitting.\n * @param data - The signed message, signature, wallet address, optional chain ID and optional email\n */\n verifyMessage(data: {\n message: string\n signature: string\n walletAddress: string\n chainId?: number\n email?: string\n }): Observable<SiweVerifyResult> {\n return defer(() => this.siwe.verifySiweMessage(data)).pipe(\n map((res) => this.mainService.mapData<SiweVerifyResult>(res as any)),\n switchMap((result) =>\n this.authService.sessionState$.pipe(\n filter((s) => s !== null),\n map(() => result),\n ),\n ),\n )\n }\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core'\nimport { type BetterAuthClientOptions } from 'better-auth/client'\nimport { AuthService } from './services'\n\nexport const BETTER_AUTH_CONFIG_TOKEN = new InjectionToken<BetterAuthClientOptions>('BETTER_AUTH_CONFIG')\n\nconst DEFAULT_CONFIG: Partial<BetterAuthClientOptions> = {}\n\nexport function provideBetterAuth(options: BetterAuthClientOptions): EnvironmentProviders {\n const config: BetterAuthClientOptions = { ...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, type UrlTree } from '@angular/router'\nimport { catchError, map, of, type Observable } from 'rxjs'\nimport { AuthService } from '../services'\nimport { OrganizationService } from '../services/plugins/organization.service'\n\ntype GuardRedirect = string[] | UrlTree\n\nconst normalizeRoles = (role: unknown): string[] => {\n if (Array.isArray(role)) {\n return role.map((value) => String(value).trim()).filter((value) => value.length > 0)\n }\n\n if (typeof role === 'string') {\n return role\n .split(',')\n .map((value) => value.trim())\n .filter((value) => value.length > 0)\n }\n\n return []\n}\n\nconst redirectResult = (router: Router, redirectTo: GuardRedirect): UrlTree => {\n if (Array.isArray(redirectTo)) {\n return router.createUrlTree(redirectTo)\n }\n\n return redirectTo\n}\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(\n requiredRoles: string[],\n redirectTo: string[] = ['/unauthorized'],\n): () => 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 roles = normalizeRoles((session.user as { role?: unknown }).role)\n if (roles.some((role) => requiredRoles.includes(role))) {\n return true\n }\n\n return router.createUrlTree(redirectTo)\n }),\n )\n }\n}\n\n/**\n * Allows access only when an active organization member exists.\n * Redirects users without an active organization to the specified commands or UrlTree.\n */\nexport function hasActiveOrganization(\n redirectTo: GuardRedirect = ['/unauthorized'],\n): () => Observable<UrlTree | boolean> {\n return () => {\n const organization = inject(OrganizationService)\n const router = inject(Router)\n\n return organization.getActiveMember().pipe(\n map((member) => (member ? true : redirectResult(router, redirectTo))),\n catchError(() => of(redirectResult(router, redirectTo))),\n )\n }\n}\n\n/**\n * Allows access only to active organization members with at least one of the specified roles.\n * Redirects users without an active organization, active member, or matching role.\n */\nexport function hasOrganizationRole(\n requiredRoles: string[],\n redirectTo: GuardRedirect = ['/unauthorized'],\n): () => Observable<UrlTree | boolean> {\n return () => {\n const organization = inject(OrganizationService)\n const router = inject(Router)\n\n return organization.getActiveMember().pipe(\n map((member) => {\n if (!member) {\n return redirectResult(router, redirectTo)\n }\n\n const roles = normalizeRoles((member as { role?: unknown }).role)\n if (roles.some((role) => requiredRoles.includes(role))) {\n return true\n }\n\n return redirectResult(router, redirectTo)\n }),\n catchError(() => of(redirectResult(router, redirectTo))),\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","import { AbstractControl, AsyncValidatorFn } from '@angular/forms'\nimport { catchError, map, of, switchMap, timer } from 'rxjs'\nimport { UsernameService } from '../services'\n\nexport function usernameAvailableValidator(\n usernameService: UsernameService,\n initialUsername?: string,\n): AsyncValidatorFn {\n let lastValidationValue: string | null = null\n\n return (control: AbstractControl): any => {\n const username = control.value?.trim()\n\n if (!username || username === initialUsername) {\n lastValidationValue = null\n return of(null)\n }\n\n // If the value is the same as the last one we checked, don't check again\n if (username === lastValidationValue) {\n return of(null)\n }\n\n lastValidationValue = username\n\n return timer(500).pipe(\n switchMap(() => {\n const currentValue = control.value?.trim()\n\n // If the value has changed since the timer started, don't validate\n if (currentValue !== username) {\n return of(null)\n }\n\n if (!currentValue || currentValue === initialUsername) {\n return of(null)\n }\n\n return usernameService.isUsernameAvailable({ username: currentValue }).pipe(\n map((available) => (available ? null : { usernameTaken: true })),\n catchError(() => of(null)),\n )\n }),\n )\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, EnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { InjectionToken, EnvironmentProviders, ResourceRef } from '@angular/core';
|
|
3
3
|
import { BetterAuthClientOptions } from 'better-auth/client';
|
|
4
4
|
import * as rxjs from 'rxjs';
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
@@ -172,6 +172,7 @@ declare class SessionService {
|
|
|
172
172
|
private readonly mainService;
|
|
173
173
|
private readonly client;
|
|
174
174
|
listSessions(): Observable<Session[]>;
|
|
175
|
+
sessionsResource(): ResourceRef<Session[] | undefined>;
|
|
175
176
|
revokeSession(data: {
|
|
176
177
|
token: string;
|
|
177
178
|
}): Observable<{
|
|
@@ -191,6 +192,7 @@ declare class AccountService {
|
|
|
191
192
|
private readonly mainService;
|
|
192
193
|
private readonly client;
|
|
193
194
|
listAccounts(): Observable<Account[]>;
|
|
195
|
+
accountsResource(): ResourceRef<Account[] | undefined>;
|
|
194
196
|
linkSocial(data: {
|
|
195
197
|
provider: Provider;
|
|
196
198
|
callbackURL?: string;
|
|
@@ -286,6 +288,7 @@ declare class PasskeyService {
|
|
|
286
288
|
callbackURL?: string;
|
|
287
289
|
}): Observable<unknown>;
|
|
288
290
|
listUserPasskeys(): Observable<Passkey[]>;
|
|
291
|
+
userPasskeysResource(): ResourceRef<Passkey[] | undefined>;
|
|
289
292
|
deletePasskey(data: {
|
|
290
293
|
id: string;
|
|
291
294
|
}): Observable<{
|
|
@@ -426,6 +429,24 @@ declare class UsernameService {
|
|
|
426
429
|
static ɵprov: i0.ɵɵInjectableDeclaration<UsernameService>;
|
|
427
430
|
}
|
|
428
431
|
|
|
432
|
+
type ListUsersParams = {
|
|
433
|
+
searchValue?: string;
|
|
434
|
+
searchField?: 'email' | 'name';
|
|
435
|
+
searchOperator?: 'contains' | 'start_with' | 'end_with';
|
|
436
|
+
limit?: number;
|
|
437
|
+
offset?: number;
|
|
438
|
+
sortBy?: string;
|
|
439
|
+
sortDirection?: 'asc' | 'desc';
|
|
440
|
+
filterField?: string;
|
|
441
|
+
filterValue?: string | number | boolean;
|
|
442
|
+
filterOperator?: 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte';
|
|
443
|
+
};
|
|
444
|
+
type ListUsersResult = {
|
|
445
|
+
users: User[];
|
|
446
|
+
total: number;
|
|
447
|
+
limit: number;
|
|
448
|
+
offset: number;
|
|
449
|
+
};
|
|
429
450
|
declare class AdminService {
|
|
430
451
|
private readonly mainService;
|
|
431
452
|
admin: any;
|
|
@@ -451,28 +472,18 @@ declare class AdminService {
|
|
|
451
472
|
}): Observable<{
|
|
452
473
|
user: User;
|
|
453
474
|
}>;
|
|
454
|
-
listUsers(data:
|
|
455
|
-
|
|
456
|
-
searchField?: 'email' | 'name';
|
|
457
|
-
searchOperator?: 'contains' | 'start_with' | 'end_with';
|
|
458
|
-
limit?: number;
|
|
459
|
-
offset?: number;
|
|
460
|
-
sortBy?: string;
|
|
461
|
-
sortDirection?: 'asc' | 'desc';
|
|
462
|
-
filterField?: string;
|
|
463
|
-
filterValue?: string | number | boolean;
|
|
464
|
-
filterOperator?: 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte';
|
|
465
|
-
}): Observable<{
|
|
466
|
-
users: User[];
|
|
467
|
-
total: number;
|
|
468
|
-
limit: number;
|
|
469
|
-
offset: number;
|
|
470
|
-
}>;
|
|
475
|
+
listUsers(data: ListUsersParams): Observable<ListUsersResult>;
|
|
476
|
+
usersResource(params: () => ListUsersParams): ResourceRef<ListUsersResult | undefined>;
|
|
471
477
|
listUserSessions(data: {
|
|
472
478
|
userId: string;
|
|
473
479
|
}): Observable<{
|
|
474
480
|
sessions: Session[];
|
|
475
481
|
}>;
|
|
482
|
+
userSessionsResource(params: () => {
|
|
483
|
+
userId: string;
|
|
484
|
+
}): ResourceRef<{
|
|
485
|
+
sessions: Session[];
|
|
486
|
+
} | undefined>;
|
|
476
487
|
unbanUser(data: {
|
|
477
488
|
userId: string;
|
|
478
489
|
}): Observable<{
|
|
@@ -525,6 +536,16 @@ declare class AdminService {
|
|
|
525
536
|
static ɵprov: i0.ɵɵInjectableDeclaration<AdminService>;
|
|
526
537
|
}
|
|
527
538
|
|
|
539
|
+
type FullOrganizationParams = {
|
|
540
|
+
organizationId?: string;
|
|
541
|
+
organizationSlug?: string;
|
|
542
|
+
membersLimit?: number;
|
|
543
|
+
};
|
|
544
|
+
type InvitationDetails = {
|
|
545
|
+
organizationName: string;
|
|
546
|
+
organizationSlug: string;
|
|
547
|
+
inviterEmail: string;
|
|
548
|
+
} & Invitation;
|
|
528
549
|
declare class OrganizationService {
|
|
529
550
|
private readonly mainService;
|
|
530
551
|
organization: any;
|
|
@@ -540,15 +561,13 @@ declare class OrganizationService {
|
|
|
540
561
|
slug: string;
|
|
541
562
|
}): Observable<unknown>;
|
|
542
563
|
list(): Observable<Organization[]>;
|
|
564
|
+
organizationsResource(): ResourceRef<Organization[] | undefined>;
|
|
543
565
|
setActive(data: {
|
|
544
566
|
organizationId?: string;
|
|
545
567
|
organizationSlug?: string;
|
|
546
568
|
}): Observable<Organization>;
|
|
547
|
-
getFullOrganization(data:
|
|
548
|
-
|
|
549
|
-
organizationSlug?: string;
|
|
550
|
-
membersLimit?: number;
|
|
551
|
-
}): Observable<Organization>;
|
|
569
|
+
getFullOrganization(data: FullOrganizationParams): Observable<Organization>;
|
|
570
|
+
fullOrganizationResource(params: () => FullOrganizationParams): ResourceRef<Organization | undefined>;
|
|
552
571
|
update(data: {
|
|
553
572
|
data: {
|
|
554
573
|
name?: string;
|
|
@@ -585,15 +604,18 @@ declare class OrganizationService {
|
|
|
585
604
|
}>;
|
|
586
605
|
getInvitation(data: {
|
|
587
606
|
id: string;
|
|
588
|
-
}): Observable<
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
} & Invitation>;
|
|
607
|
+
}): Observable<InvitationDetails>;
|
|
608
|
+
invitationResource(params: () => {
|
|
609
|
+
id: string;
|
|
610
|
+
}): ResourceRef<InvitationDetails | undefined>;
|
|
593
611
|
listInvitations(data: {
|
|
594
612
|
organizationId?: string;
|
|
595
613
|
}): Observable<Invitation[]>;
|
|
614
|
+
invitationsResource(params: () => {
|
|
615
|
+
organizationId?: string;
|
|
616
|
+
}): ResourceRef<Invitation[] | undefined>;
|
|
596
617
|
listUserInvitations(): Observable<Invitation[]>;
|
|
618
|
+
userInvitationsResource(): ResourceRef<Invitation[] | undefined>;
|
|
597
619
|
listMembers(data?: {
|
|
598
620
|
organizationId?: string;
|
|
599
621
|
limit?: number;
|
|
@@ -616,6 +638,7 @@ declare class OrganizationService {
|
|
|
616
638
|
organizationId?: string;
|
|
617
639
|
}): Observable<unknown>;
|
|
618
640
|
getActiveMember(): Observable<Member>;
|
|
641
|
+
activeMemberResource(): ResourceRef<Member | undefined>;
|
|
619
642
|
leave(data: {
|
|
620
643
|
organizationId?: string;
|
|
621
644
|
}): Observable<void>;
|
|
@@ -701,6 +724,7 @@ declare class SiweService {
|
|
|
701
724
|
static ɵprov: i0.ɵɵInjectableDeclaration<SiweService>;
|
|
702
725
|
}
|
|
703
726
|
|
|
727
|
+
type GuardRedirect = string[] | UrlTree;
|
|
704
728
|
/**
|
|
705
729
|
* Redirects unauthorized users to the specified commands (route).
|
|
706
730
|
*/
|
|
@@ -714,6 +738,16 @@ declare function redirectLoggedInTo(commands?: string[]): () => Observable<UrlTr
|
|
|
714
738
|
* Redirects unauthorized users to the specified commands (route).
|
|
715
739
|
*/
|
|
716
740
|
declare function hasRole(requiredRoles: string[], redirectTo?: string[]): () => Observable<UrlTree | boolean>;
|
|
741
|
+
/**
|
|
742
|
+
* Allows access only when an active organization member exists.
|
|
743
|
+
* Redirects users without an active organization to the specified commands or UrlTree.
|
|
744
|
+
*/
|
|
745
|
+
declare function hasActiveOrganization(redirectTo?: GuardRedirect): () => Observable<UrlTree | boolean>;
|
|
746
|
+
/**
|
|
747
|
+
* Allows access only to active organization members with at least one of the specified roles.
|
|
748
|
+
* Redirects users without an active organization, active member, or matching role.
|
|
749
|
+
*/
|
|
750
|
+
declare function hasOrganizationRole(requiredRoles: string[], redirectTo?: GuardRedirect): () => Observable<UrlTree | boolean>;
|
|
717
751
|
|
|
718
752
|
declare function canActivate(pipe: () => Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree): {
|
|
719
753
|
canActivate: [CanActivateFn];
|
|
@@ -721,5 +755,5 @@ declare function canActivate(pipe: () => Observable<boolean | UrlTree> | Promise
|
|
|
721
755
|
|
|
722
756
|
declare function usernameAvailableValidator(usernameService: UsernameService, initialUsername?: string): AsyncValidatorFn;
|
|
723
757
|
|
|
724
|
-
export { AccountService, AdminService, AuthService, BETTER_AUTH_CONFIG_TOKEN, EmailOtpService, GenericOauthService, MagicLinkService, OneTapService, OrganizationService, PasskeyService, SessionService, SiweService, TwoFactorService, UsernameService, canActivate, hasRole, provideBetterAuth, redirectLoggedInTo, redirectUnauthorizedTo, usernameAvailableValidator };
|
|
758
|
+
export { AccountService, AdminService, AuthService, BETTER_AUTH_CONFIG_TOKEN, EmailOtpService, GenericOauthService, MagicLinkService, OneTapService, OrganizationService, PasskeyService, SessionService, SiweService, TwoFactorService, UsernameService, canActivate, hasActiveOrganization, hasOrganizationRole, hasRole, provideBetterAuth, redirectLoggedInTo, redirectUnauthorizedTo, usernameAvailableValidator };
|
|
725
759
|
export type { Account, Provider, Session, SiweNonceRequest, SiweNonceResult, SiweVerifyResult, User };
|