UNPKG

ipfs-bitswap

Version:

JavaScript implementation of the Bitswap data exchange protocol used by IPFS

116 lines 3.9 kB
/** * @packageDocumentation * * This module implements the [Bitswap protocol](https://docs.ipfs.tech/concepts/bitswap/) in TypeScript. */ import type { Message } from './message/message'; import type { BitswapNetworkNotifyProgressEvents, BitswapNetworkWantProgressEvents } from './network.js'; import type { Libp2p, AbortOptions, PeerId, Startable } from '@libp2p/interface'; import type { IMovingAverage } from '@vascosantos/moving-average'; import type { Blockstore } from 'interface-blockstore'; import type { CID } from 'multiformats/cid'; import type { MultihashHasher } from 'multiformats/hashes/interface'; import type { ProgressEvent, ProgressOptions } from 'progress-events'; export interface WantListEntry { cid: CID; priority: number; wantType: Message.Wantlist.WantType; inc(): void; dec(): void; hasRefs(): boolean; } export interface Wantlist { length: number; add(cid: CID, priority: number, wantType: Message.Wantlist.WantType): void; remove(cid: CID): void; removeForce(cid: string): void; forEach(fn: (entry: WantListEntry, key: string) => void): void; sortedEntries(): Map<string, WantListEntry>; contains(cid: CID): boolean; get(cid: CID): WantListEntry; } export interface Ledger { peer: PeerId; value: number; sent: number; recv: number; exchanged: number; } export interface Stat { enable(): void; disable(): void; stop(): void; snapshot: Record<string, bigint>; movingAverages: Record<string, Record<number, IMovingAverage>>; push(counter: string, inc: number): void; } export interface Stats { snapshot: Record<string, bigint>; movingAverages: Record<string, Record<number, IMovingAverage>>; enable(): void; disable(): void; stop(): void; forPeer(peerId: PeerId | string): Stat | undefined; push(peer: string, counter: string, inc: number): void; } export type BitswapWantProgressEvents = BitswapWantBlockProgressEvents; export type BitswapNotifyProgressEvents = BitswapNetworkNotifyProgressEvents; export type BitswapWantBlockProgressEvents = ProgressEvent<'bitswap:want-block:unwant', CID> | ProgressEvent<'bitswap:want-block:block', CID> | BitswapNetworkWantProgressEvents; export interface Bitswap extends Startable { /** * Bitswap statistics */ stats: Stats; /** * The peers that we are tracking a ledger for */ peers: PeerId[]; wantlistForPeer(peerId: PeerId): Map<string, WantListEntry>; ledgerForPeer(peerId: PeerId): Ledger | undefined; unwant(cids: CID | CID[]): void; cancelWants(cids: CID | CID[]): void; getWantlist(): IterableIterator<[string, WantListEntry]>; /** * Notify bitswap that a new block is available */ notify(cid: CID, block: Uint8Array, options?: ProgressOptions<BitswapNotifyProgressEvents>): void; /** * Retrieve a block from the network */ want(cid: CID, options?: AbortOptions & ProgressOptions<BitswapWantProgressEvents>): Promise<Uint8Array>; } export interface MultihashHasherLoader { getHasher(codeOrName: number | string): Promise<MultihashHasher>; } export interface BitswapOptions { /** * Whether stats are enabled. Default: false */ statsEnabled?: boolean; /** * Default: 1000 */ statsComputeThrottleTimeout?: number; /** * Default: 1000 */ statsComputeThrottleMaxQueueSize?: number; /** * Default: 32 */ maxInboundStreams?: number; /** * Default: 128 */ maxOutboundStreams?: number; /** * Default: 30000 */ incomingStreamTimeout?: number; /** * Enables loading esoteric hash functions */ hashLoader?: MultihashHasherLoader; } export declare const createBitswap: (libp2p: Libp2p, blockstore: Blockstore, options?: BitswapOptions) => Bitswap; //# sourceMappingURL=index.d.ts.map