@lark-project/cli
Version:
飞书项目插件开发工具
100 lines (99 loc) • 4.27 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.request = void 0;
const node_fetch_1 = __importDefault(require("node-fetch"));
const form_data_1 = __importDefault(require("form-data"));
const logger_1 = require("../../utils/logger");
const codeMsgMap = {
1000050272: 'No permission',
1000051991: 'The directory structure of the compressed package is faulty', // 压缩包目录结构报错
1000051990: 'An error occurs when opening the compressed package', // 打开压缩包报错
1000051989: 'The plug-in file version already exists', // 插件文件版本已存在
1000051988: 'Plug-in file not supported (file type or size)', // 插件文件不支持(文件类型或大小)
1000052041: 'Plug-in current version is less than or equal to the latest version, please change version before release',
};
const getErrMsg = (error) => {
var _a;
return ((_a = error.localizedMessage) === null || _a === void 0 ? void 0 : _a.message) || error.msg || codeMsgMap[error.id];
};
/**
* 简单封装下 Fetch 请求
* @param {string} url 请求地址
* @param {RequestOptions} [options] 请求配置参数
* @returns {Promise} Promise 对象,用于处理请求响应
*/
async function request(url, options = {}) {
var _a, _b;
const { headers = {}, data, method = 'GET' } = options, rest = __rest(options, ["headers", "data", "method"]);
let reqBody;
// 根据不同请求类型,设置请求参数
if (method.toUpperCase() === 'GET') {
url = appendQueryParams(url, data);
}
else if (data instanceof form_data_1.default) {
reqBody = data;
}
else {
reqBody = JSON.stringify(data);
}
const opts = Object.assign({ headers,
method, body: reqBody }, rest);
const response = await (0, node_fetch_1.default)(url, opts);
const resHeaders = response.headers;
if (response.status === 200 && response.status < 300) {
const res = await response.json();
/** 业务错误码 */
if ((res === null || res === void 0 ? void 0 : res.code) || ((_a = res === null || res === void 0 ? void 0 : res.error) === null || _a === void 0 ? void 0 : _a.id)) {
logger_1.logger.error(Object.assign(Object.assign({}, res.error), { ['x-tt-logid']: resHeaders.get('x-tt-logid') }));
return Promise.reject({
status: (res === null || res === void 0 ? void 0 : res.code) || ((_b = res === null || res === void 0 ? void 0 : res.error) === null || _b === void 0 ? void 0 : _b.id),
message: getErrMsg(res === null || res === void 0 ? void 0 : res.error) || response.statusText,
});
}
else {
return Promise.resolve(res);
}
}
else {
const errResp = {
status: response.status,
message: response.statusText,
};
logger_1.logger.error(Object.assign(Object.assign({}, errResp), { ['x-tt-logid']: response.headers.get('x-tt-logid') }));
// 处理响应错误
return Promise.reject(errResp);
}
}
exports.request = request;
/**
* 将查询参数添加到 URL 后
* @param {string} url URL 地址
* @param {object} params 查询参数对象
* @returns {string} 拼接完成后的 URL 地址
*/
function appendQueryParams(url, params) {
if (!params) {
return url;
}
const paramsArr = [];
Object.keys(params).forEach(key => {
paramsArr.push(`${key}=${params[key]}`);
});
return url.indexOf('?') === -1
? `${url}?${paramsArr.join('&')}`
: `${url}&${paramsArr.join('&')}`;
}