export default class Api { constructor({server, processPage, timezone, csrfToken, errorCode, lang}) { this.server = server; this.processPage = processPage; this.timezone = timezone; this.csrfToken = csrfToken; this.errorCode = errorCode; this.lang = lang; } async get(sAction, asParams = {}) { const oResponse = await this.request(sAction, asParams, 'GET'); return oResponse.data; } async getAsset(sAssetPath) { const oRequest = await fetch(sAssetPath, {headers: {'Accept': 'application/geo+json'}}); if(!oRequest.ok) { throw new Error('Error HTTP ' + oRequest.status + ': ' + oRequest.statusText); } return oRequest.json(); } async post(sAction, asParams = {}) { const oResponse = await this.request(sAction, asParams, 'POST'); return oResponse.data; } async request(sAction, asParams = {}, method = 'GET') { const oUrl = new URL(this.processPage, this.server); const sUrlParams = new URLSearchParams({ ...asParams, a: sAction, t: this.timezone }).toString(); const asOptions = { method, headers: {'Accept': 'application/json'} }; if(method === 'GET') { oUrl.search = sUrlParams; } else { asOptions.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; asOptions.headers['X-CSRF-Token'] = this.csrfToken; asOptions.body = sUrlParams; } const oRequest = await fetch(oUrl, asOptions); if(!oRequest.ok) { throw new Error('Error HTTP ' + oRequest.status + ': ' + oRequest.statusText); } const oResponse = await oRequest.json(); oResponse.desc_lang_text = this.lang.get(oResponse.desc_lang_id, oResponse.desc_lang_params); if(oResponse.result == this.errorCode) { const oError = new Error(oResponse.desc_lang_text); oError.desc_lang_id = oResponse.desc_lang_id; oError.desc_lang_params = oResponse.desc_lang_params; oError.desc_lang_text = oResponse.desc_lang_text; throw oError; } return oResponse; } }