ngx-better-auth 1.6.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -0
- package/fesm2022/ngx-better-auth.mjs +61 -11
- package/fesm2022/ngx-better-auth.mjs.map +1 -1
- package/index.d.ts +51 -28
- 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
|
|
|
@@ -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, of, timer, catchError } 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)));
|
|
@@ -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 { 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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"}
|
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>;
|