@leemour/max-cli 0.10.0 → 0.12.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 +25 -4
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +10 -4
- package/dist/cache/index.js.map +1 -1
- package/dist/client.d.ts +35 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +178 -44
- package/dist/client.js.map +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +6 -2
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cache.d.ts.map +1 -1
- package/dist/commands/cache.js +6 -5
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/chats.js +2 -2
- package/dist/commands/chats.js.map +1 -1
- package/dist/commands/complete.d.ts.map +1 -1
- package/dist/commands/complete.js +28 -22
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +5 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts +4 -0
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +6 -14
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/doctor.js +51 -39
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/mcp.js +3 -3
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +6 -4
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +29 -23
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/recipients.d.ts.map +1 -1
- package/dist/commands/recipients.js +25 -17
- package/dist/commands/recipients.js.map +1 -1
- package/dist/commands/sends.d.ts.map +1 -1
- package/dist/commands/sends.js +8 -6
- package/dist/commands/sends.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +43 -35
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +6 -10
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/watch.d.ts +17 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +73 -38
- package/dist/commands/watch.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -2
- package/dist/config.js.map +1 -1
- package/dist/diagnose.d.ts +4 -3
- package/dist/diagnose.d.ts.map +1 -1
- package/dist/diagnose.js +4 -4
- package/dist/diagnose.js.map +1 -1
- package/dist/domain/models.d.ts +20 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/models.js.map +1 -1
- package/dist/download.d.ts +22 -3
- package/dist/download.d.ts.map +1 -1
- package/dist/download.js +133 -27
- package/dist/download.js.map +1 -1
- package/dist/export.d.ts +3 -0
- package/dist/export.d.ts.map +1 -1
- package/dist/export.js +13 -9
- package/dist/export.js.map +1 -1
- package/dist/generated/client.generated.d.ts +9 -0
- package/dist/generated/client.generated.d.ts.map +1 -1
- package/dist/generated/client.generated.js +9 -0
- package/dist/generated/client.generated.js.map +1 -1
- package/dist/generated/opcodes.generated.d.ts +3 -0
- package/dist/generated/opcodes.generated.d.ts.map +1 -1
- package/dist/generated/opcodes.generated.js +3 -0
- package/dist/generated/opcodes.generated.js.map +1 -1
- package/dist/generated/operations.generated.d.ts +20 -0
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/generated/operations.generated.js +6 -0
- package/dist/generated/operations.generated.js.map +1 -1
- package/dist/mcp/confirm.d.ts +21 -9
- package/dist/mcp/confirm.d.ts.map +1 -1
- package/dist/mcp/confirm.js +55 -29
- package/dist/mcp/confirm.js.map +1 -1
- package/dist/mcp/instructions.js +3 -3
- package/dist/mcp/instructions.js.map +1 -1
- package/dist/mcp/prompts.d.ts +7 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +45 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +12 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +42 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +4 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +143 -15
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +24 -2
- package/dist/output.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +51 -5
- package/dist/program.js.map +1 -1
- package/dist/protocol/connection.d.ts +2 -0
- package/dist/protocol/connection.d.ts.map +1 -1
- package/dist/protocol/connection.js +27 -5
- package/dist/protocol/connection.js.map +1 -1
- package/dist/protocol/frame.d.ts +2 -0
- package/dist/protocol/frame.d.ts.map +1 -1
- package/dist/protocol/frame.js +3 -1
- package/dist/protocol/frame.js.map +1 -1
- package/dist/protocol/lz4.js +8 -5
- package/dist/protocol/lz4.js.map +1 -1
- package/dist/rendering/messages.js +9 -10
- package/dist/rendering/messages.js.map +1 -1
- package/dist/report.d.ts +10 -6
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +45 -11
- package/dist/report.js.map +1 -1
- package/dist/resolve.d.ts +4 -3
- package/dist/resolve.d.ts.map +1 -1
- package/dist/resolve.js +9 -10
- package/dist/resolve.js.map +1 -1
- package/dist/runs/recording.d.ts +1 -0
- package/dist/runs/recording.d.ts.map +1 -1
- package/dist/runs/recording.js +13 -0
- package/dist/runs/recording.js.map +1 -1
- package/dist/sends/guard.d.ts +35 -4
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +128 -28
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/journal.d.ts +17 -3
- package/dist/sends/journal.d.ts.map +1 -1
- package/dist/sends/journal.js +62 -2
- package/dist/sends/journal.js.map +1 -1
- package/dist/sends/recipients.d.ts +3 -1
- package/dist/sends/recipients.d.ts.map +1 -1
- package/dist/sends/recipients.js +7 -2
- package/dist/sends/recipients.js.map +1 -1
- package/dist/server/lines.d.ts +8 -2
- package/dist/server/lines.d.ts.map +1 -1
- package/dist/server/lines.js +13 -2
- package/dist/server/lines.js.map +1 -1
- package/dist/server/server-connection.d.ts +9 -6
- package/dist/server/server-connection.d.ts.map +1 -1
- package/dist/server/server-connection.js +16 -7
- package/dist/server/server-connection.js.map +1 -1
- package/dist/server/server.d.ts +11 -4
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +132 -20
- package/dist/server/server.js.map +1 -1
- package/dist/server/start.d.ts +2 -0
- package/dist/server/start.d.ts.map +1 -1
- package/dist/server/start.js +8 -3
- package/dist/server/start.js.map +1 -1
- package/dist/session/handshake.d.ts +12 -1
- package/dist/session/handshake.d.ts.map +1 -1
- package/dist/session/handshake.js +4 -2
- package/dist/session/handshake.js.map +1 -1
- package/dist/session/prompt.d.ts.map +1 -1
- package/dist/session/prompt.js +7 -1
- package/dist/session/prompt.js.map +1 -1
- package/dist/session/store.d.ts +9 -2
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +19 -4
- package/dist/session/store.js.map +1 -1
- package/dist/spec/define.d.ts +12 -0
- package/dist/spec/define.d.ts.map +1 -1
- package/dist/spec/define.js.map +1 -1
- package/dist/spec/guards.d.ts +16 -0
- package/dist/spec/guards.d.ts.map +1 -0
- package/dist/spec/guards.js +30 -0
- package/dist/spec/guards.js.map +1 -0
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +6 -0
- package/dist/spec/index.js.map +1 -1
- package/dist/spec/operations/account.d.ts.map +1 -1
- package/dist/spec/operations/account.js +3 -0
- package/dist/spec/operations/account.js.map +1 -1
- package/dist/spec/operations/assets.d.ts +10 -0
- package/dist/spec/operations/assets.d.ts.map +1 -0
- package/dist/spec/operations/assets.js +20 -0
- package/dist/spec/operations/assets.js.map +1 -0
- package/dist/spec/operations/attachments.d.ts.map +1 -1
- package/dist/spec/operations/attachments.js +2 -0
- package/dist/spec/operations/attachments.js.map +1 -1
- package/dist/spec/operations/banners.d.ts +7 -0
- package/dist/spec/operations/banners.d.ts.map +1 -0
- package/dist/spec/operations/banners.js +16 -0
- package/dist/spec/operations/banners.js.map +1 -0
- package/dist/spec/operations/calls.d.ts +8 -0
- package/dist/spec/operations/calls.d.ts.map +1 -0
- package/dist/spec/operations/calls.js +18 -0
- package/dist/spec/operations/calls.js.map +1 -0
- package/dist/spec/operations/chats.d.ts.map +1 -1
- package/dist/spec/operations/chats.js +46 -0
- package/dist/spec/operations/chats.js.map +1 -1
- package/dist/spec/operations/contacts.d.ts.map +1 -1
- package/dist/spec/operations/contacts.js +8 -0
- package/dist/spec/operations/contacts.js.map +1 -1
- package/dist/spec/operations/folders.d.ts.map +1 -1
- package/dist/spec/operations/folders.js +5 -0
- package/dist/spec/operations/folders.js.map +1 -1
- package/dist/spec/operations/login.d.ts.map +1 -1
- package/dist/spec/operations/login.js +6 -0
- package/dist/spec/operations/login.js.map +1 -1
- package/dist/spec/operations/messages.d.ts.map +1 -1
- package/dist/spec/operations/messages.js +50 -0
- package/dist/spec/operations/messages.js.map +1 -1
- package/dist/spec/operations/session.d.ts +5 -1
- package/dist/spec/operations/session.d.ts.map +1 -1
- package/dist/spec/operations/session.js +9 -1
- package/dist/spec/operations/session.js.map +1 -1
- package/dist/spec/operations/uploads.d.ts.map +1 -1
- package/dist/spec/operations/uploads.js +2 -0
- package/dist/spec/operations/uploads.js.map +1 -1
- package/dist/transcribe/index.d.ts.map +1 -1
- package/dist/transcribe/index.js +4 -1
- package/dist/transcribe/index.js.map +1 -1
- package/dist/transcribe/install.d.ts +3 -1
- package/dist/transcribe/install.d.ts.map +1 -1
- package/dist/transcribe/install.js +24 -1
- package/dist/transcribe/install.js.map +1 -1
- package/dist/upload.d.ts +3 -1
- package/dist/upload.d.ts.map +1 -1
- package/dist/upload.js +34 -4
- package/dist/upload.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +11 -11
- package/skills/max-cli/SKILL.md +6 -2
- package/dist/testing/mock-max.d.ts +0 -49
- package/dist/testing/mock-max.d.ts.map +0 -1
- package/dist/testing/mock-max.js +0 -80
- package/dist/testing/mock-max.js.map +0 -1
- package/dist/testing/sandbox.d.ts +0 -2
- package/dist/testing/sandbox.d.ts.map +0 -1
- package/dist/testing/sandbox.js +0 -36
- package/dist/testing/sandbox.js.map +0 -1
- package/dist/testing/unscripted.d.ts +0 -2
- package/dist/testing/unscripted.d.ts.map +0 -1
- package/dist/testing/unscripted.js +0 -18
- package/dist/testing/unscripted.js.map +0 -1
package/dist/session/store.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type KeyringStore } from "@leemour/cli-core";
|
|
1
|
+
import { type CredentialSource, type KeyringStore } from "@leemour/cli-core";
|
|
2
2
|
/**
|
|
3
3
|
* What a MAX session actually is: a token, and an identity for this installation.
|
|
4
4
|
*
|
|
@@ -44,6 +44,8 @@ export declare class SessionStore {
|
|
|
44
44
|
constructor({ profile, env, keyring, configDir, stateDir }?: SessionStoreOptions);
|
|
45
45
|
/** `undefined` means nobody has logged in on this profile. */
|
|
46
46
|
readToken(): string | undefined;
|
|
47
|
+
/** Where `readToken` found it: `MAX_TOKEN`, the keyring, or the file that stands in for one. */
|
|
48
|
+
tokenSource(): CredentialSource | undefined;
|
|
47
49
|
writeToken(token: string): void;
|
|
48
50
|
/**
|
|
49
51
|
* Reads the state, inventing a device identity the first time and keeping it thereafter.
|
|
@@ -59,7 +61,12 @@ export declare class SessionStore {
|
|
|
59
61
|
writeState(state: SessionState): void;
|
|
60
62
|
/** Forgets everything about this profile. Returns whether there was a token to forget. */
|
|
61
63
|
forget(): boolean;
|
|
62
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* Where `max serve` listens for this profile. Beside the state file, so a sandbox moves both. On
|
|
66
|
+
* Windows a socket cannot be a file, so it is a named pipe named after the state directory.
|
|
67
|
+
*/
|
|
63
68
|
socketPath(): string;
|
|
69
|
+
/** A file of the server's beside the state file: `<profile>.sock.refused`, `<profile>.serve.log`. */
|
|
70
|
+
serverFile(suffix: string): string;
|
|
64
71
|
}
|
|
65
72
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/session/store.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/session/store.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAIlB,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oGAAoG;IACpG,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,UAAqE,CAAA;AAEjG,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,UAAW,YAAY,mBAAqB,MAAM,GAAG,SACqC,CAAA;AAEvH,eAAO,MAAM,gBAAgB,UAAW,YAAY,mBAAqB,YAIxE,CAAA;AAED,eAAO,MAAM,iBAAiB,kDAAmD,YAAY,KAAG,YAAqB,CAAA;AAErH,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAID,qBAAa,YAAY;;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAIxB,YAAY,EAAE,OAAmB,EAAE,GAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAE,mBAAwB,EAa7G;IAED,8DAA8D;IAC9D,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,gGAAgG;IAChG,WAAW,IAAI,gBAAgB,GAAG,SAAS,CAE1C;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9B;IAED;;;;;;;OAOG;IACH,SAAS,IAAI,YAAY,CAaxB;IAED,kHAAkH;IAClH,WAAW,IAAI,OAAO,CAOrB;IAED,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAEpC;IAED,0FAA0F;IAC1F,MAAM,IAAI,OAAO,CAShB;IAED;;;OAGG;IACH,UAAU,IAAI,MAAM,CAMnB;IAED,qGAAqG;IACrG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjC;CAKF"}
|
package/dist/session/store.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { Credentials, pathsAreOverridden, resolvePaths, writeSecurely } from "@leemour/cli-core";
|
|
4
|
+
import { Credentials, pathsAreOverridden, resolvePaths, writeSecurely, } from "@leemour/cli-core";
|
|
5
5
|
/**
|
|
6
6
|
* **How long a profile stays out after each refusal in a row** (owner, `NEED-265`). In PyMax a
|
|
7
7
|
* login retried after the limit error kept the account locked (PyMax #106), so the wait grows.
|
|
@@ -38,6 +38,10 @@ export class SessionStore {
|
|
|
38
38
|
readToken() {
|
|
39
39
|
return this.#credentials.read(this.profile)?.secret;
|
|
40
40
|
}
|
|
41
|
+
/** Where `readToken` found it: `MAX_TOKEN`, the keyring, or the file that stands in for one. */
|
|
42
|
+
tokenSource() {
|
|
43
|
+
return this.#credentials.read(this.profile)?.source;
|
|
44
|
+
}
|
|
41
45
|
writeToken(token) {
|
|
42
46
|
this.#credentials.write(this.profile, token);
|
|
43
47
|
}
|
|
@@ -88,9 +92,20 @@ export class SessionStore {
|
|
|
88
92
|
}
|
|
89
93
|
return had;
|
|
90
94
|
}
|
|
91
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* Where `max serve` listens for this profile. Beside the state file, so a sandbox moves both. On
|
|
97
|
+
* Windows a socket cannot be a file, so it is a named pipe named after the state directory.
|
|
98
|
+
*/
|
|
92
99
|
socketPath() {
|
|
93
|
-
|
|
100
|
+
if (process.platform === "win32") {
|
|
101
|
+
const directory = createHash("sha256").update(this.#stateDir).digest("hex").slice(0, 16);
|
|
102
|
+
return `\\\\.\\pipe\\max-cli-${directory}-${this.profile}`;
|
|
103
|
+
}
|
|
104
|
+
return this.serverFile(".sock");
|
|
105
|
+
}
|
|
106
|
+
/** A file of the server's beside the state file: `<profile>.sock.refused`, `<profile>.serve.log`. */
|
|
107
|
+
serverFile(suffix) {
|
|
108
|
+
return join(this.#stateDir, "profiles", `${this.profile}${suffix}`);
|
|
94
109
|
}
|
|
95
110
|
#statePath() {
|
|
96
111
|
return join(this.#stateDir, "profiles", `${this.profile}.json`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/session/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/session/store.ts"],"names":[],"mappings":"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"}
|
package/dist/spec/define.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
2
|
import type { Payload } from "../protocol/frame.js";
|
|
3
|
+
import type { SendEntry } from "../sends/journal.js";
|
|
3
4
|
/**
|
|
4
5
|
* How much we actually know about a shape.
|
|
5
6
|
*
|
|
@@ -47,8 +48,19 @@ export interface Operation<TRequest extends v.GenericSchema = v.GenericSchema, T
|
|
|
47
48
|
readonly request: TRequest;
|
|
48
49
|
/** Loose: a response that gained a field must not break a command (§29). */
|
|
49
50
|
readonly response: TResponse;
|
|
51
|
+
/**
|
|
52
|
+
* What the send guard is asked before this goes to MAX, read from the request as it goes on the
|
|
53
|
+
* wire — or `null` for an operation nobody else sees. Required, so a new operation cannot reach
|
|
54
|
+
* `max serve`'s socket unguarded because somebody forgot to say it writes.
|
|
55
|
+
*/
|
|
56
|
+
readonly guard: ((request: Payload) => Guarded) | null;
|
|
50
57
|
readonly provenance: Provenance;
|
|
51
58
|
}
|
|
59
|
+
/** One guarded write as the journal will record it; the outcome comes after. */
|
|
60
|
+
export type Guarded = Omit<SendEntry, "at" | "profile" | "outcome" | "errorCode" | "kind"> & Required<Pick<SendEntry, "kind">> & {
|
|
61
|
+
/** Who a new group or an added member is: the recipient list is asked about each. Not journaled. */
|
|
62
|
+
personIds?: string[];
|
|
63
|
+
};
|
|
52
64
|
/**
|
|
53
65
|
* A number we know and will not send.
|
|
54
66
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/spec/define.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/spec/define.ts"],"names":[],"mappings":"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"}
|
package/dist/spec/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/spec/define.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/spec/define.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AA4F5B,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,SAAuD,EACvB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE,CAAC,CAAA;AAE1E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAsC,EAAe,EAAE,CAAC,CAAC;IACrF,IAAI,EAAE,aAAa;IACnB,GAAG,WAAW;CACf,CAAC,CAAA;AAUF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,SAAqB,EACrB,KAA4B,EACnB,EAAE;IACX,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACpD,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,MAAiB,CAAA;IAEnD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;SAClE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAChC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,SAAS,CAAC,IAAI,gCAAgC,MAAM,EAAE,CAAC,CAAA;AACnG,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,MAAuB,EAAE,KAAc,EAAE,MAAuC,EAAE,EAAE;IACzG,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAA;IAC3E,MAAM,QAAQ,GAAI,MAAM,CAAC,OAA6B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAC/G,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5F,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAyB,EAAU,EAAE;IAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAuB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAA;IAChF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAA;AAC1E,CAAC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Payload } from "../protocol/frame.js";
|
|
2
|
+
/**
|
|
3
|
+
* The chat a guarded request goes to. **Missing is a refusal, never `null`**: a `null` chat skips
|
|
4
|
+
* the recipient list, so only the shapes that create or join a chat may have one.
|
|
5
|
+
*/
|
|
6
|
+
export declare const chatOf: (request: Payload, field?: string) => string;
|
|
7
|
+
export declare const messageOf: (request: Payload, field?: string) => {
|
|
8
|
+
messageId?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const objectOf: (value: unknown) => Payload;
|
|
11
|
+
export declare const countOf: (value: unknown) => number;
|
|
12
|
+
/** The people a request puts into a chat; one that cannot be read as an id is refused. */
|
|
13
|
+
export declare const peopleOf: (value: unknown) => string[];
|
|
14
|
+
/** A request that could be read as two different changes is refused rather than guarded as one of them. */
|
|
15
|
+
export declare const ambiguous: (operation: string) => never;
|
|
16
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/spec/guards.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEzD;;;GAGG;AACH,eAAO,MAAM,MAAM,YAAa,OAAO,qBAAqB,MAI3D,CAAA;AAED,eAAO,MAAM,SAAS,YAAa,OAAO,qBAAwB;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAGrF,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,OACsD,CAAA;AAEhG,eAAO,MAAM,OAAO,UAAW,OAAO,KAAG,MAAmD,CAAA;AAE5F,0FAA0F;AAC1F,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,MAAM,EAM5C,CAAA;AAEJ,2GAA2G;AAC3G,eAAO,MAAM,SAAS,cAAe,MAAM,KAAG,KAE7C,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CliError } from "@leemour/cli-core";
|
|
2
|
+
import { asId } from "../protocol/frame.js";
|
|
3
|
+
/**
|
|
4
|
+
* The chat a guarded request goes to. **Missing is a refusal, never `null`**: a `null` chat skips
|
|
5
|
+
* the recipient list, so only the shapes that create or join a chat may have one.
|
|
6
|
+
*/
|
|
7
|
+
export const chatOf = (request, field = "chatId") => {
|
|
8
|
+
const chatId = asId(request[field]);
|
|
9
|
+
if (chatId === undefined)
|
|
10
|
+
throw new CliError("validation_error", `a guarded request without its ${field}`);
|
|
11
|
+
return chatId;
|
|
12
|
+
};
|
|
13
|
+
export const messageOf = (request, field = "messageId") => {
|
|
14
|
+
const messageId = asId(request[field]);
|
|
15
|
+
return messageId === undefined ? {} : { messageId };
|
|
16
|
+
};
|
|
17
|
+
export const objectOf = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
|
|
18
|
+
export const countOf = (value) => (Array.isArray(value) ? value.length : 0);
|
|
19
|
+
/** The people a request puts into a chat; one that cannot be read as an id is refused. */
|
|
20
|
+
export const peopleOf = (value) => (Array.isArray(value) ? value : []).map((one) => {
|
|
21
|
+
const person = asId(one);
|
|
22
|
+
if (person === undefined)
|
|
23
|
+
throw new CliError("validation_error", "a guarded request with a person that is not an id");
|
|
24
|
+
return person;
|
|
25
|
+
});
|
|
26
|
+
/** A request that could be read as two different changes is refused rather than guarded as one of them. */
|
|
27
|
+
export const ambiguous = (operation) => {
|
|
28
|
+
throw new CliError("validation_error", `${operation}: one change per request`);
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/spec/guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAgB,MAAM,sBAAsB,CAAA;AAEzD;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAE,KAAK,GAAG,QAAQ,EAAU,EAAE;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;IACnC,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,iCAAiC,KAAK,EAAE,CAAC,CAAA;IAC1G,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,KAAK,GAAG,WAAW,EAA0B,EAAE;IACzF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;IACtC,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAW,EAAE,CAClD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAiB,CAAC,CAAC,CAAC,EAAE,CAAA;AAEhG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE5F,0FAA0F;AAC1F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAY,EAAE,CACnD,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IACxB,IAAI,MAAM,KAAK,SAAS;QACtB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,mDAAmD,CAAC,CAAA;IAC7F,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAA;AAEJ,2GAA2G;AAC3G,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAS,EAAE;IACpD,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,SAAS,0BAA0B,CAAC,CAAA;AAChF,CAAC,CAAA"}
|
package/dist/spec/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spec/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spec/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAwChE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,EAAE,SAAS,KAAK,EA+ChC,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EAA2E,CAAA;AAEtH,eAAO,MAAM,YAAY,EAAE,SAAS,WAAW,EAE9C,CAAA"}
|
package/dist/spec/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { accountCloseSessions, accountSessions, accountUpdate } from "./operations/account.js";
|
|
2
|
+
import { assetsUpdate } from "./operations/assets.js";
|
|
2
3
|
import { attachmentsFile, attachmentsVideo } from "./operations/attachments.js";
|
|
4
|
+
import { bannersList } from "./operations/banners.js";
|
|
5
|
+
import { callsHistory } from "./operations/calls.js";
|
|
3
6
|
import { chatDelete, chatsHistory, chatsJoin, chatsLeave, chatsLinkInfo, chatsList, chatsMark, chatsMembers, chatsUpdate, chatsUpdateMembers, } from "./operations/chats.js";
|
|
4
7
|
import { contactsByPhone, contactsImport, contactsInfo, contactsUpdate, unidentified36 } from "./operations/contacts.js";
|
|
5
8
|
import { foldersDelete, foldersList, foldersUpdate } from "./operations/folders.js";
|
|
@@ -41,6 +44,9 @@ export const spec = [
|
|
|
41
44
|
foldersList,
|
|
42
45
|
foldersUpdate,
|
|
43
46
|
foldersDelete,
|
|
47
|
+
bannersList,
|
|
48
|
+
callsHistory,
|
|
49
|
+
assetsUpdate,
|
|
44
50
|
chatsHistory,
|
|
45
51
|
chatsMark,
|
|
46
52
|
chatsList,
|
package/dist/spec/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/spec/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EACL,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACxH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EACL,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EACf,SAAS,GACV,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACpG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAE5B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAqB;IACpC,WAAW;IACX,YAAY;IACZ,WAAW;IACX,UAAU;IACV,MAAM;IACN,cAAc;IACd,aAAa;IACb,SAAS;IACT,SAAS;IACT,eAAe;IACf,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,eAAe;IACf,cAAc;IACd,cAAc;IACd,cAAc;IACd,aAAa;IACb,eAAe;IACf,oBAAoB;IACpB,WAAW;IACX,aAAa;IACb,aAAa;IACb,YAAY;IACZ,SAAS;IACT,SAAS;IACT,aAAa;IACb,SAAS;IACT,UAAU;IACV,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,WAAW;CACZ,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAyB,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAsB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;AAEtH,MAAM,CAAC,MAAM,YAAY,GAA2B,IAAI,CAAC,MAAM,CAC7D,CAAC,KAAK,EAAwB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAC9D,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/spec/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACxH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EACL,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EACf,SAAS,GACV,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACpG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAE5B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,IAAI,GAAqB;IACpC,WAAW;IACX,YAAY;IACZ,WAAW;IACX,UAAU;IACV,MAAM;IACN,cAAc;IACd,aAAa;IACb,SAAS;IACT,SAAS;IACT,eAAe;IACf,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,eAAe;IACf,cAAc;IACd,cAAc;IACd,cAAc;IACd,aAAa;IACb,eAAe;IACf,oBAAoB;IACpB,WAAW;IACX,aAAa;IACb,aAAa;IACb,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,SAAS;IACT,aAAa;IACb,SAAS;IACT,UAAU;IACV,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,WAAW;CACZ,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAyB,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAsB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;AAEtH,MAAM,CAAC,MAAM,YAAY,GAA2B,IAAI,CAAC,MAAM,CAC7D,CAAC,KAAK,EAAwB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAC9D,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAK5B,eAAO,MAAM,aAAa;IAMtB,kHAAkH;;;;;;
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAK5B,eAAO,MAAM,aAAa;IAMtB,kHAAkH;;;;;;cAkBpH,CAAA;AAEF,eAAO,MAAM,eAAe;;cAgB1B,CAAA;AAEF,eAAO,MAAM,oBAAoB;IAO7B;;;OAGG;;cAUL,CAAA"}
|
|
@@ -13,6 +13,7 @@ export const accountUpdate = defineOperation({
|
|
|
13
13
|
description: v.optional(v.string()),
|
|
14
14
|
}),
|
|
15
15
|
response: v.looseObject({ profile: v.optional(v.looseObject({})) }),
|
|
16
|
+
guard: () => ({ chatId: null, kind: "account", action: "profile" }),
|
|
16
17
|
provenance: {
|
|
17
18
|
confidence: "measured",
|
|
18
19
|
sources: [
|
|
@@ -31,6 +32,7 @@ export const accountSessions = defineOperation({
|
|
|
31
32
|
auth: true,
|
|
32
33
|
request: v.strictObject({}),
|
|
33
34
|
response: v.looseObject({ sessions: v.optional(v.array(v.looseObject({}))) }),
|
|
35
|
+
guard: null,
|
|
34
36
|
provenance: {
|
|
35
37
|
confidence: "measured",
|
|
36
38
|
sources: [
|
|
@@ -53,6 +55,7 @@ export const accountCloseSessions = defineOperation({
|
|
|
53
55
|
*/
|
|
54
56
|
token: v.optional(v.string()),
|
|
55
57
|
}),
|
|
58
|
+
guard: () => ({ chatId: null, kind: "account", action: "sessions-end" }),
|
|
56
59
|
provenance: {
|
|
57
60
|
confidence: "confirmed",
|
|
58
61
|
sources: [webClient, "PyMax 53103f0 `close_all_sessions`"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/spec/operations/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,SAAS,GAAG,uEAAuE,CAAA;AAEzF,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;IAC3C,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC;QACtB,kHAAkH;QAClH,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7C,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACpC,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACnE,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE;YACP,4IAA4I;YAC5I,SAAS;YACT,gCAAgC;YAChC,2DAA2D;SAC5D;QACD,KAAK,EACH,6KAA6K;KAChL;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;IAC7C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE;YACP,uHAAuH;YACvH,SAAS;YACT,8BAA8B;SAC/B;KACF;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC;IAClD,IAAI,EAAE,uBAAuB;IAC7B,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;QACtB;;;WAGG;QACH,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B,CAAC;IACF,UAAU,EAAE;QACV,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE,CAAC,SAAS,EAAE,oCAAoC,CAAC;QAC1D,KAAK,EACH,yIAAyI;KAC5I;CACF,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/spec/operations/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,SAAS,GAAG,uEAAuE,CAAA;AAEzF,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;IAC3C,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC;QACtB,kHAAkH;QAClH,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7C,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACpC,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACnE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACnE,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE;YACP,4IAA4I;YAC5I,SAAS;YACT,gCAAgC;YAChC,2DAA2D;SAC5D;QACD,KAAK,EACH,6KAA6K;KAChL;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;IAC7C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,KAAK,EAAE,IAAI;IACX,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE;YACP,uHAAuH;YACvH,SAAS;YACT,8BAA8B;SAC/B;KACF;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC;IAClD,IAAI,EAAE,uBAAuB;IAC7B,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;QACtB;;;WAGG;QACH,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B,CAAC;IACF,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACxE,UAAU,EAAE;QACV,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE,CAAC,SAAS,EAAE,oCAAoC,CAAC;QAC1D,KAAK,EACH,yIAAyI;KAC5I;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const ASSET_TYPES: readonly ["STICKER", "FAVORITE_STICKER", "REACTION", "ANIMOJI_SET"];
|
|
3
|
+
export declare const assetsUpdate: import("../define.js").Operation<v.StrictObjectSchema<{
|
|
4
|
+
readonly type: v.PicklistSchema<readonly ["STICKER", "FAVORITE_STICKER", "REACTION", "ANIMOJI_SET"], undefined>;
|
|
5
|
+
readonly sync: v.NumberSchema<undefined>;
|
|
6
|
+
}, undefined>, v.LooseObjectSchema<{
|
|
7
|
+
readonly sync: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
8
|
+
readonly sections: v.OptionalSchema<v.ArraySchema<v.UnknownSchema, undefined>, undefined>;
|
|
9
|
+
}, undefined>>;
|
|
10
|
+
//# sourceMappingURL=assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAM5B,eAAO,MAAM,WAAW,YAAI,SAAS,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,CAAU,CAAA;AAE9F,eAAO,MAAM,YAAY;;;;;;cAavB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { defineOperation } from "../define.js";
|
|
3
|
+
/** Sent by `max serve` after each login, as a web tab does (`MAX-52`); the answer is kept only for its sync value. */
|
|
4
|
+
const recorded = "web.max.ru tab, recorded 2026-09-25 (`docs_ai/captures/2026-09-25-web-tab-2.jsonl`)";
|
|
5
|
+
export const ASSET_TYPES = ["STICKER", "FAVORITE_STICKER", "REACTION", "ANIMOJI_SET"];
|
|
6
|
+
export const assetsUpdate = defineOperation({
|
|
7
|
+
name: "assets.update",
|
|
8
|
+
constant: "ASSETS_UPDATE",
|
|
9
|
+
opcode: 27,
|
|
10
|
+
auth: true,
|
|
11
|
+
guard: null,
|
|
12
|
+
request: v.strictObject({ type: v.picklist(ASSET_TYPES), sync: v.number() }),
|
|
13
|
+
response: v.looseObject({ sync: v.optional(v.number()), sections: v.optional(v.array(v.unknown())) }),
|
|
14
|
+
provenance: {
|
|
15
|
+
confidence: "observed",
|
|
16
|
+
sources: [recorded, "PyMax 53103f0 names it `ASSETS_UPDATE` and never sends it"],
|
|
17
|
+
notes: "The tab sends the four types in this order, each with the `sync` its previous answer carried.",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/spec/operations/assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,sHAAsH;AACtH,MAAM,QAAQ,GAAG,qFAAqF,CAAA;AAEtG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,CAAU,CAAA;AAE9F,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;IAC1C,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5E,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;IACrG,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,QAAQ,EAAE,2DAA2D,CAAC;QAChF,KAAK,EAAE,+FAA+F;KACvG;CACF,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAI5B,eAAO,MAAM,eAAe;;;;;;;
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAI5B,eAAO,MAAM,eAAe;;;;;;;cAkB1B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;kDAkB3B,CAAA"}
|
|
@@ -12,6 +12,7 @@ export const attachmentsFile = defineOperation({
|
|
|
12
12
|
fileId: id(),
|
|
13
13
|
}),
|
|
14
14
|
response: v.looseObject({ url: v.optional(v.string()), unsafe: v.optional(v.boolean()) }),
|
|
15
|
+
guard: null,
|
|
15
16
|
provenance: {
|
|
16
17
|
confidence: "measured",
|
|
17
18
|
sources: ["measured against MAX 2026-09-23 (`pnpm probe:download`)", "tsmax getFileById", "PyMax get_file_by_id"],
|
|
@@ -29,6 +30,7 @@ export const attachmentsVideo = defineOperation({
|
|
|
29
30
|
videoId: id(),
|
|
30
31
|
}),
|
|
31
32
|
response: v.looseObject({}),
|
|
33
|
+
guard: null,
|
|
32
34
|
provenance: {
|
|
33
35
|
confidence: "measured",
|
|
34
36
|
sources: ["measured against MAX 2026-09-23 (`pnpm probe:download`)", "tsmax getVideoById", "PyMax get_video_by_id"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../../src/spec/operations/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;IAC7C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC;QACtB,MAAM,EAAE,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE,EAAE;QACf,MAAM,EAAE,EAAE,EAAE;KACb,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IACzF,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,yDAAyD,EAAE,mBAAmB,EAAE,sBAAsB,CAAC;QACjH,KAAK,EACH,uHAAuH;KAC1H;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;IAC9C,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC;QACtB,MAAM,EAAE,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE,EAAE;QACf,OAAO,EAAE,EAAE,EAAE;KACd,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;IAC3B,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,yDAAyD,EAAE,oBAAoB,EAAE,uBAAuB,CAAC;QACnH,KAAK,EACH,qIAAqI;KACxI;CACF,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../../src/spec/operations/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;IAC7C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC;QACtB,MAAM,EAAE,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE,EAAE;QACf,MAAM,EAAE,EAAE,EAAE;KACb,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IACzF,KAAK,EAAE,IAAI;IACX,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,yDAAyD,EAAE,mBAAmB,EAAE,sBAAsB,CAAC;QACjH,KAAK,EACH,uHAAuH;KAC1H;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;IAC9C,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC;QACtB,MAAM,EAAE,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE,EAAE;QACf,OAAO,EAAE,EAAE,EAAE;KACd,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;IAC3B,KAAK,EAAE,IAAI;IACX,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,yDAAyD,EAAE,oBAAoB,EAAE,uBAAuB,CAAC;QACnH,KAAK,EACH,qIAAqI;KACxI;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const bannersList: import("../define.js").Operation<v.StrictObjectSchema<{
|
|
3
|
+
readonly bannersSync: v.NumberSchema<undefined>;
|
|
4
|
+
}, undefined>, v.LooseObjectSchema<{
|
|
5
|
+
readonly banners: v.OptionalSchema<v.ArraySchema<v.UnknownSchema, undefined>, undefined>;
|
|
6
|
+
}, undefined>>;
|
|
7
|
+
//# sourceMappingURL=banners.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banners.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/banners.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAM5B,eAAO,MAAM,WAAW;;;;cAUtB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { defineOperation } from "../define.js";
|
|
3
|
+
/** Sent by `max serve` after each login, as a web tab does (`MAX-52`); the answer is kept only for its sync value. */
|
|
4
|
+
const recorded = "web.max.ru tab, recorded 2026-09-25 (`docs_ai/captures/2026-09-25-web-tab-2.jsonl`)";
|
|
5
|
+
export const bannersList = defineOperation({
|
|
6
|
+
name: "banners.list",
|
|
7
|
+
constant: "BANNERS_GET",
|
|
8
|
+
opcode: 302,
|
|
9
|
+
auth: true,
|
|
10
|
+
guard: null,
|
|
11
|
+
/** Always 0 — the tab sent 0 on its first login and again on the next. */
|
|
12
|
+
request: v.strictObject({ bannersSync: v.number() }),
|
|
13
|
+
response: v.looseObject({ banners: v.optional(v.array(v.unknown())) }),
|
|
14
|
+
provenance: { confidence: "observed", sources: [recorded, "PyMax 53103f0 names it `BANNERS_GET`"] },
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=banners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banners.js","sourceRoot":"","sources":["../../../src/spec/operations/banners.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,sHAAsH;AACtH,MAAM,QAAQ,GAAG,qFAAqF,CAAA;AAEtG,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;IACzC,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,aAAa;IACvB,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,0EAA0E;IAC1E,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACpD,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;IACtE,UAAU,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,sCAAsC,CAAC,EAAE;CACpG,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const callsHistory: import("../define.js").Operation<v.StrictObjectSchema<{
|
|
3
|
+
readonly callHistorySync: v.NumberSchema<undefined>;
|
|
4
|
+
}, undefined>, v.LooseObjectSchema<{
|
|
5
|
+
readonly callHistoryItems: v.OptionalSchema<v.ArraySchema<v.UnknownSchema, undefined>, undefined>;
|
|
6
|
+
readonly callHistorySync: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
7
|
+
}, undefined>>;
|
|
8
|
+
//# sourceMappingURL=calls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAM5B,eAAO,MAAM,YAAY;;;;;cAYvB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { defineOperation } from "../define.js";
|
|
3
|
+
/** Sent by `max serve` after each login, as a web tab does (`MAX-52`); the answer is kept only for its sync value. */
|
|
4
|
+
const recorded = "web.max.ru tab, recorded 2026-09-25 (`docs_ai/captures/2026-09-25-web-tab-2.jsonl`)";
|
|
5
|
+
export const callsHistory = defineOperation({
|
|
6
|
+
name: "calls.history",
|
|
7
|
+
constant: "CALL_HISTORY",
|
|
8
|
+
opcode: 163,
|
|
9
|
+
auth: true,
|
|
10
|
+
guard: null,
|
|
11
|
+
request: v.strictObject({ callHistorySync: v.number() }),
|
|
12
|
+
response: v.looseObject({
|
|
13
|
+
callHistoryItems: v.optional(v.array(v.unknown())),
|
|
14
|
+
callHistorySync: v.optional(v.number()),
|
|
15
|
+
}),
|
|
16
|
+
provenance: { confidence: "observed", sources: [recorded] },
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=calls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../src/spec/operations/calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,sHAAsH;AACtH,MAAM,QAAQ,GAAG,qFAAqF,CAAA;AAEtG,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;IAC1C,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACxD,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;QACtB,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACxC,CAAC;IACF,UAAU,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE;CAC5D,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/chats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/chats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAM5B,eAAO,MAAM,SAAS;IAMlB,6DAA6D;;;;;cAW/D,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;IAerB,6GAA6G;;;;;;cAc/G,CAAA;AAEF,eAAO,MAAM,SAAS;;;;IAalB;;;;OAIG;;;;;cAcL,CAAA;AAKF,eAAO,MAAM,aAAa;;;;cAaxB,CAAA;AAEF,eAAO,MAAM,SAAS;;;;cAcpB,CAAA;AAEF,eAAO,MAAM,UAAU;;;;cAarB,CAAA;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;cA8CtB,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;cAiBvB,CAAA;AAQF,eAAO,MAAM,kBAAkB;;;;IAS3B,uCAAuC;;;IAGvC,iGAAiG;;IAEjG,mGAAmG;;;;cA0BrG,CAAA;AAEF,eAAO,MAAM,UAAU,oCAOrB,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
2
|
import { defineOperation, reserveOpcode } from "../define.js";
|
|
3
|
+
import { ambiguous, chatOf, countOf, messageOf, peopleOf } from "../guards.js";
|
|
3
4
|
import { id } from "../scalars.js";
|
|
4
5
|
export const chatsList = defineOperation({
|
|
5
6
|
name: "chats.list",
|
|
@@ -12,6 +13,7 @@ export const chatsList = defineOperation({
|
|
|
12
13
|
count: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),
|
|
13
14
|
}),
|
|
14
15
|
response: v.looseObject({ chats: v.optional(v.array(v.looseObject({}))) }),
|
|
16
|
+
guard: null,
|
|
15
17
|
provenance: {
|
|
16
18
|
confidence: "measured",
|
|
17
19
|
sources: ["measured against MAX 2026-09-19", "max-api-docs/protocol/chats.md"],
|
|
@@ -39,6 +41,7 @@ export const chatsHistory = defineOperation({
|
|
|
39
41
|
getMessages: v.boolean(),
|
|
40
42
|
}),
|
|
41
43
|
response: v.looseObject({ messages: v.optional(v.array(v.looseObject({}))) }),
|
|
44
|
+
guard: null,
|
|
42
45
|
provenance: {
|
|
43
46
|
confidence: "measured",
|
|
44
47
|
sources: [
|
|
@@ -68,6 +71,7 @@ export const chatsMark = defineOperation({
|
|
|
68
71
|
mark: v.number(),
|
|
69
72
|
}),
|
|
70
73
|
response: v.looseObject({ unread: v.optional(v.number()), mark: v.optional(v.number()) }),
|
|
74
|
+
guard: (request) => ({ chatId: chatOf(request), kind: "read", ...messageOf(request) }),
|
|
71
75
|
provenance: {
|
|
72
76
|
confidence: "measured",
|
|
73
77
|
sources: [
|
|
@@ -87,6 +91,7 @@ export const chatsLinkInfo = defineOperation({
|
|
|
87
91
|
auth: true,
|
|
88
92
|
request: v.strictObject({ link: link() }),
|
|
89
93
|
response: v.looseObject({ chat: v.optional(v.looseObject({})) }),
|
|
94
|
+
guard: null,
|
|
90
95
|
provenance: {
|
|
91
96
|
confidence: "measured",
|
|
92
97
|
sources: ["measured against MAX 2026-09-24 (`pnpm probe:groups`)", "PyMax resolve_group_by_link"],
|
|
@@ -100,6 +105,7 @@ export const chatsJoin = defineOperation({
|
|
|
100
105
|
auth: true,
|
|
101
106
|
request: v.strictObject({ link: link() }),
|
|
102
107
|
response: v.looseObject({ chat: v.optional(v.looseObject({})) }),
|
|
108
|
+
guard: () => ({ chatId: null, kind: "chat", action: "join" }),
|
|
103
109
|
provenance: {
|
|
104
110
|
confidence: "measured",
|
|
105
111
|
sources: ["measured against MAX 2026-09-24 with a private group link (`pnpm probe:groups`)", "PyMax join_group"],
|
|
@@ -113,6 +119,7 @@ export const chatsLeave = defineOperation({
|
|
|
113
119
|
auth: true,
|
|
114
120
|
request: v.strictObject({ chatId: id() }),
|
|
115
121
|
response: v.looseObject({ message: v.optional(v.looseObject({})) }),
|
|
122
|
+
guard: (request) => ({ chatId: chatOf(request), kind: "chat", action: "leave" }),
|
|
116
123
|
provenance: {
|
|
117
124
|
confidence: "measured",
|
|
118
125
|
sources: ["measured against MAX 2026-09-24 (`pnpm probe:groups`)", "PyMax leave_group"],
|
|
@@ -134,6 +141,26 @@ export const chatsUpdate = defineOperation({
|
|
|
134
141
|
v.strictObject({ chatId: id(), pinMessageId: id(), notifyPin: v.boolean() }),
|
|
135
142
|
]),
|
|
136
143
|
response: v.looseObject({ chat: v.optional(v.looseObject({})) }),
|
|
144
|
+
guard: (request) => {
|
|
145
|
+
const chatId = chatOf(request);
|
|
146
|
+
const changes = [
|
|
147
|
+
"pinMessageId" in request,
|
|
148
|
+
"revokePrivateLink" in request,
|
|
149
|
+
"options" in request,
|
|
150
|
+
"theme" in request || "description" in request,
|
|
151
|
+
];
|
|
152
|
+
if (changes.filter(Boolean).length !== 1)
|
|
153
|
+
return ambiguous("chats.update");
|
|
154
|
+
if (changes[0]) {
|
|
155
|
+
const pinned = messageOf(request, "pinMessageId");
|
|
156
|
+
return { chatId, kind: "pin", notify: request.notifyPin === true, ...(pinned.messageId === "0" ? {} : pinned) };
|
|
157
|
+
}
|
|
158
|
+
if (changes[1])
|
|
159
|
+
return { chatId, kind: "chat", action: "link.reset" };
|
|
160
|
+
if (changes[2])
|
|
161
|
+
return { chatId, kind: "chat", action: "settings" };
|
|
162
|
+
return { chatId, kind: "chat", action: "update" };
|
|
163
|
+
},
|
|
137
164
|
provenance: {
|
|
138
165
|
confidence: "measured",
|
|
139
166
|
sources: [
|
|
@@ -159,12 +186,18 @@ export const chatsMembers = defineOperation({
|
|
|
159
186
|
count: v.pipe(v.number(), v.integer(), v.minValue(1)),
|
|
160
187
|
}),
|
|
161
188
|
response: v.looseObject({ members: v.optional(v.array(v.looseObject({}))) }),
|
|
189
|
+
guard: null,
|
|
162
190
|
provenance: {
|
|
163
191
|
confidence: "measured",
|
|
164
192
|
sources: ["measured against MAX 2026-09-24 with no requests (`pnpm probe:groups`)", "PyMax get_join_requests"],
|
|
165
193
|
notes: "With no requests the answer is `{}` — no `members` at all. Each member is `{contact, presence}` in PyMax.",
|
|
166
194
|
},
|
|
167
195
|
});
|
|
196
|
+
const MEMBER_ACTIONS = {
|
|
197
|
+
MEMBER: ["members.add", "members.remove"],
|
|
198
|
+
ADMIN: ["admins.add", "admins.remove"],
|
|
199
|
+
JOIN_REQUEST: ["requests.accept", "requests.decline"],
|
|
200
|
+
};
|
|
168
201
|
export const chatsUpdateMembers = defineOperation({
|
|
169
202
|
name: "chats.updateMembers",
|
|
170
203
|
constant: "CHAT_MEMBERS_UPDATE",
|
|
@@ -183,6 +216,19 @@ export const chatsUpdateMembers = defineOperation({
|
|
|
183
216
|
permissions: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0))),
|
|
184
217
|
}),
|
|
185
218
|
response: v.looseObject({ chat: v.optional(v.looseObject({})) }),
|
|
219
|
+
guard: (request) => {
|
|
220
|
+
const actions = MEMBER_ACTIONS[String(request.type ?? "MEMBER")];
|
|
221
|
+
const action = request.operation === "add" ? actions?.[0] : request.operation === "remove" ? actions?.[1] : undefined;
|
|
222
|
+
if (!action)
|
|
223
|
+
return ambiguous("chats.updateMembers");
|
|
224
|
+
return {
|
|
225
|
+
chatId: chatOf(request),
|
|
226
|
+
kind: "chat",
|
|
227
|
+
action,
|
|
228
|
+
people: countOf(request.userIds),
|
|
229
|
+
...(action === "members.add" ? { personIds: peopleOf(request.userIds) } : {}),
|
|
230
|
+
};
|
|
231
|
+
},
|
|
186
232
|
provenance: {
|
|
187
233
|
confidence: "measured",
|
|
188
234
|
sources: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats.js","sourceRoot":"","sources":["../../../src/spec/operations/chats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"chats.js","sourceRoot":"","sources":["../../../src/spec/operations/chats.ts"],"names":[],"mappings":"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"}
|