UNPKG

route4me-node

Version:

Access Route4Me's logistics-as-a-service API using our Node.js SDK

236 lines (212 loc) 7.2 kB
"use strict"; 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; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var debug = require("debug")("route4me"); var platform = require("platform"); var ActivityFeed = require("./resources/activity-feed"); var Addresses = require("./resources/addresses"); var AddressBook = require("./resources/address-book"); var AvoidanceZones = require("./resources/avoidance-zones"); var Geocoding = require("./resources/geocoding"); var Members = require("./resources/members"); var Notes = require("./resources/notes"); var Optimizations = require("./resources/optimizations"); var Orders = require("./resources/orders"); var Routes = require("./resources/routes"); var Territories = require("./resources/territories"); var Tracking = require("./resources/tracking"); var Vehicles = require("./resources/vehicles"); var packageJson = require("./../package.json"); // eslint-disable-line import/no-dynamic-require var utils = require("./utils"); var errors = require("./errors"); var RequestManager = require("./request-manager"); /** * Route4Me main SDK class * * The main purpose of this class: to provide an access to API-methods and to keep * chore and routine in the shadow as long as possible. * * With `route4me` instance you should get responses from API easy-peasy. * * Main members of the instanse of `Route4Me` class: * * * [ActivityFeed ]{@link ActivityFeed} * * [Addresses ]{@link Addresses} * * [AddressBook ]{@link AddressBook} * * [AvoidanceZones]{@link AvoidanceZones} * * [Geocoding ]{@link Geocoding} * * [Members ]{@link Members} * * [Notes ]{@link Notes} * * [Optimizations ]{@link Optimizations} * * [Orders ]{@link Orders} * * [Routes ]{@link Routes} * * [Territories ]{@link Territories} * * [Tracking ]{@link Tracking} * * [Vehicles ]{@link Vehicles} * * Each member corresponds to an bunch of methods, described in API-documentation, * but the most methods in this SDK have unified names: * * * `create` - to create new entity * * `get` - to get **one** entity (usually, by ID) * * `list` - returns a list of **all** entities (sometimes with `limit` and `offset`) * * `update` - allows to edit entity * * `remove` - removes/deletes the entity * * `search` - obviously: allows to search items by a set of criteria * * For most use cases it is necessary: * * 1. Create `route4me` instance (with your API-key) * 2. Call the appropriate method * 3. Get the result (as JSON object) * 4. **PROFIT** * * @summary Route4Me main SDK class * * @category Route4Me */ var Route4Me = function () { /** * Create new API client * * @param {string} apiKey API KEY * @param {object} [options] Additional options for new instance * @param {string} [options.baseUrl="https://route4me.com"] Base URL for sending requests * @param {ILogger} [options.logger=null] Logger facility * @param {boolean|function} [options.promise=false] Use promises instead of * callbacks. Usage: * * `false` means _no promises, use callbacks_; * * `true` means _use global `Promise`_ as promises' constructor; * * `constructor (function)` forces to use explicit Promise library. * See also Examples section of this documentation. * * @param {module:route4me-node~ValidationCallback} [options.validate=false] * Validator for input and output parameters of the API methods. Set **falsey** * value to skip autovalidation (in favor of manual check). * * @return {Route4Me} New API client */ function Route4Me(apiKey, options) { _classCallCheck(this, Route4Me); var opt = {}; // check options opt["baseUrl"] = utils.get(options, "baseUrl", "https://route4me.com"); opt["logger"] = utils.get(options, "logger", new utils.ILogger()); opt["promise"] = utils.get(options, "promise", false); opt["validate"] = utils.get(options, "validate", false); // TODO: decide, whether this param could be configured opt["userAgent"] = `superagent/3.3.2 (${platform.name} ${platform.version}; Route4Me-${platform.name}/${Route4Me.version}) ${platform.description}`; debug("init", opt); debug("version", Route4Me.version); if (!apiKey) { throw new errors.Route4MeError("'apiKey' is not set"); } var req = new RequestManager(apiKey, opt); this._logger = opt["logger"]; /** * **ActivityFeed** related API calls * @type {ActivityFeed} * @since 0.1.12 */ this.ActivityFeed = new ActivityFeed(req); /** * **AddressBook** related API calls * @type {AddressBook} * @since 0.1.8 */ this.AddressBook = new AddressBook(req); /** * **Addresses** related API calls * @type {Addresses} * @since 0.1.8 */ this.Addresses = new Addresses(req); /** * **AvoidanceZones** related API calls * @type {AvoidanceZones} * @since 0.1.8 */ this.AvoidanceZones = new AvoidanceZones(req); /** * **Geocoding** related API calls * @type {Geocoding} * @since 0.1.9 */ this.Geocoding = new Geocoding(req); /* * **Members** related API calls * @type {Members} * @since 0.1.8 */ this.Members = new Members(req); /** * **Notes** related API calls * @type {Notes} * @since 0.1.9 */ this.Notes = new Notes(req); /** * **Optimizations** related API calls * @type {Optimizations} */ this.Optimizations = new Optimizations(req); /** * **Orders** related API calls * @type {Orders} */ this.Orders = new Orders(req); /** * **Routes** related API calls * @type {Routes} * @since 0.1.8 */ this.Routes = new Routes(req); /** * **Territories** related API calls * @type {Territories} */ this.Territories = new Territories(req); /** * **Tracking** related API calls * @type {Tracking} */ this.Tracking = new Tracking(req); /** * **Vehicles** related API calls * @type {Vehicles} */ this.Vehicles = new Vehicles(req); this._logger.debug({ msg: "initialized", version: Route4Me.version }); } /** * Version of this API client * * @since 0.1.3 * * @return {string} Version * @static * @readonly */ _createClass(Route4Me, [{ key: "version", /** * Version of this API client * * @since 0.2.0 * * @return {string} Version * @readonly */ get: function get() { // eslint-disable-line class-methods-use-this return packageJson.version; } }], [{ key: "version", get: function get() { return packageJson.version; } }]); return Route4Me; }(); module.exports = Route4Me;