Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/webtorrent/node-bencode
- Owner: webtorrent
- License: mit
- Created: 2010-07-15T02:25:04.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2024-04-10T23:39:21.000Z (7 months ago)
- Last Synced: 2024-05-01T11:41:24.345Z (7 months ago)
- Topics: abstract-encoding, bencode, bittorrent, javascript, webtorrent
- Language: JavaScript
- Homepage:
- Size: 559 KB
- Stars: 161
- Watchers: 4
- Forks: 36
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
- Authors: AUTHORS
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
- dictionariesBencoding 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__