Pular para o conteúdo principal
O módulo network só está disponível em aplicações website. Refine o tipo com app.isWebsite() antes de usá-lo:
const app = await api.applications.fetch("abc123def456abc123def456");

if (!app.isWebsite()) {
    throw new Error("Esta aplicação não é um site");
}

app.network; // NetworkModule

Domínio customizado

app.network.setCustomDomain(domain) define ou remove o domínio customizado vinculado ao site.
await app.network.setCustomDomain("seusite.com");

// Passe "@" para remover o domínio customizado configurado
await app.network.setCustomDomain("@");
Domínios customizados exigem o plano Senior ou superior. Há um limite diário por usuário de quantas vezes você pode trocar um domínio customizado.
Anexar um domínio customizado além do limite de load balancer do seu plano (veja Domínios e load balancers de toda a conta abaixo) falha com LOAD_BALANCER_LIMIT_REACHED (403).

Registros DNS

Depois de vincular um domínio, configure o DNS no seu registrador. app.network.dns() retorna um array de registros DNS a criar.
const records = await app.network.dns();

for (const record of records) {
    console.log(`${record.type.toUpperCase()} ${record.name}${record.value} (${record.status})`);
}
Cada registro tem o formato { type, name, value, status }:
  • type é "txt" ou "cname". Os registros TXT cobrem a propriedade do domínio e a validação SSL; o registro CNAME carrega o tráfego e sempre aponta value para cname.squareweb.app.
  • status reflete o estado atual de validação, ex.: "pending", "pending_validation" ou "active".

Analytics

app.network.analytics({ start, end }) retorna analytics agregados da edge. start e end aceitam strings ISO 8601 ou Date. A janela máxima de retenção é de 7 dias.
const since = new Date(Date.now() - 24 * 60 * 60 * 1000);

const analytics = await app.network.analytics({
    start: since,
    end: new Date(),
});

if ("visits" in analytics) {
    console.log(analytics.visits.length, "buckets de tempo");
    console.log("Principais países:", analytics.countries.slice(0, 5));
    console.log("Principais paths:", analytics.paths.slice(0, 5));
}
Para janelas vazias (ex.: antes da aplicação ser criada) a API retorna {}. Verifique com "visits" in analytics antes de ler os dados.

Filtros de drill-down

Além de start/end, analytics() aceita filtros opcionais. Cada filtro restringe todos os breakdowns da resposta de uma vez, não apenas um deles:
FiltroNotas
countryCódigo de país com 2 letras, ex.: "BR"
ipCorrespondência exata de IP
pathCorrespondência por prefixo, ex.: "/api"
statusCódigo de status HTTP, ex.: "404"
osSistema operacional
browserNome do navegador
protocolProtocolo da requisição
refererUse "Direct" para requisições sem referer
providerProvedor de rede, ex.: "GOOGLE (15169)" (ASN) ou "SQUARE-CLOUD-PLATFORM"
contentTypeUse "Unknown" para tipos de conteúdo não classificados
botUse "Unverified" para tráfego normal (não-bot)
const analytics = await app.network.analytics({
    start: since,
    end: new Date(),
    country: "BR",
    status: "404",
    bot: "Unverified",
});

Breakdowns

Além das séries temporais e dos breakdowns top-N já existentes, a resposta inclui quatro breakdowns calculados sobre toda a janela (sem série temporal): ips (IPs originados da própria rede da Square Cloud são mascarados), status_codes, bots e content_types. Cada entrada tem o formato { type, visits, requests, bytes }.
if ("ips" in analytics) {
    console.log("Principais IPs:",     analytics.ips.slice(0, 5));
    console.log("Códigos de status:",  analytics.status_codes);
    console.log("Tráfego de bots:",    analytics.bots);
    console.log("Tipos de conteúdo:",  analytics.content_types);
}

Monitoramento de erros

app.network.errors({ start, end, include4xx? }) retorna o breakdown de erros da edge. Por padrão, apenas 5xx são considerados.
const errors = await app.network.errors({
    start: since,
    end: new Date(),
    include4xx: true, // inclui 4xx junto dos 5xx
});

if ("summary" in errors) {
    console.log(`Total: ${errors.summary.total}`);
    console.log("Por classe:",         errors.summary.by_class);
    console.log("Paths que mais falham:", errors.top_paths.slice(0, 3));
}

Logs de requisição

app.network.logs({ start, end }) retorna os logs por requisição da edge.
const logs = await app.network.logs({ start: since, end: new Date() });

for (const log of logs.slice(0, 5)) {
    console.log(
        log.timestamp,
        log.request.method, log.request.path,
        "→",
        log.response.status,
        `(${log.client.country ?? "??"})`,
    );
}
Logs por requisição exigem o plano Pro ou superior.

Percentis de latência

app.network.performance({ start, end }) retorna as latências p50 / p95 / p99 para as camadas edge e origin.
const perf = await app.network.performance({ start: since, end: new Date() });

if ("summary" in perf) {
    const { p50, p95, p99 } = perf.summary.edge;
    console.log(`Edge p50/p95/p99: ${p50}/${p95}/${p99}ms`);
    console.log("Paths mais lentos:", perf.slowest_paths.slice(0, 3));
}
Métricas de performance exigem o plano Pro ou superior.

Limpando o cache da edge

app.network.purgeCache() invalida o cache inteiro da edge para os domínios da aplicação.
await app.network.purgeCache();

Domínios e load balancers de toda a conta

domains() e loadBalancers() ficam em api.applications, não em app.network — eles operam sobre todas as aplicações da conta, não apenas um único site.

Listando todos os domínios

api.applications.domains() retorna todos os domínios configurados em todas as aplicações da conta.
const domains = await api.applications.domains();

for (const domain of domains) {
    console.log(domain.app_id, domain.hostname, domain.type); // "subdomain" | "custom"
}
Domínios customizados são listados primeiro; aplicações sem domínio web são omitidas. Os resultados vêm de cache e são limitados a 20 requisições/60s por usuário, o que não conta para os limites de taxa de rede por aplicação descritos acima.

Load balancers

api.applications.loadBalancers() agrupa aplicações que compartilham um domínio customizado.
const { limit, balancers } = await api.applications.loadBalancers();

for (const balancer of balancers) {
    console.log(balancer.hostname, balancer.apps.map((app) => app.name));
}
Um grupo com 2 ou mais apps é um load balancer ativo: o tráfego é balanceado na edge com failover automático quando um dos apps está offline. limit é o número máximo de aplicações que podem compartilhar um domínio no plano da conta: 2 (Standard), 5 (Pro), 10 (Enterprise). Limitado a 20 requisições/60s por usuário.