# Çerez onayı

> KVKK Çerez Uygulamaları Rehberi'ne uygun çerez banner'ı, script yükleme ve onay kaydı.

## Kurallar (özet)

KVKK'nın Çerez Uygulamaları Hakkında Rehberi'ne göre:

- **Zorunlu çerezler** (oturum, sepet, güvenlik, tercih kaydı) için açık rıza gerekmez.
- **Analitik, pazarlama ve çoğu fonksiyonel çerez** için açık rıza gerekir ve bu çerezler **onaydan önce yerleştirilemez**.
- "Reddet" seçeneği "Kabul et" kadar kolay erişilebilir olmalıdır.
- Kutular önceden işaretli olamaz.
- Kullanıcı tercihini her zaman değiştirebilmelidir.

## Kurulum

```bash
npx trkit add cerez-banner cerez-politikasi
```

```tsx title="app/layout.tsx"
import { CookieConsentProvider } from "@/components/trkit/cerez-banner";

<body>
  <CookieConsentProvider policyHref="/cerez-politikasi">{children}</CookieConsentProvider>
</body>
```

Footer'a tercih bağlantısı ekleyin:

```tsx
import { CookiePreferencesLink } from "@/components/trkit/cerez-banner";

<CookiePreferencesLink />
```

## Script'leri onaya bağlamak

```tsx title="app/layout.tsx"
import Script from "next/script";
import { ConsentGate } from "@/components/trkit/cerez-banner";

<CookieConsentProvider>
  {children}
  <ConsentGate category="analitik">
    <Script src="https://www.googletagmanager.com/gtag/js?id=G-XXXX" strategy="afterInteractive" />
    <Script id="ga" strategy="afterInteractive">
      {`window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('js',new Date());gtag('config','G-XXXX');`}
    </Script>
  </ConsentGate>
  <ConsentGate category="pazarlama">
    {/* Meta Pixel, TikTok Pixel... */}
  </ConsentGate>
</CookieConsentProvider>
```

Bir bileşen içinde:

```tsx
"use client";
import { useCookieConsent } from "@/components/trkit/cerez-banner";

const { allowed } = useCookieConsent();
if (allowed("analitik")) { /* ... */ }
```

Sunucu tarafında (ör. middleware/proxy veya server component):

```ts
import { cookies } from "next/headers";
import { parseCookieConsent, isAllowed, COOKIE_CONSENT_NAME } from "@trkit-app-pack/legal";

const state = parseCookieConsent((await cookies()).get(COOKIE_CONSENT_NAME)?.value, "1");
isAllowed(state, "pazarlama"); // false
```

## Çerez listesini güncel tutun

Kullandığınız her çerezi `trkit.config.ts`'e ekleyin; çerez politikası sayfası bu listeden üretilir:

```ts
cerezler: [
  { ad: "trkit_consent", saglayici: "Birinci taraf", amac: "Çerez tercihlerinin saklanması", sure: "6 ay", kategori: "zorunlu" },
  { ad: "_ga, _ga_*", saglayici: "Google", amac: "Ziyaret istatistikleri", sure: "2 yıl", kategori: "analitik" },
  { ad: "_fbp", saglayici: "Meta", amac: "Reklam ölçümü", sure: "3 ay", kategori: "pazarlama" },
],
```

Üçüncü taraf çerezler genellikle yurt dışı aktarım içerir; `trkit check` bunu hatırlatır.

## Politika değişince

`cerez-banner.tsx` içindeki `CONSENT_VERSION` değerini artırın. Eski sürümle onay vermiş kullanıcılara banner yeniden gösterilir.

## Onay kayıtları

Banner her seçimde `/api/consent` uç noktasına kayıt gönderir. `app/api/consent/route.ts` içindeki `kaydet()` fonksiyonunu veritabanınıza bağlayın. IP adresi `CONSENT_SALT` ile tuzlanarak özetlenir, ham hâliyle saklanmaz.
