proxy-api-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/.env.example +57 -0
  2. package/README.md +443 -0
  3. package/api-tools.json.example +226 -0
  4. package/dist/examples/env-in-json-usage.d.ts +43 -0
  5. package/dist/examples/env-in-json-usage.d.ts.map +1 -0
  6. package/dist/examples/env-in-json-usage.js +242 -0
  7. package/dist/examples/env-in-json-usage.js.map +1 -0
  8. package/dist/examples/env-usage.d.ts +7 -0
  9. package/dist/examples/env-usage.d.ts.map +1 -0
  10. package/dist/examples/env-usage.js +108 -0
  11. package/dist/examples/env-usage.js.map +1 -0
  12. package/dist/examples/preprocessor-usage.d.ts +14 -0
  13. package/dist/examples/preprocessor-usage.d.ts.map +1 -0
  14. package/dist/examples/preprocessor-usage.js +196 -0
  15. package/dist/examples/preprocessor-usage.js.map +1 -0
  16. package/dist/src/config/env.d.ts +97 -0
  17. package/dist/src/config/env.d.ts.map +1 -0
  18. package/dist/src/config/env.js +228 -0
  19. package/dist/src/config/env.js.map +1 -0
  20. package/dist/src/core/registry.d.ts +59 -0
  21. package/dist/src/core/registry.d.ts.map +1 -0
  22. package/dist/src/core/registry.js +126 -0
  23. package/dist/src/core/registry.js.map +1 -0
  24. package/dist/src/core/router.d.ts +34 -0
  25. package/dist/src/core/router.d.ts.map +1 -0
  26. package/dist/src/core/router.js +108 -0
  27. package/dist/src/core/router.js.map +1 -0
  28. package/dist/src/core/server.d.ts +55 -0
  29. package/dist/src/core/server.d.ts.map +1 -0
  30. package/dist/src/core/server.js +159 -0
  31. package/dist/src/core/server.js.map +1 -0
  32. package/dist/src/core/session.d.ts +70 -0
  33. package/dist/src/core/session.d.ts.map +1 -0
  34. package/dist/src/core/session.js +171 -0
  35. package/dist/src/core/session.js.map +1 -0
  36. package/dist/src/core/transports/http.d.ts +16 -0
  37. package/dist/src/core/transports/http.d.ts.map +1 -0
  38. package/dist/src/core/transports/http.js +169 -0
  39. package/dist/src/core/transports/http.js.map +1 -0
  40. package/dist/src/core/transports/stdio.d.ts +9 -0
  41. package/dist/src/core/transports/stdio.d.ts.map +1 -0
  42. package/dist/src/core/transports/stdio.js +32 -0
  43. package/dist/src/core/transports/stdio.js.map +1 -0
  44. package/dist/src/index.d.ts +19 -0
  45. package/dist/src/index.d.ts.map +1 -0
  46. package/dist/src/index.js +22 -0
  47. package/dist/src/index.js.map +1 -0
  48. package/dist/src/server.d.ts +6 -0
  49. package/dist/src/server.d.ts.map +1 -0
  50. package/dist/src/server.js +121 -0
  51. package/dist/src/server.js.map +1 -0
  52. package/dist/src/tools/api/builder.d.ts +34 -0
  53. package/dist/src/tools/api/builder.d.ts.map +1 -0
  54. package/dist/src/tools/api/builder.js +196 -0
  55. package/dist/src/tools/api/builder.js.map +1 -0
  56. package/dist/src/tools/api/executor.d.ts +57 -0
  57. package/dist/src/tools/api/executor.d.ts.map +1 -0
  58. package/dist/src/tools/api/executor.js +317 -0
  59. package/dist/src/tools/api/executor.js.map +1 -0
  60. package/dist/src/tools/api/index.d.ts +12 -0
  61. package/dist/src/tools/api/index.d.ts.map +1 -0
  62. package/dist/src/tools/api/index.js +12 -0
  63. package/dist/src/tools/api/index.js.map +1 -0
  64. package/dist/src/tools/api/json/kingdee/kingdee_caiwukuaiji_chunaguanli.json +879 -0
  65. package/dist/src/tools/api/json/kingdee/kingdee_caiwukuaiji_yingfukuanguanli.json +1673 -0
  66. package/dist/src/tools/api/json/kingdee/kingdee_caiwukuaiji_yingshoukuanguanli.json +1081 -0
  67. package/dist/src/tools/api/json/kingdee/kingdee_caiwukuaiji_zongzhang.json +976 -0
  68. package/dist/src/tools/api/json/kingdee/kingdee_chengbenguanli_biaozhunchengbenfenxi.json +1 -0
  69. package/dist/src/tools/api/json/kingdee/kingdee_chengbenguanli_chanpinchengbenhesuan.json +1 -0
  70. package/dist/src/tools/api/json/kingdee/kingdee_chengbenguanli_cunhuohesuan.json +1858 -0
  71. package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_caigouguanli.json +1 -0
  72. package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_gongyingshangguanli.json +616 -0
  73. package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_kucunguanli.json +858 -0
  74. package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_xiaoshouguanli.json +858 -0
  75. package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_zuzhijianjiesuan.json +858 -0
  76. package/dist/src/tools/api/json/kingdee/kingdee_jichuguanli_jichuziliao.json +867 -0
  77. package/dist/src/tools/api/json/kingdee/kingdee_jichuguanli_xiaoxipingtai.json +374 -0
  78. package/dist/src/tools/api/json/kingdee/kingdee_shengchanzhizao_chejianguanli.json +923 -0
  79. package/dist/src/tools/api/json/kingdee/kingdee_shengchanzhizao_gongchengshujuguanli.json +923 -0
  80. package/dist/src/tools/api/json/kingdee/kingdee_shengchanzhizao_shengchanguanli.json +858 -0
  81. package/dist/src/tools/api/json/kingdee/kingdee_shuiwuguanli_fapiaoguanli.json +1081 -0
  82. package/dist/src/tools/api/json/kingdee/kingdee_yuangongfuwu_renrenbaoxiao.json +858 -0
  83. package/dist/src/tools/api/json/kingdee/kingdee_zichanguanli_gudingzichan.json +1 -0
  84. package/dist/src/tools/api/json-config-loader.d.ts +28 -0
  85. package/dist/src/tools/api/json-config-loader.d.ts.map +1 -0
  86. package/dist/src/tools/api/json-config-loader.js +123 -0
  87. package/dist/src/tools/api/json-config-loader.js.map +1 -0
  88. package/dist/src/tools/api/json-config-mapping.d.ts +41 -0
  89. package/dist/src/tools/api/json-config-mapping.d.ts.map +1 -0
  90. package/dist/src/tools/api/json-config-mapping.js +138 -0
  91. package/dist/src/tools/api/json-config-mapping.js.map +1 -0
  92. package/dist/src/tools/api/loader.d.ts +38 -0
  93. package/dist/src/tools/api/loader.d.ts.map +1 -0
  94. package/dist/src/tools/api/loader.js +240 -0
  95. package/dist/src/tools/api/loader.js.map +1 -0
  96. package/dist/src/tools/api/preprocessor.d.ts +39 -0
  97. package/dist/src/tools/api/preprocessor.d.ts.map +1 -0
  98. package/dist/src/tools/api/preprocessor.js +64 -0
  99. package/dist/src/tools/api/preprocessor.js.map +1 -0
  100. package/dist/src/tools/api/preprocessors/example.d.ts +59 -0
  101. package/dist/src/tools/api/preprocessors/example.d.ts.map +1 -0
  102. package/dist/src/tools/api/preprocessors/example.js +133 -0
  103. package/dist/src/tools/api/preprocessors/example.js.map +1 -0
  104. package/dist/src/tools/api/preprocessors/index.d.ts +10 -0
  105. package/dist/src/tools/api/preprocessors/index.d.ts.map +1 -0
  106. package/dist/src/tools/api/preprocessors/index.js +29 -0
  107. package/dist/src/tools/api/preprocessors/index.js.map +1 -0
  108. package/dist/src/tools/api/preprocessors/kingdee.d.ts +24 -0
  109. package/dist/src/tools/api/preprocessors/kingdee.d.ts.map +1 -0
  110. package/dist/src/tools/api/preprocessors/kingdee.js +149 -0
  111. package/dist/src/tools/api/preprocessors/kingdee.js.map +1 -0
  112. package/dist/src/tools/api/types.d.ts +174 -0
  113. package/dist/src/tools/api/types.d.ts.map +1 -0
  114. package/dist/src/tools/api/types.js +5 -0
  115. package/dist/src/tools/api/types.js.map +1 -0
  116. package/dist/src/tools/examples/echo.d.ts +6 -0
  117. package/dist/src/tools/examples/echo.d.ts.map +1 -0
  118. package/dist/src/tools/examples/echo.js +61 -0
  119. package/dist/src/tools/examples/echo.js.map +1 -0
  120. package/dist/src/tools/types.d.ts +104 -0
  121. package/dist/src/tools/types.d.ts.map +1 -0
  122. package/dist/src/tools/types.js +15 -0
  123. package/dist/src/tools/types.js.map +1 -0
  124. package/dist/src/tools/validator.d.ts +27 -0
  125. package/dist/src/tools/validator.d.ts.map +1 -0
  126. package/dist/src/tools/validator.js +133 -0
  127. package/dist/src/tools/validator.js.map +1 -0
  128. package/dist/src/utils/cache.d.ts +14 -0
  129. package/dist/src/utils/cache.d.ts.map +1 -0
  130. package/dist/src/utils/cache.js +42 -0
  131. package/dist/src/utils/cache.js.map +1 -0
  132. package/dist/src/utils/env-replacer.d.ts +86 -0
  133. package/dist/src/utils/env-replacer.d.ts.map +1 -0
  134. package/dist/src/utils/env-replacer.js +196 -0
  135. package/dist/src/utils/env-replacer.js.map +1 -0
  136. package/dist/src/utils/errors.d.ts +102 -0
  137. package/dist/src/utils/errors.d.ts.map +1 -0
  138. package/dist/src/utils/errors.js +164 -0
  139. package/dist/src/utils/errors.js.map +1 -0
  140. package/dist/src/utils/logger.d.ts +77 -0
  141. package/dist/src/utils/logger.d.ts.map +1 -0
  142. package/dist/src/utils/logger.js +155 -0
  143. package/dist/src/utils/logger.js.map +1 -0
  144. package/package.json +73 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../src/tools/api/builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,YAAY,CAAC;AAInE;;GAEG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,GAAG,UAAU;IA6DlD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAkD/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IA2CpC;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE;IAM5D;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAwChF"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * API 工具构建器 - 从 API 配置生成 MCP 工具
3
+ */
4
+ import { ApiExecutor } from './executor.js';
5
+ import { logger } from '../../utils/logger.js';
6
+ /**
7
+ * API 工具构建器类
8
+ */
9
+ export class ApiToolBuilder {
10
+ /**
11
+ * 从 API 配置构建 MCP 工具配置
12
+ */
13
+ static build(apiConfig) {
14
+ // 生成输入 Schema
15
+ const inputSchema = this.buildInputSchema(apiConfig);
16
+ // 创建工具配置
17
+ const toolConfig = {
18
+ name: apiConfig.name,
19
+ title: apiConfig.title,
20
+ description: apiConfig.description,
21
+ inputSchema,
22
+ handler: async (args, context) => {
23
+ // 创建 API 执行器
24
+ const executor = new ApiExecutor(apiConfig);
25
+ try {
26
+ // 执行 API 请求
27
+ const data = await executor.execute(args);
28
+ // 构建成功响应
29
+ return {
30
+ content: [
31
+ {
32
+ type: 'text',
33
+ text: JSON.stringify(data, null, 2),
34
+ },
35
+ ],
36
+ structuredContent: {
37
+ success: true,
38
+ data,
39
+ timestamp: context.timestamp,
40
+ },
41
+ };
42
+ }
43
+ catch (error) {
44
+ // 构建错误响应
45
+ const errorMessage = error instanceof Error ? error.message : String(error);
46
+ logger.error(`API tool ${apiConfig.name} execution failed`, {
47
+ error: errorMessage,
48
+ });
49
+ return {
50
+ content: [
51
+ {
52
+ type: 'text',
53
+ text: `Error: ${errorMessage}`,
54
+ },
55
+ ],
56
+ structuredContent: {
57
+ success: false,
58
+ error: errorMessage,
59
+ timestamp: context.timestamp,
60
+ },
61
+ isError: true,
62
+ };
63
+ }
64
+ },
65
+ };
66
+ return toolConfig;
67
+ }
68
+ /**
69
+ * 构建输入 Schema
70
+ */
71
+ static buildInputSchema(apiConfig) {
72
+ const properties = {};
73
+ const required = [];
74
+ // 处理参数定义
75
+ if (apiConfig.parameters) {
76
+ for (const param of apiConfig.parameters) {
77
+ // body 位置的参数单独处理
78
+ if (param.in === 'body') {
79
+ continue;
80
+ }
81
+ properties[param.name] = this.parameterToJsonSchema(param);
82
+ if (param.required) {
83
+ required.push(param.name);
84
+ }
85
+ }
86
+ }
87
+ // 处理请求体 Schema
88
+ if (apiConfig.requestBody) {
89
+ const bodySchema = apiConfig.requestBody.schema;
90
+ if (bodySchema.type === 'object' && bodySchema.properties) {
91
+ // 将请求体的 properties 合并到顶层
92
+ const bodyProperties = bodySchema.properties;
93
+ Object.assign(properties, bodyProperties);
94
+ // 添加必需字段
95
+ if (apiConfig.requestBody.required && bodySchema.required) {
96
+ const bodyRequired = bodySchema.required;
97
+ required.push(...bodyRequired);
98
+ }
99
+ }
100
+ else {
101
+ // 非 object 类型的请求体,添加为 'body' 字段
102
+ properties.body = bodySchema;
103
+ if (apiConfig.requestBody.required) {
104
+ required.push('body');
105
+ }
106
+ }
107
+ }
108
+ return {
109
+ type: 'object',
110
+ properties,
111
+ ...(required.length > 0 && { required }),
112
+ };
113
+ }
114
+ /**
115
+ * 将参数定义转换为 JSON Schema
116
+ */
117
+ static parameterToJsonSchema(param) {
118
+ const schema = {
119
+ type: param.type,
120
+ };
121
+ if (param.description) {
122
+ schema.description = param.description;
123
+ }
124
+ if (param.default !== undefined) {
125
+ schema.default = param.default;
126
+ }
127
+ if (param.enum) {
128
+ schema.enum = param.enum;
129
+ }
130
+ // 处理数组类型
131
+ if (param.type === 'array' && param.items) {
132
+ schema.items = param.items;
133
+ }
134
+ // 处理对象类型
135
+ if (param.type === 'object' && param.properties) {
136
+ const properties = {};
137
+ const required = [];
138
+ for (const [propName, propDef] of Object.entries(param.properties)) {
139
+ properties[propName] = this.parameterToJsonSchema(propDef);
140
+ if (propDef.required) {
141
+ required.push(propName);
142
+ }
143
+ }
144
+ schema.properties = properties;
145
+ if (required.length > 0) {
146
+ schema.required = required;
147
+ }
148
+ }
149
+ return schema;
150
+ }
151
+ /**
152
+ * 批量构建工具
153
+ */
154
+ static buildBatch(apiConfigs) {
155
+ return apiConfigs
156
+ .filter(config => config.enabled !== false)
157
+ .map(config => this.build(config));
158
+ }
159
+ /**
160
+ * 验证 API 配置
161
+ */
162
+ static validate(apiConfig) {
163
+ const errors = [];
164
+ if (!apiConfig.name || typeof apiConfig.name !== 'string') {
165
+ errors.push('Tool name is required and must be a string');
166
+ }
167
+ if (!apiConfig.description || typeof apiConfig.description !== 'string') {
168
+ errors.push('Tool description is required');
169
+ }
170
+ if (!apiConfig.method) {
171
+ errors.push('HTTP method is required');
172
+ }
173
+ if (!apiConfig.baseUrl || typeof apiConfig.baseUrl !== 'string') {
174
+ errors.push('Base URL is required');
175
+ }
176
+ if (!apiConfig.path || typeof apiConfig.path !== 'string') {
177
+ errors.push('API path is required');
178
+ }
179
+ // 验证参数定义
180
+ if (apiConfig.parameters) {
181
+ for (const param of apiConfig.parameters) {
182
+ if (!param.name) {
183
+ errors.push(`Parameter name is required`);
184
+ }
185
+ if (!param.type) {
186
+ errors.push(`Parameter ${param.name} type is required`);
187
+ }
188
+ }
189
+ }
190
+ return {
191
+ valid: errors.length === 0,
192
+ errors,
193
+ };
194
+ }
195
+ }
196
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../src/tools/api/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * API 请求执行器
3
+ */
4
+ import { type ApiToolConfig } from './types.js';
5
+ /**
6
+ * API 执行器类
7
+ */
8
+ export declare class ApiExecutor {
9
+ private config;
10
+ private axiosInstance;
11
+ constructor(config: ApiToolConfig);
12
+ /**
13
+ * 应用认证配置
14
+ */
15
+ private applyAuth;
16
+ /**
17
+ * 执行 API 请求
18
+ */
19
+ execute(args: Record<string, unknown>): Promise<unknown>;
20
+ /**
21
+ * 构建请求数据(预处理前)
22
+ */
23
+ private buildRequestData;
24
+ /**
25
+ * 应用预处理器
26
+ */
27
+ private applyPreprocessor;
28
+ /**
29
+ * 构建 Axios 请求配置(从预处理后的数据)
30
+ */
31
+ private buildAxiosConfig;
32
+ /**
33
+ * 替换路径参数
34
+ */
35
+ private replacePathParameters;
36
+ /**
37
+ * 提取请求体数据
38
+ */
39
+ private extractRequestBody;
40
+ /**
41
+ * 转换响应数据
42
+ */
43
+ private transformResponse;
44
+ /**
45
+ * 根据路径提取数据
46
+ */
47
+ private extractDataByPath;
48
+ /**
49
+ * 应用字段映射
50
+ */
51
+ private applyFieldMapping;
52
+ /**
53
+ * 展平嵌套对象
54
+ */
55
+ private flattenObject;
56
+ }
57
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../../src/tools/api/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,aAAa,EAAoE,MAAM,YAAY,CAAC;AAIlH;;GAEG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,aAAa,CAAgB;gBAEjB,MAAM,EAAE,aAAa;IAezC;;OAEG;IACH,OAAO,CAAC,SAAS;IAoCjB;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAiD9D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4CxB;;OAEG;YACW,iBAAiB;IAuC/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiDxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,aAAa;CAiBtB"}
@@ -0,0 +1,317 @@
1
+ /**
2
+ * API 请求执行器
3
+ */
4
+ import axios from 'axios';
5
+ import { PreprocessorRegistry } from './preprocessor.js';
6
+ import { logger } from '../../utils/logger.js';
7
+ /**
8
+ * API 执行器类
9
+ */
10
+ export class ApiExecutor {
11
+ config;
12
+ axiosInstance;
13
+ constructor(config) {
14
+ this.config = config;
15
+ // 创建 Axios 实例
16
+ this.axiosInstance = axios.create({
17
+ baseURL: config.baseUrl,
18
+ timeout: config.timeout || 30000,
19
+ headers: {
20
+ 'Content-Type': 'application/json',
21
+ ...config.headers,
22
+ },
23
+ });
24
+ // 应用认证配置
25
+ this.applyAuth(config.auth);
26
+ }
27
+ /**
28
+ * 应用认证配置
29
+ */
30
+ applyAuth(auth) {
31
+ if (!auth || auth.type === 'none') {
32
+ return;
33
+ }
34
+ switch (auth.type) {
35
+ case 'bearer':
36
+ if (auth.token) {
37
+ this.axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${auth.token}`;
38
+ }
39
+ break;
40
+ case 'basic':
41
+ if (auth.username && auth.password) {
42
+ const credentials = Buffer.from(`${auth.username}:${auth.password}`).toString('base64');
43
+ this.axiosInstance.defaults.headers.common['Authorization'] = `Basic ${credentials}`;
44
+ }
45
+ break;
46
+ case 'apikey':
47
+ if (auth.apiKeyName && auth.apiKeyValue) {
48
+ if (auth.apiKeyIn === 'header') {
49
+ this.axiosInstance.defaults.headers.common[auth.apiKeyName] = auth.apiKeyValue;
50
+ }
51
+ // query 方式的 API Key 在请求时处理
52
+ }
53
+ break;
54
+ case 'custom':
55
+ if (auth.customHeaders) {
56
+ Object.assign(this.axiosInstance.defaults.headers.common, auth.customHeaders);
57
+ }
58
+ break;
59
+ }
60
+ }
61
+ /**
62
+ * 执行 API 请求
63
+ */
64
+ async execute(args) {
65
+ try {
66
+ // 构建初始请求数据
67
+ const requestData = this.buildRequestData(args);
68
+ // 应用预处理器(如果配置了)
69
+ const processedData = await this.applyPreprocessor(requestData, args);
70
+ // 构建最终的 Axios 请求配置
71
+ const requestConfig = this.buildAxiosConfig(processedData);
72
+ logger.debug(`Executing API request: ${this.config.method} ${this.config.path}`, {
73
+ config: requestConfig,
74
+ });
75
+ // 发送请求
76
+ const response = await this.axiosInstance.request(requestConfig);
77
+ // 转换响应数据
78
+ const transformedData = this.transformResponse(response);
79
+ logger.debug('API request successful', {
80
+ status: response.status,
81
+ dataSize: JSON.stringify(transformedData).length,
82
+ });
83
+ return transformedData;
84
+ }
85
+ catch (error) {
86
+ if (axios.isAxiosError(error)) {
87
+ const axiosError = error;
88
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
89
+ const errorMessage = axiosError.response?.data?.message || axiosError.message;
90
+ const statusCode = axiosError.response?.status || 500;
91
+ logger.error('API request failed', {
92
+ url: axiosError.config?.url,
93
+ method: axiosError.config?.method,
94
+ status: statusCode,
95
+ message: errorMessage,
96
+ });
97
+ throw new Error(`API request failed [${statusCode}]: ${errorMessage}`);
98
+ }
99
+ throw error;
100
+ }
101
+ }
102
+ /**
103
+ * 构建请求数据(预处理前)
104
+ */
105
+ buildRequestData(args) {
106
+ const requestData = {
107
+ url: this.config.path,
108
+ query: {},
109
+ headers: this.config.headers ? { ...this.config.headers } : {},
110
+ pathParams: {},
111
+ };
112
+ // 处理参数
113
+ if (this.config.parameters) {
114
+ for (const param of this.config.parameters) {
115
+ const value = args[param.name] ?? param.default;
116
+ if (value === undefined && param.required) {
117
+ throw new Error(`Required parameter missing: ${param.name}`);
118
+ }
119
+ if (value === undefined) {
120
+ continue;
121
+ }
122
+ switch (param.in) {
123
+ case 'query':
124
+ requestData.query[param.name] = value;
125
+ break;
126
+ case 'path':
127
+ requestData.pathParams[param.name] = value;
128
+ break;
129
+ case 'header':
130
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
131
+ requestData.headers[param.name] = String(value);
132
+ break;
133
+ }
134
+ }
135
+ }
136
+ // 处理请求体
137
+ if (this.config.requestBody && ['POST', 'PUT', 'PATCH'].includes(this.config.method)) {
138
+ requestData.body = this.extractRequestBody(args);
139
+ }
140
+ return requestData;
141
+ }
142
+ /**
143
+ * 应用预处理器
144
+ */
145
+ async applyPreprocessor(requestData, args) {
146
+ // 如果没有配置预处理器,直接返回
147
+ if (!this.config.preprocessor) {
148
+ return requestData;
149
+ }
150
+ // 获取预处理器
151
+ const preprocessor = PreprocessorRegistry.get(this.config.preprocessor);
152
+ if (!preprocessor) {
153
+ logger.warn(`Preprocessor '${this.config.preprocessor}' not found for tool '${this.config.name}', skipping preprocessing`);
154
+ return requestData;
155
+ }
156
+ // 准备上下文
157
+ const context = {
158
+ toolName: this.config.name,
159
+ args,
160
+ config: this.config,
161
+ };
162
+ logger.debug(`Applying preprocessor '${preprocessor.name}' to tool '${this.config.name}'`);
163
+ try {
164
+ // 执行预处理
165
+ const processedData = await preprocessor.preprocess(requestData, context);
166
+ logger.debug(`Preprocessor '${preprocessor.name}' applied successfully`);
167
+ return processedData;
168
+ }
169
+ catch (error) {
170
+ const errorMessage = error instanceof Error ? error.message : String(error);
171
+ logger.error(`Preprocessor '${preprocessor.name}' failed`, { error: errorMessage });
172
+ throw new Error(`Preprocessing failed: ${errorMessage}`);
173
+ }
174
+ }
175
+ /**
176
+ * 构建 Axios 请求配置(从预处理后的数据)
177
+ */
178
+ buildAxiosConfig(requestData) {
179
+ const config = {
180
+ method: this.config.method,
181
+ url: requestData.url,
182
+ };
183
+ // 应用查询参数
184
+ if (Object.keys(requestData.query).length > 0) {
185
+ config.params = requestData.query;
186
+ }
187
+ // 应用路径参数
188
+ if (Object.keys(requestData.pathParams).length > 0) {
189
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
190
+ config.url = this.replacePathParameters(config.url, requestData.pathParams);
191
+ }
192
+ // 应用请求头参数
193
+ if (Object.keys(requestData.headers).length > 0) {
194
+ config.headers = { ...config.headers, ...requestData.headers };
195
+ }
196
+ // 处理 API Key (query 方式)
197
+ if (this.config.auth?.type === 'apikey' &&
198
+ this.config.auth.apiKeyIn === 'query' &&
199
+ this.config.auth.apiKeyName &&
200
+ this.config.auth.apiKeyValue) {
201
+ config.params = {
202
+ ...config.params,
203
+ [this.config.auth.apiKeyName]: this.config.auth.apiKeyValue,
204
+ };
205
+ }
206
+ // 处理请求体
207
+ if (requestData.body !== undefined) {
208
+ config.data = requestData.body;
209
+ // 设置 Content-Type
210
+ if (this.config.requestBody?.contentType) {
211
+ config.headers = {
212
+ ...config.headers,
213
+ 'Content-Type': this.config.requestBody.contentType,
214
+ };
215
+ }
216
+ }
217
+ return config;
218
+ }
219
+ /**
220
+ * 替换路径参数
221
+ */
222
+ replacePathParameters(path, params) {
223
+ let result = path;
224
+ for (const [key, value] of Object.entries(params)) {
225
+ result = result.replace(`{${key}}`, String(value));
226
+ }
227
+ return result;
228
+ }
229
+ /**
230
+ * 提取请求体数据
231
+ */
232
+ extractRequestBody(args) {
233
+ if (!this.config.requestBody) {
234
+ return undefined;
235
+ }
236
+ // 如果 requestBody schema 是 object 类型,从 args 中提取对应字段
237
+ const schema = this.config.requestBody.schema;
238
+ if (schema.type === 'object' && schema.properties) {
239
+ const bodyData = {};
240
+ const properties = schema.properties;
241
+ for (const key of Object.keys(properties)) {
242
+ if (args[key] !== undefined) {
243
+ bodyData[key] = args[key];
244
+ }
245
+ }
246
+ return bodyData;
247
+ }
248
+ // 否则,查找名为 'body' 的参数
249
+ return args.body;
250
+ }
251
+ /**
252
+ * 转换响应数据
253
+ */
254
+ transformResponse(response) {
255
+ let data = response.data;
256
+ const transform = this.config.responseTransform;
257
+ if (!transform) {
258
+ return data;
259
+ }
260
+ // 提取指定路径的数据
261
+ if (transform.dataPath) {
262
+ data = this.extractDataByPath(data, transform.dataPath);
263
+ }
264
+ // 字段映射
265
+ if (transform.fieldMapping && typeof data === 'object' && data !== null) {
266
+ data = this.applyFieldMapping(data, transform.fieldMapping);
267
+ }
268
+ // 展平对象
269
+ if (transform.flatten && typeof data === 'object' && data !== null) {
270
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
271
+ data = this.flattenObject(data);
272
+ }
273
+ return data;
274
+ }
275
+ /**
276
+ * 根据路径提取数据
277
+ */
278
+ extractDataByPath(data, path) {
279
+ const parts = path.split('.');
280
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
281
+ let current = data;
282
+ for (const part of parts) {
283
+ if (current === null || current === undefined) {
284
+ return undefined;
285
+ }
286
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
287
+ current = current[part];
288
+ }
289
+ return current;
290
+ }
291
+ /**
292
+ * 应用字段映射
293
+ */
294
+ applyFieldMapping(data, mapping) {
295
+ const result = {};
296
+ for (const [newKey, oldPath] of Object.entries(mapping)) {
297
+ result[newKey] = this.extractDataByPath(data, oldPath);
298
+ }
299
+ return result;
300
+ }
301
+ /**
302
+ * 展平嵌套对象
303
+ */
304
+ flattenObject(obj, prefix = '', result = {}) {
305
+ for (const [key, value] of Object.entries(obj)) {
306
+ const newKey = prefix ? `${prefix}_${key}` : key;
307
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
308
+ this.flattenObject(value, newKey, result);
309
+ }
310
+ else {
311
+ result[newKey] = value;
312
+ }
313
+ }
314
+ return result;
315
+ }
316
+ }
317
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../src/tools/api/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * API 工具模块导出
3
+ */
4
+ export * from './types.js';
5
+ export * from './builder.js';
6
+ export * from './executor.js';
7
+ export * from './loader.js';
8
+ export * from './preprocessor.js';
9
+ export * from './preprocessors/index.js';
10
+ export * from './json-config-mapping.js';
11
+ export * from './json-config-loader.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * API 工具模块导出
3
+ */
4
+ export * from './types.js';
5
+ export * from './builder.js';
6
+ export * from './executor.js';
7
+ export * from './loader.js';
8
+ export * from './preprocessor.js';
9
+ export * from './preprocessors/index.js';
10
+ export * from './json-config-mapping.js';
11
+ export * from './json-config-loader.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}