textbelt/lib/text.js
2015-11-06 00:24:25 -08:00

86 lines
2.2 KiB
JavaScript

var providers = require('./providers.js')
, _ = require('underscore')
, exec = require('child_process').exec
, spawn = require('child_process').spawn;
var StringDecoder = require('string_decoder').StringDecoder;
var debugEnabled = false;
// NOTE: Change this if you are self-hosting!
var fromAddress = 'foo@bar.com';
//----------------------------------------------------------------
/*
General purpose logging function, gated by a configurable
value.
*/
function output() {
if (debugEnabled) {
return console.log.apply(this, arguments);
}
}
//----------------------------------------------------------------
/* Enable verbosity for the text module.
If enabled, logging functions will
print to stdout.
Params:
enable - bool
*/
function debug(enable) {
debugEnabled = enable;
return debugEnabled;
}
//----------------------------------------------------------------
/* 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
region - region to use (defaults to US)
cb - function(err), provides err messages
*/
function sendText(phone, message, region, cb) {
output('txting phone', phone, ':', message);
region = region || 'us';
var providers_list = providers[region];
var done = _.after(providers_list.length, function() {
cb(false);
});
_.each(providers_list, function(provider) {
var email = provider.replace('%s', phone);
var child = spawn('mail', ['-s', 'txt', '-a', 'From:' + fromAddress, email]);
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('sendmail failed', {email: email, data: decoder.write(data)});
done();
});
child.on('exit', function(code, signal) {
done();
});
child.stdin.write(message + '\n');
child.stdin.end();
});
}
module.exports = {
send: sendText, // Send a text message
debug: debug // Enable or disable debug output
};