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

Commit c211299

Browse files
fix: Correct header handling in the browser
Resolves #76
1 parent 7f93859 commit c211299

File tree

3 files changed

+22
-37
lines changed

3 files changed

+22
-37
lines changed

src/request-api.js

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ function onRes (buffer, cb) {
1616

1717
const stream = !!res.headers['x-stream-output']
1818
const chunkedObjects = !!res.headers['x-chunked-output']
19+
const isJson = res.headers['content-type'] === 'application/json'
1920

2021
if (res.statusCode >= 400 || !res.statusCode) {
2122
const error = new Error(`Server responded with ${res.statusCode}`)
@@ -33,24 +34,18 @@ function onRes (buffer, cb) {
3334

3435
if (chunkedObjects) {
3536
const parsed = []
36-
res.on('data', chunk => parsed.push(JSON.parse(chunk)))
37+
res.on('data', chunk => {
38+
try {
39+
parsed.push(JSON.parse(chunk))
40+
} catch (err) {
41+
// Browser quirks emit more than needed sometimes
42+
}
43+
})
3744
res.on('end', () => cb(null, parsed))
3845
return
3946
}
4047

41-
Wreck.read(res, null, (err, payload) => {
42-
if (err) return cb(err)
43-
44-
let parsed
45-
46-
try {
47-
parsed = JSON.parse(payload.toString())
48-
} catch (err2) {
49-
parsed = payload.toString()
50-
}
51-
52-
cb(null, parsed)
53-
})
48+
Wreck.read(res, {json: isJson}, cb)
5449
}
5550
}
5651

tasks/daemons.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,14 @@ function startDisposableDaemons (callback) {
5757
throw err
5858
}
5959

60-
ipfsNodes[key].setConfig('API', '{"HTTPHeaders": {"Access-Control-Allow-Origin": ["*"]}}', err => {
60+
const headers = {
61+
HTTPHeaders: {
62+
'Access-Control-Allow-Origin': ['*'],
63+
'Access-Control-Allow-Headers': ['X-Stream-Output, X-Chunked-Output'],
64+
'Access-Control-Expose-Headers': ['X-Stream-Output, X-Chunked-Output']
65+
}
66+
}
67+
ipfsNodes[key].setConfig('API', JSON.stringify(headers), err => {
6168
if (err) {
6269
throw err
6370
}

test/tests.js

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,6 @@ describe('IPFS Node.js API wrapper tests', () => {
193193
throw err
194194
}
195195

196-
if (!res.on) {
197-
// Just a string
198-
assert.equal(res.toString(), testfile)
199-
done()
200-
return
201-
}
202-
203196
let buf = ''
204197
res
205198
.on('error', err => { throw err })
@@ -313,7 +306,7 @@ describe('IPFS Node.js API wrapper tests', () => {
313306
throw err
314307
}
315308

316-
assert.equal(res, '')
309+
assert.equal(res, null)
317310
done()
318311
})
319312
})
@@ -391,13 +384,6 @@ describe('IPFS Node.js API wrapper tests', () => {
391384
apiClients['a'].block.get(blorbKey, (err, res) => {
392385
if (err) throw err
393386

394-
if (!res.on) {
395-
// Just a string
396-
assert.equal(res.toString(), 'blorb')
397-
done()
398-
return
399-
}
400-
401387
let buf = ''
402388
res
403389
.on('data', function (data) { buf += data })
@@ -442,13 +428,6 @@ describe('IPFS Node.js API wrapper tests', () => {
442428
apiClients['a'].object.data(testObjectHash, (err, res) => {
443429
if (err) throw err
444430

445-
if (!res.on) {
446-
// Just a string
447-
assert.equal(res.toString(), 'testdata')
448-
done()
449-
return
450-
}
451-
452431
let buf = ''
453432
res
454433
.on('error', err => { throw err })
@@ -729,6 +708,8 @@ describe('IPFS Node.js API wrapper tests', () => {
729708
throw err
730709
}
731710

711+
assert.equal(typeof res, 'object')
712+
732713
return done()
733714

734715
// non ipns or pk hashes fail to fetch, known bug
@@ -749,6 +730,8 @@ describe('IPFS Node.js API wrapper tests', () => {
749730
if (err) {
750731
throw err
751732
}
733+
734+
assert.equal(typeof res, 'object')
752735
assert(res)
753736
done()
754737
})

0 commit comments

Comments
 (0)