38ed7a61f9829fb6ec2b817709f3fdee293c63a0f288012941cad0c318ec107d08f63211df0db2ef2769923807c096edb7780d094256b1703f1714c6a06baf 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. /**
  2. * The `dns.promises` API provides an alternative set of asynchronous DNS methods
  3. * that return `Promise` objects rather than using callbacks. The API is accessible
  4. * via `import { promises as dnsPromises } from 'node:dns'` or `import dnsPromises from 'node:dns/promises'`.
  5. * @since v10.6.0
  6. */
  7. declare module "dns/promises" {
  8. import {
  9. AnyRecord,
  10. CaaRecord,
  11. LookupAddress,
  12. LookupAllOptions,
  13. LookupOneOptions,
  14. LookupOptions,
  15. MxRecord,
  16. NaptrRecord,
  17. RecordWithTtl,
  18. ResolveOptions,
  19. ResolverOptions,
  20. ResolveWithTtlOptions,
  21. SoaRecord,
  22. SrvRecord,
  23. } from "node:dns";
  24. /**
  25. * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6),
  26. * that are currently configured for DNS resolution. A string will include a port
  27. * section if a custom port is used.
  28. *
  29. * ```js
  30. * [
  31. * '4.4.4.4',
  32. * '2001:4860:4860::8888',
  33. * '4.4.4.4:1053',
  34. * '[2001:4860:4860::8888]:1053',
  35. * ]
  36. * ```
  37. * @since v10.6.0
  38. */
  39. function getServers(): string[];
  40. /**
  41. * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or
  42. * AAAA (IPv6) record. All `option` properties are optional. If `options` is an
  43. * integer, then it must be `4` or `6` – if `options` is not provided, then IPv4
  44. * and IPv6 addresses are both returned if found.
  45. *
  46. * With the `all` option set to `true`, the `Promise` is resolved with `addresses` being an array of objects with the properties `address` and `family`.
  47. *
  48. * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code` is the error code.
  49. * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when
  50. * the host name does not exist but also when the lookup fails in other ways
  51. * such as no available file descriptors.
  52. *
  53. * [`dnsPromises.lookup()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromiseslookuphostname-options) does not necessarily have anything to do with the DNS
  54. * protocol. The implementation uses an operating system facility that can
  55. * associate names with addresses and vice versa. This implementation can have
  56. * subtle but important consequences on the behavior of any Node.js program. Please
  57. * take some time to consult the [Implementation considerations section](https://nodejs.org/docs/latest-v20.x/api/dns.html#implementation-considerations) before
  58. * using `dnsPromises.lookup()`.
  59. *
  60. * Example usage:
  61. *
  62. * ```js
  63. * import dns from 'node:dns';
  64. * const dnsPromises = dns.promises;
  65. * const options = {
  66. * family: 6,
  67. * hints: dns.ADDRCONFIG | dns.V4MAPPED,
  68. * };
  69. *
  70. * dnsPromises.lookup('example.com', options).then((result) => {
  71. * console.log('address: %j family: IPv%s', result.address, result.family);
  72. * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
  73. * });
  74. *
  75. * // When options.all is true, the result will be an Array.
  76. * options.all = true;
  77. * dnsPromises.lookup('example.com', options).then((result) => {
  78. * console.log('addresses: %j', result);
  79. * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}]
  80. * });
  81. * ```
  82. * @since v10.6.0
  83. */
  84. function lookup(hostname: string, family: number): Promise<LookupAddress>;
  85. function lookup(hostname: string, options: LookupOneOptions): Promise<LookupAddress>;
  86. function lookup(hostname: string, options: LookupAllOptions): Promise<LookupAddress[]>;
  87. function lookup(hostname: string, options: LookupOptions): Promise<LookupAddress | LookupAddress[]>;
  88. function lookup(hostname: string): Promise<LookupAddress>;
  89. /**
  90. * Resolves the given `address` and `port` into a host name and service using
  91. * the operating system's underlying `getnameinfo` implementation.
  92. *
  93. * If `address` is not a valid IP address, a `TypeError` will be thrown.
  94. * The `port` will be coerced to a number. If it is not a legal port, a `TypeError` will be thrown.
  95. *
  96. * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code` is the error code.
  97. *
  98. * ```js
  99. * import dnsPromises from 'node:dns';
  100. * dnsPromises.lookupService('127.0.0.1', 22).then((result) => {
  101. * console.log(result.hostname, result.service);
  102. * // Prints: localhost ssh
  103. * });
  104. * ```
  105. * @since v10.6.0
  106. */
  107. function lookupService(
  108. address: string,
  109. port: number,
  110. ): Promise<{
  111. hostname: string;
  112. service: string;
  113. }>;
  114. /**
  115. * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array
  116. * of the resource records. When successful, the `Promise` is resolved with an
  117. * array of resource records. The type and structure of individual results vary
  118. * based on `rrtype`:
  119. *
  120. * <omitted>
  121. *
  122. * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code`
  123. * is one of the [DNS error codes](https://nodejs.org/docs/latest-v20.x/api/dns.html#error-codes).
  124. * @since v10.6.0
  125. * @param hostname Host name to resolve.
  126. * @param [rrtype='A'] Resource record type.
  127. */
  128. function resolve(hostname: string): Promise<string[]>;
  129. function resolve(hostname: string, rrtype: "A"): Promise<string[]>;
  130. function resolve(hostname: string, rrtype: "AAAA"): Promise<string[]>;
  131. function resolve(hostname: string, rrtype: "ANY"): Promise<AnyRecord[]>;
  132. function resolve(hostname: string, rrtype: "CAA"): Promise<CaaRecord[]>;
  133. function resolve(hostname: string, rrtype: "CNAME"): Promise<string[]>;
  134. function resolve(hostname: string, rrtype: "MX"): Promise<MxRecord[]>;
  135. function resolve(hostname: string, rrtype: "NAPTR"): Promise<NaptrRecord[]>;
  136. function resolve(hostname: string, rrtype: "NS"): Promise<string[]>;
  137. function resolve(hostname: string, rrtype: "PTR"): Promise<string[]>;
  138. function resolve(hostname: string, rrtype: "SOA"): Promise<SoaRecord>;
  139. function resolve(hostname: string, rrtype: "SRV"): Promise<SrvRecord[]>;
  140. function resolve(hostname: string, rrtype: "TXT"): Promise<string[][]>;
  141. function resolve(
  142. hostname: string,
  143. rrtype: string,
  144. ): Promise<string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]>;
  145. /**
  146. * Uses the DNS protocol to resolve IPv4 addresses (`A` records) for the `hostname`. On success, the `Promise` is resolved with an array of IPv4
  147. * addresses (e.g. `['74.125.79.104', '74.125.79.105', '74.125.79.106']`).
  148. * @since v10.6.0
  149. * @param hostname Host name to resolve.
  150. */
  151. function resolve4(hostname: string): Promise<string[]>;
  152. function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
  153. function resolve4(hostname: string, options: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
  154. /**
  155. * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the `hostname`. On success, the `Promise` is resolved with an array of IPv6
  156. * addresses.
  157. * @since v10.6.0
  158. * @param hostname Host name to resolve.
  159. */
  160. function resolve6(hostname: string): Promise<string[]>;
  161. function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise<RecordWithTtl[]>;
  162. function resolve6(hostname: string, options: ResolveOptions): Promise<string[] | RecordWithTtl[]>;
  163. /**
  164. * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query).
  165. * On success, the `Promise` is resolved with an array containing various types of
  166. * records. Each object has a property `type` that indicates the type of the
  167. * current record. And depending on the `type`, additional properties will be
  168. * present on the object:
  169. *
  170. * <omitted>
  171. *
  172. * Here is an example of the result object:
  173. *
  174. * ```js
  175. * [ { type: 'A', address: '127.0.0.1', ttl: 299 },
  176. * { type: 'CNAME', value: 'example.com' },
  177. * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
  178. * { type: 'NS', value: 'ns1.example.com' },
  179. * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
  180. * { type: 'SOA',
  181. * nsname: 'ns1.example.com',
  182. * hostmaster: 'admin.example.com',
  183. * serial: 156696742,
  184. * refresh: 900,
  185. * retry: 900,
  186. * expire: 1800,
  187. * minttl: 60 } ]
  188. * ```
  189. * @since v10.6.0
  190. */
  191. function resolveAny(hostname: string): Promise<AnyRecord[]>;
  192. /**
  193. * Uses the DNS protocol to resolve `CAA` records for the `hostname`. On success,
  194. * the `Promise` is resolved with an array of objects containing available
  195. * certification authority authorization records available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]`).
  196. * @since v15.0.0, v14.17.0
  197. */
  198. function resolveCaa(hostname: string): Promise<CaaRecord[]>;
  199. /**
  200. * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. On success,
  201. * the `Promise` is resolved with an array of canonical name records available for
  202. * the `hostname` (e.g. `['bar.example.com']`).
  203. * @since v10.6.0
  204. */
  205. function resolveCname(hostname: string): Promise<string[]>;
  206. /**
  207. * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the `hostname`. On success, the `Promise` is resolved with an array of objects
  208. * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`).
  209. * @since v10.6.0
  210. */
  211. function resolveMx(hostname: string): Promise<MxRecord[]>;
  212. /**
  213. * Uses the DNS protocol to resolve regular expression-based records (`NAPTR` records) for the `hostname`. On success, the `Promise` is resolved with an array
  214. * of objects with the following properties:
  215. *
  216. * * `flags`
  217. * * `service`
  218. * * `regexp`
  219. * * `replacement`
  220. * * `order`
  221. * * `preference`
  222. *
  223. * ```js
  224. * {
  225. * flags: 's',
  226. * service: 'SIP+D2U',
  227. * regexp: '',
  228. * replacement: '_sip._udp.example.com',
  229. * order: 30,
  230. * preference: 100
  231. * }
  232. * ```
  233. * @since v10.6.0
  234. */
  235. function resolveNaptr(hostname: string): Promise<NaptrRecord[]>;
  236. /**
  237. * Uses the DNS protocol to resolve name server records (`NS` records) for the `hostname`. On success, the `Promise` is resolved with an array of name server
  238. * records available for `hostname` (e.g.`['ns1.example.com', 'ns2.example.com']`).
  239. * @since v10.6.0
  240. */
  241. function resolveNs(hostname: string): Promise<string[]>;
  242. /**
  243. * Uses the DNS protocol to resolve pointer records (`PTR` records) for the `hostname`. On success, the `Promise` is resolved with an array of strings
  244. * containing the reply records.
  245. * @since v10.6.0
  246. */
  247. function resolvePtr(hostname: string): Promise<string[]>;
  248. /**
  249. * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for
  250. * the `hostname`. On success, the `Promise` is resolved with an object with the
  251. * following properties:
  252. *
  253. * * `nsname`
  254. * * `hostmaster`
  255. * * `serial`
  256. * * `refresh`
  257. * * `retry`
  258. * * `expire`
  259. * * `minttl`
  260. *
  261. * ```js
  262. * {
  263. * nsname: 'ns.example.com',
  264. * hostmaster: 'root.example.com',
  265. * serial: 2013101809,
  266. * refresh: 10000,
  267. * retry: 2400,
  268. * expire: 604800,
  269. * minttl: 3600
  270. * }
  271. * ```
  272. * @since v10.6.0
  273. */
  274. function resolveSoa(hostname: string): Promise<SoaRecord>;
  275. /**
  276. * Uses the DNS protocol to resolve service records (`SRV` records) for the `hostname`. On success, the `Promise` is resolved with an array of objects with
  277. * the following properties:
  278. *
  279. * * `priority`
  280. * * `weight`
  281. * * `port`
  282. * * `name`
  283. *
  284. * ```js
  285. * {
  286. * priority: 10,
  287. * weight: 5,
  288. * port: 21223,
  289. * name: 'service.example.com'
  290. * }
  291. * ```
  292. * @since v10.6.0
  293. */
  294. function resolveSrv(hostname: string): Promise<SrvRecord[]>;
  295. /**
  296. * Uses the DNS protocol to resolve text queries (`TXT` records) for the `hostname`. On success, the `Promise` is resolved with a two-dimensional array
  297. * of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of
  298. * one record. Depending on the use case, these could be either joined together or
  299. * treated separately.
  300. * @since v10.6.0
  301. */
  302. function resolveTxt(hostname: string): Promise<string[][]>;
  303. /**
  304. * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an
  305. * array of host names.
  306. *
  307. * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code`
  308. * is one of the [DNS error codes](https://nodejs.org/docs/latest-v20.x/api/dns.html#error-codes).
  309. * @since v10.6.0
  310. */
  311. function reverse(ip: string): Promise<string[]>;
  312. /**
  313. * Get the default value for `verbatim` in {@link lookup} and [dnsPromises.lookup()](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromiseslookuphostname-options).
  314. * The value could be:
  315. *
  316. * * `ipv4first`: for `verbatim` defaulting to `false`.
  317. * * `verbatim`: for `verbatim` defaulting to `true`.
  318. * @since v20.1.0
  319. */
  320. function getDefaultResultOrder(): "ipv4first" | "verbatim";
  321. /**
  322. * Sets the IP address and port of servers to be used when performing DNS
  323. * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted
  324. * addresses. If the port is the IANA default DNS port (53) it can be omitted.
  325. *
  326. * ```js
  327. * dnsPromises.setServers([
  328. * '4.4.4.4',
  329. * '[2001:4860:4860::8888]',
  330. * '4.4.4.4:1053',
  331. * '[2001:4860:4860::8888]:1053',
  332. * ]);
  333. * ```
  334. *
  335. * An error will be thrown if an invalid address is provided.
  336. *
  337. * The `dnsPromises.setServers()` method must not be called while a DNS query is in
  338. * progress.
  339. *
  340. * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
  341. * That is, if attempting to resolve with the first server provided results in a `NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with
  342. * subsequent servers provided. Fallback DNS servers will only be used if the
  343. * earlier ones time out or result in some other error.
  344. * @since v10.6.0
  345. * @param servers array of `RFC 5952` formatted addresses
  346. */
  347. function setServers(servers: readonly string[]): void;
  348. /**
  349. * Set the default value of `order` in `dns.lookup()` and `{@link lookup}`. The value could be:
  350. *
  351. * * `ipv4first`: sets default `order` to `ipv4first`.
  352. * * `ipv6first`: sets default `order` to `ipv6first`.
  353. * * `verbatim`: sets default `order` to `verbatim`.
  354. *
  355. * The default is `verbatim` and [dnsPromises.setDefaultResultOrder()](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetdefaultresultorderorder)
  356. * have higher priority than [`--dns-result-order`](https://nodejs.org/docs/latest-v20.x/api/cli.html#--dns-result-orderorder).
  357. * When using [worker threads](https://nodejs.org/docs/latest-v20.x/api/worker_threads.html), [`dnsPromises.setDefaultResultOrder()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetdefaultresultorderorder)
  358. * from the main thread won't affect the default dns orders in workers.
  359. * @since v16.4.0, v14.18.0
  360. * @param order must be `'ipv4first'`, `'ipv6first'` or `'verbatim'`.
  361. */
  362. function setDefaultResultOrder(order: "ipv4first" | "ipv6first" | "verbatim"): void;
  363. // Error codes
  364. const NODATA: "ENODATA";
  365. const FORMERR: "EFORMERR";
  366. const SERVFAIL: "ESERVFAIL";
  367. const NOTFOUND: "ENOTFOUND";
  368. const NOTIMP: "ENOTIMP";
  369. const REFUSED: "EREFUSED";
  370. const BADQUERY: "EBADQUERY";
  371. const BADNAME: "EBADNAME";
  372. const BADFAMILY: "EBADFAMILY";
  373. const BADRESP: "EBADRESP";
  374. const CONNREFUSED: "ECONNREFUSED";
  375. const TIMEOUT: "ETIMEOUT";
  376. const EOF: "EOF";
  377. const FILE: "EFILE";
  378. const NOMEM: "ENOMEM";
  379. const DESTRUCTION: "EDESTRUCTION";
  380. const BADSTR: "EBADSTR";
  381. const BADFLAGS: "EBADFLAGS";
  382. const NONAME: "ENONAME";
  383. const BADHINTS: "EBADHINTS";
  384. const NOTINITIALIZED: "ENOTINITIALIZED";
  385. const LOADIPHLPAPI: "ELOADIPHLPAPI";
  386. const ADDRGETNETWORKPARAMS: "EADDRGETNETWORKPARAMS";
  387. const CANCELLED: "ECANCELLED";
  388. /**
  389. * An independent resolver for DNS requests.
  390. *
  391. * Creating a new resolver uses the default server settings. Setting
  392. * the servers used for a resolver using [`resolver.setServers()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetserversservers) does not affect
  393. * other resolvers:
  394. *
  395. * ```js
  396. * import { promises } from 'node:dns';
  397. * const resolver = new promises.Resolver();
  398. * resolver.setServers(['4.4.4.4']);
  399. *
  400. * // This request will use the server at 4.4.4.4, independent of global settings.
  401. * resolver.resolve4('example.org').then((addresses) => {
  402. * // ...
  403. * });
  404. *
  405. * // Alternatively, the same code can be written using async-await style.
  406. * (async function() {
  407. * const addresses = await resolver.resolve4('example.org');
  408. * })();
  409. * ```
  410. *
  411. * The following methods from the `dnsPromises` API are available:
  412. *
  413. * * `resolver.getServers()`
  414. * * `resolver.resolve()`
  415. * * `resolver.resolve4()`
  416. * * `resolver.resolve6()`
  417. * * `resolver.resolveAny()`
  418. * * `resolver.resolveCaa()`
  419. * * `resolver.resolveCname()`
  420. * * `resolver.resolveMx()`
  421. * * `resolver.resolveNaptr()`
  422. * * `resolver.resolveNs()`
  423. * * `resolver.resolvePtr()`
  424. * * `resolver.resolveSoa()`
  425. * * `resolver.resolveSrv()`
  426. * * `resolver.resolveTxt()`
  427. * * `resolver.reverse()`
  428. * * `resolver.setServers()`
  429. * @since v10.6.0
  430. */
  431. class Resolver {
  432. constructor(options?: ResolverOptions);
  433. /**
  434. * Cancel all outstanding DNS queries made by this resolver. The corresponding
  435. * callbacks will be called with an error with code `ECANCELLED`.
  436. * @since v8.3.0
  437. */
  438. cancel(): void;
  439. getServers: typeof getServers;
  440. resolve: typeof resolve;
  441. resolve4: typeof resolve4;
  442. resolve6: typeof resolve6;
  443. resolveAny: typeof resolveAny;
  444. resolveCaa: typeof resolveCaa;
  445. resolveCname: typeof resolveCname;
  446. resolveMx: typeof resolveMx;
  447. resolveNaptr: typeof resolveNaptr;
  448. resolveNs: typeof resolveNs;
  449. resolvePtr: typeof resolvePtr;
  450. resolveSoa: typeof resolveSoa;
  451. resolveSrv: typeof resolveSrv;
  452. resolveTxt: typeof resolveTxt;
  453. reverse: typeof reverse;
  454. /**
  455. * The resolver instance will send its requests from the specified IP address.
  456. * This allows programs to specify outbound interfaces when used on multi-homed
  457. * systems.
  458. *
  459. * If a v4 or v6 address is not specified, it is set to the default and the
  460. * operating system will choose a local address automatically.
  461. *
  462. * The resolver will use the v4 local address when making requests to IPv4 DNS
  463. * servers, and the v6 local address when making requests to IPv6 DNS servers.
  464. * The `rrtype` of resolution requests has no impact on the local address used.
  465. * @since v15.1.0, v14.17.0
  466. * @param [ipv4='0.0.0.0'] A string representation of an IPv4 address.
  467. * @param [ipv6='::0'] A string representation of an IPv6 address.
  468. */
  469. setLocalAddress(ipv4?: string, ipv6?: string): void;
  470. setServers: typeof setServers;
  471. }
  472. }
  473. declare module "node:dns/promises" {
  474. export * from "dns/promises";
  475. }