xiaohongshu-mcp-node 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +306 -0
  3. package/dist/actions/comment.action.d.ts +9 -0
  4. package/dist/actions/comment.action.d.ts.map +1 -0
  5. package/dist/actions/comment.action.js +38 -0
  6. package/dist/actions/comment.action.js.map +1 -0
  7. package/dist/actions/feed-detail.action.d.ts +17 -0
  8. package/dist/actions/feed-detail.action.d.ts.map +1 -0
  9. package/dist/actions/feed-detail.action.js +166 -0
  10. package/dist/actions/feed-detail.action.js.map +1 -0
  11. package/dist/actions/interaction.action.d.ts +12 -0
  12. package/dist/actions/interaction.action.d.ts.map +1 -0
  13. package/dist/actions/interaction.action.js +75 -0
  14. package/dist/actions/interaction.action.js.map +1 -0
  15. package/dist/actions/login.action.d.ts +12 -0
  16. package/dist/actions/login.action.d.ts.map +1 -0
  17. package/dist/actions/login.action.js +52 -0
  18. package/dist/actions/login.action.js.map +1 -0
  19. package/dist/actions/publish-video.action.d.ts +17 -0
  20. package/dist/actions/publish-video.action.d.ts.map +1 -0
  21. package/dist/actions/publish-video.action.js +139 -0
  22. package/dist/actions/publish-video.action.js.map +1 -0
  23. package/dist/actions/publish.action.d.ts +19 -0
  24. package/dist/actions/publish.action.d.ts.map +1 -0
  25. package/dist/actions/publish.action.js +157 -0
  26. package/dist/actions/publish.action.js.map +1 -0
  27. package/dist/actions/search.action.d.ts +23 -0
  28. package/dist/actions/search.action.d.ts.map +1 -0
  29. package/dist/actions/search.action.js +121 -0
  30. package/dist/actions/search.action.js.map +1 -0
  31. package/dist/config/index.d.ts +4 -0
  32. package/dist/config/index.d.ts.map +1 -0
  33. package/dist/config/index.js +15 -0
  34. package/dist/config/index.js.map +1 -0
  35. package/dist/config/schema.d.ts +34 -0
  36. package/dist/config/schema.d.ts.map +1 -0
  37. package/dist/config/schema.js +18 -0
  38. package/dist/config/schema.js.map +1 -0
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +31 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/mcp/server.d.ts +22 -0
  44. package/dist/mcp/server.d.ts.map +1 -0
  45. package/dist/mcp/server.js +251 -0
  46. package/dist/mcp/server.js.map +1 -0
  47. package/dist/mcp/tools/index.d.ts +3 -0
  48. package/dist/mcp/tools/index.d.ts.map +1 -0
  49. package/dist/mcp/tools/index.js +264 -0
  50. package/dist/mcp/tools/index.js.map +1 -0
  51. package/dist/services/browser.service.d.ts +15 -0
  52. package/dist/services/browser.service.d.ts.map +1 -0
  53. package/dist/services/browser.service.js +67 -0
  54. package/dist/services/browser.service.js.map +1 -0
  55. package/dist/services/cookie.service.d.ts +9 -0
  56. package/dist/services/cookie.service.d.ts.map +1 -0
  57. package/dist/services/cookie.service.js +49 -0
  58. package/dist/services/cookie.service.js.map +1 -0
  59. package/dist/services/xiaohongshu.service.d.ts +32 -0
  60. package/dist/services/xiaohongshu.service.d.ts.map +1 -0
  61. package/dist/services/xiaohongshu.service.js +194 -0
  62. package/dist/services/xiaohongshu.service.js.map +1 -0
  63. package/dist/types/xiaohongshu.types.d.ts +55 -0
  64. package/dist/types/xiaohongshu.types.d.ts.map +1 -0
  65. package/dist/types/xiaohongshu.types.js +2 -0
  66. package/dist/types/xiaohongshu.types.js.map +1 -0
  67. package/dist/utils/image-processor.d.ts +11 -0
  68. package/dist/utils/image-processor.d.ts.map +1 -0
  69. package/dist/utils/image-processor.js +75 -0
  70. package/dist/utils/image-processor.js.map +1 -0
  71. package/dist/utils/logger.d.ts +2 -0
  72. package/dist/utils/logger.d.ts.map +1 -0
  73. package/dist/utils/logger.js +14 -0
  74. package/dist/utils/logger.js.map +1 -0
  75. package/dist/utils/title-validator.d.ts +3 -0
  76. package/dist/utils/title-validator.d.ts.map +1 -0
  77. package/dist/utils/title-validator.js +39 -0
  78. package/dist/utils/title-validator.js.map +1 -0
  79. package/dist/utils/wait-helper.d.ts +5 -0
  80. package/dist/utils/wait-helper.d.ts.map +1 -0
  81. package/dist/utils/wait-helper.js +46 -0
  82. package/dist/utils/wait-helper.js.map +1 -0
  83. package/package.json +75 -0
@@ -0,0 +1,251 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
+ import { getToolDefinitions } from './tools/index.js';
5
+ import { logger } from '../utils/logger.js';
6
+ export class MCPServer {
7
+ xiaohongshuService;
8
+ server;
9
+ constructor(xiaohongshuService) {
10
+ this.xiaohongshuService = xiaohongshuService;
11
+ this.server = new Server({
12
+ name: 'xiaohongshu-mcp-node',
13
+ version: '1.0.0',
14
+ }, {
15
+ capabilities: {
16
+ tools: {},
17
+ },
18
+ });
19
+ this.setupHandlers();
20
+ }
21
+ setupHandlers() {
22
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
23
+ return {
24
+ tools: getToolDefinitions(),
25
+ };
26
+ });
27
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
28
+ const { name, arguments: args } = request.params;
29
+ try {
30
+ logger.info('MCP tool called', { name, args });
31
+ return await this.handleToolCall(name, args || {});
32
+ }
33
+ catch (error) {
34
+ logger.error('Tool call failed', { name, error });
35
+ return {
36
+ content: [
37
+ {
38
+ type: 'text',
39
+ text: `工具执行失败: ${error instanceof Error ? error.message : String(error)}`,
40
+ },
41
+ ],
42
+ isError: true,
43
+ };
44
+ }
45
+ });
46
+ }
47
+ async handleToolCall(name, args) {
48
+ switch (name) {
49
+ case 'check_login_status':
50
+ return await this.handleCheckLoginStatus();
51
+ case 'get_login_qrcode':
52
+ return await this.handleGetLoginQRCode();
53
+ case 'delete_cookies':
54
+ return await this.handleDeleteCookies();
55
+ case 'publish_content':
56
+ return await this.handlePublishContent(args);
57
+ case 'publish_video':
58
+ return await this.handlePublishVideo(args);
59
+ case 'search_feeds':
60
+ return await this.handleSearchFeeds(args);
61
+ case 'list_feeds':
62
+ return await this.handleListFeeds();
63
+ case 'get_feed_detail':
64
+ return await this.handleGetFeedDetail(args);
65
+ case 'post_comment':
66
+ return await this.handlePostComment(args);
67
+ case 'reply_comment':
68
+ return await this.handleReplyComment(args);
69
+ case 'like_feed':
70
+ return await this.handleLikeFeed(args);
71
+ case 'favorite_feed':
72
+ return await this.handleFavoriteFeed(args);
73
+ default:
74
+ throw new Error(`Unknown tool: ${name}`);
75
+ }
76
+ }
77
+ async handleCheckLoginStatus() {
78
+ const result = await this.xiaohongshuService.checkLoginStatus();
79
+ const text = result.isLoggedIn
80
+ ? `✅ 已登录\n用户名: ${result.username}\n\n你可以使用其他功能了。`
81
+ : `❌ 未登录\n\n请使用 get_login_qrcode 工具获取二维码进行登录。`;
82
+ return {
83
+ content: [{ type: 'text', text }],
84
+ };
85
+ }
86
+ async handleGetLoginQRCode() {
87
+ const result = await this.xiaohongshuService.getLoginQRCode();
88
+ if (result.isLoggedIn) {
89
+ return {
90
+ content: [{ type: 'text', text: '你当前已处于登录状态' }],
91
+ };
92
+ }
93
+ const deadline = new Date(Date.now() + 4 * 60 * 1000).toLocaleString('zh-CN');
94
+ return {
95
+ content: [
96
+ {
97
+ type: 'text',
98
+ text: `请用小红书 App 在 ${deadline} 前扫码登录 👇`,
99
+ },
100
+ {
101
+ type: 'image',
102
+ data: result.image.replace('data:image/png;base64,', ''),
103
+ mimeType: 'image/png',
104
+ },
105
+ ],
106
+ };
107
+ }
108
+ async handleDeleteCookies() {
109
+ await this.xiaohongshuService.deleteCookies();
110
+ return {
111
+ content: [
112
+ {
113
+ type: 'text',
114
+ text: 'Cookies 已成功删除,登录状态已重置。\n\n下次操作时,需要重新登录。',
115
+ },
116
+ ],
117
+ };
118
+ }
119
+ async handlePublishContent(args) {
120
+ const result = await this.xiaohongshuService.publishContent({
121
+ title: args.title,
122
+ content: args.content,
123
+ imagePaths: args.images,
124
+ tags: args.tags,
125
+ scheduleTime: args.scheduleTime ? new Date(args.scheduleTime) : undefined,
126
+ isOriginal: args.isOriginal,
127
+ visibility: args.visibility,
128
+ products: args.products,
129
+ });
130
+ return {
131
+ content: [
132
+ {
133
+ type: 'text',
134
+ text: `内容发布成功:\n${JSON.stringify(result, null, 2)}`,
135
+ },
136
+ ],
137
+ };
138
+ }
139
+ async handlePublishVideo(args) {
140
+ const result = await this.xiaohongshuService.publishVideo({
141
+ title: args.title,
142
+ content: args.content,
143
+ videoPath: args.video,
144
+ tags: args.tags,
145
+ scheduleTime: args.scheduleTime ? new Date(args.scheduleTime) : undefined,
146
+ visibility: args.visibility,
147
+ products: args.products,
148
+ });
149
+ return {
150
+ content: [
151
+ {
152
+ type: 'text',
153
+ text: `视频发布成功:\n${JSON.stringify(result, null, 2)}`,
154
+ },
155
+ ],
156
+ };
157
+ }
158
+ async handleSearchFeeds(args) {
159
+ const feeds = await this.xiaohongshuService.searchFeeds(args.keyword, {
160
+ sortBy: args.sortBy,
161
+ noteType: args.noteType,
162
+ publishTime: args.publishTime,
163
+ });
164
+ return {
165
+ content: [
166
+ {
167
+ type: 'text',
168
+ text: `搜索结果 (${feeds.length} 条):\n${JSON.stringify(feeds, null, 2)}`,
169
+ },
170
+ ],
171
+ };
172
+ }
173
+ async handleListFeeds() {
174
+ const feeds = await this.xiaohongshuService.listFeeds();
175
+ return {
176
+ content: [
177
+ {
178
+ type: 'text',
179
+ text: `推荐内容 (${feeds.length} 条):\n${JSON.stringify(feeds, null, 2)}`,
180
+ },
181
+ ],
182
+ };
183
+ }
184
+ async handleGetFeedDetail(args) {
185
+ const detail = await this.xiaohongshuService.getFeedDetail(args.feedId, args.xsecToken, args.loadAllComments);
186
+ return {
187
+ content: [
188
+ {
189
+ type: 'text',
190
+ text: `内容详情:\n${JSON.stringify(detail, null, 2)}`,
191
+ },
192
+ ],
193
+ };
194
+ }
195
+ async handlePostComment(args) {
196
+ await this.xiaohongshuService.postComment(args.feedId, args.xsecToken, args.content);
197
+ return {
198
+ content: [
199
+ {
200
+ type: 'text',
201
+ text: `评论发表成功 - Feed ID: ${args.feedId}`,
202
+ },
203
+ ],
204
+ };
205
+ }
206
+ async handleReplyComment(args) {
207
+ await this.xiaohongshuService.replyComment(args.feedId, args.xsecToken, args.commentId, args.content);
208
+ return {
209
+ content: [
210
+ {
211
+ type: 'text',
212
+ text: `评论回复成功 - Feed ID: ${args.feedId}, Comment ID: ${args.commentId}`,
213
+ },
214
+ ],
215
+ };
216
+ }
217
+ async handleLikeFeed(args) {
218
+ if (args.unlike) {
219
+ await this.xiaohongshuService.unlikeFeed(args.feedId, args.xsecToken);
220
+ return {
221
+ content: [{ type: 'text', text: `取消点赞成功 - Feed ID: ${args.feedId}` }],
222
+ };
223
+ }
224
+ else {
225
+ await this.xiaohongshuService.likeFeed(args.feedId, args.xsecToken);
226
+ return {
227
+ content: [{ type: 'text', text: `点赞成功 - Feed ID: ${args.feedId}` }],
228
+ };
229
+ }
230
+ }
231
+ async handleFavoriteFeed(args) {
232
+ if (args.unfavorite) {
233
+ await this.xiaohongshuService.unfavoriteFeed(args.feedId, args.xsecToken);
234
+ return {
235
+ content: [{ type: 'text', text: `取消收藏成功 - Feed ID: ${args.feedId}` }],
236
+ };
237
+ }
238
+ else {
239
+ await this.xiaohongshuService.favoriteFeed(args.feedId, args.xsecToken);
240
+ return {
241
+ content: [{ type: 'text', text: `收藏成功 - Feed ID: ${args.feedId}` }],
242
+ };
243
+ }
244
+ }
245
+ async start() {
246
+ const transport = new StdioServerTransport();
247
+ await this.server.connect(transport);
248
+ logger.info('MCP Server started');
249
+ }
250
+ }
251
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare function getToolDefinitions(): Tool[];
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,wBAAgB,kBAAkB,IAAI,IAAI,EAAE,CAsQ3C"}
@@ -0,0 +1,264 @@
1
+ export function getToolDefinitions() {
2
+ return [
3
+ {
4
+ name: 'check_login_status',
5
+ description: '检查小红书登录状态',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {},
9
+ },
10
+ },
11
+ {
12
+ name: 'get_login_qrcode',
13
+ description: '获取小红书登录二维码',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {},
17
+ },
18
+ },
19
+ {
20
+ name: 'delete_cookies',
21
+ description: '删除 cookies,重置登录状态',
22
+ inputSchema: {
23
+ type: 'object',
24
+ properties: {},
25
+ },
26
+ },
27
+ {
28
+ name: 'publish_content',
29
+ description: '发布小红书图文内容',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ title: {
34
+ type: 'string',
35
+ description: '标题(最多20字)',
36
+ },
37
+ content: {
38
+ type: 'string',
39
+ description: '正文内容',
40
+ },
41
+ images: {
42
+ type: 'array',
43
+ items: { type: 'string' },
44
+ description: '图片路径列表(本地路径或URL)',
45
+ },
46
+ tags: {
47
+ type: 'array',
48
+ items: { type: 'string' },
49
+ description: '标签列表(最多10个)',
50
+ },
51
+ scheduleTime: {
52
+ type: 'string',
53
+ description: '定时发布时间(ISO 8601格式)',
54
+ },
55
+ isOriginal: {
56
+ type: 'boolean',
57
+ description: '是否声明原创',
58
+ },
59
+ visibility: {
60
+ type: 'string',
61
+ enum: ['public', 'private', 'friends'],
62
+ description: '可见范围',
63
+ },
64
+ products: {
65
+ type: 'array',
66
+ items: { type: 'string' },
67
+ description: '关联商品关键词',
68
+ },
69
+ },
70
+ required: ['title', 'content', 'images'],
71
+ },
72
+ },
73
+ {
74
+ name: 'publish_video',
75
+ description: '发布小红书视频内容',
76
+ inputSchema: {
77
+ type: 'object',
78
+ properties: {
79
+ title: {
80
+ type: 'string',
81
+ description: '标题(最多20字)',
82
+ },
83
+ content: {
84
+ type: 'string',
85
+ description: '正文内容',
86
+ },
87
+ video: {
88
+ type: 'string',
89
+ description: '视频文件路径',
90
+ },
91
+ tags: {
92
+ type: 'array',
93
+ items: { type: 'string' },
94
+ description: '标签列表(最多10个)',
95
+ },
96
+ scheduleTime: {
97
+ type: 'string',
98
+ description: '定时发布时间(ISO 8601格式)',
99
+ },
100
+ visibility: {
101
+ type: 'string',
102
+ enum: ['public', 'private', 'friends'],
103
+ description: '可见范围',
104
+ },
105
+ products: {
106
+ type: 'array',
107
+ items: { type: 'string' },
108
+ description: '关联商品关键词',
109
+ },
110
+ },
111
+ required: ['title', 'content', 'video'],
112
+ },
113
+ },
114
+ {
115
+ name: 'search_feeds',
116
+ description: '搜索小红书内容',
117
+ inputSchema: {
118
+ type: 'object',
119
+ properties: {
120
+ keyword: {
121
+ type: 'string',
122
+ description: '搜索关键词',
123
+ },
124
+ sortBy: {
125
+ type: 'string',
126
+ description: '排序方式',
127
+ },
128
+ noteType: {
129
+ type: 'string',
130
+ description: '笔记类型',
131
+ },
132
+ publishTime: {
133
+ type: 'string',
134
+ description: '发布时间',
135
+ },
136
+ },
137
+ required: ['keyword'],
138
+ },
139
+ },
140
+ {
141
+ name: 'list_feeds',
142
+ description: '获取推荐内容列表',
143
+ inputSchema: {
144
+ type: 'object',
145
+ properties: {},
146
+ },
147
+ },
148
+ {
149
+ name: 'get_feed_detail',
150
+ description: '获取内容详情',
151
+ inputSchema: {
152
+ type: 'object',
153
+ properties: {
154
+ feedId: {
155
+ type: 'string',
156
+ description: '内容ID',
157
+ },
158
+ xsecToken: {
159
+ type: 'string',
160
+ description: '安全令牌',
161
+ },
162
+ loadAllComments: {
163
+ type: 'boolean',
164
+ description: '是否加载所有评论',
165
+ },
166
+ },
167
+ required: ['feedId', 'xsecToken'],
168
+ },
169
+ },
170
+ {
171
+ name: 'post_comment',
172
+ description: '发表评论',
173
+ inputSchema: {
174
+ type: 'object',
175
+ properties: {
176
+ feedId: {
177
+ type: 'string',
178
+ description: '内容ID',
179
+ },
180
+ xsecToken: {
181
+ type: 'string',
182
+ description: '安全令牌',
183
+ },
184
+ content: {
185
+ type: 'string',
186
+ description: '评论内容',
187
+ },
188
+ },
189
+ required: ['feedId', 'xsecToken', 'content'],
190
+ },
191
+ },
192
+ {
193
+ name: 'reply_comment',
194
+ description: '回复评论',
195
+ inputSchema: {
196
+ type: 'object',
197
+ properties: {
198
+ feedId: {
199
+ type: 'string',
200
+ description: '内容ID',
201
+ },
202
+ xsecToken: {
203
+ type: 'string',
204
+ description: '安全令牌',
205
+ },
206
+ commentId: {
207
+ type: 'string',
208
+ description: '评论ID',
209
+ },
210
+ content: {
211
+ type: 'string',
212
+ description: '回复内容',
213
+ },
214
+ },
215
+ required: ['feedId', 'xsecToken', 'commentId', 'content'],
216
+ },
217
+ },
218
+ {
219
+ name: 'like_feed',
220
+ description: '点赞内容',
221
+ inputSchema: {
222
+ type: 'object',
223
+ properties: {
224
+ feedId: {
225
+ type: 'string',
226
+ description: '内容ID',
227
+ },
228
+ xsecToken: {
229
+ type: 'string',
230
+ description: '安全令牌',
231
+ },
232
+ unlike: {
233
+ type: 'boolean',
234
+ description: '是否取消点赞',
235
+ },
236
+ },
237
+ required: ['feedId', 'xsecToken'],
238
+ },
239
+ },
240
+ {
241
+ name: 'favorite_feed',
242
+ description: '收藏内容',
243
+ inputSchema: {
244
+ type: 'object',
245
+ properties: {
246
+ feedId: {
247
+ type: 'string',
248
+ description: '内容ID',
249
+ },
250
+ xsecToken: {
251
+ type: 'string',
252
+ description: '安全令牌',
253
+ },
254
+ unfavorite: {
255
+ type: 'boolean',
256
+ description: '是否取消收藏',
257
+ },
258
+ },
259
+ required: ['feedId', 'xsecToken'],
260
+ },
261
+ },
262
+ ];
263
+ }
264
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Page } from 'playwright';
2
+ import { CookieService } from './cookie.service.js';
3
+ import type { Config } from '../config/index.js';
4
+ export declare class BrowserService {
5
+ private config;
6
+ private cookieService;
7
+ private browser;
8
+ private context;
9
+ constructor(config: Config, cookieService: CookieService);
10
+ init(): Promise<void>;
11
+ newPage(): Promise<Page>;
12
+ saveCookies(): Promise<void>;
13
+ close(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=browser.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.service.d.ts","sourceRoot":"","sources":["../../src/services/browser.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,IAAI,EAAkB,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBAAa,cAAc;IAKvB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;IALvB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;gBAGpC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa;IAGhC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWxB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
@@ -0,0 +1,67 @@
1
+ import { chromium } from 'playwright';
2
+ import { logger } from '../utils/logger.js';
3
+ export class BrowserService {
4
+ config;
5
+ cookieService;
6
+ browser = null;
7
+ context = null;
8
+ constructor(config, cookieService) {
9
+ this.config = config;
10
+ this.cookieService = cookieService;
11
+ }
12
+ async init() {
13
+ if (this.browser)
14
+ return;
15
+ const launchOptions = {
16
+ headless: this.config.headless,
17
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
18
+ };
19
+ if (this.config.browserBinPath) {
20
+ launchOptions.executablePath = this.config.browserBinPath;
21
+ }
22
+ if (this.config.proxy) {
23
+ launchOptions.proxy = { server: this.config.proxy };
24
+ }
25
+ this.browser = await chromium.launch(launchOptions);
26
+ const cookies = await this.cookieService.load();
27
+ const contextOptions = {
28
+ viewport: { width: 1920, height: 1080 },
29
+ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
30
+ };
31
+ if (cookies && cookies.length > 0) {
32
+ contextOptions.storageState = { cookies, origins: [] };
33
+ }
34
+ this.context = await this.browser.newContext(contextOptions);
35
+ logger.info('Browser initialized', {
36
+ headless: this.config.headless,
37
+ hasProxy: !!this.config.proxy
38
+ });
39
+ }
40
+ async newPage() {
41
+ if (!this.context) {
42
+ await this.init();
43
+ }
44
+ const page = await this.context.newPage();
45
+ page.setDefaultTimeout(this.config.pageTimeout);
46
+ return page;
47
+ }
48
+ async saveCookies() {
49
+ if (!this.context)
50
+ return;
51
+ const cookies = await this.context.cookies();
52
+ await this.cookieService.save(cookies);
53
+ logger.debug('Cookies saved');
54
+ }
55
+ async close() {
56
+ if (this.context) {
57
+ await this.context.close();
58
+ this.context = null;
59
+ }
60
+ if (this.browser) {
61
+ await this.browser.close();
62
+ this.browser = null;
63
+ }
64
+ logger.info('Browser closed');
65
+ }
66
+ }
67
+ //# sourceMappingURL=browser.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.service.js","sourceRoot":"","sources":["../../src/services/browser.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Cookie } from 'playwright';
2
+ export declare class CookieService {
3
+ private cookiePath;
4
+ constructor(cookiePath: string);
5
+ load(): Promise<Cookie[] | null>;
6
+ save(cookies: Cookie[]): Promise<void>;
7
+ delete(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=cookie.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.service.d.ts","sourceRoot":"","sources":["../../src/services/cookie.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,qBAAa,aAAa;IACZ,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,MAAM;IAEhC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAkBhC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAW9B"}