textbelt/lib/text.js
2016-11-27 00:57:45 -05:00

90 lines
2.4 KiB
JavaScript

var providers = require('./providers.js'),
carriers = require('./carriers.js'),
spawn = require('child_process').spawn,
StringDecoder = require('string_decoder').StringDecoder,
config = require('./config.js');
//----------------------------------------------------------------
/*
General purpose logging function, gated by a configurable
value.
*/
function output() {
if (config.debugEnabled) {
return console.log.apply(this, arguments);
}
}
//----------------------------------------------------------------
/* Sends a text message
Will perform a region lookup (for providers), then
send a message to each.
Params:
phone - phone number to text
message - message to send
carrier - carrier to use (may be null)
region - region to use (defaults to US)
cb - function(err), provides err messages
*/
function sendText(phone, message, carrier, region, cb) {
output('txting phone', phone, ':', message);
region = region || 'us';
var providers_list;
if (carrier !== null) {
providers_list = carriers[carrier];
} else {
providers_list = providers[region];
}
var emails = providers_list.map(function(provider) {
return provider.replace('%s', phone);
}).join(',');
var args = ['-s', 'txt', '-e', 'set from=' + config.fromAddress,
'-e', 'set use_from=yes', '-e', 'set envelope_from=yes', '-b', emails];
var child = spawn('mutt', args);
var decoder = new StringDecoder('utf8');
child.stdout.on('data', function(data) {
output(decoder.write(data));
});
child.stderr.on('data', function(data) {
output(decoder.write(data));
});
child.on('error', function(data) {
output('mutt failed', {email: emails, data: decoder.write(data)});
cb(false);
});
child.on('exit', function(code, signal) {
cb(false);
});
output(message);
child.stdin.write(message);
child.stdin.end();
}
//----------------------------------------------------------------
/* Overrides default config
Takes a new configuration object, which is
used to override the defaults
Params:
obj - object of config properties to be overriden
*/
function setConfig(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
config[prop] = obj[prop];
}
}
}
module.exports = {
send: sendText, // Send a text message
// debug: debug, No longer needed, see setConfig and config.js
config: setConfig // Override default config
};