Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/webtorrent/node-bencode

bencode de/encoder for nodejs
https://github.com/webtorrent/node-bencode

abstract-encoding bencode bittorrent javascript webtorrent

Last synced: 19 days ago
JSON representation

bencode de/encoder for nodejs

Awesome Lists containing this project

README

        

# Bencode
[![npm](https://img.shields.io/npm/v/bencode.svg)](https://npmjs.com/bencode)
[![npm downloads](https://img.shields.io/npm/dm/bencode.svg)](https://npmjs.com/bencode)
[![ci](https://github.com/webtorrent/node-bencode/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/webtorrent/node-bencode/actions/workflows/ci.yml)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwebtorrent%2Fnode-bencode.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwebtorrent%2Fnode-bencode?ref=badge_shield)

A node library for encoding and decoding bencoded data,
according to the [BitTorrent specification](http://www.bittorrent.org/beps/bep_0003.html).

## Index

- [About BEncoding](#about-bencoding)
- [Installation](#install-with-npm)
- [Usage](#usage)
- [API](#api)

## About BEncoding

from [Wikipedia](https://en.wikipedia.org/wiki/Bencoding):

Bencode (pronounced like B encode) is the encoding used by the peer-to-peer
file sharing system BitTorrent for storing and transmitting loosely structured data.

It supports four different types of values:
- byte strings
- integers
- lists
- dictionaries

Bencoding is most commonly used in torrent files.
These metadata files are simply bencoded dictionaries.

## Install with [npm](https://npmjs.org)

```
npm install bencode
```

## Usage

```javascript
import bencode from 'bencode'
```

You can also use node-bencode with browserify to be able to use it in a lot of modern browsers.

### Encoding

```javascript

var data = {
string: 'Hello World',
integer: 12345,
dict: {
key: 'This is a string within a dictionary'
},
list: [ 1, 2, 3, 4, 'string', 5, {} ]
}

var result = bencode.encode( data )

```

**NOTE** As of `[email protected]`, boolean values will be cast to integers (false -> 0, true -> 1).

#### Output

```
d4:dictd3:key36:This is a string within a dictionarye7:integeri12345e4:listli1ei2ei3ei4e6:stringi5edee6:string11:Hello Worlde
```

### Decoding

```javascript
var data = Buffer.from('d6:string11:Hello World7:integeri12345e4:dictd3:key36:This is a string within a dictionarye4:listli1ei2ei3ei4e6:stringi5edeee')
var result = bencode.decode( data )
```

#### Output

```javascript
{
string: ,
integer: 12345,
dict: {
key:
},
list: [ 1, 2, 3, 4, , 5, {} ]
}
```

Automagically convert bytestrings to strings:

```javascript
var result = bencode.decode( data, 'utf8' )
```

#### Output

```javascript
{
string: 'Hello World',
integer: 12345,
dict: {
key: 'This is a string within a dictionary'
},
list: [ 1, 2, 3, 4, 'string', 5, {} ]
}
```

## API

The API is compatible with the [`abstract-encoding`](https://github.com/mafintosh/abstract-encoding) specification.

### bencode.encode( *data*, *[buffer]*, *[offset]* )

> `Buffer` | `Array` | `String` | `Object` | `Number` | `Boolean` __data__
> `Buffer` __buffer__
> `Number` __offset__

Returns `Buffer`

### bencode.decode( *data*, *[start]*, *[end]*, *[encoding]* )

> `Buffer` __data__
> `Number` __start__
> `Number` __end__
> `String` __encoding__

If `encoding` is set, bytestrings are
automatically converted to strings.

Returns `Object` | `Array` | `Buffer` | `String` | `Number`

### bencode.byteLength( *value* ) or bencode.encodingLength( *value* )

> `Buffer` | `Array` | `String` | `Object` | `Number` | `Boolean` __value__