Skip to content
This repository was archived by the owner on Jul 21, 2023. It is now read-only.

Commit b28afdd

Browse files
authoredDec 4, 2020
feat: onPut and onRemove events (#205)
1 parent 87f8511 commit b28afdd

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed
 

‎src/index.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ class KadDHT extends EventEmitter {
5454
* @param {object} props.validators validators object with namespace as keys and function(key, record, callback)
5555
* @param {object} props.selectors selectors object with namespace as keys and function(key, records)
5656
* @param {randomWalkOptions} options.randomWalk randomWalk options
57+
* @param {function(record: Record, peerId: PeerId)} [props.onPut = () => {}] Called when an entry is added to or changed in the datastore
58+
* @param {function(record: Record)} [props.onRemove = () => {}] Called when an entry is removed from the datastore
5759
*/
5860
constructor ({
5961
libp2p,
@@ -67,7 +69,9 @@ class KadDHT extends EventEmitter {
6769
concurrency = c.ALPHA,
6870
validators = {},
6971
selectors = {},
70-
randomWalk = {}
72+
randomWalk = {},
73+
onPut = () => {},
74+
onRemove = () => {}
7175
}) {
7276
super()
7377

@@ -182,6 +186,10 @@ class KadDHT extends EventEmitter {
182186
this.contentFetching = contentFetching(this)
183187
this.contentRouting = contentRouting(this)
184188
this.peerRouting = peerRouting(this)
189+
190+
// datastore events
191+
this.onPut = onPut
192+
this.onRemove = onRemove
185193
}
186194

187195
/**
@@ -411,6 +419,7 @@ class KadDHT extends EventEmitter {
411419
utils.now() - record.timeReceived > c.MAX_RECORD_AGE) {
412420
// If record is bad delete it and return
413421
await this.datastore.delete(dsKey)
422+
this.onRemove(record)
414423
return undefined
415424
}
416425

‎src/rpc/handlers/put-value.js

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ module.exports = (dht) => {
3232
const recordKey = utils.bufferToKey(record.key)
3333
await dht.datastore.put(recordKey, record.serialize())
3434

35+
dht.onPut(record, peerId)
36+
3537
return msg
3638
}
3739
}

‎test/kad-dht.spec.js

+6
Original file line numberDiff line numberDiff line change
@@ -837,9 +837,15 @@ describe('KadDHT', () => {
837837
const lookup = await dht.datastore.get(kadUtils.bufferToKey(record.key))
838838
expect(lookup).to.exist('Record should be in the local datastore')
839839

840+
let eventResponse
841+
dht.onRemove = (record) => {
842+
eventResponse = { record }
843+
}
844+
840845
const rec = await dht._checkLocalDatastore(record.key)
841846
expect(rec).to.not.exist('Record should have expired')
842847

848+
expect(eventResponse).to.have.property('record').eql(record)
843849
// TODO
844850
// const lookup2 = await dht.datastore.get(kadUtils.bufferToKey(record.key))
845851
// expect(lookup2).to.not.exist('Record should be removed from datastore')

‎test/rpc/handlers/put-value.spec.js

+8
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,17 @@ describe('rpc - handlers - PutValue', () => {
5656
)
5757
msg.record = record
5858

59+
let eventResponse
60+
dht.onPut = (record, peerId) => {
61+
eventResponse = { record, peerId }
62+
}
63+
5964
const response = await handler(dht)(peerIds[1], msg)
6065
expect(response).to.be.eql(msg)
6166

67+
expect(eventResponse).to.have.property('record').eql(record)
68+
expect(eventResponse).to.have.property('peerId').eql(peerIds[1])
69+
6270
const key = utils.bufferToKey(uint8ArrayFromString('hello'))
6371
const res = await dht.datastore.get(key)
6472

0 commit comments

Comments
 (0)
This repository has been archived.