Skip to content

Commit

Permalink
Release 1.0.2
Browse files Browse the repository at this point in the history
  • Loading branch information
miqmago committed Oct 18, 2016
1 parent 613fd43 commit 5510261
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 95 deletions.
220 changes: 126 additions & 94 deletions lib/push-notifications.js
@@ -1,131 +1,123 @@
'use strict';

var _ = require('lodash');
var sendGCM = require('./sendGCM');
var sendAPN = require('./sendAPN');
var sendADM = require('./sendADM');
var sendWNS = require('./sendWNS');
var _sendGCM = require('./sendGCM');

var _sendGCM2 = _interopRequireDefault(_sendGCM);

var _sendAPN = require('./sendAPN');

var _sendAPN2 = _interopRequireDefault(_sendAPN);

var _sendADM = require('./sendADM');

var _sendADM2 = _interopRequireDefault(_sendADM);

var _sendWNS = require('./sendWNS');

var _sendWNS2 = _interopRequireDefault(_sendWNS);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var defaultSettings = {
gcm: {
id: null, // PUT YOUR GCM SERVER API KEY,
options: {}
},
apn: {
options: { // See options at https://github.com/node-apn/node-apn/blob/master/doc/provider.markdown
token: null,
// {
// key: '',
// keyId: '',
// teamId: '',
// },
cert: 'cert.pem',
key: 'key.pem',
ca: null,
pfx: null,
passphrase: null,
production: process.env.NODE_ENV === 'production',
voip: false,
address: null,
port: 443,
rejectUnauthorized: true,
connectionRetryLimit: 10,

cacheLength: 1000,
connectionTimeout: 3600000,
autoAdjustCache: true,
maxConnections: 1,
minConnections: 1,
connectTimeout: 10000,
buffersNotifications: true,
fastMode: false,
disableNagle: false,
disableEPIPEFix: false
}
id: null },
apn: { // See options at https://github.com/node-apn/node-apn/blob/master/doc/provider.markdown
token: null,
// {
// key: '',
// keyId: '',
// teamId: '',
// },
cert: 'cert.pem',
key: 'key.pem',
ca: null,
pfx: null,
passphrase: null,
production: process.env.NODE_ENV === 'production',
voip: false,
address: null,
port: 443,
rejectUnauthorized: true,
connectionRetryLimit: 10,

cacheLength: 1000,
connectionTimeout: 3600000,
autoAdjustCache: true,
maxConnections: 1,
minConnections: 1,
connectTimeout: 10000,
buffersNotifications: true,
fastMode: false,
disableNagle: false,
disableEPIPEFix: false
},
adm: {
client_id: null, // PUT YOUR ADM CLIENT ID,
client_secret: null, // PUT YOUR ADM CLIENT SECRET,
options: {}
},
client_secret: null },
wns: {
client_id: null, // PUT YOUR WNS CLIENT ID,
client_secret: null, // PUT YOUR WNS CLIENT SECRET,
accessToken: null,
headers: null,
options: {}
notificationMethod: 'sendTileSquareBlock'
},
mpns: {
options: {}
}
};

function PN(options) {
this.settings = defaultSettings;
this.setOptions(options);
this.settings = Object.assign({}, defaultSettings, options || {});
}

PN.prototype.setOptions = function (options) {
return _.extend(undefined.settings, options);
PN.prototype.setOptions = function setOptions(opts) {
this.settings = Object.assign({}, this.settings, opts);
};

PN.prototype.sendWith = function (method, regIds, data, cb) {
return method(regIds, data, undefined.settings).then(function (results) {
PN.prototype.sendWith = function sendWith(method, regIds, data, cb) {
return method(regIds, data, this.settings).then(function (results) {
(cb || function (noop) {
return noop;
})(null, results);
return results;
}).catch(function (error) {
return cb(error);
(cb || function (noop) {
return noop;
})(error);
return Promise.reject(error);
});
};

PN.prototype.sendGCM = function (regIds, data, cb) {
return undefined.sendWith(sendGCM, regIds, data, cb);
};
PN.prototype.sendAPN = function (regIds, data, cb) {
return undefined.sendWith(sendAPN, regIds, data, cb);
};
PN.prototype.sendADM = function (regIds, data, cb) {
return undefined.sendWith(sendADM, regIds, data, cb);
};
PN.prototype.sendWNS = function (regIds, data, cb) {
return undefined.sendWith(sendWNS, regIds, data, cb);
};

PN.prototype.send = function (pushIds, data, callback) {
PN.prototype.send = function send(_regIds, data, callback) {
var promises = [];
var regIdsGCM = [];
var regIdsAPN = [];
var regIdsWNS = [];
var regIdsADM = [];
var pIds = Array.isArray(pushIds || []) ? pushIds || [] : [pushIds];
var cb = callback || function (noop) {
return noop;
};
var regIdsUnk = [];
var regIds = Array.isArray(_regIds || []) ? _regIds || [] : [_regIds];

// Classify each pushId for corresponding device
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

try {
for (var _iterator = pIds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var pId = _step.value;

if (pId.substring(0, 4) === 'http') {
regIdsWNS.push(pIds);
} else if (pId.length > 64) {
regIdsGCM.push(pId);
} else if (pId.length === 64) {
regIdsAPN.push(pId);
} else if (true) {
// TODO need to find condition for amazon token
regIdsADM.push(pId);
for (var _iterator = regIds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var regId = _step.value;

if (regId.substring(0, 4) === 'http') {
regIdsWNS.push(regId);
} else if (/(amzn|adm)/i.test(regId)) {
regIdsADM.push(regId);
} else if (regId.length > 64) {
regIdsGCM.push(regId);
} else if (regId.length === 64) {
regIdsAPN.push(regId);
} else {
regIdsUnk.push(regId);
}
}

// Android GCM
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
Expand All @@ -141,29 +133,69 @@ PN.prototype.send = function (pushIds, data, callback) {
}
}

if (regIdsGCM.length > 0) {
promises.push(sendGCM(regIdsGCM, data, undefined.settings));
}
try {
// Android GCM
if (regIdsGCM.length > 0) {
promises.push(this.sendWith(_sendGCM2.default, regIdsGCM, data));
}

// iOS APN
if (regIdsAPN.length > 0) {
promises.push(sendAPN(regIdsAPN, data, undefined.settings));
// iOS APN
if (regIdsAPN.length > 0) {
promises.push(this.sendWith(_sendAPN2.default, regIdsAPN, data));
}

// Microsoft WNS
if (regIdsWNS.length > 0) {
promises.push(this.sendWith(_sendWNS2.default, regIdsWNS, data));
}

// Amazon ADM
if (regIdsADM.length > 0) {
promises.push(this.sendWith(_sendADM2.default, regIdsADM, data));
}
} catch (err) {
promises.push(Promise.reject(err));
}

// Microsoft MPNS
if (regIdsWNS.length > 0) {
promises.push(sendWNS(regIdsWNS, data, undefined.settings));
// Unknown
if (regIdsUnk.length > 0) {
(function () {
var results = {
method: 'unknown',
success: 0,
failure: regIdsUnk.length,
message: []
};
regIdsUnk.forEach(function (regId) {
results.message.push({
regId: regId,
error: new Error('Unknown registration id')
});
});
promises.push(Promise.resolve(results));
})();
}

// Amazon ADM
if (regIdsADM.length > 0) {
promises.push(sendWNS(regIdsADM, data, undefined.settings));
// No regIds detected
if (promises.length === 0) {
promises.push(Promise.resolve({
method: 'none',
success: 0,
failure: 0,
message: []
}));
}

return Promise.all(promises).then(function (results) {
var cb = callback || function (noop) {
return noop;
};
cb(null, results);
return results;
}).catch(function (err) {
var cb = callback || function (noop) {
return noop;
};
cb(err);
return Promise.reject(err);
});
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,7 +1,7 @@
{
"name": "node-pushnotifications",
"description": "A cross-platform push service for node.js",
"version": "1.0.1",
"version": "1.0.2",
"author": {
"name": "AppFeel",
"email": "info@appfeel.com"
Expand Down

0 comments on commit 5510261

Please sign in to comment.