Use server-side function to proxy firmware fetching

This commit is contained in:
Dave Allie
2025-11-20 00:27:01 +11:00
parent c02a02216d
commit f063e5c533
4 changed files with 30 additions and 12 deletions
+10 -4
View File
@@ -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);
+17
View File
@@ -0,0 +1,17 @@
"use server";
const urls: Record<string, string> = {
"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());
}
+2 -8
View File
@@ -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(),
+1
View File
@@ -13,6 +13,7 @@
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"noUncheckedIndexedAccess": true,
"plugins": [
{
"name": "next"