@leemour/cli-messaging 0.97.0 → 0.99.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 (244) hide show
  1. package/README.md +8 -7
  2. package/dist/cli/bot/admins.d.ts +10 -0
  3. package/dist/cli/bot/admins.d.ts.map +1 -0
  4. package/dist/cli/bot/admins.js +114 -0
  5. package/dist/cli/bot/admins.js.map +1 -0
  6. package/dist/cli/bot/command.d.ts.map +1 -1
  7. package/dist/cli/bot/command.js +17 -15
  8. package/dist/cli/bot/command.js.map +1 -1
  9. package/dist/cli/bot/context.d.ts +2 -0
  10. package/dist/cli/bot/context.d.ts.map +1 -1
  11. package/dist/cli/bot/context.js +7 -0
  12. package/dist/cli/bot/context.js.map +1 -1
  13. package/dist/cli/bot/messages.d.ts.map +1 -1
  14. package/dist/cli/bot/messages.js +20 -10
  15. package/dist/cli/bot/messages.js.map +1 -1
  16. package/dist/cli/bot/port.d.ts +128 -2
  17. package/dist/cli/bot/port.d.ts.map +1 -1
  18. package/dist/cli/bot/port.js.map +1 -1
  19. package/dist/cli/bot/registry.d.ts +2 -0
  20. package/dist/cli/bot/registry.d.ts.map +1 -1
  21. package/dist/cli/bot/registry.js +2 -0
  22. package/dist/cli/bot/registry.js.map +1 -1
  23. package/dist/cli/bot/setup.d.ts +9 -0
  24. package/dist/cli/bot/setup.d.ts.map +1 -0
  25. package/dist/cli/bot/setup.js +155 -0
  26. package/dist/cli/bot/setup.js.map +1 -0
  27. package/dist/cli/bot/updates.d.ts +23 -0
  28. package/dist/cli/bot/updates.d.ts.map +1 -0
  29. package/dist/cli/bot/updates.js +61 -0
  30. package/dist/cli/bot/updates.js.map +1 -0
  31. package/dist/cli/bot/watch.d.ts +9 -0
  32. package/dist/cli/bot/watch.d.ts.map +1 -0
  33. package/dist/cli/bot/watch.js +197 -0
  34. package/dist/cli/bot/watch.js.map +1 -0
  35. package/dist/cli/config-command.js +1 -1
  36. package/dist/cli/config-command.js.map +1 -1
  37. package/dist/cli/deadline.d.ts.map +1 -1
  38. package/dist/cli/deadline.js +11 -2
  39. package/dist/cli/deadline.js.map +1 -1
  40. package/dist/cli/index.d.ts +5 -2
  41. package/dist/cli/index.d.ts.map +1 -1
  42. package/dist/cli/index.js +2 -0
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/cli/messenger/admin-moderation-command.js +2 -2
  45. package/dist/cli/messenger/admin-moderation-command.js.map +1 -1
  46. package/dist/cli/messenger/context.d.ts +18 -2
  47. package/dist/cli/messenger/context.d.ts.map +1 -1
  48. package/dist/cli/messenger/context.js +30 -8
  49. package/dist/cli/messenger/context.js.map +1 -1
  50. package/dist/cli/messenger/download-command.d.ts.map +1 -1
  51. package/dist/cli/messenger/download-command.js +97 -30
  52. package/dist/cli/messenger/download-command.js.map +1 -1
  53. package/dist/cli/messenger/guard-commands.js +3 -3
  54. package/dist/cli/messenger/guard-commands.js.map +1 -1
  55. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  56. package/dist/cli/messenger/messages-command.js +45 -11
  57. package/dist/cli/messenger/messages-command.js.map +1 -1
  58. package/dist/cli/messenger/models-command.d.ts +1 -1
  59. package/dist/cli/messenger/models-command.d.ts.map +1 -1
  60. package/dist/cli/messenger/models-command.js +64 -3
  61. package/dist/cli/messenger/models-command.js.map +1 -1
  62. package/dist/cli/messenger/observed.d.ts.map +1 -1
  63. package/dist/cli/messenger/observed.js +27 -10
  64. package/dist/cli/messenger/observed.js.map +1 -1
  65. package/dist/cli/messenger/port.d.ts +26 -9
  66. package/dist/cli/messenger/port.d.ts.map +1 -1
  67. package/dist/cli/messenger/port.js.map +1 -1
  68. package/dist/cli/messenger/stored.d.ts +3 -2
  69. package/dist/cli/messenger/stored.d.ts.map +1 -1
  70. package/dist/cli/messenger/stored.js +75 -33
  71. package/dist/cli/messenger/stored.js.map +1 -1
  72. package/dist/cli/messenger/watch-command.d.ts +2 -1
  73. package/dist/cli/messenger/watch-command.d.ts.map +1 -1
  74. package/dist/cli/messenger/watch-command.js +11 -2
  75. package/dist/cli/messenger/watch-command.js.map +1 -1
  76. package/dist/embeddings/embed.d.ts +22 -0
  77. package/dist/embeddings/embed.d.ts.map +1 -0
  78. package/dist/embeddings/embed.js +69 -0
  79. package/dist/embeddings/embed.js.map +1 -0
  80. package/dist/embeddings/models.d.ts +33 -0
  81. package/dist/embeddings/models.d.ts.map +1 -0
  82. package/dist/embeddings/models.js +85 -0
  83. package/dist/embeddings/models.js.map +1 -0
  84. package/dist/index.d.ts +0 -1
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js.map +1 -1
  87. package/dist/kit/contract.d.ts +39 -0
  88. package/dist/kit/contract.d.ts.map +1 -0
  89. package/dist/kit/contract.js +449 -0
  90. package/dist/kit/contract.js.map +1 -0
  91. package/dist/kit/fake.d.ts +16 -0
  92. package/dist/kit/fake.d.ts.map +1 -0
  93. package/dist/kit/fake.js +457 -0
  94. package/dist/kit/fake.js.map +1 -0
  95. package/dist/kit/index.d.ts +4 -0
  96. package/dist/kit/index.d.ts.map +1 -0
  97. package/dist/kit/index.js +4 -0
  98. package/dist/kit/index.js.map +1 -0
  99. package/dist/kit/seed.d.ts +38 -0
  100. package/dist/kit/seed.d.ts.map +1 -0
  101. package/dist/kit/seed.js +83 -0
  102. package/dist/kit/seed.js.map +1 -0
  103. package/dist/mcp/resources.d.ts +6 -1
  104. package/dist/mcp/resources.d.ts.map +1 -1
  105. package/dist/mcp/resources.js +15 -5
  106. package/dist/mcp/resources.js.map +1 -1
  107. package/dist/mcp/server.d.ts.map +1 -1
  108. package/dist/mcp/server.js +3 -0
  109. package/dist/mcp/server.js.map +1 -1
  110. package/dist/mcp/tool.d.ts +12 -2
  111. package/dist/mcp/tool.d.ts.map +1 -1
  112. package/dist/mcp/tool.js +15 -8
  113. package/dist/mcp/tool.js.map +1 -1
  114. package/dist/mcp/tools/chats.js +3 -3
  115. package/dist/mcp/tools/chats.js.map +1 -1
  116. package/dist/mcp/tools/contacts.js +3 -3
  117. package/dist/mcp/tools/contacts.js.map +1 -1
  118. package/dist/mcp/tools/inbox.d.ts.map +1 -1
  119. package/dist/mcp/tools/inbox.js +3 -4
  120. package/dist/mcp/tools/inbox.js.map +1 -1
  121. package/dist/mcp/tools/messages.d.ts.map +1 -1
  122. package/dist/mcp/tools/messages.js +19 -12
  123. package/dist/mcp/tools/messages.js.map +1 -1
  124. package/dist/mcp/tools/review.d.ts.map +1 -1
  125. package/dist/mcp/tools/review.js +3 -4
  126. package/dist/mcp/tools/review.js.map +1 -1
  127. package/dist/moderation/check.d.ts +3 -1
  128. package/dist/moderation/check.d.ts.map +1 -1
  129. package/dist/moderation/check.js +3 -2
  130. package/dist/moderation/check.js.map +1 -1
  131. package/dist/parity/audit.d.ts +11 -9
  132. package/dist/parity/audit.d.ts.map +1 -1
  133. package/dist/parity/audit.js +63 -46
  134. package/dist/parity/audit.js.map +1 -1
  135. package/dist/parity/bin.js +17 -8
  136. package/dist/parity/bin.js.map +1 -1
  137. package/dist/parity/catalogue.d.ts.map +1 -1
  138. package/dist/parity/catalogue.js +7 -1
  139. package/dist/parity/catalogue.js.map +1 -1
  140. package/dist/parity/manifest.d.ts +19 -12
  141. package/dist/parity/manifest.d.ts.map +1 -1
  142. package/dist/parity/manifest.js +60 -37
  143. package/dist/parity/manifest.js.map +1 -1
  144. package/dist/parity/pages.d.ts +3 -3
  145. package/dist/parity/pages.d.ts.map +1 -1
  146. package/dist/parity/pages.js +4 -5
  147. package/dist/parity/pages.js.map +1 -1
  148. package/dist/parity/seed.d.ts +11 -0
  149. package/dist/parity/seed.d.ts.map +1 -0
  150. package/dist/parity/seed.js +99 -0
  151. package/dist/parity/seed.js.map +1 -0
  152. package/dist/parity/wording.d.ts +4 -3
  153. package/dist/parity/wording.d.ts.map +1 -1
  154. package/dist/parity/wording.js +21 -10
  155. package/dist/parity/wording.js.map +1 -1
  156. package/dist/search/correct.d.ts +25 -0
  157. package/dist/search/correct.d.ts.map +1 -0
  158. package/dist/search/correct.js +65 -0
  159. package/dist/search/correct.js.map +1 -0
  160. package/dist/search/query.d.ts +7 -2
  161. package/dist/search/query.d.ts.map +1 -1
  162. package/dist/search/query.js +12 -8
  163. package/dist/search/query.js.map +1 -1
  164. package/dist/search/search.d.ts +27 -0
  165. package/dist/search/search.d.ts.map +1 -0
  166. package/dist/search/search.js +65 -0
  167. package/dist/search/search.js.map +1 -0
  168. package/dist/sends/guarded.d.ts +12 -0
  169. package/dist/sends/guarded.d.ts.map +1 -1
  170. package/dist/sends/guarded.js +24 -2
  171. package/dist/sends/guarded.js.map +1 -1
  172. package/dist/services/archive.d.ts +8 -3
  173. package/dist/services/archive.d.ts.map +1 -1
  174. package/dist/services/archive.js +24 -3
  175. package/dist/services/archive.js.map +1 -1
  176. package/dist/services/chats.d.ts.map +1 -1
  177. package/dist/services/chats.js +13 -9
  178. package/dist/services/chats.js.map +1 -1
  179. package/dist/services/deps.d.ts +13 -0
  180. package/dist/services/deps.d.ts.map +1 -1
  181. package/dist/services/deps.js +12 -0
  182. package/dist/services/deps.js.map +1 -1
  183. package/dist/services/inbox.d.ts +14 -4
  184. package/dist/services/inbox.d.ts.map +1 -1
  185. package/dist/services/inbox.js +55 -14
  186. package/dist/services/inbox.js.map +1 -1
  187. package/dist/services/index.d.ts +2 -2
  188. package/dist/services/index.d.ts.map +1 -1
  189. package/dist/services/index.js +1 -1
  190. package/dist/services/index.js.map +1 -1
  191. package/dist/services/messages.d.ts +51 -6
  192. package/dist/services/messages.d.ts.map +1 -1
  193. package/dist/services/messages.js +202 -19
  194. package/dist/services/messages.js.map +1 -1
  195. package/dist/services/moderation.d.ts.map +1 -1
  196. package/dist/services/moderation.js +7 -1
  197. package/dist/services/moderation.js.map +1 -1
  198. package/dist/services/people.d.ts.map +1 -1
  199. package/dist/services/people.js +8 -5
  200. package/dist/services/people.js.map +1 -1
  201. package/dist/speech/hearing.d.ts +1 -1
  202. package/dist/speech/hearing.d.ts.map +1 -1
  203. package/dist/speech/hearing.js +2 -2
  204. package/dist/speech/hearing.js.map +1 -1
  205. package/dist/speech/install.d.ts +8 -1
  206. package/dist/speech/install.d.ts.map +1 -1
  207. package/dist/speech/install.js +11 -4
  208. package/dist/speech/install.js.map +1 -1
  209. package/dist/store/index.d.ts +1 -1
  210. package/dist/store/index.d.ts.map +1 -1
  211. package/dist/store/index.js.map +1 -1
  212. package/dist/store/sqlite/accounts.d.ts +1 -0
  213. package/dist/store/sqlite/accounts.d.ts.map +1 -1
  214. package/dist/store/sqlite/accounts.js +6 -1
  215. package/dist/store/sqlite/accounts.js.map +1 -1
  216. package/dist/store/sqlite/completeness.d.ts +17 -0
  217. package/dist/store/sqlite/completeness.d.ts.map +1 -0
  218. package/dist/store/sqlite/completeness.js +30 -0
  219. package/dist/store/sqlite/completeness.js.map +1 -0
  220. package/dist/store/sqlite/messages.d.ts +2 -2
  221. package/dist/store/sqlite/messages.d.ts.map +1 -1
  222. package/dist/store/sqlite/messages.js +10 -14
  223. package/dist/store/sqlite/messages.js.map +1 -1
  224. package/dist/store/sqlite/search-index.d.ts.map +1 -1
  225. package/dist/store/sqlite/search-index.js +45 -9
  226. package/dist/store/sqlite/search-index.js.map +1 -1
  227. package/dist/store/sqlite/search.d.ts +2 -0
  228. package/dist/store/sqlite/search.d.ts.map +1 -1
  229. package/dist/store/sqlite/search.js +27 -17
  230. package/dist/store/sqlite/search.js.map +1 -1
  231. package/dist/store/sqlite/words.d.ts +83 -0
  232. package/dist/store/sqlite/words.d.ts.map +1 -0
  233. package/dist/store/sqlite/words.js +255 -0
  234. package/dist/store/sqlite/words.js.map +1 -0
  235. package/dist/store/store.d.ts +40 -0
  236. package/dist/store/store.d.ts.map +1 -1
  237. package/dist/store/store.js +19 -2
  238. package/dist/store/store.js.map +1 -1
  239. package/package.json +10 -4
  240. package/parity.json +1136 -389
  241. package/dist/domain/capabilities.d.ts +0 -22
  242. package/dist/domain/capabilities.d.ts.map +0 -1
  243. package/dist/domain/capabilities.js +0 -2
  244. package/dist/domain/capabilities.js.map +0 -1
@@ -1,7 +1,8 @@
1
1
  import type { Command } from "commander";
2
2
  import type { Markup } from "../../domain/markdown.js";
3
- import type { Chat, Id, Message, Provider } from "../../domain/models.js";
3
+ import type { AdminRight, Chat, Id, Member, Message, MessageEvent, Provider } from "../../domain/models.js";
4
4
  import type { Upload } from "../../sends/upload.js";
5
+ import type { PersonFacts } from "../../store/index.js";
5
6
  import type { AppIdentity } from "../app.js";
6
7
  import type { MessagePins, MessengerCore } from "../messenger/port.js";
7
8
  import type { EventSink } from "../runs/events.js";
@@ -41,6 +42,11 @@ export interface BotHistory {
41
42
  }): Promise<Message[]>;
42
43
  message(chat: BotChatRef, messageId: Id): Promise<Message>;
43
44
  }
45
+ /** Who wrote what the adapter read, with what a `Message` has no field for. */
46
+ export interface BotPeople {
47
+ /** The senders of the messages decoded since the last call — their handle and whether each is a bot — for the local copy. */
48
+ senders(): PersonFacts[];
49
+ }
44
50
  /** What a bot shows in a chat while it works. */
45
51
  export declare const BOT_ACTIONS: readonly ["typing", "photo", "video", "voice", "file"];
46
52
  export type BotAction = (typeof BOT_ACTIONS)[number];
@@ -51,11 +57,122 @@ export interface BotChatTools {
51
57
  leave(chat: BotChatRef): Promise<void>;
52
58
  action(chat: BotChatRef, action: BotAction): Promise<void>;
53
59
  }
60
+ /** An admin of a chat, and what they may do. */
61
+ export interface BotChatAdmin extends Member {
62
+ role: "owner" | "admin";
63
+ /** In the shared words; a right the messenger has and these words lack is left out. */
64
+ rights: AdminRight[];
65
+ /** The title shown beside their name, when they have one. */
66
+ title: string | null;
67
+ }
68
+ /** Who runs a chat the bot is an admin in. */
69
+ export interface BotChatAdmins {
70
+ admins(chat: BotChatRef): Promise<BotChatAdmin[]>;
71
+ /** A right this messenger lacks is refused, never dropped. */
72
+ addAdmin(chat: BotChatRef, person: Id, rights: AdminRight[], options: {
73
+ title?: string;
74
+ }): Promise<void>;
75
+ /** They stay a member. */
76
+ removeAdmin(chat: BotChatRef, person: Id): Promise<void>;
77
+ }
78
+ /** Taking people out of a chat the bot is an admin in. */
79
+ export interface BotChatMembers {
80
+ /** Their messages stay; `block` also keeps them from coming back by the chat's link. */
81
+ removeMember(chat: BotChatRef, person: Id, options: {
82
+ block: boolean;
83
+ }): Promise<void>;
84
+ }
85
+ /** One command in the menu people see when they type `/`. */
86
+ export interface BotMenuEntry {
87
+ /** Without the `/`. */
88
+ name: string;
89
+ description: string | null;
90
+ }
91
+ /** The bot's command menu. */
92
+ export interface BotMenu {
93
+ menu(): Promise<BotMenuEntry[]>;
94
+ /** Replaces the whole menu; an empty list clears it. */
95
+ setMenu(entries: BotMenuEntry[]): Promise<void>;
96
+ }
97
+ /** Where a pressed button was, as `bot watch` kept it. */
98
+ export interface BotPress {
99
+ chatId: Id;
100
+ messageId: Id;
101
+ }
102
+ /** Answering a button someone pressed under the bot's message. */
103
+ export interface BotCallbacks {
104
+ /**
105
+ * `notification` is shown to the person who pressed; `text` replaces the message the button was
106
+ * on. `press` is where that was, when `bot watch` kept it — a messenger that cannot find the
107
+ * message from the callback id alone needs it for `text`.
108
+ */
109
+ answer(callbackId: string, answer: {
110
+ notification?: string;
111
+ text?: string;
112
+ press?: BotPress;
113
+ }): Promise<void>;
114
+ }
115
+ /** An address the messenger pushes this bot's updates to. */
116
+ export interface BotWebhook {
117
+ url: string;
118
+ /** The update types it gets, in the messenger's words; `null` is all of them. */
119
+ types: string[] | null;
120
+ }
121
+ /** While a webhook is set, the messenger gives polling nothing. */
122
+ export interface BotWebhooks {
123
+ webhooks(): Promise<BotWebhook[]>;
124
+ setWebhook(url: string, options: {
125
+ types?: string[];
126
+ secret?: string;
127
+ }): Promise<void>;
128
+ deleteWebhook(url: string): Promise<void>;
129
+ }
130
+ /** What happened in the bot's chats besides messages: a button, people coming and going, a start. */
131
+ export type BotNotice = {
132
+ event: "callback";
133
+ callbackId: string;
134
+ chatId: Id | null;
135
+ messageId: Id | null;
136
+ from: Member | null;
137
+ data: string;
138
+ }
139
+ /** `at` is when it happened, ISO 8601, where the messenger says — `watch` may print it long after. */
140
+ | {
141
+ event: "joined" | "left" | "added" | "removed";
142
+ chatId: Id;
143
+ person: Member | null;
144
+ at?: string;
145
+ } | {
146
+ event: "started";
147
+ chatId: Id | null;
148
+ person: Member | null;
149
+ }
150
+ /** An update this adapter does not decode, under the messenger's own type name. */
151
+ | {
152
+ event: "other";
153
+ type: string;
154
+ chatId: Id | null;
155
+ };
156
+ /** One update as `bot watch` prints it. */
157
+ export type BotEvent = MessageEvent | BotNotice;
158
+ export interface BotUpdatesPage {
159
+ events: BotEvent[];
160
+ /** Where the next call starts; the same as given when nothing came. Opaque to the caller. */
161
+ cursor: string | undefined;
162
+ }
163
+ /** Taking the bot's updates by polling. A call waits up to `waitSeconds` for the first one. */
164
+ export interface BotUpdates {
165
+ updates(cursor: string | undefined, options: {
166
+ types?: string[];
167
+ waitSeconds: number;
168
+ signal: AbortSignal;
169
+ }): Promise<BotUpdatesPage>;
170
+ }
54
171
  /**
55
172
  * The part of the personal core a bot can do, and the groups its Bot API has. A bot never gets
56
173
  * `chats` from this type: neither Bot API lists a bot's chats.
57
174
  */
58
- export type BotAdapter = Pick<MessengerCore, "me" | "close"> & Partial<BotMessaging> & Partial<BotHistory> & Partial<MessagePins> & Partial<BotChatTools>;
175
+ export type BotAdapter = Pick<MessengerCore, "me" | "close"> & Partial<BotMessaging> & Partial<BotHistory> & Partial<MessagePins> & Partial<BotChatTools> & Partial<BotChatAdmins> & Partial<BotChatMembers> & Partial<BotMenu> & Partial<BotCallbacks> & Partial<BotWebhooks> & Partial<BotUpdates> & Partial<BotPeople>;
59
176
  export interface BotConnectOptions {
60
177
  stop?: AbortSignal;
61
178
  events?: EventSink;
@@ -67,6 +184,15 @@ export interface BotMessenger {
67
184
  provider: Provider;
68
185
  /** The messenger's own name, as its users write it — `MAX`, `Telegram`. */
69
186
  name?: string;
187
+ /** The admin rights `--can` offers; every shared one when unset. */
188
+ adminRights?: readonly AdminRight[];
189
+ /** Whether `bot webhooks set --add` keeps the other addresses; a messenger with one address has no `--add`. */
190
+ manyWebhooks?: boolean;
191
+ /**
192
+ * Called by `bot watch` with each batch, after the copy took it and before it is printed. A throw
193
+ * holds the cursor, so the batch comes again — keep what it writes safe to write twice.
194
+ */
195
+ keepUpdates?: (command: Command, profile: string, events: readonly BotEvent[]) => void;
70
196
  /** Called with `kind: "bot"`. */
71
197
  resolveSettings: (flags: GlobalFlags, options?: ResolveOptions) => Settings;
72
198
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/port.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/port.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"port.js","sourceRoot":"","sources":["../../../src/cli/bot/port.ts"],"names":[],"mappings":"AA2CA,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAU,CAAA"}
1
+ {"version":3,"file":"port.js","sourceRoot":"","sources":["../../../src/cli/bot/port.ts"],"names":[],"mappings":"AAkDA,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAU,CAAA"}
@@ -11,6 +11,8 @@ export declare const botFiles: (app: AppIdentity, profile: string, env?: NodeJS.
11
11
  registry: string;
12
12
  recipients: string;
13
13
  journal: string;
14
+ updates: string;
15
+ presses: string;
14
16
  };
15
17
  /**
16
18
  * The chats this bot has seen, because neither MAX's nor Telegram's Bot API has a call that lists them.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,8FAA8F;AAC9F,eAAO,MAAM,aAAa,QAAS,WAAW,QAAO,MAAM,CAAC,UAAU,KAAiB,MACC,CAAA;AAExF,oIAAoI;AACpI,eAAO,MAAM,QAAQ,QAAS,WAAW,WAAW,MAAM,QAAO,MAAM,CAAC,UAAU;IAG9E,QAAQ;IACR,UAAU;IACV,OAAO;CAEV,CAAA;AAED;;;;;GAKG;AACH,qBAAa,YAAY;;IAGvB,YAAY,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAElF;IAED,IAAI,IAAI,QAAQ,EAAE,CAGjB;IAED,sGAAsG;IACtG,KAAK,IAAI,MAAM,GAAG,SAAS,CAG1B;IAED,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG5B;IAED,sEAAsE;IACtE,KAAK,IAAI,IAAI,CAEZ;IAED,yEAAyE;IACzE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,CAuBxF;CAeF;AAED,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,QAAS,WAAW,QAAO,MAAM,CAAC,UAAU,KAAiB,MAAM,EAO/F,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,8FAA8F;AAC9F,eAAO,MAAM,aAAa,QAAS,WAAW,QAAO,MAAM,CAAC,UAAU,KAAiB,MACC,CAAA;AAExF,oIAAoI;AACpI,eAAO,MAAM,QAAQ,QAAS,WAAW,WAAW,MAAM,QAAO,MAAM,CAAC,UAAU;IAG9E,QAAQ;IACR,UAAU;IACV,OAAO;IACP,OAAO;IACP,OAAO;CAEV,CAAA;AAED;;;;;GAKG;AACH,qBAAa,YAAY;;IAGvB,YAAY,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAElF;IAED,IAAI,IAAI,QAAQ,EAAE,CAGjB;IAED,sGAAsG;IACtG,KAAK,IAAI,MAAM,GAAG,SAAS,CAG1B;IAED,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG5B;IAED,sEAAsE;IACtE,KAAK,IAAI,IAAI,CAEZ;IAED,yEAAyE;IACzE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,CAuBxF;CAeF;AAED,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,QAAS,WAAW,QAAO,MAAM,CAAC,UAAU,KAAiB,MAAM,EAO/F,CAAA"}
@@ -10,6 +10,8 @@ export const botFiles = (app, profile, env = process.env) => {
10
10
  registry: join(directory, `${profile}.json`),
11
11
  recipients: join(directory, "recipients", `${profile}.json`),
12
12
  journal: join(directory, "sends", `${profile}.jsonl`),
13
+ updates: join(directory, "updates", `${profile}.json`),
14
+ presses: join(directory, "presses", `${profile}.json`),
13
15
  };
14
16
  };
15
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/bot/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/bot/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Command } from "commander";
2
+ import type { BotMessenger } from "./port.js";
3
+ /** `bot commands`: the menu people see when they type `/`. */
4
+ export declare const botMenuCommand: (bot: BotMessenger) => Command;
5
+ /** `bot callbacks`: answers to the buttons people press under the bot's messages. */
6
+ export declare const botCallbacksCommand: (bot: BotMessenger) => Command;
7
+ /** `bot webhooks`: where the messenger pushes this bot's updates instead of being polled. */
8
+ export declare const botWebhooksCommand: (bot: BotMessenger) => Command;
9
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,WAAW,CAAA;AAwB3D,8DAA8D;AAC9D,eAAO,MAAM,cAAc,QAAS,YAAY,KAAG,OAsClD,CAAA;AAED,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,QAAS,YAAY,KAAG,OA2CrD,CAAA;AAEH,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,QAAS,YAAY,KAAG,OA+DtD,CAAA"}
@@ -0,0 +1,155 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { annotate } from "@leemour/cli-core/commands";
3
+ import { Command } from "commander";
4
+ import { guardedWrite } from "../../sends/guarded.js";
5
+ import { newOperationId } from "../../sends/send-id.js";
6
+ import { renderList } from "../paging.js";
7
+ import { botContext, online } from "./context.js";
8
+ import { botCan } from "./messages.js";
9
+ import { botFiles } from "./registry.js";
10
+ import { PressLog } from "./updates.js";
11
+ const entryOf = (typed) => {
12
+ const split = typed.indexOf("=");
13
+ const name = (split === -1 ? typed : typed.slice(0, split)).replace(/^\//, "").trim();
14
+ if (!name)
15
+ throw new CliError("validation_error", `a command is name=description, not ${typed}`);
16
+ const description = split === -1 ? "" : typed.slice(split + 1).trim();
17
+ return { name, description: description || null };
18
+ };
19
+ const typesOf = (typed) => {
20
+ const types = typed
21
+ ?.split(",")
22
+ .map((one) => one.trim())
23
+ .filter(Boolean);
24
+ return types && types.length > 0 ? types : undefined;
25
+ };
26
+ /** A change to the bot itself, not to a chat: guarded and journaled with no chat. */
27
+ const botWrite = (context, key, write) => guardedWrite(context.guard(), { operationId: newOperationId(), chatId: null, kind: "account", key }, write);
28
+ /** `bot commands`: the menu people see when they type `/`. */
29
+ export const botMenuCommand = (bot) => {
30
+ const command = new Command("commands").description("the bot's command menu — what people see after /");
31
+ command
32
+ .command("list")
33
+ .description("the commands in the menu now")
34
+ .action(async function () {
35
+ const context = online(botContext(this, bot), this);
36
+ await context.run(async (events) => {
37
+ const adapter = await context.authenticated({ events });
38
+ renderList(context.renderer, context.format, await botCan(adapter, "menu", bot, "read its menu")());
39
+ });
40
+ });
41
+ const replace = async (command, entries, key) => {
42
+ const context = online(botContext(command, bot), command);
43
+ await context.run(async (events) => {
44
+ const adapter = await context.authenticated({ events });
45
+ const set = botCan(adapter, "setMenu", bot, "change its menu");
46
+ await botWrite(context, key, () => set(entries));
47
+ renderList(context.renderer, context.format, entries);
48
+ });
49
+ };
50
+ annotate(command.command("set"), { mutates: true })
51
+ .description("replace the whole menu: each command as name=description, e.g. start=Begin")
52
+ .argument("<commands...>", "name=description, one per command")
53
+ .action(async function (typed) {
54
+ await replace(this, typed.map(entryOf), "bot.commands.set");
55
+ });
56
+ annotate(command.command("clear"), { mutates: true })
57
+ .description("empty the menu")
58
+ .action(async function () {
59
+ await replace(this, [], "bot.commands.clear");
60
+ });
61
+ return command;
62
+ };
63
+ /** `bot callbacks`: answers to the buttons people press under the bot's messages. */
64
+ export const botCallbacksCommand = (bot) => new Command("callbacks").description("answers to the buttons people press under the bot's messages").addCommand(annotate(new Command("answer"), { mutates: true })
65
+ .description("answer a pressed button by its callback id: --notification shows the person a one-time note, " +
66
+ "--text replaces the message the button was on")
67
+ .argument("<callback>", "the callback id `bot watch` printed")
68
+ .option("--text <text>", "the message's new text")
69
+ .option("--notification <text>", "a note only the person who pressed sees")
70
+ .action(async function (callbackId) {
71
+ const context = online(botContext(this, bot), this);
72
+ const { text, notification } = this.opts();
73
+ if (text === undefined && notification === undefined) {
74
+ throw new CliError("validation_error", "an answer needs --text, --notification, or both");
75
+ }
76
+ const press = text === undefined
77
+ ? undefined
78
+ : new PressLog(botFiles(bot.app, context.profile, context.env).presses).find(callbackId);
79
+ await context.run(async (events) => {
80
+ const adapter = await context.authenticated({ events });
81
+ const answer = botCan(adapter, "answer", bot, "answer a button");
82
+ const operationId = newOperationId();
83
+ await guardedWrite(context.guard(), {
84
+ operationId,
85
+ chatId: press?.chatId ?? null,
86
+ kind: "message",
87
+ key: "bot.callbacks.answer",
88
+ ...(text === undefined ? {} : { length: text.length }),
89
+ }, () => answer(callbackId, {
90
+ ...(text === undefined ? {} : { text }),
91
+ ...(notification === undefined ? {} : { notification }),
92
+ ...(press ? { press } : {}),
93
+ }));
94
+ context.renderer.result({ operationId, callbackId, answered: true });
95
+ });
96
+ }));
97
+ /** `bot webhooks`: where the messenger pushes this bot's updates instead of being polled. */
98
+ export const botWebhooksCommand = (bot) => {
99
+ const command = new Command("webhooks").description("where the messenger pushes this bot's updates — while one is set, `bot watch` gets nothing");
100
+ command
101
+ .command("list")
102
+ .description("the webhooks this bot has")
103
+ .action(async function () {
104
+ const context = online(botContext(this, bot), this);
105
+ await context.run(async (events) => {
106
+ const adapter = await context.authenticated({ events });
107
+ renderList(context.renderer, context.format, await botCan(adapter, "webhooks", bot, "list its webhooks")());
108
+ });
109
+ });
110
+ const set = annotate(command.command("set"), { mutates: true })
111
+ .description("send this bot's updates to an HTTPS address; refused while another is set")
112
+ .argument("<url>", "the HTTPS address")
113
+ .option("--types <types>", "only these update types, comma-separated, in the messenger's words")
114
+ .option("--secret-stdin", "a secret the messenger sends back with each update — asked for, or read from a pipe");
115
+ if (bot.manyWebhooks)
116
+ set.option("--add", "keep the webhooks already set and add this one beside them");
117
+ set.action(async function (url) {
118
+ const context = online(botContext(this, bot), this);
119
+ const options = this.opts();
120
+ await context.run(async (events) => {
121
+ const adapter = await context.authenticated({ events });
122
+ const list = botCan(adapter, "webhooks", bot, "list its webhooks");
123
+ const others = (await list()).filter((one) => one.url !== url);
124
+ if (others.length > 0 && !options.add) {
125
+ throw new CliError("confirmation_required", `this bot already sends its updates to ${others.map((one) => one.url).join(", ")} — ` +
126
+ `remove it first with \`${context.words} webhooks delete <url>\`` +
127
+ (bot.manyWebhooks ? ", or give --add to get every update at both" : ""));
128
+ }
129
+ const types = typesOf(options.types);
130
+ const setWebhook = botCan(adapter, "setWebhook", bot, "set a webhook");
131
+ // The secret is asked for only once the profile may set a webhook at all.
132
+ await botWrite(context, "bot.webhooks.set", async () => {
133
+ const secret = options.secretStdin ? (await context.readSecret("Webhook secret: ")).trim() : undefined;
134
+ if (options.secretStdin && !secret)
135
+ throw new CliError("validation_error", "no secret given");
136
+ await setWebhook(url, { ...(types ? { types } : {}), ...(secret ? { secret } : {}) });
137
+ });
138
+ renderList(context.renderer, context.format, await list());
139
+ });
140
+ });
141
+ annotate(command.command("delete"), { mutates: true })
142
+ .description("stop sending updates to this address; with none left, `bot watch` works again")
143
+ .argument("<url>", "the address")
144
+ .action(async function (url) {
145
+ const context = online(botContext(this, bot), this);
146
+ await context.run(async (events) => {
147
+ const adapter = await context.authenticated({ events });
148
+ const remove = botCan(adapter, "deleteWebhook", bot, "delete a webhook");
149
+ await botWrite(context, "bot.webhooks.delete", () => remove(url));
150
+ renderList(context.renderer, context.format, await botCan(adapter, "webhooks", bot, "list its webhooks")());
151
+ });
152
+ });
153
+ return command;
154
+ };
155
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/bot/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { BotPress } from "./port.js";
2
+ /**
3
+ * Where the bot's next poll starts. State, not cache: a poll with it confirms everything before it
4
+ * to the messenger for every reader of this bot, so losing it prints a batch twice and never loses
5
+ * one. `{ "marker": … }`, the shape max-cli has always written.
6
+ */
7
+ export declare class UpdatesCursor {
8
+ #private;
9
+ constructor(path: string);
10
+ read(): string | undefined;
11
+ write(marker: string): void;
12
+ }
13
+ /** The buttons `bot watch` saw pressed, so `bot callbacks answer --text` can find the message later. */
14
+ export declare class PressLog {
15
+ #private;
16
+ constructor(path: string);
17
+ find(callbackId: string): BotPress | undefined;
18
+ /** The same press twice is kept once: a batch the copy refused comes again. */
19
+ add(presses: readonly (BotPress & {
20
+ callbackId: string;
21
+ })[], now?: Date): void;
22
+ }
23
+ //# sourceMappingURL=updates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updates.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/updates.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC;;;;GAIG;AACH,qBAAa,aAAa;;IAGxB,YAAY,IAAI,EAAE,MAAM,EAEvB;IAED,IAAI,IAAI,MAAM,GAAG,SAAS,CAQzB;IAED,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE1B;CACF;AAUD,wGAAwG;AACxG,qBAAa,QAAQ;;IAGnB,YAAY,IAAI,EAAE,MAAM,EAEvB;IAYD,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAG7C;IAED,+EAA+E;IAC/E,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,EAAE,GAAG,OAAa,GAAG,IAAI,CASnF;CACF"}
@@ -0,0 +1,61 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { writeSecurely } from "@leemour/cli-core";
3
+ /**
4
+ * Where the bot's next poll starts. State, not cache: a poll with it confirms everything before it
5
+ * to the messenger for every reader of this bot, so losing it prints a batch twice and never loses
6
+ * one. `{ "marker": … }`, the shape max-cli has always written.
7
+ */
8
+ export class UpdatesCursor {
9
+ #path;
10
+ constructor(path) {
11
+ this.#path = path;
12
+ }
13
+ read() {
14
+ if (!existsSync(this.#path))
15
+ return undefined;
16
+ try {
17
+ const { marker } = JSON.parse(readFileSync(this.#path, "utf8"));
18
+ return typeof marker === "string" ? marker : undefined;
19
+ }
20
+ catch {
21
+ return undefined;
22
+ }
23
+ }
24
+ write(marker) {
25
+ writeSecurely(this.#path, `${JSON.stringify({ marker })}\n`, 0o600);
26
+ }
27
+ }
28
+ const KEPT_PRESSES = 500;
29
+ const PRESS_LIFETIME_MS = 24 * 60 * 60 * 1000;
30
+ /** The buttons `bot watch` saw pressed, so `bot callbacks answer --text` can find the message later. */
31
+ export class PressLog {
32
+ #path;
33
+ constructor(path) {
34
+ this.#path = path;
35
+ }
36
+ #read() {
37
+ if (!existsSync(this.#path))
38
+ return [];
39
+ try {
40
+ const { presses } = JSON.parse(readFileSync(this.#path, "utf8"));
41
+ return Array.isArray(presses) ? presses : [];
42
+ }
43
+ catch {
44
+ return [];
45
+ }
46
+ }
47
+ find(callbackId) {
48
+ const found = this.#read().find((press) => press.callbackId === callbackId);
49
+ return found ? { chatId: found.chatId, messageId: found.messageId } : undefined;
50
+ }
51
+ /** The same press twice is kept once: a batch the copy refused comes again. */
52
+ add(presses, now = new Date()) {
53
+ if (presses.length === 0)
54
+ return;
55
+ const fresh = this.#read().filter((press) => now.getTime() - Date.parse(press.at) < PRESS_LIFETIME_MS &&
56
+ !presses.some((one) => one.callbackId === press.callbackId));
57
+ const added = presses.map((press) => ({ ...press, at: now.toISOString() }));
58
+ writeSecurely(this.#path, `${JSON.stringify({ presses: [...fresh, ...added].slice(-KEPT_PRESSES) })}\n`, 0o600);
59
+ }
60
+ }
61
+ //# sourceMappingURL=updates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../../src/cli/bot/updates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Command } from "commander";
2
+ import type { BotMessenger } from "./port.js";
3
+ /**
4
+ * `bot watch`: what happens in the bot's chats, as it arrives, until Ctrl-C or `--timeout` — both a
5
+ * normal end. Each batch is kept before it is printed, and the cursor moves only after that: an end
6
+ * at any moment prints a batch twice at worst, never loses one. A read: it changes nothing anyone sees.
7
+ */
8
+ export declare const botWatchCommand: (bot: BotMessenger) => Command;
9
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/watch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,OAAO,KAAK,EAAY,YAAY,EAAa,MAAM,WAAW,CAAA;AAwFlE;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAS,YAAY,KAAG,OA0H9C,CAAA"}