diff --git a/src/components/Dialog/ImportDialog.tsx b/src/components/Dialog/ImportDialog.tsx index 91947608..ed37351e 100644 --- a/src/components/Dialog/ImportDialog.tsx +++ b/src/components/Dialog/ImportDialog.tsx @@ -73,9 +73,10 @@ export const ImportDialog = ({ connection?.setChannel( create(Protobuf.Channel.ChannelSchema, { index, - role: index === 0 - ? Protobuf.Channel.Channel_Role.PRIMARY - : Protobuf.Channel.Channel_Role.SECONDARY, + role: + index === 0 + ? Protobuf.Channel.Channel_Role.PRIMARY + : Protobuf.Channel.Channel_Role.SECONDARY, settings: ch, }), ); @@ -122,25 +123,21 @@ export const ImportDialog = ({ checked={channelSet?.loraConfig?.usePreset ?? true} /> - { - /* */ - } + */} - { - /* */ - } + */} Channels: diff --git a/src/components/Dialog/LocationResponseDialog.tsx b/src/components/Dialog/LocationResponseDialog.tsx index 5c79c487..b885667c 100644 --- a/src/components/Dialog/LocationResponseDialog.tsx +++ b/src/components/Dialog/LocationResponseDialog.tsx @@ -24,9 +24,11 @@ export const LocationResponseDialog = ({ const { nodes } = useDevice(); const from = nodes.get(location?.from ?? 0); - const longName = from?.user?.longName ?? + const longName = + from?.user?.longName ?? (from ? `!${numberToHexUnpadded(from?.num)}` : "Unknown"); - const shortName = from?.user?.shortName ?? + const shortName = + from?.user?.shortName ?? (from ? `${numberToHexUnpadded(from?.num).substring(0, 4)}` : "UNK"); return ( diff --git a/src/components/Dialog/NodeDetailsDialog.tsx b/src/components/Dialog/NodeDetailsDialog.tsx index 325da884..ab76aa2f 100644 --- a/src/components/Dialog/NodeDetailsDialog.tsx +++ b/src/components/Dialog/NodeDetailsDialog.tsx @@ -32,159 +32,134 @@ export const NodeDetailsDialog = ({ const { nodeNumDetails } = useAppStore(); const device: Protobuf.Mesh.NodeInfo = nodes.get(nodeNumDetails); - return device - ? ( - - - - - Node Details for {device.user?.longName ?? "UNKNOWN"} ( - {device.user?.shortName ?? "UNK"}) - - - -
- -
-

- Details: -

-

- Hardware:{" "} - {Protobuf.Mesh.HardwareModel[device.user?.hwModel ?? 0]} -

-

Node Number: {device.num}

-

Node HEX: !{numberToHexUnpadded(device.num)}

-

- Role: {Protobuf.Config.Config_DeviceConfig_Role[ + return device ? ( +

+ + + + Node Details for {device.user?.longName ?? "UNKNOWN"} ( + {device.user?.shortName ?? "UNK"}) + + + +
+ +
+

+ Details: +

+

+ Hardware:{" "} + {Protobuf.Mesh.HardwareModel[device.user?.hwModel ?? 0]} +

+

Node Number: {device.num}

+

Node HEX: !{numberToHexUnpadded(device.num)}

+

+ Role:{" "} + { + Protobuf.Config.Config_DeviceConfig_Role[ device.user?.role ?? 0 - ]} -

-

- Last Heard: {device.lastHeard === 0 - ? ( - "Never" - ) - : } + ] + } +

+

+ Last Heard:{" "} + {device.lastHeard === 0 ? ( + "Never" + ) : ( + + )} +

+
+ + {device.position ? ( +
+

+ Position:

+ {device.position.latitudeI && device.position.longitudeI ? ( +

+ Coordinates:{" "} + + {device.position.latitudeI / 1e7},{" "} + {device.position.longitudeI / 1e7} + +

+ ) : null} + {device.position.altitude ? ( +

Altitude: {device.position.altitude}m

+ ) : null}
+ ) : null} - {device.position - ? ( -
-

- Position: -

- {device.position.latitudeI && device.position.longitudeI - ? ( -

- Coordinates:{" "} - - {device.position.latitudeI / 1e7},{" "} - {device.position.longitudeI / 1e7} - -

- ) - : null} - {device.position.altitude - ?

Altitude: {device.position.altitude}m

- : null} -
- ) - : null} - - {device.deviceMetrics - ? ( -
-

- Device Metrics: -

- {device.deviceMetrics.airUtilTx - ? ( -

- Air TX utilization:{" "} - {device.deviceMetrics.airUtilTx.toFixed(2)}% -

- ) - : null} - {device.deviceMetrics.channelUtilization - ? ( -

- Channel utilization:{" "} - {device.deviceMetrics.channelUtilization.toFixed(2)}% -

- ) - : null} - {device.deviceMetrics.batteryLevel - ? ( -

- Battery level:{" "} - {device.deviceMetrics.batteryLevel.toFixed(2)}% -

- ) - : null} - {device.deviceMetrics.voltage - ? ( -

- Voltage: {device.deviceMetrics.voltage.toFixed(2)}V -

- ) - : null} - {device.deviceMetrics.uptimeSeconds - ? ( -

- Uptime:{" "} - -

- ) - : null} -
- ) - : null} + {device.deviceMetrics ? ( +
+

+ Device Metrics: +

+ {device.deviceMetrics.airUtilTx ? ( +

+ Air TX utilization:{" "} + {device.deviceMetrics.airUtilTx.toFixed(2)}% +

+ ) : null} + {device.deviceMetrics.channelUtilization ? ( +

+ Channel utilization:{" "} + {device.deviceMetrics.channelUtilization.toFixed(2)}% +

+ ) : null} + {device.deviceMetrics.batteryLevel ? ( +

+ Battery level:{" "} + {device.deviceMetrics.batteryLevel.toFixed(2)}% +

+ ) : null} + {device.deviceMetrics.voltage ? ( +

Voltage: {device.deviceMetrics.voltage.toFixed(2)}V

+ ) : null} + {device.deviceMetrics.uptimeSeconds ? ( +

+ Uptime:{" "} + +

+ ) : null} +
+ ) : null} - {device - ? ( -
- - - -

- All Raw Metrics: -

-
- -
+            {device ? (
+              
+ + + +

+ All Raw Metrics: +

+
+ +
                         {JSON.stringify(device, null, 2)}
-                          
-
-
-
-
- ) - : null} -
- - -
- ) - : null; + + + + +
+ ) : null} +
+
+
+
+ ) : null; }; diff --git a/src/components/Dialog/NodeOptionsDialog.tsx b/src/components/Dialog/NodeOptionsDialog.tsx index d95ea7ab..0161bb22 100644 --- a/src/components/Dialog/NodeOptionsDialog.tsx +++ b/src/components/Dialog/NodeOptionsDialog.tsx @@ -31,9 +31,11 @@ export const NodeOptionsDialog = ({ setChatType, setActiveChat, } = useAppStore(); - const longName = node?.user?.longName ?? + const longName = + node?.user?.longName ?? (node ? `!${numberToHexUnpadded(node?.num)}` : "Unknown"); - const shortName = node?.user?.shortName ?? + const shortName = + node?.user?.shortName ?? (node ? `${numberToHexUnpadded(node?.num).substring(0, 4)}` : "UNK"); function handleDirectMessage() { @@ -51,7 +53,7 @@ export const NodeOptionsDialog = ({ connection?.requestPosition(node.num).then(() => toast({ title: "Position request sent.", - }) + }), ); onOpenChange(); } @@ -64,7 +66,7 @@ export const NodeOptionsDialog = ({ connection?.traceRoute(node.num).then(() => toast({ title: "Traceroute sent.", - }) + }), ); onOpenChange(); } diff --git a/src/components/Dialog/QRDialog.tsx b/src/components/Dialog/QRDialog.tsx index 751b6f69..54e7aec8 100644 --- a/src/components/Dialog/QRDialog.tsx +++ b/src/components/Dialog/QRDialog.tsx @@ -77,8 +77,8 @@ export const QRDialog = ({ {channel.settings?.name.length ? channel.settings.name : channel.role === Protobuf.Channel.Channel_Role.PRIMARY - ? "Primary" - : `Channel: ${channel.index}`} + ? "Primary" + : `Channel: ${channel.index}`} { if (selectedChannels.includes(channel.index)) { setSelectedChannels( - selectedChannels.filter((c) => - c !== channel.index - ), + selectedChannels.filter((c) => c !== channel.index), ); } else { setSelectedChannels([ diff --git a/src/components/Dialog/TracerouteResponseDialog.tsx b/src/components/Dialog/TracerouteResponseDialog.tsx index 7e97fb81..0427a299 100644 --- a/src/components/Dialog/TracerouteResponseDialog.tsx +++ b/src/components/Dialog/TracerouteResponseDialog.tsx @@ -28,9 +28,11 @@ export const TracerouteResponseDialog = ({ const snrTowards = traceroute?.data.snrTowards ?? []; const snrBack = traceroute?.data.snrBack ?? []; const from = nodes.get(traceroute?.from ?? 0); - const longName = from?.user?.longName ?? + const longName = + from?.user?.longName ?? (from ? `!${numberToHexUnpadded(from?.num)}` : "Unknown"); - const shortName = from?.user?.shortName ?? + const shortName = + from?.user?.shortName ?? (from ? `${numberToHexUnpadded(from?.num).substring(0, 4)}` : "UNK"); const to = nodes.get(traceroute?.to ?? 0); return ( diff --git a/src/components/PageComponents/Channel.tsx b/src/components/PageComponents/Channel.tsx index 53e9c68f..d7fb490b 100644 --- a/src/components/PageComponents/Channel.tsx +++ b/src/components/PageComponents/Channel.tsx @@ -24,9 +24,8 @@ export const Channel = ({ channel }: SettingsPanelProps): JSX.Element => { channel?.settings?.psk.length ?? 16, ); const [validationText, setValidationText] = useState(); - const [preSharedDialogOpen, setPreSharedDialogOpen] = useState( - false, - ); + const [preSharedDialogOpen, setPreSharedDialogOpen] = + useState(false); const onSubmit = (data: ChannelValidation) => { const channel = create(Protobuf.Channel.ChannelSchema, { @@ -108,7 +107,7 @@ export const Channel = ({ channel }: SettingsPanelProps): JSX.Element => { channel?.settings?.moduleSettings?.positionPrecision === 32, positionPrecision: channel?.settings?.moduleSettings?.positionPrecision === - undefined + undefined ? 10 : channel?.settings?.moduleSettings?.positionPrecision, }, @@ -127,9 +126,10 @@ export const Channel = ({ channel }: SettingsPanelProps): JSX.Element => { description: "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed", properties: { - enumValue: channel.index === 0 - ? { PRIMARY: 1 } - : { DISABLED: 0, SECONDARY: 2 }, + enumValue: + channel.index === 0 + ? { PRIMARY: 1 } + : { DISABLED: 0, SECONDARY: 2 }, }, }, { @@ -192,31 +192,32 @@ export const Channel = ({ channel }: SettingsPanelProps): JSX.Element => { description: "If not sharing precise location, position shared on channel will be accurate within this distance", properties: { - enumValue: config.display?.units === 0 - ? { - "Within 23 km": 10, - "Within 12 km": 11, - "Within 5.8 km": 12, - "Within 2.9 km": 13, - "Within 1.5 km": 14, - "Within 700 m": 15, - "Within 350 m": 16, - "Within 200 m": 17, - "Within 90 m": 18, - "Within 50 m": 19, - } - : { - "Within 15 miles": 10, - "Within 7.3 miles": 11, - "Within 3.6 miles": 12, - "Within 1.8 miles": 13, - "Within 0.9 miles": 14, - "Within 0.5 miles": 15, - "Within 0.2 miles": 16, - "Within 600 feet": 17, - "Within 300 feet": 18, - "Within 150 feet": 19, - }, + enumValue: + config.display?.units === 0 + ? { + "Within 23 km": 10, + "Within 12 km": 11, + "Within 5.8 km": 12, + "Within 2.9 km": 13, + "Within 1.5 km": 14, + "Within 700 m": 15, + "Within 350 m": 16, + "Within 200 m": 17, + "Within 90 m": 18, + "Within 50 m": 19, + } + : { + "Within 15 miles": 10, + "Within 7.3 miles": 11, + "Within 3.6 miles": 12, + "Within 1.8 miles": 13, + "Within 0.9 miles": 14, + "Within 0.5 miles": 15, + "Within 0.2 miles": 16, + "Within 600 feet": 17, + "Within 300 feet": 18, + "Within 150 feet": 19, + }, }, }, ], diff --git a/src/components/PageComponents/Config/Bluetooth.tsx b/src/components/PageComponents/Config/Bluetooth.tsx index 97f137b1..97a38fd0 100644 --- a/src/components/PageComponents/Config/Bluetooth.tsx +++ b/src/components/PageComponents/Config/Bluetooth.tsx @@ -111,8 +111,9 @@ export const Bluetooth = () => { disabledBy: [ { fieldName: "mode", - selector: Protobuf.Config.Config_BluetoothConfig_PairingMode - .FIXED_PIN, + selector: + Protobuf.Config.Config_BluetoothConfig_PairingMode + .FIXED_PIN, invert: true, }, { diff --git a/src/components/PageComponents/Map/NodeDetail.tsx b/src/components/PageComponents/Map/NodeDetail.tsx index 7342bdf0..e89bcdae 100644 --- a/src/components/PageComponents/Map/NodeDetail.tsx +++ b/src/components/PageComponents/Map/NodeDetail.tsx @@ -37,23 +37,21 @@ export const NodeDetail = ({ node }: NodeDetailProps) => {
- {node.user?.publicKey && node.user?.publicKey.length > 0 - ? ( - - ) - : ( - - )} + {node.user?.publicKey && node.user?.publicKey.length > 0 ? ( + + ) : ( + + )}
{ node.deviceMetrics?.voltage?.toPrecision(3) ?? "Unknown" } volts`} > - {node.deviceMetrics?.batteryLevel > 100 - ? - : node.deviceMetrics?.batteryLevel > 80 - ? - : node.deviceMetrics?.batteryLevel > 20 - ? - : } + {node.deviceMetrics?.batteryLevel > 100 ? ( + + ) : node.deviceMetrics?.batteryLevel > 80 ? ( + + ) : node.deviceMetrics?.batteryLevel > 20 ? ( + + ) : ( + + )} {node.deviceMetrics?.batteryLevel > 100 ? "Charging" diff --git a/src/components/PageComponents/Messages/ChannelChat.tsx b/src/components/PageComponents/Messages/ChannelChat.tsx index 7969782b..bc54865c 100644 --- a/src/components/PageComponents/Messages/ChannelChat.tsx +++ b/src/components/PageComponents/Messages/ChannelChat.tsx @@ -34,7 +34,8 @@ export const ChannelChat = ({ const scrollToBottom = useCallback(() => { const scrollContainer = scrollContainerRef.current; if (scrollContainer) { - const isNearBottom = scrollContainer.scrollHeight - + const isNearBottom = + scrollContainer.scrollHeight - scrollContainer.scrollTop - scrollContainer.clientHeight < 100; @@ -71,8 +72,9 @@ export const ChannelChat = ({ key={message.id} message={message} sender={nodes.get(message.from)} - lastMsgSameUser={index > 0 && - messages[index - 1].from === message.from} + lastMsgSameUser={ + index > 0 && messages[index - 1].from === message.from + } /> ); })} diff --git a/src/components/PageComponents/Messages/MessageInput.tsx b/src/components/PageComponents/Messages/MessageInput.tsx index c91612be..8c2e369f 100644 --- a/src/components/PageComponents/Messages/MessageInput.tsx +++ b/src/components/PageComponents/Messages/MessageInput.tsx @@ -51,7 +51,7 @@ export const MessageInput = ({ myNodeNum, id, "ack", - ) + ), ) .catch((e: Types.PacketError) => setMessageState( @@ -61,7 +61,7 @@ export const MessageInput = ({ myNodeNum, e.id, e.error, - ) + ), ); }, [channel, connection, myNodeNum, setMessageState, to], diff --git a/src/components/PageComponents/Messages/TraceRoute.tsx b/src/components/PageComponents/Messages/TraceRoute.tsx index aa5580a8..e0883323 100644 --- a/src/components/PageComponents/Messages/TraceRoute.tsx +++ b/src/components/PageComponents/Messages/TraceRoute.tsx @@ -38,25 +38,23 @@ export const TraceRoute = ({ ))} {from?.user?.longName}
- {routeBack - ? ( - -

Route back:

-

{from?.user?.longName}

-

↓ {snrBack?.[0] ? snrBack[0] : "??"}dB

- {routeBack.map((hop, i) => ( - -

- {nodes.get(hop)?.user?.longName ?? - `!${numberToHexUnpadded(hop)}`} -

-

↓ {snrBack?.[i + 1] ? snrBack[i + 1] : "??"}dB

-
- ))} - {to?.user?.longName} -
- ) - : null} + {routeBack ? ( + +

Route back:

+

{from?.user?.longName}

+

↓ {snrBack?.[0] ? snrBack[0] : "??"}dB

+ {routeBack.map((hop, i) => ( + +

+ {nodes.get(hop)?.user?.longName ?? + `!${numberToHexUnpadded(hop)}`} +

+

↓ {snrBack?.[i + 1] ? snrBack[i + 1] : "??"}dB

+
+ ))} + {to?.user?.longName} +
+ ) : null} ); }; diff --git a/src/core/stores/deviceStore.ts b/src/core/stores/deviceStore.ts index 0822473f..2d3d89d0 100644 --- a/src/core/stores/deviceStore.ts +++ b/src/core/stores/deviceStore.ts @@ -299,11 +299,11 @@ export const useDeviceStore = createStore((set, get) => ({ if (!device) { return; } - const workingModuleConfigIndex = device?.workingModuleConfig - .findIndex( + const workingModuleConfigIndex = + device?.workingModuleConfig.findIndex( (wmc) => wmc.payloadVariant.case === - moduleConfig.payloadVariant.case, + moduleConfig.payloadVariant.case, ); if (workingModuleConfigIndex !== -1) { device.workingModuleConfig[workingModuleConfigIndex] = @@ -445,7 +445,8 @@ export const useDeviceStore = createStore((set, get) => ({ if (!device) { return; } - const currentNode = device.nodes.get(user.from) ?? + const currentNode = + device.nodes.get(user.from) ?? create(Protobuf.Mesh.NodeInfoSchema); currentNode.user = user.data; device.nodes.set(user.from, currentNode); @@ -459,7 +460,8 @@ export const useDeviceStore = createStore((set, get) => ({ if (!device) { return; } - const currentNode = device.nodes.get(position.from) ?? + const currentNode = + device.nodes.get(position.from) ?? create(Protobuf.Mesh.NodeInfoSchema); currentNode.position = position.data; device.nodes.set(position.from, currentNode); @@ -484,11 +486,12 @@ export const useDeviceStore = createStore((set, get) => ({ return; } const messageGroup = device.messages[message.type]; - const messageIndex = message.type === "direct" - ? message.from === device.hardware.myNodeNum - ? message.to - : message.from - : message.channel; + const messageIndex = + message.type === "direct" + ? message.from === device.hardware.myNodeNum + ? message.to + : message.from + : message.channel; const messages = messageGroup.get(messageIndex); if (messages) { @@ -561,9 +564,12 @@ export const useDeviceStore = createStore((set, get) => ({ } const messageGroup = device.messages[type]; - const messageIndex = type === "direct" - ? from === device.hardware.myNodeNum ? to : from - : channelIndex; + const messageIndex = + type === "direct" + ? from === device.hardware.myNodeNum + ? to + : from + : channelIndex; const messages = messageGroup.get(messageIndex); if (!messages) { diff --git a/src/pages/Channels.tsx b/src/pages/Channels.tsx index 4a2b3954..4c2cd83c 100644 --- a/src/pages/Channels.tsx +++ b/src/pages/Channels.tsx @@ -17,8 +17,8 @@ export const getChannelName = (channel: Protobuf.Channel.Channel) => channel.settings?.name.length ? channel.settings?.name : channel.index === 0 - ? "Primary" - : `Ch ${channel.index}`; + ? "Primary" + : `Ch ${channel.index}`; const ChannelsPage = () => { const { channels, setDialogOpen } = useDevice(); diff --git a/src/pages/Messages.tsx b/src/pages/Messages.tsx index 2ac0d274..c4060804 100644 --- a/src/pages/Messages.tsx +++ b/src/pages/Messages.tsx @@ -39,11 +39,13 @@ export const MessagesPage = () => { {filteredChannels.map((channel) => ( { setChatType("broadcast"); @@ -67,8 +69,9 @@ export const MessagesPage = () => { {filteredNodes.map((node) => ( { setChatType("direct"); @@ -91,30 +94,32 @@ export const MessagesPage = () => { chatType === "broadcast" && currentChannel ? getChannelName(currentChannel) : chatType === "direct" && nodes.get(activeChat) - ? (nodes.get(activeChat)?.user?.longName ?? nodeHex) - : "Loading..." + ? (nodes.get(activeChat)?.user?.longName ?? nodeHex) + : "Loading..." }`} - actions={chatType === "direct" - ? [ - { - icon: nodes.get(activeChat)?.user?.publicKey.length - ? LockIcon - : LockOpenIcon, - iconClasses: nodes.get(activeChat)?.user?.publicKey.length - ? "text-green-600" - : "text-yellow-300", - async onClick() { - const targetNode = nodes.get(activeChat)?.num; - if (targetNode === undefined) return; - toast({ - title: nodes.get(activeChat)?.user?.publicKey.length - ? "Chat is using PKI encryption." - : "Chat is using PSK encryption.", - }); - }, - }, - ] - : []} + actions={ + chatType === "direct" + ? [ + { + icon: nodes.get(activeChat)?.user?.publicKey.length + ? LockIcon + : LockOpenIcon, + iconClasses: nodes.get(activeChat)?.user?.publicKey.length + ? "text-green-600" + : "text-yellow-300", + async onClick() { + const targetNode = nodes.get(activeChat)?.num; + if (targetNode === undefined) return; + toast({ + title: nodes.get(activeChat)?.user?.publicKey.length + ? "Chat is using PKI encryption." + : "Chat is using PSK encryption.", + }); + }, + }, + ] + : [] + } > {allChannels.map( (channel) => diff --git a/src/pages/Nodes.tsx b/src/pages/Nodes.tsx index 30daaa84..429fcbdd 100644 --- a/src/pages/Nodes.tsx +++ b/src/pages/Nodes.tsx @@ -107,11 +107,9 @@ const NodesPage = (): JSX.Element => { > {node.user?.shortName ?? (node.user?.macaddr - ? `${ - base16 + ? `${base16 .stringify(node.user?.macaddr.subarray(4, 6) ?? []) - .toLowerCase() - }` + .toLowerCase()}` : `${numberToHexUnpadded(node.num).slice(-4)}`)} , @@ -122,11 +120,9 @@ const NodesPage = (): JSX.Element => { > {node.user?.longName ?? (node.user?.macaddr - ? `Meshtastic ${ - base16 + ? `Meshtastic ${base16 .stringify(node.user?.macaddr.subarray(4, 6) ?? []) - .toLowerCase() - }` + .toLowerCase()}` : `!${numberToHexUnpadded(node.num)}`)} , @@ -140,9 +136,11 @@ const NodesPage = (): JSX.Element => { ?.join(":") ?? "UNK"} , - {node.lastHeard === 0 - ?

Never

- : } + {node.lastHeard === 0 ? ( +

Never

+ ) : ( + + )}
, {node.snr}db/ @@ -150,17 +148,19 @@ const NodesPage = (): JSX.Element => { {(node.snr + 10) * 5}raw , - {node.user?.publicKey && node.user?.publicKey.length > 0 - ? - : } + {node.user?.publicKey && node.user?.publicKey.length > 0 ? ( + + ) : ( + + )} , {node.lastHeard !== 0 ? node.viaMqtt === false && node.hopsAway === 0 ? "Direct" : `${node.hopsAway.toString()} ${ - node.hopsAway > 1 ? "hops" : "hop" - } away` + node.hopsAway > 1 ? "hops" : "hop" + } away` : "-"} {node.viaMqtt === true ? ", via MQTT" : ""} , diff --git a/src/validation/channel.ts b/src/validation/channel.ts index 4f4d43bb..6316ce4e 100644 --- a/src/validation/channel.ts +++ b/src/validation/channel.ts @@ -10,7 +10,8 @@ import { } from "class-validator"; export class ChannelValidation - implements Omit { + implements Omit +{ @IsNumber() index: number; @@ -21,7 +22,8 @@ export class ChannelValidation } export class Channel_SettingsValidation - implements Omit { + implements Omit +{ @IsNumber() channelNum: number; diff --git a/src/validation/config/bluetooth.ts b/src/validation/config/bluetooth.ts index 67492240..e84d8f27 100644 --- a/src/validation/config/bluetooth.ts +++ b/src/validation/config/bluetooth.ts @@ -2,11 +2,13 @@ import type { Message } from "@bufbuild/protobuf"; import { Protobuf } from "@meshtastic/core"; import { IsBoolean, IsEnum, IsInt } from "class-validator"; -export class BluetoothValidation implements - Omit< - Protobuf.Config.Config_BluetoothConfig, - keyof Message | "deviceLoggingEnabled" - > { +export class BluetoothValidation + implements + Omit< + Protobuf.Config.Config_BluetoothConfig, + keyof Message | "deviceLoggingEnabled" + > +{ @IsBoolean() enabled: boolean; diff --git a/src/validation/config/position.ts b/src/validation/config/position.ts index 4163db76..97822bb4 100644 --- a/src/validation/config/position.ts +++ b/src/validation/config/position.ts @@ -4,11 +4,13 @@ import { IsArray, IsBoolean, IsEnum, IsInt } from "class-validator"; const DeprecatedPositionValidationFields = ["gpsEnabled", "gpsAttemptTime"]; -export class PositionValidation implements - Omit< - Protobuf.Config.Config_PositionConfig, - keyof Message | (typeof DeprecatedPositionValidationFields)[number] - > { +export class PositionValidation + implements + Omit< + Protobuf.Config.Config_PositionConfig, + keyof Message | (typeof DeprecatedPositionValidationFields)[number] + > +{ @IsInt() positionBroadcastSecs: number; diff --git a/src/validation/config/security.ts b/src/validation/config/security.ts index b856d521..0b9aa7d4 100644 --- a/src/validation/config/security.ts +++ b/src/validation/config/security.ts @@ -2,11 +2,13 @@ import type { Message } from "@bufbuild/protobuf"; import type { Protobuf } from "@meshtastic/core"; import { IsBoolean, IsString } from "class-validator"; -export class SecurityValidation implements - Omit< - Protobuf.Config.Config_SecurityConfig, - keyof Message | "adminKey" | "privateKey" | "publicKey" - > { +export class SecurityValidation + implements + Omit< + Protobuf.Config.Config_SecurityConfig, + keyof Message | "adminKey" | "privateKey" | "publicKey" + > +{ @IsBoolean() adminChannelEnabled: boolean; diff --git a/src/validation/moduleConfig/ambientLighting.ts b/src/validation/moduleConfig/ambientLighting.ts index 93124502..30801067 100644 --- a/src/validation/moduleConfig/ambientLighting.ts +++ b/src/validation/moduleConfig/ambientLighting.ts @@ -2,11 +2,13 @@ import type { Message } from "@bufbuild/protobuf"; import type { Protobuf } from "@meshtastic/core"; import { IsBoolean, IsInt } from "class-validator"; -export class AmbientLightingValidation implements - Omit< - Protobuf.ModuleConfig.ModuleConfig_AmbientLightingConfig, - keyof Message - > { +export class AmbientLightingValidation + implements + Omit< + Protobuf.ModuleConfig.ModuleConfig_AmbientLightingConfig, + keyof Message + > +{ @IsBoolean() ledState: boolean; diff --git a/src/validation/moduleConfig/cannedMessage.ts b/src/validation/moduleConfig/cannedMessage.ts index 59ecf755..6701c553 100644 --- a/src/validation/moduleConfig/cannedMessage.ts +++ b/src/validation/moduleConfig/cannedMessage.ts @@ -4,10 +4,8 @@ import { IsBoolean, IsEnum, IsInt, Length } from "class-validator"; export class CannedMessageValidation implements - Omit< - Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig, - keyof Message - > { + Omit +{ @IsBoolean() rotary1Enabled: boolean; @@ -21,16 +19,13 @@ export class CannedMessageValidation inputbrokerPinPress: number; @IsEnum(Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar) - inputbrokerEventCw: - Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar; + inputbrokerEventCw: Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar; @IsEnum(Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar) - inputbrokerEventCcw: - Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar; + inputbrokerEventCcw: Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar; @IsEnum(Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar) - inputbrokerEventPress: - Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar; + inputbrokerEventPress: Protobuf.ModuleConfig.ModuleConfig_CannedMessageConfig_InputEventChar; @IsBoolean() updown1Enabled: boolean; diff --git a/src/validation/moduleConfig/detectionSensor.ts b/src/validation/moduleConfig/detectionSensor.ts index b812df17..b6acaa98 100644 --- a/src/validation/moduleConfig/detectionSensor.ts +++ b/src/validation/moduleConfig/detectionSensor.ts @@ -2,11 +2,13 @@ import type { Message } from "@bufbuild/protobuf"; import type { Protobuf } from "@meshtastic/core"; import { IsBoolean, IsInt, Length } from "class-validator"; -export class DetectionSensorValidation implements - Omit< - Protobuf.ModuleConfig.ModuleConfig_DetectionSensorConfig, - keyof Message - > { +export class DetectionSensorValidation + implements + Omit< + Protobuf.ModuleConfig.ModuleConfig_DetectionSensorConfig, + keyof Message + > +{ @IsBoolean() enabled: boolean; diff --git a/src/validation/moduleConfig/externalNotification.ts b/src/validation/moduleConfig/externalNotification.ts index 5b68ffa3..e7b9e044 100644 --- a/src/validation/moduleConfig/externalNotification.ts +++ b/src/validation/moduleConfig/externalNotification.ts @@ -2,11 +2,13 @@ import type { Message } from "@bufbuild/protobuf"; import type { Protobuf } from "@meshtastic/core"; import { IsBoolean, IsInt } from "class-validator"; -export class ExternalNotificationValidation implements - Omit< - Protobuf.ModuleConfig.ModuleConfig_ExternalNotificationConfig, - keyof Message - > { +export class ExternalNotificationValidation + implements + Omit< + Protobuf.ModuleConfig.ModuleConfig_ExternalNotificationConfig, + keyof Message + > +{ @IsBoolean() enabled: boolean; diff --git a/src/validation/moduleConfig/neighborInfo.ts b/src/validation/moduleConfig/neighborInfo.ts index 513b8d7c..b81a04d6 100644 --- a/src/validation/moduleConfig/neighborInfo.ts +++ b/src/validation/moduleConfig/neighborInfo.ts @@ -4,7 +4,8 @@ import { IsBoolean, IsInt } from "class-validator"; export class NeighborInfoValidation implements - Omit { + Omit +{ @IsBoolean() enabled: boolean; diff --git a/src/validation/moduleConfig/paxcounter.ts b/src/validation/moduleConfig/paxcounter.ts index 6b3eeb9b..10d0ece0 100644 --- a/src/validation/moduleConfig/paxcounter.ts +++ b/src/validation/moduleConfig/paxcounter.ts @@ -4,7 +4,8 @@ import { IsBoolean, IsInt } from "class-validator"; export class PaxcounterValidation implements - Omit { + Omit +{ @IsBoolean() enabled: boolean; diff --git a/src/validation/moduleConfig/serial.ts b/src/validation/moduleConfig/serial.ts index c814a71b..db69c7c5 100644 --- a/src/validation/moduleConfig/serial.ts +++ b/src/validation/moduleConfig/serial.ts @@ -4,7 +4,8 @@ import { IsBoolean, IsEnum, IsInt } from "class-validator"; export class SerialValidation implements - Omit { + Omit +{ @IsBoolean() enabled: boolean; diff --git a/src/validation/moduleConfig/telemetry.ts b/src/validation/moduleConfig/telemetry.ts index 921fb04a..08cc3d70 100644 --- a/src/validation/moduleConfig/telemetry.ts +++ b/src/validation/moduleConfig/telemetry.ts @@ -4,7 +4,8 @@ import { IsBoolean, IsInt } from "class-validator"; export class TelemetryValidation implements - Omit { + Omit +{ @IsInt() deviceUpdateInterval: number;