@zpg6-test-pkgs/better-auth
Version:
The most comprehensive authentication library for TypeScript.
715 lines (712 loc) • 27.4 kB
text/typescript
import * as better_call from 'better-call';
import * as z from 'zod/v4';
import { U as User, I as InferOptionSchema } from '../../shared/better-auth.eDxSywzK.mjs';
import 'kysely';
import '../../shared/better-auth.DTtXpZYr.mjs';
import '../../shared/better-auth.B_ZH8D8u.mjs';
import 'jose';
import 'zod/v4/core';
import 'zod';
import 'better-sqlite3';
import 'bun:sqlite';
interface UserWithPhoneNumber extends User {
phoneNumber: string;
phoneNumberVerified: boolean;
}
interface PhoneNumberOptions {
/**
* Length of the OTP code
* @default 6
*/
otpLength?: number;
/**
* Send OTP code to the user
*
* @param phoneNumber
* @param code
* @returns
*/
sendOTP: (data: {
phoneNumber: string;
code: string;
}, request?: Request) => Promise<void> | void;
/**
* a callback to send otp on user requesting to reset their password
*
* @param data - contains phone number and code
* @param request - the request object
* @returns
*/
sendPasswordResetOTP?: (data: {
phoneNumber: string;
code: string;
}, request?: Request) => Promise<void> | void;
/**
* a callback to send otp on user requesting to reset their password
*
* @param data - contains phone number and code
* @param request - the request object
* @returns
* @deprecated Use sendPasswordResetOTP instead. This function will be removed in the next major version.
*/
sendForgetPasswordOTP?: (data: {
phoneNumber: string;
code: string;
}, request?: Request) => Promise<void> | void;
/**
* Expiry time of the OTP code in seconds
* @default 300
*/
expiresIn?: number;
/**
* Function to validate phone number
*
* by default any string is accepted
*/
phoneNumberValidator?: (phoneNumber: string) => boolean | Promise<boolean>;
/**
* Require a phone number verification before signing in
*
* @default false
*/
requireVerification?: boolean;
/**
* Callback when phone number is verified
*/
callbackOnVerification?: (data: {
phoneNumber: string;
user: UserWithPhoneNumber;
}, request?: Request) => void | Promise<void>;
/**
* Sign up user after phone number verification
*
* the user will be signed up with the temporary email
* and the phone number will be updated after verification
*/
signUpOnVerification?: {
/**
* When a user signs up, a temporary email will be need to be created
* to sign up the user. This function should return a temporary email
* for the user given the phone number
*
* @param phoneNumber
* @returns string (temporary email)
*/
getTempEmail: (phoneNumber: string) => string;
/**
* When a user signs up, a temporary name will be need to be created
* to sign up the user. This function should return a temporary name
* for the user given the phone number
*
* @param phoneNumber
* @returns string (temporary name)
*
* @default phoneNumber - the phone number will be used as the name
*/
getTempName?: (phoneNumber: string) => string;
};
/**
* Custom schema for the admin plugin
*/
schema?: InferOptionSchema<typeof schema>;
/**
* Allowed attempts for the OTP code
* @default 3
*/
allowedAttempts?: number;
}
declare const phoneNumber: (options?: PhoneNumberOptions) => {
id: "phone-number";
endpoints: {
/**
* ### Endpoint
*
* POST `/sign-in/phone-number`
*
* ### API Methods
*
* **server:**
* `auth.api.signInPhoneNumber`
*
* **client:**
* `authClient.signIn.phoneNumber`
*
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/phone-number#api-method-sign-in-phone-number)
*/
signInPhoneNumber: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
phoneNumber: string;
password: string;
rememberMe?: boolean | undefined;
};
} & {
method?: "POST" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: {
token: string;
user: UserWithPhoneNumber;
};
} : {
token: string;
user: UserWithPhoneNumber;
}>;
options: {
method: "POST";
body: z.ZodObject<{
phoneNumber: z.ZodString;
password: z.ZodString;
rememberMe: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
metadata: {
openapi: {
summary: string;
description: string;
responses: {
200: {
description: string;
content: {
"application/json": {
schema: {
type: "object";
properties: {
user: {
$ref: string;
};
session: {
$ref: string;
};
};
};
};
};
};
400: {
description: string;
};
};
};
};
} & {
use: any[];
};
path: "/sign-in/phone-number";
};
/**
* ### Endpoint
*
* POST `/phone-number/send-otp`
*
* ### API Methods
*
* **server:**
* `auth.api.sendPhoneNumberOTP`
*
* **client:**
* `authClient.phoneNumber.sendOtp`
*
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/phone-number#api-method-phone-number-send-otp)
*/
sendPhoneNumberOTP: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
phoneNumber: string;
};
} & {
method?: "POST" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: {
message: string;
};
} : {
message: string;
}>;
options: {
method: "POST";
body: z.ZodObject<{
phoneNumber: z.ZodString;
}, z.core.$strip>;
metadata: {
openapi: {
summary: string;
description: string;
responses: {
200: {
description: string;
content: {
"application/json": {
schema: {
type: "object";
properties: {
message: {
type: string;
};
};
};
};
};
};
};
};
};
} & {
use: any[];
};
path: "/phone-number/send-otp";
};
/**
* ### Endpoint
*
* POST `/phone-number/verify`
*
* ### API Methods
*
* **server:**
* `auth.api.verifyPhoneNumber`
*
* **client:**
* `authClient.phoneNumber.verify`
*
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/phone-number#api-method-phone-number-verify)
*/
verifyPhoneNumber: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
phoneNumber: string;
code: string;
disableSession?: boolean | undefined;
updatePhoneNumber?: boolean | undefined;
};
} & {
method?: "POST" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: {
status: boolean;
token: string;
user: UserWithPhoneNumber;
} | {
status: boolean;
token: null;
user: UserWithPhoneNumber;
};
} : {
status: boolean;
token: string;
user: UserWithPhoneNumber;
} | {
status: boolean;
token: null;
user: UserWithPhoneNumber;
}>;
options: {
method: "POST";
body: z.ZodObject<{
phoneNumber: z.ZodString;
code: z.ZodString;
disableSession: z.ZodOptional<z.ZodBoolean>;
updatePhoneNumber: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
metadata: {
openapi: {
summary: string;
description: string;
responses: {
"200": {
description: string;
content: {
"application/json": {
schema: {
type: "object";
properties: {
status: {
type: string;
description: string;
enum: boolean[];
};
token: {
type: string;
nullable: boolean;
description: string;
};
user: {
type: string;
nullable: boolean;
properties: {
id: {
type: string;
description: string;
};
email: {
type: string;
format: string;
nullable: boolean;
description: string;
};
emailVerified: {
type: string;
nullable: boolean;
description: string;
};
name: {
type: string;
nullable: boolean;
description: string;
};
image: {
type: string;
format: string;
nullable: boolean;
description: string;
};
phoneNumber: {
type: string;
description: string;
};
phoneNumberVerified: {
type: string;
description: string;
};
createdAt: {
type: string;
format: string;
description: string;
};
updatedAt: {
type: string;
format: string;
description: string;
};
};
required: string[];
description: string;
};
};
required: string[];
};
};
};
};
400: {
description: string;
};
};
};
};
} & {
use: any[];
};
path: "/phone-number/verify";
};
/**
* @deprecated Use requestPasswordResetPhoneNumber instead. This endpoint will be removed in the next major version.
*/
forgetPasswordPhoneNumber: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
phoneNumber: string;
};
} & {
method?: "POST" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: {
status: boolean;
};
} : {
status: boolean;
}>;
options: {
method: "POST";
body: z.ZodObject<{
phoneNumber: z.ZodString;
}, z.core.$strip>;
metadata: {
openapi: {
description: string;
responses: {
"200": {
description: string;
content: {
"application/json": {
schema: {
type: "object";
properties: {
status: {
type: string;
description: string;
enum: boolean[];
};
};
required: string[];
};
};
};
};
};
};
};
} & {
use: any[];
};
path: "/phone-number/forget-password";
};
requestPasswordResetPhoneNumber: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
phoneNumber: string;
};
} & {
method?: "POST" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: {
status: boolean;
};
} : {
status: boolean;
}>;
options: {
method: "POST";
body: z.ZodObject<{
phoneNumber: z.ZodString;
}, z.core.$strip>;
metadata: {
openapi: {
description: string;
responses: {
"200": {
description: string;
content: {
"application/json": {
schema: {
type: "object";
properties: {
status: {
type: string;
description: string;
enum: boolean[];
};
};
required: string[];
};
};
};
};
};
};
};
} & {
use: any[];
};
path: "/phone-number/request-password-reset";
};
resetPasswordPhoneNumber: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
otp: string;
phoneNumber: string;
newPassword: string;
};
} & {
method?: "POST" | undefined;
} & {
query?: Record<string, any> | undefined;
} & {
params?: Record<string, any>;
} & {
request?: Request;
} & {
headers?: HeadersInit;
} & {
asResponse?: boolean;
returnHeaders?: boolean;
use?: better_call.Middleware[];
path?: string;
} & {
asResponse?: AsResponse | undefined;
returnHeaders?: ReturnHeaders | undefined;
}): Promise<[AsResponse] extends [true] ? Response : [ReturnHeaders] extends [true] ? {
headers: Headers;
response: {
status: boolean;
};
} : {
status: boolean;
}>;
options: {
method: "POST";
body: z.ZodObject<{
otp: z.ZodString;
phoneNumber: z.ZodString;
newPassword: z.ZodString;
}, z.core.$strip>;
metadata: {
openapi: {
description: string;
responses: {
"200": {
description: string;
content: {
"application/json": {
schema: {
type: "object";
properties: {
status: {
type: string;
description: string;
enum: boolean[];
};
};
required: string[];
};
};
};
};
};
};
};
} & {
use: any[];
};
path: "/phone-number/reset-password";
};
};
schema: {
user: {
fields: {
phoneNumber: {
type: "string";
required: false;
unique: true;
sortable: true;
returned: true;
};
phoneNumberVerified: {
type: "boolean";
required: false;
returned: true;
input: false;
};
};
};
};
rateLimit: {
pathMatcher(path: string): boolean;
window: number;
max: number;
}[];
$ERROR_CODES: {
readonly INVALID_PHONE_NUMBER: "Invalid phone number";
readonly PHONE_NUMBER_EXIST: "Phone number already exists";
readonly INVALID_PHONE_NUMBER_OR_PASSWORD: "Invalid phone number or password";
readonly UNEXPECTED_ERROR: "Unexpected error";
readonly OTP_NOT_FOUND: "OTP not found";
readonly OTP_EXPIRED: "OTP expired";
readonly INVALID_OTP: "Invalid OTP";
readonly PHONE_NUMBER_NOT_VERIFIED: "Phone number not verified";
};
};
declare const schema: {
user: {
fields: {
phoneNumber: {
type: "string";
required: false;
unique: true;
sortable: true;
returned: true;
};
phoneNumberVerified: {
type: "boolean";
required: false;
returned: true;
input: false;
};
};
};
};
export { phoneNumber };
export type { PhoneNumberOptions, UserWithPhoneNumber };