Skip to content

Commit eb4d40e

Browse files
climba03003fox1t
andauthored
fix getAccessTokenFromAuthorizationCodeFlow typings (#66)
* Add: Schema and Tags Options Schema and Tags Options for fastify-swagger API Generation Resolve: #64 * Add: Documentation * Update index.d.ts use primitive type instead of non primitive type Co-authored-by: Maksim Sinik <[email protected]> * Add: Missing Type Assertion tags, schema type assertion * Fix: TSD testing remove schema type check because it is hard to determine the exact type for assertion * Update: Typings - reorganize typings - update type checking * update README.md * update test.js options.schema use onRoute hook Co-authored-by: Maksim Sinik <[email protected]>
1 parent abf8f11 commit eb4d40e

File tree

2 files changed

+80
-84
lines changed

2 files changed

+80
-84
lines changed

index.d.ts

Lines changed: 58 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,70 @@
1-
import { FastifyRequest, FastifyInstance, RawServerBase, RawRequestDefaultExpression, RawReplyDefaultExpression, FastifyError } from 'fastify';
1+
import { FastifyPlugin, FastifyRequest } from 'fastify';
22

3-
declare function fastifyOauth2 (
4-
instance: FastifyInstance,
5-
opts: fastifyOauth2.FastifyOAuth2Options,
6-
next: (err?: FastifyError) => void
7-
): void;
3+
interface FastifyOAuth2 {
4+
APPLE_CONFIGURATION: ProviderConfiguration;
5+
FACEBOOK_CONFIGURATION: ProviderConfiguration;
6+
GITHUB_CONFIGURATION: ProviderConfiguration;
7+
LINKEDIN_CONFIGURATION: ProviderConfiguration;
8+
GOOGLE_CONFIGURATION: ProviderConfiguration;
9+
MICROSOFT_CONFIGURATION: ProviderConfiguration;
10+
SPOTIFY_CONFIGURATION: ProviderConfiguration;
11+
VKONTAKTE_CONFIGURATION: ProviderConfiguration;
12+
}
813

9-
declare namespace fastifyOauth2 {
10-
const APPLE_CONFIGURATION: ProviderConfiguration;
11-
const FACEBOOK_CONFIGURATION: ProviderConfiguration;
12-
const GITHUB_CONFIGURATION: ProviderConfiguration;
13-
const LINKEDIN_CONFIGURATION: ProviderConfiguration;
14-
const GOOGLE_CONFIGURATION: ProviderConfiguration;
15-
const MICROSOFT_CONFIGURATION: ProviderConfiguration;
16-
const SPOTIFY_CONFIGURATION: ProviderConfiguration;
17-
const VKONTAKTE_CONFIGURATION: ProviderConfiguration;
14+
export const fastifyOauth2: FastifyPlugin<FastifyOAuth2Options> & FastifyOAuth2
1815

19-
interface OAuth2Token {
20-
token_type: 'bearer';
21-
access_token: string;
22-
refresh_token?: string;
23-
expires_in: number;
24-
}
16+
export interface FastifyOAuth2Options {
17+
name: string;
18+
scope: string[];
19+
credentials: Credentials;
20+
callbackUri: string;
21+
callbackUriParams?: Object;
22+
generateStateFunction?: Function;
23+
checkStateFunction?: Function;
24+
startRedirectPath: string;
25+
tags?: string[];
26+
schema?: object;
27+
}
2528

26-
interface OAuth2Namespace {
27-
getAccessTokenFromAuthorizationCodeFlow(
28-
request: FastifyRequest,
29-
): Promise<OAuth2Token>;
29+
export interface OAuth2Token {
30+
token_type: 'bearer';
31+
access_token: string;
32+
refresh_token?: string;
33+
expires_in: number;
34+
}
3035

31-
getAccessTokenFromAuthorizationCodeFlow(
32-
request: FastifyRequest,
33-
callback: (token: OAuth2Token) => void,
34-
): void;
36+
export interface ProviderConfiguration {
37+
authorizeHost: string;
38+
authorizePath: string;
39+
tokenHost: string;
40+
tokenPath: string;
41+
}
3542

36-
getNewAccessTokenUsingRefreshToken(
37-
refreshToken: string,
38-
params: Object,
39-
callback: (token: OAuth2Token) => void,
40-
): void;
43+
export interface Credentials {
44+
client: {
45+
id: string;
46+
secret: string;
47+
};
48+
auth: ProviderConfiguration;
49+
}
4150

42-
getNewAccessTokenUsingRefreshToken(refreshToken: string, params: Object): Promise<OAuth2Token>;
43-
}
51+
export interface OAuth2Namespace {
52+
getAccessTokenFromAuthorizationCodeFlow(
53+
request: FastifyRequest,
54+
): Promise<OAuth2Token>;
4455

45-
interface ProviderConfiguration {
46-
authorizeHost: string;
47-
authorizePath: string;
48-
tokenHost: string;
49-
tokenPath: string;
50-
}
56+
getAccessTokenFromAuthorizationCodeFlow(
57+
request: FastifyRequest,
58+
callback: (err: any, token: OAuth2Token) => void,
59+
): void;
5160

52-
interface Credentials {
53-
client: {
54-
id: string;
55-
secret: string;
56-
};
57-
auth: ProviderConfiguration;
58-
}
61+
getNewAccessTokenUsingRefreshToken(
62+
refreshToken: string,
63+
params: Object,
64+
callback: (err: any, token: OAuth2Token) => void,
65+
): void;
5966

60-
interface FastifyOAuth2Options {
61-
name: string;
62-
scope: string[];
63-
credentials: Credentials;
64-
callbackUri: string;
65-
callbackUriParams?: Object;
66-
generateStateFunction?: Function;
67-
checkStateFunction?: Function;
68-
startRedirectPath: string;
69-
tags?: string[];
70-
schema?: object;
71-
}
67+
getNewAccessTokenUsingRefreshToken(refreshToken: string, params: Object): Promise<OAuth2Token>;
7268
}
7369

74-
export = fastifyOauth2;
70+
export default fastifyOauth2;

index.test-d.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import fastify, { FastifyInstance } from 'fastify';
2-
import * as fastifyOauth2 from '.';
2+
import fastifyOauth2, { OAuth2Namespace, ProviderConfiguration, Credentials, OAuth2Token } from '.';
33
import { expectType, expectError, expectAssignable } from 'tsd';
44
import { Server, IncomingMessage, ServerResponse } from 'http';
55

@@ -34,66 +34,66 @@ server.register(fastifyOauth2, OAuth2Options);
3434
declare module 'fastify' {
3535
// Developers need to define this in their code like they have to do with all decorators.
3636
interface FastifyInstance {
37-
testOAuthName: fastifyOauth2.OAuth2Namespace;
37+
testOAuthName: OAuth2Namespace;
3838
}
3939
}
4040

4141
/**
4242
* Actual testing.
4343
*/
44-
expectType<fastifyOauth2.ProviderConfiguration>(auth);
44+
expectType<ProviderConfiguration>(auth);
4545
expectType<string[]>(scope);
4646
expectType<string[]>(tags);
47-
expectType<fastifyOauth2.Credentials>(credentials);
47+
expectType<Credentials>(credentials);
4848

4949
expectError(fastifyOauth2()); // error because missing required arguments
5050
expectError(fastifyOauth2(server, {}, () => {})); // error because missing required options
5151

52-
expectAssignable<fastifyOauth2.ProviderConfiguration>(fastifyOauth2.FACEBOOK_CONFIGURATION);
53-
expectAssignable<fastifyOauth2.ProviderConfiguration>(fastifyOauth2.GITHUB_CONFIGURATION);
54-
expectAssignable<fastifyOauth2.ProviderConfiguration>(fastifyOauth2.GOOGLE_CONFIGURATION);
55-
expectAssignable<fastifyOauth2.ProviderConfiguration>(fastifyOauth2.LINKEDIN_CONFIGURATION);
56-
expectAssignable<fastifyOauth2.ProviderConfiguration>(fastifyOauth2.MICROSOFT_CONFIGURATION);
57-
expectAssignable<fastifyOauth2.ProviderConfiguration>(fastifyOauth2.SPOTIFY_CONFIGURATION);
58-
expectAssignable<fastifyOauth2.ProviderConfiguration>(fastifyOauth2.VKONTAKTE_CONFIGURATION);
52+
expectAssignable<ProviderConfiguration>(fastifyOauth2.FACEBOOK_CONFIGURATION);
53+
expectAssignable<ProviderConfiguration>(fastifyOauth2.GITHUB_CONFIGURATION);
54+
expectAssignable<ProviderConfiguration>(fastifyOauth2.GOOGLE_CONFIGURATION);
55+
expectAssignable<ProviderConfiguration>(fastifyOauth2.LINKEDIN_CONFIGURATION);
56+
expectAssignable<ProviderConfiguration>(fastifyOauth2.MICROSOFT_CONFIGURATION);
57+
expectAssignable<ProviderConfiguration>(fastifyOauth2.SPOTIFY_CONFIGURATION);
58+
expectAssignable<ProviderConfiguration>(fastifyOauth2.VKONTAKTE_CONFIGURATION);
5959

6060
server.get('/testOauth/callback', async request => {
61-
expectType<fastifyOauth2.OAuth2Namespace>(server.testOAuthName);
61+
expectType<OAuth2Namespace>(server.testOAuthName);
6262

63-
expectType<fastifyOauth2.OAuth2Token>(await server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request));
64-
expectType<Promise<fastifyOauth2.OAuth2Token>>(server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request));
63+
expectType<OAuth2Token>(await server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request));
64+
expectType<Promise<OAuth2Token>>(server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request));
6565
expectType<void>(
66-
server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request, (t: fastifyOauth2.OAuth2Token): void => {}),
66+
server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request, (err: any, t: OAuth2Token): void => {}),
6767
);
6868

6969
expectError<void>(await server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request)); // error because Promise should not return void
70-
expectError<fastifyOauth2.OAuth2Token>(
71-
server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request, (t: fastifyOauth2.OAuth2Token): void => {}),
70+
expectError<OAuth2Token>(
71+
server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request, (err: any, t: OAuth2Token): void => {}),
7272
); // error because non-Promise function call should return void and have a callback argument
7373
expectError<void>(server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request)); // error because function call does not pass a callback as second argument.
7474

7575
const token = await server.testOAuthName.getAccessTokenFromAuthorizationCodeFlow(request);
7676
if (token.refresh_token) {
77-
expectType<fastifyOauth2.OAuth2Token>(
77+
expectType<OAuth2Token>(
7878
await server.testOAuthName.getNewAccessTokenUsingRefreshToken(token.refresh_token, {}),
7979
);
80-
expectType<Promise<fastifyOauth2.OAuth2Token>>(
80+
expectType<Promise<OAuth2Token>>(
8181
server.testOAuthName.getNewAccessTokenUsingRefreshToken(token.refresh_token, {}),
8282
);
8383
expectType<void>(
8484
server.testOAuthName.getNewAccessTokenUsingRefreshToken(
8585
token.refresh_token,
8686
{},
87-
(t: fastifyOauth2.OAuth2Token): void => {},
87+
(err: any, t: OAuth2Token): void => { },
8888
),
8989
);
9090

9191
expectError<void>(await server.testOAuthName.getNewAccessTokenUsingRefreshToken(token.refresh_token, {})); // error because Promise should not return void
92-
expectError<fastifyOauth2.OAuth2Token>(
92+
expectError<OAuth2Token>(
9393
server.testOAuthName.getNewAccessTokenUsingRefreshToken(
9494
token.refresh_token,
9595
{},
96-
(t: fastifyOauth2.OAuth2Token): void => {},
96+
(err: any, t: OAuth2Token): void => { },
9797
),
9898
); // error because non-Promise function call should return void and have a callback argument
9999
expectError<void>(server.testOAuthName.getNewAccessTokenUsingRefreshToken(token.refresh_token, {})); // error because function call does not pass a callback as second argument.

0 commit comments

Comments
 (0)