> ## 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 package](https://img.shields.io/npm/v/@sunra/client?color=%237527D7\&label=JavaScript\&style=flat-square)](https://www.npmjs.com/package/@sunra/client)

### Introducción

La biblioteca cliente para JavaScript/TypeScript ofrece una interfaz fácil de usar para interactuar con los servicios de Sunra.

### Instalación

Para integrar el cliente en tu proyecto, instálalo 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>

### Características

#### Llamando a los Endpoints

Sunra gestiona las solicitudes de los endpoints a través de un sistema de colas, lo que garantiza la fiabilidad y la escalabilidad. Usa el método `subscribe` para enviar una solicitud y esperar el resultado.

**Ejemplo:**

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

const result = await sunra.subscribe("black-forest-labs/flux-kontext-pro/text-to-image", {
  input: {
    prompt: "Una tetera de cristal con té de flores en flor en su interior, colocada sobre una mesa de madera junto a una ventana iluminada por el sol con una suave luz matutina.",
    "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);
```

#### Gestión de la Cola

Gestiona tus solicitudes con estos métodos:

##### Enviando una Solicitud

Envía una solicitud y recupera el `request_id` para usarlo más tarde.

**Ejemplo:**

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

const { request_id } = await sunra.queue.submit("black-forest-labs/flux-kontext-max", {
  input: {
    prompt: "Una tetera de cristal con té de flores en flor en su interior, colocada sobre una mesa de madera junto a una ventana iluminada por el sol con una suave luz matutina.",
    "aspect_ratio": "16:9",
    "output_format": "jpeg",
  },
});
```

##### Comprobando el Estado de la Solicitud

Recupera el estado de una solicitud.

**Ejemplo:**

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

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

##### Recuperando los Resultados de la Solicitud

Obtén el resultado de una solicitud completada.

**Ejemplo:**

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

#### Almacenamiento

La API de `storage` te permite subir archivos y recibir una URL, que luego se puede usar en tus solicitudes de endpoint de modelo. Esto es particularmente útil para modelos que requieren entradas de archivos, como de imagen a video o de voz a texto.

<Note>Tamaño máximo de archivo: 100MB</Note>

##### Subiendo Archivos en el Navegador

Puedes permitir que los usuarios suban archivos directamente desde su navegador. El siguiente ejemplo muestra cómo usar un elemento `<input type="file">` para seleccionar un archivo y subirlo.

<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('Archivo subido con éxito:', url);
        // Ahora puedes usar esta URL con un endpoint de modelo
      } catch (error) {
        console.error('La subida falló:', error);
      }
    }
  });
  ```

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

##### Subiendo Archivos en Node.js

En el lado del servidor con Node.js, puedes leer archivos del sistema de archivos local y subirlos.

```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);
    // El cliente necesita un objeto File, que podemos crear a partir de un búfer
    const file = new File([buffer], basename(filePath));

    const url = await sunra.storage.upload(file);
    console.log('Archivo subido con éxito:', url);
    return url;
  } catch (error) {
    console.error('La subida falló:', error);
  }
}

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

#### Subidas Automáticas con Endpoints de Modelo

El SDK de JavaScript puede manejar automáticamente las subidas de archivos por ti. Cuando pasas un objeto `File`, `Blob` o un URI de datos base64 a la entrada de un endpoint de modelo, el SDK primero lo subirá al almacenamiento y luego usará la URL resultante en la solicitud.

Esto simplifica el proceso ya que no necesitas realizar un paso de subida por separado.

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

// Un objeto File de una entrada de archivo del navegador se subirá automáticamente
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];

const result = await sunra.subscribe("some-model-that-takes-images", {
  input: {
    image: file, // El SDK sube este archivo automáticamente
    prompt: "Un prompt que describe qué hacer con la imagen"
  }
});

// Un URI de datos base64 también se subirá automáticamente
const base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...";

const result2 = await sunra.subscribe("some-model-that-takes-images", {
  input: {
    image: base64Image, // El SDK convierte esto automáticamente a un Blob y lo sube
    prompt: "Un prompt que describe qué hacer con la imagen"
  }
});
```

### Soporte

Únete a nuestra comunidad para obtener ayuda o participar en debates:

* **Comunidad de Discord**: [Únete a nosotros](https://discord.gg/897qCzvCcU)
* **Repositorio de GitHub**: [Visítalo aquí](https://github.com/sunra-ai/sunra-clients)

¡Estamos aquí para ayudarte!
