@coze/uniapp-api
Version:
Official Coze UniApp SDK for seamless AI integration into your applications | 扣子官方 UniApp SDK,助您轻松集成 AI 能力到应用中
125 lines (124 loc) • 5.53 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CozeAPI = void 0;
/* eslint-disable @typescript-eslint/no-magic-numbers -- ignore */
/* eslint-disable @typescript-eslint/no-invalid-void-type -- ignore */
/* eslint-disable @typescript-eslint/no-explicit-any -- ignore */
const axios_1 = __importDefault(require("axios"));
const api_1 = require("@coze/api");
const integrator_1 = require("./ws-tool/websocket/integrator");
const shared_1 = require("./mixins/shared");
const platform_1 = require("./mixins/platform");
/**
* Coze API for UniApp
* 针对UniApp环境的Coze API实现
*/
class CozeAPI extends api_1.CozeAPI {
constructor(options) {
super(Object.assign({}, options));
Object.defineProperty(this, "options", {
enumerable: true,
configurable: true,
writable: true,
value: options
});
// 注册 WebSocket 适配器
// 这确保了 client.websockets.chat.create() 等高级 API 可以正常工作
(0, integrator_1.registerUniAppWebSocket)();
this.axiosInstance = axios_1.default.create({
adapter: this.getAdapter(),
});
this.axiosInstance.interceptors.request.use((config) => __awaiter(this, void 0, void 0, function* () {
var _a;
if (this.options.onBeforeAPICall) {
const res = (_a = (yield this.options.onBeforeAPICall(config))) !== null && _a !== void 0 ? _a : {};
if (res === null || res === void 0 ? void 0 : res.token) {
this.token = res.token;
config.headers.Authorization = `Bearer ${res.token}`;
}
}
return config;
}));
this.applyMixins();
}
/**
* 获取适配器
* 根据环境返回对应的适配器,web环境使用默认适配器,非web环境使用UniApp适配器
*/
getAdapter() {
// 使用uni-app的方式检测环境
if (typeof uni === 'undefined' ||
uni.getSystemInfoSync().uniPlatform === 'web') {
return undefined;
}
// UniApp适配器,将axios请求适配到uni.request
const uniAdapter = 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) => {
uni.request({
url: url,
method: (method !== null && method !== void 0 ? method : 'GET').toUpperCase(),
data,
header,
timeout,
success: (res) => {
var _a, _b;
// 请求失败处理
if (res.statusCode !== 200 || ((_a = res.data) === null || _a === void 0 ? void 0 : _a.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 = api_1.APIError.generate(res.statusCode, resData, res.errMsg, resHeader);
reject(error);
}
else {
// 请求成功处理
resolve({
data: res.data,
status: res.statusCode,
statusText: (_b = res.errMsg) !== null && _b !== void 0 ? _b : '',
headers: res.header,
config,
});
}
},
fail: (err) => {
reject(err);
},
});
});
};
return uniAdapter;
}
/**
* 应用混入
* 非web环境下应用混入
*/
applyMixins() {
// 使用uni-app的方式检测环境
if (typeof uni !== 'undefined' &&
uni.getSystemInfoSync().uniPlatform !== 'web') {
(0, shared_1.sharedMixins)(this);
(0, platform_1.platformMixins)(this);
}
}
}
exports.CozeAPI = CozeAPI;