Files
kami-parse-server/src/Push/utils.js
Diamond Lewis e6ac3b6932 fix(prettier): Properly handle lint-stage files (#6970)
Now handles top level files and recursive files in folders.

Set max line length to be 100
2020-10-25 15:06:58 -05:00

137 lines
3.5 KiB
JavaScript

import Parse from 'parse/node';
import deepcopy from 'deepcopy';
export function isPushIncrementing(body) {
if (!body.data || !body.data.badge) {
return false;
}
const badge = body.data.badge;
if (typeof badge == 'string' && badge.toLowerCase() == 'increment') {
return true;
}
return (
typeof badge == 'object' &&
typeof badge.__op == 'string' &&
badge.__op.toLowerCase() == 'increment' &&
Number(badge.amount)
);
}
const localizableKeys = ['alert', 'title'];
export function getLocalesFromPush(body) {
const data = body.data;
if (!data) {
return [];
}
return [
...new Set(
Object.keys(data).reduce((memo, key) => {
localizableKeys.forEach(localizableKey => {
if (key.indexOf(`${localizableKey}-`) == 0) {
memo.push(key.slice(localizableKey.length + 1));
}
});
return memo;
}, [])
),
];
}
export function transformPushBodyForLocale(body, locale) {
const data = body.data;
if (!data) {
return body;
}
body = deepcopy(body);
localizableKeys.forEach(key => {
const localeValue = body.data[`${key}-${locale}`];
if (localeValue) {
body.data[key] = localeValue;
}
});
return stripLocalesFromBody(body);
}
export function stripLocalesFromBody(body) {
if (!body.data) {
return body;
}
Object.keys(body.data).forEach(key => {
localizableKeys.forEach(localizableKey => {
if (key.indexOf(`${localizableKey}-`) == 0) {
delete body.data[key];
}
});
});
return body;
}
export function bodiesPerLocales(body, locales = []) {
// Get all tranformed bodies for each locale
const result = locales.reduce((memo, locale) => {
memo[locale] = transformPushBodyForLocale(body, locale);
return memo;
}, {});
// Set the default locale, with the stripped body
result.default = stripLocalesFromBody(body);
return result;
}
export function groupByLocaleIdentifier(installations, locales = []) {
return installations.reduce(
(map, installation) => {
let added = false;
locales.forEach(locale => {
if (added) {
return;
}
if (installation.localeIdentifier && installation.localeIdentifier.indexOf(locale) === 0) {
added = true;
map[locale] = map[locale] || [];
map[locale].push(installation);
}
});
if (!added) {
map.default.push(installation);
}
return map;
},
{ default: [] }
);
}
/**
* Check whether the deviceType parameter in qury condition is valid or not.
* @param {Object} where A query condition
* @param {Array} validPushTypes An array of valid push types(string)
*/
export function validatePushType(where = {}, validPushTypes = []) {
var deviceTypeField = where.deviceType || {};
var deviceTypes = [];
if (typeof deviceTypeField === 'string') {
deviceTypes.push(deviceTypeField);
} else if (Array.isArray(deviceTypeField['$in'])) {
deviceTypes.concat(deviceTypeField['$in']);
}
for (var i = 0; i < deviceTypes.length; i++) {
var deviceType = deviceTypes[i];
if (validPushTypes.indexOf(deviceType) < 0) {
throw new Parse.Error(
Parse.Error.PUSH_MISCONFIGURED,
deviceType + ' is not supported push type.'
);
}
}
}
export function applyDeviceTokenExists(where) {
where = deepcopy(where);
if (!Object.prototype.hasOwnProperty.call(where, 'deviceToken')) {
where['deviceToken'] = { $exists: true };
}
return where;
}