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

Commit 6c22cd5

Browse files
committed
Add "addUrl" API.
1 parent c8cdb63 commit 6c22cd5

8 files changed

+62
-29
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"flatmap": "0.0.3",
1414
"glob": "^7.0.3",
1515
"ipfs-merkle-dag": "^0.6.0",
16+
"isstream": "^0.1.2",
1617
"multiaddr": "^2.0.0",
1718
"multipart-stream": "^2.0.1",
1819
"ndjson": "^1.4.3",

src/add-to-dagnode-transform.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const async = require('async')
2+
const getDagNode = require('./get-dagnode')
3+
4+
// transform { Hash: '...' } objects into DAGNodes async
5+
module.exports = function (err, res, send, done) {
6+
if (err) return done(err)
7+
async.map(res, function map (entry, next) {
8+
getDagNode(send, entry.Hash, next)
9+
}, function (err, res) {
10+
done(err, res)
11+
})
12+
}

src/api/add-url.js

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'use strict'
2+
3+
const Wreck = require('wreck')
4+
const async = require('async')
5+
const DAGNode = require('ipfs-merkle-dag').DAGNode
6+
const addToDagNodesTransform = require('../add-to-dagnode-transform')
7+
8+
module.exports = (send) => {
9+
return function add (url, opts, cb) {
10+
if (typeof (opts) === 'function' && cb === undefined) {
11+
cb = opts
12+
opts = {}
13+
}
14+
15+
if (typeof url !== 'string' || !url.startsWith('http')) {
16+
return cb(new Error('"url" param must be an http(s) url'))
17+
}
18+
19+
var sendWithTransform = send.withTransform(addToDagNodesTransform)
20+
21+
Wreck.request('GET', url, null, (err, res) => {
22+
if (err) return cb(err)
23+
24+
sendWithTransform('add', null, opts, res, cb)
25+
})
26+
}
27+
}

src/api/add.js

+9-26
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
'use strict'
22

3+
const isStream = require('isstream')
34
const Wreck = require('wreck')
4-
const async = require('async')
5-
const DAGNode = require('ipfs-merkle-dag').DAGNode
5+
const addToDagNodesTransform = require('../add-to-dagnode-transform')
66

77
module.exports = (send) => {
88
return function add (files, opts, cb) {
@@ -11,33 +11,16 @@ module.exports = (send) => {
1111
opts = {}
1212
}
1313

14-
send = send.withTransform(transform)
14+
var good = Buffer.isBuffer(files) ||
15+
isStream.isReadable(files) ||
16+
Array.isArray(files)
1517

16-
if (typeof files === 'string' && files.startsWith('http')) {
17-
return Wreck.request('GET', files, null, (err, res) => {
18-
if (err) return cb(err)
19-
20-
send('add', null, opts, res, cb)
21-
})
18+
if (!good) {
19+
return cb(new Error('"files" must be a buffer, readable stream, or array of objects'))
2220
}
2321

24-
return send('add', null, opts, files, cb)
25-
26-
// transform returned objects into DAGNodes
27-
function transform (err, res, done) {
28-
if (err) return done(err)
22+
var sendWithTransform = send.withTransform(addToDagNodesTransform)
2923

30-
async.map(res,
31-
function map (entry, fin) {
32-
send('object/get', entry.Hash, null, null, function (err, result) {
33-
if (err) return done(err)
34-
const node = new DAGNode(result.Data, result.Links)
35-
fin(err, node)
36-
})
37-
},
38-
function complete (err, results) {
39-
if (done) return done(err, results)
40-
})
41-
}
24+
return sendWithTransform('add', null, opts, files, cb)
4225
}
4326
}

src/get-dagnode.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const DAGNode = require('ipfs-merkle-dag').DAGNode
2+
3+
module.exports = function (send, hash, cb) {
4+
send('object/get', hash, null, null, function (err, result) {
5+
if (err) return cb(err)
6+
const node = new DAGNode(result.Data, result.Links)
7+
cb(err, node)
8+
})
9+
}

src/load-commands.js

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
function requireCommands () {
44
return {
55
add: require('./api/add'),
6+
addUrl: require('./api/add-url'),
67
bitswap: require('./api/bitswap'),
78
block: require('./api/block'),
89
cat: require('./api/cat'),

src/request-api.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ exports = module.exports = function getRequestAPI (config) {
143143
if (p instanceof Promise) {
144144
return p.then((res) => {
145145
return new Promise(function (resolve, reject) {
146-
transform(null, res, function (err, res) {
146+
transform(null, res, send, function (err, res) {
147147
if (err) reject(err)
148148
else resolve(res)
149149
})
@@ -156,7 +156,7 @@ exports = module.exports = function getRequestAPI (config) {
156156
function wrap (done) {
157157
if (done) {
158158
return function (err, res) {
159-
transform(err, res, done)
159+
transform(err, res, send, done)
160160
}
161161
}
162162
}

test/api/add.spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ describe('.add', () => {
177177

178178
it('add url', (done) => {
179179
const url = 'https://raw.githubusercontent.com/ipfs/js-ipfs-api/2a9cc63d7427353f2145af6b1a768a69e67c0588/README.md'
180-
apiClients.a.add(url, (err, res) => {
180+
apiClients.a.addUrl(url, (err, res) => {
181181
expect(err).to.not.exist
182182

183183
const added = res[0] != null ? res[0] : res

0 commit comments

Comments
 (0)