# dat-dns

> Issue DNS lookups for Dat archives using HTTPS requests to the target host.

Latest version **4.1.3** (published 2022-01-26) · MIT license · 0 weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install dat-dns
pnpm add dat-dns
yarn add dat-dns
bun add dat-dns
```

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 4.1.3 |
| Published | 2022-01-26 |
| First published | 2017-02-12 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 25.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 54 |
| Author | Paul Frazee |
| Maintainers | leichtgewicht, the-real-dk, pfrazee, frando, cblgh, ninabreznik, rangermauve, serapath, zootella, jhand, juliangruber, pfraze |
| Keywords | dat, dns |

## Links

- npm: https://www.npmjs.com/package/dat-dns
- Repository: https://github.com/datprotocol/dat-dns
- Homepage: https://github.com/datprotocol/dat-dns#readme
- Issues: https://github.com/datprotocol/dat-dns/issues
- npm.io page: https://npm.io/package/dat-dns

## Dependencies (3)

- [debug](https://npm.io/package/debug.md) ^4.3.1
- [call-me-maybe](https://npm.io/package/call-me-maybe.md) ^1.0.1
- [concat-stream](https://npm.io/package/concat-stream.md) ^2.0.0

## Alternatives

- [@regle/core](https://npm.io/package/@regle/core.md) — 47.0K weekly downloads
- [typeof-arguments](https://npm.io/package/typeof-arguments.md) — 12.5K weekly downloads
- [@lokalise/projects-engine-contracts](https://npm.io/package/@lokalise/projects-engine-contracts.md) — 978 weekly downloads
- [@osjwnpm/nam-laboriosam-quibusdam](https://npm.io/package/@osjwnpm/nam-laboriosam-quibusdam.md) — 70 weekly downloads
- [@oridune/validator](https://npm.io/package/@oridune/validator.md) — 16 weekly downloads

## Recent versions

- 4.1.3 (latest) — 2022-01-26
- 4.1.2 — 2019-12-24
- 4.1.1 — 2019-12-24
- 4.1.0 — 2019-09-09
- 4.0.3 — 2019-09-05
- 4.0.2 — 2019-09-01
- 4.0.1 — 2019-06-27
- 4.0.0 — 2019-06-11
- 3.2.1 — 2019-04-01
- 3.2.0 — 2019-03-18
- 3.1.0 — 2019-01-21
- 3.0.2 — 2018-08-07
- 3.0.1 — 2018-06-21
- 3.0.0 — 2018-05-16
- 2.0.0 — 2017-11-10
- … 10 more at https://npm.io/package/dat-dns/versions

## README

[![deprecated](http://badges.github.io/stability-badges/dist/deprecated.svg)](github.com/martinheidegger/hyper-dns) See [hyper-dns](github.com/martinheidegger/hyper-dns) for similar functionality. 

More info on active projects and modules at [dat-ecosystem.org](https://dat-ecosystem.org/) <img src="https://i.imgur.com/qZWlO1y.jpg" width="30" height="30" /> 

---

# dat-dns

Issue DNS lookups for Dat archives using HTTPS requests to the target host. Keeps an in-memory cache of recent lookups.

## API

```js
var datDns = require('dat-dns')()

// or, if you have a custom protocol
var datDns = require('dat-dns')({
    recordName: /* name of .well-known file */
    protocolRegex: /* RegExp object for custom protocol */,
    hashRegex: /* RegExp object for custom hash i.e. */,
    txtRegex: /* RegExp object for DNS TXT record of custom protocol */,
})

// example: 
var cabalDns = require('dat-dns')({
    recordName: 'cabal',
    hashRegex: /^[0-9a-f]{64}?$/i,
    protocolRegex: /^cabal:\/\/([0-9a-f]{64})/i,
    txtRegex: /^"?cabalkey=([0-9a-f]{64})"?$/i
})

// resolve a name: pass the hostname by itself
datDns.resolveName('foo.com', function (err, key) { ... })
datDns.resolveName('foo.com').then(key => ...)

// dont use cached 'misses'
datDns.resolveName('foo.com', {ignoreCachedMiss: true})

// dont use the cache at all
datDns.resolveName('foo.com', {ignoreCache: true})

// dont use dns-over-https
datDns.resolveName('foo.com', {noDnsOverHttps: true})

// dont use .well-known/dat
datDns.resolveName('foo.com', {noWellknownDat: true})

// list all entries in the cache
datDns.listCache()

// clear the cache
datDns.flushCache()

// configure the DNS-over-HTTPS host used
var datDns = require('dat-dns')({
  dnsHost: 'dns.google.com',
  dnsPath: '/resolve'
})

// use a persistent fallback cache
// (this is handy for persistent dns data when offline)
var datDns = require('dat-dns')({
  persistentCache: {
    read: async (name, err) => {
      // try lookup
      // if failed, you can throw the original error:
      throw err
    },
    write: async (name, key, ttl) => {
      // write to your cache
    }
  }
})

// emits some events, mainly useful for logging/debugging
datDns.on('resolved', ({method, name, key}) => {...})
datDns.on('failed', ({method, name, err}) => {...})
datDns.on('cache-flushed', () => {...})
```

## Spec

[In detail.](https://www.datprotocol.com/deps/0005-dns/)

**Option 1 (DNS-over-HTTPS).** Create a DNS TXT record witht he following schema:

```
datkey={key}
```

**Option 2 (.well-known/dat).** Place a file at `/.well-known/dat` with the following schema:

```
{dat-url}
TTL={time in seconds}
```

TTL is optional and will default to `3600` (one hour). If set to `0`, the entry is not cached.

---
_Source: https://npm.io/package/dat-dns · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
