@di-zed/yandex-smart-home
Version:
The Yandex Smart Home skills for the different device types.
144 lines (143 loc) • 5.38 kB
JavaScript
;
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();