Home

Awesome

content-addressable-store

A content addressable store, that can be streamed to.

example

var db = require('content-addressable-store')('/tmp/my-store', 'sha256')

//add a document, and get the hash
db.add('CONTENT', function (err, hash) {
  if(err) throw err //handle error
  console.log(hash) //the "key" of the document.
})

// or as a stream:

inputStream
  .pipe(db.addStream())
  .on('error', function (err) {
    throw err //handle error
  })
  .on('close', function () {
    console.log(this.hash)
  })

API

ContentAddressableStore(path, alg)

var ContentAddressableStore = require('content-addressable-store')
var CAS = ContentAddressableStore(path, alg)

path is the director where the content should be stored. alg is the hashing algorithm, or a createHash function that does not require a algorithm.

This function returns an instance of the content addressable store.

add(content, opts, cb(err, hash, cached))

Add content to the database. specify encoding via opts={encoding: 'utf8'}. you must specify an encoding to get the correct hash, unless the content is a buffer.

cached=truthy means that the objects was already in the store, and was not added.

addStream (opts)

Add a stream to the database. A file will be written to a temporary location, and then copied, to ensure durability.

get (hash, opts, cb(err, content))

get the content for hash. specify encoding as above.

getStream (hash, opts)

get the content for hash as a stream. specify encoding as above.

has (hash, cb(err, stat))

Returns an error if that hash is not already in the database. stats on the file are returned as the second callback argument. since it this module will be rewritten to use leveldb (etc) the only property of the stat that should be relied upon is {size: sizeOfFile}

all (cb(err, ary))

get an array of all hashes in the store.

isHash(string)

returns true if this string is a valid hash for this content addressable store. (checks whether it is the correct length of hex characters)

del (hash, cb)

NOT SUPPORTED. This would complexify content-addressable-store greatly beyond the current ~100 lines, because of the need for locking.

License

MIT