# Troubleshooting

## Pairing Code Tidak Muncul

**Penyebab:** Session sudah terdaftar.

**Solusi:** Hapus folder `auth_info` terus pairing ulang.

```ts
// Cek apakah sudah terdaftar
if (!state.creds.registered) {
  const code = await sock.requestPairingCode('628xxx')
  console.log(code)
}
```

## Koneksi Gagal / Error 428

**Penyebab:** WebSocket tidak bisa connect ke WA.

**Solusi:**
1. Cek koneksi internet
2. Coba pake proxy kalo IP diblokir
3. Pastikan WA Web versi terbaru

```ts
const sock = makeWASocket({
  connectTimeoutMs: 30000, // perpanjang timeout
})
```

## Error 401 (Logged Out)

**Penyebab:** Session expired / di-logout dari HP.

**Solusi:** Hapus folder `auth_info` dan pairing ulang.

```ts
sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
  if (connection === 'close') {
    const code = lastDisconnect?.error?.output?.statusCode
    if (code === DisconnectReason.loggedOut) {
      console.log('Session expired, hapus auth_info')
    }
  }
})
```

## Error 515 (Restart Required)

**Penyebab:** Normal setelah pairing berhasil.

**Solusi:** Biarin aja, socket bakal reconnect otomatis.

```ts
sock.ev.on('connection.update', ({ connection }) => {
  if (connection === 'close') {
    // Jangan panic, reconnect aja
    setTimeout(start, 3000)
  }
})
```

## Browser Ditolak WA

**Penyebab:** Nama browser palsu / gak dikenal.

**Solusi:** Selalu pake browser asli:

```ts
Browsers.macOS('Chrome')     // ✅
Browsers.windows('Edge')     // ✅
Browsers.ubuntu('Firefox')   // ✅
Browsers.mataram('App')      // ✅ (pake Mac OS platform)
```

❌ Jangan:
```ts
['Kucing', 'Browser', '1.0']  // ditolak WA
```

## "end of stream" Error

**Penyebab:** Binary parsing error  biasanya karena koneksi putus di tengah.

**Solusi:**
- Stabilkan koneksi
- Kurangi `keepAliveIntervalMs`
- Update ke versi terbaru `@mataram/wa`

## Pesan Gak Terkirim

**Penyebab:** Session key expired / signal protocol error.

**Solusi:** Pasang `getMessage` callback:

```ts
const sock = makeWASocket({
  getMessage: async (key) => {
    // Ambil pesan dari database kamu
    return db.loadMessage(key.id)
  },
  msgRetryCounterCache: new NodeCache({ stdTTL: 60 }),
})
```

## Memory Terlalu Besar

**Penyebab:** History sync kebanyakan chat.

**Solusi:** Matikan history sync atau filter:

```ts
const sock = makeWASocket({
  syncFullHistory: false,
  // Atau pake filter:
  shouldSyncHistoryMessage: (msg) => {
    return msg.syncType === 0 // cuma initial bootstrap
  },
})
```

## Media Gak Bisa Didownload

**Penyebab:** Media udah expired di server WA.

**Solusi:** Minta re-upload dari perangkat lain:

```ts
await sock.updateMediaMessage(msg)
// Baru bisa didownload lagi
```

## Proxy Config

Kalo WA diblokir di negara kamu:

```bash
npm install socks-proxy-agent
```

```ts
import { SocksProxyAgent } from 'socks-proxy-agent'

const agent = new SocksProxyAgent('socks5://127.0.0.1:9050')
const sock = makeWASocket({ agent, fetchAgent: agent })
```

## Debug Mode

Aktifin logging level `debug` buat liat semua aktifitas:

```ts
import P from 'pino'
const sock = makeWASocket({
  logger: P({ level: 'debug' }),
})
```

Bakal keliatan semua raw node dari WhatsApp.

## Error Umum Lainnya

| Error | Kemungkinan | Solusi |
|---|---|---|
| `Connection Closed` (428) | Koneksi internet bermasalah | Cek jaringan, pake proxy |
| `Connection Lost` (408) | Timeout | Perbesar `connectTimeoutMs` |
| `Bad Session` (500) | Data session corrupt | Hapus `auth_info` |
| `Forbidden` (403) | Akun kena restrict | Tunggu, jangan spam |
| `Stream Errored` (515) | Normal (restart) | Biarin reconnect |
| `GraphQL error` | Query format salah | Cek parameter query |
| `Not Allowed` | Akses ditolak | Cek izin / follow dulu |

## Tips

1. **Selalu simpan `auth_info`**  kalo ilang harus pairing ulang
2. **Gunakan key store cache**  `makeCacheableSignalKeyStore()` biar cepat
3. **Jangan spam**  WA bisa ban akun
4. **Update library**  `npm update @mataram/wa` biar dapet fitur & fix terbaru
5. **Backup session**  kalo pindah server, backup folder `auth_info`
