> ## 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

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

### Введение

Клиентская библиотека для JavaScript/TypeScript предлагает простой в использовании интерфейс для взаимодействия со службами Sunra.

### Установка

Чтобы интегрировать клиент в свой проект, установите его с помощью npm:

<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>

### Функции

#### Вызов конечных точек

Sunra управляет запросами к конечным точкам через систему очередей, обеспечивая надежность и масштабируемость. Используйте метод `subscribe`, чтобы отправить запрос и дождаться результата.

**Пример:**

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

const result = await sunra.subscribe("black-forest-labs/flux-kontext-pro/text-to-image", {
  input: {
    prompt: "Стеклянный чайник с цветущим цветочным чаем внутри, поставленный на деревянный стол у залитого солнцем окна с мягким утренним светом.",
    "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);
```

#### Управление очередью

Управляйте своими запросами с помощью этих методов:

##### Отправка запроса

Отправьте запрос и получите `request_id` для последующего использования.

**Пример:**

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

const { request_id } = await sunra.queue.submit("black-forest-labs/flux-kontext-max", {
  input: {
    prompt: "Стеклянный чайник с цветущим цветочным чаем внутри, поставленный на деревянный стол у залитого солнцем окна с мягким утренним светом.",
    "aspect_ratio": "16:9",
    "output_format": "jpeg",
  },
});
```

##### Проверка статуса запроса

Получите статус запроса.

**Пример:**

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

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

##### Получение результатов запроса

Получите результат выполненного запроса.

**Пример:**

```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);
```

#### Хранилище

API `storage` позволяет загружать файлы и получать URL-адрес, который затем можно использовать в запросах к конечным точкам вашей модели. Это особенно полезно для моделей, которым требуются входные файлы, таких как преобразователи изображения в видео или речи в текст.

<Note>Максимальный размер файла: 100 МБ</Note>

##### Загрузка файлов в браузере

Вы можете разрешить пользователям загружать файлы прямо из браузера. В следующем примере показано, как использовать элемент `<input type="file">` для выбора и загрузки файла.

<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('Файл успешно загружен:', url);
        // Теперь вы можете использовать этот URL с конечной точкой модели
      } catch (error) {
        console.error('Ошибка загрузки:', error);
      }
    }
  });
  ```

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

##### Загрузка файлов в Node.js

На стороне сервера с помощью Node.js вы можете читать файлы из локальной файловой системы и загружать их.

```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);
    // Клиенту нужен объект File, который мы можем создать из буфера
    const file = new File([buffer], basename(filePath));

    const url = await sunra.storage.upload(file);
    console.log('Файл успешно загружен:', url);
    return url;
  } catch (error) {
    console.error('Ошибка загрузки:', error);
  }
}

uploadLocalFile("./путь/к/вашему/изображению.png");
```

#### Автоматическая загрузка с помощью конечных точек модели

SDK JavaScript может автоматически обрабатывать загрузку файлов за вас. Когда вы передаете объект `File`, `Blob` или URI данных base64 на вход конечной точки модели, SDK сначала загрузит его в хранилище, а затем использует полученный URL-адрес в запросе.

Это упрощает процесс, так как вам не нужно выполнять отдельный шаг загрузки.

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

// Объект File из файлового ввода браузера будет загружен автоматически
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];

const result = await sunra.subscribe("какая-то-модель-которая-принимает-изображения", {
  input: {
    image: file, // SDK автоматически загружает этот файл
    prompt: "Подсказка, описывающая, что делать с изображением"
  }
});

// URI данных base64 также будет загружен автоматически
const base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...";

const result2 = await sunra.subscribe("какая-то-модель-которая-принимает-изображения", {
  input: {
    image: base64Image, // SDK автоматически преобразует это в Blob и загружает его
    prompt: "Подсказка, описывающая, что делать с изображением"
  }
});
```

### Поддержка

Присоединяйтесь к нашему сообществу для помощи или обсуждений:

* **Сообщество Discord**: [Присоединяйтесь к нам](https://discord.gg/897qCzvCcU)
* **Репозиторий GitHub**: [Посетите здесь](https://github.com/sunra-ai/sunra-clients)

Мы здесь, чтобы помочь вам!
