// @ts-nocheck import type { BaseRequest, BaseResponse } from "../../framework"; import OverrideableBuilder from "supertokens-js-override"; import { GeneralErrorResponse, JSONObject, JSONValue, NonNullableProperties, UserContext } from "../../types"; import { SessionContainerInterface } from "../session/types"; import { OAuth2Client } from "./OAuth2Client"; import { User } from "../../user"; import RecipeUserId from "../../recipeUserId"; export type TypeInput = { override?: { functions?: (originalImplementation: RecipeInterface, builder: OverrideableBuilder) => RecipeInterface; apis?: (originalImplementation: APIInterface, builder: OverrideableBuilder) => APIInterface; }; }; export type TypeNormalisedInput = { override: { functions: (originalImplementation: RecipeInterface, builder: OverrideableBuilder) => RecipeInterface; apis: (originalImplementation: APIInterface, builder: OverrideableBuilder) => APIInterface; }; }; export type APIOptions = { recipeImplementation: RecipeInterface; config: TypeNormalisedInput; recipeId: string; isInServerlessEnv: boolean; req: BaseRequest; res: BaseResponse; }; export type ErrorOAuth2 = { status: "ERROR"; error: string; errorDescription: string; statusCode?: number; }; export type ConsentRequest = { acr?: string; amr?: string[]; challenge: string; client?: OAuth2Client; context?: JSONObject; loginChallenge?: string; loginSessionId?: string; oidcContext?: any; requestedAccessTokenAudience?: string[]; requestedScope?: string[]; skip?: boolean; subject?: string; }; export type LoginRequest = { challenge: string; client: OAuth2Client; oidcContext?: any; requestUrl: string; requestedAccessTokenAudience?: string[]; requestedScope?: string[]; sessionId?: string; skip: boolean; subject: string; }; export type TokenInfo = { access_token?: string; expires_in: number; id_token?: string; refresh_token?: string; scope: string; token_type: string; }; export type LoginInfo = { clientId: string; clientName: string; tosUri?: string; policyUri?: string; logoUri?: string; clientUri?: string; metadata?: Record | null; }; export type UserInfo = { sub: string; email?: string; email_verified?: boolean; phoneNumber?: string; phoneNumber_verified?: boolean; [key: string]: JSONValue; }; export type InstrospectTokenResponse = { active: false; } | ({ active: true; } & JSONObject); export type RecipeInterface = { authorization(input: { params: Record; cookies: string | undefined; session: SessionContainerInterface | undefined; userContext: UserContext; }): Promise<{ redirectTo: string; cookies: string[] | undefined; } | ErrorOAuth2>; tokenExchange(input: { authorizationHeader?: string; body: Record; userContext: UserContext; }): Promise; getConsentRequest(input: { challenge: string; userContext: UserContext; }): Promise; acceptConsentRequest(input: { challenge: string; context?: any; grantAccessTokenAudience?: string[]; grantScope?: string[]; handledAt?: string; tenantId: string; rsub: string; sessionHandle: string; initialAccessTokenPayload: JSONObject | undefined; initialIdTokenPayload: JSONObject | undefined; userContext: UserContext; }): Promise<{ redirectTo: string; status: "OK"; } | ErrorOAuth2>; rejectConsentRequest(input: { challenge: string; error: ErrorOAuth2; userContext: UserContext; }): Promise<{ redirectTo: string; status: "OK"; } | ErrorOAuth2>; getLoginRequest(input: { challenge: string; userContext: UserContext; }): Promise<(LoginRequest & { status: "OK"; }) | ErrorOAuth2>; acceptLoginRequest(input: { challenge: string; acr?: string; amr?: string[]; context?: any; extendSessionLifespan?: boolean; identityProviderSessionId?: string; subject: string; userContext: UserContext; }): Promise<{ redirectTo: string; status: "OK"; } | ErrorOAuth2>; rejectLoginRequest(input: { challenge: string; error: ErrorOAuth2; userContext: UserContext; }): Promise<{ redirectTo: string; status: "OK"; } | ErrorOAuth2>; getOAuth2Client(input: { clientId: string; userContext: UserContext; }): Promise<{ status: "OK"; client: OAuth2Client; } | { status: "ERROR"; error: string; errorDescription: string; }>; getOAuth2Clients(input: GetOAuth2ClientsInput & { userContext: UserContext; }): Promise<{ status: "OK"; clients: Array; nextPaginationToken?: string; } | { status: "ERROR"; error: string; errorDescription: string; }>; createOAuth2Client(input: CreateOAuth2ClientInput & { userContext: UserContext; }): Promise<{ status: "OK"; client: OAuth2Client; } | { status: "ERROR"; error: string; errorDescription: string; }>; updateOAuth2Client(input: UpdateOAuth2ClientInput & { userContext: UserContext; }): Promise<{ status: "OK"; client: OAuth2Client; } | { status: "ERROR"; error: string; errorDescription: string; }>; deleteOAuth2Client(input: DeleteOAuth2ClientInput & { userContext: UserContext; }): Promise<{ status: "OK"; } | { status: "ERROR"; error: string; errorDescription: string; }>; validateOAuth2AccessToken(input: { token: string; requirements?: { clientId?: string; scopes?: string[]; audience?: string; }; checkDatabase?: boolean; userContext: UserContext; }): Promise<{ status: "OK"; payload: JSONObject; }>; getRequestedScopes(input: { recipeUserId: RecipeUserId | undefined; sessionHandle: string | undefined; scopeParam: string[]; clientId: string; userContext: UserContext; }): Promise; buildAccessTokenPayload(input: { user: User | undefined; client: OAuth2Client; sessionHandle: string | undefined; scopes: string[]; userContext: UserContext; }): Promise; buildIdTokenPayload(input: { user: User | undefined; client: OAuth2Client; sessionHandle: string | undefined; scopes: string[]; userContext: UserContext; }): Promise; buildUserInfo(input: { user: User; accessTokenPayload: JSONObject; scopes: string[]; tenantId: string; userContext: UserContext; }): Promise; getFrontendRedirectionURL(input: { type: "login"; loginChallenge: string; tenantId: string; forceFreshAuth: boolean; hint: string | undefined; userContext: UserContext; } | { type: "try-refresh"; loginChallenge: string; userContext: UserContext; } | { type: "logout-confirmation"; logoutChallenge: string; userContext: UserContext; } | { type: "post-logout-fallback"; userContext: UserContext; }): Promise; revokeToken(input: { token: string; userContext: UserContext; } & ({ authorizationHeader: string; } | { clientId: string; clientSecret?: string; })): Promise<{ status: "OK"; } | ErrorOAuth2>; revokeTokensByClientId(input: { clientId: string; userContext: UserContext; }): Promise<{ status: "OK"; }>; revokeTokensBySessionHandle(input: { sessionHandle: string; userContext: UserContext; }): Promise<{ status: "OK"; }>; introspectToken(input: { token: string; scopes?: string[]; userContext: UserContext; }): Promise<(InstrospectTokenResponse & { status: "OK"; }) | ErrorOAuth2>; endSession(input: { params: Record; session?: SessionContainerInterface; shouldTryRefresh: boolean; userContext: UserContext; }): Promise<{ redirectTo: string; } | ErrorOAuth2>; acceptLogoutRequest(input: { challenge: string; userContext: UserContext; }): Promise<{ redirectTo: string; } | ErrorOAuth2>; rejectLogoutRequest(input: { challenge: string; userContext: UserContext; }): Promise<{ status: "OK"; }>; }; export type APIInterface = { loginGET: undefined | ((input: { loginChallenge: string; options: APIOptions; session?: SessionContainerInterface; shouldTryRefresh: boolean; userContext: UserContext; }) => Promise<{ frontendRedirectTo: string; cookies?: string[]; } | ErrorOAuth2 | GeneralErrorResponse>); authGET: undefined | ((input: { params: any; cookie: string | undefined; session: SessionContainerInterface | undefined; shouldTryRefresh: boolean; options: APIOptions; userContext: UserContext; }) => Promise<{ redirectTo: string; cookies?: string[]; } | ErrorOAuth2 | GeneralErrorResponse>); tokenPOST: undefined | ((input: { authorizationHeader?: string; body: any; options: APIOptions; userContext: UserContext; }) => Promise); loginInfoGET: undefined | ((input: { loginChallenge: string; options: APIOptions; userContext: UserContext; }) => Promise<{ status: "OK"; info: LoginInfo; } | ErrorOAuth2 | GeneralErrorResponse>); userInfoGET: undefined | ((input: { accessTokenPayload: JSONObject; user: User; scopes: string[]; tenantId: string; options: APIOptions; userContext: UserContext; }) => Promise); revokeTokenPOST: undefined | ((input: { token: string; options: APIOptions; userContext: UserContext; } & ({ authorizationHeader: string; } | { clientId: string; clientSecret?: string; })) => Promise<{ status: "OK"; } | ErrorOAuth2>); introspectTokenPOST: undefined | ((input: { token: string; scopes?: string[]; options: APIOptions; userContext: UserContext; }) => Promise); endSessionGET: undefined | ((input: { params: Record; session?: SessionContainerInterface; shouldTryRefresh: boolean; options: APIOptions; userContext: UserContext; }) => Promise<{ redirectTo: string; } | ErrorOAuth2 | GeneralErrorResponse>); endSessionPOST: undefined | ((input: { params: Record; session?: SessionContainerInterface; shouldTryRefresh: boolean; options: APIOptions; userContext: UserContext; }) => Promise<{ redirectTo: string; } | ErrorOAuth2 | GeneralErrorResponse>); logoutPOST: undefined | ((input: { logoutChallenge: string; options: APIOptions; session?: SessionContainerInterface; userContext: UserContext; }) => Promise<{ status: "OK"; frontendRedirectTo: string; } | ErrorOAuth2 | GeneralErrorResponse>); }; export type OAuth2ClientOptions = { clientId: string; clientSecret?: string; createdAt: string; updatedAt: string; clientName: string; scope: string; redirectUris?: string[] | null; postLogoutRedirectUris?: string[]; authorizationCodeGrantAccessTokenLifespan?: string | null; authorizationCodeGrantIdTokenLifespan?: string | null; authorizationCodeGrantRefreshTokenLifespan?: string | null; clientCredentialsGrantAccessTokenLifespan?: string | null; implicitGrantAccessTokenLifespan?: string | null; implicitGrantIdTokenLifespan?: string | null; refreshTokenGrantAccessTokenLifespan?: string | null; refreshTokenGrantIdTokenLifespan?: string | null; refreshTokenGrantRefreshTokenLifespan?: string | null; tokenEndpointAuthMethod: string; audience?: string[]; grantTypes?: string[] | null; responseTypes?: string[] | null; clientUri?: string; logoUri?: string; policyUri?: string; tosUri?: string; metadata?: Record; enableRefreshTokenRotation?: boolean; }; export type GetOAuth2ClientsInput = { /** * Items per Page. Defaults to 250. */ pageSize?: number; /** * Next Page Token. Defaults to "1". */ paginationToken?: string; /** * The name of the clients to filter by. */ clientName?: string; }; export type CreateOAuth2ClientInput = Partial>; export type UpdateOAuth2ClientInput = NonNullableProperties> & { clientId: string; redirectUris?: string[] | null; grantTypes?: string[] | null; responseTypes?: string[] | null; metadata?: Record | null; }; export type DeleteOAuth2ClientInput = { clientId: string; }; export type PayloadBuilderFunction = (user: User, scopes: string[], sessionHandle: string, userContext: UserContext) => Promise; export type UserInfoBuilderFunction = (user: User, accessTokenPayload: JSONObject, scopes: string[], tenantId: string, userContext: UserContext) => Promise;