# Métodos

## `connect`

Debes usar este método[^1] asíncrono para realizar la conexión con otro par `BeamPort`, entregando un `accessToken` que podrás obtener desde el evento `beamport:create` de `Phone SDK`.

{% hint style="warning" %}
Recuerda que debes conectar el `Beamport` solo 1 vez mientras esté conectado, de lo contrario se generará un error. Si existe una desconexión puedes volver a conectar.
{% endhint %}

```javascript
await port.connect(accessToken);
```

### Ejemplo

{% tabs %}
{% tab title="Basado en evento" %}

```javascript
phone.addEventListener('beamport:create', (event) => {
    const { accessToken, channel } = event;
    port.connect(accessToken);
});
```

{% endtab %}

{% tab title="Evento como promesa" %}

<pre class="language-javascript"><code class="lang-javascript"><strong>await new Promise(resolve => phone.addEventListener('beamport:create', async (event) => {
</strong>    const { accessToken, channel } = event;
    await port.connect(accessToken);
    resolve();
}));
// Código a continuación
</code></pre>

{% endtab %}
{% endtabs %}

## `send`

Este método asíncrono te permite enviar los archivos automáticamente al otro par `BeamPort`. Los argumentos que recibe este método son:

1. `input`: Archivo como `File`, `ArrayBuffer` o `Blob`.
2. `mimeType`: MIME del archivo, opcional si `input` es de tipo `File`.
3. `id`: ID del archivo, opcional.

```javascript
// File
await port.send(myFile);
// ArrayBuffer o Blob
await port.send(myBuffer, 'application/msword');
```

Recomendamos el uso de nuestro componente web de transferencia de archivos, o bien [puedes usar un `input` de tipo `file`, escuchando el evento `change`](#user-content-fn-2)[^2].

#### Consideraciones método `send`

En caso que desees adjuntar varios archivos deberás ejecutar una iteración sobre los archivos:

```javascript
files.forEach(file => port.send(file));
```

En el caso que envíes un `ArrayBuffer` o `Blob`, deberás indicar de manera obligatoria el `id` y `mimeType`.

```javascript
await port.send(myBlob, 'image/png', 'my-unique-id');
```

{% hint style="warning" %}
Si **no** indicas un MIME type para un archivo como `ArrayBuffer` o `Blob` , no será legible para el agente.
{% endhint %}

## `cancel`

Este método permite cancelar el envío del archivo en curso o eliminar el acceso del archivo en el par `BeamPort` remoto.

Deberás entregar como único argumento el mismo archivo envíado como `File`, `ArrayBuffer` o `Blob`.

```javascript
await port.cancel(myFile);
```

## `disconnect`

Con este método detendrás la conexión BeamPort en su totalidad, por lo deberás crear una nueva si lo necesitas.

```javascript
port.disconnect();
```

## `addEventListener`

Podrás escuchar los eventos a través de un oyente adjunto. Puedes añadir todos los eventos que necesites para el mismo o diferente.

```javascript
port.addEventListener('eventName', event => {
    const eventData = event.detail;
    // Do something
});
```

## `getFile`

Con este método podrás obtener el archivo usando el valor CRC-32 como único argumento y `String`. El valor retornado será un `BeamPortFile`.

```javascript
port.getFile(crc32);
```

{% hint style="info" %}
`BeamPort` **no** almacena los archivos enviados, solo recibidos. Puedes obtener el listado de archivos recibidos desde la propiedad `store`.
{% endhint %}

[^1]: Este método es asíncrono

[^2]: <https://developer.mozilla.org/en-US/docs/Web/API/File_API/Using_files_from_web_applications>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.videsk.io/es-developers/sdks/intercambio-archivos/metodos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
