built.io
Version:
SDK for Built.io Backend
258 lines (236 loc) • 8.82 kB
JavaScript
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);