diff --git a/packages/integration-tests/test/dht.node.ts b/packages/integration-tests/test/dht.node.ts index 54a7d78495..fc38af58d5 100644 --- a/packages/integration-tests/test/dht.node.ts +++ b/packages/integration-tests/test/dht.node.ts @@ -17,7 +17,7 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string' import type { Identify } from '@libp2p/identify' import type { Libp2p, PeerId } from '@libp2p/interface' import type { KadDHT } from '@libp2p/kad-dht' -import type { PingService } from '@libp2p/ping' +import type { Ping } from '@libp2p/ping' import type { Multiaddr } from '@multiformats/multiaddr' import type { Libp2pOptions } from 'libp2p' @@ -151,7 +151,7 @@ describe('DHT subsystem operates correctly', () => { it('kad-dht should discover other peers', async () => { const deferred = pDefer() - const getConfig = (): Libp2pOptions<{ dht: KadDHT, ping: PingService, identify: Identify }> => ({ + const getConfig = (): Libp2pOptions<{ dht: KadDHT, ping: Ping, identify: Identify }> => ({ addresses: { listen: [ listenAddr.toString() diff --git a/packages/integration-tests/test/identify.node.ts b/packages/integration-tests/test/identify.node.ts index a17f8efb91..8fcf04c802 100644 --- a/packages/integration-tests/test/identify.node.ts +++ b/packages/integration-tests/test/identify.node.ts @@ -224,10 +224,11 @@ describe('identify', () => { const agentVersion = 'js-project/1.0.0' const libp2p = await createLibp2p(createBaseOptions({ + nodeInfo: { + userAgent: agentVersion + }, services: { - identify: identify({ - agentVersion - }) + identify: identify() } })) diff --git a/packages/integration-tests/test/interop.ts b/packages/integration-tests/test/interop.ts index 6b65a96db6..93bb8ac1db 100644 --- a/packages/integration-tests/test/interop.ts +++ b/packages/integration-tests/test/interop.ts @@ -25,7 +25,7 @@ import pDefer from 'p-defer' import type { Identify } from '@libp2p/identify' import type { ServiceMap, PrivateKey } from '@libp2p/interface' import type { SpawnOptions, Daemon, DaemonFactory } from '@libp2p/interop' -import type { PingService } from '@libp2p/ping' +import type { Ping } from '@libp2p/ping' import type { Libp2pOptions, ServiceFactoryMap } from 'libp2p' /** @@ -159,7 +159,7 @@ async function createJsPeer (options: SpawnOptions): Promise { throw new UnsupportedError() } - const services: ServiceFactoryMap<{ identify: Identify, ping: PingService } & Record> = { + const services: ServiceFactoryMap<{ identify: Identify, ping: Ping } & Record> = { identify: identify(), ping: ping() } diff --git a/packages/integration-tests/test/ping.spec.ts b/packages/integration-tests/test/ping.spec.ts index e2a8c7d3ce..81ffce709b 100644 --- a/packages/integration-tests/test/ping.spec.ts +++ b/packages/integration-tests/test/ping.spec.ts @@ -6,10 +6,10 @@ import { expect } from 'aegir/chai' import { createLibp2p } from 'libp2p' import { createBaseOptions } from './fixtures/base-options.js' import type { Libp2p } from '@libp2p/interface' -import type { PingService } from '@libp2p/ping' +import type { Ping } from '@libp2p/ping' describe('ping', () => { - let nodes: Array> + let nodes: Array> beforeEach(async () => { nodes = await Promise.all([ diff --git a/packages/interface-internal/src/registrar.ts b/packages/interface-internal/src/registrar.ts index c4d60b5ac6..e3af4ae5f2 100644 --- a/packages/interface-internal/src/registrar.ts +++ b/packages/interface-internal/src/registrar.ts @@ -1,22 +1,5 @@ import type { StreamHandler, StreamHandlerOptions, StreamHandlerRecord, Topology, StreamMiddleware, AbortOptions } from '@libp2p/interface' -export type { - /** - * @deprecated This type should be imported from @libp2p/interface directly - */ - StreamHandler, - - /** - * @deprecated This type should be imported from @libp2p/interface directly - */ - StreamHandlerOptions, - - /** - * @deprecated This type should be imported from @libp2p/interface directly - */ - StreamHandlerRecord -} - /** * The `Registrar` provides an interface for registering protocol handlers - * these are invoked when remote peers open streams on the local node with the diff --git a/packages/interface/src/errors.ts b/packages/interface/src/errors.ts index 7df77a6696..74584a9dc4 100644 --- a/packages/interface/src/errors.ts +++ b/packages/interface/src/errors.ts @@ -132,34 +132,6 @@ export class MuxerClosedError extends Error { } } -/** - * Thrown when a protocol stream is closed during an operation - * - * @deprecated delete if unused - */ -export class StreamClosedError extends Error { - static name = 'StreamClosedError' - - constructor (message = 'The stream has been closed') { - super(message) - this.name = 'StreamClosedError' - } -} - -/** - * Thrown when a protocol stream is closing during an operation - * - * @deprecated delete if unused - */ -export class StreamClosingError extends Error { - static name = 'StreamClosingError' - - constructor (message = 'The stream is closing') { - super(message) - this.name = 'StreamClosingError' - } -} - /** * Thrown when a protocol stream is reset by the remote muxer */ diff --git a/packages/interface/src/peer-store.ts b/packages/interface/src/peer-store.ts index e8f53ded5f..6c49aa8b69 100644 --- a/packages/interface/src/peer-store.ts +++ b/packages/interface/src/peer-store.ts @@ -314,9 +314,4 @@ export interface PeerStore { * ``` */ consumePeerRecord(buf: Uint8Array, options?: ConsumePeerRecordOptions): Promise - - /** - * @deprecated Pass `expectedPeer` as a property of `options` instead - */ - consumePeerRecord(buf: Uint8Array, expectedPeer?: PeerId, options?: AbortOptions): Promise } diff --git a/packages/libp2p/src/connection-manager/index.ts b/packages/libp2p/src/connection-manager/index.ts index 4574247252..8d0c49df0b 100644 --- a/packages/libp2p/src/connection-manager/index.ts +++ b/packages/libp2p/src/connection-manager/index.ts @@ -82,24 +82,6 @@ export interface ConnectionManagerInit { */ inboundUpgradeTimeout?: number - /** - * When a new outbound connection is opened, the upgrade process (e.g. - * protect, encrypt, multiplex etc) must complete within this number of ms. - * - * Does not apply if an abort signal is passed to the `.dial` method. - * - * @deprecated This is handled by `dialTimeout` - */ - outboundUpgradeTimeout?: number - - /** - * Protocol negotiation must complete within this number of ms - * - * @default 2000 - * @deprecated use outboundStreamProtocolNegotiationTimeout or inboundStreamProtocolNegotiationTimeout instead - */ - protocolNegotiationTimeout?: number - /** * Outbound protocol negotiation must complete within this number of ms. * diff --git a/packages/libp2p/src/libp2p.ts b/packages/libp2p/src/libp2p.ts index b7158e06b9..598f3e3c97 100644 --- a/packages/libp2p/src/libp2p.ts +++ b/packages/libp2p/src/libp2p.ts @@ -119,8 +119,8 @@ export class Libp2p extends TypedEventEmitter connectionEncrypters: (init.connectionEncrypters ?? []).map((fn, index) => this.configureComponent(`connection-encryption-${index}`, fn(this.components))), streamMuxers: (init.streamMuxers ?? []).map((fn, index) => this.configureComponent(`stream-muxers-${index}`, fn(this.components))), inboundUpgradeTimeout: init.connectionManager?.inboundUpgradeTimeout, - inboundStreamProtocolNegotiationTimeout: init.connectionManager?.inboundStreamProtocolNegotiationTimeout ?? init.connectionManager?.protocolNegotiationTimeout, - outboundStreamProtocolNegotiationTimeout: init.connectionManager?.outboundStreamProtocolNegotiationTimeout ?? init.connectionManager?.protocolNegotiationTimeout, + inboundStreamProtocolNegotiationTimeout: init.connectionManager?.inboundStreamProtocolNegotiationTimeout, + outboundStreamProtocolNegotiationTimeout: init.connectionManager?.outboundStreamProtocolNegotiationTimeout, connectionCloseTimeout: init.connectionManager?.connectionCloseTimeout }) diff --git a/packages/protocol-identify/src/index.ts b/packages/protocol-identify/src/index.ts index 5143e80584..9a80596f22 100644 --- a/packages/protocol-identify/src/index.ts +++ b/packages/protocol-identify/src/index.ts @@ -55,13 +55,6 @@ export interface IdentifyInit { */ protocolPrefix?: string - /** - * What details we should send as part of an identify message - * - * @deprecated Use `nodeInfo.userAgent` in the main libp2p config instead - */ - agentVersion?: string - /** * How long we should wait for a remote peer to send their identify response * diff --git a/packages/protocol-identify/src/utils.ts b/packages/protocol-identify/src/utils.ts index dbdf5d8cd0..d10b6579b2 100644 --- a/packages/protocol-identify/src/utils.ts +++ b/packages/protocol-identify/src/utils.ts @@ -7,7 +7,7 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string' import { IDENTIFY_PROTOCOL_VERSION, MAX_IDENTIFY_MESSAGE_SIZE, MAX_PUSH_CONCURRENCY } from './consts.js' import type { IdentifyComponents, IdentifyInit } from './index.js' import type { Identify as IdentifyMessage } from './pb/message.js' -import type { Libp2pEvents, IdentifyResult, SignedPeerRecord, Logger, Connection, Peer, PeerData, PeerStore, NodeInfo, Startable, Stream } from '@libp2p/interface' +import type { Libp2pEvents, IdentifyResult, SignedPeerRecord, Logger, Connection, Peer, PeerData, PeerStore, Startable, Stream } from '@libp2p/interface' import type { Multiaddr } from '@multiformats/multiaddr' import type { TypedEventTarget } from 'main-event' @@ -37,14 +37,6 @@ export function getCleanMultiaddr (addr: Uint8Array | string | null | undefined) } } -export function getAgentVersion (nodeInfo: NodeInfo, agentVersion?: string): string { - if (agentVersion != null) { - return agentVersion - } - - return nodeInfo.userAgent -} - export async function consumeIdentifyMessage (peerStore: PeerStore, events: TypedEventTarget, log: Logger, connection: Connection, message: IdentifyMessage): Promise { log('received identify from %p', connection.remotePeer) @@ -217,7 +209,7 @@ export abstract class AbstractIdentify implements Startable { // Store self host metadata this.host = { protocolVersion: `${init.protocolPrefix ?? defaultValues.protocolPrefix}/${IDENTIFY_PROTOCOL_VERSION}`, - agentVersion: getAgentVersion(components.nodeInfo, init.agentVersion) + agentVersion: components.nodeInfo.userAgent } this.handleProtocol = this.handleProtocol.bind(this) diff --git a/packages/protocol-identify/test/index.spec.ts b/packages/protocol-identify/test/index.spec.ts index ba4a132991..d170604834 100644 --- a/packages/protocol-identify/test/index.spec.ts +++ b/packages/protocol-identify/test/index.spec.ts @@ -121,11 +121,10 @@ describe('identify', () => { }) it('should store own host data and protocol version into metadataBook on start', async () => { - const agentVersion = 'js-project/1.0.0' + const agentVersion = 'test' const protocolVersion = '/my/id/0.1.0' identify = new Identify(components, { - agentVersion, protocolPrefix: '/my/id' }) diff --git a/packages/protocol-ping/src/index.ts b/packages/protocol-ping/src/index.ts index 1462fdc9db..960a36e760 100644 --- a/packages/protocol-ping/src/index.ts +++ b/packages/protocol-ping/src/index.ts @@ -31,11 +31,6 @@ export interface Ping { ping(peer: PeerId | Multiaddr | Multiaddr[], options?: AbortOptions): Promise } -/** - * @deprecated Use the `Ping` export instead - */ -export type PingService = Ping - export interface PingInit { protocolPrefix?: string maxInboundStreams?: number @@ -48,11 +43,6 @@ export interface PingInit { timeout?: number } -/** - * @deprecated Use the `PingInit` export instead - */ -export type PingServiceInit = PingInit - export interface PingComponents { registrar: Registrar connectionManager: ConnectionManager diff --git a/packages/transport-circuit-relay-v2/src/index.ts b/packages/transport-circuit-relay-v2/src/index.ts index 8ee702e28f..17a079f12a 100644 --- a/packages/transport-circuit-relay-v2/src/index.ts +++ b/packages/transport-circuit-relay-v2/src/index.ts @@ -269,15 +269,6 @@ export interface CircuitRelayTransportInit extends TransportReservationStoreInit */ maxOutboundStopStreams?: number - /** - * Incoming STOP requests (e.g. when a remote peer wants to dial us via a - * relay) must finish the initial protocol negotiation within this timeout in - * ms - * - * @deprecated Configure `connectionManager.inboundUpgradeTimeout` instead - */ - stopTimeout?: number - /** * When creating a reservation it must complete within this number of ms * diff --git a/packages/transport-webrtc/src/private-to-private/transport.ts b/packages/transport-webrtc/src/private-to-private/transport.ts index 4294c3ed1f..d58b9a6a2f 100644 --- a/packages/transport-webrtc/src/private-to-private/transport.ts +++ b/packages/transport-webrtc/src/private-to-private/transport.ts @@ -31,14 +31,6 @@ export interface WebRTCTransportInit { * Any options here will be applied to any RTCDataChannels that are opened. */ dataChannel?: DataChannelOptions - - /** - * Inbound connections must complete the upgrade within this many ms - * - * @default 30_000 - * @deprecated configure `connectionManager.inboundUpgradeTimeout` instead - */ - inboundConnectionTimeout?: number } export interface WebRTCTransportComponents { diff --git a/packages/transport-webrtc/src/private-to-public/transport.ts b/packages/transport-webrtc/src/private-to-public/transport.ts index 18ff152f1d..ae8c54f5a9 100644 --- a/packages/transport-webrtc/src/private-to-public/transport.ts +++ b/packages/transport-webrtc/src/private-to-public/transport.ts @@ -51,11 +51,6 @@ export interface WebRTCTransportDirectInit { */ dataChannel?: DataChannelOptions - /** - * @deprecated use `certificate` instead - this option will be removed in a future release - */ - certificates?: TransportCertificate[] - /** * Use an existing TLS certificate to secure incoming connections or supply * settings to generate one. @@ -68,11 +63,6 @@ export interface WebRTCTransportDirectInit { */ certificate?: TransportCertificate - /** - * @deprecated this setting is ignored and will be removed in a future release - */ - useLibjuice?: boolean - /** * The key the certificate is stored in the datastore under * diff --git a/packages/transport-websockets/src/filters.ts b/packages/transport-websockets/src/filters.ts deleted file mode 100644 index c9d0e63e1c..0000000000 --- a/packages/transport-websockets/src/filters.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { WebSocketsSecure, WebSockets, DNS } from '@multiformats/multiaddr-matcher' -import type { Multiaddr } from '@multiformats/multiaddr' - -/** - * @deprecated Configure this globally by passing a `connectionGater` to `createLibp2p` with a `denyDialMultiaddr` method that returns `false` - */ -export function all (multiaddrs: Multiaddr[]): Multiaddr[] { - return multiaddrs.filter((ma) => { - return WebSocketsSecure.exactMatch(ma) || WebSockets.exactMatch(ma) - }) -} - -/** - * @deprecated Configure this globally by passing a `connectionGater` to `createLibp2p` - */ -export function wss (multiaddrs: Multiaddr[]): Multiaddr[] { - return multiaddrs.filter((ma) => { - return WebSocketsSecure.exactMatch(ma) - }) -} - -/** - * @deprecated Configure this globally by passing a `connectionGater` to `createLibp2p` - */ -export function dnsWss (multiaddrs: Multiaddr[]): Multiaddr[] { - return multiaddrs.filter((ma) => { - return DNS.matches(ma) && WebSocketsSecure.exactMatch(ma) - }) -} - -/** - * @deprecated Configure this globally by passing a `connectionGater` to `createLibp2p` - */ -export function dnsWsOrWss (multiaddrs: Multiaddr[]): Multiaddr[] { - return multiaddrs.filter((ma) => { - return DNS.matches(ma) && (WebSocketsSecure.exactMatch(ma) || WebSockets.exactMatch(ma)) - }) -} diff --git a/packages/transport-websockets/src/index.ts b/packages/transport-websockets/src/index.ts index 57a0368787..9e63da60ef 100644 --- a/packages/transport-websockets/src/index.ts +++ b/packages/transport-websockets/src/index.ts @@ -24,34 +24,21 @@ */ import { transportSymbol, serviceCapabilities, ConnectionFailedError } from '@libp2p/interface' +import { WebSockets as WebSocketsMatcher, WebSocketsSecure } from '@multiformats/multiaddr-matcher' import { multiaddrToUri as toUri } from '@multiformats/multiaddr-to-uri' import { pEvent } from 'p-event' import { CustomProgressEvent } from 'progress-events' -import * as filters from './filters.js' import { createListener } from './listener.js' import { webSocketToMaConn } from './websocket-to-conn.js' -import type { Transport, MultiaddrFilter, CreateListenerOptions, DialTransportOptions, Listener, AbortOptions, ComponentLogger, Logger, Connection, OutboundConnectionUpgradeEvents, Metrics, CounterGroup, Libp2pEvents } from '@libp2p/interface' +import type { Transport, CreateListenerOptions, DialTransportOptions, Listener, AbortOptions, ComponentLogger, Logger, Connection, OutboundConnectionUpgradeEvents, Metrics, CounterGroup, Libp2pEvents } from '@libp2p/interface' import type { Multiaddr } from '@multiformats/multiaddr' import type { WebSocketOptions } from 'it-ws/client' import type { TypedEventTarget } from 'main-event' import type http from 'node:http' import type https from 'node:https' import type { ProgressEvent } from 'progress-events' -import type { ClientOptions } from 'ws' export interface WebSocketsInit extends AbortOptions, WebSocketOptions { - /** - * @deprecated Use a ConnectionGater instead - */ - filter?: MultiaddrFilter - - /** - * Options used to create WebSockets - * - * @deprecated This option will be removed in a future release - */ - websocket?: ClientOptions - /** * Options used to create the HTTP server */ @@ -63,13 +50,6 @@ export interface WebSocketsInit extends AbortOptions, WebSocketOptions { */ https?: https.ServerOptions - /** - * Inbound connections must complete their upgrade within this many ms - * - * @deprecated Use the `connectionManager.inboundUpgradeTimeout` libp2p config key instead - */ - inboundConnectionUpgradeTimeout?: number - /** * How large the outgoing [bufferedAmount](https://websockets.spec.whatwg.org/#dom-websocket-bufferedamount) * property of incoming and outgoing websockets is allowed to get in bytes. @@ -202,24 +182,10 @@ class WebSockets implements Transport { }) } - /** - * Takes a list of `Multiaddr`s and returns only valid WebSockets addresses. - * By default, in a browser environment only DNS+WSS multiaddr is accepted, - * while in a Node.js environment DNS+{WS, WSS} multiaddrs are accepted. - */ listenFilter (multiaddrs: Multiaddr[]): Multiaddr[] { - multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs] - - if (this.init?.filter != null) { - return this.init?.filter(multiaddrs) - } - - return filters.all(multiaddrs) + return multiaddrs.filter(ma => WebSocketsMatcher.exactMatch(ma) || WebSocketsSecure.exactMatch(ma)) } - /** - * Filter check for all Multiaddrs that this transport can dial - */ dialFilter (multiaddrs: Multiaddr[]): Multiaddr[] { return this.listenFilter(multiaddrs) } diff --git a/packages/transport-websockets/test/node.ts b/packages/transport-websockets/test/node.ts index fb17c72adb..404af0fac2 100644 --- a/packages/transport-websockets/test/node.ts +++ b/packages/transport-websockets/test/node.ts @@ -15,7 +15,6 @@ import pWaitFor from 'p-wait-for' import Sinon from 'sinon' import { stubInterface } from 'sinon-ts' import { setGlobalDispatcher, Agent } from 'undici' -import * as filters from '../src/filters.js' import { webSockets } from '../src/index.js' import type { Connection, Libp2pEvents, Listener, Transport, Upgrader, TLSCertificate } from '@libp2p/interface' import type { StubbedInstance } from 'sinon-ts' @@ -439,214 +438,6 @@ describe('dial', () => { }) }) -describe('filter addrs', () => { - let ws: Transport - - describe('default filter addrs with only dns', () => { - before(() => { - ws = webSockets()({ - events: new TypedEventEmitter(), - logger: defaultLogger() - }) - }) - - it('should filter out invalid WS addresses', function () { - const ma1 = multiaddr('/ip4/127.0.0.1/tcp/9090') - const ma2 = multiaddr('/ip4/127.0.0.1/udp/9090') - const ma3 = multiaddr('/ip6/::1/tcp/80') - const ma4 = multiaddr('/dnsaddr/ipfs.io/tcp/80') - - const valid = ws.dialFilter([ma1, ma2, ma3, ma4]) - expect(valid.length).to.equal(0) - }) - - it('should filter correct dns address', function () { - const ma1 = multiaddr('/dnsaddr/ipfs.io/ws') - const ma2 = multiaddr('/dnsaddr/ipfs.io/tcp/80/ws') - const ma3 = multiaddr('/dnsaddr/ipfs.io/tcp/80/wss') - - const valid = ws.dialFilter([ma1, ma2, ma3]) - expect(valid.length).to.equal(3) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - expect(valid[2]).to.deep.equal(ma3) - }) - - it('should filter correct dns address with ipfs id', function () { - const ma1 = multiaddr('/dnsaddr/ipfs.io/tcp/80/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - const ma2 = multiaddr('/dnsaddr/ipfs.io/tcp/443/wss/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct dns4 address', function () { - const ma1 = multiaddr('/dns4/ipfs.io/tcp/80/ws') - const ma2 = multiaddr('/dns4/ipfs.io/tcp/443/wss') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct dns6 address', function () { - const ma1 = multiaddr('/dns6/ipfs.io/tcp/80/ws') - const ma2 = multiaddr('/dns6/ipfs.io/tcp/443/wss') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct dns6 address with ipfs id', function () { - const ma1 = multiaddr('/dns6/ipfs.io/tcp/80/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - const ma2 = multiaddr('/dns6/ipfs.io/tcp/443/wss/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - }) - - describe('custom filter addrs', () => { - before(() => { - ws = webSockets({ filter: filters.all })({ - events: new TypedEventEmitter(), - logger: defaultLogger() - }) - }) - - it('should fail invalid WS addresses', function () { - const ma1 = multiaddr('/ip4/127.0.0.1/tcp/9090') - const ma2 = multiaddr('/ip4/127.0.0.1/udp/9090') - const ma3 = multiaddr('/ip6/::1/tcp/80') - const ma4 = multiaddr('/dnsaddr/ipfs.io/tcp/80') - - const valid = ws.dialFilter([ma1, ma2, ma3, ma4]) - expect(valid.length).to.equal(0) - }) - - it('should filter correct ipv4 addresses', function () { - const ma1 = multiaddr('/ip4/127.0.0.1/tcp/80/ws') - const ma2 = multiaddr('/ip4/127.0.0.1/tcp/443/wss') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct ipv4 addresses with ipfs id', function () { - const ma1 = multiaddr('/ip4/127.0.0.1/tcp/80/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - const ma2 = multiaddr('/ip4/127.0.0.1/tcp/80/wss/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct ipv6 address', function () { - const ma1 = multiaddr('/ip6/::1/tcp/80/ws') - const ma2 = multiaddr('/ip6/::1/tcp/443/wss') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct ipv6 addresses with ipfs id', function () { - const ma1 = multiaddr('/ip6/::1/tcp/80/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - const ma2 = multiaddr('/ip6/::1/tcp/443/wss/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct dns address', function () { - const ma1 = multiaddr('/dnsaddr/ipfs.io/ws') - const ma2 = multiaddr('/dnsaddr/ipfs.io/tcp/80/ws') - const ma3 = multiaddr('/dnsaddr/ipfs.io/tcp/80/wss') - - const valid = ws.dialFilter([ma1, ma2, ma3]) - expect(valid.length).to.equal(3) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - expect(valid[2]).to.deep.equal(ma3) - }) - - it('should filter correct dns address with ipfs id', function () { - const ma1 = multiaddr('/dnsaddr/ipfs.io/tcp/80/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - const ma2 = multiaddr('/dnsaddr/ipfs.io/tcp/443/wss/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct dns4 address', function () { - const ma1 = multiaddr('/dns4/ipfs.io/tcp/80/ws') - const ma2 = multiaddr('/dns4/ipfs.io/tcp/443/wss') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct dns6 address', function () { - const ma1 = multiaddr('/dns6/ipfs.io/tcp/80/ws') - const ma2 = multiaddr('/dns6/ipfs.io/tcp/443/wss') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter correct dns6 address with ipfs id', function () { - const ma1 = multiaddr('/dns6/ipfs.io/tcp/80/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - const ma2 = multiaddr('/dns6/ipfs.io/tcp/443/wss/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - - const valid = ws.dialFilter([ma1, ma2]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma2) - }) - - it('should filter mixed addresses', function () { - const ma1 = multiaddr('/dns6/ipfs.io/tcp/80/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - const ma2 = multiaddr('/ip4/127.0.0.1/tcp/9090') - const ma3 = multiaddr('/ip4/127.0.0.1/udp/9090') - const ma4 = multiaddr('/dns6/ipfs.io/ws') - const mh5 = multiaddr('/ip4/127.0.0.1/tcp/9090/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw' + - '/p2p-circuit/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - - const valid = ws.dialFilter([ma1, ma2, ma3, ma4, mh5]) - expect(valid.length).to.equal(2) - expect(valid[0]).to.deep.equal(ma1) - expect(valid[1]).to.deep.equal(ma4) - }) - - it('filter a single addr for this transport', () => { - const ma = multiaddr('/ip4/127.0.0.1/tcp/9090/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw') - - const valid = ws.dialFilter([ma]) - expect(valid.length).to.equal(1) - expect(valid[0]).to.deep.equal(ma) - }) - }) -}) - describe('auto-tls (IPv4)', () => { let ws: Transport let listener: Listener diff --git a/packages/utils/package.json b/packages/utils/package.json index 1c167588a0..af24bed4c7 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -81,12 +81,10 @@ "wherearewe": "^2.0.1" }, "browser": { - "./dist/src/get-thin-waist-addresses.js": "./dist/src/get-thin-waist-addresses.browser.js", - "./dist/src/socket-writer.js": "./dist/src/socket-writer.browser.js" + "./dist/src/get-thin-waist-addresses.js": "./dist/src/get-thin-waist-addresses.browser.js" }, "react-native": { - "./dist/src/get-thin-waist-addresses.js": "./dist/src/get-thin-waist-addresses.js", - "./dist/src/socket-writer.js": "./dist/src/socket-writer.js" + "./dist/src/get-thin-waist-addresses.js": "./dist/src/get-thin-waist-addresses.js" }, "sideEffects": false } diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index db406d747f..a9c5d53496 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -34,6 +34,5 @@ export * from './rate-limiter.js' export * from './repeating-task.js' export * from './stream-pair.js' export * from './stream-utils.js' -export * from './socket-writer.js' export * from './tracked-list.js' export * from './tracked-map.js' diff --git a/packages/utils/src/queue/index.ts b/packages/utils/src/queue/index.ts index 2222043cf8..c5e57afdfa 100644 --- a/packages/utils/src/queue/index.ts +++ b/packages/utils/src/queue/index.ts @@ -99,13 +99,6 @@ export interface QueueEvents - /** - * A job has failed - * - * @deprecated Listen for the 'failure' event instead - it gives more context and is generally more useful, this event will be removed in a future release - */ - error: CustomEvent - /** * Emitted just after `"completed", a job has finished successfully - this * event gives access to the job and it's result diff --git a/packages/utils/src/socket-writer.browser.ts b/packages/utils/src/socket-writer.browser.ts deleted file mode 100644 index 494c7f6a7b..0000000000 --- a/packages/utils/src/socket-writer.browser.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function socketWriter (): void { - throw new Error('Unsupported in browsers') -} diff --git a/packages/utils/src/socket-writer.ts b/packages/utils/src/socket-writer.ts deleted file mode 100644 index 16c9b33f3f..0000000000 --- a/packages/utils/src/socket-writer.ts +++ /dev/null @@ -1,64 +0,0 @@ -import stream from 'node:stream' -import { Uint8ArrayList } from 'uint8arraylist' - -export interface SocketWriter { - /** - * Write any available data into the socket, if the socket's internal write - * buffer has available capacity - */ - pull (): boolean - - /** - * Write data into the socket, returns false if the socket's internal write - * buffer is at capacity - */ - write (data: Uint8Array | Uint8Array[] | Uint8ArrayList): boolean -} - -/** - * @deprecated delete if unused - */ -export function socketWriter (socket: stream.Duplex): SocketWriter { - const queue = new Uint8ArrayList() - - return { - pull (): boolean { - if (socket.writableNeedDrain) { - return false - } - - for (const buf of queue) { - queue.consume(buf.byteLength) - - if (!socket.write(buf)) { - // continue writing after drain event. this is a synchronous operation - // so it will not interleave with the `this.writeToSocket()` - // invocation in this.sendData so all data will be sent in-order - if (queue.byteLength > 0) { - socket.once('drain', () => { - this.pull() - }) - } - - return false - } - } - - return true - }, - - write (data: Uint8Array | Uint8Array[] | Uint8ArrayList): boolean { - if (Array.isArray(data)) { - queue.appendAll(data) - } else { - queue.append(data) - } - - if (socket.writableNeedDrain) { - return false - } - - return this.pull() - } - } -}