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,196 @@
1
+ /**
2
+ * 预处理器完整使用示例
3
+ * 演示如何在实际项目中使用预处理器功能
4
+ */
5
+ import { PreprocessorRegistry, } from '../src/tools/api/index.js';
6
+ import { logger } from '../src/utils/logger.js';
7
+ // ========================================
8
+ // 1. 定义自定义预处理器
9
+ // ========================================
10
+ /**
11
+ * 示例:添加API签名
12
+ */
13
+ class ApiSignaturePreprocessor {
14
+ secretKey;
15
+ name = 'api_signature';
16
+ constructor(secretKey) {
17
+ this.secretKey = secretKey;
18
+ }
19
+ preprocess(requestData, context) {
20
+ // 生成签名
21
+ const timestamp = Date.now().toString();
22
+ const signature = this.generateSignature(requestData.url, timestamp, this.secretKey);
23
+ // 添加签名到请求头
24
+ requestData.headers['X-Timestamp'] = timestamp;
25
+ requestData.headers['X-Signature'] = signature;
26
+ logger.debug(`Added signature for tool: ${context.toolName}`);
27
+ return requestData;
28
+ }
29
+ generateSignature(url, timestamp, secret) {
30
+ // 简化的签名算法(实际应使用HMAC-SHA256等)
31
+ const data = `${url}${timestamp}${secret}`;
32
+ return Buffer.from(data).toString('base64');
33
+ }
34
+ }
35
+ /**
36
+ * 示例:请求限流预处理器
37
+ */
38
+ class RateLimitPreprocessor {
39
+ name = 'rate_limit';
40
+ lastRequestTime = 0;
41
+ minInterval = 1000; // 最小间隔1秒
42
+ async preprocess(requestData, _context) {
43
+ const now = Date.now();
44
+ const timeSinceLastRequest = now - this.lastRequestTime;
45
+ if (timeSinceLastRequest < this.minInterval) {
46
+ const waitTime = this.minInterval - timeSinceLastRequest;
47
+ logger.debug(`Rate limiting: waiting ${waitTime}ms`);
48
+ await this.sleep(waitTime);
49
+ }
50
+ this.lastRequestTime = Date.now();
51
+ return requestData;
52
+ }
53
+ sleep(ms) {
54
+ return new Promise(resolve => setTimeout(resolve, ms));
55
+ }
56
+ }
57
+ /**
58
+ * 示例:环境切换预处理器
59
+ */
60
+ class EnvironmentSwitchPreprocessor {
61
+ currentEnv;
62
+ name = 'env_switch';
63
+ constructor(currentEnv) {
64
+ this.currentEnv = currentEnv;
65
+ }
66
+ preprocess(requestData, _context) {
67
+ // 添加环境标识到请求头
68
+ requestData.headers['X-Environment'] = this.currentEnv;
69
+ // 可以根据环境修改某些参数
70
+ if (this.currentEnv === 'development') {
71
+ requestData.query.debug = 'true';
72
+ }
73
+ return requestData;
74
+ }
75
+ }
76
+ /**
77
+ * 示例:请求重试预处理器(添加重试标识)
78
+ */
79
+ class RetryablePreprocessor {
80
+ name = 'retryable';
81
+ preprocess(requestData, context) {
82
+ // 添加重试标识
83
+ requestData.headers['X-Retryable'] = 'true';
84
+ requestData.headers['X-Max-Retries'] = '3';
85
+ // 从上下文中获取重试次数(如果存在)
86
+ const retryCount = context.args.retryCount || 0;
87
+ if (retryCount > 0) {
88
+ requestData.headers['X-Retry-Count'] = retryCount.toString();
89
+ }
90
+ return requestData;
91
+ }
92
+ }
93
+ // ========================================
94
+ // 2. 注册预处理器
95
+ // ========================================
96
+ export function setupPreprocessors() {
97
+ logger.info('Setting up API preprocessors...');
98
+ // 注册自定义预处理器
99
+ PreprocessorRegistry.register(new ApiSignaturePreprocessor(process.env.API_SECRET_KEY || 'default-secret'));
100
+ PreprocessorRegistry.register(new RateLimitPreprocessor());
101
+ PreprocessorRegistry.register(new EnvironmentSwitchPreprocessor(process.env.NODE_ENV || 'development'));
102
+ PreprocessorRegistry.register(new RetryablePreprocessor());
103
+ // 也可以注册内置的示例预处理器
104
+ // import {
105
+ // AddTimestampPreprocessor,
106
+ // AuthTokenPreprocessor,
107
+ // RequestLoggerPreprocessor
108
+ // } from './tools/api/preprocessors/example.js';
109
+ //
110
+ // PreprocessorRegistry.registerMany([
111
+ // new AddTimestampPreprocessor(),
112
+ // new AuthTokenPreprocessor(process.env.API_TOKEN),
113
+ // new RequestLoggerPreprocessor(),
114
+ // ]);
115
+ logger.info(`Registered ${PreprocessorRegistry.getAll().length} preprocessors`);
116
+ logger.debug('Available preprocessors:', { preprocessors: PreprocessorRegistry.getAll() });
117
+ }
118
+ // ========================================
119
+ // 3. 使用示例
120
+ // ========================================
121
+ export function exampleUsage() {
122
+ // 设置预处理器
123
+ setupPreprocessors();
124
+ // 加载API工具配置(配置文件中指定了preprocessor字段)
125
+ // const tools = await ApiToolLoader.loadFromFile('./api-tools.json');
126
+ // logger.info(`Loaded ${tools.length} API tools with preprocessor support`);
127
+ // 现在当调用这些API工具时,会自动应用配置的预处理器
128
+ // 例如,如果配置文件中某个工具指定了 "preprocessor": "api_signature"
129
+ // 那么在发送请求前会自动调用 ApiSignaturePreprocessor
130
+ }
131
+ // ========================================
132
+ // 4. 动态预处理器示例
133
+ // ========================================
134
+ /**
135
+ * 根据配置动态创建预处理器
136
+ */
137
+ export function createDynamicPreprocessor(name, config) {
138
+ return {
139
+ name,
140
+ preprocess(requestData, _context) {
141
+ // 根据配置动态添加请求头
142
+ if (config.headers && typeof config.headers === 'object') {
143
+ Object.assign(requestData.headers, config.headers);
144
+ }
145
+ // 根据配置动态添加查询参数
146
+ if (config.queryParams && typeof config.queryParams === 'object') {
147
+ Object.assign(requestData.query, config.queryParams);
148
+ }
149
+ return requestData;
150
+ },
151
+ };
152
+ }
153
+ // 使用动态预处理器
154
+ export function setupDynamicPreprocessor() {
155
+ const dynamicPreprocessor = createDynamicPreprocessor('dynamic', {
156
+ headers: {
157
+ 'X-Client': 'MCP-Client',
158
+ 'X-Version': '1.0',
159
+ },
160
+ queryParams: {
161
+ source: 'mcp',
162
+ },
163
+ });
164
+ PreprocessorRegistry.register(dynamicPreprocessor);
165
+ }
166
+ // ========================================
167
+ // 5. 预处理器组合示例
168
+ // ========================================
169
+ /**
170
+ * 组合多个预处理器的功能
171
+ */
172
+ class CompositePreprocessor {
173
+ preprocessors;
174
+ name = 'composite';
175
+ constructor(preprocessors) {
176
+ this.preprocessors = preprocessors;
177
+ }
178
+ async preprocess(requestData, context) {
179
+ let result = requestData;
180
+ // 依次执行所有预处理器
181
+ for (const preprocessor of this.preprocessors) {
182
+ result = await preprocessor.preprocess(result, context);
183
+ }
184
+ return result;
185
+ }
186
+ }
187
+ // 使用示例
188
+ export function setupCompositePreprocessor() {
189
+ const composite = new CompositePreprocessor([
190
+ new ApiSignaturePreprocessor('secret'),
191
+ new RateLimitPreprocessor(),
192
+ new RetryablePreprocessor(),
193
+ ]);
194
+ PreprocessorRegistry.register(composite);
195
+ }
196
+ //# sourceMappingURL=preprocessor-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preprocessor-usage.js","sourceRoot":"","sources":["../../examples/preprocessor-usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * 环境变量管理类
3
+ *
4
+ * 使用方式:
5
+ * 1. 在代码中导入: import { env } from '@/config/env';
6
+ * 2. 获取环境变量: env.get('MCP_PORT')
7
+ * 3. 获取所有配置: env.getAll()
8
+ * 4. 验证必需的环境变量: env.validate()
9
+ *
10
+ * 添加新环境变量的步骤:
11
+ * 1. 在 .env.example 文件中添加环境变量说明
12
+ * 2. 在 EnvSchema 接口中添加类型定义
13
+ * 3. 在 envSchema 对象中添加验证规则
14
+ * 4. 在 defaultValues 对象中添加默认值(可选)
15
+ */
16
+ import 'dotenv/config';
17
+ /**
18
+ * 环境变量类型定义
19
+ */
20
+ export interface EnvSchema {
21
+ MCP_TRANSPORT: 'stdio' | 'sse' | 'http';
22
+ MCP_PORT: number;
23
+ MCP_SESSION_TIMEOUT: number;
24
+ MCP_LOG_LEVEL: 'debug' | 'info' | 'warn' | 'error';
25
+ MCP_TOOLS_DIR: string;
26
+ MCP_API_TOOLS_CONFIG: string;
27
+ MCP_JSON_CONFIG: string;
28
+ KINGDEE_DOMAIN: string;
29
+ KINGDEE_ACCT_ID: string;
30
+ KINGDEE_USERNAME: string;
31
+ KINGDEE_APP_ID: string;
32
+ KINGDEE_SECRET: string;
33
+ KINGDEE_LCID: string;
34
+ KINGDEE_ALGORITHM: string;
35
+ NODE_ENV?: 'development' | 'production' | 'test';
36
+ }
37
+ /**
38
+ * 环境变量管理类
39
+ */
40
+ declare class EnvManager {
41
+ private env;
42
+ private initialized;
43
+ constructor();
44
+ /**
45
+ * 加载环境变量
46
+ */
47
+ private load;
48
+ /**
49
+ * 解析环境变量值
50
+ */
51
+ private parseValue;
52
+ /**
53
+ * 验证环境变量
54
+ * @throws Error 如果必需的环境变量缺失或验证失败
55
+ */
56
+ validate(): void;
57
+ /**
58
+ * 获取指定的环境变量
59
+ * @param key 环境变量名
60
+ * @returns 环境变量值
61
+ */
62
+ get<K extends keyof EnvSchema>(key: K): EnvSchema[K];
63
+ /**
64
+ * 获取所有环境变量
65
+ * @returns 所有环境变量的对象
66
+ */
67
+ getAll(): Partial<EnvSchema>;
68
+ /**
69
+ * 设置环境变量(仅用于测试)
70
+ * @param key 环境变量名
71
+ * @param value 环境变量值
72
+ */
73
+ set<K extends keyof EnvSchema>(key: K, value: EnvSchema[K]): void;
74
+ /**
75
+ * 检查环境变量是否存在
76
+ * @param key 环境变量名
77
+ * @returns 是否存在
78
+ */
79
+ has(key: keyof EnvSchema): boolean;
80
+ /**
81
+ * 获取当前运行环境
82
+ * @returns 运行环境
83
+ */
84
+ isProduction(): boolean;
85
+ isDevelopment(): boolean;
86
+ isTest(): boolean;
87
+ /**
88
+ * 打印环境变量配置(隐藏敏感信息)
89
+ */
90
+ print(): void;
91
+ }
92
+ /**
93
+ * 导出单例实例
94
+ */
95
+ export declare const env: EnvManager;
96
+ export {};
97
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,eAAe,CAAC;AAGvB;;GAEG;AACH,MAAM,WAAW,SAAS;IAExB,aAAa,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACnD,aAAa,EAAE,MAAM,CAAC;IAGtB,oBAAoB,EAAE,MAAM,CAAC;IAG7B,eAAe,EAAE,MAAM,CAAC;IAGxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,QAAQ,CAAC,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;CAClD;AA0FD;;GAEG;AACH,cAAM,UAAU;IACd,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,WAAW,CAAS;;IAM5B;;OAEG;IACH,OAAO,CAAC,IAAI;IAgBZ;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;;OAGG;IACI,QAAQ,IAAI,IAAI;IA4BvB;;;;OAIG;IACI,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAO3D;;;OAGG;IACI,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAOnC;;;;OAIG;IACI,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAIxE;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,OAAO;IAIzC;;;OAGG;IACI,YAAY,IAAI,OAAO;IAIvB,aAAa,IAAI,OAAO;IAIxB,MAAM,IAAI,OAAO;IAIxB;;OAEG;IACI,KAAK,IAAI,IAAI;CASrB;AAED;;GAEG;AACH,eAAO,MAAM,GAAG,YAAmB,CAAC"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * 环境变量管理类
3
+ *
4
+ * 使用方式:
5
+ * 1. 在代码中导入: import { env } from '@/config/env';
6
+ * 2. 获取环境变量: env.get('MCP_PORT')
7
+ * 3. 获取所有配置: env.getAll()
8
+ * 4. 验证必需的环境变量: env.validate()
9
+ *
10
+ * 添加新环境变量的步骤:
11
+ * 1. 在 .env.example 文件中添加环境变量说明
12
+ * 2. 在 EnvSchema 接口中添加类型定义
13
+ * 3. 在 envSchema 对象中添加验证规则
14
+ * 4. 在 defaultValues 对象中添加默认值(可选)
15
+ */
16
+ import 'dotenv/config';
17
+ import { logger } from '../utils/logger.js';
18
+ /**
19
+ * 环境变量验证规则
20
+ */
21
+ const envSchema = {
22
+ MCP_TRANSPORT: {
23
+ required: false,
24
+ validate: (value) => ['stdio', 'sse', 'http'].includes(value),
25
+ errorMessage: 'MCP_TRANSPORT must be one of: stdio, sse, http',
26
+ },
27
+ MCP_PORT: {
28
+ required: false,
29
+ validate: (value) => {
30
+ const port = parseInt(value, 10);
31
+ return !isNaN(port) && port > 0 && port <= 65535;
32
+ },
33
+ errorMessage: 'MCP_PORT must be a valid port number (1-65535)',
34
+ },
35
+ MCP_SESSION_TIMEOUT: {
36
+ required: false,
37
+ validate: (value) => {
38
+ const timeout = parseInt(value, 10);
39
+ return !isNaN(timeout) && timeout > 0;
40
+ },
41
+ errorMessage: 'MCP_SESSION_TIMEOUT must be a positive number',
42
+ },
43
+ MCP_LOG_LEVEL: {
44
+ required: false,
45
+ validate: (value) => ['debug', 'info', 'warn', 'error'].includes(value),
46
+ errorMessage: 'MCP_LOG_LEVEL must be one of: debug, info, warn, error',
47
+ },
48
+ MCP_TOOLS_DIR: {
49
+ required: false,
50
+ },
51
+ MCP_API_TOOLS_CONFIG: {
52
+ required: false,
53
+ },
54
+ MCP_JSON_CONFIG: {
55
+ required: false,
56
+ },
57
+ KINGDEE_DOMAIN: {
58
+ required: false,
59
+ },
60
+ KINGDEE_ACCT_ID: {
61
+ required: false,
62
+ },
63
+ KINGDEE_USERNAME: {
64
+ required: false,
65
+ },
66
+ KINGDEE_APP_ID: {
67
+ required: false,
68
+ },
69
+ KINGDEE_SECRET: {
70
+ required: false,
71
+ },
72
+ KINGDEE_LCID: {
73
+ required: false,
74
+ },
75
+ KINGDEE_ALGORITHM: {
76
+ required: false,
77
+ },
78
+ NODE_ENV: {
79
+ required: false,
80
+ validate: (value) => ['development', 'production', 'test'].includes(value),
81
+ errorMessage: 'NODE_ENV must be one of: development, production, test',
82
+ },
83
+ };
84
+ /**
85
+ * 环境变量默认值
86
+ */
87
+ const defaultValues = {
88
+ MCP_TRANSPORT: 'http',
89
+ MCP_PORT: 3000,
90
+ MCP_SESSION_TIMEOUT: 3600000,
91
+ MCP_LOG_LEVEL: 'info',
92
+ MCP_TOOLS_DIR: './tools',
93
+ NODE_ENV: 'development',
94
+ };
95
+ /**
96
+ * 环境变量管理类
97
+ */
98
+ class EnvManager {
99
+ env = {};
100
+ initialized = false;
101
+ constructor() {
102
+ this.load();
103
+ }
104
+ /**
105
+ * 加载环境变量
106
+ */
107
+ load() {
108
+ // 加载所有环境变量
109
+ for (const key in envSchema) {
110
+ const envKey = key;
111
+ const rawValue = process.env[envKey];
112
+ if (rawValue !== undefined) {
113
+ this.env[envKey] = this.parseValue(envKey, rawValue);
114
+ }
115
+ else if (defaultValues[envKey] !== undefined) {
116
+ this.env[envKey] = defaultValues[envKey];
117
+ }
118
+ }
119
+ this.initialized = true;
120
+ }
121
+ /**
122
+ * 解析环境变量值
123
+ */
124
+ parseValue(key, value) {
125
+ // 根据类型解析值
126
+ switch (key) {
127
+ case 'MCP_PORT':
128
+ case 'MCP_SESSION_TIMEOUT':
129
+ return parseInt(value, 10);
130
+ default:
131
+ return value;
132
+ }
133
+ }
134
+ /**
135
+ * 验证环境变量
136
+ * @throws Error 如果必需的环境变量缺失或验证失败
137
+ */
138
+ validate() {
139
+ const errors = [];
140
+ for (const key in envSchema) {
141
+ const envKey = key;
142
+ const schema = envSchema[envKey];
143
+ const value = this.env[envKey];
144
+ // 检查必需字段
145
+ if (schema.required && value === undefined) {
146
+ errors.push(`Required environment variable ${envKey} is missing`);
147
+ continue;
148
+ }
149
+ // 验证值
150
+ if (value !== undefined && schema.validate) {
151
+ const isValid = schema.validate(String(value));
152
+ if (!isValid) {
153
+ errors.push(schema.errorMessage || `Invalid value for ${envKey}`);
154
+ }
155
+ }
156
+ }
157
+ if (errors.length > 0) {
158
+ throw new Error(`Environment validation failed:\n${errors.join('\n')}`);
159
+ }
160
+ }
161
+ /**
162
+ * 获取指定的环境变量
163
+ * @param key 环境变量名
164
+ * @returns 环境变量值
165
+ */
166
+ get(key) {
167
+ if (!this.initialized) {
168
+ this.load();
169
+ }
170
+ return this.env[key];
171
+ }
172
+ /**
173
+ * 获取所有环境变量
174
+ * @returns 所有环境变量的对象
175
+ */
176
+ getAll() {
177
+ if (!this.initialized) {
178
+ this.load();
179
+ }
180
+ return { ...this.env };
181
+ }
182
+ /**
183
+ * 设置环境变量(仅用于测试)
184
+ * @param key 环境变量名
185
+ * @param value 环境变量值
186
+ */
187
+ set(key, value) {
188
+ this.env[key] = value;
189
+ }
190
+ /**
191
+ * 检查环境变量是否存在
192
+ * @param key 环境变量名
193
+ * @returns 是否存在
194
+ */
195
+ has(key) {
196
+ return this.env[key] !== undefined;
197
+ }
198
+ /**
199
+ * 获取当前运行环境
200
+ * @returns 运行环境
201
+ */
202
+ isProduction() {
203
+ return this.get('NODE_ENV') === 'production';
204
+ }
205
+ isDevelopment() {
206
+ return this.get('NODE_ENV') === 'development';
207
+ }
208
+ isTest() {
209
+ return this.get('NODE_ENV') === 'test';
210
+ }
211
+ /**
212
+ * 打印环境变量配置(隐藏敏感信息)
213
+ */
214
+ print() {
215
+ const config = this.getAll();
216
+ logger.info('Environment Configuration:');
217
+ for (const key in config) {
218
+ const value = config[key];
219
+ // 这里可以添加敏感信息过滤逻辑
220
+ logger.info(` ${key}: ${value}`);
221
+ }
222
+ }
223
+ }
224
+ /**
225
+ * 导出单例实例
226
+ */
227
+ export const env = new EnvManager();
228
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 工具注册器
3
+ */
4
+ import { type ToolConfig } from '../tools/types.js';
5
+ /**
6
+ * 工具注册器类
7
+ */
8
+ export declare class ToolRegistry {
9
+ private tools;
10
+ /**
11
+ * 注册单个工具
12
+ */
13
+ register(config: ToolConfig): void;
14
+ /**
15
+ * 批量注册工具
16
+ */
17
+ registerBatch(configs: ToolConfig[]): void;
18
+ /**
19
+ * 获取工具配置
20
+ */
21
+ get(name: string): ToolConfig | undefined;
22
+ /**
23
+ * 检查工具是否存在
24
+ */
25
+ has(name: string): boolean;
26
+ /**
27
+ * 获取所有工具名称
28
+ */
29
+ getToolNames(): string[];
30
+ /**
31
+ * 获取所有工具配置
32
+ */
33
+ getAll(): ToolConfig[];
34
+ /**
35
+ * 注销工具
36
+ */
37
+ unregister(name: string): boolean;
38
+ /**
39
+ * 清空所有工具
40
+ */
41
+ clear(): void;
42
+ /**
43
+ * 获取工具数量
44
+ */
45
+ count(): number;
46
+ /**
47
+ * 验证工具配置的完整性
48
+ */
49
+ private validateToolConfig;
50
+ /**
51
+ * 转换为 MCP 工具列表格式
52
+ */
53
+ toMcpTools(): {
54
+ name: string;
55
+ description: string;
56
+ inputSchema: Record<string, unknown>;
57
+ }[];
58
+ }
59
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAiC;IAE9C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAqClC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAM1C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,MAAM,IAAI,UAAU,EAAE;IAItB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,KAAK,IAAI,MAAM;IAIf;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACH,UAAU,IAAI;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,EAAE;CAOJ"}