From ce146a32fe0e361dacda417a1e8f0797fa95c26e Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Wed, 26 Nov 2025 03:39:25 -0800 Subject: [PATCH] chore: lint fixes --- components.json | 40 +-- convex/modules.json | 314 +++++++++++------------ convex/profiles.ts | 9 +- convex/tsconfig.json | 44 ++-- package.json | 94 +++---- src/constants/versions.ts | 478 ++++++++++++++++++------------------ src/pages/ProfileDetail.tsx | 2 +- tsconfig.json | 50 ++-- tsconfig.node.json | 16 +- wrangler.json | 16 +- 10 files changed, 528 insertions(+), 535 deletions(-) diff --git a/components.json b/components.json index f782752..1537d50 100644 --- a/components.json +++ b/components.json @@ -1,22 +1,22 @@ { - "$schema": "https://ui.shadcn.com/schema.json", - "style": "new-york", - "rsc": false, - "tsx": true, - "tailwind": { - "config": "tailwind.config.js", - "css": "src/index.css", - "baseColor": "neutral", - "cssVariables": true, - "prefix": "" - }, - "iconLibrary": "lucide", - "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "lib": "@/lib", - "hooks": "@/hooks" - }, - "registries": {} + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "registries": {} } diff --git a/convex/modules.json b/convex/modules.json index 7830a8a..48c6a9e 100644 --- a/convex/modules.json +++ b/convex/modules.json @@ -1,159 +1,159 @@ { - "modules": [ - { - "id": "MESHTASTIC_EXCLUDE_ADMIN", - "name": "Admin", - "description": "Remote device configuration and management. Allows changing settings, reading device info, and rebooting nodes over the mesh network." - }, - { - "id": "MESHTASTIC_EXCLUDE_ATAK", - "name": "ATAK Plugin", - "description": "Integration with ATAK (Android Team Awareness Kit) for tactical situational awareness. Enables military/emergency response coordination." - }, - { - "id": "MESHTASTIC_EXCLUDE_AUDIO", - "name": "Audio", - "description": "Audio codec support for voice communication over the mesh." - }, - { - "id": "MESHTASTIC_EXCLUDE_BLUETOOTH", - "name": "Bluetooth", - "description": "Bluetooth connectivity for pairing with phones and apps. Required for mobile app communication on most devices." - }, - { - "id": "MESHTASTIC_EXCLUDE_CANNEDMESSAGES", - "name": "Canned Messages", - "description": "Pre-defined quick messages that can be sent with button presses. Useful for devices with limited input (no keyboard). Includes on-screen keyboard for some devices." - }, - { - "id": "MESHTASTIC_EXCLUDE_DETECTIONSENSOR", - "name": "Detection Sensor", - "description": "Motion/presence detection sensor integration. Broadcasts detection events when sensors trigger (PIR, door switches, etc.)." - }, - { - "id": "MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR", - "name": "Environmental Sensor", - "description": "Environmental monitoring sensors including temperature, humidity, pressure, air quality, and light sensors. Broadcasts telemetry data to the mesh." - }, - { - "id": "MESHTASTIC_EXCLUDE_EXTERNALNOTIFICATION", - "name": "External Notification", - "description": "Drive external LEDs, buzzers, and speakers for notifications. Plays RTTTL ringtones and can control GPIO outputs when messages arrive." - }, - { - "id": "MESHTASTIC_EXCLUDE_GPS", - "name": "GPS", - "description": "GPS receiver support for position tracking and sharing. Disabling prevents position broadcasts but the device still relays position packets for other nodes." - }, - { - "id": "MESHTASTIC_EXCLUDE_HEALTH_TELEMETRY", - "name": "Health Telemetry", - "description": "Heart rate and health monitoring sensors (like MAX30102 pulse oximeter). Broadcasts health metrics to the mesh." - }, - { - "id": "MESHTASTIC_EXCLUDE_I2C", - "name": "I2C", - "description": "I2C bus support for external sensors and peripherals. Required for most sensor modules and OLED displays." - }, - { - "id": "MESHTASTIC_EXCLUDE_INPUTBROKER", - "name": "Input Broker", - "description": "Input device handling (buttons, encoders, touchscreens). Routes button presses to appropriate modules like Canned Messages." - }, - { - "id": "MESHTASTIC_EXCLUDE_MQTT", - "name": "MQTT", - "description": "MQTT client for cloud integration. Publishes mesh messages to MQTT brokers and subscribes to receive cloud messages. Enables IoT integration and remote monitoring." - }, - { - "id": "MESHTASTIC_EXCLUDE_NEIGHBORINFO", - "name": "Neighbor Info", - "description": "Broadcasts information about directly-reachable neighbor nodes including signal strength (SNR). Helps build mesh topology maps and track network health." - }, - { - "id": "MESHTASTIC_EXCLUDE_PAXCOUNTER", - "name": "Pax Counter", - "description": "Counts nearby WiFi and Bluetooth devices for crowd density estimation. Useful for people-counting in public spaces." - }, - { - "id": "MESHTASTIC_EXCLUDE_PKI", - "name": "PKI", - "description": "Public Key Infrastructure for enhanced security and key verification between nodes." - }, - { - "id": "MESHTASTIC_EXCLUDE_POWERMON", - "name": "Power Monitor", - "description": "Battery and power monitoring hardware support (INA260, INA219, etc.). Tracks voltage, current, and power consumption." - }, - { - "id": "MESHTASTIC_EXCLUDE_POWER_FSM", - "name": "Power FSM", - "description": "Power management finite state machine. Handles sleep modes, power state transitions, and battery optimization." - }, - { - "id": "MESHTASTIC_EXCLUDE_POWER_TELEMETRY", - "name": "Power Telemetry", - "description": "Broadcasts battery voltage, current, and power consumption data to the mesh. Different from Power Monitor which is the hardware interface." - }, - { - "id": "MESHTASTIC_EXCLUDE_POWERSTRESS", - "name": "Power Stress", - "description": "Power consumption testing tool. Stresses the device to measure battery life under various transmission patterns. For development/testing only." - }, - { - "id": "MESHTASTIC_EXCLUDE_RANGETEST", - "name": "Range Test", - "description": "Mesh range and signal quality testing. Sends periodic packets and logs signal strength (RSSI), SNR, and packet loss statistics to a file." - }, - { - "id": "MESHTASTIC_EXCLUDE_REMOTEHARDWARE", - "name": "Remote Hardware", - "description": "Remote GPIO control over the mesh. Read/write digital pins, read ADC values, and control hardware on remote nodes." - }, - { - "id": "MESHTASTIC_EXCLUDE_SCREEN", - "name": "Screen", - "description": "OLED/E-Ink display support. Shows messages, node info, and status on screen. Disabling saves power but removes visual feedback." - }, - { - "id": "MESHTASTIC_EXCLUDE_SERIAL", - "name": "Serial", - "description": "Serial port communication for sensors and external devices. Can relay serial data over the mesh and supports NMEA GPS bridging." - }, - { - "id": "MESHTASTIC_EXCLUDE_STOREFORWARD", - "name": "Store & Forward", - "description": "Message store-and-forward server for offline nodes. Router devices can cache messages and replay them when distant nodes reconnect. Requires PSRAM." - }, - { - "id": "MESHTASTIC_EXCLUDE_TEXTMESSAGE", - "name": "Text Messaging", - "description": "Send and receive text messages between nodes. Displays messages on OLED screens and forwards to connected apps. **Important:** Disabling prevents sending/receiving but the node still relays messages for others." - }, - { - "id": "MESHTASTIC_EXCLUDE_TRACEROUTE", - "name": "Traceroute", - "description": "Network path tracing tool. Shows the route packets take through the mesh, including all intermediate hops and hop limits." - }, - { - "id": "MESHTASTIC_EXCLUDE_TZ", - "name": "Timezone", - "description": "Timezone database support for local time display. Allows devices to show correct local time based on GPS position." - }, - { - "id": "MESHTASTIC_EXCLUDE_WAYPOINT", - "name": "Waypoint", - "description": "Share and display waypoints (points of interest) on the mesh. Shows waypoints on screen and in apps for navigation and location marking." - }, - { - "id": "MESHTASTIC_EXCLUDE_WEBSERVER", - "name": "Web Server", - "description": "Built-in web interface for device configuration. Automatically excluded if WiFi is disabled." - }, - { - "id": "MESHTASTIC_EXCLUDE_WIFI", - "name": "WiFi", - "description": "WiFi connectivity for network access, web server, and MQTT. Disabling saves power but removes WiFi features including the web interface." - } - ] + "modules": [ + { + "id": "MESHTASTIC_EXCLUDE_ADMIN", + "name": "Admin", + "description": "Remote device configuration and management. Allows changing settings, reading device info, and rebooting nodes over the mesh network." + }, + { + "id": "MESHTASTIC_EXCLUDE_ATAK", + "name": "ATAK Plugin", + "description": "Integration with ATAK (Android Team Awareness Kit) for tactical situational awareness. Enables military/emergency response coordination." + }, + { + "id": "MESHTASTIC_EXCLUDE_AUDIO", + "name": "Audio", + "description": "Audio codec support for voice communication over the mesh." + }, + { + "id": "MESHTASTIC_EXCLUDE_BLUETOOTH", + "name": "Bluetooth", + "description": "Bluetooth connectivity for pairing with phones and apps. Required for mobile app communication on most devices." + }, + { + "id": "MESHTASTIC_EXCLUDE_CANNEDMESSAGES", + "name": "Canned Messages", + "description": "Pre-defined quick messages that can be sent with button presses. Useful for devices with limited input (no keyboard). Includes on-screen keyboard for some devices." + }, + { + "id": "MESHTASTIC_EXCLUDE_DETECTIONSENSOR", + "name": "Detection Sensor", + "description": "Motion/presence detection sensor integration. Broadcasts detection events when sensors trigger (PIR, door switches, etc.)." + }, + { + "id": "MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR", + "name": "Environmental Sensor", + "description": "Environmental monitoring sensors including temperature, humidity, pressure, air quality, and light sensors. Broadcasts telemetry data to the mesh." + }, + { + "id": "MESHTASTIC_EXCLUDE_EXTERNALNOTIFICATION", + "name": "External Notification", + "description": "Drive external LEDs, buzzers, and speakers for notifications. Plays RTTTL ringtones and can control GPIO outputs when messages arrive." + }, + { + "id": "MESHTASTIC_EXCLUDE_GPS", + "name": "GPS", + "description": "GPS receiver support for position tracking and sharing. Disabling prevents position broadcasts but the device still relays position packets for other nodes." + }, + { + "id": "MESHTASTIC_EXCLUDE_HEALTH_TELEMETRY", + "name": "Health Telemetry", + "description": "Heart rate and health monitoring sensors (like MAX30102 pulse oximeter). Broadcasts health metrics to the mesh." + }, + { + "id": "MESHTASTIC_EXCLUDE_I2C", + "name": "I2C", + "description": "I2C bus support for external sensors and peripherals. Required for most sensor modules and OLED displays." + }, + { + "id": "MESHTASTIC_EXCLUDE_INPUTBROKER", + "name": "Input Broker", + "description": "Input device handling (buttons, encoders, touchscreens). Routes button presses to appropriate modules like Canned Messages." + }, + { + "id": "MESHTASTIC_EXCLUDE_MQTT", + "name": "MQTT", + "description": "MQTT client for cloud integration. Publishes mesh messages to MQTT brokers and subscribes to receive cloud messages. Enables IoT integration and remote monitoring." + }, + { + "id": "MESHTASTIC_EXCLUDE_NEIGHBORINFO", + "name": "Neighbor Info", + "description": "Broadcasts information about directly-reachable neighbor nodes including signal strength (SNR). Helps build mesh topology maps and track network health." + }, + { + "id": "MESHTASTIC_EXCLUDE_PAXCOUNTER", + "name": "Pax Counter", + "description": "Counts nearby WiFi and Bluetooth devices for crowd density estimation. Useful for people-counting in public spaces." + }, + { + "id": "MESHTASTIC_EXCLUDE_PKI", + "name": "PKI", + "description": "Public Key Infrastructure for enhanced security and key verification between nodes." + }, + { + "id": "MESHTASTIC_EXCLUDE_POWERMON", + "name": "Power Monitor", + "description": "Battery and power monitoring hardware support (INA260, INA219, etc.). Tracks voltage, current, and power consumption." + }, + { + "id": "MESHTASTIC_EXCLUDE_POWER_FSM", + "name": "Power FSM", + "description": "Power management finite state machine. Handles sleep modes, power state transitions, and battery optimization." + }, + { + "id": "MESHTASTIC_EXCLUDE_POWER_TELEMETRY", + "name": "Power Telemetry", + "description": "Broadcasts battery voltage, current, and power consumption data to the mesh. Different from Power Monitor which is the hardware interface." + }, + { + "id": "MESHTASTIC_EXCLUDE_POWERSTRESS", + "name": "Power Stress", + "description": "Power consumption testing tool. Stresses the device to measure battery life under various transmission patterns. For development/testing only." + }, + { + "id": "MESHTASTIC_EXCLUDE_RANGETEST", + "name": "Range Test", + "description": "Mesh range and signal quality testing. Sends periodic packets and logs signal strength (RSSI), SNR, and packet loss statistics to a file." + }, + { + "id": "MESHTASTIC_EXCLUDE_REMOTEHARDWARE", + "name": "Remote Hardware", + "description": "Remote GPIO control over the mesh. Read/write digital pins, read ADC values, and control hardware on remote nodes." + }, + { + "id": "MESHTASTIC_EXCLUDE_SCREEN", + "name": "Screen", + "description": "OLED/E-Ink display support. Shows messages, node info, and status on screen. Disabling saves power but removes visual feedback." + }, + { + "id": "MESHTASTIC_EXCLUDE_SERIAL", + "name": "Serial", + "description": "Serial port communication for sensors and external devices. Can relay serial data over the mesh and supports NMEA GPS bridging." + }, + { + "id": "MESHTASTIC_EXCLUDE_STOREFORWARD", + "name": "Store & Forward", + "description": "Message store-and-forward server for offline nodes. Router devices can cache messages and replay them when distant nodes reconnect. Requires PSRAM." + }, + { + "id": "MESHTASTIC_EXCLUDE_TEXTMESSAGE", + "name": "Text Messaging", + "description": "Send and receive text messages between nodes. Displays messages on OLED screens and forwards to connected apps. **Important:** Disabling prevents sending/receiving but the node still relays messages for others." + }, + { + "id": "MESHTASTIC_EXCLUDE_TRACEROUTE", + "name": "Traceroute", + "description": "Network path tracing tool. Shows the route packets take through the mesh, including all intermediate hops and hop limits." + }, + { + "id": "MESHTASTIC_EXCLUDE_TZ", + "name": "Timezone", + "description": "Timezone database support for local time display. Allows devices to show correct local time based on GPS position." + }, + { + "id": "MESHTASTIC_EXCLUDE_WAYPOINT", + "name": "Waypoint", + "description": "Share and display waypoints (points of interest) on the mesh. Shows waypoints on screen and in apps for navigation and location marking." + }, + { + "id": "MESHTASTIC_EXCLUDE_WEBSERVER", + "name": "Web Server", + "description": "Built-in web interface for device configuration. Automatically excluded if WiFi is disabled." + }, + { + "id": "MESHTASTIC_EXCLUDE_WIFI", + "name": "WiFi", + "description": "WiFi connectivity for network access, web server, and MQTT. Disabling saves power but removes WiFi features including the web interface." + } + ] } diff --git a/convex/profiles.ts b/convex/profiles.ts index 4d4846e..8b3395f 100644 --- a/convex/profiles.ts +++ b/convex/profiles.ts @@ -1,13 +1,6 @@ import { getAuthUserId } from '@convex-dev/auth/server' import { v } from 'convex/values' -import { api, internal } from './_generated/api' -import type { Doc, Id } from './_generated/dataModel' -import { action, internalMutation, mutation, query } from './_generated/server' -import { - computeBuildHashForProfile, - computeFlagsFromProfile, - getR2ArtifactUrl, -} from './builds' +import { internalMutation, mutation, query } from './_generated/server' export const list = query({ args: {}, diff --git a/convex/tsconfig.json b/convex/tsconfig.json index a84f928..7374127 100644 --- a/convex/tsconfig.json +++ b/convex/tsconfig.json @@ -1,25 +1,25 @@ { - /* This TypeScript project config describes the environment that - * Convex functions run in and is used to typecheck them. - * You can modify it, but some settings are required to use Convex. - */ - "compilerOptions": { - /* These settings are not required by Convex and can be modified. */ - "allowJs": true, - "strict": true, - "moduleResolution": "Bundler", - "jsx": "react-jsx", - "skipLibCheck": true, - "allowSyntheticDefaultImports": true, + /* This TypeScript project config describes the environment that + * Convex functions run in and is used to typecheck them. + * You can modify it, but some settings are required to use Convex. + */ + "compilerOptions": { + /* These settings are not required by Convex and can be modified. */ + "allowJs": true, + "strict": true, + "moduleResolution": "Bundler", + "jsx": "react-jsx", + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, - /* These compiler options are required by Convex */ - "target": "ESNext", - "lib": ["ES2021", "dom"], - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "isolatedModules": true, - "noEmit": true - }, - "include": ["./**/*"], - "exclude": ["./_generated"] + /* These compiler options are required by Convex */ + "target": "ESNext", + "lib": ["ES2021", "dom"], + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "isolatedModules": true, + "noEmit": true + }, + "include": ["./**/*"], + "exclude": ["./_generated"] } diff --git a/package.json b/package.json index d0f816d..598ec7d 100644 --- a/package.json +++ b/package.json @@ -1,49 +1,49 @@ { - "name": "react-web-flasher", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "generate:versions": "node scripts/generate-versions.js", - "dev": "bun run generate:versions && vite", - "build": "bun run generate:versions && tsc && vite build", - "lint": "biome lint", - "lint:fix": "biome lint --fix && biome format --write", - "preview": "vite preview", - "deploy": "npx convex deploy --cmd 'bun run build' && wrangler deploy" - }, - "dependencies": { - "@aws-sdk/client-s3": "^3.937.0", - "@aws-sdk/s3-request-presigner": "^3.937.0", - "@convex-dev/auth": "^0.0.90", - "@radix-ui/react-checkbox": "^1.3.3", - "@radix-ui/react-slot": "^1.2.4", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "convex": "^1.29.3", - "convex-helpers": "^0.1.106", - "lucide-react": "^0.554.0", - "next-themes": "^0.4.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-hook-form": "^7.66.1", - "react-router-dom": "^7.9.6", - "sonner": "^2.0.7", - "tailwind-merge": "^3.4.0", - "tailwindcss-animate": "^1.0.7" - }, - "devDependencies": { - "@biomejs/biome": "^2.3.7", - "@tailwindcss/postcss": "^4.1.17", - "@types/node": "^24.10.1", - "@types/react": "^18.0.37", - "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "^4.0.0", - "autoprefixer": "^10.4.22", - "postcss": "^8.5.6", - "tailwindcss": "^4.1.17", - "typescript": "^5.0.2", - "vite": "^4.3.9", - "wrangler": "^4.50.0" - } + "name": "react-web-flasher", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "generate:versions": "node scripts/generate-versions.js", + "dev": "bun run generate:versions && vite", + "build": "bun run generate:versions && tsc && vite build", + "lint": "biome lint", + "lint:fix": "biome lint --fix && biome format --write", + "preview": "vite preview", + "deploy": "npx convex deploy --cmd 'bun run build' && wrangler deploy" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.937.0", + "@aws-sdk/s3-request-presigner": "^3.937.0", + "@convex-dev/auth": "^0.0.90", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-slot": "^1.2.4", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "convex": "^1.29.3", + "convex-helpers": "^0.1.106", + "lucide-react": "^0.554.0", + "next-themes": "^0.4.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-hook-form": "^7.66.1", + "react-router-dom": "^7.9.6", + "sonner": "^2.0.7", + "tailwind-merge": "^3.4.0", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@biomejs/biome": "^2.3.7", + "@tailwindcss/postcss": "^4.1.17", + "@types/node": "^24.10.1", + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^4.0.0", + "autoprefixer": "^10.4.22", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.17", + "typescript": "^5.0.2", + "vite": "^4.3.9", + "wrangler": "^4.50.0" + } } diff --git a/src/constants/versions.ts b/src/constants/versions.ts index 7b188bc..e46c665 100644 --- a/src/constants/versions.ts +++ b/src/constants/versions.ts @@ -1,242 +1,242 @@ // This file is auto-generated by scripts/generate-versions.js export const VERSIONS = [ - "v2.7.15.567b8ea", - "v2.7.14.e959000", - "v2.7.13.597fa0b", - "v2.7.12.45f15b8", - "v2.7.11.ee68575", - "v2.7.10.94d4bdf", - "v2.7.9.70724be", - "v2.7.8.a0c0388", - "v2.7.7.5ae4ff9", - "v2.7.6.834c3c5", - "v2.7.5.ddd1499", - "v2.7.4.c1f4f79", - "v2.7.3.cf574c7", - "v2.7.2.f6d3782", - "v2.7.1.f35ca81", - "v2.7.0.705515a", - "v2.7.0.195b7cc", - "v2.6.13.0561f2c", - "v2.6.12.9861e82", - "v2.6.11.60ec05e", - "v2.6.10.9ce4455", - "v2.6.9.f223b8a", - "v2.6.8.ef9d0d7", - "v2.6.7.2d6181f", - "v2.6.6.54c1423", - "v2.6.5.fc3d9f2", - "v2.6.4.b89355f", - "v2.6.3.d28af68", - "v2.6.3.640e731", - "v2.6.2.31c0e8f", - "v2.6.1.7c3edde", - "v2.6.0.f7afa9a", - "v2.5.23.bf958ed", - "v2.5.22.d1fa27d", - "v2.5.21.447533a", - "v2.5.20.4c97351", - "v2.5.19.f9876cf", - "v2.5.19.d5cd6f8", - "v2.5.18.89ebafc", - "v2.5.17.b4b2fd6", - "v2.5.16.f81d3b0", - "v2.5.15.79da236", - "v2.5.14.f2ee0df", - "v2.5.13.295278b", - "v2.5.13.1a06f88", - "v2.5.12.aa184e6", - "v2.5.11.8e2a3e5", - "v2.5.10.0fc5c9b", - "v2.5.9.936260f", - "v2.5.8.6485f03", - "v2.5.7.f77c87d", - "v2.5.6.d55c08d", - "v2.5.5.e182ae7", - "v2.5.4.8d288d5", - "v2.5.3.a70d5ee", - "v2.5.2.771cb52", - "v2.5.1.c13b44b", - "v2.5.0.e470619", - "v2.5.0.d6dac17", - "v2.5.0.ab7de7f", - "v2.5.0.33eb073", - "v2.5.0.9e55e6b", - "v2.5.0.9ac0e26", - "v2.4.3.efc27f2", - "v2.4.3.91d6612", - "v2.4.2.5b45303", - "v2.4.1.394e0e1", - "v2.4.0.46d7b82", - "v2.3.15.deb7c27", - "v2.3.14.64531fa", - "v2.3.13.83f5ba0", - "v2.3.12.24458a7", - "v2.3.11.2740a56", - "v2.3.10.d19607b", - "v2.3.9.f06c56a", - "v2.3.8.d490a33", - "v2.3.7.30fbcab", - "v2.3.6.7a3570a", - "v2.3.5.2f9b68e", - "v2.3.4.ea61808", - "v2.3.3.8187fa7", - "v2.3.2.63df972", - "v2.3.1.4fa7f5a", - "v2.3.0.5f47ca1", - "v2.2.24.e6a2c06", - "v2.2.23.5672e68", - "v2.2.22.404d0dd", - "v2.2.21.7f7c5cb", - "v2.2.20.af5ac32", - "v2.2.19.8f6a283", - "v2.2.18.e9bde80", - "v2.2.17.dbac2b1", - "v2.2.16.1c6acfd", - "v2.2.15.31c4693", - "v2.2.14.57542ce", - "v2.2.13.f570204", - "v2.2.12.092e6f2", - "v2.2.11.10265aa", - "v2.2.10.7cebd79", - "v2.2.9.47301a5", - "v2.2.8.61f6fb2", - "v2.2.7.e8970ad", - "v2.2.6.b53cb38", - "v2.2.5.8255128", - "v2.2.4.3bcab0e", - "v2.2.3.282cc0b", - "v2.2.2.f35c7be", - "v2.2.1.fb5f2e4", - "v2.2.0.9f6584b", - "v2.1.23.04bbdc6", - "v2.1.22.191a69d", - "v2.1.21.97d7a89", - "v2.1.20.470363d", - "v2.1.19.eb7025f", - "v2.1.18.de53280", - "v2.1.17.7ca2e81", - "v2.1.16.a2c5b92", - "v2.1.15.cd78723", - "v2.1.14.99a31c1", - "v2.1.13.7475c86", - "v2.1.12.7711b03", - "v2.1.11.5ec624d", - "v2.1.10.7ef12c7", - "v2.1.9.d43ddc9", - "v2.1.8.ee971e3", - "v2.1.7.242f880", - "v2.1.6.5679a82", - "v2.1.5.23272da", - "v2.1.4.958d2cf", - "v2.1.3.8c68d88", - "v2.1.2.6d20215", - "v2.1.1.dc2ca9c", - "v2.1.0.331a1af", - "v2.0.23.7bb281d", - "v2.0.22.fbfd0f1", - "v2.0.21.83e6cea", - "v2.0.20.7100416", - "v2.0.19.3209aea", - "v2.0.18.1a7991c", - "v2.0.17.5d1c06b", - "v2.0.16.2242b68", - "v2.0.15.aafbde0", - "v2.0.14.2baaad8", - "v2.0.13.7e27729", - "v2.0.12.2400dd4", - "v2.0.11.8914d1a", - "v2.0.10.e09b12c", - "v2.0.9.6ea0963", - "v2.0.8.090e166", - "v2.0.7.91ff7b9", - "v2.0.6.97fd5cf", - "v2.0.5.65e8209", - "v2.0.4.5417671", - "v2.0.3.09fe616", - "v2.0.2.8146e84", - "v2.0.1.ad05b91", - "v2.0.0.18ab874", - "v1.3.48.82bcd39", - "v1.3.47.05147c0", - "v1.3.46.d4ea956", - "v1.3.45.b0d0552", - "v1.3.44.4fa8d02", - "v1.3.43.aae9d2f", - "v1.3.42.9bd9252", - "v1.3.41.80ddb81", - "v1.3.40.e87ecc2", - "v1.3.39.ddc3727", - "v1.3.38.1253abd", - "v1.3.37.97712a9", - "v1.3.36.dd720f2", - "v1.3.36.64f852e", - "v1.3.36.7e03019", - "v1.3.35.3251cd5", - "v1.3.34.401b5d9", - "v1.3.33.ab0095c", - "v1.3.32.7e6c22f", - "v1.3.31.0084643", - "v1.3.30.9fe2ddb", - "v1.3.29.7afc149", - "v1.3.28.41f9541", - "v1.3.27.c88ba58", - "v1.3.26.0010231", - "v1.3.25.85f46d3", - "v1.3.24.dff6915", - "v1.3.23.5462d84", - "v1.3.22.c725a6b", - "v1.3.21.cf00ac5", - "v1.3.20.9a5ff93", - "v1.3.19.3c6a2f7", - "v1.3.17.c9822de", - "v1.3.16.97899ae", - "v1.3.15.432d067", - "v1.3.13.71a43a9", - "v1.3.12.6306c53", - "v1.3.11.0411401", - "v1.3.10.cc2a84a", - "v1.3.10.4df0e91", - "v1.3.9.92185e7", - "v1.3.8.90df7c2", - "v1.3.7.bb22b6e", - "v1.3.6.f511bab", - "v1.3.5.e5b19fd", - "v1.3.4.2b20bf3", - "v1.3.3.2fe124e", - "v1.2.testing1", - "v1.2.65.0adc5ce", - "v1.2.64.fc48fcd", - "v1.2.63.9879494", - "v1.2.62.3ddd74e", - "v1.2.61.d551c17", - "v1.2.60.ab959de", - "v1.2.59.d81c1c0", - "v1.2.58.6af1822", - "v1.2.57.f7c6955", - "v1.2.56.596a73c", - "v1.2.55.9db7c62", - "v1.2.54.288f2be", - "v1.2.53.19c1f9f", - "v1.2.52.b63802c", - "v1.2.51.f9ff06b", - "v1.2.50.41dcfdd", - "v1.2.49.5354c49", - "v1.2.48.371335e", - "v1.2.47", - "v1.2.46.dce2fe4", - "v1.2.46.9d21e58", - "v1.2.45.b674054", - "v1.2.44.f2c9c55", - "v1.2.43.a405d81", - "v1.2.42.2759c8d", - "v1.2.41.32f3682", - "v1.2.39.06892c4", - "v1.2.38.cf4e508", - "v1.2.38.451b085", - "v1.2.36", - "v1.2.30.80e4bc6", - "v1.2.29.6c95659" -] as const; + 'v2.7.15.567b8ea', + 'v2.7.14.e959000', + 'v2.7.13.597fa0b', + 'v2.7.12.45f15b8', + 'v2.7.11.ee68575', + 'v2.7.10.94d4bdf', + 'v2.7.9.70724be', + 'v2.7.8.a0c0388', + 'v2.7.7.5ae4ff9', + 'v2.7.6.834c3c5', + 'v2.7.5.ddd1499', + 'v2.7.4.c1f4f79', + 'v2.7.3.cf574c7', + 'v2.7.2.f6d3782', + 'v2.7.1.f35ca81', + 'v2.7.0.705515a', + 'v2.7.0.195b7cc', + 'v2.6.13.0561f2c', + 'v2.6.12.9861e82', + 'v2.6.11.60ec05e', + 'v2.6.10.9ce4455', + 'v2.6.9.f223b8a', + 'v2.6.8.ef9d0d7', + 'v2.6.7.2d6181f', + 'v2.6.6.54c1423', + 'v2.6.5.fc3d9f2', + 'v2.6.4.b89355f', + 'v2.6.3.d28af68', + 'v2.6.3.640e731', + 'v2.6.2.31c0e8f', + 'v2.6.1.7c3edde', + 'v2.6.0.f7afa9a', + 'v2.5.23.bf958ed', + 'v2.5.22.d1fa27d', + 'v2.5.21.447533a', + 'v2.5.20.4c97351', + 'v2.5.19.f9876cf', + 'v2.5.19.d5cd6f8', + 'v2.5.18.89ebafc', + 'v2.5.17.b4b2fd6', + 'v2.5.16.f81d3b0', + 'v2.5.15.79da236', + 'v2.5.14.f2ee0df', + 'v2.5.13.295278b', + 'v2.5.13.1a06f88', + 'v2.5.12.aa184e6', + 'v2.5.11.8e2a3e5', + 'v2.5.10.0fc5c9b', + 'v2.5.9.936260f', + 'v2.5.8.6485f03', + 'v2.5.7.f77c87d', + 'v2.5.6.d55c08d', + 'v2.5.5.e182ae7', + 'v2.5.4.8d288d5', + 'v2.5.3.a70d5ee', + 'v2.5.2.771cb52', + 'v2.5.1.c13b44b', + 'v2.5.0.e470619', + 'v2.5.0.d6dac17', + 'v2.5.0.ab7de7f', + 'v2.5.0.33eb073', + 'v2.5.0.9e55e6b', + 'v2.5.0.9ac0e26', + 'v2.4.3.efc27f2', + 'v2.4.3.91d6612', + 'v2.4.2.5b45303', + 'v2.4.1.394e0e1', + 'v2.4.0.46d7b82', + 'v2.3.15.deb7c27', + 'v2.3.14.64531fa', + 'v2.3.13.83f5ba0', + 'v2.3.12.24458a7', + 'v2.3.11.2740a56', + 'v2.3.10.d19607b', + 'v2.3.9.f06c56a', + 'v2.3.8.d490a33', + 'v2.3.7.30fbcab', + 'v2.3.6.7a3570a', + 'v2.3.5.2f9b68e', + 'v2.3.4.ea61808', + 'v2.3.3.8187fa7', + 'v2.3.2.63df972', + 'v2.3.1.4fa7f5a', + 'v2.3.0.5f47ca1', + 'v2.2.24.e6a2c06', + 'v2.2.23.5672e68', + 'v2.2.22.404d0dd', + 'v2.2.21.7f7c5cb', + 'v2.2.20.af5ac32', + 'v2.2.19.8f6a283', + 'v2.2.18.e9bde80', + 'v2.2.17.dbac2b1', + 'v2.2.16.1c6acfd', + 'v2.2.15.31c4693', + 'v2.2.14.57542ce', + 'v2.2.13.f570204', + 'v2.2.12.092e6f2', + 'v2.2.11.10265aa', + 'v2.2.10.7cebd79', + 'v2.2.9.47301a5', + 'v2.2.8.61f6fb2', + 'v2.2.7.e8970ad', + 'v2.2.6.b53cb38', + 'v2.2.5.8255128', + 'v2.2.4.3bcab0e', + 'v2.2.3.282cc0b', + 'v2.2.2.f35c7be', + 'v2.2.1.fb5f2e4', + 'v2.2.0.9f6584b', + 'v2.1.23.04bbdc6', + 'v2.1.22.191a69d', + 'v2.1.21.97d7a89', + 'v2.1.20.470363d', + 'v2.1.19.eb7025f', + 'v2.1.18.de53280', + 'v2.1.17.7ca2e81', + 'v2.1.16.a2c5b92', + 'v2.1.15.cd78723', + 'v2.1.14.99a31c1', + 'v2.1.13.7475c86', + 'v2.1.12.7711b03', + 'v2.1.11.5ec624d', + 'v2.1.10.7ef12c7', + 'v2.1.9.d43ddc9', + 'v2.1.8.ee971e3', + 'v2.1.7.242f880', + 'v2.1.6.5679a82', + 'v2.1.5.23272da', + 'v2.1.4.958d2cf', + 'v2.1.3.8c68d88', + 'v2.1.2.6d20215', + 'v2.1.1.dc2ca9c', + 'v2.1.0.331a1af', + 'v2.0.23.7bb281d', + 'v2.0.22.fbfd0f1', + 'v2.0.21.83e6cea', + 'v2.0.20.7100416', + 'v2.0.19.3209aea', + 'v2.0.18.1a7991c', + 'v2.0.17.5d1c06b', + 'v2.0.16.2242b68', + 'v2.0.15.aafbde0', + 'v2.0.14.2baaad8', + 'v2.0.13.7e27729', + 'v2.0.12.2400dd4', + 'v2.0.11.8914d1a', + 'v2.0.10.e09b12c', + 'v2.0.9.6ea0963', + 'v2.0.8.090e166', + 'v2.0.7.91ff7b9', + 'v2.0.6.97fd5cf', + 'v2.0.5.65e8209', + 'v2.0.4.5417671', + 'v2.0.3.09fe616', + 'v2.0.2.8146e84', + 'v2.0.1.ad05b91', + 'v2.0.0.18ab874', + 'v1.3.48.82bcd39', + 'v1.3.47.05147c0', + 'v1.3.46.d4ea956', + 'v1.3.45.b0d0552', + 'v1.3.44.4fa8d02', + 'v1.3.43.aae9d2f', + 'v1.3.42.9bd9252', + 'v1.3.41.80ddb81', + 'v1.3.40.e87ecc2', + 'v1.3.39.ddc3727', + 'v1.3.38.1253abd', + 'v1.3.37.97712a9', + 'v1.3.36.dd720f2', + 'v1.3.36.64f852e', + 'v1.3.36.7e03019', + 'v1.3.35.3251cd5', + 'v1.3.34.401b5d9', + 'v1.3.33.ab0095c', + 'v1.3.32.7e6c22f', + 'v1.3.31.0084643', + 'v1.3.30.9fe2ddb', + 'v1.3.29.7afc149', + 'v1.3.28.41f9541', + 'v1.3.27.c88ba58', + 'v1.3.26.0010231', + 'v1.3.25.85f46d3', + 'v1.3.24.dff6915', + 'v1.3.23.5462d84', + 'v1.3.22.c725a6b', + 'v1.3.21.cf00ac5', + 'v1.3.20.9a5ff93', + 'v1.3.19.3c6a2f7', + 'v1.3.17.c9822de', + 'v1.3.16.97899ae', + 'v1.3.15.432d067', + 'v1.3.13.71a43a9', + 'v1.3.12.6306c53', + 'v1.3.11.0411401', + 'v1.3.10.cc2a84a', + 'v1.3.10.4df0e91', + 'v1.3.9.92185e7', + 'v1.3.8.90df7c2', + 'v1.3.7.bb22b6e', + 'v1.3.6.f511bab', + 'v1.3.5.e5b19fd', + 'v1.3.4.2b20bf3', + 'v1.3.3.2fe124e', + 'v1.2.testing1', + 'v1.2.65.0adc5ce', + 'v1.2.64.fc48fcd', + 'v1.2.63.9879494', + 'v1.2.62.3ddd74e', + 'v1.2.61.d551c17', + 'v1.2.60.ab959de', + 'v1.2.59.d81c1c0', + 'v1.2.58.6af1822', + 'v1.2.57.f7c6955', + 'v1.2.56.596a73c', + 'v1.2.55.9db7c62', + 'v1.2.54.288f2be', + 'v1.2.53.19c1f9f', + 'v1.2.52.b63802c', + 'v1.2.51.f9ff06b', + 'v1.2.50.41dcfdd', + 'v1.2.49.5354c49', + 'v1.2.48.371335e', + 'v1.2.47', + 'v1.2.46.dce2fe4', + 'v1.2.46.9d21e58', + 'v1.2.45.b674054', + 'v1.2.44.f2c9c55', + 'v1.2.43.a405d81', + 'v1.2.42.2759c8d', + 'v1.2.41.32f3682', + 'v1.2.39.06892c4', + 'v1.2.38.cf4e508', + 'v1.2.38.451b085', + 'v1.2.36', + 'v1.2.30.80e4bc6', + 'v1.2.29.6c95659', +] as const -export type FirmwareVersion = typeof VERSIONS[number]; +export type FirmwareVersion = (typeof VERSIONS)[number] diff --git a/src/pages/ProfileDetail.tsx b/src/pages/ProfileDetail.tsx index 45a86a1..29aa912 100644 --- a/src/pages/ProfileDetail.tsx +++ b/src/pages/ProfileDetail.tsx @@ -1,5 +1,5 @@ import { useAuthActions } from '@convex-dev/auth/react' -import { useAction, useConvexAuth, useMutation, useQuery } from 'convex/react' +import { useConvexAuth, useMutation, useQuery } from 'convex/react' import * as React from 'react' import { useState } from 'react' import { useNavigate, useParams } from 'react-router-dom' diff --git a/tsconfig.json b/tsconfig.json index a531fb3..1a2db7a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,29 +1,29 @@ { - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["src", "vendor/web-flasher/public/data"], - "references": [{ "path": "./tsconfig.node.json" }] + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src", "vendor/web-flasher/public/data"], + "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/tsconfig.node.json b/tsconfig.node.json index eca6668..42872c5 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,10 +1,10 @@ { - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] } diff --git a/wrangler.json b/wrangler.json index 1fded9a..c028cff 100644 --- a/wrangler.json +++ b/wrangler.json @@ -1,10 +1,10 @@ { - "name": "react-web-flasher", - "compatibility_date": "2024-09-23", - "assets": { - "directory": "./dist" - }, - "observability": { - "enabled": true - } + "name": "react-web-flasher", + "compatibility_date": "2024-09-23", + "assets": { + "directory": "./dist" + }, + "observability": { + "enabled": true + } }