var config = require('./Config'); var apn = require('apn'); var db = require('./db') function init (config) { var apnConnection = new apn.Connection(config.apn.connection) apnConnection.on('transmissionError', onTransmissionError) var apnFeedback = new apn.Feedback(config.apn.feedback) apnFeedback.on('feedback', onFeedback) return apnConnection } function onTransmissionError (errorCode, notification, recipient) { console.error('Error while pushing to APN: ' + errorCode) if (errorCode === 8 && recipient.token) { var token = recipient.token.toString('hex').toUpperCase() console.log('Invalid token: removing device ' + token) pushAssociations.removeDevice(token) } } function onFeedback (deviceInfos) { console.log('Feedback service, number of devices to remove: ' + deviceInfos.length) if (deviceInfos.length > 0) { pushAssociations.removeDevices(deviceInfos.map(function (deviceInfo) { return deviceInfo.device.token.toString('hex') }) } } var push = function (tokens, payload) { apnSender().pushNotification(payload, tokens) } var buildPayload = function (options) { var notif = new apn.Notification() notif.expiry = options.expiry || 0 notif.alert = options.alert notif.badge = options.badge notif.payload = options.payload notif.sound = options.sound return notif } module.exports = { init: init, push: push, buildPayload: buildPayload }