UNPKG

jade-integration-utils

Version:

A tool made for any type of http requisitions and to manage localstorage. This package works into Angular and Ionic projects (maybe you can run this in ReactNative, MAYBE!).

105 lines 15 kB
import { StorageService } from '../services/storage.service'; import { HttpMethod } from '../Models/HTTPMethod'; var HttpXHRService = /** @class */ (function () { function HttpXHRService(standard_api_url, headers) { this._AUTH = 'auth'; this._standard_url = standard_api_url; this._xhttp = new XMLHttpRequest(); if (!headers) { this._headers = new Array(); this._headers.push({ header: 'Content-Type', value: 'application/json' }); this._headers.push({ header: 'Authorization', value: StorageService.get(this._AUTH), }); this._headers.push({ header: 'Accept', value: '*/*' }); this._headers.push({ header: 'Access-Control-Allow-Credentials', value: 'true', }); this._headers.push({ header: 'Access-Control-Allow-Origin', value: 'http://localhost:4200', }); this._headers.push({ header: 'Access-Control-Allow-Methods', value: 'GET, POST, PATCH, DELETE, PUT, OPTIONS', }); this._headers.push({ header: 'Access-Control-Allow-Headers', value: 'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With', }); } else { this._headers = headers; } } HttpXHRService.prototype.set_token = function (auth) { StorageService.set(this._AUTH, 'Bearer ' + auth); }; HttpXHRService.prototype.get_token = function () { return StorageService.get(this._AUTH); }; HttpXHRService.prototype.get = function (endpoint) { this._xhttp.open(HttpMethod.GET, this._standard_url + endpoint); return this._send_request(); }; HttpXHRService.prototype.get_file = function (endpoint) { this._xhttp.open(HttpMethod.GET, this._standard_url + endpoint); return this._send_request(); }; HttpXHRService.prototype.post = function (endpoint, body) { this._xhttp.open(HttpMethod.POST, this._standard_url + endpoint); return this._send_request(body); }; HttpXHRService.prototype.formData = function (endpoint, body) { this._xhttp.open(HttpMethod.POST, this._standard_url + endpoint); return this._send_request(body); }; HttpXHRService.prototype.put = function (endpoint, body) { this._xhttp.open(HttpMethod.PUT, this._standard_url + endpoint); return this._send_request(body); }; HttpXHRService.prototype.delete = function (endpoint) { this._xhttp.open(HttpMethod.DELETE, this._standard_url + endpoint); return this._send_request(); }; HttpXHRService.prototype._send_request = function (data, timeout) { var _this = this; if (data === void 0) { data = null; } if (timeout === void 0) { timeout = 60000; } var token = this.get_token(); this._xhttp.setRequestHeader('Content-Type', 'application/json'); for (var index = 0; index < this._headers.length; index++) { var header = this._headers[index]; if (header.header != 'Authorization') { this._xhttp.setRequestHeader(header.header, header.value); } if (header.header == "Authorization" && token != null) { this._xhttp.setRequestHeader(header.header, token); } } this._xhttp.withCredentials = token ? true : false; this._xhttp.responseType = 'json'; return new Promise(function (resolve, reject) { _this._xhttp.onreadystatechange = function () { if (this.readyState == 4) { resolve(this.response); } }; _this._xhttp.send(JSON.stringify(data)); if (timeout) { setTimeout(function () { reject('timeout'); if (this._xhttp) this._xhttp.abort(); else this._xhttp = new XMLHttpRequest(); }, timeout); } }); }; return HttpXHRService; }()); export { HttpXHRService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC14aHIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2phZGUtaW50ZWdyYXRpb24tdXRpbHMvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvaHR0cC14aHIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxEO0lBTUUsd0JBQ0UsZ0JBQXdCLEVBQ3hCLE9BQWtEO1FBTDVDLFVBQUssR0FBVyxNQUFNLENBQUM7UUFPN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFFbkMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQXFDLENBQUM7WUFFL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixLQUFLLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3RDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDakIsTUFBTSxFQUFFLGtDQUFrQztnQkFDMUMsS0FBSyxFQUFFLE1BQU07YUFDZCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUks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SSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7d0JBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDMUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQUE1SEQsSUE0SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBNZXRob2QgfSBmcm9tICcuLi9Nb2RlbHMvSFRUUE1ldGhvZCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSHR0cFhIUlNlcnZpY2Uge1xyXG4gIHByaXZhdGUgX3hodHRwOiBYTUxIdHRwUmVxdWVzdDtcclxuICBwcml2YXRlIF9zdGFuZGFyZF91cmw6IHN0cmluZztcclxuICBwcml2YXRlIF9BVVRIOiBzdHJpbmcgPSAnYXV0aCc7XHJcbiAgcHJpdmF0ZSBfaGVhZGVyczogQXJyYXk8eyBoZWFkZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBzdGFuZGFyZF9hcGlfdXJsOiBzdHJpbmcsXHJcbiAgICBoZWFkZXJzPzogQXJyYXk8eyBoZWFkZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PlxyXG4gICkge1xyXG4gICAgdGhpcy5fc3RhbmRhcmRfdXJsID0gc3RhbmRhcmRfYXBpX3VybDtcclxuICAgIHRoaXMuX3hodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgaWYgKCFoZWFkZXJzKSB7XHJcbiAgICAgIHRoaXMuX2hlYWRlcnMgPSBuZXcgQXJyYXk8eyBoZWFkZXI6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PigpO1xyXG5cclxuICAgICAgdGhpcy5faGVhZGVycy5wdXNoKHsgaGVhZGVyOiAnQ29udGVudC1UeXBlJywgdmFsdWU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcclxuICAgICAgdGhpcy5faGVhZGVycy5wdXNoKHtcclxuICAgICAgICBoZWFkZXI6ICdBdXRob3JpemF0aW9uJyxcclxuICAgICAgICB2YWx1ZTogU3RvcmFnZVNlcnZpY2UuZ2V0KHRoaXMuX0FVVEgpLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5faGVhZGVycy5wdXNoKHsgaGVhZGVyOiAnQWNjZXB0JywgdmFsdWU6ICcqLyonIH0pO1xyXG4gICAgICB0aGlzLl9oZWFkZXJzLnB1c2goe1xyXG4gICAgICAgIGhlYWRlcjogJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJyxcclxuICAgICAgICB2YWx1ZTogJ3RydWUnLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5faGVhZGVycy5wdXNoKHtcclxuICAgICAgICBoZWFkZXI6ICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLFxyXG4gICAgICAgIHZhbHVlOiAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJyxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX2hlYWRlcnMucHVzaCh7XHJcbiAgICAgICAgaGVhZGVyOiAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsXHJcbiAgICAgICAgdmFsdWU6ICdHRVQsIFBPU1QsIFBBVENILCBERUxFVEUsIFBVVCwgT1BUSU9OUycsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl9oZWFkZXJzLnB1c2goe1xyXG4gICAgICAgIGhlYWRlcjogJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLFxyXG4gICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSwgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycywgQXV0aG9yaXphdGlvbiwgWC1SZXF1ZXN0ZWQtV2l0aCcsXHJcbiAgICAgIH0pO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuX2hlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldF90b2tlbihhdXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIFN0b3JhZ2VTZXJ2aWNlLnNldCh0aGlzLl9BVVRILCAnQmVhcmVyICcgKyBhdXRoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRfdG9rZW4oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBTdG9yYWdlU2VydmljZS5nZXQodGhpcy5fQVVUSCk7XHJcbiAgfVxyXG5cclxuICBnZXQ8VD4oZW5kcG9pbnQ6IHN0cmluZyk6IFByb21pc2U8VD4ge1xyXG4gICAgdGhpcy5feGh0dHAub3BlbihIdHRwTWV0aG9kLkdFVCwgdGhpcy5fc3RhbmRhcmRfdXJsICsgZW5kcG9pbnQpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9zZW5kX3JlcXVlc3Q8VD4oKTtcclxuICB9XHJcblxyXG4gIGdldF9maWxlPFQ+KGVuZHBvaW50OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcclxuICAgIHRoaXMuX3hodHRwLm9wZW4oSHR0cE1ldGhvZC5HRVQsIHRoaXMuX3N0YW5kYXJkX3VybCArIGVuZHBvaW50KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fc2VuZF9yZXF1ZXN0PFQ+KCk7XHJcbiAgfVxyXG5cclxuICBwb3N0PFQ+KGVuZHBvaW50OiBzdHJpbmcsIGJvZHk6IGFueSk6IFByb21pc2U8VD4ge1xyXG4gICAgdGhpcy5feGh0dHAub3BlbihIdHRwTWV0aG9kLlBPU1QsIHRoaXMuX3N0YW5kYXJkX3VybCArIGVuZHBvaW50KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fc2VuZF9yZXF1ZXN0PFQ+KGJvZHkpO1xyXG4gIH1cclxuXHJcbiAgZm9ybURhdGE8VD4oZW5kcG9pbnQ6IHN0cmluZywgYm9keTogRm9ybURhdGEpOiBQcm9taXNlPFQ+IHtcclxuICAgIHRoaXMuX3hodHRwLm9wZW4oSHR0cE1ldGhvZC5QT1NULCB0aGlzLl9zdGFuZGFyZF91cmwgKyBlbmRwb2ludCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3NlbmRfcmVxdWVzdDxUPihib2R5KTtcclxuICB9XHJcblxyXG4gIHB1dDxUPihlbmRwb2ludDogc3RyaW5nLCBib2R5OiBhbnkpOiBQcm9taXNlPFQ+IHtcclxuICAgIHRoaXMuX3hodHRwLm9wZW4oSHR0cE1ldGhvZC5QVVQsIHRoaXMuX3N0YW5kYXJkX3VybCArIGVuZHBvaW50KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fc2VuZF9yZXF1ZXN0PFQ+KGJvZHkpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlPFQ+KGVuZHBvaW50OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcclxuICAgIHRoaXMuX3hodHRwLm9wZW4oSHR0cE1ldGhvZC5ERUxFVEUsIHRoaXMuX3N0YW5kYXJkX3VybCArIGVuZHBvaW50KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fc2VuZF9yZXF1ZXN0PFQ+KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZW5kX3JlcXVlc3Q8VD4oZGF0YSA9IG51bGwsIHRpbWVvdXQgPSA2MDAwMCkge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldF90b2tlbigpO1xyXG5cclxuICAgIHRoaXMuX3hodHRwLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5faGVhZGVycy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5faGVhZGVyc1tpbmRleF07XHJcblxyXG4gICAgICBpZihoZWFkZXIuaGVhZGVyICE9ICdBdXRob3JpemF0aW9uJylcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuX3hodHRwLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLmhlYWRlcixoZWFkZXIudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGhlYWRlci5oZWFkZXIgPT0gXCJBdXRob3JpemF0aW9uXCIgJiYgdG9rZW4gIT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5feGh0dHAuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIuaGVhZGVyLHRva2VuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3hodHRwLndpdGhDcmVkZW50aWFscyA9IHRva2VuID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX3hodHRwLnJlc3BvbnNlVHlwZSA9ICdqc29uJztcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLl94aHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0KSB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5feGh0dHAuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZWplY3QoJ3RpbWVvdXQnKTtcclxuICAgICAgICAgIGlmICh0aGlzLl94aHR0cCkgdGhpcy5feGh0dHAuYWJvcnQoKTtcclxuICAgICAgICAgIGVsc2UgdGhpcy5feGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==