@fonderie/vue-auth 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Vue 3 composables for Fonderie auth — `useLogin`, `useRegister`,
4
4
  `useSession`, `useLogout`, `useForgotPassword`, `useResetPassword`, and
5
5
  `useVerifyEmail`. Thin bindings over
6
- [`@fonderie/client`](https://github.com/fonderiejs/sdk/tree/main/packages/client):
6
+ [`@fonderie/client`](https://github.com/fonderiejs/fonderie/tree/main/packages/client):
7
7
  reactive `ref`s for loading/error/data state and the request itself, nothing
8
8
  else. Bring your own UI.
9
9
 
@@ -57,14 +57,14 @@ or a prop). The access token is persisted to `localStorage` and restored
57
57
  automatically by `useSession` on setup; don't re-implement that in app code.
58
58
 
59
59
  Want pre-built screens instead of wiring your own form?
60
- See [`@fonderie/vue-auth-screens`](https://github.com/fonderiejs/sdk/tree/main/packages/vue-auth-screens).
60
+ See [`@fonderie/vue-auth-screens`](https://github.com/fonderiejs/fonderie/tree/main/packages/vue-auth-screens).
61
61
 
62
62
  ## Why this exists
63
63
 
64
64
  You've shipped this plumbing before — auth, teams, billing, messaging —
65
65
  and the next project will ask for it again. Fonderie packages it once:
66
66
  plain TypeScript modules for
67
- [`@fonderie/core`](https://github.com/fonderiejs/sdk/tree/main/packages/core),
67
+ [`@fonderie/core`](https://github.com/fonderiejs/fonderie/tree/main/packages/core),
68
68
  PostgreSQL-backed, self-hosted, MIT. No external control plane, no
69
69
  per-seat anything. Register the modules you need; skip the ones you don't.
70
70
 
@@ -73,7 +73,7 @@ around `@fonderie/client`, nothing more. No business logic lives here; it
73
73
  lives in `@fonderie/auth` on the server.
74
74
 
75
75
  Browse the whole set at
76
- [fonderiejs/sdk](https://github.com/fonderiejs/sdk) · follow
76
+ [fonderiejs/fonderie](https://github.com/fonderiejs/fonderie) · follow
77
77
  [@fonderiejs](https://x.com/fonderiejs)
78
78
 
79
79
  ## License
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/composables/useAccountData.ts","../src/storage.ts","../src/composables/useChangePassword.ts","../src/composables/useForgotPassword.ts","../src/composables/useLogin.ts","../src/composables/useLogout.ts","../src/composables/useMfaLogin.ts","../src/composables/useMfaSetup.ts","../src/composables/useProfile.ts","../src/composables/useRegister.ts","../src/composables/useResetPassword.ts","../src/composables/useSession.ts","../src/composables/useLoginHistory.ts","../src/composables/useSessions.ts","../src/composables/useVerifyEmail.ts","../src/composables/useAuthProviders.ts","../src/composables/useUnlinkOauth.ts"],"sourcesContent":["export type {\n\tAuthClient,\n\tIChangePasswordInput,\n\tIGetLoginHistoryInput,\n\tILoginEventDTO,\n\tILoginInput,\n\tILoginResult,\n\tIMfaEnabledResult,\n\tIMfaRequiredResult,\n\tIMfaSetupResult,\n\tIRegisterInput,\n\tIRegisterResult,\n\tIResetPasswordInput,\n\tISessionDTO,\n\tITokens,\n\tIUpdatePreferencesInput,\n\tIUpdateProfileInput,\n\tIUserDTO,\n\tIVerifyEmailResult,\n} from '@fonderie/client';\n\nexport { FonderieApiError, isMfaRequired } from '@fonderie/client';\n\nexport type {\n\tIUseAuthProvidersReturn,\n\tIUseUnlinkOauthReturn,\n\tIUseAccountDataReturn,\n\tIUseChangePasswordReturn,\n\tIUseForgotPasswordReturn,\n\tIUseLoginHistoryReturn,\n\tIUseLoginReturn,\n\tIUseLogoutReturn,\n\tIUseMfaLoginReturn,\n\tIUseMfaSetupReturn,\n\tIUseProfileReturn,\n\tIUseRegisterReturn,\n\tIUseResetPasswordReturn,\n\tIUseSessionReturn,\n\tIUseSessionsReturn,\n\tIUseVerifyEmailReturn,\n} from './composables';\nexport {\n\tuseAuthProviders,\n\tuseUnlinkOauth,\n\tuseAccountData,\n\tuseChangePassword,\n\tuseForgotPassword,\n\tuseLogin,\n\tuseLoginHistory,\n\tuseLogout,\n\tuseMfaLogin,\n\tuseMfaSetup,\n\tuseProfile,\n\tuseRegister,\n\tuseResetPassword,\n\tuseSession,\n\tuseSessions,\n\tuseVerifyEmail,\n} from './composables';\n\n// Token persistence primitives — for wiring app-level flows (e.g. the\n// client's auth.onTokensChanged) to the same storage the hooks use.\nexport { clearToken, persistToken, readToken, TOKEN_KEY } from './storage';\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { clearToken } from '../storage';\n\nexport interface IUseAccountDataReturn {\n\t// GET /users/export — the caller's own data as a portable bundle (SAR).\n\texportData: () => Promise<unknown>;\n\t// Deletes the account, then tears the session down like a logout.\n\tdeleteUser: () => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useAccountData(client?: AuthClient): IUseAccountDataReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useAccountData');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function run<T>(op: () => Promise<T>): Promise<T> {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tfunction exportData() {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.exportData();\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction deleteUser() {\n\t\treturn run(async () => {\n\t\t\tawait auth.deleteUser();\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t});\n\t}\n\n\treturn { exportData, deleteUser, isLoading, error };\n}\n","export const TOKEN_KEY = 'fonderie_access_token';\n\nexport function persistToken(token: string) {\n\tlocalStorage.setItem(TOKEN_KEY, token);\n}\n\nexport function clearToken() {\n\tlocalStorage.removeItem(TOKEN_KEY);\n}\n\nexport function readToken(): string | null {\n\treturn localStorage.getItem(TOKEN_KEY);\n}\n","import type { AuthClient, IChangePasswordInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseChangePasswordReturn {\n\tchangePassword: (input: IChangePasswordInput) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdone: Ref<boolean>;\n}\n\nexport function useChangePassword(client?: AuthClient): IUseChangePasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useChangePassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst done = ref(false);\n\n\tasync function changePassword(input: IChangePasswordInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tdone.value = false;\n\t\ttry {\n\t\t\tawait auth.changePassword(input);\n\t\t\tdone.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { changePassword, isLoading, error, done };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseForgotPasswordReturn {\n\tforgotPassword: (email: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tsent: Ref<boolean>;\n}\n\nexport function useForgotPassword(client?: AuthClient): IUseForgotPasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useForgotPassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst sent = ref(false);\n\n\tasync function forgotPassword(email: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.forgotPassword(email);\n\t\t\tsent.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { forgotPassword, isLoading, error, sent };\n}\n","import type { AuthClient, ILoginInput, ILoginResult, IMfaRequiredResult } from '@fonderie/client';\nimport { FonderieApiError, isMfaRequired } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseLoginReturn {\n\tlogin: (input: ILoginInput) => Promise<ILoginResult | IMfaRequiredResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<ILoginResult | null>;\n\t// Set when the account requires MFA: no tokens were issued — complete the\n\t// login with client.auth.mfa.verifyLogin(mfaPending.value.mfaToken, code).\n\tmfaPending: Ref<IMfaRequiredResult | null>;\n}\n\nexport function useLogin(client?: AuthClient): IUseLoginReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useLogin');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<ILoginResult | null>(null);\n\t// Set when the account requires MFA: complete the login with\n\t// client.auth.mfa.verifyLogin(mfaPending.value.mfaToken, code).\n\tconst mfaPending = ref<IMfaRequiredResult | null>(null);\n\n\tasync function login(input: ILoginInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tmfaPending.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.login(input);\n\t\t\tif (isMfaRequired(result)) {\n\t\t\t\tmfaPending.value = result;\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { login, isLoading, error, data, mfaPending };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { clearToken } from '../storage';\n\nexport interface IUseLogoutReturn {\n\tlogout: (refreshToken?: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useLogout(client?: AuthClient): IUseLogoutReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useLogout');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function logout(refreshToken?: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.logout(refreshToken);\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t} finally {\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { logout, isLoading, error };\n}\n","import type { AuthClient, ILoginResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseMfaLoginReturn {\n\t// Completes a login that returned MFA_REQUIRED: verifies the TOTP code\n\t// against the temporary mfaToken from useLogin's mfaPending, then persists\n\t// the issued tokens exactly like a normal login.\n\tverifyLogin: (mfaToken: string, code: string) => Promise<ILoginResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<ILoginResult | null>;\n}\n\nexport function useMfaLogin(client?: AuthClient): IUseMfaLoginReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useMfaLogin');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<ILoginResult | null>(null);\n\n\tasync function verifyLogin(mfaToken: string, code: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.mfa.verifyLogin(mfaToken, code);\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { verifyLogin, isLoading, error, data };\n}\n","import type { AuthClient, IMfaEnabledResult, IMfaSetupResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseMfaSetupReturn {\n\t// Step 1: request enrollment — returns a data-URI QR code to scan and the\n\t// one-time backup codes generated at setup.\n\tsetup: () => Promise<IMfaSetupResult>;\n\tsetupData: Ref<IMfaSetupResult | null>;\n\t// Step 2: verify the first TOTP code to complete enrollment. The session\n\t// token is not rotated — MFA is enforced at login, so the current session\n\t// remains valid unchanged.\n\tverify: (code: string) => Promise<IMfaEnabledResult>;\n\tdisable: (code: string) => Promise<void>;\n\tregenerateBackupCodes: (code: string) => Promise<string[]>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useMfaSetup(client?: AuthClient): IUseMfaSetupReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useMfaSetup');\n\tconst setupData = ref<IMfaSetupResult | null>(null);\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function run<T>(op: () => Promise<T>): Promise<T> {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tfunction setup() {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.setup();\n\t\t\tsetupData.value = result;\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction verify(code: string) {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.verify(code);\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction disable(code: string) {\n\t\treturn run(async () => {\n\t\t\tawait auth.mfa.disable(code);\n\t\t});\n\t}\n\n\tfunction regenerateBackupCodes(code: string) {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.regenerateBackupCodes(code);\n\t\t\treturn result.backupCodes;\n\t\t});\n\t}\n\n\treturn { setup, setupData, verify, disable, regenerateBackupCodes, isLoading, error };\n}\n","import type {\n\tAuthClient,\n\tIUpdatePreferencesInput,\n\tIUpdateProfileInput,\n\tIUserDTO,\n} from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseProfileReturn {\n\tuser: Ref<IUserDTO | null>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tupdateProfile: (input: IUpdateProfileInput) => Promise<IUserDTO>;\n\tupdatePreferences: (input: IUpdatePreferencesInput) => Promise<IUserDTO>;\n\t// Email/phone changes re-fetch the profile (their endpoints don't return it).\n\tupdateEmail: (email: string) => Promise<void>;\n\tupdatePhone: (phone: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useProfile(client?: AuthClient): IUseProfileReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useProfile');\n\tconst user = ref<IUserDTO | null>(null);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getUser({ bust: opts?.force });\n\t\t\tuser.value = result.user;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function mutate<T>(op: () => Promise<T>): Promise<T> {\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t}\n\t}\n\n\tfunction updateProfile(input: IUpdateProfileInput) {\n\t\treturn mutate(async () => {\n\t\t\tconst { result } = await auth.updateProfile(input);\n\t\t\tuser.value = result.user;\n\t\t\treturn result.user;\n\t\t});\n\t}\n\n\tfunction updatePreferences(input: IUpdatePreferencesInput) {\n\t\treturn mutate(async () => {\n\t\t\tconst { result } = await auth.updatePreferences(input);\n\t\t\tuser.value = result.user;\n\t\t\treturn result.user;\n\t\t});\n\t}\n\n\tfunction updateEmail(email: string) {\n\t\treturn mutate(async () => {\n\t\t\tawait auth.updateEmail(email);\n\t\t\tawait refresh();\n\t\t});\n\t}\n\n\tfunction updatePhone(phone: string) {\n\t\treturn mutate(async () => {\n\t\t\tawait auth.updatePhone(phone);\n\t\t\tawait refresh();\n\t\t});\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { user, refresh, updateProfile, updatePreferences, updateEmail, updatePhone, isLoading, error };\n}\n","import type { AuthClient, IRegisterInput, IRegisterResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseRegisterReturn {\n\tregister: (input: IRegisterInput) => Promise<IRegisterResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<IRegisterResult | null>;\n}\n\nexport function useRegister(client?: AuthClient): IUseRegisterReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useRegister');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<IRegisterResult | null>(null);\n\n\tasync function register(input: IRegisterInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.register(input);\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { register, isLoading, error, data };\n}\n","import type { AuthClient, IResetPasswordInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseResetPasswordReturn {\n\tresetPassword: (input: IResetPasswordInput) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdone: Ref<boolean>;\n}\n\nexport function useResetPassword(client?: AuthClient): IUseResetPasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useResetPassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst done = ref(false);\n\n\tasync function resetPassword(input: IResetPasswordInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.resetPassword(input);\n\t\t\tdone.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { resetPassword, isLoading, error, done };\n}\n","import type { AuthClient, IUserDTO } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\nimport { clearToken, readToken } from '../storage';\n\nexport interface IUseSessionReturn {\n\tuser: Ref<IUserDTO | null>;\n\tisLoading: Ref<boolean>;\n\tisAuthenticated: Ref<boolean>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tlogout: (refreshToken?: string) => Promise<void>;\n}\n\nexport function useSession(client?: AuthClient): IUseSessionReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useSession');\n\tconst user = ref<IUserDTO | null>(null);\n\tconst isLoading = ref(true);\n\tconst isAuthenticated = ref(false);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tconst { result } = await auth.getUser({ bust: opts?.force });\n\t\t\tuser.value = result.user;\n\t\t\tisAuthenticated.value = true;\n\t\t} catch {\n\t\t\tuser.value = null;\n\t\t\tisAuthenticated.value = false;\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function logout(refreshToken?: string) {\n\t\ttry {\n\t\t\tawait auth.logout(refreshToken);\n\t\t} catch {\n\t\t\t// Session is being torn down regardless of server response.\n\t\t}\n\t\tauth.setAccessToken(undefined);\n\t\tclearToken();\n\t\tuser.value = null;\n\t\tisAuthenticated.value = false;\n\t}\n\n\tconst token = readToken();\n\tif (token) auth.setAccessToken(token);\n\tonMounted(() => void refresh());\n\n\treturn { user, isLoading, isAuthenticated, refresh, logout };\n}\n","import type { AuthClient, ILoginEventDTO, IGetLoginHistoryInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseLoginHistoryReturn {\n\tevents: Ref<ILoginEventDTO[]>;\n\tisLoading: Ref<boolean>;\n\tisLoadingMore: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\thasMore: Ref<boolean>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tloadMore: () => Promise<void>;\n}\n\n// The caller's own login attempts, newest first, keyset-paginated. Same contract\n// as react-auth's useLoginHistory (and vue-audit's useAuditEvents). Unlike React,\n// a composable body runs once, so filters need no memoization — they're captured\n// at call time.\nexport function useLoginHistory(rawFilters?: IGetLoginHistoryInput): IUseLoginHistoryReturn;\nexport function useLoginHistory(\n\tclient: AuthClient | undefined,\n\trawFilters?: IGetLoginHistoryInput,\n): IUseLoginHistoryReturn;\nexport function useLoginHistory(\n\tclientOrFilters?: AuthClient | IGetLoginHistoryInput,\n\tmaybeFilters?: IGetLoginHistoryInput,\n): IUseLoginHistoryReturn {\n\t// The AuthClient isn't reliably an instanceof across bundle boundaries, so\n\t// detect the client arg structurally (it has getLoginHistory) rather than\n\t// by prototype.\n\tconst firstIsClient =\n\t\tclientOrFilters === undefined ||\n\t\ttypeof (clientOrFilters as AuthClient).getLoginHistory === 'function';\n\tconst explicit = firstIsClient ? (clientOrFilters as AuthClient | undefined) : undefined;\n\tconst filters = (firstIsClient ? maybeFilters : (clientOrFilters as IGetLoginHistoryInput)) ?? {};\n\tconst auth = useFonderieSubClient(explicit, (c) => c.auth, 'useLoginHistory');\n\n\tconst events = ref<ILoginEventDTO[]>([]);\n\tconst isLoading = ref(true);\n\tconst isLoadingMore = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst hasMore = ref(false);\n\tlet cursor: string | null = null;\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getLoginHistory(filters, { bust: opts?.force });\n\t\t\tevents.value = result.events;\n\t\t\tcursor = result.nextCursor;\n\t\t\thasMore.value = result.nextCursor !== null;\n\t\t} catch (err) {\n\t\t\terror.value =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function loadMore() {\n\t\tif (!cursor || isLoadingMore.value) return;\n\t\tisLoadingMore.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getLoginHistory({ ...filters, cursor });\n\t\t\tevents.value = [...events.value, ...result.events];\n\t\t\tcursor = result.nextCursor;\n\t\t\thasMore.value = result.nextCursor !== null;\n\t\t} catch (err) {\n\t\t\terror.value =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t} finally {\n\t\t\tisLoadingMore.value = false;\n\t\t}\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { events, isLoading, isLoadingMore, error, hasMore, refresh, loadMore };\n}\n","import type { AuthClient, ISessionDTO } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseSessionsReturn {\n\tsessions: Ref<ISessionDTO[]>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\t// Revoke one session. Optimistically removes it; refetches on failure.\n\tterminate: (id: string) => Promise<void>;\n\t// Revoke every session except the current one.\n\tterminateOthers: () => Promise<void>;\n}\n\nfunction toApiError(err: unknown): FonderieApiError {\n\treturn err instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n}\n\n// The caller's live sessions (one flagged `current`) plus the terminate actions.\n// Same contract as react-auth's useSessions.\nexport function useSessions(client?: AuthClient): IUseSessionsReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useSessions');\n\tconst sessions = ref<ISessionDTO[]>([]);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.listSessions({ bust: opts?.force });\n\t\t\tsessions.value = result.sessions;\n\t\t} catch (err) {\n\t\t\terror.value = toApiError(err);\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function terminate(id: string) {\n\t\tconst prev = sessions.value;\n\t\tsessions.value = prev.filter((row) => row.id !== id); // optimistic\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.terminateSession(id);\n\t\t} catch (err) {\n\t\t\tsessions.value = prev; // roll back the optimistic removal\n\t\t\terror.value = toApiError(err);\n\t\t\tthrow toApiError(err);\n\t\t}\n\t}\n\n\tasync function terminateOthers() {\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.terminateOtherSessions();\n\t\t\t// The server is the source of truth for which survived — refetch (force)\n\t\t\t// rather than trust a local \"keep current\" guess.\n\t\t\tawait refresh({ force: true });\n\t\t} catch (err) {\n\t\t\terror.value = toApiError(err);\n\t\t\tthrow toApiError(err);\n\t\t}\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { sessions, isLoading, error, refresh, terminate, terminateOthers };\n}\n","import type { AuthClient, IVerifyEmailResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseVerifyEmailReturn {\n\tverifyEmail: (pin: string) => Promise<IVerifyEmailResult>;\n\tresend: () => Promise<void>;\n\tresent: Ref<boolean>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<IVerifyEmailResult | null>;\n}\n\nexport function useVerifyEmail(client?: AuthClient): IUseVerifyEmailReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useVerifyEmail');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<IVerifyEmailResult | null>(null);\n\tconst resent = ref(false);\n\n\t// Re-sends the verification email — the other half of the same lifecycle,\n\t// so one composable owns both and screens don't split loading/error handling.\n\tasync function resend() {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tresent.value = false;\n\t\ttry {\n\t\t\tawait auth.sendVerificationEmail();\n\t\t\tresent.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function verifyEmail(pin: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.verifyEmail(pin);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { verifyEmail, resend, resent, isLoading, error, data };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseAuthProvidersReturn {\n\t/** Sign-in methods this deployment can honour, e.g. ['email','google']. */\n\tproviders: Ref<string[]>;\n\t/** The common case: should this button be rendered at all? */\n\thas: (provider: string) => boolean;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | Error | null>;\n\trefresh: () => Promise<void>;\n}\n\n// Ask the API which sign-in methods it can honour, and render buttons from\n// that — never from a build-time flag. A flag stores the same fact the API\n// already holds and lets the two disagree; the failure is a user committing to\n// a redirect and landing on the provider's error page, which this app cannot\n// explain. Same contract as react-auth's useAuthProviders.\n//\n// Starts EMPTY rather than optimistic: a brief moment with no social buttons is\n// invisible, a button that appears and then fails is not.\nexport function useAuthProviders(client?: AuthClient): IUseAuthProvidersReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useAuthProviders');\n\tconst providers = ref<string[]>([]);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | Error | null>(null);\n\n\tconst refresh = async (): Promise<void> => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tconst { result } = await auth.providers();\n\t\t\tproviders.value = result.providers;\n\t\t\terror.value = null;\n\t\t} catch (err) {\n\t\t\t// Degrade to email-only rather than guessing: an unreachable API is\n\t\t\t// not evidence that a provider works.\n\t\t\tproviders.value = [];\n\t\t\terror.value = err instanceof Error ? err : new Error(String(err));\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\tonMounted(() => {\n\t\tvoid refresh();\n\t});\n\n\treturn {\n\t\tproviders,\n\t\thas: (provider: string) => providers.value.includes(provider),\n\t\tisLoading,\n\t\terror,\n\t\trefresh,\n\t};\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseUnlinkOauthReturn {\n\tunlinkOauth: (provider: string) => Promise<void>;\n\tunlinked: Ref<boolean>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\t// True when the server refused because the account has no password — the one\n\t// failure a settings screen should handle rather than just display, by\n\t// sending the user to set a password first. A flag so screens don't have to\n\t// match on the error's reason string.\n\trequiresPassword: Ref<boolean>;\n}\n\n/**\n * Remove the OAuth provider linked to the signed-in account.\n *\n * Prefer gating the control on `user.hasPassword` so the case is never reached:\n * an account created BY the provider has no other credential, and unlinking it\n * would be account deletion. The server refuses regardless (409), which is what\n * `requiresPassword` reports.\n */\nexport function useUnlinkOauth(client?: AuthClient): IUseUnlinkOauthReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useUnlinkOauth');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst unlinked = ref(false);\n\tconst requiresPassword = ref(false);\n\n\tconst unlinkOauth = async (provider: string): Promise<void> => {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\trequiresPassword.value = false;\n\t\ttry {\n\t\t\tawait auth.unlinkOauth(provider);\n\t\t\tunlinked.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\trequiresPassword.value = apiError.reason === 'PASSWORD_REQUIRED';\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\treturn { unlinkOauth, unlinked, isLoading, error, requiresPassword };\n}\n"],"mappings":"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","names":["import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/composables/useAccountData.ts","../src/storage.ts","../src/composables/useChangePassword.ts","../src/composables/useForgotPassword.ts","../src/composables/useLogin.ts","../src/composables/useLogout.ts","../src/composables/useMfaLogin.ts","../src/composables/useMfaSetup.ts","../src/composables/useProfile.ts","../src/composables/useRegister.ts","../src/composables/useResetPassword.ts","../src/composables/useSession.ts","../src/composables/useLoginHistory.ts","../src/composables/useSessions.ts","../src/composables/useVerifyEmail.ts","../src/composables/useAuthProviders.ts","../src/composables/useUnlinkOauth.ts"],"sourcesContent":["export type {\n\tAuthClient,\n\tIChangePasswordInput,\n\tIGetLoginHistoryInput,\n\tILoginEventDTO,\n\tIRequestLocationDTO,\n\tILoginInput,\n\tILoginResult,\n\tIMfaEnabledResult,\n\tIMfaRequiredResult,\n\tIMfaSetupResult,\n\tIRegisterInput,\n\tIRegisterResult,\n\tIResetPasswordInput,\n\tISessionDTO,\n\tITokens,\n\tIUpdatePreferencesInput,\n\tIUpdateProfileInput,\n\tIUserDTO,\n\tIVerifyEmailResult,\n} from '@fonderie/client';\n\nexport { FonderieApiError, isMfaRequired } from '@fonderie/client';\n\nexport type {\n\tIUseAuthProvidersReturn,\n\tIUseUnlinkOauthReturn,\n\tIUseAccountDataReturn,\n\tIUseChangePasswordReturn,\n\tIUseForgotPasswordReturn,\n\tIUseLoginHistoryReturn,\n\tIUseLoginReturn,\n\tIUseLogoutReturn,\n\tIUseMfaLoginReturn,\n\tIUseMfaSetupReturn,\n\tIUseProfileReturn,\n\tIUseRegisterReturn,\n\tIUseResetPasswordReturn,\n\tIUseSessionReturn,\n\tIUseSessionsReturn,\n\tIUseVerifyEmailReturn,\n} from './composables';\nexport {\n\tuseAuthProviders,\n\tuseUnlinkOauth,\n\tuseAccountData,\n\tuseChangePassword,\n\tuseForgotPassword,\n\tuseLogin,\n\tuseLoginHistory,\n\tuseLogout,\n\tuseMfaLogin,\n\tuseMfaSetup,\n\tuseProfile,\n\tuseRegister,\n\tuseResetPassword,\n\tuseSession,\n\tuseSessions,\n\tuseVerifyEmail,\n} from './composables';\n\n// Token persistence primitives — for wiring app-level flows (e.g. the\n// client's auth.onTokensChanged) to the same storage the hooks use.\nexport { clearToken, persistToken, readToken, TOKEN_KEY } from './storage';\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { clearToken } from '../storage';\n\nexport interface IUseAccountDataReturn {\n\t// GET /users/export — the caller's own data as a portable bundle (SAR).\n\texportData: () => Promise<unknown>;\n\t// Deletes the account, then tears the session down like a logout.\n\tdeleteUser: () => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useAccountData(client?: AuthClient): IUseAccountDataReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useAccountData');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function run<T>(op: () => Promise<T>): Promise<T> {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tfunction exportData() {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.exportData();\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction deleteUser() {\n\t\treturn run(async () => {\n\t\t\tawait auth.deleteUser();\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t});\n\t}\n\n\treturn { exportData, deleteUser, isLoading, error };\n}\n","export const TOKEN_KEY = 'fonderie_access_token';\n\nexport function persistToken(token: string) {\n\tlocalStorage.setItem(TOKEN_KEY, token);\n}\n\nexport function clearToken() {\n\tlocalStorage.removeItem(TOKEN_KEY);\n}\n\nexport function readToken(): string | null {\n\treturn localStorage.getItem(TOKEN_KEY);\n}\n","import type { AuthClient, IChangePasswordInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseChangePasswordReturn {\n\tchangePassword: (input: IChangePasswordInput) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdone: Ref<boolean>;\n}\n\nexport function useChangePassword(client?: AuthClient): IUseChangePasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useChangePassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst done = ref(false);\n\n\tasync function changePassword(input: IChangePasswordInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tdone.value = false;\n\t\ttry {\n\t\t\tawait auth.changePassword(input);\n\t\t\tdone.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { changePassword, isLoading, error, done };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseForgotPasswordReturn {\n\tforgotPassword: (email: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tsent: Ref<boolean>;\n}\n\nexport function useForgotPassword(client?: AuthClient): IUseForgotPasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useForgotPassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst sent = ref(false);\n\n\tasync function forgotPassword(email: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.forgotPassword(email);\n\t\t\tsent.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { forgotPassword, isLoading, error, sent };\n}\n","import type { AuthClient, ILoginInput, ILoginResult, IMfaRequiredResult } from '@fonderie/client';\nimport { FonderieApiError, isMfaRequired } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseLoginReturn {\n\tlogin: (input: ILoginInput) => Promise<ILoginResult | IMfaRequiredResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<ILoginResult | null>;\n\t// Set when the account requires MFA: no tokens were issued — complete the\n\t// login with client.auth.mfa.verifyLogin(mfaPending.value.mfaToken, code).\n\tmfaPending: Ref<IMfaRequiredResult | null>;\n}\n\nexport function useLogin(client?: AuthClient): IUseLoginReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useLogin');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<ILoginResult | null>(null);\n\t// Set when the account requires MFA: complete the login with\n\t// client.auth.mfa.verifyLogin(mfaPending.value.mfaToken, code).\n\tconst mfaPending = ref<IMfaRequiredResult | null>(null);\n\n\tasync function login(input: ILoginInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tmfaPending.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.login(input);\n\t\t\tif (isMfaRequired(result)) {\n\t\t\t\tmfaPending.value = result;\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { login, isLoading, error, data, mfaPending };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { clearToken } from '../storage';\n\nexport interface IUseLogoutReturn {\n\tlogout: (refreshToken?: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useLogout(client?: AuthClient): IUseLogoutReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useLogout');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function logout(refreshToken?: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.logout(refreshToken);\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t} finally {\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { logout, isLoading, error };\n}\n","import type { AuthClient, ILoginResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseMfaLoginReturn {\n\t// Completes a login that returned MFA_REQUIRED: verifies the TOTP code\n\t// against the temporary mfaToken from useLogin's mfaPending, then persists\n\t// the issued tokens exactly like a normal login.\n\tverifyLogin: (mfaToken: string, code: string) => Promise<ILoginResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<ILoginResult | null>;\n}\n\nexport function useMfaLogin(client?: AuthClient): IUseMfaLoginReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useMfaLogin');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<ILoginResult | null>(null);\n\n\tasync function verifyLogin(mfaToken: string, code: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.mfa.verifyLogin(mfaToken, code);\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { verifyLogin, isLoading, error, data };\n}\n","import type { AuthClient, IMfaEnabledResult, IMfaSetupResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseMfaSetupReturn {\n\t// Step 1: request enrollment — returns a data-URI QR code to scan and the\n\t// one-time backup codes generated at setup.\n\tsetup: () => Promise<IMfaSetupResult>;\n\tsetupData: Ref<IMfaSetupResult | null>;\n\t// Step 2: verify the first TOTP code to complete enrollment. The session\n\t// token is not rotated — MFA is enforced at login, so the current session\n\t// remains valid unchanged.\n\tverify: (code: string) => Promise<IMfaEnabledResult>;\n\tdisable: (code: string) => Promise<void>;\n\tregenerateBackupCodes: (code: string) => Promise<string[]>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useMfaSetup(client?: AuthClient): IUseMfaSetupReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useMfaSetup');\n\tconst setupData = ref<IMfaSetupResult | null>(null);\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function run<T>(op: () => Promise<T>): Promise<T> {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tfunction setup() {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.setup();\n\t\t\tsetupData.value = result;\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction verify(code: string) {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.verify(code);\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction disable(code: string) {\n\t\treturn run(async () => {\n\t\t\tawait auth.mfa.disable(code);\n\t\t});\n\t}\n\n\tfunction regenerateBackupCodes(code: string) {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.regenerateBackupCodes(code);\n\t\t\treturn result.backupCodes;\n\t\t});\n\t}\n\n\treturn { setup, setupData, verify, disable, regenerateBackupCodes, isLoading, error };\n}\n","import type {\n\tAuthClient,\n\tIUpdatePreferencesInput,\n\tIUpdateProfileInput,\n\tIUserDTO,\n} from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseProfileReturn {\n\tuser: Ref<IUserDTO | null>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tupdateProfile: (input: IUpdateProfileInput) => Promise<IUserDTO>;\n\tupdatePreferences: (input: IUpdatePreferencesInput) => Promise<IUserDTO>;\n\t// Email/phone changes re-fetch the profile (their endpoints don't return it).\n\tupdateEmail: (email: string) => Promise<void>;\n\tupdatePhone: (phone: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useProfile(client?: AuthClient): IUseProfileReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useProfile');\n\tconst user = ref<IUserDTO | null>(null);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getUser({ bust: opts?.force });\n\t\t\tuser.value = result.user;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function mutate<T>(op: () => Promise<T>): Promise<T> {\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t}\n\t}\n\n\tfunction updateProfile(input: IUpdateProfileInput) {\n\t\treturn mutate(async () => {\n\t\t\tconst { result } = await auth.updateProfile(input);\n\t\t\tuser.value = result.user;\n\t\t\treturn result.user;\n\t\t});\n\t}\n\n\tfunction updatePreferences(input: IUpdatePreferencesInput) {\n\t\treturn mutate(async () => {\n\t\t\tconst { result } = await auth.updatePreferences(input);\n\t\t\tuser.value = result.user;\n\t\t\treturn result.user;\n\t\t});\n\t}\n\n\tfunction updateEmail(email: string) {\n\t\treturn mutate(async () => {\n\t\t\tawait auth.updateEmail(email);\n\t\t\tawait refresh();\n\t\t});\n\t}\n\n\tfunction updatePhone(phone: string) {\n\t\treturn mutate(async () => {\n\t\t\tawait auth.updatePhone(phone);\n\t\t\tawait refresh();\n\t\t});\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { user, refresh, updateProfile, updatePreferences, updateEmail, updatePhone, isLoading, error };\n}\n","import type { AuthClient, IRegisterInput, IRegisterResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseRegisterReturn {\n\tregister: (input: IRegisterInput) => Promise<IRegisterResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<IRegisterResult | null>;\n}\n\nexport function useRegister(client?: AuthClient): IUseRegisterReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useRegister');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<IRegisterResult | null>(null);\n\n\tasync function register(input: IRegisterInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.register(input);\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { register, isLoading, error, data };\n}\n","import type { AuthClient, IResetPasswordInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseResetPasswordReturn {\n\tresetPassword: (input: IResetPasswordInput) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdone: Ref<boolean>;\n}\n\nexport function useResetPassword(client?: AuthClient): IUseResetPasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useResetPassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst done = ref(false);\n\n\tasync function resetPassword(input: IResetPasswordInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.resetPassword(input);\n\t\t\tdone.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { resetPassword, isLoading, error, done };\n}\n","import type { AuthClient, IUserDTO } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\nimport { clearToken, readToken } from '../storage';\n\nexport interface IUseSessionReturn {\n\tuser: Ref<IUserDTO | null>;\n\tisLoading: Ref<boolean>;\n\tisAuthenticated: Ref<boolean>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tlogout: (refreshToken?: string) => Promise<void>;\n}\n\nexport function useSession(client?: AuthClient): IUseSessionReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useSession');\n\tconst user = ref<IUserDTO | null>(null);\n\tconst isLoading = ref(true);\n\tconst isAuthenticated = ref(false);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tconst { result } = await auth.getUser({ bust: opts?.force });\n\t\t\tuser.value = result.user;\n\t\t\tisAuthenticated.value = true;\n\t\t} catch {\n\t\t\tuser.value = null;\n\t\t\tisAuthenticated.value = false;\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function logout(refreshToken?: string) {\n\t\ttry {\n\t\t\tawait auth.logout(refreshToken);\n\t\t} catch {\n\t\t\t// Session is being torn down regardless of server response.\n\t\t}\n\t\tauth.setAccessToken(undefined);\n\t\tclearToken();\n\t\tuser.value = null;\n\t\tisAuthenticated.value = false;\n\t}\n\n\tconst token = readToken();\n\tif (token) auth.setAccessToken(token);\n\tonMounted(() => void refresh());\n\n\treturn { user, isLoading, isAuthenticated, refresh, logout };\n}\n","import type { AuthClient, ILoginEventDTO, IGetLoginHistoryInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseLoginHistoryReturn {\n\tevents: Ref<ILoginEventDTO[]>;\n\tisLoading: Ref<boolean>;\n\tisLoadingMore: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\thasMore: Ref<boolean>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tloadMore: () => Promise<void>;\n}\n\n// The caller's own login attempts, newest first, keyset-paginated. Same contract\n// as react-auth's useLoginHistory (and vue-audit's useAuditEvents). Unlike React,\n// a composable body runs once, so filters need no memoization — they're captured\n// at call time.\nexport function useLoginHistory(rawFilters?: IGetLoginHistoryInput): IUseLoginHistoryReturn;\nexport function useLoginHistory(\n\tclient: AuthClient | undefined,\n\trawFilters?: IGetLoginHistoryInput,\n): IUseLoginHistoryReturn;\nexport function useLoginHistory(\n\tclientOrFilters?: AuthClient | IGetLoginHistoryInput,\n\tmaybeFilters?: IGetLoginHistoryInput,\n): IUseLoginHistoryReturn {\n\t// The AuthClient isn't reliably an instanceof across bundle boundaries, so\n\t// detect the client arg structurally (it has getLoginHistory) rather than\n\t// by prototype.\n\tconst firstIsClient =\n\t\tclientOrFilters === undefined ||\n\t\ttypeof (clientOrFilters as AuthClient).getLoginHistory === 'function';\n\tconst explicit = firstIsClient ? (clientOrFilters as AuthClient | undefined) : undefined;\n\tconst filters = (firstIsClient ? maybeFilters : (clientOrFilters as IGetLoginHistoryInput)) ?? {};\n\tconst auth = useFonderieSubClient(explicit, (c) => c.auth, 'useLoginHistory');\n\n\tconst events = ref<ILoginEventDTO[]>([]);\n\tconst isLoading = ref(true);\n\tconst isLoadingMore = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst hasMore = ref(false);\n\tlet cursor: string | null = null;\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getLoginHistory(filters, { bust: opts?.force });\n\t\t\tevents.value = result.events;\n\t\t\tcursor = result.nextCursor;\n\t\t\thasMore.value = result.nextCursor !== null;\n\t\t} catch (err) {\n\t\t\terror.value =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function loadMore() {\n\t\tif (!cursor || isLoadingMore.value) return;\n\t\tisLoadingMore.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getLoginHistory({ ...filters, cursor });\n\t\t\tevents.value = [...events.value, ...result.events];\n\t\t\tcursor = result.nextCursor;\n\t\t\thasMore.value = result.nextCursor !== null;\n\t\t} catch (err) {\n\t\t\terror.value =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t} finally {\n\t\t\tisLoadingMore.value = false;\n\t\t}\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { events, isLoading, isLoadingMore, error, hasMore, refresh, loadMore };\n}\n","import type { AuthClient, ISessionDTO } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseSessionsReturn {\n\tsessions: Ref<ISessionDTO[]>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\t// Revoke one session. Optimistically removes it; refetches on failure.\n\tterminate: (id: string) => Promise<void>;\n\t// Revoke every session except the current one.\n\tterminateOthers: () => Promise<void>;\n}\n\nfunction toApiError(err: unknown): FonderieApiError {\n\treturn err instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n}\n\n// The caller's live sessions (one flagged `current`) plus the terminate actions.\n// Same contract as react-auth's useSessions.\nexport function useSessions(client?: AuthClient): IUseSessionsReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useSessions');\n\tconst sessions = ref<ISessionDTO[]>([]);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.listSessions({ bust: opts?.force });\n\t\t\tsessions.value = result.sessions;\n\t\t} catch (err) {\n\t\t\terror.value = toApiError(err);\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function terminate(id: string) {\n\t\tconst prev = sessions.value;\n\t\tsessions.value = prev.filter((row) => row.id !== id); // optimistic\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.terminateSession(id);\n\t\t} catch (err) {\n\t\t\tsessions.value = prev; // roll back the optimistic removal\n\t\t\terror.value = toApiError(err);\n\t\t\tthrow toApiError(err);\n\t\t}\n\t}\n\n\tasync function terminateOthers() {\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.terminateOtherSessions();\n\t\t\t// The server is the source of truth for which survived — refetch (force)\n\t\t\t// rather than trust a local \"keep current\" guess.\n\t\t\tawait refresh({ force: true });\n\t\t} catch (err) {\n\t\t\terror.value = toApiError(err);\n\t\t\tthrow toApiError(err);\n\t\t}\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { sessions, isLoading, error, refresh, terminate, terminateOthers };\n}\n","import type { AuthClient, IVerifyEmailResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseVerifyEmailReturn {\n\tverifyEmail: (pin: string) => Promise<IVerifyEmailResult>;\n\tresend: () => Promise<void>;\n\tresent: Ref<boolean>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<IVerifyEmailResult | null>;\n}\n\nexport function useVerifyEmail(client?: AuthClient): IUseVerifyEmailReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useVerifyEmail');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<IVerifyEmailResult | null>(null);\n\tconst resent = ref(false);\n\n\t// Re-sends the verification email — the other half of the same lifecycle,\n\t// so one composable owns both and screens don't split loading/error handling.\n\tasync function resend() {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tresent.value = false;\n\t\ttry {\n\t\t\tawait auth.sendVerificationEmail();\n\t\t\tresent.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function verifyEmail(pin: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.verifyEmail(pin);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { verifyEmail, resend, resent, isLoading, error, data };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseAuthProvidersReturn {\n\t/** Sign-in methods this deployment can honour, e.g. ['email','google']. */\n\tproviders: Ref<string[]>;\n\t/** The common case: should this button be rendered at all? */\n\thas: (provider: string) => boolean;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | Error | null>;\n\trefresh: () => Promise<void>;\n}\n\n// Ask the API which sign-in methods it can honour, and render buttons from\n// that — never from a build-time flag. A flag stores the same fact the API\n// already holds and lets the two disagree; the failure is a user committing to\n// a redirect and landing on the provider's error page, which this app cannot\n// explain. Same contract as react-auth's useAuthProviders.\n//\n// Starts EMPTY rather than optimistic: a brief moment with no social buttons is\n// invisible, a button that appears and then fails is not.\nexport function useAuthProviders(client?: AuthClient): IUseAuthProvidersReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useAuthProviders');\n\tconst providers = ref<string[]>([]);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | Error | null>(null);\n\n\tconst refresh = async (): Promise<void> => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tconst { result } = await auth.providers();\n\t\t\tproviders.value = result.providers;\n\t\t\terror.value = null;\n\t\t} catch (err) {\n\t\t\t// Degrade to email-only rather than guessing: an unreachable API is\n\t\t\t// not evidence that a provider works.\n\t\t\tproviders.value = [];\n\t\t\terror.value = err instanceof Error ? err : new Error(String(err));\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\tonMounted(() => {\n\t\tvoid refresh();\n\t});\n\n\treturn {\n\t\tproviders,\n\t\thas: (provider: string) => providers.value.includes(provider),\n\t\tisLoading,\n\t\terror,\n\t\trefresh,\n\t};\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseUnlinkOauthReturn {\n\tunlinkOauth: (provider: string) => Promise<void>;\n\tunlinked: Ref<boolean>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\t// True when the server refused because the account has no password — the one\n\t// failure a settings screen should handle rather than just display, by\n\t// sending the user to set a password first. A flag so screens don't have to\n\t// match on the error's reason string.\n\trequiresPassword: Ref<boolean>;\n}\n\n/**\n * Remove the OAuth provider linked to the signed-in account.\n *\n * Prefer gating the control on `user.hasPassword` so the case is never reached:\n * an account created BY the provider has no other credential, and unlinking it\n * would be account deletion. The server refuses regardless (409), which is what\n * `requiresPassword` reports.\n */\nexport function useUnlinkOauth(client?: AuthClient): IUseUnlinkOauthReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useUnlinkOauth');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst unlinked = ref(false);\n\tconst requiresPassword = ref(false);\n\n\tconst unlinkOauth = async (provider: string): Promise<void> => {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\trequiresPassword.value = false;\n\t\ttry {\n\t\t\tawait auth.unlinkOauth(provider);\n\t\t\tunlinked.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\trequiresPassword.value = apiError.reason === 'PASSWORD_REQUIRED';\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\treturn { unlinkOauth, unlinked, isLoading, error, requiresPassword };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA,IAAAA,kBAAgD;;;ACrBhD,oBAAiC;AACjC,iBAAqC;AAErC,IAAAC,cAAoB;;;ACJb,IAAM,YAAY;AAElB,SAAS,aAAa,OAAe;AAC3C,eAAa,QAAQ,WAAW,KAAK;AACtC;AAEO,SAAS,aAAa;AAC5B,eAAa,WAAW,SAAS;AAClC;AAEO,SAAS,YAA2B;AAC1C,SAAO,aAAa,QAAQ,SAAS;AACtC;;;ADIO,SAAS,eAAe,QAA4C;AAC1E,QAAM,WAAO,iCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,gBAAgB;AACzE,QAAM,gBAAY,iBAAI,KAAK;AAC3B,QAAM,YAAQ,iBAA6B,IAAI;AAE/C,iBAAe,IAAO,IAAkC;AACvD,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,aAAO,MAAM,GAAG;AAAA,IACjB,SAAS,KAAK;AACb,YAAM,WACL,eAAe,iCAAmB,MAAM,IAAI,+BAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,WAAS,aAAa;AACrB,WAAO,IAAI,YAAY;AACtB,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,WAAW;AACzC,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAEA,WAAS,aAAa;AACrB,WAAO,IAAI,YAAY;AACtB,YAAM,KAAK,WAAW;AACtB,WAAK,eAAe,MAAS;AAC7B,iBAAW;AAAA,IACZ,CAAC;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,YAAY,WAAW,MAAM;AACnD;;;AEnDA,IAAAC,iBAAiC;AACjC,IAAAC,cAAqC;AAErC,IAAAA,cAAoB;AASb,SAAS,kBAAkB,QAA+C;AAChF,QAAM,WAAO,kCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB;AAC5E,QAAM,gBAAY,iBAAI,KAAK;AAC3B,QAAM,YAAQ,iBAA6B,IAAI;AAC/C,QAAM,WAAO,iBAAI,KAAK;AAEtB,iBAAe,eAAe,OAA6B;AAC1D,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,SAAK,QAAQ;AACb,QAAI;AACH,YAAM,KAAK,eAAe,KAAK;AAC/B,WAAK,QAAQ;AAAA,IACd,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,gBAAgB,WAAW,OAAO,KAAK;AACjD;;;ACpCA,IAAAC,iBAAiC;AACjC,IAAAC,cAAqC;AAErC,IAAAA,cAAoB;AASb,SAAS,kBAAkB,QAA+C;AAChF,QAAM,WAAO,kCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB;AAC5E,QAAM,gBAAY,iBAAI,KAAK;AAC3B,QAAM,YAAQ,iBAA6B,IAAI;AAC/C,QAAM,WAAO,iBAAI,KAAK;AAEtB,iBAAe,eAAe,OAAe;AAC5C,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,KAAK,eAAe,KAAK;AAC/B,WAAK,QAAQ;AAAA,IACd,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,gBAAgB,WAAW,OAAO,KAAK;AACjD;;;ACnCA,IAAAC,iBAAgD;AAChD,IAAAC,cAAqC;AAErC,IAAAA,cAAoB;AAab,SAAS,SAAS,QAAsC;AAC9D,QAAM,WAAO,kCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,UAAU;AACnE,QAAM,gBAAY,iBAAI,KAAK;AAC3B,QAAM,YAAQ,iBAA6B,IAAI;AAC/C,QAAM,WAAO,iBAAyB,IAAI;AAG1C,QAAM,iBAAa,iBAA+B,IAAI;AAEtD,iBAAe,MAAM,OAAoB;AACxC,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,eAAW,QAAQ;AACnB,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,MAAM,KAAK;AACzC,cAAI,8BAAc,MAAM,GAAG;AAC1B,mBAAW,QAAQ;AACnB,eAAO;AAAA,MACR;AACA,WAAK,eAAe,OAAO,OAAO,MAAM;AACxC,mBAAa,OAAO,OAAO,MAAM;AACjC,WAAK,QAAQ;AACb,aAAO;AAAA,IACR,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,OAAO,WAAW,OAAO,MAAM,WAAW;AACpD;;;AClDA,IAAAC,iBAAiC;AACjC,IAAAC,cAAqC;AAErC,IAAAA,eAAoB;AASb,SAAS,UAAU,QAAuC;AAChE,QAAM,WAAO,kCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,WAAW;AACpE,QAAM,gBAAY,kBAAI,KAAK;AAC3B,QAAM,YAAQ,kBAA6B,IAAI;AAE/C,iBAAe,OAAO,cAAuB;AAC5C,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,KAAK,OAAO,YAAY;AAAA,IAC/B,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AAAA,IACf,UAAE;AACD,WAAK,eAAe,MAAS;AAC7B,iBAAW;AACX,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,QAAQ,WAAW,MAAM;AACnC;;;AClCA,IAAAC,iBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAAoB;AAab,SAAS,YAAY,QAAyC;AACpE,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,aAAa;AACtE,QAAM,gBAAY,kBAAI,KAAK;AAC3B,QAAM,YAAQ,kBAA6B,IAAI;AAC/C,QAAM,WAAO,kBAAyB,IAAI;AAE1C,iBAAe,YAAY,UAAkB,MAAc;AAC1D,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,IAAI,YAAY,UAAU,IAAI;AAC5D,WAAK,eAAe,OAAO,OAAO,MAAM;AACxC,mBAAa,OAAO,OAAO,MAAM;AACjC,WAAK,QAAQ;AACb,aAAO;AAAA,IACR,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,aAAa,WAAW,OAAO,KAAK;AAC9C;;;AC1CA,IAAAC,iBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAAoB;AAiBb,SAAS,YAAY,QAAyC;AACpE,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,aAAa;AACtE,QAAM,gBAAY,kBAA4B,IAAI;AAClD,QAAM,gBAAY,kBAAI,KAAK;AAC3B,QAAM,YAAQ,kBAA6B,IAAI;AAE/C,iBAAe,IAAO,IAAkC;AACvD,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,aAAO,MAAM,GAAG;AAAA,IACjB,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,WAAS,QAAQ;AAChB,WAAO,IAAI,YAAY;AACtB,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,IAAI,MAAM;AACxC,gBAAU,QAAQ;AAClB,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAEA,WAAS,OAAO,MAAc;AAC7B,WAAO,IAAI,YAAY;AACtB,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,IAAI,OAAO,IAAI;AAC7C,aAAO;AAAA,IACR,CAAC;AAAA,EACF;AAEA,WAAS,QAAQ,MAAc;AAC9B,WAAO,IAAI,YAAY;AACtB,YAAM,KAAK,IAAI,QAAQ,IAAI;AAAA,IAC5B,CAAC;AAAA,EACF;AAEA,WAAS,sBAAsB,MAAc;AAC5C,WAAO,IAAI,YAAY;AACtB,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,IAAI,sBAAsB,IAAI;AAC5D,aAAO,OAAO;AAAA,IACf,CAAC;AAAA,EACF;AAEA,SAAO,EAAE,OAAO,WAAW,QAAQ,SAAS,uBAAuB,WAAW,MAAM;AACrF;;;ACjEA,IAAAC,iBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAA+B;AAcxB,SAAS,WAAW,QAAwC;AAClE,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,YAAY;AACrE,QAAM,WAAO,kBAAqB,IAAI;AACtC,QAAM,gBAAY,kBAAI,IAAI;AAC1B,QAAM,YAAQ,kBAA6B,IAAI;AAE/C,iBAAe,QAAQ,MAA4B;AAClD,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE,MAAM,MAAM,MAAM,CAAC;AAC3D,WAAK,QAAQ,OAAO;AAAA,IACrB,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AAAA,IACf,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,iBAAe,OAAU,IAAkC;AAC1D,UAAM,QAAQ;AACd,QAAI;AACH,aAAO,MAAM,GAAG;AAAA,IACjB,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP;AAAA,EACD;AAEA,WAAS,cAAc,OAA4B;AAClD,WAAO,OAAO,YAAY;AACzB,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,cAAc,KAAK;AACjD,WAAK,QAAQ,OAAO;AACpB,aAAO,OAAO;AAAA,IACf,CAAC;AAAA,EACF;AAEA,WAAS,kBAAkB,OAAgC;AAC1D,WAAO,OAAO,YAAY;AACzB,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,kBAAkB,KAAK;AACrD,WAAK,QAAQ,OAAO;AACpB,aAAO,OAAO;AAAA,IACf,CAAC;AAAA,EACF;AAEA,WAAS,YAAY,OAAe;AACnC,WAAO,OAAO,YAAY;AACzB,YAAM,KAAK,YAAY,KAAK;AAC5B,YAAM,QAAQ;AAAA,IACf,CAAC;AAAA,EACF;AAEA,WAAS,YAAY,OAAe;AACnC,WAAO,OAAO,YAAY;AACzB,YAAM,KAAK,YAAY,KAAK;AAC5B,YAAM,QAAQ;AAAA,IACf,CAAC;AAAA,EACF;AAEA,8BAAU,MAAM,KAAK,QAAQ,CAAC;AAE9B,SAAO,EAAE,MAAM,SAAS,eAAe,mBAAmB,aAAa,aAAa,WAAW,MAAM;AACtG;;;ACxFA,IAAAC,iBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAAoB;AAUb,SAAS,YAAY,QAAyC;AACpE,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,aAAa;AACtE,QAAM,gBAAY,kBAAI,KAAK;AAC3B,QAAM,YAAQ,kBAA6B,IAAI;AAC/C,QAAM,WAAO,kBAA4B,IAAI;AAE7C,iBAAe,SAAS,OAAuB;AAC9C,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,SAAS,KAAK;AAC5C,WAAK,eAAe,OAAO,OAAO,MAAM;AACxC,mBAAa,OAAO,OAAO,MAAM;AACjC,WAAK,QAAQ;AACb,aAAO;AAAA,IACR,SAAS,KAAK;AACb,YAAM,WACL,eAAe,kCAAmB,MAAM,IAAI,gCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,UAAU,WAAW,OAAO,KAAK;AAC3C;;;ACvCA,IAAAC,kBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAAoB;AASb,SAAS,iBAAiB,QAA8C;AAC9E,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,kBAAkB;AAC3E,QAAM,gBAAY,kBAAI,KAAK;AAC3B,QAAM,YAAQ,kBAA6B,IAAI;AAC/C,QAAM,WAAO,kBAAI,KAAK;AAEtB,iBAAe,cAAc,OAA4B;AACxD,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,KAAK,cAAc,KAAK;AAC9B,WAAK,QAAQ;AAAA,IACd,SAAS,KAAK;AACb,YAAM,WACL,eAAe,mCAAmB,MAAM,IAAI,iCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,eAAe,WAAW,OAAO,KAAK;AAChD;;;ACnCA,IAAAC,eAAqC;AAErC,IAAAA,eAA+B;AAWxB,SAAS,WAAW,QAAwC;AAClE,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,YAAY;AACrE,QAAM,WAAO,kBAAqB,IAAI;AACtC,QAAM,gBAAY,kBAAI,IAAI;AAC1B,QAAM,sBAAkB,kBAAI,KAAK;AAEjC,iBAAe,QAAQ,MAA4B;AAClD,cAAU,QAAQ;AAClB,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE,MAAM,MAAM,MAAM,CAAC;AAC3D,WAAK,QAAQ,OAAO;AACpB,sBAAgB,QAAQ;AAAA,IACzB,QAAQ;AACP,WAAK,QAAQ;AACb,sBAAgB,QAAQ;AACxB,WAAK,eAAe,MAAS;AAC7B,iBAAW;AAAA,IACZ,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,iBAAe,OAAO,cAAuB;AAC5C,QAAI;AACH,YAAM,KAAK,OAAO,YAAY;AAAA,IAC/B,QAAQ;AAAA,IAER;AACA,SAAK,eAAe,MAAS;AAC7B,eAAW;AACX,SAAK,QAAQ;AACb,oBAAgB,QAAQ;AAAA,EACzB;AAEA,QAAM,QAAQ,UAAU;AACxB,MAAI,MAAO,MAAK,eAAe,KAAK;AACpC,8BAAU,MAAM,KAAK,QAAQ,CAAC;AAE9B,SAAO,EAAE,MAAM,WAAW,iBAAiB,SAAS,OAAO;AAC5D;;;ACpDA,IAAAC,kBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAA+B;AAqBxB,SAAS,gBACf,iBACA,cACyB;AAIzB,QAAM,gBACL,oBAAoB,UACpB,OAAQ,gBAA+B,oBAAoB;AAC5D,QAAM,WAAW,gBAAiB,kBAA6C;AAC/E,QAAM,WAAW,gBAAgB,eAAgB,oBAA8C,CAAC;AAChG,QAAM,WAAO,mCAAqB,UAAU,CAAC,MAAM,EAAE,MAAM,iBAAiB;AAE5E,QAAM,aAAS,kBAAsB,CAAC,CAAC;AACvC,QAAM,gBAAY,kBAAI,IAAI;AAC1B,QAAM,oBAAgB,kBAAI,KAAK;AAC/B,QAAM,YAAQ,kBAA6B,IAAI;AAC/C,QAAM,cAAU,kBAAI,KAAK;AACzB,MAAI,SAAwB;AAE5B,iBAAe,QAAQ,MAA4B;AAClD,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,gBAAgB,SAAS,EAAE,MAAM,MAAM,MAAM,CAAC;AAC5E,aAAO,QAAQ,OAAO;AACtB,eAAS,OAAO;AAChB,cAAQ,QAAQ,OAAO,eAAe;AAAA,IACvC,SAAS,KAAK;AACb,YAAM,QACL,eAAe,mCAAmB,MAAM,IAAI,iCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AAAA,IACxF,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,iBAAe,WAAW;AACzB,QAAI,CAAC,UAAU,cAAc,MAAO;AACpC,kBAAc,QAAQ;AACtB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,gBAAgB,EAAE,GAAG,SAAS,OAAO,CAAC;AACpE,aAAO,QAAQ,CAAC,GAAG,OAAO,OAAO,GAAG,OAAO,MAAM;AACjD,eAAS,OAAO;AAChB,cAAQ,QAAQ,OAAO,eAAe;AAAA,IACvC,SAAS,KAAK;AACb,YAAM,QACL,eAAe,mCAAmB,MAAM,IAAI,iCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AAAA,IACxF,UAAE;AACD,oBAAc,QAAQ;AAAA,IACvB;AAAA,EACD;AAEA,8BAAU,MAAM,KAAK,QAAQ,CAAC;AAE9B,SAAO,EAAE,QAAQ,WAAW,eAAe,OAAO,SAAS,SAAS,SAAS;AAC9E;;;ACjFA,IAAAC,kBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAA+B;AAa/B,SAAS,WAAW,KAAgC;AACnD,SAAO,eAAe,mCAAmB,MAAM,IAAI,iCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AAC9F;AAIO,SAAS,YAAY,QAAyC;AACpE,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,aAAa;AACtE,QAAM,eAAW,kBAAmB,CAAC,CAAC;AACtC,QAAM,gBAAY,kBAAI,IAAI;AAC1B,QAAM,YAAQ,kBAA6B,IAAI;AAE/C,iBAAe,QAAQ,MAA4B;AAClD,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,aAAa,EAAE,MAAM,MAAM,MAAM,CAAC;AAChE,eAAS,QAAQ,OAAO;AAAA,IACzB,SAAS,KAAK;AACb,YAAM,QAAQ,WAAW,GAAG;AAAA,IAC7B,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,iBAAe,UAAU,IAAY;AACpC,UAAM,OAAO,SAAS;AACtB,aAAS,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,EAAE;AACnD,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,KAAK,iBAAiB,EAAE;AAAA,IAC/B,SAAS,KAAK;AACb,eAAS,QAAQ;AACjB,YAAM,QAAQ,WAAW,GAAG;AAC5B,YAAM,WAAW,GAAG;AAAA,IACrB;AAAA,EACD;AAEA,iBAAe,kBAAkB;AAChC,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,KAAK,uBAAuB;AAGlC,YAAM,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,IAC9B,SAAS,KAAK;AACb,YAAM,QAAQ,WAAW,GAAG;AAC5B,YAAM,WAAW,GAAG;AAAA,IACrB;AAAA,EACD;AAEA,8BAAU,MAAM,KAAK,QAAQ,CAAC;AAE9B,SAAO,EAAE,UAAU,WAAW,OAAO,SAAS,WAAW,gBAAgB;AAC1E;;;ACtEA,IAAAC,kBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAAoB;AAWb,SAAS,eAAe,QAA4C;AAC1E,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,gBAAgB;AACzE,QAAM,gBAAY,kBAAI,KAAK;AAC3B,QAAM,YAAQ,kBAA6B,IAAI;AAC/C,QAAM,WAAO,kBAA+B,IAAI;AAChD,QAAM,aAAS,kBAAI,KAAK;AAIxB,iBAAe,SAAS;AACvB,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,WAAO,QAAQ;AACf,QAAI;AACH,YAAM,KAAK,sBAAsB;AACjC,aAAO,QAAQ;AAAA,IAChB,SAAS,KAAK;AACb,YAAM,WACL,eAAe,mCAAmB,MAAM,IAAI,iCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,iBAAe,YAAY,KAAa;AACvC,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,YAAY,GAAG;AAC7C,WAAK,QAAQ;AACb,aAAO;AAAA,IACR,SAAS,KAAK;AACb,YAAM,WACL,eAAe,mCAAmB,MAAM,IAAI,iCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,aAAa,QAAQ,QAAQ,WAAW,OAAO,KAAK;AAC9D;;;AC1DA,IAAAC,kBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAA+B;AAoBxB,SAAS,iBAAiB,QAA8C;AAC9E,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,kBAAkB;AAC3E,QAAM,gBAAY,kBAAc,CAAC,CAAC;AAClC,QAAM,gBAAY,kBAAI,IAAI;AAC1B,QAAM,YAAQ,kBAAqC,IAAI;AAEvD,QAAM,UAAU,YAA2B;AAC1C,cAAU,QAAQ;AAClB,QAAI;AACH,YAAM,EAAE,OAAO,IAAI,MAAM,KAAK,UAAU;AACxC,gBAAU,QAAQ,OAAO;AACzB,YAAM,QAAQ;AAAA,IACf,SAAS,KAAK;AAGb,gBAAU,QAAQ,CAAC;AACnB,YAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,IACjE,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,8BAAU,MAAM;AACf,SAAK,QAAQ;AAAA,EACd,CAAC;AAED,SAAO;AAAA,IACN;AAAA,IACA,KAAK,CAAC,aAAqB,UAAU,MAAM,SAAS,QAAQ;AAAA,IAC5D;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACxDA,IAAAC,kBAAiC;AACjC,IAAAC,eAAqC;AAErC,IAAAA,eAAoB;AAsBb,SAAS,eAAe,QAA4C;AAC1E,QAAM,WAAO,mCAAqB,QAAQ,CAAC,MAAM,EAAE,MAAM,gBAAgB;AACzE,QAAM,gBAAY,kBAAI,KAAK;AAC3B,QAAM,YAAQ,kBAA6B,IAAI;AAC/C,QAAM,eAAW,kBAAI,KAAK;AAC1B,QAAM,uBAAmB,kBAAI,KAAK;AAElC,QAAM,cAAc,OAAO,aAAoC;AAC9D,cAAU,QAAQ;AAClB,UAAM,QAAQ;AACd,qBAAiB,QAAQ;AACzB,QAAI;AACH,YAAM,KAAK,YAAY,QAAQ;AAC/B,eAAS,QAAQ;AAAA,IAClB,SAAS,KAAK;AACb,YAAM,WACL,eAAe,mCAAmB,MAAM,IAAI,iCAAiB,WAAW,OAAO,GAAG,GAAG,CAAC;AACvF,YAAM,QAAQ;AACd,uBAAiB,QAAQ,SAAS,WAAW;AAC7C,YAAM;AAAA,IACP,UAAE;AACD,gBAAU,QAAQ;AAAA,IACnB;AAAA,EACD;AAEA,SAAO,EAAE,aAAa,UAAU,WAAW,OAAO,iBAAiB;AACpE;","names":["import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue","import_client","import_vue"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { FonderieApiError, AuthClient, IChangePasswordInput, ILoginInput, ILoginResult, IMfaRequiredResult, IMfaSetupResult, IMfaEnabledResult, IUserDTO, IUpdateProfileInput, IUpdatePreferencesInput, IRegisterInput, IRegisterResult, IResetPasswordInput, ILoginEventDTO, IGetLoginHistoryInput, ISessionDTO, IVerifyEmailResult } from '@fonderie/client';
2
- export { AuthClient, FonderieApiError, IChangePasswordInput, IGetLoginHistoryInput, ILoginEventDTO, ILoginInput, ILoginResult, IMfaEnabledResult, IMfaRequiredResult, IMfaSetupResult, IRegisterInput, IRegisterResult, IResetPasswordInput, ISessionDTO, ITokens, IUpdatePreferencesInput, IUpdateProfileInput, IUserDTO, IVerifyEmailResult, isMfaRequired } from '@fonderie/client';
2
+ export { AuthClient, FonderieApiError, IChangePasswordInput, IGetLoginHistoryInput, ILoginEventDTO, ILoginInput, ILoginResult, IMfaEnabledResult, IMfaRequiredResult, IMfaSetupResult, IRegisterInput, IRegisterResult, IRequestLocationDTO, IResetPasswordInput, ISessionDTO, ITokens, IUpdatePreferencesInput, IUpdateProfileInput, IUserDTO, IVerifyEmailResult, isMfaRequired } from '@fonderie/client';
3
3
  import { Ref } from 'vue';
4
4
 
5
5
  interface IUseAccountDataReturn {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { FonderieApiError, AuthClient, IChangePasswordInput, ILoginInput, ILoginResult, IMfaRequiredResult, IMfaSetupResult, IMfaEnabledResult, IUserDTO, IUpdateProfileInput, IUpdatePreferencesInput, IRegisterInput, IRegisterResult, IResetPasswordInput, ILoginEventDTO, IGetLoginHistoryInput, ISessionDTO, IVerifyEmailResult } from '@fonderie/client';
2
- export { AuthClient, FonderieApiError, IChangePasswordInput, IGetLoginHistoryInput, ILoginEventDTO, ILoginInput, ILoginResult, IMfaEnabledResult, IMfaRequiredResult, IMfaSetupResult, IRegisterInput, IRegisterResult, IResetPasswordInput, ISessionDTO, ITokens, IUpdatePreferencesInput, IUpdateProfileInput, IUserDTO, IVerifyEmailResult, isMfaRequired } from '@fonderie/client';
2
+ export { AuthClient, FonderieApiError, IChangePasswordInput, IGetLoginHistoryInput, ILoginEventDTO, ILoginInput, ILoginResult, IMfaEnabledResult, IMfaRequiredResult, IMfaSetupResult, IRegisterInput, IRegisterResult, IRequestLocationDTO, IResetPasswordInput, ISessionDTO, ITokens, IUpdatePreferencesInput, IUpdateProfileInput, IUserDTO, IVerifyEmailResult, isMfaRequired } from '@fonderie/client';
3
3
  import { Ref } from 'vue';
4
4
 
5
5
  interface IUseAccountDataReturn {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/composables/useAccountData.ts","../src/storage.ts","../src/composables/useChangePassword.ts","../src/composables/useForgotPassword.ts","../src/composables/useLogin.ts","../src/composables/useLogout.ts","../src/composables/useMfaLogin.ts","../src/composables/useMfaSetup.ts","../src/composables/useProfile.ts","../src/composables/useRegister.ts","../src/composables/useResetPassword.ts","../src/composables/useSession.ts","../src/composables/useLoginHistory.ts","../src/composables/useSessions.ts","../src/composables/useVerifyEmail.ts","../src/composables/useAuthProviders.ts","../src/composables/useUnlinkOauth.ts"],"sourcesContent":["export type {\n\tAuthClient,\n\tIChangePasswordInput,\n\tIGetLoginHistoryInput,\n\tILoginEventDTO,\n\tILoginInput,\n\tILoginResult,\n\tIMfaEnabledResult,\n\tIMfaRequiredResult,\n\tIMfaSetupResult,\n\tIRegisterInput,\n\tIRegisterResult,\n\tIResetPasswordInput,\n\tISessionDTO,\n\tITokens,\n\tIUpdatePreferencesInput,\n\tIUpdateProfileInput,\n\tIUserDTO,\n\tIVerifyEmailResult,\n} from '@fonderie/client';\n\nexport { FonderieApiError, isMfaRequired } from '@fonderie/client';\n\nexport type {\n\tIUseAuthProvidersReturn,\n\tIUseUnlinkOauthReturn,\n\tIUseAccountDataReturn,\n\tIUseChangePasswordReturn,\n\tIUseForgotPasswordReturn,\n\tIUseLoginHistoryReturn,\n\tIUseLoginReturn,\n\tIUseLogoutReturn,\n\tIUseMfaLoginReturn,\n\tIUseMfaSetupReturn,\n\tIUseProfileReturn,\n\tIUseRegisterReturn,\n\tIUseResetPasswordReturn,\n\tIUseSessionReturn,\n\tIUseSessionsReturn,\n\tIUseVerifyEmailReturn,\n} from './composables';\nexport {\n\tuseAuthProviders,\n\tuseUnlinkOauth,\n\tuseAccountData,\n\tuseChangePassword,\n\tuseForgotPassword,\n\tuseLogin,\n\tuseLoginHistory,\n\tuseLogout,\n\tuseMfaLogin,\n\tuseMfaSetup,\n\tuseProfile,\n\tuseRegister,\n\tuseResetPassword,\n\tuseSession,\n\tuseSessions,\n\tuseVerifyEmail,\n} from './composables';\n\n// Token persistence primitives — for wiring app-level flows (e.g. the\n// client's auth.onTokensChanged) to the same storage the hooks use.\nexport { clearToken, persistToken, readToken, TOKEN_KEY } from './storage';\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { clearToken } from '../storage';\n\nexport interface IUseAccountDataReturn {\n\t// GET /users/export — the caller's own data as a portable bundle (SAR).\n\texportData: () => Promise<unknown>;\n\t// Deletes the account, then tears the session down like a logout.\n\tdeleteUser: () => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useAccountData(client?: AuthClient): IUseAccountDataReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useAccountData');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function run<T>(op: () => Promise<T>): Promise<T> {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tfunction exportData() {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.exportData();\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction deleteUser() {\n\t\treturn run(async () => {\n\t\t\tawait auth.deleteUser();\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t});\n\t}\n\n\treturn { exportData, deleteUser, isLoading, error };\n}\n","export const TOKEN_KEY = 'fonderie_access_token';\n\nexport function persistToken(token: string) {\n\tlocalStorage.setItem(TOKEN_KEY, token);\n}\n\nexport function clearToken() {\n\tlocalStorage.removeItem(TOKEN_KEY);\n}\n\nexport function readToken(): string | null {\n\treturn localStorage.getItem(TOKEN_KEY);\n}\n","import type { AuthClient, IChangePasswordInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseChangePasswordReturn {\n\tchangePassword: (input: IChangePasswordInput) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdone: Ref<boolean>;\n}\n\nexport function useChangePassword(client?: AuthClient): IUseChangePasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useChangePassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst done = ref(false);\n\n\tasync function changePassword(input: IChangePasswordInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tdone.value = false;\n\t\ttry {\n\t\t\tawait auth.changePassword(input);\n\t\t\tdone.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { changePassword, isLoading, error, done };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseForgotPasswordReturn {\n\tforgotPassword: (email: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tsent: Ref<boolean>;\n}\n\nexport function useForgotPassword(client?: AuthClient): IUseForgotPasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useForgotPassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst sent = ref(false);\n\n\tasync function forgotPassword(email: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.forgotPassword(email);\n\t\t\tsent.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { forgotPassword, isLoading, error, sent };\n}\n","import type { AuthClient, ILoginInput, ILoginResult, IMfaRequiredResult } from '@fonderie/client';\nimport { FonderieApiError, isMfaRequired } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseLoginReturn {\n\tlogin: (input: ILoginInput) => Promise<ILoginResult | IMfaRequiredResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<ILoginResult | null>;\n\t// Set when the account requires MFA: no tokens were issued — complete the\n\t// login with client.auth.mfa.verifyLogin(mfaPending.value.mfaToken, code).\n\tmfaPending: Ref<IMfaRequiredResult | null>;\n}\n\nexport function useLogin(client?: AuthClient): IUseLoginReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useLogin');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<ILoginResult | null>(null);\n\t// Set when the account requires MFA: complete the login with\n\t// client.auth.mfa.verifyLogin(mfaPending.value.mfaToken, code).\n\tconst mfaPending = ref<IMfaRequiredResult | null>(null);\n\n\tasync function login(input: ILoginInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tmfaPending.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.login(input);\n\t\t\tif (isMfaRequired(result)) {\n\t\t\t\tmfaPending.value = result;\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { login, isLoading, error, data, mfaPending };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { clearToken } from '../storage';\n\nexport interface IUseLogoutReturn {\n\tlogout: (refreshToken?: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useLogout(client?: AuthClient): IUseLogoutReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useLogout');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function logout(refreshToken?: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.logout(refreshToken);\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t} finally {\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { logout, isLoading, error };\n}\n","import type { AuthClient, ILoginResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseMfaLoginReturn {\n\t// Completes a login that returned MFA_REQUIRED: verifies the TOTP code\n\t// against the temporary mfaToken from useLogin's mfaPending, then persists\n\t// the issued tokens exactly like a normal login.\n\tverifyLogin: (mfaToken: string, code: string) => Promise<ILoginResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<ILoginResult | null>;\n}\n\nexport function useMfaLogin(client?: AuthClient): IUseMfaLoginReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useMfaLogin');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<ILoginResult | null>(null);\n\n\tasync function verifyLogin(mfaToken: string, code: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.mfa.verifyLogin(mfaToken, code);\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { verifyLogin, isLoading, error, data };\n}\n","import type { AuthClient, IMfaEnabledResult, IMfaSetupResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseMfaSetupReturn {\n\t// Step 1: request enrollment — returns a data-URI QR code to scan and the\n\t// one-time backup codes generated at setup.\n\tsetup: () => Promise<IMfaSetupResult>;\n\tsetupData: Ref<IMfaSetupResult | null>;\n\t// Step 2: verify the first TOTP code to complete enrollment. The session\n\t// token is not rotated — MFA is enforced at login, so the current session\n\t// remains valid unchanged.\n\tverify: (code: string) => Promise<IMfaEnabledResult>;\n\tdisable: (code: string) => Promise<void>;\n\tregenerateBackupCodes: (code: string) => Promise<string[]>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useMfaSetup(client?: AuthClient): IUseMfaSetupReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useMfaSetup');\n\tconst setupData = ref<IMfaSetupResult | null>(null);\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function run<T>(op: () => Promise<T>): Promise<T> {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tfunction setup() {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.setup();\n\t\t\tsetupData.value = result;\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction verify(code: string) {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.verify(code);\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction disable(code: string) {\n\t\treturn run(async () => {\n\t\t\tawait auth.mfa.disable(code);\n\t\t});\n\t}\n\n\tfunction regenerateBackupCodes(code: string) {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.regenerateBackupCodes(code);\n\t\t\treturn result.backupCodes;\n\t\t});\n\t}\n\n\treturn { setup, setupData, verify, disable, regenerateBackupCodes, isLoading, error };\n}\n","import type {\n\tAuthClient,\n\tIUpdatePreferencesInput,\n\tIUpdateProfileInput,\n\tIUserDTO,\n} from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseProfileReturn {\n\tuser: Ref<IUserDTO | null>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tupdateProfile: (input: IUpdateProfileInput) => Promise<IUserDTO>;\n\tupdatePreferences: (input: IUpdatePreferencesInput) => Promise<IUserDTO>;\n\t// Email/phone changes re-fetch the profile (their endpoints don't return it).\n\tupdateEmail: (email: string) => Promise<void>;\n\tupdatePhone: (phone: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useProfile(client?: AuthClient): IUseProfileReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useProfile');\n\tconst user = ref<IUserDTO | null>(null);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getUser({ bust: opts?.force });\n\t\t\tuser.value = result.user;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function mutate<T>(op: () => Promise<T>): Promise<T> {\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t}\n\t}\n\n\tfunction updateProfile(input: IUpdateProfileInput) {\n\t\treturn mutate(async () => {\n\t\t\tconst { result } = await auth.updateProfile(input);\n\t\t\tuser.value = result.user;\n\t\t\treturn result.user;\n\t\t});\n\t}\n\n\tfunction updatePreferences(input: IUpdatePreferencesInput) {\n\t\treturn mutate(async () => {\n\t\t\tconst { result } = await auth.updatePreferences(input);\n\t\t\tuser.value = result.user;\n\t\t\treturn result.user;\n\t\t});\n\t}\n\n\tfunction updateEmail(email: string) {\n\t\treturn mutate(async () => {\n\t\t\tawait auth.updateEmail(email);\n\t\t\tawait refresh();\n\t\t});\n\t}\n\n\tfunction updatePhone(phone: string) {\n\t\treturn mutate(async () => {\n\t\t\tawait auth.updatePhone(phone);\n\t\t\tawait refresh();\n\t\t});\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { user, refresh, updateProfile, updatePreferences, updateEmail, updatePhone, isLoading, error };\n}\n","import type { AuthClient, IRegisterInput, IRegisterResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseRegisterReturn {\n\tregister: (input: IRegisterInput) => Promise<IRegisterResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<IRegisterResult | null>;\n}\n\nexport function useRegister(client?: AuthClient): IUseRegisterReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useRegister');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<IRegisterResult | null>(null);\n\n\tasync function register(input: IRegisterInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.register(input);\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { register, isLoading, error, data };\n}\n","import type { AuthClient, IResetPasswordInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseResetPasswordReturn {\n\tresetPassword: (input: IResetPasswordInput) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdone: Ref<boolean>;\n}\n\nexport function useResetPassword(client?: AuthClient): IUseResetPasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useResetPassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst done = ref(false);\n\n\tasync function resetPassword(input: IResetPasswordInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.resetPassword(input);\n\t\t\tdone.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { resetPassword, isLoading, error, done };\n}\n","import type { AuthClient, IUserDTO } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\nimport { clearToken, readToken } from '../storage';\n\nexport interface IUseSessionReturn {\n\tuser: Ref<IUserDTO | null>;\n\tisLoading: Ref<boolean>;\n\tisAuthenticated: Ref<boolean>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tlogout: (refreshToken?: string) => Promise<void>;\n}\n\nexport function useSession(client?: AuthClient): IUseSessionReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useSession');\n\tconst user = ref<IUserDTO | null>(null);\n\tconst isLoading = ref(true);\n\tconst isAuthenticated = ref(false);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tconst { result } = await auth.getUser({ bust: opts?.force });\n\t\t\tuser.value = result.user;\n\t\t\tisAuthenticated.value = true;\n\t\t} catch {\n\t\t\tuser.value = null;\n\t\t\tisAuthenticated.value = false;\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function logout(refreshToken?: string) {\n\t\ttry {\n\t\t\tawait auth.logout(refreshToken);\n\t\t} catch {\n\t\t\t// Session is being torn down regardless of server response.\n\t\t}\n\t\tauth.setAccessToken(undefined);\n\t\tclearToken();\n\t\tuser.value = null;\n\t\tisAuthenticated.value = false;\n\t}\n\n\tconst token = readToken();\n\tif (token) auth.setAccessToken(token);\n\tonMounted(() => void refresh());\n\n\treturn { user, isLoading, isAuthenticated, refresh, logout };\n}\n","import type { AuthClient, ILoginEventDTO, IGetLoginHistoryInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseLoginHistoryReturn {\n\tevents: Ref<ILoginEventDTO[]>;\n\tisLoading: Ref<boolean>;\n\tisLoadingMore: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\thasMore: Ref<boolean>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tloadMore: () => Promise<void>;\n}\n\n// The caller's own login attempts, newest first, keyset-paginated. Same contract\n// as react-auth's useLoginHistory (and vue-audit's useAuditEvents). Unlike React,\n// a composable body runs once, so filters need no memoization — they're captured\n// at call time.\nexport function useLoginHistory(rawFilters?: IGetLoginHistoryInput): IUseLoginHistoryReturn;\nexport function useLoginHistory(\n\tclient: AuthClient | undefined,\n\trawFilters?: IGetLoginHistoryInput,\n): IUseLoginHistoryReturn;\nexport function useLoginHistory(\n\tclientOrFilters?: AuthClient | IGetLoginHistoryInput,\n\tmaybeFilters?: IGetLoginHistoryInput,\n): IUseLoginHistoryReturn {\n\t// The AuthClient isn't reliably an instanceof across bundle boundaries, so\n\t// detect the client arg structurally (it has getLoginHistory) rather than\n\t// by prototype.\n\tconst firstIsClient =\n\t\tclientOrFilters === undefined ||\n\t\ttypeof (clientOrFilters as AuthClient).getLoginHistory === 'function';\n\tconst explicit = firstIsClient ? (clientOrFilters as AuthClient | undefined) : undefined;\n\tconst filters = (firstIsClient ? maybeFilters : (clientOrFilters as IGetLoginHistoryInput)) ?? {};\n\tconst auth = useFonderieSubClient(explicit, (c) => c.auth, 'useLoginHistory');\n\n\tconst events = ref<ILoginEventDTO[]>([]);\n\tconst isLoading = ref(true);\n\tconst isLoadingMore = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst hasMore = ref(false);\n\tlet cursor: string | null = null;\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getLoginHistory(filters, { bust: opts?.force });\n\t\t\tevents.value = result.events;\n\t\t\tcursor = result.nextCursor;\n\t\t\thasMore.value = result.nextCursor !== null;\n\t\t} catch (err) {\n\t\t\terror.value =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function loadMore() {\n\t\tif (!cursor || isLoadingMore.value) return;\n\t\tisLoadingMore.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getLoginHistory({ ...filters, cursor });\n\t\t\tevents.value = [...events.value, ...result.events];\n\t\t\tcursor = result.nextCursor;\n\t\t\thasMore.value = result.nextCursor !== null;\n\t\t} catch (err) {\n\t\t\terror.value =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t} finally {\n\t\t\tisLoadingMore.value = false;\n\t\t}\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { events, isLoading, isLoadingMore, error, hasMore, refresh, loadMore };\n}\n","import type { AuthClient, ISessionDTO } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseSessionsReturn {\n\tsessions: Ref<ISessionDTO[]>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\t// Revoke one session. Optimistically removes it; refetches on failure.\n\tterminate: (id: string) => Promise<void>;\n\t// Revoke every session except the current one.\n\tterminateOthers: () => Promise<void>;\n}\n\nfunction toApiError(err: unknown): FonderieApiError {\n\treturn err instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n}\n\n// The caller's live sessions (one flagged `current`) plus the terminate actions.\n// Same contract as react-auth's useSessions.\nexport function useSessions(client?: AuthClient): IUseSessionsReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useSessions');\n\tconst sessions = ref<ISessionDTO[]>([]);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.listSessions({ bust: opts?.force });\n\t\t\tsessions.value = result.sessions;\n\t\t} catch (err) {\n\t\t\terror.value = toApiError(err);\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function terminate(id: string) {\n\t\tconst prev = sessions.value;\n\t\tsessions.value = prev.filter((row) => row.id !== id); // optimistic\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.terminateSession(id);\n\t\t} catch (err) {\n\t\t\tsessions.value = prev; // roll back the optimistic removal\n\t\t\terror.value = toApiError(err);\n\t\t\tthrow toApiError(err);\n\t\t}\n\t}\n\n\tasync function terminateOthers() {\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.terminateOtherSessions();\n\t\t\t// The server is the source of truth for which survived — refetch (force)\n\t\t\t// rather than trust a local \"keep current\" guess.\n\t\t\tawait refresh({ force: true });\n\t\t} catch (err) {\n\t\t\terror.value = toApiError(err);\n\t\t\tthrow toApiError(err);\n\t\t}\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { sessions, isLoading, error, refresh, terminate, terminateOthers };\n}\n","import type { AuthClient, IVerifyEmailResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseVerifyEmailReturn {\n\tverifyEmail: (pin: string) => Promise<IVerifyEmailResult>;\n\tresend: () => Promise<void>;\n\tresent: Ref<boolean>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<IVerifyEmailResult | null>;\n}\n\nexport function useVerifyEmail(client?: AuthClient): IUseVerifyEmailReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useVerifyEmail');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<IVerifyEmailResult | null>(null);\n\tconst resent = ref(false);\n\n\t// Re-sends the verification email — the other half of the same lifecycle,\n\t// so one composable owns both and screens don't split loading/error handling.\n\tasync function resend() {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tresent.value = false;\n\t\ttry {\n\t\t\tawait auth.sendVerificationEmail();\n\t\t\tresent.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function verifyEmail(pin: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.verifyEmail(pin);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { verifyEmail, resend, resent, isLoading, error, data };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseAuthProvidersReturn {\n\t/** Sign-in methods this deployment can honour, e.g. ['email','google']. */\n\tproviders: Ref<string[]>;\n\t/** The common case: should this button be rendered at all? */\n\thas: (provider: string) => boolean;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | Error | null>;\n\trefresh: () => Promise<void>;\n}\n\n// Ask the API which sign-in methods it can honour, and render buttons from\n// that — never from a build-time flag. A flag stores the same fact the API\n// already holds and lets the two disagree; the failure is a user committing to\n// a redirect and landing on the provider's error page, which this app cannot\n// explain. Same contract as react-auth's useAuthProviders.\n//\n// Starts EMPTY rather than optimistic: a brief moment with no social buttons is\n// invisible, a button that appears and then fails is not.\nexport function useAuthProviders(client?: AuthClient): IUseAuthProvidersReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useAuthProviders');\n\tconst providers = ref<string[]>([]);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | Error | null>(null);\n\n\tconst refresh = async (): Promise<void> => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tconst { result } = await auth.providers();\n\t\t\tproviders.value = result.providers;\n\t\t\terror.value = null;\n\t\t} catch (err) {\n\t\t\t// Degrade to email-only rather than guessing: an unreachable API is\n\t\t\t// not evidence that a provider works.\n\t\t\tproviders.value = [];\n\t\t\terror.value = err instanceof Error ? err : new Error(String(err));\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\tonMounted(() => {\n\t\tvoid refresh();\n\t});\n\n\treturn {\n\t\tproviders,\n\t\thas: (provider: string) => providers.value.includes(provider),\n\t\tisLoading,\n\t\terror,\n\t\trefresh,\n\t};\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseUnlinkOauthReturn {\n\tunlinkOauth: (provider: string) => Promise<void>;\n\tunlinked: Ref<boolean>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\t// True when the server refused because the account has no password — the one\n\t// failure a settings screen should handle rather than just display, by\n\t// sending the user to set a password first. A flag so screens don't have to\n\t// match on the error's reason string.\n\trequiresPassword: Ref<boolean>;\n}\n\n/**\n * Remove the OAuth provider linked to the signed-in account.\n *\n * Prefer gating the control on `user.hasPassword` so the case is never reached:\n * an account created BY the provider has no other credential, and unlinking it\n * would be account deletion. The server refuses regardless (409), which is what\n * `requiresPassword` reports.\n */\nexport function useUnlinkOauth(client?: AuthClient): IUseUnlinkOauthReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useUnlinkOauth');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst unlinked = ref(false);\n\tconst requiresPassword = ref(false);\n\n\tconst unlinkOauth = async (provider: string): Promise<void> => {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\trequiresPassword.value = false;\n\t\ttry {\n\t\t\tawait auth.unlinkOauth(provider);\n\t\t\tunlinked.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\trequiresPassword.value = apiError.reason === 'PASSWORD_REQUIRED';\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\treturn { unlinkOauth, unlinked, isLoading, error, requiresPassword };\n}\n"],"mappings":"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","names":["FonderieApiError","isMfaRequired","FonderieApiError","useFonderieSubClient","ref","FonderieApiError","useFonderieSubClient","ref","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","ref","FonderieApiError","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","ref","FonderieApiError","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","ref","FonderieApiError","FonderieApiError","useFonderieSubClient","ref","FonderieApiError","useFonderieSubClient","ref","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","ref","FonderieApiError","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","onMounted","ref","useFonderieSubClient","ref","onMounted","FonderieApiError","useFonderieSubClient","onMounted","ref","FonderieApiError","useFonderieSubClient","onMounted","ref","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","onMounted","ref","FonderieApiError","useFonderieSubClient","ref"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/composables/useAccountData.ts","../src/storage.ts","../src/composables/useChangePassword.ts","../src/composables/useForgotPassword.ts","../src/composables/useLogin.ts","../src/composables/useLogout.ts","../src/composables/useMfaLogin.ts","../src/composables/useMfaSetup.ts","../src/composables/useProfile.ts","../src/composables/useRegister.ts","../src/composables/useResetPassword.ts","../src/composables/useSession.ts","../src/composables/useLoginHistory.ts","../src/composables/useSessions.ts","../src/composables/useVerifyEmail.ts","../src/composables/useAuthProviders.ts","../src/composables/useUnlinkOauth.ts"],"sourcesContent":["export type {\n\tAuthClient,\n\tIChangePasswordInput,\n\tIGetLoginHistoryInput,\n\tILoginEventDTO,\n\tIRequestLocationDTO,\n\tILoginInput,\n\tILoginResult,\n\tIMfaEnabledResult,\n\tIMfaRequiredResult,\n\tIMfaSetupResult,\n\tIRegisterInput,\n\tIRegisterResult,\n\tIResetPasswordInput,\n\tISessionDTO,\n\tITokens,\n\tIUpdatePreferencesInput,\n\tIUpdateProfileInput,\n\tIUserDTO,\n\tIVerifyEmailResult,\n} from '@fonderie/client';\n\nexport { FonderieApiError, isMfaRequired } from '@fonderie/client';\n\nexport type {\n\tIUseAuthProvidersReturn,\n\tIUseUnlinkOauthReturn,\n\tIUseAccountDataReturn,\n\tIUseChangePasswordReturn,\n\tIUseForgotPasswordReturn,\n\tIUseLoginHistoryReturn,\n\tIUseLoginReturn,\n\tIUseLogoutReturn,\n\tIUseMfaLoginReturn,\n\tIUseMfaSetupReturn,\n\tIUseProfileReturn,\n\tIUseRegisterReturn,\n\tIUseResetPasswordReturn,\n\tIUseSessionReturn,\n\tIUseSessionsReturn,\n\tIUseVerifyEmailReturn,\n} from './composables';\nexport {\n\tuseAuthProviders,\n\tuseUnlinkOauth,\n\tuseAccountData,\n\tuseChangePassword,\n\tuseForgotPassword,\n\tuseLogin,\n\tuseLoginHistory,\n\tuseLogout,\n\tuseMfaLogin,\n\tuseMfaSetup,\n\tuseProfile,\n\tuseRegister,\n\tuseResetPassword,\n\tuseSession,\n\tuseSessions,\n\tuseVerifyEmail,\n} from './composables';\n\n// Token persistence primitives — for wiring app-level flows (e.g. the\n// client's auth.onTokensChanged) to the same storage the hooks use.\nexport { clearToken, persistToken, readToken, TOKEN_KEY } from './storage';\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { clearToken } from '../storage';\n\nexport interface IUseAccountDataReturn {\n\t// GET /users/export — the caller's own data as a portable bundle (SAR).\n\texportData: () => Promise<unknown>;\n\t// Deletes the account, then tears the session down like a logout.\n\tdeleteUser: () => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useAccountData(client?: AuthClient): IUseAccountDataReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useAccountData');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function run<T>(op: () => Promise<T>): Promise<T> {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tfunction exportData() {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.exportData();\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction deleteUser() {\n\t\treturn run(async () => {\n\t\t\tawait auth.deleteUser();\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t});\n\t}\n\n\treturn { exportData, deleteUser, isLoading, error };\n}\n","export const TOKEN_KEY = 'fonderie_access_token';\n\nexport function persistToken(token: string) {\n\tlocalStorage.setItem(TOKEN_KEY, token);\n}\n\nexport function clearToken() {\n\tlocalStorage.removeItem(TOKEN_KEY);\n}\n\nexport function readToken(): string | null {\n\treturn localStorage.getItem(TOKEN_KEY);\n}\n","import type { AuthClient, IChangePasswordInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseChangePasswordReturn {\n\tchangePassword: (input: IChangePasswordInput) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdone: Ref<boolean>;\n}\n\nexport function useChangePassword(client?: AuthClient): IUseChangePasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useChangePassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst done = ref(false);\n\n\tasync function changePassword(input: IChangePasswordInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tdone.value = false;\n\t\ttry {\n\t\t\tawait auth.changePassword(input);\n\t\t\tdone.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { changePassword, isLoading, error, done };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseForgotPasswordReturn {\n\tforgotPassword: (email: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tsent: Ref<boolean>;\n}\n\nexport function useForgotPassword(client?: AuthClient): IUseForgotPasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useForgotPassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst sent = ref(false);\n\n\tasync function forgotPassword(email: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.forgotPassword(email);\n\t\t\tsent.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { forgotPassword, isLoading, error, sent };\n}\n","import type { AuthClient, ILoginInput, ILoginResult, IMfaRequiredResult } from '@fonderie/client';\nimport { FonderieApiError, isMfaRequired } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseLoginReturn {\n\tlogin: (input: ILoginInput) => Promise<ILoginResult | IMfaRequiredResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<ILoginResult | null>;\n\t// Set when the account requires MFA: no tokens were issued — complete the\n\t// login with client.auth.mfa.verifyLogin(mfaPending.value.mfaToken, code).\n\tmfaPending: Ref<IMfaRequiredResult | null>;\n}\n\nexport function useLogin(client?: AuthClient): IUseLoginReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useLogin');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<ILoginResult | null>(null);\n\t// Set when the account requires MFA: complete the login with\n\t// client.auth.mfa.verifyLogin(mfaPending.value.mfaToken, code).\n\tconst mfaPending = ref<IMfaRequiredResult | null>(null);\n\n\tasync function login(input: ILoginInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tmfaPending.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.login(input);\n\t\t\tif (isMfaRequired(result)) {\n\t\t\t\tmfaPending.value = result;\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { login, isLoading, error, data, mfaPending };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { clearToken } from '../storage';\n\nexport interface IUseLogoutReturn {\n\tlogout: (refreshToken?: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useLogout(client?: AuthClient): IUseLogoutReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useLogout');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function logout(refreshToken?: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.logout(refreshToken);\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t} finally {\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { logout, isLoading, error };\n}\n","import type { AuthClient, ILoginResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseMfaLoginReturn {\n\t// Completes a login that returned MFA_REQUIRED: verifies the TOTP code\n\t// against the temporary mfaToken from useLogin's mfaPending, then persists\n\t// the issued tokens exactly like a normal login.\n\tverifyLogin: (mfaToken: string, code: string) => Promise<ILoginResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<ILoginResult | null>;\n}\n\nexport function useMfaLogin(client?: AuthClient): IUseMfaLoginReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useMfaLogin');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<ILoginResult | null>(null);\n\n\tasync function verifyLogin(mfaToken: string, code: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.mfa.verifyLogin(mfaToken, code);\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { verifyLogin, isLoading, error, data };\n}\n","import type { AuthClient, IMfaEnabledResult, IMfaSetupResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseMfaSetupReturn {\n\t// Step 1: request enrollment — returns a data-URI QR code to scan and the\n\t// one-time backup codes generated at setup.\n\tsetup: () => Promise<IMfaSetupResult>;\n\tsetupData: Ref<IMfaSetupResult | null>;\n\t// Step 2: verify the first TOTP code to complete enrollment. The session\n\t// token is not rotated — MFA is enforced at login, so the current session\n\t// remains valid unchanged.\n\tverify: (code: string) => Promise<IMfaEnabledResult>;\n\tdisable: (code: string) => Promise<void>;\n\tregenerateBackupCodes: (code: string) => Promise<string[]>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useMfaSetup(client?: AuthClient): IUseMfaSetupReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useMfaSetup');\n\tconst setupData = ref<IMfaSetupResult | null>(null);\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function run<T>(op: () => Promise<T>): Promise<T> {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tfunction setup() {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.setup();\n\t\t\tsetupData.value = result;\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction verify(code: string) {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.verify(code);\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tfunction disable(code: string) {\n\t\treturn run(async () => {\n\t\t\tawait auth.mfa.disable(code);\n\t\t});\n\t}\n\n\tfunction regenerateBackupCodes(code: string) {\n\t\treturn run(async () => {\n\t\t\tconst { result } = await auth.mfa.regenerateBackupCodes(code);\n\t\t\treturn result.backupCodes;\n\t\t});\n\t}\n\n\treturn { setup, setupData, verify, disable, regenerateBackupCodes, isLoading, error };\n}\n","import type {\n\tAuthClient,\n\tIUpdatePreferencesInput,\n\tIUpdateProfileInput,\n\tIUserDTO,\n} from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseProfileReturn {\n\tuser: Ref<IUserDTO | null>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tupdateProfile: (input: IUpdateProfileInput) => Promise<IUserDTO>;\n\tupdatePreferences: (input: IUpdatePreferencesInput) => Promise<IUserDTO>;\n\t// Email/phone changes re-fetch the profile (their endpoints don't return it).\n\tupdateEmail: (email: string) => Promise<void>;\n\tupdatePhone: (phone: string) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n}\n\nexport function useProfile(client?: AuthClient): IUseProfileReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useProfile');\n\tconst user = ref<IUserDTO | null>(null);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getUser({ bust: opts?.force });\n\t\t\tuser.value = result.user;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function mutate<T>(op: () => Promise<T>): Promise<T> {\n\t\terror.value = null;\n\t\ttry {\n\t\t\treturn await op();\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t}\n\t}\n\n\tfunction updateProfile(input: IUpdateProfileInput) {\n\t\treturn mutate(async () => {\n\t\t\tconst { result } = await auth.updateProfile(input);\n\t\t\tuser.value = result.user;\n\t\t\treturn result.user;\n\t\t});\n\t}\n\n\tfunction updatePreferences(input: IUpdatePreferencesInput) {\n\t\treturn mutate(async () => {\n\t\t\tconst { result } = await auth.updatePreferences(input);\n\t\t\tuser.value = result.user;\n\t\t\treturn result.user;\n\t\t});\n\t}\n\n\tfunction updateEmail(email: string) {\n\t\treturn mutate(async () => {\n\t\t\tawait auth.updateEmail(email);\n\t\t\tawait refresh();\n\t\t});\n\t}\n\n\tfunction updatePhone(phone: string) {\n\t\treturn mutate(async () => {\n\t\t\tawait auth.updatePhone(phone);\n\t\t\tawait refresh();\n\t\t});\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { user, refresh, updateProfile, updatePreferences, updateEmail, updatePhone, isLoading, error };\n}\n","import type { AuthClient, IRegisterInput, IRegisterResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { persistToken } from '../storage';\n\nexport interface IUseRegisterReturn {\n\tregister: (input: IRegisterInput) => Promise<IRegisterResult>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<IRegisterResult | null>;\n}\n\nexport function useRegister(client?: AuthClient): IUseRegisterReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useRegister');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<IRegisterResult | null>(null);\n\n\tasync function register(input: IRegisterInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.register(input);\n\t\t\tauth.setAccessToken(result.tokens.access);\n\t\t\tpersistToken(result.tokens.access);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { register, isLoading, error, data };\n}\n","import type { AuthClient, IResetPasswordInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseResetPasswordReturn {\n\tresetPassword: (input: IResetPasswordInput) => Promise<void>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdone: Ref<boolean>;\n}\n\nexport function useResetPassword(client?: AuthClient): IUseResetPasswordReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useResetPassword');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst done = ref(false);\n\n\tasync function resetPassword(input: IResetPasswordInput) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.resetPassword(input);\n\t\t\tdone.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { resetPassword, isLoading, error, done };\n}\n","import type { AuthClient, IUserDTO } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\nimport { clearToken, readToken } from '../storage';\n\nexport interface IUseSessionReturn {\n\tuser: Ref<IUserDTO | null>;\n\tisLoading: Ref<boolean>;\n\tisAuthenticated: Ref<boolean>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tlogout: (refreshToken?: string) => Promise<void>;\n}\n\nexport function useSession(client?: AuthClient): IUseSessionReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useSession');\n\tconst user = ref<IUserDTO | null>(null);\n\tconst isLoading = ref(true);\n\tconst isAuthenticated = ref(false);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tconst { result } = await auth.getUser({ bust: opts?.force });\n\t\t\tuser.value = result.user;\n\t\t\tisAuthenticated.value = true;\n\t\t} catch {\n\t\t\tuser.value = null;\n\t\t\tisAuthenticated.value = false;\n\t\t\tauth.setAccessToken(undefined);\n\t\t\tclearToken();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function logout(refreshToken?: string) {\n\t\ttry {\n\t\t\tawait auth.logout(refreshToken);\n\t\t} catch {\n\t\t\t// Session is being torn down regardless of server response.\n\t\t}\n\t\tauth.setAccessToken(undefined);\n\t\tclearToken();\n\t\tuser.value = null;\n\t\tisAuthenticated.value = false;\n\t}\n\n\tconst token = readToken();\n\tif (token) auth.setAccessToken(token);\n\tonMounted(() => void refresh());\n\n\treturn { user, isLoading, isAuthenticated, refresh, logout };\n}\n","import type { AuthClient, ILoginEventDTO, IGetLoginHistoryInput } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseLoginHistoryReturn {\n\tevents: Ref<ILoginEventDTO[]>;\n\tisLoading: Ref<boolean>;\n\tisLoadingMore: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\thasMore: Ref<boolean>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\tloadMore: () => Promise<void>;\n}\n\n// The caller's own login attempts, newest first, keyset-paginated. Same contract\n// as react-auth's useLoginHistory (and vue-audit's useAuditEvents). Unlike React,\n// a composable body runs once, so filters need no memoization — they're captured\n// at call time.\nexport function useLoginHistory(rawFilters?: IGetLoginHistoryInput): IUseLoginHistoryReturn;\nexport function useLoginHistory(\n\tclient: AuthClient | undefined,\n\trawFilters?: IGetLoginHistoryInput,\n): IUseLoginHistoryReturn;\nexport function useLoginHistory(\n\tclientOrFilters?: AuthClient | IGetLoginHistoryInput,\n\tmaybeFilters?: IGetLoginHistoryInput,\n): IUseLoginHistoryReturn {\n\t// The AuthClient isn't reliably an instanceof across bundle boundaries, so\n\t// detect the client arg structurally (it has getLoginHistory) rather than\n\t// by prototype.\n\tconst firstIsClient =\n\t\tclientOrFilters === undefined ||\n\t\ttypeof (clientOrFilters as AuthClient).getLoginHistory === 'function';\n\tconst explicit = firstIsClient ? (clientOrFilters as AuthClient | undefined) : undefined;\n\tconst filters = (firstIsClient ? maybeFilters : (clientOrFilters as IGetLoginHistoryInput)) ?? {};\n\tconst auth = useFonderieSubClient(explicit, (c) => c.auth, 'useLoginHistory');\n\n\tconst events = ref<ILoginEventDTO[]>([]);\n\tconst isLoading = ref(true);\n\tconst isLoadingMore = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst hasMore = ref(false);\n\tlet cursor: string | null = null;\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getLoginHistory(filters, { bust: opts?.force });\n\t\t\tevents.value = result.events;\n\t\t\tcursor = result.nextCursor;\n\t\t\thasMore.value = result.nextCursor !== null;\n\t\t} catch (err) {\n\t\t\terror.value =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function loadMore() {\n\t\tif (!cursor || isLoadingMore.value) return;\n\t\tisLoadingMore.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.getLoginHistory({ ...filters, cursor });\n\t\t\tevents.value = [...events.value, ...result.events];\n\t\t\tcursor = result.nextCursor;\n\t\t\thasMore.value = result.nextCursor !== null;\n\t\t} catch (err) {\n\t\t\terror.value =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t} finally {\n\t\t\tisLoadingMore.value = false;\n\t\t}\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { events, isLoading, isLoadingMore, error, hasMore, refresh, loadMore };\n}\n","import type { AuthClient, ISessionDTO } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseSessionsReturn {\n\tsessions: Ref<ISessionDTO[]>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\trefresh: (opts?: { force?: boolean }) => Promise<void>;\n\t// Revoke one session. Optimistically removes it; refetches on failure.\n\tterminate: (id: string) => Promise<void>;\n\t// Revoke every session except the current one.\n\tterminateOthers: () => Promise<void>;\n}\n\nfunction toApiError(err: unknown): FonderieApiError {\n\treturn err instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n}\n\n// The caller's live sessions (one flagged `current`) plus the terminate actions.\n// Same contract as react-auth's useSessions.\nexport function useSessions(client?: AuthClient): IUseSessionsReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useSessions');\n\tconst sessions = ref<ISessionDTO[]>([]);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | null>(null);\n\n\tasync function refresh(opts?: { force?: boolean }) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.listSessions({ bust: opts?.force });\n\t\t\tsessions.value = result.sessions;\n\t\t} catch (err) {\n\t\t\terror.value = toApiError(err);\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function terminate(id: string) {\n\t\tconst prev = sessions.value;\n\t\tsessions.value = prev.filter((row) => row.id !== id); // optimistic\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.terminateSession(id);\n\t\t} catch (err) {\n\t\t\tsessions.value = prev; // roll back the optimistic removal\n\t\t\terror.value = toApiError(err);\n\t\t\tthrow toApiError(err);\n\t\t}\n\t}\n\n\tasync function terminateOthers() {\n\t\terror.value = null;\n\t\ttry {\n\t\t\tawait auth.terminateOtherSessions();\n\t\t\t// The server is the source of truth for which survived — refetch (force)\n\t\t\t// rather than trust a local \"keep current\" guess.\n\t\t\tawait refresh({ force: true });\n\t\t} catch (err) {\n\t\t\terror.value = toApiError(err);\n\t\t\tthrow toApiError(err);\n\t\t}\n\t}\n\n\tonMounted(() => void refresh());\n\n\treturn { sessions, isLoading, error, refresh, terminate, terminateOthers };\n}\n","import type { AuthClient, IVerifyEmailResult } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseVerifyEmailReturn {\n\tverifyEmail: (pin: string) => Promise<IVerifyEmailResult>;\n\tresend: () => Promise<void>;\n\tresent: Ref<boolean>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\tdata: Ref<IVerifyEmailResult | null>;\n}\n\nexport function useVerifyEmail(client?: AuthClient): IUseVerifyEmailReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useVerifyEmail');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst data = ref<IVerifyEmailResult | null>(null);\n\tconst resent = ref(false);\n\n\t// Re-sends the verification email — the other half of the same lifecycle,\n\t// so one composable owns both and screens don't split loading/error handling.\n\tasync function resend() {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\tresent.value = false;\n\t\ttry {\n\t\t\tawait auth.sendVerificationEmail();\n\t\t\tresent.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\tasync function verifyEmail(pin: string) {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\ttry {\n\t\t\tconst { result } = await auth.verifyEmail(pin);\n\t\t\tdata.value = result;\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t}\n\n\treturn { verifyEmail, resend, resent, isLoading, error, data };\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { onMounted, ref } from 'vue';\n\nexport interface IUseAuthProvidersReturn {\n\t/** Sign-in methods this deployment can honour, e.g. ['email','google']. */\n\tproviders: Ref<string[]>;\n\t/** The common case: should this button be rendered at all? */\n\thas: (provider: string) => boolean;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | Error | null>;\n\trefresh: () => Promise<void>;\n}\n\n// Ask the API which sign-in methods it can honour, and render buttons from\n// that — never from a build-time flag. A flag stores the same fact the API\n// already holds and lets the two disagree; the failure is a user committing to\n// a redirect and landing on the provider's error page, which this app cannot\n// explain. Same contract as react-auth's useAuthProviders.\n//\n// Starts EMPTY rather than optimistic: a brief moment with no social buttons is\n// invisible, a button that appears and then fails is not.\nexport function useAuthProviders(client?: AuthClient): IUseAuthProvidersReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useAuthProviders');\n\tconst providers = ref<string[]>([]);\n\tconst isLoading = ref(true);\n\tconst error = ref<FonderieApiError | Error | null>(null);\n\n\tconst refresh = async (): Promise<void> => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tconst { result } = await auth.providers();\n\t\t\tproviders.value = result.providers;\n\t\t\terror.value = null;\n\t\t} catch (err) {\n\t\t\t// Degrade to email-only rather than guessing: an unreachable API is\n\t\t\t// not evidence that a provider works.\n\t\t\tproviders.value = [];\n\t\t\terror.value = err instanceof Error ? err : new Error(String(err));\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\tonMounted(() => {\n\t\tvoid refresh();\n\t});\n\n\treturn {\n\t\tproviders,\n\t\thas: (provider: string) => providers.value.includes(provider),\n\t\tisLoading,\n\t\terror,\n\t\trefresh,\n\t};\n}\n","import type { AuthClient } from '@fonderie/client';\nimport { FonderieApiError } from '@fonderie/client';\nimport { useFonderieSubClient } from '@fonderie/vue';\nimport type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport interface IUseUnlinkOauthReturn {\n\tunlinkOauth: (provider: string) => Promise<void>;\n\tunlinked: Ref<boolean>;\n\tisLoading: Ref<boolean>;\n\terror: Ref<FonderieApiError | null>;\n\t// True when the server refused because the account has no password — the one\n\t// failure a settings screen should handle rather than just display, by\n\t// sending the user to set a password first. A flag so screens don't have to\n\t// match on the error's reason string.\n\trequiresPassword: Ref<boolean>;\n}\n\n/**\n * Remove the OAuth provider linked to the signed-in account.\n *\n * Prefer gating the control on `user.hasPassword` so the case is never reached:\n * an account created BY the provider has no other credential, and unlinking it\n * would be account deletion. The server refuses regardless (409), which is what\n * `requiresPassword` reports.\n */\nexport function useUnlinkOauth(client?: AuthClient): IUseUnlinkOauthReturn {\n\tconst auth = useFonderieSubClient(client, (c) => c.auth, 'useUnlinkOauth');\n\tconst isLoading = ref(false);\n\tconst error = ref<FonderieApiError | null>(null);\n\tconst unlinked = ref(false);\n\tconst requiresPassword = ref(false);\n\n\tconst unlinkOauth = async (provider: string): Promise<void> => {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\t\trequiresPassword.value = false;\n\t\ttry {\n\t\t\tawait auth.unlinkOauth(provider);\n\t\t\tunlinked.value = true;\n\t\t} catch (err) {\n\t\t\tconst apiError =\n\t\t\t\terr instanceof FonderieApiError ? err : new FonderieApiError('unknown', String(err), 0);\n\t\t\terror.value = apiError;\n\t\t\trequiresPassword.value = apiError.reason === 'PASSWORD_REQUIRED';\n\t\t\tthrow apiError;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\treturn { unlinkOauth, unlinked, isLoading, error, requiresPassword };\n}\n"],"mappings":"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","names":["FonderieApiError","isMfaRequired","FonderieApiError","useFonderieSubClient","ref","FonderieApiError","useFonderieSubClient","ref","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","ref","FonderieApiError","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","ref","FonderieApiError","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","ref","FonderieApiError","FonderieApiError","useFonderieSubClient","ref","FonderieApiError","useFonderieSubClient","ref","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","ref","FonderieApiError","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","onMounted","ref","useFonderieSubClient","ref","onMounted","FonderieApiError","useFonderieSubClient","onMounted","ref","FonderieApiError","useFonderieSubClient","onMounted","ref","FonderieApiError","useFonderieSubClient","ref","useFonderieSubClient","onMounted","ref","FonderieApiError","useFonderieSubClient","ref"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fonderie/vue-auth",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "Vue composables for Fonderie auth \u2014 thin bindings over @fonderie/client.",
5
5
  "keywords": [
6
6
  "fonderiejs",
@@ -41,11 +41,11 @@
41
41
  "vue": ">=3.3.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@types/node": "^26.4.1",
44
+ "@types/node": "^26.6.1",
45
45
  "tsup": "^8.5.1",
46
46
  "tsx": "^4.23.13",
47
47
  "typescript": "^6.0.3",
48
- "vue": "^3.5.42"
48
+ "vue": "^3.5.43"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public"