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

# SDK JavaScript: gerenciar aplicações

> Controle suas aplicações com o @squarecloud/api: detalhes, status, iniciar, parar, reiniciar, logs, métricas, domínios, load balancers e exclusão.

Todos os métodos desta página ficam em `api.apps` e recebem o id da aplicação primeiro. Um `appId` também pode ser o id composto `<appId>-<workspaceId>` de uma aplicação compartilhada por meio de um [workspace](/pt-br/sdks/js/workspaces).

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

const api = new SquareCloudAPI(process.env.SQUARECLOUD_API_KEY!);
const appId = "abc123def456abc123def456";
```

Para listar suas aplicações, use [`api.account.me()`](/pt-br/sdks/js/client#conta): seu array `applications` contém todas as aplicações que a chave pode ver.

## Obtendo uma aplicação

```typescript theme={"system"}
const app = await api.apps.get(appId);

console.log(app.id, app.name, app.language, app.ram, app.cluster, app.created_at);
```

| Campo | Tipo | Descrição |
| - | - | - |
| `id` | `string` | Id da aplicação |
| `name` | `string` | Nome de exibição |
| `desc` | `string?` | Descrição |
| `owner` | `string` | Id do usuário dono |
| `cluster` | `string` | Cluster em que a aplicação roda |
| `ram` | `number` | RAM alocada em MB |
| `language` | `string` | Linguagem do runtime |
| `domain` | `string \| null?` | Host padrão `<subdomain>.squareweb.app`; ausente ou `null` para aplicações que não são web |
| `custom` | `string \| null?` | Domínio personalizado; ausente ou `null` quando nenhum está configurado |
| `created_at` | `string` | Data de criação (ISO 8601) |

## Status

`status(appId)` retorna o estado ao vivo com valores **formatados**:

```typescript theme={"system"}
const status = await api.apps.status(appId);

console.log(status.status);  // e.g. "running", "exited"
console.log(status.running); // true
console.log(status.cpu);     // "0.5%"
console.log(status.ram);     // "120.4MB" (RAM in use)
console.log(status.storage, status.network.total, status.network.now);
console.log(status.uptime);  // Unix ms of the last start, null when stopped
```

Passe `{ raw: true }` para obter **números** (`cpu` em %, `ram` em MB, `network.total` e `network.now` como pares de bytes `[in, out]`):

```typescript theme={"system"}
const raw = await api.apps.status(appId, { raw: true });

console.log(raw.cpu, raw.ram, raw.network.total); // 0.5 120.4 [1024, 2048]
```

<Note>
  `uptime` é um **timestamp** (quando a aplicação iniciou), não uma duração. Use `Date.now() - status.uptime` para saber há quanto tempo ela está no ar.
</Note>

### Status de todas as aplicações

`statusAll()` retorna um resumo por aplicação que a chave pode ver, em uma única requisição. `cpu` e `ram` só estão presentes enquanto a aplicação está rodando.

```typescript theme={"system"}
for (const { id, running, cpu, ram } of await api.apps.statusAll()) {
    console.log(id, running ? `${cpu} ${ram}` : "stopped");
}

// Only the apps of one workspace
const shared = await api.apps.statusAll({ workspaceId });
```

## Iniciar, parar e reiniciar

```typescript theme={"system"}
await api.apps.start(appId);
await api.apps.stop(appId);
await api.apps.restart(appId);
```

O servidor mantém essas chamadas abertas até o container agir, então elas esperam pelo menos 120 s antes de expirar. Quando a plataforma recusa a ação, a chamada lança um `SquareCloudAPIError` com status **409**, um `code` e uma mensagem **vazia**:

| Código | Significado |
| - | - |
| `CONTAINER_ALREADY_STARTED` | `start` em uma aplicação em execução |
| `CONTAINER_ALREADY_STOPPED` | `stop` em uma aplicação parada |
| `CONTAINER_TEMPORARILY_SUSPENDED` | A aplicação está suspensa |
| `CONTAINER_NOT_FOUND` | O container não existe no cluster |
| `CONTAINER_INSUFFICIENT_DISK_SPACE` | Não há disco suficiente para iniciar |
| `CONTAINER_NETWORK_CONFLICT` | Conflito de rede no cluster |
| `ACTION_FAILED` | O cluster não conseguiu executar a ação |

"Já iniciada" e "já parada" também são erros. Se para você eles significam sucesso, trate-os:

```typescript theme={"system"}
import { SquareCloudAPIError } from "@squarecloud/api";

try {
    await api.apps.start(appId);
} catch (error) {
    if (!(error instanceof SquareCloudAPIError && error.code === "CONTAINER_ALREADY_STARTED")) {
        throw error;
    }
}
```

## Logs

`logs(appId)` retorna a saída mais recente do console como uma única string (`""` quando não há nenhuma).

```typescript theme={"system"}
console.log(await api.apps.logs(appId));
```

Para um stream de logs ao vivo, use [Tempo real](/pt-br/sdks/js/realtime).

## Métricas

`metrics(appId)` retorna as últimas 24 horas, um ponto a cada 5 minutos, **do mais recente para o mais antigo**.

```typescript theme={"system"}
const [latest] = await api.apps.metrics(appId);

console.log(latest.date, latest.cpu, latest.ram, latest.net);
```

## Domínios e load balancers

`domains()` lista os hostnames padrão e personalizados de todas as aplicações. `loadBalancers()` lista os domínios compartilhados por várias aplicações, com o limite do seu plano.

```typescript theme={"system"}
for (const { app_id, hostname, type } of await api.apps.domains()) {
    console.log(app_id, hostname, type); // type: "subdomain" | "custom"
}

const { limit, balancers } = await api.apps.loadBalancers();
for (const { hostname, apps } of balancers) {
    console.log(hostname, apps.map((app) => app.id));
}
```

Para configurar um domínio personalizado, veja [Rede](/pt-br/sdks/js/network#domínio-personalizado).

## Excluindo uma aplicação

```typescript theme={"system"}
await api.apps.delete(appId);
```

<Warning>
  A exclusão é permanente. Crie um [snapshot](/pt-br/sdks/js/snapshots) antes, caso você possa precisar dos arquivos novamente.
</Warning>

## Próximos passos

<CardGroup cols={3}>
  <Card title="Commit e upload" icon="upload" href="/pt-br/sdks/js/commit_and_upload">
    Crie uma aplicação a partir de um zip ou envie arquivos para uma existente.
  </Card>

  <Card title="Referência da API de aplicações" icon="code" href="/pt-br/api-reference/endpoint/apps/info">
    Os endpoints REST por trás destes métodos.
  </Card>

  <Card title="Aplicações pela CLI" icon="terminal" href="/pt-br/cli-reference/apps">
    As mesmas ações pelo terminal.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.