diff --git a/package.json b/package.json index cb108cc87..d3703fc5f 100644 --- a/package.json +++ b/package.json @@ -69,8 +69,8 @@ "build:docs/toc": "echo 'TODO'", "build:tests": "rm -f test/browser/bundle.js* && webpack --config ./conf/webpack.tests.config.js", "prepublishOnly": "npm run build", - "lint": "standard --env=mocha", - "lint:fix": "standard --fix", + "lint": "standard --env=mocha --globals=CustomEvent", + "lint:fix": "standard --fix --globals=CustomEvent", "webrtc": "webrtc-star --port=12345", "webrtc:background": "webrtc-star --port=12345 &" }, diff --git a/src/access-controllers/orbitdb.js b/src/access-controllers/orbitdb.js index 30d55a6f0..4d1d47c92 100644 --- a/src/access-controllers/orbitdb.js +++ b/src/access-controllers/orbitdb.js @@ -1,11 +1,10 @@ -import { EventEmitter } from 'events' import ensureACAddress from '../utils/ensure-ac-address.js' import IPFSAccessController from './ipfs.js' const type = 'orbitdb' const OrbitDBAccessController = ({ write } = {}) => async ({ orbitdb, identities, address }) => { - const events = new EventEmitter() + const events = new EventTarget() address = address || 'default-access-controller' write = write || [orbitdb.identity.id] @@ -14,11 +13,9 @@ const OrbitDBAccessController = ({ write } = {}) => async ({ orbitdb, identities const db = await orbitdb.open(ensureACAddress(address), { type: 'keyvalue', AccessController: IPFSAccessController({ write }) }) address = db.address - const onUpdate = (entry) => { - events.emit('update', entry) - } - - db.events.on('update', onUpdate) + db.events.addEventListener('update', event => { + events.dispatchEvent(new CustomEvent('update', { detail: event.detail })) + }) // Return true if entry is allowed to be added to the database const canAppend = async (entry) => { diff --git a/src/database.js b/src/database.js index c15722017..5bec35dee 100644 --- a/src/database.js +++ b/src/database.js @@ -1,4 +1,3 @@ -import { EventEmitter } from 'events' import PQueue from 'p-queue' import Sync from './sync.js' import { Log, Entry } from './oplog/index.js' @@ -30,7 +29,7 @@ const Database = async ({ ipfs, identity, address, name, access, directory, meta const log = await Log(identity, { logId: address, access, entryStorage, headsStorage, indexStorage }) - const events = new EventEmitter() + const events = new EventTarget() const queue = new PQueue({ concurrency: 1 }) const addOperation = async (op) => { @@ -40,7 +39,7 @@ const Database = async ({ ipfs, identity, address, name, access, directory, meta if (onUpdate) { await onUpdate(log, entry) } - events.emit('update', entry) + events.dispatchEvent(new CustomEvent('update', { detail: entry })) return entry.hash } const hash = await queue.add(task) @@ -57,7 +56,7 @@ const Database = async ({ ipfs, identity, address, name, access, directory, meta if (onUpdate) { await onUpdate(log, entry) } - events.emit('update', entry) + events.dispatchEvent(new CustomEvent('update', { detail: entry })) } } } @@ -68,13 +67,13 @@ const Database = async ({ ipfs, identity, address, name, access, directory, meta await sync.stop() await queue.onIdle() await log.close() - events.emit('close') + events.dispatchEvent(new Event('close')) } const drop = async () => { await queue.onIdle() await log.clear() - events.emit('drop') + events.dispatchEvent(new Event('drop')) } // Start the Sync protocol diff --git a/src/db/keyvalue-persisted.js b/src/db/keyvalue-persisted.js new file mode 100644 index 000000000..21212eb6f --- /dev/null +++ b/src/db/keyvalue-persisted.js @@ -0,0 +1,83 @@ +import LevelStorage from '../storage/level.js' +import { KeyValue } from './index.js' +import pathJoin from '../utils/path-join.js' +import PQueue from 'p-queue' + +const valueEncoding = 'json' + +const KeyValuePersisted = async ({ OpLog, Database, ipfs, identity, address, name, access, directory, storage, meta }) => { + const keyValueStore = await KeyValue({ OpLog, Database, ipfs, identity, address, name, access, directory, storage, meta }) + const { events, log } = keyValueStore + + const queue = new PQueue({ concurrency: 1 }) + + directory = pathJoin(directory || './orbitdb', `./${address}/_index/`) + const index = await LevelStorage({ path: directory, valueEncoding }) + + let latestOplogHash + + const updateIndex = (index) => async (entry) => { + const keys = {} + + for await (const entry of log.iterator({ gt: latestOplogHash })) { + const { op, key, value } = entry.payload + + if (op === 'PUT' && !keys[key]) { + keys[key] = true + await index.put(key, value) + } else if (op === 'DEL' && !keys[key]) { + keys[key] = true + await index.del(key) + } + } + latestOplogHash = entry.hash + } + + const get = async (key) => { + await queue.onIdle() + const value = await index.get(key) + if (value) { + return value + } + return keyValueStore.get(key) + } + + const iterator = async function * ({ amount } = {}) { + await queue.onIdle() + for await (const { hash, key, value } of keyValueStore.iterator({ amount })) { + yield { hash, key, value } + } + } + + const task = async () => { + await queue.add(updateIndex(index)) + } + + const close = async () => { + events.removeEventListener('update', task) + await queue.onIdle() + await index.close() + await keyValueStore.close() + } + + // TOD: rename to clear() + const drop = async () => { + events.removeEventListener('update', task) + await queue.onIdle() + await index.clear() + await keyValueStore.drop() + } + + // Listen for update events from the database and update the index on every update + events.addEventListener('update', task) + + return { + ...keyValueStore, + get, + iterator, + close, + drop + } +} + +export default KeyValuePersisted diff --git a/src/orbitdb.js b/src/orbitdb.js index 2c263e5c2..8758c633f 100644 --- a/src/orbitdb.js +++ b/src/orbitdb.js @@ -110,7 +110,7 @@ const OrbitDB = async ({ ipfs, id, identity, keystore, directory } = {}) => { } const db = await Database({ ipfs, identity, address: address.toString(), name, access: accessController, directory, meta, syncAutomatically: sync != null ? sync : true, headsStorage, entryStorage, indexStorage, referencesCount }) - db.events.on('close', onDatabaseClosed(address.toString())) + db.events.addEventListener('close', onDatabaseClosed(address.toString()), { once: true }) databases[address.toString()] = db diff --git a/src/sync.js b/src/sync.js index 676674961..bed85157f 100644 --- a/src/sync.js +++ b/src/sync.js @@ -1,6 +1,5 @@ import { pipe } from 'it-pipe' import PQueue from 'p-queue' -import { EventEmitter } from 'events' import { TimeoutController } from 'timeout-abort-controller' import pathJoin from './utils/path-join.js' @@ -33,8 +32,8 @@ const DefaultTimeout = 30000 // 30 seconds * @param {Object} params One or more parameters for configuring Sync. * @param {IPFS} params.ipfs An IPFS instance. Used for synchronizing peers. * @param {Log} params.log The Log instance to sync. - * @param {Object} params.events An event emitter. Defaults to an instance of - * EventEmitter. Events emitted are 'join', 'error' and 'leave'. + * @param {Object} params.events An event target. Defaults to an instance of + * EventTarget. Events emitted are 'join', 'error' and 'leave'. * @param {Function} params.onSynced A function that is called after the peer * has received heads from another peer. * @param {Boolean} params.start True if sync should start automatically, false @@ -51,14 +50,14 @@ const Sync = async ({ ipfs, log, events, onSynced, start, timeout }) => { const queue = new PQueue({ concurrency: 1 }) const peers = new Set() - events = events || new EventEmitter() + events = events || new EventTarget() timeout = timeout || DefaultTimeout let started = false const onPeerJoined = async (peerId) => { const heads = await log.heads() - events.emit('join', peerId, heads) + events.dispatchEvent(new CustomEvent('join', { detail: { peerId, heads } })) } const sendHeads = async (source) => { @@ -87,7 +86,7 @@ const Sync = async ({ ipfs, log, events, onSynced, start, timeout }) => { await pipe(stream, receiveHeads(peerId), sendHeads, stream) } catch (e) { peers.delete(peerId) - events.emit('error', e) + events.dispatchEvent(new CustomEvent('error', { detail: e })) } } @@ -114,7 +113,7 @@ const Sync = async ({ ipfs, log, events, onSynced, start, timeout }) => { // Skip peer, they don't have this database currently } else { peers.delete(peerId) - events.emit('error', e) + events.dispatchEvent(new CustomEvent('error', { detail: e })) } } finally { if (timeoutController) { @@ -123,7 +122,7 @@ const Sync = async ({ ipfs, log, events, onSynced, start, timeout }) => { } } else { peers.delete(peerId) - events.emit('leave', peerId) + events.dispatchEvent(new CustomEvent('leave', { detail: peerId })) } } queue.add(task) @@ -139,7 +138,7 @@ const Sync = async ({ ipfs, log, events, onSynced, start, timeout }) => { await onSynced(message.data) } } catch (e) { - events.emit('error', e) + events.dispatchEvent(new CustomEvent('error', { detail: e })) } } queue.add(task) diff --git a/test/.mocharc.json b/test/.mocharc.json index f865e34f9..83c8c0902 100644 --- a/test/.mocharc.json +++ b/test/.mocharc.json @@ -4,5 +4,6 @@ "recursive": true, "exit": true, "slow": 1000, - "exclude": ["test/browser/**/*.js"] -} \ No newline at end of file + "exclude": ["test/browser/**/*.js"], + "node-option": ["experimental-global-customevent"] +} diff --git a/test/access-controllers/orbit-db-access-controller.test.js b/test/access-controllers/orbit-db-access-controller.test.js index 3b4523ea3..080524924 100644 --- a/test/access-controllers/orbit-db-access-controller.test.js +++ b/test/access-controllers/orbit-db-access-controller.test.js @@ -131,11 +131,11 @@ describe('OrbitDBAccessController', function () { it('emit \'update\' event when a capability was added', async () => { let update = false - const onUpdate = (entry) => { + const onUpdate = () => { update = true } - accessController.events.on('update', onUpdate) + accessController.events.addEventListener('update', onUpdate) await accessController.grant('read', 'AXES') @@ -261,11 +261,11 @@ describe('OrbitDBAccessController', function () { await accessController.grant('admin', 'dogs') let update = false - const onUpdate = (entry) => { + const onUpdate = () => { update = true } - accessController.events.on('update', onUpdate) + accessController.events.addEventListener('update', onUpdate) await accessController.revoke('admin', 'cats') diff --git a/test/database-replication.test.js b/test/database-replication.test.js index 19777274e..8ceb1326f 100644 --- a/test/database-replication.test.js +++ b/test/database-replication.test.js @@ -85,16 +85,16 @@ describe('Database - Replication', function () { let replicated = false let expectedEntryHash = null - const onConnected = (peerId, heads) => { - replicated = expectedEntryHash !== null && heads.map(e => e.hash).includes(expectedEntryHash) + const onConnected = (event) => { + replicated = expectedEntryHash !== null && event.detail.heads.map(e => e.hash).includes(expectedEntryHash) } - const onUpdate = (entry) => { - replicated = expectedEntryHash !== null && entry.hash === expectedEntryHash + const onUpdate = (event) => { + replicated = expectedEntryHash !== null && event.detail.hash === expectedEntryHash } - db2.events.on('join', onConnected) - db2.events.on('update', onUpdate) + db2.events.addEventListener('join', onConnected) + db2.events.addEventListener('update', onUpdate) await db1.addOperation({ op: 'PUT', key: 1, value: 'record 1 on db 1' }) await db1.addOperation({ op: 'PUT', key: 2, value: 'record 2 on db 1' }) @@ -120,16 +120,16 @@ describe('Database - Replication', function () { let replicated = false let expectedEntryHash = null - const onConnected = (peerId, heads) => { - replicated = expectedEntryHash && heads.map(e => e.hash).includes(expectedEntryHash) + const onConnected = (event) => { + replicated = expectedEntryHash && event.detail.heads.map(e => e.hash).includes(expectedEntryHash) } - const onUpdate = (entry) => { - replicated = expectedEntryHash && entry.hash === expectedEntryHash + const onUpdate = (event) => { + replicated = expectedEntryHash && event.detail.hash === expectedEntryHash } - db2.events.on('join', onConnected) - db2.events.on('update', onUpdate) + db2.events.addEventListener('join', onConnected) + db2.events.addEventListener('update', onUpdate) await db1.addOperation({ op: 'PUT', key: 1, value: 'record 1 on db 1' }) @@ -164,7 +164,7 @@ describe('Database - Replication', function () { it('adds an operation before db2 is instantiated', async () => { let connected = false - const onConnected = (peerId, heads) => { + const onConnected = () => { connected = true } @@ -177,7 +177,7 @@ describe('Database - Replication', function () { db2 = await Database({ ipfs: ipfs2, identity: testIdentity2, address: databaseId, accessController, directory: './orbitdb2' }) - db2.events.on('join', onConnected) + db2.events.addEventListener('join', onConnected) await waitFor(() => connected, () => true) @@ -205,16 +205,16 @@ describe('Database - Replication', function () { let connected1 = false let connected2 = false - const onConnected1 = (peerId, heads) => { + const onConnected1 = () => { connected1 = true } - const onConnected2 = (peerId, heads) => { + const onConnected2 = () => { connected2 = true } - db1.events.on('join', onConnected1) - db2.events.on('join', onConnected2) + db1.events.addEventListener('join', onConnected1) + db2.events.addEventListener('join', onConnected2) await db1.addOperation({ op: 'PUT', key: 1, value: 'record 1 on db 1' }) await db1.addOperation({ op: 'PUT', key: 2, value: 'record 2 on db 1' }) @@ -251,26 +251,26 @@ describe('Database - Replication', function () { let updateCount1 = 0 let updateCount2 = 0 - const onConnected1 = (peerId, heads) => { + const onConnected1 = () => { connected1 = true } - const onConnected2 = (peerId, heads) => { + const onConnected2 = () => { connected2 = true } - const onUpdate1 = async (entry) => { + const onUpdate1 = () => { ++updateCount1 } - const onUpdate2 = async (entry) => { + const onUpdate2 = () => { ++updateCount2 } - db1.events.on('join', onConnected1) - db2.events.on('join', onConnected2) - db1.events.on('update', onUpdate1) - db2.events.on('update', onUpdate2) + db1.events.addEventListener('join', onConnected1) + db2.events.addEventListener('join', onConnected2) + db1.events.addEventListener('update', onUpdate1) + db2.events.addEventListener('update', onUpdate2) await waitFor(() => connected1, () => true) await waitFor(() => connected2, () => true) @@ -291,26 +291,26 @@ describe('Database - Replication', function () { let updateCount1 = 0 let updateCount2 = 0 - const onConnected1 = async (peerId, heads) => { + const onConnected1 = () => { connected1 = true } - const onConnected2 = async (peerId, heads) => { + const onConnected2 = () => { connected2 = true } - const onUpdate1 = async (entry) => { + const onUpdate1 = () => { ++updateCount1 } - const onUpdate2 = async (entry) => { + const onUpdate2 = () => { ++updateCount2 } - db1.events.on('join', onConnected1) - db2.events.on('join', onConnected2) - db1.events.on('update', onUpdate1) - db2.events.on('update', onUpdate2) + db1.events.addEventListener('join', onConnected1) + db2.events.addEventListener('join', onConnected2) + db1.events.addEventListener('update', onUpdate1) + db2.events.addEventListener('update', onUpdate2) await waitFor(() => connected1, () => true) await waitFor(() => connected2, () => true) diff --git a/test/database.test.js b/test/database.test.js index 6dfd45988..6434f58eb 100644 --- a/test/database.test.js +++ b/test/database.test.js @@ -143,7 +143,7 @@ describe('Database', function () { closed = true } - db.events.on('close', onClose) + db.events.addEventListener('close', onClose) await db.close() @@ -156,7 +156,7 @@ describe('Database', function () { dropped = true } - db.events.on('drop', onDrop) + db.events.addEventListener('drop', onDrop) await db.drop() diff --git a/test/db/replication/document-store.test.js b/test/db/replication/document-store.test.js index 125cf1da6..d59db5999 100644 --- a/test/db/replication/document-store.test.js +++ b/test/db/replication/document-store.test.js @@ -82,16 +82,16 @@ describe('Documents Database Replication', function () { let connected1 = false let connected2 = false - const onConnected1 = async (peerId, heads) => { + const onConnected1 = async () => { connected1 = true } - const onConnected2 = async (peerId, heads) => { + const onConnected2 = async () => { connected2 = true } - db1.events.on('join', onConnected1) - db2.events.on('join', onConnected2) + db1.events.addEventListener('join', onConnected1) + db2.events.addEventListener('join', onConnected2) await db1.put({ _id: 1, msg: 'record 1 on db 1' }) await db2.put({ _id: 2, msg: 'record 2 on db 2' }) diff --git a/test/db/replication/event-store.test.js b/test/db/replication/event-store.test.js index 101b2d649..67eaa3859 100644 --- a/test/db/replication/event-store.test.js +++ b/test/db/replication/event-store.test.js @@ -87,26 +87,26 @@ describe('Events Database Replication', function () { let replicated = false let expectedEntryHash = null - const onConnected = (peerId, heads) => { - replicated = expectedEntryHash !== null && heads.map(e => e.hash).includes(expectedEntryHash) + const onConnected = (event) => { + replicated = expectedEntryHash !== null && event.detail.heads.map(e => e.hash).includes(expectedEntryHash) } - const onUpdate = (entry) => { - replicated = expectedEntryHash !== null && entry.hash === expectedEntryHash + const onUpdate = (event) => { + replicated = expectedEntryHash !== null && event.detail.hash === expectedEntryHash } - const onError = (err) => { - console.error(err) + const onError = (event) => { + console.error(event.detail) } db1 = await Events()({ ipfs: ipfs1, identity: testIdentity1, address: databaseId, accessController, directory: './orbitdb1' }) db2 = await Events()({ ipfs: ipfs2, identity: testIdentity2, address: databaseId, accessController, directory: './orbitdb2' }) - db2.events.on('join', onConnected) - db2.events.on('update', onUpdate) + db2.events.addEventListener('join', onConnected) + db2.events.addEventListener('update', onUpdate) - db2.events.on('error', onError) - db1.events.on('error', onError) + db1.events.addEventListener('error', onError) + db2.events.addEventListener('error', onError) await db1.add(expected[0]) await db1.add(expected[1]) @@ -136,23 +136,23 @@ describe('Events Database Replication', function () { let replicated = false let expectedEntryHash = null - const onConnected = (peerId, heads) => { - replicated = expectedEntryHash !== null && heads.map(e => e.hash).includes(expectedEntryHash) + const onConnected = (event) => { + replicated = expectedEntryHash !== null && event.detail.heads.map(e => e.hash).includes(expectedEntryHash) } - const onUpdate = (entry) => { - replicated = expectedEntryHash !== null && entry.hash === expectedEntryHash + const onUpdate = (event) => { + replicated = expectedEntryHash !== null && event.detail.hash === expectedEntryHash } - const onError = (err) => { - console.error(err) + const onError = (event) => { + console.error(event.detail) } - db2.events.on('join', onConnected) - db2.events.on('update', onUpdate) + db2.events.addEventListener('join', onConnected) + db2.events.addEventListener('update', onUpdate) - db2.events.on('error', onError) - db1.events.on('error', onError) + db1.events.addEventListener('error', onError) + db2.events.addEventListener('error', onError) await db1.add(expected[0]) await db1.add(expected[1]) diff --git a/test/db/replication/keyvalue-indexed.test.js b/test/db/replication/keyvalue-indexed.test.js index 8237f4ad9..ca78dd51c 100644 --- a/test/db/replication/keyvalue-indexed.test.js +++ b/test/db/replication/keyvalue-indexed.test.js @@ -76,26 +76,26 @@ describe('KeyValueIndexed Database Replication', function () { let replicated = false let expectedEntryHash = null - const onConnected = (peerId, heads) => { - replicated = expectedEntryHash !== null && heads.map(e => e.hash).includes(expectedEntryHash) + const onConnected = (event) => { + replicated = expectedEntryHash !== null && event.detail.heads.map(e => e.hash).includes(expectedEntryHash) } - const onUpdate = (entry) => { - replicated = expectedEntryHash !== null && entry.hash === expectedEntryHash + const onUpdate = (event) => { + replicated = expectedEntryHash !== null && event.detail.hash === expectedEntryHash } - const onError = (err) => { - console.error(err) + const onError = (event) => { + console.error(event.detail) } kv1 = await KeyValueIndexed()({ ipfs: ipfs1, identity: testIdentity1, address: databaseId, accessController, directory: './orbitdb1' }) kv2 = await KeyValueIndexed()({ ipfs: ipfs2, identity: testIdentity2, address: databaseId, accessController, directory: './orbitdb2' }) - kv2.events.on('join', onConnected) - kv2.events.on('update', onUpdate) + kv2.events.addEventListener('join', onConnected) + kv2.events.addEventListener('update', onUpdate) - kv2.events.on('error', onError) - kv1.events.on('error', onError) + kv1.events.addEventListener('error', onError) + kv2.events.addEventListener('error', onError) await kv1.set('init', true) await kv1.set('hello', 'friend') @@ -143,26 +143,26 @@ describe('KeyValueIndexed Database Replication', function () { let replicated = false let expectedEntryHash = null - const onConnected = (peerId, heads) => { - replicated = expectedEntryHash !== null && heads.map(e => e.hash).includes(expectedEntryHash) + const onConnected = (event) => { + replicated = expectedEntryHash !== null && event.detail.heads.map(e => e.hash).includes(expectedEntryHash) } - const onUpdate = (entry) => { - replicated = expectedEntryHash !== null && entry.hash === expectedEntryHash + const onUpdate = (event) => { + replicated = expectedEntryHash !== null && event.detail.hash === expectedEntryHash } - const onError = (err) => { - console.error(err) + const onError = (event) => { + console.error(event.detail) } kv1 = await KeyValueIndexed()({ ipfs: ipfs1, identity: testIdentity1, address: databaseId, accessController, directory: './orbitdb1' }) kv2 = await KeyValueIndexed()({ ipfs: ipfs2, identity: testIdentity2, address: databaseId, accessController, directory: './orbitdb2' }) - kv2.events.on('join', onConnected) - kv2.events.on('update', onUpdate) + kv2.events.addEventListener('join', onConnected) + kv2.events.addEventListener('update', onUpdate) - kv2.events.on('error', onError) - kv1.events.on('error', onError) + kv1.events.addEventListener('error', onError) + kv2.events.addEventListener('error', onError) await kv1.set('init', true) await kv1.set('hello', 'friend') diff --git a/test/db/replication/keyvalue.test.js b/test/db/replication/keyvalue.test.js index 8dcf7d6cf..48c545008 100644 --- a/test/db/replication/keyvalue.test.js +++ b/test/db/replication/keyvalue.test.js @@ -76,26 +76,26 @@ describe('KeyValue Database Replication', function () { let replicated = false let expectedEntryHash = null - const onConnected = (peerId, heads) => { - replicated = expectedEntryHash !== null && heads.map(e => e.hash).includes(expectedEntryHash) + const onConnected = (event) => { + replicated = expectedEntryHash !== null && event.detail.heads.map(e => e.hash).includes(expectedEntryHash) } - const onUpdate = (entry) => { - replicated = expectedEntryHash !== null && entry.hash === expectedEntryHash + const onUpdate = (event) => { + replicated = expectedEntryHash !== null && event.detail.hash === expectedEntryHash } - const onError = (err) => { - console.error(err) + const onError = (event) => { + console.error(event.detail) } kv1 = await KeyValue()({ ipfs: ipfs1, identity: testIdentity1, address: databaseId, accessController, directory: './orbitdb1' }) kv2 = await KeyValue()({ ipfs: ipfs2, identity: testIdentity2, address: databaseId, accessController, directory: './orbitdb2' }) - kv2.events.on('join', onConnected) - kv2.events.on('update', onUpdate) + kv2.events.addEventListener('join', onConnected) + kv2.events.addEventListener('update', onUpdate) - kv2.events.on('error', onError) - kv1.events.on('error', onError) + kv1.events.addEventListener('error', onError) + kv2.events.addEventListener('error', onError) await kv1.set('init', true) await kv1.set('hello', 'friend') @@ -143,26 +143,26 @@ describe('KeyValue Database Replication', function () { let replicated = false let expectedEntryHash = null - const onConnected = (peerId, heads) => { - replicated = expectedEntryHash !== null && heads.map(e => e.hash).includes(expectedEntryHash) + const onConnected = (event) => { + replicated = expectedEntryHash !== null && event.detail.heads.map(e => e.hash).includes(expectedEntryHash) } - const onUpdate = (entry) => { - replicated = expectedEntryHash !== null && entry.hash === expectedEntryHash + const onUpdate = (event) => { + replicated = expectedEntryHash !== null && event.detail.hash === expectedEntryHash } - const onError = (err) => { - console.error(err) + const onError = (event) => { + console.error(event.detail) } kv1 = await KeyValue()({ ipfs: ipfs1, identity: testIdentity1, address: databaseId, accessController, directory: './orbitdb1' }) kv2 = await KeyValue()({ ipfs: ipfs2, identity: testIdentity2, address: databaseId, accessController, directory: './orbitdb2' }) - kv2.events.on('join', onConnected) - kv1.events.on('join', onConnected) - kv2.events.on('update', onUpdate) - kv2.events.on('error', onError) - kv1.events.on('error', onError) + kv1.events.addEventListener('join', onConnected) + kv2.events.addEventListener('join', onConnected) + kv2.events.addEventListener('update', onUpdate) + kv1.events.addEventListener('error', onError) + kv2.events.addEventListener('error', onError) await kv1.set('init', true) await kv1.set('hello', 'friend') diff --git a/test/orbitdb-multiple-databases.test.js b/test/orbitdb-multiple-databases.test.js index 5fb2361f9..06d887a15 100644 --- a/test/orbitdb-multiple-databases.test.js +++ b/test/orbitdb-multiple-databases.test.js @@ -90,11 +90,11 @@ describe('orbit-db - Multiple Databases', function () { let connected1Count = 0 let connected2Count = 0 - const onConnected1 = async (peerId, heads) => { + const onConnected1 = () => { ++connected1Count } - const onConnected2 = async (peerId, heads) => { + const onConnected2 = () => { ++connected2Count } @@ -106,14 +106,14 @@ describe('orbit-db - Multiple Databases', function () { // Open the databases on the first node for (const dbInterface of databaseInterfaces) { const db = await dbInterface.open(orbitdb1, dbInterface.name, options) - db.events.on('join', onConnected1) + db.events.addEventListener('join', onConnected1) localDatabases.push(db) } for (const [index, dbInterface] of databaseInterfaces.entries()) { const address = localDatabases[index].address.toString() const db = await dbInterface.open(orbitdb2, address, options) - db.events.on('join', onConnected2) + db.events.addEventListener('join', onConnected2) remoteDatabases.push(db) } diff --git a/test/orbitdb-open.test.js b/test/orbitdb-open.test.js index 55cca0685..3880094ab 100644 --- a/test/orbitdb-open.test.js +++ b/test/orbitdb-open.test.js @@ -300,23 +300,23 @@ describe('Open databases', function () { let updateCount = 0 let connected = false - const onError = (err) => { - console.error(err) + const onError = (event) => { + console.error(event.detail) } - const onConnected = async (peerId, heads) => { + const onConnected = () => { connected = true } - const onUpdate = (entry) => { + const onUpdate = () => { ++updateCount } db2 = await orbitdb2.open(address) - db2.events.on('error', onError) - db2.events.on('update', onUpdate) - db2.events.on('join', onConnected) + db2.events.addEventListener('error', onError) + db2.events.addEventListener('update', onUpdate) + db2.events.addEventListener('join', onConnected) await waitFor(() => connected, () => true) await waitFor(() => updateCount > 0, () => true) diff --git a/test/orbitdb-replication.test.js b/test/orbitdb-replication.test.js index d9629a07c..7c65c54e6 100644 --- a/test/orbitdb-replication.test.js +++ b/test/orbitdb-replication.test.js @@ -61,29 +61,29 @@ describe('Replicating databases', function () { let replicated = false - const onJoin = async (peerId, heads) => { + const onJoin = async () => { const head = (await db2.log.heads())[0] if (head && head.clock.time === amount) { replicated = true } } - const onUpdated = (entry) => { - if (entry.clock.time === amount) { + const onUpdated = (event) => { + if (event.detail.clock.time === amount) { replicated = true } } - const onError = (err) => { - console.error(err) + const onError = (event) => { + console.error(event.detail) } db2 = await orbitdb2.open(db1.address) - db2.events.on('join', onJoin) - db2.events.on('update', onUpdated) - db2.events.on('error', onError) - db1.events.on('error', onError) + db2.events.addEventListener('join', onJoin) + db2.events.addEventListener('update', onUpdated) + db1.events.addEventListener('error', onError) + db2.events.addEventListener('error', onError) await waitFor(() => replicated, () => true) diff --git a/test/orbitdb-write-access.test.js b/test/orbitdb-write-access.test.js index 3fd61dbfc..62856f6de 100644 --- a/test/orbitdb-write-access.test.js +++ b/test/orbitdb-write-access.test.js @@ -52,14 +52,14 @@ describe('Write Permissions', function () { let err let connected = false - const onConnected = async (peerId, heads) => { + const onConnected = async () => { connected = true } const db1 = await orbitdb1.open('write-test') const db2 = await orbitdb2.open(db1.address) - db2.events.on('join', onConnected) + db2.events.addEventListener('join', onConnected) await waitFor(() => connected, () => true) @@ -81,19 +81,19 @@ describe('Write Permissions', function () { let connected = false let updateCount = 0 - const onConnected = async (peerId, heads) => { + const onConnected = () => { connected = true } - const onUpdate = async (entry) => { + const onUpdate = () => { ++updateCount } const db1 = await orbitdb1.open('write-test', { AccessController: IPFSAccessController({ write: ['*'] }) }) const db2 = await orbitdb2.open(db1.address) - db2.events.on('join', onConnected) - db2.events.on('update', onUpdate) + db2.events.addEventListener('join', onConnected) + db1.events.addEventListener('update', onUpdate) await waitFor(() => connected, () => true) @@ -121,19 +121,19 @@ describe('Write Permissions', function () { ] }) } - const onConnected = async (peerId, heads) => { + const onConnected = () => { connected = true } - const onUpdate = async (entry) => { + const onUpdate = () => { ++updateCount } const db1 = await orbitdb1.open('write-test', options) const db2 = await orbitdb2.open(db1.address) - db2.events.on('join', onConnected) - db2.events.on('update', onUpdate) + db2.events.addEventListener('join', onConnected) + db2.events.addEventListener('update', onUpdate) await waitFor(() => connected, () => true) @@ -160,14 +160,14 @@ describe('Write Permissions', function () { }) } - const onConnected = async (peerId, heads) => { + const onConnected = () => { connected = true } const db1 = await orbitdb1.open('write-test', options) const db2 = await orbitdb2.open(db1.address) - db2.events.on('join', onConnected) + db2.events.addEventListener('join', onConnected) await waitFor(() => connected, () => true) @@ -189,19 +189,19 @@ describe('Write Permissions', function () { let connected = false let updateCount = 0 - const onConnected = async (peerId, heads) => { + const onConnected = () => { connected = true } - const onUpdate = async (entry) => { + const onUpdate = () => { ++updateCount } const db1 = await orbitdb1.open('write-test', { AccessController: OrbitDBAccessController() }) const db2 = await orbitdb2.open(db1.address, { AccessController: OrbitDBAccessController() }) - db2.events.on('join', onConnected) - db2.events.on('update', onUpdate) + db2.events.addEventListener('join', onConnected) + db2.events.addEventListener('update', onUpdate) await waitFor(() => connected, () => true) diff --git a/test/sync.test.js b/test/sync.test.js index 03dbf63c0..c1958f774 100644 --- a/test/sync.test.js +++ b/test/sync.test.js @@ -148,7 +148,7 @@ describe('Sync protocol', function () { } } - const onJoin = (peerId, heads) => { + const onJoin = () => { joinEventFired = true } @@ -157,8 +157,8 @@ describe('Sync protocol', function () { sync1 = await Sync({ ipfs: ipfs1, log: log1, onSynced: () => {} }) sync2 = await Sync({ ipfs: ipfs2, log: log2, onSynced }) - sync1.events.on('join', onJoin) - sync2.events.on('join', onJoin) + sync1.events.addEventListener('join', onJoin) + sync2.events.addEventListener('join', onJoin) await waitFor(() => joinEventFired, () => true) await waitFor(() => syncedEventFired, () => true) @@ -210,15 +210,15 @@ describe('Sync protocol', function () { } } - const onJoin = (peerId, heads) => { + const onJoin = () => { joinEventFired = true } sync1 = await Sync({ ipfs: ipfs1, log: log1, onSynced: () => {} }) sync2 = await Sync({ ipfs: ipfs2, log: log2, onSynced }) - sync1.events.on('join', onJoin) - sync2.events.on('join', onJoin) + sync1.events.addEventListener('join', onJoin) + sync2.events.addEventListener('join', onJoin) await waitFor(() => joinEventFired, () => true) }) @@ -339,15 +339,15 @@ describe('Sync protocol', function () { } } - const onLeave = (peerId) => { + const onLeave = (event) => { leaveEventFired = true - leavingPeerId = peerId + leavingPeerId = event.detail } sync1 = await Sync({ ipfs: ipfs1, log: log1 }) sync2 = await Sync({ ipfs: ipfs2, log: log2, onSynced }) - sync1.events.on('leave', onLeave) + sync1.events.addEventListener('leave', onLeave) await sync1.add(await log1.append('hello1')) await sync1.add(await log1.append('hello2')) @@ -419,14 +419,14 @@ describe('Sync protocol', function () { } } - const onLeave = (peerId) => { + const onLeave = () => { leaveEventFired = true } sync1 = await Sync({ ipfs: ipfs1, log: log1 }) sync2 = await Sync({ ipfs: ipfs2, log: log2, onSynced }) - sync2.events.on('leave', onLeave) + sync2.events.addEventListener('leave', onLeave) await sync1.add(await log1.append('hello1')) await sync1.add(await log1.append('hello2')) @@ -573,12 +573,12 @@ describe('Sync protocol', function () { it('emits an error when connecting to peer was cancelled due to timeout', async () => { let err = null - const onError = (error) => { - err = error + const onError = (event) => { + err = event.detail } - sync1.events.on('error', onError) - sync2.events.on('error', onError) + sync1.events.addEventListener('error', onError) + sync2.events.addEventListener('error', onError) await sync2.start() @@ -604,33 +604,33 @@ describe('Sync protocol', function () { const log1 = await Log(testIdentity1, { logId: 'synclog3' }) const log2 = await Log(testIdentity2, { logId: 'synclog3' }) - const onJoin = (peerId, heads) => { + const onJoin = (event) => { joinEventFired = true - joiningPeerId = peerId - receivedHeads = heads + joiningPeerId = event.detail.peerId + receivedHeads = event.detail.heads } - const onLeave = (peerId) => { + const onLeave = (event) => { leaveEventFired = true - leavingPeerId = peerId + leavingPeerId = event.detail } - const onError = (e) => { + const onError = (event) => { errorEventFired = true - err = e.toString() + err = event.detail.toString() } const onSynced = (bytes) => { - sync2.events.emit('error', new Error('Sync Error')) + sync2.events.dispatchEvent(new CustomEvent('error', { detail: new Error('Sync Error') })) } await log1.append('hello!') sync1 = await Sync({ ipfs: ipfs1, log: log1, onSynced }) sync2 = await Sync({ ipfs: ipfs2, log: log2, onSynced }) - sync1.events.on('join', onJoin) - sync1.events.on('leave', onLeave) - sync2.events.on('error', onError) + sync1.events.addEventListener('join', onJoin) + sync1.events.addEventListener('leave', onLeave) + sync2.events.addEventListener('error', onError) await waitFor(() => joinEventFired, () => true) await waitFor(() => errorEventFired, () => true)