import type { HTTPRequest, HTTPResponse } from '.'; import type { Auth } from '../runtime/core'; import type { Token, IdToken, RefreshToken, RefreshController, RequestHandler } from '../runtime/inc'; import type { PartialExcept } from './utils'; export type SchemeNames = 'local' | 'cookie' | 'laravelJWT' | 'openIDConnect' | 'refresh' | 'oauth2' | 'auth0' | N export interface UserOptions { property: string | false; autoFetch: boolean; } export interface EndpointsOption { [endpoint: string]: string | HTTPRequest | false | undefined; } // Scheme export interface SchemeOptions { name?: string; ssr?: boolean; } export type SchemePartialOptions = PartialExcept; export interface SchemeCheck { valid: boolean; tokenExpired?: boolean; refreshTokenExpired?: boolean; idTokenExpired?: boolean; isRefreshable?: boolean; } export interface Scheme { options: OptionsT; name?: string; $auth: Auth; mounted?(...args: any[]): Promise | void>; check?(checkStatus?: boolean): SchemeCheck; login(...args: any[]): Promise | void>; fetchUser(endpoint?: HTTPRequest): Promise | void>; setUserToken?( token: string | boolean, refreshToken?: string | boolean ): Promise | void>; logout?(endpoint?: HTTPRequest): Promise | void; reset?(options?: { resetInterceptor: boolean }): void; } // Token export interface TokenOptions { property: string; expiresProperty: string; type: string | false; name: string; maxAge: number | false; global: boolean; required: boolean; prefix: string; expirationPrefix: string; httpOnly: boolean } export interface TokenableSchemeOptions extends SchemeOptions { token?: TokenOptions; endpoints: EndpointsOption; } export interface TokenableScheme extends Scheme { token?: Token; requestHandler: RequestHandler; } // ID Token export interface IdTokenableSchemeOptions extends SchemeOptions { idToken: TokenOptions; } export interface IdTokenableScheme extends Scheme { idToken: IdToken; requestHandler: RequestHandler; } // Refrash export interface RefreshTokenOptions { property: string | false; type: string | false; data: string | false; maxAge: number | false; required: boolean; tokenRequired: boolean; prefix: string; expirationPrefix: string; httpOnly: boolean; } export interface RefreshableSchemeOptions extends TokenableSchemeOptions { refreshToken: RefreshTokenOptions; } export interface RefreshableScheme extends TokenableScheme { refreshToken: RefreshToken; refreshController: RefreshController; refreshTokens(): Promise | void>; }