Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@libp2p/interface

Package Overview
Dependencies
Maintainers
6
Versions
745
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@libp2p/interface - npm Package Compare versions

Comparing version
0.0.1
to
0.1.0
+236
dist/src/pubsub/index.d.ts
import type { Stream } from '../connection/index.js';
import type { EventEmitter } from '../events.js';
import type { PeerId } from '../peer-id/index.js';
import type { Pushable } from 'it-pushable';
import type { Uint8ArrayList } from 'uint8arraylist';
/**
* On the producing side:
* * Build messages with the signature, key (from may be enough for certain inlineable public key types), from and seqno fields.
*
* On the consuming side:
* * Enforce the fields to be present, reject otherwise.
* * Propagate only if the fields are valid and signature can be verified, reject otherwise.
*/
export declare const StrictSign = "StrictSign";
/**
* On the producing side:
* * Build messages without the signature, key, from and seqno fields.
* * The corresponding protobuf key-value pairs are absent from the marshalled message, not just empty.
*
* On the consuming side:
* * Enforce the fields to be absent, reject otherwise.
* * Propagate only if the fields are absent, reject otherwise.
* * A message_id function will not be able to use the above fields, and should instead rely on the data field. A commonplace strategy is to calculate a hash.
*/
export declare const StrictNoSign = "StrictNoSign";
export type SignaturePolicy = typeof StrictSign | typeof StrictNoSign;
export interface SignedMessage {
type: 'signed';
from: PeerId;
topic: string;
data: Uint8Array;
sequenceNumber: bigint;
signature: Uint8Array;
key: Uint8Array;
}
export interface UnsignedMessage {
type: 'unsigned';
topic: string;
data: Uint8Array;
}
export type Message = SignedMessage | UnsignedMessage;
export interface PubSubRPCMessage {
from?: Uint8Array;
topic?: string;
data?: Uint8Array;
sequenceNumber?: Uint8Array;
signature?: Uint8Array;
key?: Uint8Array;
}
export interface PubSubRPCSubscription {
subscribe?: boolean;
topic?: string;
}
export interface PubSubRPC {
subscriptions: PubSubRPCSubscription[];
messages: PubSubRPCMessage[];
}
export interface PeerStreams extends EventEmitter<PeerStreamEvents> {
id: PeerId;
protocol: string;
outboundStream?: Pushable<Uint8ArrayList>;
inboundStream?: AsyncIterable<Uint8ArrayList>;
isWritable: boolean;
close: () => void;
write: (buf: Uint8Array | Uint8ArrayList) => void;
attachInboundStream: (stream: Stream) => AsyncIterable<Uint8ArrayList>;
attachOutboundStream: (stream: Stream) => Promise<Pushable<Uint8ArrayList>>;
}
export interface PubSubInit {
enabled?: boolean;
multicodecs?: string[];
/**
* defines how signatures should be handled
*/
globalSignaturePolicy?: SignaturePolicy;
/**
* if can relay messages not subscribed
*/
canRelayMessage?: boolean;
/**
* if publish should emit to self, if subscribed
*/
emitSelf?: boolean;
/**
* handle this many incoming pubsub messages concurrently
*/
messageProcessingConcurrency?: number;
/**
* How many parallel incoming streams to allow on the pubsub protocol per-connection
*/
maxInboundStreams?: number;
/**
* How many parallel outgoing streams to allow on the pubsub protocol per-connection
*/
maxOutboundStreams?: number;
}
interface Subscription {
topic: string;
subscribe: boolean;
}
export interface SubscriptionChangeData {
peerId: PeerId;
subscriptions: Subscription[];
}
export interface PubSubEvents {
'subscription-change': CustomEvent<SubscriptionChangeData>;
'message': CustomEvent<Message>;
}
export interface PublishResult {
recipients: PeerId[];
}
export declare enum TopicValidatorResult {
/**
* The message is considered valid, and it should be delivered and forwarded to the network
*/
Accept = "accept",
/**
* The message is neither delivered nor forwarded to the network
*/
Ignore = "ignore",
/**
* The message is considered invalid, and it should be rejected
*/
Reject = "reject"
}
export interface TopicValidatorFn {
(peer: PeerId, message: Message): TopicValidatorResult | Promise<TopicValidatorResult>;
}
export interface PubSub<Events extends Record<string, any> = PubSubEvents> extends EventEmitter<Events> {
/**
* The global signature policy controls whether or not we sill send and receive
* signed or unsigned messages.
*
* Signed messages prevent spoofing message senders and should be preferred to
* using unsigned messages.
*/
globalSignaturePolicy: typeof StrictSign | typeof StrictNoSign;
/**
* A list of multicodecs that contain the pubsub protocol name.
*/
multicodecs: string[];
/**
* Pubsub routers support message validators per topic, which will validate the message
* before its propagations. They are stored in a map where keys are the topic name and
* values are the validators.
*
* @example
*
* ```js
* const topic = 'topic'
* const validateMessage = (msgTopic, msg) => {
* const input = uint8ArrayToString(msg.data)
* const validInputs = ['a', 'b', 'c']
*
* if (!validInputs.includes(input)) {
* throw new Error('no valid input received')
* }
* }
* libp2p.pubsub.topicValidators.set(topic, validateMessage)
* ```
*/
topicValidators: Map<string, TopicValidatorFn>;
getPeers: () => PeerId[];
/**
* Gets a list of topics the node is subscribed to.
*
* ```js
* const topics = libp2p.pubsub.getTopics()
* ```
*/
getTopics: () => string[];
/**
* Subscribes to a pubsub topic.
*
* @example
*
* ```js
* const topic = 'topic'
* const handler = (msg) => {
* if (msg.topic === topic) {
* // msg.data - pubsub data received
* }
* }
*
* libp2p.pubsub.addEventListener('message', handler)
* libp2p.pubsub.subscribe(topic)
* ```
*/
subscribe: (topic: string) => void;
/**
* Unsubscribes from a pubsub topic.
*
* @example
*
* ```js
* const topic = 'topic'
* const handler = (msg) => {
* // msg.data - pubsub data received
* }
*
* libp2p.pubsub.removeEventListener(topic handler)
* libp2p.pubsub.unsubscribe(topic)
* ```
*/
unsubscribe: (topic: string) => void;
/**
* Gets a list of the PeerIds that are subscribed to one topic.
*
* @example
*
* ```js
* const peerIds = libp2p.pubsub.getSubscribers(topic)
* ```
*/
getSubscribers: (topic: string) => PeerId[];
/**
* Publishes messages to the given topic.
*
* @example
*
* ```js
* const topic = 'topic'
* const data = uint8ArrayFromString('data')
*
* await libp2p.pubsub.publish(topic, data)
* ```
*/
publish: (topic: string, data: Uint8Array) => Promise<PublishResult>;
}
export interface PeerStreamEvents {
'stream:inbound': CustomEvent<never>;
'stream:outbound': CustomEvent<never>;
'close': CustomEvent<never>;
}
export {};
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pubsub/index.ts"],"names":[],"mappings":"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"}
/**
* On the producing side:
* * Build messages with the signature, key (from may be enough for certain inlineable public key types), from and seqno fields.
*
* On the consuming side:
* * Enforce the fields to be present, reject otherwise.
* * Propagate only if the fields are valid and signature can be verified, reject otherwise.
*/
export const StrictSign = 'StrictSign';
/**
* On the producing side:
* * Build messages without the signature, key, from and seqno fields.
* * The corresponding protobuf key-value pairs are absent from the marshalled message, not just empty.
*
* On the consuming side:
* * Enforce the fields to be absent, reject otherwise.
* * Propagate only if the fields are absent, reject otherwise.
* * A message_id function will not be able to use the above fields, and should instead rely on the data field. A commonplace strategy is to calculate a hash.
*/
export const StrictNoSign = 'StrictNoSign';
export var TopicValidatorResult;
(function (TopicValidatorResult) {
/**
* The message is considered valid, and it should be delivered and forwarded to the network
*/
TopicValidatorResult["Accept"] = "accept";
/**
* The message is neither delivered nor forwarded to the network
*/
TopicValidatorResult["Ignore"] = "ignore";
/**
* The message is considered invalid, and it should be rejected
*/
TopicValidatorResult["Reject"] = "reject";
})(TopicValidatorResult || (TopicValidatorResult = {}));
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pubsub/index.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAA;AAEtC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAA;AA6G1C,MAAM,CAAN,IAAY,oBAaX;AAbD,WAAY,oBAAoB;IAC9B;;OAEG;IACH,yCAAiB,CAAA;IACjB;;OAEG;IACH,yCAAiB,CAAA;IACjB;;OAEG;IACH,yCAAiB,CAAA;AACnB,CAAC,EAbW,oBAAoB,KAApB,oBAAoB,QAa/B"}
import type { Stream } from '../connection/index.js'
import type { EventEmitter } from '../events.js'
import type { PeerId } from '../peer-id/index.js'
import type { Pushable } from 'it-pushable'
import type { Uint8ArrayList } from 'uint8arraylist'
/**
* On the producing side:
* * Build messages with the signature, key (from may be enough for certain inlineable public key types), from and seqno fields.
*
* On the consuming side:
* * Enforce the fields to be present, reject otherwise.
* * Propagate only if the fields are valid and signature can be verified, reject otherwise.
*/
export const StrictSign = 'StrictSign'
/**
* On the producing side:
* * Build messages without the signature, key, from and seqno fields.
* * The corresponding protobuf key-value pairs are absent from the marshalled message, not just empty.
*
* On the consuming side:
* * Enforce the fields to be absent, reject otherwise.
* * Propagate only if the fields are absent, reject otherwise.
* * A message_id function will not be able to use the above fields, and should instead rely on the data field. A commonplace strategy is to calculate a hash.
*/
export const StrictNoSign = 'StrictNoSign'
export type SignaturePolicy = typeof StrictSign | typeof StrictNoSign
export interface SignedMessage {
type: 'signed'
from: PeerId
topic: string
data: Uint8Array
sequenceNumber: bigint
signature: Uint8Array
key: Uint8Array
}
export interface UnsignedMessage {
type: 'unsigned'
topic: string
data: Uint8Array
}
export type Message = SignedMessage | UnsignedMessage
export interface PubSubRPCMessage {
from?: Uint8Array
topic?: string
data?: Uint8Array
sequenceNumber?: Uint8Array
signature?: Uint8Array
key?: Uint8Array
}
export interface PubSubRPCSubscription {
subscribe?: boolean
topic?: string
}
export interface PubSubRPC {
subscriptions: PubSubRPCSubscription[]
messages: PubSubRPCMessage[]
}
export interface PeerStreams extends EventEmitter<PeerStreamEvents> {
id: PeerId
protocol: string
outboundStream?: Pushable<Uint8ArrayList>
inboundStream?: AsyncIterable<Uint8ArrayList>
isWritable: boolean
close: () => void
write: (buf: Uint8Array | Uint8ArrayList) => void
attachInboundStream: (stream: Stream) => AsyncIterable<Uint8ArrayList>
attachOutboundStream: (stream: Stream) => Promise<Pushable<Uint8ArrayList>>
}
export interface PubSubInit {
enabled?: boolean
multicodecs?: string[]
/**
* defines how signatures should be handled
*/
globalSignaturePolicy?: SignaturePolicy
/**
* if can relay messages not subscribed
*/
canRelayMessage?: boolean
/**
* if publish should emit to self, if subscribed
*/
emitSelf?: boolean
/**
* handle this many incoming pubsub messages concurrently
*/
messageProcessingConcurrency?: number
/**
* How many parallel incoming streams to allow on the pubsub protocol per-connection
*/
maxInboundStreams?: number
/**
* How many parallel outgoing streams to allow on the pubsub protocol per-connection
*/
maxOutboundStreams?: number
}
interface Subscription {
topic: string
subscribe: boolean
}
export interface SubscriptionChangeData {
peerId: PeerId
subscriptions: Subscription[]
}
export interface PubSubEvents {
'subscription-change': CustomEvent<SubscriptionChangeData>
'message': CustomEvent<Message>
}
export interface PublishResult {
recipients: PeerId[]
}
export enum TopicValidatorResult {
/**
* The message is considered valid, and it should be delivered and forwarded to the network
*/
Accept = 'accept',
/**
* The message is neither delivered nor forwarded to the network
*/
Ignore = 'ignore',
/**
* The message is considered invalid, and it should be rejected
*/
Reject = 'reject'
}
export interface TopicValidatorFn {
(peer: PeerId, message: Message): TopicValidatorResult | Promise<TopicValidatorResult>
}
export interface PubSub<Events extends Record<string, any> = PubSubEvents> extends EventEmitter<Events> {
/**
* The global signature policy controls whether or not we sill send and receive
* signed or unsigned messages.
*
* Signed messages prevent spoofing message senders and should be preferred to
* using unsigned messages.
*/
globalSignaturePolicy: typeof StrictSign | typeof StrictNoSign
/**
* A list of multicodecs that contain the pubsub protocol name.
*/
multicodecs: string[]
/**
* Pubsub routers support message validators per topic, which will validate the message
* before its propagations. They are stored in a map where keys are the topic name and
* values are the validators.
*
* @example
*
* ```js
* const topic = 'topic'
* const validateMessage = (msgTopic, msg) => {
* const input = uint8ArrayToString(msg.data)
* const validInputs = ['a', 'b', 'c']
*
* if (!validInputs.includes(input)) {
* throw new Error('no valid input received')
* }
* }
* libp2p.pubsub.topicValidators.set(topic, validateMessage)
* ```
*/
topicValidators: Map<string, TopicValidatorFn>
getPeers: () => PeerId[]
/**
* Gets a list of topics the node is subscribed to.
*
* ```js
* const topics = libp2p.pubsub.getTopics()
* ```
*/
getTopics: () => string[]
/**
* Subscribes to a pubsub topic.
*
* @example
*
* ```js
* const topic = 'topic'
* const handler = (msg) => {
* if (msg.topic === topic) {
* // msg.data - pubsub data received
* }
* }
*
* libp2p.pubsub.addEventListener('message', handler)
* libp2p.pubsub.subscribe(topic)
* ```
*/
subscribe: (topic: string) => void
/**
* Unsubscribes from a pubsub topic.
*
* @example
*
* ```js
* const topic = 'topic'
* const handler = (msg) => {
* // msg.data - pubsub data received
* }
*
* libp2p.pubsub.removeEventListener(topic handler)
* libp2p.pubsub.unsubscribe(topic)
* ```
*/
unsubscribe: (topic: string) => void
/**
* Gets a list of the PeerIds that are subscribed to one topic.
*
* @example
*
* ```js
* const peerIds = libp2p.pubsub.getSubscribers(topic)
* ```
*/
getSubscribers: (topic: string) => PeerId[]
/**
* Publishes messages to the given topic.
*
* @example
*
* ```js
* const topic = 'topic'
* const data = uint8ArrayFromString('data')
*
* await libp2p.pubsub.publish(topic, data)
* ```
*/
publish: (topic: string, data: Uint8Array) => Promise<PublishResult>
}
export interface PeerStreamEvents {
'stream:inbound': CustomEvent<never>
'stream:outbound': CustomEvent<never>
'close': CustomEvent<never>
}
+152
-53

@@ -1,2 +0,1 @@

import type * as Status from './status.js';
import type { AbortOptions } from '../index.js';

@@ -8,32 +7,20 @@ import type { PeerId } from '../peer-id/index.js';

export interface ConnectionTimeline {
/**
* When the connection was opened
*/
open: number;
/**
* When the MultiaddrConnection was upgraded to a Connection - e.g. the type
* of connection encryption and multiplexing was negotiated.
*/
upgraded?: number;
/**
* When the connection was closed.
*/
close?: number;
}
/**
* Outbound conections are opened by the local node, inbound streams are opened by the remote
* Outbound connections are opened by the local node, inbound streams are opened by the remote
*/
export type Direction = 'inbound' | 'outbound';
export interface ConnectionStat {
/**
* Outbound conections are opened by the local node, inbound streams are opened by the remote
*/
direction: Direction;
/**
* Lifecycle times for the connection
*/
timeline: ConnectionTimeline;
/**
* Once a multiplexer has been negotiated for this stream, it will be set on the stat object
*/
multiplexer?: string;
/**
* Once a connection encrypter has been negotiated for this stream, it will be set on the stat object
*/
encryption?: string;
/**
* The current status of the connection
*/
status: keyof typeof Status;
}
export interface StreamTimeline {

@@ -60,18 +47,30 @@ /**

reset?: number;
}
export interface StreamStat {
/**
* Outbound streams are opened by the local node, inbound streams are opened by the remote
* A timestamp of when the stream was aborted
*/
direction: Direction;
/**
* Lifecycle times for the stream
*/
timeline: StreamTimeline;
/**
* Once a protocol has been negotiated for this stream, it will be set on the stat object
*/
protocol?: string;
abort?: number;
}
/**
* The states a stream can be in
*/
export type StreamStatus = 'open' | 'closing' | 'closed' | 'aborted' | 'reset';
/**
* The states the readable end of a stream can be in
*
* ready - the readable end is ready for reading
* closing - the readable end is closing
* closed - the readable end has closed
*/
export type ReadStatus = 'ready' | 'closing' | 'closed';
/**
* The states the writable end of a stream can be in
*
* ready - the writable end is ready for writing
* writing - the writable end is in the process of being written to
* done - the source passed to the `.sink` function yielded all values without error
* closing - the writable end is closing
* closed - the writable end has closed
*/
export type WriteStatus = 'ready' | 'writing' | 'done' | 'closing' | 'closed';
/**
* A Stream is a data channel between two peers that

@@ -93,3 +92,3 @@ * can be written to and read from at both ends.

*/
close: () => void;
close: (options?: AbortOptions) => Promise<void>;
/**

@@ -102,3 +101,3 @@ * Closes the stream for **reading**. If iterating over the source of this stream in a `for await of` loop, it will return (exit the loop) after any buffered data has been consumed.

*/
closeRead: () => void;
closeRead: (options?: AbortOptions) => Promise<void>;
/**

@@ -109,3 +108,3 @@ * Closes the stream for **writing**. If iterating over the source of this stream in a `for await of` loop, it will return (exit the loop) after any buffered data has been consumed.

*/
closeWrite: () => void;
closeWrite: (options?: AbortOptions) => Promise<void>;
/**

@@ -122,10 +121,2 @@ * Closes the stream for **reading** *and* **writing**. This should be called when a *local error* has occurred.

/**
* Closes the stream *immediately* for **reading** *and* **writing**. This should be called when a *remote error* has occurred.
*
* This function is called automatically by the muxer when it receives a `RESET` message from the remote.
*
* The sink will return and the source will throw.
*/
reset: () => void;
/**
* Unique identifier for a stream. Identifiers are not unique across muxers.

@@ -135,9 +126,29 @@ */

/**
* Stats about this stream
* Outbound streams are opened by the local node, inbound streams are opened by the remote
*/
stat: StreamStat;
direction: Direction;
/**
* Lifecycle times for the stream
*/
timeline: StreamTimeline;
/**
* Once a protocol has been negotiated for this stream, it will be set on the stat object
*/
protocol?: string;
/**
* User defined stream metadata
*/
metadata: Record<string, any>;
/**
* The current status of the stream
*/
status: StreamStatus;
/**
* The current status of the readable end of the stream
*/
readStatus: ReadStatus;
/**
* The current status of the writable end of the stream
*/
writeStatus: WriteStatus;
}

@@ -151,3 +162,9 @@ export interface NewStreamOptions extends AbortOptions {

maxOutboundStreams?: number;
/**
* Opt-in to running over a transient connection - one that has time/data limits
* placed on it.
*/
runOnTransientConnection?: boolean;
}
export type ConnectionStatus = 'open' | 'closing' | 'closed';
/**

@@ -160,12 +177,70 @@ * A Connection is a high-level representation of a connection

export interface Connection {
/**
* The unique identifier for this connection
*/
id: string;
stat: ConnectionStat;
/**
* The address of the remote end of the connection
*/
remoteAddr: Multiaddr;
/**
* The id of the peer at the remote end of the connection
*/
remotePeer: PeerId;
/**
* A list of tags applied to this connection
*/
tags: string[];
/**
* A list of open streams on this connection
*/
streams: Stream[];
newStream: (multicodecs: string | string[], options?: NewStreamOptions) => Promise<Stream>;
/**
* Outbound conections are opened by the local node, inbound streams are opened by the remote
*/
direction: Direction;
/**
* Lifecycle times for the connection
*/
timeline: ConnectionTimeline;
/**
* Once a multiplexer has been negotiated for this stream, it will be set on the stat object
*/
multiplexer?: string;
/**
* Once a connection encrypter has been negotiated for this stream, it will be set on the stat object
*/
encryption?: string;
/**
* The current status of the connection
*/
status: ConnectionStatus;
/**
* A transient connection is one that is not expected to be open for very long
* or one that cannot transfer very much data, such as one being used as a
* circuit relay connection. Protocols need to explicitly opt-in to being run
* over transient connections.
*/
transient: boolean;
/**
* Create a new stream on this connection and negotiate one of the passed protocols
*/
newStream: (protocols: string | string[], options?: NewStreamOptions) => Promise<Stream>;
/**
* Add a stream to this connection
*/
addStream: (stream: Stream) => void;
/**
* Remove a stream from this connection
*/
removeStream: (id: string) => void;
close: () => Promise<void>;
/**
* Gracefully close the connection. All queued data will be written to the
* underlying transport.
*/
close: (options?: AbortOptions) => Promise<void>;
/**
* Immediately close the connection, any queued data will be discarded
*/
abort: (err: Error) => void;
}

@@ -183,4 +258,14 @@ export declare const symbol: unique symbol;

export interface MultiaddrConnectionTimeline {
/**
* When the connection was opened
*/
open: number;
/**
* When the MultiaddrConnection was upgraded to a Connection - the type of
* connection encryption and multiplexing was negotiated.
*/
upgraded?: number;
/**
* When the connection was closed.
*/
close?: number;

@@ -194,6 +279,20 @@ }

export interface MultiaddrConnection extends Duplex<AsyncGenerator<Uint8Array>, Source<Uint8Array>, Promise<void>> {
close: (err?: Error) => Promise<void>;
/**
* Gracefully close the connection. All queued data will be written to the
* underlying transport.
*/
close: (options?: AbortOptions) => Promise<void>;
/**
* Immediately close the connection, any queued data will be discarded
*/
abort: (err: Error) => void;
/**
* The address of the remote end of the connection
*/
remoteAddr: Multiaddr;
/**
* When connection lifecycle events occurred
*/
timeline: MultiaddrConnectionTimeline;
}
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection/index.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connection/index.ts"],"names":[],"mappings":"AA6LA,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AAEtD,MAAM,UAAU,YAAY,CAAE,KAAU;IACtC,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AAChD,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connection/index.ts"],"names":[],"mappings":"AA0RA,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AAEtD,MAAM,UAAU,YAAY,CAAE,KAAU;IACtC,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AAChD,CAAC"}

@@ -1,1 +0,1 @@

{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,IAAI,EAAE,MAAM,CAAA;gBAEf,OAAO,GAAE,MAAoC;IAM1D,MAAM,CAAC,QAAQ,CAAC,IAAI,eAAc;IAElC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAY;CACjC;AAED,qBAAa,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAE,SAAQ,KAAK;aAKvE,IAAI,EAAE,MAAM;IAJ9B,SAAgB,KAAK,EAAE,CAAC,CAAA;gBAGtB,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EAC5B,KAAK,CAAC,EAAE,CAAC;CAOZ;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAAoB;IAKxC,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAwB;CAC7C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAC5C,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAA4B;IAKhD,MAAM,CAAC,QAAQ,CAAC,IAAI,iCAAgC;CACrD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;IAChD,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAAgC;IAKpD,MAAM,CAAC,QAAQ,CAAC,IAAI,qCAAoC;CACzD"}
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,IAAI,EAAE,MAAM,CAAA;gBAEf,OAAO,GAAE,MAAoC;IAM1D,MAAM,CAAC,QAAQ,CAAC,IAAI,eAAc;IAElC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAY;CACjC;AAED,qBAAa,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAE,SAAQ,KAAK;aAKvE,IAAI,EAAE,MAAM;IAJ9B,SAAgB,KAAK,EAAE,CAAC,CAAA;gBAGtB,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EAC5B,KAAK,CAAC,EAAE,CAAC;CAOZ;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAAoB;IAKxC,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAwB;CAC7C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAC5C,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAA4B;IAKhD,MAAM,CAAC,QAAQ,CAAC,IAAI,iCAAgC;CACrD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;IAChD,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAAgC;IAKpD,MAAM,CAAC,QAAQ,CAAC,IAAI,qCAAoC;CACzD"}

@@ -1,1 +0,1 @@

{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnB,IAAI,CAAQ;IACZ,IAAI,CAAQ;IAE5B,YAAa,UAAkB,2BAA2B;QACxD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;QAC3B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IAC7B,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,WAAW,CAAA;IAElC,MAAM,CAAU,IAAI,GAAG,SAAS,CAAA;;AAGlC,MAAM,OAAO,SAAiE,SAAQ,KAAK;IAKvE;IAJF,KAAK,CAAG;IAExB,YACE,OAAe,EACC,IAAY,EAC5B,KAAS;QAET,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAQ;QAK5B,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,WAAW,CAAA;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAO,CAAA,CAAC,oEAAoE;IACpG,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACrC,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,iBAAiB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAA;IACtC,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,qBAAqB,CAAA;;AAG9C,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC5C,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,yBAAyB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAA;IAC7C,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,6BAA6B,CAAA;;AAGtD,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAChD,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,6BAA6B;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC,IAAI,CAAA;IACjD,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,iCAAiC,CAAA"}
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnB,IAAI,CAAQ;IACZ,IAAI,CAAQ;IAE5B,YAAa,UAAkB,2BAA2B;QACxD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;QAC3B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IAC7B,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,WAAW,CAAA;IAElC,MAAM,CAAU,IAAI,GAAG,SAAS,CAAA;;AAGlC,MAAM,OAAO,SAAiE,SAAQ,KAAK;IAKvE;IAJF,KAAK,CAAG;IAExB,YACE,OAAe,EACC,IAAY,EAC5B,KAAS;QAET,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAQ;QAK5B,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,WAAW,CAAA;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAO,CAAA,CAAC,oEAAoE;IACpG,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACrC,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,iBAAiB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAA;IACtC,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,qBAAqB,CAAA;;AAG9C,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC5C,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,yBAAyB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAA;IAC7C,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,6BAA6B,CAAA;;AAGtD,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAChD,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,6BAA6B;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC,IAAI,CAAA;IACjD,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,iCAAiC,CAAA"}

@@ -16,3 +16,3 @@ /**

*/
import type { Connection, Stream } from './connection/index.js';
import type { Connection, NewStreamOptions, Stream } from './connection/index.js';
import type { ContentRouting } from './content-routing/index.js';

@@ -463,6 +463,10 @@ import type { EventEmitter } from './events.js';

*/
dialProtocol: (peer: PeerId | Multiaddr | Multiaddr[], protocols: string | string[], options?: AbortOptions) => Promise<Stream>;
dialProtocol: (peer: PeerId | Multiaddr | Multiaddr[], protocols: string | string[], options?: NewStreamOptions) => Promise<Stream>;
/**
* Attempts to gracefully close an open connection to the given peer. If the connection is not closed in the grace period, it will be forcefully closed.
* Attempts to gracefully close an open connection to the given peer. If the
* connection is not closed in the grace period, it will be forcefully closed.
*
* An AbortSignal can optionally be passed to control when the connection is
* forcefully closed.
*
* @example

@@ -474,3 +478,3 @@ *

*/
hangUp: (peer: PeerId | Multiaddr) => Promise<void>;
hangUp: (peer: PeerId | Multiaddr, options?: AbortOptions) => Promise<void>;
/**

@@ -477,0 +481,0 @@ * Sets up [multistream-select routing](https://github.com/multiformats/multistream-select) of protocols to their application handlers. Whenever a stream is opened on one of the provided protocols, the handler will be called. `handle` must be called in order to register a handler and support for a given protocol. This also informs other peers of the protocols you support.

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/D,OAAO,EAAE,MAAM,UAAU,CAAA;IACzB,MAAM,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAA;IACnC,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/C,OAAO,EAAE,MAAM,UAAU,CAAA;IACzB,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAA;IACpC,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/B;;;;;;OAMG;IACH,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB;;OAEG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC1E;AAED,eAAO,MAAM,OAAO,YAAY,CAAA;AAChC,eAAO,MAAM,GAAG,QAAQ,CAAA;AACxB,eAAO,MAAM,SAAS,cAAc,CAAA;AAEpC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,GAAG,OAAO,GAAG,GAAG,OAAO,SAAS,CAAA"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/D,OAAO,EAAE,MAAM,UAAU,CAAA;IACzB,MAAM,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAA;IACnC,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/C,OAAO,EAAE,MAAM,UAAU,CAAA;IACzB,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAA;IACpC,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/B;;;;;;OAMG;IACH,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB;;OAEG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC1E;AAED,eAAO,MAAM,OAAO,YAAY,CAAA;AAChC,eAAO,MAAM,GAAG,QAAQ,CAAA;AACxB,eAAO,MAAM,SAAS,cAAc,CAAA;AAEpC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,GAAG,OAAO,GAAG,GAAG,OAAO,SAAS,CAAA"}

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAA;AAChC,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAA;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAA;AAChC,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAA;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA"}

@@ -1,1 +0,1 @@

{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/peer-store/tags.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,eAAe,CAAA"}
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/peer-store/tags.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,eAAe,CAAA"}

@@ -1,1 +0,1 @@

{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/peer-store/tags.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAA"}
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/peer-store/tags.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAA"}

@@ -1,1 +0,1 @@

{"version":3,"file":"startable.d.ts","sourceRoot":"","sources":["../../src/startable.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,OAAO,CAAA;IAExB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExC;;;;OAIG;IACH,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvC;;;;OAIG;IACH,IAAI,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvC;AAED,wBAAgB,WAAW,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,SAAS,CAEvD;AAED,wBAAsB,KAAK,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1D;AAED,wBAAsB,IAAI,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BzD"}
{"version":3,"file":"startable.d.ts","sourceRoot":"","sources":["../../src/startable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,OAAO,CAAA;IAExB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExC;;;;OAIG;IACH,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvC;;;;OAIG;IACH,IAAI,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvC;AAED,wBAAgB,WAAW,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,SAAS,CAEvD;AAED,wBAAsB,KAAK,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1D;AAED,wBAAsB,IAAI,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BzD"}

@@ -1,1 +0,1 @@

{"version":3,"file":"startable.js","sourceRoot":"","sources":["../../src/startable.ts"],"names":[],"mappings":"AAkDA,MAAM,UAAU,WAAW,CAAE,GAAQ;IACnC,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,CAAA;AACzF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAE,GAAG,IAAW;IACzC,MAAM,UAAU,GAAgB,EAAE,CAAA;IAElC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACrB;KACF;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,EAAE;YACzB,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;SACtB;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC,CAAC,CACH,CAAA;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,EAAE;YACxB,MAAM,CAAC,CAAC,UAAU,EAAE,CAAA;SACrB;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAE,GAAG,IAAW;IACxC,MAAM,UAAU,GAAgB,EAAE,CAAA;IAElC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACrB;KACF;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,EAAE;YACxB,MAAM,CAAC,CAAC,UAAU,EAAE,CAAA;SACrB;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC,CAAC,CACH,CAAA;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE;YACvB,MAAM,CAAC,CAAC,SAAS,EAAE,CAAA;SACpB;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
{"version":3,"file":"startable.js","sourceRoot":"","sources":["../../src/startable.ts"],"names":[],"mappings":"AAiDA,MAAM,UAAU,WAAW,CAAE,GAAQ;IACnC,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,CAAA;AACzF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAE,GAAG,IAAW;IACzC,MAAM,UAAU,GAAgB,EAAE,CAAA;IAElC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACrB;KACF;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,EAAE;YACzB,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;SACtB;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC,CAAC,CACH,CAAA;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,EAAE;YACxB,MAAM,CAAC,CAAC,UAAU,EAAE,CAAA;SACrB;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAE,GAAG,IAAW;IACxC,MAAM,UAAU,GAAgB,EAAE,CAAA;IAElC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACrB;KACF;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,EAAE;YACxB,MAAM,CAAC,CAAC,UAAU,EAAE,CAAA;SACrB;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC,CAAC,CACH,CAAA;IAED,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;QACvB,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE;YACvB,MAAM,CAAC,CAAC,SAAS,EAAE,CAAA;SACpB;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}

@@ -18,2 +18,7 @@ import type { Connection, Stream } from '../connection/index.js';

maxOutboundStreams?: number;
/**
* Opt-in to running over a transient connection - one that has time/data limits
* placed on it.
*/
runOnTransientConnection?: boolean;
}

@@ -20,0 +25,0 @@ export interface StreamHandlerRecord {

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stream-handler/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAEhE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,CAAA;IACtB,OAAO,EAAE,oBAAoB,CAAA;CAC9B"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stream-handler/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAEhE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,CAAA;IACtB,OAAO,EAAE,oBAAoB,CAAA;CAC9B"}

@@ -35,5 +35,9 @@ import type { Direction, Stream } from '../connection/index.js';

*/
close: (err?: Error) => void;
close: (options?: AbortOptions) => Promise<void>;
/**
* Close or abort all tracked streams and stop the muxer
*/
abort: (err: Error) => void;
}
export interface StreamMuxerInit extends AbortOptions {
export interface StreamMuxerInit {
/**

@@ -40,0 +44,0 @@ * A callback function invoked every time an incoming stream is opened

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,KAAK,WAAW,CAAA;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzH;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAEtD;;OAEG;IACH,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAE3C;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAEtC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,KAAK,WAAW,CAAA;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzH;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAEtD;;OAEG;IACH,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhD;;OAEG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAE3C;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAEtC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB"}
import { Uint8ArrayList } from 'uint8arraylist';
import type { Direction, Stream, StreamStat } from '../connection/index.js';
import type { Direction, ReadStatus, Stream, StreamStatus, StreamTimeline, WriteStatus } from '../connection/index.js';
import type { AbortOptions } from '../index.js';
import type { Source } from 'it-stream-types';
interface Logger {
(formatter: any, ...args: any[]): void;
error: (formatter: any, ...args: any[]) => void;
trace: (formatter: any, ...args: any[]) => void;
enabled: boolean;
}
export interface AbstractStreamInit {

@@ -14,6 +21,5 @@ /**

/**
* The maximum allowable data size, any data larger than this will be
* chunked and sent in multiple data messages
* A Logger implementation used to log stream-specific information
*/
maxDataSize: number;
log: Logger;
/**

@@ -27,28 +33,80 @@ * User specific stream metadata

onEnd?: (err?: Error | undefined) => void;
/**
* Invoked when the readable end of the stream is closed
*/
onCloseRead?: () => void;
/**
* Invoked when the writable end of the stream is closed
*/
onCloseWrite?: () => void;
/**
* Invoked when the the stream has been reset by the remote
*/
onReset?: () => void;
/**
* Invoked when the the stream has errored
*/
onAbort?: (err: Error) => void;
/**
* How long to wait in ms for stream data to be written to the underlying
* connection when closing the writable end of the stream. (default: 500)
*/
closeTimeout?: number;
}
export declare abstract class AbstractStream implements Stream {
id: string;
stat: StreamStat;
direction: Direction;
timeline: StreamTimeline;
protocol?: string;
metadata: Record<string, unknown>;
source: AsyncGenerator<Uint8ArrayList, void, unknown>;
private readonly abortController;
private readonly resetController;
private readonly closeController;
private sourceEnded;
private sinkEnded;
private sinkSunk;
status: StreamStatus;
readStatus: ReadStatus;
writeStatus: WriteStatus;
private readonly sinkController;
private readonly sinkEnd;
private endErr;
private readonly streamSource;
private readonly onEnd?;
private readonly maxDataSize;
private readonly onCloseRead?;
private readonly onCloseWrite?;
private readonly onReset?;
private readonly onAbort?;
protected readonly log: Logger;
constructor(init: AbstractStreamInit);
sink(source: Source<Uint8ArrayList | Uint8Array>): Promise<void>;
protected onSourceEnd(err?: Error): void;
protected onSinkEnd(err?: Error): void;
close(): void;
closeRead(): void;
closeWrite(): void;
close(options?: AbortOptions): Promise<void>;
closeRead(options?: AbortOptions): Promise<void>;
closeWrite(options?: AbortOptions): Promise<void>;
/**
* Close immediately for reading and writing and send a reset message (local
* error)
*/
abort(err: Error): void;
/**
* Receive a reset message - close immediately for reading and writing (remote
* error)
*/
reset(): void;
sink(source: Source<Uint8ArrayList | Uint8Array>): Promise<void>;
_closeSinkAndSource(err?: Error): void;
_closeSink(err?: Error): void;
_closeSource(err?: Error): void;
/**
* The remote closed for writing so we should expect to receive no more
* messages
*/
remoteCloseWrite(): void;
/**
* The remote closed for reading so we should not send any more
* messages
*/
remoteCloseRead(): void;
/**
* The underlying muxer has closed, no more messages can be sent or will
* be received, close immediately to free up resources
*/
destroy(): void;
/**
* When an extending class reads data from it's implementation-specific source,

@@ -67,11 +125,11 @@ * call this method to allow the stream consumer to read the data.

*/
abstract sendNewStream(): void | Promise<void>;
abstract sendNewStream(options?: AbortOptions): void | Promise<void>;
/**
* Send a data message to the remote muxer
*/
abstract sendData(buf: Uint8ArrayList): void | Promise<void>;
abstract sendData(buf: Uint8ArrayList, options?: AbortOptions): void | Promise<void>;
/**
* Send a reset message to the remote muxer
*/
abstract sendReset(): void | Promise<void>;
abstract sendReset(options?: AbortOptions): void | Promise<void>;
/**

@@ -81,3 +139,3 @@ * Send a message to the remote muxer, informing them no more data messages

*/
abstract sendCloseWrite(): void | Promise<void>;
abstract sendCloseWrite(options?: AbortOptions): void | Promise<void>;
/**

@@ -87,4 +145,5 @@ * Send a message to the remote muxer, informing them no more data messages

*/
abstract sendCloseRead(): void | Promise<void>;
abstract sendCloseRead(options?: AbortOptions): void | Promise<void>;
}
export {};
//# sourceMappingURL=stream.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/stream.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAa7C,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,SAAS,EAAE,SAAS,CAAA;IAEpB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAElC;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,KAAK,IAAI,CAAA;CAC1C;AAMD,8BAAsB,cAAe,YAAW,MAAM;IAC7C,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,MAAM,EAAE,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAE5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAEvB,IAAI,EAAE,kBAAkB;IAwCrC,SAAS,CAAC,WAAW,CAAE,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI;IAsBzC,SAAS,CAAC,SAAS,CAAE,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI;IAuBvC,KAAK,IAAK,IAAI;IAQd,SAAS,IAAK,IAAI;IAWlB,UAAU,IAAK,IAAI;IA2BnB,KAAK,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IASxB,KAAK,IAAK,IAAI;IAOR,IAAI,CAAE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyGvE;;;OAGG;IACH,UAAU,CAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAIvC;;;OAGG;IACH,oBAAoB,IAAK,MAAM;IAI/B;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAE,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE7D;;OAEG;IACH,QAAQ,CAAC,SAAS,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3C;;;OAGG;IACH,QAAQ,CAAC,cAAc,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEhD;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAChD"}
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/stream.ts"],"names":[],"mappings":"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"}

@@ -1,15 +0,8 @@

// import { logger } from '@libp2p/logger'
import { abortableSource } from 'abortable-iterator';
import { anySignal } from 'any-signal';
import { pushable } from 'it-pushable';
import defer, {} from 'p-defer';
import { Uint8ArrayList } from 'uint8arraylist';
import { CodeError } from '../errors.js';
// const log = logger('libp2p:stream')
const log = () => { };
log.trace = () => { };
log.error = () => { };
const ERR_STREAM_RESET = 'ERR_STREAM_RESET';
const ERR_STREAM_ABORT = 'ERR_STREAM_ABORT';
const ERR_SINK_ENDED = 'ERR_SINK_ENDED';
const ERR_DOUBLE_SINK = 'ERR_DOUBLE_SINK';
const ERR_SINK_INVALID_STATE = 'ERR_SINK_INVALID_STATE';
function isPromise(res) {

@@ -20,44 +13,49 @@ return res != null && typeof res.then === 'function';

id;
stat;
direction;
timeline;
protocol;
metadata;
source;
abortController;
resetController;
closeController;
sourceEnded;
sinkEnded;
sinkSunk;
status;
readStatus;
writeStatus;
sinkController;
sinkEnd;
endErr;
streamSource;
onEnd;
maxDataSize;
onCloseRead;
onCloseWrite;
onReset;
onAbort;
log;
constructor(init) {
this.abortController = new AbortController();
this.resetController = new AbortController();
this.closeController = new AbortController();
this.sourceEnded = false;
this.sinkEnded = false;
this.sinkSunk = false;
this.sinkController = new AbortController();
this.sinkEnd = defer();
this.log = init.log;
// stream status
this.status = 'open';
this.readStatus = 'ready';
this.writeStatus = 'ready';
this.id = init.id;
this.metadata = init.metadata ?? {};
this.stat = {
direction: init.direction,
timeline: {
open: Date.now()
}
this.direction = init.direction;
this.timeline = {
open: Date.now()
};
this.maxDataSize = init.maxDataSize;
this.onEnd = init.onEnd;
this.onCloseRead = init?.onCloseRead;
this.onCloseWrite = init?.onCloseWrite;
this.onReset = init?.onReset;
this.onAbort = init?.onAbort;
this.source = this.streamSource = pushable({
onEnd: () => {
// already sent a reset message
if (this.stat.timeline.reset !== null) {
const res = this.sendCloseRead();
if (isPromise(res)) {
res.catch(err => {
log.error('error while sending close read', err);
});
}
onEnd: (err) => {
if (err != null) {
this.log.trace('source ended with error', err);
}
this.onSourceEnd();
else {
this.log.trace('source ended');
}
this.readStatus = 'closed';
this.onSourceEnd(err);
}

@@ -68,14 +66,56 @@ });

}
async sink(source) {
if (this.writeStatus !== 'ready') {
throw new CodeError(`writable end state is "${this.writeStatus}" not "ready"`, ERR_SINK_INVALID_STATE);
}
try {
this.writeStatus = 'writing';
const options = {
signal: this.sinkController.signal
};
if (this.direction === 'outbound') { // If initiator, open a new stream
const res = this.sendNewStream(options);
if (isPromise(res)) {
await res;
}
}
source = abortableSource(source, this.sinkController.signal, {
returnOnAbort: true
});
this.log.trace('sink reading from source');
for await (let data of source) {
data = data instanceof Uint8Array ? new Uint8ArrayList(data) : data;
const res = this.sendData(data, options);
if (isPromise(res)) { // eslint-disable-line max-depth
await res;
}
}
this.log.trace('sink finished reading from source');
this.writeStatus = 'done';
this.log.trace('sink calling closeWrite');
await this.closeWrite(options);
this.onSinkEnd();
}
catch (err) {
this.log.trace('sink ended with error, calling abort with error', err);
this.abort(err);
throw err;
}
finally {
this.log.trace('resolve sink end');
this.sinkEnd.resolve();
}
}
onSourceEnd(err) {
if (this.sourceEnded) {
if (this.timeline.closeRead != null) {
return;
}
this.stat.timeline.closeRead = Date.now();
this.sourceEnded = true;
log.trace('%s stream %s source end - err: %o', this.stat.direction, this.id, err);
this.timeline.closeRead = Date.now();
if (err != null && this.endErr == null) {
this.endErr = err;
}
if (this.sinkEnded) {
this.stat.timeline.close = Date.now();
this.onCloseRead?.();
if (this.timeline.closeWrite != null) {
this.log.trace('source and sink ended');
this.timeline.close = Date.now();
if (this.onEnd != null) {

@@ -85,15 +125,18 @@ this.onEnd(this.endErr);

}
else {
this.log.trace('source ended, waiting for sink to end');
}
}
onSinkEnd(err) {
if (this.sinkEnded) {
if (this.timeline.closeWrite != null) {
return;
}
this.stat.timeline.closeWrite = Date.now();
this.sinkEnded = true;
log.trace('%s stream %s sink end - err: %o', this.stat.direction, this.id, err);
this.timeline.closeWrite = Date.now();
if (err != null && this.endErr == null) {
this.endErr = err;
}
if (this.sourceEnded) {
this.stat.timeline.close = Date.now();
this.onCloseWrite?.();
if (this.timeline.closeRead != null) {
this.log.trace('sink and source ended');
this.timeline.close = Date.now();
if (this.onEnd != null) {

@@ -103,141 +146,154 @@ this.onEnd(this.endErr);

}
else {
this.log.trace('sink ended, waiting for source to end');
}
}
// Close for both Reading and Writing
close() {
log.trace('%s stream %s close', this.stat.direction, this.id);
this.closeRead();
this.closeWrite();
async close(options) {
this.log.trace('closing gracefully');
this.status = 'closing';
await Promise.all([
this.closeRead(options),
this.closeWrite(options)
]);
this.status = 'closed';
this.log.trace('closed gracefully');
}
// Close for reading
closeRead() {
log.trace('%s stream %s closeRead', this.stat.direction, this.id);
if (this.sourceEnded) {
async closeRead(options = {}) {
if (this.readStatus === 'closing' || this.readStatus === 'closed') {
return;
}
this.streamSource.end();
this.log.trace('closing readable end of stream with starting read status "%s"', this.readStatus);
const readStatus = this.readStatus;
this.readStatus = 'closing';
if (readStatus === 'ready') {
this.log.trace('ending internal source queue');
this.streamSource.end();
}
if (this.status !== 'reset' && this.status !== 'aborted') {
this.log.trace('send close read to remote');
await this.sendCloseRead(options);
}
this.log.trace('closed readable end of stream');
}
// Close for writing
closeWrite() {
log.trace('%s stream %s closeWrite', this.stat.direction, this.id);
if (this.sinkEnded) {
async closeWrite(options = {}) {
if (this.writeStatus === 'closing' || this.writeStatus === 'closed') {
return;
}
this.closeController.abort();
try {
// need to call this here as the sink method returns in the catch block
// when the close controller is aborted
const res = this.sendCloseWrite();
if (isPromise(res)) {
res.catch(err => {
log.error('error while sending close write', err);
this.log.trace('closing writable end of stream with starting write status "%s"', this.writeStatus);
const writeStatus = this.writeStatus;
if (this.writeStatus === 'ready') {
this.log.trace('sink was never sunk, sink an empty array');
await this.sink([]);
}
this.writeStatus = 'closing';
if (writeStatus === 'writing') {
// stop reading from the source passed to `.sink` in the microtask queue
// - this lets any data queued by the user in the current tick get read
// before we exit
await new Promise((resolve, reject) => {
queueMicrotask(() => {
this.log.trace('aborting source passed to .sink');
this.sinkController.abort();
this.sinkEnd.promise.then(resolve, reject);
});
}
});
}
catch (err) {
log.trace('%s stream %s error sending close', this.stat.direction, this.id, err);
if (this.status !== 'reset' && this.status !== 'aborted') {
this.log.trace('send close write to remote');
await this.sendCloseWrite(options);
}
this.onSinkEnd();
this.writeStatus = 'closed';
this.log.trace('closed writable end of stream');
}
// Close for reading and writing (local error)
/**
* Close immediately for reading and writing and send a reset message (local
* error)
*/
abort(err) {
log.trace('%s stream %s abort', this.stat.direction, this.id, err);
// End the source with the passed error
this.streamSource.end(err);
this.abortController.abort();
this.onSinkEnd(err);
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
return;
}
this.log('abort with error', err);
// try to send a reset message
this.log('try to send reset to remote');
const res = this.sendReset();
if (isPromise(res)) {
res.catch((err) => {
this.log.error('error sending reset message', err);
});
}
this.status = 'aborted';
this.timeline.abort = Date.now();
this._closeSinkAndSource(err);
this.onAbort?.(err);
}
// Close immediately for reading and writing (remote error)
/**
* Receive a reset message - close immediately for reading and writing (remote
* error)
*/
reset() {
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
return;
}
const err = new CodeError('stream reset', ERR_STREAM_RESET);
this.resetController.abort();
this.streamSource.end(err);
this.status = 'reset';
this._closeSinkAndSource(err);
this.onReset?.();
}
_closeSinkAndSource(err) {
this._closeSink(err);
this._closeSource(err);
}
_closeSink(err) {
// if the sink function is running, cause it to end
if (this.writeStatus === 'writing') {
this.log.trace('end sink source');
this.sinkController.abort();
}
this.onSinkEnd(err);
}
async sink(source) {
if (this.sinkSunk) {
throw new CodeError('sink already called on stream', ERR_DOUBLE_SINK);
}
this.sinkSunk = true;
if (this.sinkEnded) {
throw new CodeError('stream closed for writing', ERR_SINK_ENDED);
}
const signal = anySignal([
this.abortController.signal,
this.resetController.signal,
this.closeController.signal
]);
try {
source = abortableSource(source, signal);
if (this.stat.direction === 'outbound') { // If initiator, open a new stream
const res = this.sendNewStream();
if (isPromise(res)) {
await res;
}
}
for await (let data of source) {
while (data.length > 0) {
if (data.length <= this.maxDataSize) {
const res = this.sendData(data instanceof Uint8Array ? new Uint8ArrayList(data) : data);
if (isPromise(res)) { // eslint-disable-line max-depth
await res;
}
break;
}
data = data instanceof Uint8Array ? new Uint8ArrayList(data) : data;
const res = this.sendData(data.sublist(0, this.maxDataSize));
if (isPromise(res)) {
await res;
}
data.consume(this.maxDataSize);
}
}
}
catch (err) {
if (err.type === 'aborted' && err.message === 'The operation was aborted') {
if (this.closeController.signal.aborted) {
return;
}
if (this.resetController.signal.aborted) {
err.message = 'stream reset';
err.code = ERR_STREAM_RESET;
}
if (this.abortController.signal.aborted) {
err.message = 'stream aborted';
err.code = ERR_STREAM_ABORT;
}
}
// Send no more data if this stream was remotely reset
if (err.code === ERR_STREAM_RESET) {
log.trace('%s stream %s reset', this.stat.direction, this.id);
}
else {
log.trace('%s stream %s error', this.stat.direction, this.id, err);
try {
const res = this.sendReset();
if (isPromise(res)) {
await res;
}
this.stat.timeline.reset = Date.now();
}
catch (err) {
log.trace('%s stream %s error sending reset', this.stat.direction, this.id, err);
}
}
_closeSource(err) {
// if the source is not ending, end it
if (this.readStatus !== 'closing' && this.readStatus !== 'closed') {
this.log.trace('ending source with %d bytes to be read by consumer', this.streamSource.readableLength);
this.readStatus = 'closing';
this.streamSource.end(err);
this.onSinkEnd(err);
throw err;
}
finally {
signal.clear();
}
/**
* The remote closed for writing so we should expect to receive no more
* messages
*/
remoteCloseWrite() {
if (this.readStatus === 'closing' || this.readStatus === 'closed') {
this.log('received remote close write but local source is already closed');
return;
}
try {
const res = this.sendCloseWrite();
if (isPromise(res)) {
await res;
}
this.log.trace('remote close write');
this._closeSource();
}
/**
* The remote closed for reading so we should not send any more
* messages
*/
remoteCloseRead() {
if (this.writeStatus === 'closing' || this.writeStatus === 'closed') {
this.log('received remote close read but local sink is already closed');
return;
}
catch (err) {
log.trace('%s stream %s error sending close', this.stat.direction, this.id, err);
this.log.trace('remote close read');
this._closeSink();
}
/**
* The underlying muxer has closed, no more messages can be sent or will
* be received, close immediately to free up resources
*/
destroy() {
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
this.log('received destroy but we are already closed');
return;
}
this.onSinkEnd();
this.log.trace('muxer destroyed');
this._closeSinkAndSource();
}

@@ -244,0 +300,0 @@ /**

@@ -1,1 +0,1 @@

{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/stream-muxer/stream.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/stream-muxer/stream.ts"],"names":[],"mappings":"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"}

@@ -85,2 +85,7 @@ import type { Connection, MultiaddrConnection } from '../connection/index.js';

muxerFactory?: StreamMuxerFactory;
/**
* The passed MultiaddrConnection has limits place on duration and/or data
* transfer amounts so is not expected to be open for very long.
*/
transient?: boolean;
}

@@ -87,0 +92,0 @@ export interface Upgrader {

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;IAC3B,OAAO,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,QAAS,SAAQ,YAAY,CAAC,cAAc,CAAC;IAC5D;;OAEG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C;;OAEG;IACH,QAAQ,EAAE,MAAM,SAAS,EAAE,CAAA;IAC3B;;;;OAIG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAED,eAAO,MAAM,MAAM,eAAkC,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE;AAErE,MAAM,WAAW,eAAe;IAAG,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;CAAE;AAE3E,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAE5B;;OAEG;IACH,CAAC,MAAM,CAAC,EAAE,IAAI,CAAA;IAEd;;OAEG;IACH,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAElE;;OAEG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,QAAQ,CAAA;IAE5D;;OAEG;IACH,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,wBAAgB,WAAW,CAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,SAAS,CAE3D;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB;;OAEG;IACH,SAAS,IAAI;IAEb;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAClC;AAED,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,eAAe,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAE7F;;OAEG;IACH,cAAc,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CAC7F"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transport/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;IAC3B,OAAO,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,QAAS,SAAQ,YAAY,CAAC,cAAc,CAAC;IAC5D;;OAEG;IACH,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C;;OAEG;IACH,QAAQ,EAAE,MAAM,SAAS,EAAE,CAAA;IAC3B;;;;OAIG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAED,eAAO,MAAM,MAAM,eAAkC,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE;AAErE,MAAM,WAAW,eAAe;IAAG,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;CAAE;AAE3E,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAE5B;;OAEG;IACH,CAAC,MAAM,CAAC,EAAE,IAAI,CAAA;IAEd;;OAEG;IACH,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAElE;;OAEG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,QAAQ,CAAA;IAE5D;;OAEG;IACH,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,wBAAgB,WAAW,CAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,SAAS,CAE3D;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB;;OAEG;IACH,SAAS,IAAI;IAEb;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IAEjC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,eAAe,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAE7F;;OAEG;IACH,cAAc,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;CAC7F"}
{
"name": "@libp2p/interface",
"version": "0.0.1",
"version": "0.1.0",
"description": "The interface implemented by a libp2p node",

@@ -59,6 +59,2 @@ "license": "Apache-2.0 OR MIT",

},
"./connection/status": {
"types": "./dist/src/connection/status.d.ts",
"import": "./dist/src/connection/status.js"
},
"./content-routing": {

@@ -116,2 +112,6 @@ "types": "./dist/src/content-routing/index.d.ts",

},
"./pubsub": {
"types": "./dist/src/pubsub/index.d.ts",
"import": "./dist/src/pubsub/index.js"
},
"./record": {

@@ -164,6 +164,6 @@ "types": "./dist/src/record/index.d.ts",

"abortable-iterator": "^5.0.1",
"any-signal": "^4.1.1",
"it-pushable": "^3.1.3",
"it-pushable": "^3.2.0",
"it-stream-types": "^2.0.1",
"multiformats": "^12.0.1",
"p-defer": "^4.0.0",
"uint8arraylist": "^2.4.3"

@@ -173,9 +173,6 @@ },

"@types/sinon": "^10.0.15",
"aegir": "^39.0.10",
"aegir": "^40.0.1",
"sinon": "^15.1.2",
"sinon-ts": "^1.0.0"
},
"typedoc": {
"entryPoint": "./src/index.ts"
}
}

@@ -1,2 +0,1 @@

import type * as Status from './status.js'
import type { AbortOptions } from '../index.js'

@@ -9,39 +8,24 @@ import type { PeerId } from '../peer-id/index.js'

export interface ConnectionTimeline {
open: number
upgraded?: number
close?: number
}
/**
* Outbound conections are opened by the local node, inbound streams are opened by the remote
*/
export type Direction = 'inbound' | 'outbound'
export interface ConnectionStat {
/**
* Outbound conections are opened by the local node, inbound streams are opened by the remote
* When the connection was opened
*/
direction: Direction
open: number
/**
* Lifecycle times for the connection
* When the MultiaddrConnection was upgraded to a Connection - e.g. the type
* of connection encryption and multiplexing was negotiated.
*/
timeline: ConnectionTimeline
upgraded?: number
/**
* Once a multiplexer has been negotiated for this stream, it will be set on the stat object
* When the connection was closed.
*/
multiplexer?: string
close?: number
}
/**
* Once a connection encrypter has been negotiated for this stream, it will be set on the stat object
*/
encryption?: string
/**
* Outbound connections are opened by the local node, inbound streams are opened by the remote
*/
export type Direction = 'inbound' | 'outbound'
/**
* The current status of the connection
*/
status: keyof typeof Status
}
export interface StreamTimeline {

@@ -72,22 +56,35 @@ /**

reset?: number
}
export interface StreamStat {
/**
* Outbound streams are opened by the local node, inbound streams are opened by the remote
* A timestamp of when the stream was aborted
*/
direction: Direction
abort?: number
}
/**
* Lifecycle times for the stream
*/
timeline: StreamTimeline
/**
* The states a stream can be in
*/
export type StreamStatus = 'open' | 'closing' | 'closed' | 'aborted' | 'reset'
/**
* Once a protocol has been negotiated for this stream, it will be set on the stat object
*/
protocol?: string
}
/**
* The states the readable end of a stream can be in
*
* ready - the readable end is ready for reading
* closing - the readable end is closing
* closed - the readable end has closed
*/
export type ReadStatus = 'ready' | 'closing' | 'closed'
/**
* The states the writable end of a stream can be in
*
* ready - the writable end is ready for writing
* writing - the writable end is in the process of being written to
* done - the source passed to the `.sink` function yielded all values without error
* closing - the writable end is closing
* closed - the writable end has closed
*/
export type WriteStatus = 'ready' | 'writing' | 'done' | 'closing' | 'closed'
/**
* A Stream is a data channel between two peers that

@@ -109,3 +106,3 @@ * can be written to and read from at both ends.

*/
close: () => void
close: (options?: AbortOptions) => Promise<void>

@@ -119,3 +116,3 @@ /**

*/
closeRead: () => void
closeRead: (options?: AbortOptions) => Promise<void>

@@ -127,3 +124,3 @@ /**

*/
closeWrite: () => void
closeWrite: (options?: AbortOptions) => Promise<void>

@@ -142,24 +139,40 @@ /**

/**
* Closes the stream *immediately* for **reading** *and* **writing**. This should be called when a *remote error* has occurred.
*
* This function is called automatically by the muxer when it receives a `RESET` message from the remote.
*
* The sink will return and the source will throw.
* Unique identifier for a stream. Identifiers are not unique across muxers.
*/
reset: () => void
id: string
/**
* Unique identifier for a stream. Identifiers are not unique across muxers.
* Outbound streams are opened by the local node, inbound streams are opened by the remote
*/
id: string
direction: Direction
/**
* Stats about this stream
* Lifecycle times for the stream
*/
stat: StreamStat
timeline: StreamTimeline
/**
* Once a protocol has been negotiated for this stream, it will be set on the stat object
*/
protocol?: string
/**
* User defined stream metadata
*/
metadata: Record<string, any>
/**
* The current status of the stream
*/
status: StreamStatus
/**
* The current status of the readable end of the stream
*/
readStatus: ReadStatus
/**
* The current status of the writable end of the stream
*/
writeStatus: WriteStatus
}

@@ -174,4 +187,12 @@

maxOutboundStreams?: number
/**
* Opt-in to running over a transient connection - one that has time/data limits
* placed on it.
*/
runOnTransientConnection?: boolean
}
export type ConnectionStatus = 'open' | 'closing' | 'closed'
/**

@@ -184,13 +205,85 @@ * A Connection is a high-level representation of a connection

export interface Connection {
/**
* The unique identifier for this connection
*/
id: string
stat: ConnectionStat
/**
* The address of the remote end of the connection
*/
remoteAddr: Multiaddr
/**
* The id of the peer at the remote end of the connection
*/
remotePeer: PeerId
/**
* A list of tags applied to this connection
*/
tags: string[]
/**
* A list of open streams on this connection
*/
streams: Stream[]
newStream: (multicodecs: string | string[], options?: NewStreamOptions) => Promise<Stream>
/**
* Outbound conections are opened by the local node, inbound streams are opened by the remote
*/
direction: Direction
/**
* Lifecycle times for the connection
*/
timeline: ConnectionTimeline
/**
* Once a multiplexer has been negotiated for this stream, it will be set on the stat object
*/
multiplexer?: string
/**
* Once a connection encrypter has been negotiated for this stream, it will be set on the stat object
*/
encryption?: string
/**
* The current status of the connection
*/
status: ConnectionStatus
/**
* A transient connection is one that is not expected to be open for very long
* or one that cannot transfer very much data, such as one being used as a
* circuit relay connection. Protocols need to explicitly opt-in to being run
* over transient connections.
*/
transient: boolean
/**
* Create a new stream on this connection and negotiate one of the passed protocols
*/
newStream: (protocols: string | string[], options?: NewStreamOptions) => Promise<Stream>
/**
* Add a stream to this connection
*/
addStream: (stream: Stream) => void
/**
* Remove a stream from this connection
*/
removeStream: (id: string) => void
close: () => Promise<void>
/**
* Gracefully close the connection. All queued data will be written to the
* underlying transport.
*/
close: (options?: AbortOptions) => Promise<void>
/**
* Immediately close the connection, any queued data will be discarded
*/
abort: (err: Error) => void
}

@@ -205,3 +298,2 @@

export interface ConnectionProtector {
/**

@@ -216,4 +308,16 @@ * Takes a given Connection and creates a private encryption stream

export interface MultiaddrConnectionTimeline {
/**
* When the connection was opened
*/
open: number
/**
* When the MultiaddrConnection was upgraded to a Connection - the type of
* connection encryption and multiplexing was negotiated.
*/
upgraded?: number
/**
* When the connection was closed.
*/
close?: number

@@ -228,5 +332,22 @@ }

export interface MultiaddrConnection extends Duplex<AsyncGenerator<Uint8Array>, Source<Uint8Array>, Promise<void>> {
close: (err?: Error) => Promise<void>
/**
* Gracefully close the connection. All queued data will be written to the
* underlying transport.
*/
close: (options?: AbortOptions) => Promise<void>
/**
* Immediately close the connection, any queued data will be discarded
*/
abort: (err: Error) => void
/**
* The address of the remote end of the connection
*/
remoteAddr: Multiaddr
/**
* When connection lifecycle events occurred
*/
timeline: MultiaddrConnectionTimeline
}

@@ -1,2 +0,1 @@

/**

@@ -3,0 +2,0 @@ * When this error is thrown it means an operation was aborted,

@@ -17,3 +17,3 @@ /**

import type { Connection, Stream } from './connection/index.js'
import type { Connection, NewStreamOptions, Stream } from './connection/index.js'
import type { ContentRouting } from './content-routing/index.js'

@@ -507,7 +507,11 @@ import type { EventEmitter } from './events.js'

*/
dialProtocol: (peer: PeerId | Multiaddr | Multiaddr[], protocols: string | string[], options?: AbortOptions) => Promise<Stream>
dialProtocol: (peer: PeerId | Multiaddr | Multiaddr[], protocols: string | string[], options?: NewStreamOptions) => Promise<Stream>
/**
* Attempts to gracefully close an open connection to the given peer. If the connection is not closed in the grace period, it will be forcefully closed.
* Attempts to gracefully close an open connection to the given peer. If the
* connection is not closed in the grace period, it will be forcefully closed.
*
* An AbortSignal can optionally be passed to control when the connection is
* forcefully closed.
*
* @example

@@ -519,3 +523,3 @@ *

*/
hangUp: (peer: PeerId | Multiaddr) => Promise<void>
hangUp: (peer: PeerId | Multiaddr, options?: AbortOptions) => Promise<void>

@@ -522,0 +526,0 @@ /**

@@ -1,2 +0,1 @@

export interface PublicKey {

@@ -3,0 +2,0 @@ readonly bytes: Uint8Array

@@ -1,2 +0,1 @@

export const KEEP_ALIVE = 'keep-alive'

@@ -1,2 +0,1 @@

/**

@@ -3,0 +2,0 @@ * Implemented by components that have a lifecycle

@@ -22,2 +22,8 @@ import type { Connection, Stream } from '../connection/index.js'

maxOutboundStreams?: number
/**
* Opt-in to running over a transient connection - one that has time/data limits
* placed on it.
*/
runOnTransientConnection?: boolean
}

@@ -24,0 +30,0 @@

@@ -40,6 +40,11 @@ import type { Direction, Stream } from '../connection/index.js'

*/
close: (err?: Error) => void
close: (options?: AbortOptions) => Promise<void>
/**
* Close or abort all tracked streams and stop the muxer
*/
abort: (err: Error) => void
}
export interface StreamMuxerInit extends AbortOptions {
export interface StreamMuxerInit {
/**

@@ -46,0 +51,0 @@ * A callback function invoked every time an incoming stream is opened

@@ -1,20 +0,19 @@

// import { logger } from '@libp2p/logger'
import { abortableSource } from 'abortable-iterator'
import { anySignal } from 'any-signal'
import { type Pushable, pushable } from 'it-pushable'
import defer, { type DeferredPromise } from 'p-defer'
import { Uint8ArrayList } from 'uint8arraylist'
import { CodeError } from '../errors.js'
import type { Direction, Stream, StreamStat } from '../connection/index.js'
import type { Direction, ReadStatus, Stream, StreamStatus, StreamTimeline, WriteStatus } from '../connection/index.js'
import type { AbortOptions } from '../index.js'
import type { Source } from 'it-stream-types'
// const log = logger('libp2p:stream')
interface Logger {
(formatter: any, ...args: any[]): void
error: (formatter: any, ...args: any[]) => void
trace: (formatter: any, ...args: any[]) => void
enabled: boolean
}
const log: any = () => {}
log.trace = () => {}
log.error = () => {}
const ERR_STREAM_RESET = 'ERR_STREAM_RESET'
const ERR_STREAM_ABORT = 'ERR_STREAM_ABORT'
const ERR_SINK_ENDED = 'ERR_SINK_ENDED'
const ERR_DOUBLE_SINK = 'ERR_DOUBLE_SINK'
const ERR_SINK_INVALID_STATE = 'ERR_SINK_INVALID_STATE'

@@ -33,6 +32,5 @@ export interface AbstractStreamInit {

/**
* The maximum allowable data size, any data larger than this will be
* chunked and sent in multiple data messages
* A Logger implementation used to log stream-specific information
*/
maxDataSize: number
log: Logger

@@ -48,2 +46,28 @@ /**

onEnd?: (err?: Error | undefined) => void
/**
* Invoked when the readable end of the stream is closed
*/
onCloseRead?: () => void
/**
* Invoked when the writable end of the stream is closed
*/
onCloseWrite?: () => void
/**
* Invoked when the the stream has been reset by the remote
*/
onReset?: () => void
/**
* Invoked when the the stream has errored
*/
onAbort?: (err: Error) => void
/**
* How long to wait in ms for stream data to be written to the underlying
* connection when closing the writable end of the stream. (default: 500)
*/
closeTimeout?: number
}

@@ -57,50 +81,56 @@

public id: string
public stat: StreamStat
public direction: Direction
public timeline: StreamTimeline
public protocol?: string
public metadata: Record<string, unknown>
public source: AsyncGenerator<Uint8ArrayList, void, unknown>
public status: StreamStatus
public readStatus: ReadStatus
public writeStatus: WriteStatus
private readonly abortController: AbortController
private readonly resetController: AbortController
private readonly closeController: AbortController
private sourceEnded: boolean
private sinkEnded: boolean
private sinkSunk: boolean
private readonly sinkController: AbortController
private readonly sinkEnd: DeferredPromise<void>
private endErr: Error | undefined
private readonly streamSource: Pushable<Uint8ArrayList>
private readonly onEnd?: (err?: Error | undefined) => void
private readonly maxDataSize: number
private readonly onCloseRead?: () => void
private readonly onCloseWrite?: () => void
private readonly onReset?: () => void
private readonly onAbort?: (err: Error) => void
protected readonly log: Logger
constructor (init: AbstractStreamInit) {
this.abortController = new AbortController()
this.resetController = new AbortController()
this.closeController = new AbortController()
this.sourceEnded = false
this.sinkEnded = false
this.sinkSunk = false
this.sinkController = new AbortController()
this.sinkEnd = defer()
this.log = init.log
// stream status
this.status = 'open'
this.readStatus = 'ready'
this.writeStatus = 'ready'
this.id = init.id
this.metadata = init.metadata ?? {}
this.stat = {
direction: init.direction,
timeline: {
open: Date.now()
}
this.direction = init.direction
this.timeline = {
open: Date.now()
}
this.maxDataSize = init.maxDataSize
this.onEnd = init.onEnd
this.onCloseRead = init?.onCloseRead
this.onCloseWrite = init?.onCloseWrite
this.onReset = init?.onReset
this.onAbort = init?.onAbort
this.source = this.streamSource = pushable<Uint8ArrayList>({
onEnd: () => {
// already sent a reset message
if (this.stat.timeline.reset !== null) {
const res = this.sendCloseRead()
if (isPromise(res)) {
res.catch(err => {
log.error('error while sending close read', err)
})
}
onEnd: (err) => {
if (err != null) {
this.log.trace('source ended with error', err)
} else {
this.log.trace('source ended')
}
this.onSourceEnd()
this.readStatus = 'closed'
this.onSourceEnd(err)
}

@@ -113,10 +143,61 @@ })

async sink (source: Source<Uint8ArrayList | Uint8Array>): Promise<void> {
if (this.writeStatus !== 'ready') {
throw new CodeError(`writable end state is "${this.writeStatus}" not "ready"`, ERR_SINK_INVALID_STATE)
}
try {
this.writeStatus = 'writing'
const options: AbortOptions = {
signal: this.sinkController.signal
}
if (this.direction === 'outbound') { // If initiator, open a new stream
const res = this.sendNewStream(options)
if (isPromise(res)) {
await res
}
}
source = abortableSource(source, this.sinkController.signal, {
returnOnAbort: true
})
this.log.trace('sink reading from source')
for await (let data of source) {
data = data instanceof Uint8Array ? new Uint8ArrayList(data) : data
const res = this.sendData(data, options)
if (isPromise(res)) { // eslint-disable-line max-depth
await res
}
}
this.log.trace('sink finished reading from source')
this.writeStatus = 'done'
this.log.trace('sink calling closeWrite')
await this.closeWrite(options)
this.onSinkEnd()
} catch (err: any) {
this.log.trace('sink ended with error, calling abort with error', err)
this.abort(err)
throw err
} finally {
this.log.trace('resolve sink end')
this.sinkEnd.resolve()
}
}
protected onSourceEnd (err?: Error): void {
if (this.sourceEnded) {
if (this.timeline.closeRead != null) {
return
}
this.stat.timeline.closeRead = Date.now()
this.sourceEnded = true
log.trace('%s stream %s source end - err: %o', this.stat.direction, this.id, err)
this.timeline.closeRead = Date.now()

@@ -127,8 +208,13 @@ if (err != null && this.endErr == null) {

if (this.sinkEnded) {
this.stat.timeline.close = Date.now()
this.onCloseRead?.()
if (this.timeline.closeWrite != null) {
this.log.trace('source and sink ended')
this.timeline.close = Date.now()
if (this.onEnd != null) {
this.onEnd(this.endErr)
}
} else {
this.log.trace('source ended, waiting for sink to end')
}

@@ -138,9 +224,7 @@ }

protected onSinkEnd (err?: Error): void {
if (this.sinkEnded) {
if (this.timeline.closeWrite != null) {
return
}
this.stat.timeline.closeWrite = Date.now()
this.sinkEnded = true
log.trace('%s stream %s sink end - err: %o', this.stat.direction, this.id, err)
this.timeline.closeWrite = Date.now()

@@ -151,8 +235,13 @@ if (err != null && this.endErr == null) {

if (this.sourceEnded) {
this.stat.timeline.close = Date.now()
this.onCloseWrite?.()
if (this.timeline.closeRead != null) {
this.log.trace('sink and source ended')
this.timeline.close = Date.now()
if (this.onEnd != null) {
this.onEnd(this.endErr)
}
} else {
this.log.trace('sink ended, waiting for source to end')
}

@@ -162,170 +251,190 @@ }

// Close for both Reading and Writing
close (): void {
log.trace('%s stream %s close', this.stat.direction, this.id)
async close (options?: AbortOptions): Promise<void> {
this.log.trace('closing gracefully')
this.closeRead()
this.closeWrite()
}
this.status = 'closing'
// Close for reading
closeRead (): void {
log.trace('%s stream %s closeRead', this.stat.direction, this.id)
await Promise.all([
this.closeRead(options),
this.closeWrite(options)
])
if (this.sourceEnded) {
return
}
this.status = 'closed'
this.streamSource.end()
this.log.trace('closed gracefully')
}
// Close for writing
closeWrite (): void {
log.trace('%s stream %s closeWrite', this.stat.direction, this.id)
if (this.sinkEnded) {
async closeRead (options: AbortOptions = {}): Promise<void> {
if (this.readStatus === 'closing' || this.readStatus === 'closed') {
return
}
this.closeController.abort()
this.log.trace('closing readable end of stream with starting read status "%s"', this.readStatus)
try {
// need to call this here as the sink method returns in the catch block
// when the close controller is aborted
const res = this.sendCloseWrite()
const readStatus = this.readStatus
this.readStatus = 'closing'
if (isPromise(res)) {
res.catch(err => {
log.error('error while sending close write', err)
})
}
} catch (err) {
log.trace('%s stream %s error sending close', this.stat.direction, this.id, err)
if (readStatus === 'ready') {
this.log.trace('ending internal source queue')
this.streamSource.end()
}
this.onSinkEnd()
}
if (this.status !== 'reset' && this.status !== 'aborted') {
this.log.trace('send close read to remote')
await this.sendCloseRead(options)
}
// Close for reading and writing (local error)
abort (err: Error): void {
log.trace('%s stream %s abort', this.stat.direction, this.id, err)
// End the source with the passed error
this.streamSource.end(err)
this.abortController.abort()
this.onSinkEnd(err)
this.log.trace('closed readable end of stream')
}
// Close immediately for reading and writing (remote error)
reset (): void {
const err = new CodeError('stream reset', ERR_STREAM_RESET)
this.resetController.abort()
this.streamSource.end(err)
this.onSinkEnd(err)
}
async closeWrite (options: AbortOptions = {}): Promise<void> {
if (this.writeStatus === 'closing' || this.writeStatus === 'closed') {
return
}
async sink (source: Source<Uint8ArrayList | Uint8Array>): Promise<void> {
if (this.sinkSunk) {
throw new CodeError('sink already called on stream', ERR_DOUBLE_SINK)
this.log.trace('closing writable end of stream with starting write status "%s"', this.writeStatus)
const writeStatus = this.writeStatus
if (this.writeStatus === 'ready') {
this.log.trace('sink was never sunk, sink an empty array')
await this.sink([])
}
this.sinkSunk = true
this.writeStatus = 'closing'
if (this.sinkEnded) {
throw new CodeError('stream closed for writing', ERR_SINK_ENDED)
if (writeStatus === 'writing') {
// stop reading from the source passed to `.sink` in the microtask queue
// - this lets any data queued by the user in the current tick get read
// before we exit
await new Promise((resolve, reject) => {
queueMicrotask(() => {
this.log.trace('aborting source passed to .sink')
this.sinkController.abort()
this.sinkEnd.promise.then(resolve, reject)
})
})
}
const signal = anySignal([
this.abortController.signal,
this.resetController.signal,
this.closeController.signal
])
if (this.status !== 'reset' && this.status !== 'aborted') {
this.log.trace('send close write to remote')
await this.sendCloseWrite(options)
}
try {
source = abortableSource(source, signal)
this.writeStatus = 'closed'
if (this.stat.direction === 'outbound') { // If initiator, open a new stream
const res = this.sendNewStream()
this.log.trace('closed writable end of stream')
}
if (isPromise(res)) {
await res
}
}
/**
* Close immediately for reading and writing and send a reset message (local
* error)
*/
abort (err: Error): void {
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
return
}
for await (let data of source) {
while (data.length > 0) {
if (data.length <= this.maxDataSize) {
const res = this.sendData(data instanceof Uint8Array ? new Uint8ArrayList(data) : data)
this.log('abort with error', err)
if (isPromise(res)) { // eslint-disable-line max-depth
await res
}
// try to send a reset message
this.log('try to send reset to remote')
const res = this.sendReset()
break
}
data = data instanceof Uint8Array ? new Uint8ArrayList(data) : data
const res = this.sendData(data.sublist(0, this.maxDataSize))
if (isPromise(res)) {
res.catch((err) => {
this.log.error('error sending reset message', err)
})
}
if (isPromise(res)) {
await res
}
this.status = 'aborted'
this.timeline.abort = Date.now()
this._closeSinkAndSource(err)
this.onAbort?.(err)
}
data.consume(this.maxDataSize)
}
}
} catch (err: any) {
if (err.type === 'aborted' && err.message === 'The operation was aborted') {
if (this.closeController.signal.aborted) {
return
}
/**
* Receive a reset message - close immediately for reading and writing (remote
* error)
*/
reset (): void {
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
return
}
if (this.resetController.signal.aborted) {
err.message = 'stream reset'
err.code = ERR_STREAM_RESET
}
const err = new CodeError('stream reset', ERR_STREAM_RESET)
if (this.abortController.signal.aborted) {
err.message = 'stream aborted'
err.code = ERR_STREAM_ABORT
}
}
this.status = 'reset'
this._closeSinkAndSource(err)
this.onReset?.()
}
// Send no more data if this stream was remotely reset
if (err.code === ERR_STREAM_RESET) {
log.trace('%s stream %s reset', this.stat.direction, this.id)
} else {
log.trace('%s stream %s error', this.stat.direction, this.id, err)
try {
const res = this.sendReset()
_closeSinkAndSource (err?: Error): void {
this._closeSink(err)
this._closeSource(err)
}
if (isPromise(res)) {
await res
}
_closeSink (err?: Error): void {
// if the sink function is running, cause it to end
if (this.writeStatus === 'writing') {
this.log.trace('end sink source')
this.sinkController.abort()
}
this.stat.timeline.reset = Date.now()
} catch (err) {
log.trace('%s stream %s error sending reset', this.stat.direction, this.id, err)
}
}
this.onSinkEnd(err)
}
_closeSource (err?: Error): void {
// if the source is not ending, end it
if (this.readStatus !== 'closing' && this.readStatus !== 'closed') {
this.log.trace('ending source with %d bytes to be read by consumer', this.streamSource.readableLength)
this.readStatus = 'closing'
this.streamSource.end(err)
this.onSinkEnd(err)
}
}
throw err
} finally {
signal.clear()
/**
* The remote closed for writing so we should expect to receive no more
* messages
*/
remoteCloseWrite (): void {
if (this.readStatus === 'closing' || this.readStatus === 'closed') {
this.log('received remote close write but local source is already closed')
return
}
try {
const res = this.sendCloseWrite()
this.log.trace('remote close write')
this._closeSource()
}
if (isPromise(res)) {
await res
}
} catch (err) {
log.trace('%s stream %s error sending close', this.stat.direction, this.id, err)
/**
* The remote closed for reading so we should not send any more
* messages
*/
remoteCloseRead (): void {
if (this.writeStatus === 'closing' || this.writeStatus === 'closed') {
this.log('received remote close read but local sink is already closed')
return
}
this.onSinkEnd()
this.log.trace('remote close read')
this._closeSink()
}
/**
* The underlying muxer has closed, no more messages can be sent or will
* be received, close immediately to free up resources
*/
destroy (): void {
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
this.log('received destroy but we are already closed')
return
}
this.log.trace('muxer destroyed')
this._closeSinkAndSource()
}
/**
* When an extending class reads data from it's implementation-specific source,

@@ -350,3 +459,3 @@ * call this method to allow the stream consumer to read the data.

*/
abstract sendNewStream (): void | Promise<void>
abstract sendNewStream (options?: AbortOptions): void | Promise<void>

@@ -356,3 +465,3 @@ /**

*/
abstract sendData (buf: Uint8ArrayList): void | Promise<void>
abstract sendData (buf: Uint8ArrayList, options?: AbortOptions): void | Promise<void>

@@ -362,3 +471,3 @@ /**

*/
abstract sendReset (): void | Promise<void>
abstract sendReset (options?: AbortOptions): void | Promise<void>

@@ -369,3 +478,3 @@ /**

*/
abstract sendCloseWrite (): void | Promise<void>
abstract sendCloseWrite (options?: AbortOptions): void | Promise<void>

@@ -376,3 +485,3 @@ /**

*/
abstract sendCloseRead (): void | Promise<void>
abstract sendCloseRead (options?: AbortOptions): void | Promise<void>
}

@@ -99,2 +99,8 @@ import type { Connection, MultiaddrConnection } from '../connection/index.js'

muxerFactory?: StreamMuxerFactory
/**
* The passed MultiaddrConnection has limits place on duration and/or data
* transfer amounts so is not expected to be open for very long.
*/
transient?: boolean
}

@@ -101,0 +107,0 @@

export declare const OPEN = "OPEN";
export declare const CLOSING = "CLOSING";
export declare const CLOSED = "CLOSED";
//# sourceMappingURL=status.d.ts.map
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/connection/status.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B,eAAO,MAAM,OAAO,YAAY,CAAA;AAChC,eAAO,MAAM,MAAM,WAAW,CAAA"}
export const OPEN = 'OPEN';
export const CLOSING = 'CLOSING';
export const CLOSED = 'CLOSED';
//# sourceMappingURL=status.js.map
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/connection/status.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAA;AAC1B,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAA;AAChC,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAA"}
export const OPEN = 'OPEN'
export const CLOSING = 'CLOSING'
export const CLOSED = 'CLOSED'