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

[![Pacote 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)

### Introdução

A biblioteca cliente para JavaScript/TypeScript oferece uma interface fácil de usar para interagir com os serviços da Sunra.

### Instalação

Para integrar o cliente ao seu projeto, instale-o usando 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>

### Recursos

#### Chamando Endpoints

A Sunra gerencia as solicitações de endpoint por meio de um sistema de filas, garantindo confiabilidade e escalabilidade. Use o método `subscribe` para enviar uma solicitação e aguardar o resultado.

**Exemplo:**

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

const result = await sunra.subscribe("black-forest-labs/flux-kontext-pro/text-to-image", {
  input: {
    prompt: "Um bule de vidro com chá de flores desabrochando dentro, colocado em uma mesa de madeira perto de uma janela ensolarada com uma suave luz da manhã.",
    "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);
```

#### Gerenciamento de Fila

Gerencie suas solicitações com estes métodos:

##### Enviando uma Solicitação

Envie uma solicitação e recupere o `request_id` para uso posterior.

**Exemplo:**

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

const { request_id } = await sunra.queue.submit("black-forest-labs/flux-kontext-max", {
  input: {
    prompt: "Um bule de vidro com chá de flores desabrochando dentro, colocado em uma mesa de madeira perto de uma janela ensolarada com uma suave luz da manhã.",
    "aspect_ratio": "16:9",
    "output_format": "jpeg",
  },
});
```

##### Verificando o Status da Solicitação

Recupere o status de uma solicitação.

**Exemplo:**

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

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

##### Recuperando Resultados da Solicitação

Busque o resultado de uma solicitação concluída.

**Exemplo:**

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

#### Armazenamento

A API `storage` permite que você faça upload de arquivos e receba uma URL, que pode ser usada nas solicitações de endpoint do seu modelo. Isso é particularmente útil para modelos que exigem entradas de arquivo, como de imagem para vídeo ou de fala para texto.

<Note>Tamanho máximo do arquivo: 100MB</Note>

##### Fazendo Upload de Arquivos no Navegador

Você pode permitir que os usuários façam upload de arquivos diretamente do navegador. O exemplo a seguir mostra como usar um elemento `<input type="file">` para selecionar um arquivo e fazer o upload.

<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('Arquivo enviado com sucesso:', url);
        // Agora você pode usar esta URL com um endpoint de modelo
      } catch (error) {
        console.error('O upload falhou:', error);
      }
    }
  });
  ```

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

##### Fazendo Upload de Arquivos no Node.js

No lado do servidor com Node.js, você pode ler arquivos do sistema de arquivos local e fazer o upload deles.

```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);
    // O cliente precisa de um objeto File, que podemos criar a partir de um buffer
    const file = new File([buffer], basename(filePath));

    const url = await sunra.storage.upload(file);
    console.log('Arquivo enviado com sucesso:', url);
    return url;
  } catch (error) {
    console.error('O upload falhou:', error);
  }
}

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

#### Uploads Automáticos com Endpoints de Modelo

O SDK do JavaScript pode lidar automaticamente com o upload de arquivos para você. Quando você passa um objeto `File`, `Blob` ou um URI de dados base64 para a entrada de um endpoint de modelo, o SDK primeiro o envia para o armazenamento e, em seguida, usa a URL resultante na solicitação.

Isso simplifica o processo, pois você não precisa executar uma etapa de upload separada.

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

// Um objeto File de uma entrada de arquivo do navegador será enviado automaticamente
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];

const result = await sunra.subscribe("some-model-that-takes-images", {
  input: {
    image: file, // O SDK envia este arquivo automaticamente
    prompt: "Um prompt descrevendo o que fazer com a imagem"
  }
});

// Um URI de dados base64 também será enviado automaticamente
const base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...";

const result2 = await sunra.subscribe("some-model-that-takes-images", {
  input: {
    image: base64Image, // O SDK converte isso automaticamente em um Blob e o envia
    prompt: "Um prompt descrevendo o que fazer com a imagem"
  }
});
```

### Suporte

Junte-se à nossa comunidade para obter ajuda ou participar de discussões:

* **Comunidade do Discord**: [Junte-se a nós](https://discord.gg/897qCzvCcU)
* **Repositório do GitHub**: [Visite aqui](https://github.com/sunra-ai/sunra-clients)

Estamos aqui para ajudá-lo!
