shibosoftwaredev/f1c100s-linux-nema17-stepper-controller

A four-layer NEMA 17 motor-controller PCB combining an Allwinner F1C100S Linux computer, USB‑PD/buck power system, W5500 Ethernet, STM32 real-time motion control, DRV8825 stepper driver, protection/temperature/current telemetry, USB interfaces, and local LED/buzzer diagnostics.

Version
0.4.56
License
unset
Stars
0

scripts/verify-usb-top-upload.mjs

import fs from "node:fs"
import crypto from "node:crypto"
import assert from "node:assert/strict"
const m = JSON.parse(fs.readFileSync("reports/usb-top-publish-manifest.json", "utf8"))
async function request(endpoint, body) {
  const r = await fetch("https://registry-api.tscircuit.com/" + endpoint, {
    method: body ? "POST" : "GET", headers: body ? { "content-type": "application/json" } : undefined,
    body: body ? JSON.stringify(body) : undefined, signal: AbortSignal.timeout(45000),
  })
  assert.ok(r.ok, `${endpoint.split("?")[0]} HTTP ${r.status}`)
  return r.json()
}
const release = (await request("package_releases/get", { package_name_with_version: `${m.packageName}@${m.version}` })).package_release
const list = (await request("package_files/list?" + new URLSearchParams({ package_release_id: release.package_release_id }))).package_files
const byName = new Map(list.map(f => [f.file_path, f])), pending = [...m.files]
let verified = 0
await Promise.all(Array.from({ length: 4 }, async () => {
  while (pending.length) {
    const file = pending.shift(), entry = byName.get(file.file)
    assert.ok(entry, `uploaded ${file.file}`)
    const actual = (await request("package_files/get?" + new URLSearchParams({ package_file_id: entry.package_file_id }))).package_file
    assert.ok(actual.content_text != null || actual.content_base64 != null, `bytes ${file.file}`)
    const bytes = actual.content_text != null ? Buffer.from(actual.content_text) : Buffer.from(actual.content_base64, "base64")
    assert.equal(crypto.createHash("sha256").update(bytes).digest("hex"), file.sha256, file.file)
    verified++
  }
}))
const result = { checkedAt: new Date().toISOString(), version: m.version, releaseId: release.package_release_id, sourceFilesVerified: verified, frozenSourceMatches: true }
fs.writeFileSync("reports/usb-top-upload-verification.json", JSON.stringify(result, null, 2) + "\n")
console.log(JSON.stringify(result))