From fb7ddf6aa98470796720b297ddbf44d2a00b7f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomek=20=C5=81aziuk?= Date: Mon, 4 Dec 2017 21:55:13 +0100 Subject: [PATCH 1/3] koa-passport 4.0 --- types/koa-passport/index.d.ts | 72 +++++++++++++----------- types/koa-passport/koa-passport-tests.ts | 1 + 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/types/koa-passport/index.d.ts b/types/koa-passport/index.d.ts index d7d63cee96..cf1f66cbe2 100644 --- a/types/koa-passport/index.d.ts +++ b/types/koa-passport/index.d.ts @@ -1,6 +1,7 @@ -// Type definitions for koa-passport 2.x +// Type definitions for koa-passport 4.0 // Project: https://github.com/rkusa/koa-passport // Definitions by: horiuchi +// Tomek Łaziuk // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 @@ -12,52 +13,57 @@ =============================================== */ -import * as Koa from "koa"; +import { + Middleware, +} from "koa"; + +import * as passport from "passport"; + declare module "koa" { interface Context { - authInfo?: any; - user?: any; - login(user: any): Promise; login(user: any, options: Object): Promise; - logIn(user: any): Promise; - logIn(user: any, options: Object): Promise; + logIn: Context["login"]; logout(): void; - logOut(): void; + logOut: Context["logout"]; isAuthenticated(): boolean; isUnauthenticated(): boolean; } } -import * as passport from "passport"; - -interface KoaPassport { - use(strategy: passport.Strategy): this; - use(name: string, strategy: passport.Strategy): this; - unuse(name: string): this; - framework(fw: passport.Framework): this; - initialize(options?: { userProperty: string; }): Koa.Middleware; - session(options?: { pauseStream: boolean; }): Koa.Middleware; - - authenticate(strategy: string, callback?: Function): Koa.Middleware; - authenticate(strategy: string, options: Object, callback?: Function): Koa.Middleware; - authenticate(strategies: string[], callback?: Function): Koa.Middleware; - authenticate(strategies: string[], options: Object, callback?: Function): Koa.Middleware; - authorize(strategy: string, callback?: Function): Koa.Middleware; - authorize(strategy: string, options: Object, callback?: Function): Koa.Middleware; - authorize(strategies: string[], callback?: Function): Koa.Middleware; - authorize(strategies: string[], options: Object, callback?: Function): Koa.Middleware; - serializeUser(fn: (user: any, done: (err: any, id: any) => void) => void): void; - deserializeUser(fn: (id: any, done: (err: any, user: any) => void) => void): void; - transformAuthInfo(fn: (info: any, done: (err: any, info: any) => void) => void): void; -} -declare const koaPassport: KoaPassport; declare namespace KoaPassport { - interface Profile extends passport.Profile { } - interface Framework extends passport.Framework { } + + interface KoaPassport { + use(strategy: passport.Strategy): this; + use(name: string, strategy: passport.Strategy): this; + unuse(name: string): this; + framework(fw: passport.Framework): this; + initialize(options?: { userProperty: string; }): Middleware; + session(options?: { pauseStream: boolean; }): Middleware; + + authenticate(strategy: string, callback?: Function): Middleware; + authenticate(strategy: string, options: Object, callback?: Function): Middleware; + authenticate(strategies: string[], callback?: Function): Middleware; + authenticate(strategies: string[], options: Object, callback?: Function): Middleware; + authorize(strategy: string, callback?: Function): Middleware; + authorize(strategy: string, options: Object, callback?: Function): Middleware; + authorize(strategies: string[], callback?: Function): Middleware; + authorize(strategies: string[], options: Object, callback?: Function): Middleware; + serializeUser(fn: (user: any, done: (err: any, id: any) => void) => void): void; + deserializeUser(fn: (id: any, done: (err: any, user: any) => void) => void): void; + transformAuthInfo(fn: (info: any, done: (err: any, info: any) => void) => void): void; + } + + interface Static extends KoaPassport { + KoaPassport: { new(): KoaPassport }; + Passport: { new(): passport.Passport }; + Authenticator: Static["Passport"]; + } } +declare const koaPassport: KoaPassport.Static; + export = koaPassport; diff --git a/types/koa-passport/koa-passport-tests.ts b/types/koa-passport/koa-passport-tests.ts index eebb67a3b1..c4c3948b92 100644 --- a/types/koa-passport/koa-passport-tests.ts +++ b/types/koa-passport/koa-passport-tests.ts @@ -36,3 +36,4 @@ app.use( }) ); +class KoaPasspordChild extends passport.KoaPassport { } From 1b079f306b10857ad17ac38190e9fb8f1d205b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomek=20=C5=81aziuk?= Date: Fri, 8 Dec 2017 17:17:42 +0100 Subject: [PATCH 2/3] improve typings --- types/koa-passport/index.d.ts | 27 ++++++------ types/koa-passport/tslint.json | 78 +--------------------------------- 2 files changed, 13 insertions(+), 92 deletions(-) diff --git a/types/koa-passport/index.d.ts b/types/koa-passport/index.d.ts index cf1f66cbe2..34fe0da391 100644 --- a/types/koa-passport/index.d.ts +++ b/types/koa-passport/index.d.ts @@ -22,7 +22,7 @@ import * as passport from "passport"; declare module "koa" { interface Context { login(user: any): Promise; - login(user: any, options: Object): Promise; + login(user: any, options: any): Promise; logIn: Context["login"]; logout(): void; @@ -36,7 +36,7 @@ declare module "koa" { declare namespace KoaPassport { - interface KoaPassport { + class KoaPassport { use(strategy: passport.Strategy): this; use(name: string, strategy: passport.Strategy): this; unuse(name: string): this; @@ -44,22 +44,19 @@ declare namespace KoaPassport { initialize(options?: { userProperty: string; }): Middleware; session(options?: { pauseStream: boolean; }): Middleware; - authenticate(strategy: string, callback?: Function): Middleware; - authenticate(strategy: string, options: Object, callback?: Function): Middleware; - authenticate(strategies: string[], callback?: Function): Middleware; - authenticate(strategies: string[], options: Object, callback?: Function): Middleware; - authorize(strategy: string, callback?: Function): Middleware; - authorize(strategy: string, options: Object, callback?: Function): Middleware; - authorize(strategies: string[], callback?: Function): Middleware; - authorize(strategies: string[], options: Object, callback?: Function): Middleware; - serializeUser(fn: (user: any, done: (err: any, id: any) => void) => void): void; - deserializeUser(fn: (id: any, done: (err: any, user: any) => void) => void): void; - transformAuthInfo(fn: (info: any, done: (err: any, info: any) => void) => void): void; + authenticate(strategy: string | string[], callback?: (...args: any[]) => any): Middleware; + authenticate(strategy: string | string[], options: passport.AuthenticateOptions, callback?: (...args: any[]) => any): Middleware; + authorize(strategy: string | string[], callback?: (...args: any[]) => any): Middleware; + authorize(strategy: string | string[], options: any, callback?: (...args: any[]) => any): Middleware; + + serializeUser: passport.Passport["serializeUser"]; + deserializeUser: passport.Passport["deserializeUser"]; + transformAuthInfo: passport.Passport["transformAuthInfo"]; } interface Static extends KoaPassport { - KoaPassport: { new(): KoaPassport }; - Passport: { new(): passport.Passport }; + KoaPassport: typeof KoaPassport; + Passport: typeof passport.Passport; Authenticator: Static["Passport"]; } } diff --git a/types/koa-passport/tslint.json b/types/koa-passport/tslint.json index a41bf5d19a..f93cf8562a 100644 --- a/types/koa-passport/tslint.json +++ b/types/koa-passport/tslint.json @@ -1,79 +1,3 @@ { - "extends": "dtslint/dt.json", - "rules": { - "adjacent-overload-signatures": false, - "array-type": false, - "arrow-return-shorthand": false, - "ban-types": false, - "callable-types": false, - "comment-format": false, - "dt-header": false, - "eofline": false, - "export-just-namespace": false, - "import-spacing": false, - "interface-name": false, - "interface-over-type-literal": false, - "jsdoc-format": false, - "max-line-length": false, - "member-access": false, - "new-parens": false, - "no-any-union": false, - "no-boolean-literal-compare": false, - "no-conditional-assignment": false, - "no-consecutive-blank-lines": false, - "no-construct": false, - "no-declare-current-package": false, - "no-duplicate-imports": false, - "no-duplicate-variable": false, - "no-empty-interface": false, - "no-for-in-array": false, - "no-inferrable-types": false, - "no-internal-module": false, - "no-irregular-whitespace": false, - "no-mergeable-namespace": false, - "no-misused-new": false, - "no-namespace": false, - "no-object-literal-type-assertion": false, - "no-padding": false, - "no-redundant-jsdoc": false, - "no-redundant-jsdoc-2": false, - "no-redundant-undefined": false, - "no-reference-import": false, - "no-relative-import-in-test": false, - "no-self-import": false, - "no-single-declare-module": false, - "no-string-throw": false, - "no-unnecessary-callback-wrapper": false, - "no-unnecessary-class": false, - "no-unnecessary-generics": false, - "no-unnecessary-qualifier": false, - "no-unnecessary-type-assertion": false, - "no-useless-files": false, - "no-var-keyword": false, - "no-var-requires": false, - "no-void-expression": false, - "no-trailing-whitespace": false, - "object-literal-key-quotes": false, - "object-literal-shorthand": false, - "one-line": false, - "one-variable-per-declaration": false, - "only-arrow-functions": false, - "prefer-conditional-expression": false, - "prefer-const": false, - "prefer-declare-function": false, - "prefer-for-of": false, - "prefer-method-signature": false, - "prefer-template": false, - "radix": false, - "semicolon": false, - "space-before-function-paren": false, - "space-within-parens": false, - "strict-export-declare-modifiers": false, - "trim-file": false, - "triple-equals": false, - "typedef-whitespace": false, - "unified-signatures": false, - "void-return": false, - "whitespace": false - } + "extends": "dtslint/dt.json" } From c47037f15d5fb2ef1e1af06bcb85db65c6c99b94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomek=20=C5=81aziuk?= Date: Fri, 8 Dec 2017 18:25:34 +0100 Subject: [PATCH 3/3] lint --- types/koa-passport/index.d.ts | 5 +---- types/koa-passport/koa-passport-tests.ts | 7 ++----- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/types/koa-passport/index.d.ts b/types/koa-passport/index.d.ts index 34fe0da391..0a011a06d5 100644 --- a/types/koa-passport/index.d.ts +++ b/types/koa-passport/index.d.ts @@ -21,8 +21,7 @@ import * as passport from "passport"; declare module "koa" { interface Context { - login(user: any): Promise; - login(user: any, options: any): Promise; + login(user: any, options?: any): Promise; logIn: Context["login"]; logout(): void; @@ -33,9 +32,7 @@ declare module "koa" { } } - declare namespace KoaPassport { - class KoaPassport { use(strategy: passport.Strategy): this; use(name: string, strategy: passport.Strategy): this; diff --git a/types/koa-passport/koa-passport-tests.ts b/types/koa-passport/koa-passport-tests.ts index c4c3948b92..42827a85ba 100644 --- a/types/koa-passport/koa-passport-tests.ts +++ b/types/koa-passport/koa-passport-tests.ts @@ -2,13 +2,11 @@ import * as Koa from 'koa'; import * as passport from 'koa-passport'; const app = new Koa(); -let ctx: Koa.Context; - app.use(passport.initialize()); app.use(passport.session()); -app.use(async (ctx: Koa.Context): Promise => { +app.use(async (ctx): Promise => { ctx.isAuthenticated(); ctx.isUnauthenticated(); ctx.login({}); @@ -16,8 +14,7 @@ app.use(async (ctx: Koa.Context): Promise => { ctx.state.user; }); - -app.use(async (ctx: Koa.Context, next: () => Promise) => { +app.use(async (ctx, next) => { return passport.authenticate('local', (user: any, info: any, status: any) => { if (user === false) { ctx.status = 401;