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

# JavaScript / TypeScript

[![@sunra/client npm paketi](https://img.shields.io/npm/v/@sunra/client?color=%237527D7\&label=JavaScript\&style=flat-square)](https://www.npmjs.com/package/@sunra/client)

### Giriş

JavaScript/TypeScript için istemci kütüphanesi, Sunra'nın hizmetleriyle etkileşim kurmak için kullanımı kolay bir arayüz sunar.

### Kurulum

İstemciyi projenize entegre etmek için npm kullanarak yükleyin:

<CodeGroup>
  ```bash npm theme={null}
  npm install @sunra/client
  ```

  ```bash pnpm theme={null}
  pnpm add @sunra/client
  ```

  ```bash yarn theme={null}
  yarn add @sunra/client
  ```
</CodeGroup>

### Özellikler

#### Uç Noktaları Çağırma

Sunra, güvenilirlik ve ölçeklenebilirlik sağlayarak uç nokta isteklerini bir kuyruk sistemi aracılığıyla yönetir. Bir istek göndermek ve sonucu beklemek için `subscribe` yöntemini kullanın.

**Örnek:**

```javascript theme={null}
import { sunra } from "@sunra/client";

const result = await sunra.subscribe("black-forest-labs/flux-kontext-pro/text-to-image", {
  input: {
    prompt: "Güneşli pencere kenarında ahşap bir masa üzerinde, içinde çiçek açan çiçek çayı bulunan cam demlik, nazik sabah ışığıyla.",
    "aspect_ratio": "16:9",
    "output_format": "jpeg",
  },
  logs: true,
  onQueueUpdate: (update) => {
    if (update.status === "IN_PROGRESS") {
      console.log(update.logs)
    }
  },
});

console.log(result.data);
console.log(result.requestId);
```

#### Kuyruk Yönetimi

Bu yöntemlerle isteklerinizi yönetin:

##### İstek Gönderme

Bir istek gönderin ve daha sonra kullanmak üzere `request_id`'yi alın.

**Örnek:**

```javascript theme={null}
import { sunra } from "@sunra/client";

const { request_id } = await sunra.queue.submit("black-forest-labs/flux-kontext-max", {
  input: {
    prompt: "Güneşli pencere kenarında ahşap bir masa üzerinde, içinde çiçek açan çiçek çayı bulunan cam demlik, nazik sabah ışığıyla.",
    "aspect_ratio": "16:9",
    "output_format": "jpeg",
  },
});
```

##### İstek Durumunu Kontrol Etme

Bir isteğin durumunu alın.

**Örnek:**

```javascript theme={null}
import { sunra } from "@sunra/client";

const status = await sunra.queue.status({
  requestId: "pd_eTYYuw4EqYLzRBHgnAMHA8zH",
  logs: true,
});
```

##### İstek Sonuçlarını Alma

Tamamlanmış bir isteğin sonucunu getirin.

**Örnek:**

```javascript theme={null}
import { sunra } from "@sunra/client";

const result = await sunra.queue.result({
  requestId: "pd_eTYYuw4EqYLzRBHgnAMHA8zH",
});

console.log(result.data);
console.log(result.requestId);
```

#### Depolama

`storage` API'si dosya yüklemenize ve bir URL almanıza olanak tanır, bu URL daha sonra model uç nokta isteklerinizde kullanılabilir. Bu özellikle resimden videoya veya konuşmadan metne gibi dosya girişi gerektiren modeller için faydalıdır.

<Note>Maksimum dosya boyutu: 100MB</Note>

##### Tarayıcıda Dosya Yükleme

Kullanıcıların dosyaları doğrudan tarayıcılarından yüklemelerine izin verebilirsiniz. Aşağıdaki örnek, bir dosya seçmek ve yüklemek için `<input type="file">` öğesinin nasıl kullanılacağını gösterir.

<CodeGroup>
  ```javascript upload.js theme={null}
  import { sunra } from "@sunra/client";

  const fileInput = document.getElementById('file-input');

  fileInput.addEventListener('change', async (event) => {
    const file = event.target.files[0];
    if (file) {
      try {
        const url = await sunra.storage.upload(file);
        console.log('Dosya başarıyla yüklendi:', url);
        // Artık bu URL'yi bir model uç noktası ile kullanabilirsiniz
      } catch (error) {
        console.error('Yükleme başarısız:', error);
      }
    }
  });
  ```

  ```html index.html theme={null}
  <input type="file" id="file-input" />
  ```
</CodeGroup>

##### Node.js'te Dosya Yükleme

Node.js ile sunucu tarafında, yerel dosya sisteminden dosyaları okuyup yükleyebilirsiniz.

```javascript theme={null}
import { sunra } from "@sunra/client";
import { readFile } from "node:fs/promises";
import { basename } from "node:path";

async function uploadLocalFile(filePath) {
  try {
    const buffer = await readFile(filePath);
    // İstemci bir File nesnesi gerektirir, bunu bir buffer'dan oluşturabiliriz
    const file = new File([buffer], basename(filePath));

    const url = await sunra.storage.upload(file);
    console.log('Dosya başarıyla yüklendi:', url);
    return url;
  } catch (error) {
    console.error('Yükleme başarısız:', error);
  }
}

uploadLocalFile("./path/to/your/image.png");
```

#### Model Uç Noktalarıyla Otomatik Yüklemeler

JavaScript SDK sizin için dosya yüklemelerini otomatik olarak halledebilir. Bir model uç noktasının girişine `File` nesnesi, `Blob` veya base64 veri URI'si geçirdiğinizde, SDK önce onu depolamaya yükleyecek ve ardından istekte elde edilen URL'yi kullanacaktır.

Bu, ayrı bir yükleme adımı gerçekleştirmenize gerek olmadığı için süreci basitleştirir.

```javascript theme={null}
import { sunra } from "@sunra/client";

// Tarayıcı dosya girişinden bir File nesnesi otomatik olarak yüklenecektir
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];

const result = await sunra.subscribe("some-model-that-takes-images", {
  input: {
    image: file, // SDK bu dosyayı otomatik olarak yükler
    prompt: "Resimle ne yapılacağını açıklayan bir metin"
  }
});

// Base64 veri URI'si de otomatik olarak yüklenecektir
const base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...";

const result2 = await sunra.subscribe("some-model-that-takes-images", {
  input: {
    image: base64Image, // SDK bunu otomatik olarak Blob'a dönüştürür ve yükler
    prompt: "Resimle ne yapılacağını açıklayan bir metin"
  }
});
```

### Destek

Yardım veya tartışmalar için topluluğumuza katılın:

* **Discord Topluluğu**: [Bize katılın](https://discord.gg/897qCzvCcU)
* **GitHub Deposu**: [Buraya gidin](https://github.com/sunra-ai/sunra-clients)

Size yardımcı olmak için buradayız!
