Skip to main content
Version: 7.2.X

Overriding APIs

Main interface#

interface APIInterface {
/*
* Called to get the authorisation URL for the thirdparty sign-up/sign-in flow
*
* @method: GET
*
* @params: set it to undefined to disable the API.
* provider
* options: see APIOptions below
*
* @returns: "OK" and url on success
*/
authorisationUrlGET:
| undefined
| ((input: {
provider: TypeProvider;
options: APIOptions;
}) => Promise<{
status: "OK";
url: string;
}>);

/*
* Called to sign-up a new user or sign-in an existing user
*
* @method: POST
*
* @params: set it to undefined to disable the API.
* provider
* code: authorisation code returned after using authorisation url
* redirectURI: URI to direct to after successful sign-up/sign-in
* options: see APIOptions below
*
* @returns: "OK": on successfully signing up or signing in the user
* "NO_EMAIL_GIVEN_BY_PROVIDER": if thirdparty provider used in the API doesn't return email of the user
* "FIELD_ERROR": if there is any field error during thirdparty signup/signin flow
*/
signInUpPOST:
| undefined
| ((input: {
provider: TypeProvider;
code: string;
redirectURI: string;
options: APIOptions;
}) => Promise<
| {
status: "OK";
createdNewUser: boolean;
user: User;
authCodeResponse: any;
}
| { status: "NO_EMAIL_GIVEN_BY_PROVIDER" }
| {
status: "FIELD_ERROR";
error: string;
}
>);
}

Supporting Types#

interface BaseRequest {
original: Express.Request;
getKeyValueFromQuery: (key: string) => Promise<string | undefined>;
getJSONBody: () => Promise<any>;
getMethod: () => HTTPMethod;
getCookieValue: (key_: string) => string | undefined;
getHeaderValue: (key: string) => string | undefined;
getOriginalURL: () => string;
}

interface BaseResponse {
original: Express.Response;
setHeader: (key: string, value: string, allowDuplicateKey: boolean) => void;
setCookie: (
key: string,
value: string,
domain: string | undefined,
secure: boolean,
httpOnly: boolean,
expires: number,
path: string,
sameSite: "strict" | "lax" | "none"
) => void;
setStatusCode: (statusCode: number) => void;
sendJSONResponse: (content: any) => void;
}
interface BaseRequest {
// NestJS uses library-specific types for Request and Response
// You should use the one provided by your underlying framework (the default is Express)
original: Express.Request;
getKeyValueFromQuery: (key: string) => Promise<string | undefined>;
getJSONBody: () => Promise<any>;
getMethod: () => HTTPMethod;
getCookieValue: (key_: string) => string | undefined;
getHeaderValue: (key: string) => string | undefined;
getOriginalURL: () => string;
}

interface BaseResponse {
// NestJS uses library-specific types for Request and Response
// You should use the one provided by your underlying framework (the default is Express)
original: Express.Response;
setHeader: (key: string, value: string, allowDuplicateKey: boolean) => void;
setCookie: (
key: string,
value: string,
domain: string | undefined,
secure: boolean,
httpOnly: boolean,
expires: number,
path: string,
sameSite: "strict" | "lax" | "none"
) => void;
setStatusCode: (statusCode: number) => void;
sendJSONResponse: (content: any) => void;
}
interface APIOptions {
recipeImplementation: RecipeInterface;
config: TypeNormalisedInput;
recipeId: string;
isInServerlessEnv: boolean;
providers: TypeProvider[];
req: BaseRequest;
res: BaseResponse;
}

interface TypeProvider {
id: string;
get: (redirectURI: string | undefined, authCodeFromRequest: string | undefined) => Promise<TypeProviderGetResponse>;
}
Which frontend SDK do you use?
supertokens-web-js / mobile
supertokens-auth-react