From 252c8f83bbabc9e462f2c3948c6060359d66b104 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 00:11:11 +0000 Subject: [PATCH 1/2] chore: bump codecov/codecov-action from 5.4.3 to 5.5.1 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.4.3 to 5.5.1. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/18283e04ce6e62d37312384ff67231eb8fd56d24...5a1091511ad55cbe89839c7260b706298ca349f7) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 5.5.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/main.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dd693799f9..d4e53cd866 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -60,7 +60,7 @@ jobs: with: directories: ${{ env.CACHE_DIRS }} - run: npm run --if-present test:node - - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: flags: node files: .coverage/*,packages/*/.coverage/* @@ -78,7 +78,7 @@ jobs: with: directories: ${{ env.CACHE_DIRS }} - run: npm run --if-present test:chrome - - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: flags: chrome files: .coverage/*,packages/*/.coverage/* @@ -96,7 +96,7 @@ jobs: with: directories: ${{ env.CACHE_DIRS }} - run: npm run --if-present test:chrome-webworker - - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: flags: chrome-webworker files: .coverage/*,packages/*/.coverage/* @@ -114,7 +114,7 @@ jobs: with: directories: ${{ env.CACHE_DIRS }} - run: npm run --if-present test:firefox - - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: flags: firefox files: .coverage/*,packages/*/.coverage/* @@ -132,7 +132,7 @@ jobs: with: directories: ${{ env.CACHE_DIRS }} - run: npm run --if-present test:firefox-webworker - - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: flags: firefox-webworker files: .coverage/*,packages/*/.coverage/* @@ -155,7 +155,7 @@ jobs: sudo apt-get update - run: npx playwright install-deps - run: npm run --if-present test:webkit - - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: flags: webkit files: .coverage/*,packages/*/.coverage/* @@ -173,7 +173,7 @@ jobs: with: directories: ${{ env.CACHE_DIRS }} - run: npx xvfb-maybe npm run --if-present test:electron-main - - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: flags: electron-main files: .coverage/*,packages/*/.coverage/* @@ -191,7 +191,7 @@ jobs: with: directories: ${{ env.CACHE_DIRS }} - run: npx xvfb-maybe npm run --if-present test:electron-renderer - - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: flags: electron-renderer files: .coverage/*,packages/*/.coverage/* From 0f3ab9e617ab10fc09b108923c9d6e0fadd106a3 Mon Sep 17 00:00:00 2001 From: Alex Potsides Date: Tue, 28 Oct 2025 17:05:03 +0200 Subject: [PATCH 2/2] feat: add routing field to providers (#3340) To better debug which routing system supplied a given provider, add a string field to the return type of `findProviders` which allows this information to be reported. --- .../integration-tests/test/fixtures/utils.ts | 9 ++--- packages/interface/src/content-routing.ts | 9 ++++- packages/kad-dht/src/kad-dht.ts | 9 +++-- .../src/connection-manager/dial-queue.ts | 4 +-- packages/libp2p/src/content-routing.ts | 4 +-- .../content-routing/content-routing.spec.ts | 34 ++++++++++++------- packages/logger/src/index.ts | 2 +- .../transport-circuit-relay-v2/test/utils.ts | 9 ++--- 8 files changed, 51 insertions(+), 29 deletions(-) diff --git a/packages/integration-tests/test/fixtures/utils.ts b/packages/integration-tests/test/fixtures/utils.ts index ae6006d507..cb0905ef70 100644 --- a/packages/integration-tests/test/fixtures/utils.ts +++ b/packages/integration-tests/test/fixtures/utils.ts @@ -5,7 +5,7 @@ import { Circuit } from '@multiformats/multiaddr-matcher' import { detect } from 'detect-browser' import pWaitFor from 'p-wait-for' import { toString as uint8ArrayToString } from 'uint8arrays/to-string' -import type { Libp2p, AbortOptions, ContentRouting, PeerId, PeerInfo } from '@libp2p/interface' +import type { Libp2p, AbortOptions, ContentRouting, PeerId, Provider } from '@libp2p/interface' import type { AddressManager } from '@libp2p/interface-internal' import type { Multiaddr } from '@multiformats/multiaddr' import type { CID, Version } from 'multiformats' @@ -153,7 +153,7 @@ export interface MockContentRoutingComponents { } export class MockContentRouting implements ContentRouting { - static providers = new Map() + static providers = new Map() static data = new Map() static reset (): void { @@ -175,7 +175,8 @@ export class MockContentRouting implements ContentRouting { providers.push({ id: this.peerId, - multiaddrs: this.addressManager.getAddresses() + multiaddrs: this.addressManager.getAddresses(), + routing: 'mock-content-routing' }) MockContentRouting.providers.set(cid.toString(), providers) @@ -185,7 +186,7 @@ export class MockContentRouting implements ContentRouting { } - async * findProviders (cid: CID, options?: AbortOptions | undefined): AsyncGenerator { + async * findProviders (cid: CID, options?: AbortOptions | undefined): AsyncGenerator { yield * MockContentRouting.providers.get(cid.toString()) ?? [] } diff --git a/packages/interface/src/content-routing.ts b/packages/interface/src/content-routing.ts index fea438cfe8..9a7df19430 100644 --- a/packages/interface/src/content-routing.ts +++ b/packages/interface/src/content-routing.ts @@ -2,6 +2,13 @@ import type { RoutingOptions } from './index.js' import type { PeerInfo } from './peer-info.js' import type { CID } from 'multiformats/cid' +export interface Provider extends PeerInfo { + /** + * Which routing subsystem found the provider + */ + routing: string +} + /** * Any object that implements this Symbol as a property should return a * Partial instance as the property value, similar to how @@ -64,7 +71,7 @@ export interface ContentRouting { * } * ``` */ - findProviders(cid: CID, options?: RoutingOptions): AsyncIterable + findProviders(cid: CID, options?: RoutingOptions): AsyncIterable /** * Puts a value corresponding to the passed key in a way that can later be diff --git a/packages/kad-dht/src/kad-dht.ts b/packages/kad-dht/src/kad-dht.ts index 6ab6d68e40..5fb8b0d89b 100644 --- a/packages/kad-dht/src/kad-dht.ts +++ b/packages/kad-dht/src/kad-dht.ts @@ -24,7 +24,7 @@ import { timeOperationGenerator } from './utils.js' import type { KadDHTComponents, KadDHTInit, Validators, Selectors, KadDHT as KadDHTInterface, QueryEvent, PeerInfoMapper, SetModeOptions } from './index.js' -import type { ContentRouting, CounterGroup, Logger, MetricGroup, PeerDiscovery, PeerDiscoveryEvents, PeerId, PeerInfo, PeerRouting, RoutingOptions, Startable } from '@libp2p/interface' +import type { ContentRouting, CounterGroup, Logger, MetricGroup, PeerDiscovery, PeerDiscoveryEvents, PeerId, PeerInfo, PeerRouting, Provider, RoutingOptions, Startable } from '@libp2p/interface' import type { AbortOptions } from 'it-pushable' import type { CID } from 'multiformats/cid' @@ -46,10 +46,13 @@ class DHTContentRouting implements ContentRouting { await this.dht.cancelReprovide(key) } - async * findProviders (cid: CID, options: RoutingOptions = {}): AsyncGenerator { + async * findProviders (cid: CID, options: RoutingOptions = {}): AsyncGenerator { for await (const event of this.dht.findProviders(cid, options)) { if (event.name === 'PROVIDER') { - yield * event.providers + yield * event.providers.map(peer => ({ + ...peer, + routing: 'kad-dht' + })) } } } diff --git a/packages/libp2p/src/connection-manager/dial-queue.ts b/packages/libp2p/src/connection-manager/dial-queue.ts index 7ef478e27c..12125fe68d 100644 --- a/packages/libp2p/src/connection-manager/dial-queue.ts +++ b/packages/libp2p/src/connection-manager/dial-queue.ts @@ -515,8 +515,8 @@ export class DialQueue { } return true - } catch (err) { - this.log.trace('error calculating if multiaddr(s) were dialable', err) + } catch { + } return false diff --git a/packages/libp2p/src/content-routing.ts b/packages/libp2p/src/content-routing.ts index a0f58ca136..f75bc4d719 100644 --- a/packages/libp2p/src/content-routing.ts +++ b/packages/libp2p/src/content-routing.ts @@ -3,7 +3,7 @@ import { PeerSet } from '@libp2p/peer-collections' import merge from 'it-merge' import { toString as uint8ArrayToString } from 'uint8arrays/to-string' import { NoContentRoutersError } from './errors.js' -import type { AbortOptions, ComponentLogger, ContentRouting, Metrics, PeerInfo, PeerRouting, PeerStore, RoutingOptions, Startable } from '@libp2p/interface' +import type { AbortOptions, ComponentLogger, ContentRouting, Metrics, PeerRouting, PeerStore, Provider, RoutingOptions, Startable } from '@libp2p/interface' import type { CID } from 'multiformats/cid' export interface CompoundContentRoutingInit { @@ -95,7 +95,7 @@ export class CompoundContentRouting implements ContentRouting, Startable { /** * Iterates over all content routers in parallel to find providers of the given key */ - async * findProviders (key: CID, options: RoutingOptions = {}): AsyncGenerator { + async * findProviders (key: CID, options: RoutingOptions = {}): AsyncGenerator { if (this.routers.length === 0) { throw new NoContentRoutersError('No content routers available') } diff --git a/packages/libp2p/test/content-routing/content-routing.spec.ts b/packages/libp2p/test/content-routing/content-routing.spec.ts index 71a75d0689..5fccca9ca3 100644 --- a/packages/libp2p/test/content-routing/content-routing.spec.ts +++ b/packages/libp2p/test/content-routing/content-routing.spec.ts @@ -13,7 +13,7 @@ import sinon from 'sinon' import { stubInterface } from 'sinon-ts' import { createLibp2p } from '../../src/index.js' import type { Libp2p } from '../../src/index.js' -import type { ContentRouting, PeerInfo } from '@libp2p/interface' +import type { ContentRouting, Provider } from '@libp2p/interface' import type { StubbedInstance } from 'sinon-ts' describe('content-routing', () => { @@ -87,7 +87,8 @@ describe('content-routing', () => { id: peerIdFromPrivateKey(await generateKeyPair('Ed25519')), multiaddrs: [ multiaddr('/ip4/123.123.123.123/tcp/4001') - ] + ], + routing: 'test' } deferred.resolve() }) @@ -136,7 +137,8 @@ describe('content-routing', () => { delegate.findProviders.returns(async function * () { yield { id: node.peerId, - multiaddrs: [] + multiaddrs: [], + routing: 'test' } deferred.resolve() }()) @@ -173,7 +175,8 @@ describe('content-routing', () => { id: peerIdFromString(provider), multiaddrs: [ multiaddr('/ip4/0.0.0.0/tcp/0') - ] + ], + routing: 'test' } }()) @@ -224,11 +227,12 @@ describe('content-routing', () => { it('should store the multiaddrs of a peer', async () => { const providerPeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) - const result: PeerInfo = { + const result: Provider = { id: providerPeerId, multiaddrs: [ multiaddr('/ip4/123.123.123.123/tcp/49320') - ] + ], + routing: 'test' } router.findProviders.callsFake(async function * () {}) @@ -252,7 +256,8 @@ describe('content-routing', () => { id: providerPeerId, multiaddrs: [ multiaddr('/ip4/123.123.123.123/tcp/49320') - ] + ], + routing: 'test' } const defer = pDefer() @@ -278,7 +283,8 @@ describe('content-routing', () => { id: providerPeerId, multiaddrs: [ multiaddr('/ip4/123.123.123.123/tcp/49320') - ] + ], + routing: 'test' } router.findProviders.callsFake(async function * () { @@ -299,13 +305,15 @@ describe('content-routing', () => { id: providerPeerId, multiaddrs: [ multiaddr('/ip4/123.123.123.123/tcp/49320') - ] + ], + routing: 'test' } const result2 = { id: providerPeerId, multiaddrs: [ multiaddr('/ip4/213.213.213.213/tcp/2344') - ] + ], + routing: 'test' } router.findProviders.callsFake(async function * () { @@ -352,7 +360,8 @@ describe('content-routing', () => { id: providerPeerId, multiaddrs: [ multiaddr('/ip4/123.123.123.123/tcp/2341') - ] + ], + routing: 'test' }] router.findProviders.callsFake(async function * () { @@ -377,7 +386,8 @@ describe('content-routing', () => { id: providerPeerId, multiaddrs: [ multiaddr('/ip4/123.123.123.123/tcp/2341') - ] + ], + routing: 'test' }] router.findProviders.callsFake(async function * () {}) diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts index 1313fc7fb8..c4aac5b4e6 100644 --- a/packages/logger/src/index.ts +++ b/packages/logger/src/index.ts @@ -107,7 +107,7 @@ function formatError (v: Error): string { } function isAggregateError (err?: any): err is AggregateError { - return err?.name === 'AggregateError' + return err instanceof AggregateError || (err?.name === 'AggregateError' && Array.isArray(err.errors)) } // Add a formatter for stringifying Errors diff --git a/packages/transport-circuit-relay-v2/test/utils.ts b/packages/transport-circuit-relay-v2/test/utils.ts index 6d24b0b582..64d7177b68 100644 --- a/packages/transport-circuit-relay-v2/test/utils.ts +++ b/packages/transport-circuit-relay-v2/test/utils.ts @@ -4,7 +4,7 @@ import { Circuit } from '@multiformats/multiaddr-matcher' import pWaitFor from 'p-wait-for' import { toString as uint8ArrayToString } from 'uint8arrays/to-string' import { RELAY_V2_HOP_CODEC } from '../../../packages/transport-circuit-relay-v2/src/constants.js' -import type { Libp2p, AbortOptions, ContentRouting, PeerId, PeerInfo } from '@libp2p/interface' +import type { Libp2p, AbortOptions, ContentRouting, PeerId, Provider } from '@libp2p/interface' import type { AddressManager } from '@libp2p/interface-internal' import type { Multiaddr } from '@multiformats/multiaddr' import type { CID, Version } from 'multiformats' @@ -133,7 +133,7 @@ export interface MockContentRoutingComponents { } export class MockContentRouting implements ContentRouting { - static providers = new Map() + static providers = new Map() static data = new Map() static reset (): void { @@ -155,7 +155,8 @@ export class MockContentRouting implements ContentRouting { providers.push({ id: this.peerId, - multiaddrs: this.addressManager.getAddresses() + multiaddrs: this.addressManager.getAddresses(), + routing: 'mock-content-routing' }) MockContentRouting.providers.set(cid.toString(), providers) @@ -165,7 +166,7 @@ export class MockContentRouting implements ContentRouting { } - async * findProviders (cid: CID, options?: AbortOptions | undefined): AsyncGenerator { + async * findProviders (cid: CID, options?: AbortOptions | undefined): AsyncGenerator { yield * MockContentRouting.providers.get(cid.toString()) ?? [] }