TonyD365's picture
Update README.md
ce9852a verified
|
Raw
History Blame Contribute Delete
2.68 kB
---
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 到公开仓库。