# tiny-level-ttl

> Extension for node-level that enforces a time to live on a database (or sublevel db)

Latest version **3.1.5** (published 2015-08-27) · VOL license · 0 weekly downloads

## Install

```sh
npm install tiny-level-ttl
pnpm add tiny-level-ttl
yarn add tiny-level-ttl
bun add tiny-level-ttl
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 3.1.5 |
| Published | 2015-08-27 |
| First published | 2014-09-19 |
| Weekly downloads | 0 |
| License | VOL |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 6 |
| Author | ArtskydJ |
| Maintainers | artskydj |
| Keywords | level, ttl, tiny, sublevel, spaces, time to live |

## Links

- npm: https://www.npmjs.com/package/tiny-level-ttl
- Repository: https://github.com/ArtskydJ/tiny-level-ttl
- Issues: https://github.com/ArtskydJ/tiny-level-ttl/issues
- npm.io page: https://npm.io/package/tiny-level-ttl

## Dependencies (4)

- [xtend](https://npm.io/package/xtend.md) ^4.0.0
- [level-lock](https://npm.io/package/level-lock.md) ^1.0.1
- [level-spaces](https://npm.io/package/level-spaces.md) ^2.0.0
- [expire-unused-keys](https://npm.io/package/expire-unused-keys.md) ^1.0.2

## Alternatives

- [postcss-color-hex-alpha](https://npm.io/package/postcss-color-hex-alpha.md) — 6.4M weekly downloads
- [randomcolor](https://npm.io/package/randomcolor.md) — 348.0K weekly downloads
- [bows](https://npm.io/package/bows.md) — 1.3K weekly downloads
- [ep_prefer_color_scheme](https://npm.io/package/ep_prefer_color_scheme.md) — 260 weekly downloads
- [coc-yank](https://npm.io/package/coc-yank.md) — 61 weekly downloads

## Recent versions

- 3.1.5 (latest) — 2015-08-27
- 3.1.4 — 2015-08-27
- 3.1.3 — 2015-08-27
- 3.1.2 — 2015-06-06
- 3.1.1 — 2015-03-15
- 3.1.0 — 2015-03-10
- 3.0.0 — 2015-03-09
- 2.0.3 — 2015-03-09
- 2.0.2 — 2015-02-09
- 2.0.1 — 2014-11-01
- 2.0.0 — 2014-10-17
- 1.1.0 — 2014-10-14
- 1.0.0 — 2014-09-26
- 0.2.0 — 2014-09-26
- 0.1.0 — 2014-09-20
- … 3 more at https://npm.io/package/tiny-level-ttl/versions

## README

tiny-level-ttl
==============

[![Build Status](https://travis-ci.org/ArtskydJ/tiny-level-ttl.svg?branch=master)](https://travis-ci.org/ArtskydJ/tiny-level-ttl)
[![Dependency Status](https://david-dm.org/artskydj/tiny-level-ttl.svg)](https://david-dm.org/artskydj/tiny-level-ttl)
[![devDependency Status](https://david-dm.org/artskydj/tiny-level-ttl/dev-status.svg)](https://david-dm.org/artskydj/tiny-level-ttl#info=devDependencies)

Enforces a [time to live (TTL)][wiki-ttl] on a [`node-levelup`][levelup] database.

- The ttl is specified in the constructor. (In [`node-level-ttl`][ttl] you can set the ttl in the constructor, and/or in a `db.put()` call.)
- Supports [`level-sublevel`][sublevel] 5 & 6, and [`level-spaces`][spaces] 1 & 2. (Defaults to [`level-spaces@2`][spaces].)
- Respects [`level-lock`][lock] locks.

Why use this instead of [`node-level-ttl`][ttl]? Because [`level-sublevel`][sublevel] and [`node-level-ttl`][ttl] conflict.

[Bug reproduction test code here.][bug-code]  
The bug was found using `level-sublevel@6` with `level-ttl@2`, and `level-sublevel@5` with `level-ttl 0.6`.

# api

```js
var ttl = require('tiny-level-ttl')
```

# `ttl(db[, opts])`

Adds a `refreshTtl` method to the `db`. When `db.refreshTtl(key)` is called, it will refresh the ttl on the `key`. This adds the ability to make the ttl act like a session manager by calling `refreshTtl()` every time you do `db.get()`.

Also, this respects the locks that [`level-lock`][lock] creates. If `tiny-level-ttl` attempts to delete a key, and the key's write access is locked, it will restart the key's life. (In most cases, this is the desired outcome. If the key is being written to, you would've restarted the key's life anyway. If the key is being deleted, restarting its life will not mess anything up.)

- `db` is a levelup database.
- `opts` is an object with the following properties:
	- `ttl` is a number of milliseconds for how long a key lives in the `db`. Optional; defaults to `3600000`, (1 hour).
	- `checkInterval` is a number of milliseconds for how long the interval between checking keys is. Optional; defaults to `10000`, (10 seconds).
	- `separator` can be a string, buffer, or array of strings/buffers. These represent the separator used in the sub-database. For example, `level-spaces` by default has the separator `~`, so if you store the key `bar`, in the space `foo`, the key will be `~foo~bar`. Defaults to `[ '~', '\xff', '\x00' ]`.

# example

Basic usage:

```js
var level = require('level-mem')
var ttl = require('tiny-level-ttl')

var db = level('/levelmem/does/not/care')
ttl(db, {
	ttl: 1000,
	checkInterval: 50
})

db.put('hi', 'wuzzup') //this sets the ttl

setTimeout(function () { //before key expires
	db.get('hi', function (err, value) {
		console.log(err && err.notFound) // -> null
		console.log(value) // -> 'wazzup'
	})
}, 900)

setTimeout(function () { //after key expires
	db.get('hi', function (err, value) {
		console.log(err && err.notFound) // -> true
		console.log(value) // -> undefined
	})
}, 1100)
```

# install

With [npm](http://nodejs.org/download) do:

```
npm install tiny-level-ttl
```

# license

[VOL](http://veryopenlicense.com/)


[bug-code]: https://gist.github.com/ArtskydJ/65ebbd9cdbcdea9f091e
[levelup]: https://github.com/rvagg/node-levelup
[lock]: https://github.com/substack/level-lock
[spaces]: https://github.com/rvagg/level-spaces
[sublevel]: https://github.com/dominictarr/level-sublevel
[ttl]: https://github.com/rvagg/node-level-ttl
[wiki-ttl]:https://en.wikipedia.org/wiki/Time_to_live

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