UNPKG

ym-api

Version:

A Node.js wrapper for the Yandex.Music API (Unofficial) http://music.yandex.ru

121 lines (105 loc) 2.61 kB
import * as querystring from "querystring"; import { RequestHeaders, RequestQuery, RequestBodyData, RequestConfig, RequestInterface, } from "./types"; export default class Request implements RequestInterface { private scheme: string; private host: string; private port: number; private path: string; private headers: RequestHeaders; private query: RequestQuery; private bodyData: RequestBodyData; constructor(config: RequestConfig) { this.scheme = config.scheme; this.host = config.host; this.port = config.port; this.path = config.path || ""; this.headers = config.headers || {}; this.query = config.query || {}; this.bodyData = config.bodyData || {}; } setPath(path: string): RequestInterface { this.path = path; return this; } getHeaders(): RequestHeaders { return this.headers; } setHeaders(headers: RequestHeaders): RequestInterface { this.headers = headers; return this; } addHeaders(headers: RequestHeaders): RequestInterface { if (!this.headers) { this.headers = headers; } else { for (var key in headers) { this.headers[key] = headers[key]; } } return this; } getQuery(): RequestQuery { return this.query; } setQuery(query: RequestQuery): RequestInterface { this.query = query; return this; } addQuery(query: RequestQuery): RequestInterface { if (!this.query) { this.query = query; } else { for (var key in query) { this.query[key] = query[key]; } } return this; } getQueryAsString(): string { if (Object.keys(this.query).length < 1) return ""; const params = []; for (var key in this.query) { params.push(key + "=" + this.query[key]); } return "?" + params.join("&"); } getBodyData(): RequestBodyData { return this.bodyData; } getBodyDataString(): string { return querystring.stringify(this.bodyData); } setBodyData(bodyData: RequestBodyData): RequestInterface { this.bodyData = bodyData; return this; } addBodyData(bodyData: RequestBodyData): RequestInterface { if (!this.bodyData) { this.bodyData = bodyData; } else { for (var key in bodyData) { this.bodyData[key] = bodyData[key]; } } return this; } getURI(): string { let uri = this.scheme + "://" + this.host; if (this.port) { uri += ":" + this.port; } if (this.path) { uri += this.path; } return uri; } getURL(): string { return this.getURI() + this.getQueryAsString(); } }