backendless
Version:
Backendless JavaScript SDK for Node.js and the browser
625 lines (600 loc) • 18.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _backendlessRequest = _interopRequireDefault(require("backendless-request"));
var _request = _interopRequireDefault(require("./request"));
var _urls = _interopRequireDefault(require("./urls"));
var _utils = _interopRequireDefault(require("./utils"));
var _expression = _interopRequireDefault(require("./expression"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var DEFAULT_PROPS = {
appId: null,
apiKey: null,
serverURL: 'https://api.backendless.com',
automationServerURL: null,
domain: null,
apiURI: '/api',
debugMode: false,
standalone: false,
XMLHttpRequest: typeof XMLHttpRequest !== 'undefined' ? XMLHttpRequest : undefined
};
var STATELESS_PROPS = ['appId', 'apiKey', 'domain'];
var previousBackendless = _utils["default"].globalScope && _utils["default"].globalScope.Backendless;
var showLegacyDataWarning = function showLegacyDataWarning() {
if (!showLegacyDataWarning.isShown) {
// eslint-disable-next-line no-console
console.warn('Backendless.Persistence is deprecated namespace, use Backendless.Data instead');
showLegacyDataWarning.isShown = true;
}
};
// Backendless supports three signatures for the initApp method
// two args - applicationId {String} and secretKey {String}
// one argument - domain {String}
// one argument - whole set of options {Object}
var parseInitConfig = function parseInitConfig() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var appId = args[0],
apiKey = args[1];
if (appId && (0, _typeof2["default"])(appId) === 'object') {
return appId;
}
if (typeof appId === 'string' && !apiKey) {
return {
domain: appId
};
}
return {
appId: appId,
apiKey: apiKey
};
};
var validateConfig = function validateConfig(config) {
if (config.domain) {
if (!config.domain.startsWith('https://') && !config.domain.startsWith('http://')) {
throw new Error('When initialize the SDK with a custom domain it should start with http:// or https://, ' + 'for example: Backendless.initApp(\'https://foobar.com\')');
}
}
};
var SERVICES = {
'Logging': function Logging() {
return require('./logging')["default"];
},
'Counters': function Counters() {
return require('./counters')["default"];
},
'Cache': function Cache() {
return require('./cache')["default"];
},
'Commerce': function Commerce() {
return require('./commerce')["default"];
},
'Users': function Users() {
return require('./users')["default"];
},
'BL': function BL() {
return require('./bl')["default"];
},
'Data': function Data() {
return require('./data')["default"];
},
'Hive': function Hive() {
return require('./hive')["default"];
},
'Messaging': function Messaging() {
return require('./messaging')["default"];
},
'Files': function Files() {
return require('./files')["default"];
},
'RT': function RT() {
return require('./rt')["default"];
},
'SharedObject': function SharedObject() {
return require('./rso')["default"];
},
'LocalCache': function LocalCache() {
return require('./local-cache')["default"];
},
'UnitOfWork': function UnitOfWork() {
return require('./unit-of-work')["default"];
},
'Management': function Management() {
return require('./management')["default"];
},
'Automations': function Automations() {
return require('./automations')["default"];
}
};
var Backendless = /*#__PURE__*/function () {
function Backendless(props) {
(0, _classCallCheck2["default"])(this, Backendless);
this.initConfig(props);
this.Request = _backendlessRequest["default"];
this.request = new _request["default"](this);
this.urls = new _urls["default"](this);
}
/**
* @param {Object} config
*/
(0, _createClass2["default"])(Backendless, [{
key: "initConfig",
value: function initConfig(config) {
config = _objectSpread({}, config);
if (config.domain) {
delete config.appId;
delete config.apiKey;
}
for (var key in DEFAULT_PROPS) {
if (DEFAULT_PROPS.hasOwnProperty(key)) {
var privateKey = "__".concat(key);
if (STATELESS_PROPS.includes(key)) {
delete this[privateKey];
}
var defaultValue = this[privateKey] === undefined ? DEFAULT_PROPS[key] : this[privateKey];
this[privateKey] = config[key] === undefined ? defaultValue : config[key];
}
}
}
/**
* @param {string|Object} appId|domain|config
* @param {string} [apiKey]
* @returns {Backendless}
*/
}, {
key: "initApp",
value: function initApp() {
var config = parseInitConfig.apply(void 0, arguments);
validateConfig(config);
var app = config.standalone ? new Backendless(this) : this;
app.initConfig(config);
app.resetRT();
app.__removeService('LocalCache');
app.appInfoPromise();
var loggingConfig = (0, _extends2["default"])({
loadLevels: true,
globalLevel: 'all',
levels: {}
}, config.logging);
if (app.__hasService('Logging')) {
app.Logging.reset();
app.Logging.setConfig(loggingConfig);
}
if (app.__hasService('Users')) {
app.Users.currentUser = null;
}
delete this.__device;
app.loggingConfig = loggingConfig;
return app;
}
}, {
key: "appInfoPromise",
value: function appInfoPromise(reset) {
var _this = this;
if (reset || !this.__appInfoPromise) {
this.__appInfoPromise = new Promise(function (resolve, reject) {
_this.request.get({
url: _this.urls.appInfo()
}).then(resolve)["catch"](function (error) {
if (error.code === 3064) {
_this.setCurrentUserToken(null);
return _this.request.get({
url: _this.urls.appInfo()
});
}
throw error;
})["catch"](reject);
});
}
this.__appInfoPromise["catch"](function (error) {
// eslint-disable-next-line no-console
console.error('could not load backendless app info', error);
});
return this.__appInfoPromise;
}
}, {
key: "__hasService",
value: function __hasService(name) {
return !!this["__".concat(name)];
}
}, {
key: "__removeService",
value: function __removeService(name) {
delete this["__".concat(name)];
}
}, {
key: "__getService",
value: function __getService(name) {
var privateName = "__".concat(name);
if (!this[privateName]) {
var Service = SERVICES[name]();
this[privateName] = new Service(this);
}
return this[privateName];
}
///--------SETTERS/GETTERS-------///
///--------standalone-------///
}, {
key: "standalone",
get: function get() {
return this.__standalone;
},
set: function set(standalone) {
throw new Error('Setting value to Backendless.standalone directly is not possible, ' + "instead you must use Backendless.initApp({ appId: [APP_ID], apiKey: [API_KEY], standalone: ".concat(standalone, " })"));
}
}, {
key: "appId",
get: function get() {
return this.__appId;
},
set: function set(appId) {
throw new Error("Setting '".concat(appId, "' value to Backendless.appId directly is not possible, ") + "instead you must use Backendless.initApp('".concat(appId, "', API_KEY)"));
}
}, {
key: "apiKey",
get: function get() {
return this.__apiKey;
},
set: function set(apiKey) {
throw new Error("Setting '".concat(apiKey, "' value to Backendless.apiKey directly is not possible, ") + "instead you must use Backendless.initApp(APP_ID, '".concat(apiKey, "')"));
}
///--------serverURL-------///
}, {
key: "serverURL",
get: function get() {
return this.__serverURL;
},
set: function set(url) {
this.__serverURL = url;
}
///--------automationServerURL-------///
}, {
key: "automationServerURL",
get: function get() {
return this.__automationServerURL;
},
set: function set(url) {
this.__automationServerURL = url;
}
///--------domain-------///
}, {
key: "domain",
get: function get() {
return this.__domain;
},
set: function set(domain) {
this.__domain = domain;
}
///--------apiURI-------///
}, {
key: "apiURI",
get: function get() {
return this.__apiURI;
},
set: function set(apiURI) {
this.__apiURI = apiURI;
}
///--------appPath-------///
}, {
key: "appPath",
get: function get() {
if (this.domain) {
return this.domain + this.apiURI;
}
if (this.appId && this.apiKey) {
return [this.serverURL, this.appId, this.apiKey].join('/');
}
return null;
},
set: function set(appPath) {
throw new Error("Setting '".concat(appPath, "' value to Backendless.appPath directly is not possible, ") + 'instead you must use Backendless.initApp(APP_ID, API_KEY) for setup the value');
}
}, {
key: "automationPath",
get: function get() {
if (!this.automationServerURL) {
return this.appPath;
}
return [this.automationServerURL, this.appId, this.apiKey].join('/');
},
set: function set(automationPath) {
throw new Error("Setting '".concat(automationPath, "' value to Backendless.automationPath directly is not possible"));
}
///--------debugMode-------///
}, {
key: "debugMode",
get: function get() {
return this.__debugMode;
},
set: function set(debugMode) {
debugMode = !!debugMode;
if (this.__debugMode !== debugMode) {
this.__debugMode = debugMode;
if (this.__RT) {
this.RT.setDebugMode(debugMode);
}
}
}
///--------XMLHttpRequestMode-------///
}, {
key: "XMLHttpRequest",
get: function get() {
return this.__XMLHttpRequest;
},
set: function set(XMLHttpRequest) {
this.__XMLHttpRequest = XMLHttpRequest;
}
///--------device-------///
}, {
key: "device",
get: function get() {
if (!this.__device) {
throw new Error('Device is not defined. Please, run the Backendless.setupDevice');
}
return this.__device;
},
set: function set(props) {
throw new Error('Setting value to Backendless.device directly is not possible, ' + 'instead you must use Backendless.setupDevice(deviceProperties) for setup the device');
}
}, {
key: "setupDevice",
value: function setupDevice(device) {
var Device = require('./device')["default"];
this.__device = new Device(device);
}
///----------UTIL METHODS--------///
}, {
key: "Utils",
get: function get() {
return _utils["default"];
}
}, {
key: "getCurrentUserToken",
value: function getCurrentUserToken() {
return this.Users.getCurrentUserToken();
}
}, {
key: "setCurrentUserToken",
value: function setCurrentUserToken(userToken) {
this.Users.setCurrentUserToken(userToken);
}
}, {
key: "browser",
get: function get() {
return require('./user-agent').getUserAgent();
}
}, {
key: "noConflict",
value: function noConflict() {
if (_utils["default"].globalScope) {
_utils["default"].globalScope.Backendless = previousBackendless;
}
return this;
}
///-------------------------------------///
///-------------- SERVICES -------------///
}, {
key: "Logging",
get: function get() {
return this.__getService('Logging');
}
}, {
key: "Counters",
get: function get() {
return this.__getService('Counters');
}
}, {
key: "Cache",
get: function get() {
return this.__getService('Cache');
}
}, {
key: "Commerce",
get: function get() {
return this.__getService('Commerce');
}
}, {
key: "Users",
get: function get() {
return this.__getService('Users');
}
}, {
key: "User",
get: function get() {
return require('./users/user')["default"];
}
}, {
key: "UserService",
get: function get() {
return this.Users;
}
}, {
key: "BL",
get: function get() {
return this.__getService('BL');
}
}, {
key: "CustomServices",
get: function get() {
return this.BL.CustomServices;
}
}, {
key: "APIServices",
get: function get() {
return this.BL.CustomServices;
}
}, {
key: "Events",
get: function get() {
return this.BL.Events;
}
}, {
key: "Data",
get: function get() {
return this.__getService('Data');
}
}, {
key: "Hive",
get: function get() {
return this.__getService('Hive');
}
}, {
key: "Messaging",
get: function get() {
return this.__getService('Messaging');
}
}, {
key: "Files",
get: function get() {
return this.__getService('Files');
}
}, {
key: "RT",
get: function get() {
return this.__getService('RT');
}
}, {
key: "resetRT",
value: function resetRT() {
if (this.__RT) {
this.__RT.terminate();
delete this.__RT;
}
}
}, {
key: "SharedObject",
get: function get() {
return this.__getService('SharedObject');
}
}, {
key: "LocalCache",
get: function get() {
return this.__getService('LocalCache');
}
}, {
key: "UnitOfWork",
get: function get() {
return this.__getService('UnitOfWork');
}
}, {
key: "Management",
get: function get() {
return this.__getService('Management');
}
}, {
key: "Automations",
get: function get() {
return this.__getService('Automations');
}
///-------------- SERVICES -------------///
///-------------------------------------///
///-------------------------------------///
///--------BACKWARD COMPATIBILITY-------///
/** @deprecated */
}, {
key: "applicationId",
get: function get() {
// eslint-disable-next-line no-console
// temporary comment it because it breaks JS-CodeRunner version less than 6.3.0
// console.warn('getter/setter for Backendless.applicationId is deprecated, instead use Backendless.appId')
return this.appId;
}
/** @deprecated */,
set: function set(appId) {
// eslint-disable-next-line no-console
console.warn('getter/setter for Backendless.applicationId is deprecated, instead use Backendless.appId');
this.appId = appId;
}
/** @deprecated */
}, {
key: "secretKey",
get: function get() {
// eslint-disable-next-line no-console
console.warn('getter/setter for Backendless.secretKey is deprecated, instead use Backendless.apiKey');
return this.apiKey;
}
/** @deprecated */,
set: function set(apiKey) {
// eslint-disable-next-line no-console
console.warn('getter/setter for Backendless.secretKey is deprecated, instead use Backendless.apiKey');
this.apiKey = apiKey;
}
/** @deprecated */
}, {
key: "Persistence",
get: function get() {
showLegacyDataWarning();
return this.Data;
}
}, {
key: "DataQueryBuilder",
get: function get() {
return this.Data.QueryBuilder;
}
}, {
key: "GroupQueryBuilder",
get: function get() {
return this.Data.GroupQueryBuilder;
}
}, {
key: "JSONUpdateBuilder",
get: function get() {
return this.Data.JSONUpdateBuilder;
}
}, {
key: "LoadRelationsQueryBuilder",
get: function get() {
return this.Data.LoadRelationsQueryBuilder;
}
}, {
key: "Bodyparts",
get: function get() {
return this.Messaging.Bodyparts;
}
}, {
key: "PublishOptions",
get: function get() {
return this.Messaging.PublishOptions;
}
}, {
key: "DeliveryOptions",
get: function get() {
return this.Messaging.DeliveryOptions;
}
}, {
key: "PublishOptionsHeaders",
get: function get() {
return this.Messaging.PublishOptionsHeaders;
}
}, {
key: "EmailEnvelope",
get: function get() {
return this.Messaging.EmailEnvelope;
}
}, {
key: "Expression",
get: function get() {
return _expression["default"];
}
///--------BACKWARD COMPATIBILITY-------///
///-------------------------------------///
}]);
return Backendless;
}();
var backendless = new Backendless(DEFAULT_PROPS);
if (_utils["default"].globalScope) {
_utils["default"].globalScope.Backendless = backendless;
}
exports = module.exports = backendless;
var _default = backendless;
exports["default"] = _default;