* chore(deps): bump @noble/curves from 1.9.7 to 2.2.0 Bumps [@noble/curves](https://github.com/paulmillr/noble-curves) from 1.9.7 to 2.2.0. - [Release notes](https://github.com/paulmillr/noble-curves/releases) - [Commits](https://github.com/paulmillr/noble-curves/compare/1.9.7...2.2.0) --- updated-dependencies: - dependency-name: "@noble/curves" dependency-version: 2.2.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * refactor(web): migrate @noble/curves imports to v2 paths - Move numberToHexUnpadded import from @noble/curves/abstract/utils to @noble/curves/utils.js (abstract/utils subpath removed in v2). - Update @noble/curves/ed25519 to @noble/curves/ed25519.js to match required sub-import file extensions. - Rename x25519.utils.randomPrivateKey() to randomSecretKey() (v2 API). --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dan Ditomaso <dan.ditomaso@gmail.com>
73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import { useNodeAsProto } from "@core/hooks/useNodesAsProto.ts";
|
|
import type { Protobuf, Types } from "@meshtastic/sdk";
|
|
import { numberToHexUnpadded } from "@noble/curves/utils.js";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
import { TraceRoute } from "../PageComponents/Messages/TraceRoute.tsx";
|
|
import {
|
|
Dialog,
|
|
DialogClose,
|
|
DialogContent,
|
|
DialogDescription,
|
|
DialogHeader,
|
|
DialogTitle,
|
|
} from "../UI/Dialog.tsx";
|
|
|
|
export interface TracerouteResponseDialogProps {
|
|
traceroute: Types.PacketMetadata<Protobuf.Mesh.RouteDiscovery> | undefined;
|
|
open: boolean;
|
|
onOpenChange: () => void;
|
|
}
|
|
|
|
export const TracerouteResponseDialog = ({
|
|
traceroute,
|
|
open,
|
|
onOpenChange,
|
|
}: TracerouteResponseDialogProps) => {
|
|
const { t } = useTranslation("dialog");
|
|
const route: number[] = traceroute?.data.route ?? [];
|
|
const routeBack: number[] = traceroute?.data.routeBack ?? [];
|
|
const snrTowards = (traceroute?.data.snrTowards ?? []).map((snr) => snr / 4);
|
|
const snrBack = (traceroute?.data.snrBack ?? []).map((snr) => snr / 4);
|
|
const from = useNodeAsProto(traceroute?.to ?? 0); // The origin of the traceroute = the "to" node of the mesh packet
|
|
const fromLongName =
|
|
from?.user?.longName ??
|
|
(from ? `!${numberToHexUnpadded(from?.num)}` : t("unknown.shortName"));
|
|
const fromShortName =
|
|
from?.user?.shortName ??
|
|
(from
|
|
? `${numberToHexUnpadded(from?.num).substring(0, 4)}`
|
|
: t("unknown.shortName"));
|
|
|
|
const toUser = useNodeAsProto(traceroute?.from ?? 0); // The destination of the traceroute = the "from" node of the mesh packet
|
|
|
|
if (!toUser || !from) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
<DialogContent>
|
|
<DialogClose />
|
|
<DialogHeader>
|
|
<DialogTitle>
|
|
{t("tracerouteResponse.title", {
|
|
identifier: `${fromLongName} (${fromShortName})`,
|
|
})}
|
|
</DialogTitle>
|
|
</DialogHeader>
|
|
<DialogDescription>
|
|
<TraceRoute
|
|
route={route}
|
|
routeBack={routeBack}
|
|
from={{ user: from.user }}
|
|
to={{ user: toUser.user }}
|
|
snrTowards={snrTowards}
|
|
snrBack={snrBack}
|
|
/>
|
|
</DialogDescription>
|
|
</DialogContent>
|
|
</Dialog>
|
|
);
|
|
};
|