@coze/taro-api
Version:
Official Coze Taro SDK for seamless AI integration into your applications | 扣子官方 Taro SDK,助您轻松集成 AI 能力到应用中
82 lines (81 loc) • 3.27 kB
JavaScript
/* eslint-disable @typescript-eslint/no-magic-numbers -- ignore */
/* eslint-disable @typescript-eslint/no-invalid-void-type -- ignore */
import axios from 'axios';
import { request, getEnv, ENV_TYPE } from '@tarojs/taro';
import { CozeAPI as InnerCozeAPI, APIError, } from '@coze/api';
import { sharedMixins } from './mixins/shared';
import { platformMixins } from './mixins/platform';
export class CozeAPI extends InnerCozeAPI {
options;
constructor(options) {
super({ ...options });
this.options = options;
this.axiosInstance = axios.create({
adapter: this.getAdapter(),
});
this.axiosInstance.interceptors.request.use(async (config) => {
if (this.options.onBeforeAPICall) {
const res = (await this.options.onBeforeAPICall(config)) ?? {};
if (res.token) {
this.token = res.token;
config.headers.Authorization = `Bearer ${res.token}`;
}
}
return config;
});
this.applyMixins();
}
getAdapter() {
if (getEnv() === ENV_TYPE.WEB) {
return undefined;
}
const taroAdapter = config => {
const { url, method, data, headers, timeout } = config;
const header = typeof headers.toJSON === 'function' ? headers.toJSON() : headers;
header['Content-Type'] = header['Content-Type'] || 'application/json';
return new Promise((resolve, reject) => {
request({
url: url,
// @ts-expect-error -- ignore
method: (method ?? 'GET').toUpperCase(),
data,
header,
timeout,
success: res => {
// Request failed
if (res.statusCode !== 200 || res.data?.code) {
const resData = res.data || {};
resData.error = resData.error || resData.detail || {};
const resHeader = res.header || {};
resHeader['x-tt-logid'] =
resHeader['X-Tt-Logid'] ||
resHeader['x-tt-logid'] ||
resData.error.logid;
const error = APIError.generate(res.statusCode, resData, res.errMsg, resHeader);
reject(error);
}
else {
resolve({
data: res.data,
status: res.statusCode,
statusText: res.errMsg,
headers: res.header,
config,
});
}
},
fail: err => {
reject(err);
},
});
});
};
return taroAdapter;
}
applyMixins() {
if (getEnv() !== ENV_TYPE.WEB) {
sharedMixins(this);
platformMixins(this);
}
}
}