--- title: Tesla FSD Sim Database Cache emoji: 🚗 colorFrom: blue colorTo: indigo sdk: docker app_port: 7860 pinned: false --- # FSD Simulator 通用 SQL 中间层 挡在 Roblox 和 Turso 之间。直接传 SQL 执行,两个接口对应两种权限: |方法 |路径 |用途 | |----|--------|---------------------------| |GET |`/` |根请求目录| |POST|`/write`|执行写类 SQL,支持一次多条,不缓存 | |POST|`/query`|执行一条 SELECT,默认缓存 12h | ## 一、Turso 建表(只做一次) ```sql CREATE TABLE IF NOT EXISTS driving_events ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, scene TEXT NOT NULL, action TEXT NOT NULL, created_at INTEGER DEFAULT (unixepoch()) ); -- 关键索引!scene 被 WHERE / GROUP BY 用到,不建就全表扫描,狂烧读配额 CREATE INDEX IF NOT EXISTS idx_scene ON driving_events (scene); ``` ## 二、生成 token ```bash turso db tokens create tonys-tesla-fsd-sim-database ``` ## 三、在 HF Space 填 3 个 Secret Settings → Variables and secrets → New **secret**: |名称 |值 | |-------------|------------------------------------------------------------------------| |`TURSO_URL` |`https://...turso.io/v2/pipeline`(注意是 https + /v2/pipeline,不是 libsql://)| |`TURSO_TOKEN`|上面生成的 token | |`APP_SECRET` |自定口令,和 Roblox 端一致 | ## 四、签名(每个 /write /query 请求都要带) - `X-Timestamp`:当前 Unix 秒(Roblox 用 `os.time()`) - `X-Signature`:`sha256(APP_SECRET + 时间戳)` 的小写十六进制 服务端用同样的密钥和时间戳重算比对,并检查时间戳在 ±5 分钟内。 ## 五、请求示例 写入(支持批量): ```json POST /write { "statements": [ { "sql": "INSERT INTO driving_events (user_id, scene, action) VALUES (?, ?, ?)", "args": [123, "red_light", "brake"] } ] } ``` 查询(默认缓存,要实时就加 “cache”: false): ```json POST /query { "sql": "SELECT action, COUNT(*) AS cnt FROM driving_events WHERE scene = ? GROUP BY action ORDER BY cnt DESC", "args": ["red_light"] } ``` 返回:`{ "rows": [ {"action":"brake","cnt":"120"}, ... ], "cached": false }` ## 安全提醒 单 token 模式下 `/query` 也具备写权限。能调接口的人 = 持有 `APP_SECRET` 的人, 所以**务必保管好 `APP_SECRET`**,别 push 到公开仓库。