@zpg6-test-pkgs/better-auth
Version:
The most comprehensive authentication library for TypeScript.
347 lines (342 loc) • 12.6 kB
text/typescript
import * as better_call from 'better-call';
import { I as InferOptionSchema, q as AuthContext, G as GenericEndpointContext, H as HookEndpointContext } from '../../shared/better-auth.8Ira7TFx.cjs';
import * as z from 'zod/v4';
import 'kysely';
import '../../shared/better-auth.DTtXpZYr.cjs';
import '../../shared/better-auth.DtuOgks-.cjs';
import 'jose';
import 'zod/v4/core';
import 'zod';
import 'better-sqlite3';
import 'bun:sqlite';
declare const getSchema: (normalizer: {
username: (username: string) => string;
displayUsername: (displayUsername: string) => string;
}) => {
user: {
fields: {
username: {
type: "string";
required: false;
sortable: true;
unique: true;
returned: true;
transform: {
input(value: string | number | boolean | string[] | Date | number[] | null | undefined): string | null | undefined;
};
};
displayUsername: {
type: "string";
required: false;
transform: {
input(value: string | number | boolean | string[] | Date | number[] | null | undefined): string | null | undefined;
};
};
};
};
};
type UsernameSchema = ReturnType<typeof getSchema>;
declare const USERNAME_ERROR_CODES: {
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;
INVALID_DISPLAY_USERNAME: string;
};
type UsernameOptions = {
schema?: InferOptionSchema<UsernameSchema>;
/**
* The minimum length of the username
*
* @default 3
*/
minUsernameLength?: number;
/**
* The maximum length of the username
*
* @default 30
*/
maxUsernameLength?: number;
/**
* A function to validate the username
*
* By default, the username should only contain alphanumeric characters and underscores
*/
usernameValidator?: (username: string) => boolean | Promise<boolean>;
/**
* A function to validate the display username
*
* By default, no validation is applied to display username
*/
displayUsernameValidator?: (displayUsername: string) => boolean | Promise<boolean>;
/**
* A function to normalize the username
*
* @default (username) => username.toLowerCase()
*/
usernameNormalization?: ((username: string) => string) | false;
/**
* A function to normalize the display username
*
* @default false
*/
displayUsernameNormalization?: ((displayUsername: string) => string) | false;
/**
* The order of validation
*
* @default { username: "pre-normalization", displayUsername: "pre-normalization" }
*/
validationOrder?: {
/**
* The order of username validation
*
* @default "pre-normalization"
*/
username?: "pre-normalization" | "post-normalization";
/**
* The order of display username validation
*
* @default "pre-normalization"
*/
displayUsername?: "pre-normalization" | "post-normalization";
};
};
declare const username: (options?: UsernameOptions) => {
id: "username";
init(ctx: AuthContext): {
options: {
databaseHooks: {
user: {
create: {
before(user: {
id: string;
email: string;
emailVerified: boolean;
name: string;
createdAt: Date;
updatedAt: Date;
image?: string | null | undefined;
} & Record<string, unknown>, context: GenericEndpointContext | undefined): Promise<{
data: {
displayUsername?: string | undefined;
username?: string | undefined;
id: string;
email: string;
emailVerified: boolean;
name: string;
createdAt: Date;
updatedAt: Date;
image?: string | null | undefined;
};
}>;
};
update: {
before(user: Partial<{
id: string;
email: string;
emailVerified: boolean;
name: string;
createdAt: Date;
updatedAt: Date;
image?: string | null | undefined;
}> & Record<string, unknown>, context: GenericEndpointContext | undefined): Promise<{
data: {
displayUsername?: string | undefined;
username?: string | undefined;
id?: string | undefined;
email?: string | undefined;
emailVerified?: boolean | undefined;
name?: string | undefined;
createdAt?: Date | undefined;
updatedAt?: Date | undefined;
image?: string | null | undefined;
};
}>;
};
};
};
};
};
endpoints: {
signInUsername: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
username: string;
password: string;
rememberMe?: boolean | undefined;
callbackURL?: string | 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: {
id: string;
email: string;
emailVerified: boolean;
username: string;
name: string;
image: string | null | undefined;
createdAt: Date;
updatedAt: Date;
};
} | null;
} : {
token: string;
user: {
id: string;
email: string;
emailVerified: boolean;
username: string;
name: string;
image: string | null | undefined;
createdAt: Date;
updatedAt: Date;
};
} | null>;
options: {
method: "POST";
body: z.ZodObject<{
username: z.ZodString;
password: z.ZodString;
rememberMe: z.ZodOptional<z.ZodBoolean>;
callbackURL: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
metadata: {
openapi: {
summary: string;
description: string;
responses: {
200: {
description: string;
content: {
"application/json": {
schema: {
type: "object";
properties: {
token: {
type: string;
description: string;
};
user: {
$ref: string;
};
};
required: string[];
};
};
};
};
};
};
};
} & {
use: any[];
};
path: "/sign-in/username";
};
isUsernameAvailable: {
<AsResponse extends boolean = false, ReturnHeaders extends boolean = false>(inputCtx_0: {
body: {
username: 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: {
available: boolean;
};
} : {
available: boolean;
}>;
options: {
method: "POST";
body: z.ZodObject<{
username: z.ZodString;
}, z.core.$strip>;
} & {
use: any[];
};
path: "/is-username-available";
};
};
schema: {
user: {
fields: {
username: {
type: "string";
required: false;
sortable: true;
unique: true;
returned: true;
transform: {
input(value: string | number | boolean | string[] | number[] | Date | null | undefined): string | null | undefined;
};
};
displayUsername: {
type: "string";
required: false;
transform: {
input(value: string | number | boolean | string[] | number[] | Date | null | undefined): string | null | undefined;
};
};
};
};
};
hooks: {
before: {
matcher(context: HookEndpointContext): boolean;
handler: (inputContext: better_call.MiddlewareInputContext<better_call.MiddlewareOptions>) => Promise<void>;
}[];
};
$ERROR_CODES: {
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;
INVALID_DISPLAY_USERNAME: string;
};
};
export { USERNAME_ERROR_CODES, username };
export type { UsernameOptions };