Welcome
Awesome Dat
Dat Applications
datproject/dat
datproject/dat-desktop
Community Applications
codeforscience/sciencefair
mafintosh/hyperirc
jondashkyle/soundcloud-archiver
mafintosh/hypervision
joehand/hypertweet
beakerbrowser/dat-photos-app
High-Level APIs
datproject/dat-node
datproject/dat-js
beakerbrowser/pauls-dat-api
beakerbrowser/node-dat-archive
Hosting & Dat Management
mafintosh/hypercore-archiver
datprotocol/hypercloud
beakerbrowser/hashbase
joehand/dat-now
mafintosh/hypercore-archiver-bot
joehand/hypercore-archiver-ws
datproject/dat-registry-api
datproject/dat-registry-client
Managing & Aggregating Dats
datproject/multidat
datproject/multidrive
jayrbolton/dat-pki
beakerbrowser/injestdb
Http Hosting
joehand/hyperdrive-http
beakerbrowser/dathttpd
Dat Link Utilties
datprotocol/dat-dns
joehand/dat-link-resolve
pfrazee/parse-dat-url
juliangruber/dat-encoding
Dat Utilities
joehand/dat-log
mafintosh/dat-ls
karissa/hyperhealth
joehand/hyperdrive-network-speed
File Imports & Exports
juliangruber/hyperdrive-import-files
mafintosh/mirror-folder
pfrazee/hyperdrive-staging-area
pfrazee/hyperdrive-to-zip-stream
Hypercore Tools
mafintosh/hyperpipe
Dat Core Modules
mafintosh/hyperdrive
mafintosh/hypercore
CLI Utilities
joehand/dat-doctor
joehand/dat-ignore
joehand/dat-json
Networking
karissa/hyperdiscovery
mafintosh/discovery-swarm
mafintosh/webrtc-swarm
joehand/dat-swarm-defaults
Lower level networking modules
maxogden/discovery-channel
mafintosh/dns-discovery
mafintosh/multicast-dns
webtorrent/bittorrent-dht
mafintosh/utp-native
mafintosh/signalhub
Storage
datproject/dat-storage
datproject/dat-secret-storage
Random Access
juliangruber/abstract-random-access
mafintosh/multi-random-access
mafintosh/random-access-file
mafintosh/random-access-memory
mafintosh/random-access-page-files
datproject/dat-http
substack/random-access-idb
Other Related Dat Project Modules
mafintosh/peer-network
mafintosh/hyperdht
Dat Project Organization Stuff
datproject/datproject.org
datproject/discussions
datproject/design
datproject/dat-elements
kriesse/dat-colors
kriesse/dat-icons
juliangruber/dat.json
Outdated
juliangruber/dat.haus
poga/hyperfeed
yoshuawuyts/normcore
yoshuawuyts/github-to-hypercore
poga/hyperspark
juliangruber/hypercore-index
juliangruber/hyperdrive-encoding
mafintosh/hyperdrive-http-server
joehand/hyperdrive-http
joehand/dat-push
joehand/dat-backup
joehand/archiver-server
joehand/archiver-api
poga/hyperdrive-ln
substack/hyperdrive-multiwriter
substack/hyperdrive-named-archives
substack/git-dat
CfABrigadePhiladelphia/jawn
maxogden/dat-archiver
juliangruber/hyperdrive-stats
karissa/hypercore-stats-server
mafintosh/hypercore-stats-ui
karissa/zip-to-hyperdrive
joehand/url-dat
joehand/tar-dat
joehand/hyperdrive-duplicate

Archiver-API Travis npm

A REST API for hypercore-archiver.

Features

  • Add & remove keys to a hypercore-archiver
  • Get status of the hypercore-archiver

Usage

See server.js for a complete usage example.

var http = require('http')
var appa = require('appa')
var Archiver = require('hypercore-archiver')
var archiverAPI = require('archiver-api')
var DatServer = require('archiver-server')

var archives = Archiver(dir)
var datServer = DatServer(archives, {swarm: true})
var api = Api(archives)
var app = appa()

var apiServer = http.createServer(app)

app.on('/add', function (req, res, ctx) {
  api.add(ctx.body, function (err, code, data) {
    if (err) return app.error(res, code, err.message)
    app.send(code, data).pipe(res)
  })
})

// Register Other API methods

API

var api = ArchiverApi(archiver, [opts])

archiver is a hypercore-archiver instance.

api.add(opts, cb)

Add an archive to the archiver. opts should be an object with:

  • opts.key (String) - archive key

Note: To add an archive, you need to connect to it on the Dat Network. archiver-server does this for you but you can also use discovery-swarm or discovery-channel directly

api.remove(opts, cb)

Remove an archive from the archiver.

opts should be an object with:

  • opts.key (String) - archive key

api.status(cb)

Get the archiver status. Currently returns {archives: count} where count is number of archives in the archiver.

api.archiveProgress(key, cb)

Get progress for an archive.

API will respond with a archive progress object: {progress: 0.5}, where progress is the percentage of blocks done.

API Status

Implemented

  • Add
  • Remove via POST
  • General Status
  • Archive Progress

TODO:

  • Remove via DELETE
  • Archive status (peers, history, etc.)
  • Associate archive with user/email

Example with Archiver-Server

Archiver-server makes it easy to connect to the Dat network and serve archives over HTTP.

Run the Servers:

npm start

This will start three servers:

  1. HTTP Archiver API: Send POST requests to /add to archive Dats.
  2. Dat Network: Connect to peers over the Dat network
  3. HTTP Archives: Access archives over HTTP (via hyperdrive-http)

Send a POST request to the API

Send the request with a Dat key, YOUR_DAT_KEY_HERE, that you are hosting.

curl -X POST -H "Content-Type: application/json" -d '{"key":"YOUR_DAT_KEY_HERE"}' http://127.0.0.1:3000/add

Visit your archive in your http-based browser: http://127.0.0.1:8000/YOUR_DAT_KEY_HERE/.

Or via Dat on Beaker: dat://YOUR_DAT_KEY_HERE

License

MIT