var config = require('./Config') var apn = require('apn') var db = require('./db') var apnConnection, apnFeedback function init (config) { apnConnection = new apn.Connection(config.apn.connection) apnConnection.on('transmissionError', onTransmissionError) 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) db.remove(token) } } function onFeedback (deviceInfos) { console.log('Feedback service, number of devices to remove: ' + deviceInfos.length) if (deviceInfos.length > 0) { db.removeDevices(deviceInfos.map(function (deviceInfo) { return deviceInfo.device.token.toString('hex') }) } } function push (tokens, payload) { apnConnection.pushNotification(payload, tokens) } function buildPayload (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 }