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