UNPKG

@di-zed/yandex-smart-home

Version:

The Yandex Smart Home skills for the different device types.

144 lines (143 loc) 5.38 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /** * @author DiZed Team * @copyright Copyright (c) DiZed Team (https://github.com/di-zed/) */ const http_1 = __importDefault(require("http")); const https_1 = __importDefault(require("https")); /** * Request Helper. */ class HttpProvider { /** * Make a Request. * * @param url * @param data * @param options * @returns Promise<RequestOutput> */ request(url_1) { return __awaiter(this, arguments, void 0, function* (url, data = {}, options = {}) { return new Promise((resolve, reject) => { options = Object.assign({ method: 'POST', timeout: 3000, }, options); options.headers = Object.assign({ 'Content-Type': 'application/json', }, typeof options.headers === 'object' ? options.headers : {}); const body = JSON.stringify(data); if (['post', 'put', 'delete'].includes(String(options.method).toLowerCase())) { options.headers['Content-Length'] = body.length; } else if (String(options.method).toLowerCase() === 'get') { const urlParams = []; for (const key in data) { urlParams.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(data[key]))}`); } if (urlParams.length > 0) { url += '?' + urlParams.join('&'); } } const library = url.startsWith('https:') ? https_1.default : http_1.default; const request = library.request(url, options, (response) => { let result = undefined; let data = ''; response.on('data', (chunk) => { data += String(chunk); }); response.on('end', () => { try { result = JSON.parse(data) || undefined; if (result !== undefined) { return resolve(result); } } catch (err) { return reject('Error while parsing data!'); } return reject('Something went wrong!'); }); }); request.on('error', (error) => { return reject(error); }); if (['post', 'put', 'delete'].includes(String(options.method).toLowerCase())) { request.write(body); } request.end(); }); }); } /** * Make a POST Request. * * @param url * @param data * @param options * @returns Promise<RequestOutput> */ post(url_1, data_1) { return __awaiter(this, arguments, void 0, function* (url, data, options = {}) { options = Object.assign(options, { method: 'POST' }); return yield this.request(url, data, options); }); } /** * Make a PUT Request. * * @param url * @param data * @param options * @returns Promise<RequestOutput> */ put(url_1, data_1) { return __awaiter(this, arguments, void 0, function* (url, data, options = {}) { options = Object.assign(options, { method: 'PUT' }); return yield this.request(url, data, options); }); } /** * Make a GET Request. * * @param url * @param data * @param options * @returns Promise<RequestOutput> */ get(url_1) { return __awaiter(this, arguments, void 0, function* (url, data = {}, options = {}) { options = Object.assign(options, { method: 'GET' }); return yield this.request(url, data, options); }); } /** * Make a DELETE Request. * * @param url * @param data * @param options * @returns Promise<RequestOutput> */ delete(url_1, data_1) { return __awaiter(this, arguments, void 0, function* (url, data, options = {}) { options = Object.assign(options, { method: 'DELETE' }); return yield this.request(url, data, options); }); } } exports.default = new HttpProvider();