UNPKG

@re-ai/volc-knowledge

Version:

火山引擎知识库接口接入SDK

77 lines (76 loc) 3.57 kB
"use strict"; 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; } }); }