@wirecat/max-cli 0.50.0 → 0.52.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 (219) hide show
  1. package/README.md +9 -9
  2. package/dist/adapter/max-adapter.d.ts.map +1 -1
  3. package/dist/adapter/max-adapter.js +8 -4
  4. package/dist/adapter/max-adapter.js.map +1 -1
  5. package/dist/app.d.ts.map +1 -1
  6. package/dist/app.js +2 -0
  7. package/dist/app.js.map +1 -1
  8. package/dist/bot/adapter.d.ts.map +1 -1
  9. package/dist/bot/adapter.js +3 -2
  10. package/dist/bot/adapter.js.map +1 -1
  11. package/dist/bot/mcp-tools.d.ts.map +1 -1
  12. package/dist/bot/mcp-tools.js +3 -3
  13. package/dist/bot/mcp-tools.js.map +1 -1
  14. package/dist/bot/transport.d.ts.map +1 -1
  15. package/dist/bot/transport.js +8 -3
  16. package/dist/bot/transport.js.map +1 -1
  17. package/dist/bot/uploads.d.ts +2 -2
  18. package/dist/bot/uploads.d.ts.map +1 -1
  19. package/dist/bot/uploads.js +3 -3
  20. package/dist/bot/uploads.js.map +1 -1
  21. package/dist/client/account.d.ts +39 -0
  22. package/dist/client/account.d.ts.map +1 -0
  23. package/dist/client/account.js +92 -0
  24. package/dist/client/account.js.map +1 -0
  25. package/dist/client/chat-members.d.ts +27 -0
  26. package/dist/client/chat-members.d.ts.map +1 -0
  27. package/dist/client/chat-members.js +73 -0
  28. package/dist/client/chat-members.js.map +1 -0
  29. package/dist/client/chat-reads.d.ts +57 -0
  30. package/dist/client/chat-reads.d.ts.map +1 -0
  31. package/dist/client/chat-reads.js +160 -0
  32. package/dist/client/chat-reads.js.map +1 -0
  33. package/dist/client/chat-writes.d.ts +111 -0
  34. package/dist/client/chat-writes.d.ts.map +1 -0
  35. package/dist/client/chat-writes.js +240 -0
  36. package/dist/client/chat-writes.js.map +1 -0
  37. package/dist/client/contacts.d.ts +39 -0
  38. package/dist/client/contacts.d.ts.map +1 -0
  39. package/dist/client/contacts.js +93 -0
  40. package/dist/client/contacts.js.map +1 -0
  41. package/dist/client/delivery.d.ts +35 -0
  42. package/dist/client/delivery.d.ts.map +1 -0
  43. package/dist/client/delivery.js +62 -0
  44. package/dist/client/delivery.js.map +1 -0
  45. package/dist/client/folders.d.ts +20 -0
  46. package/dist/client/folders.d.ts.map +1 -0
  47. package/dist/client/folders.js +57 -0
  48. package/dist/client/folders.js.map +1 -0
  49. package/dist/client/history.d.ts +41 -0
  50. package/dist/client/history.d.ts.map +1 -0
  51. package/dist/client/history.js +111 -0
  52. package/dist/client/history.js.map +1 -0
  53. package/dist/client/live.d.ts +38 -0
  54. package/dist/client/live.d.ts.map +1 -0
  55. package/dist/client/live.js +182 -0
  56. package/dist/client/live.js.map +1 -0
  57. package/dist/client/login.d.ts +11 -0
  58. package/dist/client/login.d.ts.map +1 -0
  59. package/dist/client/login.js +8 -0
  60. package/dist/client/login.js.map +1 -0
  61. package/dist/client/message-reads.d.ts +53 -0
  62. package/dist/client/message-reads.d.ts.map +1 -0
  63. package/dist/client/message-reads.js +164 -0
  64. package/dist/client/message-reads.js.map +1 -0
  65. package/dist/client/message-writes.d.ts +84 -0
  66. package/dist/client/message-writes.d.ts.map +1 -0
  67. package/dist/client/message-writes.js +254 -0
  68. package/dist/client/message-writes.js.map +1 -0
  69. package/dist/client/people.d.ts +31 -0
  70. package/dist/client/people.d.ts.map +1 -0
  71. package/dist/client/people.js +130 -0
  72. package/dist/client/people.js.map +1 -0
  73. package/dist/client/polls.d.ts +53 -0
  74. package/dist/client/polls.d.ts.map +1 -0
  75. package/dist/client/polls.js +141 -0
  76. package/dist/client/polls.js.map +1 -0
  77. package/dist/client/read-policy.d.ts +2 -0
  78. package/dist/client/read-policy.d.ts.map +1 -0
  79. package/dist/client/read-policy.js +34 -0
  80. package/dist/client/read-policy.js.map +1 -0
  81. package/dist/client/request.d.ts +21 -0
  82. package/dist/client/request.d.ts.map +1 -0
  83. package/dist/client/request.js +69 -0
  84. package/dist/client/request.js.map +1 -0
  85. package/dist/client/session.d.ts +50 -0
  86. package/dist/client/session.d.ts.map +1 -0
  87. package/dist/client/session.js +293 -0
  88. package/dist/client/session.js.map +1 -0
  89. package/dist/client/stickers.d.ts +12 -0
  90. package/dist/client/stickers.d.ts.map +1 -0
  91. package/dist/client/stickers.js +29 -0
  92. package/dist/client/stickers.js.map +1 -0
  93. package/dist/client/types.d.ts +54 -0
  94. package/dist/client/types.d.ts.map +1 -0
  95. package/dist/client/types.js +2 -0
  96. package/dist/client/types.js.map +1 -0
  97. package/dist/client/upload-transport.d.ts +15 -0
  98. package/dist/client/upload-transport.d.ts.map +1 -0
  99. package/dist/client/upload-transport.js +49 -0
  100. package/dist/client/upload-transport.js.map +1 -0
  101. package/dist/client/uploads.d.ts +15 -0
  102. package/dist/client/uploads.d.ts.map +1 -0
  103. package/dist/client/uploads.js +25 -0
  104. package/dist/client/uploads.js.map +1 -0
  105. package/dist/client/values.d.ts +120 -0
  106. package/dist/client/values.d.ts.map +1 -0
  107. package/dist/client/values.js +186 -0
  108. package/dist/client/values.js.map +1 -0
  109. package/dist/client/writes.d.ts +40 -0
  110. package/dist/client/writes.d.ts.map +1 -0
  111. package/dist/client/writes.js +186 -0
  112. package/dist/client/writes.js.map +1 -0
  113. package/dist/client.d.ts +29 -644
  114. package/dist/client.d.ts.map +1 -1
  115. package/dist/client.js +267 -2828
  116. package/dist/client.js.map +1 -1
  117. package/dist/commands/bot-comments.d.ts.map +1 -1
  118. package/dist/commands/bot-comments.js +13 -13
  119. package/dist/commands/bot-comments.js.map +1 -1
  120. package/dist/commands/bot-context.d.ts.map +1 -1
  121. package/dist/commands/bot-context.js +11 -3
  122. package/dist/commands/bot-context.js.map +1 -1
  123. package/dist/commands/bot-members.d.ts.map +1 -1
  124. package/dist/commands/bot-members.js +25 -14
  125. package/dist/commands/bot-members.js.map +1 -1
  126. package/dist/commands/bot-messenger.d.ts +5 -2
  127. package/dist/commands/bot-messenger.d.ts.map +1 -1
  128. package/dist/commands/bot-messenger.js +7 -11
  129. package/dist/commands/bot-messenger.js.map +1 -1
  130. package/dist/commands/bot-setup.d.ts.map +1 -1
  131. package/dist/commands/bot-setup.js +3 -2
  132. package/dist/commands/bot-setup.js.map +1 -1
  133. package/dist/commands/bot.d.ts +2 -1
  134. package/dist/commands/bot.d.ts.map +1 -1
  135. package/dist/commands/bot.js +6 -6
  136. package/dist/commands/bot.js.map +1 -1
  137. package/dist/commands/config.d.ts.map +1 -1
  138. package/dist/commands/config.js +33 -33
  139. package/dist/commands/config.js.map +1 -1
  140. package/dist/commands/contacts.d.ts.map +1 -1
  141. package/dist/commands/contacts.js +4 -5
  142. package/dist/commands/contacts.js.map +1 -1
  143. package/dist/commands/doctor.d.ts.map +1 -1
  144. package/dist/commands/doctor.js +10 -9
  145. package/dist/commands/doctor.js.map +1 -1
  146. package/dist/commands/mcp.d.ts.map +1 -1
  147. package/dist/commands/mcp.js +13 -13
  148. package/dist/commands/mcp.js.map +1 -1
  149. package/dist/commands/messages.d.ts.map +1 -1
  150. package/dist/commands/messages.js +12 -4
  151. package/dist/commands/messages.js.map +1 -1
  152. package/dist/commands/paging.d.ts +0 -36
  153. package/dist/commands/paging.d.ts.map +1 -1
  154. package/dist/commands/paging.js +0 -50
  155. package/dist/commands/paging.js.map +1 -1
  156. package/dist/commands/recipients.d.ts.map +1 -1
  157. package/dist/commands/recipients.js +15 -14
  158. package/dist/commands/recipients.js.map +1 -1
  159. package/dist/commands/serve.d.ts.map +1 -1
  160. package/dist/commands/serve.js +14 -4
  161. package/dist/commands/serve.js.map +1 -1
  162. package/dist/commands/session.d.ts.map +1 -1
  163. package/dist/commands/session.js +8 -7
  164. package/dist/commands/session.js.map +1 -1
  165. package/dist/commands/setup.js +2 -2
  166. package/dist/commands/setup.js.map +1 -1
  167. package/dist/commands/watch.d.ts +4 -2
  168. package/dist/commands/watch.d.ts.map +1 -1
  169. package/dist/commands/watch.js +21 -5
  170. package/dist/commands/watch.js.map +1 -1
  171. package/dist/config.d.ts +843 -143
  172. package/dist/config.d.ts.map +1 -1
  173. package/dist/config.js +33 -33
  174. package/dist/config.js.map +1 -1
  175. package/dist/mcp/legacy-check.d.ts.map +1 -1
  176. package/dist/mcp/legacy-check.js +5 -3
  177. package/dist/mcp/legacy-check.js.map +1 -1
  178. package/dist/mcp/photo.d.ts.map +1 -1
  179. package/dist/mcp/photo.js +2 -2
  180. package/dist/mcp/photo.js.map +1 -1
  181. package/dist/mcp/prompts.d.ts.map +1 -1
  182. package/dist/mcp/prompts.js +10 -8
  183. package/dist/mcp/prompts.js.map +1 -1
  184. package/dist/mcp/tools.d.ts.map +1 -1
  185. package/dist/mcp/tools.js +36 -27
  186. package/dist/mcp/tools.js.map +1 -1
  187. package/dist/messenger.d.ts.map +1 -1
  188. package/dist/messenger.js +11 -1
  189. package/dist/messenger.js.map +1 -1
  190. package/dist/permissions.d.ts.map +1 -1
  191. package/dist/permissions.js +4 -1
  192. package/dist/permissions.js.map +1 -1
  193. package/dist/program.d.ts.map +1 -1
  194. package/dist/program.js +7 -3
  195. package/dist/program.js.map +1 -1
  196. package/dist/protocol/connection.d.ts.map +1 -1
  197. package/dist/protocol/connection.js +44 -12
  198. package/dist/protocol/connection.js.map +1 -1
  199. package/dist/sends.d.ts +1 -1
  200. package/dist/sends.js +1 -1
  201. package/dist/server/server.d.ts +3 -1
  202. package/dist/server/server.d.ts.map +1 -1
  203. package/dist/server/server.js +39 -21
  204. package/dist/server/server.js.map +1 -1
  205. package/dist/server/subscribe.d.ts.map +1 -1
  206. package/dist/server/subscribe.js +30 -4
  207. package/dist/server/subscribe.js.map +1 -1
  208. package/dist/server/subscribers.d.ts +18 -0
  209. package/dist/server/subscribers.d.ts.map +1 -0
  210. package/dist/server/subscribers.js +146 -0
  211. package/dist/server/subscribers.js.map +1 -0
  212. package/dist/upload.d.ts +6 -5
  213. package/dist/upload.d.ts.map +1 -1
  214. package/dist/upload.js +16 -11
  215. package/dist/upload.js.map +1 -1
  216. package/dist/version.d.ts +1 -1
  217. package/dist/version.js +1 -1
  218. package/package.json +3 -3
  219. package/skills/max-cli/SKILL.md +79 -59
@@ -0,0 +1,120 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import type { ChatAction, Upload as SharedUpload } from "@wirecat/cli-core/sends";
3
+ import type { Chat, ChatKind, GroupCard, Id, Message, Page } from "../domain/models.js";
4
+ import { ProtocolError } from "../protocol/connection.js";
5
+ import type { Payload } from "../protocol/frame.js";
6
+ import type { Resume } from "../session/handshake.js";
7
+ import { type SessionState, type SessionStore } from "../session/store.js";
8
+ import type { ASSET_TYPES } from "../spec/operations/assets.js";
9
+ export interface ChatChange {
10
+ chatId: Id;
11
+ action: ChatAction;
12
+ people: Id[];
13
+ chat: GroupCard | null;
14
+ }
15
+ export type AdminRight = "read" | "members" | "admins" | "info" | "pin" | "link" | "post" | "edit" | "delete";
16
+ export declare const ADMIN_RIGHTS: Record<AdminRight, number>;
17
+ export declare const LIVE_CHATS = 10000;
18
+ export declare const MEMBERS_PAGE = 50;
19
+ export declare const MEMBERS_READ = 5000;
20
+ export declare const wireLink: (link: string) => string;
21
+ export declare const largestMp4: (answer: Payload) => string | undefined;
22
+ export interface PageRequest {
23
+ limit?: number;
24
+ offset?: number;
25
+ /** Part of a name. Refused below three characters — see `checkedQuery`. */
26
+ query?: string;
27
+ kind?: ChatKind;
28
+ /** Only chats MAX counts unread messages in; a chat where it did not say is not one of them. */
29
+ unread?: boolean;
30
+ }
31
+ export declare const MIN_QUERY = 3;
32
+ export declare const checkedQuery: (query: string | undefined) => string | undefined;
33
+ export declare const CONTACT_INFO_BATCH = 100;
34
+ export declare const CHATS_PAGE_SEEN = 26;
35
+ export declare const timeOfMessageId: (id: Id) => number | undefined;
36
+ export declare const HISTORY_PAGE = 100;
37
+ export declare const EVENTS_READ = 2000;
38
+ export declare const EVENTS_DAYS = 7;
39
+ export interface TabSync {
40
+ folders: number;
41
+ calls: number;
42
+ assets: Partial<Record<(typeof ASSET_TYPES)[number], number>>;
43
+ }
44
+ export declare const ALL_CHATS_FOLDER = "all.chat.folder";
45
+ export declare const FIRST_TAB_SYNC: TabSync;
46
+ export declare const numberOr: (value: unknown, fallback: number) => number;
47
+ export interface ResumeFrom {
48
+ login: Resume;
49
+ chats: Payload[];
50
+ }
51
+ export declare const eventTime: (chat: unknown) => number;
52
+ export declare const REACTIONS_CHANGED = 155;
53
+ export declare const NEW_MESSAGE = 128;
54
+ export declare const DELETE_AT_ONCE = 10;
55
+ export declare const READ_MARK = 130;
56
+ export declare const CHAT_CHANGED = 135;
57
+ export declare const CONFIG_CHANGED = 134;
58
+ export declare const CHAT_FACTS: string[];
59
+ export declare const CHANGES_CHATS: Set<number>;
60
+ export declare const isJoinRequest: (chat: Payload) => boolean;
61
+ export declare const keyboardOf: (raw: Payload) => Payload | undefined;
62
+ export declare const isPresent: <T>(value: T | null | undefined) => value is T;
63
+ export declare const needsName: (message: Pick<Message, "senderId" | "senderName" | "outgoing">) => boolean;
64
+ export declare const batched: <T>(items: T[], size: number) => T[][];
65
+ export declare const matching: (chats: Chat[], { query, kind, unread }: Pick<PageRequest, "query" | "kind" | "unread">) => Chat[];
66
+ export declare const paged: <T>(items: T[], limit: number | undefined, offset: number) => Page<T>;
67
+ export declare const asMarker: (time: unknown) => number | undefined;
68
+ export declare const reasonOf: (error: unknown) => string;
69
+ export declare const viewer: (store: SessionStore) => {
70
+ viewerId?: undefined;
71
+ } | {
72
+ viewerId: string;
73
+ };
74
+ export declare const record: (value: unknown) => Payload | undefined;
75
+ export declare const asArray: (value: unknown) => Payload[];
76
+ export declare const asCliError: (error: unknown) => CliError;
77
+ export declare const asRefusal: (error: ProtocolError) => CliError;
78
+ export declare const deadLink: (link: string) => (error: unknown) => never;
79
+ export declare const LIMIT_WORDS: string[];
80
+ export declare const refuseWhilePaused: (state: SessionState) => void;
81
+ export type ContactWire = {
82
+ action: "ADD" | "REMOVE" | "BLOCK" | "UNBLOCK";
83
+ } | {
84
+ action: "UPDATE";
85
+ firstName: string;
86
+ lastName: string | null;
87
+ };
88
+ export interface ProfileChange {
89
+ firstName?: string;
90
+ lastName?: string;
91
+ description?: string;
92
+ /** Uploaded first, so a failed upload leaves the profile as it was. */
93
+ photo?: string | SharedUpload;
94
+ }
95
+ export interface FolderChange {
96
+ title?: string;
97
+ add?: string[];
98
+ remove?: string[];
99
+ }
100
+ export interface PhoneBookEntry {
101
+ phone: string;
102
+ name: string;
103
+ }
104
+ export declare const ownNames: (profile: Payload) => {
105
+ firstName?: string;
106
+ lastName?: string;
107
+ };
108
+ export declare const wirePhone: (typed: string) => string;
109
+ export declare const FOLDER_TITLE_MAX = 20;
110
+ export declare const folderTitle: (title: string) => string;
111
+ export declare const pickFolder: (reference: string, folders: Payload[]) => Payload;
112
+ export declare const numbers: (value: unknown) => number[];
113
+ export declare const MEDIA_TYPES: {
114
+ readonly photo: "PHOTO";
115
+ readonly video: "VIDEO";
116
+ readonly file: "FILE";
117
+ readonly audio: "AUDIO";
118
+ readonly link: "SHARE";
119
+ };
120
+ //# sourceMappingURL=values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/client/values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import { providerErrorKey } from "@wirecat/cli-core/cli";
3
+ import { ProtocolError } from "../protocol/connection.js";
4
+ import { loginPausedUntil } from "../session/store.js";
5
+ export const ADMIN_RIGHTS = {
6
+ read: 1 | 32,
7
+ members: 2,
8
+ admins: 4,
9
+ info: 8,
10
+ pin: 16,
11
+ link: 128,
12
+ post: 256,
13
+ edit: 512,
14
+ delete: 1024,
15
+ };
16
+ export const LIVE_CHATS = 10_000;
17
+ export const MEMBERS_PAGE = 50;
18
+ export const MEMBERS_READ = 5000;
19
+ export const wireLink = (link) => {
20
+ const trimmed = link.trim();
21
+ const at = trimmed.indexOf("join/");
22
+ if (at >= 0 && trimmed.length > at + "join/".length)
23
+ return trimmed.slice(at);
24
+ if (/^(https:\/\/)?max\.ru\/[\w.-]+\/?$/.test(trimmed))
25
+ return trimmed;
26
+ throw new CliError("validation_error", "not a MAX link — expected https://max.ru/join/… or https://max.ru/<name>");
27
+ };
28
+ export const largestMp4 = (answer) => Object.entries(answer)
29
+ .map(([key, value]) => ({ height: /^MP4_(\d+)$/.exec(key)?.[1], value }))
30
+ .filter((entry) => entry.height !== undefined && typeof entry.value === "string")
31
+ .sort((a, b) => Number(b.height) - Number(a.height))[0]?.value;
32
+ export const MIN_QUERY = 3;
33
+ export const checkedQuery = (query) => {
34
+ if (query === undefined)
35
+ return undefined;
36
+ const trimmed = query.trim();
37
+ if (trimmed.length < MIN_QUERY) {
38
+ throw new CliError("validation_error", `a search needs at least ${MIN_QUERY} characters — "${trimmed}" is ${trimmed.length}`);
39
+ }
40
+ return trimmed;
41
+ };
42
+ export const CONTACT_INFO_BATCH = 100;
43
+ export const CHATS_PAGE_SEEN = 26;
44
+ export const timeOfMessageId = (id) => {
45
+ if (!/^\d{10,20}$/.test(id))
46
+ return undefined;
47
+ const time = Number(BigInt(id) >> 16n);
48
+ return Number.isSafeInteger(time) && time > 0 ? time : undefined;
49
+ };
50
+ export const HISTORY_PAGE = 100;
51
+ export const EVENTS_READ = 2000;
52
+ export const EVENTS_DAYS = 7;
53
+ export const ALL_CHATS_FOLDER = "all.chat.folder";
54
+ export const FIRST_TAB_SYNC = { folders: 0, calls: 0, assets: {} };
55
+ export const numberOr = (value, fallback) => (typeof value === "number" ? value : fallback);
56
+ export const eventTime = (chat) => {
57
+ const time = record(chat)?.lastEventTime;
58
+ return typeof time === "number" ? time : 0;
59
+ };
60
+ export const REACTIONS_CHANGED = 155;
61
+ export const NEW_MESSAGE = 128;
62
+ export const DELETE_AT_ONCE = 10;
63
+ export const READ_MARK = 130;
64
+ export const CHAT_CHANGED = 135;
65
+ export const CONFIG_CHANGED = 134;
66
+ export const CHAT_FACTS = ["title", "description", "participantsCount", "status", "type", "baseIconUrl", "owner"];
67
+ export const CHANGES_CHATS = new Set([140, 142]);
68
+ export const isJoinRequest = (chat) => chat.joinRequestTime !== undefined && chat.joinRequestTime !== null;
69
+ export const keyboardOf = (raw) => asArray(raw.attaches).find((attach) => attach._type === "INLINE_KEYBOARD");
70
+ export const isPresent = (value) => value !== null && value !== undefined;
71
+ export const needsName = (message) => message.senderId !== null && message.senderName === null && message.outgoing !== true;
72
+ export const batched = (items, size) => {
73
+ const batches = [];
74
+ for (let at = 0; at < items.length; at += size)
75
+ batches.push(items.slice(at, at + size));
76
+ return batches;
77
+ };
78
+ export const matching = (chats, { query, kind, unread }) => {
79
+ const needle = query?.toLocaleLowerCase();
80
+ return chats.filter((chat) => (kind === undefined || chat.kind === kind) &&
81
+ (!unread || (chat.unreadCount ?? 0) > 0) &&
82
+ (needle === undefined || (chat.title ?? "").toLocaleLowerCase().includes(needle)));
83
+ };
84
+ export const paged = (items, limit, offset) => {
85
+ const page = limit === undefined ? items.slice(offset) : items.slice(offset, offset + limit);
86
+ return { items: page, hasMore: offset + page.length < items.length };
87
+ };
88
+ export const asMarker = (time) => typeof time === "number" && Number.isFinite(time) && time > 0 ? time : undefined;
89
+ export const reasonOf = (error) => {
90
+ const code = error?.code;
91
+ return typeof code === "string" ? code : error instanceof Error ? error.name : "an unknown problem";
92
+ };
93
+ export const viewer = (store) => {
94
+ const viewerId = store.readState().viewerId;
95
+ return viewerId === undefined ? {} : { viewerId };
96
+ };
97
+ export const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : undefined;
98
+ export const asArray = (value) => Array.isArray(value) ? value.filter((item) => record(item) !== undefined) : [];
99
+ export const asCliError = (error) => {
100
+ if (error instanceof CliError)
101
+ return error;
102
+ if (error instanceof ProtocolError) {
103
+ const key = providerErrorKey(record(error.payload)?.error);
104
+ const refused = asRefusal(error);
105
+ return key === undefined
106
+ ? refused
107
+ : new CliError(refused.code, refused.message, { ...refused.details, provider_error: key });
108
+ }
109
+ const message = error instanceof Error ? error.message : String(error);
110
+ if (message.includes("did not answer"))
111
+ return new CliError("timeout", message);
112
+ return new CliError("network_error", message);
113
+ };
114
+ export const asRefusal = (error) => {
115
+ const text = error.message.toLowerCase();
116
+ // First: "too many auth attempts" is a limit, not a bad token. The words are claims —
117
+ // `error.limit.violate` from PyMax #106, `rate_limit_exceeded` from GREEN-API — never measured here.
118
+ if (LIMIT_WORDS.some((words) => text.includes(words))) {
119
+ return new CliError("rate_limited", error.message, { operation: String(error.opcode) });
120
+ }
121
+ if (text.includes("token") || text.includes("auth")) {
122
+ return new CliError("authentication_error", `${error.message} — the session may have expired; run \`max <profile> session start\``);
123
+ }
124
+ return new CliError("provider_error", error.message, { operation: String(error.opcode) });
125
+ };
126
+ export const deadLink = (link) => (error) => {
127
+ const failure = asCliError(error);
128
+ if (failure.details.provider_error !== "not.found")
129
+ throw failure;
130
+ throw new CliError("not_found", `${link.trim()} leads nowhere — the link was reset, or never worked`);
131
+ };
132
+ export const LIMIT_WORDS = ["limit.violate", "rate_limit", "rate limit", "too many", "слишком много"];
133
+ export const refuseWhilePaused = (state) => {
134
+ const until = loginPausedUntil(state);
135
+ if (until === undefined)
136
+ return;
137
+ throw new CliError("rate_limited", `MAX refused this profile's last login for too many attempts; it will not try again before ${until} — ` +
138
+ "logging in sooner is what keeps an account locked");
139
+ };
140
+ export const ownNames = (profile) => {
141
+ const contact = record(profile.contact) ?? profile;
142
+ const names = asArray(contact.names);
143
+ const own = names.find((entry) => entry.type === "ONEME") ?? names[0];
144
+ return {
145
+ ...(typeof own?.firstName === "string" && own.firstName !== "" ? { firstName: own.firstName } : {}),
146
+ ...(typeof own?.lastName === "string" ? { lastName: own.lastName } : {}),
147
+ };
148
+ };
149
+ export const wirePhone = (typed) => {
150
+ const compact = typed.replace(/[\s()-]/g, "");
151
+ const digits = compact.replace(/^\+/, "");
152
+ if (!/^\d{7,15}$/.test(digits)) {
153
+ throw new CliError("validation_error", "a phone number is 7 to 15 digits, with an optional + and the country code");
154
+ }
155
+ // A Russian number written the domestic way would otherwise go out as +8…, somebody else's.
156
+ if (!compact.startsWith("+") && /^8\d{10}$/.test(digits)) {
157
+ throw new CliError("validation_error", "write a number that starts with 8 with its country code instead: +7…");
158
+ }
159
+ return `+${digits}`;
160
+ };
161
+ export const FOLDER_TITLE_MAX = 20;
162
+ export const folderTitle = (title) => {
163
+ const trimmed = title.trim();
164
+ if (trimmed === "")
165
+ throw new CliError("validation_error", "a folder needs a title");
166
+ if ([...trimmed].length > FOLDER_TITLE_MAX) {
167
+ throw new CliError("validation_error", `a folder title is at most ${FOLDER_TITLE_MAX} characters in MAX`);
168
+ }
169
+ return trimmed;
170
+ };
171
+ export const pickFolder = (reference, folders) => {
172
+ const wanted = reference.trim();
173
+ const byId = folders.find((folder) => folder.id === wanted);
174
+ if (byId)
175
+ return byId;
176
+ const named = folders.filter((folder) => typeof folder.title === "string" && folder.title === wanted);
177
+ if (named.length === 1 && named[0])
178
+ return named[0];
179
+ if (named.length > 1) {
180
+ throw new CliError("validation_error", `${named.length} folders are called "${wanted}" — name one by id (\`max chats folders list\`)`);
181
+ }
182
+ throw new CliError("not_found", `no folder "${wanted}" — \`max chats folders list\` shows them`);
183
+ };
184
+ export const numbers = (value) => Array.isArray(value) ? value.map(Number).filter(Number.isFinite) : [];
185
+ export const MEDIA_TYPES = { photo: "PHOTO", video: "VIDEO", file: "FILE", audio: "AUDIO", link: "SHARE" };
186
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/client/values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type AccountAction, type ChatAction, type GuardRequest, type SendGuard } from "@wirecat/cli-core/sends";
2
+ import type { Contact, Id, Reactions } from "../domain/models.js";
3
+ import type { wireClient } from "../generated/client.generated.js";
4
+ import type { Payload } from "../protocol/frame.js";
5
+ import type { MaxRecord } from "../record.js";
6
+ import type { RequestOf } from "../spec/index.js";
7
+ import type { chatsUpdateMembers } from "../spec/operations/chats.js";
8
+ import { type ChatChange, type ContactWire } from "./values.js";
9
+ interface Dependencies {
10
+ readonly offline: boolean;
11
+ readonly sends: SendGuard | undefined;
12
+ connectOnce: () => Promise<void>;
13
+ chatsResolve: (reference: string) => Promise<Id>;
14
+ personIds: (references: string[]) => Promise<Id[]>;
15
+ readonly wire: Pick<ReturnType<typeof wireClient>, "chats" | "contacts">;
16
+ readonly record: MaxRecord | undefined;
17
+ person: (reference: string) => Promise<Contact>;
18
+ remember: (contact: Contact) => Promise<Contact>;
19
+ readonly now: () => number;
20
+ }
21
+ export declare const createWrites: (deps: Dependencies) => {
22
+ reaction: (chatId: Id, messageId: Id, call: () => Promise<Payload>, key?: string) => Promise<Reactions>;
23
+ checked: (request: GuardRequest) => Promise<void>;
24
+ guard: (request: GuardRequest & {
25
+ chatId: Id;
26
+ }, messageId?: Id) => Promise<void>;
27
+ botWrite: (action: () => Promise<unknown>, uncertain: string, details: Record<string, unknown>) => Promise<void>;
28
+ changeChat: <T>(chatId: Id | null, action: ChatAction, act: () => Promise<{
29
+ chatId: Id;
30
+ result: T;
31
+ people?: number;
32
+ }>, personIds?: Id[]) => Promise<T>;
33
+ updateMembers: (reference: string, people: string[], action: ChatAction, change: Omit<RequestOf<typeof chatsUpdateMembers>, "chatId" | "userIds">) => Promise<ChatChange>;
34
+ change: <T>(action: AccountAction, body: (done: () => void) => Promise<T>) => Promise<T>;
35
+ contactAction: (action: AccountAction, wire: ContactWire, reference: string) => Promise<Contact>;
36
+ nextCid: () => number;
37
+ takeApplied: (operationId: string | undefined) => boolean;
38
+ };
39
+ export {};
40
+ //# sourceMappingURL=writes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes.d.ts","sourceRoot":"","sources":["../../src/client/writes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import { currentOperation, } from "@wirecat/cli-core/sends";
3
+ import { toContact, toGroupCard, toReactions } from "../domain/map.js";
4
+ import { isId } from "../resolve.js";
5
+ import { asCliError, record } from "./values.js";
6
+ export const createWrites = (deps) => {
7
+ let previousCid = 0;
8
+ const appliedOperations = new Set();
9
+ async function reaction(chatId, messageId, call, key = "reactions.add") {
10
+ if (deps.offline)
11
+ throw new CliError("validation_error", "`--offline` reads what was recorded; it cannot react");
12
+ try {
13
+ await checked({ chatId, kind: "reaction", key });
14
+ }
15
+ catch (error) {
16
+ deps.sends?.record({ chatId, kind: "reaction", outcome: "refused", errorCode: asCliError(error).code });
17
+ throw error;
18
+ }
19
+ try {
20
+ await deps.connectOnce();
21
+ const answer = await call();
22
+ deps.sends?.record({ chatId, kind: "reaction", outcome: "sent", messageId });
23
+ return toReactions(record(answer.reactionInfo) ?? {});
24
+ }
25
+ catch (error) {
26
+ deps.sends?.record({ chatId, kind: "reaction", outcome: "failed", messageId, errorCode: asCliError(error).code });
27
+ throw error;
28
+ }
29
+ }
30
+ async function checked(request) {
31
+ await deps.sends?.ask?.(request);
32
+ deps.sends?.check(request);
33
+ }
34
+ async function guard(request, messageId) {
35
+ const { chatId, kind, notify } = request;
36
+ try {
37
+ await checked(request);
38
+ }
39
+ catch (error) {
40
+ deps.sends?.record({
41
+ chatId,
42
+ ...(kind ? { kind } : {}),
43
+ ...(notify === undefined ? {} : { notify }),
44
+ outcome: "refused",
45
+ ...(messageId ? { messageId } : {}),
46
+ errorCode: asCliError(error).code,
47
+ });
48
+ throw error;
49
+ }
50
+ }
51
+ async function botWrite(action, uncertain, details) {
52
+ try {
53
+ await action();
54
+ }
55
+ catch (error) {
56
+ const failure = asCliError(error);
57
+ if (failure.code !== "timeout" && failure.code !== "network_error")
58
+ throw error;
59
+ throw new CliError("outcome_unknown", `${uncertain} (${failure.message}) — check the bot's reply before repeating this action`, { ...details, retryable: false });
60
+ }
61
+ }
62
+ async function changeChat(chatId, action, act, personIds) {
63
+ if (deps.offline)
64
+ throw new CliError("validation_error", "`--offline` reads what was recorded; it cannot change a chat");
65
+ try {
66
+ await checked({ chatId, kind: "chat", action, ...(personIds ? { personIds } : {}) });
67
+ }
68
+ catch (error) {
69
+ deps.sends?.record({ chatId, kind: "chat", action, outcome: "refused", errorCode: asCliError(error).code });
70
+ throw error;
71
+ }
72
+ try {
73
+ await deps.connectOnce();
74
+ const done = await act();
75
+ deps.sends?.record({
76
+ chatId: done.chatId,
77
+ kind: "chat",
78
+ action,
79
+ outcome: "sent",
80
+ ...(done.people === undefined ? {} : { people: done.people }),
81
+ });
82
+ return done.result;
83
+ }
84
+ catch (error) {
85
+ const failure = asCliError(error);
86
+ deps.sends?.record({
87
+ chatId,
88
+ kind: "chat",
89
+ action,
90
+ outcome: failure.code === "outcome_unknown" ? "outcome_unknown" : "failed",
91
+ errorCode: failure.code,
92
+ });
93
+ throw error;
94
+ }
95
+ }
96
+ async function updateMembers(reference, people, action, change) {
97
+ const chatId = await deps.chatsResolve(reference);
98
+ const userIds = await deps.personIds(people);
99
+ return changeChat(chatId, action, async () => {
100
+ const answer = await deps.wire.chats.updateMembers({ chatId, userIds, ...change });
101
+ const chat = record(answer.chat);
102
+ return {
103
+ chatId,
104
+ people: userIds.length,
105
+ result: { chatId, action, people: userIds, chat: chat ? toGroupCard(chat) : null },
106
+ };
107
+ }, action === "members.add" ? userIds : undefined);
108
+ }
109
+ async function change(action, body) {
110
+ if (deps.offline)
111
+ throw new CliError("validation_error", "`--offline` reads what was recorded; it cannot change the account");
112
+ try {
113
+ await checked({ chatId: null, kind: "account", action });
114
+ }
115
+ catch (error) {
116
+ deps.sends?.record({
117
+ chatId: null,
118
+ kind: "account",
119
+ action,
120
+ outcome: "refused",
121
+ errorCode: asCliError(error).code,
122
+ });
123
+ throw error;
124
+ }
125
+ let recorded = false;
126
+ const done = () => {
127
+ if (recorded)
128
+ return;
129
+ recorded = true;
130
+ const operationId = currentOperation();
131
+ if (operationId !== undefined)
132
+ appliedOperations.add(operationId);
133
+ deps.sends?.record({ chatId: null, kind: "account", action, outcome: "sent" });
134
+ };
135
+ try {
136
+ await deps.connectOnce();
137
+ const result = await body(done);
138
+ done();
139
+ return result;
140
+ }
141
+ catch (error) {
142
+ if (!recorded) {
143
+ deps.sends?.record({
144
+ chatId: null,
145
+ kind: "account",
146
+ action,
147
+ outcome: "failed",
148
+ errorCode: asCliError(error).code,
149
+ });
150
+ }
151
+ throw error;
152
+ }
153
+ }
154
+ function contactAction(action, wire, reference) {
155
+ return change(action, async () => {
156
+ const known = isId(reference) ? (await deps.record?.people())?.get(reference.trim()) : undefined;
157
+ const id = isId(reference) ? reference.trim() : (await deps.person(reference)).id;
158
+ const answer = await deps.wire.contacts.update({ contactId: id, ...wire });
159
+ const contact = record(answer.contact);
160
+ if (contact)
161
+ return deps.remember(toContact(contact));
162
+ return known ?? { id, name: null, username: null, description: null, lastMessagedAt: null };
163
+ });
164
+ }
165
+ function nextCid() {
166
+ const now = deps.now();
167
+ previousCid = now > previousCid ? now : previousCid + 1;
168
+ return previousCid;
169
+ }
170
+ function takeApplied(operationId) {
171
+ return operationId !== undefined && appliedOperations.delete(operationId);
172
+ }
173
+ return {
174
+ reaction: reaction,
175
+ checked: checked,
176
+ guard: guard,
177
+ botWrite: botWrite,
178
+ changeChat: changeChat,
179
+ updateMembers: updateMembers,
180
+ change: change,
181
+ contactAction: contactAction,
182
+ nextCid: nextCid,
183
+ takeApplied: takeApplied,
184
+ };
185
+ };
186
+ //# sourceMappingURL=writes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes.js","sourceRoot":"","sources":["../../src/client/writes.ts"],"names":[],"mappings":"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"}