Skip to content

Commit 71490db

Browse files
committed
refactor: added addresses config validation (libp2p#1573)
1 parent 5874c4e commit 71490db

File tree

4 files changed

+27
-11
lines changed

4 files changed

+27
-11
lines changed

src/address-manager/utils.ts

+11
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import { type ObjectSchema, object, array, string } from 'yup'
2+
import { validateMultiaddr } from '../utils.js'
3+
import type { AddressManagerInit } from '.'
14

25
export function debounce (func: () => void, wait: number): () => void {
36
let timeout: ReturnType<typeof setTimeout> | undefined
@@ -12,3 +15,11 @@ export function debounce (func: () => void, wait: number): () => void {
1215
timeout = setTimeout(later, wait)
1316
}
1417
}
18+
19+
export function validateAddressManagerConfig (opts: AddressManagerInit): ObjectSchema<Record<string, unknown>> {
20+
return object({
21+
listen: array().of(string()).test('is multiaddr', validateMultiaddr).optional(),
22+
announce: array().of(string()).test('is multiaddr', validateMultiaddr).optional(),
23+
noAnnounce: array().of(string()).test('is multiaddr', validateMultiaddr).optional()
24+
})
25+
}

src/config.ts

+3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import { publicAddressesFirst } from '@libp2p/utils/address-sort'
33
import { dnsaddrResolver } from '@multiformats/multiaddr/resolvers'
44
import mergeOptions from 'merge-options'
55
import { object } from 'yup'
6+
import { validateAddressManagerConfig } from './address-manager/utils.js'
67
import { validateConnectionManagerConfig } from './connection-manager/utils.js'
8+
import type { AddressManagerInit } from './address-manager/index.js'
79
import type { ConnectionManagerInit } from './connection-manager/index.js'
810
import type { Libp2pInit } from './index.js'
911
import type { ServiceMap } from '@libp2p/interface-libp2p'
@@ -30,6 +32,7 @@ const DefaultConfig: Partial<Libp2pInit> = {
3032

3133
export function validateConfig <T extends ServiceMap = Record<string, unknown>> (opts: RecursivePartial<Libp2pInit<T>>): Libp2pInit<T> {
3234
const libp2pConfig = object({
35+
addresses: validateAddressManagerConfig(opts?.addresses as AddressManagerInit),
3336
connectionManager: validateConnectionManagerConfig(opts?.connectionManager as ConnectionManagerInit)
3437
})
3538

src/connection-manager/utils.ts

+1-11
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { logger } from '@libp2p/logger'
33
import { type AbortOptions, multiaddr, type Multiaddr } from '@multiformats/multiaddr'
44
import { type ClearableSignal, anySignal } from 'any-signal'
55
import { type ObjectSchema, array, number, object, string } from 'yup'
6+
import { validateMultiaddr } from '../utils.js'
67
import { AUTO_DIAL_CONCURRENCY, AUTO_DIAL_INTERVAL, AUTO_DIAL_PRIORITY, DIAL_TIMEOUT, INBOUND_CONNECTION_THRESHOLD, INBOUND_UPGRADE_TIMEOUT, MAX_CONNECTIONS, MAX_INCOMING_PENDING_CONNECTIONS, MAX_PARALLEL_DIALS, MAX_PARALLEL_DIALS_PER_PEER, MAX_PEER_ADDRS_TO_DIAL, MIN_CONNECTIONS } from './constants.js'
78
import type { ConnectionManagerInit } from '.'
89

@@ -78,17 +79,6 @@ export function combineSignals (...signals: Array<AbortSignal | undefined>): Cle
7879
}
7980

8081
export const validateConnectionManagerConfig = (opts: ConnectionManagerInit): ObjectSchema<Record<string, unknown>> => {
81-
const validateMultiaddr = (value: Array<string | undefined> | undefined): boolean => {
82-
value?.forEach((addr) => {
83-
try {
84-
multiaddr(addr)
85-
} catch (err) {
86-
throw new Error(`invalid multiaddr: ${addr}`)
87-
}
88-
})
89-
return true
90-
}
91-
9282
return object({
9383
maxConnections: number().min(opts?.minConnections ?? MIN_CONNECTIONS, `maxConnections must be greater than the min connections limit: ${opts?.minConnections}`).integer().default(MAX_CONNECTIONS),
9484
minConnections: number().min(0).integer().max(opts?.maxConnections ?? MAX_CONNECTIONS, `minConnections must be less than the max connections limit: ${opts?.maxConnections}`).default(MIN_CONNECTIONS),

src/utils.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { multiaddr } from '@multiformats/multiaddr'
2+
3+
export const validateMultiaddr = (value: Array<string | undefined> | undefined): boolean => {
4+
value?.forEach((addr) => {
5+
try {
6+
multiaddr(addr)
7+
} catch (err) {
8+
throw new Error(`invalid multiaddr: ${addr}`)
9+
}
10+
})
11+
return true
12+
}

0 commit comments

Comments
 (0)