Coder Social home page Coder Social logo

asterisk-ami-connector's Introduction

Asterisk AMI Connector for NodeJS (ES2015)

Build Status Coverage Status Code Climate npm version

This library is a part of Asterisk's AMI Client library.

Install

$ npm i asterisk-ami-connector

NodeJS versions

support >=4.0.0

Usage

Base example with promises.

const connector = require('asterisk-ami-connector')({reconnect: true});

connector.connect('login', 'password', {host: '127.0.0.1', port: 5038})
    .then(amiConnection => {
        amiConnection
            .on('event', event  => {
                console.log(event);
                amiConnection.close();
            })
            .on('response', response  => console.log(response))
            .on('close', ()  => console.log('closed'))
            .on('error', error  => console.log(error));
    })
    .catch(error => console.log(error));

or using co for synchronous code style

const connector = require('asterisk-ami-connector')({reconnect: true});
const co = require('co');

co(function*(){
    let amiConnection = yield connector.connect('login', 'password', {host: '127.0.0.1', port: 5038});
    
    amiConnection
        .on('event', event  => {
            console.log(event);
            amiConnection.close();
        })
        .on('response', response  => console.log(response))
        .on('close', ()  => console.log('closed'))
        .on('error', error  => console.log(error));
})
    .catch(error => console.log(error));

or with co like synchronous style

Some details about module functionality

Options of connection setup to Asterisk AMI:

  • reconnect - default is false. Reconnection during connection setup.
  • maxAttemptsCount - default is null (infinity). Max count of attempts of reconnection.
  • attemptsDelay - default is 1000 (ms). Time delay between attempts of reconnection.

Method connect

It takes the following parameters:

  • login - Asterisks AMI login;
  • secret - Asterisks AMI password;
  • options - standard options for net.connect method.

It always returns promise. That promise will be resolved with instance of AmiConnection, or will be reject with AmiAuthError.

Class AmiConnection

It is a class-wrapper for Asterisk's AMI socket, which was inherit from EventEmitter.

Available methods:

  • .close() - close current Asterisk AMI connection;
  • .write(message) - write message into current Asterisk's AMI socket;

Available props:

  • .isConnected - true when connection to Asterisk AMI established;
  • .lastEvent - last event by Asterisk;
  • .lastResponse - last response by Asterisk;
  • .lastWroteData - last wrote data to Asterisk's AMI socket (from client's code);

Available events:

  • event - it fires when AMI event was received. Handler receives AMI event object.
  • response - it fires when AMI response was received. Handler receives AMI response object.
  • close - it fires when AMI connection was closed.
  • error - it fires when error occurred. Handler receives error.
  • data - it fires when data was received from AMI socket. Handler receives buffer of received data.

Class AmiAuthError

It class of Asterisk AMI auth-errors, which was inherit from Error.

Debugging

Use env-variable DEBUG=* for print to console of steps of connection establishment.

Examples

For examples, please, see ./examples/* or tests ./test/*.

Tests

Tests require Mocha.

mocha ./tests

or with npm

npm test 

Test coverage with Istanbul

npm run coverage

License

Licensed under the MIT License

asterisk-ami-connector's People

Contributors

belirafon avatar revall avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

asterisk-ami-connector's Issues

Support TLS connections

It turns out AMI supports connection with TLS as well.

From a code perspective, all we would need to do is to replace the net library to be

- const net = require('net');
+ const tls = require('tls');

With a simple option we can switch the library and use the appropriate one.

Would you like a PR for that?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.