in packages/actions/sendMessage.js [91:462]
function main(params) {
if (!params.appId && !params.appGuid) {
return Promise.reject('appId / appGUID of the application is required.');
}
if (!params.appSecret) {
return Promise.reject('appSecret of the application is required.');
}
var appId = params.appGuid || params.appId;
var appSecret = params.appSecret;
// message section settings
var messageUrl = params.url;
var messageText = params.text;
// target section settings -- each param should be an array of string
var targetDeviceIds = params.deviceIds;
var targetPlatforms = params.platforms;
var targetTagNames = params.tagNames;
var targetUserIds = params.userIds;
// apns settings
var apnsBadge = params.apnsBadge; // should be an int
var apnsCategory = params.apnsCategory;
var apnsActionKeyTitle = params.apnsIosActionKey;
var apnsSound = params.apnsSound;
var apnsPayload = params.apnsPayload;
var apnsType = params.apnsType;
var apnsTitleLocKey = params.apnsTitleLocKey;
var apnsLocKey = params.apnsLocKey;
var apnsLaunchImage = params.apnsLaunchImage;
var apnsTitleLocArgs = params.apnsTitleLocArgs;
var apnsLocArgs = params.apnsLocArgs;
var apnstitle = params.apnstitle;
var apnsSubtitle = params.apnsSubtitle;
var apnsAttachmentUrl = params.apnsAttachmentUrl;
// gcm settings
var gcmCollapseKey = params.gcmCollapseKey;
var gcmDelayWhileIdle = params.gcmDelayWhileIdle;
var gcmPayload = params.gcmPayload;
var gcmPriority = params.gcmPriority;
var gcmSound = params.gcmSound;
var gcmTimeToLive = params.gcmTimeToLive;
var gcmSync = params.gcmSync;
var gcmVisibility = params.gcmVisibility;
var gcmCategory = params.gcmCategory;
var gcmIcon = params.gcmIcon;
//GCM Style settings
var gcmStyleType = params.gcmStyleType;
var gcmStyleTitle = params.gcmStyleTitle;
var gcmStyleUrl = params.gcmStyleUrl;
var gcmStyleText = params.gcmStyleText;
var gcmStyleLines = params.gcmStyleLines;
//GCM Light settings
var gcmLightsLedArgb = params.gcmLightsLedArgb;
var gcmLightsLedOnMs = params.gcmLightsLedOnMs;
var gcmLightsLedOffMs = params.gcmLightsLedOffMs;
//Firefox web settings
var fireFoxTitle = params.fireFoxTitle;
var fireFoxIconUrl = params.fireFoxIconUrl;
var fireFoxTimeToLive = params.fireFoxTimeToLive;
var fireFoxPayload = params.fireFoxPayload;
//Chrome web settings
var chromeTitle = params.chromeTitle;
var chromeIconUrl = params.chromeIconUrl;
var chromeTimeToLive = params.chromeTimeToLive;
var chromePayload = params.chromePayload;
//Safari web settings
var safariTitle = params.safariTitle;
var safariUrlArgs = params.safariUrlArgs;
var safariAction = params.safariAction;
//Chrome Apps & Extensions web settings
var chromeAppExtTitle = params.chromeAppExtTitle;
var chromeAppExtCollapseKey = params.chromeAppExtCollapseKey;
var chromeAppExtDelayWhileIdle = params.chromeAppExtDelayWhileIdle;
var chromeAppExtIconUrl = params.chromeAppExtIconUrl;
var chromeAppExtTimeToLive = params.chromeAppExtTimeToLive;
var chromeAppExtPayload = params.chromeAppExtPayload;
var sendMessage = {};
// create message section
var message = {};
if (messageText) {
message.alert = messageText;
}
if (messageUrl) {
message.url = messageUrl;
}
if (isEmpty(message)) {
return Promise.reject("No message to send");
} else {
sendMessage.message = message;
}
// create target section
var target = {};
if (targetDeviceIds) {
target.deviceIds = targetDeviceIds;
}
if (targetPlatforms) {
target.platforms = targetPlatforms;
}
if (targetTagNames) {
target.tagNames = targetTagNames;
}
if (targetUserIds) {
target.userIds = targetUserIds;
}
if (isEmpty(target)) {
console.log("No target set, broadcasting message to all registered devices");
} else {
sendMessage.target = target;
}
// create apns settings section
var apns = {};
if (apnsBadge) {
apns.badge = apnsBadge;
}
if (apnsCategory) {
apns.category = apnsCategory;
}
if (apnsActionKeyTitle) {
apns.iosActionKey = apnsActionKeyTitle;
}
if (apnsSound) {
apns.sound = apnsSound;
}
if (apnsType) {
apns.type = apnsType;
}
if (apnsPayload) {
apns.payload = apnsPayload;
}
if (apnsTitleLocKey) {
apns.titleLocKey = apnsTitleLocKey;
}
if (apnsLocKey) {
apns.locKey = apnsLocKey;
}
if (apnsLaunchImage) {
apns.launchImage = apnsLaunchImage;
}
if (apnsTitleLocArgs) {
apns.titleLocArgs = apnsTitleLocArgs;
}
if (apnsLocArgs) {
apns.locArgs = apnsLocArgs;
}
if (apnstitle) {
apns.title = apnstitle;
}
if (apnsSubtitle) {
apns.subtitle = apnsSubtitle;
}
if (apnsAttachmentUrl) {
apns.attachmentUrl = apnsAttachmentUrl;
}
if (!isEmpty(apns)) {
sendMessage.settings = {};
sendMessage.settings.apns = apns;
}
// create gcm settings section
var gcm = {};
if (gcmCollapseKey) {
gcm.collapseKey = gcmCollapseKey;
}
if (gcmDelayWhileIdle) {
gcm.delayWhileIdle = gcmDelayWhileIdle;
}
if (gcmPayload) {
gcm.payload = gcmPayload;
}
if (gcmPriority) {
gcm.priority = gcmPriority;
}
if (gcmSound) {
gcm.sound = gcmSound;
}
if (gcmTimeToLive) {
gcm.timeToLive = gcmTimeToLive;
}
if (gcmVisibility) {
gcm.visibility = gcmVisibility;
}
if (gcmSync) {
gcm.sync = gcmSync;
}
if (gcmCategory) {
gcm.interactiveCategory = gcmCategory;
}
if (gcmIcon) {
gcm.icon = gcmIcon;
}
var gcmStyle = {};
if(gcmStyleType){
gcmStyle.type = gcmStyleType;
}
if (gcmStyleTitle) {
gcmStyle.title = gcmStyleTitle;
}
if (gcmStyleUrl) {
gcmStyle.url = gcmStyleUrl;
}
if (gcmStyleText) {
gcmStyle.text = gcmStyleText;
}
if (gcmStyleLines) {
gcmStyle.lines = gcmStyleLines;
}
if (!isEmpty(gcmStyle)) {
gcm.style = gcmStyle;
}
var gcmLights = {};
if(gcmLightsLedArgb){
gcmLights.ledArgb = gcmLightsLedArgb;
}
if (gcmLightsLedOnMs) {
gcmLights.ledOnMs = gcmLightsLedOnMs;
}
if (gcmLightsLedOffMs) {
gcmLights.ledOffMs = gcmLightsLedOffMs;
}
if (!isEmpty(gcmLights)) {
gcm.lights = gcmLights;
}
if (!isEmpty(gcm)) {
if (!sendMessage.settings) {
sendMessage.settings = {};
}
sendMessage.settings.gcm = gcm;
}
// create FireFox settings section
var firefoxWeb = {};
if (fireFoxTitle){
firefoxWeb.title = fireFoxTitle;
}
if (fireFoxIconUrl) {
firefoxWeb.iconUrl = fireFoxIconUrl;
}
if (fireFoxTimeToLive) {
firefoxWeb.timeToLive = fireFoxTimeToLive;
}
if (fireFoxPayload) {
firefoxWeb.payload = fireFoxPayload;
}
if (!isEmpty(firefoxWeb)) {
if (!sendMessage.settings) {
sendMessage.settings = {};
}
sendMessage.settings.firefoxWeb = firefoxWeb;
}
// create Safari settings section
var safariWeb = {};
if (safariTitle){
safariWeb.title = safariTitle;
}
if (safariUrlArgs) {
safariWeb.urlArgs = safariUrlArgs;
}
if (safariAction) {
safariWeb.action = safariAction;
}
if (!isEmpty(safariWeb)) {
if (!sendMessage.settings) {
sendMessage.settings = {};
}
sendMessage.settings.safariWeb = safariWeb;
}
// create Chrome settings section
var chromeWeb = {};
if (chromeTitle){
chromeWeb.title = chromeTitle;
}
if (chromeIconUrl) {
chromeWeb.iconUrl = chromeIconUrl;
}
if (chromeTimeToLive) {
chromeWeb.timeToLive = chromeTimeToLive;
}
if (chromePayload) {
chromeWeb.payload = chromePayload;
}
if (!isEmpty(chromeWeb)) {
if (!sendMessage.settings) {
sendMessage.settings = {};
}
sendMessage.settings.chromeWeb = chromeWeb;
}
// create Chrome Apps & Extensions settings section
var chromeAppExt = {};
if (chromeAppExtTitle){
chromeAppExt.title = chromeAppExtTitle;
}
if (chromeAppExtCollapseKey) {
chromeAppExt.collapseKey = chromeAppExtCollapseKey;
}
if (chromeAppExtDelayWhileIdle) {
chromeAppExt.delayWhileIdle = chromeAppExtDelayWhileIdle;
}
if (chromeAppExtIconUrl) {
chromeAppExt.iconUrl = chromeAppExtIconUrl;
}
if (chromeAppExtTimeToLive) {
chromeAppExt.timeToLive = chromeAppExtTimeToLive;
}
if (chromeAppExtPayload) {
chromeAppExt.payload = chromeAppExtPayload;
}
if (!isEmpty(chromeAppExt)) {
if (!sendMessage.settings) {
sendMessage.settings = {};
}
sendMessage.settings.chromeAppExt = chromeAppExt;
}
var bodyData = JSON.stringify(sendMessage);
var request = require('request');
var apiHost;
if (params.apiHost) {
apiHost = params.apiHost;
}
else if (params.admin_url) {
var adminURL = url.parse(params.admin_url).protocol === null ? `https:${params.admin_url}` : params.admin_url;
apiHost = url.parse(adminURL).host;
}
else {
apiHost = 'mobile.ng.bluemix.net';
}
var promise = new Promise(function (resolve, reject) {
request({
method: 'post',
uri: `https://${apiHost}/imfpush/v1/apps/${appId}/messages`,
headers: {
'appSecret': appSecret,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
}, function (error, response, body) {
if (error) {
reject(error);
}
var j = JSON.parse(body);
resolve(j);
});
});
return promise;
}