
# keenauth webhooks listen ile webhook'ları yerel olarak test etme

`keenauth webhooks listen`, webhook alıcınızı kendi makinenizde geliştirmenize olanak tanır. Bir `development` veya `staging` ortamının olay API'sini okur ve her yeni olayı, gerçek bir webhook teslimatıyla birebir aynı şekilde imzalanmış (Standard Webhooks) olarak yerel bir URL'ye gönderir. Herkese açık bir uç nokta ya da tünel gerekmez: olaylar API üzerinden CLI'ye gelir ve CLI bunları makinenizde yönlendirir.

## Kullanım

```sh
keenauth webhooks listen --forward-to http://localhost:3000/webhooks
```

Komut önce standart hata çıktısına bu oturum için bir imzalama sırrı yazdırır:

```text
Signing secret for this session (shown once; not sent to KeenAuth, not stored): idp_whsec_…
Forwarding new events to http://localhost:3000/webhooks. Press Ctrl-C to stop.
```

Komut çalışırken alıcınızı bu sırla yapılandırın; örneğin `KEENAUTH_WEBHOOK_SECRET` olarak ve her teslimatı SDK'nın webhook doğrulayıcısıyla doğrulayın (bkz. [Webhook'ları doğrulama](/docs/sdk/go)). Sır, yalnızca bu oturum için makinenizde oluşturulur: asla KeenAuth'a gönderilmez, asla saklanmaz ve her çalıştırmada yeni bir sır oluşturulur. Kaydettiğiniz hiçbir webhook uç noktasının sırrı değildir.

| Bayrak | Açıklama |
|---|---|
| `--forward-to` | Olayları alacak yerel URL (zorunlu). `localhost` veya `127.0.0.1` ya da `[::1]` gibi döngü geri adresinde bir `http` veya `https` URL'si olmalıdır. |
| `--types` | Yalnızca bu olay türleri, virgülle ayrılmış veya tekrarlanmış. |
| `--org` | Yalnızca bu kuruluşa ait olaylar (`org_…`). |
| `--payload` | `thin` (varsayılan) veya `full`. `full`, kaynağı da içerir ve `users:read` iznini de gerektirir. |
| `--after` | Nereden başlanacağı: `latest` (varsayılan) yalnızca şimdiden sonra gerçekleşen olayları yönlendirir; `keenauth events tail` komutundan alınan bir imleç oradan başlatır. |
| `--interval` | Yeni olay yokken iki kontrol arasındaki süre, `1s` ile `60s` arası. Varsayılan: `5s`. |
| `--output`, `-o` | Teslimat satırları için `table`, `json` veya `yaml`. Bayrak verilmezse CLI, terminalde tablo, aksi halde JSON yazdırır. |

Komut `events:read` iznini gerektirir ve bir API anahtarı ile bir `keenauth login` oturumu ile çalışır.

## Alıcınız ne alır

Her olay, `POST` ile gövdede olay JSON'u olarak, olay API'sinin döndürdüğü biçimde ve şu başlıklarla gönderilir:

| Başlık | Değer |
|---|---|
| `webhook-id` | Olay kimliği (`evt_…`); gövdekiyle aynıdır. |
| `webhook-timestamp` | Teslimatın zamanı, Unix saniyesi cinsinden. |
| `webhook-signature` | Oturum sırrıyla `<webhook-id>.<webhook-timestamp>.<body>` üzerinden hesaplanan `v1,<base64 HMAC-SHA256>`. |
| `content-type` | `application/json` |

Her teslimat bir kez denenir. Komut, teslimat başına zamanı, olay türünü, olay kimliğini, alıcınızın yanıt verdiği durum kodunu (veya bağlantı hatasını) ve süreyi içeren bir satır yazdırır. Hata veren ya da çalışmayan bir alıcı komutu durdurmaz. Yönlendirmeler izlenmez.

## Ortamlar

Komut yalnızca `development` ve `staging` ortamlarında çalışır. Üretim kimlik bilgisiyle hiçbir istek göndermeden durur ve 3 çıkış koduyla sonlanır:

- Bir üretim ortamı için API anahtarı (`idp_sk_live_…` veya `idp_rk_live_…`);
- Geçerli ortamı bir üretim ortamı olan bir `keenauth login` oturumu.

Sunucu, ortam bir üretim ortamı olduğu için isteği reddederse CLI, sorun yanıtını yazdırır: `code: test_feature_not_in_production`; ve yine 3 çıkış koduyla sonlanır.

## Çıkış kodları

| Kod | Anlamı |
|---|---|
| `0` | Ctrl-C ile durduruldu. |
| `1` | KeenAuth'a yönelik sunucu hatası veya ağ hatası ya da geçerli ortamın türü belirlenemedi. |
| `2` | Kullanım hatası: `--forward-to` eksik, yerel bir URL değil ya da bir filtre veya aralık geçersiz. İstek gönderilmedi. |
| `3` | Üretim kimlik bilgisi, eksik kimlik bilgisi veya sunucu `401` ya da `403` yanıtı verdi. |
| `4` | Plan bu özelliği içermiyor (`plan_feature_unavailable` ile `403`). |
