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

Commit 4149e2d

Browse files
committed
fix: pass protocol to api client
Depends on - multiformats/js-uri-to-multiaddr#3 - ipfs-inactive/js-ipfs-http-client#935 Fixes ipfs/ipfs-webui#925 License: MIT Signed-off-by: Oli Evans <[email protected]>
1 parent fcabfa9 commit 4149e2d

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

src/js-ipfs-api/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ async function tryApi ({ IpfsApi, apiAddress, defaultApiAddress, location, ipfsC
2424
console.log('Trying ipfs-api at current origin', originAddress)
2525
const res = await maybeApi({
2626
apiAddress: originAddress,
27+
apiOpts: {
28+
protocol: location.protocol.slice(0, -1)
29+
},
2730
ipfsConnectionTest,
2831
IpfsApi
2932
})
@@ -37,9 +40,9 @@ async function tryApi ({ IpfsApi, apiAddress, defaultApiAddress, location, ipfsC
3740
}
3841

3942
// Helper to construct and test an api client. Returns an js-ipfs-api instance or null
40-
async function maybeApi ({ apiAddress, ipfsConnectionTest, IpfsApi }) {
43+
async function maybeApi ({ apiAddress, apiOpts, ipfsConnectionTest, IpfsApi }) {
4144
try {
42-
const ipfs = new IpfsApi(apiAddress)
45+
const ipfs = new IpfsApi(apiAddress, apiOpts)
4346
await ipfsConnectionTest(ipfs)
4447
return { ipfs, provider, apiAddress }
4548
} catch (error) {

src/js-ipfs-api/index.test.js

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,80 @@
11
/* global it, expect, jest */
22
const tryApi = require('./index.js')
33
const { URL } = require('url')
4+
const IpfsApi = require('ipfs-http-client')
45

56
it('Should use the apiAddress', async (done) => {
67
const opts = {
78
apiAddress: '/ip4/1.1.1.1/tcp/1111',
89
defaultApiAddress: '/ip4/127.0.0.1/tcp/5001',
910
location: new URL('http://localhost:5001'),
10-
IpfsApi: jest.fn(),
11+
IpfsApi: IpfsApi,
1112
ipfsConnectionTest: jest.fn().mockResolvedValueOnce(true)
1213
}
1314
const res = await tryApi(opts)
1415
expect(res.apiAddress).toEqual(opts.apiAddress)
1516
expect(res.provider).toEqual('js-ipfs-api')
1617
expect(opts.ipfsConnectionTest.mock.calls.length).toBe(1)
17-
expect(opts.IpfsApi.mock.calls.length).toBe(1)
18+
const config = res.ipfs.util.getEndpointConfig()
19+
expect(config.host).toEqual('1.1.1.1')
20+
expect(config.port).toEqual('1111')
21+
expect(config.protocol).toEqual('http')
1822
done()
1923
})
2024

2125
it('Should use the location where hostname not localhost', async (done) => {
2226
const opts = {
2327
defaultApiAddress: '/ip4/127.0.0.1/tcp/5001',
2428
location: new URL('http://dev.local:5001'),
25-
IpfsApi: jest.fn(),
29+
IpfsApi: IpfsApi,
2630
ipfsConnectionTest: jest.fn().mockResolvedValueOnce(true)
2731
}
2832
const res = await tryApi(opts)
29-
expect(res.apiAddress).toEqual('/dnsaddr/dev.local/tcp/5001/http')
33+
expect(res.apiAddress).toEqual('/dns4/dev.local/tcp/5001/http')
3034
expect(res.provider).toEqual('js-ipfs-api')
3135
expect(opts.ipfsConnectionTest.mock.calls.length).toBe(1)
32-
expect(opts.IpfsApi.mock.calls.length).toBe(1)
36+
const config = res.ipfs.util.getEndpointConfig()
37+
expect(config.host).toEqual('dev.local')
38+
expect(config.port).toEqual('5001')
39+
expect(config.protocol).toEqual('http')
3340
done()
3441
})
3542

3643
it('Should use the location where port not 5001', async (done) => {
3744
const opts = {
3845
defaultApiAddress: '/ip4/127.0.0.1/tcp/5001',
39-
location: new URL('http://localhost:9999'),
40-
IpfsApi: jest.fn(),
46+
location: new URL('https://webui.ipfs.io'),
47+
IpfsApi: IpfsApi,
4148
ipfsConnectionTest: jest.fn().mockResolvedValueOnce(true)
4249
}
4350
const res = await tryApi(opts)
44-
expect(res.apiAddress).toEqual('/dnsaddr/localhost/tcp/9999/http')
51+
expect(res.apiAddress).toEqual('/dns4/webui.ipfs.io/tcp/443/https')
4552
expect(res.provider).toEqual('js-ipfs-api')
4653
expect(opts.ipfsConnectionTest.mock.calls.length).toBe(1)
47-
expect(opts.IpfsApi.mock.calls.length).toBe(1)
54+
const config = res.ipfs.util.getEndpointConfig()
55+
expect(config.host).toEqual('webui.ipfs.io')
56+
expect(config.port).toEqual('443')
57+
expect(config.protocol).toEqual('https')
4858
done()
4959
})
5060

5161
it('Should use the defaultApiAddress if location fails', async (done) => {
5262
const opts = {
5363
defaultApiAddress: '/ip4/127.0.0.1/tcp/5001',
5464
location: new URL('http://astro.cat:5001'),
55-
IpfsApi: jest.fn(),
65+
IpfsApi: IpfsApi,
5666
// location call fails, default ok
5767
ipfsConnectionTest: jest.fn()
5868
.mockRejectedValueOnce(new Error('nope'))
5969
.mockResolvedValueOnce(true)
6070
}
6171
const res = await tryApi(opts)
62-
console.log('res', res)
6372
expect(res.apiAddress).toEqual(opts.defaultApiAddress)
6473
expect(res.provider).toEqual('js-ipfs-api')
6574
expect(opts.ipfsConnectionTest.mock.calls.length).toBe(2)
66-
expect(opts.IpfsApi.mock.calls.length).toBe(2)
75+
const config = res.ipfs.util.getEndpointConfig()
76+
expect(config.host).toEqual('127.0.0.1')
77+
expect(config.port).toEqual('5001')
78+
expect(config.protocol).toEqual('http')
6779
done()
6880
})

0 commit comments

Comments
 (0)