@multiformats/multiaddr-matcher
Version:
Match different multiaddr formats
373 lines • 9.75 kB
TypeScript
/**
* @packageDocumentation
*
* This module exports various matchers that can be used to infer the type of a
* passed multiaddr.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { DNS } from '@multiformats/multiaddr-matcher'
*
* const ma = multiaddr('/dnsaddr/example.org')
*
* DNS.matches(ma) // true - this is a multiaddr with a DNS address at the start
* ```
*
* @example
*
* The default matching behaviour ignores any subsequent tuples in the multiaddr.
* If you want stricter matching you can use `.exactMatch`:
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { DNS, Circuit } from '@multiformats/multiaddr-matcher'
*
* const ma = multiaddr('/dnsaddr/example.org/p2p/QmFoo/p2p-circuit/p2p/QmBar')
*
* DNS.exactMatch(ma) // false - this address has extra tuples after the DNS component
* Circuit.matches(ma) // true
* Circuit.exactMatch(ma) // true - the extra tuples are circuit relay related
* ```
*/
import type { Multiaddr } from '@multiformats/multiaddr';
/**
* A matcher accepts multiaddr components and either fails to match and returns
* false or returns a sublist of unmatched components
*/
export interface Matcher {
match(parts: string[]): string[] | false;
pattern: string;
}
/**
* A MultiaddrMatcher allows interpreting a multiaddr as a certain type of
* multiaddr
*/
export interface MultiaddrMatcher {
/**
* The matchers that make up this MultiaddrMatcher - useful if you want to
* make your own custom matchers
*/
matchers: Matcher[];
/**
* Returns true if the passed multiaddr can be treated as this type of
* multiaddr
*/
matches(ma: Multiaddr): boolean;
/**
* Returns true if the passed multiaddr terminates as this type of
* multiaddr
*/
exactMatch(ma: Multiaddr): boolean;
}
export declare const PEER_ID: MultiaddrMatcher;
/**
* Matches dns4 addresses.
*
* Use {@link DNS DNS} instead to match any type of DNS address.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { DNS4 } from '@multiformats/multiaddr-matcher'
*
* DNS4.matches(multiaddr('/dns4/example.org')) // true
* ```
*/
export declare const DNS4: MultiaddrMatcher;
/**
* Matches dns6 addresses.
*
* Use {@link DNS DNS} instead to match any type of DNS address.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { DNS6 } from '@multiformats/multiaddr-matcher'
*
* DNS6.matches(multiaddr('/dns6/example.org')) // true
* ```
*/
export declare const DNS6: MultiaddrMatcher;
/**
* Matches dnsaddr addresses.
*
* Use {@link DNS DNS} instead to match any type of DNS address.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { DNSADDR } from '@multiformats/multiaddr-matcher'
*
* DNSADDR.matches(multiaddr('/dnsaddr/example.org')) // true
* DNSADDR.matches(multiaddr('/dnsaddr/example.org/p2p/Qmfoo')) // true
* ```
*/
export declare const DNSADDR: MultiaddrMatcher;
/**
* Matches any dns address.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { DNS } from '@multiformats/multiaddr-matcher'
*
* DNS.matches(multiaddr('/dnsaddr/example.org')) // true
* DNS.matches(multiaddr('/dns4/example.org')) // true
* DNS.matches(multiaddr('/dns6/example.org')) // true
* DNS.matches(multiaddr('/dns6/example.org/p2p/Qmfoo')) // true
* ```
*/
export declare const DNS: MultiaddrMatcher;
/**
* A matcher for addresses that start with IP or DNS tuples.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { IP_OR_DOMAIN } from '@multiformats/multiaddr-matcher'
*
* IP_OR_DOMAIN.matches(multiaddr('/ip4/123.123.123.123')) // true
* IP_OR_DOMAIN.matches(multiaddr('/ip4/123.123.123.123/p2p/QmFoo')) // true
* IP_OR_DOMAIN.matches(multiaddr('/dns/example.com/p2p/QmFoo')) // true
* IP_OR_DOMAIN.matches(multiaddr('/p2p/QmFoo')) // false
* ```
*/
export declare const IP_OR_DOMAIN: MultiaddrMatcher;
/**
* Matches ip4 addresses.
*
* Use {@link IP IP} instead to match any ip4/ip6 address.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { IP4 } from '@multiformats/multiaddr-matcher'
*
* const ma = multiaddr('/ip4/123.123.123.123')
*
* IP4.matches(ma) // true
* ```
*/
export declare const IP4: MultiaddrMatcher;
/**
* Matches ip6 addresses.
*
* Use {@link IP IP} instead to match any ip4/ip6 address.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { IP6 } from '@multiformats/multiaddr-matcher'
*
* const ma = multiaddr('/ip6/fe80::1cc1:a3b8:322f:cf22')
*
* IP6.matches(ma) // true
* ```
*/
export declare const IP6: MultiaddrMatcher;
/**
* Matches ip4 or ip6 addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { IP } from '@multiformats/multiaddr-matcher'
*
* IP.matches(multiaddr('/ip4/123.123.123.123')) // true
* IP.matches(multiaddr('/ip6/fe80::1cc1:a3b8:322f:cf22')) // true
* ```
*/
export declare const IP: MultiaddrMatcher;
/**
* Matches TCP addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { TCP } from '@multiformats/multiaddr-matcher'
*
* TCP.matches(multiaddr('/ip4/123.123.123.123/tcp/1234')) // true
* ```
*/
export declare const TCP: MultiaddrMatcher;
/**
* Matches UDP addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { UDP } from '@multiformats/multiaddr-matcher'
*
* UDP.matches(multiaddr('/ip4/123.123.123.123/udp/1234')) // true
* ```
*/
export declare const UDP: MultiaddrMatcher;
/**
* Matches QUIC addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { QUIC } from '@multiformats/multiaddr-matcher'
*
* QUIC.matches(multiaddr('/ip4/123.123.123.123/udp/1234/quic')) // true
* ```
*/
export declare const QUIC: MultiaddrMatcher;
/**
* Matches QUICv1 addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { QUICV1 } from '@multiformats/multiaddr-matcher'
*
* QUICV1.matches(multiaddr('/ip4/123.123.123.123/udp/1234/quic-v1')) // true
* ```
*/
export declare const QUICV1: MultiaddrMatcher;
/**
* Matches WebSocket addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { WebSockets } from '@multiformats/multiaddr-matcher'
*
* WebSockets.matches(multiaddr('/ip4/123.123.123.123/tcp/1234/ws')) // true
* ```
*/
export declare const WebSockets: MultiaddrMatcher;
/**
* Matches secure WebSocket addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { WebSocketsSecure } from '@multiformats/multiaddr-matcher'
*
* WebSocketsSecure.matches(multiaddr('/ip4/123.123.123.123/tcp/1234/wss')) // true
* ```
*/
export declare const WebSocketsSecure: MultiaddrMatcher;
/**
* Matches WebRTC-direct addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { WebRTCDirect } from '@multiformats/multiaddr-matcher'
*
* WebRTCDirect.matches(multiaddr('/ip4/123.123.123.123/tcp/1234/p2p/QmFoo/webrtc-direct/certhash/u....')) // true
* ```
*/
export declare const WebRTCDirect: MultiaddrMatcher;
/**
* Matches WebTransport addresses.
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { WebRTCDirect } from '@multiformats/multiaddr-matcher'
*
* WebRTCDirect.matches(multiaddr('/ip4/123.123.123.123/udp/1234/quic-v1/webtransport/certhash/u..../certhash/u..../p2p/QmFoo')) // true
* ```
*/
export declare const WebTransport: MultiaddrMatcher;
/**
* Matches peer addresses
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { P2P } from '@multiformats/multiaddr-matcher'
*
* P2P.matches(multiaddr('/ip4/123.123.123.123/tcp/1234/p2p/QmFoo')) // true
* ```
*/
export declare const P2P: MultiaddrMatcher;
/**
* Matches circuit relay addresses
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { Circuit } from '@multiformats/multiaddr-matcher'
*
* Circuit.matches(multiaddr('/ip4/123.123.123.123/tcp/1234/p2p/QmRelay/p2p-circuit/p2p/QmTarget')) // true
* ```
*/
export declare const Circuit: MultiaddrMatcher;
/**
* Matches WebRTC addresses
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { WebRTC } from '@multiformats/multiaddr-matcher'
*
* WebRTC.matches(multiaddr('/ip4/123.123.123.123/tcp/1234/p2p/QmRelay/p2p-circuit/webrtc/p2p/QmTarget')) // true
* ```
*/
export declare const WebRTC: MultiaddrMatcher;
/**
* Matches HTTP addresses
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { HTTP } from '@multiformats/multiaddr-matcher'
*
* HTTP.matches(multiaddr('/dns/example.org/http')) // true
* ```
*/
export declare const HTTP: MultiaddrMatcher;
/**
* Matches HTTPS addresses
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { HTTP } from '@multiformats/multiaddr-matcher'
*
* HTTP.matches(multiaddr('/dns/example.org/tls/http')) // true
* ```
*/
export declare const HTTPS: MultiaddrMatcher;
/**
* Matches Memory addresses
*
* @example
*
* ```ts
* import { multiaddr } from '@multiformats/multiaddr'
* import { Memory } from '@multiformats/multiaddr-matcher'
*
* Memory.matches(multiaddr('/memory/0xDEADBEEF')) // true
* ```
*/
export declare const Memory: MultiaddrMatcher;
//# sourceMappingURL=index.d.ts.map