ngx-better-auth 0.7.3 → 0.8.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 CHANGED
@@ -1,5 +1,7 @@
1
1
  # ngx-better-auth
2
2
 
3
+ An **Angular 20+ wrapper for [Better Auth](https://github.com/better-auth/better-auth)**. Provides reactive session handling with **signals**, clean **DI provider setup** with **observables**, and modern **guards**.
4
+
3
5
  ![npm](https://img.shields.io/npm/v/ngx-better-auth)
4
6
  ![npm bundle size](https://img.shields.io/bundlephobia/minzip/ngx-better-auth)
5
7
  ![license](https://img.shields.io/npm/l/ngx-better-auth)
@@ -8,9 +10,6 @@
8
10
  ![angular](https://img.shields.io/badge/angular-20+-dd0031?logo=angular&logoColor=white)
9
11
  ![better-auth](https://img.shields.io/badge/better--auth-1.3.7+-blueviolet)
10
12
 
11
- An **Angular 20+ wrapper for [Better Auth](https://github.com/better-auth/better-auth)**.
12
- Provides reactive session handling with **signals**, clean **DI provider setup** with **observables**, and modern **guards**.
13
-
14
13
  ---
15
14
 
16
15
  ## 🚀 Compatibility
@@ -37,11 +36,31 @@ First, configure your Better Auth client in your application:
37
36
  import { ApplicationConfig } from '@angular/core'
38
37
  import { provideBetterAuth } from 'ngx-better-auth'
39
38
  import { environment } from './environments/environment'
39
+ import { adminClient, twoFactorClient, usernameClient } from 'better-auth/client/plugins'
40
40
 
41
41
  export const appConfig: ApplicationConfig = {
42
42
  providers: [
43
43
  provideBetterAuth({
44
44
  baseURL: environment.apiUrl, // it works also with proxy config
45
+ basePath: '/auth', // optional, default is '/api/auth'
46
+
47
+ // Example with plugins
48
+ plugins: [
49
+ usernameClient(),
50
+ twoFactorClient({
51
+ onTwoFactorRedirect() {
52
+ window.location.href = '/two-factor-auth'
53
+ },
54
+ }),
55
+ adminClient({
56
+ ac: accessControl,
57
+ roles: {
58
+ admin,
59
+ moderator,
60
+ user,
61
+ },
62
+ }),
63
+ ],
45
64
  })
46
65
  ]
47
66
  }
@@ -50,28 +69,43 @@ export const appConfig: ApplicationConfig = {
50
69
  ## 🧩 Different services
51
70
 
52
71
  You can inject different services depending on your needs.
53
- **AuthService** provides the core Better Auth client methods (login, logout, register, e.g.).
54
- The full list of methods is available at the end of this README.
55
-
56
- ### Global services
57
- - `AuthService`
58
- - `SessionService`
59
- - `AccountService`
60
-
61
- ### Plugin services
62
- Authentication:
63
- - `UsernameService`
64
- - `TwoFactorService`
65
- - `PasskeyService`
66
- - `GenericOauthService`
67
- - `EmailOtpService`
68
- - `OneTapService`
69
- - `MagicLinkService`
70
- - `UsernameService`
71
-
72
- Authorization:
73
- - `AdminService`
74
- - `OrganizationService`
72
+ **AuthService** provides the core Better Auth client methods (signIn, signOut, signUp, e.g.).
73
+ The full list of methods is available at the end of this README.
74
+
75
+ ## 🔌 Plugin compatibility
76
+
77
+ ### Authentication
78
+ - ✅ Two Factor ➡️ `TwoFactorService`
79
+ - ✅ Username ➡️ `UsernameService`
80
+ - Anonymous
81
+ - ❌ Phone Number
82
+ - ✅ Magic Link ➡️ `MagicLinkService`
83
+ - ✅ Email OTP ➡️ `EmailOtpService`
84
+ - ✅ Passkey ➡️ `PasskeyService`
85
+ - ✅ Generic OAuth ➡️ `GenericOauthService`
86
+ - ✅ One Tap ➡️ `OneTapService`
87
+ - ❌ Sign In With Ethereum
88
+
89
+ ### Authorization
90
+ - ✅ Admin ➡️ `AdminService`
91
+ - ❌ API Key
92
+ - ❌ MCP
93
+ - ✅ Organization ➡️ `OrganizationService`
94
+
95
+ ### Enterprise
96
+
97
+ - ❌ OIDC Provider
98
+ - ❌ SSO
99
+
100
+ ### Utility
101
+
102
+ - ❌ Bearer
103
+ - ❌ Device Authorization
104
+ - ❌ Captcha
105
+ - ❌ Last Login Method
106
+ - ❌ Multi Session
107
+ - ❌ One Time Token
108
+ - ❌ JWT
75
109
 
76
110
  ## 🔄 Real-time Session
77
111
 
@@ -135,4 +169,3 @@ export const routes: Routes = [
135
169
  ## 📋 Full list of AuthService methods
136
170
 
137
171
  ### AuthService
138
-
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable, signal, computed, InjectionToken, makeEnvironmentProviders } from '@angular/core';
3
- import { Observable, filter, map, shareReplay, defer, switchMap } from 'rxjs';
3
+ import { Observable, filter, map, shareReplay, defer, switchMap, first } from 'rxjs';
4
4
  import { createAuthClient } from 'better-auth/client';
5
5
  import { Router } from '@angular/router';
6
6
 
@@ -90,8 +90,8 @@ class AuthService {
90
90
  signUpEmail(data) {
91
91
  return defer(() => this.client.signUp.email(data)).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))));
92
92
  }
93
- signInProvider(provider) {
94
- return defer(() => this.client.signIn.social({ provider })).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))));
93
+ signInProvider(data) {
94
+ return defer(() => this.client.signIn.social(data)).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))));
95
95
  }
96
96
  signOut() {
97
97
  return defer(() => this.client.signOut()).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s === null))));
@@ -198,13 +198,13 @@ class TwoFactorService {
198
198
  return defer(() => this.twoFactor.getTotpUri(data)).pipe(map((data) => this.mainService.mapData(data)));
199
199
  }
200
200
  verifyTotp(data) {
201
- return defer(() => this.twoFactor.verifyTotp(data)).pipe(switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))));
201
+ return defer(() => this.twoFactor.verifyTotp(data)).pipe(switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))), first(), map(() => ({ status: true })));
202
202
  }
203
203
  sendOtp() {
204
204
  return defer(() => this.twoFactor.sendOtp()).pipe(map((data) => this.mainService.mapData(data)));
205
205
  }
206
206
  verifyOtp(data) {
207
- return defer(() => this.twoFactor.verifyOtp(data)).pipe(map((data) => this.mainService.mapData(data)));
207
+ return defer(() => this.twoFactor.verifyOtp(data)).pipe(switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))), first(), map(() => ({ status: true })));
208
208
  }
209
209
  generateBackupCodes(data) {
210
210
  return defer(() => this.twoFactor.generateBackupCodes(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/two-factor.service.ts","../../../src/lib/services/passkey.service.ts","../../../src/lib/services/generic-oauth.service.ts","../../../src/lib/services/email-otp.service.ts","../../../src/lib/services/one-tap.service.ts","../../../src/lib/services/magic-link.service.ts","../../../src/lib/utils/email.util.ts","../../../src/lib/services/username.service.ts","../../../src/lib/services/admin.service.ts","../../../src/lib/services/organization.service.ts","../../../src/lib/providers.ts","../../../src/lib/guards/auth-guard.utils.ts","../../../src/lib/guards/auth-guard.factory.ts","../../../src/ngx-better-auth.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core'\nimport { BETTER_AUTH_CONFIG_TOKEN } from '../providers'\nimport { 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 = createAuthClient({\n ...this.config,\n })\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 { Provider, Session2, User } from '../models'\nimport { defer, filter, map, Observable, shareReplay, switchMap } from 'rxjs'\nimport { MainService } from './main.service'\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: User; session: Session2 } | 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: Session2 } | null>\n\n constructor() {\n this.session$()\n\n const useSession$ = new Observable<{\n data: { user: User; session: Session2 } | null\n error: BetterFetchError | null\n isPending: boolean\n }>((subscriber) => {\n this.client.useSession.subscribe((value) => subscriber.next(value))\n })\n\n this.sessionState$ = useSession$.pipe(\n filter((session) => !session.isPending),\n map((session) => {\n if (session.error) {\n return null\n }\n return session.data\n }),\n shareReplay(1),\n )\n }\n\n /**\n * Asynchronously checks if the user is authenticated.\n * Ideal for route guards.\n * @returns An Observable that emits true for an active session, and false otherwise.\n */\n isLoggedIn$(): Observable<boolean> {\n return this.sessionState$.pipe(map((session) => !!session?.session))\n }\n\n private session$() {\n this.client.useSession.subscribe((session) => {\n if (session.isPending) {\n this.session.set(null)\n return\n }\n if (session.error) {\n const error: BetterFetchError = session.error\n if (error.status !== 401) {\n console.error('Error fetching session:', error)\n }\n this.session.set(null)\n return\n }\n this.session.set(session.data)\n })\n }\n\n signInEmail(data: { email: string; password: string; rememberMe?: boolean }): Observable<{\n user: User\n session: Session2\n }> {\n return defer(() => this.client.signIn.email(data)).pipe(\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: Session2\n }> {\n return defer(() => this.client.signUp.email(data)).pipe(\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n signInProvider(provider: Provider): Observable<{\n user: User\n session: Session2\n }> {\n return defer(() => this.client.signIn.social({ provider })).pipe(\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n signOut(): Observable<null> {\n return defer(() => this.client.signOut()).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s === null))))\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(data: {\n name?: string\n image?: string\n username?: string\n displayUsername?: string\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 switchMap(() => this.sessionState$.pipe(filter((s) => s === null))),\n )\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Session2 } 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<Session2[]> {\n return defer(() => this.client.listSessions()).pipe(\n map((data) => this.mainService.mapData<Session2[]>(data as any)),\n )\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, map, Observable, switchMap } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\nimport { Session2, User } from '../models'\nimport { AuthService } from './auth.service'\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<{\n user: User\n session: Session2\n }> {\n return defer(() => this.twoFactor.verifyTotp(data)).pipe(\n switchMap(() => this.authService.sessionState$.pipe(filter((s) => s !== null))),\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<{ token: string; user: User }> {\n return defer(() => this.twoFactor.verifyOtp(data)).pipe(\n map((data) => this.mainService.mapData<{ token: string; user: User }>(data as any)),\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: Session2\n }> {\n return defer(() => this.twoFactor.verifyBackupCode(data)).pipe(\n map((data) =>\n this.mainService.mapData<{\n user: User\n session: Session2\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 { Passkey } from '../models'\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: { email: string; type: 'sign-in' | 'email-verification' | 'forget-password'; otp: string }) {\n return defer(() => this.emailOtp.checkVerificationOtp(data))\n }\n\n verifyEmail(data: { email: string; otp: string }) {\n return defer(() => this.emailOtp.verifyEmail(data))\n }\n\n resetPassword(data: { email: string; otp: string; password: string }) {\n return defer(() => this.emailOtp.resetPassword(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\n\n@Injectable({ providedIn: 'root' })\nexport class OneTapService {\n private readonly mainService = inject(MainService)\n\n oneTap: any\n\n constructor() {\n const client = this.mainService.authClient as { oneTap?: any }\n validatePlugin(client, 'oneTap')\n this.oneTap = client.oneTap\n }\n\n signIn(data?: {\n fetchOptions?: {\n onSuccess: () => void\n }\n callbackURL?: string\n onPromptNotification?: (notification: any) => void\n }) {\n return defer(() => this.oneTap(data))\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer } from 'rxjs'\nimport { validatePlugin } from '../utils/validate-plugin'\nimport { MainService } from './main.service'\n\n@Injectable({ providedIn: 'root' })\nexport class MagicLinkService {\n private readonly mainService = inject(MainService)\n\n magicLink: any\n\n constructor() {\n const client = this.mainService.authClient as { magicLink?: any }\n validatePlugin(client, 'magicLink')\n this.magicLink = client.magicLink\n }\n\n signIn(data: { email: string; name?: string; callbackURL?: string; newUserCallbackURL?: string; errorCallbackURL?: string }) {\n return defer(() => (this.mainService.authClient.signIn as any).magicLink(data))\n }\n\n verify(data: { token: string; callbackURL?: string }) {\n return defer(() => this.magicLink.verify(data))\n }\n}\n","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, Observable, switchMap } from 'rxjs'\nimport { MainService } from './main.service'\nimport { Session2, User } from '../models'\nimport { AuthService } from './auth.service'\nimport { isEmail } from '../utils/email.util'\n\n@Injectable({ providedIn: 'root' })\nexport class UsernameService {\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\n\n username = 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: Session2\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: Session2\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<unknown> {\n return defer(() => (this.username as any).isUsernameAvailable(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 { Session2, 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: Session2[] }> {\n return defer(() => this.admin.listUserSessions(data)).pipe(\n map((data: any) => this.mainService.mapData<{ sessions: Session2[] }>(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: Session2; user: User }> {\n return defer(() => this.admin.impersonateUser(data)).pipe(\n map((data: any) => this.mainService.mapData<{ session: Session2; 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 { Invitation, Member, Member2, Organization } from '../models'\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: Member2 }> {\n return defer(() => this.organization.removeMember(data)).pipe(\n map((data) => this.mainService.mapData<{ member: Member2 }>(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<Member2> {\n return defer(() => this.organization.getActiveMember()).pipe(\n map((data) => this.mainService.mapData<Member2>(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 { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core'\nimport { type BetterAuthOptions } from 'better-auth'\nimport { AuthService } from './services'\n\nexport const BETTER_AUTH_CONFIG_TOKEN = new InjectionToken<BetterAuthOptions>('BETTER_AUTH_CONFIG')\n\nconst DEFAULT_CONFIG: Partial<BetterAuthOptions> = {}\n\nexport function provideBetterAuth(options: BetterAuthOptions): EnvironmentProviders {\n const config: BetterAuthOptions = { ...DEFAULT_CONFIG, ...options }\n\n // if baseURL is not a url, it might be because of a proxy in development\n if (!config.baseURL?.startsWith('http')) {\n config.baseURL = window.location.origin\n }\n\n return makeEnvironmentProviders([{ provide: BETTER_AUTH_CONFIG_TOKEN, useValue: config }, AuthService])\n}\n","import { inject } from '@angular/core'\nimport { Router, UrlTree } from '@angular/router'\nimport { AuthService } from '../services'\nimport { map, Observable } from 'rxjs'\n\n/**\n * Redirects unauthorized users to the specified commands (route).\n */\nexport function redirectUnauthorizedTo(commands: string[] = ['/login']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n return auth.isLoggedIn$().pipe(map((isLoggedIn) => (isLoggedIn ? true : router.createUrlTree(commands))))\n }\n}\n\n/**\n * Redirects logged-in users to the specified commands (route).\n */\nexport function redirectLoggedInTo(commands: string[] = ['/']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n return auth.isLoggedIn$().pipe(map((isLoggedIn) => (isLoggedIn ? router.createUrlTree(commands) : true)))\n }\n}\n\n/**\n * Allows access only to users with at least one of the specified roles.\n * Redirects unauthorized users to the specified commands (route).\n */\nexport function hasRole(\n requiredRoles: string[],\n redirectTo: string[] = ['/unauthorized'],\n): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n\n return auth.sessionState$.pipe(\n map((session) => {\n if (!session || !session.user) {\n return router.createUrlTree(redirectTo)\n }\n\n const role = session?.user?.['role']\n if (Array.isArray(role)) {\n if (role.some((r) => requiredRoles.includes(r))) {\n return true\n }\n } else if (typeof role === 'string') {\n if (requiredRoles.includes(role)) {\n return true\n }\n }\n\n return router.createUrlTree(redirectTo)\n }),\n )\n }\n}\n","import { CanActivateFn, UrlTree } from '@angular/router'\nimport { Observable } from 'rxjs'\n\nexport function canActivate(\n pipe: () => Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree,\n): {\n canActivate: [CanActivateFn]\n} {\n return {\n canActivate: [() => pipe()],\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-better-auth.mjs","sources":["../../../src/lib/services/main.service.ts","../../../src/lib/services/auth.service.ts","../../../src/lib/services/session.service.ts","../../../src/lib/services/account.service.ts","../../../src/lib/utils/validate-plugin.ts","../../../src/lib/services/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/providers.ts","../../../src/lib/guards/auth-guard.utils.ts","../../../src/lib/guards/auth-guard.factory.ts","../../../src/ngx-better-auth.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core'\nimport { BETTER_AUTH_CONFIG_TOKEN } from '../providers'\nimport { 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 = createAuthClient({\n ...this.config,\n })\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, map, Observable, shareReplay, switchMap } from 'rxjs'\nimport { MainService } from './main.service'\nimport type { Session, User } from 'better-auth'\nimport { Provider } 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: User; session: Session } | 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) => subscriber.next(value))\n })\n\n this.sessionState$ = useSession$.pipe(\n filter((session) => !session.isPending),\n map((session) => {\n if (session.error) {\n return null\n }\n return session.data\n }),\n shareReplay(1),\n )\n }\n\n /**\n * Asynchronously checks if the user is authenticated.\n * Ideal for route guards.\n * @returns An Observable that emits true for an active session, and false otherwise.\n */\n isLoggedIn$(): Observable<boolean> {\n return this.sessionState$.pipe(map((session) => !!session?.session))\n }\n\n private session$() {\n this.client.useSession.subscribe((session) => {\n if (session.isPending) {\n this.session.set(null)\n return\n }\n if (session.error) {\n const error: BetterFetchError = session.error\n if (error.status !== 401) {\n console.error('Error fetching session:', error)\n }\n this.session.set(null)\n return\n }\n this.session.set(session.data)\n })\n }\n\n signInEmail(data: { email: string; password: string; rememberMe?: boolean }): Observable<{\n user: User\n session: Session\n }> {\n return defer(() => this.client.signIn.email(data)).pipe(\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 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(() => this.client.signIn.social(data as any)).pipe(\n switchMap(() => this.sessionState$.pipe(filter((s) => s !== null))),\n )\n }\n\n signOut(): Observable<null> {\n return defer(() => this.client.signOut()).pipe(switchMap(() => this.sessionState$.pipe(filter((s) => s === null))))\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(data: {\n name?: string\n image?: string\n username?: string\n displayUsername?: string\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 switchMap(() => this.sessionState$.pipe(filter((s) => s === null))),\n )\n }\n}\n","import { inject, Injectable } from '@angular/core'\nimport { defer, map, Observable } from 'rxjs'\nimport { MainService } from './main.service'\nimport type { Session } from 'better-auth'\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 { Provider } from '../models'\nimport type { Account } from 'better-auth'\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 type { User, Session } from 'better-auth'\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/plugins/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, Observable, switchMap } from 'rxjs'\nimport { MainService } from '../main.service'\nimport { AuthService } from '../auth.service'\nimport { isEmail } from '../../utils/email.util'\nimport type { User, Session } from 'better-auth'\n\n@Injectable({ providedIn: 'root' })\nexport class UsernameService {\n private readonly mainService = inject(MainService)\n private readonly authService = inject(AuthService)\n\n username = 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<unknown> {\n return defer(() => (this.username as any).isUsernameAvailable(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 { Session, User } from 'better-auth'\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 { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core'\nimport { type BetterAuthOptions } from 'better-auth'\nimport { AuthService } from './services'\n\nexport const BETTER_AUTH_CONFIG_TOKEN = new InjectionToken<BetterAuthOptions>('BETTER_AUTH_CONFIG')\n\nconst DEFAULT_CONFIG: Partial<BetterAuthOptions> = {}\n\nexport function provideBetterAuth(options: BetterAuthOptions): EnvironmentProviders {\n const config: BetterAuthOptions = { ...DEFAULT_CONFIG, ...options }\n\n // if baseURL is not a url, it might be because of a proxy in development\n if (!config.baseURL?.startsWith('http')) {\n config.baseURL = window.location.origin\n }\n\n return makeEnvironmentProviders([{ provide: BETTER_AUTH_CONFIG_TOKEN, useValue: config }, AuthService])\n}\n","import { inject } from '@angular/core'\nimport { Router, UrlTree } from '@angular/router'\nimport { AuthService } from '../services'\nimport { map, Observable } from 'rxjs'\n\n/**\n * Redirects unauthorized users to the specified commands (route).\n */\nexport function redirectUnauthorizedTo(commands: string[] = ['/login']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n return auth.isLoggedIn$().pipe(map((isLoggedIn) => (isLoggedIn ? true : router.createUrlTree(commands))))\n }\n}\n\n/**\n * Redirects logged-in users to the specified commands (route).\n */\nexport function redirectLoggedInTo(commands: string[] = ['/']): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n return auth.isLoggedIn$().pipe(map((isLoggedIn) => (isLoggedIn ? router.createUrlTree(commands) : true)))\n }\n}\n\n/**\n * Allows access only to users with at least one of the specified roles.\n * Redirects unauthorized users to the specified commands (route).\n */\nexport function hasRole(\n requiredRoles: string[],\n redirectTo: string[] = ['/unauthorized'],\n): () => Observable<UrlTree | boolean> {\n return () => {\n const auth = inject(AuthService)\n const router = inject(Router)\n\n return auth.sessionState$.pipe(\n map((session) => {\n if (!session || !session.user) {\n return router.createUrlTree(redirectTo)\n }\n\n const role = (session?.user as any)?.['role']\n if (Array.isArray(role)) {\n if (role.some((r) => requiredRoles.includes(r))) {\n return true\n }\n } else if (typeof role === 'string') {\n if (requiredRoles.includes(role)) {\n return true\n }\n }\n\n return router.createUrlTree(redirectTo)\n }),\n )\n }\n}\n","import { CanActivateFn, UrlTree } from '@angular/router'\nimport { Observable } from 'rxjs'\n\nexport function canActivate(\n pipe: () => Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree,\n): {\n canActivate: [CanActivateFn]\n} {\n return {\n canActivate: [() => pipe()],\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,120 +1,20 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, EnvironmentProviders } from '@angular/core';
3
3
  import * as better_auth from 'better-auth';
4
- import { BetterAuthOptions } from 'better-auth';
5
- import { SocialProviderList } from 'better-auth/social-providers';
4
+ import { BetterAuthOptions, User, Session, Account } from 'better-auth';
6
5
  import * as rxjs from 'rxjs';
7
6
  import { Observable } from 'rxjs';
8
- import * as ngx_better_auth from 'ngx-better-auth';
7
+ import { SocialProviderList } from 'better-auth/social-providers';
8
+ import { Passkey } from 'better-auth/plugins/passkey';
9
9
  import * as better_auth_client from 'better-auth/client';
10
+ import { Organization, Invitation, Member } from 'better-auth/plugins/organization';
10
11
  import { UrlTree, CanActivateFn } from '@angular/router';
11
12
 
12
13
  declare const BETTER_AUTH_CONFIG_TOKEN: InjectionToken<BetterAuthOptions>;
13
14
  declare function provideBetterAuth(options: BetterAuthOptions): EnvironmentProviders;
14
15
 
15
- interface Session {
16
- userId: string;
17
- expiresAt: Date;
18
- createdAt: Date;
19
- token: string;
20
- }
21
- interface Session2 extends Session {
22
- id: string;
23
- impersonatedBy?: string;
24
- ipAddress?: string | null;
25
- userAgent?: string | null;
26
- updatedAt: Date;
27
- }
28
-
29
16
  type Provider = SocialProviderList[number];
30
17
 
31
- interface Account {
32
- id: string;
33
- provider: string;
34
- createdAt: Date;
35
- updatedAt: Date;
36
- accountId: string;
37
- scopes: string[];
38
- }
39
-
40
- interface User {
41
- id: string;
42
- email: string;
43
- emailVerified: boolean;
44
- name: string | null;
45
- image?: string | null;
46
- createdAt: Date;
47
- updatedAt: Date;
48
- [key: string]: any;
49
- }
50
-
51
- interface RegisterPasskey {
52
- attestation: string;
53
- challenge: string;
54
- extension: object;
55
- timeout: number;
56
- authenticatorSelection: {
57
- authenticatorAttachment?: AuthenticatorAttachment;
58
- requireResidentKey: boolean;
59
- userVerification: UserVerificationRequirement;
60
- };
61
- excludeCredentials: {
62
- id: string;
63
- type: string;
64
- transports: AuthenticatorTransport[];
65
- }[];
66
- rp: {
67
- name: string;
68
- id?: string;
69
- };
70
- user: {
71
- id: string;
72
- name: string;
73
- displayName: string;
74
- };
75
- }
76
- interface Passkey {
77
- backedUp: boolean;
78
- counter: number;
79
- credentialID: string;
80
- deviceType: string;
81
- publicKey: string;
82
- userId: string;
83
- aaguid?: string;
84
- createdAt?: string;
85
- id?: string;
86
- name?: string;
87
- transports?: string;
88
- }
89
-
90
- interface Organization {
91
- id?: string;
92
- name: string;
93
- created: Date;
94
- logo: string;
95
- metadata: Record<string, any>;
96
- slug: string;
97
- }
98
- interface Invitation {
99
- id?: string;
100
- role?: string | string[];
101
- email: string;
102
- expiresAt: Date;
103
- inviterId: string;
104
- organizationId: string;
105
- status: InvitationStatus;
106
- }
107
- type InvitationStatus = 'pending' | 'accepted' | 'rejected' | 'canceled';
108
- interface Member {
109
- createdAt: Date;
110
- role: string | string[];
111
- userId: string;
112
- organizationId: string;
113
- id?: string;
114
- }
115
- interface Member2 extends Omit<Member, 'createdAt'> {
116
- }
117
-
118
18
  declare class AuthService {
119
19
  private readonly mainService;
120
20
  private readonly client;
@@ -123,7 +23,7 @@ declare class AuthService {
123
23
  */
124
24
  readonly session: i0.WritableSignal<{
125
25
  user: User;
126
- session: Session2;
26
+ session: Session;
127
27
  } | null>;
128
28
  /**
129
29
  * Whether there is an active session
@@ -135,7 +35,7 @@ declare class AuthService {
135
35
  */
136
36
  readonly sessionState$: Observable<{
137
37
  user: User;
138
- session: Session2;
38
+ session: Session;
139
39
  } | null>;
140
40
  constructor();
141
41
  /**
@@ -151,7 +51,7 @@ declare class AuthService {
151
51
  rememberMe?: boolean;
152
52
  }): Observable<{
153
53
  user: User;
154
- session: Session2;
54
+ session: Session;
155
55
  }>;
156
56
  /**
157
57
  * Sign up a new user using email and password.
@@ -167,11 +67,21 @@ declare class AuthService {
167
67
  displayUsername?: string;
168
68
  }): Observable<{
169
69
  user: User;
170
- session: Session2;
70
+ session: Session;
171
71
  }>;
172
- signInProvider(provider: Provider): Observable<{
72
+ signInProvider(data: {
73
+ provider: Provider;
74
+ callbackURL?: string;
75
+ disableRedirect?: boolean;
76
+ errorCallbackURL?: string;
77
+ idToken?: string;
78
+ loginHint?: string;
79
+ newUserCallbackURL?: string;
80
+ requestSignUp?: boolean;
81
+ scopes?: string[];
82
+ }): Observable<{
173
83
  user: User;
174
- session: Session2;
84
+ session: Session;
175
85
  }>;
176
86
  signOut(): Observable<null>;
177
87
  sendVerificationEmail(data: {
@@ -226,7 +136,7 @@ declare class AuthService {
226
136
  declare class SessionService {
227
137
  private readonly mainService;
228
138
  private readonly client;
229
- listSessions(): Observable<Session2[]>;
139
+ listSessions(): Observable<Session[]>;
230
140
  revokeSession(data: {
231
141
  token: string;
232
142
  }): Observable<{
@@ -296,8 +206,7 @@ declare class TwoFactorService {
296
206
  code: string;
297
207
  trustDevice?: boolean;
298
208
  }): Observable<{
299
- user: User;
300
- session: Session2;
209
+ status: boolean;
301
210
  }>;
302
211
  sendOtp(): Observable<{
303
212
  status: boolean;
@@ -306,8 +215,7 @@ declare class TwoFactorService {
306
215
  code: string;
307
216
  trustDevice?: boolean;
308
217
  }): Observable<{
309
- token: string;
310
- user: User;
218
+ status: boolean;
311
219
  }>;
312
220
  generateBackupCodes(data: {
313
221
  password: string;
@@ -321,7 +229,7 @@ declare class TwoFactorService {
321
229
  trustDevice?: boolean;
322
230
  }): Observable<{
323
231
  user: User;
324
- session: Session2;
232
+ session: Session;
325
233
  }>;
326
234
  static ɵfac: i0.ɵɵFactoryDeclaration<TwoFactorService, never>;
327
235
  static ɵprov: i0.ɵɵInjectableDeclaration<TwoFactorService>;
@@ -372,8 +280,8 @@ declare class GenericOauthService {
372
280
  scopes?: string[];
373
281
  requestSignUp?: boolean;
374
282
  }): rxjs.Observable<{
375
- user: ngx_better_auth.User;
376
- session: ngx_better_auth.Session2;
283
+ user: better_auth.User;
284
+ session: better_auth.Session;
377
285
  }>;
378
286
  link(data: {
379
287
  providerId: string;
@@ -392,8 +300,8 @@ declare class EmailOtpService {
392
300
  email: string;
393
301
  otp: string;
394
302
  }): rxjs.Observable<{
395
- user: ngx_better_auth.User;
396
- session: ngx_better_auth.Session2;
303
+ user: better_auth.User;
304
+ session: better_auth.Session;
397
305
  }>;
398
306
  sendVerificationOtp(data: {
399
307
  email: string;
@@ -2604,7 +2512,7 @@ declare class UsernameService {
2604
2512
  rememberMe?: boolean;
2605
2513
  }): Observable<{
2606
2514
  user: User;
2607
- session: Session2;
2515
+ session: Session;
2608
2516
  }>;
2609
2517
  signInUsername(data: {
2610
2518
  username: string;
@@ -2612,7 +2520,7 @@ declare class UsernameService {
2612
2520
  rememberMe?: boolean;
2613
2521
  }): Observable<{
2614
2522
  user: User;
2615
- session: Session2;
2523
+ session: Session;
2616
2524
  }>;
2617
2525
  isUsernameAvailable(data: {
2618
2526
  username: string;
@@ -2666,7 +2574,7 @@ declare class AdminService {
2666
2574
  listUserSessions(data: {
2667
2575
  userId: string;
2668
2576
  }): Observable<{
2669
- sessions: Session2[];
2577
+ sessions: Session[];
2670
2578
  }>;
2671
2579
  unbanUser(data: {
2672
2580
  userId: string;
@@ -2683,7 +2591,7 @@ declare class AdminService {
2683
2591
  impersonateUser(data: {
2684
2592
  userId: string;
2685
2593
  }): Observable<{
2686
- session: Session2;
2594
+ session: Session;
2687
2595
  user: User;
2688
2596
  }>;
2689
2597
  stopImpersonating(): Observable<unknown>;
@@ -2803,14 +2711,14 @@ declare class OrganizationService {
2803
2711
  memberIdOrEmail: string;
2804
2712
  organizationId?: string;
2805
2713
  }): Observable<{
2806
- member: Member2;
2714
+ member: Member;
2807
2715
  }>;
2808
2716
  updateMemberRoles(data: {
2809
2717
  memberId: string;
2810
2718
  role: string | string[];
2811
2719
  organizationId?: string;
2812
2720
  }): Observable<unknown>;
2813
- getActiveMember(): Observable<Member2>;
2721
+ getActiveMember(): Observable<Member>;
2814
2722
  leave(data: {
2815
2723
  organizationId?: string;
2816
2724
  }): Observable<void>;
@@ -2872,4 +2780,4 @@ declare function canActivate(pipe: () => Observable<boolean | UrlTree> | Promise
2872
2780
  };
2873
2781
 
2874
2782
  export { AccountService, AdminService, AuthService, BETTER_AUTH_CONFIG_TOKEN, EmailOtpService, GenericOauthService, MagicLinkService, OneTapService, OrganizationService, PasskeyService, SessionService, TwoFactorService, UsernameService, canActivate, hasRole, provideBetterAuth, redirectLoggedInTo, redirectUnauthorizedTo };
2875
- export type { Account, Invitation, InvitationStatus, Member, Member2, Organization, Passkey, Provider, RegisterPasskey, Session, Session2, User };
2783
+ export type { Provider };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-better-auth",
3
- "version": "0.7.3",
3
+ "version": "0.8.1",
4
4
  "repository": {
5
5
  "url": "https://github.com/thomasorgeval/ngx-better-auth"
6
6
  },