const SUCCESS_CODE = 200;
const UNAUTHORIZED_CODES = [401, 403];
const HTTP_ERROR_TEXT_DEFAULT = "network anomaly";
const TIME_OUT = 200000;
const HEADER_FIELDS = {
AUTHORIZATION: "Authorization",
LANGUAGE: "Language",
DEVICE_ID: "Device-Id",
VERSION: "Version",
};
function switchMethod(method) {
let header = {
"Content-Type": "application/json;charset=UTF-8",
};
switch (method) {
case "POST":
break;
case "GET":
break;
}
return header;
}
const ApiHttp = (
url,
params,
method,
isToken = true,
isOpenAI = false,
enableChunked = false,
customUrl,
timeout = TIME_OUT
) => {
if (typeof url !== "string" || !url.trim()) {
return Promise.reject(new Error("Invalid URL"));
}
if (!["GET", "POST", "PUT", "DELETE"].includes(method)) {
return Promise.reject(new Error(`Unsupported HTTP method: ${method}`));
}
const baseHeader = switchMethod(method);
const token = store?.state?.login?.token || "";
let finalHeader = { ...baseHeader };
let request_url = customUrl ? `${customUrl}${url}` : `${serverUrl}${url}`;
if (isOpenAI) {
finalHeader[HEADER_FIELDS.AUTHORIZATION] = `Bearer ${
store?.state?.user?.configInfo?.open_web_ai_key || ""
}`;
} else if (isToken) {
finalHeader = {
...finalHeader,
[HEADER_FIELDS.AUTHORIZATION]: token,
[HEADER_FIELDS.LANGUAGE]: store?.state?.language?.appLanguage || "en",
[HEADER_FIELDS.DEVICE_ID]: getApp().globalData.deviceId,
[HEADER_FIELDS.VERSION]: getApp().globalData.appWgtVersion,
};
}
return new Promise((resolve, reject) => {
uni.request({
url: request_url,
method,
data: params,
header: finalHeader,
enableChunked,
timeout,
success: (res) => {
const {
data: { code, msg, ...rest },
} = res;
if (isOpenAI) {
resolve(res.data);
} else if (code === SUCCESS_CODE) {
resolve(res.data);
} else if (UNAUTHORIZED_CODES.includes(code)) {
uni.showToast({
title: msg || rest.error,
icon: "none",
});
store.commit("loginOut");
reject({ code, msg });
} else {
uni.showToast({
title: msg || rest.error,
icon: "none",
});
reject({ code, msg, ...rest });
}
},
fail: (err) => {
console.error("http error", url, err);
uni.showToast({
title: err.errMsg || HTTP_ERROR_TEXT_DEFAULT,
icon: "none",
});
reject({
code: -1,
msg: err.errMsg ? String(err.errMsg) : HTTP_ERROR_TEXT_DEFAULT,
rawError: err,
});
},
complete: () => {},
});
});
};