UNPKG

@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
/* 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); } } }