supertokens-node
Version:
NodeJS driver for SuperTokens core
132 lines (131 loc) • 4.1 kB
TypeScript
// @ts-nocheck
import { BaseRequest, BaseResponse } from "../../framework";
import OverrideableBuilder from "supertokens-js-override";
import { GeneralErrorResponse, NormalisedAppinfo, UserContext } from "../../types";
export type TypeInput = {
override?: {
functions?: (originalImplementation: RecipeInterface, builder: OverrideableBuilder<RecipeInterface>) => RecipeInterface;
apis?: (originalImplementation: APIInterface, builder: OverrideableBuilder<APIInterface>) => APIInterface;
};
};
export type TypeNormalisedInput = {
override: {
functions: (originalImplementation: RecipeInterface, builder: OverrideableBuilder<RecipeInterface>) => RecipeInterface;
apis: (originalImplementation: APIInterface, builder: OverrideableBuilder<APIInterface>) => APIInterface;
};
};
export type SAMLClient = {
clientId: string;
redirectURIs: string[];
defaultRedirectURI: string;
idpEntityId: string;
idpSigningCertificate?: string;
allowIDPInitiatedLogin: boolean;
enableRequestSigning: boolean;
};
export type RecipeInterface = {
createOrUpdateClient: (input: {
tenantId: string;
clientId?: string;
clientSecret?: string;
redirectURIs: string[];
defaultRedirectURI: string;
metadataXML: string;
allowIDPInitiatedLogin?: boolean;
enableRequestSigning?: boolean;
userContext: UserContext;
}) => Promise<({
status: "OK";
} & SAMLClient) | {
status: "INVALID_METADATA_XML_ERROR" | "DUPLICATE_IDP_ENTITY_ERROR";
}>;
listClients: (input: {
tenantId: string;
userContext: UserContext;
}) => Promise<{
status: "OK";
clients: SAMLClient[];
}>;
removeClient: (input: {
tenantId: string;
clientId: string;
userContext: UserContext;
}) => Promise<{
status: "OK";
didExist: boolean;
}>;
createLoginRequest: (input: {
tenantId: string;
clientId: string;
redirectURI: string;
state?: string;
acsURL: string;
userContext: UserContext;
}) => Promise<{
status: "OK";
redirectURI: string;
} | {
status: "INVALID_CLIENT_ERROR";
}>;
verifySAMLResponse: (input: {
tenantId: string;
samlResponse: string;
relayState: string | undefined;
userContext: UserContext;
}) => Promise<{
status: "OK";
redirectURI: string;
} | {
status: "SAML_RESPONSE_VERIFICATION_FAILED_ERROR" | "INVALID_RELAY_STATE_ERROR" | "INVALID_CLIENT_ERROR" | "IDP_LOGIN_DISALLOWED_ERROR";
}>;
getUserInfo: (input: {
tenantId: string;
accessToken: string;
clientId: string;
userContext: UserContext;
}) => Promise<{
status: "OK";
sub: string;
email: string;
claims: Record<string, any>;
} | {
status: "INVALID_TOKEN_ERROR";
}>;
};
export type APIOptions = {
recipeImplementation: RecipeInterface;
config: TypeNormalisedInput;
appInfo: NormalisedAppinfo;
recipeId: string;
isInServerlessEnv: boolean;
req: BaseRequest;
res: BaseResponse;
};
export type APIInterface = {
loginGET: undefined | ((input: {
tenantId: string;
clientId: string;
redirectURI: string;
state?: string;
options: APIOptions;
userContext: UserContext;
}) => Promise<{
status: "OK";
redirectURI: string;
state?: string;
} | {
status: "INVALID_CLIENT_ERROR";
} | GeneralErrorResponse>);
callbackPOST: undefined | ((input: {
tenantId: string;
options: APIOptions;
userContext: UserContext;
samlResponse: string;
relayState: string | undefined;
}) => Promise<{
status: "OK";
redirectURI: string;
} | {
status: "SAML_RESPONSE_VERIFICATION_FAILED_ERROR" | "INVALID_RELAY_STATE_ERROR" | "INVALID_CLIENT_ERROR" | "IDP_LOGIN_DISALLOWED_ERROR";
} | GeneralErrorResponse>);
};