-
Notifications
You must be signed in to change notification settings - Fork 43
/
types.test-d.ts
118 lines (106 loc) · 3.31 KB
/
types.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
import fastify, {
FastifyInstance,
FastifyReply,
FastifyRequest,
Session
} from 'fastify';
import { expectError, expectType } from 'tsd';
import plugin, { SessionStore } from '..';
class EmptyStore {
set(_sessionId: string, _session: any, _callback: Function) {}
get(_sessionId: string, _callback: Function) {}
destroy(_sessionId: string, _callback: Function) {}
}
declare module 'fastify' {
interface Session {
get<T>(key: string): T;
set(key: string, value: unknown): void;
user?: {
id: number;
};
}
}
expectType<SessionStore>(plugin.Store)
expectType<SessionStore>(plugin.MemoryStore)
const secret = 'ABCDEFGHIJKLNMOPQRSTUVWXYZ012345';
const app: FastifyInstance = fastify();
app.register(plugin);
app.register(plugin, { secret: 'DizIzSecret' });
app.register(plugin, { secret: 'DizIzSecret', rolling: true });
app.register(plugin, {
secret,
rolling: false,
cookie: {
secure: false
}
});
app.register(plugin, {
secret,
cookie: {
secure: false
}
});
app.register(plugin, {
secret,
store: new EmptyStore()
});
app.register(plugin, {
secret,
idGenerator: () => Date.now() + ''
});
app.register(plugin, {
secret,
});
app.register(plugin, {
secret,
idGenerator: (request) => `${request == undefined ? 'null' : request.ip}-${Date.now()}`
});
expectError(app.register(plugin, {}));
expectError(app.decryptSession<string>('sessionId', {}, () => ({})))
app.decryptSession<{hello: 'world'}>('sessionId', { hello: 'world' }, () => ({}))
app.decryptSession<{hello: 'world'}>('sessionId', { hello: 'world' }, { domain: '/' }, () => ({}))
app.decryptSession('sessionId', {}, () => ({}))
app.decryptSession('sessionId', {}, { domain: '/' }, () => ({}))
app.route({
method: 'GET',
url: '/',
preHandler(req, _rep, next) {
expectType<void>(req.session.destroy(next));
expectType<Promise<void>>(req.session.destroy());
},
async handler(request, reply) {
expectType<FastifyRequest>(request);
expectType<FastifyReply>(reply);
expectType<Readonly<SessionStore>>(request.sessionStore);
expectError((request.sessionStore = null));
expectError(request.session.doesNotExist());
expectType<{ id: number } | undefined>(request.session.user);
request.sessionStore.set('session-set-test', request.session, () => {});
request.sessionStore.get('', (err, session) => {
expectType<Error | null>(err);
expectType<Session>(session);
expectType<{ id: number } | undefined>(session.user);
});
expectType<void>(request.session.set('foo', 'bar'));
expectType<string>(request.session.get('foo'));
expectType<void>(request.session.touch());
expectType<boolean>(request.session.isModified());
expectType<void>(request.session.reload(() => {}));
expectType<void>(request.session.destroy(() => {}));
expectType<void>(request.session.regenerate(() => {}));
expectType<void>(request.session.save(() => {}));
expectType<Promise<void>>(request.session.reload());
expectType<Promise<void>>(request.session.destroy());
expectType<Promise<void>>(request.session.regenerate());
expectType<Promise<void>>(request.session.save());
}
});
const customSigner = {
sign: (value: string) => value,
unsign: (input: string) => ({
valid: true,
renew: false,
value: null
})
};
app.register(plugin, { secret: customSigner });