UNPKG

built.io

Version:

SDK for Built.io Backend

258 lines (236 loc) 8.82 kB
var R = require('ramda'); var ObjCons = require('./object'); var utility = require('./utilities/utility'); var instanceMethodBuilder = require('./utilities/instanceMethodBuilder')(); /** * @class Installation * @classdesc * Represents an installation * @description * Constructs a new installation * @param {string|object} uid The uid for the Installation, or a JavaScript object with initial values * @example * // 'blt5d4sample2633b' is a dummy Application API key * var app = Built.App('blt5d4sample2633b'); * var installation = app.Installation({ * device_token : "Sample_device_token"; * }); * @return {Installation} */ var installCons = module.exports = R.curry(function(app,cls,headers,query,data,delta){ var returnObj = ObjCons(app,cls,headers,{},data,delta); returnObj.cons = module.exports; return instanceMethodBuilder.build(module.exports,returnObj); }); utility.copyProperties(module.exports,ObjCons); /** * Sets the timezone for this installation as the current timezone * @function setCurrentTimeZone * @instance * @memberof Installation * @example * // 'blt5d4sample2633b' is a dummy Application API key * var installation = Built.App('blt5d4sample2633b').Installation(); * installation = installation.setCurrentTimeZone(); * @return {Installation} */ module.exports.setCurrentTimeZone = function(object){ var timeOffset = (new Date()).getTimezoneOffset(); var timezone = (Math.abs(timeOffset) < 60 ? ((timeOffset < 0 ? "+" : "-") + ("0:") + Math.abs(timeOffset)) : (timeOffset < 0 ? "+" : "-") + (Math.floor((Math.abs(timeOffset) / 60)) + ":" + (Math.abs(timeOffset) % 60))); return object.set('timezone',timezone); } instanceMethodBuilder.define('setCurrentTimeZone',1); /** * Set the device token * @function setDeviceToken * @param {String} token The token to be given * @instance * @memberof Installation * @example * // 'blt5d4sample2633b' is a dummy Application API key * var installation = Built.App('blt5d4sample2633b').Installation(); * installation = installation.setDeviceToken('sample_device_token'); * @return {Installation} */ module.exports.setDeviceToken = module.exports.set('device_token'); instanceMethodBuilder.define('setDeviceToken',2); // module.exports.setDeviceToken = module.exports.set('device_type'); /** * Set the device type * @function setDeviceType * @param {String} type The type of device being used. Supported devices are Android and iOS. * @instance * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var installation = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * installation = installation.setDeviceType('android'); * @memberof Installation * @return {Installation} */ module.exports.setDeviceType = module.exports.set('device_type'); instanceMethodBuilder.define('setDeviceType',2); /** * Sets the credentails name property which is used to detect to which credentials this installation data belongs. * @function setCredentailsName * @param {String} credentailsName Name for this credentail * @instance * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var installation = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * installation = installation.setCredentailsName('testName'); * @memberof Installation * @return {Installation} */ module.exports.setCredentailsName = module.exports.set('credentails_name'); instanceMethodBuilder.define('setCredentailsName',2); /** * Subscribes to a given set of channels * @function subscribeChannels * @param {Array} channels Array of channels that should be subscribed * @instance * @memberof Installation * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var installation = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * installation = installation.subscribeChannels(['project.object.create']); * @return {Installation} */ module.exports.subscribeChannels = R.curry(function(channels,object){ if(!utility.isArray(channels)) throw new Error("Channels should be array"); return object.pushValue("subscribed_to_channels",channels); }); instanceMethodBuilder.define('subscribeChannels',2); /** * Unsubscribes from a given set of channels * @function unsubscribeChannels * @param {Array} channels Array of channels that should be subscribed * @instance * @memberof Installation * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var installation = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * installation.fetch() * .then(function(installation){ * installation.unsubscribeChannels(['project.object.create']); * }); * @return {Installation} */ module.exports.unsubscribeChannels = R.curry(function(channels,object){ if(!utility.isArray(channels)) throw new Error("Channels should be array"); return object.pullValue("subscribed_to_channels",channels); }); instanceMethodBuilder.define('unsubscribeChannels',2); /** * Gets the device token * @function getDeviceToken * @instance * @memberof Installation * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var installation = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * installation.fetch() * .then(function(installation){ * var token = installation.getDeviceToken(); * }); * @return {String} */ module.exports.getDeviceToken = module.exports.get('device_token') instanceMethodBuilder.define('getDeviceToken',1); /** * Credentails name property is used to detect to which credentials this installation data belongs * @function getCredentailsName * @instance * @memberof Installation * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var installation = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * installation.fetch() * .then(function(installation){ * var credentailsName = installation.getCredentailsName(); * }); * @return {String} */ module.exports.getCredentailsName = module.exports.get('credentails_name'); instanceMethodBuilder.define('getCredentailsName',1); /** * Gets the device type * @function getDeviceType * @instance * @memberof Installation * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var installation = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * installation.fetch() * .then(function(installation){ * var type = installation.getDeviceType(); * }); * @return {String} */ module.exports.getDeviceType = module.exports.get('device_type'); instanceMethodBuilder.define('getDeviceType',1); /** * Gets a list of subscribed channels by this device * @function getSubscribedChannelList * @instance * @memberof Installation * @throws new Error("Uid not found") * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var installation = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * installation.fetch() * .then(function(installation){ * var list = installation.getSubscribedChannelList(); * }) * @return {Array} */ module.exports.getSubscribedChannelList = function(object){ var list = object.get("subscribed_to_channels"); if(list && utility.isArray(list)) return list; else return object.delta.subscribed_to_channels.PUSH.data; } instanceMethodBuilder.define('getSubscribedChannelList',1); /** * Fires an update call when the installation object has a uid property, else fires a create call * @function save * @instance * @memberof Installation * @example * // 'blt5d4sample2633b' is a dummy Application API key * // 'blt12sampleb09157' is uid of an object on Built.io Backend * var inst = Built.App('blt5d4sample2633b').Installation('blt12sampleb09157'); * inst * .setDeviceType("android") * .setDeviceToken("dummy_device_token") * .subscribeChannels(["project.object.create"]); * .save() * .then(function(inst){ * * }) * @return {Promise<Installation>} */ module.exports.save = function(object){ //For analytics we require device_type to be set on login if(!object.getDeviceType()) object = object.setDeviceType(utility.getDeviceTypeFromUA()); if(!object.get("uid")){ object = object.upsert({ "device_token": object.getDeviceToken() }); } return ObjCons.save(object).then(function(res){ return res; }); } instanceMethodBuilder.define('save',1);