@leemour/max-cli 0.4.0 → 0.5.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/dist/bin/max.js +0 -0
- package/dist/cache/store.d.ts +14 -8
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +29 -5
- package/dist/cache/store.js.map +1 -1
- package/dist/client.d.ts +37 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +164 -27
- package/dist/client.js.map +1 -1
- package/dist/commands/chats.d.ts.map +1 -1
- package/dist/commands/chats.js +20 -0
- package/dist/commands/chats.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +27 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/contacts.js +18 -0
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +1 -0
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +49 -2
- package/dist/commands/messages.js.map +1 -1
- package/dist/config.d.ts +45 -12
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +82 -16
- package/dist/config.js.map +1 -1
- package/dist/domain/map.js +6 -1
- package/dist/domain/map.js.map +1 -1
- package/dist/domain/models.d.ts +22 -1
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/models.js.map +1 -1
- package/dist/download.d.ts +15 -0
- package/dist/download.d.ts.map +1 -0
- package/dist/download.js +60 -0
- package/dist/download.js.map +1 -0
- package/dist/generated/client.generated.d.ts +4 -0
- package/dist/generated/client.generated.d.ts.map +1 -1
- package/dist/generated/client.generated.js +4 -0
- package/dist/generated/client.generated.js.map +1 -1
- package/dist/generated/opcodes.generated.d.ts +2 -0
- package/dist/generated/opcodes.generated.d.ts.map +1 -1
- package/dist/generated/opcodes.generated.js +2 -0
- package/dist/generated/opcodes.generated.js.map +1 -1
- package/dist/generated/operations.generated.d.ts +13 -0
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/generated/operations.generated.js +3 -0
- package/dist/generated/operations.generated.js.map +1 -1
- package/dist/runs/recording.d.ts.map +1 -1
- package/dist/runs/recording.js +7 -0
- package/dist/runs/recording.js.map +1 -1
- package/dist/runs/run.d.ts +2 -0
- package/dist/runs/run.d.ts.map +1 -1
- package/dist/runs/run.js +1 -0
- package/dist/runs/run.js.map +1 -1
- package/dist/session/handshake.d.ts +1 -1
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +3 -0
- package/dist/spec/index.js.map +1 -1
- package/dist/spec/operations/attachments.d.ts +15 -0
- package/dist/spec/operations/attachments.d.ts.map +1 -0
- package/dist/spec/operations/attachments.js +38 -0
- package/dist/spec/operations/attachments.js.map +1 -0
- package/dist/testing/mock-max.d.ts +8 -3
- package/dist/testing/mock-max.d.ts.map +1 -1
- package/dist/testing/mock-max.js +4 -0
- package/dist/testing/mock-max.js.map +1 -1
- package/dist/testing/sandbox.js +2 -0
- package/dist/testing/sandbox.js.map +1 -1
- package/dist/testing/unscripted.d.ts +2 -0
- package/dist/testing/unscripted.d.ts.map +1 -0
- package/dist/testing/unscripted.js +18 -0
- package/dist/testing/unscripted.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +27 -22
- package/skills/max-cli/SKILL.md +11 -3
- package/dist/commands/login.d.ts +0 -15
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -43
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -10
- package/dist/commands/logout.d.ts.map +0 -1
- package/dist/commands/logout.js +0 -22
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/me.d.ts +0 -3
- package/dist/commands/me.d.ts.map +0 -1
- package/dist/commands/me.js +0 -18
- package/dist/commands/me.js.map +0 -1
- package/dist/commands/send.d.ts +0 -10
- package/dist/commands/send.d.ts.map +0 -1
- package/dist/commands/send.js +0 -30
- package/dist/commands/send.js.map +0 -1
- package/dist/protocol/session.d.ts +0 -54
- package/dist/protocol/session.d.ts.map +0 -1
- package/dist/protocol/session.js +0 -57
- package/dist/protocol/session.js.map +0 -1
- package/dist/spec/operations/auth.d.ts +0 -42
- package/dist/spec/operations/auth.d.ts.map +0 -1
package/dist/bin/max.js
CHANGED
|
File without changes
|
package/dist/cache/store.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Chat, ChatKind, Contact, Id, Message, MessageHit } from "../domain/models.js";
|
|
1
|
+
import type { Chat, ChatKind, Contact, Id, Member, Message, MessageHit } from "../domain/models.js";
|
|
2
2
|
import type { CacheDatabase } from "./driver.js";
|
|
3
3
|
/** How we came to know a person. Diagnostic — what makes somebody a *contact* is the query. */
|
|
4
4
|
export type PersonSource = "login" | "info" | "participant" | "sync";
|
|
@@ -10,11 +10,14 @@ export interface PageOptions {
|
|
|
10
10
|
/** Part of a name, already checked to be long enough for the index (`src/client.ts`). */
|
|
11
11
|
query?: string;
|
|
12
12
|
}
|
|
13
|
-
export interface
|
|
14
|
-
limit: number;
|
|
15
|
-
offset: number;
|
|
13
|
+
export interface ChatFilter {
|
|
16
14
|
query?: string;
|
|
17
15
|
kind?: ChatKind;
|
|
16
|
+
unread?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ChatPageOptions extends ChatFilter {
|
|
19
|
+
limit: number;
|
|
20
|
+
offset: number;
|
|
18
21
|
}
|
|
19
22
|
export interface MessageSearch {
|
|
20
23
|
query: string;
|
|
@@ -64,10 +67,10 @@ export interface CacheStore {
|
|
|
64
67
|
/** One page, newest first, in SQL rather than by building the whole list and slicing it. */
|
|
65
68
|
page(options: ChatPageOptions): Chat[];
|
|
66
69
|
/** ⚠ Takes the same filter as `page`, or the two disagree about whether a next page exists. */
|
|
67
|
-
count(options?:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
count(options?: ChatFilter): number;
|
|
71
|
+
get(chatId: Id): Chat | undefined;
|
|
72
|
+
/** Everyone we hold in this chat except ourselves, by name. Channels have no rows here. */
|
|
73
|
+
members(chatId: Id): Member[];
|
|
71
74
|
};
|
|
72
75
|
people: {
|
|
73
76
|
/**
|
|
@@ -90,6 +93,9 @@ export interface CacheStore {
|
|
|
90
93
|
upsert(people: Contact[], source: PersonSource): void;
|
|
91
94
|
/** The chats this person is in — which, every chat here being one we are in, is the shared set. */
|
|
92
95
|
chatsWith(personId: Id): Id[];
|
|
96
|
+
/** As `chatsWith`, but the chats themselves, newest first. */
|
|
97
|
+
sharedChats(personId: Id): Chat[];
|
|
98
|
+
get(personId: Id): Contact | undefined;
|
|
93
99
|
/** The names we hold for these people; anyone unnamed or unknown is absent from the map. */
|
|
94
100
|
names(ids: Id[]): Map<Id, string>;
|
|
95
101
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,+FAA+F;AAC/F,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,MAAM,CAAA;AAEpE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAA;AAE3C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,mDAAmD;IACnD,MAAM,CAAC,EAAE,EAAE,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;GAOG;AACH;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,CAAA;IACvB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,sFAAsF;AACtF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE;QACL,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,SAAS,CAAA;QAC5C,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QAC1B,4FAA4F;QAC5F,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,EAAE,CAAA;QACtC,+FAA+F;QAC/F,KAAK,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAAA;QACnC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,GAAG,SAAS,CAAA;QACjC,2FAA2F;QAC3F,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAA;KAC9B,CAAA;IACD,MAAM,EAAE;QACN;;;;;;WAMG;QACH,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,EAAE,CAAA;QACzC,sFAAsF;QACtF,aAAa,CAAC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,MAAM,CAAA;QACnD,qDAAqD;QACrD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,EAAE,CAAA;QACrC,qEAAqE;QACrE,KAAK,IAAI,MAAM,CAAA;QACf,oFAAoF;QACpF,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;QACrD,mGAAmG;QACnG,SAAS,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,CAAA;QAC7B,8DAA8D;QAC9D,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,CAAA;QACjC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,GAAG,SAAS,CAAA;QACtC,4FAA4F;QAC5F,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACjC;;;;;;;;WAQG;QACH,cAAc,IAAI,IAAI,CAAA;KACvB,CAAA;IACD,iGAAiG;IACjG,UAAU,IAAI,MAAM,GAAG,SAAS,CAAA;IAChC,0EAA0E;IAC1E,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAA;IACzC,qDAAqD;IACrD,gBAAgB,IAAI,IAAI,CAAA;IACxB,QAAQ,EAAE;QACR,gGAAgG;QAChG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,SAAS,CAAA;QAC1E,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QAC5C,qFAAqF;QACrF,UAAU,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAA;QAC5B,sGAAsG;QACtG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;QAC1E;;;;;;WAMG;QACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,EAAE,CAAA;QAC5C,WAAW,CAAC,OAAO,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,EAAE,CAAA;SAAE,GAAG,MAAM,CAAA;KAC7D,CAAA;IACD,iGAAiG;IACjG,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;IACzE,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,IAAI,IAAI,CAAA;CACd;AAED,eAAO,MAAM,SAAS,GAAI,mBAAsC,YAAY,KAAG,UAqf9E,CAAA"}
|
package/dist/cache/store.js
CHANGED
|
@@ -17,7 +17,7 @@ export const openStore = ({ database, now = () => Date.now() }) => {
|
|
|
17
17
|
* ⚠ They have to come from the same function. A page that filters and a count that does not is
|
|
18
18
|
* a `hasMore` that lies, and it lies quietly — the reader simply never sees the last page.
|
|
19
19
|
*/
|
|
20
|
-
const chatWhere = ({ query, kind }) => {
|
|
20
|
+
const chatWhere = ({ query, kind, unread }) => {
|
|
21
21
|
const clauses = [];
|
|
22
22
|
const values = [];
|
|
23
23
|
if (query !== undefined) {
|
|
@@ -28,6 +28,8 @@ export const openStore = ({ database, now = () => Date.now() }) => {
|
|
|
28
28
|
clauses.push("c.kind = ?");
|
|
29
29
|
values.push(kind);
|
|
30
30
|
}
|
|
31
|
+
if (unread)
|
|
32
|
+
clauses.push("c.unread_count > 0");
|
|
31
33
|
return { sql: clauses.length === 0 ? "" : ` WHERE ${clauses.join(" AND ")}`, values };
|
|
32
34
|
};
|
|
33
35
|
const peopleWhere = ({ query }) => {
|
|
@@ -184,18 +186,31 @@ export const openStore = ({ database, now = () => Date.now() }) => {
|
|
|
184
186
|
return undefined;
|
|
185
187
|
return database.prepare("SELECT * FROM chats ORDER BY last_message_at DESC").all().map(toChat);
|
|
186
188
|
},
|
|
187
|
-
page: ({ limit, offset,
|
|
188
|
-
const where = chatWhere(
|
|
189
|
+
page: ({ limit, offset, ...filter }) => {
|
|
190
|
+
const where = chatWhere(filter);
|
|
189
191
|
return database
|
|
190
192
|
.prepare(`SELECT c.* FROM chats c${where.sql} ORDER BY c.last_message_at DESC LIMIT ? OFFSET ?`)
|
|
191
193
|
.all(...where.values, limit, offset)
|
|
192
194
|
.map(toChat);
|
|
193
195
|
},
|
|
194
|
-
count: (
|
|
195
|
-
const where = chatWhere(
|
|
196
|
+
count: (filter = {}) => {
|
|
197
|
+
const where = chatWhere(filter);
|
|
196
198
|
const row = database.prepare(`SELECT COUNT(*) AS n FROM chats c${where.sql}`).get(...where.values);
|
|
197
199
|
return Number(row?.n ?? 0);
|
|
198
200
|
},
|
|
201
|
+
get: (chatId) => {
|
|
202
|
+
const row = database.prepare("SELECT * FROM chats WHERE id = ?").get(chatId);
|
|
203
|
+
return row ? toChat(row) : undefined;
|
|
204
|
+
},
|
|
205
|
+
members: (chatId) => database
|
|
206
|
+
.prepare(`SELECT p.id, p.name, p.username FROM chat_members m JOIN people p ON p.id = m.person_id
|
|
207
|
+
WHERE m.chat_id = ? ORDER BY p.name IS NULL, p.name`)
|
|
208
|
+
.all(chatId)
|
|
209
|
+
.map((row) => ({
|
|
210
|
+
id: String(row.id),
|
|
211
|
+
name: row.name === null ? null : String(row.name),
|
|
212
|
+
username: row.username === null ? null : String(row.username),
|
|
213
|
+
})),
|
|
199
214
|
write: (chats) => {
|
|
200
215
|
const at = now();
|
|
201
216
|
for (const chat of chats) {
|
|
@@ -230,6 +245,15 @@ export const openStore = ({ database, now = () => Date.now() }) => {
|
|
|
230
245
|
.prepare("SELECT chat_id FROM chat_members WHERE person_id = ?")
|
|
231
246
|
.all(personId)
|
|
232
247
|
.map((row) => String(row.chat_id)),
|
|
248
|
+
sharedChats: (personId) => database
|
|
249
|
+
.prepare(`SELECT c.* FROM chat_members m JOIN chats c ON c.id = m.chat_id
|
|
250
|
+
WHERE m.person_id = ? ORDER BY c.last_message_at DESC`)
|
|
251
|
+
.all(personId)
|
|
252
|
+
.map(toChat),
|
|
253
|
+
get: (personId) => {
|
|
254
|
+
const row = database.prepare("SELECT * FROM people WHERE id = ?").get(personId);
|
|
255
|
+
return row ? toContact(row) : undefined;
|
|
256
|
+
},
|
|
233
257
|
names: (ids) => {
|
|
234
258
|
const named = new Map();
|
|
235
259
|
const one = database.prepare("SELECT name FROM people WHERE id = ? AND name IS NOT NULL");
|
package/dist/cache/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CacheStore, PersonOrder, SyncSummary } from "./cache/store.js";
|
|
2
|
-
import { type Chat, type ChatKind, type Contact, type Id, type Message, type MessageHit, type Page, type Profile, type WindowedMessage } from "./domain/models.js";
|
|
2
|
+
import { type AttachmentLink, type Chat, type ChatCard, type ChatKind, type Contact, type Id, type Message, type MessageHit, type Page, type PersonCard, type Profile, type WindowedMessage } 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";
|
|
@@ -66,6 +66,13 @@ export declare class MaxClient {
|
|
|
66
66
|
* conversation is not undoable, so the caller is shown the candidates and asked to be specific.
|
|
67
67
|
*/
|
|
68
68
|
resolve: (reference: string) => Promise<Id>;
|
|
69
|
+
/**
|
|
70
|
+
* One chat and who is in it, from the list the login just refreshed.
|
|
71
|
+
*
|
|
72
|
+
* ⚠ **An id is checked here, where `resolve` lets any number through** — for a read that is
|
|
73
|
+
* the difference between an answer and a card of nulls for a chat that does not exist.
|
|
74
|
+
*/
|
|
75
|
+
show: (reference: string) => Promise<ChatCard>;
|
|
69
76
|
};
|
|
70
77
|
readonly contacts: {
|
|
71
78
|
/**
|
|
@@ -91,6 +98,13 @@ export declare class MaxClient {
|
|
|
91
98
|
* It is also the only thing that could ever prune somebody MAX has stopped returning, which is
|
|
92
99
|
* the second reason it exists.
|
|
93
100
|
*/
|
|
101
|
+
/**
|
|
102
|
+
* One person and the chats we share, **whoever they are** — a group member is as findable as
|
|
103
|
+
* a contact. `NEED-105` decides who `list` lists, not who can be looked up.
|
|
104
|
+
*
|
|
105
|
+
* Only from the store: the shared chats are its `chat_members`, which nothing else holds.
|
|
106
|
+
*/
|
|
107
|
+
show: (reference: string) => Promise<PersonCard>;
|
|
94
108
|
sync: () => Promise<SyncSummary & {
|
|
95
109
|
full: true;
|
|
96
110
|
}>;
|
|
@@ -121,12 +135,18 @@ export declare class MaxClient {
|
|
|
121
135
|
* it takes a moment and answers with what came before it — so `--before` is exact where a page
|
|
122
136
|
* number over a live conversation would repeat and skip rows.
|
|
123
137
|
*
|
|
138
|
+
* `after` reads the other way and **leaves the anchor out**, so the next page's hint does not
|
|
139
|
+
* repeat a row. MAX puts it in — measured 2026-09-23, `forward: n` with `backward: 0` starts
|
|
140
|
+
* with the message it was given — so one more is asked for and anything not later is dropped.
|
|
141
|
+
* `before` keeps the anchor, as it always has.
|
|
142
|
+
*
|
|
124
143
|
* `hasMore` here is a claim about the copy we hold, never about the chat: a full page back is
|
|
125
144
|
* the only evidence there is that another page exists.
|
|
126
145
|
*/
|
|
127
146
|
list: (chatId: Id, options?: {
|
|
128
147
|
limit?: number;
|
|
129
148
|
before?: number;
|
|
149
|
+
after?: number;
|
|
130
150
|
}) => Promise<Page<Message>>;
|
|
131
151
|
/**
|
|
132
152
|
* **One message and a window either side of it**, oldest first, the one asked for marked
|
|
@@ -134,6 +154,8 @@ export declare class MaxClient {
|
|
|
134
154
|
*
|
|
135
155
|
* Measured 2026-09-22: from a message's own time, `backward: n` answers n messages ending with
|
|
136
156
|
* it and `forward: n` the n after it. Its time comes from its id, so no stored copy is needed.
|
|
157
|
+
* Correction 2026-09-23: that holds with `backward` above zero; with `backward: 0`, `forward`
|
|
158
|
+
* starts with the message itself (`messages.list` with `after` depends on the difference).
|
|
137
159
|
*
|
|
138
160
|
* ⚠ **A message that is gone is refused, not replaced by its neighbour** — MAX answers with
|
|
139
161
|
* whatever is nearest, and showing that as the message asked for would be a quiet lie.
|
|
@@ -143,13 +165,23 @@ export declare class MaxClient {
|
|
|
143
165
|
after?: number;
|
|
144
166
|
}) => Promise<WindowedMessage[]>;
|
|
145
167
|
/**
|
|
146
|
-
*
|
|
168
|
+
* **Where each attachment of one message can be downloaded from.** A photo and an audio carry
|
|
169
|
+
* their link; a file and a video carry only an id, and MAX answers the link for it (measured
|
|
170
|
+
* 2026-09-23). A video is taken as its largest MP4 — the streaming renditions are playlists,
|
|
171
|
+
* not a file. An attachment with no link to give is left out and named in `skipped`.
|
|
172
|
+
*/
|
|
173
|
+
links: (chatId: Id, messageId: Id) => Promise<{
|
|
174
|
+
links: AttachmentLink[];
|
|
175
|
+
skipped: string[];
|
|
176
|
+
}>;
|
|
177
|
+
/**
|
|
178
|
+
* Turns what `--before` or `--after` was given into a moment.
|
|
147
179
|
*
|
|
148
180
|
* **ISO 8601 is a time; a bare integer is a message id**, and a message id carries its own time
|
|
149
181
|
* (`timeOfMessageId`). Deciding between the two by length would be a trap that fires the first
|
|
150
182
|
* time either changes size, so the rule is what the string looks like.
|
|
151
183
|
*/
|
|
152
|
-
|
|
184
|
+
moment: (reference: string, flag?: string) => number;
|
|
153
185
|
/**
|
|
154
186
|
* Sends one message, retrying **only with the same `cid`**.
|
|
155
187
|
*
|
|
@@ -190,5 +222,7 @@ export interface PageRequest {
|
|
|
190
222
|
/** Part of a name. Refused below three characters — see `checkedQuery`. */
|
|
191
223
|
query?: string;
|
|
192
224
|
kind?: ChatKind;
|
|
225
|
+
/** Only chats MAX counts unread messages in; a chat where it did not say is not one of them. */
|
|
226
|
+
unread?: boolean;
|
|
193
227
|
}
|
|
194
228
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE5E,OAAO,EACL,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,EAAE,EACP,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,OAAO,EAGZ,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAA;AAG3B,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;QAwC5D;;;;;;WAMG;6BACwB,MAAM,KAAG,OAAO,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -53,7 +53,7 @@ export class MaxClient {
|
|
|
53
53
|
* exactly the chats a person recognises by name.
|
|
54
54
|
*/
|
|
55
55
|
list: async (options = {}) => {
|
|
56
|
-
const { limit, offset = 0, kind } = options;
|
|
56
|
+
const { limit, offset = 0, kind, unread } = options;
|
|
57
57
|
const query = checkedQuery(options.query);
|
|
58
58
|
if (this.#offline) {
|
|
59
59
|
const recorded = this.#cache;
|
|
@@ -62,8 +62,8 @@ export class MaxClient {
|
|
|
62
62
|
const store = recorded;
|
|
63
63
|
if (store.chats.count() === 0)
|
|
64
64
|
this.#recorded(undefined, "chats");
|
|
65
|
-
const items = store.chats.page({ limit: limit ?? Number.MAX_SAFE_INTEGER, offset, query, kind });
|
|
66
|
-
return { items, hasMore: offset + items.length < store.chats.count({ query, kind }) };
|
|
65
|
+
const items = store.chats.page({ limit: limit ?? Number.MAX_SAFE_INTEGER, offset, query, kind, unread });
|
|
66
|
+
return { items, hasMore: offset + items.length < store.chats.count({ query, kind, unread }) };
|
|
67
67
|
}
|
|
68
68
|
await this.#connectOnce();
|
|
69
69
|
const raw = asArray(this.#session().chats);
|
|
@@ -81,13 +81,13 @@ export class MaxClient {
|
|
|
81
81
|
});
|
|
82
82
|
const cache = this.#cache;
|
|
83
83
|
if (!cache)
|
|
84
|
-
return paged(matching(chats, query, kind), limit, offset);
|
|
84
|
+
return paged(matching(chats, { query, kind, unread }), limit, offset);
|
|
85
85
|
// Written first, then read back: the titles just resolved have to be in the store before it
|
|
86
86
|
// is asked to order and page over them, and the delta this login carried is only a slice of
|
|
87
87
|
// what it now holds.
|
|
88
88
|
cache.chats.write(chats);
|
|
89
|
-
const items = cache.chats.page({ limit: limit ?? Number.MAX_SAFE_INTEGER, offset, query, kind });
|
|
90
|
-
return { items, hasMore: offset + items.length < cache.chats.count({ query, kind }) };
|
|
89
|
+
const items = cache.chats.page({ limit: limit ?? Number.MAX_SAFE_INTEGER, offset, query, kind, unread });
|
|
90
|
+
return { items, hasMore: offset + items.length < cache.chats.count({ query, kind, unread }) };
|
|
91
91
|
},
|
|
92
92
|
/**
|
|
93
93
|
* Turns what the person typed into a chat id.
|
|
@@ -97,21 +97,23 @@ export class MaxClient {
|
|
|
97
97
|
* conversation is not undoable, so the caller is shown the candidates and asked to be specific.
|
|
98
98
|
*/
|
|
99
99
|
resolve: async (reference) => {
|
|
100
|
-
if (
|
|
100
|
+
if (isId(reference))
|
|
101
101
|
return reference.trim();
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
102
|
+
return pickChat(reference, (await this.chats.list()).items).id;
|
|
103
|
+
},
|
|
104
|
+
/**
|
|
105
|
+
* One chat and who is in it, from the list the login just refreshed.
|
|
106
|
+
*
|
|
107
|
+
* ⚠ **An id is checked here, where `resolve` lets any number through** — for a read that is
|
|
108
|
+
* the difference between an answer and a card of nulls for a chat that does not exist.
|
|
109
|
+
*/
|
|
110
|
+
show: async (reference) => {
|
|
111
|
+
const { items } = await this.chats.list();
|
|
112
|
+
const chat = isId(reference) ? items.find((one) => one.id === reference.trim()) : pickChat(reference, items);
|
|
113
|
+
if (!chat)
|
|
114
|
+
throw new CliError("not_found", `no chat ${reference.trim()} among this account's chats`);
|
|
115
|
+
const cache = this.#cache;
|
|
116
|
+
return { ...chat, members: chat.kind === "channel" || !cache ? null : cache.chats.members(chat.id) };
|
|
115
117
|
},
|
|
116
118
|
};
|
|
117
119
|
contacts = {
|
|
@@ -157,6 +159,31 @@ export class MaxClient {
|
|
|
157
159
|
* It is also the only thing that could ever prune somebody MAX has stopped returning, which is
|
|
158
160
|
* the second reason it exists.
|
|
159
161
|
*/
|
|
162
|
+
/**
|
|
163
|
+
* One person and the chats we share, **whoever they are** — a group member is as findable as
|
|
164
|
+
* a contact. `NEED-105` decides who `list` lists, not who can be looked up.
|
|
165
|
+
*
|
|
166
|
+
* Only from the store: the shared chats are its `chat_members`, which nothing else holds.
|
|
167
|
+
*/
|
|
168
|
+
show: async (reference) => {
|
|
169
|
+
const cache = this.#cache;
|
|
170
|
+
if (!cache) {
|
|
171
|
+
throw new CliError("configuration_error", `there is no local store for profile "${this.#store.profile}" to look people up in — the note above says why`);
|
|
172
|
+
}
|
|
173
|
+
if (this.#offline) {
|
|
174
|
+
if (cache.people.count() === 0)
|
|
175
|
+
this.#recorded(undefined, "people");
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
await this.#connectOnce();
|
|
179
|
+
await this.#peopleFor(asArray(this.#session().chats));
|
|
180
|
+
}
|
|
181
|
+
const person = pickPerson(reference, cache);
|
|
182
|
+
const chats = cache.people
|
|
183
|
+
.sharedChats(person.id)
|
|
184
|
+
.map(({ id, title, kind, lastMessageAt }) => ({ id, title, kind, lastMessageAt }));
|
|
185
|
+
return { ...person, chats };
|
|
186
|
+
},
|
|
160
187
|
sync: async () => {
|
|
161
188
|
if (this.#offline) {
|
|
162
189
|
throw new CliError("validation_error", "`--offline` reads what was recorded; it cannot sync");
|
|
@@ -208,16 +235,33 @@ export class MaxClient {
|
|
|
208
235
|
* it takes a moment and answers with what came before it — so `--before` is exact where a page
|
|
209
236
|
* number over a live conversation would repeat and skip rows.
|
|
210
237
|
*
|
|
238
|
+
* `after` reads the other way and **leaves the anchor out**, so the next page's hint does not
|
|
239
|
+
* repeat a row. MAX puts it in — measured 2026-09-23, `forward: n` with `backward: 0` starts
|
|
240
|
+
* with the message it was given — so one more is asked for and anything not later is dropped.
|
|
241
|
+
* `before` keeps the anchor, as it always has.
|
|
242
|
+
*
|
|
211
243
|
* `hasMore` here is a claim about the copy we hold, never about the chat: a full page back is
|
|
212
244
|
* the only evidence there is that another page exists.
|
|
213
245
|
*/
|
|
214
246
|
list: async (chatId, options = {}) => {
|
|
215
247
|
const limit = options.limit ?? 20;
|
|
248
|
+
const { before, after } = options;
|
|
249
|
+
if (after !== undefined) {
|
|
250
|
+
const found = this.#offline
|
|
251
|
+
? this.#recorded(this.#cache?.messages.window(chatId, after, 0, limit + 1), "messages")
|
|
252
|
+
: await this.#history(chatId, { from: after, backward: 0, forward: limit + 1 });
|
|
253
|
+
const later = found.filter((message) => Date.parse(message.timestamp) > after);
|
|
254
|
+
return { items: later.slice(0, limit), hasMore: later.length > limit };
|
|
255
|
+
}
|
|
216
256
|
if (this.#offline) {
|
|
217
|
-
const
|
|
218
|
-
|
|
257
|
+
const cache = this.#cache;
|
|
258
|
+
const stored = before === undefined
|
|
259
|
+
? cache?.messages.read(chatId, limit, ANY_AGE)
|
|
260
|
+
: cache?.messages.window(chatId, before, limit, 0);
|
|
261
|
+
const items = this.#recorded(stored, "messages");
|
|
262
|
+
return { items, hasMore: items.length >= limit };
|
|
219
263
|
}
|
|
220
|
-
const messages = await this.#history(chatId, { from:
|
|
264
|
+
const messages = await this.#history(chatId, { from: before ?? Date.now(), backward: limit, forward: 0 });
|
|
221
265
|
return { items: messages, hasMore: messages.length >= limit };
|
|
222
266
|
},
|
|
223
267
|
/**
|
|
@@ -226,6 +270,8 @@ export class MaxClient {
|
|
|
226
270
|
*
|
|
227
271
|
* Measured 2026-09-22: from a message's own time, `backward: n` answers n messages ending with
|
|
228
272
|
* it and `forward: n` the n after it. Its time comes from its id, so no stored copy is needed.
|
|
273
|
+
* Correction 2026-09-23: that holds with `backward` above zero; with `backward: 0`, `forward`
|
|
274
|
+
* starts with the message itself (`messages.list` with `after` depends on the difference).
|
|
229
275
|
*
|
|
230
276
|
* ⚠ **A message that is gone is refused, not replaced by its neighbour** — MAX answers with
|
|
231
277
|
* whatever is nearest, and showing that as the message asked for would be a quiet lie.
|
|
@@ -243,17 +289,58 @@ export class MaxClient {
|
|
|
243
289
|
return found.map((message) => (message.id === messageId ? { ...message, anchor: true } : message));
|
|
244
290
|
},
|
|
245
291
|
/**
|
|
246
|
-
*
|
|
292
|
+
* **Where each attachment of one message can be downloaded from.** A photo and an audio carry
|
|
293
|
+
* their link; a file and a video carry only an id, and MAX answers the link for it (measured
|
|
294
|
+
* 2026-09-23). A video is taken as its largest MP4 — the streaming renditions are playlists,
|
|
295
|
+
* not a file. An attachment with no link to give is left out and named in `skipped`.
|
|
296
|
+
*/
|
|
297
|
+
links: async (chatId, messageId) => {
|
|
298
|
+
if (this.#offline)
|
|
299
|
+
throw new CliError("validation_error", "`--offline` reads what was recorded; it cannot download");
|
|
300
|
+
const [message] = await this.messages.around(chatId, messageId);
|
|
301
|
+
if (!message)
|
|
302
|
+
throw new CliError("not_found", `no message ${messageId} in chat ${chatId}`);
|
|
303
|
+
const links = [];
|
|
304
|
+
const skipped = [];
|
|
305
|
+
for (const attachment of message.attachments) {
|
|
306
|
+
const { kind, name } = attachment;
|
|
307
|
+
if (attachment.fileId) {
|
|
308
|
+
const answer = await this.#wire.attachments.file({ chatId, messageId, fileId: attachment.fileId });
|
|
309
|
+
const url = typeof answer.url === "string" ? answer.url : undefined;
|
|
310
|
+
if (url)
|
|
311
|
+
links.push({ kind, url, ...(name ? { name } : {}), ...(answer.unsafe === true ? { unsafe: true } : {}) });
|
|
312
|
+
else
|
|
313
|
+
skipped.push(kind);
|
|
314
|
+
}
|
|
315
|
+
else if (attachment.videoId) {
|
|
316
|
+
const answer = await this.#wire.attachments.video({ chatId, messageId, videoId: attachment.videoId });
|
|
317
|
+
const url = largestMp4(answer);
|
|
318
|
+
if (url)
|
|
319
|
+
links.push({ kind, url });
|
|
320
|
+
else
|
|
321
|
+
skipped.push(kind);
|
|
322
|
+
}
|
|
323
|
+
else if (attachment.url && (kind === "photo" || kind === "audio")) {
|
|
324
|
+
links.push({ kind, url: attachment.url });
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
skipped.push(kind);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return { links, skipped };
|
|
331
|
+
},
|
|
332
|
+
/**
|
|
333
|
+
* Turns what `--before` or `--after` was given into a moment.
|
|
247
334
|
*
|
|
248
335
|
* **ISO 8601 is a time; a bare integer is a message id**, and a message id carries its own time
|
|
249
336
|
* (`timeOfMessageId`). Deciding between the two by length would be a trap that fires the first
|
|
250
337
|
* time either changes size, so the rule is what the string looks like.
|
|
251
338
|
*/
|
|
252
|
-
|
|
339
|
+
moment: (reference, flag = "--before") => {
|
|
253
340
|
const wanted = reference.trim();
|
|
254
341
|
const time = /^\d+$/.test(wanted) ? timeOfMessageId(wanted) : Date.parse(wanted);
|
|
255
342
|
if (time === undefined || Number.isNaN(time)) {
|
|
256
|
-
throw new CliError("validation_error",
|
|
343
|
+
throw new CliError("validation_error", `${flag} takes a message id or an ISO 8601 time, not "${wanted}"`);
|
|
257
344
|
}
|
|
258
345
|
return time;
|
|
259
346
|
},
|
|
@@ -669,6 +756,10 @@ export class MaxClient {
|
|
|
669
756
|
return this.#login;
|
|
670
757
|
}
|
|
671
758
|
}
|
|
759
|
+
const largestMp4 = (answer) => Object.entries(answer)
|
|
760
|
+
.map(([key, value]) => ({ height: /^MP4_(\d+)$/.exec(key)?.[1], value }))
|
|
761
|
+
.filter((entry) => entry.height !== undefined && typeof entry.value === "string")
|
|
762
|
+
.sort((a, b) => Number(b.height) - Number(a.height))[0]?.value;
|
|
672
763
|
/**
|
|
673
764
|
* **The shortest search the index can answer is three characters**, and below that it returns
|
|
674
765
|
* nothing rather than complaining (measured 2026-09-22). An empty list reads as "no matches",
|
|
@@ -679,6 +770,51 @@ export class MaxClient {
|
|
|
679
770
|
* on something the person never asked about.
|
|
680
771
|
*/
|
|
681
772
|
const MIN_QUERY = 3;
|
|
773
|
+
const isId = (reference) => /^-?\d+$/.test(reference.trim());
|
|
774
|
+
/**
|
|
775
|
+
* A name matched exactly first, then as a fragment — and **an ambiguous one is an error, not a
|
|
776
|
+
* guess**: sending to the wrong conversation is not undoable, so the caller is shown the
|
|
777
|
+
* candidates and asked to be specific.
|
|
778
|
+
*/
|
|
779
|
+
const pickChat = (reference, chats) => {
|
|
780
|
+
const wanted = reference.trim().toLowerCase();
|
|
781
|
+
const titled = chats.filter((chat) => chat.title !== null);
|
|
782
|
+
const exact = titled.filter((chat) => chat.title?.toLowerCase() === wanted);
|
|
783
|
+
const matches = exact.length > 0 ? exact : titled.filter((chat) => chat.title?.toLowerCase().includes(wanted));
|
|
784
|
+
if (matches.length === 1 && matches[0])
|
|
785
|
+
return matches[0];
|
|
786
|
+
if (matches.length === 0)
|
|
787
|
+
throw new CliError("not_found", `no chat matches "${reference}"`);
|
|
788
|
+
throw ambiguous(reference, "chats", matches.map((chat) => ({ id: chat.id, title: chat.title })), ({ title }) => String(title));
|
|
789
|
+
};
|
|
790
|
+
/**
|
|
791
|
+
* As `pickChat`, over names and @usernames. Matched here rather than in SQL because SQLite's
|
|
792
|
+
* `lower()` folds ASCII only, and most of these names are Cyrillic.
|
|
793
|
+
*/
|
|
794
|
+
const pickPerson = (reference, cache) => {
|
|
795
|
+
const trimmed = reference.trim();
|
|
796
|
+
if (isId(trimmed)) {
|
|
797
|
+
const known = cache.people.get(trimmed);
|
|
798
|
+
if (!known)
|
|
799
|
+
throw new CliError("not_found", `no person ${trimmed} in what this account has seen`);
|
|
800
|
+
return known;
|
|
801
|
+
}
|
|
802
|
+
const wanted = trimmed.replace(/^@/, "").toLowerCase();
|
|
803
|
+
const everyone = cache.people.page({ order: "name", limit: Number.MAX_SAFE_INTEGER, offset: 0 });
|
|
804
|
+
const fields = (person) => [person.name, person.username].filter(isPresent).map((one) => one.toLowerCase());
|
|
805
|
+
const exact = everyone.filter((person) => fields(person).includes(wanted));
|
|
806
|
+
const matches = exact.length > 0 ? exact : everyone.filter((person) => fields(person).some((one) => one.includes(wanted)));
|
|
807
|
+
if (matches.length === 1 && matches[0])
|
|
808
|
+
return matches[0];
|
|
809
|
+
if (matches.length === 0)
|
|
810
|
+
throw new CliError("not_found", `nobody matches "${reference}"`);
|
|
811
|
+
throw ambiguous(reference, "people", matches.map(({ id, name, username }) => ({ id, name, username })), ({ name, username }) => [name, username && `@${username}`].filter(isPresent).join(" "));
|
|
812
|
+
};
|
|
813
|
+
const ambiguous = (reference, what, candidates, label) => {
|
|
814
|
+
const width = Math.max(...candidates.map(({ id }) => id.length));
|
|
815
|
+
const lines = candidates.map((candidate) => ` ${candidate.id.padEnd(width)} ${label(candidate)}`).join("\n");
|
|
816
|
+
return new CliError("validation_error", `"${reference}" matches ${candidates.length} ${what} — name one by its id:\n${lines}`, { candidates });
|
|
817
|
+
};
|
|
682
818
|
const checkedQuery = (query) => {
|
|
683
819
|
if (query === undefined)
|
|
684
820
|
return undefined;
|
|
@@ -717,9 +853,10 @@ const batched = (items, size) => {
|
|
|
717
853
|
* The alternative was to let a filter only work when a cache happened to exist, which makes the
|
|
718
854
|
* answer depend on something the person never asked about.
|
|
719
855
|
*/
|
|
720
|
-
const matching = (chats, query, kind) => {
|
|
856
|
+
const matching = (chats, { query, kind, unread }) => {
|
|
721
857
|
const needle = query?.toLocaleLowerCase();
|
|
722
858
|
return chats.filter((chat) => (kind === undefined || chat.kind === kind) &&
|
|
859
|
+
(!unread || (chat.unreadCount ?? 0) > 0) &&
|
|
723
860
|
(needle === undefined || (chat.title ?? "").toLocaleLowerCase().includes(needle)));
|
|
724
861
|
};
|
|
725
862
|
/** As `matching`, over the two columns `people_fts` indexes. */
|