@leemour/max-cli 0.13.0 → 0.15.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 (210) hide show
  1. package/README.md +92 -14
  2. package/dist/bot/auth.d.ts +23 -0
  3. package/dist/bot/auth.d.ts.map +1 -0
  4. package/dist/bot/auth.js +36 -0
  5. package/dist/bot/auth.js.map +1 -0
  6. package/dist/bot/client.d.ts +20 -0
  7. package/dist/bot/client.d.ts.map +1 -0
  8. package/dist/bot/client.js +91 -0
  9. package/dist/bot/client.js.map +1 -0
  10. package/dist/bot/generated/manifest.d.ts +3 -0
  11. package/dist/bot/generated/manifest.d.ts.map +1 -0
  12. package/dist/bot/generated/manifest.js +1232 -0
  13. package/dist/bot/generated/manifest.js.map +1 -0
  14. package/dist/bot/generated/schemas.d.ts +271 -0
  15. package/dist/bot/generated/schemas.d.ts.map +1 -0
  16. package/dist/bot/generated/schemas.js +869 -0
  17. package/dist/bot/generated/schemas.js.map +1 -0
  18. package/dist/bot/generated/types.d.ts +1088 -0
  19. package/dist/bot/generated/types.d.ts.map +1 -0
  20. package/dist/bot/generated/types.js +5 -0
  21. package/dist/bot/generated/types.js.map +1 -0
  22. package/dist/bot/input.d.ts +10 -0
  23. package/dist/bot/input.d.ts.map +1 -0
  24. package/dist/bot/input.js +88 -0
  25. package/dist/bot/input.js.map +1 -0
  26. package/dist/bot/keep.d.ts +25 -0
  27. package/dist/bot/keep.d.ts.map +1 -0
  28. package/dist/bot/keep.js +96 -0
  29. package/dist/bot/keep.js.map +1 -0
  30. package/dist/bot/map.d.ts +11 -0
  31. package/dist/bot/map.d.ts.map +1 -0
  32. package/dist/bot/map.js +76 -0
  33. package/dist/bot/map.js.map +1 -0
  34. package/dist/bot/permissions.d.ts +14 -0
  35. package/dist/bot/permissions.d.ts.map +1 -0
  36. package/dist/bot/permissions.js +53 -0
  37. package/dist/bot/permissions.js.map +1 -0
  38. package/dist/bot/registry.d.ts +30 -0
  39. package/dist/bot/registry.d.ts.map +1 -0
  40. package/dist/bot/registry.js +85 -0
  41. package/dist/bot/registry.js.map +1 -0
  42. package/dist/bot/russian-trusted-root.d.ts +8 -0
  43. package/dist/bot/russian-trusted-root.d.ts.map +1 -0
  44. package/dist/bot/russian-trusted-root.js +41 -0
  45. package/dist/bot/russian-trusted-root.js.map +1 -0
  46. package/dist/bot/transport.d.ts +41 -0
  47. package/dist/bot/transport.d.ts.map +1 -0
  48. package/dist/bot/transport.js +200 -0
  49. package/dist/bot/transport.js.map +1 -0
  50. package/dist/bot/uploads.d.ts +34 -0
  51. package/dist/bot/uploads.d.ts.map +1 -0
  52. package/dist/bot/uploads.js +122 -0
  53. package/dist/bot/uploads.js.map +1 -0
  54. package/dist/client.d.ts +39 -3
  55. package/dist/client.d.ts.map +1 -1
  56. package/dist/client.js +168 -23
  57. package/dist/client.js.map +1 -1
  58. package/dist/commands/bot-comments.d.ts +4 -0
  59. package/dist/commands/bot-comments.d.ts.map +1 -0
  60. package/dist/commands/bot-comments.js +97 -0
  61. package/dist/commands/bot-comments.js.map +1 -0
  62. package/dist/commands/bot-context.d.ts +27 -0
  63. package/dist/commands/bot-context.d.ts.map +1 -0
  64. package/dist/commands/bot-context.js +82 -0
  65. package/dist/commands/bot-context.js.map +1 -0
  66. package/dist/commands/bot-members.d.ts +12 -0
  67. package/dist/commands/bot-members.d.ts.map +1 -0
  68. package/dist/commands/bot-members.js +136 -0
  69. package/dist/commands/bot-members.js.map +1 -0
  70. package/dist/commands/bot-reads.d.ts +7 -0
  71. package/dist/commands/bot-reads.d.ts.map +1 -0
  72. package/dist/commands/bot-reads.js +145 -0
  73. package/dist/commands/bot-reads.js.map +1 -0
  74. package/dist/commands/bot-sends.d.ts +17 -0
  75. package/dist/commands/bot-sends.d.ts.map +1 -0
  76. package/dist/commands/bot-sends.js +270 -0
  77. package/dist/commands/bot-sends.js.map +1 -0
  78. package/dist/commands/bot-setup.d.ts +5 -0
  79. package/dist/commands/bot-setup.d.ts.map +1 -0
  80. package/dist/commands/bot-setup.js +107 -0
  81. package/dist/commands/bot-setup.js.map +1 -0
  82. package/dist/commands/bot-updates.d.ts +3 -0
  83. package/dist/commands/bot-updates.d.ts.map +1 -0
  84. package/dist/commands/bot-updates.js +182 -0
  85. package/dist/commands/bot-updates.js.map +1 -0
  86. package/dist/commands/bot.d.ts +3 -0
  87. package/dist/commands/bot.d.ts.map +1 -0
  88. package/dist/commands/bot.js +160 -0
  89. package/dist/commands/bot.js.map +1 -0
  90. package/dist/commands/chats.d.ts.map +1 -1
  91. package/dist/commands/chats.js +79 -2
  92. package/dist/commands/chats.js.map +1 -1
  93. package/dist/commands/check.d.ts +8 -0
  94. package/dist/commands/check.d.ts.map +1 -0
  95. package/dist/commands/check.js +64 -0
  96. package/dist/commands/check.js.map +1 -0
  97. package/dist/commands/context.d.ts +15 -1
  98. package/dist/commands/context.d.ts.map +1 -1
  99. package/dist/commands/context.js +5 -1
  100. package/dist/commands/context.js.map +1 -1
  101. package/dist/commands/hearing.d.ts +25 -0
  102. package/dist/commands/hearing.d.ts.map +1 -0
  103. package/dist/commands/hearing.js +41 -0
  104. package/dist/commands/hearing.js.map +1 -0
  105. package/dist/commands/inbox.d.ts.map +1 -1
  106. package/dist/commands/inbox.js +19 -3
  107. package/dist/commands/inbox.js.map +1 -1
  108. package/dist/commands/mcp.d.ts +1 -0
  109. package/dist/commands/mcp.d.ts.map +1 -1
  110. package/dist/commands/mcp.js +7 -4
  111. package/dist/commands/mcp.js.map +1 -1
  112. package/dist/commands/messages.d.ts.map +1 -1
  113. package/dist/commands/messages.js +21 -5
  114. package/dist/commands/messages.js.map +1 -1
  115. package/dist/commands/paging.d.ts +3 -1
  116. package/dist/commands/paging.d.ts.map +1 -1
  117. package/dist/commands/paging.js +4 -1
  118. package/dist/commands/paging.js.map +1 -1
  119. package/dist/commands/review.d.ts.map +1 -1
  120. package/dist/commands/review.js +22 -8
  121. package/dist/commands/review.js.map +1 -1
  122. package/dist/commands/rules.d.ts +7 -0
  123. package/dist/commands/rules.d.ts.map +1 -0
  124. package/dist/commands/rules.js +69 -0
  125. package/dist/commands/rules.js.map +1 -0
  126. package/dist/domain/map.d.ts +6 -1
  127. package/dist/domain/map.d.ts.map +1 -1
  128. package/dist/domain/map.js +34 -1
  129. package/dist/domain/map.js.map +1 -1
  130. package/dist/domain/models.d.ts +55 -0
  131. package/dist/domain/models.d.ts.map +1 -1
  132. package/dist/domain/models.js.map +1 -1
  133. package/dist/generated/client.generated.d.ts +1 -0
  134. package/dist/generated/client.generated.d.ts.map +1 -1
  135. package/dist/generated/client.generated.js +1 -0
  136. package/dist/generated/client.generated.js.map +1 -1
  137. package/dist/generated/opcodes.generated.d.ts +1 -0
  138. package/dist/generated/opcodes.generated.d.ts.map +1 -1
  139. package/dist/generated/opcodes.generated.js +1 -0
  140. package/dist/generated/opcodes.generated.js.map +1 -1
  141. package/dist/generated/operations.generated.d.ts +16 -1
  142. package/dist/generated/operations.generated.d.ts.map +1 -1
  143. package/dist/generated/operations.generated.js +2 -1
  144. package/dist/generated/operations.generated.js.map +1 -1
  145. package/dist/mcp/instructions.d.ts +2 -1
  146. package/dist/mcp/instructions.d.ts.map +1 -1
  147. package/dist/mcp/instructions.js +2 -1
  148. package/dist/mcp/instructions.js.map +1 -1
  149. package/dist/mcp/server.d.ts +2 -1
  150. package/dist/mcp/server.d.ts.map +1 -1
  151. package/dist/mcp/server.js +4 -1
  152. package/dist/mcp/server.js.map +1 -1
  153. package/dist/mcp/tools.d.ts +5 -1
  154. package/dist/mcp/tools.d.ts.map +1 -1
  155. package/dist/mcp/tools.js +160 -13
  156. package/dist/mcp/tools.js.map +1 -1
  157. package/dist/moderation/check.d.ts +98 -0
  158. package/dist/moderation/check.d.ts.map +1 -0
  159. package/dist/moderation/check.js +306 -0
  160. package/dist/moderation/check.js.map +1 -0
  161. package/dist/moderation/rules.d.ts +56 -0
  162. package/dist/moderation/rules.d.ts.map +1 -0
  163. package/dist/moderation/rules.js +138 -0
  164. package/dist/moderation/rules.js.map +1 -0
  165. package/dist/program.d.ts.map +1 -1
  166. package/dist/program.js +18 -3
  167. package/dist/program.js.map +1 -1
  168. package/dist/protocol/connection.d.ts.map +1 -1
  169. package/dist/protocol/connection.js +12 -1
  170. package/dist/protocol/connection.js.map +1 -1
  171. package/dist/review.d.ts +32 -5
  172. package/dist/review.d.ts.map +1 -1
  173. package/dist/review.js +82 -45
  174. package/dist/review.js.map +1 -1
  175. package/dist/sends/journal.d.ts +1 -1
  176. package/dist/sends/journal.d.ts.map +1 -1
  177. package/dist/session/store.d.ts +2 -0
  178. package/dist/session/store.d.ts.map +1 -1
  179. package/dist/session/store.js +2 -0
  180. package/dist/session/store.js.map +1 -1
  181. package/dist/spec/index.d.ts.map +1 -1
  182. package/dist/spec/index.js +2 -1
  183. package/dist/spec/index.js.map +1 -1
  184. package/dist/spec/operations/chats.d.ts +4 -1
  185. package/dist/spec/operations/chats.d.ts.map +1 -1
  186. package/dist/spec/operations/chats.js +10 -4
  187. package/dist/spec/operations/chats.js.map +1 -1
  188. package/dist/spec/operations/messages.d.ts.map +1 -1
  189. package/dist/spec/operations/messages.js +9 -4
  190. package/dist/spec/operations/messages.js.map +1 -1
  191. package/dist/spec/operations/uploads.d.ts +13 -0
  192. package/dist/spec/operations/uploads.d.ts.map +1 -1
  193. package/dist/spec/operations/uploads.js +21 -0
  194. package/dist/spec/operations/uploads.js.map +1 -1
  195. package/dist/transcribe/index.d.ts +36 -1
  196. package/dist/transcribe/index.d.ts.map +1 -1
  197. package/dist/transcribe/index.js +91 -14
  198. package/dist/transcribe/index.js.map +1 -1
  199. package/dist/upload.d.ts +3 -0
  200. package/dist/upload.d.ts.map +1 -1
  201. package/dist/upload.js +13 -7
  202. package/dist/upload.js.map +1 -1
  203. package/dist/version.d.ts +1 -1
  204. package/dist/version.js +1 -1
  205. package/dist/voice.d.ts +9 -0
  206. package/dist/voice.d.ts.map +1 -0
  207. package/dist/voice.js +36 -0
  208. package/dist/voice.js.map +1 -0
  209. package/package.json +17 -6
  210. package/skills/max-cli/SKILL.md +23 -2
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Russian Trusted Root CA, issued by the Ministry of Digital Development. It signs
3
+ * platform-api2.max.ru, and Node's bundled roots do not include it (measured 2026-09-26, FIND-219).
4
+ * SHA-256 D2:6D:2D:02:31:B7:C3:9F:92:CC:73:85:12:BA:54:10:35:19:E4:40:5D:68:B5:BD:70:3E:97:88:CA:8E:CF:31,
5
+ * valid until 2032-02-27. Used for our own bot requests only (owner, NEED-293).
6
+ */
7
+ export declare const RUSSIAN_TRUSTED_ROOT_CA = "-----BEGIN CERTIFICATE-----\nMIIFwjCCA6qgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwcDELMAkGA1UEBhMCUlUx\nPzA9BgNVBAoMNlRoZSBNaW5pc3RyeSBvZiBEaWdpdGFsIERldmVsb3BtZW50IGFu\nZCBDb21tdW5pY2F0aW9uczEgMB4GA1UEAwwXUnVzc2lhbiBUcnVzdGVkIFJvb3Qg\nQ0EwHhcNMjIwMzAxMjEwNDE1WhcNMzIwMjI3MjEwNDE1WjBwMQswCQYDVQQGEwJS\nVTE/MD0GA1UECgw2VGhlIE1pbmlzdHJ5IG9mIERpZ2l0YWwgRGV2ZWxvcG1lbnQg\nYW5kIENvbW11bmljYXRpb25zMSAwHgYDVQQDDBdSdXNzaWFuIFRydXN0ZWQgUm9v\ndCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMfFOZ8pUAL3+r2n\nqqE0Zp52selXsKGFYoG0GM5bwz1bSFtCt+AZQMhkWQheI3poZAToYJu69pHLKS6Q\nXBiwBC1cvzYmUYKMYZC7jE5YhEU2bSL0mX7NaMxMDmH2/NwuOVRj8OImVa5s1F4U\nzn4Kv3PFlDBjjSjXKVY9kmjUBsXQrIHeaqmUIsPIlNWUnimXS0I0abExqkbdrXbX\nYwCOXhOO2pDUx3ckmJlCMUGacUTnylyQW2VsJIyIGA8V0xzdaeUXg0VZ6ZmNUr5Y\nBer/EAOLPb8NYpsAhJe2mXjMB/J9HNsoFMBFJ0lLOT/+dQvjbdRZoOT8eqJpWnVD\nU+QL/qEZnz57N88OWM3rabJkRNdU/Z7x5SFIM9FrqtN8xewsiBWBI0K6XFuOBOTD\n4V08o4TzJ8+Ccq5XlCUW2L48pZNCYuBDfBh7FxkB7qDgGDiaftEkZZfApRg2E+M9\nG8wkNKTPLDc4wH0FDTijhgxR3Y4PiS1HL2Zhw7bD3CbslmEGgfnnZojNkJtcLeBH\nBLa52/dSwNU4WWLubaYSiAmA9IUMX1/RpfpxOxd4Ykmhz97oFbUaDJFipIggx5sX\nePAlkTdWnv+RWBxlJwMQ25oEHmRguNYf4Zr/Rxr9cS93Y+mdXIZaBEE0KS2iLRqa\nOiWBki9IMQU4phqPOBAaG7A+eP8PAgMBAAGjZjBkMB0GA1UdDgQWBBTh0YHlzlpf\nBKrS6badZrHF+qwshzAfBgNVHSMEGDAWgBTh0YHlzlpfBKrS6badZrHF+qwshzAS\nBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF\nAAOCAgEAALIY1wkilt/urfEVM5vKzr6utOeDWCUczmWX/RX4ljpRdgF+5fAIS4vH\ntmXkqpSCOVeWUrJV9QvZn6L227ZwuE15cWi8DCDal3Ue90WgAJJZMfTshN4OI8cq\nW9E4EG9wglbEtMnObHlms8F3CHmrw3k6KmUkWGoa+/ENmcVl68u/cMRl1JbW2bM+\n/3A+SAg2c6iPDlehczKx2oa95QW0SkPPWGuNA/CE8CpyANIhu9XFrj3RQ3EqeRcS\nAQQod1RNuHpfETLU/A2gMmvn/w/sx7TB3W5BPs6rprOA37tutPq9u6FTZOcG1Oqj\nC/B7yTqgI7rbyvox7DEXoX7rIiEqyNNUguTk/u3SZ4VXE2kmxdmSh3TQvybfbnXV\n4JbCZVaqiZraqc7oZMnRoWrXRG3ztbnbes/9qhRGI7PqXqeKJBztxRTEVj8ONs1d\nWN5szTwaPIvhkhO3CO5ErU2rVdUr89wKpNXbBODFKRtgxUT70YpmJ46VVaqdAhOZ\nD9EUUn4YaeLaS8AjSF/h7UkjOibNc4qVDiPP+rkehFWM66PVnP1Msh93tc+taIfC\nEYVMxjh8zNbFuoc7fzvvrFILLe7ifvEIUqSVIC/AzplM/Jxw7buXFeGP1qVCBEHq\n391d/9RAfaZ12zkwFsl+IKwE/OZxW8AHa9i1p4GO0YSNuczzEm4=\n-----END CERTIFICATE-----\n";
8
+ //# sourceMappingURL=russian-trusted-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"russian-trusted-root.d.ts","sourceRoot":"","sources":["../../src/bot/russian-trusted-root.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,+iEAiCnC,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Russian Trusted Root CA, issued by the Ministry of Digital Development. It signs
3
+ * platform-api2.max.ru, and Node's bundled roots do not include it (measured 2026-09-26, FIND-219).
4
+ * SHA-256 D2:6D:2D:02:31:B7:C3:9F:92:CC:73:85:12:BA:54:10:35:19:E4:40:5D:68:B5:BD:70:3E:97:88:CA:8E:CF:31,
5
+ * valid until 2032-02-27. Used for our own bot requests only (owner, NEED-293).
6
+ */
7
+ export const RUSSIAN_TRUSTED_ROOT_CA = `-----BEGIN CERTIFICATE-----
8
+ MIIFwjCCA6qgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwcDELMAkGA1UEBhMCUlUx
9
+ PzA9BgNVBAoMNlRoZSBNaW5pc3RyeSBvZiBEaWdpdGFsIERldmVsb3BtZW50IGFu
10
+ ZCBDb21tdW5pY2F0aW9uczEgMB4GA1UEAwwXUnVzc2lhbiBUcnVzdGVkIFJvb3Qg
11
+ Q0EwHhcNMjIwMzAxMjEwNDE1WhcNMzIwMjI3MjEwNDE1WjBwMQswCQYDVQQGEwJS
12
+ VTE/MD0GA1UECgw2VGhlIE1pbmlzdHJ5IG9mIERpZ2l0YWwgRGV2ZWxvcG1lbnQg
13
+ YW5kIENvbW11bmljYXRpb25zMSAwHgYDVQQDDBdSdXNzaWFuIFRydXN0ZWQgUm9v
14
+ dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMfFOZ8pUAL3+r2n
15
+ qqE0Zp52selXsKGFYoG0GM5bwz1bSFtCt+AZQMhkWQheI3poZAToYJu69pHLKS6Q
16
+ XBiwBC1cvzYmUYKMYZC7jE5YhEU2bSL0mX7NaMxMDmH2/NwuOVRj8OImVa5s1F4U
17
+ zn4Kv3PFlDBjjSjXKVY9kmjUBsXQrIHeaqmUIsPIlNWUnimXS0I0abExqkbdrXbX
18
+ YwCOXhOO2pDUx3ckmJlCMUGacUTnylyQW2VsJIyIGA8V0xzdaeUXg0VZ6ZmNUr5Y
19
+ Ber/EAOLPb8NYpsAhJe2mXjMB/J9HNsoFMBFJ0lLOT/+dQvjbdRZoOT8eqJpWnVD
20
+ U+QL/qEZnz57N88OWM3rabJkRNdU/Z7x5SFIM9FrqtN8xewsiBWBI0K6XFuOBOTD
21
+ 4V08o4TzJ8+Ccq5XlCUW2L48pZNCYuBDfBh7FxkB7qDgGDiaftEkZZfApRg2E+M9
22
+ G8wkNKTPLDc4wH0FDTijhgxR3Y4PiS1HL2Zhw7bD3CbslmEGgfnnZojNkJtcLeBH
23
+ BLa52/dSwNU4WWLubaYSiAmA9IUMX1/RpfpxOxd4Ykmhz97oFbUaDJFipIggx5sX
24
+ ePAlkTdWnv+RWBxlJwMQ25oEHmRguNYf4Zr/Rxr9cS93Y+mdXIZaBEE0KS2iLRqa
25
+ OiWBki9IMQU4phqPOBAaG7A+eP8PAgMBAAGjZjBkMB0GA1UdDgQWBBTh0YHlzlpf
26
+ BKrS6badZrHF+qwshzAfBgNVHSMEGDAWgBTh0YHlzlpfBKrS6badZrHF+qwshzAS
27
+ BgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
28
+ AAOCAgEAALIY1wkilt/urfEVM5vKzr6utOeDWCUczmWX/RX4ljpRdgF+5fAIS4vH
29
+ tmXkqpSCOVeWUrJV9QvZn6L227ZwuE15cWi8DCDal3Ue90WgAJJZMfTshN4OI8cq
30
+ W9E4EG9wglbEtMnObHlms8F3CHmrw3k6KmUkWGoa+/ENmcVl68u/cMRl1JbW2bM+
31
+ /3A+SAg2c6iPDlehczKx2oa95QW0SkPPWGuNA/CE8CpyANIhu9XFrj3RQ3EqeRcS
32
+ AQQod1RNuHpfETLU/A2gMmvn/w/sx7TB3W5BPs6rprOA37tutPq9u6FTZOcG1Oqj
33
+ C/B7yTqgI7rbyvox7DEXoX7rIiEqyNNUguTk/u3SZ4VXE2kmxdmSh3TQvybfbnXV
34
+ 4JbCZVaqiZraqc7oZMnRoWrXRG3ztbnbes/9qhRGI7PqXqeKJBztxRTEVj8ONs1d
35
+ WN5szTwaPIvhkhO3CO5ErU2rVdUr89wKpNXbBODFKRtgxUT70YpmJ46VVaqdAhOZ
36
+ D9EUUn4YaeLaS8AjSF/h7UkjOibNc4qVDiPP+rkehFWM66PVnP1Msh93tc+taIfC
37
+ EYVMxjh8zNbFuoc7fzvvrFILLe7ifvEIUqSVIC/AzplM/Jxw7buXFeGP1qVCBEHq
38
+ 391d/9RAfaZ12zkwFsl+IKwE/OZxW8AHa9i1p4GO0YSNuczzEm4=
39
+ -----END CERTIFICATE-----
40
+ `;
41
+ //# sourceMappingURL=russian-trusted-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"russian-trusted-root.js","sourceRoot":"","sources":["../../src/bot/russian-trusted-root.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCtC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { type RetryConfig, type SleepLike } from "@leemour/cli-core";
2
+ import type { ManifestOperation } from "@leemour/cli-core/codegen";
3
+ import { type FetchLike } from "@leemour/cli-core/http";
4
+ export declare const BOT_API_URL = "https://platform-api2.max.ru";
5
+ /**
6
+ * Adds the Минцифры root to this process's trusted roots, and nowhere else (`NEED-293`). Node
7
+ * exposes a process-wide default (22.19+); Bun takes the list per request instead.
8
+ */
9
+ export declare const botFetch: () => FetchLike;
10
+ export interface CallInput {
11
+ path?: Readonly<Record<string, string>>;
12
+ query?: Readonly<Record<string, string | readonly string[]>>;
13
+ /** JSON text, sent as it is — ids in it must reach MAX as the digits the caller wrote. */
14
+ body?: string;
15
+ }
16
+ export interface TransportOptions {
17
+ token: string;
18
+ baseUrl?: string;
19
+ fetch?: FetchLike;
20
+ timeoutMs?: number;
21
+ retry?: RetryConfig;
22
+ sleep?: SleepLike;
23
+ random?: () => number;
24
+ signal?: AbortSignal;
25
+ }
26
+ /**
27
+ * The official Bot API over HTTP. Speaks for one token, writes nothing to stdout or stderr, and
28
+ * turns every failure into a `CliError` that never contains the token.
29
+ */
30
+ export declare class BotTransport {
31
+ #private;
32
+ constructor(options: TransportOptions);
33
+ /** The parsed answer, numbers still lossless; `null` when MAX answered with no body. */
34
+ call(operation: ManifestOperation, input?: CallInput): Promise<unknown>;
35
+ }
36
+ /**
37
+ * What `max bot api` prints: a number that fits a JS number stays one, and a bigger one becomes
38
+ * its exact digits as a string rather than a rounded different number.
39
+ */
40
+ export declare const plainJson: (value: unknown) => unknown;
41
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/bot/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,SAAS,EAEf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,wBAAwB,CAAA;AAKrF,eAAO,MAAM,WAAW,iCAAiC,CAAA;AAQzD;;;GAGG;AACH,eAAO,MAAM,QAAQ,QAAO,SAU3B,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5D,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAeD;;;GAGG;AACH,qBAAa,YAAY;;IAUvB,YAAY,OAAO,EAAE,gBAAgB,EASpC;IAED,wFAAwF;IAClF,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBhF;CAwHF;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,OAKxC,CAAA"}
@@ -0,0 +1,200 @@
1
+ import tls from "node:tls";
2
+ import { backoffMs, CliError, DEFAULT_RETRY, realSleep, singleLine, } from "@leemour/cli-core";
3
+ import { providerWaitMs, statusToCode } from "@leemour/cli-core/http";
4
+ import { isLosslessNumber, isSafeNumber, parse, stringify } from "lossless-json";
5
+ import { VERSION } from "../version.js";
6
+ import { RUSSIAN_TRUSTED_ROOT_CA } from "./russian-trusted-root.js";
7
+ export const BOT_API_URL = "https://platform-api2.max.ru";
8
+ const DEFAULT_TIMEOUT_MS = 60_000;
9
+ /** `GET /updates` holds the request open for up to its own `timeout`; ours has to outlast it. */
10
+ const LONG_POLL_MARGIN_MS = 15_000;
11
+ let trusted = false;
12
+ /**
13
+ * Adds the Минцифры root to this process's trusted roots, and nowhere else (`NEED-293`). Node
14
+ * exposes a process-wide default (22.19+); Bun takes the list per request instead.
15
+ */
16
+ export const botFetch = () => {
17
+ if ("Bun" in globalThis) {
18
+ const ca = [...tls.rootCertificates, RUSSIAN_TRUSTED_ROOT_CA];
19
+ return (input, init) => fetch(input, { ...init, tls: { ca } });
20
+ }
21
+ if (!trusted && typeof tls.setDefaultCACertificates === "function") {
22
+ tls.setDefaultCACertificates([...tls.getCACertificates("default"), RUSSIAN_TRUSTED_ROOT_CA]);
23
+ trusted = true;
24
+ }
25
+ return fetch;
26
+ };
27
+ const TLS_FAILURES = new Set([
28
+ "UNABLE_TO_GET_ISSUER_CERT_LOCALLY",
29
+ "UNABLE_TO_VERIFY_LEAF_SIGNATURE",
30
+ "SELF_SIGNED_CERT_IN_CHAIN",
31
+ "CERT_HAS_EXPIRED",
32
+ ]);
33
+ const causeCode = (error) => {
34
+ const cause = error?.cause;
35
+ const code = typeof cause?.code === "string" ? cause.code : error?.code;
36
+ return typeof code === "string" ? code : undefined;
37
+ };
38
+ /**
39
+ * The official Bot API over HTTP. Speaks for one token, writes nothing to stdout or stderr, and
40
+ * turns every failure into a `CliError` that never contains the token.
41
+ */
42
+ export class BotTransport {
43
+ #token;
44
+ #baseUrl;
45
+ #fetch;
46
+ #timeoutMs;
47
+ #retry;
48
+ #sleep;
49
+ #random;
50
+ #signal;
51
+ constructor(options) {
52
+ this.#token = options.token;
53
+ this.#baseUrl = (options.baseUrl ?? BOT_API_URL).replace(/\/$/, "");
54
+ this.#fetch = options.fetch ?? botFetch();
55
+ this.#timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
56
+ this.#retry = options.retry ?? DEFAULT_RETRY;
57
+ this.#sleep = options.sleep ?? realSleep;
58
+ this.#random = options.random ?? Math.random;
59
+ this.#signal = options.signal;
60
+ }
61
+ /** The parsed answer, numbers still lossless; `null` when MAX answered with no body. */
62
+ async call(operation, input = {}) {
63
+ if (operation.binding.kind !== "http") {
64
+ throw new CliError("configuration_error", `${operation.id} is not an HTTP operation`);
65
+ }
66
+ const url = this.#url(operation.binding.path, input);
67
+ const reads = operation.effect === "read";
68
+ const timeoutMs = this.#timeoutFor(operation, input);
69
+ for (let attempt = 1;; attempt++) {
70
+ try {
71
+ return await this.#once(operation, url, input.body, timeoutMs);
72
+ }
73
+ catch (error) {
74
+ if (!(error instanceof CliError))
75
+ throw error;
76
+ if (this.#signal?.aborted)
77
+ throw error;
78
+ const retryable = reads && error.details.retryable === true && attempt <= this.#retry.retries;
79
+ if (!retryable)
80
+ throw error;
81
+ const wait = error.details.retryAfterMs ?? backoffMs(attempt, this.#retry, this.#random);
82
+ if (wait > this.#retry.maxRetryAfterMs)
83
+ throw error;
84
+ try {
85
+ await this.#sleep(wait, this.#signal, "retry");
86
+ }
87
+ catch {
88
+ throw error;
89
+ }
90
+ }
91
+ }
92
+ }
93
+ #url(template, input) {
94
+ const path = template.replace(/\{([^}]+)\}/g, (_, name) => {
95
+ const value = input.path?.[name];
96
+ if (value === undefined)
97
+ throw new CliError("validation_error", `missing path parameter ${name}`);
98
+ return encodeURIComponent(value);
99
+ });
100
+ const url = new URL(`${this.#baseUrl}${path}`);
101
+ for (const [name, value] of Object.entries(input.query ?? {})) {
102
+ url.searchParams.set(name, typeof value === "string" ? value : value.join(","));
103
+ }
104
+ return url;
105
+ }
106
+ #timeoutFor(operation, input) {
107
+ const poll = Number(input.query?.timeout);
108
+ return operation.id === "getUpdates" && Number.isFinite(poll)
109
+ ? Math.max(this.#timeoutMs, poll * 1000 + LONG_POLL_MARGIN_MS)
110
+ : this.#timeoutMs;
111
+ }
112
+ async #once(operation, url, body, timeoutMs) {
113
+ const signals = [AbortSignal.timeout(timeoutMs), ...(this.#signal ? [this.#signal] : [])];
114
+ const reads = operation.effect === "read";
115
+ let response;
116
+ try {
117
+ response = await this.#fetch(url, {
118
+ method: operation.binding.kind === "http" ? operation.binding.method : "POST",
119
+ headers: {
120
+ Authorization: this.#token,
121
+ "User-Agent": `max-cli/${VERSION}`,
122
+ Accept: "application/json",
123
+ ...(body === undefined ? {} : { "Content-Type": "application/json" }),
124
+ },
125
+ ...(body === undefined ? {} : { body }),
126
+ signal: AbortSignal.any(signals),
127
+ });
128
+ }
129
+ catch (error) {
130
+ throw this.#transportFailure(operation, error, reads, timeoutMs);
131
+ }
132
+ const text = await response.text();
133
+ if (!response.ok)
134
+ throw this.#refusal(operation, response, text);
135
+ if (text.trim() === "")
136
+ return null;
137
+ try {
138
+ return parse(text);
139
+ }
140
+ catch {
141
+ throw new CliError("invalid_response", `MAX answered ${operation.id} with something that is not JSON`, {
142
+ operation: operation.id,
143
+ status: response.status,
144
+ });
145
+ }
146
+ }
147
+ #transportFailure(operation, error, reads, timeoutMs) {
148
+ const code = causeCode(error);
149
+ if (code && TLS_FAILURES.has(code)) {
150
+ return new CliError("network_error", `this machine does not trust ${new URL(this.#baseUrl).host}'s certificate (${code}). ` +
151
+ "max-cli adds the Russian Trusted Root CA itself on Node 22.19+ and Bun — update Node, " +
152
+ "or set NODE_EXTRA_CA_CERTS to that certificate", { operation: operation.id, retryable: false });
153
+ }
154
+ if (this.#signal?.aborted) {
155
+ const deadline = this.#signal.reason?.name === "TimeoutError";
156
+ if (!deadline)
157
+ return new CliError("cancelled", `${operation.id} was cancelled`, { operation: operation.id });
158
+ if (!reads) {
159
+ return new CliError("outcome_unknown", `the command's time ran out while ${operation.id} was in flight; MAX may or may not have carried it out`, { operation: operation.id, retryable: false });
160
+ }
161
+ return new CliError("timeout", `the command's time ran out during ${operation.id}`, {
162
+ operation: operation.id,
163
+ retryable: false,
164
+ });
165
+ }
166
+ const timedOut = error?.name === "TimeoutError";
167
+ if (!reads) {
168
+ return new CliError("outcome_unknown", `${operation.id} got no answer${timedOut ? ` within ${timeoutMs} ms` : ""}; MAX may or may not have ` +
169
+ "carried it out — check before repeating it", { operation: operation.id, retryable: false });
170
+ }
171
+ return new CliError(timedOut ? "timeout" : "network_error", timedOut ? `${operation.id} got no answer within ${timeoutMs} ms` : `${operation.id} could not reach MAX`, { operation: operation.id, retryable: true });
172
+ }
173
+ #refusal(operation, response, text) {
174
+ let maxCode;
175
+ let said;
176
+ try {
177
+ const body = parse(text);
178
+ if (typeof body?.code === "string")
179
+ maxCode = body.code;
180
+ said = typeof body?.message === "string" ? body.message : typeof body?.error === "string" ? body.error : undefined;
181
+ }
182
+ catch { }
183
+ const retryable = response.status === 429 || response.status === 502 || response.status === 503;
184
+ const retryAfterMs = providerWaitMs(response.headers, () => new Date());
185
+ const reason = said ? `: ${singleLine(said).replaceAll(this.#token, "<token>").slice(0, 300)}` : "";
186
+ return new CliError(statusToCode(response.status), `MAX refused ${operation.id} (${response.status}${maxCode ? ` ${maxCode}` : ""})${reason}`, {
187
+ operation: operation.id,
188
+ status: response.status,
189
+ retryable,
190
+ ...(maxCode ? { maxCode } : {}),
191
+ ...(retryAfterMs === undefined ? {} : { retryAfterMs }),
192
+ });
193
+ }
194
+ }
195
+ /**
196
+ * What `max bot api` prints: a number that fits a JS number stays one, and a bigger one becomes
197
+ * its exact digits as a string rather than a rounded different number.
198
+ */
199
+ export const plainJson = (value) => JSON.parse(stringify(value, (_, inner) => isLosslessNumber(inner) && !isSafeNumber(inner.value) ? inner.toString() : inner) ?? "null");
200
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/bot/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type SleepLike } from "@leemour/cli-core";
2
+ import { type FetchLike } from "@leemour/cli-core/http";
3
+ export declare const UPLOAD_TYPES: readonly ["image", "video", "audio", "file"];
4
+ export type UploadType = (typeof UPLOAD_TYPES)[number];
5
+ export declare const uploadTypeOf: (path: string) => UploadType;
6
+ /** What goes into a message body's `attachments`. */
7
+ export interface Attachment {
8
+ type: UploadType;
9
+ payload: Record<string, unknown>;
10
+ }
11
+ export interface UploadEndpoint {
12
+ url: string;
13
+ token?: string | null;
14
+ }
15
+ export declare const endpointOf: (answer: unknown) => UploadEndpoint;
16
+ /**
17
+ * The second step: the bytes, streamed from disk as multipart field `data`. The upload URL is not
18
+ * the Bot API host and is itself a credential, so it gets no token and never appears in an error.
19
+ * Video and audio answer XML and are named by step one's token; image and file by the answer.
20
+ */
21
+ export declare const uploadFile: (options: {
22
+ path: string;
23
+ type: UploadType;
24
+ endpoint: UploadEndpoint;
25
+ fetch: FetchLike;
26
+ signal?: AbortSignal;
27
+ timeoutMs?: number;
28
+ }) => Promise<Attachment>;
29
+ /**
30
+ * Repeats a send only while MAX refuses it as not ready — a refusal, so nothing was sent. Any
31
+ * other failure, an unclear outcome above all, goes straight back to the caller.
32
+ */
33
+ export declare const whenAttachmentReady: <T>(send: () => Promise<T>, signal?: AbortSignal, sleep?: SleepLike) => Promise<T>;
34
+ //# sourceMappingURL=uploads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../src/bot/uploads.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACvF,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,wBAAwB,CAAA;AAIrE,eAAO,MAAM,YAAY,YAAI,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAU,CAAA;AACxE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAwBtD,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,UAA0E,CAAA;AAEtH,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,eAAO,MAAM,UAAU,WAAY,OAAO,KAAG,cAQ5C,CAAA;AAID;;;;GAIG;AACH,eAAO,MAAM,UAAU,YAAmB;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,cAAc,CAAA;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,KAAG,OAAO,CAAC,UAAU,CAkDrB,CAAA;AAWD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAU,CAAC,QACnC,MAAM,OAAO,CAAC,CAAC,CAAC,WACb,WAAW,UACb,SAAS,KACf,OAAO,CAAC,CAAC,CAUX,CAAA"}
@@ -0,0 +1,122 @@
1
+ import { openAsBlob, statSync } from "node:fs";
2
+ import { basename, extname } from "node:path";
3
+ import { CliError, realSleep } from "@leemour/cli-core";
4
+ import { statusToCode } from "@leemour/cli-core/http";
5
+ import { parse } from "lossless-json";
6
+ import { plainJson } from "./transport.js";
7
+ export const UPLOAD_TYPES = ["image", "video", "audio", "file"];
8
+ const BY_EXTENSION = {
9
+ jpg: "image",
10
+ jpeg: "image",
11
+ png: "image",
12
+ gif: "image",
13
+ tif: "image",
14
+ tiff: "image",
15
+ bmp: "image",
16
+ heic: "image",
17
+ mp4: "video",
18
+ mov: "video",
19
+ mkv: "video",
20
+ webm: "video",
21
+ mp3: "audio",
22
+ wav: "audio",
23
+ m4a: "audio",
24
+ ogg: "audio",
25
+ opus: "audio",
26
+ aac: "audio",
27
+ flac: "audio",
28
+ };
29
+ export const uploadTypeOf = (path) => BY_EXTENSION[extname(path).slice(1).toLowerCase()] ?? "file";
30
+ export const endpointOf = (answer) => {
31
+ const endpoint = plainJson(answer);
32
+ if (typeof endpoint?.url !== "string") {
33
+ throw new CliError("invalid_response", "MAX answered getUploadUrl with no upload URL", {
34
+ operation: "getUploadUrl",
35
+ });
36
+ }
37
+ return { url: endpoint.url, token: endpoint.token ?? null };
38
+ };
39
+ const UPLOAD_TIMEOUT_MS = 10 * 60_000;
40
+ /**
41
+ * The second step: the bytes, streamed from disk as multipart field `data`. The upload URL is not
42
+ * the Bot API host and is itself a credential, so it gets no token and never appears in an error.
43
+ * Video and audio answer XML and are named by step one's token; image and file by the answer.
44
+ */
45
+ export const uploadFile = async (options) => {
46
+ const { path, type, endpoint } = options;
47
+ const name = basename(path);
48
+ const stat = (() => {
49
+ try {
50
+ return statSync(path);
51
+ }
52
+ catch {
53
+ return undefined;
54
+ }
55
+ })();
56
+ if (!stat?.isFile())
57
+ throw new CliError("not_found", `no file at ${path}`);
58
+ const form = new FormData();
59
+ form.append("data", await openAsBlob(path), name);
60
+ const signals = [
61
+ AbortSignal.timeout(options.timeoutMs ?? UPLOAD_TIMEOUT_MS),
62
+ ...(options.signal ? [options.signal] : []),
63
+ ];
64
+ let response;
65
+ try {
66
+ response = await options.fetch(endpoint.url, { method: "POST", body: form, signal: AbortSignal.any(signals) });
67
+ }
68
+ catch {
69
+ throw new CliError("network_error", `the upload of ${name} did not finish; nothing was sent to the chat`, {
70
+ retryable: false,
71
+ });
72
+ }
73
+ const text = await response.text();
74
+ if (!response.ok) {
75
+ throw new CliError(statusToCode(response.status), `the upload server refused ${name} (${response.status}); nothing was sent to the chat`, { status: response.status });
76
+ }
77
+ if (type === "video" || type === "audio") {
78
+ if (!endpoint.token) {
79
+ throw new CliError("invalid_response", `MAX gave no token for a ${type} upload`, { operation: "getUploadUrl" });
80
+ }
81
+ return { type, payload: { token: endpoint.token } };
82
+ }
83
+ let answer;
84
+ try {
85
+ answer = plainJson(parse(text));
86
+ }
87
+ catch {
88
+ throw new CliError("invalid_response", `the upload server answered ${name} with something that is not JSON`);
89
+ }
90
+ if (type === "image" && answer.photos)
91
+ return { type, payload: { photos: answer.photos } };
92
+ if (typeof answer.token !== "string") {
93
+ throw new CliError("invalid_response", `the upload server answered ${name} with no token`);
94
+ }
95
+ return { type, payload: { token: answer.token } };
96
+ };
97
+ /** maxigo-client's `DefaultRetryIntervals` (`options.go`): MAX is still processing the file. */
98
+ const NOT_READY_WAITS_MS = [500, 1000, 2000, 5000];
99
+ const notReady = (error) => {
100
+ const failure = error;
101
+ if (failure.code === "outcome_unknown")
102
+ return false;
103
+ return /not\.ready|not\.processed/.test(`${failure.details?.maxCode ?? ""} ${failure.message ?? ""}`);
104
+ };
105
+ /**
106
+ * Repeats a send only while MAX refuses it as not ready — a refusal, so nothing was sent. Any
107
+ * other failure, an unclear outcome above all, goes straight back to the caller.
108
+ */
109
+ export const whenAttachmentReady = async (send, signal, sleep = realSleep) => {
110
+ for (let attempt = 0;; attempt++) {
111
+ try {
112
+ return await send();
113
+ }
114
+ catch (error) {
115
+ const wait = NOT_READY_WAITS_MS[attempt];
116
+ if (wait === undefined || !notReady(error))
117
+ throw error;
118
+ await sleep(wait, signal, "retry");
119
+ }
120
+ }
121
+ };
122
+ //# sourceMappingURL=uploads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../src/bot/uploads.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { CacheStore, PersonOrder, SyncSummary } from "./cache/store.js";
2
- import type { AccountSession, AttachmentLink, Chat, ChatCard, ChatKind, Contact, ContactImport, Deletion, Folder, GroupCard, GroupSettings, Id, Inbox, Message, MessageChange, MessageHit, Page, PersonCard, Pin, Profile, Reactions, ReadMark, Review, WindowedMessage } from "./domain/models.js";
2
+ import type { AccountSession, AttachmentLink, Chat, ChatCard, ChatEvents, ChatKind, Contact, ContactImport, Deletion, Folder, GroupCard, GroupMember, GroupMembers, GroupSettings, Id, Inbox, Message, MessageChange, MessageHit, Page, PersonCard, Pin, Profile, Reactions, ReadMark, Review, WindowedMessage } from "./domain/models.js";
3
3
  import { type Wire } from "./protocol/connection.js";
4
4
  import { type Payload } from "./protocol/frame.js";
5
5
  import { type DiagnosticEvent } from "./runs/events.js";
@@ -113,6 +113,28 @@ export declare class MaxClient {
113
113
  show: (reference: string) => Promise<ChatCard>;
114
114
  /** The other person in a one-to-one chat, by the chat's participants; `undefined` for anything else. */
115
115
  partner: (chatId: Id) => Promise<Id | undefined>;
116
+ /**
117
+ * The owner and admins of a group, from the chat as the login carried it (`owner`, `admins`,
118
+ * `adminParticipants` — measured 2026-09-24, `FIND-116`). `undefined` when the login did not
119
+ * carry this chat or its admins: the login carries only chats that changed lately, and the rest
120
+ * come from the local copy.
121
+ */
122
+ adminIds: (chatId: Id) => Promise<Id[] | undefined>;
123
+ /**
124
+ * Who joined, left, was added or removed since a point: the service messages in the chat's
125
+ * history, read forward from `since` without reactions. At most `EVENTS_READ` messages, the oldest.
126
+ */
127
+ events: (reference: string, { since }?: {
128
+ since?: number;
129
+ }) => Promise<ChatEvents>;
130
+ /**
131
+ * A chat's history after `since`, oldest first and without reactions, at most `EVENTS_READ`
132
+ * messages; `more` when there was more than that.
133
+ */
134
+ since: (chatId: Id, since: number) => Promise<{
135
+ messages: Message[];
136
+ more: boolean;
137
+ }>;
116
138
  /** What a link leads to, without joining it. */
117
139
  inspect: (link: string) => Promise<GroupCard>;
118
140
  join: (link: string) => Promise<GroupCard>;
@@ -129,6 +151,12 @@ export declare class MaxClient {
129
151
  */
130
152
  create: (title: string, people?: string[]) => Promise<GroupCard>;
131
153
  members: {
154
+ /**
155
+ * Everyone in a group or channel, from MAX, page by page. Paging follows PyMax: each answer's
156
+ * `marker` asks for the next page, and none means the last. Stops at `MEMBERS_READ`, or when a
157
+ * page repeats its marker or brings nobody new, so a misread marker cannot loop.
158
+ */
159
+ list: (reference: string) => Promise<GroupMembers>;
132
160
  /** No history unless asked (`NEED-272`): what was said before somebody joined is not theirs by default. */
133
161
  add: (reference: string, people: string[], { history }?: {
134
162
  history?: boolean;
@@ -140,7 +168,8 @@ export declare class MaxClient {
140
168
  remove: (reference: string, person: string) => Promise<ChatChange>;
141
169
  };
142
170
  requests: {
143
- list: (reference: string) => Promise<Contact[]>;
171
+ /** Each with the age of their account, read like a member's — the answer's `{contact}` is the same shape. */
172
+ list: (reference: string) => Promise<GroupMember[]>;
144
173
  accept: (reference: string, people: string[]) => Promise<ChatChange>;
145
174
  decline: (reference: string, people: string[]) => Promise<ChatChange>;
146
175
  };
@@ -325,6 +354,10 @@ export declare class MaxClient {
325
354
  replyTo?: Id;
326
355
  markdown?: boolean;
327
356
  files?: string[];
357
+ /** Send every file as a plain file, a video included — how a video went before `MAX-23`. */
358
+ asFile?: boolean;
359
+ /** An Ogg Opus file sent as a voice message, alone in its message. */
360
+ voice?: string;
328
361
  anyFile?: boolean;
329
362
  at?: number;
330
363
  }) => Promise<Message>;
@@ -418,8 +451,9 @@ export declare class MaxClient {
418
451
  * forward from `since`; a chat with more than `REVIEW_PER_CHAT` in the window is cut short and
419
452
  * says so.
420
453
  */
421
- review: ({ since }: {
454
+ review: ({ since, chatId, }: {
422
455
  since: number;
456
+ chatId?: Id;
423
457
  }) => Promise<Omit<Review, "complete" | "unheard">>;
424
458
  };
425
459
  /**
@@ -522,6 +556,8 @@ export interface PageRequest {
522
556
  * `undefined` for anything that is not a message id.
523
557
  */
524
558
  export declare const timeOfMessageId: (id: Id) => number | undefined;
559
+ /** How far back `chats events` looks without `since`. */
560
+ export declare const EVENTS_DAYS = 7;
525
561
  /** What `readLikeTab` sends back to MAX on the next login. */
526
562
  export interface TabSync {
527
563
  folders: number;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}