> ## 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: analytics, DNS e domínios

> Leia analytics de borda, erros, logs de requisições e desempenho de uma aplicação web, verifique o DNS, defina um domínio e limpe o cache com api.apps.network.

`api.apps.network` funciona **apenas com aplicações web**. Todo método recebe o id da aplicação primeiro.

Os exemplos usam o cliente `api` de [Criando o cliente](/pt-br/sdks/js/client#criando-o-cliente). `appId` é o id de uma das suas aplicações: [`api.account.me()`](/pt-br/sdks/js/client#conta) lista todas.

## Janelas de tempo

`analytics`, `errors`, `logs` e `performance` recebem um `start` e um `end`, cada um uma string ISO 8601 ou um `Date`. Uma janela tem no máximo **7 dias**, e `start` é limitado à data de criação da aplicação. Uma janela inválida resulta em 400 `INVALID_TIME_RANGE`.

```typescript theme={"system"}
const end = new Date();
const start = new Date(end.getTime() - 24 * 60 * 60 * 1000); // last 24 h
```

Os resultados ficam em cache em intervalos de 5 minutos. Os cache misses desses quatro métodos compartilham um limite de 20 requisições a cada 60 segundos por conta: ultrapassá-lo resulta em 429 `RATE_LIMITED`.

## Analytics

`network.analytics(appId, start, end, filters?)` retorna os totais de tráfego e seus detalhamentos. Retorna `null` para uma janela sem tráfego.

```typescript theme={"system"}
const analytics = await api.apps.network.analytics(appId, start, end);

if (analytics) {
    console.log(analytics.visits);    // [{ visits, requests, bytes, date }]
    console.log(analytics.countries); // [{ type: "BR", visits, requests, bytes }]
}
```

Os detalhamentos são `countries`, `devices`, `os`, `browsers`, `protocols`, `methods`, `paths`, `referers`, `providers`, `ips`, `status_codes`, `bots` e `content_types`. Cada grupo tem `type`, `visits`, `requests` e `bytes`.

### Filtros

Os filtros restringem todos os detalhamentos. Cada um recebe o valor exato de `type` do seu detalhamento:

```typescript theme={"system"}
const brazil = await api.apps.network.analytics(appId, start, end, {
    country: "BR",
    path: "/api",
    provider: "GOOGLE (15169)",
});
```

| Filtro | Exemplo |
| - | - |
| `country` | `"BR"` (código de 2 letras) |
| `ip` | `"203.0.113.7"` |
| `path` | `"/api"` (prefixo de caminho) |
| `status` | `"404"` |
| `os`, `browser`, `protocol`, `bot` | O `type` do detalhamento |
| `referer` | `"Direct"` significa sem referer |
| `provider` | `"NAME (ASN)"`, por exemplo `"GOOGLE (15169)"` |
| `content_type` | O `type` do detalhamento |

Um filtro inválido resulta em 400 `INVALID_FILTER`.

## Erros

`network.errors(appId, start, end, { include_4xx })` retorna as respostas 5xx da janela, além das 4xx com `include_4xx: true`. Retorna `null` para uma janela vazia.

```typescript theme={"system"}
const errors = await api.apps.network.errors(appId, start, end, { include_4xx: true });

if (errors) {
    console.log(errors.summary.total, errors.summary.by_class);
    console.log(errors.top_paths);
}
```

## Logs de requisições

`network.logs(appId, start, end)` retorna requisições individuais com detalhes do cliente, da requisição e da resposta. Disponível nos planos Pro e Enterprise (caso contrário, 403 `UPGRADE_REQUIRED`).

```typescript theme={"system"}
for (const log of await api.apps.network.logs(appId, start, end)) {
    console.log(log.timestamp, log.request.method, log.request.path, log.response.status);
}
```

## Desempenho

`network.performance(appId, start, end)` retorna percentis de latência (`p50`, `p95`, `p99`, em ms) na borda e na origem, por país, por localização e para os caminhos mais lentos. Retorna `null` para uma janela vazia. Disponível nos planos Pro e Enterprise.

```typescript theme={"system"}
const performance = await api.apps.network.performance(appId, start, end);

if (performance) {
    console.log(performance.summary.edge.p95, performance.summary.origin.p95);
}
```

## DNS

`network.dns(appId)` retorna os registros DNS de que seu domínio personalizado precisa, com seus status. Sem um domínio personalizado, resulta em 400 `NO_CUSTOM_DOMAIN`.

```typescript theme={"system"}
for (const { type, name, value, status } of await api.apps.network.dns(appId)) {
    console.log(type, name, value, status); // type: "txt" | "cname"
}
```

## Domínio personalizado

`network.setDomain(appId, domain)` associa um domínio personalizado (plano Standard ou superior). Passe `"@"` para removê-lo.

```typescript theme={"system"}
await api.apps.network.setDomain(appId, "www.example.com");

// Remove it
await api.apps.network.setDomain(appId, "@");
```

| Status | Código | Quando |
| - | - | - |
| 400 | `INVALID_DOMAIN` | Não é um nome de domínio válido |
| 400 | `RESERVED_DOMAIN` | Um domínio da Square Cloud |
| 403 | `UPGRADE_REQUIRED` | O plano não tem domínios personalizados |
| 403 | `LOAD_BALANCER_LIMIT_REACHED` | O limite de aplicações do plano neste domínio foi atingido |
| 409 | `DOMAIN_ALREADY_EXISTS` | O domínio pertence a uma aplicação de outra conta |
| 502 | `DNS_FAILED` | O provedor de borda recusou o domínio |

## Limpando o cache

`network.purgeCache(appId)` limpa o cache de borda da aplicação. É limitado a uma limpeza a cada 60 segundos (429 `KEEP_CALM`).

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

## Erros dos métodos de analytics

| Status | Código | Quando |
| - | - | - |
| 400 | `INVALID_TIME_RANGE` | `start`/`end` ausente, malformado ou invertido |
| 400 | `INVALID_FILTER` | Um filtro não corresponde ao seu formato (`analytics`) |
| 403 | `UPGRADE_REQUIRED` | `logs` e `performance` fora dos planos Pro e Enterprise |
| 429 | `RATE_LIMITED` | Limite compartilhado de cache misses atingido |
| 500 | `UNABLE_TO_FETCH_ANALYTICS`, `UNABLE_TO_FETCH_ERRORS`, `UNABLE_TO_FETCH_PERFORMANCE` | O provedor de borda falhou |
| 503 | `ANALYTICS_BUSY` | Os analytics de borda estão ocupados: tentado novamente de forma automática |

## Próximos passos

<CardGroup cols={3}>
  <Card title="Tempo real" icon="wave-pulse" href="/pt-br/sdks/js/realtime">
    Acompanhe logs e status ao vivo.
  </Card>

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

  <Card title="Analytics de borda pela CLI" icon="terminal" href="/pt-br/cli-reference/edge-analytics">
    As mesmas ações pelo terminal.
  </Card>
</CardGroup>


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