# native-dns-cache

> DNS Caching Library

Latest version **0.0.2** (published 2013-03-25) · 0 weekly downloads

## Install

```sh
npm install native-dns-cache
pnpm add native-dns-cache
yarn add native-dns-cache
bun add native-dns-cache
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; low quality score; pre 1.0.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 0.0.2 |
| Published | 2013-03-25 |
| First published | 2013-03-24 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 0.5.0 |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 15 |
| Author | Timothy J Fontaine |
| Maintainers | tjfontaine |
| Keywords | dns, caching |

## Links

- npm: https://www.npmjs.com/package/native-dns-cache
- Repository: http://github.com/tjfontaine/native-dns-cache
- Issues: http://github.com/tjfontaine/native-dns-cache/issues
- npm.io page: https://npm.io/package/native-dns-cache

## Dependencies (2)

- [binaryheap](https://npm.io/package/binaryheap.md) >= 0.0.3
- [native-dns-packet](https://npm.io/package/native-dns-packet.md) >= 0.0.1

## Recent versions

- 0.0.2 (latest) — 2013-03-25
- 0.0.1 — 2013-03-24

## README

Cache
-----

If you perform a query on an A or AAAA type and it doesn't exist, the cache
will attempt to lookup a CNAME and then resolve that.

The constructor takes an optional object with the following properties:

 * `store` -- implements the cache store model (optional, default MemoryStore)

Methods:

 * `lookup(question, cb)` -- for a given question check the cache store for
existence
 * `store(packet)` -- iterates over the resource records in a packet and sends
them to the cache store
 * `purge()` -- clears the cache store of all entries

MemoryStore / Cache store model
-------------------------------

`MemoryStore(opts)` -- An in memory store based on a js object

Methods:

 * `get(domain, key, cb)`
  - `domain` is the holder under which keys will be applied,
`key` is the subdomain that is being queried for.
If you `get('example.com', 'www', cb)` you are really asking for `www.example.com`.
  - `cb(err, results)` -- results is an object of types and array of answers
   * `{ 1: [{address: '127.0.0.1', ttl: 300, type: 1, class: 1}] }`
 * `set(domain, key, data, cb)`
  - `domain` is the parent under which this key is stored.
`key` is the subdomain we are storing, `data` is an object of types with an array of answers.
   * `set('example.com', 'www', {1: [{class:1, type:1, ttl:300, address:'127.0.0.1'}]}, cb)`
  - `cb(err, data)` -- cb merely returns the data that was passed.
 * `delete(domain[, key[, type]], cb)` -- delete all from a domain, a domain and key,
or a domain a key and a type.

Lookup
------

Is a mechanism that given a store performs the common resolution pattern.

Given `example.com` previous added to a store:

  * `www.example.com CNAME foo.bar.example.com.`
  * `*.example.com A 127.0.0.1`

A `Lookup(store, 'example.com', {name:'www.example.com', type:1}, cb)`
will resolve `www` to the CNAME and then search for `foo.bar.example.com` which
will return no results, and then search for `*.bar.example.com` which will also
return no results, and ultimately searches for `*.example.com` which will return
the desired record.

Callback will be called with `(err, results)` where results is an array suitable
for use in `Packet.answer`

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