@leeguoo/yapi-mcp 0.1.4

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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +299 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +32 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/config.d.ts +22 -0
  7. package/dist/config.js +174 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +5 -0
  10. package/dist/index.js +58 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/server.d.ts +21 -0
  13. package/dist/server.js +847 -0
  14. package/dist/server.js.map +1 -0
  15. package/dist/services/yapi/api.d.ts +56 -0
  16. package/dist/services/yapi/api.js +432 -0
  17. package/dist/services/yapi/api.js.map +1 -0
  18. package/dist/services/yapi/auth.d.ts +24 -0
  19. package/dist/services/yapi/auth.js +239 -0
  20. package/dist/services/yapi/auth.js.map +1 -0
  21. package/dist/services/yapi/authCache.d.ts +29 -0
  22. package/dist/services/yapi/authCache.js +172 -0
  23. package/dist/services/yapi/authCache.js.map +1 -0
  24. package/dist/services/yapi/cache.d.ts +14 -0
  25. package/dist/services/yapi/cache.js +232 -0
  26. package/dist/services/yapi/cache.js.map +1 -0
  27. package/dist/services/yapi/logger.d.ts +17 -0
  28. package/dist/services/yapi/logger.js +61 -0
  29. package/dist/services/yapi/logger.js.map +1 -0
  30. package/dist/services/yapi/types.d.ts +102 -0
  31. package/dist/services/yapi/types.js +3 -0
  32. package/dist/services/yapi/types.js.map +1 -0
  33. package/dist/services/yapi.d.ts +28 -0
  34. package/dist/services/yapi.js +84 -0
  35. package/dist/services/yapi.js.map +1 -0
  36. package/dist/skill/install.d.ts +1 -0
  37. package/dist/skill/install.js +724 -0
  38. package/dist/skill/install.js.map +1 -0
  39. package/dist/yapi-cli.d.ts +2 -0
  40. package/dist/yapi-cli.js +592 -0
  41. package/dist/yapi-cli.js.map +1 -0
  42. package/package.json +77 -0
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.ProjectInfoCache = void 0;
40
+ const fs = __importStar(require("fs"));
41
+ const os = __importStar(require("os"));
42
+ const path = __importStar(require("path"));
43
+ const crypto_1 = __importDefault(require("crypto"));
44
+ const logger_1 = require("./logger");
45
+ function hashBaseUrl(baseUrl) {
46
+ return crypto_1.default.createHash("sha256").update(baseUrl).digest("hex").slice(0, 16);
47
+ }
48
+ function ensureDirSecure(dirPath) {
49
+ try {
50
+ if (!fs.existsSync(dirPath)) {
51
+ fs.mkdirSync(dirPath, { recursive: true, mode: 0o700 });
52
+ }
53
+ try {
54
+ fs.chmodSync(dirPath, 0o700);
55
+ }
56
+ catch {
57
+ }
58
+ }
59
+ catch {
60
+ }
61
+ }
62
+ function writeFileAtomicSync(filePath, content, options) {
63
+ const dir = path.dirname(filePath);
64
+ const tmpPath = path.join(dir, `.${path.basename(filePath)}.${process.pid}.${Date.now()}.tmp`);
65
+ try {
66
+ fs.writeFileSync(tmpPath, content, { encoding: "utf8", mode: options.mode });
67
+ try {
68
+ fs.renameSync(tmpPath, filePath);
69
+ }
70
+ catch (e) {
71
+ try {
72
+ if (fs.existsSync(filePath))
73
+ fs.unlinkSync(filePath);
74
+ fs.renameSync(tmpPath, filePath);
75
+ }
76
+ catch {
77
+ throw e;
78
+ }
79
+ }
80
+ try {
81
+ fs.chmodSync(filePath, options.mode);
82
+ }
83
+ catch {
84
+ }
85
+ }
86
+ finally {
87
+ try {
88
+ if (fs.existsSync(tmpPath))
89
+ fs.unlinkSync(tmpPath);
90
+ }
91
+ catch {
92
+ }
93
+ }
94
+ }
95
+ class ProjectInfoCache {
96
+ cacheFilePath;
97
+ logger;
98
+ cacheTTLMinutes;
99
+ lastCacheMtimeMs = null;
100
+ lastCacheData = null;
101
+ constructor(baseUrl, cacheTTLMinutes = 10, logLevel = "info") {
102
+ const normalizedBaseUrl = String(baseUrl || "").replace(/\/+$/, "");
103
+ const cacheDir = path.join(os.homedir(), ".yapi-mcp");
104
+ ensureDirSecure(cacheDir);
105
+ const suffix = normalizedBaseUrl ? `-${hashBaseUrl(normalizedBaseUrl)}` : "";
106
+ this.cacheFilePath = path.join(cacheDir, `project-info${suffix}.json`);
107
+ this.logger = new logger_1.Logger("YApi Cache", logLevel);
108
+ this.cacheTTLMinutes = cacheTTLMinutes;
109
+ }
110
+ readCacheData() {
111
+ try {
112
+ if (!fs.existsSync(this.cacheFilePath)) {
113
+ this.lastCacheMtimeMs = null;
114
+ this.lastCacheData = null;
115
+ return null;
116
+ }
117
+ const stat = fs.statSync(this.cacheFilePath);
118
+ const mtimeMs = stat.mtimeMs;
119
+ if (this.lastCacheData && this.lastCacheMtimeMs === mtimeMs)
120
+ return this.lastCacheData;
121
+ const cacheContent = fs.readFileSync(this.cacheFilePath, "utf8");
122
+ const parsed = JSON.parse(cacheContent);
123
+ if (!parsed || !parsed.timestamp || !parsed.data)
124
+ return null;
125
+ this.lastCacheMtimeMs = mtimeMs;
126
+ this.lastCacheData = parsed;
127
+ return parsed;
128
+ }
129
+ catch (error) {
130
+ this.logger.error("读取项目信息缓存失败:", error);
131
+ this.lastCacheMtimeMs = null;
132
+ this.lastCacheData = null;
133
+ return null;
134
+ }
135
+ }
136
+ clearCache() {
137
+ try {
138
+ if (fs.existsSync(this.cacheFilePath)) {
139
+ fs.unlinkSync(this.cacheFilePath);
140
+ this.lastCacheMtimeMs = null;
141
+ this.lastCacheData = null;
142
+ this.logger.info(`已清除YApi项目信息缓存: ${this.cacheFilePath}`);
143
+ }
144
+ }
145
+ catch (error) {
146
+ this.logger.error('清除YApi项目信息缓存失败:', error);
147
+ }
148
+ }
149
+ saveToCache(projectInfo) {
150
+ try {
151
+ const cacheObject = {};
152
+ projectInfo.forEach((info, id) => {
153
+ cacheObject[id] = info;
154
+ });
155
+ const cacheData = {
156
+ version: 1,
157
+ timestamp: Date.now(),
158
+ data: cacheObject
159
+ };
160
+ writeFileAtomicSync(this.cacheFilePath, JSON.stringify(cacheData, null, 2), { mode: 0o600 });
161
+ this.lastCacheData = cacheData;
162
+ try {
163
+ this.lastCacheMtimeMs = fs.statSync(this.cacheFilePath).mtimeMs;
164
+ }
165
+ catch {
166
+ this.lastCacheMtimeMs = null;
167
+ }
168
+ this.logger.info(`项目信息已缓存到: ${this.cacheFilePath}`);
169
+ }
170
+ catch (error) {
171
+ this.logger.error('保存项目信息缓存失败:', error);
172
+ }
173
+ }
174
+ isCacheExpired() {
175
+ try {
176
+ const cacheData = this.readCacheData();
177
+ if (!cacheData) {
178
+ this.logger.debug('缓存文件不存在,视为已过期');
179
+ return true;
180
+ }
181
+ if (!cacheData || !cacheData.timestamp) {
182
+ this.logger.debug('缓存文件格式无效,视为已过期');
183
+ return true;
184
+ }
185
+ const expirationTime = cacheData.timestamp + (this.cacheTTLMinutes * 60 * 1000);
186
+ const currentTime = Date.now();
187
+ const isExpired = currentTime > expirationTime;
188
+ if (isExpired) {
189
+ this.logger.debug(`缓存已过期,生成时间: ${new Date(cacheData.timestamp).toLocaleString()}, 有效期: ${this.cacheTTLMinutes} 分钟`);
190
+ }
191
+ else {
192
+ const remainingMinutes = Math.floor((expirationTime - currentTime) / (60 * 1000));
193
+ this.logger.debug(`缓存有效,剩余时间: ${remainingMinutes} 分钟`);
194
+ }
195
+ return isExpired;
196
+ }
197
+ catch (error) {
198
+ this.logger.error('检查缓存过期时出错:', error);
199
+ return true;
200
+ }
201
+ }
202
+ loadFromCache() {
203
+ const projectInfoMap = new Map();
204
+ try {
205
+ const cacheData = this.readCacheData();
206
+ if (cacheData) {
207
+ if (this.isCacheExpired()) {
208
+ this.logger.info('项目信息缓存已过期,将使用空缓存并在后台异步更新');
209
+ return projectInfoMap;
210
+ }
211
+ if (cacheData && cacheData.data) {
212
+ Object.entries(cacheData.data).forEach(([id, info]) => {
213
+ projectInfoMap.set(id, info);
214
+ });
215
+ this.logger.info(`已从缓存加载 ${projectInfoMap.size} 个项目信息,缓存生成时间: ${new Date(cacheData.timestamp).toLocaleString()}`);
216
+ }
217
+ else {
218
+ this.logger.warn('项目信息缓存文件格式无效');
219
+ }
220
+ }
221
+ else {
222
+ this.logger.info('项目信息缓存文件不存在,将创建新缓存');
223
+ }
224
+ }
225
+ catch (error) {
226
+ this.logger.error('加载项目信息缓存失败:', error);
227
+ }
228
+ return projectInfoMap;
229
+ }
230
+ }
231
+ exports.ProjectInfoCache = ProjectInfoCache;
232
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/services/yapi/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare enum LogLevel {
2
+ DEBUG = 0,
3
+ INFO = 1,
4
+ WARN = 2,
5
+ ERROR = 3,
6
+ NONE = 4
7
+ }
8
+ export declare class Logger {
9
+ private readonly prefix;
10
+ private readonly logLevel;
11
+ private readonly isStdioMode;
12
+ constructor(prefix: string, logLevel?: LogLevel | string);
13
+ debug(message: string, ...args: any[]): void;
14
+ info(message: string, ...args: any[]): void;
15
+ warn(message: string, ...args: any[]): void;
16
+ error(message: string, ...args: any[]): void;
17
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = exports.LogLevel = void 0;
4
+ var LogLevel;
5
+ (function (LogLevel) {
6
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
7
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
8
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
9
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
10
+ LogLevel[LogLevel["NONE"] = 4] = "NONE";
11
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
12
+ function getLogLevel(level) {
13
+ switch (level.toLowerCase()) {
14
+ case 'debug':
15
+ return LogLevel.DEBUG;
16
+ case 'info':
17
+ return LogLevel.INFO;
18
+ case 'warn':
19
+ return LogLevel.WARN;
20
+ case 'error':
21
+ return LogLevel.ERROR;
22
+ case 'none':
23
+ return LogLevel.NONE;
24
+ default:
25
+ return LogLevel.INFO;
26
+ }
27
+ }
28
+ class Logger {
29
+ prefix;
30
+ logLevel;
31
+ isStdioMode;
32
+ constructor(prefix, logLevel = LogLevel.INFO) {
33
+ this.prefix = prefix;
34
+ this.logLevel = typeof logLevel === 'string' ? getLogLevel(logLevel) : logLevel;
35
+ this.isStdioMode = process.env.NODE_ENV === "cli" || process.argv.includes("--stdio");
36
+ }
37
+ debug(message, ...args) {
38
+ if (this.logLevel <= LogLevel.DEBUG) {
39
+ const logMethod = this.isStdioMode ? console.warn : console.log;
40
+ logMethod(`[DEBUG][${this.prefix}] ${message}`, ...args);
41
+ }
42
+ }
43
+ info(message, ...args) {
44
+ if (this.logLevel <= LogLevel.INFO) {
45
+ const logMethod = this.isStdioMode ? console.warn : console.log;
46
+ logMethod(`[INFO][${this.prefix}] ${message}`, ...args);
47
+ }
48
+ }
49
+ warn(message, ...args) {
50
+ if (this.logLevel <= LogLevel.WARN) {
51
+ console.warn(`[WARN][${this.prefix}] ${message}`, ...args);
52
+ }
53
+ }
54
+ error(message, ...args) {
55
+ if (this.logLevel <= LogLevel.ERROR) {
56
+ console.error(`[ERROR][${this.prefix}] ${message}`, ...args);
57
+ }
58
+ }
59
+ }
60
+ exports.Logger = Logger;
61
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/services/yapi/logger.ts"],"names":[],"mappings":";;;AAGA,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,uCAAQ,CAAA;AACV,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB;AAOD,SAAS,WAAW,CAAC,KAAa;IAChC,QAAQ,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB;YACE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAKD,MAAa,MAAM;IACA,MAAM,CAAS;IACf,QAAQ,CAAW;IACnB,WAAW,CAAU;IAEtC,YAAY,MAAc,EAAE,WAA8B,QAAQ,CAAC,IAAI;QACrE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEhF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACxF,CAAC;IAOD,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QACnC,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YAChE,SAAS,CAAC,WAAW,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAOD,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QAClC,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YAChE,SAAS,CAAC,UAAU,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAOD,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QAClC,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAOD,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QACnC,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;CACF;AA3DD,wBA2DC"}
@@ -0,0 +1,102 @@
1
+ export interface ApiInterface {
2
+ _id: string;
3
+ project_id?: number | string;
4
+ catid?: string;
5
+ status?: string;
6
+ tag?: string[];
7
+ title: string;
8
+ path: string;
9
+ method: string;
10
+ req_params: any[];
11
+ req_body_form: any[];
12
+ req_headers: any[];
13
+ req_query: any[];
14
+ req_body_type: string;
15
+ req_body_other: string;
16
+ req_body_is_json_schema?: boolean;
17
+ res_body_type: string;
18
+ res_body: string;
19
+ res_body_is_json_schema?: boolean;
20
+ switch_notice?: boolean;
21
+ api_opened?: boolean;
22
+ desc: string;
23
+ markdown: string;
24
+ message?: string;
25
+ }
26
+ export interface SaveApiInterfaceParams {
27
+ id?: string;
28
+ catid: string;
29
+ token?: string;
30
+ method: string;
31
+ path: string;
32
+ title: string;
33
+ project_id: string;
34
+ req_params?: any[];
35
+ req_headers?: any[];
36
+ req_query?: any[];
37
+ req_body_type?: string;
38
+ req_body_form?: any[];
39
+ req_body_other?: string;
40
+ req_body_is_json_schema?: boolean;
41
+ res_body_type?: string;
42
+ res_body?: string;
43
+ res_body_is_json_schema?: boolean;
44
+ desc?: string;
45
+ markdown?: string;
46
+ switch_notice?: boolean;
47
+ api_opened?: boolean;
48
+ tag?: string[];
49
+ status?: string;
50
+ }
51
+ export interface ProjectInfo {
52
+ _id: number | string;
53
+ name: string;
54
+ desc: string;
55
+ group_id: number;
56
+ uid: number;
57
+ basepath: string;
58
+ }
59
+ export interface CategoryInfo {
60
+ _id: string;
61
+ name: string;
62
+ desc: string;
63
+ project_id: number | string;
64
+ uid: number;
65
+ add_time: number;
66
+ up_time: number;
67
+ index: number;
68
+ }
69
+ export interface ApiSearchResultItem {
70
+ _id: string;
71
+ title: string;
72
+ path: string;
73
+ method: string;
74
+ project_id: number | string;
75
+ catid: string;
76
+ add_time: number;
77
+ up_time: number;
78
+ project_name?: string;
79
+ cat_name?: string;
80
+ }
81
+ export interface ApiResponse<T> {
82
+ errcode: number;
83
+ errmsg: string;
84
+ data: T;
85
+ }
86
+ export interface GetApiResponse extends ApiResponse<ApiInterface> {
87
+ }
88
+ export interface GetProjectResponse extends ApiResponse<ProjectInfo> {
89
+ }
90
+ export interface GetCategoryListResponse extends ApiResponse<CategoryInfo[]> {
91
+ }
92
+ export interface SaveApiResponse extends ApiResponse<{
93
+ _id: string;
94
+ [key: string]: any;
95
+ }> {
96
+ }
97
+ export interface ApiSearchResponse extends ApiResponse<{
98
+ total: number;
99
+ count: number;
100
+ list: ApiSearchResultItem[];
101
+ }> {
102
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/yapi/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ export interface ApiInterface {
2
+ _id: string;
3
+ title: string;
4
+ path: string;
5
+ method: string;
6
+ req_params: any[];
7
+ req_body_form: any[];
8
+ req_headers: any[];
9
+ req_query: any[];
10
+ req_body_type: string;
11
+ res_body_type: string;
12
+ res_body: string;
13
+ desc: string;
14
+ markdown: string;
15
+ }
16
+ export interface GetApiResponse {
17
+ errcode: number;
18
+ errmsg: string;
19
+ data: ApiInterface;
20
+ }
21
+ export declare class YApiService {
22
+ private readonly baseUrl;
23
+ private readonly token;
24
+ private readonly logger;
25
+ constructor(baseUrl: string, token: string);
26
+ private request;
27
+ getApiInterface(id: string): Promise<ApiInterface>;
28
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.YApiService = void 0;
37
+ const axios_1 = __importStar(require("axios"));
38
+ const logger_1 = require("./yapi/logger");
39
+ class YApiService {
40
+ baseUrl;
41
+ token;
42
+ logger;
43
+ constructor(baseUrl, token) {
44
+ this.baseUrl = baseUrl;
45
+ this.token = token;
46
+ this.logger = new logger_1.Logger("YApiService", "debug");
47
+ }
48
+ async request(endpoint, params = {}) {
49
+ try {
50
+ this.logger.debug(`调用 ${this.baseUrl}${endpoint}`);
51
+ const response = await axios_1.default.get(`${this.baseUrl}${endpoint}`, {
52
+ params: {
53
+ ...params,
54
+ token: this.token
55
+ }
56
+ });
57
+ return response.data;
58
+ }
59
+ catch (error) {
60
+ if (error instanceof axios_1.AxiosError && error.response) {
61
+ throw {
62
+ status: error.response.status,
63
+ message: error.response.data.errmsg || "未知错误",
64
+ };
65
+ }
66
+ throw new Error("与YApi服务器通信失败");
67
+ }
68
+ }
69
+ async getApiInterface(id) {
70
+ try {
71
+ const response = await this.request("/api/interface/get", { id });
72
+ if (response.errcode !== 0) {
73
+ throw new Error(response.errmsg || "获取API接口失败");
74
+ }
75
+ return response.data;
76
+ }
77
+ catch (error) {
78
+ console.error("获取API接口失败:", error);
79
+ throw error;
80
+ }
81
+ }
82
+ }
83
+ exports.YApiService = YApiService;
84
+ //# sourceMappingURL=yapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yapi.js","sourceRoot":"","sources":["../../src/services/yapi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA0C;AAC1C,0CAAuC;AAyBvC,MAAa,WAAW;IACL,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,MAAM,CAAS;IAEhC,YAAY,OAAe,EAAE,KAAa;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,QAAgB,EAAE,SAA8B,EAAE;QACzE,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;gBAC7D,MAAM,EAAE;oBACN,GAAG,MAAM;oBACT,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;aACF,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAClD,MAAM;oBACJ,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;oBAC7B,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM;iBAC9C,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAAU;QAC9B,IAAI,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiB,oBAAoB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAGlF,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;YAClD,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAjDD,kCAiDC"}
@@ -0,0 +1 @@
1
+ export declare function runInstallSkill(rawArgs: string[]): Promise<void>;