UNPKG

route4me-node

Version:

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

419 lines (373 loc) 12.4 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 utils = require("./../utils"); var errors = require("./../errors"); // =================================== function propertyToUpper(obj, key) { if (key in obj) { // Modify original object, it is expected behaviour obj[key] = obj[key].toString().toUpperCase(); // eslint-disable-line no-param-reassign } } function remapUserData(data) { var mapped = utils.clone(data); mapped.dateOfBirth = mapped.dateOfBirth.toString(); propertyToUpper(mapped, "readonlyUser"); propertyToUpper(mapped, "hideVisitedAddresses"); propertyToUpper(mapped, "hideRoutedAddresses"); propertyToUpper(mapped, "hideNonfutureRoutes"); propertyToUpper(mapped, "showAllVehicles"); propertyToUpper(mapped, "showAllDrivers"); return utils.mapObject(mapped, { "phone": "member_phone", "zipcode": "member_zipcode", "routeCount": "route_count", "email": "member_email", "type": "member_type", "dateOfBirth": "date_of_birth", "firstName": "member_first_name", "password": "member_password", "lastName": "member_last_name", "readonlyUser": "READONLY_USER", "hideVisitedAddresses": "HIDE_VISITED_ADDRESSES", "hideRoutedAddresses": "HIDE_ROUTED_ADDRESSES", "hideNonfutureRoutes": "HIDE_NONFUTURE_ROUTES", "showAllVehicles": "SHOW_ALL_VEHICLES", "showAllDrivers": "SHOW_ALL_DRIVERS" }); } function remapAccountData(data) { var mapped = utils.clone(data); var res = utils.mapObject(mapped, { "industry": "strIndustry", "firstName": "strFirstName", "lastName": "strLastName", "email": "strEmail", "deviceType": "device_type", "password": "strPassword_1" }); res["strPassword_2"] = data["password"]; res["chkTerms"] = "1"; res["format"] = "json"; return res; } // =================================== function _removeValidate(data, ctx, res) { if (!data || "boolean" !== typeof data.status) { return new errors.Route4MeValidationError("Invalid response", data); } if (true === data.status) { return true; } // TODO: parse real error return new errors.Route4MeApiError("Failed", res); } function _validateSessionValidate(data, ctx, res) { if (!data || "boolean" !== typeof data.authenticated || "number" !== typeof data.member_id) { return new errors.Route4MeValidationError("Invalid response", data); } if (true !== data.authenticated) { return new errors.Route4MeApiError("Not authenticated", res); } return data.member_id; } /** * Members facility * * @category Members */ var Members = function () { /** * Constructor * * @see {@link https://route4me.io/docs/#territories} * @since 0.1.8 * @private * * @param {RequestManager} requestManager - Request Manager * @return {Members} - Members facility */ function Members(requestManager) { _classCallCheck(this, Members); this.r = requestManager; } /** * Create an User * * @see {@link https://route4me.io/docs/#create-an-user} * @since 0.1.9 * * @todo TODO: validate INPUT parameter with **custom** schema * * @example <caption>Sample input</caption> * { * "firstName": "Clay", * "lastName": "Abraham", * "phone": "571-259-5939", * "zipcode": "22102", * "routeCount": null, * "email": "skrynkovskyy+newdispatcher@gmail.com", * "type": "SUB_ACCOUNT_DISPATCHER", * "dateOfBirth": 2010, * "password": "123456", * "readonlyUser": false, * "hideVisitedAddresses": false, * "hideRoutedAddresses": false, * "hideNonfutureRoutes": false, * "showAllVehicles": false, * "showAllDrivers": false, * } * * @param {Object} data - Parameters of new user * @param {string} data.hideRoutedAddresses - user parameter * @param {string} data.phone - user parameter * @param {string} data.zipcode - user parameter * @param {number} data.routeCount - user parameter * @param {string} data.email - user parameter * @param {string} data.type - user parameter * @param {string} data.dateOfBirth - user parameter * @param {string} data.firstName - user parameter * @param {string} data.password - user parameter * @param {string} data.lastName - user parameter * @param {boolean} data.readonlyUser - user parameter * @param {boolean} data.hideVisitedAddresses - user parameter * @param {boolean} data.hideRoutedAddresses - user parameter * @param {boolean} data.hideNonfutureRoutes - user parameter * @param {boolean} data.showAllVehicles - user parameter * @param {boolean} data.showAllDrivers - user parameter * @param {module:route4me-node~RequestCallback<jsonschema:Members.Member>} * [callback] */ _createClass(Members, [{ key: "create", value: function create(data, callback) { var validData = remapUserData(data); return this.r._makeRequest({ method: "POST", path: "/api.v4/user.php", body: validData, validationContext: "Members.Members" }, callback); } /** * Member’s Sub-users * * View existing sub-users in a member’s account. * * @see {@link https://route4me.io/docs/#members-sub-users} * @since 0.1.9 * * @todo TODO: there is no schema for response * * @param {module:route4me-node~RequestCallback<jsonschema:Members.Members>} * [callback] */ }, { key: "list", value: function list(callback) { return this.r._makeRequest({ method: "GET", path: "/api/member/view_users.php", validationContext: "Members.Members" }, callback); } /** * Get an User Details * * @see {@link https://route4me.io/docs/#get-an-user-details} * @since 0.1.9 * * @todo TODO: reformat output * * @param {number} id - Member ID * @param {module:route4me-node~RequestCallback<jsonschema:Members.Member>} * [callback] */ }, { key: "get", value: function get(id, callback) { return this.r._makeRequest({ method: "GET", path: "/api.v4/user.php", qs: { "member_id": id }, validationContext: "Members.Member" }, callback); } /** * Update an existing user. * * @see {@link https://route4me.io/docs/#update-an-user} * @since 0.1.9 * * @todo TODO: validate INPUT parameter with **custom** schema * @todo TODO: reformat output * * @example <caption>Sample input</caption> * { * "firstName": "Clay", * "lastName": "Abraham", * "phone": "571-259-5939", * "zipcode": "22102", * "routeCount": null, * "email": "skrynkovskyy+newdispatcher@gmail.com", * "type": "SUB_ACCOUNT_DISPATCHER", * "dateOfBirth": 2010, * "password": "123456", * "readonlyUser": false, * "hideVisitedAddresses": false, * "hideRoutedAddresses": false, * "hideNonfutureRoutes": false, * "showAllVehicles": false, * "showAllDrivers": false, * } * * @param {number} id - Member ID * @param {Object} data - Parameters of new user * @param {string} data.hideRoutedAddresses - user parameter * @param {string} data.phone - user parameter * @param {string} data.zipcode - user parameter * @param {number} data.routeCount - user parameter * @param {string} data.email - user parameter * @param {string} data.type - user parameter * @param {string} data.dateOfBirth - user parameter * @param {string} data.firstName - user parameter * @param {string} data.password - user parameter * @param {string} data.lastName - user parameter * @param {boolean} data.readonlyUser - user parameter * @param {boolean} data.hideVisitedAddresses - user parameter * @param {boolean} data.hideRoutedAddresses - user parameter * @param {boolean} data.hideNonfutureRoutes - user parameter * @param {boolean} data.showAllVehicles - user parameter * @param {boolean} data.showAllDrivers - user parameter * @param {module:route4me-node~RequestCallback<jsonschema:Members.Member>} * [callback] */ }, { key: "update", value: function update(id, data, callback) { var validData = remapUserData(data); validData["member_id"] = id; return this.r._makeRequest({ method: "PUT", path: "/api.v4/user.php", body: validData, validationContext: "Members.Member" }, callback); } /** * Remove existing user from a member’s account. * * @see {@link https://route4me.io/docs/#remove-an-user} * @since 0.1.9 * * @param {number} id - Member ID * @param {module:route4me-node~RequestCallback<jsonschema:Members.Member>} * [callback] */ }, { key: "remove", value: function remove(id, callback) { var data = { "member_id": id }; return this.r._makeRequest({ method: "DELETE", path: "/api.v4/user.php", body: data, validationContext: _removeValidate }, callback); } /** * Authentication of a user with an email and password. * * @see {@link https://route4me.io/docs/#authentication-aa} * @since 0.1.9 * * @todo TODO: reformat output * * @param {string} email - Email of an user * @param {string} password - Password * @param {module:route4me-node~RequestCallback<jsonschema:Members.Member>} * [callback] */ }, { key: "authenticate", value: function authenticate(email, password, callback) { return this.r._makeRequest({ method: "POST", path: "/actions/authenticate.php", body: { "strEmail": email, "strPassword": password, "format": "json" }, validationContext: "Members.Member" }, callback); } /** * Validate a Session * * Check if a session is valid. * * @see {@link https://route4me.io/docs/#validate-a-session} * @since 0.1.9 * * @param {number} id - Member ID * @param {string} sessionId - Session ID * @param {module:route4me-node~RequestCallback<number>} * [callback] */ }, { key: "validateSession", value: function validateSession(id, sessionId, callback) { return this.r._makeRequest({ method: "GET", path: "/datafeed/session/validate_session.php", qs: { "session_guid": sessionId, "member_id": id, "frmt": "json" }, validationContext: _validateSessionValidate }, callback); } /** * Registration of a new account. * * @see {@link https://route4me.io/docs/#register-an-account} * @since 0.1.9 * * @todo TODO: reformat output * * @param {string} data - Account parameters * @param {string} data.accountPlan - Account parameter * @param {string} data.industry - Account parameter * @param {string} data.firstName - Account parameter * @param {string} data.lastName - Account parameter * @param {string} data.email - Account parameter * @param {string} data.deviceType - Account parameter * @param {string} data.password - Account parameter * @param {module:route4me-node~RequestCallback<jsonschema:Members.Account>} * [callback] */ }, { key: "registerAccount", value: function registerAccount(data, callback) { var validData = remapAccountData(data); return this.r._makeRequest({ method: "POST", path: "/actions/register_action.php", qs: { "plan": data.accountPlan }, body: validData, validationContext: "Members.Account" }, callback); } }]); return Members; }(); module.exports = Members;