@wirecat/cli-core 0.264.0 → 0.265.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 (239) hide show
  1. package/dist/cli/envelope.d.ts +2 -0
  2. package/dist/cli/envelope.d.ts.map +1 -1
  3. package/dist/cli/envelope.js +2 -2
  4. package/dist/cli/envelope.js.map +1 -1
  5. package/dist/cli/list-query.d.ts +14 -2
  6. package/dist/cli/list-query.d.ts.map +1 -1
  7. package/dist/cli/list-query.js +59 -8
  8. package/dist/cli/list-query.js.map +1 -1
  9. package/dist/cli/messenger/admin-commands.d.ts.map +1 -1
  10. package/dist/cli/messenger/admin-commands.js +34 -46
  11. package/dist/cli/messenger/admin-commands.js.map +1 -1
  12. package/dist/cli/messenger/admin-contacts-command.d.ts.map +1 -1
  13. package/dist/cli/messenger/admin-contacts-command.js +7 -3
  14. package/dist/cli/messenger/admin-contacts-command.js.map +1 -1
  15. package/dist/cli/messenger/admin-folders-command.d.ts.map +1 -1
  16. package/dist/cli/messenger/admin-folders-command.js +21 -21
  17. package/dist/cli/messenger/admin-folders-command.js.map +1 -1
  18. package/dist/cli/messenger/admin-moderation-command.d.ts.map +1 -1
  19. package/dist/cli/messenger/admin-moderation-command.js +11 -13
  20. package/dist/cli/messenger/admin-moderation-command.js.map +1 -1
  21. package/dist/cli/messenger/chat-answers.d.ts +155 -0
  22. package/dist/cli/messenger/chat-answers.d.ts.map +1 -0
  23. package/dist/cli/messenger/chat-answers.js +243 -0
  24. package/dist/cli/messenger/chat-answers.js.map +1 -0
  25. package/dist/cli/messenger/chat-lists.d.ts +161 -0
  26. package/dist/cli/messenger/chat-lists.d.ts.map +1 -0
  27. package/dist/cli/messenger/chat-lists.js +82 -0
  28. package/dist/cli/messenger/chat-lists.js.map +1 -0
  29. package/dist/cli/messenger/chat-queries.d.ts +14 -0
  30. package/dist/cli/messenger/chat-queries.d.ts.map +1 -0
  31. package/dist/cli/messenger/chat-queries.js +48 -0
  32. package/dist/cli/messenger/chat-queries.js.map +1 -0
  33. package/dist/cli/messenger/chats-bots-command.d.ts.map +1 -1
  34. package/dist/cli/messenger/chats-bots-command.js +7 -2
  35. package/dist/cli/messenger/chats-bots-command.js.map +1 -1
  36. package/dist/cli/messenger/chats-command.d.ts.map +1 -1
  37. package/dist/cli/messenger/chats-command.js +33 -71
  38. package/dist/cli/messenger/chats-command.js.map +1 -1
  39. package/dist/cli/messenger/chats-documents-command.d.ts.map +1 -1
  40. package/dist/cli/messenger/chats-documents-command.js +10 -5
  41. package/dist/cli/messenger/chats-documents-command.js.map +1 -1
  42. package/dist/cli/messenger/chats-members-command.d.ts.map +1 -1
  43. package/dist/cli/messenger/chats-members-command.js +38 -64
  44. package/dist/cli/messenger/chats-members-command.js.map +1 -1
  45. package/dist/cli/messenger/chats-read-command.d.ts.map +1 -1
  46. package/dist/cli/messenger/chats-read-command.js +4 -2
  47. package/dist/cli/messenger/chats-read-command.js.map +1 -1
  48. package/dist/cli/messenger/chats-stats-command.d.ts.map +1 -1
  49. package/dist/cli/messenger/chats-stats-command.js +24 -17
  50. package/dist/cli/messenger/chats-stats-command.js.map +1 -1
  51. package/dist/cli/messenger/chats-tracking-command.d.ts.map +1 -1
  52. package/dist/cli/messenger/chats-tracking-command.js +11 -17
  53. package/dist/cli/messenger/chats-tracking-command.js.map +1 -1
  54. package/dist/cli/messenger/contacts-command.d.ts.map +1 -1
  55. package/dist/cli/messenger/contacts-command.js +61 -43
  56. package/dist/cli/messenger/contacts-command.js.map +1 -1
  57. package/dist/cli/messenger/hearing-command.d.ts +1 -1
  58. package/dist/cli/messenger/hearing-command.d.ts.map +1 -1
  59. package/dist/cli/messenger/hearing-command.js +1 -1
  60. package/dist/cli/messenger/hearing-command.js.map +1 -1
  61. package/dist/cli/messenger/history-query.d.ts +18 -0
  62. package/dist/cli/messenger/history-query.d.ts.map +1 -0
  63. package/dist/cli/messenger/history-query.js +63 -0
  64. package/dist/cli/messenger/history-query.js.map +1 -0
  65. package/dist/cli/messenger/list-query.d.ts +13 -0
  66. package/dist/cli/messenger/list-query.d.ts.map +1 -0
  67. package/dist/cli/messenger/list-query.js +23 -0
  68. package/dist/cli/messenger/list-query.js.map +1 -0
  69. package/dist/cli/messenger/message-items.d.ts +31 -0
  70. package/dist/cli/messenger/message-items.d.ts.map +1 -0
  71. package/dist/cli/messenger/message-items.js +95 -0
  72. package/dist/cli/messenger/message-items.js.map +1 -0
  73. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  74. package/dist/cli/messenger/messages-command.js +52 -77
  75. package/dist/cli/messenger/messages-command.js.map +1 -1
  76. package/dist/cli/messenger/messages-comments-command.d.ts.map +1 -1
  77. package/dist/cli/messenger/messages-comments-command.js +39 -28
  78. package/dist/cli/messenger/messages-comments-command.js.map +1 -1
  79. package/dist/cli/messenger/messages-link-command.d.ts.map +1 -1
  80. package/dist/cli/messenger/messages-link-command.js +16 -14
  81. package/dist/cli/messenger/messages-link-command.js.map +1 -1
  82. package/dist/cli/messenger/messages-scheduled-command.d.ts.map +1 -1
  83. package/dist/cli/messenger/messages-scheduled-command.js +23 -26
  84. package/dist/cli/messenger/messages-scheduled-command.js.map +1 -1
  85. package/dist/cli/messenger/people-queries.d.ts +6 -0
  86. package/dist/cli/messenger/people-queries.d.ts.map +1 -0
  87. package/dist/cli/messenger/people-queries.js +15 -0
  88. package/dist/cli/messenger/people-queries.js.map +1 -0
  89. package/dist/cli/messenger/polls-command.d.ts.map +1 -1
  90. package/dist/cli/messenger/polls-command.js +29 -23
  91. package/dist/cli/messenger/polls-command.js.map +1 -1
  92. package/dist/cli/messenger/reactions-command.d.ts.map +1 -1
  93. package/dist/cli/messenger/reactions-command.js +6 -2
  94. package/dist/cli/messenger/reactions-command.js.map +1 -1
  95. package/dist/cli/messenger/topics-command.d.ts.map +1 -1
  96. package/dist/cli/messenger/topics-command.js +21 -9
  97. package/dist/cli/messenger/topics-command.js.map +1 -1
  98. package/dist/cli/steps.d.ts.map +1 -1
  99. package/dist/cli/steps.js +24 -0
  100. package/dist/cli/steps.js.map +1 -1
  101. package/dist/entities/attachment.d.ts +6 -0
  102. package/dist/entities/attachment.d.ts.map +1 -1
  103. package/dist/entities/attachment.js +6 -0
  104. package/dist/entities/attachment.js.map +1 -1
  105. package/dist/entities/chat-event.d.ts +28 -0
  106. package/dist/entities/chat-event.d.ts.map +1 -0
  107. package/dist/entities/chat-event.js +19 -0
  108. package/dist/entities/chat-event.js.map +1 -0
  109. package/dist/entities/chat.d.ts +29 -0
  110. package/dist/entities/chat.d.ts.map +1 -1
  111. package/dist/entities/chat.js +15 -0
  112. package/dist/entities/chat.js.map +1 -1
  113. package/dist/entities/contact.d.ts +137 -0
  114. package/dist/entities/contact.d.ts.map +1 -1
  115. package/dist/entities/contact.js +6 -1
  116. package/dist/entities/contact.js.map +1 -1
  117. package/dist/entities/folder.d.ts +31 -0
  118. package/dist/entities/folder.d.ts.map +1 -0
  119. package/dist/entities/folder.js +25 -0
  120. package/dist/entities/folder.js.map +1 -0
  121. package/dist/entities/index.d.ts +364 -1
  122. package/dist/entities/index.d.ts.map +1 -1
  123. package/dist/entities/index.js +17 -1
  124. package/dist/entities/index.js.map +1 -1
  125. package/dist/entities/invite-link.d.ts +17 -0
  126. package/dist/entities/invite-link.d.ts.map +1 -0
  127. package/dist/entities/invite-link.js +18 -0
  128. package/dist/entities/invite-link.js.map +1 -0
  129. package/dist/entities/join-request.d.ts +12 -0
  130. package/dist/entities/join-request.d.ts.map +1 -0
  131. package/dist/entities/join-request.js +13 -0
  132. package/dist/entities/join-request.js.map +1 -0
  133. package/dist/entities/member.d.ts +24 -0
  134. package/dist/entities/member.d.ts.map +1 -0
  135. package/dist/entities/member.js +25 -0
  136. package/dist/entities/member.js.map +1 -0
  137. package/dist/entities/message-link.d.ts +10 -0
  138. package/dist/entities/message-link.d.ts.map +1 -0
  139. package/dist/entities/message-link.js +11 -0
  140. package/dist/entities/message-link.js.map +1 -0
  141. package/dist/entities/message.d.ts +19 -0
  142. package/dist/entities/message.d.ts.map +1 -1
  143. package/dist/entities/message.js +4 -0
  144. package/dist/entities/message.js.map +1 -1
  145. package/dist/entities/poll-vote.d.ts +11 -0
  146. package/dist/entities/poll-vote.d.ts.map +1 -0
  147. package/dist/entities/poll-vote.js +12 -0
  148. package/dist/entities/poll-vote.js.map +1 -0
  149. package/dist/entities/topic.d.ts +14 -0
  150. package/dist/entities/topic.d.ts.map +1 -0
  151. package/dist/entities/topic.js +15 -0
  152. package/dist/entities/topic.js.map +1 -0
  153. package/dist/mcp/instructions.d.ts.map +1 -1
  154. package/dist/mcp/instructions.js +3 -2
  155. package/dist/mcp/instructions.js.map +1 -1
  156. package/dist/mcp/tools/admin.d.ts.map +1 -1
  157. package/dist/mcp/tools/admin.js +41 -39
  158. package/dist/mcp/tools/admin.js.map +1 -1
  159. package/dist/mcp/tools/chats-read.d.ts.map +1 -1
  160. package/dist/mcp/tools/chats-read.js +4 -2
  161. package/dist/mcp/tools/chats-read.js.map +1 -1
  162. package/dist/mcp/tools/chats.d.ts.map +1 -1
  163. package/dist/mcp/tools/chats.js +77 -84
  164. package/dist/mcp/tools/chats.js.map +1 -1
  165. package/dist/mcp/tools/contacts-write.d.ts.map +1 -1
  166. package/dist/mcp/tools/contacts-write.js +4 -2
  167. package/dist/mcp/tools/contacts-write.js.map +1 -1
  168. package/dist/mcp/tools/contacts.d.ts.map +1 -1
  169. package/dist/mcp/tools/contacts.js +55 -30
  170. package/dist/mcp/tools/contacts.js.map +1 -1
  171. package/dist/mcp/tools/folders.d.ts.map +1 -1
  172. package/dist/mcp/tools/folders.js +12 -11
  173. package/dist/mcp/tools/folders.js.map +1 -1
  174. package/dist/mcp/tools/messages.d.ts.map +1 -1
  175. package/dist/mcp/tools/messages.js +74 -59
  176. package/dist/mcp/tools/messages.js.map +1 -1
  177. package/dist/mcp/tools/moderation.d.ts.map +1 -1
  178. package/dist/mcp/tools/moderation.js +5 -3
  179. package/dist/mcp/tools/moderation.js.map +1 -1
  180. package/dist/mcp/tools/polls.d.ts.map +1 -1
  181. package/dist/mcp/tools/polls.js +31 -14
  182. package/dist/mcp/tools/polls.js.map +1 -1
  183. package/dist/mcp/tools/reactions.d.ts.map +1 -1
  184. package/dist/mcp/tools/reactions.js +4 -2
  185. package/dist/mcp/tools/reactions.js.map +1 -1
  186. package/dist/mcp/tools/topics.d.ts.map +1 -1
  187. package/dist/mcp/tools/topics.js +30 -20
  188. package/dist/mcp/tools/topics.js.map +1 -1
  189. package/dist/services/admin.js +2 -2
  190. package/dist/services/admin.js.map +1 -1
  191. package/dist/services/chats.d.ts +6 -20
  192. package/dist/services/chats.d.ts.map +1 -1
  193. package/dist/services/chats.js +6 -43
  194. package/dist/services/chats.js.map +1 -1
  195. package/dist/services/document-pictures.d.ts +26 -0
  196. package/dist/services/document-pictures.d.ts.map +1 -0
  197. package/dist/services/document-pictures.js +37 -0
  198. package/dist/services/document-pictures.js.map +1 -0
  199. package/dist/services/index.d.ts +3 -2
  200. package/dist/services/index.d.ts.map +1 -1
  201. package/dist/services/index.js +2 -1
  202. package/dist/services/index.js.map +1 -1
  203. package/dist/services/messages.d.ts +2 -0
  204. package/dist/services/messages.d.ts.map +1 -1
  205. package/dist/services/messages.js +1 -0
  206. package/dist/services/messages.js.map +1 -1
  207. package/dist/services/notes-search.d.ts +14 -1
  208. package/dist/services/notes-search.d.ts.map +1 -1
  209. package/dist/services/notes-search.js +46 -1
  210. package/dist/services/notes-search.js.map +1 -1
  211. package/dist/services/people.d.ts +1 -1
  212. package/dist/services/people.d.ts.map +1 -1
  213. package/dist/services/people.js +0 -18
  214. package/dist/services/people.js.map +1 -1
  215. package/dist/speech/hearing.d.ts +3 -0
  216. package/dist/speech/hearing.d.ts.map +1 -1
  217. package/dist/speech/hearing.js +16 -0
  218. package/dist/speech/hearing.js.map +1 -1
  219. package/dist/store/sqlite/document-pictures.d.ts +29 -0
  220. package/dist/store/sqlite/document-pictures.d.ts.map +1 -0
  221. package/dist/store/sqlite/document-pictures.js +81 -0
  222. package/dist/store/sqlite/document-pictures.js.map +1 -0
  223. package/dist/store/sqlite/entity-types.d.ts +1 -0
  224. package/dist/store/sqlite/entity-types.d.ts.map +1 -1
  225. package/dist/store/sqlite/entity-types.js +1 -0
  226. package/dist/store/sqlite/entity-types.js.map +1 -1
  227. package/dist/store/sqlite/note-index.d.ts.map +1 -1
  228. package/dist/store/sqlite/note-index.js +3 -0
  229. package/dist/store/sqlite/note-index.js.map +1 -1
  230. package/dist/store/sqlite/note-search.d.ts +2 -1
  231. package/dist/store/sqlite/note-search.d.ts.map +1 -1
  232. package/dist/store/sqlite/note-search.js +2 -0
  233. package/dist/store/sqlite/note-search.js.map +1 -1
  234. package/package.json +1 -1
  235. package/parity.json +10 -77
  236. package/dist/cli/messenger/after.d.ts +0 -20
  237. package/dist/cli/messenger/after.d.ts.map +0 -1
  238. package/dist/cli/messenger/after.js +0 -27
  239. package/dist/cli/messenger/after.js.map +0 -1
@@ -2,10 +2,11 @@ import { CliError } from "@wirecat/cli-base";
2
2
  import { annotate } from "@wirecat/cli-base/commands";
3
3
  import { Command } from "commander";
4
4
  import { FOLDER_KINDS, FOLDER_SKIPS } from "../../domain/models.js";
5
- import { renderList } from "../paging.js";
5
+ import { itemOf, renderAnswer } from "../envelope.js";
6
+ import { folderAnswer, lines, renderItem, wholeList } from "./chat-answers.js";
6
7
  import { messengerContext } from "./context.js";
7
8
  const collect = (value, previous = []) => [...previous, value];
8
- const listOf = (flag, allowed) => (value) => {
9
+ const wordsOf = (flag, allowed) => (value) => {
9
10
  if (value.trim() === "none")
10
11
  return [];
11
12
  const words = value.split(",").map((one) => one.trim());
@@ -20,8 +21,8 @@ const withRules = (command, messenger, replaces) => {
20
21
  return command;
21
22
  const set = replaces ? "; replaces what it had, none clears it" : "";
22
23
  return command
23
- .option("--include <kinds>", `every chat of these kinds: ${FOLDER_KINDS.join(", ")}${set}`, listOf("--include", FOLDER_KINDS))
24
- .option("--skip <which>", `leave out chats that are ${FOLDER_SKIPS.join(", ")}${set}`, listOf("--skip", FOLDER_SKIPS))
24
+ .option("--include <kinds>", `every chat of these kinds: ${FOLDER_KINDS.join(", ")}${set}`, wordsOf("--include", FOLDER_KINDS))
25
+ .option("--skip <which>", `leave out chats that are ${FOLDER_SKIPS.join(", ")}${set}`, wordsOf("--skip", FOLDER_SKIPS))
25
26
  .option("--exclude-chat <chat>", "never show this chat in it; repeat it for more", collect)
26
27
  .option("--pin <chat>", "pin this chat at the top of the folder; repeat it for more", collect)
27
28
  .option("--emoji <emoji>", "the folder's icon");
@@ -39,21 +40,20 @@ const rulesOf = (command) => {
39
40
  /** `chats folders …`, in max-cli's words. */
40
41
  export const foldersCommand = (messenger) => {
41
42
  const folders = new Command("folders").description("your chat folders");
42
- folders
43
- .command("list")
44
- .description("your chat folders, in the order the app shows them")
45
- .action(async function () {
43
+ folders.addCommand(annotate(new Command("list").description("your chat folders, in the order the app shows them"), {
44
+ output: { entity: "folder" },
45
+ }).action(async function () {
46
46
  const context = messengerContext(this, messenger);
47
- renderList(context.renderer, context.format, await context.withServices((services) => services.folders.list()));
48
- });
49
- folders
50
- .command("show")
47
+ const found = await context.withServices((services) => services.folders.list());
48
+ renderAnswer(this, context, wholeList("chats folders list", found.map(folderAnswer)), lines(({ id, title, emoji, chat_ids }) => [id, emoji ?? "", title, `${chat_ids.length} chats`].join(" ")));
49
+ }));
50
+ folders.addCommand(annotate(new Command("show")
51
51
  .description("one chat folder, with the names of the chats in it")
52
- .argument("<folder>", "the folder's id, or its title exactly")
53
- .action(async function (folder) {
52
+ .argument("<folder>", "the folder's id, or its title exactly"), { output: { entity: "folder" } }).action(async function (folder) {
54
53
  const context = messengerContext(this, messenger);
55
- context.renderer.result(await context.withServices((services) => services.folders.show(folder)));
56
- });
54
+ const found = await context.withServices((services) => services.folders.show(folder));
55
+ renderAnswer(this, context, itemOf(folderAnswer(found)));
56
+ }));
57
57
  folders.addCommand(withRules(annotate(new Command("create"), { mutates: true })
58
58
  .description("create a chat folder")
59
59
  .argument("<title>", "the folder's name; the app may refuse a long one")
@@ -61,7 +61,7 @@ export const foldersCommand = (messenger) => {
61
61
  const context = messengerContext(this, messenger);
62
62
  const { chat = [] } = this.opts();
63
63
  const rules = rulesOf(this);
64
- context.renderer.result(await context.withServices((services) => services.folders.create(title, chat, rules)));
64
+ renderItem(this, context, await context.withServices((services) => services.folders.create(title, chat, rules)));
65
65
  }));
66
66
  folders.addCommand(withRules(annotate(new Command("update"), { mutates: true })
67
67
  .description("rename a folder, or change which chats are in it")
@@ -77,14 +77,14 @@ export const foldersCommand = (messenger) => {
77
77
  ...(remove === undefined ? {} : { remove }),
78
78
  ...rulesOf(this),
79
79
  };
80
- context.renderer.result(await context.withServices((services) => services.folders.update(folder, edit)));
80
+ renderItem(this, context, await context.withServices((services) => services.folders.update(folder, edit)));
81
81
  }));
82
82
  folders.addCommand(annotate(new Command("delete"), { mutates: true })
83
83
  .description("delete a folder; the chats in it stay")
84
84
  .argument("<folder>", "folder id, or its title exactly")
85
85
  .action(async function (folder) {
86
86
  const context = messengerContext(this, messenger);
87
- context.renderer.result(await context.withServices((services) => services.folders.delete(folder)));
87
+ renderItem(this, context, await context.withServices((services) => services.folders.delete(folder)));
88
88
  }));
89
89
  if (messenger.folderOrder !== false)
90
90
  folders.addCommand(annotate(new Command("order"), { mutates: true })
@@ -92,7 +92,7 @@ export const foldersCommand = (messenger) => {
92
92
  .argument("<folders...>", "folder ids, or titles exactly, first one first")
93
93
  .action(async function (typed) {
94
94
  const context = messengerContext(this, messenger);
95
- context.renderer.result(await context.withServices((services) => services.folders.order(typed)));
95
+ renderItem(this, context, await context.withServices((services) => services.folders.order(typed)));
96
96
  }));
97
97
  if (messenger.folderJoin !== false)
98
98
  folders.addCommand(annotate(new Command("join"), { mutates: true })
@@ -100,7 +100,7 @@ export const foldersCommand = (messenger) => {
100
100
  .argument("<link>", "the folder's link, as t.me/addlist/…")
101
101
  .action(async function (link) {
102
102
  const context = messengerContext(this, messenger);
103
- context.renderer.result(await context.withServices((services) => services.folders.join(link)));
103
+ renderItem(this, context, await context.withServices((services) => services.folders.join(link)));
104
104
  }));
105
105
  return folders;
106
106
  };
@@ -1 +1 @@
1
- {"version":3,"file":"admin-folders-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/admin-folders-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-folders-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/admin-folders-command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin-moderation-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/admin-moderation-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,cAAc,CAAA;AAE/D,gIAAgI;AAChI,eAAO,MAAM,YAAY,cAAe,SAAS,KAAG,OAkCnD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,cAAe,SAAS,KAAG,OA8CjD,CAAA"}
1
+ {"version":3,"file":"admin-moderation-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/admin-moderation-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,cAAc,CAAA;AAE/D,gIAAgI;AAChI,eAAO,MAAM,YAAY,cAAe,SAAS,KAAG,OAkCnD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,cAAe,SAAS,KAAG,OA4CjD,CAAA"}
@@ -4,7 +4,9 @@ import { Command } from "commander";
4
4
  import { describe, MAX_ACTIONS } from "../../moderation/check.js";
5
5
  import { RULE_KEYS } from "../../moderation/rules.js";
6
6
  import { momentOf } from "../../services/moment.js";
7
+ import { itemOf, renderAnswer } from "../envelope.js";
7
8
  import { answerOf } from "./ask.js";
9
+ import { renderItem, snakeKeys } from "./chat-answers.js";
8
10
  import { messengerContext } from "./context.js";
9
11
  /** `chats rules show|set|unset`: the rules live in a file of this profile, and only the chat's id is asked of the messenger. */
10
12
  export const rulesCommand = (messenger) => {
@@ -15,7 +17,7 @@ export const rulesCommand = (messenger) => {
15
17
  .argument("<chat>", messenger.chatArgument)
16
18
  .action(async function (chat) {
17
19
  const context = messengerContext(this, messenger);
18
- context.renderer.result(await context.withServices((services) => services.moderation.rules(chat)));
20
+ renderItem(this, context, await context.withServices((services) => services.moderation.rules(chat)));
19
21
  });
20
22
  rules.addCommand(annotate(new Command("set"), { mutates: true, local: true })
21
23
  .description("change one rule; the group's first change writes every rule with its default")
@@ -24,7 +26,7 @@ export const rulesCommand = (messenger) => {
24
26
  .argument("<value>", "the new value; a list is comma-separated")
25
27
  .action(async function (chat, key, value) {
26
28
  const context = messengerContext(this, messenger);
27
- context.renderer.result(await context.withServices((services) => services.moderation.set(chat, key, value)));
29
+ renderItem(this, context, await context.withServices((services) => services.moderation.set(chat, key, value)));
28
30
  }));
29
31
  rules.addCommand(annotate(new Command("unset"), { mutates: true, local: true })
30
32
  .description("put one rule back to its default")
@@ -32,7 +34,7 @@ export const rulesCommand = (messenger) => {
32
34
  .argument("<key>", `one of: ${RULE_KEYS.join(", ")}`)
33
35
  .action(async function (chat, key) {
34
36
  const context = messengerContext(this, messenger);
35
- context.renderer.result(await context.withServices((services) => services.moderation.unset(chat, key)));
37
+ renderItem(this, context, await context.withServices((services) => services.moderation.unset(chat, key)));
36
38
  }));
37
39
  return rules;
38
40
  };
@@ -67,16 +69,12 @@ export const moderateCommand = (messenger) => annotate(new Command("moderate"),
67
69
  return /^\s*y(es)?\s*$/i.test(answer);
68
70
  },
69
71
  }));
70
- context.renderer.result(context.format === "pretty"
71
- ? rows.map((row) => ({
72
- what: row.kind,
73
- who: row.personName ?? row.personId,
74
- rule: row.rule,
75
- action: row.action,
76
- outcome: row.outcome,
77
- ...(row.reason ? { why: row.reason } : {}),
78
- }))
79
- : { chatId, rows });
72
+ renderAnswer(this, context, itemOf(snakeKeys({ chatId, rows })), () => rows
73
+ .map((row) => [row.kind, row.personName ?? row.personId, row.rule, row.action, row.outcome, row.reason ?? ""]
74
+ .join(" ")
75
+ .trimEnd())
76
+ .map((line) => `${line}\n`)
77
+ .join(""));
80
78
  for (const note of notes)
81
79
  context.renderer.note(note);
82
80
  });
@@ -1 +1 @@
1
- {"version":3,"file":"admin-moderation-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/admin-moderation-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-moderation-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/admin-moderation-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ import { type QueryAst } from "@wirecat/cli-base/query";
2
+ import type { NextStep } from "@wirecat/cli-base/standards";
3
+ import type { Command } from "commander";
4
+ import type * as v from "valibot";
5
+ import type { Chat, ChatCard, ChatEvent, Contact, Folder, GroupMember, GroupSettings, InviteLink, JoinRequest, Member, PersonCard, PollVote, Topic } from "../../domain/models.js";
6
+ import type { chatEvent as chatEventSchema, chat as chatSchema, contact as contactSchema, folder as folderSchema, inviteLink as inviteLinkSchema, joinRequest as joinRequestSchema, member as memberSchema, pollVote as pollVoteSchema, topic as topicSchema } from "../../entities/index.js";
7
+ import type { ChatDocument } from "../../services/chat-documents.js";
8
+ import type { FolderShown } from "../../services/folders.js";
9
+ import type { MemberEvent } from "../../services/member-history.js";
10
+ import { type AuditedMember, type MembersAudit } from "../../services/members-audit.js";
11
+ import type { AccountKey } from "../../store/store.js";
12
+ import { type AnswerOutput, type ListInput } from "../envelope.js";
13
+ type Out<T extends v.GenericSchema> = v.InferOutput<T>;
14
+ /**
15
+ * An answer that has no entity yet — a write's receipt, a count — with snake_case keys, nested ones too.
16
+ * Only for records whose keys are field names, never for one keyed by data.
17
+ */
18
+ export declare const snakeKeys: (value: unknown) => unknown;
19
+ export declare const chatRef: (account: AccountKey, chat: string) => string;
20
+ type ShownChat = Chat & Partial<Pick<ChatCard, "members">> & {
21
+ description?: string | null;
22
+ link?: string | null;
23
+ settings?: GroupSettings;
24
+ };
25
+ export declare const chatAnswer: (account: AccountKey, chat: ShownChat) => Out<typeof chatSchema>;
26
+ export declare const memberAnswer: (member: Member | GroupMember | AuditedMember) => Out<typeof memberSchema>;
27
+ export declare const contactRef: (provider: string, id: string) => string;
28
+ export declare const contactAnswer: (account: AccountKey, contact: Contact | PersonCard) => Out<typeof contactSchema>;
29
+ export declare const chatEventAnswer: (chatId: string, event: ChatEvent) => Out<typeof chatEventSchema>;
30
+ export declare const memberEventAnswer: (chatId: string, event: MemberEvent) => Out<typeof chatEventSchema>;
31
+ export declare const inviteLinkAnswer: (link: InviteLink) => Out<typeof inviteLinkSchema>;
32
+ export declare const joinRequestAnswer: (request: JoinRequest) => Out<typeof joinRequestSchema>;
33
+ export declare const pollVoteAnswer: (vote: PollVote) => Out<typeof pollVoteSchema>;
34
+ export declare const topicAnswer: (topic: Topic) => Out<typeof topicSchema>;
35
+ export declare const folderAnswer: (folder: Folder | FolderShown) => Out<typeof folderSchema>;
36
+ /** A person's view of a list: one line per item. */
37
+ export declare const lines: <T>(line: (item: T) => string) => (body: {
38
+ items?: T[];
39
+ item?: T;
40
+ }) => string;
41
+ /** `limit` and `page` of a list paged by `--page`; `--all` is one page holding everything. */
42
+ export declare const pageOf: ({ limit, page, all }: {
43
+ limit: number;
44
+ page: number;
45
+ all?: boolean;
46
+ }, { items, hasMore }: {
47
+ items: readonly unknown[];
48
+ hasMore: boolean;
49
+ }) => {
50
+ limit: number;
51
+ has_more: boolean;
52
+ page: number;
53
+ };
54
+ /** A list read whole, in one page. */
55
+ export declare const wholeList: <T>(command: string, items: T[], extra?: Pick<ListInput<T>, "next" | "missing" | "meta">) => import("../envelope.js").ListBody<T>;
56
+ /** `chats show`: the chat, and where its member list is shorter than its own count, the command that lists them all. */
57
+ export declare const chatShown: (account: AccountKey, card: Parameters<typeof chatAnswer>[1]) => import("../envelope.js").ItemBody<{
58
+ ref: string;
59
+ id: string;
60
+ provider?: string | undefined;
61
+ account?: string | undefined;
62
+ title: string | null;
63
+ kind: "channel" | "dialog" | "group" | "saved" | "unknown";
64
+ unread_count: number | null;
65
+ unread_mentions?: number | undefined;
66
+ last_message_at: string | null;
67
+ participants_count: number | null;
68
+ muted?: boolean | undefined;
69
+ archived?: boolean | undefined;
70
+ membership_state?: "archived" | "external" | "imported" | "joined" | "left" | "public" | undefined;
71
+ parent_chat_id?: string | undefined;
72
+ scope?: "personal" | "work" | undefined;
73
+ provider_metadata?: {
74
+ [x: string]: unknown;
75
+ } | undefined;
76
+ description?: string | null | undefined;
77
+ invite_link?: string | null | undefined;
78
+ settings?: {
79
+ all_can_pin?: boolean | null | undefined;
80
+ only_admins_add?: boolean | null | undefined;
81
+ only_admins_call?: boolean | null | undefined;
82
+ only_owner_edits_info?: boolean | null | undefined;
83
+ members_see_link?: boolean | null | undefined;
84
+ join_approval?: boolean | null | undefined;
85
+ } | undefined;
86
+ members?: {
87
+ id: string;
88
+ name: string | null;
89
+ username: string | null;
90
+ role?: "admin" | "member" | "owner" | undefined;
91
+ last_seen_at?: string | null | undefined;
92
+ registered_at?: string | null | undefined;
93
+ joined_at?: string | null | undefined;
94
+ invited_by?: string | null | undefined;
95
+ is_bot?: boolean | undefined;
96
+ deleted?: boolean | undefined;
97
+ flagged?: "fake" | "scam" | undefined;
98
+ has_photo?: boolean | undefined;
99
+ score?: number | undefined;
100
+ reasons?: string[] | undefined;
101
+ check?: {
102
+ [x: string]: unknown;
103
+ } | undefined;
104
+ }[] | null | undefined;
105
+ }>;
106
+ /** The lowest score `score>=n` asks for; the audit's own floor when the query names none. */
107
+ export declare const scoreFloor: (ast: QueryAst | undefined) => number;
108
+ export declare const auditAnswer: (audit: MembersAudit) => import("../envelope.js").ListBody<{
109
+ id: string;
110
+ name: string | null;
111
+ username: string | null;
112
+ role?: "admin" | "member" | "owner" | undefined;
113
+ last_seen_at?: string | null | undefined;
114
+ registered_at?: string | null | undefined;
115
+ joined_at?: string | null | undefined;
116
+ invited_by?: string | null | undefined;
117
+ is_bot?: boolean | undefined;
118
+ deleted?: boolean | undefined;
119
+ flagged?: "fake" | "scam" | undefined;
120
+ has_photo?: boolean | undefined;
121
+ score?: number | undefined;
122
+ reasons?: string[] | undefined;
123
+ check?: {
124
+ [x: string]: unknown;
125
+ } | undefined;
126
+ }>;
127
+ /** An answer with no entity yet: the item as it is, its keys in snake_case. */
128
+ export declare const renderItem: (command: Command, output: AnswerOutput, value: unknown, next?: NextStep[]) => void;
129
+ /**
130
+ * `--limit` and `--page` for a list whose source takes a count but no offset: page n reads n pages and shows
131
+ * the last, so the step to the next page is honest.
132
+ */
133
+ export declare const withPage: (command: Command) => Command;
134
+ export declare const pageOfRead: ({ hasMore }: {
135
+ hasMore: boolean;
136
+ }, limit: number, page: number) => {
137
+ limit: number;
138
+ has_more: boolean;
139
+ page: number;
140
+ };
141
+ /** A document link in a chat's stored messages; `ref` is the message's locator. */
142
+ export declare const documentLinkAnswer: ({ url, documentId, title, inStore, locator, sentAt, sender }: ChatDocument) => {
143
+ url: string;
144
+ document_id: string | null;
145
+ title: string | null;
146
+ in_store: boolean;
147
+ ref: string;
148
+ sent_at: string;
149
+ sender: {
150
+ id: import("../../domain/models.js").Id | null;
151
+ name: string | null;
152
+ };
153
+ };
154
+ export {};
155
+ //# sourceMappingURL=chat-answers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-answers.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/chat-answers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ import { queryError } from "@wirecat/cli-base/query";
2
+ import { formatReference } from "../../domain/references.js";
3
+ import { AUDIT_MIN_SCORE } from "../../services/members-audit.js";
4
+ import { itemOf, listOf, renderAnswer } from "../envelope.js";
5
+ import { LIST_QUERY_GUIDE, nativeTerms } from "../list-query.js";
6
+ import { positiveCount } from "../paging.js";
7
+ import { nextStep } from "../steps.js";
8
+ const snake = (key) => key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
9
+ /**
10
+ * An answer that has no entity yet — a write's receipt, a count — with snake_case keys, nested ones too.
11
+ * Only for records whose keys are field names, never for one keyed by data.
12
+ */
13
+ export const snakeKeys = (value) => {
14
+ if (Array.isArray(value))
15
+ return value.map(snakeKeys);
16
+ if (value === null || typeof value !== "object" || value.constructor !== Object)
17
+ return value;
18
+ return Object.fromEntries(Object.entries(value).flatMap(([key, inner]) => (inner === undefined ? [] : [[snake(key), snakeKeys(inner)]])));
19
+ };
20
+ const defined = (record) => Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
21
+ export const chatRef = (account, chat) => formatReference({ type: "chat", provider: account.provider, account: account.account, chat });
22
+ const settingsOf = (settings) => defined({
23
+ all_can_pin: settings.allCanPin,
24
+ only_admins_add: settings.onlyAdminsAdd,
25
+ only_admins_call: settings.onlyAdminsCall,
26
+ only_owner_edits_info: settings.onlyOwnerEditsInfo,
27
+ members_see_link: settings.membersSeeLink,
28
+ join_approval: settings.joinApproval,
29
+ });
30
+ export const chatAnswer = (account, chat) => defined({
31
+ ref: chatRef(account, chat.id),
32
+ id: chat.id,
33
+ title: chat.title,
34
+ kind: chat.kind,
35
+ unread_count: chat.unreadCount,
36
+ unread_mentions: chat.unreadMentions,
37
+ last_message_at: chat.lastMessageAt,
38
+ participants_count: chat.participantsCount,
39
+ muted: chat.muted,
40
+ archived: chat.archived,
41
+ membership_state: chat.membershipState,
42
+ parent_chat_id: chat.parentChatId,
43
+ scope: chat.scope,
44
+ provider_metadata: chat.providerMetadata,
45
+ description: chat.description,
46
+ invite_link: chat.link,
47
+ settings: chat.settings ? settingsOf(chat.settings) : undefined,
48
+ members: chat.members === undefined ? undefined : (chat.members?.map(memberAnswer) ?? null),
49
+ });
50
+ export const memberAnswer = (member) => {
51
+ const group = member;
52
+ return defined({
53
+ id: member.id,
54
+ name: member.name,
55
+ username: member.username,
56
+ role: group.role,
57
+ last_seen_at: group.lastSeenAt,
58
+ registered_at: group.registeredAt,
59
+ joined_at: group.joinedAt,
60
+ invited_by: group.invitedBy,
61
+ is_bot: group.isBot,
62
+ deleted: group.deleted,
63
+ flagged: group.flagged,
64
+ has_photo: group.hasPhoto,
65
+ score: group.score,
66
+ reasons: group.reasons,
67
+ check: group.check ? snakeKeys(group.check) : undefined,
68
+ });
69
+ };
70
+ export const contactRef = (provider, id) => formatReference({ type: "contact", provider, id });
71
+ export const contactAnswer = (account, contact) => {
72
+ const card = contact;
73
+ return defined({
74
+ ref: contactRef(account.provider, contact.id),
75
+ id: contact.id,
76
+ name: contact.name,
77
+ username: contact.username,
78
+ alias: contact.alias,
79
+ display_name: contact.displayName,
80
+ description: contact.description,
81
+ last_messaged_at: contact.lastMessagedAt,
82
+ chats: card.chats?.map((chat) => ({
83
+ ref: chatRef(account, chat.id),
84
+ id: chat.id,
85
+ title: chat.title,
86
+ kind: chat.kind,
87
+ last_message_at: chat.lastMessageAt,
88
+ })),
89
+ notes: card.notes?.map(({ id, text, revision, createdAt, updatedAt }) => ({
90
+ id,
91
+ text,
92
+ revision,
93
+ created_at: createdAt,
94
+ updated_at: updatedAt,
95
+ })),
96
+ });
97
+ };
98
+ export const chatEventAnswer = (chatId, event) => defined({
99
+ chat_id: chatId,
100
+ time: event.timestamp,
101
+ type: event.event,
102
+ message_id: event.messageId,
103
+ by: event.by,
104
+ people: event.people,
105
+ title: event.title,
106
+ });
107
+ const HISTORY_TYPES = { joined: "join", left: "leave", changed: "profile" };
108
+ export const memberEventAnswer = (chatId, event) => defined({
109
+ chat_id: chatId,
110
+ time: event.at,
111
+ type: HISTORY_TYPES[event.event],
112
+ by: event.invitedBy === undefined ? undefined : { id: event.invitedBy, name: null },
113
+ people: [{ id: event.id, name: event.name, username: event.username }],
114
+ before: event.before ? { name: event.before.name, username: event.before.username } : undefined,
115
+ });
116
+ export const inviteLinkAnswer = (link) => defined({
117
+ link: link.link,
118
+ approval: link.approval,
119
+ expires_at: link.expiresAt,
120
+ max_uses: link.maxUses,
121
+ primary: link.primary,
122
+ revoked: link.revoked,
123
+ pending_count: link.pending,
124
+ joined_count: link.joined,
125
+ });
126
+ export const joinRequestAnswer = (request) => defined({
127
+ person_id: request.person.id,
128
+ name: request.person.name,
129
+ username: request.person.username,
130
+ requested_at: request.requestedAt,
131
+ about: request.about,
132
+ });
133
+ export const pollVoteAnswer = (vote) => ({
134
+ person_id: vote.person.id,
135
+ name: vote.person.name,
136
+ username: vote.person.username,
137
+ answers: vote.answers,
138
+ voted_at: vote.votedAt,
139
+ });
140
+ export const topicAnswer = (topic) => defined({
141
+ id: topic.id,
142
+ title: topic.title,
143
+ closed: topic.closed,
144
+ pinned: topic.pinned,
145
+ hidden: topic.hidden,
146
+ unread_count: topic.unreadCount,
147
+ last_message_at: topic.lastMessageAt,
148
+ created_at: topic.createdAt,
149
+ });
150
+ export const folderAnswer = (folder) => {
151
+ const shown = "chats" in folder ? folder : undefined;
152
+ const listed = shown ? undefined : folder;
153
+ return defined({
154
+ id: folder.id,
155
+ title: folder.title,
156
+ chat_ids: listed ? listed.chatIds : (shown?.chats.map((chat) => chat.id) ?? []),
157
+ emoji: folder.emoji,
158
+ include: folder.include,
159
+ skip: folder.skip,
160
+ excluded_chat_ids: listed?.excludedChatIds ?? shown?.excluded.map((chat) => chat.id),
161
+ pinned_chat_ids: listed?.pinnedChatIds ?? shown?.pinned.map((chat) => chat.id),
162
+ chats: shown?.chats,
163
+ pinned_chats: shown?.pinned,
164
+ excluded_chats: shown?.excluded,
165
+ });
166
+ };
167
+ /** A person's view of a list: one line per item. */
168
+ export const lines = (line) => (body) => (body.items ?? (body.item === undefined ? [] : [body.item])).map((item) => `${line(item).trimEnd()}\n`).join("");
169
+ /** `limit` and `page` of a list paged by `--page`; `--all` is one page holding everything. */
170
+ export const pageOf = ({ limit, page, all }, { items, hasMore }) => (all ? { limit: Math.max(1, items.length), has_more: false, page: 1 } : { limit, has_more: hasMore, page });
171
+ /** A list read whole, in one page. */
172
+ export const wholeList = (command, items, extra = {}) => listOf(command, { items, limit: Math.max(1, items.length), has_more: false, ...extra });
173
+ /** `chats show`: the chat, and where its member list is shorter than its own count, the command that lists them all. */
174
+ export const chatShown = (account, card) => {
175
+ const listed = card.members?.length;
176
+ const short = listed !== undefined && card.participantsCount !== null && listed < card.participantsCount;
177
+ return itemOf(chatAnswer(account, card), short
178
+ ? {
179
+ missing: [
180
+ {
181
+ field: "members",
182
+ why: `${listed} listed; the chat reports ${card.participantsCount} — the list may omit your account or be partial`,
183
+ step: "chats.members",
184
+ },
185
+ ],
186
+ next: [nextStep("chats.members", { args: { chat: card.id } })],
187
+ }
188
+ : {});
189
+ };
190
+ /** The lowest score `score>=n` asks for; the audit's own floor when the query names none. */
191
+ export const scoreFloor = (ast) => {
192
+ const term = nativeTerms(ast, "chats members audit").get("score");
193
+ if (!term)
194
+ return AUDIT_MIN_SCORE;
195
+ const upper = term.operator === "range" ? (term.upper ?? "*") : term.value;
196
+ if (term.operator !== "range" || upper !== "*")
197
+ queryError("query.unsupported-operator", term.span, "score takes a lower bound: score>=3", {
198
+ command: "chats members audit",
199
+ guide: LIST_QUERY_GUIDE,
200
+ });
201
+ const floor = Number(term.value);
202
+ return Math.ceil(term.lower_inclusive === false ? floor + 1 : floor);
203
+ };
204
+ export const auditAnswer = (audit) => wholeList("chats members audit", audit.items.map(memberAnswer), {
205
+ ...(audit.more ? { meta: { truncated: true } } : {}),
206
+ ...(audit.fetch
207
+ ? {
208
+ missing: [
209
+ {
210
+ field: "reasons",
211
+ why: "never_wrote counts only stored messages, and the store does not hold the chat whole",
212
+ step: "messages.sync",
213
+ },
214
+ ],
215
+ next: [nextStep("messages.sync", { args: { chat: audit.chatId } })],
216
+ }
217
+ : {}),
218
+ });
219
+ /** An answer with no entity yet: the item as it is, its keys in snake_case. */
220
+ export const renderItem = (command, output, value, next = []) => renderAnswer(command, output, itemOf(snakeKeys(value), { next }));
221
+ /**
222
+ * `--limit` and `--page` for a list whose source takes a count but no offset: page n reads n pages and shows
223
+ * the last, so the step to the next page is honest.
224
+ */
225
+ export const withPage = (command) => command
226
+ .option("--limit <n>", "how many to show", positiveCount("--limit"))
227
+ .option("--page <n>", "which page, starting at 1", positiveCount("--page"));
228
+ export const pageOfRead = ({ hasMore }, limit, page) => ({
229
+ limit,
230
+ has_more: hasMore,
231
+ page,
232
+ });
233
+ /** A document link in a chat's stored messages; `ref` is the message's locator. */
234
+ export const documentLinkAnswer = ({ url, documentId, title, inStore, locator, sentAt, sender }) => ({
235
+ url,
236
+ document_id: documentId,
237
+ title,
238
+ in_store: inStore,
239
+ ref: locator,
240
+ sent_at: sentAt,
241
+ sender,
242
+ });
243
+ //# sourceMappingURL=chat-answers.js.map