From 859e6f123432776c458f1eb8a35238e1ddb307dc Mon Sep 17 00:00:00 2001 From: achingbrain Date: Sat, 7 Jan 2023 08:13:42 +0000 Subject: [PATCH] feat: add register and unregister methods to libp2p type Expose the methods used to register and unregister topologies on the libp2p object itself. --- packages/interface-libp2p/src/index.ts | 37 +++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/packages/interface-libp2p/src/index.ts b/packages/interface-libp2p/src/index.ts index b178ba4f3..037dd0a33 100644 --- a/packages/interface-libp2p/src/index.ts +++ b/packages/interface-libp2p/src/index.ts @@ -25,7 +25,7 @@ import type { Connection, Stream } from '@libp2p/interface-connection' import type { PeerRouting } from '@libp2p/interface-peer-routing' import type { ContentRouting } from '@libp2p/interface-content-routing' import type { PubSub } from '@libp2p/interface-pubsub' -import type { StreamHandler, StreamHandlerOptions } from '@libp2p/interface-registrar' +import type { StreamHandler, StreamHandlerOptions, Topology } from '@libp2p/interface-registrar' import type { Metrics } from '@libp2p/interface-metrics' import type { PeerInfo } from '@libp2p/interface-peer-info' import type { KeyChain } from '@libp2p/interface-keychain' @@ -413,6 +413,41 @@ export interface Libp2p extends Startable, EventEmitter { */ unhandle: (protocols: string[] | string) => Promise + /** + * Register a topology to be informed when peers are encountered that + * support the specified protocol + * + * @example + * + * ```js + * import { createTopology } from '@libp2p/topology' + * + * const id = await libp2p.register('/echo/1.0.0', createTopology({ + * onConnect: (peer, connection) => { + * // handle connect + * }, + * onDisconnect: (peer, connection) => { + * // handle disconnect + * } + * })) + * ``` + */ + register: (protocol: string, topology: Topology) => Promise + + /** + * Unregister topology to no longer be informed when peers connect or + * disconnect. + * + * @example + * + * ```js + * const id = await libp2p.register(...) + * + * libp2p.unregister(id) + * ``` + */ + unregister: (id: string) => void + /** * Pings the given peer in order to obtain the operation latency *