@leeguoo/yapi-mcp 0.2.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.
@@ -0,0 +1,239 @@
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.YApiAuthService = void 0;
37
+ const axios_1 = __importStar(require("axios"));
38
+ const logger_1 = require("./logger");
39
+ const authCache_1 = require("./authCache");
40
+ function pickCookieValue(setCookie, key) {
41
+ if (!setCookie || setCookie.length === 0)
42
+ return undefined;
43
+ const prefix = `${key}=`;
44
+ for (const item of setCookie) {
45
+ const trimmed = String(item || "").trim();
46
+ if (!trimmed.startsWith(prefix))
47
+ continue;
48
+ const value = trimmed.slice(prefix.length).split(";")[0];
49
+ return value || undefined;
50
+ }
51
+ return undefined;
52
+ }
53
+ function pickCookieExpiresAt(setCookie, key) {
54
+ if (!setCookie || setCookie.length === 0)
55
+ return undefined;
56
+ const prefix = `${key}=`;
57
+ for (const item of setCookie) {
58
+ const trimmed = String(item || "").trim();
59
+ if (!trimmed.startsWith(prefix))
60
+ continue;
61
+ const parts = trimmed.split(";").map(s => s.trim());
62
+ const expiresPart = parts.find(p => /^expires=/i.test(p));
63
+ if (!expiresPart)
64
+ return undefined;
65
+ const dateStr = expiresPart.split("=").slice(1).join("=");
66
+ const ts = Date.parse(dateStr);
67
+ return Number.isFinite(ts) ? ts : undefined;
68
+ }
69
+ return undefined;
70
+ }
71
+ class YApiAuthService {
72
+ baseUrl;
73
+ email;
74
+ password;
75
+ logger;
76
+ cache;
77
+ constructor(baseUrl, email, password, logLevel = "info") {
78
+ this.baseUrl = baseUrl.replace(/\/+$/, "");
79
+ this.email = email;
80
+ this.password = password;
81
+ this.logger = new logger_1.Logger("YApiAuthService", logLevel);
82
+ this.cache = new authCache_1.YApiAuthCache(this.baseUrl, logLevel);
83
+ }
84
+ loadCachedProjectTokens() {
85
+ return this.cache.loadProjectTokens();
86
+ }
87
+ getCookieHeader(session) {
88
+ const parts = [`_yapi_token=${session.yapiToken}`];
89
+ if (session.yapiUid)
90
+ parts.push(`_yapi_uid=${session.yapiUid}`);
91
+ return parts.join("; ");
92
+ }
93
+ isSessionValid(session) {
94
+ if (!session?.yapiToken)
95
+ return false;
96
+ if (!session.expiresAt)
97
+ return true;
98
+ return Date.now() < session.expiresAt - 60_000;
99
+ }
100
+ async login(force = false) {
101
+ const cached = this.cache.loadSession();
102
+ if (!force && this.isSessionValid(cached))
103
+ return cached;
104
+ try {
105
+ this.logger.info("正在登录 YApi 以刷新全局 token...");
106
+ const response = await axios_1.default.post(`${this.baseUrl}/api/user/login`, { email: this.email, password: this.password }, { headers: { "Content-Type": "application/json;charset=UTF-8" } });
107
+ const setCookie = response.headers["set-cookie"];
108
+ const yapiToken = pickCookieValue(setCookie, "_yapi_token");
109
+ const yapiUid = pickCookieValue(setCookie, "_yapi_uid");
110
+ const expiresAt = pickCookieExpiresAt(setCookie, "_yapi_token");
111
+ if (!yapiToken) {
112
+ const msg = response.data?.errmsg || "登录失败,未返回 _yapi_token";
113
+ throw new Error(msg);
114
+ }
115
+ const session = {
116
+ yapiToken,
117
+ yapiUid,
118
+ expiresAt,
119
+ updatedAt: Date.now(),
120
+ };
121
+ this.cache.saveSession(session);
122
+ return session;
123
+ }
124
+ catch (error) {
125
+ if (error instanceof axios_1.AxiosError && error.response) {
126
+ throw new Error(error.response.data?.errmsg || "登录失败");
127
+ }
128
+ throw error instanceof Error ? error : new Error("登录失败");
129
+ }
130
+ }
131
+ async cookieRequest(method, endpoint, session, options = {}) {
132
+ try {
133
+ const url = `${this.baseUrl}${endpoint}`;
134
+ const cookie = this.getCookieHeader(session);
135
+ const headers = { Cookie: cookie, Accept: "application/json, text/plain, */*" };
136
+ const res = method === "GET"
137
+ ? await axios_1.default.get(url, { params: options.params, headers })
138
+ : await axios_1.default.post(url, options.data ?? {}, { params: options.params, headers });
139
+ return res.data;
140
+ }
141
+ catch (error) {
142
+ if (error instanceof axios_1.AxiosError && error.response) {
143
+ throw new Error(error.response.data?.errmsg || "请求失败");
144
+ }
145
+ throw error instanceof Error ? error : new Error("请求失败");
146
+ }
147
+ }
148
+ async listGroups(session) {
149
+ const groups = [];
150
+ const tryFetch = async (endpoint) => {
151
+ try {
152
+ const res = await this.cookieRequest("GET", endpoint, session);
153
+ if (res?.errcode === 0 && Array.isArray(res.data))
154
+ groups.push(...res.data);
155
+ }
156
+ catch {
157
+ }
158
+ };
159
+ await tryFetch("/api/group/get_mygroup");
160
+ await tryFetch("/api/group/list");
161
+ const seen = new Set();
162
+ return groups.filter(g => {
163
+ const id = String(g?._id ?? g?.id ?? "");
164
+ if (!id || seen.has(id))
165
+ return false;
166
+ seen.add(id);
167
+ return true;
168
+ });
169
+ }
170
+ async listProjectsInGroup(session, groupId) {
171
+ const all = [];
172
+ const limit = 50;
173
+ let page = 1;
174
+ while (true) {
175
+ const res = await this.cookieRequest("GET", "/api/project/list", session, {
176
+ params: { group_id: groupId, page, limit },
177
+ });
178
+ if (res?.errcode !== 0)
179
+ break;
180
+ const list = res?.data?.list;
181
+ if (Array.isArray(list))
182
+ all.push(...list);
183
+ const total = Number(res?.data?.total ?? NaN);
184
+ if (!Number.isFinite(total)) {
185
+ if (!Array.isArray(list) || list.length < limit)
186
+ break;
187
+ }
188
+ else if (all.length >= total) {
189
+ break;
190
+ }
191
+ page += 1;
192
+ if (page > 200)
193
+ break;
194
+ }
195
+ return all;
196
+ }
197
+ async getProjectDetail(session, projectId) {
198
+ const res = await this.cookieRequest("GET", "/api/project/get", session, { params: { id: projectId } });
199
+ if (res?.errcode !== 0)
200
+ throw new Error(res?.errmsg || "获取项目详情失败");
201
+ return res.data;
202
+ }
203
+ async refreshProjectTokens(options = {}) {
204
+ const session = await this.login(Boolean(options.forceLogin));
205
+ const groups = await this.listGroups(session);
206
+ const projects = [];
207
+ for (const g of groups) {
208
+ const groupId = String(g?._id ?? g?.id ?? "");
209
+ if (!groupId)
210
+ continue;
211
+ try {
212
+ const list = await this.listProjectsInGroup(session, groupId);
213
+ projects.push(...list);
214
+ }
215
+ catch (e) {
216
+ this.logger.warn(`获取分组项目列表失败(groupId=${groupId}): ${e}`);
217
+ }
218
+ }
219
+ const tokens = new Map();
220
+ for (const p of projects) {
221
+ const projectId = String(p?._id ?? p?.id ?? "");
222
+ if (!projectId)
223
+ continue;
224
+ try {
225
+ const detail = await this.getProjectDetail(session, projectId);
226
+ const token = String(detail?.token ?? "").trim();
227
+ if (token)
228
+ tokens.set(projectId, token);
229
+ }
230
+ catch (e) {
231
+ this.logger.warn(`获取项目 token 失败(projectId=${projectId}): ${e}`);
232
+ }
233
+ }
234
+ this.cache.saveProjectTokens(tokens);
235
+ return { tokens, projects, groups };
236
+ }
237
+ }
238
+ exports.YApiAuthService = YApiAuthService;
239
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/services/yapi/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface YApiSessionCookie {
2
+ yapiToken: string;
3
+ yapiUid?: string;
4
+ expiresAt?: number;
5
+ updatedAt: number;
6
+ }
7
+ export interface YApiProjectTokenEntry {
8
+ token: string;
9
+ updatedAt: number;
10
+ }
11
+ export interface YApiAuthCacheData {
12
+ version: 1;
13
+ baseUrl: string;
14
+ session?: YApiSessionCookie;
15
+ projectTokens: Record<string, YApiProjectTokenEntry>;
16
+ }
17
+ export declare class YApiAuthCache {
18
+ private readonly logger;
19
+ private readonly baseUrl;
20
+ private readonly cacheDir;
21
+ private readonly cacheFilePath;
22
+ constructor(baseUrl: string, logLevel?: string);
23
+ load(): YApiAuthCacheData;
24
+ save(data: YApiAuthCacheData): void;
25
+ loadSession(): YApiSessionCookie | null;
26
+ saveSession(session: YApiSessionCookie): void;
27
+ loadProjectTokens(): Map<string, string>;
28
+ saveProjectTokens(tokens: Map<string, string>): void;
29
+ }
@@ -0,0 +1,127 @@
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.YApiAuthCache = 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
+ class YApiAuthCache {
49
+ logger;
50
+ baseUrl;
51
+ cacheDir;
52
+ cacheFilePath;
53
+ constructor(baseUrl, logLevel = "info") {
54
+ this.logger = new logger_1.Logger("YApiAuthCache", logLevel);
55
+ this.baseUrl = baseUrl.replace(/\/+$/, "");
56
+ this.cacheDir = path.join(os.homedir(), ".yapi-mcp");
57
+ this.cacheFilePath = path.join(this.cacheDir, `auth-${hashBaseUrl(this.baseUrl)}.json`);
58
+ if (!fs.existsSync(this.cacheDir)) {
59
+ fs.mkdirSync(this.cacheDir, { recursive: true });
60
+ }
61
+ }
62
+ load() {
63
+ const empty = {
64
+ version: 1,
65
+ baseUrl: this.baseUrl,
66
+ projectTokens: {},
67
+ };
68
+ try {
69
+ if (!fs.existsSync(this.cacheFilePath))
70
+ return empty;
71
+ const raw = fs.readFileSync(this.cacheFilePath, "utf8");
72
+ const parsed = JSON.parse(raw);
73
+ if (!parsed || parsed.version !== 1 || parsed.baseUrl !== this.baseUrl)
74
+ return empty;
75
+ return {
76
+ version: 1,
77
+ baseUrl: this.baseUrl,
78
+ session: parsed.session,
79
+ projectTokens: parsed.projectTokens ?? {},
80
+ };
81
+ }
82
+ catch (e) {
83
+ this.logger.warn(`读取全局鉴权缓存失败,将使用空缓存: ${e}`);
84
+ return empty;
85
+ }
86
+ }
87
+ save(data) {
88
+ try {
89
+ fs.writeFileSync(this.cacheFilePath, JSON.stringify(data, null, 2), "utf8");
90
+ }
91
+ catch (e) {
92
+ this.logger.warn(`写入全局鉴权缓存失败: ${e}`);
93
+ }
94
+ }
95
+ loadSession() {
96
+ const data = this.load();
97
+ if (!data.session?.yapiToken)
98
+ return null;
99
+ return data.session;
100
+ }
101
+ saveSession(session) {
102
+ const data = this.load();
103
+ data.session = session;
104
+ this.save(data);
105
+ }
106
+ loadProjectTokens() {
107
+ const data = this.load();
108
+ const map = new Map();
109
+ for (const [projectId, entry] of Object.entries(data.projectTokens ?? {})) {
110
+ if (entry?.token)
111
+ map.set(projectId, entry.token);
112
+ }
113
+ return map;
114
+ }
115
+ saveProjectTokens(tokens) {
116
+ const data = this.load();
117
+ const now = Date.now();
118
+ const obj = {};
119
+ tokens.forEach((token, projectId) => {
120
+ obj[String(projectId)] = { token, updatedAt: now };
121
+ });
122
+ data.projectTokens = obj;
123
+ this.save(data);
124
+ }
125
+ }
126
+ exports.YApiAuthCache = YApiAuthCache;
127
+ //# sourceMappingURL=authCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authCache.js","sourceRoot":"","sources":["../../../src/services/yapi/authCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ProjectInfo } from './types';
2
+ export declare class ProjectInfoCache {
3
+ private readonly cacheFilePath;
4
+ private readonly logger;
5
+ private readonly cacheTTLMinutes;
6
+ constructor(cacheTTLMinutes?: number);
7
+ clearCache(): void;
8
+ saveToCache(projectInfo: Map<string, ProjectInfo>): void;
9
+ isCacheExpired(): boolean;
10
+ loadFromCache(): Map<string, ProjectInfo>;
11
+ }
@@ -0,0 +1,143 @@
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.ProjectInfoCache = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const logger_1 = require("./logger");
40
+ class ProjectInfoCache {
41
+ cacheFilePath;
42
+ logger;
43
+ cacheTTLMinutes;
44
+ constructor(cacheTTLMinutes = 10) {
45
+ const projectRoot = path.resolve(__dirname, '../../..');
46
+ const cacheDir = path.join(projectRoot, '.yapi-cache');
47
+ if (!fs.existsSync(cacheDir)) {
48
+ fs.mkdirSync(cacheDir, { recursive: true });
49
+ }
50
+ this.cacheFilePath = path.join(cacheDir, 'project-info.json');
51
+ this.logger = new logger_1.Logger('YApi Cache');
52
+ this.cacheTTLMinutes = cacheTTLMinutes;
53
+ }
54
+ clearCache() {
55
+ try {
56
+ if (fs.existsSync(this.cacheFilePath)) {
57
+ fs.unlinkSync(this.cacheFilePath);
58
+ this.logger.info(`已清除YApi项目信息缓存: ${this.cacheFilePath}`);
59
+ }
60
+ }
61
+ catch (error) {
62
+ this.logger.error('清除YApi项目信息缓存失败:', error);
63
+ }
64
+ }
65
+ saveToCache(projectInfo) {
66
+ try {
67
+ const cacheObject = {};
68
+ projectInfo.forEach((info, id) => {
69
+ cacheObject[id] = info;
70
+ });
71
+ const cacheData = {
72
+ version: 1,
73
+ timestamp: Date.now(),
74
+ data: cacheObject
75
+ };
76
+ fs.writeFileSync(this.cacheFilePath, JSON.stringify(cacheData, null, 2), 'utf8');
77
+ this.logger.info(`项目信息已缓存到: ${this.cacheFilePath}`);
78
+ }
79
+ catch (error) {
80
+ this.logger.error('保存项目信息缓存失败:', error);
81
+ }
82
+ }
83
+ isCacheExpired() {
84
+ try {
85
+ if (!fs.existsSync(this.cacheFilePath)) {
86
+ this.logger.debug('缓存文件不存在,视为已过期');
87
+ return true;
88
+ }
89
+ const cacheContent = fs.readFileSync(this.cacheFilePath, 'utf8');
90
+ const cacheData = JSON.parse(cacheContent);
91
+ if (!cacheData || !cacheData.timestamp) {
92
+ this.logger.debug('缓存文件格式无效,视为已过期');
93
+ return true;
94
+ }
95
+ const expirationTime = cacheData.timestamp + (this.cacheTTLMinutes * 60 * 1000);
96
+ const currentTime = Date.now();
97
+ const isExpired = currentTime > expirationTime;
98
+ if (isExpired) {
99
+ this.logger.debug(`缓存已过期,生成时间: ${new Date(cacheData.timestamp).toLocaleString()}, 有效期: ${this.cacheTTLMinutes} 分钟`);
100
+ }
101
+ else {
102
+ const remainingMinutes = Math.floor((expirationTime - currentTime) / (60 * 1000));
103
+ this.logger.debug(`缓存有效,剩余时间: ${remainingMinutes} 分钟`);
104
+ }
105
+ return isExpired;
106
+ }
107
+ catch (error) {
108
+ this.logger.error('检查缓存过期时出错:', error);
109
+ return true;
110
+ }
111
+ }
112
+ loadFromCache() {
113
+ const projectInfoMap = new Map();
114
+ try {
115
+ if (fs.existsSync(this.cacheFilePath)) {
116
+ const cacheContent = fs.readFileSync(this.cacheFilePath, 'utf8');
117
+ const cacheData = JSON.parse(cacheContent);
118
+ if (this.isCacheExpired()) {
119
+ this.logger.info('项目信息缓存已过期,将使用空缓存并在后台异步更新');
120
+ return projectInfoMap;
121
+ }
122
+ if (cacheData && cacheData.data) {
123
+ Object.entries(cacheData.data).forEach(([id, info]) => {
124
+ projectInfoMap.set(id, info);
125
+ });
126
+ this.logger.info(`已从缓存加载 ${projectInfoMap.size} 个项目信息,缓存生成时间: ${new Date(cacheData.timestamp).toLocaleString()}`);
127
+ }
128
+ else {
129
+ this.logger.warn('项目信息缓存文件格式无效');
130
+ }
131
+ }
132
+ else {
133
+ this.logger.info('项目信息缓存文件不存在,将创建新缓存');
134
+ }
135
+ }
136
+ catch (error) {
137
+ this.logger.error('加载项目信息缓存失败:', error);
138
+ }
139
+ return projectInfoMap;
140
+ }
141
+ }
142
+ exports.ProjectInfoCache = ProjectInfoCache;
143
+ //# 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"}