@pachca/cli 2026.7.0 → 2026.7.2

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 (88) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +2 -1
  3. package/README.template.md +1 -1
  4. package/dist/base-command.js +2 -0
  5. package/dist/client.js +51 -17
  6. package/dist/commands/bots/create.js +17 -8
  7. package/dist/commands/bots/delete.js +1 -2
  8. package/dist/commands/bots/get.js +1 -5
  9. package/dist/commands/bots/list-events.js +2 -2
  10. package/dist/commands/bots/list.js +2 -4
  11. package/dist/commands/bots/recreate-token-self.js +2 -2
  12. package/dist/commands/bots/recreate-token.js +2 -2
  13. package/dist/commands/bots/remove-event.js +1 -1
  14. package/dist/commands/bots/update-webhook.js +2 -2
  15. package/dist/commands/bots/update.js +16 -7
  16. package/dist/commands/chats/archive.js +3 -3
  17. package/dist/commands/chats/create.js +11 -5
  18. package/dist/commands/chats/download-export.js +2 -2
  19. package/dist/commands/chats/get.js +1 -4
  20. package/dist/commands/chats/list.js +4 -4
  21. package/dist/commands/chats/request-export.js +2 -2
  22. package/dist/commands/chats/unarchive.js +2 -2
  23. package/dist/commands/chats/update.js +10 -3
  24. package/dist/commands/custom-properties/list.js +2 -2
  25. package/dist/commands/files/direct-url.js +12 -12
  26. package/dist/commands/files/uploads.js +2 -2
  27. package/dist/commands/group-tags/create.js +10 -4
  28. package/dist/commands/group-tags/get.js +1 -1
  29. package/dist/commands/group-tags/list-users.js +2 -2
  30. package/dist/commands/group-tags/list.js +2 -3
  31. package/dist/commands/group-tags/update.js +9 -2
  32. package/dist/commands/members/add-group-tags.js +1 -1
  33. package/dist/commands/members/add.js +4 -4
  34. package/dist/commands/members/leave.js +1 -1
  35. package/dist/commands/members/list.js +3 -4
  36. package/dist/commands/members/remove.js +1 -2
  37. package/dist/commands/members/update.js +2 -3
  38. package/dist/commands/messages/create.js +4 -4
  39. package/dist/commands/messages/delete.js +1 -3
  40. package/dist/commands/messages/get.js +4 -4
  41. package/dist/commands/messages/list.js +2 -4
  42. package/dist/commands/messages/pin.js +2 -3
  43. package/dist/commands/messages/unfurl.js +4 -4
  44. package/dist/commands/messages/unpin.js +1 -2
  45. package/dist/commands/messages/update.js +4 -4
  46. package/dist/commands/oauth/token-info.js +2 -2
  47. package/dist/commands/profile/delete-avatar.js +1 -2
  48. package/dist/commands/profile/delete-status.js +1 -2
  49. package/dist/commands/profile/get-status.js +1 -5
  50. package/dist/commands/profile/get.js +3 -3
  51. package/dist/commands/profile/update-avatar.js +2 -3
  52. package/dist/commands/profile/update-status.js +6 -4
  53. package/dist/commands/reactions/add.js +2 -3
  54. package/dist/commands/reactions/list.js +1 -5
  55. package/dist/commands/reactions/remove.js +1 -2
  56. package/dist/commands/read-member/list-readers.js +2 -2
  57. package/dist/commands/search/list-chats.js +3 -3
  58. package/dist/commands/search/list-messages.js +2 -2
  59. package/dist/commands/search/list-users.js +4 -4
  60. package/dist/commands/security/list.js +6 -6
  61. package/dist/commands/tasks/create.js +5 -5
  62. package/dist/commands/tasks/delete.js +1 -3
  63. package/dist/commands/tasks/get.js +2 -4
  64. package/dist/commands/tasks/list.js +2 -4
  65. package/dist/commands/tasks/update.js +4 -5
  66. package/dist/commands/threads/add.js +3 -3
  67. package/dist/commands/threads/create.js +23 -0
  68. package/dist/commands/threads/get.js +1 -1
  69. package/dist/commands/threads/list.js +3 -2
  70. package/dist/commands/users/create.js +32 -10
  71. package/dist/commands/users/delete.js +1 -3
  72. package/dist/commands/users/get-status.js +2 -4
  73. package/dist/commands/users/get.js +2 -4
  74. package/dist/commands/users/list.js +4 -4
  75. package/dist/commands/users/remove-avatar.js +1 -2
  76. package/dist/commands/users/remove-status.js +1 -3
  77. package/dist/commands/users/update-avatar.js +2 -3
  78. package/dist/commands/users/update-status.js +6 -5
  79. package/dist/commands/users/update.js +31 -10
  80. package/dist/commands/views/open.js +4 -4
  81. package/dist/data/alternatives.json +1 -0
  82. package/dist/data/changelog.json +67 -0
  83. package/dist/data/endpoints.json +1 -1
  84. package/dist/data/workflows.json +2 -2
  85. package/dist/output.js +10 -2
  86. package/dist/profiles.js +7 -3
  87. package/oclif.manifest.json +1 -1
  88. package/package.json +1 -1
@@ -5,8 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class ProfileUpdateStatus extends BaseCommand {
6
6
  static description = "Новый свой статус";
7
7
  static examples = [
8
- "Установить статус:\n $ pachca profile update-status",
9
- "Сбросить статус:\n $ pachca profile delete-status"
8
+ "Установить статус — Установи статус:\n $ pachca profile update-status"
10
9
  ];
11
10
  static scope = "profile_status:write";
12
11
  static apiMethod = "PUT";
@@ -20,7 +19,7 @@ export default class ProfileUpdateStatus extends BaseCommand {
20
19
  description: "Emoji символ статуса",
21
20
  }),
22
21
  'title': Flags.string({
23
- description: "Текст статуса",
22
+ description: "Текст статуса (макс. 50 символов)",
24
23
  }),
25
24
  'expires-at': Flags.string({
26
25
  description: "Срок жизни статуса (ISO-8601, UTC+0) в формате YYYY-MM-DDThh:mm:ss.sssZ",
@@ -64,6 +63,9 @@ export default class ProfileUpdateStatus extends BaseCommand {
64
63
  }
65
64
  }
66
65
  const validationErrors = [];
66
+ if (flags['title'] && String(flags['title']).length > 50) {
67
+ validationErrors.push({ message: `--title: максимум 50 символов (передано: ${String(flags['title']).length})`, flag: 'title' });
68
+ }
67
69
  if (flags['away-message'] && String(flags['away-message']).length > 1024) {
68
70
  validationErrors.push({ message: `--away-message: максимум 1024 символов (передано: ${String(flags['away-message']).length})`, flag: 'away-message' });
69
71
  }
@@ -91,7 +93,7 @@ export default class ProfileUpdateStatus extends BaseCommand {
91
93
  path: '/profile/status',
92
94
  body,
93
95
  });
94
- const responseBody = data;
96
+ const responseBody = (data ?? {});
95
97
  const result = responseBody.data ?? responseBody;
96
98
  this.output(result);
97
99
  }
@@ -5,8 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class ReactionsAdd extends BaseCommand {
6
6
  static description = "Добавление реакции";
7
7
  static examples = [
8
- "Добавить реакцию на сообщение:\n $ pachca reactions add",
9
- "Добавить реакцию на сообщение:\n $ pachca reactions remove"
8
+ "Добавить реакцию на сообщение — Добавь реакцию:\n $ pachca reactions add"
10
9
  ];
11
10
  static scope = "reactions:write";
12
11
  static apiMethod = "POST";
@@ -71,7 +70,7 @@ export default class ReactionsAdd extends BaseCommand {
71
70
  path: `/messages/${args.id}/reactions`,
72
71
  body,
73
72
  });
74
- const responseBody = data;
73
+ const responseBody = (data ?? {});
75
74
  const result = responseBody.data ?? responseBody;
76
75
  this.output(result);
77
76
  }
@@ -3,10 +3,6 @@ import { Args, Flags } from '@oclif/core';
3
3
  import { BaseCommand } from '../../base-command.js';
4
4
  export default class ReactionsList extends BaseCommand {
5
5
  static description = "Список реакций";
6
- static examples = [
7
- "Добавить реакцию на сообщение:\n $ pachca reactions add",
8
- "Добавить реакцию на сообщение:\n $ pachca reactions remove"
9
- ];
10
6
  static scope = "reactions:read";
11
7
  static apiMethod = "GET";
12
8
  static apiPath = "/messages/{id}/reactions";
@@ -91,7 +87,7 @@ export default class ReactionsList extends BaseCommand {
91
87
  cursor: flags.cursor,
92
88
  },
93
89
  });
94
- const responseBody = data;
90
+ const responseBody = (data ?? {});
95
91
  const items = responseBody.data ?? responseBody;
96
92
  this.output(items);
97
93
  }
@@ -5,8 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class ReactionsRemove extends BaseCommand {
6
6
  static description = "Удаление реакции";
7
7
  static examples = [
8
- "Добавить реакцию на сообщение:\n $ pachca reactions add",
9
- "Добавить реакцию на сообщение:\n $ pachca reactions remove"
8
+ "Добавить реакцию на сообщение — Убрать реакцию:\n $ pachca reactions remove"
10
9
  ];
11
10
  static scope = "reactions:write";
12
11
  static apiMethod = "DELETE";
@@ -4,7 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class ReadMemberListReaders extends BaseCommand {
5
5
  static description = "Список прочитавших сообщение";
6
6
  static examples = [
7
- "Проверить, кто прочитал сообщение:\n $ pachca read-member list-readers"
7
+ "Проверить, кто прочитал сообщение — Получи массив `user_id` прочитавших:\n $ pachca read-member list-readers"
8
8
  ];
9
9
  static scope = "messages:read";
10
10
  static apiMethod = "GET";
@@ -89,7 +89,7 @@ export default class ReadMemberListReaders extends BaseCommand {
89
89
  cursor: flags.cursor,
90
90
  },
91
91
  });
92
- const responseBody = data;
92
+ const responseBody = (data ?? {});
93
93
  const items = responseBody.data ?? responseBody;
94
94
  this.output(items);
95
95
  }
@@ -4,8 +4,8 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class SearchListChats extends BaseCommand {
5
5
  static description = "Поиск чатов";
6
6
  static examples = [
7
- "Найти чат по имени и отправить сообщение:\n $ pachca search list-chats",
8
- "Найти чат по названию:\n $ pachca search list-chats"
7
+ "Найти чат по имени и отправить сообщение — Найди чат по названию через поиск:\n $ pachca search list-chats",
8
+ "Найти чат по названию — Полнотекстовый поиск по чатам:\n $ pachca search list-chats"
9
9
  ];
10
10
  static scope = "search:chats";
11
11
  static apiMethod = "GET";
@@ -125,7 +125,7 @@ export default class SearchListChats extends BaseCommand {
125
125
  cursor: flags.cursor,
126
126
  },
127
127
  });
128
- const responseBody = data;
128
+ const responseBody = (data ?? {});
129
129
  const items = responseBody.data ?? responseBody;
130
130
  this.output(items);
131
131
  }
@@ -4,7 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class SearchListMessages extends BaseCommand {
5
5
  static description = "Поиск сообщений";
6
6
  static examples = [
7
- "Найти сообщение по тексту:\n $ pachca search list-messages"
7
+ "Найти сообщение по тексту — Полнотекстовый поиск по сообщениям:\n $ pachca search list-messages"
8
8
  ];
9
9
  static scope = "search:messages";
10
10
  static apiMethod = "GET";
@@ -129,7 +129,7 @@ export default class SearchListMessages extends BaseCommand {
129
129
  cursor: flags.cursor,
130
130
  },
131
131
  });
132
- const responseBody = data;
132
+ const responseBody = (data ?? {});
133
133
  const items = responseBody.data ?? responseBody;
134
134
  this.output(items);
135
135
  }
@@ -4,9 +4,9 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class SearchListUsers extends BaseCommand {
5
5
  static description = "Поиск сотрудников";
6
6
  static examples = [
7
- "Отправить личное сообщение пользователю:\n $ pachca search list-users",
8
- "Упомянуть пользователя:\n $ pachca search list-users",
9
- "Найти сотрудника по имени:\n $ pachca search list-users"
7
+ "Отправить личное сообщение пользователю — Определи `user_id` получателя:\n $ pachca search list-users",
8
+ "Упомянуть пользователя — Не нашёл — ищи по всей компании:\n $ pachca search list-users",
9
+ "Найти сотрудника по имени — Полнотекстовый поиск по сотрудникам:\n $ pachca search list-users"
10
10
  ];
11
11
  static scope = "search:users";
12
12
  static apiMethod = "GET";
@@ -119,7 +119,7 @@ export default class SearchListUsers extends BaseCommand {
119
119
  cursor: flags.cursor,
120
120
  },
121
121
  });
122
- const responseBody = data;
122
+ const responseBody = (data ?? {});
123
123
  const items = responseBody.data ?? responseBody;
124
124
  this.output(items);
125
125
  }
@@ -4,9 +4,9 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class SecurityList extends BaseCommand {
5
5
  static description = "Журнал аудита событий";
6
6
  static examples = [
7
- "Получить журнал аудита событий:\n $ pachca security list",
8
- "Мониторинг подозрительных входов:\n $ pachca security list",
9
- "Экспорт логов за период:\n $ pachca security list"
7
+ "Получить журнал аудита событий — Получи журнал аудита:\n $ pachca security list",
8
+ "Мониторинг подозрительных входов — Получи события неудачных 2FA за период:\n $ pachca security list",
9
+ "Экспорт логов за период — Получи все события за период с пагинацией:\n $ pachca security list"
10
10
  ];
11
11
  static scope = "audit_events:read";
12
12
  static plan = "corporation";
@@ -20,11 +20,11 @@ export default class SecurityList extends BaseCommand {
20
20
  description: "Начальная метка времени (включительно)",
21
21
  }),
22
22
  'end-time': Flags.string({
23
- description: "Конечная метка времени (исключительно)",
23
+ description: "Конечная метка времени (включительно)",
24
24
  }),
25
25
  'event-key': Flags.string({
26
26
  description: "Фильтр по конкретному типу события",
27
- options: ["user_login", "user_logout", "user_2fa_fail", "user_2fa_success", "user_created", "user_deleted", "user_role_changed", "user_updated", "tag_created", "tag_deleted", "user_added_to_tag", "user_removed_from_tag", "chat_created", "chat_renamed", "chat_permission_changed", "user_chat_join", "user_chat_leave", "tag_added_to_chat", "tag_removed_from_chat", "message_updated", "message_deleted", "message_created", "reaction_created", "reaction_deleted", "thread_created", "access_token_created", "access_token_updated", "access_token_destroy", "kms_encrypt", "kms_decrypt", "audit_events_accessed", "dlp_violation_detected", "search_users_api", "search_chats_api", "search_messages_api", "bot_scopes_updated", "bot_webhook_settings_updated", "bot_token_recreated", "bot_deleted"],
27
+ options: ["user_login", "user_logout", "user_2fa_fail", "user_2fa_success", "user_created", "user_deleted", "user_role_changed", "user_updated", "tag_created", "tag_deleted", "user_added_to_tag", "user_removed_from_tag", "chat_created", "chat_renamed", "chat_permission_changed", "user_chat_join", "user_chat_leave", "tag_added_to_chat", "tag_removed_from_chat", "message_updated", "message_deleted", "message_created", "reaction_created", "reaction_deleted", "thread_created", "access_token_created", "access_token_updated", "access_token_destroy", "kms_encrypt", "kms_decrypt", "audit_events_accessed", "dlp_violation_detected", "search_users_api", "search_chats_api", "search_messages_api", "bot_scopes_updated", "bot_webhook_settings_updated", "bot_token_recreated", "bot_deleted", "video_call_started", "video_call_finished", "video_call_recording_ready"],
28
28
  }),
29
29
  'actor-id': Flags.string({
30
30
  description: "Идентификатор пользователя, выполнившего действие",
@@ -124,7 +124,7 @@ export default class SecurityList extends BaseCommand {
124
124
  cursor: flags.cursor,
125
125
  },
126
126
  });
127
- const responseBody = data;
127
+ const responseBody = (data ?? {});
128
128
  const items = responseBody.data ?? responseBody;
129
129
  this.output(items);
130
130
  }
@@ -5,9 +5,9 @@ import * as clack from '@clack/prompts';
5
5
  export default class TasksCreate extends BaseCommand {
6
6
  static description = "Новое напоминание";
7
7
  static examples = [
8
- "Форма заявки/запроса:\n $ pachca tasks create",
9
- "Создать напоминание:\n $ pachca tasks create",
10
- "Получить список предстоящих задач:\n $ pachca tasks list"
8
+ "Форма заявки/запроса — При submit: создай задачу или отправь уведомление ответственному:\n $ pachca tasks create",
9
+ "Создать напоминание — Создай задачу:\n $ pachca tasks create",
10
+ "Создать серию напоминаний — Для каждой даты: создай задачу:\n $ pachca tasks create"
11
11
  ];
12
12
  static scope = "tasks:create";
13
13
  static apiMethod = "POST";
@@ -27,7 +27,7 @@ export default class TasksCreate extends BaseCommand {
27
27
  description: "Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).",
28
28
  }),
29
29
  'priority': Flags.integer({
30
- description: "Приоритет: 1, 2 (важно) или 3 (очень важно).",
30
+ description: "Приоритет: 1, 2 (важно) или 3 (очень важно)",
31
31
  }),
32
32
  'performer-ids': Flags.string({
33
33
  description: "Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные» (по умолчанию ответственным назначается вы)",
@@ -101,7 +101,7 @@ export default class TasksCreate extends BaseCommand {
101
101
  path: '/tasks',
102
102
  body,
103
103
  });
104
- const responseBody = data;
104
+ const responseBody = (data ?? {});
105
105
  const result = responseBody.data ?? responseBody;
106
106
  this.output(result);
107
107
  }
@@ -5,9 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class TasksDelete extends BaseCommand {
6
6
  static description = "Удаление напоминания";
7
7
  static examples = [
8
- "Получить задачу по ID:\n $ pachca tasks get",
9
- "Отметить задачу выполненной:\n $ pachca tasks update",
10
- "Обновить задачу (перенести срок, сменить ответственных):\n $ pachca tasks update"
8
+ "Удалить задачу — Удали задачу:\n $ pachca tasks delete"
11
9
  ];
12
10
  static scope = "tasks:delete";
13
11
  static apiMethod = "DELETE";
@@ -4,9 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksGet extends BaseCommand {
5
5
  static description = "Информация о напоминании";
6
6
  static examples = [
7
- "Получить задачу по ID:\n $ pachca tasks get",
8
- "Отметить задачу выполненной:\n $ pachca tasks update",
9
- "Обновить задачу (перенести срок, сменить ответственных):\n $ pachca tasks update"
7
+ "Получить задачу по ID — Получи информацию о задаче:\n $ pachca tasks get"
10
8
  ];
11
9
  static scope = "tasks:read";
12
10
  static apiMethod = "GET";
@@ -28,7 +26,7 @@ export default class TasksGet extends BaseCommand {
28
26
  method: 'GET',
29
27
  path: `/tasks/${args.id}`,
30
28
  });
31
- const responseBody = data;
29
+ const responseBody = (data ?? {});
32
30
  const result = responseBody.data ?? responseBody;
33
31
  this.output(result);
34
32
  }
@@ -4,9 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksList extends BaseCommand {
5
5
  static description = "Список напоминаний";
6
6
  static examples = [
7
- "Форма заявки/запроса:\n $ pachca tasks create",
8
- "Создать напоминание:\n $ pachca tasks create",
9
- "Получить список предстоящих задач:\n $ pachca tasks list"
7
+ "Получить список предстоящих задач — Получи все задачи, фильтруй по `status` на клиенте:\n $ pachca tasks list"
10
8
  ];
11
9
  static scope = "tasks:read";
12
10
  static apiMethod = "GET";
@@ -87,7 +85,7 @@ export default class TasksList extends BaseCommand {
87
85
  cursor: flags.cursor,
88
86
  },
89
87
  });
90
- const responseBody = data;
88
+ const responseBody = (data ?? {});
91
89
  const items = responseBody.data ?? responseBody;
92
90
  this.output(items);
93
91
  }
@@ -4,9 +4,8 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class TasksUpdate extends BaseCommand {
5
5
  static description = "Редактирование напоминания";
6
6
  static examples = [
7
- "Получить задачу по ID:\n $ pachca tasks get",
8
- "Отметить задачу выполненной:\n $ pachca tasks update",
9
- "Обновить задачу (перенести срок, сменить ответственных):\n $ pachca tasks update"
7
+ "Отметить задачу выполненной — Обнови статус задачи:\n $ pachca tasks update",
8
+ "Обновить задачу (перенести срок, сменить ответственных) — Обнови нужные поля задачи:\n $ pachca tasks update"
10
9
  ];
11
10
  static scope = "tasks:update";
12
11
  static apiMethod = "PUT";
@@ -30,7 +29,7 @@ export default class TasksUpdate extends BaseCommand {
30
29
  description: "Срок выполнения напоминания (ISO-8601) в формате YYYY-MM-DDThh:mm:ss.sssTZD. Если указано время 23:59:59.000, то напоминание будет создано на весь день (без указания времени).",
31
30
  }),
32
31
  'priority': Flags.integer({
33
- description: "Приоритет: 1, 2 (важно) или 3 (очень важно).",
32
+ description: "Приоритет: 1, 2 (важно) или 3 (очень важно)",
34
33
  }),
35
34
  'performer-ids': Flags.string({
36
35
  description: "Массив идентификаторов пользователей, привязываемых к напоминанию как «ответственные»",
@@ -85,7 +84,7 @@ export default class TasksUpdate extends BaseCommand {
85
84
  path: `/tasks/${args.id}`,
86
85
  body,
87
86
  });
88
- const responseBody = data;
87
+ const responseBody = (data ?? {});
89
88
  const result = responseBody.data ?? responseBody;
90
89
  this.output(result);
91
90
  }
@@ -4,8 +4,8 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class ThreadsAdd extends BaseCommand {
5
5
  static description = "Новый тред";
6
6
  static examples = [
7
- "Ответить в тред (комментарий к сообщению):\n $ pachca thread add",
8
- "Подписаться на тред сообщения:\n $ pachca thread add"
7
+ "Ответить в тред (комментарий к сообщению) — Получи или создай тред, возьми `thread.id` из ответа:\n $ pachca threads add",
8
+ "Подписаться на тред сообщения — Получи или создай тред, возьми `chat_id` из ответа:\n $ pachca threads add"
9
9
  ];
10
10
  static scope = "threads:create";
11
11
  static apiMethod = "POST";
@@ -27,7 +27,7 @@ export default class ThreadsAdd extends BaseCommand {
27
27
  method: 'POST',
28
28
  path: `/messages/${args.id}/thread`,
29
29
  });
30
- const responseBody = data;
30
+ const responseBody = (data ?? {});
31
31
  const result = responseBody.data ?? responseBody;
32
32
  this.output(result);
33
33
  }
@@ -0,0 +1,23 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ThreadsCreate extends BaseCommand {
3
+ static description = "Новый самостоятельный тред";
4
+ static scope = "threads:create";
5
+ static apiMethod = "POST";
6
+ static apiPath = "/threads";
7
+ static defaultColumns = ["id", "chat_id", "message_id", "message_chat_id", "updated_at"];
8
+ static args = {};
9
+ static flags = {
10
+ ...BaseCommand.baseFlags,
11
+ };
12
+ async run() {
13
+ const { args, flags } = await this.parse(ThreadsCreate);
14
+ this.parsedFlags = flags;
15
+ const { data } = await this.apiRequest({
16
+ method: 'POST',
17
+ path: '/threads',
18
+ });
19
+ const responseBody = (data ?? {});
20
+ const result = responseBody.data ?? responseBody;
21
+ this.output(result);
22
+ }
23
+ }
@@ -23,7 +23,7 @@ export default class ThreadsGet extends BaseCommand {
23
23
  method: 'GET',
24
24
  path: `/threads/${args.id}`,
25
25
  });
26
- const responseBody = data;
26
+ const responseBody = (data ?? {});
27
27
  const result = responseBody.data ?? responseBody;
28
28
  this.output(result);
29
29
  }
@@ -4,7 +4,8 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class ThreadsList extends BaseCommand {
5
5
  static description = "Список тредов";
6
6
  static examples = [
7
- "Получить список активных тредов за период:\n $ pachca threads list"
7
+ "Получить список активных тредов за период — Запроси список тредов с фильтром по времени последнего сообщения и нужным `--limit`:\n $ pachca threads list",
8
+ "Получить список активных тредов за период — Если в ответе `meta.paginate.next_page` — пройди по страницам через `--cursor`:\n $ pachca threads list"
8
9
  ];
9
10
  static scope = "threads:read";
10
11
  static apiMethod = "GET";
@@ -95,7 +96,7 @@ export default class ThreadsList extends BaseCommand {
95
96
  cursor: flags.cursor,
96
97
  },
97
98
  });
98
- const responseBody = data;
99
+ const responseBody = (data ?? {});
99
100
  const items = responseBody.data ?? responseBody;
100
101
  this.output(items);
101
102
  }
@@ -5,9 +5,9 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersCreate extends BaseCommand {
6
6
  static description = "Новый сотрудник";
7
7
  static examples = [
8
- "Проверить, кто прочитал сообщение:\n $ pachca users list",
9
- "Разослать уведомление нескольким пользователям:\n $ pachca users list",
10
- "Массовое создание сотрудников с тегами:\n $ pachca users create"
8
+ "Массовое создание сотрудников с тегами — Для каждого сотрудника: создай аккаунт с тегами:\n $ pachca users create",
9
+ "Создать гостя в чат — Создай гостя: роль `guest` и ровно один чат в `--chat-ids`:\n $ pachca users create",
10
+ "Онбординг нового сотрудника — Создай аккаунт:\n $ pachca users create"
11
11
  ];
12
12
  static scope = "users:create";
13
13
  static apiMethod = "POST";
@@ -18,22 +18,22 @@ export default class UsersCreate extends BaseCommand {
18
18
  static flags = {
19
19
  ...BaseCommand.baseFlags,
20
20
  'first-name': Flags.string({
21
- description: "Имя",
21
+ description: "Имя (макс. 255 символов)",
22
22
  }),
23
23
  'last-name': Flags.string({
24
- description: "Фамилия",
24
+ description: "Фамилия (макс. 255 символов)",
25
25
  }),
26
26
  'email': Flags.string({
27
- description: "Электронная почта",
27
+ description: "Электронная почта (макс. 255 символов)",
28
28
  }),
29
29
  'phone-number': Flags.string({
30
- description: "Телефон",
30
+ description: "Телефон (макс. 255 символов)",
31
31
  }),
32
32
  'nickname': Flags.string({
33
- description: "Имя пользователя",
33
+ description: "Имя пользователя (макс. 255 символов)",
34
34
  }),
35
35
  'department': Flags.string({
36
- description: "Департамент",
36
+ description: "Департамент (макс. 255 символов)",
37
37
  }),
38
38
  'title': Flags.string({
39
39
  description: "Должность",
@@ -88,6 +88,28 @@ export default class UsersCreate extends BaseCommand {
88
88
  this.validationError(missingRequired.map((f) => ({ message: `Обязательный флаг --${f.flag} не передан`, flag: f.flag })), { hint: "Обязательные: --email <string>. pachca introspect users create" });
89
89
  }
90
90
  }
91
+ const validationErrors = [];
92
+ if (flags['first-name'] && String(flags['first-name']).length > 255) {
93
+ validationErrors.push({ message: `--first-name: максимум 255 символов (передано: ${String(flags['first-name']).length})`, flag: 'first-name' });
94
+ }
95
+ if (flags['last-name'] && String(flags['last-name']).length > 255) {
96
+ validationErrors.push({ message: `--last-name: максимум 255 символов (передано: ${String(flags['last-name']).length})`, flag: 'last-name' });
97
+ }
98
+ if (flags['email'] && String(flags['email']).length > 255) {
99
+ validationErrors.push({ message: `--email: максимум 255 символов (передано: ${String(flags['email']).length})`, flag: 'email' });
100
+ }
101
+ if (flags['phone-number'] && String(flags['phone-number']).length > 255) {
102
+ validationErrors.push({ message: `--phone-number: максимум 255 символов (передано: ${String(flags['phone-number']).length})`, flag: 'phone-number' });
103
+ }
104
+ if (flags['nickname'] && String(flags['nickname']).length > 255) {
105
+ validationErrors.push({ message: `--nickname: максимум 255 символов (передано: ${String(flags['nickname']).length})`, flag: 'nickname' });
106
+ }
107
+ if (flags['department'] && String(flags['department']).length > 255) {
108
+ validationErrors.push({ message: `--department: максимум 255 символов (передано: ${String(flags['department']).length})`, flag: 'department' });
109
+ }
110
+ if (validationErrors.length > 0) {
111
+ this.validationError(validationErrors);
112
+ }
91
113
  const body = {
92
114
  user: {
93
115
  first_name: flags['first-name'],
@@ -120,7 +142,7 @@ export default class UsersCreate extends BaseCommand {
120
142
  path: '/users',
121
143
  body,
122
144
  });
123
- const responseBody = data;
145
+ const responseBody = (data ?? {});
124
146
  const result = responseBody.data ?? responseBody;
125
147
  this.output(result);
126
148
  }
@@ -5,9 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersDelete extends BaseCommand {
6
6
  static description = "Удаление сотрудника";
7
7
  static examples = [
8
- "Получить сотрудника по ID:\n $ pachca users get",
9
- "Массовое создание сотрудников с тегами:\n $ pachca users update",
10
- "Offboarding сотрудника:\n $ pachca users update"
8
+ "Offboarding сотрудника — Опционально: удалить аккаунт полностью:\n $ pachca users delete"
11
9
  ];
12
10
  static scope = "users:delete";
13
11
  static apiMethod = "DELETE";
@@ -4,9 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersGetStatus extends BaseCommand {
5
5
  static description = "Статус сотрудника";
6
6
  static examples = [
7
- "Управление статусом сотрудника:\n $ pachca users get-status",
8
- "Управление статусом сотрудника:\n $ pachca users update-status",
9
- "Управление статусом сотрудника:\n $ pachca users remove-status"
7
+ "Управление статусом сотрудника — Получить текущий статус:\n $ pachca users get-status"
10
8
  ];
11
9
  static scope = "user_status:read";
12
10
  static apiMethod = "GET";
@@ -28,7 +26,7 @@ export default class UsersGetStatus extends BaseCommand {
28
26
  method: 'GET',
29
27
  path: `/users/${args.user_id}/status`,
30
28
  });
31
- const responseBody = data;
29
+ const responseBody = (data ?? {});
32
30
  const result = responseBody.data ?? responseBody;
33
31
  this.output(result);
34
32
  }
@@ -4,9 +4,7 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersGet extends BaseCommand {
5
5
  static description = "Информация о сотруднике";
6
6
  static examples = [
7
- "Получить сотрудника по ID:\n $ pachca users get",
8
- "Массовое создание сотрудников с тегами:\n $ pachca users update",
9
- "Offboarding сотрудника:\n $ pachca users update"
7
+ "Получить сотрудника по ID — Получи информацию о сотруднике:\n $ pachca users get"
10
8
  ];
11
9
  static scope = "users:read";
12
10
  static apiMethod = "GET";
@@ -28,7 +26,7 @@ export default class UsersGet extends BaseCommand {
28
26
  method: 'GET',
29
27
  path: `/users/${args.id}`,
30
28
  });
31
- const responseBody = data;
29
+ const responseBody = (data ?? {});
32
30
  const result = responseBody.data ?? responseBody;
33
31
  this.output(result);
34
32
  }
@@ -4,9 +4,9 @@ import { BaseCommand } from '../../base-command.js';
4
4
  export default class UsersList extends BaseCommand {
5
5
  static description = "Список сотрудников";
6
6
  static examples = [
7
- "Проверить, кто прочитал сообщение:\n $ pachca users list",
8
- "Разослать уведомление нескольким пользователям:\n $ pachca users list",
9
- "Массовое создание сотрудников с тегами:\n $ pachca users create"
7
+ "Проверить, кто прочитал сообщение — При необходимости сопоставь с именами сотрудников:\n $ pachca users list",
8
+ "Разослать уведомление нескольким пользователям — Определи список `user_id` получателей:\n $ pachca users list",
9
+ "Найти сотрудника по имени или email — Поиск по имени/email (частичное совпадение):\n $ pachca users list"
10
10
  ];
11
11
  static scope = "users:read";
12
12
  static apiMethod = "GET";
@@ -92,7 +92,7 @@ export default class UsersList extends BaseCommand {
92
92
  cursor: flags.cursor,
93
93
  },
94
94
  });
95
- const responseBody = data;
95
+ const responseBody = (data ?? {});
96
96
  const items = responseBody.data ?? responseBody;
97
97
  this.output(items);
98
98
  }
@@ -5,8 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersRemoveAvatar extends BaseCommand {
6
6
  static description = "Удаление аватара сотрудника";
7
7
  static examples = [
8
- "Загрузить аватар сотрудника:\n $ pachca users update-avatar",
9
- "Удалить аватар сотрудника:\n $ pachca users remove-avatar"
8
+ "Удалить аватар сотрудника — Удали аватар сотрудника:\n $ pachca users remove-avatar"
10
9
  ];
11
10
  static scope = "user_avatar:write";
12
11
  static apiMethod = "DELETE";
@@ -5,9 +5,7 @@ import * as clack from '@clack/prompts';
5
5
  export default class UsersRemoveStatus extends BaseCommand {
6
6
  static description = "Удаление статуса сотрудника";
7
7
  static examples = [
8
- "Управление статусом сотрудника:\n $ pachca users get-status",
9
- "Управление статусом сотрудника:\n $ pachca users update-status",
10
- "Управление статусом сотрудника:\n $ pachca users remove-status"
8
+ "Управление статусом сотрудника — Удалить статус:\n $ pachca users remove-status"
11
9
  ];
12
10
  static scope = "user_status:write";
13
11
  static apiMethod = "DELETE";
@@ -6,8 +6,7 @@ import * as path from 'node:path';
6
6
  export default class UsersUpdateAvatar extends BaseCommand {
7
7
  static description = "Загрузка аватара сотрудника";
8
8
  static examples = [
9
- "Загрузить аватар сотрудника:\n $ pachca users update-avatar",
10
- "Удалить аватар сотрудника:\n $ pachca users remove-avatar"
9
+ "Загрузить аватар сотрудника — Загрузи аватар сотруднику:\n $ pachca users update-avatar"
11
10
  ];
12
11
  static scope = "user_avatar:write";
13
12
  static apiMethod = "PUT";
@@ -48,7 +47,7 @@ export default class UsersUpdateAvatar extends BaseCommand {
48
47
  path: `/users/${args.user_id}/avatar`,
49
48
  formData,
50
49
  });
51
- const responseBody = data;
50
+ const responseBody = (data ?? {});
52
51
  const result = responseBody.data ?? responseBody;
53
52
  this.output(result);
54
53
  }