feat: Fern-Einrichtung des Agents per ADB (kein Abtippen am Fire TV)

Am Fire TV gibt es keine Kamera (kein QR) und Host/Token mit der Fernbedienung
einzugeben ist eine Qual. Der Satellit hat aber ohnehin schon eine ADB-Verbindung
— darueber bekommt der Agent seine Zugangsdaten direkt.

- Android: MainActivity.applyProvisioning() liest Intent-Extras (host/port/tls/
  token/name/control/reply_mode), speichert sie, startet den Dienst und zeigt
  'Von ARIA eingerichtet' (Transparenz). Auch via onNewIntent.
- Satellit: adb.provision (am start mit Extras) und adb.status (installiert?
  laeuft? welche Version?). adb.install richtet direkt mit ein, wenn rvs_host/
  rvs_token mitkommen -> ein Klick = installieren + einrichten + online.
- Diagnostic: Checkbox 'Gleich einrichten' (default an) + 'Status pruefen'-Button.
  Der RVS-Zugang wird SERVERSEITIG ergaenzt (params.provision) — das Token steht
  nie im Browser-Formular.
- Allowlists (Code + .env.example) und README ergaenzt, inkl. Sicherheitshinweis.
Android-Version 0.0.1.1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 01:54:38 +02:00
co-authored by Claude Opus 4.8
parent 621b5525a8
commit eae036a9fc
6 changed files with 244 additions and 8 deletions
+12 -1
View File
@@ -2819,13 +2819,24 @@ wss.on("connection", (ws) => {
} else if (msg.action === "sat_command") {
// Browser loest eine Satelliten-Aktion aus (z.B. APK auf Fire TV ausrollen).
// Die Antwort (sat_result) kommt ueber die rvsWs zurueck.
const params = msg.params && typeof msg.params === "object" ? msg.params : {};
// Fern-Einrichtung: der RVS-Zugang wird SERVERSEITIG ergaenzt — so muss
// niemand Host/Token im Browser eintippen (und das Token steht nicht im
// Browser-Formular). Gilt fuer adb.provision und adb.install mit Setup.
if (params.provision === true) {
delete params.provision;
params.rvs_host = RVS_HOST;
params.rvs_port = Number(RVS_PORT) || 443;
params.rvs_tls = RVS_TLS === "true";
params.rvs_token = RVS_TOKEN;
}
sendToRVS_raw({
type: "sat_command",
payload: {
satellite: String(msg.satellite || ""),
device: String(msg.device || ""),
action: String(msg.cmd || ""),
params: msg.params && typeof msg.params === "object" ? msg.params : {},
params,
requestId: String(msg.requestId || ""),
},
timestamp: Date.now(),