@bettercone/ui
Version:
Comprehensive Better Auth components: authentication, security, organizations, billing, team management, and usage analytics for React
1,534 lines (1,519 loc) • 163 kB
text/typescript
import { ClassValue } from 'clsx';
import * as react_jsx_runtime from 'react/jsx-runtime';
import * as class_variance_authority_types from 'class-variance-authority/types';
import * as React$1 from 'react';
import { ComponentProps, ReactNode, ComponentType } from 'react';
import { VariantProps } from 'class-variance-authority';
import * as ProgressPrimitive from '@radix-ui/react-progress';
import * as SeparatorPrimitive from '@radix-ui/react-separator';
import * as AvatarPrimitive from '@radix-ui/react-avatar';
import * as RechartsPrimitive from 'recharts';
import * as DialogPrimitive from '@radix-ui/react-dialog';
import { Session, User as User$1, Account } from 'better-auth';
import { Organization, Member } from 'better-auth/plugins/organization';
import { BetterFetchError } from '@better-fetch/fetch';
declare const authLocalization: {
INVALID_USERNAME_OR_PASSWORD: string;
EMAIL_NOT_VERIFIED: string;
UNEXPECTED_ERROR: string;
USERNAME_IS_ALREADY_TAKEN: string;
USERNAME_TOO_SHORT: string;
USERNAME_TOO_LONG: string;
INVALID_USERNAME: string;
OTP_NOT_ENABLED: string;
OTP_HAS_EXPIRED: string;
TOTP_NOT_ENABLED: string;
TWO_FACTOR_NOT_ENABLED: string;
BACKUP_CODES_NOT_ENABLED: string;
INVALID_BACKUP_CODE: string;
INVALID_CODE: string;
TOO_MANY_ATTEMPTS_REQUEST_NEW_CODE: string;
INVALID_TWO_FACTOR_COOKIE: string;
SUBSCRIPTION_NOT_FOUND: string;
SUBSCRIPTION_PLAN_NOT_FOUND: string;
ALREADY_SUBSCRIBED_PLAN: string;
UNABLE_TO_CREATE_CUSTOMER: string;
FAILED_TO_FETCH_PLANS: string;
EMAIL_VERIFICATION_REQUIRED: string;
SUBSCRIPTION_NOT_ACTIVE: string;
SUBSCRIPTION_NOT_SCHEDULED_FOR_CANCELLATION: string;
INVALID_PHONE_NUMBER: string;
PHONE_NUMBER_EXIST: string;
INVALID_PHONE_NUMBER_OR_PASSWORD: string;
OTP_NOT_FOUND: string;
OTP_EXPIRED: string;
INVALID_OTP: string;
PHONE_NUMBER_NOT_VERIFIED: string;
CHALLENGE_NOT_FOUND: string;
YOU_ARE_NOT_ALLOWED_TO_REGISTER_THIS_PASSKEY: string;
FAILED_TO_VERIFY_REGISTRATION: string;
PASSKEY_NOT_FOUND: string;
AUTHENTICATION_FAILED: string;
UNABLE_TO_CREATE_SESSION: string;
FAILED_TO_UPDATE_PASSKEY: string;
YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION: string;
YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS: string;
ORGANIZATION_ALREADY_EXISTS: string;
ORGANIZATION_NOT_FOUND: string;
USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION: string;
YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION: string;
YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION: string;
NO_ACTIVE_ORGANIZATION: string;
USER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION: string;
MEMBER_NOT_FOUND: string;
ROLE_NOT_FOUND: string;
YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_TEAM: string;
TEAM_ALREADY_EXISTS: string;
TEAM_NOT_FOUND: string;
YOU_CANNOT_LEAVE_THE_ORGANIZATION_AS_THE_ONLY_OWNER: string;
YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_MEMBER: string;
YOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION: string;
USER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION: string;
INVITATION_NOT_FOUND: string;
YOU_ARE_NOT_THE_RECIPIENT_OF_THE_INVITATION: string;
YOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION: string;
INVITER_IS_NO_LONGER_A_MEMBER_OF_THE_ORGANIZATION: string;
YOU_ARE_NOT_ALLOWED_TO_INVITE_USER_WITH_THIS_ROLE: string;
FAILED_TO_RETRIEVE_INVITATION: string;
YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_TEAMS: string;
UNABLE_TO_REMOVE_LAST_TEAM: string;
YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_MEMBER: string;
ORGANIZATION_MEMBERSHIP_LIMIT_REACHED: string;
YOU_ARE_NOT_ALLOWED_TO_CREATE_TEAMS_IN_THIS_ORGANIZATION: string;
YOU_ARE_NOT_ALLOWED_TO_DELETE_TEAMS_IN_THIS_ORGANIZATION: string;
YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_TEAM: string;
YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_TEAM: string;
INVITATION_LIMIT_REACHED: string;
INVALID_SESSION_TOKEN: string;
PASSWORD_COMPROMISED: string;
INVALID_OAUTH_CONFIGURATION: string;
INVALID_EMAIL: string;
USER_NOT_FOUND: string;
TOO_MANY_ATTEMPTS: string;
MISSING_SECRET_KEY: string;
SERVICE_UNAVAILABLE: string;
VERIFICATION_FAILED: string;
MISSING_RESPONSE: string;
UNKNOWN_ERROR: string;
INVALID_METADATA_TYPE: string;
REFILL_AMOUNT_AND_INTERVAL_REQUIRED: string;
REFILL_INTERVAL_AND_AMOUNT_REQUIRED: string;
USER_BANNED: string;
UNAUTHORIZED_SESSION: string;
KEY_NOT_FOUND: string;
KEY_DISABLED: string;
KEY_EXPIRED: string;
USAGE_EXCEEDED: string;
KEY_NOT_RECOVERABLE: string;
EXPIRES_IN_IS_TOO_SMALL: string;
EXPIRES_IN_IS_TOO_LARGE: string;
INVALID_REMAINING: string;
INVALID_PREFIX_LENGTH: string;
INVALID_NAME_LENGTH: string;
METADATA_DISABLED: string;
RATE_LIMIT_EXCEEDED: string;
NO_VALUES_TO_UPDATE: string;
KEY_DISABLED_EXPIRATION: string;
INVALID_API_KEY: string;
INVALID_USER_ID_FROM_API_KEY: string;
INVALID_API_KEY_GETTER_RETURN_TYPE: string;
SERVER_ONLY_PROPERTY: string;
FAILED_TO_CREATE_USER: string;
COULD_NOT_CREATE_SESSION: string;
ANONYMOUS_USERS_CANNOT_SIGN_IN_AGAIN_ANONYMOUSLY: string;
USER_ALREADY_EXISTS: string;
YOU_CANNOT_BAN_YOURSELF: string;
YOU_ARE_NOT_ALLOWED_TO_CHANGE_USERS_ROLE: string;
YOU_ARE_NOT_ALLOWED_TO_CREATE_USERS: string;
YOU_ARE_NOT_ALLOWED_TO_LIST_USERS: string;
YOU_ARE_NOT_ALLOWED_TO_LIST_USERS_SESSIONS: string;
YOU_ARE_NOT_ALLOWED_TO_BAN_USERS: string;
YOU_ARE_NOT_ALLOWED_TO_IMPERSONATE_USERS: string;
YOU_ARE_NOT_ALLOWED_TO_REVOKE_USERS_SESSIONS: string;
YOU_ARE_NOT_ALLOWED_TO_DELETE_USERS: string;
YOU_ARE_NOT_ALLOWED_TO_SET_USERS_PASSWORD: string;
BANNED_USER: string;
FAILED_TO_CREATE_SESSION: string;
FAILED_TO_UPDATE_USER: string;
FAILED_TO_GET_SESSION: string;
INVALID_PASSWORD: string;
INVALID_EMAIL_OR_PASSWORD: string;
SOCIAL_ACCOUNT_ALREADY_LINKED: string;
PROVIDER_NOT_FOUND: string;
INVALID_TOKEN: string;
ID_TOKEN_NOT_SUPPORTED: string;
FAILED_TO_GET_USER_INFO: string;
USER_EMAIL_NOT_FOUND: string;
PASSWORD_TOO_SHORT: string;
PASSWORD_TOO_LONG: string;
EMAIL_CAN_NOT_BE_UPDATED: string;
CREDENTIAL_ACCOUNT_NOT_FOUND: string;
SESSION_EXPIRED: string;
FAILED_TO_UNLINK_LAST_ACCOUNT: string;
ACCOUNT_NOT_FOUND: string;
USER_ALREADY_HAS_PASSWORD: string;
/** @default "App" */
APP: string;
/** @default "Account" */
ACCOUNT: string;
/** @default "Accounts" */
ACCOUNTS: string;
/** @default "Manage your currently signed in accounts." */
ACCOUNTS_DESCRIPTION: string;
/** @default "Sign in to an additional account." */
ACCOUNTS_INSTRUCTIONS: string;
/** @default "Add Account" */
ADD_ACCOUNT: string;
/** @default "Add Passkey" */
ADD_PASSKEY: string;
/** @default "Already have an account?" */
ALREADY_HAVE_AN_ACCOUNT: string;
/** @default "Avatar" */
AVATAR: string;
/** @default "Click on the avatar to upload a custom one from your files." */
AVATAR_DESCRIPTION: string;
/** @default "An avatar is optional but strongly recommended." */
AVATAR_INSTRUCTIONS: string;
/** @default "Backup code is required" */
BACKUP_CODE_REQUIRED: string;
/** @default "Backup Codes" */
BACKUP_CODES: string;
/** @default "Save these backup codes in a secure place. You can use them to access your account if you lose your two-factor authentication method." */
BACKUP_CODES_DESCRIPTION: string;
/** @default "Backup Code." */
BACKUP_CODE_PLACEHOLDER: string;
/** @default "Backup Code" */
BACKUP_CODE: string;
/** @default "Cancel" */
CANCEL: string;
/** @default "Change Password" */
CHANGE_PASSWORD: string;
/** @default "Enter your current password and a new password." */
CHANGE_PASSWORD_DESCRIPTION: string;
/** @default "Please use 8 characters at minimum." */
CHANGE_PASSWORD_INSTRUCTIONS: string;
/** @default "Your password has been changed." */
CHANGE_PASSWORD_SUCCESS: string;
/** @default "Confirm Password" */
CONFIRM_PASSWORD: string;
/** @default "Confirm Password" */
CONFIRM_PASSWORD_PLACEHOLDER: string;
/** @default "Confirm password is required" */
CONFIRM_PASSWORD_REQUIRED: string;
/** @default "Continue with Authenticator" */
CONTINUE_WITH_AUTHENTICATOR: string;
/** @default "Copied to clipboard" */
COPIED_TO_CLIPBOARD: string;
/** @default "Copy to clipboard" */
COPY_TO_CLIPBOARD: string;
/** @default "Copy all codes" */
COPY_ALL_CODES: string;
/** @default "Continue" */
CONTINUE: string;
/** @default "Loading..." */
LOADING: string;
/** @default "Current Password" */
CURRENT_PASSWORD: string;
/** @default "Current Password" */
CURRENT_PASSWORD_PLACEHOLDER: string;
/** @default "Current Session" */
CURRENT_SESSION: string;
/** @default "Delete" */
DELETE: string;
/** @default "Delete Avatar" */
DELETE_AVATAR: string;
/** @default "Delete Account" */
DELETE_ACCOUNT: string;
/** @default "Permanently remove your account and all of its contents. This action is not reversible, so please continue with caution." */
DELETE_ACCOUNT_DESCRIPTION: string;
/** @default "Please confirm the deletion of your account. This action is not reversible, so please continue with caution." */
DELETE_ACCOUNT_INSTRUCTIONS: string;
/** @default "Please check your email to verify the deletion of your account." */
DELETE_ACCOUNT_VERIFY: string;
/** @default "Your account has been deleted." */
DELETE_ACCOUNT_SUCCESS: string;
/** @default "Disable Two-Factor" */
DISABLE_TWO_FACTOR: string;
/** @default "Choose a provider to login to your account" */
DISABLED_CREDENTIALS_DESCRIPTION: string;
/** @default "Don't have an account?" */
DONT_HAVE_AN_ACCOUNT: string;
/** @default "Done" */
DONE: string;
/** @default "Email" */
EMAIL: string;
/** @default "Enter the email address you want to use to log in." */
EMAIL_DESCRIPTION: string;
/** @default "Please enter a valid email address." */
EMAIL_INSTRUCTIONS: string;
/** @default "Email is the same" */
EMAIL_IS_THE_SAME: string;
/** @default "m@example.com" */
EMAIL_PLACEHOLDER: string;
/** @default "Email address is required" */
EMAIL_REQUIRED: string;
/** @default "Please check your email to verify the change." */
EMAIL_VERIFY_CHANGE: string;
/** @default "Please check your email for the verification link." */
EMAIL_VERIFICATION: string;
/** @default "Enable Two-Factor" */
ENABLE_TWO_FACTOR: string;
/** @default "is invalid" */
IS_INVALID: string;
/** @default "is required" */
IS_REQUIRED: string;
/** @default "is the same" */
IS_THE_SAME: string;
/** @default "Forgot authenticator?" */
FORGOT_AUTHENTICATOR: string;
/** @default "Forgot Password" */
FORGOT_PASSWORD: string;
/** @default "Send reset link" */
FORGOT_PASSWORD_ACTION: string;
/** @default "Enter your email to reset your password" */
FORGOT_PASSWORD_DESCRIPTION: string;
/** @default "Check your email for the password reset link." */
FORGOT_PASSWORD_EMAIL: string;
/** @default "Forgot your password?" */
FORGOT_PASSWORD_LINK: string;
/** @default "Link" */
LINK: string;
/** @default "Magic Link" */
MAGIC_LINK: string;
/** @default "Send magic link" */
MAGIC_LINK_ACTION: string;
/** @default "Enter your email to receive a magic link" */
MAGIC_LINK_DESCRIPTION: string;
/** @default "Check your email for the magic link" */
MAGIC_LINK_EMAIL: string;
/** @default "Email Code" */
EMAIL_OTP: string;
/** @default "Send code" */
EMAIL_OTP_SEND_ACTION: string;
/** @default "Verify code" */
EMAIL_OTP_VERIFY_ACTION: string;
/** @default "Enter your email to receive a code" */
EMAIL_OTP_DESCRIPTION: string;
/** @default "Please check your email for the verification code." */
EMAIL_OTP_VERIFICATION_SENT: string;
/** @default "Name" */
NAME: string;
/** @default "Please enter your full name, or a display name." */
NAME_DESCRIPTION: string;
/** @default "Please use 32 characters at maximum." */
NAME_INSTRUCTIONS: string;
/** @default "Name" */
NAME_PLACEHOLDER: string;
/** @default "New Password" */
NEW_PASSWORD: string;
/** @default "New Password" */
NEW_PASSWORD_PLACEHOLDER: string;
/** @default "New password is required" */
NEW_PASSWORD_REQUIRED: string;
/** @default "One-Time Password" */
ONE_TIME_PASSWORD: string;
/** @default "Or continue with" */
OR_CONTINUE_WITH: string;
/** @default "Passkey" */
PASSKEY: string;
/** @default "Passkeys" */
PASSKEYS: string;
/** @default "Manage your passkeys for secure access." */
PASSKEYS_DESCRIPTION: string;
/** @default "Securely access your account without a password." */
PASSKEYS_INSTRUCTIONS: string;
/** @default "Personal Account" */
PERSONAL_ACCOUNT: string;
/** @default "API Keys" */
API_KEYS: string;
/** @default "Manage your API keys for secure access." */
API_KEYS_DESCRIPTION: string;
/** @default "Generate API keys to access your account programmatically." */
API_KEYS_INSTRUCTIONS: string;
/** @default "Create API Key" */
CREATE_API_KEY: string;
/** @default "Enter a unique name for your API key to differentiate it from other keys." */
CREATE_API_KEY_DESCRIPTION: string;
/** @default "New API Key" */
API_KEY_NAME_PLACEHOLDER: string;
/** @default "API Key Created" */
API_KEY_CREATED: string;
/** @default "Please copy your API key and store it in a safe place. For security reasons we cannot show it again." */
CREATE_API_KEY_SUCCESS: string;
/** @default "Never Expires" */
NEVER_EXPIRES: string;
/** @default "Expires" */
EXPIRES: string;
/** @default "No Expiration" */
NO_EXPIRATION: string;
/** @default "Create Organization" */
CREATE_ORGANIZATION: string;
/** @default "Organization" */
ORGANIZATION: string;
/** @default "Name" */
ORGANIZATION_NAME: string;
/** @default "Acme Inc." */
ORGANIZATION_NAME_PLACEHOLDER: string;
/** @default "This is your organization's visible name." */
ORGANIZATION_NAME_DESCRIPTION: string;
/** @default "Please use 32 characters at maximum." */
ORGANIZATION_NAME_INSTRUCTIONS: string;
/** @default "Slug URL" */
ORGANIZATION_SLUG: string;
/** @default "This is your organization's URL namespace." */
ORGANIZATION_SLUG_DESCRIPTION: string;
/** @default "Please use 48 characters at maximum." */
ORGANIZATION_SLUG_INSTRUCTIONS: string;
/** @default "acme-inc" */
ORGANIZATION_SLUG_PLACEHOLDER: string;
/** @default "Organization created successfully" */
CREATE_ORGANIZATION_SUCCESS: string;
/** @default "Password" */
PASSWORD: string;
/** @default "Password" */
PASSWORD_PLACEHOLDER: string;
/** @default "Password is required" */
PASSWORD_REQUIRED: string;
/** @default "Passwords do not match" */
PASSWORDS_DO_NOT_MATCH: string;
/** @default "Providers" */
PROVIDERS: string;
/** @default "Connect your account with a third-party service." */
PROVIDERS_DESCRIPTION: string;
/** @default "Recover Account" */
RECOVER_ACCOUNT: string;
/** @default "Recover account" */
RECOVER_ACCOUNT_ACTION: string;
/** @default "Please enter a backup code to access your account" */
RECOVER_ACCOUNT_DESCRIPTION: string;
/** @default "Remember me" */
REMEMBER_ME: string;
/** @default "Resend code" */
RESEND_CODE: string;
/** @default "Resend verification email" */
RESEND_VERIFICATION_EMAIL: string;
/** @default "Reset Password" */
RESET_PASSWORD: string;
/** @default "Save new password" */
RESET_PASSWORD_ACTION: string;
/** @default "Enter your new password below" */
RESET_PASSWORD_DESCRIPTION: string;
/** @default "Password reset successfully" */
RESET_PASSWORD_SUCCESS: string;
/** @default "Request failed" */
REQUEST_FAILED: string;
/** @default "Revoke" */
REVOKE: string;
/** @default "Delete API Key" */
DELETE_API_KEY: string;
/** @default "Are you sure you want to delete this API key?" */
DELETE_API_KEY_CONFIRM: string;
/** @default "API Key" */
API_KEY: string;
/** @default "Sign In" */
SIGN_IN: string;
/** @default "Login" */
SIGN_IN_ACTION: string;
/** @default "Enter your email below to login to your account" */
SIGN_IN_DESCRIPTION: string;
/** @default "Enter your username or email below to login to your account" */
SIGN_IN_USERNAME_DESCRIPTION: string;
/** @default "Sign in with" */
SIGN_IN_WITH: string;
/** @default "Sign in anonymously" */
SIGN_IN_ANONYMOUSLY: string;
/** @default "Continue as guest" */
ANONYMOUS_SIGN_IN: string;
/** @default "Sign in with Ethereum" */
SIGN_IN_WITH_ETHEREUM: string;
/** @default "Connect your Ethereum wallet" */
SIWE_SIGN_IN: string;
/** @default "Sign Out" */
SIGN_OUT: string;
/** @default "Sign Up" */
SIGN_UP: string;
/** @default "Create an account" */
SIGN_UP_ACTION: string;
/** @default "Enter your information to create an account" */
SIGN_UP_DESCRIPTION: string;
/** @default "Check your email for the verification link." */
SIGN_UP_EMAIL: string;
/** @default "Sessions" */
SESSIONS: string;
/** @default "Manage your active sessions and revoke access." */
SESSIONS_DESCRIPTION: string;
/** @default "Set Password" */
SET_PASSWORD: string;
/** @default "Click the button below to receive an email to set up a password for your account." */
SET_PASSWORD_DESCRIPTION: string;
/** @default "Settings" */
SETTINGS: string;
/** @default "Save" */
SAVE: string;
/** @default "Security" */
SECURITY: string;
/** @default "Switch Account" */
SWITCH_ACCOUNT: string;
/** @default "Trust this device" */
TRUST_DEVICE: string;
/** @default "Two-Factor" */
TWO_FACTOR: string;
/** @default "Verify code" */
TWO_FACTOR_ACTION: string;
/** @default "Please enter your one-time password to continue" */
TWO_FACTOR_DESCRIPTION: string;
/** @default "Add an extra layer of security to your account." */
TWO_FACTOR_CARD_DESCRIPTION: string;
/** @default "Please enter your password to disable 2FA." */
TWO_FACTOR_DISABLE_INSTRUCTIONS: string;
/** @default "Please enter your password to enable 2FA" */
TWO_FACTOR_ENABLE_INSTRUCTIONS: string;
/** @default "Two-factor authentication has been enabled" */
TWO_FACTOR_ENABLED: string;
/** @default "Two-Factor Authentication has been disabled" */
TWO_FACTOR_DISABLED: string;
/** @default "Two-Factor Authentication" */
TWO_FACTOR_PROMPT: string;
/** @default "Scan the QR Code with your Authenticator" */
TWO_FACTOR_TOTP_LABEL: string;
/** @default "Send verification code" */
SEND_VERIFICATION_CODE: string;
/** @default "Unlink" */
UNLINK: string;
/** @default "Updated successfully" */
UPDATED_SUCCESSFULLY: string;
/** @default "Username" */
USERNAME: string;
/** @default "Enter the username you want to use to log in." */
USERNAME_DESCRIPTION: string;
/** @default "Please use 32 characters at maximum." */
USERNAME_INSTRUCTIONS: string;
/** @default "Username" */
USERNAME_PLACEHOLDER: string;
/** @default "Username or email" */
SIGN_IN_USERNAME_PLACEHOLDER: string;
/** @default "Verify Your Email" */
VERIFY_YOUR_EMAIL: string;
/** @default "Please verify your email address. Check your inbox for the verification email. If you haven't received the email, click the button below to resend." */
VERIFY_YOUR_EMAIL_DESCRIPTION: string;
/** @default "Go back" */
GO_BACK: string;
/** @default "Your session is not fresh. Please sign in again." */
SESSION_NOT_FRESH: string;
/** @default "Upload Avatar" */
UPLOAD_AVATAR: string;
/** @default "Logo" */
LOGO: string;
/** @default "Click on the logo to upload a custom one from your files." */
LOGO_DESCRIPTION: string;
/** @default "A logo is optional but strongly recommended." */
LOGO_INSTRUCTIONS: string;
/** @default "Upload" */
UPLOAD: string;
/** @default "Upload Logo" */
UPLOAD_LOGO: string;
/** @default "Delete Logo" */
DELETE_LOGO: string;
/** @default "Privacy Policy" */
PRIVACY_POLICY: string;
/** @default "Terms of Service" */
TERMS_OF_SERVICE: string;
/** @default "This site is protected by reCAPTCHA." */
PROTECTED_BY_RECAPTCHA: string;
/** @default "By continuing, you agree to the" */
BY_CONTINUING_YOU_AGREE: string;
/** @default "User" */
USER: string;
/** @default "Organizations" */
ORGANIZATIONS: string;
/** @default "Manage your organizations and memberships." */
ORGANIZATIONS_DESCRIPTION: string;
/** @default "Create an organization to collaborate with other users." */
ORGANIZATIONS_INSTRUCTIONS: string;
/** @default "Leave Organization" */
LEAVE_ORGANIZATION: string;
/** @default "Are you sure you want to leave this organization?" */
LEAVE_ORGANIZATION_CONFIRM: string;
/** @default "You have successfully left the organization." */
LEAVE_ORGANIZATION_SUCCESS: string;
/** @default "Manage Organization" */
MANAGE_ORGANIZATION: string;
/** @default "Remove Member" */
REMOVE_MEMBER: string;
/** @default "Are you sure you want to remove this member from the organization?" */
REMOVE_MEMBER_CONFIRM: string;
/** @default "Member removed successfully" */
REMOVE_MEMBER_SUCCESS: string;
/** @default "Invite Member" */
INVITE_MEMBER: string;
/** @default "Members" */
MEMBERS: string;
/** @default "Add or remove members and manage their roles." */
MEMBERS_DESCRIPTION: string;
/** @default "Invite new members to your organization." */
MEMBERS_INSTRUCTIONS: string;
/** @default "Send an invitation to add a new member to your organization." */
INVITE_MEMBER_DESCRIPTION: string;
/** @default "Role" */
ROLE: string;
/** @default "Select a role" */
SELECT_ROLE: string;
/** @default "Admin" */
ADMIN: string;
/** @default "Member" */
MEMBER: string;
/** @default "Guest" */
GUEST: string;
/** @default "Owner" */
OWNER: string;
/** @default "Update the role for this member" */
UPDATE_ROLE_DESCRIPTION: string;
/** @default "Update Role" */
UPDATE_ROLE: string;
/** @default "Member role updated successfully" */
MEMBER_ROLE_UPDATED: string;
/** @default "Send Invitation" */
SEND_INVITATION: string;
/** @default "Invitation sent successfully" */
SEND_INVITATION_SUCCESS: string;
/** @default "Pending Invitations" */
PENDING_INVITATIONS: string;
/** @default "Manage pending invitations to your organization." */
PENDING_INVITATIONS_DESCRIPTION: string;
/** @default "Invitations you've received from organizations." */
PENDING_USER_INVITATIONS_DESCRIPTION: string;
/** @default "Cancel Invitation" */
CANCEL_INVITATION: string;
/** @default "Invitation cancelled successfully" */
INVITATION_CANCELLED: string;
/** @default "Accept Invitation" */
ACCEPT_INVITATION: string;
/** @default "You have been invited to join an organization." */
ACCEPT_INVITATION_DESCRIPTION: string;
/** @default "Invitation accepted successfully" */
INVITATION_ACCEPTED: string;
/** @default "Invitation rejected successfully" */
INVITATION_REJECTED: string;
/** @default "Accept" */
ACCEPT: string;
/** @default "Reject" */
REJECT: string;
/** @default "This invitation has expired" */
INVITATION_EXPIRED: string;
/** @default "Delete Organization" */
DELETE_ORGANIZATION: string;
/** @default "Permanently remove your organization and all of its contents. This action is not reversible — please continue with caution." */
DELETE_ORGANIZATION_DESCRIPTION: string;
/** @default "Organization deleted successfully" */
DELETE_ORGANIZATION_SUCCESS: string;
/** @default "Enter the organization slug to continue:" */
DELETE_ORGANIZATION_INSTRUCTIONS: string;
/** @default "Organization slug is required" */
SLUG_REQUIRED: string;
/** @default "The slug does not match" */
SLUG_DOES_NOT_MATCH: string;
/** @default "Unknown" */
UNKNOWN: string;
/** @default "Enter Your Device Code" */
DEVICE_AUTH_TITLE: string;
/** @default "Enter the code shown on your device to continue." */
DEVICE_AUTH_DESCRIPTION: string;
/** @default "Device Code" */
DEVICE_CODE_LABEL: string;
/** @default "ABCD-1234" */
DEVICE_CODE_PLACEHOLDER: string;
/** @default "Please enter a valid device code" */
DEVICE_CODE_REQUIRED: string;
/** @default "Invalid or expired code" */
DEVICE_CODE_INVALID: string;
/** @default "Auth client not configured" */
DEVICE_CODE_NO_CLIENT: string;
/** @default "Format: XXXX-XXXX" */
DEVICE_CODE_FORMAT: string;
/** @default "Continue" */
DEVICE_AUTH_SUBMIT: string;
/** @default "Device Authorization Request" */
DEVICE_APPROVAL_TITLE: string;
/** @default "A device is requesting access to your account." */
DEVICE_APPROVAL_DESCRIPTION: string;
/** @default "Code" */
DEVICE_APPROVAL_CODE_LABEL: string;
/** @default "Application" */
DEVICE_APPROVAL_APP_LABEL: string;
/** @default "Requested Permissions" */
DEVICE_APPROVAL_SCOPES_LABEL: string;
/** @default "Approve" */
DEVICE_APPROVE_BUTTON: string;
/** @default "Deny" */
DEVICE_DENY_BUTTON: string;
/** @default "Device approved successfully" */
DEVICE_APPROVED_SUCCESS: string;
/** @default "Device denied" */
DEVICE_DENIED_SUCCESS: string;
/** @default "Failed to approve device" */
DEVICE_APPROVE_ERROR: string;
/** @default "Failed to deny device" */
DEVICE_DENY_ERROR: string;
/** @default "Only approve if you initiated this request on your device." */
DEVICE_APPROVAL_NOTICE: string;
/** @default "Sign In on Your Computer" */
DEVICE_DISPLAY_TITLE: string;
/** @default "Follow the steps below to complete authentication" */
DEVICE_DISPLAY_DESCRIPTION: string;
/** @default "Visit this URL:" */
DEVICE_DISPLAY_URL_LABEL: string;
/** @default "Enter this code:" */
DEVICE_DISPLAY_CODE_LABEL: string;
/** @default "Scan this QR code to authorize" */
DEVICE_SCAN_QR: string;
/** @default "or scan QR code" */
DEVICE_OR_SCAN_QR: string;
/** @default "Copy Code" */
DEVICE_COPY_CODE: string;
/** @default "Copied!" */
COPIED: string;
/** @default "Expires in" */
DEVICE_EXPIRES_IN: string;
/** @default "Checking for approval..." */
DEVICE_POLLING_STATUS: string;
/** @default "Approved! Redirecting..." */
DEVICE_APPROVED: string;
/** @default "Code expired. Please try again." */
DEVICE_EXPIRED: string;
/** @default "Access denied" */
DEVICE_ACCESS_DENIED: string;
/** @default "SSO Configuration" */
SSO_CONFIG: string;
/** @default "Configure SAML and OIDC single sign-on for your organization" */
SSO_CONFIG_DESCRIPTION: string;
/** @default "Provider Type" */
SSO_PROVIDER_TYPE: string;
/** @default "OIDC (OpenID Connect)" */
SSO_TYPE_OIDC: string;
/** @default "SAML 2.0" */
SSO_TYPE_SAML: string;
/** @default "Provider ID" */
SSO_PROVIDER_ID: string;
/** @default "Unique identifier for this SSO provider" */
SSO_PROVIDER_ID_DESCRIPTION: string;
/** @default "my-company-sso" */
SSO_PROVIDER_ID_PLACEHOLDER: string;
/** @default "Issuer" */
SSO_ISSUER: string;
/** @default "Identity provider issuer URL" */
SSO_ISSUER_DESCRIPTION: string;
/** @default "https://idp.example.com" */
SSO_ISSUER_PLACEHOLDER: string;
/** @default "Domain" */
SSO_DOMAIN: string;
/** @default "Email domain for automatic provider matching" */
SSO_DOMAIN_DESCRIPTION: string;
/** @default "example.com" */
SSO_DOMAIN_PLACEHOLDER: string;
/** @default "Organization" */
SSO_ORGANIZATION: string;
/** @default "Link to organization (optional)" */
SSO_ORGANIZATION_DESCRIPTION: string;
/** @default "OIDC Configuration" */
SSO_OIDC_CONFIG: string;
/** @default "Client ID" */
SSO_CLIENT_ID: string;
/** @default "Client Secret" */
SSO_CLIENT_SECRET: string;
/** @default "Authorization Endpoint" */
SSO_AUTH_ENDPOINT: string;
/** @default "Token Endpoint" */
SSO_TOKEN_ENDPOINT: string;
/** @default "JWKS Endpoint" */
SSO_JWKS_ENDPOINT: string;
/** @default "Discovery Endpoint" */
SSO_DISCOVERY_ENDPOINT: string;
/** @default "Scopes" */
SSO_SCOPES: string;
/** @default "openid email profile" */
SSO_SCOPES_PLACEHOLDER: string;
/** @default "Enable PKCE" */
SSO_PKCE_ENABLED: string;
/** @default "Use PKCE for additional security" */
SSO_PKCE_DESCRIPTION: string;
/** @default "SAML Configuration" */
SSO_SAML_CONFIG: string;
/** @default "Entry Point" */
SSO_SAML_ENTRY_POINT: string;
/** @default "SAML SSO login URL" */
SSO_SAML_ENTRY_POINT_DESCRIPTION: string;
/** @default "Certificate" */
SSO_SAML_CERT: string;
/** @default "IdP signing certificate (PEM format)" */
SSO_SAML_CERT_DESCRIPTION: string;
/** @default "Callback URL" */
SSO_CALLBACK_URL: string;
/** @default "SAML assertion consumer service URL" */
SSO_CALLBACK_URL_DESCRIPTION: string;
/** @default "Entity ID / Audience" */
SSO_ENTITY_ID: string;
/** @default "Service provider entity identifier" */
SSO_ENTITY_ID_DESCRIPTION: string;
/** @default "IdP Metadata XML" */
SSO_IDP_METADATA: string;
/** @default "Paste IdP metadata XML or upload file" */
SSO_IDP_METADATA_DESCRIPTION: string;
/** @default "SP Metadata" */
SSO_SP_METADATA: string;
/** @default "Service Provider metadata for IdP configuration" */
SSO_SP_METADATA_DESCRIPTION: string;
/** @default "Advanced Options" */
SSO_ADVANCED_OPTIONS: string;
/** @default "Show Advanced" */
SSO_SHOW_ADVANCED: string;
/** @default "Hide Advanced" */
SSO_HIDE_ADVANCED: string;
/** @default "Attribute Mapping" */
SSO_ATTRIBUTE_MAPPING: string;
/** @default "Map SSO attributes to user fields" */
SSO_ATTRIBUTE_MAPPING_DESCRIPTION: string;
/** @default "User ID Attribute" */
SSO_MAP_ID: string;
/** @default "Email Attribute" */
SSO_MAP_EMAIL: string;
/** @default "Name Attribute" */
SSO_MAP_NAME: string;
/** @default "First Name Attribute" */
SSO_MAP_FIRST_NAME: string;
/** @default "Last Name Attribute" */
SSO_MAP_LAST_NAME: string;
/** @default "Email Verified Attribute" */
SSO_MAP_EMAIL_VERIFIED: string;
/** @default "Profile Image Attribute" */
SSO_MAP_IMAGE: string;
/** @default "Extra Fields (JSON)" */
SSO_EXTRA_FIELDS: string;
/** @default "Map additional custom attributes as JSON" */
SSO_EXTRA_FIELDS_DESCRIPTION: string;
/** @default "Test Connection" */
SSO_TEST_CONNECTION: string;
/** @default "Testing..." */
SSO_TESTING: string;
/** @default "Connection successful!" */
SSO_TEST_SUCCESS: string;
/** @default "Connection failed" */
SSO_TEST_FAILED: string;
/** @default "Copy SP Metadata" */
SSO_COPY_SP_METADATA: string;
/** @default "Fetch SP Metadata" */
SSO_FETCH_SP_METADATA: string;
/** @default "SSO provider created successfully" */
SSO_PROVIDER_CREATED: string;
/** @default "SSO provider updated successfully" */
SSO_PROVIDER_UPDATED: string;
/** @default "SSO provider deleted successfully" */
SSO_PROVIDER_DELETED: string;
/** @default "Delete SSO Provider" */
SSO_DELETE_PROVIDER: string;
/** @default "Are you sure? This will remove SSO authentication for this provider." */
SSO_DELETE_CONFIRM: string;
/** @default "Upload File" */
SSO_UPLOAD_FILE: string;
/** @default "Or paste metadata XML" */
SSO_PASTE_METADATA: string;
};
type AuthLocalization = Partial<typeof authLocalization>;
type PasswordValidation = {
/**
* Maximum password length
*/
maxLength?: number;
/**
* Minimum password length
*/
minLength?: number;
/**
* Password validation regex
*/
regex?: RegExp;
};
declare function cn(...inputs: ClassValue[]): string;
declare function getViewByPath<T extends object>(viewPaths: T, path?: string): Extract<keyof T, string>;
/**
* Better Auth Client Interface
* Defines the minimal interface components need from the auth client
* Works with any Better Auth client implementation (@convex-dev/better-auth, better-auth/react, etc.)
*/
interface BetterAuthSession {
user: {
id: string;
email?: string;
name?: string;
image?: string;
[key: string]: any;
};
session: {
id: string;
userId: string;
expiresAt: Date;
[key: string]: any;
};
[key: string]: any;
}
interface BetterAuthOrganization {
id: string;
name: string;
slug?: string;
logo?: string;
metadata?: Record<string, any>;
createdAt?: Date;
[key: string]: any;
}
interface BetterAuthSubscription {
id: string;
referenceId: string;
status: "active" | "trialing" | "past_due" | "canceled" | "unpaid";
planId?: string;
currentPeriodStart?: Date;
currentPeriodEnd?: Date;
cancelAt?: Date;
canceledAt?: Date;
trialEnd?: Date;
metadata?: Record<string, any>;
[key: string]: any;
}
interface BetterAuthClient {
useSession: () => {
data: BetterAuthSession | null;
isPending: boolean;
error?: Error;
};
useListOrganizations: () => {
data: BetterAuthOrganization[] | null;
isPending: boolean;
error?: Error;
};
subscription?: {
list: () => Promise<{
data?: BetterAuthSubscription[];
error?: Error;
}>;
createPortalSession?: (referenceId: string) => Promise<{
url?: string;
error?: Error;
}>;
};
[key: string]: any;
}
/**
* Localization types for billing components
* Following better-auth-ui localization patterns
*/
interface BillingLocalization {
currentPlan: string;
planStatus: string;
nextBillingDate: string;
manageBilling: string;
upgradeNow: string;
cancelSubscription: string;
noActiveSubscription: string;
startSubscription: string;
viewPlans: string;
manageSubscription: string;
billingPortal: string;
paymentMethod: string;
managePaymentDescription: string;
configuredInStripe: string;
manageViaPortal: string;
stripe: string;
organizationBilling: string;
updatePaymentMethod: string;
viewDownloadInvoices: string;
invoicesAppearHere: string;
viewAllInvoices: string;
usage: string;
limit: string;
remaining: string;
unlimited: string;
usageWarning: string;
upgradeToIncreaseLimit: string;
openBillingPortal: string;
managingBilling: string;
invoiceHistory: string;
date: string;
amount: string;
status: string;
download: string;
noInvoices: string;
actions: string;
view: string;
paid: string;
open: string;
void: string;
uncollectible: string;
invoicesWillAppear: string;
loadingInvoices: string;
perMonth: string;
perYear: string;
mostPopular: string;
currentPlanBadge: string;
selectPlan: string;
contactSales: string;
active: string;
canceled: string;
pastDue: string;
trialing: string;
incomplete: string;
unpaid: string;
paused: string;
}
/**
* Subscription types compatible with Better Auth Stripe plugin
* @see https://www.better-auth.com/docs/plugins/stripe
*/
/**
* Subscription status from Stripe
*/
type SubscriptionStatus = "incomplete" | "incomplete_expired" | "trialing" | "active" | "past_due" | "canceled" | "unpaid";
/**
* Subscription data structure
* Compatible with Better Auth Stripe plugin schema
*/
interface Subscription {
/**
* Unique identifier for the subscription
*/
id: string;
/**
* Plan name (e.g., "pro", "team", "enterprise")
*/
plan: string;
/**
* Reference ID (user ID or organization ID)
*/
referenceId: string;
/**
* Stripe customer ID
*/
stripeCustomerId?: string;
/**
* Stripe subscription ID
*/
stripeSubscriptionId?: string;
/**
* Current subscription status
*/
status: SubscriptionStatus;
/**
* Start of current billing period
*/
periodStart?: Date;
/**
* End of current billing period
*/
periodEnd?: Date;
/**
* Whether subscription will cancel at period end
*/
cancelAtPeriodEnd?: boolean;
/**
* Number of seats (for team plans)
*/
seats?: number;
/**
* Trial start date
*/
trialStart?: Date;
/**
* Trial end date
*/
trialEnd?: Date;
/**
* Created timestamp
*/
createdAt?: Date;
/**
* Updated timestamp
*/
updatedAt?: Date;
}
/**
* Payment method types
*/
type PaymentMethodType = "card" | "bank_account" | "paypal" | "us_bank_account";
/**
* Payment method data structure
*/
interface PaymentMethod {
/**
* Unique identifier for the payment method
*/
id: string;
/**
* Payment method type
*/
type: PaymentMethodType;
/**
* Last 4 digits of card/account
*/
last4?: string;
/**
* Card brand (Visa, Mastercard, etc.)
*/
brand?: string;
/**
* Card expiry month (1-12)
*/
expiryMonth?: number;
/**
* Card expiry year
*/
expiryYear?: number;
/**
* Whether this is the default payment method
*/
isDefault?: boolean;
/**
* Stripe payment method ID
*/
stripePaymentMethodId?: string;
}
/**
* Invoice status from Stripe
*/
type InvoiceStatus = "draft" | "open" | "paid" | "void" | "uncollectible";
/**
* Invoice data structure
*/
interface Invoice {
/**
* Unique identifier for the invoice
*/
id: string;
/**
* Invoice number
*/
number?: string;
/**
* Total amount in smallest currency unit (cents)
*/
amount: number;
/**
* Amount paid
*/
amountPaid?: number;
/**
* Amount remaining
*/
amountRemaining?: number;
/**
* Currency code (USD, EUR, etc.)
*/
currency: string;
/**
* Invoice status
*/
status: InvoiceStatus;
/**
* Invoice creation date
*/
createdAt: Date;
/**
* Invoice due date
*/
dueDate?: Date;
/**
* Date invoice was paid
*/
paidAt?: Date;
/**
* Hosted invoice URL (Stripe)
*/
invoiceUrl?: string;
/**
* PDF download URL
*/
invoicePdf?: string;
/**
* Stripe invoice ID
*/
stripeInvoiceId?: string;
/**
* Description
*/
description?: string;
}
/**
* Subscription plan configuration
*/
interface SubscriptionPlan {
/**
* Plan name
*/
name: string;
/**
* Stripe price ID
*/
priceId?: string;
/**
* Stripe price lookup key (alternative to priceId)
*/
lookupKey?: string;
/**
* Annual discount price ID
*/
annualDiscountPriceId?: string;
/**
* Annual discount lookup key
*/
annualDiscountLookupKey?: string;
/**
* Plan limits/features
*/
limits?: Record<string, number | boolean | string>;
/**
* Plan group/category
*/
group?: string;
/**
* Free trial configuration
*/
freeTrial?: {
days: number;
};
}
/**
* Checkout session parameters
*/
interface CheckoutSessionParams {
/**
* Plan name to subscribe to
*/
plan: string;
/**
* Upgrade to annual plan
*/
annual?: boolean;
/**
* Reference ID (user/org ID)
*/
referenceId?: string;
/**
* Existing subscription ID (for upgrades)
*/
subscriptionId?: string;
/**
* Number of seats
*/
seats?: number;
/**
* Success redirect URL
*/
successUrl: string;
/**
* Cancel redirect URL
*/
cancelUrl: string;
/**
* Return URL for billing portal
*/
returnUrl?: string;
/**
* Disable automatic redirect
*/
disableRedirect?: boolean;
/**
* Custom metadata
*/
metadata?: Record<string, any>;
}
/**
* Billing portal session parameters
*/
interface BillingPortalParams {
/**
* Locale for billing portal (IETF language tag)
*/
locale?: string;
/**
* Reference ID (user/org ID)
*/
referenceId?: string;
/**
* Return URL
*/
returnUrl?: string;
}
declare const buttonVariants: (props?: {
variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost";
size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg";
} & class_variance_authority_types.ClassProp) => string;
declare function Button({ className, variant, size, asChild, ...props }: React$1.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
asChild?: boolean;
}): react_jsx_runtime.JSX.Element;
declare const badgeVariants: (props?: {
variant?: "default" | "destructive" | "outline" | "secondary";
} & class_variance_authority_types.ClassProp) => string;
declare function Badge({ className, variant, asChild, ...props }: React$1.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
asChild?: boolean;
}): react_jsx_runtime.JSX.Element;
declare function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
declare function Progress({ className, value, ...props }: React$1.ComponentProps<typeof ProgressPrimitive.Root>): react_jsx_runtime.JSX.Element;
declare function Separator({ className, orientation, decorative, ...props }: React$1.ComponentProps<typeof SeparatorPrimitive.Root>): react_jsx_runtime.JSX.Element;
interface Step {
id: number;
title: string;
description?: string;
completed?: boolean;
}
interface StepperProps {
steps: Step[];
currentStep: number;
onStepClick?: (step: number) => void;
orientation?: "horizontal" | "vertical";
variant?: "default" | "circle" | "bar" | "controlled";
showTitle?: boolean;
showDescription?: boolean;
showStatus?: boolean;
className?: string;
}
declare const Stepper: React$1.ForwardRefExoticComponent<StepperProps & React$1.RefAttributes<HTMLDivElement>>;
/**
* any-auth-client
* Type for any Better Auth client
*/
interface AnyAuthClient {
$Infer: {
Session: {
session: any;
user: any;
};
};
$fetch: (path: string, options?: any) => Promise<any>;
useSession: () => any;
listAccounts: any;
accountInfo: any;
multiSession: any;
listSessions: any;
useListPasskeys: any;
apiKey: any;
useActiveOrganization: any;
useListOrganizations: any;
organization: any;
updateUser: any;
unlinkAccount: any;
passkey: any;
revokeSession: any;
oneTap: any;
signIn: any;
signOut: any;
twoFactor: any;
requestPasswordReset: any;
changePassword: any;
deleteUser: any;
emailOtp: any;
resetPassword: any;
signUp: any;
phoneNumber: any;
siwe: {
nonce: (params: {
walletAddress: string;
chainId?: number;
}) => Promise<{
data?: {
nonce: string;
};
error?: any;
}>;
verify: (params: {
message: string;
signature: string;
walletAddress: string;
chainId?: number;
email?: string;
fetchOptions?: any;
}, callbacks?: {
onSuccess?: () => void;
onError?: (ctx: any) => void;
}) => Promise<any>;
};
/**
* Subscription management (optional)
* Available when using @better-auth/stripe plugin or custom implementation
* @see https://www.better-auth.com/docs/plugins/stripe
*/
subscription?: {
/**
* Upgrade to a subscription plan
* Creates a Stripe checkout session and optionally redirects
*/
upgrade: (params: CheckoutSessionParams) => Promise<{
data?: {
url?: string;
sessionId?: string;
};
error?: Error;
}>;
/**
* List active subscriptions
* @param params - Optional parameters
* @param params.referenceId - Filter by reference ID (user/org ID)
*/
list: (params?: {
referenceId?: string;
}) => Promise<{
data?: Subscription[];
error?: Error;
}>;
/**
* Cancel a subscription
* Opens Stripe billing portal where user can cancel
*/
cancel: (params: {
referenceId?: string;
subscriptionId?: string;
returnUrl: string;
}) => Promise<{
data?: {
url: string;
};
error?: Error;
}>;
/**
* Restore a canceled subscription
* Reactivates a subscription marked to cancel at period end
*/
restore: (params: {
referenceId?: string;
subscriptionId?: string;
}) => Promise<{
data?: Subscription;
error?: Error;
}>;
/**
* Create billing portal session
* Returns URL to Stripe billing portal
*/
billingPortal: (params: BillingPortalParams) => Promise<{
data?: {
url: string;
};
error?: Error;
}>;
};
/**
* Admin management (optional)
* Available when using @better-auth/admin plugin
* @see https://www.better-auth.com/docs/plugins/admin
*/
admin?: {
/**
* List users with pagination, search, and filtering
*/
listUsers: (params?: {
searchValue?: string;
searchField?: string;
searchOperator?: "contains" | "starts_with" | "ends_with";
limit?: number;
offset?: number;
sortBy?: string;
sortDirection?: "asc" | "desc";
filterBy?: Record<string, any>;
}) => Promise<{
data?: {
users: any[];
total: number;
};
error?: any;
}>;
/**
* Ban a user
*/
banUser: (params: {
userId: string;
banReason?: string;
banExpiresIn?: number;
}) => Promise<{
data?: any;
error?: any;
}>;
/**
* Unban a user
*/
unbanUser: (params: {
userId: string;
}) => Promise<{
data?: any;
error?: any;
}>;
/**
* Delete a user
*/
removeUser: (params: {
userId: string;
}) => Promise<{
data?: any;
error?: any;
}>;
/**
* Impersonate a user
*/
impersonateUser: (params: {
userId: string;
}) => Promise<{
data?: any;
error?: any;
}>;
/**
* Stop impersonating
*/
stopImpersonating: () => Promise<{
data?: any;
error?: any;
}>;
};
/**
* Device Authorization (optional)
* Available when using @better-auth/device-authorization plugin
* OAuth 2.0 Device Authorization Grant (RFC 8628)
* @see https://www.better-auth.com/docs/plugins/device-authorization
*/
device?: {
/**
* Verify user code validity
* @param params - Query parameters
* @param params.query.user_code - The user code to verify
*/
(params: {
query: {
user_code: string;
};
}): Promise<{
data?: {
clientId?: string;
scope?: string;
};
error?: any;
}>;
/**
* Request device and user codes
* Initiates the device authorization flow
*/
code: (params: {
client_id: string;
scope?: string;
}) => Promise<{
data?: {
device_code: string;
user_code: string;
verification_uri: string;
verification_uri_complete?: string;
expires_in: number;
interval: number;
};
error?: {
error: string;
error_description?: string;
};
}>;
/**
* Poll for access token
* Device polls this endpoint to check authorization status
*/
token: (params: {
grant_type: string;