Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit 3ba4513

Browse files
committed
feat: WIP add ipfs.resolve CLI and HTTP command
License: MIT Signed-off-by: Alan Shaw <alan@tableflip.io>
1 parent 9eabe9b commit 3ba4513

File tree

5 files changed

+110
-0
lines changed

5 files changed

+110
-0
lines changed

src/cli/commands/resolve.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'use strict'
2+
3+
const print = require('../utils').print
4+
5+
module.exports = {
6+
command: 'resolve <name>',
7+
8+
description: 'Resolve the value of names to IPFS',
9+
10+
builder: {
11+
recursive: {
12+
alias: 'r',
13+
type: 'boolean',
14+
default: false
15+
}
16+
},
17+
18+
handler (argv) {
19+
argv.ipfs.resolve(argv.name, { recursive: argv.recursive }, (err, res) => {
20+
if (err) throw err
21+
print(res)
22+
})
23+
}
24+
}

src/http/api/resources/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ exports.pubsub = require('./pubsub')
1818
exports.dns = require('./dns')
1919
exports.key = require('./key')
2020
exports.stats = require('./stats')
21+
exports.resolve = require('./resolve')

src/http/api/resources/resolve.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'use strict'
2+
3+
const Joi = require('joi')
4+
const debug = require('debug')
5+
6+
const log = debug('jsipfs:http-api:resolve')
7+
log.error = debug('jsipfs:http-api:resolve:error')
8+
9+
module.exports = {
10+
validate: {
11+
query: Joi.object().keys({
12+
r: Joi.alternatives()
13+
.when('recursive', {
14+
is: Joi.any().exist(),
15+
then: Joi.any().forbidden(),
16+
otherwise: Joi.boolean()
17+
}),
18+
recursive: Joi.boolean(),
19+
arg: Joi.string().required()
20+
}).unknown()
21+
},
22+
handler (request, reply) {
23+
const ipfs = request.server.app.ipfs
24+
const name = request.query.arg
25+
const recursive = request.query.r || request.query.recursive || false
26+
27+
log(name, { recursive })
28+
29+
ipfs.resolve(name, { recursive }, (err, res) => {
30+
if (err) {
31+
log.error(err)
32+
return reply({ Message: err.message, Code: 0 }).code(500)
33+
}
34+
reply({ Path: res })
35+
})
36+
}
37+
}

src/http/api/routes/resolve.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict'
2+
3+
const resources = require('./../resources')
4+
5+
module.exports = (server) => {
6+
const api = server.select('API')
7+
8+
api.route({
9+
method: '*',
10+
path: '/api/v0/resolve',
11+
config: {
12+
handler: resources.resolve.handler,
13+
validate: resources.resolve.validate
14+
}
15+
})
16+
}

test/cli/resolve.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/* eslint-env mocha */
2+
'use strict'
3+
4+
const Path = require('path')
5+
const expect = require('chai').expect
6+
const isIpfs = require('is-ipfs')
7+
8+
const runOnAndOff = require('../utils/on-and-off')
9+
10+
describe('resolve', () => runOnAndOff((thing) => {
11+
let ipfs
12+
13+
before(() => {
14+
ipfs = thing.ipfs
15+
})
16+
17+
it('should resolve an IPFS hash', (done) => {
18+
const path = '/src/init-files/init-docs/readme'
19+
let hash
20+
21+
return ipfs(`add ${Path.join(process.cwd(), path)}`)
22+
.then((out) => {
23+
hash = out.split(' ')[1]
24+
console.log(out)
25+
expect(isIpfs.cid(hash)).to.be.true()
26+
return ipfs(`resolve ${hash}`)
27+
})
28+
.then((out) => {
29+
expect(out).to.contain(`/ipfs/${hash}`)
30+
})
31+
})
32+
}))

0 commit comments

Comments
 (0)