@neomei/opencode-feishu 0.1.2 → 0.2.1

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 (124) hide show
  1. package/CHANGELOG.md +29 -4
  2. package/LICENSE +0 -0
  3. package/README.md +114 -6
  4. package/dist/cli.js +154 -6
  5. package/dist/cli.js.map +1 -1
  6. package/dist/core/config.d.ts +30 -0
  7. package/dist/core/config.d.ts.map +1 -1
  8. package/dist/core/config.js +41 -1
  9. package/dist/core/config.js.map +1 -1
  10. package/dist/core/daemon.d.ts.map +1 -1
  11. package/dist/core/daemon.js +2 -1
  12. package/dist/core/daemon.js.map +1 -1
  13. package/dist/core/dedup.d.ts +29 -0
  14. package/dist/core/dedup.d.ts.map +1 -0
  15. package/dist/core/dedup.js +69 -0
  16. package/dist/core/dedup.js.map +1 -0
  17. package/dist/core/file-downloader.d.ts +24 -0
  18. package/dist/core/file-downloader.d.ts.map +1 -0
  19. package/dist/core/file-downloader.js +79 -0
  20. package/dist/core/file-downloader.js.map +1 -0
  21. package/dist/core/hook-manager.d.ts +14 -0
  22. package/dist/core/hook-manager.d.ts.map +1 -0
  23. package/dist/core/hook-manager.js +71 -0
  24. package/dist/core/hook-manager.js.map +1 -0
  25. package/dist/core/message-handler.d.ts +17 -1
  26. package/dist/core/message-handler.d.ts.map +1 -1
  27. package/dist/core/message-handler.js +151 -8
  28. package/dist/core/message-handler.js.map +1 -1
  29. package/dist/core/profile-manager.d.ts +27 -0
  30. package/dist/core/profile-manager.d.ts.map +1 -0
  31. package/dist/core/profile-manager.js +149 -0
  32. package/dist/core/profile-manager.js.map +1 -0
  33. package/dist/core/session-manager.d.ts +8 -1
  34. package/dist/core/session-manager.d.ts.map +1 -1
  35. package/dist/core/session-manager.js +27 -4
  36. package/dist/core/session-manager.js.map +1 -1
  37. package/dist/core/types.d.ts +13 -0
  38. package/dist/core/types.d.ts.map +1 -1
  39. package/dist/feishu/api.d.ts +17 -0
  40. package/dist/feishu/api.d.ts.map +1 -1
  41. package/dist/feishu/api.js +106 -0
  42. package/dist/feishu/api.js.map +1 -1
  43. package/dist/feishu/card.d.ts +4 -1
  44. package/dist/feishu/card.d.ts.map +1 -1
  45. package/dist/feishu/card.js +26 -6
  46. package/dist/feishu/card.js.map +1 -1
  47. package/dist/feishu/event-source.d.ts.map +1 -1
  48. package/dist/feishu/event-source.js +3 -0
  49. package/dist/feishu/event-source.js.map +1 -1
  50. package/dist/feishu/silent-logger.d.ts +5 -5
  51. package/dist/feishu/silent-logger.d.ts.map +1 -1
  52. package/dist/feishu/silent-logger.js +5 -5
  53. package/dist/feishu/silent-logger.js.map +1 -1
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +3 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/opencode/client.d.ts +5 -1
  59. package/dist/opencode/client.d.ts.map +1 -1
  60. package/dist/opencode/client.js +15 -2
  61. package/dist/opencode/client.js.map +1 -1
  62. package/dist/opencode/event-handler.d.ts +6 -1
  63. package/dist/opencode/event-handler.d.ts.map +1 -1
  64. package/dist/opencode/event-handler.js +31 -3
  65. package/dist/opencode/event-handler.js.map +1 -1
  66. package/dist/plugin.d.ts.map +1 -1
  67. package/dist/plugin.js +4 -2
  68. package/dist/plugin.js.map +1 -1
  69. package/dist/services/approval-service.d.ts +20 -0
  70. package/dist/services/approval-service.d.ts.map +1 -0
  71. package/dist/services/approval-service.js +123 -0
  72. package/dist/services/approval-service.js.map +1 -0
  73. package/dist/services/base-service.d.ts +22 -0
  74. package/dist/services/base-service.d.ts.map +1 -0
  75. package/dist/services/base-service.js +47 -0
  76. package/dist/services/base-service.js.map +1 -0
  77. package/dist/services/calendar-service.d.ts +25 -0
  78. package/dist/services/calendar-service.d.ts.map +1 -0
  79. package/dist/services/calendar-service.js +220 -0
  80. package/dist/services/calendar-service.js.map +1 -0
  81. package/dist/services/chat-service.d.ts +52 -0
  82. package/dist/services/chat-service.d.ts.map +1 -0
  83. package/dist/services/chat-service.js +170 -0
  84. package/dist/services/chat-service.js.map +1 -0
  85. package/dist/services/contact-service.d.ts +40 -0
  86. package/dist/services/contact-service.d.ts.map +1 -0
  87. package/dist/services/contact-service.js +137 -0
  88. package/dist/services/contact-service.js.map +1 -0
  89. package/dist/services/doc-service.d.ts +137 -0
  90. package/dist/services/doc-service.d.ts.map +1 -0
  91. package/dist/services/doc-service.js +516 -0
  92. package/dist/services/doc-service.js.map +1 -0
  93. package/dist/services/im-service.d.ts +64 -0
  94. package/dist/services/im-service.d.ts.map +1 -0
  95. package/dist/services/im-service.js +215 -0
  96. package/dist/services/im-service.js.map +1 -0
  97. package/dist/services/index.d.ts +9 -0
  98. package/dist/services/index.d.ts.map +1 -0
  99. package/dist/services/index.js +10 -0
  100. package/dist/services/index.js.map +1 -0
  101. package/dist/services/task-service.d.ts +19 -0
  102. package/dist/services/task-service.d.ts.map +1 -0
  103. package/dist/services/task-service.js +126 -0
  104. package/dist/services/task-service.js.map +1 -0
  105. package/dist/setup/device-flow.d.ts +31 -0
  106. package/dist/setup/device-flow.d.ts.map +1 -0
  107. package/dist/setup/device-flow.js +133 -0
  108. package/dist/setup/device-flow.js.map +1 -0
  109. package/dist/setup/preflight.d.ts +1 -0
  110. package/dist/setup/preflight.d.ts.map +1 -1
  111. package/dist/setup/preflight.js +167 -1
  112. package/dist/setup/preflight.js.map +1 -1
  113. package/dist/setup/wizard.d.ts +3 -1
  114. package/dist/setup/wizard.d.ts.map +1 -1
  115. package/dist/setup/wizard.js +113 -125
  116. package/dist/setup/wizard.js.map +1 -1
  117. package/dist/standalone.d.ts.map +1 -1
  118. package/dist/standalone.js +49 -13
  119. package/dist/standalone.js.map +1 -1
  120. package/dist/types/extended.d.ts +196 -0
  121. package/dist/types/extended.d.ts.map +1 -0
  122. package/dist/types/extended.js +6 -0
  123. package/dist/types/extended.js.map +1 -0
  124. package/package.json +5 -3
@@ -0,0 +1,516 @@
1
+ import { BaseService } from './base-service.js';
2
+ /**
3
+ * Document Service
4
+ * Provides document operations: create, read, search, update
5
+ * Supports both docx and wiki documents
6
+ *
7
+ * Aligned with lark-cli docs features:
8
+ * - +create: Create from XML/Markdown content
9
+ * - +fetch: Read with detail/scope support
10
+ * - +update: 8 commands (str_replace, block_insert_after, etc.)
11
+ * - +search: Cloud space search
12
+ */
13
+ export class DocService extends BaseService {
14
+ constructor(api) {
15
+ super(api);
16
+ }
17
+ /**
18
+ * Create a new document from content.
19
+ * Supports XML (default) and Markdown formats.
20
+ */
21
+ async createDocument(options) {
22
+ this.validateRequired(options.content, 'content');
23
+ return this.call('createDocument', async () => {
24
+ const client = this.api.getClient();
25
+ const body = {
26
+ content: options.content,
27
+ };
28
+ if (options.format === 'markdown') {
29
+ body.document_format = 'markdown';
30
+ }
31
+ if (options.parentToken) {
32
+ body.folder_token = options.parentToken;
33
+ }
34
+ const res = await client.request({
35
+ method: 'POST',
36
+ url: '/open-apis/docx/v1/documents',
37
+ data: body,
38
+ });
39
+ if (res.code !== 0) {
40
+ throw new Error(`Failed to create document: ${res.msg || 'Unknown error'}`);
41
+ }
42
+ const doc = res.data?.document;
43
+ // Extract title from content if not provided by API
44
+ let title = doc.title;
45
+ if (!title && options.format === 'markdown') {
46
+ const match = options.content.match(/^#\s+(.+)$/m);
47
+ title = match ? match[1].trim() : undefined;
48
+ }
49
+ return {
50
+ documentId: doc.document_id,
51
+ revisionId: doc.revision_id,
52
+ url: doc.url || `https://open.feishu.cn/docx/${doc.document_id}`,
53
+ title: title || 'Untitled',
54
+ };
55
+ });
56
+ }
57
+ /**
58
+ * Create a document from Markdown content (convenience method).
59
+ */
60
+ async createDocumentFromMarkdown(title, markdown, options) {
61
+ this.validateRequired(title, 'title');
62
+ this.validateRequired(markdown, 'markdown');
63
+ const content = `# ${title}\n\n${markdown}`;
64
+ return this.createDocument({
65
+ content,
66
+ format: 'markdown',
67
+ parentToken: options?.parentToken,
68
+ });
69
+ }
70
+ /**
71
+ * Fetch document content with support for detail levels and scopes.
72
+ *
73
+ * @param docToken - Document token or URL
74
+ * @param options - Fetch options
75
+ * - detail: 'simple' | 'with-ids' | 'full' (default: 'simple')
76
+ * - scope: 'outline' | 'section' | 'range' | 'keyword' (default: undefined = full doc)
77
+ * - docFormat: 'xml' | 'markdown' | 'text' (default: 'markdown')
78
+ * - startBlockId: For section/range scope
79
+ * - endBlockId: For range scope
80
+ * - keyword: For keyword scope
81
+ * - maxDepth: For outline scope (heading depth limit)
82
+ */
83
+ async fetchDocument(docToken, options) {
84
+ this.validateRequired(docToken, 'docToken');
85
+ return this.call('fetchDocument', async () => {
86
+ const client = this.api.getClient();
87
+ // Build query params
88
+ const params = {};
89
+ if (options?.detail) {
90
+ params.detail = options.detail;
91
+ }
92
+ if (options?.docFormat) {
93
+ params.document_format = options.docFormat;
94
+ }
95
+ if (options?.scope) {
96
+ params.scope = options.scope;
97
+ if (options.scope === 'section' || options.scope === 'range') {
98
+ if (options.startBlockId) {
99
+ params.start_block_id = options.startBlockId;
100
+ }
101
+ if (options.scope === 'range' && options.endBlockId) {
102
+ params.end_block_id = options.endBlockId;
103
+ }
104
+ }
105
+ if (options.scope === 'keyword' && options.keyword) {
106
+ params.keyword = options.keyword;
107
+ }
108
+ if (options.scope === 'outline' && options.maxDepth !== undefined) {
109
+ params.max_depth = options.maxDepth;
110
+ }
111
+ }
112
+ // Use v2 API for fetching
113
+ const res = await client.request({
114
+ method: 'GET',
115
+ url: `/open-apis/docx/v1/documents/${docToken}/content`,
116
+ params,
117
+ });
118
+ if (res.code !== 0) {
119
+ throw new Error(`Failed to fetch document: ${res.msg || 'Unknown error'}`);
120
+ }
121
+ const data = res.data || {};
122
+ return {
123
+ documentId: docToken,
124
+ title: data.title || 'Untitled',
125
+ content: data.content,
126
+ revisionId: data.revision_id,
127
+ };
128
+ });
129
+ }
130
+ /**
131
+ * Get document outline (table of contents).
132
+ * Returns heading structure up to specified depth.
133
+ */
134
+ async getDocumentOutline(docToken, maxDepth) {
135
+ const content = await this.fetchDocument(docToken, {
136
+ scope: 'outline',
137
+ maxDepth: maxDepth || 3,
138
+ docFormat: 'xml',
139
+ });
140
+ // Parse outline from XML content
141
+ // Simple regex-based extraction for headings with id attributes
142
+ const outline = [];
143
+ const headingRegex = /<h(\d)[^>]*id="([^"]+)"[^>]*>([^<]*)<\/h\d>/gi;
144
+ let match;
145
+ while ((match = headingRegex.exec(content.content || '')) !== null) {
146
+ outline.push({
147
+ level: parseInt(match[1], 10),
148
+ text: match[3].trim(),
149
+ blockId: match[2],
150
+ });
151
+ }
152
+ return outline;
153
+ }
154
+ /**
155
+ * Update document content with various commands.
156
+ *
157
+ * Commands:
158
+ * - str_replace: Find and replace text
159
+ * - block_insert_after: Insert after a block
160
+ * - block_replace: Replace a block
161
+ * - block_delete: Delete block(s)
162
+ * - block_copy_insert_after: Copy blocks and insert after
163
+ * - block_move_after: Move blocks after a position
164
+ * - append: Append to end of document
165
+ * - overwrite: Overwrite entire document
166
+ */
167
+ async updateDocument(docToken, command, options) {
168
+ this.validateRequired(docToken, 'docToken');
169
+ return this.call('updateDocument', async () => {
170
+ const client = this.api.getClient();
171
+ const body = {
172
+ document_revision_id: -1, // Use latest
173
+ };
174
+ // Build request body based on command
175
+ switch (command) {
176
+ case 'str_replace': {
177
+ if (!options.pattern || options.content === undefined) {
178
+ throw new Error('str_replace requires pattern and content');
179
+ }
180
+ body.replace_texts = [
181
+ {
182
+ old_string: options.pattern,
183
+ new_string: options.content,
184
+ },
185
+ ];
186
+ break;
187
+ }
188
+ case 'block_insert_after': {
189
+ if (!options.blockId || !options.content) {
190
+ throw new Error('block_insert_after requires blockId and content');
191
+ }
192
+ body.block_id = options.blockId;
193
+ body.children = this.parseContentToBlocks(options.content, options.docFormat);
194
+ break;
195
+ }
196
+ case 'block_replace': {
197
+ if (!options.blockId || !options.content) {
198
+ throw new Error('block_replace requires blockId and content');
199
+ }
200
+ body.replace_blocks = {
201
+ block_id: options.blockId,
202
+ children: this.parseContentToBlocks(options.content, options.docFormat),
203
+ };
204
+ break;
205
+ }
206
+ case 'block_delete': {
207
+ if (!options.blockId) {
208
+ throw new Error('block_delete requires blockId');
209
+ }
210
+ body.delete_blocks = options.blockId.split(',');
211
+ break;
212
+ }
213
+ case 'append': {
214
+ if (!options.content) {
215
+ throw new Error('append requires content');
216
+ }
217
+ body.block_id = '-1'; // Append to end
218
+ body.children = this.parseContentToBlocks(options.content, options.docFormat);
219
+ break;
220
+ }
221
+ case 'overwrite': {
222
+ if (!options.content) {
223
+ throw new Error('overwrite requires content');
224
+ }
225
+ // Overwrite sends the full content
226
+ body.content = options.content;
227
+ if (options.docFormat === 'markdown') {
228
+ body.document_format = 'markdown';
229
+ }
230
+ break;
231
+ }
232
+ default:
233
+ throw new Error(`Unknown command: ${command}`);
234
+ }
235
+ const res = await client.request({
236
+ method: 'PATCH',
237
+ url: `/open-apis/docx/v1/documents/${docToken}`,
238
+ data: body,
239
+ });
240
+ if (res.code !== 0) {
241
+ throw new Error(`Failed to update document: ${res.msg || 'Unknown error'}`);
242
+ }
243
+ return {
244
+ revisionId: res.data?.document?.revision_id,
245
+ };
246
+ });
247
+ }
248
+ /**
249
+ * Search documents in cloud space.
250
+ * Supports advanced query syntax.
251
+ */
252
+ async searchDocuments(query, options) {
253
+ this.validateRequired(query, 'query');
254
+ return this.call('searchDocuments', async () => {
255
+ const client = this.api.getClient();
256
+ const body = {
257
+ query,
258
+ search_key: query,
259
+ page_size: options?.pageSize || 20,
260
+ };
261
+ if (options?.pageToken) {
262
+ body.page_token = options.pageToken;
263
+ }
264
+ // Build filters
265
+ const filters = {};
266
+ if (options?.filters) {
267
+ const f = options.filters;
268
+ if (f.docTypes?.length) {
269
+ filters.doc_types = f.docTypes;
270
+ }
271
+ if (f.creatorIds?.length) {
272
+ filters.creator_ids = f.creatorIds;
273
+ }
274
+ if (f.folderTokens?.length) {
275
+ filters.folder_tokens = f.folderTokens;
276
+ }
277
+ if (f.openTime) {
278
+ filters.open_time = {};
279
+ if (f.openTime.start)
280
+ filters.open_time.start = new Date(f.openTime.start).getTime() / 1000;
281
+ if (f.openTime.end)
282
+ filters.open_time.end = new Date(f.openTime.end).getTime() / 1000;
283
+ }
284
+ if (f.createTime) {
285
+ filters.create_time = {};
286
+ if (f.createTime.start)
287
+ filters.create_time.start = new Date(f.createTime.start).getTime() / 1000;
288
+ if (f.createTime.end)
289
+ filters.create_time.end = new Date(f.createTime.end).getTime() / 1000;
290
+ }
291
+ if (f.onlyTitle) {
292
+ filters.only_title = true;
293
+ }
294
+ if (f.onlyComment) {
295
+ filters.only_comment = true;
296
+ }
297
+ }
298
+ if (Object.keys(filters).length > 0) {
299
+ body.filter = filters;
300
+ }
301
+ const res = await client.request({
302
+ method: 'POST',
303
+ url: '/open-apis/search/v2/doc_wiki/search',
304
+ data: body,
305
+ });
306
+ if (res.code !== 0) {
307
+ throw new Error(`Failed to search documents: ${res.msg || 'Unknown error'}`);
308
+ }
309
+ const data = res.data || {};
310
+ return {
311
+ documents: (data.items || []).map((item) => this.parseSearchResult(item)),
312
+ hasMore: data.has_more || false,
313
+ pageToken: data.page_token,
314
+ };
315
+ });
316
+ }
317
+ /**
318
+ * Share a document to a chat as an interactive card.
319
+ */
320
+ async shareDocument(chatId, docToken, options) {
321
+ this.validateRequired(chatId, 'chatId');
322
+ this.validateRequired(docToken, 'docToken');
323
+ return this.call('shareDocument', async () => {
324
+ // Try to fetch document info for better presentation
325
+ let title = '文档';
326
+ let url = '';
327
+ try {
328
+ const docInfo = await this.fetchDocument(docToken, { detail: 'simple' });
329
+ title = docInfo.title || title;
330
+ url = `https://open.feishu.cn/docx/${docToken}`;
331
+ }
332
+ catch {
333
+ url = `https://open.feishu.cn/docx/${docToken}`;
334
+ }
335
+ const iconMap = {
336
+ doc: '📄',
337
+ docx: '📝',
338
+ wiki: '📚',
339
+ sheet: '📊',
340
+ };
341
+ const card = {
342
+ config: { wide_screen_mode: true },
343
+ header: {
344
+ template: 'blue',
345
+ title: {
346
+ tag: 'plain_text',
347
+ content: `${iconMap[options?.docType || 'doc']} ${title}`,
348
+ },
349
+ },
350
+ elements: [
351
+ ...(options?.description
352
+ ? [
353
+ {
354
+ tag: 'div',
355
+ text: {
356
+ tag: 'lark_md',
357
+ content: options.description,
358
+ },
359
+ },
360
+ ]
361
+ : []),
362
+ {
363
+ tag: 'action',
364
+ actions: [
365
+ {
366
+ tag: 'button',
367
+ text: {
368
+ tag: 'plain_text',
369
+ content: '查看文档',
370
+ },
371
+ type: 'primary',
372
+ url,
373
+ },
374
+ ],
375
+ },
376
+ ],
377
+ };
378
+ return this.api.sendCard(chatId, card);
379
+ });
380
+ }
381
+ /**
382
+ * Upload a resource (image/file) to a document.
383
+ */
384
+ async uploadResource(filePath, fileName) {
385
+ this.validateRequired(filePath, 'filePath');
386
+ return this.call('uploadResource', async () => {
387
+ const { readFileSync } = await import('fs');
388
+ const { basename } = await import('path');
389
+ const buffer = readFileSync(filePath);
390
+ const name = fileName || basename(filePath);
391
+ const mimeType = this.guessMimeType(name);
392
+ const client = this.api.getClient();
393
+ // Create form data for upload
394
+ const form = new FormData();
395
+ form.append('file', new Blob([buffer], { type: mimeType }), name);
396
+ form.append('file_name', name);
397
+ const res = await client.request({
398
+ method: 'POST',
399
+ url: '/open-apis/im/v1/files',
400
+ data: form,
401
+ });
402
+ if (res.code !== 0) {
403
+ throw new Error(`Failed to upload resource: ${res.msg || 'Unknown error'}`);
404
+ }
405
+ return {
406
+ fileKey: res.data?.file_token,
407
+ fileName: name,
408
+ mimeType,
409
+ };
410
+ });
411
+ }
412
+ // ── Private helpers ──
413
+ parseSearchResult(item) {
414
+ return {
415
+ documentId: item.docs_token || item.token || item.document_id,
416
+ title: item.title || 'Untitled',
417
+ url: item.url || item.document_url,
418
+ type: this.mapDocType(item.doc_type || item.type),
419
+ createTime: item.create_time ? new Date(item.create_time * 1000).toISOString() : undefined,
420
+ updateTime: item.open_time ? new Date(item.open_time * 1000).toISOString() : undefined,
421
+ ownerId: item.creator_id,
422
+ };
423
+ }
424
+ mapDocType(type) {
425
+ const typeMap = {
426
+ 'DOC': 'doc',
427
+ 'DOCX': 'docx',
428
+ 'WIKI': 'wiki',
429
+ 'SHEET': 'sheet',
430
+ 'BITABLE': 'doc',
431
+ };
432
+ return typeMap[type?.toUpperCase()] || 'docx';
433
+ }
434
+ guessMimeType(fileName) {
435
+ const ext = fileName.split('.').pop()?.toLowerCase();
436
+ const mimeMap = {
437
+ 'jpg': 'image/jpeg',
438
+ 'jpeg': 'image/jpeg',
439
+ 'png': 'image/png',
440
+ 'gif': 'image/gif',
441
+ 'pdf': 'application/pdf',
442
+ 'doc': 'application/msword',
443
+ 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
444
+ 'xls': 'application/vnd.ms-excel',
445
+ 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
446
+ };
447
+ return mimeMap[ext || ''] || 'application/octet-stream';
448
+ }
449
+ parseContentToBlocks(content, format) {
450
+ // Simple parser - in production, would use proper XML/Markdown parser
451
+ if (format === 'markdown') {
452
+ // Convert markdown to basic blocks
453
+ return this.markdownToBlocks(content);
454
+ }
455
+ // Assume XML format
456
+ return this.xmlToBlocks(content);
457
+ }
458
+ markdownToBlocks(markdown) {
459
+ const blocks = [];
460
+ const lines = markdown.split('\n');
461
+ for (const line of lines) {
462
+ if (line.startsWith('# ')) {
463
+ blocks.push({
464
+ block_type: 'heading1',
465
+ heading1: { elements: [{ text_run: { content: line.slice(2) } }] },
466
+ });
467
+ }
468
+ else if (line.startsWith('## ')) {
469
+ blocks.push({
470
+ block_type: 'heading2',
471
+ heading2: { elements: [{ text_run: { content: line.slice(3) } }] },
472
+ });
473
+ }
474
+ else if (line.startsWith('- ')) {
475
+ blocks.push({
476
+ block_type: 'bullet',
477
+ bullet: { elements: [{ text_run: { content: line.slice(2) } }] },
478
+ });
479
+ }
480
+ else if (line.trim()) {
481
+ blocks.push({
482
+ block_type: 'paragraph',
483
+ paragraph: { elements: [{ text_run: { content: line } }] },
484
+ });
485
+ }
486
+ }
487
+ return blocks;
488
+ }
489
+ xmlToBlocks(xml) {
490
+ // Simple XML to blocks conversion
491
+ // In production, use a proper XML parser
492
+ const blocks = [];
493
+ // Parse heading tags
494
+ const headingRegex = /<h(\d)>([^<]*)<\/h\d>/g;
495
+ let match;
496
+ while ((match = headingRegex.exec(xml)) !== null) {
497
+ const level = parseInt(match[1], 10);
498
+ const text = match[2];
499
+ const blockType = level === 1 ? 'heading1' : level === 2 ? 'heading2' : 'heading3';
500
+ blocks.push({
501
+ block_type: blockType,
502
+ [blockType]: { elements: [{ text_run: { content: text } }] },
503
+ });
504
+ }
505
+ // Parse paragraph tags
506
+ const pRegex = /<p>([^<]*)<\/p>/g;
507
+ while ((match = pRegex.exec(xml)) !== null) {
508
+ blocks.push({
509
+ block_type: 'paragraph',
510
+ paragraph: { elements: [{ text_run: { content: match[1] } }] },
511
+ });
512
+ }
513
+ return blocks;
514
+ }
515
+ }
516
+ //# sourceMappingURL=doc-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-service.js","sourceRoot":"","sources":["../../src/services/doc-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { BaseService } from './base-service.js';
2
+ import type { FeishuAPI } from '../feishu/api.js';
3
+ import type { FeishuMessage, MessageReplyOptions, MessageSearchResult, ResourceDownloadResult } from '../types/extended.js';
4
+ /**
5
+ * IM (Instant Messaging) Service
6
+ * Provides message operations: send, reply, search, download resources
7
+ */
8
+ export declare class IMService extends BaseService {
9
+ constructor(api: FeishuAPI);
10
+ /**
11
+ * Send a text message to a chat.
12
+ */
13
+ sendTextMessage(chatId: string, text: string): Promise<FeishuMessage>;
14
+ /**
15
+ * Send an interactive card to a chat.
16
+ */
17
+ sendCardMessage(chatId: string, card: any): Promise<FeishuMessage>;
18
+ /**
19
+ * Send a post (rich text) message to a chat.
20
+ * Supports text, links, mentions, images in one message.
21
+ */
22
+ sendPostMessage(chatId: string, title: string, content: Array<{
23
+ tag: 'text' | 'a' | 'at';
24
+ text?: string;
25
+ href?: string;
26
+ user_id?: string;
27
+ }>): Promise<FeishuMessage>;
28
+ /**
29
+ * Send a document link as an interactive card.
30
+ * Displays document title, description, and a clickable button.
31
+ */
32
+ sendDocumentCard(chatId: string, docInfo: {
33
+ title: string;
34
+ url: string;
35
+ description?: string;
36
+ docType?: 'doc' | 'docx' | 'wiki' | 'sheet';
37
+ }): Promise<FeishuMessage>;
38
+ /**
39
+ * Reply to a specific message.
40
+ * Supports replying in thread.
41
+ */
42
+ replyMessage(options: MessageReplyOptions): Promise<FeishuMessage>;
43
+ /**
44
+ * Search messages in a chat or globally.
45
+ */
46
+ searchMessages(query: string, options?: {
47
+ chatId?: string;
48
+ pageSize?: number;
49
+ pageToken?: string;
50
+ }): Promise<MessageSearchResult>;
51
+ /**
52
+ * Download a resource (image/file) from a message.
53
+ * Supports range requests for large files.
54
+ */
55
+ downloadResource(messageId: string, fileKey: string, type: 'image' | 'file', outputPath?: string): Promise<ResourceDownloadResult>;
56
+ /**
57
+ * Get message history for a chat.
58
+ */
59
+ getMessageHistory(chatId: string, options?: {
60
+ pageSize?: number;
61
+ pageToken?: string;
62
+ }): Promise<MessageSearchResult>;
63
+ }
64
+ //# sourceMappingURL=im-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"im-service.d.ts","sourceRoot":"","sources":["../../src/services/im-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE5H;;;GAGG;AACH,qBAAa,SAAU,SAAQ,WAAW;gBAC5B,GAAG,EAAE,SAAS;IAI1B;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAS3E;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;IAQxE;;;OAGG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAC3F,OAAO,CAAC,aAAa,CAAC;IA8BzB;;;OAGG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;KAC7C,GACA,OAAO,CAAC,aAAa,CAAC;IAuDzB;;;OAGG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IA0BxE;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkChC;;;OAGG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,GAAG,MAAM,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,CAAC;IA4BlC;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA4BjC"}