mirror of
https://github.com/logos-messaging/js-waku.git
synced 2026-01-11 02:03:10 +00:00
* chore: update noise * update: package.lock * update: @chainsafe/libp2p-gossipsub * rm unwanted libp2p interface deps & bump up libp2p * refactor code for new deps * update: new package.lock * setup prettier, refactor eslint and rm trailing commas * update package.lock * fix build * import type for interface * fix imports for merge * update typedoc exports * add: CustomEvent import * use new libp2p interface * add aegir as dev dep for tests
48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import { Multiaddr } from "@multiformats/multiaddr";
|
|
import type { IEnr } from "@waku/interfaces";
|
|
|
|
import { multiaddrFromFields } from "./multiaddr_from_fields.js";
|
|
|
|
export function locationMultiaddrFromEnrFields(
|
|
enr: IEnr,
|
|
protocol: "udp" | "udp4" | "udp6" | "tcp" | "tcp4" | "tcp6"
|
|
): Multiaddr | undefined {
|
|
switch (protocol) {
|
|
case "udp":
|
|
return (
|
|
locationMultiaddrFromEnrFields(enr, "udp4") ||
|
|
locationMultiaddrFromEnrFields(enr, "udp6")
|
|
);
|
|
case "tcp":
|
|
return (
|
|
locationMultiaddrFromEnrFields(enr, "tcp4") ||
|
|
locationMultiaddrFromEnrFields(enr, "tcp6")
|
|
);
|
|
}
|
|
const isIpv6 = protocol.endsWith("6");
|
|
const ipVal = enr.get(isIpv6 ? "ip6" : "ip");
|
|
if (!ipVal) return;
|
|
|
|
const protoName = protocol.slice(0, 3);
|
|
let protoVal;
|
|
switch (protoName) {
|
|
case "udp":
|
|
protoVal = isIpv6 ? enr.get("udp6") : enr.get("udp");
|
|
break;
|
|
case "tcp":
|
|
protoVal = isIpv6 ? enr.get("tcp6") : enr.get("tcp");
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
if (!protoVal) return;
|
|
|
|
return multiaddrFromFields(
|
|
isIpv6 ? "ip6" : "ip4",
|
|
protoName,
|
|
ipVal,
|
|
protoVal
|
|
);
|
|
}
|