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

# Gestión de aplicaciones

> Inspecciona, controla y opera una aplicación a través de la clase Application: estado, logs, métricas, ciclo de vida (iniciar, detener, reiniciar) y eliminación.

Cada operación de esta página comienza obteniendo una instancia de `Application`:

```typescript theme={null}
import { SquareCloudAPI } from "@squarecloud/api";

const api = new SquareCloudAPI(process.env.SQUARE_API_KEY!);
const app = await api.applications.fetch("abc123def456abc123def456");
```

`api.applications.fetch(id)` devuelve una `Application`. Cuando la aplicación tiene un dominio web asociado, se devuelve como una `WebsiteApplication`: refina el tipo en tiempo de ejecución con `app.isWebsite()` antes de usar `.network` (consulta [Network](/es/sdks/js/network)).

## Propiedades de la aplicación

| Propiedad     | Tipo             | Descripción                                                                                                       |
| ------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------- |
| `id`          | `string`         | ID de la aplicación (24 caracteres hexadecimales)                                                                 |
| `name`        | `string`         | Nombre visible                                                                                                    |
| `description` | `string?`        | Descripción de `squarecloud.app`                                                                                  |
| `url`         | `string`         | URL del panel web                                                                                                 |
| `ram`         | `number`         | RAM asignada en MB                                                                                                |
| `cluster`     | `string`         | Cluster en el que se ejecuta la aplicación                                                                        |
| `language`    | `string`         | `javascript` \| `typescript` \| `python` \| `java` \| `elixir` \| `rust` \| `go` \| `php` \| `dotnet` \| `static` |
| `domain`      | `string \| null` | Host `<subdomain>.squareweb.app` por defecto (`null` para aplicaciones no web)                                    |
| `custom`      | `string \| null` | Dominio personalizado asociado a la aplicación, cuando está configurado                                           |
| `createdAt`   | `Date`           | Fecha de creación                                                                                                 |

<Note>
  En la v4, `app.custom` es `null` cuando no hay un dominio personalizado configurado (era `undefined` en la v3).
</Note>

## Obtención del estado de la aplicación

`app.getStatus()` devuelve una instancia de `ApplicationStatus` con el estado en vivo del runtime.

```typescript theme={null}
const status = await app.getStatus();

console.log(status.status);          // "running" | "starting" | "restarting" | "exited" | "created" | "deleting"
console.log(status.running);         // boolean
console.log(status.usage.cpu);       // "0.22%"
console.log(status.usage.ram);       // "70MB"
console.log(status.usage.network);   // { total: "0 KB ↑ 0 KB ↓", now: "0 KB ↑ 0 KB ↓" }
console.log(status.usage.storage);   // "0B"
console.log(status.uptime);          // Date | undefined
console.log(status.uptimeTimestamp); // number | undefined
```

### Resumen de estado de cada aplicación

Para evitar una petición por aplicación, llama a `api.applications.statusAll()`:

```typescript theme={null}
const list = await api.applications.statusAll();

for (const summary of list) {
    console.log(`${summary.applicationId} → running=${summary.running}`);
    if (summary.running) {
        console.log(`  cpu=${summary.usage.cpu}, ram=${summary.usage.ram}`);
    }

    // Promote a summary to the full status with .fetch()
    const full = await summary.fetch();
    console.log(full.uptime);
}
```

## Obtención de los logs

`app.getLogs()` devuelve la salida de logs más reciente como un `string`.

```typescript theme={null}
const logs = await app.getLogs();
console.log(logs);
```

## Obtención de métricas

`app.getMetrics()` devuelve las últimas 24 horas de muestras de CPU, RAM y red (hasta **288 puntos**, uno cada 5 minutos).

```typescript theme={null}
const metrics = await app.getMetrics();

console.log(metrics.length, "data points");
console.log(metrics[0]);
// { timestamp: 1717084800000, cpu: 12.3, ram: 187, network: { ... } }
```

<Warning>
  `getMetrics()` requiere que la aplicación tenga asignados **al menos 512MB de RAM**.
</Warning>

## Flujo de eventos en tiempo real

`app.realtime()` abre un stream de [Server-Sent Events](https://developer.mozilla.org/docs/Web/API/Server-sent_events). Consulta la página dedicada de [Realtime](/es/sdks/js/realtime) para ver un ejemplo completo.

## Ciclo de vida

Todos los métodos del ciclo de vida se resuelven con un `boolean` (`true` en caso de éxito).

```typescript theme={null}
await app.start();
await app.restart();
await app.stop();
```

## Eliminación de una aplicación

<Warning>
  `app.delete()` elimina la aplicación de forma permanente. A menos que tengas un [snapshot](/es/sdks/js/snapshots), los datos **no se pueden recuperar**.
</Warning>

```typescript theme={null}
const deleted = await app.delete();
console.log(deleted); // true | false
```

## Actualización de los datos de la aplicación

`app.fetch()` vuelve a obtener la aplicación desde la API y devuelve una instancia de `Application` totalmente nueva. Úsalo cuando sospeches que los datos en caché están desactualizados.

```typescript theme={null}
const fresh = await app.fetch();
```
