@will-17173/telegram-cli 0.2.0 → 0.4.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 (197) hide show
  1. package/README.md +241 -61
  2. package/README.zh-CN.md +250 -73
  3. package/dist/account/account-authenticator.js +95 -0
  4. package/dist/account/account-authenticator.js.map +1 -0
  5. package/dist/account/account-context.js +7 -0
  6. package/dist/account/account-context.js.map +1 -1
  7. package/dist/account/account-name.js +17 -0
  8. package/dist/account/account-name.js.map +1 -0
  9. package/dist/account/account-presets.js +20 -3
  10. package/dist/account/account-presets.js.map +1 -1
  11. package/dist/account/account-store.js +277 -37
  12. package/dist/account/account-store.js.map +1 -1
  13. package/dist/cli/app.js +12 -1
  14. package/dist/cli/app.js.map +1 -1
  15. package/dist/cli/output.js +21 -6
  16. package/dist/cli/output.js.map +1 -1
  17. package/dist/cli/secure-input.js +408 -0
  18. package/dist/cli/secure-input.js.map +1 -0
  19. package/dist/commands/account-options.js +37 -7
  20. package/dist/commands/account-options.js.map +1 -1
  21. package/dist/commands/account.js +192 -66
  22. package/dist/commands/account.js.map +1 -1
  23. package/dist/commands/archive.js +151 -0
  24. package/dist/commands/archive.js.map +1 -0
  25. package/dist/commands/config.js +119 -12
  26. package/dist/commands/config.js.map +1 -1
  27. package/dist/commands/contact.js +58 -0
  28. package/dist/commands/contact.js.map +1 -0
  29. package/dist/commands/data.js +14 -7
  30. package/dist/commands/data.js.map +1 -1
  31. package/dist/commands/dialog.js +156 -0
  32. package/dist/commands/dialog.js.map +1 -0
  33. package/dist/commands/folder.js +113 -0
  34. package/dist/commands/folder.js.map +1 -0
  35. package/dist/commands/group-write.js +128 -0
  36. package/dist/commands/group-write.js.map +1 -0
  37. package/dist/commands/group.js +43 -7
  38. package/dist/commands/group.js.map +1 -1
  39. package/dist/commands/notification.js +76 -0
  40. package/dist/commands/notification.js.map +1 -0
  41. package/dist/commands/query.js +22 -15
  42. package/dist/commands/query.js.map +1 -1
  43. package/dist/commands/telegram-runner.js +40 -18
  44. package/dist/commands/telegram-runner.js.map +1 -1
  45. package/dist/commands/telegram.js +172 -109
  46. package/dist/commands/telegram.js.map +1 -1
  47. package/dist/commands/time-range.js +39 -0
  48. package/dist/commands/time-range.js.map +1 -0
  49. package/dist/commands/types.js +3 -2
  50. package/dist/commands/types.js.map +1 -1
  51. package/dist/config/credential-store.js +24 -4
  52. package/dist/config/credential-store.js.map +1 -1
  53. package/dist/config/env.js +4 -1
  54. package/dist/config/env.js.map +1 -1
  55. package/dist/group-commands/catalog.js +79 -0
  56. package/dist/group-commands/catalog.js.map +1 -0
  57. package/dist/group-commands/executor.js +102 -0
  58. package/dist/group-commands/executor.js.map +1 -0
  59. package/dist/group-commands/parser.js +268 -0
  60. package/dist/group-commands/parser.js.map +1 -0
  61. package/dist/group-commands/tokenize.js +51 -0
  62. package/dist/group-commands/tokenize.js.map +1 -0
  63. package/dist/group-commands/types.js +2 -0
  64. package/dist/group-commands/types.js.map +1 -0
  65. package/dist/index.js +0 -0
  66. package/dist/listen-commands/catalog.js +61 -0
  67. package/dist/listen-commands/catalog.js.map +1 -0
  68. package/dist/listen-commands/dispatch.js +46 -0
  69. package/dist/listen-commands/dispatch.js.map +1 -0
  70. package/dist/listen-commands/match.js +113 -0
  71. package/dist/listen-commands/match.js.map +1 -0
  72. package/dist/presenters/group.js +40 -0
  73. package/dist/presenters/group.js.map +1 -1
  74. package/dist/presenters/human.js +135 -0
  75. package/dist/presenters/human.js.map +1 -1
  76. package/dist/presenters/ink/display-width.js +45 -7
  77. package/dist/presenters/ink/display-width.js.map +1 -1
  78. package/dist/presenters/ink/group-command-confirm.js +13 -0
  79. package/dist/presenters/ink/group-command-confirm.js.map +1 -0
  80. package/dist/presenters/ink/group-command-result.js +23 -0
  81. package/dist/presenters/ink/group-command-result.js.map +1 -0
  82. package/dist/presenters/ink/listen-command-menu.js +38 -0
  83. package/dist/presenters/ink/listen-command-menu.js.map +1 -0
  84. package/dist/presenters/ink/listen-scroll.js +9 -4
  85. package/dist/presenters/ink/listen-scroll.js.map +1 -1
  86. package/dist/presenters/ink/listen.js +572 -52
  87. package/dist/presenters/ink/listen.js.map +1 -1
  88. package/dist/presenters/ink/mouse-scroll.js +12 -0
  89. package/dist/presenters/ink/mouse-scroll.js.map +1 -1
  90. package/dist/presenters/ink/secure-input.js +68 -0
  91. package/dist/presenters/ink/secure-input.js.map +1 -0
  92. package/dist/presenters/ink/use-group-command.js +186 -0
  93. package/dist/presenters/ink/use-group-command.js.map +1 -0
  94. package/dist/presenters/listen-message.js +23 -6
  95. package/dist/presenters/listen-message.js.map +1 -1
  96. package/dist/presenters/logical-message.js +78 -0
  97. package/dist/presenters/logical-message.js.map +1 -0
  98. package/dist/presenters/markdown.js +54 -0
  99. package/dist/presenters/markdown.js.map +1 -0
  100. package/dist/presenters/structured.js +8 -3
  101. package/dist/presenters/structured.js.map +1 -1
  102. package/dist/services/account-session-service.js +241 -0
  103. package/dist/services/account-session-service.js.map +1 -0
  104. package/dist/services/archive-layout.js +61 -0
  105. package/dist/services/archive-layout.js.map +1 -0
  106. package/dist/services/archive-manifest.js +187 -0
  107. package/dist/services/archive-manifest.js.map +1 -0
  108. package/dist/services/archive-markdown.js +383 -0
  109. package/dist/services/archive-markdown.js.map +1 -0
  110. package/dist/services/archive-service.js +718 -0
  111. package/dist/services/archive-service.js.map +1 -0
  112. package/dist/services/archive-types.js +2 -0
  113. package/dist/services/archive-types.js.map +1 -0
  114. package/dist/services/attachment-download.js +7 -2
  115. package/dist/services/attachment-download.js.map +1 -1
  116. package/dist/services/auto-download-coordinator.js +2 -4
  117. package/dist/services/auto-download-coordinator.js.map +1 -1
  118. package/dist/services/contact-service.js +78 -0
  119. package/dist/services/contact-service.js.map +1 -0
  120. package/dist/services/dialog-service.js +140 -0
  121. package/dist/services/dialog-service.js.map +1 -0
  122. package/dist/services/folder-service.js +200 -0
  123. package/dist/services/folder-service.js.map +1 -0
  124. package/dist/services/group-service.js.map +1 -1
  125. package/dist/services/group-write-service.js +225 -0
  126. package/dist/services/group-write-service.js.map +1 -0
  127. package/dist/services/listen-album-aggregator.js +9 -29
  128. package/dist/services/listen-album-aggregator.js.map +1 -1
  129. package/dist/services/listen-attachment.js +23 -6
  130. package/dist/services/listen-attachment.js.map +1 -1
  131. package/dist/services/listen-composer-command.js +102 -0
  132. package/dist/services/listen-composer-command.js.map +1 -0
  133. package/dist/services/listen-reply-resolver.js +126 -0
  134. package/dist/services/listen-reply-resolver.js.map +1 -0
  135. package/dist/services/message-service.js +17 -1
  136. package/dist/services/message-service.js.map +1 -1
  137. package/dist/services/notification-service.js +142 -0
  138. package/dist/services/notification-service.js.map +1 -0
  139. package/dist/services/query-service.js +59 -3
  140. package/dist/services/query-service.js.map +1 -1
  141. package/dist/services/reply-context.js +29 -0
  142. package/dist/services/reply-context.js.map +1 -0
  143. package/dist/services/write-access-policy.js +19 -0
  144. package/dist/services/write-access-policy.js.map +1 -0
  145. package/dist/storage/message-db.js +241 -5
  146. package/dist/storage/message-db.js.map +1 -1
  147. package/dist/telegram/archive-types.js +2 -0
  148. package/dist/telegram/archive-types.js.map +1 -0
  149. package/dist/telegram/client-factory.js +51 -11
  150. package/dist/telegram/client-factory.js.map +1 -1
  151. package/dist/telegram/contact-types.js +10 -0
  152. package/dist/telegram/contact-types.js.map +1 -0
  153. package/dist/telegram/dialog-types.js +2 -0
  154. package/dist/telegram/dialog-types.js.map +1 -0
  155. package/dist/telegram/errors.js +14 -0
  156. package/dist/telegram/errors.js.map +1 -0
  157. package/dist/telegram/fake-group-management.js +122 -0
  158. package/dist/telegram/fake-group-management.js.map +1 -1
  159. package/dist/telegram/folder-types.js +13 -0
  160. package/dist/telegram/folder-types.js.map +1 -0
  161. package/dist/telegram/group-types.js +40 -0
  162. package/dist/telegram/group-types.js.map +1 -1
  163. package/dist/telegram/group-write-types.js +29 -0
  164. package/dist/telegram/group-write-types.js.map +1 -0
  165. package/dist/telegram/mtcute-archive.js +190 -0
  166. package/dist/telegram/mtcute-archive.js.map +1 -0
  167. package/dist/telegram/mtcute-client.js +73 -12
  168. package/dist/telegram/mtcute-client.js.map +1 -1
  169. package/dist/telegram/mtcute-contacts.js +90 -0
  170. package/dist/telegram/mtcute-contacts.js.map +1 -0
  171. package/dist/telegram/mtcute-dialogs.js +186 -0
  172. package/dist/telegram/mtcute-dialogs.js.map +1 -0
  173. package/dist/telegram/mtcute-folders.js +318 -0
  174. package/dist/telegram/mtcute-folders.js.map +1 -0
  175. package/dist/telegram/mtcute-group-helpers.js +56 -0
  176. package/dist/telegram/mtcute-group-helpers.js.map +1 -0
  177. package/dist/telegram/mtcute-group-invites.js +82 -0
  178. package/dist/telegram/mtcute-group-invites.js.map +1 -0
  179. package/dist/telegram/mtcute-group-management.js +60 -31
  180. package/dist/telegram/mtcute-group-management.js.map +1 -1
  181. package/dist/telegram/mtcute-group-members.js +158 -0
  182. package/dist/telegram/mtcute-group-members.js.map +1 -0
  183. package/dist/telegram/mtcute-group-settings.js +146 -0
  184. package/dist/telegram/mtcute-group-settings.js.map +1 -0
  185. package/dist/telegram/mtcute-group-topics.js +63 -0
  186. package/dist/telegram/mtcute-group-topics.js.map +1 -0
  187. package/dist/telegram/mtcute-message-normalizer.js +63 -0
  188. package/dist/telegram/mtcute-message-normalizer.js.map +1 -0
  189. package/dist/telegram/mtcute-notifications.js +101 -0
  190. package/dist/telegram/mtcute-notifications.js.map +1 -0
  191. package/dist/telegram/notification-types.js +11 -0
  192. package/dist/telegram/notification-types.js.map +1 -0
  193. package/dist/telegram/raw-message.js +46 -0
  194. package/dist/telegram/raw-message.js.map +1 -0
  195. package/dist/telegram/types.js +6 -1
  196. package/dist/telegram/types.js.map +1 -1
  197. package/package.json +20 -10
@@ -7,14 +7,15 @@ import { AutoDownloadCoordinator } from '../services/auto-download-coordinator.j
7
7
  import { actionDetail, chatTable, recordDetail, syncSummary, userDetail } from '../presenters/human.js';
8
8
  import { formatListenLine } from '../presenters/listen-message.js';
9
9
  import { renderInteractiveListen } from '../presenters/ink/listen.js';
10
- import { runWithAccountContext } from './account-options.js';
11
- import { hideBenignUpdateWarnings, runTelegramCommand } from './telegram-runner.js';
10
+ import { runWithAuthenticatedAccountContext } from './account-options.js';
11
+ import { hideBenignUpdateWarnings, runTelegramCommand, runTelegramWriteCommand } from './telegram-runner.js';
12
+ import { createListenReplyResolver } from '../services/listen-reply-resolver.js';
12
13
  export function registerTelegramCommands(app) {
13
14
  app.command('status')
14
15
  .description('Show Telegram authentication status')
15
16
  .option('--json')
16
17
  .option('--yaml')
17
- .action(async (options) => {
18
+ .action(async (options, command) => {
18
19
  await runTelegramCommand(options, async (client) => {
19
20
  const user = await client.getCurrentUser();
20
21
  return {
@@ -32,13 +33,13 @@ export function registerTelegramCommands(app) {
32
33
  ],
33
34
  },
34
35
  };
35
- });
36
+ }, command);
36
37
  });
37
38
  app.command('whoami')
38
39
  .description('Show the authenticated Telegram account')
39
40
  .option('--json')
40
41
  .option('--yaml')
41
- .action(async (options) => {
42
+ .action(async (options, command) => {
42
43
  await runTelegramCommand(options, async (client) => {
43
44
  const user = normalizeTelegramUser(await client.getCurrentUser());
44
45
  return {
@@ -46,18 +47,29 @@ export function registerTelegramCommands(app) {
46
47
  data: { user },
47
48
  human: userDetail(user),
48
49
  };
49
- });
50
+ }, command);
50
51
  });
51
52
  app.command('chats')
52
53
  .description('List available Telegram chats')
53
- .option('--type <type>')
54
+ .option('--type <type>', 'Filter by chat type')
55
+ .option('--group', 'List group chats')
56
+ .option('--channel', 'List channels')
57
+ .option('--user', 'List private user chats')
54
58
  .option('--json')
55
59
  .option('--yaml')
56
- .action(async (options) => {
60
+ .action(async (options, command) => {
61
+ const filter = resolveChatTypeFilter(options);
62
+ if (!filter.ok) {
63
+ await runWithAuthenticatedAccountContext(options, async () => filter, command);
64
+ return;
65
+ }
57
66
  await runTelegramCommand(options, async (client) => {
58
- const chats = await client.listChats(options.type);
67
+ const listedChats = await client.listChats(filter.type);
68
+ const chats = filter.includeSupergroups
69
+ ? listedChats.filter(chat => chat.type === 'group' || chat.type === 'supergroup')
70
+ : listedChats;
59
71
  return { ok: true, data: chats, human: chatTable(chats) };
60
- });
72
+ }, command);
61
73
  });
62
74
  app.command('history')
63
75
  .description('Fetch chat history and store it locally')
@@ -66,10 +78,10 @@ export function registerTelegramCommands(app) {
66
78
  .option('--delay <delay>', 'Seconds between history pages', '1')
67
79
  .option('--json')
68
80
  .option('--yaml')
69
- .action(async (chat, options) => {
81
+ .action(async (chat, options, command) => {
70
82
  const limit = Number.parseInt(options.limit ?? '0', 10);
71
83
  const pageDelay = parsePageDelay(options.delay);
72
- await renderSyncResult(options, async (service) => service.history({ chat, limit, pageDelay }));
84
+ await renderSyncResult(options, async (service) => service.history({ chat, limit, pageDelay }), command);
73
85
  });
74
86
  app.command('sync')
75
87
  .description('Sync new messages from a Telegram chat')
@@ -78,10 +90,10 @@ export function registerTelegramCommands(app) {
78
90
  .option('--delay <delay>', 'Seconds between history pages', '1')
79
91
  .option('--json')
80
92
  .option('--yaml')
81
- .action(async (chat, options) => {
93
+ .action(async (chat, options, command) => {
82
94
  const limit = Number.parseInt(options.limit ?? '0', 10);
83
95
  const pageDelay = parsePageDelay(options.delay);
84
- await renderSyncResult(options, async (service) => service.sync({ chat, limit, pageDelay }));
96
+ await renderSyncResult(options, async (service) => service.sync({ chat, limit, pageDelay }), command);
85
97
  });
86
98
  app.command('sync-all')
87
99
  .description('Sync messages from all Telegram chats')
@@ -90,7 +102,7 @@ export function registerTelegramCommands(app) {
90
102
  .option('--max-chats <maxChats>', 'Maximum chats to sync')
91
103
  .option('--json')
92
104
  .option('--yaml')
93
- .action(async (options) => {
105
+ .action(async (options, command) => {
94
106
  const limit = Number.parseInt(options.limit ?? '0', 10);
95
107
  const delay = Number.parseFloat(options.delay ?? '0');
96
108
  const maxChats = options.maxChats == null ? undefined : Number.parseInt(options.maxChats, 10);
@@ -107,7 +119,7 @@ export function registerTelegramCommands(app) {
107
119
  },
108
120
  human: syncSummary(result.data),
109
121
  };
110
- });
122
+ }, command);
111
123
  });
112
124
  app.command('refresh')
113
125
  .description('Refresh all chats with new Telegram messages')
@@ -116,24 +128,24 @@ export function registerTelegramCommands(app) {
116
128
  .option('--max-chats <maxChats>', 'Maximum chats to sync')
117
129
  .option('--json')
118
130
  .option('--yaml')
119
- .action(async (options) => {
131
+ .action(async (options, command) => {
120
132
  const limit = Number.parseInt(options.limit ?? '0', 10);
121
133
  const delay = Number.parseFloat(options.delay ?? '0');
122
134
  const maxChats = options.maxChats == null ? undefined : Number.parseInt(options.maxChats, 10);
123
- await renderSyncResult(options, async (service) => service.refresh({ limit, delay, maxChats }));
135
+ await renderSyncResult(options, async (service) => service.refresh({ limit, delay, maxChats }), command);
124
136
  });
125
137
  app.command('info')
126
138
  .description('Show information about a Telegram chat')
127
139
  .argument('<chat>')
128
140
  .option('--json')
129
141
  .option('--yaml')
130
- .action(async (chat, options) => {
142
+ .action(async (chat, options, command) => {
131
143
  await runTelegramCommand(options, async (client) => {
132
144
  const info = await client.getChatInfo(parseChat(chat));
133
145
  if (!info)
134
146
  return { ok: false, error: { code: 'chat_not_found', message: `Chat '${chat}' not found on Telegram.` } };
135
147
  return { ok: true, data: info, human: recordDetail('Chat info', info) };
136
- });
148
+ }, command);
137
149
  });
138
150
  app.command('send')
139
151
  .description('Send a message to a Telegram chat')
@@ -144,7 +156,7 @@ export function registerTelegramCommands(app) {
144
156
  .option('--no-preview')
145
157
  .option('--json')
146
158
  .option('--yaml')
147
- .action(async (chat, message, options) => {
159
+ .action(async (chat, message, options, command) => {
148
160
  const reply = options.reply == null ? undefined : Number(options.reply);
149
161
  await renderMessageResult(options, 'Message sent', (service) => service.send({
150
162
  chat,
@@ -152,7 +164,7 @@ export function registerTelegramCommands(app) {
152
164
  files: options.file,
153
165
  reply,
154
166
  linkPreview: options.preview,
155
- }));
167
+ }), command);
156
168
  });
157
169
  app.command('edit')
158
170
  .description('Edit a Telegram message')
@@ -162,14 +174,14 @@ export function registerTelegramCommands(app) {
162
174
  .option('--no-preview')
163
175
  .option('--json')
164
176
  .option('--yaml')
165
- .action(async (chat, msgId, text, options) => {
177
+ .action(async (chat, msgId, text, options, command) => {
166
178
  const msgIdNum = Number.parseInt(msgId, 10);
167
179
  await renderMessageResult(options, 'Message edited', (service) => service.edit({
168
180
  chat,
169
181
  msgId: msgIdNum,
170
182
  text,
171
183
  linkPreview: options.preview,
172
- }));
184
+ }), command);
173
185
  });
174
186
  app.command('delete')
175
187
  .description('Delete Telegram messages')
@@ -177,11 +189,11 @@ export function registerTelegramCommands(app) {
177
189
  .argument('<msgIds...>')
178
190
  .option('--json')
179
191
  .option('--yaml')
180
- .action(async (chat, msgIds, options) => {
192
+ .action(async (chat, msgIds, options, command) => {
181
193
  await renderMessageResult(options, 'Messages deleted', (service) => service.delete({
182
194
  chat,
183
195
  msgIds: msgIds.map((id) => Number.parseInt(id, 10)),
184
- }));
196
+ }), command);
185
197
  });
186
198
  app.command('listen')
187
199
  .description('Listen for new Telegram messages')
@@ -192,7 +204,7 @@ export function registerTelegramCommands(app) {
192
204
  .option('--no-media', 'Hide attachment summary for incoming messages')
193
205
  .option('--auto-download', 'Download incoming attachments automatically')
194
206
  .option('--no-interactive', 'Use plain text listen output')
195
- .action(async (chats, options) => {
207
+ .action(async (chats, options, command) => {
196
208
  const persist = Boolean(options.persist);
197
209
  const retrySeconds = Number.parseFloat(options.retrySeconds ?? '5');
198
210
  const parsedChats = parseChats(chats)?.map(parseChat);
@@ -204,23 +216,26 @@ export function registerTelegramCommands(app) {
204
216
  const seenMessages = new Set();
205
217
  const seenMessageOrder = [];
206
218
  const controller = new AbortController();
219
+ const shutdownListeners = new Set();
207
220
  const stopListening = () => controller.abort();
221
+ const requestShutdown = () => {
222
+ if (shutdownListeners.size === 0)
223
+ stopListening();
224
+ else
225
+ for (const listener of shutdownListeners)
226
+ listener();
227
+ };
208
228
  const restoreUpdateWarnings = hideBenignUpdateWarnings(process.stdout);
209
229
  const restoreUpdateErrors = hideBenignUpdateWarnings(process.stderr);
210
- const albumAggregator = new ListenAlbumAggregator({
211
- emit: (messages) => process.stdout.write(formatListenLine(messages, {
212
- showMedia,
213
- showChatName,
214
- })),
215
- });
216
230
  let autoDownloader;
217
- process.on('SIGINT', stopListening);
218
- process.on('SIGTERM', stopListening);
231
+ process.on('SIGINT', requestShutdown);
232
+ process.on('SIGTERM', requestShutdown);
219
233
  try {
220
- await runWithAccountContext(options, async (context) => {
234
+ await runWithAuthenticatedAccountContext(options, async (context) => {
221
235
  const createClient = () => createTelegramClient(context.sessionPath);
222
236
  if (useInteractive) {
223
237
  await renderInteractiveListen({
238
+ dbPath: context.dbPath,
224
239
  chats: parsedChats,
225
240
  persist,
226
241
  retrySeconds,
@@ -230,90 +245,119 @@ export function registerTelegramCommands(app) {
230
245
  showChatName,
231
246
  createClient,
232
247
  stopSignal: controller.signal,
248
+ shutdownRequests: {
249
+ subscribe: (listener) => {
250
+ shutdownListeners.add(listener);
251
+ return () => shutdownListeners.delete(listener);
252
+ },
253
+ },
233
254
  onRequestStop: stopListening,
234
255
  });
235
256
  return;
236
257
  }
237
- if (autoDownload) {
238
- autoDownloader = new AutoDownloadCoordinator({
239
- onEvent: printAutoDownloadEvent,
240
- });
241
- }
242
- while (true) {
243
- const client = createClient();
244
- let retry = false;
245
- let clientClosed = false;
246
- const closeClient = async () => {
247
- if (clientClosed)
248
- return;
249
- clientClosed = true;
250
- await client.close().catch(() => undefined);
251
- };
252
- autoDownloader?.setClient(client);
253
- try {
254
- const result = await client.listen({
255
- chats: parsedChats,
256
- signal: controller.signal,
257
- onMessage: (message) => {
258
- const key = `${message.chat_id}:${message.msg_id}`;
259
- if (seenMessages.has(key))
260
- return;
261
- seenMessages.add(key);
262
- seenMessageOrder.push(key);
263
- if (seenMessages.size > 5000) {
264
- const oldest = seenMessageOrder.shift();
265
- if (oldest != null)
266
- seenMessages.delete(oldest);
267
- }
268
- autoDownloader?.enqueue(message);
269
- albumAggregator.add(message);
270
- },
258
+ const replyResolver = createListenReplyResolver(context.dbPath);
259
+ let listenOutputError;
260
+ const albumAggregator = new ListenAlbumAggregator({
261
+ emit: (messages) => {
262
+ const replyContext = replyResolver.resolve(messages);
263
+ process.stdout.write(formatListenLine(messages, {
264
+ showMedia,
265
+ showChatName,
266
+ replyContext,
267
+ }));
268
+ replyResolver.remember(messages);
269
+ },
270
+ onError: (error) => {
271
+ listenOutputError ??= error;
272
+ controller.abort();
273
+ },
274
+ });
275
+ try {
276
+ if (autoDownload) {
277
+ autoDownloader = new AutoDownloadCoordinator({
278
+ onEvent: printAutoDownloadEvent,
271
279
  });
272
- if (!persist || result === 'stopped')
273
- break;
274
- if (result === 'disconnected') {
280
+ }
281
+ while (true) {
282
+ const client = createClient();
283
+ let retry = false;
284
+ let clientClosed = false;
285
+ const closeClient = async () => {
286
+ if (clientClosed)
287
+ return;
288
+ clientClosed = true;
289
+ await client.close().catch(() => undefined);
290
+ };
291
+ autoDownloader?.setClient(client);
292
+ try {
293
+ const result = await client.listen({
294
+ chats: parsedChats,
295
+ signal: controller.signal,
296
+ onMessage: (message) => {
297
+ const key = `${message.chat_id}:${message.msg_id}`;
298
+ if (seenMessages.has(key))
299
+ return;
300
+ seenMessages.add(key);
301
+ seenMessageOrder.push(key);
302
+ if (seenMessages.size > 5000) {
303
+ const oldest = seenMessageOrder.shift();
304
+ if (oldest != null)
305
+ seenMessages.delete(oldest);
306
+ }
307
+ autoDownloader?.enqueue(message);
308
+ albumAggregator.add(message);
309
+ },
310
+ });
311
+ if (!persist || result === 'stopped')
312
+ break;
313
+ if (result === 'disconnected')
314
+ retry = true;
315
+ }
316
+ catch (error) {
317
+ if (!persist)
318
+ throw error;
275
319
  retry = true;
276
320
  }
277
- }
278
- catch (error) {
279
- if (!persist)
280
- throw error;
281
- retry = true;
282
- }
283
- finally {
284
- albumAggregator.flush();
285
- if (autoDownloader != null) {
286
- if (controller.signal.aborted) {
287
- autoDownloader.stop();
288
- await closeClient();
289
- await autoDownloader.waitForActive();
290
- }
291
- else if (retry) {
292
- autoDownloader.setClient(null);
293
- await autoDownloader.waitForActive();
294
- }
295
- else {
296
- await autoDownloader.waitForIdle();
297
- autoDownloader.setClient(null);
321
+ finally {
322
+ albumAggregator.flush();
323
+ if (autoDownloader != null) {
324
+ if (controller.signal.aborted) {
325
+ autoDownloader.stop();
326
+ await closeClient();
327
+ await autoDownloader.waitForActive();
328
+ }
329
+ else if (retry) {
330
+ autoDownloader.setClient(null);
331
+ await autoDownloader.waitForActive();
332
+ }
333
+ else {
334
+ await autoDownloader.waitForIdle();
335
+ autoDownloader.setClient(null);
336
+ }
298
337
  }
338
+ await closeClient();
299
339
  }
300
- await closeClient();
301
- }
302
- if (retry) {
303
- await sleep(retrySeconds);
304
- continue;
340
+ if (retry) {
341
+ await sleep(retrySeconds);
342
+ continue;
343
+ }
344
+ break;
305
345
  }
306
- break;
346
+ if (listenOutputError != null)
347
+ throw listenOutputError;
307
348
  }
308
- });
349
+ finally {
350
+ albumAggregator.dispose();
351
+ replyResolver.close();
352
+ }
353
+ }, command);
309
354
  }
310
355
  finally {
311
- process.off('SIGINT', stopListening);
312
- process.off('SIGTERM', stopListening);
356
+ process.off('SIGINT', requestShutdown);
357
+ process.off('SIGTERM', requestShutdown);
313
358
  restoreUpdateWarnings();
314
359
  restoreUpdateErrors();
315
360
  autoDownloader?.stop();
316
- albumAggregator.dispose();
317
361
  }
318
362
  process.stdout.write('listening completed\n');
319
363
  });
@@ -321,6 +365,25 @@ export function registerTelegramCommands(app) {
321
365
  function collectOption(value, previous) {
322
366
  return [...previous, value];
323
367
  }
368
+ function resolveChatTypeFilter(options) {
369
+ const selected = [options.type, options.group, options.channel, options.user].filter(Boolean);
370
+ if (selected.length > 1) {
371
+ return {
372
+ ok: false,
373
+ error: {
374
+ code: 'invalid_option',
375
+ message: 'Only one chat type filter may be used: --group, --channel, --user, or --type.',
376
+ },
377
+ };
378
+ }
379
+ if (options.group)
380
+ return { ok: true, includeSupergroups: true };
381
+ if (options.channel)
382
+ return { ok: true, type: 'channel' };
383
+ if (options.user)
384
+ return { ok: true, type: 'user' };
385
+ return { ok: true, type: options.type };
386
+ }
324
387
  function printAutoDownloadEvent(event) {
325
388
  if (event.status === 'completed') {
326
389
  process.stdout.write(`downloaded: ${event.path}\n`);
@@ -345,13 +408,13 @@ function parseChat(chat) {
345
408
  const parsed = Number.parseInt(chat, 10);
346
409
  return Number.isNaN(parsed) || String(parsed) !== chat.trim() ? chat : parsed;
347
410
  }
348
- async function renderSyncResult(options, handler) {
411
+ async function renderSyncResult(options, handler, command) {
349
412
  await runTelegramCommand(options, async (client, context) => {
350
413
  const result = await runWithSync(client, context.dbPath, handler);
351
414
  return result.ok && result.human == null
352
415
  ? { ...result, human: syncSummary(result.data) }
353
416
  : result;
354
- });
417
+ }, command);
355
418
  }
356
419
  async function runWithSync(client, dbPath, handler) {
357
420
  const service = new SyncService(client, new MessageDB(dbPath));
@@ -362,14 +425,14 @@ async function runWithSync(client, dbPath, handler) {
362
425
  service.close();
363
426
  }
364
427
  }
365
- async function renderMessageResult(options, title, handler) {
366
- await runTelegramCommand(options, async (client) => {
428
+ async function renderMessageResult(options, title, handler, command) {
429
+ await runTelegramWriteCommand(options, async (client) => {
367
430
  const service = new MessageService(client);
368
431
  const result = await handler(service);
369
432
  return result.ok && result.human == null
370
433
  ? { ...result, human: actionDetail(title, result.data) }
371
434
  : result;
372
- });
435
+ }, command);
373
436
  }
374
437
  function normalizeTelegramUser(user) {
375
438
  const name = [user.first_name, user.last_name].filter(Boolean).join(' ');
@@ -1 +1 @@
1
- {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/commands/telegram.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EAAE,uBAAuB,EAA0B,MAAM,0CAA0C,CAAA;AAC1G,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAA8B,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAmCnF,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;SAClB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QACxC,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAA;YAC1C,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE;oBACJ,aAAa,EAAE,IAAI;oBACnB,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC;iBAClC;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,iBAAiB;oBACxB,MAAM,EAAE;wBACN,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;wBACzD,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;qBAClD;iBACF;aACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;SAClB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QACxC,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;YACjE,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE;gBACd,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC;aACxB,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;SACjB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,OAA2C,EAAE,EAAE;QAC5D,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAW,CAAC,CAAA;YACzD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;SACnB,WAAW,CAAC,yCAAyC,CAAC;SACtD,QAAQ,CAAC,QAAQ,CAAC;SAClB,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,GAAG,CAAC;SAC/D,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAkB,EAAE,EAAE;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;QACvD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;SAChB,WAAW,CAAC,wCAAwC,CAAC;SACrD,QAAQ,CAAC,QAAQ,CAAC;SAClB,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,GAAG,CAAC;SAC/D,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAkB,EAAE,EAAE;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;QACvD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;SACpB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,CAAC;SACvD,MAAM,CAAC,wBAAwB,EAAE,uBAAuB,CAAC;SACzD,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAA;QACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QAC7F,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YAChE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO,MAAM,CAAA;YAC7B,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE;oBACJ,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;oBACtC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;oBACxB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;iBAC7B;gBACD,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;aAChC,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;SACnB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,CAAC;SACvD,MAAM,CAAC,wBAAwB,EAAE,uBAAuB,CAAC;SACzD,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAA;QACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QAC7F,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;SAChB,WAAW,CAAC,wCAAwC,CAAC;SACrD,QAAQ,CAAC,QAAQ,CAAC;SAClB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAuB,EAAE,EAAE;QACtD,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;YACtD,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,IAAI,0BAA0B,EAAE,EAAE,CAAA;YACpH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAA;QACzE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;SAChB,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,QAAQ,CAAC;SAClB,QAAQ,CAAC,WAAW,CAAC;SACrB,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,EAAE,aAAa,EAAE,EAAE,CAAC;SAC7E,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;SACvD,MAAM,CAAC,cAAc,CAAC;SACtB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA2B,EAAE,OAAkB,EAAE,EAAE;QAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACvE,MAAM,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3E,IAAI;YACJ,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,KAAK;YACL,WAAW,EAAE,OAAO,CAAC,OAAO;SAC7B,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;SAChB,WAAW,CAAC,yBAAyB,CAAC;SACtC,QAAQ,CAAC,QAAQ,CAAC;SAClB,QAAQ,CAAC,SAAS,CAAC;SACnB,QAAQ,CAAC,QAAQ,CAAC;SAClB,MAAM,CAAC,cAAc,CAAC;SACtB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,OAAkB,EAAE,EAAE;QAC9E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC3C,MAAM,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7E,IAAI;YACJ,KAAK,EAAE,QAAQ;YACf,IAAI;YACJ,WAAW,EAAE,OAAO,CAAC,OAAO;SAC7B,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;SAClB,WAAW,CAAC,0BAA0B,CAAC;SACvC,QAAQ,CAAC,QAAQ,CAAC;SAClB,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,MAAgB,EAAE,OAAoB,EAAE,EAAE;QACrE,MAAM,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;YACjF,IAAI;YACJ,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACpD,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;IAEJ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;SAClB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,YAAY,CAAC;SACtB,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;SAC9C,MAAM,CAAC,2BAA2B,EAAE,iBAAiB,EAAE,GAAG,CAAC;SAC3D,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC;SAC5E,MAAM,CAAC,YAAY,EAAE,+CAA+C,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,KAAe,EAAE,OAAsB,EAAE,EAAE;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,IAAI,GAAG,CAAC,CAAA;QACnE,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK,CAAA;QACzC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAClD,MAAM,YAAY,GAAG,WAAW,IAAI,IAAI,CAAA;QACxC,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;QACrH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACxG,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;QACtC,MAAM,gBAAgB,GAAa,EAAE,CAAA;QACrC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QAC9C,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACtE,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACpE,MAAM,eAAe,GAAG,IAAI,qBAAqB,CAAC;YAChD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE;gBAClE,SAAS;gBACT,YAAY;aACb,CAAC,CAAC;SACJ,CAAC,CAAA;QACF,IAAI,cAAmD,CAAA;QAEvD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QACnC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QAEpC,IAAI,CAAC;YACH,MAAM,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACrD,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;gBAEpE,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,uBAAuB,CAAC;wBAC5B,KAAK,EAAE,WAAW;wBAClB,OAAO;wBACP,YAAY;wBACZ,MAAM;wBACN,SAAS;wBACT,YAAY;wBACZ,YAAY;wBACZ,YAAY;wBACZ,UAAU,EAAE,UAAU,CAAC,MAAM;wBAC7B,aAAa,EAAE,aAAa;qBAC7B,CAAC,CAAA;oBACF,OAAM;gBACR,CAAC;gBAED,IAAI,YAAY,EAAE,CAAC;oBACjB,cAAc,GAAG,IAAI,uBAAuB,CAAC;wBAC3C,OAAO,EAAE,sBAAsB;qBAChC,CAAC,CAAA;gBACJ,CAAC;gBAED,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;oBAC7B,IAAI,KAAK,GAAG,KAAK,CAAA;oBACjB,IAAI,YAAY,GAAG,KAAK,CAAA;oBACxB,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;wBAC7B,IAAI,YAAY;4BAAE,OAAM;wBACxB,YAAY,GAAG,IAAI,CAAA;wBACnB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;oBAC7C,CAAC,CAAA;oBACD,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;oBACjC,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;4BACjC,KAAK,EAAE,WAAW;4BAClB,MAAM,EAAE,UAAU,CAAC,MAAM;4BACzB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrB,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAA;gCAClD,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;oCAAE,OAAM;gCACjC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gCACrB,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gCAC1B,IAAI,YAAY,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;oCAC7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAA;oCACvC,IAAI,MAAM,IAAI,IAAI;wCAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gCACjD,CAAC;gCACD,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;gCAChC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;4BAC9B,CAAC;yBACF,CAAC,CAAA;wBACF,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,SAAS;4BAAE,MAAK;wBAC3C,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;4BAC9B,KAAK,GAAG,IAAI,CAAA;wBACd,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,OAAO;4BAAE,MAAM,KAAK,CAAA;wBACzB,KAAK,GAAG,IAAI,CAAA;oBACd,CAAC;4BAAS,CAAC;wBACT,eAAe,CAAC,KAAK,EAAE,CAAA;wBACvB,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;4BAC3B,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gCAC9B,cAAc,CAAC,IAAI,EAAE,CAAA;gCACrB,MAAM,WAAW,EAAE,CAAA;gCACnB,MAAM,cAAc,CAAC,aAAa,EAAE,CAAA;4BACtC,CAAC;iCAAM,IAAI,KAAK,EAAE,CAAC;gCACjB,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gCAC9B,MAAM,cAAc,CAAC,aAAa,EAAE,CAAA;4BACtC,CAAC;iCAAM,CAAC;gCACN,MAAM,cAAc,CAAC,WAAW,EAAE,CAAA;gCAClC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;4BAChC,CAAC;wBACH,CAAC;wBACD,MAAM,WAAW,EAAE,CAAA;oBACrB,CAAC;oBACD,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,KAAK,CAAC,YAAY,CAAC,CAAA;wBACzB,SAAQ;oBACV,CAAC;oBACD,MAAK;gBACP,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;YACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YACrC,qBAAqB,EAAE,CAAA;YACvB,mBAAmB,EAAE,CAAA;YACrB,cAAc,EAAE,IAAI,EAAE,CAAA;YACtB,eAAe,CAAC,OAAO,EAAE,CAAA;QAC3B,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;AACN,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,QAAkB;IACtD,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAwB;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;IACrD,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAA;IAC3G,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAA4B;IAC9C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACpD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAyC;IACxE,OAAO,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACnD,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,MAAM,GAAG,GAAG,KAAK,IAAI,GAAG,CAAA;IACxB,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACrD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACxC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;AAC/E,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAkB,EAAE,OAAyD;IAC3G,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjE,OAAO,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI;YACtC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,IAAyC,CAAC,EAAE;YACrF,CAAC,CAAC,MAAM,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,MAA6B,EAC7B,MAAc,EACd,OAAyD;IAEzD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9D,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAuB,EACvB,KAAa,EACb,OAA4D;IAE5D,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QACrC,OAAO,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI;YACtC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAA+B,CAAC,EAAE;YACnF,CAAC,CAAC,MAAM,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAkB;IAQ/C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxE,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAC,OAAe;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/commands/telegram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ const RELATIVE = /^(\d+)(s|m|h|d|w)$/;
2
+ const ISO_WITH_ZONE = /^\d{4}-\d{2}-\d{2}T.+(?:Z|[+-]\d{2}:\d{2})$/i;
3
+ const UNIT_MS = {
4
+ s: 1_000,
5
+ m: 60_000,
6
+ h: 3_600_000,
7
+ d: 86_400_000,
8
+ w: 604_800_000,
9
+ };
10
+ export function parseTimeRange(input, now = new Date()) {
11
+ const since = input.since == null ? undefined : parseBound(input.since, now);
12
+ const until = input.until == null ? undefined : parseBound(input.until, now);
13
+ if (since && until && since.getTime() >= until.getTime()) {
14
+ throw new Error('invalid_time_range: --since must be earlier than --until.');
15
+ }
16
+ return { since, until };
17
+ }
18
+ function parseBound(value, now) {
19
+ const trimmed = value.trim();
20
+ const relative = RELATIVE.exec(trimmed);
21
+ if (relative) {
22
+ const amount = Number(relative[1]);
23
+ if (!Number.isSafeInteger(amount) || amount <= 0)
24
+ throw invalid(trimmed);
25
+ return new Date(now.getTime() - amount * UNIT_MS[relative[2]]);
26
+ }
27
+ if (!ISO_WITH_ZONE.test(trimmed)) {
28
+ throw invalid(trimmed);
29
+ }
30
+ const parsed = new Date(trimmed);
31
+ if (Number.isNaN(parsed.getTime())) {
32
+ throw invalid(trimmed);
33
+ }
34
+ return parsed;
35
+ }
36
+ function invalid(value) {
37
+ return new Error(`invalid_time_range: invalid time value "${value}".`);
38
+ }
39
+ //# sourceMappingURL=time-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-range.js","sourceRoot":"","sources":["../../src/commands/time-range.ts"],"names":[],"mappings":"AAUA,MAAM,QAAQ,GAAG,oBAAoB,CAAA;AACrC,MAAM,aAAa,GAAG,8CAA8C,CAAA;AAEpE,MAAM,OAAO,GAAG;IACd,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,WAAW;CACN,CAAA;AAEV,MAAM,UAAU,cAAc,CAAC,KAAqB,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAE5E,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACzB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,GAAS;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QAExE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAyB,CAAC,CAAC,CAAA;IACxF,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;IAChC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,IAAI,KAAK,CAAC,2CAA2C,KAAK,IAAI,CAAC,CAAA;AACxE,CAAC"}
@@ -1,11 +1,12 @@
1
1
  export function outputFormatConflict(options) {
2
- if (!options.json || !options.yaml)
2
+ const selected = [options.json, options.yaml, options.markdown].filter(Boolean).length;
3
+ if (selected <= 1)
3
4
  return undefined;
4
5
  return {
5
6
  ok: false,
6
7
  error: {
7
8
  code: 'invalid_output_format',
8
- message: 'Use only one of --json or --yaml.',
9
+ message: 'Use only one of --json, --yaml, or --markdown.',
9
10
  },
10
11
  };
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AA4CA,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACvD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IACpD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE;YACL,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,mCAAmC;SAC7C;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AA6CA,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACvD,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;IACtF,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IACnC,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE;YACL,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,gDAAgD;SAC1D;KACF,CAAA;AACH,CAAC"}