diff --git a/API/block/README.md b/API/block/README.md new file mode 100644 index 00000000..bdb3f1d8 --- /dev/null +++ b/API/block/README.md @@ -0,0 +1,72 @@ +block API +========= + +#### `get` + +> Get a raw IPFS block. + +##### `Go` **WIP** + +##### `JavaScript` - ipfs.block.get(multihash, [options, callback]) + +`multihash` is a [multihash][multihash] which can be passed as: + +- Buffer, the raw Buffer of the multihash +- String, the base58 encoded version of the multihash + +`callback` must follow `function (err, block) {}` signature, where `err` is an error if the operation was not successful and `block` is a [Block][block] type object, containing both the data and the hash of the block. + +```js +ipfs.block.get(multihash, function (err, block) { + if (err) { + throw err + } + console.log(block.key, block.data) +}) +``` + +If no `callback` is passed, a promise is returned. + +#### `put` + +> Stores input as an IPFS block. + +##### `Go` **WIP** + +##### `JavaScript` - ipfs.block.put(block, [callback]) + +Where `block` can be: + +- `Buffer` - the raw bytes of the Block +- [`Block`][block] instance + +`callback` has the signature `function (err, block) {}`, where `err` is an error if the operation was not successful and `block` is a [Block][block] type object, containing both the data and the hash of the block. + +If no `callback` is passed, a promise is returned. + +#### `stat` + +> Print information of a raw IPFS block. + +##### `Go` **WIP** + +##### `JavaScript` - ipfs.block.stat(multihash, [callback]) + +`multihash` is a [multihash][multihash] which can be passed as: + +- `Buffer`, the raw Buffer of the multihash (or of and encoded version) +- `String`, the toString version of the multihash (or of an encoded version) + +`callback` must follow the signature `function (err, stats) {}`, where `err` is an error if the operation was not successful and `stats` is an object with the format:` + +```JavaScript +{ + Key: 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD', + Size: 10 +} +``` + +If no `callback` is passed, a promise is returned. + +[block](https://github.com/ipfs/js-ipfs-block) +[multihash](https://github.com/multiformats/multihash) diff --git a/package.json b/package.json index 1c7c9006..d07b7625 100644 --- a/package.json +++ b/package.json @@ -48,4 +48,4 @@ "greenkeeperio-bot ", "nginnever " ] -} \ No newline at end of file +} diff --git a/src/block.js b/src/block.js new file mode 100644 index 00000000..39bb682c --- /dev/null +++ b/src/block.js @@ -0,0 +1,84 @@ +/* eslint-env mocha */ +/* eslint max-nested-callbacks: ["error", 8] */ + +'use strict' + +const expect = require('chai').expect + +module.exports = (common) => { + describe('.block', () => { + let ipfs + + before(function (done) { + // CI takes longer to instantiate the daemon, + // so we need to increase the timeout for the + // before step + this.timeout(20 * 1000) + + common.setup((err, factory) => { + expect(err).to.not.exist + factory.spawnNode((err, node) => { + expect(err).to.not.exist + ipfs = node + done() + }) + }) + }) + + after((done) => { + common.teardown(done) + }) + + describe('callback API', () => { + it('.put', (done) => { + const expectedHash = 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ' + const blob = Buffer('blorb') + + ipfs.block.put(blob, (err, res) => { + expect(err).to.not.exist + expect(res).to.have.a.property('Key', expectedHash) + done() + }) + }) + + it('.put error with array of blocks', () => { + const blob = Buffer('blorb') + + ipfs.block.put([blob, blob], (err) => { + expect(err).to.be.an.instanceof(Error) + }) + }) + + it('block.get', (done) => { + const hash = 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ' + + ipfs.block.get(hash, (err, res) => { + expect(err).to.not.exist + + // TODO review this + let buf = '' + res + .on('data', function (data) { buf += data }) + .on('end', function () { + expect(buf).to.be.equal('blorb') + done() + }) + }) + }) + + it('block.stat', (done) => { + const hash = 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ' + + ipfs.block.stat(hash, (err, res) => { + expect(err).to.not.exist + expect(res).to.have.property('Key') + expect(res).to.have.property('Size') + done() + }) + }) + }) + + describe('promise API', () => { + }) + }) +} diff --git a/src/index.js b/src/index.js index f9ad0c53..ee35b234 100644 --- a/src/index.js +++ b/src/index.js @@ -6,3 +6,4 @@ exports.config = require('./config') exports.pin = require('./pin') exports.generic = require('./generic') exports.swarm = require('./swarm') +exports.block = require('./block')