import { includes } from '@senojs/lodash' import axios from 'axios' import type { AxiosRequestConfig } from 'axios' import chalk from 'chalk' import https from 'https' import { ONES_CLI_USER_AGENT, ONES_DEV_API_DOMAIN, REGULAR_API_URL_PREFIX } from '../constants' import { isResError } from './validate' type Request = Omit & { baseURL: string apiURL: string } const requestInstance = axios.create({ headers: { 'User-Agent': ONES_CLI_USER_AGENT }, }) async function request({ baseURL, apiURL, ...params }: Request) { const isONESDevAPI = includes(baseURL, ONES_DEV_API_DOMAIN) const url = isONESDevAPI ? `${baseURL}${apiURL}` : `${baseURL}${REGULAR_API_URL_PREFIX}${apiURL}` try { return requestInstance.request({ url, httpsAgent: new https.Agent({ rejectUnauthorized: process.env.reject_unauthorized === 'false' ? false : true, }), ...params, }) } catch (error) { if (isResError(error)) { console.error(chalk.red('Request error: \n'), error) } else { console.error(chalk.red('Stack error: \n'), error) } throw error } } export { request, isResError }