Skip to content

Commit 1b9b9be

Browse files
fix: types (#409)
1 parent b2c3249 commit 1b9b9be

File tree

3 files changed

+88
-28
lines changed

3 files changed

+88
-28
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ The `context` object is passed to all hooks and contains the `log` property.
254254

255255
- `onIncomingMessage`: A hook function that is called when the request is received from the client `onIncomingMessage(context, source, target, { data, binary })` (default: `undefined`).
256256
- `onOutgoingMessage`: A hook function that is called when the response is received from the target `onOutgoingMessage(context, source, target, { data, binary })` (default: `undefined`).
257-
- `onConnect`: A hook function that is called when the connection is established `onConnect(source, target)` (default: `undefined`).
257+
- `onConnect`: A hook function that is called when the connection is established `onConnect(context, source, target)` (default: `undefined`).
258258
- `onDisconnect`: A hook function that is called when the connection is closed `onDisconnect(context, source)` (default: `undefined`).
259259
- `onReconnect`: A hook function that is called when the connection is reconnected `onReconnect(context, source, target)` (default: `undefined`). The function is called if reconnection feature is enabled.
260260
- `onPong`: A hook function that is called when the target responds to the ping `onPong(context, source, target)` (default: `undefined`). The function is called if reconnection feature is enabled.

types/index.d.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,33 @@ import {
1414
FastifyReplyFromHooks,
1515
} from '@fastify/reply-from'
1616

17-
import { ClientOptions, ServerOptions } from 'ws'
17+
import { ClientOptions, ServerOptions, WebSocket } from 'ws'
18+
import { Logger } from 'pino'
19+
20+
interface WebSocketHooks {
21+
onConnect?: (context: { log: Logger }, source: WebSocket, target: WebSocket) => void;
22+
onDisconnect?: (context: { log: Logger }, source: WebSocket) => void;
23+
onIncomingMessage?: (context: { log: Logger }, source: WebSocket, target: WebSocket, message: { data: Buffer | ArrayBuffer | Buffer[], binary: boolean }) => void;
24+
onOutgoingMessage?: (context: { log: Logger }, source: WebSocket, target: WebSocket, message: { data: Buffer | ArrayBuffer | Buffer[], binary: boolean }) => void;
25+
onPong?: (context: { log: Logger }, source: WebSocket, target: WebSocket) => void;
26+
onReconnect?: (context: { log: Logger }, source: WebSocket, target: WebSocket) => void;
27+
}
28+
29+
interface WebSocketReconnectOptions {
30+
pingInterval?: number;
31+
reconnectInterval?: number;
32+
reconnectDecay?: number;
33+
maxReconnectionRetries?: number;
34+
connectionTimeout?: number;
35+
reconnectOnClose?: boolean;
36+
logs?: boolean;
37+
}
1838

1939
interface FastifyHttpProxyWebsocketOptionsEnabled {
2040
websocket: true;
2141
wsUpstream?: string;
42+
wsHooks?: WebSocketHooks;
43+
wsReconnect?: WebSocketReconnectOptions;
2244
}
2345
interface FastifyHttpProxyWebsocketOptionsDisabled {
2446
websocket?: false | never;

types/index.test-d.ts

Lines changed: 64 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import fastify, {
55
type RawServerBase,
66
type RequestGenericInterface,
77
} from 'fastify'
8-
import { expectError, expectType } from 'tsd'
8+
import { expectType } from 'tsd'
99
import fastifyHttpProxy from '..'
1010

1111
const app = fastify()
@@ -63,34 +63,72 @@ app.register(fastifyHttpProxy, {
6363
return ''
6464
},
6565
},
66+
wsHooks: {
67+
onConnect: (context, source, target) => {
68+
expectType<{ log: import('pino').Logger }>(context)
69+
expectType<import('ws').WebSocket>(source)
70+
expectType<import('ws').WebSocket>(target)
71+
},
72+
onDisconnect: (context, source) => {
73+
expectType<{ log: import('pino').Logger }>(context)
74+
expectType<import('ws').WebSocket>(source)
75+
},
76+
onIncomingMessage: (context, source, target, message) => {
77+
expectType<{ log: import('pino').Logger }>(context)
78+
expectType<import('ws').WebSocket>(source)
79+
expectType<import('ws').WebSocket>(target)
80+
expectType<{ data: Buffer | ArrayBuffer | Buffer[], binary: boolean }>(message)
81+
},
82+
onOutgoingMessage: (context, source, target, message) => {
83+
expectType<{ log: import('pino').Logger }>(context)
84+
expectType<import('ws').WebSocket>(source)
85+
expectType<import('ws').WebSocket>(target)
86+
expectType<{ data: Buffer | ArrayBuffer | Buffer[], binary: boolean }>(message)
87+
},
88+
onPong: (context, source, target) => {
89+
expectType<{ log: import('pino').Logger }>(context)
90+
expectType<import('ws').WebSocket>(source)
91+
expectType<import('ws').WebSocket>(target)
92+
},
93+
onReconnect: (context, source, target) => {
94+
expectType<{ log: import('pino').Logger }>(context)
95+
expectType<import('ws').WebSocket>(source)
96+
expectType<import('ws').WebSocket>(target)
97+
}
98+
},
99+
wsReconnect: {
100+
pingInterval: 3000,
101+
reconnectInterval: 1000,
102+
reconnectDecay: 1.5,
103+
maxReconnectionRetries: 5,
104+
connectionTimeout: 5000,
105+
reconnectOnClose: true,
106+
logs: true
107+
},
66108
internalRewriteLocationHeader: true,
67109
})
68110

69-
expectError(
70-
app.register(fastifyHttpProxy, {
71-
thisOptionDoesNotExist: 'triggers a typescript error',
72-
})
73-
)
111+
// @ts-expect-error
112+
app.register(fastifyHttpProxy, {
113+
thisOptionDoesNotExist: 'triggers a typescript error',
114+
})
74115

75-
expectError(
76-
app.register(fastifyHttpProxy, {
77-
upstream: 'http://origin.asd',
78-
wsUpstream: 'ws://origin.asd',
79-
})
80-
)
116+
// @ts-expect-error
117+
app.register(fastifyHttpProxy, {
118+
upstream: 'http://origin.asd',
119+
wsUpstream: 'ws://origin.asd',
120+
})
81121

82-
expectError(
83-
app.register(fastifyHttpProxy, {
84-
upstream: 'http://origin.asd',
85-
websocket: false,
86-
wsUpstream: 'asdf',
87-
})
88-
)
122+
// @ts-expect-error
123+
app.register(fastifyHttpProxy, {
124+
upstream: 'http://origin.asd',
125+
websocket: false,
126+
wsUpstream: 'asdf',
127+
})
89128

90-
expectError(
91-
app.register(fastifyHttpProxy, {
92-
upstream: 'http://origin.asd',
93-
websocket: false,
94-
internalRewriteLocationHeader: 'NON_BOOLEAN_VALUE'
95-
})
96-
)
129+
// @ts-expect-error
130+
app.register(fastifyHttpProxy, {
131+
upstream: 'http://origin.asd',
132+
websocket: false,
133+
internalRewriteLocationHeader: 'NON_BOOLEAN_VALUE'
134+
})

0 commit comments

Comments
 (0)