UNPKG

@multiformats/multiaddr

Version:

multiaddr implementation (binary + string representation of network addresses)

47 lines 1.26 kB
import { convertToIpNet } from '../convert.js'; import { multiaddr } from '../index.js'; /** * A utility class to determine if a Multiaddr contains another * multiaddr. * * This can be used with ipcidr ranges to determine if a given * multiaddr is in a ipcidr range. * * @example * * ```js * import { multiaddr, MultiaddrFilter } from '@multiformats/multiaddr' * * const range = multiaddr('/ip4/192.168.10.10/ipcidr/24') * const filter = new MultiaddrFilter(range) * * const input = multiaddr('/ip4/192.168.10.2/udp/60') * console.info(filter.contains(input)) // true * ``` */ export class MultiaddrFilter { multiaddr; netmask; constructor(input) { this.multiaddr = multiaddr(input); this.netmask = convertToIpNet(this.multiaddr); } contains(input) { if (input == null) { return false; } const m = multiaddr(input); let ip; for (const [code, value] of m.stringTuples()) { if (code === 4 || code === 41) { ip = value; break; } } if (ip === undefined) { return false; } return this.netmask.contains(ip); } } //# sourceMappingURL=multiaddr-filter.js.map