kinvey-flex-sdk
Version:
SDK for creating Kinvey Flex Services
109 lines (93 loc) • 3.67 kB
JavaScript
/**
* Copyright (c) 2018 Kinvey Inc.
*
* Licensed under the Apache License, Version 2.0 (the 'License'); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
const request = require('request');
const req = request.defaults({});
const MISSING_USER_PARAM_ERROR = "You must specify the 'users' parameter to send a push notification";
const MISSING_MESSAGE_PARAM_ERROR = "You must specify the 'message' parameter to send a push notification";
function kinveyPushModule(appMetadata) {
const authHeader = {
user: appMetadata._id,
pass: appMetadata.mastersecret
};
function sendMessage(users, message, cb) {
let callback = cb;
let userEntities = users;
if (userEntities == null) {
if (!callback && typeof message === 'function') callback = message;
const err = new TypeError(MISSING_USER_PARAM_ERROR);
return callback ? setImmediate(() => callback(err)) : Promise.reject(err);
}
if (message == null) {
if (!callback && typeof userEntities === 'function') callback = userEntities;
const err = new TypeError(MISSING_MESSAGE_PARAM_ERROR);
return callback ? setImmediate(() => callback(err)) : Promise.reject(err);
}
if (userEntities.constructor !== Array && typeof userEntities === 'object') userEntities = [userEntities];
return new Promise((resolve, reject) => {
req.post({
url: `${appMetadata.baasUrl}/push/${appMetadata._id}/sendMessage`,
auth: authHeader,
headers: {
'x-kinvey-api-version': '3'
},
json: {
recipients: userEntities,
messageContent: message
},
proxy: false
}, (err, res, body) => {
if (err) return callback ? callback(err) : reject(err);
if (res && res.statusCode >= 400) return callback ? callback(body) : reject(body);
return callback ? callback(null, body) : resolve(body);
});
});
}
function broadcastMessage(message, callback) {
if (message == null) {
const err = new TypeError(MISSING_MESSAGE_PARAM_ERROR);
return callback ? setImmediate(() => callback(err)) : Promise.reject(err);
}
return new Promise((resolve, reject) => {
req.post({
url: `${appMetadata.baasUrl}/push/${appMetadata._id}/sendBroadcast`,
auth: authHeader,
headers: {
'x-kinvey-api-version': '3'
},
json: {
messageContent: message
}
}, (err, res, body) => {
if (err) return callback ? callback(err) : reject(err);
if (res && res.statusCode >= 400) return callback ? callback(body) : reject(body);
return callback ? callback(null, body) : resolve(body);
});
});
}
function sendPayload(userEntities, iOSAps, iOSExtras, androidPayload, callback) {
return sendMessage(userEntities, { iOSAps, iOSExtras, androidPayload }, callback);
}
function broadcastPayload(iOSAps, iOSExtras, androidPayload, callback) {
return broadcastMessage({ iOSAps, iOSExtras, androidPayload }, callback);
}
return {
send: sendMessage,
sendMessage,
broadcast: broadcastMessage,
broadcastMessage,
sendPayload,
broadcastPayload
};
}
module.exports = kinveyPushModule;