import axios, { AxiosRequestConfig } from 'axios' import log from 'src/log' import { LogPrefixCone } from 'src/util' import { Obj } from 'src/type' import { coneAccessTokenExistsSync, getConeAccessTokenSync, } from './auth/accessToken' export interface ConeUrlOptions { urlPath: string /** * 是否拼接用于验证身份的参数 accessToken, 默认 true */ auth?: boolean /** * 是否是旧平台 */ isOld?: boolean /** * 是否是物料平台 */ isAsset?: boolean } export function getConeUrl({ urlPath, auth = true, isOld, isAsset, }: ConeUrlOptions) { let host = '' if (process.env.LOCAL) { host = `http://${process.env.CONE_IP || 'local.cone.cainiao-inc.com'}:${ process.env.CONE_PORT || '7001' }` } else if (process.env.DAILY) { host = 'http://work.cone.cainiao-inc.test' } else if (process.env.PRE) { if (isAsset) { host = 'https://pre-cone.cainiao-inc.com' } else { host = `https://${isOld ? 'pre-work' : 'pre-code'}.cone.cainiao-inc.com` } } else { if (isAsset) { host = 'https://cone.cainiao-inc.com' } else { host = `https://${isOld ? 'work' : 'code'}.cone.cainiao-inc.com` } } const url = new URL(`${host}${urlPath}`) if (auth) { const accessToken = (coneAccessTokenExistsSync() && getConeAccessTokenSync()) || '' if (accessToken) { url.searchParams.append('access_token', accessToken) } } // return `${host}${urlPath}?access_token=${accessToken}` return url.href } export async function callCone(options: AxiosRequestConfig & ConeUrlOptions) { const prefixCallCone = 'cone-call' const url = getConeUrl(options) log.verbose(prefixCallCone, 'url', url) log.verbose(prefixCallCone, 'options %o', options) const { data, headers } = await axios({ ...options, url }) log.verbose(prefixCallCone, 'headers %o', headers) log.verbose(prefixCallCone, 'data %o', data) if ((data as Obj).success !== true) { throw data } return data } export function packConeIterationUrl(data: Obj) { const { application, iteration_id: iterationId } = (data || {}) as { application: string iteration_id: string } const { product_id: productId, id: appId } = (application || {}) as { product_id: string id: string } if (productId && appId && iterationId) { const urlPath = `/${productId}/${appId}/${iterationId}/index` return getConeUrl({ urlPath, auth: false, }) } return `https://work.def.alibaba-inc.com/iteration/${iterationId}/basic` }