UNPKG

ask-cli-x

Version:

Alexa Skills Kit (ASK) Command Line Interfaces

106 lines (105 loc) 3.53 kB
"use strict"; const R = require("ramda"); const requestLib = require("request"); const DynamicConfig = require("../utils/dynamic-config"); const logger = require("../utils/logger-utility"); const urlUtils = require("../utils/url-utils"); const stringUtils = require("../utils/string-utils"); const CONSTANTS = require("../utils/constants"); module.exports = { request, putByUrl, }; /** * Core CLI request function with User-Agent setting. * * @param {object} options request options object * @param {string} operation operation name for the request * @param {boolean} doDebug define if debug info is needed * @param {function} callback */ function request(options, operation, doDebug, callback) { // Validation of input parameters const requestOptions = R.clone(options); if (typeof operation !== "string" || !operation.trim()) { process.nextTick(() => { callback("[Fatal]: CLI request must have a non-empty operation name."); }); return; } if (!urlUtils.isValidUrl(requestOptions.url)) { process.nextTick(() => { callback(`[Fatal]: Invalid URL:${requestOptions.url}. CLI request must call with valid url.`); }); return; } const proxyUrl = process.env.ASK_CLI_PROXY; if (stringUtils.isNonBlankString(proxyUrl)) { requestOptions.proxy = proxyUrl; } // Set user-agent for each CLI request if (!requestOptions.headers) { requestOptions.headers = {}; } requestOptions.headers["User-Agent"] = DynamicConfig.userAgent; // Make request requestLib(requestOptions, (error, response) => { if (doDebug) { logger.getInstance().debug(debugContentForResponse(operation, error, response)); } if (error) { return callback(`Failed to make request to ${operation}.\nError response: ${error}`); } if (!response) { return callback(`Failed to make request to ${operation}.\nPlease make sure "${requestOptions.url}" is responding.`); } if (!response.statusCode) { return callback(`Failed to access the statusCode from the request to ${operation}.`); } return callback(null, response); }); } /** * HTTP client's upload method * @param {String} url * @param {Object} payload * @param {String} operation * @param {Boolean} doDebug * @param {Function} callback */ function putByUrl(url, payload, operation, doDebug, callback) { const options = { url, method: CONSTANTS.HTTP_REQUEST.VERB.PUT, headers: {}, body: payload, }; request(options, operation, doDebug, (reqErr, reqResponse) => { callback(reqErr, reqResponse); }); } /** * Form the debug info object according to the error and response from each http request * @param {string} operation * @param {string} error * @param {object} response */ function debugContentForResponse(operation, error, response) { return { activity: operation, error, "request-id": response.headers["x-amzn-requestid"] || null, request: { method: response.request.method, url: response.request.href, headers: response.request.headers, body: response.request.body, }, response: { statusCode: response.statusCode, statusMessage: response.statusMessage, headers: response.headers, }, body: response.body, }; }