@leemour/max-cli 0.1.0 → 0.2.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 -9
- package/dist/cache/schema.d.ts +10 -1
- package/dist/cache/schema.d.ts.map +1 -1
- package/dist/cache/schema.js +71 -7
- package/dist/cache/schema.js.map +1 -1
- package/dist/cache/store.d.ts +84 -3
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +155 -25
- package/dist/cache/store.js.map +1 -1
- package/dist/client.d.ts +68 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +286 -31
- package/dist/client.js.map +1 -1
- package/dist/commands/chats.d.ts.map +1 -1
- package/dist/commands/chats.js +5 -9
- package/dist/commands/chats.js.map +1 -1
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/contacts.js +46 -5
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/login.d.ts +15 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +43 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +10 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +22 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/me.d.ts +3 -0
- package/dist/commands/me.d.ts.map +1 -0
- package/dist/commands/me.js +18 -0
- package/dist/commands/me.js.map +1 -0
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +18 -3
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/paging.d.ts +38 -0
- package/dist/commands/paging.d.ts.map +1 -0
- package/dist/commands/paging.js +43 -0
- package/dist/commands/paging.js.map +1 -0
- package/dist/commands/send.d.ts +10 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +30 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +3 -3
- package/dist/commands/session.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/domain/map.d.ts +1 -0
- package/dist/domain/map.d.ts.map +1 -1
- package/dist/domain/map.js +2 -0
- package/dist/domain/map.js.map +1 -1
- package/dist/domain/models.d.ts +18 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/generated/operations.generated.d.ts +1 -0
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/protocol/session.d.ts +54 -0
- package/dist/protocol/session.d.ts.map +1 -0
- package/dist/protocol/session.js +57 -0
- package/dist/protocol/session.js.map +1 -0
- package/dist/session/adopt.d.ts +22 -0
- package/dist/session/adopt.d.ts.map +1 -0
- package/dist/session/adopt.js +29 -0
- package/dist/session/adopt.js.map +1 -0
- package/dist/session/handshake.d.ts +14 -1
- package/dist/session/handshake.d.ts.map +1 -1
- package/dist/session/handshake.js +5 -5
- package/dist/session/handshake.js.map +1 -1
- package/dist/spec/operations/auth.d.ts +42 -0
- package/dist/spec/operations/auth.d.ts.map +1 -0
- package/dist/spec/operations/session.d.ts +16 -0
- package/dist/spec/operations/session.d.ts.map +1 -1
- package/dist/spec/operations/session.js +21 -1
- package/dist/spec/operations/session.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -3
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CacheStore } from "./cache/store.js";
|
|
2
|
-
import type { Chat, Contact, Id, Message, Profile } from "./domain/models.js";
|
|
1
|
+
import type { CacheStore, PersonOrder, SyncSummary } from "./cache/store.js";
|
|
2
|
+
import type { Chat, Contact, Id, Message, Page, Profile } from "./domain/models.js";
|
|
3
3
|
import { Connection } from "./protocol/connection.js";
|
|
4
4
|
import { type DiagnosticEvent } from "./runs/events.js";
|
|
5
5
|
import type { SessionStore } from "./session/store.js";
|
|
@@ -57,7 +57,7 @@ export declare class MaxClient {
|
|
|
57
57
|
* time, and the name is filled in. Without this, `max chats` shows a column of blanks for
|
|
58
58
|
* exactly the chats a person recognises by name.
|
|
59
59
|
*/
|
|
60
|
-
list: (
|
|
60
|
+
list: (options?: PageRequest) => Promise<Page<Chat>>;
|
|
61
61
|
/**
|
|
62
62
|
* Turns what the person typed into a chat id.
|
|
63
63
|
*
|
|
@@ -68,11 +68,59 @@ export declare class MaxClient {
|
|
|
68
68
|
resolve: (reference: string) => Promise<Id>;
|
|
69
69
|
};
|
|
70
70
|
readonly contacts: {
|
|
71
|
-
/**
|
|
72
|
-
|
|
71
|
+
/**
|
|
72
|
+
* The people this account has a one-to-one chat with, named, newest conversation first.
|
|
73
|
+
*
|
|
74
|
+
* **It answers from the store**, which the login has just brought up to date (`#mergeLogin`),
|
|
75
|
+
* so the order and the paging happen in SQL over every person we know rather than over the
|
|
76
|
+
* handful this particular login mentioned. A delta carries almost nothing after the first run;
|
|
77
|
+
* rendering the response instead of the store would show an empty list on the second command.
|
|
78
|
+
*
|
|
79
|
+
* ⚠ **A group member is not in this answer** and nothing marks them as excluded: the query
|
|
80
|
+
* asks for people a *dialog* exists with, and they are outside it (`NEED-105`). They are in
|
|
81
|
+
* the store, with the chats they share with us, for the commands that will want them.
|
|
82
|
+
*/
|
|
83
|
+
list: (options?: PageRequest) => Promise<Page<Contact>>;
|
|
84
|
+
/**
|
|
85
|
+
* **Start again from zero**: forget the marker, so this login asks for the whole collection
|
|
86
|
+
* rather than for what changed, and name everybody it mentions.
|
|
87
|
+
*
|
|
88
|
+
* It is a repair tool, not the way contacts arrive. The delta rides on the login every command
|
|
89
|
+
* already performs, so there is nothing to schedule and no budget to spend — what this is for
|
|
90
|
+
* is a store that has drifted, or a full re-take after a schema rebuild threw the rows away.
|
|
91
|
+
* It is also the only thing that could ever prune somebody MAX has stopped returning, which is
|
|
92
|
+
* the second reason it exists.
|
|
93
|
+
*/
|
|
94
|
+
sync: () => Promise<SyncSummary & {
|
|
95
|
+
full: true;
|
|
96
|
+
}>;
|
|
73
97
|
};
|
|
74
98
|
readonly messages: {
|
|
75
|
-
|
|
99
|
+
/**
|
|
100
|
+
* **Paged backwards through time, not by page number.** MAX's history is already anchored —
|
|
101
|
+
* it takes a moment and answers with what came before it — so `--before` is exact where a page
|
|
102
|
+
* number over a live conversation would repeat and skip rows.
|
|
103
|
+
*
|
|
104
|
+
* `hasMore` here is a claim about the copy we hold, never about the chat: a full page back is
|
|
105
|
+
* the only evidence there is that another page exists.
|
|
106
|
+
*/
|
|
107
|
+
list: (chatId: Id, options?: {
|
|
108
|
+
limit?: number;
|
|
109
|
+
before?: number;
|
|
110
|
+
}) => Promise<Page<Message>>;
|
|
111
|
+
/**
|
|
112
|
+
* Turns what `--before` was given into a moment.
|
|
113
|
+
*
|
|
114
|
+
* **ISO 8601 is a time; a bare integer is a message id.** Both a millisecond timestamp and a
|
|
115
|
+
* message id are runs of digits — 13 and 18 of them on this account — and deciding between
|
|
116
|
+
* them by length is a trap that fires the first time either changes size. So the rule is what
|
|
117
|
+
* the string looks like, not how big it is.
|
|
118
|
+
*
|
|
119
|
+
* An id we have never stored is exactly what a deleted message looks like, because it is gone
|
|
120
|
+
* from the history MAX returns too. That is a refusal naming the way round it rather than a
|
|
121
|
+
* guess: read as milliseconds, an 18-digit id points six hundred million years from now.
|
|
122
|
+
*/
|
|
123
|
+
before: (reference: string) => number;
|
|
76
124
|
/**
|
|
77
125
|
* Sends one message, retrying **only with the same `cid`**.
|
|
78
126
|
*
|
|
@@ -84,7 +132,7 @@ export declare class MaxClient {
|
|
|
84
132
|
* So one retry, same `cid`, and nothing beyond that. What is still unmeasured is how long the
|
|
85
133
|
* server remembers a `cid`; the two probes were seconds apart. If the retry also fails the
|
|
86
134
|
* answer is `outcome_unknown` — never failed, never sent — and it names the `cid`, because
|
|
87
|
-
* `max send --cid <n>` can then repeat the attempt without risking a second message.
|
|
135
|
+
* `max messages send … --cid <n>` can then repeat the attempt without risking a second message.
|
|
88
136
|
*/
|
|
89
137
|
send: (chatId: Id, text: string, options?: {
|
|
90
138
|
cid?: number;
|
|
@@ -92,12 +140,23 @@ export declare class MaxClient {
|
|
|
92
140
|
}) => Promise<Message>;
|
|
93
141
|
};
|
|
94
142
|
/**
|
|
95
|
-
* Opens the connection and logs in with the stored token.
|
|
143
|
+
* Opens the connection and logs in with the stored token, or with one offered for trial.
|
|
96
144
|
*
|
|
97
145
|
* The login response carries the profile, the chats, the contacts and recent messages, so most
|
|
98
146
|
* commands need no further request — measured against MAX on 2026-09-19.
|
|
147
|
+
*
|
|
148
|
+
* **A candidate token is tried and not stored**, which is what lets `adoptToken` write to the
|
|
149
|
+
* keyring only after MAX has accepted it. Nothing here writes a token; see `session/adopt.ts`.
|
|
99
150
|
*/
|
|
100
|
-
connect(
|
|
151
|
+
connect({ token: candidate }?: {
|
|
152
|
+
token?: string;
|
|
153
|
+
}): Promise<void>;
|
|
101
154
|
close(): Promise<void>;
|
|
102
155
|
}
|
|
156
|
+
/** What every listing takes. Absent means "the caller did not say", never a number chosen here. */
|
|
157
|
+
export interface PageRequest {
|
|
158
|
+
order?: PersonOrder;
|
|
159
|
+
limit?: number;
|
|
160
|
+
offset?: number;
|
|
161
|
+
}
|
|
103
162
|
//# 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,MAAM,kBAAkB,CAAA;
|
|
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;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAGnF,OAAO,EAAE,UAAU,EAAiB,MAAM,0BAA0B,CAAA;AAEpE,OAAO,EAAY,KAAK,eAAe,EAAS,MAAM,kBAAkB,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGtD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,gFAAgF;IAChF,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,SAAS;;gBAcR,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,OAAe,EAAE,MAAM,EAAE,EAAE,gBAAgB;IASpG,QAAQ,CAAC,OAAO;kBACN,OAAO;MAChB;IAED,QAAQ,CAAC,KAAK;QACZ;;;;;;;WAOG;yBACmB,WAAW,KAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAkC5D;;;;;;WAMG;6BACwB,MAAM,KAAG,OAAO,CAAC,EAAE,CAAC;MAgBhD;IAED,QAAQ,CAAC,QAAQ;QACf;;;;;;;;;;;WAWG;yBACmB,WAAW,KAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QA2B/D;;;;;;;;;WASG;oBACa,OAAO,CAAC,WAAW,GAAG;YAAE,IAAI,EAAE,IAAI,CAAA;SAAE,CAAC;MAuBtD;IAED,QAAQ,CAAC,QAAQ;QACf;;;;;;;WAOG;uBACkB,EAAE,YAAW;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,KAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QA+BnG;;;;;;;;;;;WAWG;4BACiB,MAAM,KAAG,MAAM;QAqBnC;;;;;;;;;;;;WAYG;uBACkB,EAAE,QAAQ,MAAM,YAAW;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,OAAO,CAAA;SAAE,KAAQ,OAAO,CAAC,OAAO,CAAC;MAuC3G;IAED;;;;;;;;OAQG;IACG,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmJrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAyK7B;AAED,mGAAmG;AACnG,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB"}
|
package/dist/client.js
CHANGED
|
@@ -30,6 +30,7 @@ export class MaxClient {
|
|
|
30
30
|
#login;
|
|
31
31
|
#previousCid = 0;
|
|
32
32
|
#people;
|
|
33
|
+
#merged;
|
|
33
34
|
constructor({ store, timeoutMs, connection, warn, cache, offline = false, events }) {
|
|
34
35
|
this.#store = store;
|
|
35
36
|
this.#connection = connection ?? new Connection(timeoutMs === undefined ? {} : { timeoutMs });
|
|
@@ -50,14 +51,17 @@ export class MaxClient {
|
|
|
50
51
|
* time, and the name is filled in. Without this, `max chats` shows a column of blanks for
|
|
51
52
|
* exactly the chats a person recognises by name.
|
|
52
53
|
*/
|
|
53
|
-
list: async (
|
|
54
|
+
list: async (options = {}) => {
|
|
55
|
+
const { limit, offset = 0 } = options;
|
|
54
56
|
if (this.#offline) {
|
|
55
|
-
|
|
56
|
-
return limit === undefined ? cached : cached.slice(0, limit);
|
|
57
|
+
return paged(this.#recorded(this.#cache?.chats.read(ANY_AGE), "chats"), limit, offset);
|
|
57
58
|
}
|
|
58
59
|
await this.#connectOnce();
|
|
59
60
|
const raw = asArray(this.#session().chats);
|
|
60
61
|
const people = await this.#peopleFor(raw);
|
|
62
|
+
// A one-to-one chat has no title of its own — its name is the other person's, and MAX does
|
|
63
|
+
// not put it in the chat object. Without this, the chats a person recognises by name are a
|
|
64
|
+
// column of blanks.
|
|
61
65
|
const chats = raw.map((chat) => {
|
|
62
66
|
const mapped = toChat(chat);
|
|
63
67
|
if (mapped.title !== null || mapped.kind !== "dialog")
|
|
@@ -66,8 +70,15 @@ export class MaxClient {
|
|
|
66
70
|
const name = partner === undefined ? null : (people.get(partner)?.name ?? null);
|
|
67
71
|
return { ...mapped, title: name };
|
|
68
72
|
});
|
|
69
|
-
this.#cache
|
|
70
|
-
|
|
73
|
+
const cache = this.#cache;
|
|
74
|
+
if (!cache)
|
|
75
|
+
return paged(chats, limit, offset);
|
|
76
|
+
// Written first, then read back: the titles just resolved have to be in the store before it
|
|
77
|
+
// is asked to order and page over them, and the delta this login carried is only a slice of
|
|
78
|
+
// what it now holds.
|
|
79
|
+
cache.chats.write(chats);
|
|
80
|
+
const items = cache.chats.page({ limit: limit ?? Number.MAX_SAFE_INTEGER, offset });
|
|
81
|
+
return { items, hasMore: offset + items.length < cache.chats.count() };
|
|
71
82
|
},
|
|
72
83
|
/**
|
|
73
84
|
* Turns what the person typed into a chat id.
|
|
@@ -79,7 +90,7 @@ export class MaxClient {
|
|
|
79
90
|
resolve: async (reference) => {
|
|
80
91
|
if (/^-?\d+$/.test(reference.trim()))
|
|
81
92
|
return reference.trim();
|
|
82
|
-
const chats = await this.chats.list();
|
|
93
|
+
const { items: chats } = await this.chats.list();
|
|
83
94
|
const wanted = reference.trim().toLowerCase();
|
|
84
95
|
const titled = chats.filter((chat) => chat.title !== null);
|
|
85
96
|
const exact = titled.filter((chat) => chat.title?.toLowerCase() === wanted);
|
|
@@ -93,27 +104,85 @@ export class MaxClient {
|
|
|
93
104
|
},
|
|
94
105
|
};
|
|
95
106
|
contacts = {
|
|
96
|
-
/**
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
107
|
+
/**
|
|
108
|
+
* The people this account has a one-to-one chat with, named, newest conversation first.
|
|
109
|
+
*
|
|
110
|
+
* **It answers from the store**, which the login has just brought up to date (`#mergeLogin`),
|
|
111
|
+
* so the order and the paging happen in SQL over every person we know rather than over the
|
|
112
|
+
* handful this particular login mentioned. A delta carries almost nothing after the first run;
|
|
113
|
+
* rendering the response instead of the store would show an empty list on the second command.
|
|
114
|
+
*
|
|
115
|
+
* ⚠ **A group member is not in this answer** and nothing marks them as excluded: the query
|
|
116
|
+
* asks for people a *dialog* exists with, and they are outside it (`NEED-105`). They are in
|
|
117
|
+
* the store, with the chats they share with us, for the commands that will want them.
|
|
118
|
+
*/
|
|
119
|
+
list: async (options = {}) => {
|
|
120
|
+
const { order = "recent", limit, offset = 0 } = options;
|
|
121
|
+
// The same query as the online path, so `--offline` cannot answer with people the other
|
|
122
|
+
// one deliberately leaves out — a group member is not a contact in either mode.
|
|
123
|
+
if (this.#offline) {
|
|
124
|
+
const recorded = this.#cache;
|
|
125
|
+
if (!recorded || recorded.people.countContacts() === 0)
|
|
126
|
+
this.#recorded(undefined, "contacts");
|
|
127
|
+
return this.#pageOfContacts(recorded, order, limit, offset);
|
|
128
|
+
}
|
|
100
129
|
await this.#connectOnce();
|
|
101
130
|
const people = await this.#peopleFor(asArray(this.#session().chats));
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
131
|
+
const cache = this.#cache;
|
|
132
|
+
// No store — it failed to open, and that is not a reason to lose the answer MAX just gave.
|
|
133
|
+
// What is lost is only the ordering and the paging the store does better.
|
|
134
|
+
if (!cache)
|
|
135
|
+
return paged([...people.values()].filter((contact) => contact.id !== ""), limit, offset);
|
|
136
|
+
return this.#pageOfContacts(cache, order, limit, offset);
|
|
137
|
+
},
|
|
138
|
+
/**
|
|
139
|
+
* **Start again from zero**: forget the marker, so this login asks for the whole collection
|
|
140
|
+
* rather than for what changed, and name everybody it mentions.
|
|
141
|
+
*
|
|
142
|
+
* It is a repair tool, not the way contacts arrive. The delta rides on the login every command
|
|
143
|
+
* already performs, so there is nothing to schedule and no budget to spend — what this is for
|
|
144
|
+
* is a store that has drifted, or a full re-take after a schema rebuild threw the rows away.
|
|
145
|
+
* It is also the only thing that could ever prune somebody MAX has stopped returning, which is
|
|
146
|
+
* the second reason it exists.
|
|
147
|
+
*/
|
|
148
|
+
sync: async () => {
|
|
149
|
+
if (this.#offline) {
|
|
150
|
+
throw new CliError("validation_error", "`--offline` reads what was recorded; it cannot sync");
|
|
151
|
+
}
|
|
152
|
+
const cache = this.#cache;
|
|
153
|
+
if (!cache) {
|
|
154
|
+
throw new CliError("configuration_error", `there is no local store for profile "${this.#store.profile}" to sync into — the note above says why`);
|
|
155
|
+
}
|
|
156
|
+
// Before connecting, or the login would carry the marker this is meant to discard.
|
|
157
|
+
cache.forgetSyncMarker();
|
|
158
|
+
await this.#connectOnce();
|
|
159
|
+
// The login names a fraction of the people in its own chats, so a full take that stopped
|
|
160
|
+
// here would store ids without names for most of them.
|
|
161
|
+
await this.#peopleFor(asArray(this.#session().chats));
|
|
162
|
+
return { ...(this.#merged ?? { known: 0, added: 0, changed: 0 }), known: cache.people.count(), full: true };
|
|
105
163
|
},
|
|
106
164
|
};
|
|
107
165
|
messages = {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
166
|
+
/**
|
|
167
|
+
* **Paged backwards through time, not by page number.** MAX's history is already anchored —
|
|
168
|
+
* it takes a moment and answers with what came before it — so `--before` is exact where a page
|
|
169
|
+
* number over a live conversation would repeat and skip rows.
|
|
170
|
+
*
|
|
171
|
+
* `hasMore` here is a claim about the copy we hold, never about the chat: a full page back is
|
|
172
|
+
* the only evidence there is that another page exists.
|
|
173
|
+
*/
|
|
174
|
+
list: async (chatId, options = {}) => {
|
|
175
|
+
const limit = options.limit ?? 20;
|
|
176
|
+
if (this.#offline) {
|
|
177
|
+
const stored = this.#recorded(this.#cache?.messages.read(chatId, limit, ANY_AGE), "messages");
|
|
178
|
+
return { items: stored, hasMore: stored.length >= limit };
|
|
179
|
+
}
|
|
111
180
|
await this.#connectOnce();
|
|
112
181
|
const session = this.#session();
|
|
113
182
|
// `interactive: false` and no CHAT_MARK: reading history must not mark anything read (§19).
|
|
114
183
|
const answer = await this.#wire.chats.history({
|
|
115
184
|
chatId,
|
|
116
|
-
from: Date.now(),
|
|
185
|
+
from: options.before ?? Date.now(),
|
|
117
186
|
forward: 0,
|
|
118
187
|
backward: limit,
|
|
119
188
|
forwardTime: 0,
|
|
@@ -126,7 +195,34 @@ export class MaxClient {
|
|
|
126
195
|
const lookup = { names: namesFrom(session.contacts), ...viewer(this.#store) };
|
|
127
196
|
const messages = asArray(answer.messages).map((raw) => toMessage(raw, chatId, lookup));
|
|
128
197
|
this.#cache?.messages.write(chatId, messages);
|
|
129
|
-
return messages;
|
|
198
|
+
return { items: messages, hasMore: messages.length >= limit };
|
|
199
|
+
},
|
|
200
|
+
/**
|
|
201
|
+
* Turns what `--before` was given into a moment.
|
|
202
|
+
*
|
|
203
|
+
* **ISO 8601 is a time; a bare integer is a message id.** Both a millisecond timestamp and a
|
|
204
|
+
* message id are runs of digits — 13 and 18 of them on this account — and deciding between
|
|
205
|
+
* them by length is a trap that fires the first time either changes size. So the rule is what
|
|
206
|
+
* the string looks like, not how big it is.
|
|
207
|
+
*
|
|
208
|
+
* An id we have never stored is exactly what a deleted message looks like, because it is gone
|
|
209
|
+
* from the history MAX returns too. That is a refusal naming the way round it rather than a
|
|
210
|
+
* guess: read as milliseconds, an 18-digit id points six hundred million years from now.
|
|
211
|
+
*/
|
|
212
|
+
before: (reference) => {
|
|
213
|
+
const wanted = reference.trim();
|
|
214
|
+
if (!/^\d+$/.test(wanted)) {
|
|
215
|
+
const time = Date.parse(wanted);
|
|
216
|
+
if (Number.isNaN(time)) {
|
|
217
|
+
throw new CliError("validation_error", `--before takes a message id or an ISO 8601 time, not "${wanted}"`);
|
|
218
|
+
}
|
|
219
|
+
return time;
|
|
220
|
+
}
|
|
221
|
+
const time = this.#cache?.messages.timeOf(wanted);
|
|
222
|
+
if (time === undefined) {
|
|
223
|
+
throw new CliError("not_found", `no message ${wanted} in this profile's record — read the chat once first, or give --before an ISO 8601 time`);
|
|
224
|
+
}
|
|
225
|
+
return time;
|
|
130
226
|
},
|
|
131
227
|
/**
|
|
132
228
|
* Sends one message, retrying **only with the same `cid`**.
|
|
@@ -139,7 +235,7 @@ export class MaxClient {
|
|
|
139
235
|
* So one retry, same `cid`, and nothing beyond that. What is still unmeasured is how long the
|
|
140
236
|
* server remembers a `cid`; the two probes were seconds apart. If the retry also fails the
|
|
141
237
|
* answer is `outcome_unknown` — never failed, never sent — and it names the `cid`, because
|
|
142
|
-
* `max send --cid <n>` can then repeat the attempt without risking a second message.
|
|
238
|
+
* `max messages send … --cid <n>` can then repeat the attempt without risking a second message.
|
|
143
239
|
*/
|
|
144
240
|
send: async (chatId, text, options = {}) => {
|
|
145
241
|
if (this.#offline)
|
|
@@ -167,7 +263,7 @@ export class MaxClient {
|
|
|
167
263
|
}
|
|
168
264
|
catch {
|
|
169
265
|
throw new CliError("outcome_unknown", `the message may or may not have been sent (${failure.message}) — ` +
|
|
170
|
-
`\`max send --cid ${cid}\` repeats the attempt without risking a second copy`, { cid });
|
|
266
|
+
`\`max messages send <chat> <text> --cid ${cid}\` repeats the attempt without risking a second copy`, { cid });
|
|
171
267
|
}
|
|
172
268
|
}
|
|
173
269
|
// What the cache holds for this chat is now one message short of the truth.
|
|
@@ -177,33 +273,146 @@ export class MaxClient {
|
|
|
177
273
|
},
|
|
178
274
|
};
|
|
179
275
|
/**
|
|
180
|
-
* Opens the connection and logs in with the stored token.
|
|
276
|
+
* Opens the connection and logs in with the stored token, or with one offered for trial.
|
|
181
277
|
*
|
|
182
278
|
* The login response carries the profile, the chats, the contacts and recent messages, so most
|
|
183
279
|
* commands need no further request — measured against MAX on 2026-09-19.
|
|
280
|
+
*
|
|
281
|
+
* **A candidate token is tried and not stored**, which is what lets `adoptToken` write to the
|
|
282
|
+
* keyring only after MAX has accepted it. Nothing here writes a token; see `session/adopt.ts`.
|
|
184
283
|
*/
|
|
185
|
-
async connect() {
|
|
186
|
-
const token = this.#store.readToken();
|
|
284
|
+
async connect({ token: candidate } = {}) {
|
|
285
|
+
const token = candidate ?? this.#store.readToken();
|
|
187
286
|
if (!token) {
|
|
188
287
|
// The fix has to carry the profile, or it logs the wrong one in: a name nobody has logged
|
|
189
288
|
// in under is the ordinary shape of this failure now that the first word is the profile.
|
|
190
289
|
throw new CliError("authentication_error", `no session for profile "${this.#store.profile}" — run \`max ${asFirstWord(this.#store.profile)}session start\``);
|
|
191
290
|
}
|
|
192
291
|
const state = this.#store.readState();
|
|
292
|
+
const sync = this.#cache?.syncMarker();
|
|
193
293
|
try {
|
|
194
294
|
await this.#connection.open();
|
|
195
|
-
this.#login = await startSession(this.#invoke, {
|
|
295
|
+
this.#login = await startSession(this.#invoke, {
|
|
296
|
+
token,
|
|
297
|
+
deviceId: state.deviceId,
|
|
298
|
+
...(sync === undefined ? {} : { sync }),
|
|
299
|
+
});
|
|
196
300
|
}
|
|
197
301
|
catch (error) {
|
|
198
302
|
throw asCliError(error);
|
|
199
303
|
}
|
|
200
304
|
const viewerId = toProfile(record(this.#login.profile) ?? {}).id;
|
|
305
|
+
// **Before `writeState`**, so a login we are about to refuse does not count itself or move
|
|
306
|
+
// `lastLoginAt`. A profile is a person, not a directory name: if this token belongs to someone
|
|
307
|
+
// else, every later command in this process would send as them and nothing would say so.
|
|
308
|
+
// Switching accounts has a door already — `session end` clears the id along with the token.
|
|
309
|
+
if (viewerId && state.viewerId && viewerId !== state.viewerId) {
|
|
310
|
+
throw new CliError("authentication_error", `this token is for a different account than profile "${this.#store.profile}" was set up with — ` +
|
|
311
|
+
`run \`max ${asFirstWord(this.#store.profile)}session end\` first if you meant to switch`);
|
|
312
|
+
}
|
|
201
313
|
this.#store.writeState({
|
|
202
314
|
...state,
|
|
203
315
|
...(viewerId ? { viewerId } : {}),
|
|
204
316
|
logins: state.logins + 1,
|
|
205
317
|
lastLoginAt: new Date().toISOString(),
|
|
206
318
|
});
|
|
319
|
+
this.#keepRotatedToken(token);
|
|
320
|
+
this.#mergeLogin(viewerId);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* **MAX offers a replacement for a credential that has aged, and until 2026-09-22 we threw it
|
|
324
|
+
* away** — measured, `pnpm probe:token`. Presenting a token pasted months earlier answers with a
|
|
325
|
+
* different one; presenting *that* one answers with the same one back, so this writes once and
|
|
326
|
+
* then stops rather than on every command.
|
|
327
|
+
*
|
|
328
|
+
* The old token keeps working — the last months are the proof — so this is hygiene, not repair.
|
|
329
|
+
*
|
|
330
|
+
* ⚠ **After the identity refusal above, never before it.** A token belonging to somebody else
|
|
331
|
+
* reaches this method only if that check has already let it through; persisting it earlier would
|
|
332
|
+
* overwrite the owner's working credential with a stranger's — a worse version of the defect
|
|
333
|
+
* `MAX-12` exists to fix.
|
|
334
|
+
*
|
|
335
|
+
* **A keyring that will not take it does not fail the command.** The write can fail for reasons
|
|
336
|
+
* that have nothing to do with the command being run — a locked keyring, no session bus — and
|
|
337
|
+
* the old token still works, which is what makes carrying on correct. The reason goes to the
|
|
338
|
+
* diagnostic stream, because failing quietly is not failing invisibly (`NEED-97`).
|
|
339
|
+
*
|
|
340
|
+
* Nothing here prints, returns or compares-aloud the value: the only comparison is against the
|
|
341
|
+
* token we sent, and the only thing that leaves is whether a write failed.
|
|
342
|
+
*/
|
|
343
|
+
#keepRotatedToken(sent) {
|
|
344
|
+
const rotated = this.#session().token;
|
|
345
|
+
if (typeof rotated !== "string" || rotated === "" || rotated === sent)
|
|
346
|
+
return;
|
|
347
|
+
try {
|
|
348
|
+
this.#store.writeToken(rotated);
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
this.#warn(`the refreshed session could not be saved, so the previous one is still in use: ${reasonOf(error)}`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Writes what the login just told us into the store, **before the command renders**, so a
|
|
356
|
+
* listing prints the names this run brought rather than the previous run's.
|
|
357
|
+
*
|
|
358
|
+
* ⚠ **A delta is mostly empty and that is correct.** After the first login MAX sends only what
|
|
359
|
+
* changed, so an absent person is an unchanged person — never a departed one. Nothing here
|
|
360
|
+
* deletes, with the single exception of a chat's membership, which MAX restates in full whenever
|
|
361
|
+
* it sends that chat at all.
|
|
362
|
+
*
|
|
363
|
+
* **It never fails the command.** Nobody asked for the store; a locked database or a full disk
|
|
364
|
+
* must not lose an answer MAX has already given. The reason goes to the diagnostic stream,
|
|
365
|
+
* because failing quietly is not the same as failing invisibly (`NEED-97`) — and the marker
|
|
366
|
+
* stays where it was, so the next login asks for the same delta again rather than for changes
|
|
367
|
+
* since rows that were never written.
|
|
368
|
+
*/
|
|
369
|
+
#mergeLogin(viewerId) {
|
|
370
|
+
const cache = this.#cache;
|
|
371
|
+
const marker = asMarker(this.#session().time);
|
|
372
|
+
if (!cache || marker === undefined)
|
|
373
|
+
return;
|
|
374
|
+
const chats = asArray(this.#session().chats);
|
|
375
|
+
const members = new Map();
|
|
376
|
+
for (const raw of chats) {
|
|
377
|
+
const chat = toChat(raw);
|
|
378
|
+
// A channel lists four of its hundred and seventy-eight thousand subscribers, so its
|
|
379
|
+
// `participants` is not a membership — storing it would be storing a wrong answer.
|
|
380
|
+
if (!chat.id || chat.kind === "channel")
|
|
381
|
+
continue;
|
|
382
|
+
const participants = this.#participantsOf(raw, viewerId);
|
|
383
|
+
if (participants !== undefined)
|
|
384
|
+
members.set(chat.id, participants);
|
|
385
|
+
}
|
|
386
|
+
try {
|
|
387
|
+
this.#merged = cache.mergeDelta({
|
|
388
|
+
chats: chats.map(toChat).filter((chat) => chat.id !== ""),
|
|
389
|
+
people: asArray(this.#session().contacts)
|
|
390
|
+
.map(toContact)
|
|
391
|
+
.filter((contact) => contact.id !== ""),
|
|
392
|
+
members,
|
|
393
|
+
marker,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
catch (error) {
|
|
397
|
+
this.#warn(`the local record did not take this login, so nothing was kept from it: ${reasonOf(error)}`);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
/** One page of contacts out of the store — the same query online and offline. */
|
|
401
|
+
#pageOfContacts(cache, order, limit, offset) {
|
|
402
|
+
const items = cache.people.contacts({ order, limit: limit ?? Number.MAX_SAFE_INTEGER, offset });
|
|
403
|
+
return { items, hasMore: offset + items.length < cache.people.countContacts() };
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Everyone in the chat except us, or **`undefined` when MAX did not say who is in it**.
|
|
407
|
+
*
|
|
408
|
+
* ⚠ The difference is the whole of it. A delta re-sends a chat because a message arrived and
|
|
409
|
+
* carries no `participants`; read as "nobody is in this chat", that empties the membership and
|
|
410
|
+
* the person on the other side stops being a contact. "Did not say" is not "nobody", and only
|
|
411
|
+
* the first of the two may replace anything.
|
|
412
|
+
*/
|
|
413
|
+
#participantsOf(chat, viewerId) {
|
|
414
|
+
const participants = record(chat.participants);
|
|
415
|
+
return participants === undefined ? undefined : Object.keys(participants).filter((id) => id !== viewerId);
|
|
207
416
|
}
|
|
208
417
|
async close() {
|
|
209
418
|
await this.#connection.close();
|
|
@@ -318,20 +527,37 @@ export class MaxClient {
|
|
|
318
527
|
if (contact.id)
|
|
319
528
|
people.set(contact.id, contact);
|
|
320
529
|
}
|
|
530
|
+
const viewerId = this.#store.readState().viewerId;
|
|
321
531
|
const missing = new Set();
|
|
322
532
|
for (const chat of chats) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
533
|
+
if (toChat(chat).kind === "channel")
|
|
534
|
+
continue;
|
|
535
|
+
for (const id of this.#participantsOf(chat, viewerId) ?? [])
|
|
536
|
+
if (!people.has(id))
|
|
537
|
+
missing.add(id);
|
|
326
538
|
}
|
|
327
|
-
|
|
328
|
-
|
|
539
|
+
const named = [];
|
|
540
|
+
for (const batch of batched([...missing], CONTACT_INFO_BATCH)) {
|
|
541
|
+
const answer = await this.#wire.contacts.info({ contactIds: batch });
|
|
329
542
|
for (const raw of asArray(answer.contacts)) {
|
|
330
543
|
const contact = toContact(raw);
|
|
331
|
-
if (contact.id)
|
|
332
|
-
|
|
544
|
+
if (!contact.id)
|
|
545
|
+
continue;
|
|
546
|
+
people.set(contact.id, contact);
|
|
547
|
+
named.push(contact);
|
|
333
548
|
}
|
|
334
549
|
}
|
|
550
|
+
// Written here rather than left in memory: the process ends in a moment, and the next one
|
|
551
|
+
// should not pay for these names again.
|
|
552
|
+
//
|
|
553
|
+
// ⚠ **And the order is recomputed after**, not before. These people did not exist when the
|
|
554
|
+
// login's chats were written, so the recency that was set then reached only the handful the
|
|
555
|
+
// login itself named — 6 of 22 on the real account, with every other dialog partner sorting
|
|
556
|
+
// as never-messaged.
|
|
557
|
+
if (named.length > 0) {
|
|
558
|
+
this.#cache?.people.upsert(named, "info");
|
|
559
|
+
this.#cache?.people.refreshRecency();
|
|
560
|
+
}
|
|
335
561
|
this.#people = people;
|
|
336
562
|
return people;
|
|
337
563
|
}
|
|
@@ -350,8 +576,37 @@ export class MaxClient {
|
|
|
350
576
|
return this.#login;
|
|
351
577
|
}
|
|
352
578
|
}
|
|
579
|
+
/**
|
|
580
|
+
* **One `CONTACT_INFO` for a hundred people.** The bound is unmeasured; the comparable one is
|
|
581
|
+
* `chatsCount`, where 100 is accepted and 200 comes back out of range (`PROTO-3`). Somebody in
|
|
582
|
+
* forty groups is the case that will find the real number, and it will find it as a refusal that
|
|
583
|
+
* names itself rather than as a wrong answer.
|
|
584
|
+
*/
|
|
585
|
+
const CONTACT_INFO_BATCH = 100;
|
|
586
|
+
const batched = (items, size) => {
|
|
587
|
+
const batches = [];
|
|
588
|
+
for (let at = 0; at < items.length; at += size)
|
|
589
|
+
batches.push(items.slice(at, at + size));
|
|
590
|
+
return batches;
|
|
591
|
+
};
|
|
592
|
+
/** Paging over a list already in hand — the fallback for when there is no store to page in SQL. */
|
|
593
|
+
const paged = (items, limit, offset) => {
|
|
594
|
+
const page = limit === undefined ? items.slice(offset) : items.slice(offset, offset + limit);
|
|
595
|
+
return { items: page, hasMore: offset + page.length < items.length };
|
|
596
|
+
};
|
|
353
597
|
/** `--offline` was asked for explicitly, so age is not a reason to refuse what was recorded. */
|
|
354
598
|
const ANY_AGE = Number.POSITIVE_INFINITY;
|
|
599
|
+
/**
|
|
600
|
+
* The marker only means anything if MAX gave us one. A login without a `time` is not a reason to
|
|
601
|
+
* store `0` — that would tell the next login to send everything, which is exactly what a stored
|
|
602
|
+
* marker exists to stop.
|
|
603
|
+
*/
|
|
604
|
+
const asMarker = (time) => typeof time === "number" && Number.isFinite(time) && time > 0 ? time : undefined;
|
|
605
|
+
/** The reason, never the payload: a store's failure is a code, and the rows are people's names. */
|
|
606
|
+
const reasonOf = (error) => {
|
|
607
|
+
const code = error?.code;
|
|
608
|
+
return typeof code === "string" ? code : error instanceof Error ? error.name : "an unknown problem";
|
|
609
|
+
};
|
|
355
610
|
const viewer = (store) => {
|
|
356
611
|
const viewerId = store.readState().viewerId;
|
|
357
612
|
return viewerId === undefined ? {} : { viewerId };
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,eAAO,MAAM,YAAY,QAAO,OAuB/B,CAAA"}
|