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

# Migración a v4

> Qué cambió entre @squarecloud/api v3 y v4 — cambios incompatibles, renombramientos y los parches mínimos necesarios para actualizar.

<Info>
  Último parche cubierto aquí: **v4.0.1** (publicado el 2026-05-30).
</Info>

## Requisitos

* **Node.js 20.0.0** o superior (v3 admitía Node 18)

## Resumen de cambios incompatibles

| v3.x                                                            | v4.x                                                                                                    |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `client.users.*`                                                | `client.user.*`                                                                                         |
| `app.backup` / `app.backups`                                    | `app.snapshots`                                                                                         |
| Export `Backup`                                                 | Export `Snapshot`                                                                                       |
| `app.deploys.list()` devuelve un `Deployment[]` plano           | Devuelve `Deployment[][]` (usa `.flat()` para la forma anterior)                                        |
| `Deployment.id` con formato `` `git-${string}` ``               | SHA-1 de commit simple (40 caracteres hex)                                                              |
| `app.network.dns()` devuelve un array                           | Devuelve `{ ownership, ssl }`                                                                           |
| `app.network.analytics()` no recibe argumentos                  | Requiere `{ start, end }` (string ISO o `Date`)                                                         |
| `app.network.purgeCache(paths?)`                                | `purgeCache()` — argumento eliminado en **v4.0.1**, siempre purga toda la caché                         |
| `app.custom === undefined`                                      | `app.custom === null`                                                                                   |
| `workspace.members` / `.applications` contenían arrays de datos | Renombrados a `workspace.memberList` / `.applicationList`; los nombres originales son ahora **módulos** |
| `app.commit(file, name, restart)`                               | `app.commit(file, name)` — tercer argumento eliminado                                                   |
| `app.files.create(content, fullPath)`                           | `app.files.create(content, fileName, path)`                                                             |

## Renombramientos

### `client.users` → `client.user`

```typescript theme={null}
// v3
await api.users.get();

// v4
await api.user.get();
```

`api.users` todavía se exporta como un getter obsoleto que redirige a `api.user`, pero imprime una advertencia en tiempo de ejecución.

### Backups → Snapshots

```typescript theme={null}
// v3
await app.backups.create();
await app.backup.list();

// v4
await app.snapshots.create();
await app.snapshots.list();
```

El export `Backup` es ahora un alias obsoleto de `Snapshot`.

## Application

### `Application.custom`

`app.custom` es ahora `null` (era `undefined` en v3) cuando no hay ningún dominio personalizado vinculado.

### `app.commit(file, fileName, restart)`

El tercer argumento `restart` ha sido eliminado. Reinicia manualmente después de hacer commit:

```typescript theme={null}
// v3
await app.commit(buffer, "index.js", true);

// v4
await app.commit(buffer, "index.js");
await app.restart();
```

### `app.files.create(content, path)`

La firma es ahora `create(content, fileName, path = "/")`. Migración:

```typescript theme={null}
// v3 — ruta combinada única
await app.files.create(content, "./folder/test_file.txt");

// v4 — nombre de archivo y directorio separados
await app.files.create(content, "test_file.txt", "/folder");
```

## Deploys

### Forma de `app.deploys.list()`

```typescript theme={null}
// v3
const events: Deployment[] = await app.deploys.list();

// v4
const timelines: Deployment[][] = await app.deploys.list();
const events = timelines.flat(); // misma forma que en v3
```

### `Deployment.id`

Ahora es un SHA-1 de commit simple (40 caracteres hex) en lugar de una cadena con formato `` `git-…` ``.

## Network

### `app.network.dns()`

```typescript theme={null}
// v3
const records: DnsRecord[] = await app.network.dns();

// v4
const { ownership, ssl } = await app.network.dns();
```

### `app.network.analytics()`

```typescript theme={null}
// v3
const data = await app.network.analytics();

// v4 — { start, end } ahora es obligatorio (string ISO o Date)
const data = await app.network.analytics({
    start: new Date(Date.now() - 24 * 60 * 60 * 1000),
    end:   new Date(),
});
```

### `app.network.purgeCache()`

```typescript theme={null}
// v3 y v4.0.0
await app.network.purgeCache(["/static/old.js"]);

// v4.0.1 y posteriores — purga selectiva eliminada
await app.network.purgeCache();
```

## Workspaces

```typescript theme={null}
// v3
workspace.members;      // datos de miembros sin procesar
workspace.applications; // datos de aplicaciones sin procesar

// v4
workspace.memberList;        // datos de miembros sin procesar
workspace.applicationList;   // datos de aplicaciones sin procesar
workspace.members.add(...);  // módulo de miembros
workspace.applications.add(...); // módulo de aplicaciones
```

## Novedades en v4

Más allá de los renombramientos y los cambios de firma anteriores, v4 añade un conjunto sustancial de funciones:

* **Databases** — ciclo de vida completo, credenciales, snapshots y métricas ([Databases](/es/sdks/js/databases))
* **Workspaces** — colaboración en equipo con códigos de invitación y roles ([Workspaces](/es/sdks/js/workspaces))
* **Variables de entorno** — listar / definir / reemplazar / eliminar ([Variables de entorno](/es/sdks/js/environment_variables))
* **Métricas de aplicación** — muestras de CPU/RAM/red de 24 h ([Gestión de aplicaciones](/es/sdks/js/managing_application))
* **Stream SSE en tiempo real** — `app.realtime()` ([Realtime](/es/sdks/js/realtime))
* **Analíticas de edge** — analíticas, errores, logs y percentiles de latencia ([Network](/es/sdks/js/network))
* **Integración con GitHub App** — `app.deploys.linkGithubApp({ ... })` ([Deploys](/es/sdks/js/deploys))
* **Restauración de snapshots** — `app.snapshots.restore({ snapshotId, versionId })` y `db.snapshots.restore(snapshotId, versionId)`
* **Endpoints status-all** — `api.applications.statusAll()`, `api.databases.statusAll()`
* **Estado del servicio** — `api.service.status()`
* **Snapshots por usuario** — `api.user.snapshots(scope)`
* **Nuevos campos de User** — `User.locale`, `User.createdAt`, `User.databases`
* **Nuevos campos de BaseApplication** — `domain`, `custom`, `createdAt`
* **`SquareCloudAPIError.code`** — público para el manejo de errores basado en `switch`
