UNPKG

11.5 kBTypeScriptView Raw
1// Type definitions for multicast-dns 7.2
2// Project: https://github.com/mafintosh/multicast-dns
3// Definitions by: BendingBender <https://github.com/BendingBender>
4// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5// Minimum TypeScript Version: 3.6
6
7/// <reference types="node"/>
8
9import { EventEmitter } from "events";
10import { RemoteInfo, Socket, SocketType } from "dgram";
11import { Answer, Packet, Question, RecordType } from "dns-packet";
12
13export = mDNS;
14
15/**
16 * Creates a new mdns instance.
17 *
18 * @example
19 * import makeMdns = require('multicast-dns');
20 * const mdns = makeMdns();
21 *
22 * mdns.on('response', (response) => {
23 * console.log('got a response packet:', response);
24 * });
25 *
26 * mdns.on('query', (query) => {
27 * console.log('got a query packet:', query);
28 * });
29 *
30 * // lets query for an A record for 'brunhilde.local'
31 * mdns.query({
32 * questions: [{
33 * name: 'brunhilde.local',
34 * type: 'A'
35 * }]
36 * });
37 */
38declare function mDNS(options?: mDNS.Options): mDNS.MulticastDNS;
39
40declare namespace mDNS {
41 interface Options {
42 /**
43 * Set the UDP port.
44 *
45 * @default 5353
46 */
47 port?: number | undefined;
48
49 /**
50 * Set the socket type.
51 *
52 * @default 'udp4'
53 */
54 type?: SocketType | undefined;
55
56 /**
57 * Set the UDP ip.
58 */
59 ip?: string | undefined;
60
61 /**
62 * Explicitly specify a network interface. Will use all interfaces when not specified.
63 */
64 interface?: string | undefined;
65
66 /**
67 * Explicitly pass a constructed socket to use.
68 */
69 socket?: Socket | undefined;
70
71 /**
72 * Set the `reuseAddr` option when creating the socket.
73 *
74 * @default true
75 */
76 reuseAddr?: boolean | undefined;
77
78 /**
79 * The interface to bind to or `false` to prevent binding.
80 *
81 * @default Options.interface
82 */
83 bind?: false | string | undefined;
84
85 /**
86 * Use UDP multicasting.
87 *
88 * @default true
89 */
90 multicast?: boolean | undefined;
91
92 /**
93 * Set the multicast ttl.
94 *
95 * @default 255
96 */
97 ttl?: number | undefined;
98
99 /**
100 * Receive your own packets.
101 *
102 * @default true
103 */
104 loopback?: boolean | undefined;
105 }
106
107 type FullPacket = Required<Packet>;
108
109 interface QueryPacket extends FullPacket {
110 type: "query";
111 }
112
113 interface ResponsePacket extends FullPacket {
114 type: "response";
115 }
116
117 interface QueryOutgoingPacket extends Packet {
118 questions: Question[];
119 }
120
121 interface ResponseOutgoingPacket extends Packet {
122 answers: Answer[];
123 }
124
125 interface RemoteInfoOutgoing {
126 port: number;
127 address?: string | undefined;
128 }
129
130 interface MulticastDNS extends EventEmitter {
131 /**
132 * Send a DNS query.
133 *
134 * @param callback Will be called when the packet was sent.
135 *
136 * @example
137 * mdns.query('brunhilde.local', 'A');
138 * mdns.query([{name:'brunhilde.local', type:'A'}]);
139 * mdns.query({
140 * questions: [{name:'brunhilde.local', type:'A'}]
141 * });
142 */
143 query(
144 query: string | Question[] | QueryOutgoingPacket,
145 callback?: (error: Error | null, bytes?: number) => void,
146 ): void;
147 query(
148 query: string | Question[] | QueryOutgoingPacket,
149 rinfo?: RemoteInfoOutgoing,
150 callback?: (error: Error | null, bytes?: number) => void,
151 ): void;
152 query(query: string, type?: RecordType, callback?: (error: Error | null, bytes?: number) => void): void;
153 query(
154 query: string,
155 type?: RecordType,
156 rinfo?: RemoteInfoOutgoing,
157 callback?: (error: Error | null, bytes?: number) => void,
158 ): void;
159
160 /**
161 * Send a DNS response.
162 *
163 * @param callback Will be called when the packet was sent.
164 *
165 * @example
166 * mdns.respond([{name:'brunhilde.local', type:'A', data:'192.158.1.5'}]);
167 * mdns.respond({
168 * answers: [{name:'brunhilde.local', type:'A', data:'192.158.1.5'}]
169 * });
170 */
171 respond(
172 response: Answer[] | ResponseOutgoingPacket,
173 callback?: (error: Error | null, bytes?: number) => void,
174 ): void;
175 respond(
176 response: Answer[] | ResponseOutgoingPacket,
177 rinfo?: RemoteInfoOutgoing,
178 callback?: (error: Error | null, bytes?: number) => void,
179 ): void;
180
181 /**
182 * Destroy the mDNS instance. Closes the UDP socket.
183 */
184 destroy(callback?: () => void): void;
185
186 /**
187 * Emitted after the socket was bound to.
188 */
189 on(event: "ready", listener: () => void): this;
190 /**
191 * Emitted when a packet is received.
192 */
193 on(event: "message", listener: (message: FullPacket, rinfo: RemoteInfo) => void): this;
194 /**
195 * Emitted when a query packet is received.
196 *
197 * @example
198 * mdns.on('query', (query) => {
199 * if (query.questions[0] && query.questions[0].name === 'brunhilde.local') {
200 * mdns.respond(someResponse);
201 * }
202 * });
203 */
204 on(event: "query", listener: (query: QueryPacket, rinfo: RemoteInfo) => void): this;
205 /**
206 * Emitted when a response packet is received.
207 */
208 on(event: "response", listener: (response: ResponsePacket, rinfo: RemoteInfo) => void): this;
209 on(event: "error" | "warning", listener: (err: Error) => void): this;
210 on(event: string, listener: (...args: any[]) => void): this;
211
212 /**
213 * Emitted after the socket was bound to.
214 */
215 once(event: "ready", listener: () => void): this;
216 /**
217 * Emitted when a packet is received.
218 */
219 once(event: "message", listener: (message: FullPacket, rinfo: RemoteInfo) => void): this;
220 /**
221 * Emitted when a query packet is received.
222 */
223 once(event: "query", listener: (query: QueryPacket, rinfo: RemoteInfo) => void): this;
224 /**
225 * Emitted when a response packet is received.
226 */
227 once(event: "response", listener: (response: ResponsePacket, rinfo: RemoteInfo) => void): this;
228 once(event: "error" | "warning", listener: (err: Error) => void): this;
229 once(event: string, listener: (...args: any[]) => void): this;
230
231 /**
232 * Emitted after the socket was bound to.
233 */
234 addListener(event: "ready", listener: () => void): this;
235 /**
236 * Emitted when a packet is received.
237 */
238 addListener(event: "message", listener: (message: FullPacket, rinfo: RemoteInfo) => void): this;
239 /**
240 * Emitted when a query packet is received.
241 */
242 addListener(event: "query", listener: (query: QueryPacket, rinfo: RemoteInfo) => void): this;
243 /**
244 * Emitted when a response packet is received.
245 */
246 addListener(event: "response", listener: (response: ResponsePacket, rinfo: RemoteInfo) => void): this;
247 addListener(event: "error" | "warning", listener: (err: Error) => void): this;
248 addListener(event: string, listener: (...args: any[]) => void): this;
249
250 prependListener(event: "ready", listener: () => void): this;
251 prependListener(event: "message", listener: (message: FullPacket, rinfo: RemoteInfo) => void): this;
252 prependListener(event: "query", listener: (query: QueryPacket, rinfo: RemoteInfo) => void): this;
253 prependListener(event: "response", listener: (response: ResponsePacket, rinfo: RemoteInfo) => void): this;
254 prependListener(event: "error" | "warning", listener: (err: Error) => void): this;
255 prependListener(event: string, listener: (...args: any[]) => void): this;
256
257 prependOnceListener(event: "ready", listener: () => void): this;
258 prependOnceListener(event: "message", listener: (message: FullPacket, rinfo: RemoteInfo) => void): this;
259 prependOnceListener(event: "query", listener: (query: QueryPacket, rinfo: RemoteInfo) => void): this;
260 prependOnceListener(event: "response", listener: (response: ResponsePacket, rinfo: RemoteInfo) => void): this;
261 prependOnceListener(event: "error" | "warning", listener: (err: Error) => void): this;
262 prependOnceListener(event: string, listener: (...args: any[]) => void): this;
263
264 off(event: "ready", listener: () => void): this;
265 off(event: "message", listener: (message: FullPacket, rinfo: RemoteInfo) => void): this;
266 off(event: "query", listener: (query: QueryPacket, rinfo: RemoteInfo) => void): this;
267 off(event: "response", listener: (response: ResponsePacket, rinfo: RemoteInfo) => void): this;
268 off(event: "error" | "warning", listener: (err: Error) => void): this;
269 off(event: string, listener: (...args: any[]) => void): this;
270
271 removeListener(event: "ready", listener: () => void): this;
272 removeListener(event: "message", listener: (message: FullPacket, rinfo: RemoteInfo) => void): this;
273 removeListener(event: "query", listener: (query: QueryPacket, rinfo: RemoteInfo) => void): this;
274 removeListener(event: "response", listener: (response: ResponsePacket, rinfo: RemoteInfo) => void): this;
275 removeListener(event: "error" | "warning", listener: (err: Error) => void): this;
276 removeListener(event: string, listener: (...args: any[]) => void): this;
277
278 removeAllListeners(event?: "ready" | "message" | "query" | "response" | "error" | "warning"): this;
279
280 emit(event: "ready"): boolean;
281 emit(event: "message", message: FullPacket, rinfo: RemoteInfo): boolean;
282 emit(event: "query", query: QueryPacket, rinfo: RemoteInfo): boolean;
283 emit(event: "response", response: ResponsePacket, rinfo: RemoteInfo): boolean;
284 emit(event: "error" | "warning", err: Error): boolean;
285 emit(event: string | symbol, ...args: any[]): boolean;
286
287 listeners(event: "ready"): Array<() => void>;
288 listeners(event: "message"): Array<(message: FullPacket, rinfo: RemoteInfo) => void>;
289 listeners(event: "query"): Array<(query: QueryPacket, rinfo: RemoteInfo) => void>;
290 listeners(event: "response"): Array<(response: ResponsePacket, rinfo: RemoteInfo) => void>;
291 listeners(event: "error" | "warning"): Array<(err: Error) => void>;
292 listeners(event: string): Array<(...args: any[]) => void>;
293
294 rawListeners(event: "ready"): Array<() => void>;
295 rawListeners(event: "message"): Array<(message: FullPacket, rinfo: RemoteInfo) => void>;
296 rawListeners(event: "query"): Array<(query: QueryPacket, rinfo: RemoteInfo) => void>;
297 rawListeners(event: "response"): Array<(response: ResponsePacket, rinfo: RemoteInfo) => void>;
298 rawListeners(event: "error" | "warning"): Array<(err: Error) => void>;
299 rawListeners(event: string): Array<(...args: any[]) => void>;
300
301 eventNames(): Array<"ready" | "message" | "query" | "response" | "error" | "warning">;
302 listenerCount(type: "ready" | "message" | "query" | "response" | "error" | "warning"): number;
303 }
304}