@pachca/cli 2026.5.0 → 2026.5.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.5.1 (6 мая 2026)
4
+
5
+ - **Изменено**: Поддержка обновлённого формата курсорной пагинации в list-командах
6
+
3
7
  ## 2026.5.0 (4 мая 2026)
4
8
 
5
9
  - **Изменено** (users list, users get, users create, users update, profile get): В вывод модели сотрудника добавлено поле inviter_id — кто пригласил сотрудника (null для самостоятельной регистрации или удалённого пригласившего)
@@ -43,12 +43,19 @@ export default class BotsListEvents extends BaseCommand {
43
43
  const items = body.data;
44
44
  if (items)
45
45
  allData.push(...items);
46
- if (!items || items.length === 0)
47
- break;
48
46
  const meta = body.meta;
49
47
  const paginate = meta?.paginate;
50
48
  nextCursor = paginate?.next_page;
51
49
  pages++;
50
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
51
+ const hasNext = paginate?.has_next;
52
+ if (typeof hasNext === 'boolean') {
53
+ if (!hasNext)
54
+ break;
55
+ }
56
+ else if (!items || items.length === 0) {
57
+ break;
58
+ }
52
59
  if (process.stderr.isTTY) {
53
60
  const total = paginate?.total;
54
61
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -76,12 +76,19 @@ export default class ChatsList extends BaseCommand {
76
76
  const items = body.data;
77
77
  if (items)
78
78
  allData.push(...items);
79
- if (!items || items.length === 0)
80
- break;
81
79
  const meta = body.meta;
82
80
  const paginate = meta?.paginate;
83
81
  nextCursor = paginate?.next_page;
84
82
  pages++;
83
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
84
+ const hasNext = paginate?.has_next;
85
+ if (typeof hasNext === 'boolean') {
86
+ if (!hasNext)
87
+ break;
88
+ }
89
+ else if (!items || items.length === 0) {
90
+ break;
91
+ }
85
92
  if (process.stderr.isTTY) {
86
93
  const total = paginate?.total;
87
94
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -48,12 +48,19 @@ export default class GroupTagsListUsers extends BaseCommand {
48
48
  const items = body.data;
49
49
  if (items)
50
50
  allData.push(...items);
51
- if (!items || items.length === 0)
52
- break;
53
51
  const meta = body.meta;
54
52
  const paginate = meta?.paginate;
55
53
  nextCursor = paginate?.next_page;
56
54
  pages++;
55
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
56
+ const hasNext = paginate?.has_next;
57
+ if (typeof hasNext === 'boolean') {
58
+ if (!hasNext)
59
+ break;
60
+ }
61
+ else if (!items || items.length === 0) {
62
+ break;
63
+ }
57
64
  if (process.stderr.isTTY) {
58
65
  const total = paginate?.total;
59
66
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -48,12 +48,19 @@ export default class GroupTagsList extends BaseCommand {
48
48
  const items = body.data;
49
49
  if (items)
50
50
  allData.push(...items);
51
- if (!items || items.length === 0)
52
- break;
53
51
  const meta = body.meta;
54
52
  const paginate = meta?.paginate;
55
53
  nextCursor = paginate?.next_page;
56
54
  pages++;
55
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
56
+ const hasNext = paginate?.has_next;
57
+ if (typeof hasNext === 'boolean') {
58
+ if (!hasNext)
59
+ break;
60
+ }
61
+ else if (!items || items.length === 0) {
62
+ break;
63
+ }
57
64
  if (process.stderr.isTTY) {
58
65
  const total = paginate?.total;
59
66
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -56,12 +56,19 @@ export default class MembersList extends BaseCommand {
56
56
  const items = body.data;
57
57
  if (items)
58
58
  allData.push(...items);
59
- if (!items || items.length === 0)
60
- break;
61
59
  const meta = body.meta;
62
60
  const paginate = meta?.paginate;
63
61
  nextCursor = paginate?.next_page;
64
62
  pages++;
63
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
64
+ const hasNext = paginate?.has_next;
65
+ if (typeof hasNext === 'boolean') {
66
+ if (!hasNext)
67
+ break;
68
+ }
69
+ else if (!items || items.length === 0) {
70
+ break;
71
+ }
65
72
  if (process.stderr.isTTY) {
66
73
  const total = paginate?.total;
67
74
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -97,12 +97,19 @@ export default class MessagesList extends BaseCommand {
97
97
  const items = body.data;
98
98
  if (items)
99
99
  allData.push(...items);
100
- if (!items || items.length === 0)
101
- break;
102
100
  const meta = body.meta;
103
101
  const paginate = meta?.paginate;
104
102
  nextCursor = paginate?.next_page;
105
103
  pages++;
104
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
105
+ const hasNext = paginate?.has_next;
106
+ if (typeof hasNext === 'boolean') {
107
+ if (!hasNext)
108
+ break;
109
+ }
110
+ else if (!items || items.length === 0) {
111
+ break;
112
+ }
106
113
  if (process.stderr.isTTY) {
107
114
  const total = paginate?.total;
108
115
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -49,12 +49,19 @@ export default class ReactionsList extends BaseCommand {
49
49
  const items = body.data;
50
50
  if (items)
51
51
  allData.push(...items);
52
- if (!items || items.length === 0)
53
- break;
54
52
  const meta = body.meta;
55
53
  const paginate = meta?.paginate;
56
54
  nextCursor = paginate?.next_page;
57
55
  pages++;
56
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
57
+ const hasNext = paginate?.has_next;
58
+ if (typeof hasNext === 'boolean') {
59
+ if (!hasNext)
60
+ break;
61
+ }
62
+ else if (!items || items.length === 0) {
63
+ break;
64
+ }
58
65
  if (process.stderr.isTTY) {
59
66
  const total = paginate?.total;
60
67
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -47,12 +47,19 @@ export default class ReadMemberListReaders extends BaseCommand {
47
47
  const items = body.data;
48
48
  if (items)
49
49
  allData.push(...items);
50
- if (!items || items.length === 0)
51
- break;
52
50
  const meta = body.meta;
53
51
  const paginate = meta?.paginate;
54
52
  nextCursor = paginate?.next_page;
55
53
  pages++;
54
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
55
+ const hasNext = paginate?.has_next;
56
+ if (typeof hasNext === 'boolean') {
57
+ if (!hasNext)
58
+ break;
59
+ }
60
+ else if (!items || items.length === 0) {
61
+ break;
62
+ }
56
63
  if (process.stderr.isTTY) {
57
64
  const total = paginate?.total;
58
65
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -76,12 +76,19 @@ export default class SearchListChats extends BaseCommand {
76
76
  const items = body.data;
77
77
  if (items)
78
78
  allData.push(...items);
79
- if (!items || items.length === 0)
80
- break;
81
79
  const meta = body.meta;
82
80
  const paginate = meta?.paginate;
83
81
  nextCursor = paginate?.next_page;
84
82
  pages++;
83
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
84
+ const hasNext = paginate?.has_next;
85
+ if (typeof hasNext === 'boolean') {
86
+ if (!hasNext)
87
+ break;
88
+ }
89
+ else if (!items || items.length === 0) {
90
+ break;
91
+ }
85
92
  if (process.stderr.isTTY) {
86
93
  const total = paginate?.total;
87
94
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -73,12 +73,19 @@ export default class SearchListMessages extends BaseCommand {
73
73
  const items = body.data;
74
74
  if (items)
75
75
  allData.push(...items);
76
- if (!items || items.length === 0)
77
- break;
78
76
  const meta = body.meta;
79
77
  const paginate = meta?.paginate;
80
78
  nextCursor = paginate?.next_page;
81
79
  pages++;
80
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
81
+ const hasNext = paginate?.has_next;
82
+ if (typeof hasNext === 'boolean') {
83
+ if (!hasNext)
84
+ break;
85
+ }
86
+ else if (!items || items.length === 0) {
87
+ break;
88
+ }
82
89
  if (process.stderr.isTTY) {
83
90
  const total = paginate?.total;
84
91
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -71,12 +71,19 @@ export default class SearchListUsers extends BaseCommand {
71
71
  const items = body.data;
72
72
  if (items)
73
73
  allData.push(...items);
74
- if (!items || items.length === 0)
75
- break;
76
74
  const meta = body.meta;
77
75
  const paginate = meta?.paginate;
78
76
  nextCursor = paginate?.next_page;
79
77
  pages++;
78
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
79
+ const hasNext = paginate?.has_next;
80
+ if (typeof hasNext === 'boolean') {
81
+ if (!hasNext)
82
+ break;
83
+ }
84
+ else if (!items || items.length === 0) {
85
+ break;
86
+ }
80
87
  if (process.stderr.isTTY) {
81
88
  const total = paginate?.total;
82
89
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -75,12 +75,19 @@ export default class SecurityList extends BaseCommand {
75
75
  const items = body.data;
76
76
  if (items)
77
77
  allData.push(...items);
78
- if (!items || items.length === 0)
79
- break;
80
78
  const meta = body.meta;
81
79
  const paginate = meta?.paginate;
82
80
  nextCursor = paginate?.next_page;
83
81
  pages++;
82
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
83
+ const hasNext = paginate?.has_next;
84
+ if (typeof hasNext === 'boolean') {
85
+ if (!hasNext)
86
+ break;
87
+ }
88
+ else if (!items || items.length === 0) {
89
+ break;
90
+ }
84
91
  if (process.stderr.isTTY) {
85
92
  const total = paginate?.total;
86
93
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -45,12 +45,19 @@ export default class TasksList extends BaseCommand {
45
45
  const items = body.data;
46
46
  if (items)
47
47
  allData.push(...items);
48
- if (!items || items.length === 0)
49
- break;
50
48
  const meta = body.meta;
51
49
  const paginate = meta?.paginate;
52
50
  nextCursor = paginate?.next_page;
53
51
  pages++;
52
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
53
+ const hasNext = paginate?.has_next;
54
+ if (typeof hasNext === 'boolean') {
55
+ if (!hasNext)
56
+ break;
57
+ }
58
+ else if (!items || items.length === 0) {
59
+ break;
60
+ }
54
61
  if (process.stderr.isTTY) {
55
62
  const total = paginate?.total;
56
63
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -49,12 +49,19 @@ export default class UsersList extends BaseCommand {
49
49
  const items = body.data;
50
50
  if (items)
51
51
  allData.push(...items);
52
- if (!items || items.length === 0)
53
- break;
54
52
  const meta = body.meta;
55
53
  const paginate = meta?.paginate;
56
54
  nextCursor = paginate?.next_page;
57
55
  pages++;
56
+ // Условие конца: списочные методы — has_next === false; методы поиска и /users?query= (без has_next) — пустой data
57
+ const hasNext = paginate?.has_next;
58
+ if (typeof hasNext === 'boolean') {
59
+ if (!hasNext)
60
+ break;
61
+ }
62
+ else if (!items || items.length === 0) {
63
+ break;
64
+ }
58
65
  if (process.stderr.isTTY) {
59
66
  const total = paginate?.total;
60
67
  const progress = total ? `${allData.length} / ${total}` : String(allData.length);
@@ -1,4 +1,14 @@
1
1
  [
2
+ {
3
+ "version": "2026.5.1",
4
+ "date": "6 мая 2026",
5
+ "changes": [
6
+ {
7
+ "type": "~",
8
+ "description": "Поддержка обновлённого формата курсорной пагинации в list-командах"
9
+ }
10
+ ]
11
+ },
2
12
  {
3
13
  "version": "2026.5.0",
4
14
  "date": "4 мая 2026",