mirror of
https://github.com/SrIzan10/next-auth.git
synced 2026-05-01 10:55:20 +00:00
* chore: add beta to release flow/GH actions * feat(ts): expose types from the package (#1665) * chore(types): move existing types to the repo * feat(ts): expose types from the main package * chore(deps): bring back `react-dom` version range * chore(ts): cleanup deps and comments * chore(ci): run types tests on a separate workflow * chore(ci): fix typo on types workflow * fix(ts): correctly export sub-module types (#1677) * chore(types): build types script Adds a script that moves the declaration files we have in `./types` to `./dist` relative to the files they intend to type. This is the first step, we still need to change what we declare in `package.json`, add the script to the CI pipeline if we're happy with it and figure out how to type `next-auth/jwt`. * refactor(lint): fix build-types script * fix(ts): add .d.ts sub-module files to package.json #1677 seemed to miss this * fix(built): typo in package.json * fix(build): fix release * feat(ts): support module augmentation (#1681) * chore(ts): remove unused imports * refactor(ts): clean up CallbackOptions * docs(ts): explain Module Augmentation * docs(ts): don't use @ in folder name "types" * test(ts): make jwt params optional * docs(ts): fix typo (TypeScript -> NextAuth.js) * style: replace ts-standard with eslint/prettier (#1724) * style: move from ts-standard to eslint/prettier * fix: install remaining eslint-config-standard peer deps * fix: add remaining missing dependencies/config Co-authored-by: Balázs Orbán <info@balazsorban.com> * docs(lint): update contributing.md (#1760) Regarding ESLint / Prettier use and link to their VSCode extensions * refactor(ts): de-duplicate types (#1690) * refactor(ts): deduplicate internal types * refactor(ts): ease up providers typings * test(ts): fix failing TS tests * test(ts): rename TS property to fix test * docs(ts): mention TS docs in README.md * feat(ts): move/update client types * refactor(TS): rename some types * test(ts): fix client tests * docs(ts): move function descriptions to .d.ts * chore: fix lint error * refactor(ts): separate internal types * chore: simplify build-types script * chore: update type import paths in src * chore(build): create root files at build * chore: remove unnecessary .npmignore * chore: run prettier on types * fix(ts): clean up jwt types * fix(ts): make getToken return type depend on raw param * docs(page): explain page errors, add theming note * docs(ts): add JSDoc to NextAuthOptions props * chore(ts): remove unused import * docs(ts): change JSDOC docs notation * refactor(build): extract module entries into enum * chore(ts): move ClientSafeProvider * chore(ts): simplify GetTokenParams generic * style(lint): fix linting errors * chore: re-add generic extension to GetTokenParams * fix(ts): extract EmailConfigServerOptions to interface * fix(ts): use relative imports * Merge branch 'main' into beta * Merge main into beta * fix(ts): fix typos, add more links to documentation * test(ts): update JWT getToken test * fix(build): fix tsconfig.json formatting * test(ts): use absolute imports in test files * fix(ts): add missing callbacks JSDoc * docs: mention TS in FAQ, fix typos * docs: fix some typos in the docs Co-authored-by: Lluis Agusti <hi@llu.lu> Co-authored-by: Nico Domino <yo@ndo.dev>
219 lines
6.0 KiB
TypeScript
219 lines
6.0 KiB
TypeScript
import * as React from "react"
|
|
import { IncomingMessage } from "http"
|
|
import { Session } from "."
|
|
import { ProviderType } from "./providers"
|
|
|
|
export interface CtxOrReq {
|
|
req?: IncomingMessage
|
|
ctx?: { req: IncomingMessage }
|
|
}
|
|
|
|
/***************
|
|
* Session types
|
|
**************/
|
|
|
|
export type GetSessionOptions = CtxOrReq & {
|
|
event?: "storage" | "timer" | "hidden" | string
|
|
triggerEvent?: boolean
|
|
}
|
|
|
|
/**
|
|
* React Hook that gives you access
|
|
* to the logged in user's session data.
|
|
*
|
|
* [Documentation](https://next-auth.js.org/getting-started/client#usesession)
|
|
*/
|
|
export function useSession(): [Session | null, boolean]
|
|
|
|
/**
|
|
* Can be called client or server side to return a session asynchronously.
|
|
* It calls `/api/auth/session` and returns a promise with a session object,
|
|
* or null if no session exists.
|
|
*
|
|
* [Documentation](https://next-auth.js.org/getting-started/client#getsession)
|
|
*/
|
|
export function getSession(options: GetSessionOptions): Promise<Session | null>
|
|
|
|
/**
|
|
* Alias for `getSession`
|
|
* @docs https://next-auth.js.org/getting-started/client#getsession
|
|
*/
|
|
export const session: typeof getSession
|
|
|
|
/*******************
|
|
* CSRF Token types
|
|
******************/
|
|
|
|
/**
|
|
* Returns the current Cross Site Request Forgery Token (CSRF Token)
|
|
* required to make POST requests (e.g. for signing in and signing out).
|
|
* You likely only need to use this if you are not using the built-in
|
|
* `signIn()` and `signOut()` methods.
|
|
*
|
|
* [Documentation](https://next-auth.js.org/getting-started/client#getcsrftoken)
|
|
*/
|
|
export function getCsrfToken(ctxOrReq: CtxOrReq): Promise<string | null>
|
|
|
|
/**
|
|
* Alias for `getCsrfToken`
|
|
* @docs https://next-auth.js.org/getting-started/client#getcsrftoken
|
|
*/
|
|
export const csrfToken: typeof getCsrfToken
|
|
|
|
/******************
|
|
* Providers types
|
|
*****************/
|
|
|
|
export interface ClientSafeProvider {
|
|
id: string
|
|
name: string
|
|
type: ProviderType
|
|
signinUrl: string
|
|
callbackUrl: string
|
|
}
|
|
|
|
/**
|
|
* It calls `/api/auth/providers` and returns
|
|
* a list of the currently configured authentication providers.
|
|
* It can be useful if you are creating a dynamic custom sign in page.
|
|
*
|
|
* [Documentation](https://next-auth.js.org/getting-started/client#getproviders)
|
|
*/
|
|
export function getProviders(): Promise<Record<
|
|
string,
|
|
ClientSafeProvider
|
|
> | null>
|
|
|
|
/**
|
|
* Alias for `getProviders`
|
|
* @docs https://next-auth.js.org/getting-started/client#getproviders
|
|
*/
|
|
export const providers: typeof getProviders
|
|
|
|
/****************
|
|
* Sign in types
|
|
***************/
|
|
|
|
export type RedirectableProvider = "email" | "credentials"
|
|
|
|
export type SignInProvider = RedirectableProvider | string | undefined
|
|
|
|
export interface SignInOptions extends Record<string, unknown> {
|
|
/**
|
|
* Defaults to the current URL.
|
|
* @docs https://next-auth.js.org/getting-started/client#specifying-a-callbackurl
|
|
*/
|
|
callbackUrl?: string
|
|
/** @docs https://next-auth.js.org/getting-started/client#using-the-redirect-false-option */
|
|
redirect?: boolean
|
|
}
|
|
|
|
export interface SignInResponse {
|
|
error: string | undefined
|
|
status: number
|
|
ok: boolean
|
|
url: string | null
|
|
}
|
|
|
|
/** Match `inputType` of `new URLSearchParams(inputType)` */
|
|
export type SignInAuthorisationParams =
|
|
| string
|
|
| string[][]
|
|
| Record<string, string>
|
|
| URLSearchParams
|
|
|
|
/**
|
|
* Client-side method to initiate a signin flow
|
|
* or send the user to the signin page listing all possible providers.
|
|
* Automatically adds the CSRF token to the request.
|
|
*
|
|
* [Documentation](https://next-auth.js.org/getting-started/client#signin)
|
|
*/
|
|
export function signIn<P extends SignInProvider = undefined>(
|
|
provider?: P,
|
|
options?: SignInOptions,
|
|
authorizationParams?: SignInAuthorisationParams
|
|
): Promise<
|
|
P extends RedirectableProvider ? SignInResponse | undefined : undefined
|
|
>
|
|
|
|
/**
|
|
* Alias for `signIn`
|
|
* @docs https://next-auth.js.org/getting-started/client#signin
|
|
*/
|
|
export const signin: typeof signIn
|
|
|
|
/****************
|
|
* Sign out types
|
|
****************/
|
|
|
|
/** @docs https://next-auth.js.org/getting-started/client#using-the-redirect-false-option-1 */
|
|
export interface SignOutResponse {
|
|
url: string
|
|
}
|
|
|
|
export interface SignOutParams<R extends boolean = true> {
|
|
/** @docs https://next-auth.js.org/getting-started/client#specifying-a-callbackurl-1 */
|
|
callbackUrl?: string
|
|
/** @docs https://next-auth.js.org/getting-started/client#using-the-redirect-false-option-1 */
|
|
redirect?: R
|
|
}
|
|
|
|
/**
|
|
* Signs the user out, by removing the session cookie.
|
|
* Automatically adds the CSRF token to the request.
|
|
*
|
|
* [Documentation](https://next-auth.js.org/getting-started/client#signout)
|
|
*/
|
|
export function signOut<R extends boolean = true>(
|
|
params?: SignOutParams<R>
|
|
): Promise<R extends true ? undefined : SignOutResponse>
|
|
|
|
/**
|
|
* @docs https://next-auth.js.org/getting-started/client#signout
|
|
* Alias for `signOut`
|
|
*/
|
|
export const signout: typeof signOut
|
|
/************************
|
|
* SessionProvider types
|
|
***********************/
|
|
|
|
/** @docs: https://next-auth.js.org/getting-started/client#options */
|
|
export interface SessionProviderOptions {
|
|
baseUrl?: string
|
|
basePath?: string
|
|
clientMaxAge?: number
|
|
keepAlive?: number
|
|
}
|
|
|
|
/**
|
|
* Provider to wrap the app in to make session data available globally.
|
|
* Can also be used to throttle the number of requests to the endpoint
|
|
* `/api/auth/session`.
|
|
*
|
|
* [Documentation](https://next-auth.js.org/getting-started/client#provider)
|
|
*/
|
|
export type SessionProvider = React.FC<{
|
|
children: React.ReactNode
|
|
session?: Session
|
|
options?: SessionProviderOptions
|
|
}>
|
|
|
|
/**
|
|
* Provider to wrap the app in to make session data available globally.
|
|
* Can also be used to throttle the number of requests to the endpoint
|
|
* `/api/auth/session`.
|
|
*
|
|
* [Documentation](https://next-auth.js.org/getting-started/client#provider)
|
|
*/
|
|
export const Provider: SessionProvider
|
|
|
|
/** @docs: https://next-auth.js.org/getting-started/client#options */
|
|
export function setOptions(options: SessionProviderOptions): void
|
|
|
|
/**
|
|
* Alias for `setOptions`
|
|
* @docs: https://next-auth.js.org/getting-started/client#options
|
|
*/
|
|
export const options: typeof setOptions
|