From b5edd8ee48193b3b710e6bb4b45da561c18f0bc3 Mon Sep 17 00:00:00 2001 From: ChrisChrome Date: Tue, 28 Oct 2025 07:36:28 -0600 Subject: [PATCH] Big test? --- index.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 11 deletions(-) diff --git a/index.js b/index.js index 0177f65..d5738c0 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ import dotenv from 'dotenv'; -dotenv.config({quiet: true}) +dotenv.config({ quiet: true }) import AMISocket from 'ami'; const sock = new AMISocket({ connect: { @@ -21,20 +21,78 @@ const cfTypes = { CFU: "Unavailable", } -sock.on('event', async (event) => { - console.log(event) -}) +const main = () => { + var respData = []; + + // getList for CF, CFB, CFU + sock.getList({ + action: 'DBGetTree', + family: 'CF' + }).then(async (response) => { + // Responses are an array of objects. The first should always have eventlist: 'start', and last should have eventlist: 'complete'. Remove these, make an array of objects {key, val} based on the rest of the response objects. + let entries = response.filter(r => r.eventlist !== 'start' && r.eventlist !== 'complete').map(r => ({ key: r.key, val: r.val })); + for (let entry of entries) { + let [type, ext] = entry.key.split('/'); + if (cfTypes[type]) { + respData.push({ + extension: ext, + type: type, + target: entry.val + }); + } + } + + }).then(() => { + sock.getList({ + action: 'DBGetTree', + family: 'CFB' + }).then(async (response) => { + let entries = response.filter(r => r.eventlist !== 'start' && r.eventlist !== 'complete').map(r => ({ key: r.key, val: r.val })); + for (let entry of entries) { + let [type, ext] = entry.key.split('/'); + if (cfTypes[type]) { + respData.push({ + extension: ext, + type: type, + target: entry.val + }); + } + } + }).then(() => { + sock.getList({ + action: 'DBGetTree', + family: 'CFU' + }).then(async (response) => { + let entries = response.filter(r => r.eventlist !== 'start' && r.eventlist !== 'complete').map(r => ({ key: r.key, val: r.val })); + for (let entry of entries) { + let [type, ext] = entry.key.split('/'); + if (cfTypes[type]) { + respData.push({ + extension: ext, + type: type, + target: entry.val + }); + } + } + }).then(() => { + console.log(`Found ${respData.length} call forwards.`); + for (let cf of respData) { + console.log(`Extension ${cf.extension} has ${cfTypes[cf.type]} call forward to ${cf.target}`); + } + setTimeout(main, 60000); // Repeat every 60 seconds + }); + }); + }); +}; const startup = async () => { sock.connect().then(() => { console.log(sock.amiVersion) - sock.getList({ - action: 'DBGetTree', - family: 'CF' - }).then(async (response) => { - console.log(response) - }) - }) + main(); + }).catch((err) => { + console.error('Error connecting to AMI:', err); + setTimeout(startup, 10000); // Retry after 10 seconds + }); } startup(); \ No newline at end of file