UNPKG

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