castleio-sdk
Version:
The castle.io SDK for Node.js
203 lines (172 loc) • 8.02 kB
JavaScript
;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _restify = require('restify');
var _restify2 = _interopRequireDefault(_restify);
var _package = require('../package.json');
var _package2 = _interopRequireDefault(_package);
var _expressCompiled = require('./express-compiled.js');
var _expressCompiled2 = _interopRequireDefault(_expressCompiled);
var _os = require('os');
var _os2 = _interopRequireDefault(_os);
var _eventsCompiled = require('./events-compiled.js');
var _eventsCompiled2 = _interopRequireDefault(_eventsCompiled);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Castle = function () {
/**
*
* @param apiKey
* @param apiSecret
*/
function Castle(_ref) {
var _ref$apiKey = _ref.apiKey;
var apiKey = _ref$apiKey === undefined ? null : _ref$apiKey;
var apiSecret = _ref.apiSecret;
var _ref$apiUrl = _ref.apiUrl;
var apiUrl = _ref$apiUrl === undefined ? 'https://api.castle.io' : _ref$apiUrl;
var _ref$disableClientUse = _ref.disableClientUserAgent;
var disableClientUserAgent = _ref$disableClientUse === undefined ? false : _ref$disableClientUse;
_classCallCheck(this, Castle);
this.apiKey = apiKey;
this.apiSecret = apiSecret;
this.disableClientUserAgent = disableClientUserAgent;
this.apiUrl = apiUrl;
this.client = _restify2.default.createJsonClient({ url: apiUrl });
this.getClient().basicAuth('test', apiSecret);
}
/**
*
* @param {string} event the event you want to track. This can be custom or one from Castle.Events
* @param {string} user_id the id of the affected user (If known)
* @param {object} details [optional] other details for the event. EX: the $login parameter for emails
* @param {object} headers [optional] the HTTP headers sent by the user/client
* @param {string} ip [optional] the user/client's IP Address
* @param {string} cookie [optional] the castle cookie left by the clientside javascript sdk
* @returns {Promise}
*/
_createClass(Castle, [{
key: 'trackEvent',
value: function trackEvent(_ref2) {
var _this = this;
var event = _ref2.event;
var user_id = _ref2.user_id;
var _ref2$details = _ref2.details;
var details = _ref2$details === undefined ? undefined : _ref2$details;
var _ref2$headers = _ref2.headers;
var headers = _ref2$headers === undefined ? {} : _ref2$headers;
var _ref2$ip = _ref2.ip;
var ip = _ref2$ip === undefined ? undefined : _ref2$ip;
var _ref2$cookie = _ref2.cookie;
var cookie = _ref2$cookie === undefined ? '' : _ref2$cookie;
var _ref2$userAgent = _ref2.userAgent;
var userAgent = _ref2$userAgent === undefined ? '' : _ref2$userAgent;
return new Promise(function (resolve, reject) {
if (event === undefined || event === null || event === "") {
return reject(new Error('Missing event', 'MISSING_EVENT_NAME'));
}
var postData = {
name: event,
user_id: user_id,
details: details
};
_this.getClient().post({
path: '/v1/events',
headers: _this.generateHeaders(headers, ip, cookie, userAgent)
}, postData, function (error, request, response, obj) {
if (error) {
return reject(error);
} else if (request.statusCode < 200 || request.statusCode >= 300) {
return reject(new Error('Invalid HTTP Status Code ' + request.statusCode, 'INVALID_HTTP_STATUS_CODE'));
}
return resolve(obj);
});
});
}
}, {
key: 'identify',
value: function identify(_ref3) {
var _this2 = this;
var user_id = _ref3.user_id;
var user_data = _ref3.user_data;
var _ref3$headers = _ref3.headers;
var headers = _ref3$headers === undefined ? {} : _ref3$headers;
var _ref3$ip = _ref3.ip;
var ip = _ref3$ip === undefined ? undefined : _ref3$ip;
var _ref3$cookie = _ref3.cookie;
var cookie = _ref3$cookie === undefined ? '' : _ref3$cookie;
var _ref3$userAgent = _ref3.userAgent;
var userAgent = _ref3$userAgent === undefined ? '' : _ref3$userAgent;
return new Promise(function (resolve, reject) {
_this2.getClient().put({
path: '/v1/users/' + user_id,
headers: _this2.generateHeaders(headers, ip, cookie, userAgent)
}, user_data, function (error, request, response, obj) {
if (error) {
return reject(error);
} else if (request.statusCode < 200 || request.statusCode >= 300) {
return reject(new Error('Invalid HTTP Status Code ' + request.statusCode, 'INVALID_HTTP_STATUS_CODE'));
}
return resolve(obj);
});
});
}
}, {
key: 'generateHeaders',
value: function generateHeaders(clientHeaders, ip, cookie, userAgent) {
return this.stripUndefinedVariables({
'X-Castle-Ip': ip,
'X-Castle-Cookie-Id': cookie,
'X-Castle-User-Agent': userAgent,
'X-Castle-Headers': JSON.stringify(clientHeaders),
'X-Castle-Client-User-Agent': this.isClientUserAgentDisabled() ? undefined : JSON.stringify(this.getClientUserAgent())
});
}
}, {
key: 'stripUndefinedVariables',
value: function stripUndefinedVariables(obj) {
var toReturn = {};
Object.keys(obj).forEach(function (k) {
var v = obj[k];
if (v !== undefined && v !== null) {
toReturn[k] = v;
}
});
return toReturn;
}
}, {
key: 'getClient',
value: function getClient() {
return this.client;
}
/**
*
* @returns {{}}
*/
}, {
key: 'getClientUserAgent',
value: function getClientUserAgent() {
return {
bindings_version: _package2.default.version,
lang: 'Node.js',
lang_version: process.version,
platform: _os2.default.platform(),
publisher: 'castle'
};
}
}, {
key: 'isClientUserAgentDisabled',
value: function isClientUserAgentDisabled() {
return this.disableClientUserAgent || false;
}
}], [{
key: 'express',
value: function express(opts) {
var castle = new Castle(opts);
return (0, _expressCompiled2.default)(castle);
}
}]);
return Castle;
}();
Castle.Events = _eventsCompiled2.default;
module.exports = Castle;
//# sourceMappingURL=index-compiled.js.map