# ioBroker Alexa2 Cookie-Refresh Patch: Korrektur der `alexa-remote2`-Änderung

Diese Anleitung korrigiert den Fehler:

```text
ReferenceError: minCookieRefreshAge is not defined
```

Der Fehler entsteht, wenn in `alexa-remote2/alexa-remote.js` die Namen `minCookieRefreshAge` oder `defaultCookieRefreshInterval` verwendet werden, ohne dass sie im sichtbaren Bereich der Funktion definiert sind.

Die robuste Lösung ist: **keine neuen Konstanten verwenden**, sondern die Zeitwerte direkt in den vorhandenen Code schreiben.

---

## Betroffene Datei

```bash
/opt/iobroker/node_modules/alexa-remote2/alexa-remote.js
```

Der bereits vorgeschlagene Patch in

```bash
/opt/iobroker/node_modules/alexa-cookie2/alexa-cookie.js
```

bleibt davon unberührt.

---

## 1. Adapter stoppen

```bash
iobroker stop alexa2.0
```

---

## 2. Sicherung der Datei erstellen

```bash
cp /opt/iobroker/node_modules/alexa-remote2/alexa-remote.js \
   /opt/iobroker/node_modules/alexa-remote2/alexa-remote.js.bak
```

---

## 3. Eingefügte Konstanten wieder entfernen

Falls diese beiden Zeilen irgendwo in `alexa-remote.js` eingefügt wurden, bitte löschen:

```js
const defaultCookieRefreshInterval = 12 * 60 * 60 * 1000; // 12 hours
const minCookieRefreshAge = 11 * 60 * 60 * 1000;          // avoid immediate refresh loops
```

Diese Konstanten werden danach nicht mehr benötigt.

---

## 4. Refresh-Intervall direkt eintragen

In `alexa-remote.js` diesen Block suchen:

```js
if (this._options.cookieRefreshInterval !== 0) {
    this._options.cookieRefreshInterval = this._options.cookieRefreshInterval || defaultCookieRefreshInterval;
}
if (this._options.cookieRefreshInterval < 0 || this._options.cookieRefreshInterval > 2147483646) {
    this._options.cookieRefreshInterval = defaultCookieRefreshInterval;
}
```

Durch diesen Block ersetzen:

```js
if (this._options.cookieRefreshInterval !== 0) {
    this._options.cookieRefreshInterval = this._options.cookieRefreshInterval || 12 * 60 * 60 * 1000; // Auto Refresh after 12 hours
}
if (this._options.cookieRefreshInterval < 0 || this._options.cookieRefreshInterval > 2147483646) {
    this._options.cookieRefreshInterval = 12 * 60 * 60 * 1000; // Auto Refresh after 12 hours
}
```

Damit wird der automatische Cookie-Refresh von ursprünglich etwa 4 Tagen auf etwa 12 Stunden verkürzt.

---

## 5. `minCookieRefreshAge` direkt ersetzen

Diese Zeile suchen:

```js
if (tokensValidSince < minCookieRefreshAge && self._options.macDms && self._options.formerRegistrationData.dataVersion === 2) {
```

Durch diese Zeile ersetzen:

```js
if (tokensValidSince < 11 * 60 * 60 * 1000 && self._options.macDms && self._options.formerRegistrationData.dataVersion === 2) {
```

Damit wird verhindert, dass der Adapter bei sehr frisch aktualisierten Tokens sofort erneut einen Refresh ausführt. Die Grenze liegt hier bei 11 Stunden.

---

## 6. Prüfen, ob keine falschen Namen mehr vorhanden sind

```bash
grep -n "minCookieRefreshAge\|defaultCookieRefreshInterval" /opt/iobroker/node_modules/alexa-remote2/alexa-remote.js
```

Erwartung: **keine Ausgabe**.

Falls der Befehl noch Treffer zeigt, müssen diese Stellen ebenfalls entfernt oder durch direkte Werte ersetzt werden:

- `defaultCookieRefreshInterval` → `12 * 60 * 60 * 1000`
- `minCookieRefreshAge` → `11 * 60 * 60 * 1000`

---

## 7. JavaScript-Syntax prüfen

```bash
node -c /opt/iobroker/node_modules/alexa-remote2/alexa-remote.js
```

Erwartung: **keine Ausgabe**.

Wenn eine Fehlermeldung kommt, wurde vermutlich beim Editieren eine Klammer, ein Semikolon oder ein anderes Zeichen beschädigt.

---

## 8. Adapter wieder starten

```bash
iobroker start alexa2.0
```

Falls die Instanz durch die vorherigen Abstürze deaktiviert wurde, in der ioBroker-Admin-Oberfläche die Alexa2-Instanz wieder aktivieren.

Alternativ versuchen:

```bash
iobroker restart alexa2.0
```

---

## 9. Log prüfen

```bash
iobroker logs alexa2.0
```

Der Fehler

```text
ReferenceError: minCookieRefreshAge is not defined
```

sollte danach nicht mehr erscheinen.

---

## Kompakte Zusammenfassung

In `alexa-remote.js`:

```text
defaultCookieRefreshInterval  ->  12 * 60 * 60 * 1000
minCookieRefreshAge           ->  11 * 60 * 60 * 1000
```

Und diese beiden Zeilen löschen, falls vorhanden:

```js
const defaultCookieRefreshInterval = 12 * 60 * 60 * 1000;
const minCookieRefreshAge = 11 * 60 * 60 * 1000;
```

Danach:

```bash
grep -n "minCookieRefreshAge\|defaultCookieRefreshInterval" /opt/iobroker/node_modules/alexa-remote2/alexa-remote.js
node -c /opt/iobroker/node_modules/alexa-remote2/alexa-remote.js
iobroker restart alexa2.0
```

---

## Rollback

Wenn etwas schiefgeht, gesicherte Datei zurückkopieren:

```bash
cp /opt/iobroker/node_modules/alexa-remote2/alexa-remote.js.bak \
   /opt/iobroker/node_modules/alexa-remote2/alexa-remote.js

iobroker restart alexa2.0
```

---

## Hinweis

Diese Korrektur behebt nur den Crash durch die nicht definierte Variable. Der eigentliche Amazon-Cookie-Refresh-Fix besteht weiterhin aus zwei Teilen:

1. `alexa-cookie2/alexa-cookie.js`: Refresh-Fallback bei `InvalidToken / Auth time of the token is expired`.
2. `alexa-remote2/alexa-remote.js`: kürzeres Refresh-Intervall und Schutz gegen sofortige Refresh-Schleifen.

Diese Datei beschreibt die Korrektur für Teil 2.
