@leemour/max-cli 0.6.0 → 0.7.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.
- package/README.md +8 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +4 -4
- package/dist/cache/index.js.map +1 -1
- package/dist/client.d.ts +178 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +764 -34
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +71 -3
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/chats.d.ts.map +1 -1
- package/dist/commands/chats.js +159 -0
- package/dist/commands/chats.js.map +1 -1
- package/dist/commands/complete.d.ts +10 -0
- package/dist/commands/complete.d.ts.map +1 -0
- package/dist/commands/complete.js +89 -0
- package/dist/commands/complete.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +4 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contacts.d.ts +3 -0
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/contacts.js +85 -0
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/context.d.ts +8 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +26 -6
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/folders.d.ts +4 -0
- package/dist/commands/folders.d.ts.map +1 -0
- package/dist/commands/folders.js +76 -0
- package/dist/commands/folders.js.map +1 -0
- package/dist/commands/inbox.js +2 -2
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +17 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +84 -2
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/reactions.d.ts.map +1 -1
- package/dist/commands/reactions.js +17 -0
- package/dist/commands/reactions.js.map +1 -1
- package/dist/commands/serve.d.ts +10 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +50 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +4 -1
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +53 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/watch.d.ts +9 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +68 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config.d.ts +16 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +27 -4
- package/dist/config.js.map +1 -1
- package/dist/domain/map.d.ts +8 -1
- package/dist/domain/map.d.ts.map +1 -1
- package/dist/domain/map.js +42 -1
- package/dist/domain/map.js.map +1 -1
- package/dist/domain/models.d.ts +47 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/models.js.map +1 -1
- package/dist/generated/client.generated.d.ts +26 -0
- package/dist/generated/client.generated.d.ts.map +1 -1
- package/dist/generated/client.generated.js +26 -0
- package/dist/generated/client.generated.js.map +1 -1
- package/dist/generated/opcodes.generated.d.ts +24 -5
- package/dist/generated/opcodes.generated.d.ts.map +1 -1
- package/dist/generated/opcodes.generated.js +24 -5
- package/dist/generated/opcodes.generated.js.map +1 -1
- package/dist/generated/operations.generated.d.ts +163 -6
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/generated/operations.generated.js +27 -4
- package/dist/generated/operations.generated.js.map +1 -1
- package/dist/mcp/confirm.d.ts +24 -0
- package/dist/mcp/confirm.d.ts.map +1 -0
- package/dist/mcp/confirm.js +53 -0
- package/dist/mcp/confirm.js.map +1 -0
- package/dist/mcp/instructions.d.ts +10 -0
- package/dist/mcp/instructions.d.ts.map +1 -0
- package/dist/mcp/instructions.js +25 -0
- package/dist/mcp/instructions.js.map +1 -0
- package/dist/mcp/server.d.ts +23 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +38 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +28 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +91 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/tools.d.ts +8 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +274 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +17 -0
- package/dist/program.js.map +1 -1
- package/dist/protocol/connection.d.ts +10 -8
- package/dist/protocol/connection.d.ts.map +1 -1
- package/dist/protocol/connection.js +64 -7
- package/dist/protocol/connection.js.map +1 -1
- package/dist/protocol/frame.d.ts +2 -1
- package/dist/protocol/frame.d.ts.map +1 -1
- package/dist/protocol/frame.js.map +1 -1
- package/dist/rendering/messages.d.ts.map +1 -1
- package/dist/rendering/messages.js +17 -9
- package/dist/rendering/messages.js.map +1 -1
- package/dist/sends/guard.d.ts +3 -2
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +14 -10
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/journal.d.ts +15 -2
- package/dist/sends/journal.d.ts.map +1 -1
- package/dist/sends/journal.js.map +1 -1
- package/dist/server/lines.d.ts +9 -0
- package/dist/server/lines.d.ts.map +1 -0
- package/dist/server/lines.js +25 -0
- package/dist/server/lines.js.map +1 -0
- package/dist/server/server-connection.d.ts +35 -0
- package/dist/server/server-connection.d.ts.map +1 -0
- package/dist/server/server-connection.js +195 -0
- package/dist/server/server-connection.js.map +1 -0
- package/dist/server/server.d.ts +62 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +297 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/start.d.ts +12 -0
- package/dist/server/start.d.ts.map +1 -0
- package/dist/server/start.js +41 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/subscribe.d.ts +9 -0
- package/dist/server/subscribe.d.ts.map +1 -0
- package/dist/server/subscribe.js +26 -0
- package/dist/server/subscribe.js.map +1 -0
- package/dist/session/browser.d.ts +1 -1
- package/dist/session/browser.d.ts.map +1 -1
- package/dist/session/browser.js +86 -59
- package/dist/session/browser.js.map +1 -1
- package/dist/session/store.d.ts +2 -0
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +4 -0
- package/dist/session/store.js.map +1 -1
- package/dist/spec/define.d.ts.map +1 -1
- package/dist/spec/define.js +14 -1
- package/dist/spec/define.js.map +1 -1
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +28 -5
- package/dist/spec/index.js.map +1 -1
- package/dist/spec/operations/account.d.ts +20 -0
- package/dist/spec/operations/account.d.ts.map +1 -0
- package/dist/spec/operations/account.js +62 -0
- package/dist/spec/operations/account.js.map +1 -0
- package/dist/spec/operations/chats.d.ts +54 -0
- package/dist/spec/operations/chats.d.ts.map +1 -1
- package/dist/spec/operations/chats.js +121 -0
- package/dist/spec/operations/chats.js.map +1 -1
- package/dist/spec/operations/contacts.d.ts +19 -1
- package/dist/spec/operations/contacts.d.ts.map +1 -1
- package/dist/spec/operations/contacts.js +49 -6
- package/dist/spec/operations/contacts.js.map +1 -1
- package/dist/spec/operations/folders.d.ts +24 -0
- package/dist/spec/operations/folders.d.ts.map +1 -0
- package/dist/spec/operations/folders.js +64 -0
- package/dist/spec/operations/folders.js.map +1 -0
- package/dist/spec/operations/messages.d.ts +44 -6
- package/dist/spec/operations/messages.d.ts.map +1 -1
- package/dist/spec/operations/messages.js +86 -17
- package/dist/spec/operations/messages.js.map +1 -1
- package/dist/spec/operations/session.d.ts +7 -0
- package/dist/spec/operations/session.d.ts.map +1 -1
- package/dist/spec/operations/session.js +17 -0
- package/dist/spec/operations/session.js.map +1 -1
- package/dist/spec/operations/uploads.d.ts +18 -0
- package/dist/spec/operations/uploads.d.ts.map +1 -0
- package/dist/spec/operations/uploads.js +35 -0
- package/dist/spec/operations/uploads.js.map +1 -0
- package/dist/testing/mock-max.d.ts +12 -2
- package/dist/testing/mock-max.d.ts.map +1 -1
- package/dist/testing/mock-max.js +15 -2
- package/dist/testing/mock-max.js.map +1 -1
- package/dist/testing/sandbox.js +2 -0
- package/dist/testing/sandbox.js.map +1 -1
- package/dist/update.d.ts +36 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +70 -0
- package/dist/update.js.map +1 -0
- package/dist/upload.d.ts +10 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +61 -0
- package/dist/upload.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +12 -3
- package/skills/max-cli/SKILL.md +10 -1
package/README.md
CHANGED
|
@@ -168,6 +168,13 @@ mkdir -p ~/.agents/skills/max-cli && max skill show > ~/.agents/skills/max-cli/S
|
|
|
168
168
|
Где какая среда ищет навыки: [Codex](https://learn.chatgpt.com/docs/build-skills),
|
|
169
169
|
[Gemini CLI](https://geminicli.com/docs/cli/skills/) (сверено 2026-09-24).
|
|
170
170
|
|
|
171
|
+
**Для клиентов без терминала** — Claude Desktop, Cursor — тот же профиль по MCP. Без `--allow-send`
|
|
172
|
+
сервер только читает. Подробно — [docs/mcp.md](docs/mcp.md).
|
|
173
|
+
|
|
174
|
+
```sh
|
|
175
|
+
claude mcp add max -- max mcp
|
|
176
|
+
```
|
|
177
|
+
|
|
171
178
|
## Документация
|
|
172
179
|
|
|
173
180
|
| | |
|
|
@@ -176,6 +183,7 @@ mkdir -p ~/.agents/skills/max-cli && max skill show > ~/.agents/skills/max-cli/S
|
|
|
176
183
|
| [docs/usage.md](docs/usage.md) | вход, чтение, отправка, машинный режим |
|
|
177
184
|
| [docs/sessions.md](docs/sessions.md) | токен, ключница, профили |
|
|
178
185
|
| [docs/configuration.md](docs/configuration.md) | настройки, переменные, порядок разрешения |
|
|
186
|
+
| [docs/mcp.md](docs/mcp.md) | MCP-сервер: подключение, отправка, соединение с MAX |
|
|
179
187
|
| [docs/diagnostics.md](docs/diagnostics.md) | `--trace`, `--record`, `max runs` |
|
|
180
188
|
| [docs/security.md](docs/security.md) | что пишется на диск, а что никогда |
|
|
181
189
|
| [docs/troubleshooting.md](docs/troubleshooting.md) | по симптому: что делать, когда не работает |
|
package/dist/cache/index.d.ts
CHANGED
|
@@ -18,5 +18,6 @@ export interface ProfileCacheOptions {
|
|
|
18
18
|
* The file holds message text, so the directory is `0700` and the database `0600`. It lives under
|
|
19
19
|
* the cache directory rather than the state one: deleting it must lose nothing that was typed.
|
|
20
20
|
*/
|
|
21
|
+
export declare const profileCacheFile: (profile: string, env?: NodeJS.ProcessEnv) => string;
|
|
21
22
|
export declare const openProfileCache: (profile: string, { env, onProblem }?: ProfileCacheOptions) => Promise<CacheStore | undefined>;
|
|
22
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAa,MAAM,YAAY,CAAA;AAEvD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,qBAAkC,mBAAwB,KACzD,OAAO,CAAC,UAAU,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAa,MAAM,YAAY,CAAA;AAEvD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,EAAE,MAAK,MAAM,CAAC,UAAwB,KAAG,MACF,CAAA;AAEvF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,qBAAkC,mBAAwB,KACzD,OAAO,CAAC,UAAU,GAAG,SAAS,CAchC,CAAA"}
|
package/dist/cache/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { chmodSync, mkdirSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
3
|
import { resolvePaths } from "@leemour/cli-core";
|
|
4
4
|
import { openCache } from "./open.js";
|
|
5
5
|
import { NewerCacheError } from "./schema.js";
|
|
@@ -10,13 +10,13 @@ import { openStore } from "./store.js";
|
|
|
10
10
|
* The file holds message text, so the directory is `0700` and the database `0600`. It lives under
|
|
11
11
|
* the cache directory rather than the state one: deleting it must lose nothing that was typed.
|
|
12
12
|
*/
|
|
13
|
+
export const profileCacheFile = (profile, env = process.env) => join(resolvePaths({ appName: "max-cli", prefix: "MAX", env }).cache, `${profile}.db`);
|
|
13
14
|
export const openProfileCache = async (profile, { env = process.env, onProblem } = {}) => {
|
|
14
|
-
const
|
|
15
|
-
const file = join(paths.cache, `${profile}.db`);
|
|
15
|
+
const file = profileCacheFile(profile, env);
|
|
16
16
|
try {
|
|
17
17
|
// SQLite will not create a file in a directory that does not exist, and on a fresh machine
|
|
18
18
|
// this one never does.
|
|
19
|
-
mkdirSync(
|
|
19
|
+
mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
|
|
20
20
|
const store = openStore({ database: await openCache(file) });
|
|
21
21
|
chmodSync(file, 0o600);
|
|
22
22
|
return store;
|
package/dist/cache/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAmB,SAAS,EAAE,MAAM,YAAY,CAAA;AAiBvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,MAAyB,OAAO,CAAC,GAAG,EAAU,EAAE,CAChG,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,OAAO,KAAK,CAAC,CAAA;AAEvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,OAAe,EACf,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,KAA0B,EAAE,EACzB,EAAE;IACnC,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAE3C,IAAI,CAAC;QACH,2FAA2F;QAC3F,uBAAuB;QACvB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC5D,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACtB,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,EAAE,CAAC,6DAA6D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC3F,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAA;AAED,mGAAmG;AACnG,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE;IAC1C,IAAI,KAAK,YAAY,eAAe;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IAC1D,MAAM,IAAI,GAAI,KAA4B,EAAE,IAAI,CAAA;IAChD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAA;AACrG,CAAC,CAAA"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import type { CacheStore, PersonOrder, SyncSummary } from "./cache/store.js";
|
|
2
|
-
import type { AttachmentLink, Chat, ChatCard, ChatKind, Contact, Id, Inbox, Message, MessageHit, Page, PersonCard, Profile, Reactions, WindowedMessage } from "./domain/models.js";
|
|
3
|
-
import {
|
|
2
|
+
import type { AccountSession, AttachmentLink, Chat, ChatCard, ChatKind, Contact, ContactImport, Folder, GroupCard, GroupSettings, Id, Inbox, Message, MessageHit, Page, PersonCard, Pin, Profile, Reactions, WindowedMessage } from "./domain/models.js";
|
|
3
|
+
import { type Wire } from "./protocol/connection.js";
|
|
4
|
+
import { type Payload } from "./protocol/frame.js";
|
|
4
5
|
import { type DiagnosticEvent } from "./runs/events.js";
|
|
5
6
|
import type { SendGuard } from "./sends/guard.js";
|
|
7
|
+
import type { ChatAction } from "./sends/journal.js";
|
|
6
8
|
import { type QrLogin } from "./session/login.js";
|
|
7
9
|
import type { SessionStore } from "./session/store.js";
|
|
8
10
|
export interface MaxClientOptions {
|
|
9
11
|
store: SessionStore;
|
|
10
12
|
timeoutMs?: number;
|
|
11
|
-
/** Injected by tests
|
|
12
|
-
connection?:
|
|
13
|
+
/** Injected by tests, or one through `max serve`; defaults to a real WebSocket connection. */
|
|
14
|
+
connection?: Wire;
|
|
15
|
+
/**
|
|
16
|
+
* Log in without the cache's sync marker, so the answer names every chat rather than what
|
|
17
|
+
* changed. `max serve` needs that: it hands its login to other commands as theirs.
|
|
18
|
+
*/
|
|
19
|
+
fullLogin?: boolean;
|
|
13
20
|
/**
|
|
14
21
|
* Where a protocol note goes. Never stdout: in machine mode that stream carries one JSON value
|
|
15
22
|
* and nothing else.
|
|
@@ -48,9 +55,24 @@ export interface MaxClientOptions {
|
|
|
48
55
|
*/
|
|
49
56
|
export declare class MaxClient {
|
|
50
57
|
#private;
|
|
51
|
-
constructor({ store, timeoutMs, connection, warn, cache, offline, events, sends }: MaxClientOptions);
|
|
58
|
+
constructor({ store, timeoutMs, connection, warn, cache, offline, events, sends, fullLogin, }: MaxClientOptions);
|
|
52
59
|
readonly account: {
|
|
53
|
-
me: () => Profile
|
|
60
|
+
me: () => Promise<Profile>;
|
|
61
|
+
/**
|
|
62
|
+
* Changes the profile everyone sees. **The name goes out whole**: the web client always sends
|
|
63
|
+
* the current first name, so a change to the description alone keeps it from the login.
|
|
64
|
+
*/
|
|
65
|
+
update: (change: ProfileChange) => Promise<Profile>;
|
|
66
|
+
sessions: () => Promise<AccountSession[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Logs every other device out — the owner's phone included — and keeps this one.
|
|
69
|
+
*
|
|
70
|
+
* PyMax reads a replacement token from the answer and the web client reads nothing (`RISK-25`),
|
|
71
|
+
* so both are handled: a token that came back is stored before anything is reported, and then
|
|
72
|
+
* the session is asked for once more, so a MAX that ended this one too says so here rather
|
|
73
|
+
* than on the next command.
|
|
74
|
+
*/
|
|
75
|
+
endOtherSessions: () => Promise<AccountSession[]>;
|
|
54
76
|
};
|
|
55
77
|
/**
|
|
56
78
|
* Obtaining a token rather than using one. The token comes back to the caller, unstored and not yet
|
|
@@ -85,6 +107,38 @@ export declare class MaxClient {
|
|
|
85
107
|
* the difference between an answer and a card of nulls for a chat that does not exist.
|
|
86
108
|
*/
|
|
87
109
|
show: (reference: string) => Promise<ChatCard>;
|
|
110
|
+
/** What a link leads to, without joining it. */
|
|
111
|
+
inspect: (link: string) => Promise<GroupCard>;
|
|
112
|
+
join: (link: string) => Promise<GroupCard>;
|
|
113
|
+
leave: (reference: string) => Promise<ChatChange>;
|
|
114
|
+
/**
|
|
115
|
+
* Not retried, unlike a message: a second attempt with a new `cid` is a second group, and
|
|
116
|
+
* whether MAX deduplicates a creation by `cid` is not measured.
|
|
117
|
+
*/
|
|
118
|
+
create: (title: string, people?: string[]) => Promise<GroupCard>;
|
|
119
|
+
members: {
|
|
120
|
+
add: (reference: string, people: string[], { history }?: {
|
|
121
|
+
history?: boolean;
|
|
122
|
+
}) => Promise<ChatChange>;
|
|
123
|
+
remove: (reference: string, people: string[]) => Promise<ChatChange>;
|
|
124
|
+
};
|
|
125
|
+
admins: {
|
|
126
|
+
add: (reference: string, person: string, rights: AdminRight[]) => Promise<ChatChange>;
|
|
127
|
+
remove: (reference: string, person: string) => Promise<ChatChange>;
|
|
128
|
+
};
|
|
129
|
+
requests: {
|
|
130
|
+
list: (reference: string) => Promise<Contact[]>;
|
|
131
|
+
accept: (reference: string, people: string[]) => Promise<ChatChange>;
|
|
132
|
+
decline: (reference: string, people: string[]) => Promise<ChatChange>;
|
|
133
|
+
};
|
|
134
|
+
update: (reference: string, { title, description }: {
|
|
135
|
+
title?: string;
|
|
136
|
+
description?: string;
|
|
137
|
+
}) => Promise<GroupCard>;
|
|
138
|
+
/** With no changes, reads the settings the login carried; nothing is sent. */
|
|
139
|
+
settings: (reference: string, changes?: Partial<GroupSettings>) => Promise<GroupCard>;
|
|
140
|
+
/** The old link stops working for everyone who has it. */
|
|
141
|
+
resetLink: (reference: string) => Promise<GroupCard>;
|
|
88
142
|
};
|
|
89
143
|
readonly contacts: {
|
|
90
144
|
/**
|
|
@@ -110,6 +164,16 @@ export declare class MaxClient {
|
|
|
110
164
|
* It is also the only thing that could ever prune somebody MAX has stopped returning, which is
|
|
111
165
|
* the second reason it exists.
|
|
112
166
|
*/
|
|
167
|
+
/**
|
|
168
|
+
* Finds whoever MAX has under a phone number. A lookup, not an add: nothing changes on the
|
|
169
|
+
* account. ⚠ The number is never repeated in an error — it is the one field here the sixth
|
|
170
|
+
* constraint is about.
|
|
171
|
+
*/
|
|
172
|
+
lookup: (phone: string) => Promise<Contact>;
|
|
173
|
+
add: (reference: string) => Promise<Contact>;
|
|
174
|
+
remove: (reference: string) => Promise<Contact>;
|
|
175
|
+
/** Uploads phone numbers to MAX — other people's — under the names they were saved with. */
|
|
176
|
+
import: (entries: PhoneBookEntry[]) => Promise<ContactImport>;
|
|
113
177
|
/**
|
|
114
178
|
* One person and the chats we share, **whoever they are** — a group member is as findable as
|
|
115
179
|
* a contact. `NEED-105` decides who `list` lists, not who can be looked up.
|
|
@@ -213,12 +277,54 @@ export declare class MaxClient {
|
|
|
213
277
|
notify?: boolean;
|
|
214
278
|
replyTo?: Id;
|
|
215
279
|
markdown?: boolean;
|
|
280
|
+
files?: string[];
|
|
216
281
|
}) => Promise<Message>;
|
|
282
|
+
/** Puts one emoji reaction on a message; it replaces the one you had. */
|
|
283
|
+
react: (chatId: Id, messageId: Id, emoji: string) => Promise<Reactions>;
|
|
284
|
+
/** Takes your reaction off. Measured 2026-09-24: a second call is answered the same, not refused. */
|
|
285
|
+
unreact: (chatId: Id, messageId: Id) => Promise<Reactions>;
|
|
217
286
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
287
|
+
* Changes the text of one of the owner's own messages. The person may have read it already.
|
|
288
|
+
*
|
|
289
|
+
* **Its attachments are sent back as history gives them**: measured 2026-09-24, an edit with
|
|
290
|
+
* none removes a photo from the message. Refused before asking MAX when the message is not the
|
|
291
|
+
* owner's, is a forward, or carries anything but photos — the web client offers none of those. MAX's own limit is
|
|
292
|
+
* `edit-timeout` from LOGIN, 604800 s when measured; past it MAX refuses and that is the answer.
|
|
293
|
+
* Not retried, like a reaction.
|
|
220
294
|
*/
|
|
221
|
-
|
|
295
|
+
edit: (chatId: Id, messageId: Id, text: string, { markdown }?: {
|
|
296
|
+
markdown?: boolean | undefined;
|
|
297
|
+
}) => Promise<Message>;
|
|
298
|
+
/**
|
|
299
|
+
* Forwards one message into another chat: a new message there, so it goes through `#deliver`
|
|
300
|
+
* — the same `cid`, the same one retry — and counts against `sendsPerHour`.
|
|
301
|
+
*/
|
|
302
|
+
forward: (fromChatId: Id, messageId: Id, toChatId: Id, options?: {
|
|
303
|
+
cid?: number;
|
|
304
|
+
notify?: boolean;
|
|
305
|
+
}) => Promise<Message>;
|
|
306
|
+
/**
|
|
307
|
+
* Pins one message in a chat, or with `null` unpins whatever is pinned — `pinMessageId: 0` is
|
|
308
|
+
* how the web client unpins. No notification unless asked (`NEED-196`). Not retried.
|
|
309
|
+
*
|
|
310
|
+
* **Never in a personal chat**: the web client's dialog class answers `viewerCanPin` with `false`, and
|
|
311
|
+
* MAX refused both in Saved messages and in a dialog with a person (measured 2026-09-24, `FIND-107`).
|
|
312
|
+
* A chat the login did not list is left to MAX. In a group, pin and unpin were measured the same day.
|
|
313
|
+
*/
|
|
314
|
+
pin: (chatId: Id, messageId: Id | null, { notify }?: {
|
|
315
|
+
notify?: boolean | undefined;
|
|
316
|
+
}) => Promise<Pin>;
|
|
317
|
+
};
|
|
318
|
+
readonly folders: {
|
|
319
|
+
list: () => Promise<Folder[]>;
|
|
320
|
+
create: (title: string, chats?: string[]) => Promise<Folder>;
|
|
321
|
+
/**
|
|
322
|
+
* **The folder goes back whole**, as the web client sends it: an edit that left out the chats
|
|
323
|
+
* would empty the folder. What MAX keeps for itself — `sourceId`, `updateTime` — is not sent.
|
|
324
|
+
*/
|
|
325
|
+
update: (reference: string, change: FolderChange) => Promise<Folder>;
|
|
326
|
+
/** The folder only — its chats stay where they are. */
|
|
327
|
+
delete: (reference: string) => Promise<Folder>;
|
|
222
328
|
};
|
|
223
329
|
readonly inbox: {
|
|
224
330
|
/**
|
|
@@ -248,6 +354,38 @@ export declare class MaxClient {
|
|
|
248
354
|
limit: number;
|
|
249
355
|
}) => Promise<Inbox>;
|
|
250
356
|
};
|
|
357
|
+
/**
|
|
358
|
+
* **For a connection that stays open** (`max serve`). A one-shot command never calls these.
|
|
359
|
+
*/
|
|
360
|
+
readonly live: {
|
|
361
|
+
/** The keep-alive the web client sends every 30 s; `interactive` is never true here. */
|
|
362
|
+
ping: () => Promise<void>;
|
|
363
|
+
/**
|
|
364
|
+
* The login this connection holds, kept current from what MAX pushes — `max serve` hands it to
|
|
365
|
+
* a command as that command's own login.
|
|
366
|
+
*/
|
|
367
|
+
snapshot: () => Payload;
|
|
368
|
+
/**
|
|
369
|
+
* Keeps the snapshot current from one push. **`false` means it can no longer be trusted** and
|
|
370
|
+
* the server stops handing it out until it has logged in again. What web.max.ru does with each
|
|
371
|
+
* push (bundle read 2026-09-24) is what is copied here:
|
|
372
|
+
* - 128, a new message: the chat's last message and time move; unread goes up for somebody
|
|
373
|
+
* else's message and to zero for our own, as the app does once you have written in a chat.
|
|
374
|
+
* - 130, read up to a point: when we are the reader, the chat's unread becomes `unread`;
|
|
375
|
+
* somebody else reading changes nothing here.
|
|
376
|
+
* - 135, a chat changed: MAX sends the whole chat, and it replaces ours.
|
|
377
|
+
* Anything else that touches the chats — a deletion — cannot be followed.
|
|
378
|
+
*/
|
|
379
|
+
patch: (opcode: number, payload: Payload) => boolean;
|
|
380
|
+
/** One request from a command, on this connection. The server decides which ones may pass. */
|
|
381
|
+
forward: (opcode: number, payload: Payload) => Promise<Payload>;
|
|
382
|
+
/**
|
|
383
|
+
* A message MAX pushed (opcode 128) as the same shape `messages list` prints, with its chat's
|
|
384
|
+
* name — so whoever reads `max watch` gets one schema, and no MAX type crosses this file.
|
|
385
|
+
* Anything else pushed answers `undefined`.
|
|
386
|
+
*/
|
|
387
|
+
message: (opcode: number, payload: Payload) => Promise<MessageHit | undefined>;
|
|
388
|
+
};
|
|
251
389
|
/**
|
|
252
390
|
* Opens the connection and logs in with the stored token, or with one offered for trial.
|
|
253
391
|
*
|
|
@@ -262,6 +400,21 @@ export declare class MaxClient {
|
|
|
262
400
|
}): Promise<void>;
|
|
263
401
|
close(): Promise<void>;
|
|
264
402
|
}
|
|
403
|
+
/** What a change to a chat answers when MAX sends back no chat of its own. */
|
|
404
|
+
export interface ChatChange {
|
|
405
|
+
chatId: Id;
|
|
406
|
+
action: ChatAction;
|
|
407
|
+
people: Id[];
|
|
408
|
+
chat: GroupCard | null;
|
|
409
|
+
}
|
|
410
|
+
export type AdminRight = "members" | "admins" | "info" | "pin" | "post" | "edit" | "delete";
|
|
411
|
+
/** PyMax `AdminPermission`; the sum is what MAX takes. */
|
|
412
|
+
export declare const ADMIN_RIGHTS: Record<AdminRight, number>;
|
|
413
|
+
/**
|
|
414
|
+
* A private link goes as `join/<token>`, whatever came before it, as PyMax sends it and as
|
|
415
|
+
* measured. A public one (`https://max.ru/<name>`) goes whole, which is PyMax's claim only.
|
|
416
|
+
*/
|
|
417
|
+
export declare const wireLink: (link: string) => string;
|
|
265
418
|
/** What every listing takes. Absent means "the caller did not say", never a number chosen here. */
|
|
266
419
|
export interface PageRequest {
|
|
267
420
|
order?: PersonOrder;
|
|
@@ -279,4 +432,20 @@ export interface PageRequest {
|
|
|
279
432
|
* `undefined` for anything that is not a message id.
|
|
280
433
|
*/
|
|
281
434
|
export declare const timeOfMessageId: (id: Id) => number | undefined;
|
|
435
|
+
export interface ProfileChange {
|
|
436
|
+
firstName?: string;
|
|
437
|
+
lastName?: string;
|
|
438
|
+
description?: string;
|
|
439
|
+
}
|
|
440
|
+
export interface FolderChange {
|
|
441
|
+
title?: string;
|
|
442
|
+
add?: string[];
|
|
443
|
+
remove?: string[];
|
|
444
|
+
}
|
|
445
|
+
export interface PhoneBookEntry {
|
|
446
|
+
phone: string;
|
|
447
|
+
name: string;
|
|
448
|
+
}
|
|
449
|
+
/** `+` and digits, as the lookup was measured. ⚠ The refusal never repeats what was typed. */
|
|
450
|
+
export declare const wirePhone: (typed: string) => string;
|
|
282
451
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|