Skip to content
This repository has been archived by the owner on Mar 10, 2020. It is now read-only.

Commit

Permalink
Merge pull request #32 from ipfs/block-api
Browse files Browse the repository at this point in the history
block API spec
  • Loading branch information
daviddias authored Aug 17, 2016
2 parents 3e6fbbc + 488f61b commit 5b9f761
Show file tree
Hide file tree
Showing 4 changed files with 158 additions and 1 deletion.
72 changes: 72 additions & 0 deletions API/block/README.md
Original file line number Diff line number Diff line change
@@ -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)
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,4 @@
"greenkeeperio-bot <[email protected]>",
"nginnever <[email protected]>"
]
}
}
84 changes: 84 additions & 0 deletions src/block.js
Original file line number Diff line number Diff line change
@@ -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', () => {
})
})
}
1 change: 1 addition & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ exports.config = require('./config')
exports.pin = require('./pin')
exports.generic = require('./generic')
exports.swarm = require('./swarm')
exports.block = require('./block')

0 comments on commit 5b9f761

Please sign in to comment.