- packages/telephony: cliente AMI proprio sobre TCP puro (sem dependencia de terceiros pouco mantida) + interface TelephonyProvider + AsteriskTelephonyProvider (Originate, Hangup, QueuePause/Add/Remove, QueueStatus, ExtensionState, DeviceState, PJSIPShowEndpoints/Contacts, Reload, runCommand, stream de eventos). Testado contra o Asterisk real — o formato de resposta do Command mudou entre versoes do Asterisk (headers 'Output:' repetidos em vez de 'Response: Follows'/'--END COMMAND--'), corrigido apos inspecionar os bytes crus do protocolo - apps/asterisk-events: worker dedicado a manter a conexao AMI viva, normalizar eventos (Newchannel, DialBegin/End, Hangup, DeviceStateChange, ContactStatus, eventos de fila/agente), persistir ExtensionState no Postgres e publicar em Redis pub/sub para consumo em tempo real. Containerizado, alcanca o Asterisk (host network) via host.docker.internal a partir da rede bridge. Heartbeat no Redis para health check - packages/database: novos modelos Trunk, Extension, ExtensionState (migration aplicada) - packages/shared: secret-crypto.ts (AES-256-GCM para credenciais de trunk e senha SIP em repouso, master key externa ao banco) Testado ponta a ponta: chamada real originada -> eventos normalizados recebidos via Redis SUBSCRIBE, heartbeat renovando no TTL correto.
23 lines
484 B
JSON
23 lines
484 B
JSON
{
|
|
"name": "@b2bcall/asterisk-events",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"main": "dist/main.js",
|
|
"scripts": {
|
|
"build": "tsc",
|
|
"start": "node dist/main.js",
|
|
"start:dev": "ts-node src/main.ts"
|
|
},
|
|
"dependencies": {
|
|
"@b2bcall/database": "workspace:*",
|
|
"@b2bcall/telephony": "workspace:*",
|
|
"ioredis": "^5.4.2",
|
|
"pino": "^9.6.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^24.0.0",
|
|
"ts-node": "^10.9.2",
|
|
"typescript": "^5.7.3"
|
|
}
|
|
}
|