Skip to content
This repository has been archived by the owner on Aug 1, 2023. It is now read-only.

Commit

Permalink
refactor: update to js-ipfs@0.50.0 with Uint8Arrays (#107)
Browse files Browse the repository at this point in the history
Updates all dependency versions and switches out node Buffers for Uint8Arrays

BREAKING CHANGES:

- All uses of node Buffers have been replaced with Uint8Arrays
  • Loading branch information
achingbrain authored Sep 9, 2020
1 parent 3208b7c commit 4e09d91
Show file tree
Hide file tree
Showing 13 changed files with 2,424 additions and 2,490 deletions.
9 changes: 8 additions & 1 deletion .aegir.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,14 @@ module.exports = {
webpack: {
plugins: [
new webpack.EnvironmentPlugin(['IPFS_JS_EXEC'])
]
],
node: {
// needed by binary-parse-stream
stream: true,

// needed by core-is-lib
Buffer: true
}
},
karma: {
files: [{
Expand Down
4,749 changes: 2,333 additions & 2,416 deletions package-lock.json

Large diffs are not rendered by default.

33 changes: 19 additions & 14 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,36 +29,41 @@
"url": "https://github.com/ipfs/interop/issues"
},
"homepage": "https://github.com/ipfs/interop#readme",
"browser": {
"go-ipfs": false
},
"dependencies": {
"aegir": "^23.0.0",
"base64url": "^3.0.0",
"aegir": "^26.0.0",
"chai": "^4.2.0",
"chai-as-promised": "^7.1.1",
"cids": "^0.8.0",
"cids": "^1.0.0",
"cross-env": "^7.0.2",
"delay": "^4.3.0",
"detect-node": "^2.0.4",
"dirty-chai": "^2.0.1",
"ipfs-unixfs": "^1.0.1",
"ipfsd-ctl": "^5.0.0",
"ipns": "^0.7.0",
"ipfs-unixfs": "^2.0.2",
"ipfsd-ctl": "^7.0.0",
"ipns": "^0.8.0",
"is-ci": "^2.0.0",
"is-os": "^1.0.1",
"iso-random-stream": "^1.1.1",
"it-all": "^1.0.1",
"it-concat": "^1.0.0",
"it-drain": "^1.0.0",
"it-last": "^1.0.1",
"libp2p-webrtc-star": "^0.18.5",
"libp2p-webrtc-star": "^0.20.0",
"mocha": "^8.0.1",
"multihashes": "^1.0.1",
"multihashes": "^3.0.1",
"nanoid": "^3.1.10",
"peer-id": "^0.13.13",
"peer-id": "^0.14.0",
"p-retry": "^4.1.0",
"pretty-bytes": "^5.1.0",
"promisify-es6": "^1.0.3",
"random-fs": "^1.0.3",
"readable-stream-buffer-stream": "^1.0.0",
"resolve-cwd": "^3.0.0",
"rimraf": "^3.0.0"
"rimraf": "^3.0.0",
"uint8arrays": "^1.1.0"
},
"contributors": [
"achingbrain <alex@achingbrain.net>",
Expand All @@ -78,12 +83,12 @@
],
"devDependencies": {
"go-ipfs": "^0.6.0",
"ipfs": "^0.48.0",
"ipfs-http-client": "^45.0.0"
"ipfs": "^0.50.1",
"ipfs-http-client": "^46.1.0"
},
"peerDependencies": {
"go-ipfs": "^0.6.0",
"ipfs": "^0.48.0",
"ipfs-http-client": "^45.0.0"
"ipfs": "^0.50.0",
"ipfs-http-client": "^46.1.0"
}
}
25 changes: 13 additions & 12 deletions test/cid-version-agnostic.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const { nanoid } = require('nanoid')
const concat = require('it-concat')
const { expect } = require('./utils/chai')
const daemonFactory = require('./utils/daemon-factory')
const uint8ArrayFromString = require('uint8arrays/from-string')

describe('CID version agnostic', function () {
this.timeout(50 * 1000)
Expand Down Expand Up @@ -32,95 +33,95 @@ describe('CID version agnostic', function () {
after(() => daemonFactory)

it('should add v0 and cat v1 (go0 -> go0)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.go0.api.add(input, { cidVersion: 0 })
const cidv1 = cid.toV1()
const output = await concat(daemons.go0.api.cat(cidv1))
expect(output.slice()).to.deep.equal(input)
})

it('should add v0 and cat v1 (js0 -> js0)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.js0.api.add(input, { cidVersion: 0 })
const cidv1 = cid.toV1()
const output = await concat(daemons.js0.api.cat(cidv1))
expect(output.slice()).to.deep.equal(input)
})

it('should add v0 and cat v1 (go0 -> go1)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.go0.api.add(input, { cidVersion: 0 })
const cidv1 = cid.toV1()
const output = await concat(daemons.go1.api.cat(cidv1))
expect(output.slice()).to.deep.equal(input)
})

it('should add v0 and cat v1 (js0 -> js1)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.js0.api.add(input, { cidVersion: 0 })
const cidv1 = cid.toV1()
const output = await concat(daemons.js1.api.cat(cidv1))
expect(output.slice()).to.deep.equal(input)
})

it('should add v0 and cat v1 (js0 -> go0)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.js0.api.add(input, { cidVersion: 0 })
const cidv1 = cid.toV1()
const output = await concat(daemons.go0.api.cat(cidv1))
expect(output.slice()).to.deep.equal(input)
})

it('should add v0 and cat v1 (go0 -> js0)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.go0.api.add(input, { cidVersion: 0 })
const cidv1 = cid.toV1()
const output = await concat(daemons.js0.api.cat(cidv1))
expect(output.slice()).to.deep.equal(input)
})

it('should add v1 and cat v0 (go0 -> go0)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.go0.api.add(input, { cidVersion: 1, rawLeaves: false })
const cidv0 = cid.toV0()
const output = await concat(daemons.go0.api.cat(cidv0))
expect(output.slice()).to.deep.equal(input)
})

it('should add v1 and cat v0 (js0 -> js0)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.js0.api.add(input, { cidVersion: 1, rawLeaves: false })
const cidv0 = cid.toV0()
const output = await concat(daemons.js0.api.cat(cidv0))
expect(output.slice()).to.deep.equal(input)
})

it('should add v1 and cat v0 (go0 -> go1)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.go0.api.add(input, { cidVersion: 1, rawLeaves: false })
const cidv0 = cid.toV0()
const output = await concat(daemons.go1.api.cat(cidv0))
expect(output.slice()).to.deep.equal(input)
})

it('should add v1 and cat v0 (js0 -> js1)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.js0.api.add(input, { cidVersion: 1, rawLeaves: false })
const cidv0 = cid.toV0()
const output = await concat(daemons.js1.api.cat(cidv0))
expect(output.slice()).to.deep.equal(input)
})

it('should add v1 and cat v0 (js0 -> go0)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.js0.api.add(input, { cidVersion: 1, rawLeaves: false })
const cidv0 = cid.toV0()
const output = await concat(daemons.go0.api.cat(cidv0))
expect(output.slice()).to.deep.equal(input)
})

it('should add v1 and cat v0 (go0 -> js0)', async () => {
const input = Buffer.from(nanoid())
const input = uint8ArrayFromString(nanoid())
const { cid } = await daemons.go0.api.add(input, { cidVersion: 1, rawLeaves: false })
const cidv0 = cid.toV0()
const output = await concat(daemons.js0.api.cat(cidv0))
Expand Down
4 changes: 2 additions & 2 deletions test/exchange-files.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/* eslint-env mocha */
'use strict'

const crypto = require('crypto')
const randomBytes = require('iso-random-stream/src/random')
const pretty = require('pretty-bytes')
const randomFs = require('random-fs')
const promisify = require('promisify-es6')
Expand Down Expand Up @@ -130,7 +130,7 @@ describe('exchange files', function () {
it(`${name}: ${pretty(size)}`, async function () {
this.timeout(timeout)

const data = crypto.randomBytes(size)
const data = randomBytes(size)

const { cid } = await daemon1.api.add(data)
const file = await concat(daemon2.api.cat(cid))
Expand Down
46 changes: 23 additions & 23 deletions test/files.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-env mocha */
'use strict'

const crypto = require('crypto')
const randomBytes = require('iso-random-stream/src/random')
const UnixFs = require('ipfs-unixfs')
const daemonFactory = require('./utils/daemon-factory')
const bufferStream = require('readable-stream-buffer-stream')
Expand Down Expand Up @@ -65,11 +65,11 @@ async function addFile (daemon, data) {

function createDataStream (size = 262144) {
const chunkSize = size
const buffer = Buffer.alloc(chunkSize, 0)
const buffer = new Uint8Array(chunkSize)

return bufferStream(chunkSize, {
generator: (size, callback) => {
callback(null, buffer.slice(0, size))
callback(null, buffer.subarray(0, size))
}
})
}
Expand Down Expand Up @@ -156,7 +156,7 @@ describe('files', function () {

it('returns an error when writing deeply nested files and the parents do not exist', () => {
const writeNonExistentFile = (daemon) => {
return daemon.api.files.write(`/foo-${Math.random()}/bar-${Math.random()}/baz-${Math.random()}/i-do-not-exist-${Math.random()}`, Buffer.from([0, 1, 2, 3]))
return daemon.api.files.write(`/foo-${Math.random()}/bar-${Math.random()}/baz-${Math.random()}/i-do-not-exist-${Math.random()}`, Uint8Array.from([0, 1, 2, 3]))
}

return compareErrors(
Expand All @@ -171,7 +171,7 @@ describe('files', function () {
// Similar to the problem we worked around here:
// https://github.com/ipfs/js-ipfs-http-client/blob/d7eb0e8ffb15e207a8a6062e292a3b5babf35a9e/src/lib/error-handler.js#L12-L23
it.skip('uses raw nodes for leaf data', () => {
const data = crypto.randomBytes(1024 * 300)
const data = randomBytes(1024 * 300)
const testLeavesAreRaw = async (daemon) => {
const file = await addFile(daemon, data)
await checkNodeTypes(daemon, file)
Expand Down Expand Up @@ -253,7 +253,7 @@ describe('files', function () {
}

it('empty files', () => {
const data = Buffer.alloc(0)
const data = new Uint8Array(0)

return compare(
testHashesAreEqual(go, data),
Expand All @@ -262,7 +262,7 @@ describe('files', function () {
})

it('small files', () => {
const data = Buffer.from([0x00, 0x01, 0x02])
const data = Uint8Array.from([0x00, 0x01, 0x02])

return compare(
testHashesAreEqual(go, data),
Expand All @@ -271,7 +271,7 @@ describe('files', function () {
})

it('big files', () => {
const data = crypto.randomBytes(1024 * 3000)
const data = randomBytes(1024 * 3000)

return compare(
testHashesAreEqual(go, data),
Expand All @@ -280,8 +280,8 @@ describe('files', function () {
})

it('files that have had data appended', () => {
const initialData = crypto.randomBytes(1024 * 300)
const appendedData = crypto.randomBytes(1024 * 300)
const initialData = randomBytes(1024 * 300)
const appendedData = randomBytes(1024 * 300)

return compare(
appendData(go, initialData, appendedData),
Expand All @@ -291,8 +291,8 @@ describe('files', function () {

it('files that have had data overwritten', () => {
const bytes = 1024 * 300
const initialData = crypto.randomBytes(bytes)
const newData = crypto.randomBytes(bytes)
const initialData = randomBytes(bytes)
const newData = randomBytes(bytes)

return compare(
overwriteData(go, initialData, newData),
Expand All @@ -301,7 +301,7 @@ describe('files', function () {
})

it('small files with CIDv1', () => {
const data = Buffer.from([0x00, 0x01, 0x02])
const data = Uint8Array.from([0x00, 0x01, 0x02])
const options = {
cidVersion: 1
}
Expand All @@ -313,7 +313,7 @@ describe('files', function () {
})

it('big files with CIDv1', () => {
const data = crypto.randomBytes(1024 * 3000)
const data = randomBytes(1024 * 3000)
const options = {
cidVersion: 1
}
Expand Down Expand Up @@ -366,7 +366,7 @@ describe('files', function () {
})

it('hamt shards', () => {
const data = crypto.randomBytes(100)
const data = randomBytes(100)
const files = []
const dir = `/shard-${Date.now()}`

Expand All @@ -385,27 +385,27 @@ describe('files', function () {

it('updating mfs hamt shards', () => {
const dir = `/shard-${Date.now()}`
const data = crypto.randomBytes(100)
const nodeGrContent = Buffer.from([0, 1, 2, 3, 4])
const superModuleContent = Buffer.from([5, 6, 7, 8, 9])
const data = randomBytes(100)
const nodeGrContent = Uint8Array.from([0, 1, 2, 3, 4])
const superModuleContent = Uint8Array.from([5, 6, 7, 8, 9])
const files = [{
path: `${dir}/node-gr`,
content: nodeGrContent
}, {
path: `${dir}/yanvoidmodule`,
content: crypto.randomBytes(5)
content: randomBytes(5)
}, {
path: `${dir}/methodify`,
content: crypto.randomBytes(5)
content: randomBytes(5)
}, {
path: `${dir}/fis-msprd-style-loader_0_13_1`,
content: crypto.randomBytes(5)
content: randomBytes(5)
}, {
path: `${dir}/js-form`,
content: crypto.randomBytes(5)
content: randomBytes(5)
}, {
path: `${dir}/vivanov-sliceart`,
content: crypto.randomBytes(5)
content: randomBytes(5)
}]

for (let i = 0; i < SHARD_THRESHOLD; i++) {
Expand Down
4 changes: 2 additions & 2 deletions test/ipns-pubsub.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@

const PeerID = require('peer-id')
const { fromB58String } = require('multihashes')
const base64url = require('base64url')
const ipns = require('ipns')
const last = require('it-last')
const pRetry = require('p-retry')
const waitFor = require('./utils/wait-for')
const { expect } = require('./utils/chai')
const daemonFactory = require('./utils/daemon-factory')
const uint8ArrayToString = require('uint8arrays/to-string')

const daemonsOptions = {
args: ['--enable-namesys-pubsub'] // enable ipns over pubsub
Expand Down Expand Up @@ -102,7 +102,7 @@ const subscribeToReceiveByPubsub = async (nodeA, nodeB, idA, idB) => {
}

const keys = ipns.getIdKeys(fromB58String(idA))
const topic = `${namespace}${base64url.encode(keys.routingKey.toBuffer())}`
const topic = `${namespace}${uint8ArrayToString(keys.routingKey.uint8Array(), 'base64url')}`

await waitForPeerToSubscribe(nodeB.api, topic)
await nodeB.api.pubsub.subscribe(topic, checkMessage)
Expand Down
Loading

0 comments on commit 4e09d91

Please sign in to comment.