diff options
author | Joe Hand <joe@joeahand.com> | 2016-08-05 08:47:15 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-05 08:47:15 -0700 |
commit | ffb465bb3bcebb62c5e63cc3ed80d70274848deb (patch) | |
tree | 68203eafcf5b422464dbd4ebf53742e487735ad9 /docs/diy-dat.md | |
parent | 2b6ddccb62e7c425ed2a88b8cd9f94322d31aaaa (diff) | |
download | dat-docs-ffb465bb3bcebb62c5e63cc3ed80d70274848deb.tar.gz dat-docs-ffb465bb3bcebb62c5e63cc3ed80d70274848deb.zip |
Use ecosystem docs to add module readme docs (#12)
* organize for ecosystem docs and cleanup
Signed-off-by: Joe Hand <joe@joeahand.com>
* add ecosystem-docs commands, build file, docs
* remove transform & fix content typo
* upgrade minidocs
Diffstat (limited to 'docs/diy-dat.md')
-rw-r--r-- | docs/diy-dat.md | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/docs/diy-dat.md b/docs/diy-dat.md new file mode 100644 index 0000000..fb16fc1 --- /dev/null +++ b/docs/diy-dat.md @@ -0,0 +1,41 @@ +# DIY Dat + +This document shows how to write your own compatible `dat` client using node modules. + +The three essential node modules are called [hyperdrive](https://npmjs.org/hyperdrive), [hyperdrive-archive-swarm](https://npmjs.org/hyperdrive-archive-swarm) and [level](https://npmjs.org/level). Hyperdrive does file synchronization and versioning, hyperdrive-archive-swarm does peer discovery over local networks and the Internet, and level provides a local LevelDB for storing metadata. More details are available in [How Dat Works](how-dat-works.md). The [dat](https://npmjs.org/dat) module itself is just some code that combines these modules and wraps them in a command-line API. + +Here's the minimal code needed to download data from a dat: + +```js +// run this like: node thisfile.js 4c325f7874b4070blahblahetc +// the dat link someone sent us, we want to download the data from it +var link = new Buffer(process.argv[2], 'hex') + +var Hyperdrive = require('hyperdrive') +var Swarm = require('hyperdrive-archive-swarm') +var level = require('level') +var raf = require('random-access-file') +var each = require('stream-each') + +var db = level('./dat.db') +var drive = Hyperdrive(db) +var archive = drive.createArchive(link, { + file: function (name) { + return raf(path.join(self.dir, name)) + } +}) +var swarm = Swarm(archive) + +archive.open(function (err) { + if (err) return console.error(err) + each(archive.list({live: archive.live}), function (data, next) { + var startBytes = self.stats.bytesDown + archive.download(data, function (err) { + if (err) return console.error(err) + console.log('file downloaded', data.relname) + next() + }) + }, done) +}) + +``` |