From 26a46ec68eba3e776f6c034915d1bb63aa0e2a50 Mon Sep 17 00:00:00 2001 From: Vasco Santos Date: Fri, 23 Apr 2021 16:10:49 +0200 Subject: [PATCH] fix: do not republish self key twice --- packages/ipfs-core/src/ipns/republisher.js | 3 +++ packages/ipfs-core/test/name.spec.js | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/ipfs-core/src/ipns/republisher.js b/packages/ipfs-core/src/ipns/republisher.js index e419ab8884..93ca682dac 100644 --- a/packages/ipfs-core/src/ipns/republisher.js +++ b/packages/ipfs-core/src/ipns/republisher.js @@ -138,6 +138,9 @@ class IpnsRepublisher { const keys = await this._keychain.listKeys() for (const key of keys) { + if (key.name === 'self') { + continue + } const pem = await this._keychain.exportKey(key.name, pass) const privKey = await crypto.keys.import(pem, pass) diff --git a/packages/ipfs-core/test/name.spec.js b/packages/ipfs-core/test/name.spec.js index b972915225..5295960fd2 100644 --- a/packages/ipfs-core/test/name.spec.js +++ b/packages/ipfs-core/test/name.spec.js @@ -50,6 +50,26 @@ describe('name', function () { expect(republisher._republishEntries.calledTwice).to.equal(true) }) + it('should not republish self key twice', async function () { + const mockKeychain = { + listKeys: () => Promise.resolve([{ name: 'self' }]) + } + republisher = new IpnsRepublisher(sinon.stub(), sinon.stub(), sinon.stub(), mockKeychain, { + initialBroadcastInterval: 500, + broadcastInterval: 1000, + pass: 'pass' + }) + republisher._republishEntry = sinon.stub() + + await republisher.start() + + expect(republisher._republishEntry.calledOnce).to.equal(false) + + // Initial republish should happen after ~500ms + await delay(750) + expect(republisher._republishEntry.calledOnce).to.equal(true) + }) + it('should error if run republish again', async () => { republisher = new IpnsRepublisher(sinon.stub(), sinon.stub(), sinon.stub(), sinon.stub(), { initialBroadcastInterval: 50,