| --- |
| 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 到公开仓库。 |