From 2b8a9249e74f1927c97489b3e72112ce77ab97e3 Mon Sep 17 00:00:00 2001 From: Alex Potsides Date: Thu, 13 Oct 2022 07:34:17 +0100 Subject: [PATCH] fix: update export type (#479) Export factory functions for the transport and peer discovery separately --- packages/webrtc-star-transport/README.md | 14 +- packages/webrtc-star-transport/src/index.ts | 306 +----------------- .../webrtc-star-transport/src/listener.ts | 2 +- .../webrtc-star-transport/src/transport.ts | 296 +++++++++++++++++ .../webrtc-star-transport/test/browser.ts | 13 +- .../test/compliance.spec.ts | 5 +- packages/webrtc-star-transport/test/index.ts | 3 +- packages/webrtc-star-transport/test/node.ts | 27 +- .../test/transport/dial.ts | 2 +- .../test/transport/discovery.ts | 2 +- .../test/transport/instance.spec.ts | 9 +- .../test/transport/listen.ts | 2 +- .../test/transport/multiple-signal-servers.ts | 2 +- .../test/transport/reconnect.node.ts | 2 +- .../test/transport/track.ts | 2 +- 15 files changed, 363 insertions(+), 324 deletions(-) create mode 100644 packages/webrtc-star-transport/src/transport.ts diff --git a/packages/webrtc-star-transport/README.md b/packages/webrtc-star-transport/README.md index b3512f6a..d8105ff5 100644 --- a/packages/webrtc-star-transport/README.md +++ b/packages/webrtc-star-transport/README.md @@ -52,10 +52,10 @@ import wrtc from 'wrtc' import electronWebRTC from 'electron-webrtc' // Using wrtc in node -const transport = webRTCStar({ wrtc }) +const star = webRTCStar({ wrtc }) // Using electron-webrtc in electron -const transport = webRTCStar({ wrtc: electronWebRTC() }) +const star = webRTCStar({ wrtc: electronWebRTC() }) const node = await createLibp2pNode({ addresses: { @@ -64,10 +64,10 @@ const node = await createLibp2pNode({ ] }, transports: [ - transport + star.transport ], peerDiscovery: [ - transport.discovery + star.discovery ] }) await node.start() @@ -81,7 +81,7 @@ await node.dial('/ip4/188.166.203.82/tcp/20000/wss/p2p-webrtc-star/p2p/QmcgpsyWg import { createLibp2pNode } from 'libp2p' import { webRTCStar } from '@libp2p/webrtc-star' -const transport = webRTCStar() +const star = webRTCStar() const node = await createLibp2pNode({ addresses: { @@ -90,10 +90,10 @@ const node = await createLibp2pNode({ ] }, transports: [ - transport + star.transport ], peerDiscovery: [ - transport.discovery + star.discovery ] }) await node.start() diff --git a/packages/webrtc-star-transport/src/index.ts b/packages/webrtc-star-transport/src/index.ts index 461412ca..cbe3ad74 100644 --- a/packages/webrtc-star-transport/src/index.ts +++ b/packages/webrtc-star-transport/src/index.ts @@ -1,298 +1,20 @@ -import { logger } from '@libp2p/logger' -import errcode from 'err-code' -import { AbortError } from 'abortable-iterator' -import type { Multiaddr } from '@multiformats/multiaddr' -import { multiaddr } from '@multiformats/multiaddr' -import * as mafmt from '@multiformats/mafmt' -import { CODE_CIRCUIT } from './constants.js' -import { createListener } from './listener.js' -import { toMultiaddrConnection } from './socket-to-conn.js' -import { cleanMultiaddr, cleanUrlSIO } from './utils.js' -import { WebRTCInitiator } from '@libp2p/webrtc-peer' -import randomBytes from 'iso-random-stream/src/random.js' -import { toString as uint8ArrayToString } from 'uint8arrays' -import { EventEmitter, CustomEvent } from '@libp2p/interfaces/events' -import type { Startable } from '@libp2p/interfaces/startable' -import { peerIdFromString } from '@libp2p/peer-id' -import { symbol } from '@libp2p/interface-transport' -import type { WRTC, WebRTCInitiatorInit, WebRTCReceiver, WebRTCReceiverInit } from '@libp2p/webrtc-peer' -import type { Connection, MultiaddrConnection } from '@libp2p/interface-connection' -import type { Transport, Listener, DialOptions, CreateListenerOptions } from '@libp2p/interface-transport' -import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interface-peer-discovery' -import type { WebRTCStarSocket, HandshakeSignal } from '@libp2p/webrtc-star-protocol' -import { symbol as peerDiscoverySymbol } from '@libp2p/interface-peer-discovery' -import type { PeerId } from '@libp2p/interface-peer-id' +import type { PeerDiscovery } from '@libp2p/interface-peer-discovery' +import type { Transport } from '@libp2p/interface-transport' +import { WebRTCStar, WebRTCStarComponents, WebRTCStarInit } from './transport.js' -const webrtcSupport = 'RTCPeerConnection' in globalThis -const log = logger('libp2p:webrtc-star') - -const noop = () => {} - -class WebRTCStarDiscovery extends EventEmitter implements PeerDiscovery, Startable { - private started = false - - get [peerDiscoverySymbol] (): true { - return true - } - - get [Symbol.toStringTag] () { - return '@libp2p/webrtc-star-discovery' - } - - isStarted () { - return this.started - } - - async start () { - this.started = true - } - - async stop () { - this.started = false - } - - dispatchEvent (event: CustomEvent) { - if (!this.isStarted()) { - return false - } - - return super.dispatchEvent(event) - } -} - -export interface WebRTCStarInit { - wrtc?: WRTC -} - -export interface WebRTCStarDialOptions extends DialOptions { - channelOptions?: WebRTCInitiatorInit +export interface WebRTCStarTuple { + transport: (components: WebRTCStarComponents) => Transport + discovery: (components?: WebRTCStarComponents) => PeerDiscovery } -export interface WebRTCStarListenerOptions extends CreateListenerOptions, WebRTCInitiatorInit { - channelOptions?: WebRTCReceiverInit -} - -export interface SignalServerServerEvents { - 'error': CustomEvent - 'listening': CustomEvent - 'peer': CustomEvent - 'connection': CustomEvent - 'disconnect': CustomEvent - 'reconnect': CustomEvent -} - -export interface SignalServer extends EventEmitter { - signallingAddr: Multiaddr - socket: WebRTCStarSocket - connections: MultiaddrConnection[] - channels: Map - pendingSignals: Map - close: () => Promise -} - -export interface WebRTCStarComponents { - peerId: PeerId -} - -/** - * @class WebRTCStar - */ -export class WebRTCStar implements Transport { - public wrtc?: WRTC - public discovery: () => PeerDiscovery & Startable - public sigServers: Map - private readonly components: WebRTCStarComponents - private readonly _discovery: WebRTCStarDiscovery - - constructor (components: WebRTCStarComponents, init?: WebRTCStarInit) { - if (init?.wrtc != null) { - this.wrtc = init.wrtc - } - - this.components = components +export function webRTCStar (init: WebRTCStarInit = {}): WebRTCStarTuple { + const transport = new WebRTCStar(init) - // Keep Signalling references - this.sigServers = new Map() - - // Discovery - this._discovery = new WebRTCStarDiscovery() - this.discovery = () => this._discovery - this.peerDiscovered = this.peerDiscovered.bind(this) - } - - get [symbol] (): true { - return true - } - - get [Symbol.toStringTag] () { - return '@libp2p/webrtc-star' + return { + transport: (components: WebRTCStarComponents) => { + transport.peerId = components.peerId + return transport + }, + discovery: transport.discovery } - - async dial (ma: Multiaddr, options: WebRTCStarDialOptions) { - const rawConn = await this._connect(ma, options) - const maConn = toMultiaddrConnection(rawConn, { remoteAddr: ma, signal: options.signal }) - log('new outbound connection %s', maConn.remoteAddr) - const conn = await options.upgrader.upgradeOutbound(maConn) - log('outbound connection %s upgraded', maConn.remoteAddr) - return conn - } - - async _connect (ma: Multiaddr, options: WebRTCStarDialOptions) { - if (options.signal?.aborted === true) { - throw new AbortError() - } - - const channelOptions = { - ...(options.channelOptions ?? {}) - } - - // Use custom WebRTC implementation - if (this.wrtc != null) { - channelOptions.wrtc = this.wrtc - } - - const cOpts = ma.toOptions() - const intentId = uint8ArrayToString(randomBytes(36), 'hex') - - return await new Promise((resolve, reject) => { - const sio = this.sigServers.get(cleanUrlSIO(ma)) - - if (sio?.socket == null) { - return reject(errcode(new Error('unknown signal server to use'), 'ERR_UNKNOWN_SIGNAL_SERVER')) - } - - let connected: boolean = false - - log('dialing %s:%s', cOpts.host, cOpts.port) - const channel = new WebRTCInitiator(channelOptions) - - const onError = (evt: CustomEvent) => { - const err = evt.detail - - if (!connected) { - const msg = `connection error ${cOpts.host}:${cOpts.port}: ${err.message}` - log.error(msg) - done(err) - } - } - - const onReady = () => { - connected = true - - log('connection opened %s:%s', cOpts.host, cOpts.port) - done() - } - - const onAbort = () => { - log.error('connection aborted %s:%s', cOpts.host, cOpts.port) - channel.close().finally(() => { - done(new AbortError()) - }) - } - - const done = (err?: Error) => { - channel.removeEventListener('ready', onReady) - options.signal?.removeEventListener('abort', onAbort) - - if (err == null) { - resolve(channel) - } else { - reject(err) - } - } - - channel.addEventListener('ready', onReady, { - once: true - }) - channel.addEventListener('close', () => { - channel.removeEventListener('error', onError) - }) - options.signal?.addEventListener('abort', onAbort) - - channel.addEventListener('signal', (evt) => { - const signal = evt.detail - - sio.socket.emit('ss-handshake', { - intentId: intentId, - srcMultiaddr: sio.signallingAddr.toString(), - dstMultiaddr: ma.toString(), - signal: signal - }) - }) - - sio.socket.on('ws-handshake', (offer) => { - if (offer.intentId === intentId && offer.err != null) { - channel.close().finally(() => { - reject(errcode(new Error(offer.err), 'ERR_SIGNALLING_FAILED')) - }) - } - - if (offer.intentId !== intentId || offer.answer == null || channel.closed) { - return - } - - channel.handleSignal(offer.signal) - }) - }) - } - - /** - * Creates a WebrtcStar listener. The provided `handler` function will be called - * anytime a new incoming Connection has been successfully upgraded via - * `upgrader.upgradeInbound`. - */ - createListener (options: WebRTCStarListenerOptions): Listener { - if (!webrtcSupport && this.wrtc == null) { - throw errcode(new Error('no WebRTC support'), 'ERR_NO_WEBRTC_SUPPORT') - } - - options.channelOptions = options.channelOptions ?? {} - - if (this.wrtc != null) { - options.channelOptions.wrtc = this.wrtc - } - - return createListener(options.upgrader, options.handler ?? noop, this.components.peerId, this, options) - } - - /** - * Takes a list of `Multiaddr`s and returns only valid TCP addresses - */ - filter (multiaddrs: Multiaddr[]) { - multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs] - - return multiaddrs.filter((ma) => { - if (ma.protoCodes().includes(CODE_CIRCUIT)) { - return false - } - - return mafmt.WebRTCStar.matches(ma) - }) - } - - peerDiscovered (maStr: string) { - log('peer discovered: %s', maStr) - maStr = cleanMultiaddr(maStr) - - const ma = multiaddr(maStr) - const peerIdStr = ma.getPeerId() - - if (peerIdStr == null) { - return - } - - const peerId = peerIdFromString(peerIdStr) - - this._discovery.dispatchEvent(new CustomEvent('peer', { - detail: { - id: peerId, - multiaddrs: [ma], - protocols: [] - } - })) - } -} - -export function webRTCStar (init: WebRTCStarInit = {}): (components: WebRTCStarComponents) => WebRTCStar { - return (components: WebRTCStarComponents) => new WebRTCStar(components, init) } diff --git a/packages/webrtc-star-transport/src/listener.ts b/packages/webrtc-star-transport/src/listener.ts index 4f53d1a7..62d55ffb 100644 --- a/packages/webrtc-star-transport/src/listener.ts +++ b/packages/webrtc-star-transport/src/listener.ts @@ -10,7 +10,7 @@ import type { PeerId } from '@libp2p/interface-peer-id' import type { Multiaddr } from '@multiformats/multiaddr' import type { MultiaddrConnection } from '@libp2p/interface-connection' import type { Upgrader, ConnectionHandler, Listener, ListenerEvents } from '@libp2p/interface-transport' -import type { WebRTCStar, WebRTCStarListenerOptions, SignalServer, SignalServerServerEvents } from './index.js' +import type { WebRTCStar, WebRTCStarListenerOptions, SignalServer, SignalServerServerEvents } from './transport.js' import type { WebRTCReceiverInit } from '@libp2p/webrtc-peer' import type { WebRTCStarSocket, HandshakeSignal } from '@libp2p/webrtc-star-protocol' import { EventEmitter, CustomEvent } from '@libp2p/interfaces/events' diff --git a/packages/webrtc-star-transport/src/transport.ts b/packages/webrtc-star-transport/src/transport.ts new file mode 100644 index 00000000..c9fca1ae --- /dev/null +++ b/packages/webrtc-star-transport/src/transport.ts @@ -0,0 +1,296 @@ +import { logger } from '@libp2p/logger' +import errcode from 'err-code' +import { AbortError } from 'abortable-iterator' +import type { Multiaddr } from '@multiformats/multiaddr' +import { multiaddr } from '@multiformats/multiaddr' +import * as mafmt from '@multiformats/mafmt' +import { CODE_CIRCUIT } from './constants.js' +import { createListener } from './listener.js' +import { toMultiaddrConnection } from './socket-to-conn.js' +import { cleanMultiaddr, cleanUrlSIO } from './utils.js' +import { WebRTCInitiator } from '@libp2p/webrtc-peer' +import randomBytes from 'iso-random-stream/src/random.js' +import { toString as uint8ArrayToString } from 'uint8arrays' +import { EventEmitter, CustomEvent } from '@libp2p/interfaces/events' +import type { Startable } from '@libp2p/interfaces/startable' +import { peerIdFromString } from '@libp2p/peer-id' +import { symbol } from '@libp2p/interface-transport' +import type { WRTC, WebRTCInitiatorInit, WebRTCReceiver, WebRTCReceiverInit } from '@libp2p/webrtc-peer' +import type { Connection, MultiaddrConnection } from '@libp2p/interface-connection' +import type { Transport, Listener, DialOptions, CreateListenerOptions } from '@libp2p/interface-transport' +import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interface-peer-discovery' +import type { WebRTCStarSocket, HandshakeSignal } from '@libp2p/webrtc-star-protocol' +import { symbol as peerDiscoverySymbol } from '@libp2p/interface-peer-discovery' +import type { PeerId } from '@libp2p/interface-peer-id' + +const webrtcSupport = 'RTCPeerConnection' in globalThis +const log = logger('libp2p:webrtc-star') + +const noop = () => {} + +export class WebRTCStarDiscovery extends EventEmitter implements PeerDiscovery, Startable { + private started = false + + get [peerDiscoverySymbol] (): true { + return true + } + + get [Symbol.toStringTag] () { + return '@libp2p/webrtc-star-discovery' + } + + isStarted () { + return this.started + } + + async start () { + this.started = true + } + + async stop () { + this.started = false + } + + dispatchEvent (event: CustomEvent) { + if (!this.isStarted()) { + return false + } + + return super.dispatchEvent(event) + } +} + +export interface WebRTCStarInit { + wrtc?: WRTC +} + +export interface WebRTCStarDialOptions extends DialOptions { + channelOptions?: WebRTCInitiatorInit +} + +export interface WebRTCStarListenerOptions extends CreateListenerOptions, WebRTCInitiatorInit { + channelOptions?: WebRTCReceiverInit +} + +export interface SignalServerServerEvents { + 'error': CustomEvent + 'listening': CustomEvent + 'peer': CustomEvent + 'connection': CustomEvent + 'disconnect': CustomEvent + 'reconnect': CustomEvent +} + +export interface SignalServer extends EventEmitter { + signallingAddr: Multiaddr + socket: WebRTCStarSocket + connections: MultiaddrConnection[] + channels: Map + pendingSignals: Map + close: () => Promise +} + +export interface WebRTCStarComponents { + peerId: PeerId +} + +/** + * @class WebRTCStar + */ +export class WebRTCStar implements Transport { + public wrtc?: WRTC + public discovery: () => PeerDiscovery & Startable + public sigServers: Map + private readonly _discovery: WebRTCStarDiscovery + public peerId?: PeerId + + constructor (init?: WebRTCStarInit) { + if (init?.wrtc != null) { + this.wrtc = init.wrtc + } + + // Keep Signalling references + this.sigServers = new Map() + + // Discovery + this._discovery = new WebRTCStarDiscovery() + this.discovery = () => this._discovery + this.peerDiscovered = this.peerDiscovered.bind(this) + } + + get [symbol] (): true { + return true + } + + get [Symbol.toStringTag] () { + return '@libp2p/webrtc-star' + } + + async dial (ma: Multiaddr, options: WebRTCStarDialOptions) { + const rawConn = await this._connect(ma, options) + const maConn = toMultiaddrConnection(rawConn, { remoteAddr: ma, signal: options.signal }) + log('new outbound connection %s', maConn.remoteAddr) + const conn = await options.upgrader.upgradeOutbound(maConn) + log('outbound connection %s upgraded', maConn.remoteAddr) + return conn + } + + async _connect (ma: Multiaddr, options: WebRTCStarDialOptions) { + if (options.signal?.aborted === true) { + throw new AbortError() + } + + const channelOptions = { + ...(options.channelOptions ?? {}) + } + + // Use custom WebRTC implementation + if (this.wrtc != null) { + channelOptions.wrtc = this.wrtc + } + + const cOpts = ma.toOptions() + const intentId = uint8ArrayToString(randomBytes(36), 'hex') + + return await new Promise((resolve, reject) => { + const sio = this.sigServers.get(cleanUrlSIO(ma)) + + if (sio?.socket == null) { + return reject(errcode(new Error('unknown signal server to use'), 'ERR_UNKNOWN_SIGNAL_SERVER')) + } + + let connected: boolean = false + + log('dialing %s:%s', cOpts.host, cOpts.port) + const channel = new WebRTCInitiator(channelOptions) + + const onError = (evt: CustomEvent) => { + const err = evt.detail + + if (!connected) { + const msg = `connection error ${cOpts.host}:${cOpts.port}: ${err.message}` + log.error(msg) + done(err) + } + } + + const onReady = () => { + connected = true + + log('connection opened %s:%s', cOpts.host, cOpts.port) + done() + } + + const onAbort = () => { + log.error('connection aborted %s:%s', cOpts.host, cOpts.port) + channel.close().finally(() => { + done(new AbortError()) + }) + } + + const done = (err?: Error) => { + channel.removeEventListener('ready', onReady) + options.signal?.removeEventListener('abort', onAbort) + + if (err == null) { + resolve(channel) + } else { + reject(err) + } + } + + channel.addEventListener('ready', onReady, { + once: true + }) + channel.addEventListener('close', () => { + channel.removeEventListener('error', onError) + }) + options.signal?.addEventListener('abort', onAbort) + + channel.addEventListener('signal', (evt) => { + const signal = evt.detail + + sio.socket.emit('ss-handshake', { + intentId: intentId, + srcMultiaddr: sio.signallingAddr.toString(), + dstMultiaddr: ma.toString(), + signal: signal + }) + }) + + sio.socket.on('ws-handshake', (offer) => { + if (offer.intentId === intentId && offer.err != null) { + channel.close().finally(() => { + reject(errcode(new Error(offer.err), 'ERR_SIGNALLING_FAILED')) + }) + } + + if (offer.intentId !== intentId || offer.answer == null || channel.closed) { + return + } + + channel.handleSignal(offer.signal) + }) + }) + } + + /** + * Creates a WebrtcStar listener. The provided `handler` function will be called + * anytime a new incoming Connection has been successfully upgraded via + * `upgrader.upgradeInbound`. + */ + createListener (options: WebRTCStarListenerOptions): Listener { + if (!webrtcSupport && this.wrtc == null) { + throw errcode(new Error('no WebRTC support'), 'ERR_NO_WEBRTC_SUPPORT') + } + + options.channelOptions = options.channelOptions ?? {} + + if (this.wrtc != null) { + options.channelOptions.wrtc = this.wrtc + } + + if (this.peerId == null) { + throw errcode(new Error('PeerId not set'), 'ERR_MISSING_PEER_ID') + } + + return createListener(options.upgrader, options.handler ?? noop, this.peerId, this, options) + } + + /** + * Takes a list of `Multiaddr`s and returns only valid TCP addresses + */ + filter (multiaddrs: Multiaddr[]) { + multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs] + + return multiaddrs.filter((ma) => { + if (ma.protoCodes().includes(CODE_CIRCUIT)) { + return false + } + + return mafmt.WebRTCStar.matches(ma) + }) + } + + peerDiscovered (maStr: string) { + log('peer discovered: %s', maStr) + maStr = cleanMultiaddr(maStr) + + const ma = multiaddr(maStr) + const peerIdStr = ma.getPeerId() + + if (peerIdStr == null) { + return + } + + const peerId = peerIdFromString(peerIdStr) + + this._discovery.dispatchEvent(new CustomEvent('peer', { + detail: { + id: peerId, + multiaddrs: [ma], + protocols: [] + } + })) + } +} diff --git a/packages/webrtc-star-transport/test/browser.ts b/packages/webrtc-star-transport/test/browser.ts index 04b57c80..83cbeec3 100644 --- a/packages/webrtc-star-transport/test/browser.ts +++ b/packages/webrtc-star-transport/test/browser.ts @@ -7,21 +7,28 @@ import listenTests from './transport/listen.js' import discoveryTests from './transport/discovery.js' import filterTests from './transport/filter.js' import { mockRegistrar, mockUpgrader } from '@libp2p/interface-mocks' +import type { PeerTransport } from './index.js' +import type { WebRTCStar, WebRTCStarDiscovery } from '../src/transport.js' describe('browser RTC', () => { const create = async () => { const peerId = await createEd25519PeerId() - const ws = webRTCStar()({ peerId }) + const wrtcStar = webRTCStar() + const transport = wrtcStar.transport({ peerId }) as WebRTCStar + const discovery = wrtcStar.discovery() as WebRTCStarDiscovery const registrar = mockRegistrar() const upgrader = mockUpgrader({ registrar }) - return { + const peerTransport: PeerTransport = { peerId, - transport: ws, + transport, + discovery, registrar, upgrader } + + return peerTransport } dialTests(create) diff --git a/packages/webrtc-star-transport/test/compliance.spec.ts b/packages/webrtc-star-transport/test/compliance.spec.ts index 24594eb0..38a511cb 100644 --- a/packages/webrtc-star-transport/test/compliance.spec.ts +++ b/packages/webrtc-star-transport/test/compliance.spec.ts @@ -9,12 +9,13 @@ import testsDiscovery from '@libp2p/interface-peer-discovery-compliance-tests' import { webRTCStar } from '../src/index.js' import pWaitFor from 'p-wait-for' import { peerIdFromString } from '@libp2p/peer-id' +import type { WebRTCStar } from '../src/transport.js' describe('interface-transport compliance', function () { testsTransport({ async setup () { const peerId = peerIdFromString('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2a') - const ws = webRTCStar({ wrtc })({ peerId }) + const ws = webRTCStar({ wrtc }).transport({ peerId }) const base = (id: string) => { return `/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/p2p/${id}` @@ -47,7 +48,7 @@ describe('interface-discovery compliance', () => { testsDiscovery({ async setup () { const peerId = peerIdFromString('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2d') - const ws = webRTCStar({ wrtc })({ peerId }) + const ws = webRTCStar({ wrtc }).transport({ peerId }) as WebRTCStar const maStr = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2d' const discovery = ws.discovery() diff --git a/packages/webrtc-star-transport/test/index.ts b/packages/webrtc-star-transport/test/index.ts index 84c3dbaf..74d54f39 100644 --- a/packages/webrtc-star-transport/test/index.ts +++ b/packages/webrtc-star-transport/test/index.ts @@ -1,11 +1,12 @@ import type { Registrar } from '@libp2p/interface-registrar' import type { PeerId } from '@libp2p/interface-peer-id' import type { Upgrader } from '@libp2p/interface-transport' -import type { WebRTCStar } from '../src' +import type { WebRTCStar, WebRTCStarDiscovery } from '../src/transport.js' export interface PeerTransport { peerId: PeerId transport: WebRTCStar + discovery: WebRTCStarDiscovery upgrader: Upgrader registrar: Registrar } diff --git a/packages/webrtc-star-transport/test/node.ts b/packages/webrtc-star-transport/test/node.ts index 25f5f80d..311a1b2b 100644 --- a/packages/webrtc-star-transport/test/node.ts +++ b/packages/webrtc-star-transport/test/node.ts @@ -15,6 +15,7 @@ import trackTests from './transport/track.js' import reconnectTests from './transport/reconnect.node.js' import type { PeerTransport } from './index.js' import { mockRegistrar, mockUpgrader } from '@libp2p/interface-mocks' +import type { WebRTCStar, WebRTCStarDiscovery } from '../src/transport.js' // TODO: Temporary fix per wrtc issue // https://github.com/node-webrtc/node-webrtc/issues/636#issuecomment-774171409 @@ -23,19 +24,22 @@ process.on('beforeExit', (code) => process.exit(code)) describe('transport: with wrtc', () => { const create = async (): Promise => { const peerId = await createEd25519PeerId() - const ws = webRTCStar({ - wrtc - })({ peerId }) + const wrtcStar = webRTCStar({ wrtc }) + const transport = wrtcStar.transport({ peerId }) as WebRTCStar + const discovery = wrtcStar.discovery() as WebRTCStarDiscovery const registrar = mockRegistrar() const upgrader = mockUpgrader({ registrar }) - return { + const peerTransport: PeerTransport = { peerId, - transport: ws, + transport, + discovery, registrar, upgrader } + + return peerTransport } dialTests(create) @@ -51,19 +55,22 @@ describe('transport: with wrtc', () => { describe.skip('transport: with electron-webrtc', () => { const create = async () => { const peerId = await createEd25519PeerId() - const ws = webRTCStar({ - wrtc: electronWebRTC() - })({ peerId }) + const wrtcStar = webRTCStar({ wrtc: electronWebRTC() }) + const transport = wrtcStar.transport({ peerId }) as WebRTCStar + const discovery = wrtcStar.discovery() as WebRTCStarDiscovery const registrar = mockRegistrar() const upgrader = mockUpgrader({ registrar }) - return { + const peerTransport: PeerTransport = { peerId, - transport: ws, + transport, + discovery, registrar, upgrader } + + return peerTransport } dialTests(create) diff --git a/packages/webrtc-star-transport/test/transport/dial.ts b/packages/webrtc-star-transport/test/transport/dial.ts index 0ca0faad..66197df5 100644 --- a/packages/webrtc-star-transport/test/transport/dial.ts +++ b/packages/webrtc-star-transport/test/transport/dial.ts @@ -8,7 +8,7 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string' import sinon from 'sinon' import { WebRTCReceiver } from '@libp2p/webrtc-peer' import { cleanUrlSIO } from '../../src/utils.js' -import type { WebRTCStar } from '../../src/index.js' +import type { WebRTCStar } from '../../src/transport.js' import type { Listener, Upgrader } from '@libp2p/interface-transport' import pWaitFor from 'p-wait-for' import type { HandshakeSignal } from '@libp2p/webrtc-star-protocol' diff --git a/packages/webrtc-star-transport/test/transport/discovery.ts b/packages/webrtc-star-transport/test/transport/discovery.ts index 0ad3408c..28b49aa1 100644 --- a/packages/webrtc-star-transport/test/transport/discovery.ts +++ b/packages/webrtc-star-transport/test/transport/discovery.ts @@ -5,7 +5,7 @@ import { multiaddr } from '@multiformats/multiaddr' import type { Multiaddr } from '@multiformats/multiaddr' import { pEvent } from 'p-event' import { cleanUrlSIO } from '../../src/utils.js' -import type { WebRTCStar } from '../../src/index.js' +import type { WebRTCStar } from '../../src/transport.js' import type { Listener } from '@libp2p/interface-transport' import { mockUpgrader } from '@libp2p/interface-mocks' import type { PeerTransport } from '../index.js' diff --git a/packages/webrtc-star-transport/test/transport/instance.spec.ts b/packages/webrtc-star-transport/test/transport/instance.spec.ts index 0c6feeab..25bc3060 100644 --- a/packages/webrtc-star-transport/test/transport/instance.spec.ts +++ b/packages/webrtc-star-transport/test/transport/instance.spec.ts @@ -5,8 +5,13 @@ import { expect } from 'aegir/chai' import { webRTCStar } from '../../src/index.js' describe('instantiate the transport', () => { - it('create', async () => { - const wstar = webRTCStar()({ peerId: await createEd25519PeerId() }) + it('create transport', async () => { + const wstar = webRTCStar().transport({ peerId: await createEd25519PeerId() }) + expect(wstar).to.exist() + }) + + it('create discovery', async () => { + const wstar = webRTCStar().discovery({ peerId: await createEd25519PeerId() }) expect(wstar).to.exist() }) }) diff --git a/packages/webrtc-star-transport/test/transport/listen.ts b/packages/webrtc-star-transport/test/transport/listen.ts index a822e01c..b37c5c76 100644 --- a/packages/webrtc-star-transport/test/transport/listen.ts +++ b/packages/webrtc-star-transport/test/transport/listen.ts @@ -3,7 +3,7 @@ import { expect } from 'aegir/chai' import { multiaddr } from '@multiformats/multiaddr' import { pEvent } from 'p-event' -import type { WebRTCStar } from '../../src/index.js' +import type { WebRTCStar } from '../../src/transport.js' import { mockUpgrader } from '@libp2p/interface-mocks' import type { PeerTransport } from '../index.js' diff --git a/packages/webrtc-star-transport/test/transport/multiple-signal-servers.ts b/packages/webrtc-star-transport/test/transport/multiple-signal-servers.ts index 4b38dcf5..3a67068a 100644 --- a/packages/webrtc-star-transport/test/transport/multiple-signal-servers.ts +++ b/packages/webrtc-star-transport/test/transport/multiple-signal-servers.ts @@ -3,7 +3,7 @@ import { expect } from 'aegir/chai' import { multiaddr } from '@multiformats/multiaddr' import { pipe } from 'it-pipe' -import type { WebRTCStar } from '../../src/index.js' +import type { WebRTCStar } from '../../src/transport.js' import { mockRegistrar, mockUpgrader } from '@libp2p/interface-mocks' import type { Upgrader } from '@libp2p/interface-transport' import type { PeerTransport } from '../index.js' diff --git a/packages/webrtc-star-transport/test/transport/reconnect.node.ts b/packages/webrtc-star-transport/test/transport/reconnect.node.ts index 07587e1c..31bcc5f1 100644 --- a/packages/webrtc-star-transport/test/transport/reconnect.node.ts +++ b/packages/webrtc-star-transport/test/transport/reconnect.node.ts @@ -13,7 +13,7 @@ import pWaitFor from 'p-wait-for' import type { PeerTransport } from '../index.js' import pDefer from 'p-defer' import delay from 'delay' -import type { WebRTCStar } from '../../src/index.js' +import type { WebRTCStar } from '../../src/transport.js' import { pEvent } from 'p-event' const SERVER_PORT = 13580 diff --git a/packages/webrtc-star-transport/test/transport/track.ts b/packages/webrtc-star-transport/test/transport/track.ts index c4ea309d..2f580984 100644 --- a/packages/webrtc-star-transport/test/transport/track.ts +++ b/packages/webrtc-star-transport/test/transport/track.ts @@ -7,7 +7,7 @@ import type { Multiaddr } from '@multiformats/multiaddr' import { pipe } from 'it-pipe' import pWaitFor from 'p-wait-for' import { cleanUrlSIO } from '../../src/utils.js' -import type { WebRTCStar } from '../../src/index.js' +import type { WebRTCStar } from '../../src/transport.js' import type { Listener, Upgrader } from '@libp2p/interface-transport' import { mockRegistrar, mockUpgrader } from '@libp2p/interface-mocks' import type { PeerTransport } from '../index.js'