telismo
Version:
Node.js module to interact with the telismo API
169 lines (137 loc) • 3.48 kB
JavaScript
var version = 0.5;
var ddp_server = "telismo.com";
var DDPClient = require("ddp");
var debug_mode = false;
var Telismo_instance = function(apiKey) {
var self = this;
var Telismo_DDP = new DDPClient({
host: ddp_server,
port: 443,
auto_reconnect: true,
auto_reconnect_timer: 500,
use_ejson: true,
use_ssl: true,
use_ssl_strict: false
});
var connected = false;
var _opsqueue = [];
var api_ok = false;
Telismo_DDP.connect(function(error) {
if (error) {
if(debug_mode) console.log('Cannot connect to Telismo Server!');
return;
}
Telismo_DDP.call("api/login", [apiKey], function(err,result) {
api_ok = true;
});
if(debug_mode) console.log('Connected to Telismo Server');
Telismo_DDP.subscribe('api', [], function() {
if(debug_mode) console.log('Ready. When you are ready to end the session please use ctrl+c');
});
connected = true;
//Run Queued Tasks
for(var i = 0; i < _opsqueue.length; i++) {
_opsqueue[i]();
delete _opsqueue[i];
}
});
var _callbacks = [];
Telismo_DDP.on('socket-close', function(code, message) {
console.log("Close: %s %s", code, message);
});
Telismo_DDP.on('socket-error', function(error) {
console.log("Error: %j", error);
console.log(error);
});
Telismo_DDP.on('message', function(msg) {
var JSONMessage = JSON.parse(msg);
if(JSONMessage.msg == "added" && JSONMessage.collection == "calls") {
var doc = JSONMessage.fields;
doc._id = JSONMessage.id;
if(doc._id in _callbacks) {
var callback = _callbacks[doc._id];
if(doc.error) {
if(callback) callback({errors: doc.error, status: doc.status});
}else{
if(callback) callback(null, doc.output);
}
}
else {
if(doc.error) {
if(self.callback) self.callback({errors: doc.error, status: doc.status});
}else{
if(self.callback) self.callback(null, doc);
}
}
}
});
this._enqueue = function(method) {
_opsqueue.push(method);
}
this._call = function(params, callback) {
Telismo_DDP.call("api/new", [apiKey, params], function(err,result) {
if(result && result.success == true) {
if(result.id instanceof Array) {
for(var i = 0; i<result.id.length; i++) {
_callbacks[result.id] = callback
}
}else{
_callbacks[result.id] = callback;
}
}else{
if(result && result.test) {
callback(null, result);
}
}
});
}
this._cancel = function(id, callback) {
Telismo_DDP.call("api/cancel", [apiKey, {id: id}], function(err,result) {
if(result && result.success == true) {
callback(null, result);
}else{
callback(result);
}
});
}
this.call = function(params, callback) {
var queued = function() {
self._call(params, callback);
}
if(connected) {
queued();
}else{
self._enqueue(queued);
}
}
this.list = function() {
var result = Telismo_DDP.call("api/list", apiKey, params);
if(result && result.success == true) {
return result;
}
return [];
}
this.calls = function() {
return CallDocs;
}
this.cancel = function(params, callback) {
var queued = function() {
self._cancel(params, callback);
}
if(connected) {
queued();
}else{
self._enqueue(queued);
}
}
this.callback = function(callData) {
}
return this;
}
var Telismo = function(apiKey, options) {
if(options) {
debug_mode = ('debug_mode' in options) ? options.debug_mode : false;
}
return new Telismo_instance(apiKey);
}
module.exports = Telismo;