forked from fastify/fastify-jwt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jwt.test-d.ts
120 lines (108 loc) · 3.2 KB
/
jwt.test-d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import fastify from 'fastify';
import fastifyJwt, { FastifyJWTOptions } from './jwt'
import { expectAssignable } from 'tsd'
const app = fastify();
const secretOptions = {
secret: 'supersecret',
publicPrivateKey: {
public: 'publicKey',
private: 'privateKey'
},
secretFnCallback: (_req, _token, cb) => { cb(null, 'supersecret') },
secretFnPromise: (_req, _token) => Promise.resolve('supersecret'),
secretFnAsync: async (_req, _token) => 'supersecret',
publicPrivateKeyFn: {
public: (_req, _rep, cb) => { cb(null, 'publicKey') },
private: 'privateKey'
},
publicPrivateKeyFn2: {
public: 'publicKey',
private: (_req, _rep, cb) => { cb(null, 'privateKey') },
}
}
const jwtOptions: FastifyJWTOptions = {
secret: 'supersecret',
sign: {
expiresIn: 3600
},
cookie: {
cookieName: 'jwt',
signed: false
},
verify: {
maxAge: '1 hour',
extractToken: (request) => 'token'
},
decode: {
complete: true
},
messages: {
badRequestErrorMessage: 'Bad Request',
noAuthorizationInHeaderMessage: 'No Header',
authorizationTokenExpiredMessage: 'Token Expired',
authorizationTokenInvalid: (err) => `${err.message}`,
authorizationTokenUntrusted: 'Token untrusted'
},
trusted: () => false || '' || Buffer.from('foo'),
formatUser: payload => {
const objectPayload = typeof payload === 'string'
? JSON.parse(payload)
: Buffer.isBuffer(payload)
? JSON.parse(payload.toString())
: payload;
return { name: objectPayload.userName }
},
jwtDecode: true,
namespace: 'security',
jwtVerify: 'securityVerify',
jwtSign: 'securitySign'
}
app.register(fastifyJwt, jwtOptions);
Object.values(secretOptions).forEach((value) => {
app.register(fastifyJwt, {...jwtOptions, secret: value });
})
app.register(fastifyJwt, {...jwtOptions, trusted: () => Promise.resolve(false || '' || Buffer.from('foo')) })
// expect jwt and its subsequent methods have merged with the fastify instance
expectAssignable<object>(app.jwt)
expectAssignable<Function>(app.jwt.sign)
expectAssignable<Function>(app.jwt.verify)
expectAssignable<Function>(app.jwt.decode)
expectAssignable<FastifyJWTOptions['cookie']>(app.jwt.cookie)
app.addHook("preHandler", async (request, reply) => {
// assert request and reply specific interface merges
expectAssignable<Function>(request.jwtVerify)
expectAssignable<Function>(request.jwtDecode)
expectAssignable<object | string | Buffer>(request.user)
expectAssignable<Function>(reply.jwtSign)
try {
await request.jwtVerify();
}
catch (err) {
reply.send(err);
}
});
app.post('/signup', async (req, reply) => {
const token = app.jwt.sign({ user: "userName" });
let data = await app.jwt.verify(token);
const user = req.user;
reply.send({ token });
});
// define custom payload
// declare module './jwt' {
// interface FastifyJWT {
// payload: {
// user: string
// }
// }
// }
// Custom payload with formatUser
// declare module './jwt' {
// interface FastifyJWT {
// payload: {
// user: string
// }
// user: {
// name: string
// }
// }
// }