@re-ai/volc-knowledge
Version:
火山引擎知识库接口接入SDK
77 lines (76 loc) • 3.57 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.request = request;
const signer_1 = require("./signer");
const consts_1 = require("../consts");
const logger_1 = require("./logger");
/**
* 封装火山引擎API请求
* @param options 请求参数
* @param accessKeyId 用户AK
* @param secretKey 用户SK
* @returns Promise<Response>
*/
function request(options, accessKeyId, secretKey) {
return __awaiter(this, void 0, void 0, function* () {
logger_1.logger.debug(`[API Request] Starting request ${options.pathname} ${options.method}`);
const { pathname, method, body, params, headers } = options;
const region = options.region || process.env.REAI_VOLC_REGION || consts_1.DEFAULT_REGION;
const baseURL = options.baseURL || process.env.REAI_VOLC_BASE_URL || consts_1.DEFAULT_BASE_URL;
// 生成签名
const signerOptions = {
pathname,
method,
body: body ? JSON.stringify(body) : undefined,
region: region,
params
};
const signedHeaders = (0, signer_1.signRequest)(signerOptions, accessKeyId, secretKey);
logger_1.logger.debug(`[API Request] Signed headers generated ${JSON.stringify(signedHeaders)}`);
// 合并请求头
const requestHeaders = Object.assign(Object.assign({}, headers), signedHeaders);
// 构建URL
let url = baseURL ? `${baseURL}${pathname}` : pathname;
if (params) {
const query = new URLSearchParams(params);
url += `?${query.toString()}`;
}
// 配置fetch请求
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 10000);
try {
logger_1.logger.debug(`[API Request] Sending request to ${url}`);
const response = yield fetch(url, {
method,
headers: requestHeaders,
body: method !== 'GET' ? JSON.stringify(body) : undefined,
signal: controller.signal
});
clearTimeout(timeoutId);
if (!response.ok) {
logger_1.logger.error(`[API Request] Request failed ${response.status} ${response.statusText}`);
throw new Error(`API请求失败: ${response.status} ${response.statusText}`);
}
logger_1.logger.debug(`[API Request] Request succeeded ${response.status}`);
const result = yield response.json();
return result;
}
catch (error) {
clearTimeout(timeoutId);
if (error instanceof Error) {
logger_1.logger.error(`[API Request] Request error ${error.message}`);
throw new Error(`API请求失败: ${error.message}`);
}
throw error;
}
});
}