Skip to content

Commit be8fe06

Browse files
authored
deps!: update to libp2p 0.46.x (#596)
Updates all libp2p deps to 0.46.x to close streams gracefully. BREAKING CHANGE: requires [email protected] or later
1 parent 3de739c commit be8fe06

28 files changed

+82
-89
lines changed

.aegir.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
/** @type {import('aegir').PartialOptions} */
33
export default {
44
build: {
5-
bundlesizeMax: '32KB'
5+
bundlesizeMax: '33KB'
66
}
77
}

package.json

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -143,18 +143,10 @@
143143
"docs": "aegir docs"
144144
},
145145
"dependencies": {
146-
"@libp2p/interface-connection": "^5.1.0",
147-
"@libp2p/interface-libp2p": "^3.1.0",
148-
"@libp2p/interface-peer-id": "^2.0.0",
149-
"@libp2p/interface-peer-info": "^1.0.8",
150-
"@libp2p/interface-registrar": "^2.0.8",
151-
"@libp2p/interfaces": "^3.2.0",
152-
"@libp2p/logger": "^2.0.5",
153-
"@libp2p/topology": "^4.0.0",
154-
"@libp2p/tracked-map": "^3.0.0",
146+
"@libp2p/interface": "^0.1.1",
147+
"@libp2p/logger": "^3.0.1",
155148
"@multiformats/multiaddr": "^12.1.0",
156149
"@vascosantos/moving-average": "^1.1.0",
157-
"abortable-iterator": "^5.0.1",
158150
"any-signal": "^4.1.1",
159151
"blockstore-core": "^4.0.0",
160152
"events": "^3.3.0",
@@ -166,7 +158,7 @@
166158
"it-pipe": "^3.0.1",
167159
"it-take": "^3.0.1",
168160
"just-debounce-it": "^3.0.1",
169-
"multiformats": "^11.0.0",
161+
"multiformats": "^12.0.1",
170162
"progress-events": "^1.0.0",
171163
"protons-runtime": "^5.0.0",
172164
"timeout-abort-controller": "^3.0.0",
@@ -176,12 +168,12 @@
176168
"varint-decoder": "^1.0.0"
177169
},
178170
"devDependencies": {
179-
"@chainsafe/libp2p-noise": "^12.0.0",
180-
"@libp2p/kad-dht": "^9.3.3",
181-
"@libp2p/mplex": "^8.0.3",
182-
"@libp2p/peer-id": "^2.0.0",
183-
"@libp2p/peer-id-factory": "^2.0.0",
184-
"@libp2p/tcp": "^7.0.1",
171+
"@chainsafe/libp2p-noise": "^13.0.0",
172+
"@libp2p/kad-dht": "^10.0.2",
173+
"@libp2p/mplex": "^9.0.2",
174+
"@libp2p/peer-id": "^3.0.1",
175+
"@libp2p/peer-id-factory": "^3.0.2",
176+
"@libp2p/tcp": "^8.0.2",
185177
"@nodeutils/defaults-deep": "^1.1.0",
186178
"@types/lodash.difference": "^4.5.7",
187179
"@types/lodash.flatten": "^4.4.7",
@@ -195,7 +187,7 @@
195187
"iso-random-stream": "^2.0.0",
196188
"it-all": "^3.0.1",
197189
"it-drain": "^3.0.1",
198-
"libp2p": "^0.45.1",
190+
"libp2p": "^0.46.3",
199191
"lodash.difference": "^4.5.0",
200192
"lodash.flatten": "^4.4.0",
201193
"lodash.range": "^3.2.0",

src/bitswap.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import { logger } from './utils/index.js'
99
import { WantManager } from './want-manager/index.js'
1010
import type { BitswapOptions, Bitswap, MultihashHasherLoader, WantListEntry, BitswapWantProgressEvents, BitswapNotifyProgressEvents } from './index.js'
1111
import type { BitswapMessage } from './message/index.js'
12-
import type { Libp2p } from '@libp2p/interface-libp2p'
13-
import type { PeerId } from '@libp2p/interface-peer-id'
12+
import type { Libp2p } from '@libp2p/interface'
13+
import type { PeerId } from '@libp2p/interface/peer-id'
1414
import type { Logger } from '@libp2p/logger'
1515
import type { AbortOptions } from '@multiformats/multiaddr'
1616
import type { Blockstore, Pair } from 'interface-blockstore'

src/decision-engine/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { trackedMap } from '@libp2p/tracked-map'
1+
import { trackedMap } from '@libp2p/interface/metrics/tracked-map'
22
import { base58btc } from 'multiformats/bases/base58'
33
import { CID } from 'multiformats/cid'
44
import { BitswapMessage as Message } from '../message/index.js'
@@ -12,8 +12,8 @@ import type { Message as PBMessage } from '../message/message.js'
1212
import type { Network } from '../network.js'
1313
import type { Stats } from '../stats/index.js'
1414
import type { WantListEntry } from '../wantlist/entry.js'
15-
import type { Libp2p } from '@libp2p/interface-libp2p'
16-
import type { PeerId } from '@libp2p/interface-peer-id'
15+
import type { Libp2p } from '@libp2p/interface'
16+
import type { PeerId } from '@libp2p/interface/peer-id'
1717
import type { Logger } from '@libp2p/logger'
1818
import type { Blockstore } from 'interface-blockstore'
1919

src/decision-engine/ledger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Wantlist } from '../wantlist/index.js'
22
import type { Message } from '../message/message.js'
33
import type { WantListEntry } from '../wantlist/entry.js'
4-
import type { PeerId } from '@libp2p/interface-peer-id'
4+
import type { PeerId } from '@libp2p/interface/peer-id'
55
import type { CID } from 'multiformats/cid'
66

77
export class Ledger {

src/decision-engine/req-queue.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SortedMap } from '../utils/sorted-map.js'
22
import type { Task, TaskMerger } from './index.js'
3-
import type { PeerId } from '@libp2p/interface-peer-id'
3+
import type { PeerId } from '@libp2p/interface/peer-id'
44

55
export interface PopTaskResult {
66
peerId?: PeerId

src/index.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { DefaultBitswap } from './bitswap.js'
22
import type { Message } from './message/message'
33
import type { BitswapNetworkNotifyProgressEvents, BitswapNetworkWantProgressEvents } from './network.js'
4-
import type { Libp2p } from '@libp2p/interface-libp2p'
5-
import type { PeerId } from '@libp2p/interface-peer-id'
6-
import type { AbortOptions } from '@libp2p/interfaces'
7-
import type { Startable } from '@libp2p/interfaces/startable'
4+
import type { Libp2p, AbortOptions } from '@libp2p/interface'
5+
import type { PeerId } from '@libp2p/interface/peer-id'
6+
import type { Startable } from '@libp2p/interface/startable'
87
import type { IMovingAverage } from '@vascosantos/moving-average'
98
import type { Blockstore } from 'interface-blockstore'
109
import type { CID } from 'multiformats/cid'

src/message/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CodeError } from '@libp2p/interfaces/errors'
1+
import { CodeError } from '@libp2p/interface/errors'
22
import { base58btc } from 'multiformats/bases/base58'
33
import { CID } from 'multiformats/cid'
44
import { sha256 } from 'multiformats/hashes/sha2'

src/network.ts

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { createTopology } from '@libp2p/topology'
2-
import { abortableSource } from 'abortable-iterator'
1+
import { CodeError } from '@libp2p/interface/errors'
32
import drain from 'it-drain'
43
import * as lp from 'it-length-prefixed'
54
import map from 'it-map'
@@ -13,12 +12,12 @@ import { logger } from './utils/index.js'
1312
import type { DefaultBitswap } from './bitswap.js'
1413
import type { MultihashHasherLoader } from './index.js'
1514
import type { Stats } from './stats/index.js'
16-
import type { Connection } from '@libp2p/interface-connection'
17-
import type { Libp2p } from '@libp2p/interface-libp2p'
18-
import type { PeerId } from '@libp2p/interface-peer-id'
19-
import type { PeerInfo } from '@libp2p/interface-peer-info'
20-
import type { IncomingStreamData } from '@libp2p/interface-registrar'
21-
import type { AbortOptions } from '@libp2p/interfaces'
15+
import type { Libp2p, AbortOptions } from '@libp2p/interface'
16+
import type { Connection } from '@libp2p/interface/connection'
17+
import type { PeerId } from '@libp2p/interface/peer-id'
18+
import type { PeerInfo } from '@libp2p/interface/peer-info'
19+
import type { IncomingStreamData } from '@libp2p/interface/stream-handler'
20+
import type { Topology } from '@libp2p/interface/topology'
2221
import type { Logger } from '@libp2p/logger'
2322
import type { Multiaddr } from '@multiformats/multiaddr'
2423
import type { CID } from 'multiformats/cid'
@@ -107,10 +106,10 @@ export class Network {
107106
})
108107

109108
// register protocol with topology
110-
const topology = createTopology({
109+
const topology: Topology = {
111110
onConnect: this._onPeerConnect,
112111
onDisconnect: this._onPeerDisconnect
113-
})
112+
}
114113

115114
/** @type {string[]} */
116115
this._registrarIds = []
@@ -153,10 +152,16 @@ export class Network {
153152
const controller = new TimeoutController(this._incomingStreamTimeout)
154153

155154
Promise.resolve().then(async () => {
156-
this._log('incoming new bitswap %s connection from %p', stream.stat.protocol, connection.remotePeer)
155+
this._log('incoming new bitswap %s connection from %p', stream.protocol, connection.remotePeer)
156+
const abortListener = (): void => {
157+
stream.abort(new CodeError('Incoming Bitswap stream timed out', 'ERR_TIMEOUT'))
158+
}
159+
160+
let signal = AbortSignal.timeout(this._incomingStreamTimeout)
161+
signal.addEventListener('abort', abortListener)
157162

158163
await pipe(
159-
abortableSource(stream.source, controller.signal),
164+
stream,
160165
(source) => lp.decode(source),
161166
async (source) => {
162167
for await (const data of source) {
@@ -169,18 +174,23 @@ export class Network {
169174
}
170175

171176
// we have received some data so reset the timeout controller
172-
controller.reset()
177+
signal.removeEventListener('abort', abortListener)
178+
signal = AbortSignal.timeout(this._incomingStreamTimeout)
179+
signal.addEventListener('abort', abortListener)
173180
}
174181
}
175182
)
183+
184+
await stream.close({
185+
signal
186+
})
176187
})
177188
.catch(err => {
178189
this._log(err)
179190
stream.abort(err)
180191
})
181192
.finally(() => {
182193
controller.clear()
183-
stream.close()
184194
})
185195
}
186196

@@ -273,7 +283,7 @@ export class Network {
273283
try {
274284
/** @type {Uint8Array} */
275285
let serialized
276-
switch (stream.stat.protocol) {
286+
switch (stream.protocol) {
277287
case BITSWAP100:
278288
serialized = msg.serializeToBitswap100()
279289
break
@@ -282,19 +292,20 @@ export class Network {
282292
serialized = msg.serializeToBitswap110()
283293
break
284294
default:
285-
throw new Error(`Unknown protocol: ${stream.stat.protocol}`)
295+
throw new Error(`Unknown protocol: ${stream.protocol}`)
286296
}
287297

288298
await pipe(
289299
[serialized],
290300
(source) => lp.encode(source),
291301
stream
292302
)
303+
304+
await stream.close()
293305
} catch (err: any) {
294306
options.onProgress?.(new CustomProgressEvent<{ peer: PeerId, error: Error }>('bitswap:network:send-wantlist:error', { peer: peerId, error: err }))
295307
this._log(err)
296-
} finally {
297-
stream.close()
308+
stream.abort(err)
298309
}
299310
}
300311
}

src/notifications.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
44
import * as CONSTANTS from './constants.js'
55
import { logger } from './utils/index.js'
66
import type { BitswapWantBlockProgressEvents } from './index.js'
7-
import type { PeerId } from '@libp2p/interface-peer-id'
8-
import type { AbortOptions } from '@libp2p/interfaces'
7+
import type { AbortOptions } from '@libp2p/interface'
8+
import type { PeerId } from '@libp2p/interface/peer-id'
99
import type { Logger } from '@libp2p/logger'
1010
import type { CID } from 'multiformats/cid'
1111

src/stats/index.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
import { EventEmitter } from 'events'
2-
import { trackedMap } from '@libp2p/tracked-map'
2+
import { trackedMap } from '@libp2p/interface/metrics/tracked-map'
33
import { Stat } from './stat.js'
4-
import type { PeerId } from '@libp2p/interface-peer-id'
4+
import type { PeerId } from '@libp2p/interface/peer-id'
55
import type { IMovingAverage } from '@vascosantos/moving-average'
66
import type { Libp2p } from 'libp2p'
77

8-
/**
9-
* @typedef {import('multiformats').CID} CID
10-
* @typedef {import('@libp2p/interface-peer-id').PeerId} PeerId
11-
*/
12-
138
export interface StatsOptions {
149
enabled?: boolean
1510
computeThrottleTimeout?: number

src/utils/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { logger as createLogger, type Logger } from '@libp2p/logger'
22
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
33
import { BitswapMessageEntry } from '../message/entry.js'
4-
import type { PeerId } from '@libp2p/interface-peer-id'
4+
import type { PeerId } from '@libp2p/interface/peer-id'
55

66
/**
77
* Creates a logger for the given subsystem

src/want-manager/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { trackedMap } from '@libp2p/tracked-map'
1+
import { trackedMap } from '@libp2p/interface/metrics/tracked-map'
22
import { base58btc } from 'multiformats/bases/base58'
33
import * as CONSTANTS from '../constants.js'
44
import { BitswapMessage as Message } from '../message/index.js'
@@ -8,8 +8,8 @@ import { MsgQueue } from './msg-queue.js'
88
import type { BitswapWantBlockProgressEvents } from '../index.js'
99
import type { Network } from '../network.js'
1010
import type { Stats } from '../stats/index.js'
11-
import type { Libp2p } from '@libp2p/interface-libp2p'
12-
import type { PeerId } from '@libp2p/interface-peer-id'
11+
import type { Libp2p } from '@libp2p/interface'
12+
import type { PeerId } from '@libp2p/interface/peer-id'
1313
import type { Logger } from '@libp2p/logger'
1414
import type { AbortOptions } from '@multiformats/multiaddr'
1515
import type { CID } from 'multiformats/cid'

src/want-manager/msg-queue.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { BitswapMessage as Message } from '../message/index.js'
44
import { logger } from '../utils/index.js'
55
import type { BitswapWantBlockProgressEvents } from '../index.js'
66
import type { BitswapNetworkWantProgressEvents, Network } from '../network.js'
7-
import type { PeerId } from '@libp2p/interface-peer-id'
7+
import type { PeerId } from '@libp2p/interface/peer-id'
88
import type { Logger } from '@libp2p/logger'
99
import type { CID } from 'multiformats/cid'
1010
import type { ProgressOptions } from 'progress-events'

src/wantlist/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { trackedMap } from '@libp2p/tracked-map'
1+
import { trackedMap } from '@libp2p/interface/metrics/tracked-map'
22
import { base58btc } from 'multiformats/bases/base58'
33
import { Message } from '../message/message.js'
44
import { WantListEntry as Entry } from './entry.js'
55
import type { Stats } from '../stats/index.js'
6-
import type { Libp2p } from '@libp2p/interface-libp2p'
6+
import type { Libp2p } from '@libp2p/interface'
77
import type { CID } from 'multiformats/cid'
88

99
const WantType = {

test/bitswap-mock-internals.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-env mocha */
22
/* eslint max-nested-callbacks: ["error", 5] */
33

4-
import { isPeerId, type PeerId } from '@libp2p/interface-peer-id'
4+
import { isPeerId, type PeerId } from '@libp2p/interface/peer-id'
55
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
66
import { expect } from 'aegir/chai'
77
import { MemoryBlockstore } from 'blockstore-core/memory'

test/bitswap-stats.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,10 @@ import { BitswapMessage as Message } from '../src/message/index.js'
88
import { createLibp2pNode } from './utils/create-libp2p-node.js'
99
import { makeBlocks } from './utils/make-blocks.js'
1010
import { makePeerIds } from './utils/make-peer-id.js'
11-
import type { Libp2p } from '@libp2p/interface-libp2p'
12-
import type { PeerId } from '@libp2p/interface-peer-id'
11+
import type { Libp2p } from '@libp2p/interface'
12+
import type { PeerId } from '@libp2p/interface/peer-id'
1313
import type { CID } from 'multiformats/cid'
1414

15-
/**
16-
* @typedef {import('@libp2p/interface-libp2p').Libp2p} Libp2p
17-
* @typedef {import('multiformats/cid').CID} CID
18-
*/
19-
2015
const expectedStats = [
2116
'blocksReceived',
2217
'dataReceived',

test/bitswap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { BitswapMessage as Message } from '../src/message/index.js'
1111
import { createLibp2pNode } from './utils/create-libp2p-node.js'
1212
import { orderedFinish } from './utils/helpers.js'
1313
import { makeBlocks } from './utils/make-blocks.js'
14-
import type { Libp2p } from '@libp2p/interface-libp2p'
14+
import type { Libp2p } from '@libp2p/interface'
1515
import type { DualKadDHT } from '@libp2p/kad-dht'
1616

1717
/**

test/decision-engine/decision-engine.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { makeBlocks } from '../utils/make-blocks.js'
2020
import { makePeerId, makePeerIds } from '../utils/make-peer-id.js'
2121
import { mockNetwork } from '../utils/mocks.js'
2222
import type { Network } from '../../src/network.js'
23-
import type { PeerId } from '@libp2p/interface-peer-id'
23+
import type { PeerId } from '@libp2p/interface/peer-id'
2424
import type { Blockstore } from 'interface-blockstore'
2525

2626
const sum = (nums: number[]): number => nums.reduce((a, b) => a + b, 0)

test/decision-engine/ledger.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
44
import { expect } from 'aegir/chai'
55
import { Ledger } from '../../src/decision-engine/ledger.js'
6-
import type { PeerId } from '@libp2p/interface-peer-id'
6+
import type { PeerId } from '@libp2p/interface/peer-id'
77

88
describe('Ledger', () => {
99
/** @type {} */

test/decision-engine/req-queue.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
44
import { expect } from 'aegir/chai'
55
import { RequestQueue } from '../../src/decision-engine/req-queue.js'
6-
import type { PeerId } from '@libp2p/interface-peer-id'
6+
import type { PeerId } from '@libp2p/interface/peer-id'
77

88
describe('Request Queue', () => {
99
let peerIds: PeerId[]

test/decision-engine/task-merger.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { createEd25519PeerId } from '@libp2p/peer-id-factory'
44
import { expect } from 'aegir/chai'
55
import { RequestQueue } from '../../src/decision-engine/req-queue.js'
66
import { DefaultTaskMerger } from '../../src/decision-engine/task-merger.js'
7-
import type { PeerId } from '@libp2p/interface-peer-id'
7+
import type { PeerId } from '@libp2p/interface/peer-id'
88

99
interface Task {
1010
topic: string

0 commit comments

Comments
 (0)