bitrix24-tasks-mcp-server 1.5.2 → 1.6.3

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.
package/README.md CHANGED
@@ -176,6 +176,7 @@ Local development in Cursor (`~/.cursor/mcp.json`):
176
176
  - `bitrix24_get_tasks_from_date_range` - Get tasks created in a date range
177
177
  - `bitrix24_update_task` - Update an existing task
178
178
  - `bitrix24_update_task` supports `parentTaskId` to change parent linkage
179
+ - `bitrix24_update_task_custom_fields` - Update one or more `UF_TASK_*` fields with read-before-write protection and read-back verification
179
180
  - `bitrix24_get_task_stages` - Get Kanban/My Plan stages for a group or user plan
180
181
  - `bitrix24_can_move_task_in_stages` - Check whether tasks can be moved in a group/user stage board
181
182
  - `bitrix24_move_task_to_stage` - Move a task to another Kanban/My Plan stage by `stageId` or by `stageName` + `entityId`
@@ -190,6 +191,20 @@ Local development in Cursor (`~/.cursor/mcp.json`):
190
191
  - `bitrix24_add_task_dependency` - Create dependency link between tasks
191
192
  - `bitrix24_delete_task_dependency` - Remove dependency link between tasks
192
193
 
194
+ Example — fill an empty user field and a numeric field:
195
+
196
+ ```json
197
+ {
198
+ "taskId": "43691",
199
+ "fields": {
200
+ "UF_TASK_DECISION_MAKER": "42",
201
+ "UF_TASK_BUDGET": 150000
202
+ }
203
+ }
204
+ ```
205
+
206
+ Populated fields are protected by default. Pass `"overwriteExisting": true` only when an existing value must intentionally be replaced. Field values may be scalars, arrays, objects, or `null`; the server updates only changed fields and verifies every write.
207
+
193
208
  ### Projects
194
209
 
195
210
  - `bitrix24_create_project` - Create a project/workgroup
@@ -22,6 +22,41 @@ export interface BitrixTask {
22
22
  CLOSED_DATE?: string;
23
23
  STATUS_COMPLETE?: string;
24
24
  UF_TASK_WEBDAV_FILES?: string[];
25
+ [key: string]: unknown;
26
+ }
27
+ export interface TaskCustomFieldsUpdateResult {
28
+ taskId: string;
29
+ changed: boolean;
30
+ updatedFields: string[];
31
+ unchangedFields: string[];
32
+ overwrittenFields: string[];
33
+ }
34
+ export interface BitrixTaskStageSummary {
35
+ taskId: string;
36
+ groupId?: string;
37
+ stageId?: string;
38
+ title?: string;
39
+ changedDate?: string;
40
+ }
41
+ export interface BitrixTaskSummary {
42
+ id?: string;
43
+ title?: string;
44
+ titleTruncated?: boolean;
45
+ titleOriginalChars?: number;
46
+ titleSha256?: string;
47
+ description?: string;
48
+ descriptionTruncated?: boolean;
49
+ descriptionOriginalChars?: number;
50
+ descriptionSha256?: string;
51
+ groupId?: string;
52
+ stageId?: string;
53
+ status?: string;
54
+ changedDate?: string;
55
+ createdDate?: string;
56
+ responsibleId?: string;
57
+ deadline?: string;
58
+ priority?: string;
59
+ parentId?: string;
25
60
  }
26
61
  export interface BitrixTaskStage {
27
62
  ID: string;
@@ -82,6 +117,31 @@ export interface GetTaskFilesOptions {
82
117
  imagesOnly?: boolean;
83
118
  saveToDirectory?: string;
84
119
  }
120
+ export interface GetTaskFilesMetadataOptions {
121
+ diskFileIds?: string[];
122
+ imagesOnly?: boolean;
123
+ afterFileId?: string;
124
+ limit?: number;
125
+ }
126
+ export interface TaskFileMetadataPage {
127
+ taskId: string;
128
+ afterFileId?: string;
129
+ nextAfterFileId?: string;
130
+ hasMore: boolean;
131
+ files: Array<{
132
+ diskFileId: string;
133
+ attachmentId: string;
134
+ fileId?: string;
135
+ fileName: string;
136
+ fileNameTruncated: boolean;
137
+ fileNameOriginalChars: number;
138
+ fileNameSha256?: string;
139
+ mimeType: string;
140
+ size?: number;
141
+ isImage: boolean;
142
+ }>;
143
+ errors: string[];
144
+ }
85
145
  export type TaskCommentsPreferApi = 'auto' | 'chat' | 'legacy';
86
146
  export interface GetTaskDetailsOptions {
87
147
  includeComments?: boolean;
@@ -170,6 +230,7 @@ export declare class Bitrix24Client {
170
230
  private readonly fetchImpl;
171
231
  constructor(webhookUrl?: string, fetchImpl?: typeof fetch);
172
232
  getPortalOrigin(): string;
233
+ getPublicationLockScope(): string;
173
234
  private buildMethodUrl;
174
235
  private extractApiError;
175
236
  private enforceRateLimit;
@@ -178,8 +239,11 @@ export declare class Bitrix24Client {
178
239
  private appendFormValue;
179
240
  createTask(task: BitrixTask): Promise<string>;
180
241
  getTask(id: string): Promise<BitrixTask>;
242
+ getTaskSummary(id: string, select?: string[]): Promise<BitrixTaskSummary>;
243
+ getTaskStage(taskId: string): Promise<BitrixTaskStageSummary>;
181
244
  getTaskDetails(taskId: string, options?: GetTaskDetailsOptions): Promise<TaskDetailsResult>;
182
245
  updateTask(id: string, task: Partial<BitrixTask>): Promise<boolean>;
246
+ updateTaskCustomFields(taskId: string, fields: Record<string, unknown>, overwriteExisting?: boolean): Promise<TaskCustomFieldsUpdateResult>;
183
247
  getTaskStages(entityId: string | number, entityType?: 'U' | 'G'): Promise<BitrixTaskStage[]>;
184
248
  canMoveTaskInStages(entityId: string | number, entityType?: 'U' | 'G'): Promise<boolean>;
185
249
  moveTaskToStage(params: {
@@ -249,6 +313,7 @@ export declare class Bitrix24Client {
249
313
  files: TaskFileDownloadResult[];
250
314
  errors: string[];
251
315
  }>;
316
+ getTaskFilesMetadata(taskId: string, options?: GetTaskFilesMetadataOptions): Promise<TaskFileMetadataPage>;
252
317
  resolveTaskChat(taskId: string): Promise<TaskChatRef | null>;
253
318
  listTaskComments(taskId: string, options?: {
254
319
  order?: Record<string, 'asc' | 'desc' | 'ASC' | 'DESC'>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bitrix24/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bitrix24/client.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
+ import { createHash } from 'node:crypto';
1
2
  import fetch from 'node-fetch';
2
3
  import { z } from 'zod';
3
4
  import { collectDiskFileIdsFromTask, guessMimeType, isImageFile, parseWebdavFileToken, readLocalFile, saveBufferToDirectory, toWebdavFileToken } from './taskFiles.js';
4
5
  import { extractCommentAttachments, normalizeTaskComment } from './taskComments.js';
5
6
  import { buildDialogId, indexChatFiles, isImageChatFile, normalizeChatFile, normalizeChatMessage, resolveMessageAttachments } from './taskChat.js';
6
- const BITRIX24_WEBHOOK_URL = process.env.BITRIX24_WEBHOOK_URL ||
7
- 'https://sviluppofranchising.bitrix24.it/rest/27/wwugdez6m774803q/';
7
+ const BITRIX24_WEBHOOK_URL = process.env.BITRIX24_WEBHOOK_URL ?? '';
8
8
  const BitrixResponseSchema = z.object({
9
9
  result: z.any(),
10
10
  error: z.optional(z.object({
@@ -19,6 +19,102 @@ const BitrixResponseSchema = z.object({
19
19
  duration: z.number()
20
20
  }))
21
21
  });
22
+ function optionalString(value) {
23
+ if (value === undefined || value === null) {
24
+ return undefined;
25
+ }
26
+ const normalized = String(value).trim();
27
+ return normalized || undefined;
28
+ }
29
+ function isEmptyCustomFieldValue(value) {
30
+ return value === undefined || value === null || value === '' ||
31
+ (Array.isArray(value) && value.length === 0);
32
+ }
33
+ function canonicalCustomFieldValue(value) {
34
+ if (isEmptyCustomFieldValue(value))
35
+ return null;
36
+ if (Array.isArray(value)) {
37
+ return value
38
+ .map(canonicalCustomFieldValue)
39
+ .sort((left, right) => JSON.stringify(left).localeCompare(JSON.stringify(right)));
40
+ }
41
+ if (typeof value === 'object' && value !== null) {
42
+ return Object.fromEntries(Object.entries(value)
43
+ .sort(([left], [right]) => left.localeCompare(right))
44
+ .map(([key, item]) => [key, canonicalCustomFieldValue(item)]));
45
+ }
46
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint') {
47
+ return String(value).trim();
48
+ }
49
+ return value;
50
+ }
51
+ function customFieldValuesEqual(left, right) {
52
+ return JSON.stringify(canonicalCustomFieldValue(left)) ===
53
+ JSON.stringify(canonicalCustomFieldValue(right));
54
+ }
55
+ function getCaseInsensitiveField(record, fieldName) {
56
+ if (fieldName in record)
57
+ return record[fieldName];
58
+ const normalizedName = fieldName.toLocaleUpperCase('en-US');
59
+ const key = Object.keys(record).find((candidate) => candidate.toLocaleUpperCase('en-US') === normalizedName);
60
+ return key === undefined ? undefined : record[key];
61
+ }
62
+ const TASK_SUMMARY_SELECT_FIELDS = new Set([
63
+ 'ID',
64
+ 'TITLE',
65
+ 'DESCRIPTION',
66
+ 'GROUP_ID',
67
+ 'STAGE_ID',
68
+ 'STAGE',
69
+ 'STATUS',
70
+ 'CHANGED_DATE',
71
+ 'CREATED_DATE',
72
+ 'RESPONSIBLE_ID',
73
+ 'DEADLINE',
74
+ 'PRIORITY',
75
+ 'PARENT_ID'
76
+ ]);
77
+ const DEFAULT_TASK_SUMMARY_SELECT = [
78
+ 'ID',
79
+ 'TITLE',
80
+ 'DESCRIPTION',
81
+ 'GROUP_ID',
82
+ 'STAGE_ID',
83
+ 'STATUS',
84
+ 'CHANGED_DATE',
85
+ 'RESPONSIBLE_ID'
86
+ ];
87
+ const MAX_TASK_SUMMARY_TITLE_CHARS = 512;
88
+ const MAX_TASK_SUMMARY_DESCRIPTION_CHARS = 12_000;
89
+ const MAX_FILE_METADATA_NAME_CHARS = 512;
90
+ const MAX_FILE_METADATA_PAGE_SIZE = 25;
91
+ function compactProjectedString(value, maxChars) {
92
+ const normalized = optionalString(value);
93
+ if (normalized === undefined) {
94
+ return { truncated: false, originalChars: 0 };
95
+ }
96
+ if (normalized.length <= maxChars) {
97
+ return {
98
+ value: normalized,
99
+ truncated: false,
100
+ originalChars: normalized.length
101
+ };
102
+ }
103
+ return {
104
+ value: normalized.slice(0, maxChars),
105
+ truncated: true,
106
+ originalChars: normalized.length,
107
+ sha256: createHash('sha256').update(normalized).digest('hex')
108
+ };
109
+ }
110
+ function compareOpaqueIds(left, right) {
111
+ if (/^\d+$/.test(left) && /^\d+$/.test(right)) {
112
+ const leftNumber = BigInt(left);
113
+ const rightNumber = BigInt(right);
114
+ return leftNumber < rightNumber ? -1 : leftNumber > rightNumber ? 1 : 0;
115
+ }
116
+ return left.localeCompare(right, 'en', { numeric: true });
117
+ }
22
118
  export class Bitrix24Client {
23
119
  baseUrl;
24
120
  lastRequestTime = 0;
@@ -32,6 +128,9 @@ export class Bitrix24Client {
32
128
  const match = this.baseUrl.match(/^(https?:\/\/[^/]+)/i);
33
129
  return match?.[1] ?? '';
34
130
  }
131
+ getPublicationLockScope() {
132
+ return this.getPortalOrigin();
133
+ }
35
134
  buildMethodUrl(method, useApiV3 = false) {
36
135
  let base = this.baseUrl;
37
136
  if (useApiV3) {
@@ -73,6 +172,9 @@ export class Bitrix24Client {
73
172
  return this.makeRequest(method, params, options);
74
173
  }
75
174
  async makeRequest(method, params = {}, options = {}) {
175
+ if (!this.baseUrl) {
176
+ throw new Error('BITRIX24_WEBHOOK_URL is required');
177
+ }
76
178
  await this.enforceRateLimit();
77
179
  const url = this.buildMethodUrl(method, options.useApiV3 === true);
78
180
  try {
@@ -152,6 +254,82 @@ export class Bitrix24Client {
152
254
  const result = await this.makeRequest('tasks.task.get', { taskId: id });
153
255
  return result.task;
154
256
  }
257
+ async getTaskSummary(id, select = DEFAULT_TASK_SUMMARY_SELECT) {
258
+ if (!id.trim()) {
259
+ throw new Error('task ID is required');
260
+ }
261
+ const normalizedSelect = [...new Set(select.map((field) => String(field).trim().toUpperCase()))];
262
+ if (normalizedSelect.length === 0 ||
263
+ normalizedSelect.length > TASK_SUMMARY_SELECT_FIELDS.size) {
264
+ throw new Error(`task summary select must contain between 1 and ${TASK_SUMMARY_SELECT_FIELDS.size} unique fields`);
265
+ }
266
+ const unsupported = normalizedSelect.filter((field) => !TASK_SUMMARY_SELECT_FIELDS.has(field));
267
+ if (unsupported.length > 0) {
268
+ throw new Error(`Unsupported task summary field(s): ${unsupported.join(', ')}`);
269
+ }
270
+ const result = await this.makeRequest('tasks.task.get', {
271
+ taskId: id,
272
+ select: normalizedSelect
273
+ });
274
+ const raw = (result?.task ?? {});
275
+ const projected = {};
276
+ const setString = (requestedField, outputKey, ...sourceKeys) => {
277
+ if (!normalizedSelect.includes(requestedField)) {
278
+ return;
279
+ }
280
+ for (const key of sourceKeys) {
281
+ const value = optionalString(raw[key]);
282
+ if (value !== undefined) {
283
+ projected[outputKey] = value;
284
+ return;
285
+ }
286
+ }
287
+ };
288
+ setString('ID', 'id', 'ID', 'id');
289
+ setString('GROUP_ID', 'groupId', 'GROUP_ID', 'groupId');
290
+ if (normalizedSelect.includes('STAGE_ID') || normalizedSelect.includes('STAGE')) {
291
+ setString(normalizedSelect.includes('STAGE_ID') ? 'STAGE_ID' : 'STAGE', 'stageId', 'STAGE_ID', 'stageId', 'STAGE', 'stage');
292
+ }
293
+ setString('STATUS', 'status', 'STATUS', 'status');
294
+ setString('CHANGED_DATE', 'changedDate', 'CHANGED_DATE', 'changedDate');
295
+ setString('CREATED_DATE', 'createdDate', 'CREATED_DATE', 'createdDate');
296
+ setString('RESPONSIBLE_ID', 'responsibleId', 'RESPONSIBLE_ID', 'responsibleId');
297
+ setString('DEADLINE', 'deadline', 'DEADLINE', 'deadline');
298
+ setString('PRIORITY', 'priority', 'PRIORITY', 'priority');
299
+ setString('PARENT_ID', 'parentId', 'PARENT_ID', 'parentId');
300
+ if (normalizedSelect.includes('TITLE')) {
301
+ const title = compactProjectedString(raw.TITLE ?? raw.title, MAX_TASK_SUMMARY_TITLE_CHARS);
302
+ projected.title = title.value;
303
+ projected.titleTruncated = title.truncated;
304
+ projected.titleOriginalChars = title.originalChars;
305
+ projected.titleSha256 = title.sha256;
306
+ }
307
+ if (normalizedSelect.includes('DESCRIPTION')) {
308
+ const description = compactProjectedString(raw.DESCRIPTION ?? raw.description, MAX_TASK_SUMMARY_DESCRIPTION_CHARS);
309
+ projected.description = description.value;
310
+ projected.descriptionTruncated = description.truncated;
311
+ projected.descriptionOriginalChars = description.originalChars;
312
+ projected.descriptionSha256 = description.sha256;
313
+ }
314
+ return projected;
315
+ }
316
+ async getTaskStage(taskId) {
317
+ const task = await this.getTaskSummary(taskId, [
318
+ 'ID',
319
+ 'TITLE',
320
+ 'GROUP_ID',
321
+ 'STAGE_ID',
322
+ 'STAGE',
323
+ 'CHANGED_DATE'
324
+ ]);
325
+ return {
326
+ taskId: task.id ?? taskId,
327
+ groupId: task.groupId,
328
+ stageId: task.stageId,
329
+ title: task.title,
330
+ changedDate: task.changedDate
331
+ };
332
+ }
155
333
  async getTaskDetails(taskId, options = {}) {
156
334
  const task = await this.getTask(taskId);
157
335
  const errors = [];
@@ -217,6 +395,73 @@ export class Bitrix24Client {
217
395
  const result = await this.makeRequest('tasks.task.update', { taskId: id, fields: task });
218
396
  return result === true;
219
397
  }
398
+ async updateTaskCustomFields(taskId, fields, overwriteExisting = false) {
399
+ const normalizedTaskId = String(taskId).trim();
400
+ if (!/^\d+$/.test(normalizedTaskId)) {
401
+ throw new Error('task ID must contain digits only');
402
+ }
403
+ if (!fields || typeof fields !== 'object' || Array.isArray(fields)) {
404
+ throw new Error('custom fields must be an object');
405
+ }
406
+ const fieldNames = Object.keys(fields).map((fieldName) => fieldName.trim().toUpperCase());
407
+ if (fieldNames.length < 1 || fieldNames.length > 20) {
408
+ throw new Error('between 1 and 20 custom fields are required');
409
+ }
410
+ const invalidFieldNames = fieldNames.filter((fieldName) => !/^UF_TASK_[A-Z0-9_]+$/.test(fieldName));
411
+ if (invalidFieldNames.length > 0) {
412
+ throw new Error(`Unsupported task custom field name(s): ${invalidFieldNames.join(', ')}`);
413
+ }
414
+ if (new Set(fieldNames).size !== fieldNames.length) {
415
+ throw new Error('custom field names must be unique (case-insensitive)');
416
+ }
417
+ const normalizedFields = Object.fromEntries(Object.entries(fields).map(([fieldName, value]) => [fieldName.trim().toUpperCase(), value]));
418
+ const readCustomFields = async () => {
419
+ const result = await this.makeRequest('task.item.getdata', {
420
+ TASKID: Number(normalizedTaskId)
421
+ });
422
+ const task = (result?.task ?? result ?? {});
423
+ return Object.fromEntries(fieldNames.map((fieldName) => [fieldName, getCaseInsensitiveField(task, fieldName)]));
424
+ };
425
+ const before = await readCustomFields();
426
+ const unchangedFields = fieldNames.filter((fieldName) => customFieldValuesEqual(before[fieldName], normalizedFields[fieldName]));
427
+ const fieldsToUpdate = fieldNames.filter((fieldName) => !unchangedFields.includes(fieldName));
428
+ const overwrittenFields = fieldsToUpdate.filter((fieldName) => !isEmptyCustomFieldValue(before[fieldName]));
429
+ if (overwrittenFields.length > 0 && !overwriteExisting) {
430
+ throw new Error(`Task ${normalizedTaskId} already has value(s) in ${overwrittenFields.join(', ')}; set overwriteExisting=true to replace them`);
431
+ }
432
+ if (fieldsToUpdate.length === 0) {
433
+ return {
434
+ taskId: normalizedTaskId,
435
+ changed: false,
436
+ updatedFields: [],
437
+ unchangedFields,
438
+ overwrittenFields: []
439
+ };
440
+ }
441
+ const updatePayload = Object.fromEntries(fieldsToUpdate.map((fieldName) => {
442
+ const value = normalizedFields[fieldName];
443
+ return [fieldName, isEmptyCustomFieldValue(value) ? '' : value];
444
+ }));
445
+ const updated = await this.makeRequest('task.item.update', {
446
+ TASKID: Number(normalizedTaskId),
447
+ FIELDS: updatePayload
448
+ });
449
+ if (updated !== true && updated !== '1' && updated !== 1) {
450
+ throw new Error(`Bitrix24 did not confirm custom field update for task ${normalizedTaskId}`);
451
+ }
452
+ const after = await readCustomFields();
453
+ const verificationFailures = fieldsToUpdate.filter((fieldName) => !customFieldValuesEqual(after[fieldName], normalizedFields[fieldName]));
454
+ if (verificationFailures.length > 0) {
455
+ throw new Error(`Failed to verify custom field(s) for task ${normalizedTaskId}: ${verificationFailures.join(', ')}`);
456
+ }
457
+ return {
458
+ taskId: normalizedTaskId,
459
+ changed: true,
460
+ updatedFields: fieldsToUpdate,
461
+ unchangedFields,
462
+ overwrittenFields
463
+ };
464
+ }
220
465
  async getTaskStages(entityId, entityType = 'G') {
221
466
  const result = await this.makeRequest('task.stages.get', { entityId });
222
467
  return Object.values(result ?? {}).map((stage) => this.normalizeTaskStage(stage, entityType));
@@ -760,6 +1005,81 @@ export class Bitrix24Client {
760
1005
  }
761
1006
  return { taskId, diskFileIds: uniqueIds, files, errors };
762
1007
  }
1008
+ async getTaskFilesMetadata(taskId, options = {}) {
1009
+ if (!taskId.trim()) {
1010
+ throw new Error('taskId is required');
1011
+ }
1012
+ const explicitIds = [
1013
+ ...new Set(options.diskFileIds?.map((id) => String(id).trim()).filter(Boolean) ?? [])
1014
+ ];
1015
+ if (explicitIds.length > 50) {
1016
+ throw new Error('diskFileIds must contain at most 50 unique IDs');
1017
+ }
1018
+ const limit = Math.min(MAX_FILE_METADATA_PAGE_SIZE, Math.max(1, Math.trunc(options.limit ?? MAX_FILE_METADATA_PAGE_SIZE)));
1019
+ const afterFileId = optionalString(options.afterFileId);
1020
+ const attachedFiles = await this.listTaskAttachedFiles(taskId);
1021
+ const candidates = explicitIds.length === 0
1022
+ ? attachedFiles
1023
+ : this.selectTaskAttachedFiles(attachedFiles, explicitIds);
1024
+ const errors = [];
1025
+ if (explicitIds.length > 0) {
1026
+ const matchedIds = new Set();
1027
+ for (const attached of candidates) {
1028
+ for (const requestedId of explicitIds) {
1029
+ if (this.matchesRequestedFileId(attached, requestedId)) {
1030
+ matchedIds.add(requestedId);
1031
+ }
1032
+ }
1033
+ }
1034
+ for (const unresolvedId of explicitIds.filter((id) => !matchedIds.has(id))) {
1035
+ try {
1036
+ const diskFile = await this.getDiskFile(parseWebdavFileToken(unresolvedId));
1037
+ candidates.push({
1038
+ attachmentId: unresolvedId,
1039
+ fileId: diskFile.id,
1040
+ name: diskFile.name,
1041
+ size: diskFile.size
1042
+ });
1043
+ }
1044
+ catch (error) {
1045
+ errors.push(`${unresolvedId}: ${error instanceof Error ? error.message : String(error)}`);
1046
+ }
1047
+ }
1048
+ }
1049
+ const uniqueCandidates = [...new Map(candidates.map((file) => [file.attachmentId, file])).values()]
1050
+ .filter((file) => file.attachmentId.length <= 64 &&
1051
+ (file.fileId === undefined || file.fileId.length <= 64))
1052
+ .filter((file) => options.imagesOnly !== true || isImageFile(file.name))
1053
+ .sort((left, right) => compareOpaqueIds(left.attachmentId, right.attachmentId))
1054
+ .filter((file) => afterFileId === undefined ||
1055
+ compareOpaqueIds(file.attachmentId, afterFileId) > 0);
1056
+ const page = uniqueCandidates.slice(0, limit);
1057
+ const files = page.map((file) => {
1058
+ const compactedName = compactProjectedString(file.name, MAX_FILE_METADATA_NAME_CHARS);
1059
+ return {
1060
+ diskFileId: file.fileId ? toWebdavFileToken(file.fileId) : file.attachmentId,
1061
+ attachmentId: file.attachmentId,
1062
+ fileId: file.fileId,
1063
+ fileName: compactedName.value ?? 'file',
1064
+ fileNameTruncated: compactedName.truncated,
1065
+ fileNameOriginalChars: compactedName.originalChars,
1066
+ fileNameSha256: compactedName.sha256,
1067
+ mimeType: guessMimeType(file.name),
1068
+ size: file.size !== undefined && Number.isFinite(file.size)
1069
+ ? file.size
1070
+ : undefined,
1071
+ isImage: isImageFile(file.name)
1072
+ };
1073
+ });
1074
+ return {
1075
+ taskId,
1076
+ afterFileId,
1077
+ nextAfterFileId: files.length > 0 ? files[files.length - 1].attachmentId : afterFileId,
1078
+ hasMore: uniqueCandidates.length > page.length,
1079
+ files,
1080
+ errors
1081
+ };
1082
+ }
763
1083
  async resolveTaskChat(taskId) {
764
1084
  try {
765
1085
  const legacy = await this.makeRequest('tasks.task.get', {