From 0d0bdd9cbff7d52a010756f06aa9dc905dc8bffa Mon Sep 17 00:00:00 2001 From: achingbrain Date: Wed, 9 Apr 2025 09:21:41 +0100 Subject: [PATCH 1/2] fix: pass service map to non-service components To allow using declared services in transports, muxers and other non-service components, add the service map type to the components that will be passed to the factories. --- packages/libp2p/src/index.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/libp2p/src/index.ts b/packages/libp2p/src/index.ts index fde1a69ed1..edb2dccd33 100644 --- a/packages/libp2p/src/index.ts +++ b/packages/libp2p/src/index.ts @@ -92,45 +92,45 @@ export interface Libp2pInit { /** * Transports are low-level communication channels */ - transports?: Array<(components: Components) => Transport> + transports?: Array<(components: Components & T) => Transport> /** * Stream muxers allow the creation of many data streams over a single * connection. */ - streamMuxers?: Array<(components: Components) => StreamMuxerFactory> + streamMuxers?: Array<(components: Components & T) => StreamMuxerFactory> /** * Connection encrypters ensure that data sent over connections cannot be * eavesdropped on, and that the remote peer possesses the private key that * corresponds to the public key that it's Peer ID is derived from. */ - connectionEncrypters?: Array<(components: Components) => ConnectionEncrypter> + connectionEncrypters?: Array<(components: Components & T) => ConnectionEncrypter> /** * Peer discovery mechanisms allow finding peers on the network */ - peerDiscovery?: Array<(components: Components) => PeerDiscovery> + peerDiscovery?: Array<(components: Components & T) => PeerDiscovery> /** * Peer routers provide implementations for peer routing queries */ - peerRouters?: Array<(components: Components) => PeerRouting> + peerRouters?: Array<(components: Components & T) => PeerRouting> /** * Content routers provide implementations for content routing queries */ - contentRouters?: Array<(components: Components) => ContentRouting> + contentRouters?: Array<(components: Components & T) => ContentRouting> /** * A Metrics implementation can be supplied to collect metrics on this node */ - metrics?(components: Components): Metrics + metrics?(components: Components & T): Metrics /** * A ConnectionProtector can be used to create a secure overlay on top of the network using pre-shared keys */ - connectionProtector?(components: Components): ConnectionProtector + connectionProtector?(components: Components & T): ConnectionProtector /** * Arbitrary libp2p modules From e2dbd9c555a322c3697481f700fd9050935824a1 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Wed, 9 Apr 2025 09:44:30 +0100 Subject: [PATCH 2/2] chore: ignore partial components --- packages/libp2p/src/libp2p.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/libp2p/src/libp2p.ts b/packages/libp2p/src/libp2p.ts index 4d6b62ba82..fdc1a6febb 100644 --- a/packages/libp2p/src/libp2p.ts +++ b/packages/libp2p/src/libp2p.ts @@ -109,6 +109,7 @@ export class Libp2p extends TypedEventEmitter // Set up connection protector if configured if (init.connectionProtector != null) { + // @ts-expect-error defaultComponents is missing service component types added later this.configureComponent('connectionProtector', init.connectionProtector(components)) }