| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | const logger  = require('./logger');const restler = require('@jc21/restler');const BackendApi = function(config, token) {	this.config = config;	this.token  = token;};/** * @param {string} token */BackendApi.prototype.setToken = function(token) {	this.token = token;};/** * @param {string} path * @param {bool}   [returnOnError] * @returns {Promise<object>} */BackendApi.prototype.get = function(path, returnOnError) {	return new Promise((resolve, reject) => {		let headers = {			Accept: 'application/json'		};		if (this.token) {			headers.Authorization = 'Bearer ' + this.token;		}		logger('GET ', this.config.baseUrl + path);		restler			.get(this.config.baseUrl + path, {				headers: headers,			})			.on('complete', function(data, response) {				logger('Response data:', data);				if (!returnOnError && data instanceof Error) {					reject(data);				} else if (!returnOnError && response.statusCode != 200) {					if (typeof data === 'object' && typeof data.error === 'object' && typeof data.error.message !== 'undefined') {						reject(new Error(data.error.code + ': ' + data.error.message));					} else {						reject(new Error('Error ' + response.statusCode));					}				} else {					resolve(data);				}			});	});};/** * @param {string} path * @param {bool}   [returnOnError] * @returns {Promise<object>} */BackendApi.prototype.delete = function(path, returnOnError) {	return new Promise((resolve, reject) => {		let headers = {			Accept: 'application/json'		};		if (this.token) {			headers.Authorization = 'Bearer ' + this.token;		}		logger('DELETE ', this.config.baseUrl + path);		restler			.del(this.config.baseUrl + path, {				headers: headers,			})			.on('complete', function(data, response) {				logger('Response data:', data);				if (!returnOnError && data instanceof Error) {					reject(data);				} else if (!returnOnError && response.statusCode != 200) {					if (typeof data === 'object' && typeof data.error === 'object' && typeof data.error.message !== 'undefined') {						reject(new Error(data.error.code + ': ' + data.error.message));					} else {						reject(new Error('Error ' + response.statusCode));					}				} else {					resolve(data);				}			});	});};/** * @param {string} path * @param {object} data * @param {bool}   [returnOnError] * @returns {Promise<object>} */BackendApi.prototype.postJson = function(path, data, returnOnError) {	logger('POST ', this.config.baseUrl + path);	return this._putPostJson('postJson', path, data, returnOnError);};/** * @param {string} path * @param {object} data * @param {bool}   [returnOnError] * @returns {Promise<object>} */BackendApi.prototype.putJson = function(path, data, returnOnError) {	logger('PUT ', this.config.baseUrl + path);	return this._putPostJson('putJson', path, data, returnOnError);};/** * @param {string} path * @param {object} data * @param {bool}   [returnOnError] * @returns {Promise<object>} */BackendApi.prototype._putPostJson = function(fn, path, data, returnOnError) {	return new Promise((resolve, reject) => {		restler[fn](this.config.baseUrl + path, data, {			headers: {				Accept:        'application/json',				Authorization: 'Bearer ' + this.token,			},		}).on('complete', function(data, response) {			logger('Response data:', data);			if (!returnOnError && data instanceof Error) {				reject(data);			} else if (!returnOnError && response.statusCode != 200) {				if (typeof data === 'object' && typeof data.error === 'object' && typeof data.error.message !== 'undefined') {					reject(new Error(data.error.code + ': ' + data.error.message));				} else {					reject(new Error('Error ' + response.statusCode));				}			} else {				resolve(data);			}		});	});};module.exports = BackendApi;
 |