> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
> Use this file to discover all available pages before exploring further.

# WebSocket İstemcisi

> Otomatik yeniden bağlanma ile hesap değişiklikleri, günlükler, slotlar ve imzalar için gerçek zamanlı abonelikler.

## Kurulum

```bash theme={null}
npm install @orbitflare/sdk ws
```

`ws` isteğe bağlı bir peer bağımlılıktır. Yalnızca WebSocket istemcisini kullanıyorsanız kurun.

## İstemciyi oluşturma

```ts theme={null}
import { WsClientBuilder } from '@orbitflare/sdk/ws';
import type { RetryPolicy } from '@orbitflare/sdk';

const client = await new WsClientBuilder()
  .url('ws://ny.rpc.orbitflare.com')
  .fallbackUrl('ws://fra.rpc.orbitflare.com')
  .apiKey('ORBIT-XXXXXX-NNNNNN-NNNNNN')
  .retry({
    initialDelayMs: 100,
    maxDelayMs: 30_000,
    multiplier: 2.0,
    maxAttempts: 0,
  })
  .pingIntervalSecs(10)
  .maxMissedPongs(3)
  .build();
```

Minimal:

```ts theme={null}
const client = await new WsClientBuilder()
  .url('ws://ny.rpc.orbitflare.com')
  .build();
```

`.build()` öğesinin async olduğuna dikkat edin - sonuç dönmeden önce WebSocket bağlantısını kurar. Bağlantı başarısız olursa promise hemen reddedilir.

### Builder yöntemleri

**`.url(url)`** - Birincil WebSocket uç noktası. `ORBITFLARE_WS_URL` ortam değişkenine düşer.

```ts theme={null}
.url('ws://ny.rpc.orbitflare.com')
```

**`.urls([...])`** - Tek çağrıda birincil + yedekler.

```ts theme={null}
.urls(['ws://ny.rpc.orbitflare.com', 'ws://fra.rpc.orbitflare.com'])
```

**`.fallbackUrl(url)` / `.fallbackUrls([...])`** - Yedek uç noktalar ekler. Yeniden bağlanırken SDK aralarında döner.

```ts theme={null}
.fallbackUrl('ws://fra.rpc.orbitflare.com')
```

**`.apiKey(key)`** - Lisans anahtarı. `ORBITFLARE_LICENSE_KEY` ortam değişkenine düşer.

```ts theme={null}
.apiKey('ORBIT-XXXXXX-NNNNNN-NNNNNN')
```

**`.retry(policy)`** - Yeniden bağlanma geri çekilmesi. Varsayılan: 100 ms başlangıç, 30 sn üst sınır, 2x çarpan, sonsuz deneme.

```ts theme={null}
.retry({
  initialDelayMs: 200,
  maxDelayMs: 15_000,
  multiplier: 2.0,
  maxAttempts: 0,
})
```

**`.pingIntervalSecs(n)`** - SDK'nın WebSocket `Ping` çerçevelerini gönderme sıklığı. Varsayılan: 10.

```ts theme={null}
.pingIntervalSecs(15)
```

**`.maxMissedPongs(n)`** - Bağlantıyı sonlandırmadan önce yanıtsız ping sayısı. Varsayılan: 3.

```ts theme={null}
.maxMissedPongs(5)
```

## Kullanılabilir abonelikler

### `slotSubscribe()`

Bir slot işlendiğinde, onaylandığında veya finalize edildiğinde tetiklenir.

```ts theme={null}
const sub = await client.slotSubscribe();
```

Her olay `slot`, `parent` ve `root` alanlarına sahip bir nesnedir:

```json theme={null}
{"slot": 413014740, "parent": 413014739, "root": 413014708}
```

### `accountSubscribe(address, commitment)`

Belirtilen hesabın verisi değiştiğinde tetiklenir.

```ts theme={null}
const sub = await client.accountSubscribe(
  'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
  'confirmed',
);
```

Lamport, owner ve çalıştırılabilir bayrağı ile base64 kodlanmış hesap verisini döndürür.

### `logsSubscribe(mentions, commitment)`

Verilen adresleri anan işlemler için tetiklenir. Tüm işlemler için boş dizi geçin.

```ts theme={null}
const sub = await client.logsSubscribe(
  ['6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P'],
  'confirmed',
);
```

Tüm günlükler:

```ts theme={null}
const sub = await client.logsSubscribe([], 'confirmed');
```

### `signatureSubscribe(signature, commitment)`

Bir işlem verilen taahhüt düzeyine ulaştığında bir kez tetiklenir. Az önce gönderdiğiniz bir işlemi onaylamak için kullanışlıdır.

```ts theme={null}
const sub = await client.signatureSubscribe('5K8F2j...', 'confirmed');
```

## Olayları okuma

Tüm abonelikler bir `WsSubscription` döndürür. Sonraki olay için `.next()` çağırın:

```ts theme={null}
while (true) {
  const event = await sub.next();
  if (event === undefined) break;
  console.log(event);
}
```

`.next()` abonelik kapatıldığında `undefined` ile resolve olur.

Olay dinleyici tarzında bir geri çağırma da ekleyebilirsiniz:

```ts theme={null}
const off = sub.on((event) => {
  console.log(event);
});

// later: off();
```

## Abonelikten çıkma

```ts theme={null}
await sub.unsubscribe();
```

Sunucuya abonelikten çıkma iletisi gönderir. Bunu çağırmadan aboneliği düşürürseniz SDK yetimi tespit eder ve abonelikten çıkmayı otomatik gönderir.

## Birden çok abonelik

Tüm abonelikler tek WebSocket bağlantısında çalışır. SDK bildirimleri doğru aboneliğe dahili olarak yönlendirir.

```ts theme={null}
const slots = await client.slotSubscribe();
const usdc = await client.accountSubscribe('EPjFWdd5...', 'confirmed');
const logs = await client.logsSubscribe(['6EF8r...'], 'confirmed');
```

Mevcut abonelikler çalışırken istediğiniz zaman yeni abonelik ekleyebilirsiniz.

## Yeniden bağlanma

Bağlantı koparsa arka plan görevi üstel geri çekilme ile yeniden bağlanır ve her şeyi otomatik yeniden abone eder. `.next()` çağrılarınız çalışmaya devam eder - bağlantı geri gelince olaylar sürer.

## Tam örnek

Slot güncellemelerine ve USDC için hesap değişikliklerine abone olan, canlı bir akış yazan bir izleme betiği.

```ts theme={null}
import { WsClientBuilder } from '@orbitflare/sdk/ws';

async function main() {
  const client = await new WsClientBuilder()
    .url('ws://ny.rpc.orbitflare.com')
    .build();

  const slots = await client.slotSubscribe();
  const usdc = await client.accountSubscribe(
    'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
    'confirmed',
  );

  console.log('watching slots and USDC mint account...');

  slots.on((slot) => {
    const s = slot?.slot ?? 0;
    const parent = slot?.parent ?? 0;
    console.log(`slot ${s} (parent ${parent})`);
  });

  usdc.on((acct) => {
    const lamports = acct?.lamports ?? 0;
    const data = acct?.data?.[0];
    const dataLen = typeof data === 'string' ? data.length : 0;
    console.log(`USDC mint updated: ${lamports} lamports, ${dataLen} bytes`);
  });

  await new Promise(() => {});
}

void main();
```
