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.
- package/.env.example +57 -0
- package/README.md +443 -0
- package/api-tools.json.example +226 -0
- package/dist/examples/env-in-json-usage.d.ts +43 -0
- package/dist/examples/env-in-json-usage.d.ts.map +1 -0
- package/dist/examples/env-in-json-usage.js +242 -0
- package/dist/examples/env-in-json-usage.js.map +1 -0
- package/dist/examples/env-usage.d.ts +7 -0
- package/dist/examples/env-usage.d.ts.map +1 -0
- package/dist/examples/env-usage.js +108 -0
- package/dist/examples/env-usage.js.map +1 -0
- package/dist/examples/preprocessor-usage.d.ts +14 -0
- package/dist/examples/preprocessor-usage.d.ts.map +1 -0
- package/dist/examples/preprocessor-usage.js +196 -0
- package/dist/examples/preprocessor-usage.js.map +1 -0
- package/dist/src/config/env.d.ts +97 -0
- package/dist/src/config/env.d.ts.map +1 -0
- package/dist/src/config/env.js +228 -0
- package/dist/src/config/env.js.map +1 -0
- package/dist/src/core/registry.d.ts +59 -0
- package/dist/src/core/registry.d.ts.map +1 -0
- package/dist/src/core/registry.js +126 -0
- package/dist/src/core/registry.js.map +1 -0
- package/dist/src/core/router.d.ts +34 -0
- package/dist/src/core/router.d.ts.map +1 -0
- package/dist/src/core/router.js +108 -0
- package/dist/src/core/router.js.map +1 -0
- package/dist/src/core/server.d.ts +55 -0
- package/dist/src/core/server.d.ts.map +1 -0
- package/dist/src/core/server.js +159 -0
- package/dist/src/core/server.js.map +1 -0
- package/dist/src/core/session.d.ts +70 -0
- package/dist/src/core/session.d.ts.map +1 -0
- package/dist/src/core/session.js +171 -0
- package/dist/src/core/session.js.map +1 -0
- package/dist/src/core/transports/http.d.ts +16 -0
- package/dist/src/core/transports/http.d.ts.map +1 -0
- package/dist/src/core/transports/http.js +169 -0
- package/dist/src/core/transports/http.js.map +1 -0
- package/dist/src/core/transports/stdio.d.ts +9 -0
- package/dist/src/core/transports/stdio.d.ts.map +1 -0
- package/dist/src/core/transports/stdio.js +32 -0
- package/dist/src/core/transports/stdio.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +22 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/server.d.ts +6 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +121 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/tools/api/builder.d.ts +34 -0
- package/dist/src/tools/api/builder.d.ts.map +1 -0
- package/dist/src/tools/api/builder.js +196 -0
- package/dist/src/tools/api/builder.js.map +1 -0
- package/dist/src/tools/api/executor.d.ts +57 -0
- package/dist/src/tools/api/executor.d.ts.map +1 -0
- package/dist/src/tools/api/executor.js +317 -0
- package/dist/src/tools/api/executor.js.map +1 -0
- package/dist/src/tools/api/index.d.ts +12 -0
- package/dist/src/tools/api/index.d.ts.map +1 -0
- package/dist/src/tools/api/index.js +12 -0
- package/dist/src/tools/api/index.js.map +1 -0
- package/dist/src/tools/api/json/kingdee/kingdee_caiwukuaiji_chunaguanli.json +879 -0
- package/dist/src/tools/api/json/kingdee/kingdee_caiwukuaiji_yingfukuanguanli.json +1673 -0
- package/dist/src/tools/api/json/kingdee/kingdee_caiwukuaiji_yingshoukuanguanli.json +1081 -0
- package/dist/src/tools/api/json/kingdee/kingdee_caiwukuaiji_zongzhang.json +976 -0
- package/dist/src/tools/api/json/kingdee/kingdee_chengbenguanli_biaozhunchengbenfenxi.json +1 -0
- package/dist/src/tools/api/json/kingdee/kingdee_chengbenguanli_chanpinchengbenhesuan.json +1 -0
- package/dist/src/tools/api/json/kingdee/kingdee_chengbenguanli_cunhuohesuan.json +1858 -0
- package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_caigouguanli.json +1 -0
- package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_gongyingshangguanli.json +616 -0
- package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_kucunguanli.json +858 -0
- package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_xiaoshouguanli.json +858 -0
- package/dist/src/tools/api/json/kingdee/kingdee_gongyinglianguanli_zuzhijianjiesuan.json +858 -0
- package/dist/src/tools/api/json/kingdee/kingdee_jichuguanli_jichuziliao.json +867 -0
- package/dist/src/tools/api/json/kingdee/kingdee_jichuguanli_xiaoxipingtai.json +374 -0
- package/dist/src/tools/api/json/kingdee/kingdee_shengchanzhizao_chejianguanli.json +923 -0
- package/dist/src/tools/api/json/kingdee/kingdee_shengchanzhizao_gongchengshujuguanli.json +923 -0
- package/dist/src/tools/api/json/kingdee/kingdee_shengchanzhizao_shengchanguanli.json +858 -0
- package/dist/src/tools/api/json/kingdee/kingdee_shuiwuguanli_fapiaoguanli.json +1081 -0
- package/dist/src/tools/api/json/kingdee/kingdee_yuangongfuwu_renrenbaoxiao.json +858 -0
- package/dist/src/tools/api/json/kingdee/kingdee_zichanguanli_gudingzichan.json +1 -0
- package/dist/src/tools/api/json-config-loader.d.ts +28 -0
- package/dist/src/tools/api/json-config-loader.d.ts.map +1 -0
- package/dist/src/tools/api/json-config-loader.js +123 -0
- package/dist/src/tools/api/json-config-loader.js.map +1 -0
- package/dist/src/tools/api/json-config-mapping.d.ts +41 -0
- package/dist/src/tools/api/json-config-mapping.d.ts.map +1 -0
- package/dist/src/tools/api/json-config-mapping.js +138 -0
- package/dist/src/tools/api/json-config-mapping.js.map +1 -0
- package/dist/src/tools/api/loader.d.ts +38 -0
- package/dist/src/tools/api/loader.d.ts.map +1 -0
- package/dist/src/tools/api/loader.js +240 -0
- package/dist/src/tools/api/loader.js.map +1 -0
- package/dist/src/tools/api/preprocessor.d.ts +39 -0
- package/dist/src/tools/api/preprocessor.d.ts.map +1 -0
- package/dist/src/tools/api/preprocessor.js +64 -0
- package/dist/src/tools/api/preprocessor.js.map +1 -0
- package/dist/src/tools/api/preprocessors/example.d.ts +59 -0
- package/dist/src/tools/api/preprocessors/example.d.ts.map +1 -0
- package/dist/src/tools/api/preprocessors/example.js +133 -0
- package/dist/src/tools/api/preprocessors/example.js.map +1 -0
- package/dist/src/tools/api/preprocessors/index.d.ts +10 -0
- package/dist/src/tools/api/preprocessors/index.d.ts.map +1 -0
- package/dist/src/tools/api/preprocessors/index.js +29 -0
- package/dist/src/tools/api/preprocessors/index.js.map +1 -0
- package/dist/src/tools/api/preprocessors/kingdee.d.ts +24 -0
- package/dist/src/tools/api/preprocessors/kingdee.d.ts.map +1 -0
- package/dist/src/tools/api/preprocessors/kingdee.js +149 -0
- package/dist/src/tools/api/preprocessors/kingdee.js.map +1 -0
- package/dist/src/tools/api/types.d.ts +174 -0
- package/dist/src/tools/api/types.d.ts.map +1 -0
- package/dist/src/tools/api/types.js +5 -0
- package/dist/src/tools/api/types.js.map +1 -0
- package/dist/src/tools/examples/echo.d.ts +6 -0
- package/dist/src/tools/examples/echo.d.ts.map +1 -0
- package/dist/src/tools/examples/echo.js +61 -0
- package/dist/src/tools/examples/echo.js.map +1 -0
- package/dist/src/tools/types.d.ts +104 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +15 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/tools/validator.d.ts +27 -0
- package/dist/src/tools/validator.d.ts.map +1 -0
- package/dist/src/tools/validator.js +133 -0
- package/dist/src/tools/validator.js.map +1 -0
- package/dist/src/utils/cache.d.ts +14 -0
- package/dist/src/utils/cache.d.ts.map +1 -0
- package/dist/src/utils/cache.js +42 -0
- package/dist/src/utils/cache.js.map +1 -0
- package/dist/src/utils/env-replacer.d.ts +86 -0
- package/dist/src/utils/env-replacer.d.ts.map +1 -0
- package/dist/src/utils/env-replacer.js +196 -0
- package/dist/src/utils/env-replacer.js.map +1 -0
- package/dist/src/utils/errors.d.ts +102 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +164 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/logger.d.ts +77 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +155 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema 验证器
|
|
3
|
+
*/
|
|
4
|
+
import { z, ZodError } from 'zod';
|
|
5
|
+
import { SchemaValidationError } from '../utils/errors.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
/**
|
|
8
|
+
* JSON Schema 转 Zod Schema 的辅助函数
|
|
9
|
+
*/
|
|
10
|
+
export class SchemaValidator {
|
|
11
|
+
/**
|
|
12
|
+
* 从 JSON Schema 创建 Zod Schema
|
|
13
|
+
* 注意:这是一个简化的实现,仅支持基本类型
|
|
14
|
+
*/
|
|
15
|
+
static createZodSchema(jsonSchema) {
|
|
16
|
+
const type = jsonSchema.type;
|
|
17
|
+
switch (type) {
|
|
18
|
+
case 'object': {
|
|
19
|
+
const properties = jsonSchema.properties || {};
|
|
20
|
+
const required = jsonSchema.required || [];
|
|
21
|
+
const shape = {};
|
|
22
|
+
for (const [key, prop] of Object.entries(properties)) {
|
|
23
|
+
const propSchema = this.createZodSchema(prop);
|
|
24
|
+
shape[key] = required.includes(key) ? propSchema : propSchema.optional();
|
|
25
|
+
}
|
|
26
|
+
return z.object(shape);
|
|
27
|
+
}
|
|
28
|
+
case 'array': {
|
|
29
|
+
const items = jsonSchema.items;
|
|
30
|
+
if (items) {
|
|
31
|
+
return z.array(this.createZodSchema(items));
|
|
32
|
+
}
|
|
33
|
+
return z.array(z.unknown());
|
|
34
|
+
}
|
|
35
|
+
case 'string': {
|
|
36
|
+
let schema = z.string();
|
|
37
|
+
if (jsonSchema.minLength) {
|
|
38
|
+
schema = schema.min(jsonSchema.minLength);
|
|
39
|
+
}
|
|
40
|
+
if (jsonSchema.maxLength) {
|
|
41
|
+
schema = schema.max(jsonSchema.maxLength);
|
|
42
|
+
}
|
|
43
|
+
if (jsonSchema.pattern) {
|
|
44
|
+
schema = schema.regex(new RegExp(jsonSchema.pattern));
|
|
45
|
+
}
|
|
46
|
+
if (jsonSchema.format === 'email') {
|
|
47
|
+
schema = schema.email();
|
|
48
|
+
}
|
|
49
|
+
if (jsonSchema.format === 'url' || jsonSchema.format === 'uri') {
|
|
50
|
+
schema = schema.url();
|
|
51
|
+
}
|
|
52
|
+
return schema;
|
|
53
|
+
}
|
|
54
|
+
case 'number':
|
|
55
|
+
case 'integer': {
|
|
56
|
+
let schema = type === 'integer' ? z.number().int() : z.number();
|
|
57
|
+
if (jsonSchema.minimum !== undefined) {
|
|
58
|
+
schema = schema.min(jsonSchema.minimum);
|
|
59
|
+
}
|
|
60
|
+
if (jsonSchema.maximum !== undefined) {
|
|
61
|
+
schema = schema.max(jsonSchema.maximum);
|
|
62
|
+
}
|
|
63
|
+
return schema;
|
|
64
|
+
}
|
|
65
|
+
case 'boolean':
|
|
66
|
+
return z.boolean();
|
|
67
|
+
default:
|
|
68
|
+
// 对于未知类型,使用 any
|
|
69
|
+
logger.warn(`Unknown schema type: ${type}, using z.any()`);
|
|
70
|
+
return z.any();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 验证输入数据
|
|
75
|
+
*/
|
|
76
|
+
static validateInput(data, schema) {
|
|
77
|
+
try {
|
|
78
|
+
const zodSchema = this.createZodSchema(schema);
|
|
79
|
+
return zodSchema.parse(data);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof ZodError) {
|
|
83
|
+
const errors = error.errors.map(e => ({
|
|
84
|
+
path: e.path.join('.'),
|
|
85
|
+
message: e.message,
|
|
86
|
+
code: e.code,
|
|
87
|
+
}));
|
|
88
|
+
throw new SchemaValidationError(`Input validation failed: ${errors.map(e => e.message).join(', ')}`, errors);
|
|
89
|
+
}
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 验证输出数据(宽松模式,只记录警告)
|
|
95
|
+
*/
|
|
96
|
+
static validateOutput(data, schema) {
|
|
97
|
+
try {
|
|
98
|
+
const zodSchema = this.createZodSchema(schema);
|
|
99
|
+
zodSchema.parse(data);
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (error instanceof ZodError) {
|
|
104
|
+
const errors = error.errors.map(e => ({
|
|
105
|
+
path: e.path.join('.'),
|
|
106
|
+
message: e.message,
|
|
107
|
+
}));
|
|
108
|
+
logger.warn('Output validation failed', { errors });
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
logger.warn('Output validation error', { error });
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 验证 JSON Schema 本身的有效性
|
|
117
|
+
*/
|
|
118
|
+
static isValidSchema(schema) {
|
|
119
|
+
try {
|
|
120
|
+
// 基本检查
|
|
121
|
+
if (!schema.type) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
// 尝试创建 Zod Schema
|
|
125
|
+
this.createZodSchema(schema);
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/tools/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface CacheContent<T> {
|
|
2
|
+
value: T;
|
|
3
|
+
createTime: number;
|
|
4
|
+
}
|
|
5
|
+
export declare class CACHE<T> {
|
|
6
|
+
content: Map<string, CacheContent<T>>;
|
|
7
|
+
maxTime: number;
|
|
8
|
+
constructor(maxTime?: number);
|
|
9
|
+
set(key: string, value: T): T | null;
|
|
10
|
+
_isExpired(content: CacheContent<T>): boolean;
|
|
11
|
+
get(key: string): T | null;
|
|
12
|
+
remove(key: string): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/utils/cache.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,UAAU,EAAE,MAAM,CAAA;CACrB;AAGD,qBAAa,KAAK,CAAC,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,OAAO,SAAO;gBACF,OAAO,CAAC,EAAE,MAAM;IAQ5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI;IAQpC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAU7C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAc1B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAI5B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export class CACHE {
|
|
2
|
+
content;
|
|
3
|
+
maxTime = 3000;
|
|
4
|
+
constructor(maxTime) {
|
|
5
|
+
if (maxTime) {
|
|
6
|
+
this.maxTime = maxTime;
|
|
7
|
+
}
|
|
8
|
+
this.content = new Map();
|
|
9
|
+
}
|
|
10
|
+
set(key, value) {
|
|
11
|
+
this.content.set(key, {
|
|
12
|
+
value,
|
|
13
|
+
createTime: new Date().getTime()
|
|
14
|
+
});
|
|
15
|
+
return this.get(key);
|
|
16
|
+
}
|
|
17
|
+
_isExpired(content) {
|
|
18
|
+
const now = new Date().getTime();
|
|
19
|
+
if (content) {
|
|
20
|
+
if (now - content.createTime > this.maxTime) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
get(key) {
|
|
27
|
+
const content = this.content.get(key);
|
|
28
|
+
if (content) {
|
|
29
|
+
if (this._isExpired(content)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return content.value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
remove(key) {
|
|
39
|
+
this.content.delete(key);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/utils/cache.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,KAAK;IACd,OAAO,CAA8B;IACrC,OAAO,GAAG,IAAI,CAAA;IACd,YAAY,OAAgB;QACxB,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAC1B,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;IAC5B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,KAAK;YACL,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;SACnC,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAExB,CAAC;IACD,UAAU,CAAC,OAAwB;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAChC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAA;YACf,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAA;IAEhB,CAAC;IACD,GAAG,CAAC,GAAW;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAA;YACf,CAAC;iBAAM,CAAC;gBACJ,OAAO,OAAO,CAAC,KAAK,CAAA;YAExB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAA;IAGf,CAAC;IACD,MAAM,CAAC,GAAW;QACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;CAEJ"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 环境变量替换工具
|
|
3
|
+
*
|
|
4
|
+
* 支持在 JSON 配置中使用环境变量占位符:
|
|
5
|
+
* - ${VAR_NAME} - 使用环境变量,如果不存在则抛出错误
|
|
6
|
+
* - ${VAR_NAME:default} - 使用环境变量,如果不存在则使用默认值
|
|
7
|
+
*
|
|
8
|
+
* 使用示例:
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const result = replaceEnvVariables({
|
|
11
|
+
* baseUrl: "${API_BASE_URL:https://api.example.com}",
|
|
12
|
+
* token: "${API_TOKEN}"
|
|
13
|
+
* });
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* 环境变量替换错误
|
|
18
|
+
*/
|
|
19
|
+
export declare class EnvReplacementError extends Error {
|
|
20
|
+
readonly variable: string;
|
|
21
|
+
readonly path?: string | undefined;
|
|
22
|
+
constructor(message: string, variable: string, path?: string | undefined);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 替换选项
|
|
26
|
+
*/
|
|
27
|
+
export interface ReplaceOptions {
|
|
28
|
+
/** 是否允许未定义的环境变量(如果为 true,未定义的变量将保持原样) */
|
|
29
|
+
allowUndefined?: boolean;
|
|
30
|
+
/** 当前处理的路径(用于错误提示) */
|
|
31
|
+
path?: string;
|
|
32
|
+
/** 自定义环境变量源(默认使用 process.env) */
|
|
33
|
+
env?: Record<string, string | undefined>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 替换字符串中的环境变量占位符
|
|
37
|
+
*
|
|
38
|
+
* @param str - 包含占位符的字符串
|
|
39
|
+
* @param options - 替换选项
|
|
40
|
+
* @returns 替换后的字符串
|
|
41
|
+
* @throws EnvReplacementError 如果必需的环境变量不存在
|
|
42
|
+
*/
|
|
43
|
+
export declare function replaceEnvInString(str: string, options?: ReplaceOptions): string;
|
|
44
|
+
/**
|
|
45
|
+
* 递归替换对象中所有字符串值的环境变量
|
|
46
|
+
*
|
|
47
|
+
* @param obj - 要处理的对象
|
|
48
|
+
* @param options - 替换选项
|
|
49
|
+
* @returns 替换后的对象(会修改原对象)
|
|
50
|
+
*/
|
|
51
|
+
export declare function replaceEnvVariables<T>(obj: T, options?: ReplaceOptions): T;
|
|
52
|
+
/**
|
|
53
|
+
* 验证字符串中是否包含环境变量占位符
|
|
54
|
+
*
|
|
55
|
+
* @param str - 要检查的字符串
|
|
56
|
+
* @returns 是否包含环境变量占位符
|
|
57
|
+
*/
|
|
58
|
+
export declare function hasEnvPlaceholder(str: string): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* 提取字符串中所有的环境变量名称
|
|
61
|
+
*
|
|
62
|
+
* @param str - 要分析的字符串
|
|
63
|
+
* @returns 环境变量名称数组
|
|
64
|
+
*/
|
|
65
|
+
export declare function extractEnvVariables(str: string): string[];
|
|
66
|
+
/**
|
|
67
|
+
* 验证对象中所有必需的环境变量是否已定义
|
|
68
|
+
*
|
|
69
|
+
* @param obj - 要验证的对象
|
|
70
|
+
* @param options - 验证选项
|
|
71
|
+
* @returns 验证结果 { valid: boolean, missing: string[] }
|
|
72
|
+
*/
|
|
73
|
+
export declare function validateEnvVariables(obj: unknown, options?: ReplaceOptions): {
|
|
74
|
+
valid: boolean;
|
|
75
|
+
missing: string[];
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* 类型转换辅助函数
|
|
79
|
+
* 根据原始值的类型转换环境变量值
|
|
80
|
+
*
|
|
81
|
+
* @param value - 环境变量值(字符串)
|
|
82
|
+
* @param originalType - 原始值的类型
|
|
83
|
+
* @returns 转换后的值
|
|
84
|
+
*/
|
|
85
|
+
export declare function convertEnvValue(value: string, originalType: unknown): unknown;
|
|
86
|
+
//# sourceMappingURL=env-replacer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-replacer.d.ts","sourceRoot":"","sources":["../../../src/utils/env-replacer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,QAAQ,EAAE,MAAM;aAChB,IAAI,CAAC,EAAE,MAAM;gBAF7B,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,YAAA;CAKhC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,cAAmB,GAC3B,MAAM,CA8BR;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,CAAC,EACN,OAAO,GAAE,cAAmB,GAC3B,CAAC,CAsCH;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAUzD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,cAAmB,GAC3B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAsCvC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAgB7E"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 环境变量替换工具
|
|
3
|
+
*
|
|
4
|
+
* 支持在 JSON 配置中使用环境变量占位符:
|
|
5
|
+
* - ${VAR_NAME} - 使用环境变量,如果不存在则抛出错误
|
|
6
|
+
* - ${VAR_NAME:default} - 使用环境变量,如果不存在则使用默认值
|
|
7
|
+
*
|
|
8
|
+
* 使用示例:
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const result = replaceEnvVariables({
|
|
11
|
+
* baseUrl: "${API_BASE_URL:https://api.example.com}",
|
|
12
|
+
* token: "${API_TOKEN}"
|
|
13
|
+
* });
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
import { logger } from './logger.js';
|
|
17
|
+
/**
|
|
18
|
+
* 环境变量占位符的正则表达式
|
|
19
|
+
* 匹配格式: ${VAR_NAME} 或 ${VAR_NAME:default_value}
|
|
20
|
+
*/
|
|
21
|
+
const ENV_PATTERN = /\$\{([^}:]+)(?::([^}]*))?\}/g;
|
|
22
|
+
/**
|
|
23
|
+
* 环境变量替换错误
|
|
24
|
+
*/
|
|
25
|
+
export class EnvReplacementError extends Error {
|
|
26
|
+
variable;
|
|
27
|
+
path;
|
|
28
|
+
constructor(message, variable, path) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.variable = variable;
|
|
31
|
+
this.path = path;
|
|
32
|
+
this.name = 'EnvReplacementError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 替换字符串中的环境变量占位符
|
|
37
|
+
*
|
|
38
|
+
* @param str - 包含占位符的字符串
|
|
39
|
+
* @param options - 替换选项
|
|
40
|
+
* @returns 替换后的字符串
|
|
41
|
+
* @throws EnvReplacementError 如果必需的环境变量不存在
|
|
42
|
+
*/
|
|
43
|
+
export function replaceEnvInString(str, options = {}) {
|
|
44
|
+
const { allowUndefined = false, path = '', env = process.env } = options;
|
|
45
|
+
return str.replace(ENV_PATTERN, (match, varName, defaultValue) => {
|
|
46
|
+
const envValue = env[varName];
|
|
47
|
+
// 如果环境变量存在,直接使用
|
|
48
|
+
if (envValue !== undefined) {
|
|
49
|
+
return envValue;
|
|
50
|
+
}
|
|
51
|
+
// 如果有默认值,使用默认值
|
|
52
|
+
if (defaultValue !== undefined) {
|
|
53
|
+
logger.debug(`Using default value for ${varName}: ${defaultValue}`, { path });
|
|
54
|
+
return defaultValue;
|
|
55
|
+
}
|
|
56
|
+
// 如果允许未定义,保持原样
|
|
57
|
+
if (allowUndefined) {
|
|
58
|
+
logger.warn(`Environment variable ${varName} is not defined, keeping placeholder`, { path });
|
|
59
|
+
return match;
|
|
60
|
+
}
|
|
61
|
+
// 否则抛出错误
|
|
62
|
+
throw new EnvReplacementError(`Environment variable ${varName} is not defined and no default value provided`, varName, path);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 递归替换对象中所有字符串值的环境变量
|
|
67
|
+
*
|
|
68
|
+
* @param obj - 要处理的对象
|
|
69
|
+
* @param options - 替换选项
|
|
70
|
+
* @returns 替换后的对象(会修改原对象)
|
|
71
|
+
*/
|
|
72
|
+
export function replaceEnvVariables(obj, options = {}) {
|
|
73
|
+
if (obj === null || obj === undefined) {
|
|
74
|
+
return obj;
|
|
75
|
+
}
|
|
76
|
+
// 处理字符串
|
|
77
|
+
if (typeof obj === 'string') {
|
|
78
|
+
return replaceEnvInString(obj, options);
|
|
79
|
+
}
|
|
80
|
+
// 处理数组
|
|
81
|
+
if (Array.isArray(obj)) {
|
|
82
|
+
return obj.map((item, index) =>
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
84
|
+
replaceEnvVariables(item, {
|
|
85
|
+
...options,
|
|
86
|
+
path: options.path ? `${options.path}[${index}]` : `[${index}]`
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
// 处理对象
|
|
90
|
+
if (typeof obj === 'object') {
|
|
91
|
+
const result = { ...obj };
|
|
92
|
+
for (const key in result) {
|
|
93
|
+
if (Object.prototype.hasOwnProperty.call(result, key)) {
|
|
94
|
+
const newPath = options.path ? `${options.path}.${key}` : key;
|
|
95
|
+
result[key] = replaceEnvVariables(result[key], {
|
|
96
|
+
...options,
|
|
97
|
+
path: newPath
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
// 其他类型直接返回
|
|
104
|
+
return obj;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 验证字符串中是否包含环境变量占位符
|
|
108
|
+
*
|
|
109
|
+
* @param str - 要检查的字符串
|
|
110
|
+
* @returns 是否包含环境变量占位符
|
|
111
|
+
*/
|
|
112
|
+
export function hasEnvPlaceholder(str) {
|
|
113
|
+
return ENV_PATTERN.test(str);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 提取字符串中所有的环境变量名称
|
|
117
|
+
*
|
|
118
|
+
* @param str - 要分析的字符串
|
|
119
|
+
* @returns 环境变量名称数组
|
|
120
|
+
*/
|
|
121
|
+
export function extractEnvVariables(str) {
|
|
122
|
+
const variables = [];
|
|
123
|
+
const regex = new RegExp(ENV_PATTERN);
|
|
124
|
+
let match;
|
|
125
|
+
while ((match = regex.exec(str)) !== null) {
|
|
126
|
+
variables.push(match[1]);
|
|
127
|
+
}
|
|
128
|
+
return variables;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 验证对象中所有必需的环境变量是否已定义
|
|
132
|
+
*
|
|
133
|
+
* @param obj - 要验证的对象
|
|
134
|
+
* @param options - 验证选项
|
|
135
|
+
* @returns 验证结果 { valid: boolean, missing: string[] }
|
|
136
|
+
*/
|
|
137
|
+
export function validateEnvVariables(obj, options = {}) {
|
|
138
|
+
const { env = process.env } = options;
|
|
139
|
+
const missing = new Set();
|
|
140
|
+
function scan(value, path = '') {
|
|
141
|
+
if (typeof value === 'string') {
|
|
142
|
+
const regex = new RegExp(ENV_PATTERN);
|
|
143
|
+
let match;
|
|
144
|
+
while ((match = regex.exec(value)) !== null) {
|
|
145
|
+
const varName = match[1];
|
|
146
|
+
const hasDefault = match[2] !== undefined;
|
|
147
|
+
// 只检查没有默认值的环境变量
|
|
148
|
+
if (!hasDefault && env[varName] === undefined) {
|
|
149
|
+
missing.add(varName);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (Array.isArray(value)) {
|
|
154
|
+
value.forEach((item, index) => {
|
|
155
|
+
scan(item, path ? `${path}[${index}]` : `[${index}]`);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else if (value !== null && typeof value === 'object') {
|
|
159
|
+
for (const key in value) {
|
|
160
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
161
|
+
const newPath = path ? `${path}.${key}` : key;
|
|
162
|
+
scan(value[key], newPath);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
scan(obj);
|
|
168
|
+
return {
|
|
169
|
+
valid: missing.size === 0,
|
|
170
|
+
missing: Array.from(missing)
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* 类型转换辅助函数
|
|
175
|
+
* 根据原始值的类型转换环境变量值
|
|
176
|
+
*
|
|
177
|
+
* @param value - 环境变量值(字符串)
|
|
178
|
+
* @param originalType - 原始值的类型
|
|
179
|
+
* @returns 转换后的值
|
|
180
|
+
*/
|
|
181
|
+
export function convertEnvValue(value, originalType) {
|
|
182
|
+
// 如果原始值是数字,尝试转换为数字
|
|
183
|
+
if (typeof originalType === 'number') {
|
|
184
|
+
const num = Number(value);
|
|
185
|
+
if (!isNaN(num)) {
|
|
186
|
+
return num;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// 如果原始值是布尔值,转换为布尔值
|
|
190
|
+
if (typeof originalType === 'boolean') {
|
|
191
|
+
return value.toLowerCase() === 'true' || value === '1';
|
|
192
|
+
}
|
|
193
|
+
// 默认返回字符串
|
|
194
|
+
return value;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=env-replacer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-replacer.js","sourceRoot":"","sources":["../../../src/utils/env-replacer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 错误定义
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* MCP 错误基类
|
|
6
|
+
*/
|
|
7
|
+
export declare class McpError extends Error {
|
|
8
|
+
code: number;
|
|
9
|
+
data?: unknown | undefined;
|
|
10
|
+
constructor(message: string, code: number, data?: unknown | undefined);
|
|
11
|
+
/**
|
|
12
|
+
* 转换为 JSON-RPC 错误对象
|
|
13
|
+
*/
|
|
14
|
+
toJSON(): {
|
|
15
|
+
code: number;
|
|
16
|
+
message: string;
|
|
17
|
+
data: unknown;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 解析错误 (-32700)
|
|
22
|
+
*/
|
|
23
|
+
export declare class ParseError extends McpError {
|
|
24
|
+
constructor(message?: string, data?: unknown);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 无效请求 (-32600)
|
|
28
|
+
*/
|
|
29
|
+
export declare class InvalidRequestError extends McpError {
|
|
30
|
+
constructor(message?: string, data?: unknown);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 方法不存在 (-32601)
|
|
34
|
+
*/
|
|
35
|
+
export declare class MethodNotFoundError extends McpError {
|
|
36
|
+
constructor(message?: string, data?: unknown);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 无效参数 (-32602)
|
|
40
|
+
*/
|
|
41
|
+
export declare class InvalidParamsError extends McpError {
|
|
42
|
+
constructor(message?: string, data?: unknown);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 内部错误 (-32603)
|
|
46
|
+
*/
|
|
47
|
+
export declare class InternalError extends McpError {
|
|
48
|
+
constructor(message?: string, data?: unknown);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 工具不存在错误 (-32000)
|
|
52
|
+
*/
|
|
53
|
+
export declare class ToolNotFoundError extends McpError {
|
|
54
|
+
constructor(toolName: string);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 工具执行错误 (-32001)
|
|
58
|
+
*/
|
|
59
|
+
export declare class ToolExecutionError extends McpError {
|
|
60
|
+
constructor(toolName: string, originalError: Error);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Schema 验证错误 (-32002)
|
|
64
|
+
*/
|
|
65
|
+
export declare class SchemaValidationError extends McpError {
|
|
66
|
+
constructor(message: string, errors: unknown);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 会话不存在错误 (-32003)
|
|
70
|
+
*/
|
|
71
|
+
export declare class SessionNotFoundError extends McpError {
|
|
72
|
+
constructor(sessionId: string);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 会话超时错误 (-32004)
|
|
76
|
+
*/
|
|
77
|
+
export declare class SessionTimeoutError extends McpError {
|
|
78
|
+
constructor(sessionId: string);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 工具注册错误 (-32005)
|
|
82
|
+
*/
|
|
83
|
+
export declare class ToolRegistrationError extends McpError {
|
|
84
|
+
constructor(message: string, data?: unknown);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 配置错误 (-32006)
|
|
88
|
+
*/
|
|
89
|
+
export declare class ConfigurationError extends McpError {
|
|
90
|
+
constructor(message: string, data?: unknown);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 速率限制错误 (-32007)
|
|
94
|
+
*/
|
|
95
|
+
export declare class RateLimitError extends McpError {
|
|
96
|
+
constructor(message?: string, data?: unknown);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 将任意错误转换为 McpError
|
|
100
|
+
*/
|
|
101
|
+
export declare function toMcpError(error: unknown): McpError;
|
|
102
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAGxB,IAAI,EAAE,MAAM;IACZ,IAAI,CAAC,EAAE,OAAO;gBAFrB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,YAAA;IAOvB;;OAEG;IACH,MAAM;;;;;CAOP;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,QAAQ;gBAC1B,OAAO,SAAgB,EAAE,IAAI,CAAC,EAAE,OAAO;CAIpD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,SAAoB,EAAE,IAAI,CAAC,EAAE,OAAO;CAIxD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,SAAqB,EAAE,IAAI,CAAC,EAAE,OAAO;CAIzD;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,SAAmB,EAAE,IAAI,CAAC,EAAE,OAAO;CAIvD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,SAAmB,EAAE,IAAI,CAAC,EAAE,OAAO;CAIvD;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,QAAQ,EAAE,MAAM;CAI7B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK;CAYnD;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CAI7C;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,SAAS,EAAE,MAAM;CAI9B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,SAAS,EAAE,MAAM;CAI9B;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;CAI5C;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;CAI5C;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,SAAwB,EAAE,IAAI,CAAC,EAAE,OAAO;CAI5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAanD"}
|