declare module "@outlinewiki/koa-passport" { // Type definitions for Passport 1.0 // Project: http://passportjs.org // Definitions by: Horiuchi_H // Eric Naeseth // Igor Belagorudsky // Tomek Łaziuk // Daniel Perez Alvarez // Kevin Stiehl // Oleg Vaskevich // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 import { IncomingMessage } from "http"; // eslint-disable-next-line import Express from "express"; import { Request } from "koa"; import { IMiddleware } from "koa-router"; namespace passport { interface AuthenticateOptions { authInfo?: boolean | undefined; assignProperty?: string | undefined; failureFlash?: string | boolean | undefined; failureMessage?: boolean | string | undefined; failureRedirect?: string | undefined; failWithError?: boolean | undefined; session?: boolean | undefined; scope?: string | string[] | undefined; successFlash?: string | boolean | undefined; successMessage?: boolean | string | undefined; successRedirect?: string | undefined; successReturnToOrRedirect?: string | undefined; state?: string | undefined; pauseStream?: boolean | undefined; userProperty?: string | undefined; passReqToCallback?: boolean | undefined; prompt?: string | undefined; accessType?: string | undefined; } interface Authenticator< InitializeRet = IMiddleware, AuthenticateRet = any, AuthorizeRet = AuthenticateRet, AuthorizeOptions = AuthenticateOptions > { use(strategy: Strategy): this; use(name: string, strategy: Strategy): this; unuse(name: string): this; framework(fw: Framework): Authenticator; initialize(options?: { userProperty: string }): InitializeRet; session(options?: { pauseStream: boolean }): AuthenticateRet; authenticate( strategy: string | string[] | Strategy, callback?: (...args: any[]) => any ): AuthenticateRet; authenticate( strategy: string | string[] | Strategy, options: AuthenticateOptions, callback?: (...args: any[]) => any ): AuthenticateRet; authorize( strategy: string | string[], callback?: (...args: any[]) => any ): AuthorizeRet; authorize( strategy: string | string[], options: AuthorizeOptions, callback?: (...args: any[]) => any ): AuthorizeRet; serializeUser( fn: (user: any, done: (err: any, id?: TID) => void) => void ): void; serializeUser( fn: (req: TR, user: any, done: (err: any, id?: TID) => void) => void ): void; deserializeUser( fn: (id: TID, done: (err: any, user?: any) => void) => void ): void; deserializeUser( fn: (req: TR, id: TID, done: (err: any, user?: any) => void) => void ): void; transformAuthInfo( fn: (info: any, done: (err: any, info: any) => void) => void ): void; } interface PassportStatic extends Authenticator { Authenticator: { new (): Authenticator }; Passport: PassportStatic["Authenticator"]; Strategy: { new (): Strategy & StrategyCreatedStatic }; } interface Strategy { name?: string | undefined; authenticate( this: StrategyCreated, req: Request | Express.Request, options?: any ): any; } interface StrategyCreatedStatic { /** * Authenticate `user`, with optional `info`. * * Strategies should call this function to successfully authenticate a * user. `user` should be an object supplied by the application after it * has been given an opportunity to verify credentials. `info` is an * optional argument containing additional user information. This is * useful for third-party authentication strategies to pass profile * details. */ success(user: any, info?: object): void; /** * Fail authentication, with optional `challenge` and `status`, defaulting * to 401. * * Strategies should call this function to fail an authentication attempt. */ fail(challenge?: string | number, status?: number): void; /** * Redirect to `url` with optional `status`, defaulting to 302. * * Strategies should call this function to redirect the user (via their * user agent) to a third-party website for authentication. */ redirect(url: string, status?: number): void; /** * Pass without making a success or fail decision. * * Under most circumstances, Strategies should not need to call this * function. It exists primarily to allow previous authentication state * to be restored, for example from an HTTP session. */ pass(): void; /** * Internal error while performing authentication. * * Strategies should call this function when an internal error occurs * during the process of performing authentication; for example, if the * user directory is not available. */ error(err: any): void; } type StrategyCreated = { [P in keyof O]: O[P]; }; interface Profile { provider: string; id: string; displayName: string; username?: string | undefined; name?: | { familyName: string; givenName: string; middleName?: string | undefined; } | undefined; emails?: | Array<{ value: string; type?: string | undefined; }> | undefined; photos?: | Array<{ value: string; }> | undefined; } interface Framework< InitializeRet = any, AuthenticateRet = any, AuthorizeRet = AuthenticateRet > { initialize( passport: Authenticator, options?: any ): (...args: any[]) => InitializeRet; authenticate( passport: Authenticator, name: string, options?: any, callback?: (...args: any[]) => any ): (...args: any[]) => AuthenticateRet; authorize?( passport: Authenticator, name: string, options?: any, callback?: (...args: any[]) => any ): (...args: any[]) => AuthorizeRet; } } const passport: passport.PassportStatic; export = passport; }