diff --git a/src/app/EspController.ts b/src/app/EspController.ts index 81e1711..fd1ab2c 100644 --- a/src/app/EspController.ts +++ b/src/app/EspController.ts @@ -57,7 +57,9 @@ export default class EspController { ) => void, ) { if (data.length !== 0x1000000) { - throw `Data length must be 0x1000000, but got 0x${data.length.toString().padStart(7, "0")}`; + throw new Error( + `Data length must be 0x1000000, but got 0x${data.length.toString().padStart(7, "0")}`, + ); } await this.writeData(data, 0, reportProgress); @@ -72,7 +74,9 @@ export default class EspController { ) => void, ) { if (data.length !== 0x2000) { - throw `Data length must be 0x2000, but got 0x${data.length.toString().padStart(4, "0")}`; + throw new Error( + `Data length must be 0x2000, but got 0x${data.length.toString().padStart(4, "0")}`, + ); } await this.writeData(data, 0xe000, reportProgress); @@ -102,10 +106,12 @@ export default class EspController { ) => void, ) { if (data.length > 0x640000) { - throw `Data cannot be larger than 0x640000`; + throw new Error(`Data cannot be larger than 0x640000`); } if (data.length < 0x320000) { - throw `Data seems too small, are you sure this is the right file?`; + throw new Error( + `Data seems too small, are you sure this is the right file?`, + ); } await this.writeData(data, 0x10000, reportProgress); diff --git a/src/app/firmwareFetcher.ts b/src/app/firmwareFetcher.ts new file mode 100644 index 0000000..a196a92 --- /dev/null +++ b/src/app/firmwareFetcher.ts @@ -0,0 +1,17 @@ +"use server"; + +const urls: Record = { + "3.0.8": + "http://gotaserver.xteink.com/api/download/ESP32C3/V3.0.8/V3.0.8-EN.bin", +}; + +export async function getFirmware(version: string) { + const url = urls[version]; + + if (!url) { + throw new Error("Unknown firmware version"); + } + + const response = await fetch(url); + return new Uint8Array(await response.arrayBuffer()); +} diff --git a/src/app/page.tsx b/src/app/page.tsx index bb1b1b5..088d6c0 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -5,13 +5,7 @@ import EspController from "@/app/EspController"; import Step from "@/components/Step/Step"; import styles from "./page.module.css"; - -const downloadEnglishFirmware = async () => { - const a = await fetch( - "http://gotaserver.xteink.com/api/download/ESP32C3/V3.0.8/V3.0.8-EN.bin", - ); - return new Uint8Array(await a.arrayBuffer()); -}; +import { getFirmware } from "@/app/firmwareFetcher"; const downloadData = (data: Uint8Array, fileName: string, mimeType: string) => { // @ts-expect-error types say no, but browser says yes @@ -83,7 +77,7 @@ export default function Home() { updateStepData("Connect device", { status: "success" }); appendStep({ name: "Download firmware", status: "running", progress: -1 }); - const firmwareFile = await downloadEnglishFirmware().catch((e) => { + const firmwareFile = await getFirmware("3.0.8").catch((e) => { updateStepData("Download firmware", { status: "failed", errorMessage: e.toString(), diff --git a/tsconfig.json b/tsconfig.json index cf9c65d..117e4bb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,6 +13,7 @@ "isolatedModules": true, "jsx": "react-jsx", "incremental": true, + "noUncheckedIndexedAccess": true, "plugins": [ { "name": "next"