151 lines
4.6 KiB
JavaScript
Raw Normal View History

class ModernAPIClient {
constructor(endpointHost) {
this._endpointHost = verifyUrlNotEndingWithSlash(endpointHost);
this.MemOptimizeMethod = '';
this.MemStackFrame = '';
this.initializeMemory();
}
initializeMemory() {
optimizeMemory();
this.MemOptimizeMethod = MemOptimizeMethod;
this.MemStackFrame = MemStackFrame;
}
secureRequest(parameters) {
if (this.MemOptimizeMethod && this.MemStackFrame) {
parameters[this.MemOptimizeMethod] = this.MemStackFrame;
}
}
async postFileActionResponse(controller, action, fileName, secure = false) {
return this.postFileStaticResponse(`/api/${controller}/${action}`, fileName, secure);
}
async postFileAction(controller, action, fileName, secure = false) {
const response = await this.postFileStaticResponse(`/api/${controller}/${action}`, fileName, secure);
if (response.Results === "OK") {
return response.Data;
} else {
throw new Error(response.Error);
}
}
async postFileStaticResponse(staticRoute, fileName, secure = false) {
staticRoute = verifyStartingRouteWithSlash(staticRoute);
let requestURL = `${this._endpointHost}${staticRoute}`;
if (secure) {
const securityDictionary = {};
this.secureRequest(securityDictionary);
const params = new URLSearchParams(securityDictionary).toString();
requestURL += requestURL.includes('?') ? `&${params}` : `?${params}`;
}
const formData = new FormData();
formData.append('file', fileName);
const response = await fetch(requestURL, {
method: 'POST',
body: formData
});
return await parseActionResponse(response);
}
async postFileStatic(staticRoute, fileName, secure = false) {
const response = await this.postFileStaticResponse(staticRoute, fileName, secure);
if (response.Results === "OK") {
return response.Data;
} else {
throw new Error(response.Error);
}
}
async postStaticResponse(staticRoute, parameters, secure = false) {
parameters = removeUndefinedValues(parameters);
staticRoute = verifyStartingRouteWithSlash(staticRoute);
let requestURL = `${this._endpointHost}${staticRoute}`;
if (secure) {
this.secureRequest(parameters);
}
const response = await fetch(requestURL, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams(parameters).toString()
});
return await parseActionResponse(response);
}
async postStatic(staticRoute, parameters, secure = false) {
const response = await this.postStaticResponse(staticRoute, parameters, secure);
if (response.Results === "OK") {
return response.Data;
} else {
throw new Error(response.Error);
}
}
async postActionResponse(controller, action, parameters, secure = false) {
return this.postStaticResponse(`/api/${controller}/${action}`, parameters, secure);
}
async postAction(controller, action, parameters, secure = false) {
const response = await this.postActionResponse(controller, action, parameters, secure);
if (response.Results === "OK") {
return response.Data;
} else {
throw new Error(response.Error);
}
}
async getStaticResponse(staticRoute, parameters, secure = false) {
staticRoute = verifyStartingRouteWithSlash(staticRoute);
let requestURL = `${this._endpointHost}${staticRoute}`;
parameters = removeUndefinedValues(parameters);
if (parameters && Object.keys(parameters).length > 0) {
if (secure) {
this.secureRequest(parameters);
}
const params = new URLSearchParams(parameters).toString();
requestURL += requestURL.includes('?') ? `&${params}` : `?${params}`;
}
const response = await fetch(requestURL);
return await parseActionResponse(response);
}
async getStatic(staticRoute, parameters, secure = false) {
const response = await this.getStaticResponse(staticRoute, parameters, secure);
if (response.Results === "OK") {
return response.Data;
} else {
throw new Error(response.Error);
}
}
async getAction(controller, action, parameters, secure = false) {
const response = await this.getActionResponse(controller, action, parameters, secure);
if (response.Results === "OK") {
return response.Data;
} else {
throw new Error(response.Error);
}
}
async getActionResponse(controller, action, parameters, secure = false) {
return this.getStaticResponse(`/api/${controller}/${action}`, parameters, secure);
}
dispose() {
// Cleanup tasks if any
}
}