import { Account, User, Awaitable } from "."; import type { Adapter as FutureAdapter } from "@auth/core/adapters"; export interface AdapterUser extends User { id: string; email: string; emailVerified: Date | null; } export interface AdapterAccount extends Account { userId: string; } export interface AdapterSession { /** A randomly generated value that is used to get hold of the session. */ sessionToken: string; /** Used to connect the session to a particular user */ userId: string; expires: Date; } export interface VerificationToken { identifier: string; expires: Date; token: string; } /** * Using a custom adapter you can connect to any database backend or even several different databases. * Custom adapters created and maintained by our community can be found in the adapters repository. * Feel free to add a custom adapter from your project to the repository, * or even become a maintainer of a certain adapter. * Custom adapters can still be created and used in a project without being added to the repository. * * **Required methods** * * _(These methods are required for all sign in flows)_ * - `createUser` * - `getUser` * - `getUserByEmail` * - `getUserByAccount` * - `linkAccount` * - `createSession` * - `getSessionAndUser` * - `updateSession` * - `deleteSession` * - `updateUser` * * _(Required to support email / passwordless sign in)_ * * - `createVerificationToken` * - `useVerificationToken` * * **Unimplemented methods** * * _(These methods will be required in a future release, but are not yet invoked)_ * - `deleteUser` * - `unlinkAccount` * * [Adapters Overview](https://next-auth.js.org/adapters/overview) | * [Create a custom adapter](https://next-auth.js.org/tutorials/creating-a-database-adapter) */ export interface Adapter { createUser?: FutureAdapter["createUser"] | ((user: Omit) => Awaitable); getUser?: (id: string) => Awaitable; getUserByEmail?: (email: string) => Awaitable; /** Using the provider id and the id of the user for a specific account, get the user. */ getUserByAccount?: (providerAccountId: Pick) => Awaitable; updateUser?: (user: Partial & Pick) => Awaitable; /** @todo Implement */ deleteUser?: (userId: string) => Promise | Awaitable; linkAccount?: FutureAdapter["linkAccount"] | ((account: AdapterAccount) => Promise | Awaitable); /** @todo Implement */ unlinkAccount?: FutureAdapter["unlinkAccount"] | ((providerAccountId: Pick) => Promise | Awaitable); /** Creates a session for the user and returns it. */ createSession?: (session: { sessionToken: string; userId: string; expires: Date; }) => Awaitable; getSessionAndUser?: (sessionToken: string) => Awaitable<{ session: AdapterSession; user: AdapterUser; } | null>; updateSession?: (session: Partial & Pick) => Awaitable; /** * Deletes a session from the database. * It is preferred that this method also returns the session * that is being deleted for logging purposes. */ deleteSession?: (sessionToken: string) => Promise | Awaitable; createVerificationToken?: (verificationToken: VerificationToken) => Awaitable; /** * Return verification token from the database * and delete it so it cannot be used again. */ useVerificationToken?: (params: { identifier: string; token: string; }) => Awaitable; } //# sourceMappingURL=adapters.d.ts.map