@kelvinjhu/lexiang-search 1.0.0 → 1.0.2
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/README.md +48 -183
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -9
- package/dist/cli.js.map +1 -1
- package/dist/constants/api.constants.d.ts.map +1 -1
- package/dist/constants/api.constants.js +17 -15
- package/dist/constants/api.constants.js.map +1 -1
- package/dist/dto/ai-qa-request.dto.d.ts +8 -9
- package/dist/dto/ai-qa-request.dto.d.ts.map +1 -1
- package/dist/dto/ai-qa-request.dto.js +49 -62
- package/dist/dto/ai-qa-request.dto.js.map +1 -1
- package/dist/dto/ai-qa-response.dto.d.ts.map +1 -1
- package/dist/dto/ai-qa-response.dto.js +16 -20
- package/dist/dto/ai-qa-response.dto.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -7
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +57 -32
- package/dist/server.js.map +1 -1
- package/dist/services/ai-qa.service.d.ts +12 -3
- package/dist/services/ai-qa.service.d.ts.map +1 -1
- package/dist/services/ai-qa.service.js +60 -34
- package/dist/services/ai-qa.service.js.map +1 -1
- package/dist/services/lexiang-api.service.d.ts +6 -2
- package/dist/services/lexiang-api.service.d.ts.map +1 -1
- package/dist/services/lexiang-api.service.js +76 -57
- package/dist/services/lexiang-api.service.js.map +1 -1
- package/dist/tools/ai-qa-stream.tool.d.ts +1 -9
- package/dist/tools/ai-qa-stream.tool.d.ts.map +1 -1
- package/dist/tools/ai-qa-stream.tool.js +36 -71
- package/dist/tools/ai-qa-stream.tool.js.map +1 -1
- package/dist/tools/ai-qa.tool.d.ts +1 -9
- package/dist/tools/ai-qa.tool.d.ts.map +1 -1
- package/dist/tools/ai-qa.tool.js +11 -23
- package/dist/tools/ai-qa.tool.js.map +1 -1
- package/dist/types/lexiang-api.types.js +1 -2
- package/dist/types/lexiang-api.types.js.map +1 -1
- package/dist/types/mcp.types.js +1 -2
- package/dist/types/mcp.types.js.map +1 -1
- package/dist/utils/error-handler.d.ts +37 -32
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +46 -79
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +6 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/validator.d.ts +4 -15
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +17 -66
- package/dist/utils/validator.js.map +1 -1
- package/package.json +6 -5
|
@@ -1,45 +1,50 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 错误处理工具
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
details?: Record<string, unknown> | undefined;
|
|
16
|
-
constructor(code: ErrorCode, message: string, details?: Record<string, unknown> | undefined);
|
|
17
|
-
toJSON(): Record<string, unknown>;
|
|
18
|
-
}
|
|
19
|
-
export declare class ValidationError extends McpError {
|
|
20
|
-
constructor(message: string, details?: Record<string, unknown>);
|
|
21
|
-
}
|
|
22
|
-
export declare class TokenError extends McpError {
|
|
23
|
-
constructor(message: string, details?: Record<string, unknown>);
|
|
4
|
+
/**
|
|
5
|
+
* 基础错误类
|
|
6
|
+
*/
|
|
7
|
+
export declare class BaseError extends Error {
|
|
8
|
+
readonly meta?: Record<string, unknown> | undefined;
|
|
9
|
+
constructor(message: string, meta?: Record<string, unknown> | undefined);
|
|
10
|
+
toJSON(): {
|
|
11
|
+
error: string;
|
|
12
|
+
message: string;
|
|
13
|
+
meta: Record<string, unknown> | undefined;
|
|
14
|
+
};
|
|
24
15
|
}
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
/**
|
|
17
|
+
* 验证错误
|
|
18
|
+
*/
|
|
19
|
+
export declare class ValidationError extends BaseError {
|
|
20
|
+
constructor(message: string, meta?: Record<string, unknown>);
|
|
27
21
|
}
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Token错误
|
|
24
|
+
*/
|
|
25
|
+
export declare class TokenError extends BaseError {
|
|
26
|
+
constructor(message: string, meta?: Record<string, unknown>);
|
|
30
27
|
}
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
/**
|
|
29
|
+
* API错误
|
|
30
|
+
*/
|
|
31
|
+
export declare class ApiError extends BaseError {
|
|
32
|
+
constructor(message: string, meta?: Record<string, unknown>);
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
/**
|
|
35
|
+
* 网络错误
|
|
36
|
+
*/
|
|
37
|
+
export declare class NetworkError extends BaseError {
|
|
38
|
+
constructor(message: string, meta?: Record<string, unknown>);
|
|
36
39
|
}
|
|
37
40
|
/**
|
|
38
|
-
*
|
|
41
|
+
* 超时错误
|
|
39
42
|
*/
|
|
40
|
-
export declare
|
|
43
|
+
export declare class TimeoutError extends BaseError {
|
|
44
|
+
constructor(message: string, meta?: Record<string, unknown>);
|
|
45
|
+
}
|
|
41
46
|
/**
|
|
42
|
-
*
|
|
47
|
+
* 统一错误处理
|
|
43
48
|
*/
|
|
44
|
-
export declare function
|
|
49
|
+
export declare function handleError(error: unknown): BaseError;
|
|
45
50
|
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;aACW,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAA/D,OAAO,EAAE,MAAM,EAAkB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;IAM3E,MAAM;;;;;CAOP;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG5D;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,SAAS;gBAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG5D;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,SAAS;gBACzB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG5D;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,SAAS;gBAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG5D;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,SAAS;gBAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAUrD"}
|
|
@@ -1,108 +1,75 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* 错误处理工具
|
|
4
3
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
(function (ErrorCode) {
|
|
12
|
-
ErrorCode["INVALID_PARAMS"] = "INVALID_PARAMS";
|
|
13
|
-
ErrorCode["TOKEN_ERROR"] = "TOKEN_ERROR";
|
|
14
|
-
ErrorCode["API_ERROR"] = "API_ERROR";
|
|
15
|
-
ErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
16
|
-
ErrorCode["TIMEOUT_ERROR"] = "TIMEOUT_ERROR";
|
|
17
|
-
ErrorCode["STREAM_ERROR"] = "STREAM_ERROR";
|
|
18
|
-
ErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
|
19
|
-
})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
|
|
20
|
-
class McpError extends Error {
|
|
21
|
-
code;
|
|
22
|
-
details;
|
|
23
|
-
constructor(code, message, details) {
|
|
4
|
+
/**
|
|
5
|
+
* 基础错误类
|
|
6
|
+
*/
|
|
7
|
+
export class BaseError extends Error {
|
|
8
|
+
meta;
|
|
9
|
+
constructor(message, meta) {
|
|
24
10
|
super(message);
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
11
|
+
this.meta = meta;
|
|
12
|
+
this.name = this.constructor.name;
|
|
13
|
+
Error.captureStackTrace(this, this.constructor);
|
|
28
14
|
}
|
|
29
15
|
toJSON() {
|
|
30
16
|
return {
|
|
31
|
-
|
|
17
|
+
error: this.name,
|
|
32
18
|
message: this.message,
|
|
33
|
-
|
|
19
|
+
meta: this.meta,
|
|
34
20
|
};
|
|
35
21
|
}
|
|
36
22
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
exports.ValidationError = ValidationError;
|
|
45
|
-
class TokenError extends McpError {
|
|
46
|
-
constructor(message, details) {
|
|
47
|
-
super(ErrorCode.TOKEN_ERROR, message, details);
|
|
48
|
-
this.name = 'TokenError';
|
|
23
|
+
/**
|
|
24
|
+
* 验证错误
|
|
25
|
+
*/
|
|
26
|
+
export class ValidationError extends BaseError {
|
|
27
|
+
constructor(message, meta) {
|
|
28
|
+
super(message, meta);
|
|
49
29
|
}
|
|
50
30
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Token错误
|
|
33
|
+
*/
|
|
34
|
+
export class TokenError extends BaseError {
|
|
35
|
+
constructor(message, meta) {
|
|
36
|
+
super(message, meta);
|
|
56
37
|
}
|
|
57
38
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
39
|
+
/**
|
|
40
|
+
* API错误
|
|
41
|
+
*/
|
|
42
|
+
export class ApiError extends BaseError {
|
|
43
|
+
constructor(message, meta) {
|
|
44
|
+
super(message, meta);
|
|
63
45
|
}
|
|
64
46
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
47
|
+
/**
|
|
48
|
+
* 网络错误
|
|
49
|
+
*/
|
|
50
|
+
export class NetworkError extends BaseError {
|
|
51
|
+
constructor(message, meta) {
|
|
52
|
+
super(message, meta);
|
|
70
53
|
}
|
|
71
54
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
55
|
+
/**
|
|
56
|
+
* 超时错误
|
|
57
|
+
*/
|
|
58
|
+
export class TimeoutError extends BaseError {
|
|
59
|
+
constructor(message, meta) {
|
|
60
|
+
super(message, meta);
|
|
77
61
|
}
|
|
78
62
|
}
|
|
79
|
-
exports.StreamError = StreamError;
|
|
80
63
|
/**
|
|
81
|
-
*
|
|
64
|
+
* 统一错误处理
|
|
82
65
|
*/
|
|
83
|
-
function handleError(error) {
|
|
84
|
-
if (error instanceof
|
|
85
|
-
logger_1.logger.error('MCP Error', { code: error.code, message: error.message, details: error.details });
|
|
66
|
+
export function handleError(error) {
|
|
67
|
+
if (error instanceof BaseError) {
|
|
86
68
|
return error;
|
|
87
69
|
}
|
|
88
70
|
if (error instanceof Error) {
|
|
89
|
-
|
|
90
|
-
return new McpError(ErrorCode.UNKNOWN_ERROR, error.message);
|
|
71
|
+
return new BaseError(error.message, { stack: error.stack });
|
|
91
72
|
}
|
|
92
|
-
|
|
93
|
-
return new McpError(ErrorCode.UNKNOWN_ERROR, 'Unknown error occurred');
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* 异步错误处理包装器
|
|
97
|
-
*/
|
|
98
|
-
function asyncHandler(fn) {
|
|
99
|
-
return async (...args) => {
|
|
100
|
-
try {
|
|
101
|
-
return await fn(...args);
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
throw handleError(error);
|
|
105
|
-
}
|
|
106
|
-
};
|
|
73
|
+
return new BaseError('Unknown error', { error });
|
|
107
74
|
}
|
|
108
75
|
//# sourceMappingURL=error-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACW;IAA7C,YAAY,OAAe,EAAkB,IAA8B;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,SAAI,GAAJ,IAAI,CAA0B;QAEzE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC5C,YAAY,OAAe,EAAE,IAA8B;QACzD,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,SAAS;IACvC,YAAY,OAAe,EAAE,IAA8B;QACzD,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,SAAS;IACrC,YAAY,OAAe,EAAE,IAA8B;QACzD,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,SAAS;IACzC,YAAY,OAAe,EAAE,IAA8B;QACzD,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,SAAS;IACzC,YAAY,OAAe,EAAE,IAA8B;QACzD,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,SAAS,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAAW;;IAOxB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,MAAM;IAMd,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAK7D;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* 日志工具
|
|
3
|
+
* 注意:MCP服务器使用Stdio通信,所有日志必须输出到stderr,严禁使用stdout (console.log)
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
exports.logger = exports.LogLevel = void 0;
|
|
7
|
-
var LogLevel;
|
|
5
|
+
export var LogLevel;
|
|
8
6
|
(function (LogLevel) {
|
|
9
7
|
LogLevel["ERROR"] = "ERROR";
|
|
10
8
|
LogLevel["WARN"] = "WARN";
|
|
11
9
|
LogLevel["INFO"] = "INFO";
|
|
12
10
|
LogLevel["DEBUG"] = "DEBUG";
|
|
13
|
-
})(LogLevel || (
|
|
11
|
+
})(LogLevel || (LogLevel = {}));
|
|
14
12
|
class Logger {
|
|
15
13
|
level;
|
|
16
14
|
constructor() {
|
|
@@ -38,14 +36,14 @@ class Logger {
|
|
|
38
36
|
}
|
|
39
37
|
info(message, meta) {
|
|
40
38
|
if (this.shouldLog(LogLevel.INFO)) {
|
|
41
|
-
console.
|
|
39
|
+
console.error(this.format(LogLevel.INFO, message, meta));
|
|
42
40
|
}
|
|
43
41
|
}
|
|
44
42
|
debug(message, meta) {
|
|
45
43
|
if (this.shouldLog(LogLevel.DEBUG)) {
|
|
46
|
-
console.
|
|
44
|
+
console.error(this.format(LogLevel.DEBUG, message, meta));
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
47
|
}
|
|
50
|
-
|
|
48
|
+
export const logger = new Logger();
|
|
51
49
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,MAAM;IACF,KAAK,CAAW;IAExB;QACE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAc,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrF,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAEO,MAAM,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;QAC7E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,SAAS,MAAM,KAAK,KAAK,OAAO,GAAG,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -1,20 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 数据验证工具
|
|
3
3
|
*/
|
|
4
|
+
import { ClassConstructor } from 'class-transformer';
|
|
4
5
|
/**
|
|
5
|
-
*
|
|
6
|
+
* 验证DTO
|
|
6
7
|
*/
|
|
7
|
-
export declare function validateDto<T extends object>(
|
|
8
|
-
/**
|
|
9
|
-
* 校验字符串长度
|
|
10
|
-
*/
|
|
11
|
-
export declare function validateStringLength(value: string, min: number, max: number): void;
|
|
12
|
-
/**
|
|
13
|
-
* 校验枚举值
|
|
14
|
-
*/
|
|
15
|
-
export declare function validateEnum<T extends string>(value: string, enumValues: readonly T[], enumName: string): void;
|
|
16
|
-
/**
|
|
17
|
-
* 校验数组长度
|
|
18
|
-
*/
|
|
19
|
-
export declare function validateArrayLength<T>(array: T[], min: number, max: number, itemName: string): void;
|
|
8
|
+
export declare function validateDto<T extends object>(cls: ClassConstructor<T>, plain: unknown): Promise<T>;
|
|
20
9
|
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAmB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAItE;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,SAAS,MAAM,EAChD,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EACxB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
|
package/dist/utils/validator.js
CHANGED
|
@@ -1,76 +1,27 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
2
|
+
* 数据验证工具
|
|
4
3
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exports.validateArrayLength = validateArrayLength;
|
|
10
|
-
const class_validator_1 = require("class-validator");
|
|
11
|
-
const class_transformer_1 = require("class-transformer");
|
|
12
|
-
const error_handler_1 = require("./error-handler");
|
|
4
|
+
import { validate } from 'class-validator';
|
|
5
|
+
import { plainToInstance } from 'class-transformer';
|
|
6
|
+
import { ValidationError as CustomValidationError } from './error-handler.js';
|
|
7
|
+
import { logger } from './logger.js';
|
|
13
8
|
/**
|
|
14
|
-
*
|
|
9
|
+
* 验证DTO
|
|
15
10
|
*/
|
|
16
|
-
async function validateDto(
|
|
17
|
-
if (
|
|
18
|
-
throw new
|
|
11
|
+
export async function validateDto(cls, plain) {
|
|
12
|
+
if (typeof plain !== 'object' || plain === null) {
|
|
13
|
+
throw new CustomValidationError('Invalid input: expected object');
|
|
19
14
|
}
|
|
20
|
-
const
|
|
21
|
-
const errors = await
|
|
15
|
+
const object = plainToInstance(cls, plain);
|
|
16
|
+
const errors = await validate(object);
|
|
22
17
|
if (errors.length > 0) {
|
|
23
|
-
const
|
|
24
|
-
.
|
|
25
|
-
const constraints = error.constraints;
|
|
26
|
-
return Object.values(constraints || {}).join(', ');
|
|
27
|
-
})
|
|
28
|
-
.filter(Boolean)
|
|
29
|
-
.join('; ');
|
|
30
|
-
throw new error_handler_1.ValidationError('Validation failed', {
|
|
31
|
-
errors: errors.map((e) => ({
|
|
32
|
-
property: e.property,
|
|
33
|
-
constraints: e.constraints,
|
|
34
|
-
})),
|
|
35
|
-
message: errorMessages,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
return dto;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 校验字符串长度
|
|
42
|
-
*/
|
|
43
|
-
function validateStringLength(value, min, max) {
|
|
44
|
-
if (value.length < min || value.length > max) {
|
|
45
|
-
throw new error_handler_1.ValidationError(`String length must be between ${min} and ${max}`, {
|
|
46
|
-
value,
|
|
47
|
-
length: value.length,
|
|
48
|
-
min,
|
|
49
|
-
max,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* 校验枚举值
|
|
55
|
-
*/
|
|
56
|
-
function validateEnum(value, enumValues, enumName) {
|
|
57
|
-
if (!enumValues.includes(value)) {
|
|
58
|
-
throw new error_handler_1.ValidationError(`Invalid ${enumName}`, {
|
|
59
|
-
value,
|
|
60
|
-
allowed: enumValues,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* 校验数组长度
|
|
66
|
-
*/
|
|
67
|
-
function validateArrayLength(array, min, max, itemName) {
|
|
68
|
-
if (array.length < min || array.length > max) {
|
|
69
|
-
throw new error_handler_1.ValidationError(`${itemName} length must be between ${min} and ${max}`, {
|
|
70
|
-
length: array.length,
|
|
71
|
-
min,
|
|
72
|
-
max,
|
|
18
|
+
const messages = errors.map((error) => {
|
|
19
|
+
return Object.values(error.constraints || {}).join(', ');
|
|
73
20
|
});
|
|
21
|
+
const message = `Validation failed: ${messages.join('; ')}`;
|
|
22
|
+
logger.warn('Validation failed', { errors: messages });
|
|
23
|
+
throw new CustomValidationError(message, { errors: messages });
|
|
74
24
|
}
|
|
25
|
+
return object;
|
|
75
26
|
}
|
|
76
27
|
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAA0C,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAwB,EACxB,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,qBAAqB,CAAC,gCAAgC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAA0B,EAAE,EAAE;YACzD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,sBAAsB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEvD,MAAM,IAAI,qBAAqB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kelvinjhu/lexiang-search",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "乐享知识库AI问答MCP服务器",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
7
8
|
"bin": {
|
|
@@ -14,7 +15,7 @@
|
|
|
14
15
|
"scripts": {
|
|
15
16
|
"build": "tsc",
|
|
16
17
|
"start": "node dist/cli.js",
|
|
17
|
-
"dev": "ts-node src/index.ts",
|
|
18
|
+
"dev": "node --loader ts-node/esm src/index.ts",
|
|
18
19
|
"test": "jest",
|
|
19
20
|
"test:watch": "jest --watch",
|
|
20
21
|
"lint": "eslint src --ext .ts",
|
|
@@ -34,10 +35,11 @@
|
|
|
34
35
|
"node": ">=18.0.0"
|
|
35
36
|
},
|
|
36
37
|
"dependencies": {
|
|
37
|
-
"@modelcontextprotocol/sdk": "^1.0.
|
|
38
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
38
39
|
"axios": "^1.7.9",
|
|
39
40
|
"class-transformer": "^0.5.1",
|
|
40
|
-
"class-validator": "^0.14.1"
|
|
41
|
+
"class-validator": "^0.14.1",
|
|
42
|
+
"reflect-metadata": "^0.2.2"
|
|
41
43
|
},
|
|
42
44
|
"devDependencies": {
|
|
43
45
|
"@types/node": "^22.10.2",
|
|
@@ -45,7 +47,6 @@
|
|
|
45
47
|
"@typescript-eslint/parser": "^8.18.2",
|
|
46
48
|
"eslint": "^9.17.0",
|
|
47
49
|
"jest": "^29.7.0",
|
|
48
|
-
"reflect-metadata": "^0.2.2",
|
|
49
50
|
"ts-jest": "^29.2.5",
|
|
50
51
|
"ts-node": "^10.9.2",
|
|
51
52
|
"typescript": "^5.7.2"
|