Gitter migration: Point people to app.gitter.im (rollout pt. 1)
[gitter.git] / modules / push-gateways / lib / android / android-notification-gateway.js
blobadd9b6dddb2e28fe41f013f3c20d05208197ec2e
1 'use strict';
3 var env = require('gitter-web-env');
4 var nconf = env.config;
5 var gcm = require('node-gcm');
6 var Promise = require('bluebird');
7 var InvalidRegistrationError = require('../invalid-registration-error');
8 var androidNotificationGenerator = require('./android-notification-generator');
10 var MAX_RETRIES = 4;
12 var sender = new gcm.Sender(nconf.get('gcm:apiKey'));
14 /**
15  * Returns true if a notification was sent
16  */
17 function sendNotificationToDevice(notificationType, notificationDetails, device) {
18   var message = androidNotificationGenerator(notificationType, notificationDetails, device);
19   if (!message) return false;
21   return Promise.fromCallback(function(callback) {
22     sender.send(message, [device.androidToken], MAX_RETRIES, callback);
23   }).then(function(body) {
24     if (body.canonical_ids) {
25       // this registration id/token is an old duplicate which has been superceded by a canonical id,
26       // and we've probably just sent two identical messages to the same phone.
27       throw new InvalidRegistrationError('Duplicate identifier');
28     }
30     if (body.failure && body.results[0] && body.results[0].error === 'NotRegistered') {
31       // app has been uninstalled / token revoked
32       throw new InvalidRegistrationError('Not registered');
33     }
35     return true;
36   });
39 module.exports = {
40   sendNotificationToDevice: Promise.method(sendNotificationToDevice)