Ambiente Local

Troubleshooting

Problemas comuns e soluções para o ambiente de desenvolvimento.

Troubleshooting

Problemas Comuns

Prisma: "The datasource property 'url' is no longer supported"

Causa: Prisma 7 não aceita url nos arquivos .prisma.

Solução: Remover url do schema e colocar no config:

// schema.prisma - SEM url
datasource db {
  provider = "postgresql"
  // NÃO colocar url aqui
}
// prisma.config.ts - COM url
export default defineConfig({
  datasource: { url: env('DATABASE_URL') },
})

Prisma: "The datasource.url property is required"

Causa: Usando --schema ao invés de --config para migrações.

Solução:

# ERRADO
bunx prisma migrate deploy --schema=./prisma/schema-stcall.prisma

# CORRETO
bunx prisma migrate deploy --config=./prisma.config.ts

Prisma: "Cannot find module '@prisma/client/config'"

Causa: Importando defineConfig do pacote errado.

Solução:

// ERRADO
import { defineConfig } from '@prisma/client/config'

// CORRETO
import { defineConfig, env } from 'prisma/config'

Prisma: "Using engine type 'client' requires adapter"

Causa: Prisma 7 exige adaptador no construtor.

Solução:

// ERRADO
const prisma = new PrismaClient()

// CORRETO
const pool = new pg.Pool({ connectionString })
const adapter = new PrismaPg(pool)
const prisma = new PrismaClient({ adapter })

Prisma: "Cannot find module '.prisma/client-stcall'"

Causa: Clientes Prisma não gerados.

Solução:

bunx prisma generate --schema=./prisma/schema-stcall.prisma
bunx prisma generate --schema=./prisma/schema.prisma

Se usando Docker, rebuild a imagem:

docker compose build ws-container

HMR não funciona no Docker

Causa: File watching não funciona em volumes Docker no Windows/macOS.

Solução: Verificar CHOKIDAR_USEPOLLING=true no .env e a config do Vite:

// nuxt.config.ts
vite: {
  server: {
    watch: { usePolling: true }
  }
}

Porta já em uso

Solução:

# Listar processos nas portas
lsof -i :3000
lsof -i :3001

# Ou parar containers Docker
docker compose down

WebSocket não conecta

Verificações:

  1. Container stcall-ws está rodando: docker ps
  2. Health check: curl http://localhost:3001/health
  3. JWT_SECRET é idêntico no frontend e WS server
  4. Token não expirado

WebRTC não registra

Verificações:

  1. Asterisk WSS porta 8089 acessível
  2. Certificado SSL válido
  3. Transporte WSS ativo: pjsip show transports
  4. Endpoint existe: pjsip show endpoints
  5. Credenciais corretas

Sem áudio na chamada

Verificações:

  1. Permissão de microfone concedida no navegador
  2. Portas UDP 10000-20000 abertas no firewall
  3. Servidor STUN/TURN configurado
  4. Verificar logs do Asterisk para erros de mídia
  5. remoteStream anexado ao elemento <audio>

Áudio unidirecional

Causa mais comum: NAT simétrico sem TURN server.

Solução:

  1. Configurar servidor TURN
  2. Verificar external_media_address no PJSIP
  3. Verificar range de portas RTP aberto

Componente PrimeVue não renderiza

Causa: Usando prefixo p- no nome do componente.

Solução: Usar PascalCase sem prefixo:

<!-- ERRADO -->
<p-button />

<!-- CORRETO -->
<Button />

Dark Mode toggle dessincronizado

Bug conhecido: O indicador do InputSwitch pode não acompanhar a mudança visual.

Workaround: Clicar no toggle novamente para ressincronizar.

Import duplicado de composable

Causa: Criou composables/index.ts barrel export.

Solução: Deletar composables/index.ts. O Nuxt auto-importa composables automaticamente.

Logs Úteis

Docker

docker compose logs -f --tail=100  # Últimas 100 linhas + follow
docker logs stcall-ws              # Logs de um container específico

Asterisk

asterisk -rvvv                     # Console interativo
asterisk -rx "core show channels"  # Canais ativos
asterisk -rx "pjsip show contacts" # Contatos registrados
  • Abrir DevTools (F12)
  • Console: erros de WebSocket e WebRTC
  • Network: verificar conexão WebSocket
  • chrome://webrtc-internals/ - Estatísticas WebRTC detalhadas
Copyright © 2026