UNPKG

@multiformats/multiaddr

Version:

multiaddr implementation (binary + string representation of network addresses)

101 lines (92 loc) 2.5 kB
import type { Protocol } from './index.js' const V = -1 export const names: Record<string, Protocol> = {} export const codes: Record<number, Protocol> = {} export const table: Array<[number, number, string, boolean?, boolean?]> = [ [4, 32, 'ip4'], [6, 16, 'tcp'], [33, 16, 'dccp'], [41, 128, 'ip6'], [42, V, 'ip6zone'], [43, 8, 'ipcidr'], [53, V, 'dns', true], [54, V, 'dns4', true], [55, V, 'dns6', true], [56, V, 'dnsaddr', true], [132, 16, 'sctp'], [273, 16, 'udp'], [275, 0, 'p2p-webrtc-star'], [276, 0, 'p2p-webrtc-direct'], [277, 0, 'p2p-stardust'], [280, 0, 'webrtc-direct'], [281, 0, 'webrtc'], [290, 0, 'p2p-circuit'], [301, 0, 'udt'], [302, 0, 'utp'], [400, V, 'unix', false, true], // `ipfs` is added before `p2p` for legacy support. // All text representations will default to `p2p`, but `ipfs` will // still be supported [421, V, 'ipfs'], // `p2p` is the preferred name for 421, and is now the default [421, V, 'p2p'], [443, 0, 'https'], [444, 96, 'onion'], [445, 296, 'onion3'], [446, V, 'garlic64'], [448, 0, 'tls'], [449, V, 'sni'], [460, 0, 'quic'], [461, 0, 'quic-v1'], [465, 0, 'webtransport'], [466, V, 'certhash'], [477, 0, 'ws'], [478, 0, 'wss'], [479, 0, 'p2p-websocket-star'], [480, 0, 'http'], [481, V, 'http-path'], [777, V, 'memory'] ] // populate tables table.forEach(row => { const proto = createProtocol(...row) codes[proto.code] = proto names[proto.name] = proto }) export function createProtocol (code: number, size: number, name: string, resolvable?: any, path?: any): Protocol { return { code, size, name, resolvable: Boolean(resolvable), path: Boolean(path) } } /** * For the passed proto string or number, return a {@link Protocol} * * @example * * ```js * import { protocol } from '@multiformats/multiaddr' * * console.info(protocol(4)) * // { code: 4, size: 32, name: 'ip4', resolvable: false, path: false } * ``` * * @deprecated This will be removed in a future version */ export function getProtocol (proto: number | string): Protocol { if (typeof proto === 'number') { if (codes[proto] != null) { return codes[proto] } throw new Error(`no protocol with code: ${proto}`) } else if (typeof proto === 'string') { if (names[proto] != null) { return names[proto] } throw new Error(`no protocol with name: ${proto}`) } throw new Error(`invalid protocol id type: ${typeof proto}`) }