@leemour/cli-messaging 0.83.0 → 0.85.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 +21 -0
- package/dist/cli/index.d.ts +6 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/admin-folders-command.d.ts +5 -0
- package/dist/cli/messenger/admin-folders-command.d.ts.map +1 -0
- package/dist/cli/messenger/admin-folders-command.js +44 -0
- package/dist/cli/messenger/admin-folders-command.js.map +1 -0
- package/dist/cli/messenger/after.d.ts +1 -1
- package/dist/cli/messenger/after.d.ts.map +1 -1
- package/dist/cli/messenger/after.js +11 -3
- package/dist/cli/messenger/after.js.map +1 -1
- package/dist/cli/messenger/archive-commands.js +6 -6
- package/dist/cli/messenger/archive-commands.js.map +1 -1
- package/dist/cli/messenger/backfill-command.d.ts.map +1 -1
- package/dist/cli/messenger/backfill-command.js +75 -70
- package/dist/cli/messenger/backfill-command.js.map +1 -1
- package/dist/cli/messenger/chats-command.d.ts.map +1 -1
- package/dist/cli/messenger/chats-command.js +2 -0
- package/dist/cli/messenger/chats-command.js.map +1 -1
- package/dist/cli/messenger/context.d.ts +17 -0
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js +23 -0
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/download-command.d.ts.map +1 -1
- package/dist/cli/messenger/download-command.js +2 -1
- package/dist/cli/messenger/download-command.js.map +1 -1
- package/dist/cli/messenger/inbox.d.ts +2 -47
- package/dist/cli/messenger/inbox.d.ts.map +1 -1
- package/dist/cli/messenger/inbox.js +8 -84
- package/dist/cli/messenger/inbox.js.map +1 -1
- package/dist/cli/messenger/patience.d.ts +0 -2
- package/dist/cli/messenger/patience.d.ts.map +1 -1
- package/dist/cli/messenger/patience.js +0 -21
- package/dist/cli/messenger/patience.js.map +1 -1
- package/dist/cli/messenger/polls-command.d.ts +0 -26
- package/dist/cli/messenger/polls-command.d.ts.map +1 -1
- package/dist/cli/messenger/polls-command.js +1 -28
- package/dist/cli/messenger/polls-command.js.map +1 -1
- package/dist/cli/messenger/port.d.ts +16 -3
- package/dist/cli/messenger/port.d.ts.map +1 -1
- package/dist/cli/messenger/port.js.map +1 -1
- package/dist/cli/messenger/review.d.ts +0 -29
- package/dist/cli/messenger/review.d.ts.map +1 -1
- package/dist/cli/messenger/review.js +2 -99
- package/dist/cli/messenger/review.js.map +1 -1
- package/dist/cli/messenger/stored.d.ts +3 -1
- package/dist/cli/messenger/stored.d.ts.map +1 -1
- package/dist/cli/messenger/stored.js +36 -3
- package/dist/cli/messenger/stored.js.map +1 -1
- package/dist/domain/models.d.ts +13 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/models.js.map +1 -1
- package/dist/mcp/tool.d.ts +2 -1
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js +4 -1
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/tools/folders.d.ts +5 -0
- package/dist/mcp/tools/folders.d.ts.map +1 -0
- package/dist/mcp/tools/folders.js +55 -0
- package/dist/mcp/tools/folders.js.map +1 -0
- package/dist/mcp/tools/polls.js +1 -1
- package/dist/mcp/tools/polls.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +2 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/parity/bin.js +20 -9
- package/dist/parity/bin.js.map +1 -1
- package/dist/parity/index.d.ts +1 -0
- package/dist/parity/index.d.ts.map +1 -1
- package/dist/parity/index.js +1 -0
- package/dist/parity/index.js.map +1 -1
- package/dist/parity/pages.d.ts +8 -0
- package/dist/parity/pages.d.ts.map +1 -0
- package/dist/parity/pages.js +39 -0
- package/dist/parity/pages.js.map +1 -0
- package/dist/sends/guard.d.ts +2 -2
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +1 -1
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/polls.d.ts +27 -0
- package/dist/sends/polls.d.ts.map +1 -0
- package/dist/sends/polls.js +31 -0
- package/dist/sends/polls.js.map +1 -0
- package/dist/sends/recipients.d.ts +1 -1
- package/dist/sends/recipients.d.ts.map +1 -1
- package/dist/sends/recipients.js +1 -1
- package/dist/sends/recipients.js.map +1 -1
- package/dist/services/archive.d.ts +4 -1
- package/dist/services/archive.d.ts.map +1 -1
- package/dist/services/archive.js +25 -18
- package/dist/services/archive.js.map +1 -1
- package/dist/{cli/messenger → services}/backfill-estimate.d.ts +1 -1
- package/dist/services/backfill-estimate.d.ts.map +1 -0
- package/dist/services/backfill-estimate.js.map +1 -0
- package/dist/services/folders.d.ts +25 -0
- package/dist/services/folders.d.ts.map +1 -0
- package/dist/services/folders.js +66 -0
- package/dist/services/folders.js.map +1 -0
- package/dist/services/inbox.d.ts +74 -2
- package/dist/services/inbox.d.ts.map +1 -1
- package/dist/services/inbox.js +177 -2
- package/dist/services/inbox.js.map +1 -1
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/patience.d.ts +3 -0
- package/dist/services/patience.d.ts.map +1 -0
- package/dist/services/patience.js +22 -0
- package/dist/services/patience.js.map +1 -0
- package/dist/store/open.d.ts +8 -0
- package/dist/store/open.d.ts.map +1 -1
- package/dist/store/open.js +39 -0
- package/dist/store/open.js.map +1 -1
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +2 -0
- package/dist/store/store.js.map +1 -1
- package/package.json +2 -2
- package/parity.json +6 -14
- package/dist/cli/messenger/backfill-estimate.d.ts.map +0 -1
- package/dist/cli/messenger/backfill-estimate.js.map +0 -1
- /package/dist/{cli/messenger → services}/backfill-estimate.js +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Folder } from "../domain/models.js";
|
|
2
|
+
import { type Operated } from "../sends/guarded.js";
|
|
3
|
+
import type { ServiceDeps } from "./deps.js";
|
|
4
|
+
export interface FolderEdit {
|
|
5
|
+
title?: string;
|
|
6
|
+
/** Chats as typed. */
|
|
7
|
+
add?: string[];
|
|
8
|
+
remove?: string[];
|
|
9
|
+
}
|
|
10
|
+
/** The owner's chat folders. Nobody else sees them, but they change the owner's own app, so each change is guarded. */
|
|
11
|
+
export interface FoldersService {
|
|
12
|
+
list(): Promise<Folder[]>;
|
|
13
|
+
create(title: string, chats: string[]): Promise<Operated<{
|
|
14
|
+
folder: Folder;
|
|
15
|
+
}>>;
|
|
16
|
+
/** `folder` is its id, or its title exactly. */
|
|
17
|
+
update(folder: string, edit: FolderEdit): Promise<Operated<{
|
|
18
|
+
folder: Folder;
|
|
19
|
+
}>>;
|
|
20
|
+
delete(folder: string): Promise<Operated<{
|
|
21
|
+
folderId: string;
|
|
22
|
+
}>>;
|
|
23
|
+
}
|
|
24
|
+
export declare const foldersService: (deps: ServiceDeps) => FoldersService;
|
|
25
|
+
//# sourceMappingURL=folders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../src/services/folders.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAM,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB;IACtB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,uHAAuH;AACvH,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;IAC7E,gDAAgD;IAChD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;IAC/E,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;CAChE;AAED,eAAO,MAAM,cAAc,SAAU,WAAW,KAAG,cAuElD,CAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { CliError } from "@leemour/cli-core";
|
|
2
|
+
import { capability } from "../cli/messenger/port.js";
|
|
3
|
+
import { guardedWrite } from "../sends/guarded.js";
|
|
4
|
+
import { newOperationId } from "../sends/send-id.js";
|
|
5
|
+
export const foldersService = (deps) => {
|
|
6
|
+
const online = async (command) => {
|
|
7
|
+
if (deps.offline)
|
|
8
|
+
throw new CliError("validation_error", `\`${command}\` asks the messenger; not with --offline`);
|
|
9
|
+
return deps.connection();
|
|
10
|
+
};
|
|
11
|
+
const ids = async (connection, chats = []) => {
|
|
12
|
+
const found = [];
|
|
13
|
+
for (const chat of chats)
|
|
14
|
+
found.push((await connection.resolve(chat)).id);
|
|
15
|
+
return found;
|
|
16
|
+
};
|
|
17
|
+
const folderOf = async (connection, typed) => {
|
|
18
|
+
const all = await capability(connection, "folders", "list its folders")();
|
|
19
|
+
const found = all.find((one) => one.id === typed) ?? all.filter((one) => one.title === typed);
|
|
20
|
+
if (!Array.isArray(found))
|
|
21
|
+
return found;
|
|
22
|
+
if (found.length === 1)
|
|
23
|
+
return found[0];
|
|
24
|
+
throw new CliError(found.length === 0 ? "not_found" : "validation_error", found.length === 0
|
|
25
|
+
? `no folder "${typed}" — \`chats folders list\` shows them`
|
|
26
|
+
: `${found.length} folders are called "${typed}" — name one by its id`);
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
list: async () => capability(await online("chats folders list"), "folders", "list its folders")(),
|
|
30
|
+
create: async (title, chats) => {
|
|
31
|
+
if (title.trim() === "")
|
|
32
|
+
throw new CliError("validation_error", "a folder needs a name");
|
|
33
|
+
const connection = await online("chats folders create");
|
|
34
|
+
const create = capability(connection, "createFolder", "create a folder");
|
|
35
|
+
const chatIds = await ids(connection, chats);
|
|
36
|
+
const operationId = newOperationId();
|
|
37
|
+
const folder = await guardedWrite(deps.guard, { operationId, chatId: null, kind: "account", action: "folder-create" }, () => create(title.trim(), chatIds));
|
|
38
|
+
return { operationId, folder };
|
|
39
|
+
},
|
|
40
|
+
update: async (folder, edit) => {
|
|
41
|
+
if (edit.title === undefined && !edit.add?.length && !edit.remove?.length) {
|
|
42
|
+
throw new CliError("validation_error", "nothing to change — give --title, --add or --remove");
|
|
43
|
+
}
|
|
44
|
+
const connection = await online("chats folders update");
|
|
45
|
+
const update = capability(connection, "updateFolder", "change a folder");
|
|
46
|
+
const { id } = await folderOf(connection, folder);
|
|
47
|
+
const change = {
|
|
48
|
+
...(edit.title === undefined ? {} : { title: edit.title }),
|
|
49
|
+
...(edit.add?.length ? { add: await ids(connection, edit.add) } : {}),
|
|
50
|
+
...(edit.remove?.length ? { remove: await ids(connection, edit.remove) } : {}),
|
|
51
|
+
};
|
|
52
|
+
const operationId = newOperationId();
|
|
53
|
+
const changed = await guardedWrite(deps.guard, { operationId, chatId: null, kind: "account", action: "folder-update" }, () => update(id, change));
|
|
54
|
+
return { operationId, folder: changed };
|
|
55
|
+
},
|
|
56
|
+
delete: async (folder) => {
|
|
57
|
+
const connection = await online("chats folders delete");
|
|
58
|
+
const remove = capability(connection, "deleteFolder", "delete a folder");
|
|
59
|
+
const { id } = await folderOf(connection, folder);
|
|
60
|
+
const operationId = newOperationId();
|
|
61
|
+
await guardedWrite(deps.guard, { operationId, chatId: null, kind: "account", action: "folder-delete" }, () => remove(id));
|
|
62
|
+
return { operationId, folderId: id };
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=folders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folders.js","sourceRoot":"","sources":["../../src/services/folders.ts"],"names":[],"mappings":"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"}
|
package/dist/services/inbox.d.ts
CHANGED
|
@@ -1,6 +1,78 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Inbox, Review } from "../domain/models.js";
|
|
1
|
+
import type { MessengerAdapter } from "../cli/messenger/port.js";
|
|
2
|
+
import type { Chat, Id, Inbox, Message, Review } from "../domain/models.js";
|
|
3
3
|
import type { ServiceDeps } from "./deps.js";
|
|
4
|
+
/**
|
|
5
|
+
* **At most this many history reads per `inbox`**, as in max-cli: a person opening twenty chats in
|
|
6
|
+
* one burst is already more than a person does, and the rest are named in `skipped`, not lost.
|
|
7
|
+
*/
|
|
8
|
+
export declare const INBOX_CHATS = 20;
|
|
9
|
+
/** The newest dialogs looked at. Walking every dialog hit FLOOD_WAIT once (tg handoff §4.14). */
|
|
10
|
+
export declare const CHAT_WINDOW = 100;
|
|
11
|
+
export declare const byRecency: (chats: Chat[]) => Chat[];
|
|
12
|
+
export declare const heard: (chats: Chat[], all: boolean) => {
|
|
13
|
+
heard: Chat[];
|
|
14
|
+
quiet: number;
|
|
15
|
+
};
|
|
16
|
+
export declare const capped: (chats: Chat[], most: number) => {
|
|
17
|
+
read: Chat[];
|
|
18
|
+
skipped: {
|
|
19
|
+
id: string;
|
|
20
|
+
title: string | null;
|
|
21
|
+
lastMessageAt: string | null;
|
|
22
|
+
}[];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Other people's unread messages, as the messenger counts them: for each chat with a count, its
|
|
26
|
+
* newest that many. Reading marks nothing read, so the same messages come back until they are read
|
|
27
|
+
* somewhere else — right for a person, wrong for a scheduled run, which is what `since` is for.
|
|
28
|
+
*
|
|
29
|
+
* Muted and archived chats are left out unless `all`, or they mention the owner: on a busy account
|
|
30
|
+
* they are most of what is unread, and they would take the history reads a person's chat needs.
|
|
31
|
+
*/
|
|
32
|
+
export declare const unreadIn: (adapter: MessengerAdapter, { limit, all }: {
|
|
33
|
+
limit: number;
|
|
34
|
+
all?: boolean;
|
|
35
|
+
}) => Promise<Inbox>;
|
|
36
|
+
/**
|
|
37
|
+
* Other people's messages in every chat that changed after `since`.
|
|
38
|
+
*
|
|
39
|
+
* **Everything is cut at the chat list's newest message**, the snapshot taken first. The reads run
|
|
40
|
+
* one after another, so a chat read early can gain a message while a later one is read; had the
|
|
41
|
+
* saved point followed the later read, that message would sit behind it and never show. Anything
|
|
42
|
+
* newer waits for the next run and shows once there.
|
|
43
|
+
*/
|
|
44
|
+
export declare const newIn: (adapter: MessengerAdapter, { since, limit, all }: {
|
|
45
|
+
since: number;
|
|
46
|
+
limit: number;
|
|
47
|
+
all?: boolean;
|
|
48
|
+
}) => Promise<Inbox>;
|
|
49
|
+
/** Every page is a history request; 20 chats of 3 pages stays well inside what one account may ask. */
|
|
50
|
+
export declare const REVIEW_CHATS = 20;
|
|
51
|
+
export interface ReviewOptions {
|
|
52
|
+
since: number;
|
|
53
|
+
/** A chat as typed; only that one is read, muted or not. */
|
|
54
|
+
chat?: string;
|
|
55
|
+
all?: boolean;
|
|
56
|
+
/** Keep only questions nobody answered in this many hours. */
|
|
57
|
+
unansweredAfterHours?: number;
|
|
58
|
+
now?: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* **Every message, both sides, in each chat that changed after `since`** — what a review of who
|
|
62
|
+
* owes what reads, where `inbox` reads only other people's newest few. Cut at the chat list's newest
|
|
63
|
+
* message, as `inbox --new` is, so the next review starting at `until` misses nothing.
|
|
64
|
+
*/
|
|
65
|
+
export declare const reviewIn: (adapter: MessengerAdapter, { since, chat, all, unansweredAfterHours, now }: ReviewOptions) => Promise<Review>;
|
|
66
|
+
/**
|
|
67
|
+
* Questions from others still waiting, as max-cli counts them. A question is a message with `?` in
|
|
68
|
+
* it, or a reply to the owner or an admin. It is answered when one of them replied to it, or was the
|
|
69
|
+
* next to speak after the person who asked — "the next to speak" rather than "spoke later", because
|
|
70
|
+
* in a busy group an admin answering somebody else says nothing about this question.
|
|
71
|
+
*/
|
|
72
|
+
export declare const unanswered: (messages: Message[], { answerers, before }: {
|
|
73
|
+
answerers: ReadonlySet<Id>;
|
|
74
|
+
before: number;
|
|
75
|
+
}) => Message[];
|
|
4
76
|
export interface InboxService {
|
|
5
77
|
/** Other people's unread messages; with `since` (ms, parsed by the caller), what arrived after it instead. */
|
|
6
78
|
read(options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/services/inbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/services/inbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAa,OAAO,EAAE,MAAM,EAAc,MAAM,qBAAqB,CAAA;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,WAAW,KAAK,CAAA;AAC7B,iGAAiG;AACjG,eAAO,MAAM,WAAW,MAAM,CAAA;AAE9B,eAAO,MAAM,SAAS,UAAW,IAAI,EAAE,KAAG,IAAI,EACmD,CAAA;AAMjG,eAAO,MAAM,KAAK,UAAW,IAAI,EAAE,OAAO,OAAO;;;CAG2C,CAAA;AAE5F,eAAO,MAAM,MAAM,UAAW,IAAI,EAAE,QAAQ,MAAM;IAChD,IAAI;IACJ,OAAO;;;;;CACP,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,YACV,gBAAgB,kBACD;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,KACvD,OAAO,CAAC,KAAK,CAcf,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,YACP,gBAAgB,yBACM;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7E,OAAO,CAAC,KAAK,CAgCf,CAAA;AAED,uGAAuG;AACvG,eAAO,MAAM,YAAY,KAAK,CAAA;AAI9B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAqBD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,YACV,gBAAgB,mDAC6C,aAAa,KAClF,OAAO,CAAC,MAAM,CAwChB,CAAA;AAKD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,aACX,OAAO,EAAE,yBACI;IAAE,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,EAsBT,CAAA;AAED,MAAM,WAAW,YAAY;IAC3B,8GAA8G;IAC9G,IAAI,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IAC/E,0EAA0E;IAC1E,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAChD;AAED,eAAO,MAAM,YAAY,SAAU,WAAW,KAAG,YAkB/C,CAAA"}
|
package/dist/services/inbox.js
CHANGED
|
@@ -1,6 +1,181 @@
|
|
|
1
1
|
import { CliError } from "@leemour/cli-core";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* **At most this many history reads per `inbox`**, as in max-cli: a person opening twenty chats in
|
|
4
|
+
* one burst is already more than a person does, and the rest are named in `skipped`, not lost.
|
|
5
|
+
*/
|
|
6
|
+
export const INBOX_CHATS = 20;
|
|
7
|
+
/** The newest dialogs looked at. Walking every dialog hit FLOOD_WAIT once (tg handoff §4.14). */
|
|
8
|
+
export const CHAT_WINDOW = 100;
|
|
9
|
+
export const byRecency = (chats) => chats.toSorted((a, b) => Date.parse(b.lastMessageAt ?? "") - Date.parse(a.lastMessageAt ?? ""));
|
|
10
|
+
/** Muted or archived, and nothing in it mentions the owner or replies to them. */
|
|
11
|
+
const isQuiet = (chat) => (chat.muted === true || chat.archived === true) && (chat.unreadMentions ?? 0) === 0;
|
|
12
|
+
export const heard = (chats, all) => all
|
|
13
|
+
? { heard: chats, quiet: 0 }
|
|
14
|
+
: { heard: chats.filter((chat) => !isQuiet(chat)), quiet: chats.filter(isQuiet).length };
|
|
15
|
+
export const capped = (chats, most) => ({
|
|
16
|
+
read: chats.slice(0, most),
|
|
17
|
+
skipped: chats.slice(most).map(({ id, title, lastMessageAt }) => ({ id, title, lastMessageAt })),
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* Other people's unread messages, as the messenger counts them: for each chat with a count, its
|
|
21
|
+
* newest that many. Reading marks nothing read, so the same messages come back until they are read
|
|
22
|
+
* somewhere else — right for a person, wrong for a scheduled run, which is what `since` is for.
|
|
23
|
+
*
|
|
24
|
+
* Muted and archived chats are left out unless `all`, or they mention the owner: on a busy account
|
|
25
|
+
* they are most of what is unread, and they would take the history reads a person's chat needs.
|
|
26
|
+
*/
|
|
27
|
+
export const unreadIn = async (adapter, { limit, all = false }) => {
|
|
28
|
+
const page = await adapter.chats({ limit: CHAT_WINDOW, offset: 0 });
|
|
29
|
+
const { heard: waiting, quiet } = heard(byRecency(page.items.filter((chat) => (chat.unreadCount ?? 0) > 0)), all);
|
|
30
|
+
const { read, skipped } = capped(waiting, INBOX_CHATS);
|
|
31
|
+
const chats = [];
|
|
32
|
+
for (const { id, title, kind, unreadCount } of read) {
|
|
33
|
+
const count = unreadCount ?? 0;
|
|
34
|
+
const wanted = Math.min(count, limit);
|
|
35
|
+
const { items } = await adapter.history(id, { limit: wanted });
|
|
36
|
+
const theirs = items.slice(-wanted).filter((message) => !message.outgoing);
|
|
37
|
+
if (theirs.length > 0)
|
|
38
|
+
chats.push({ id, title, kind, unreadCount, messages: theirs, more: count > limit });
|
|
39
|
+
}
|
|
40
|
+
return { mode: "unread", chats, skipped, partial: page.hasMore, quiet };
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Other people's messages in every chat that changed after `since`.
|
|
44
|
+
*
|
|
45
|
+
* **Everything is cut at the chat list's newest message**, the snapshot taken first. The reads run
|
|
46
|
+
* one after another, so a chat read early can gain a message while a later one is read; had the
|
|
47
|
+
* saved point followed the later read, that message would sit behind it and never show. Anything
|
|
48
|
+
* newer waits for the next run and shows once there.
|
|
49
|
+
*/
|
|
50
|
+
export const newIn = async (adapter, { since, limit, all = false }) => {
|
|
51
|
+
const page = await adapter.chats({ limit: CHAT_WINDOW, offset: 0 });
|
|
52
|
+
const changed = byRecency(page.items.filter((chat) => chat.lastMessageAt !== null && Date.parse(chat.lastMessageAt) > since));
|
|
53
|
+
const cut = Math.max(since, ...changed.map((chat) => Date.parse(chat.lastMessageAt ?? "")));
|
|
54
|
+
const { heard: wanted, quiet } = heard(changed, all);
|
|
55
|
+
const { read, skipped } = capped(wanted, INBOX_CHATS);
|
|
56
|
+
let until = since;
|
|
57
|
+
const chats = [];
|
|
58
|
+
for (const { id, title, kind, unreadCount } of read) {
|
|
59
|
+
const { items } = await adapter.history(id, { limit });
|
|
60
|
+
const fresh = items.filter((message) => {
|
|
61
|
+
const time = Date.parse(message.timestamp);
|
|
62
|
+
return time > since && time <= cut;
|
|
63
|
+
});
|
|
64
|
+
for (const message of fresh)
|
|
65
|
+
until = Math.max(until, Date.parse(message.timestamp));
|
|
66
|
+
const theirs = fresh.filter((message) => !message.outgoing);
|
|
67
|
+
if (theirs.length > 0)
|
|
68
|
+
chats.push({ id, title, kind, unreadCount, messages: theirs, more: fresh.length >= limit });
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
mode: "new",
|
|
72
|
+
since: new Date(since).toISOString(),
|
|
73
|
+
until: new Date(until).toISOString(),
|
|
74
|
+
chats,
|
|
75
|
+
skipped,
|
|
76
|
+
// Every dialog in the window changed, so an older one past it may have too.
|
|
77
|
+
partial: page.hasMore && changed.length === page.items.length,
|
|
78
|
+
quiet,
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
/** Every page is a history request; 20 chats of 3 pages stays well inside what one account may ask. */
|
|
82
|
+
export const REVIEW_CHATS = 20;
|
|
83
|
+
const REVIEW_PAGE = 100;
|
|
84
|
+
const REVIEW_PER_CHAT = 300;
|
|
85
|
+
/**
|
|
86
|
+
* The chat's messages after `since` and up to `cut`, oldest first. The history pages backwards —
|
|
87
|
+
* Telegram's cannot start from a time — so a chat cut short keeps its newest, and the review is
|
|
88
|
+
* incomplete rather than silently missing the start.
|
|
89
|
+
*/
|
|
90
|
+
const window = async (adapter, chat, since, cut) => {
|
|
91
|
+
const messages = [];
|
|
92
|
+
let before;
|
|
93
|
+
while (true) {
|
|
94
|
+
const page = await adapter.history(chat, { limit: REVIEW_PAGE, ...(before === undefined ? {} : { before }) });
|
|
95
|
+
const time = (message) => Date.parse(message.timestamp);
|
|
96
|
+
messages.unshift(...page.items.filter((message) => time(message) > since && time(message) <= cut));
|
|
97
|
+
const oldest = page.items[0];
|
|
98
|
+
if (!page.hasMore || !oldest || time(oldest) <= since)
|
|
99
|
+
return { messages, more: false };
|
|
100
|
+
if (messages.length >= REVIEW_PER_CHAT)
|
|
101
|
+
return { messages: messages.slice(-REVIEW_PER_CHAT), more: true };
|
|
102
|
+
before = oldest.id;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* **Every message, both sides, in each chat that changed after `since`** — what a review of who
|
|
107
|
+
* owes what reads, where `inbox` reads only other people's newest few. Cut at the chat list's newest
|
|
108
|
+
* message, as `inbox --new` is, so the next review starting at `until` misses nothing.
|
|
109
|
+
*/
|
|
110
|
+
export const reviewIn = async (adapter, { since, chat, all = false, unansweredAfterHours, now = Date.now() }) => {
|
|
111
|
+
const page = await adapter.chats({ limit: CHAT_WINDOW, offset: 0 });
|
|
112
|
+
const changed = byRecency(page.items.filter((one) => one.lastMessageAt !== null && Date.parse(one.lastMessageAt) > since));
|
|
113
|
+
const cut = Math.max(since, ...changed.map((one) => Date.parse(one.lastMessageAt ?? "")));
|
|
114
|
+
const only = chat === undefined ? undefined : (await adapter.resolve(chat)).id;
|
|
115
|
+
const { heard: wanted, quiet } = only === undefined ? heard(changed, all) : { heard: changed.filter((one) => one.id === only), quiet: 0 };
|
|
116
|
+
const { read, skipped } = capped(wanted, REVIEW_CHATS);
|
|
117
|
+
const chats = [];
|
|
118
|
+
for (const { id, title, kind } of read) {
|
|
119
|
+
const { messages, more } = await window(adapter, id, since, cut);
|
|
120
|
+
if (messages.length > 0)
|
|
121
|
+
chats.push({ id, title, kind, messages, more });
|
|
122
|
+
}
|
|
123
|
+
const partial = page.hasMore && changed.length === page.items.length;
|
|
124
|
+
const found = {
|
|
125
|
+
since: new Date(since).toISOString(),
|
|
126
|
+
until: new Date(cut).toISOString(),
|
|
127
|
+
complete: skipped.length === 0 && !partial && chats.every((one) => !one.more),
|
|
128
|
+
chats,
|
|
129
|
+
skipped,
|
|
130
|
+
partial,
|
|
131
|
+
quiet,
|
|
132
|
+
};
|
|
133
|
+
if (unansweredAfterHours === undefined)
|
|
134
|
+
return found;
|
|
135
|
+
const open = [];
|
|
136
|
+
for (const one of chats) {
|
|
137
|
+
const admins = one.kind === "dialog" ? [] : ((await adapter.admins?.(one.id)) ?? undefined);
|
|
138
|
+
const questions = unanswered(one.messages, {
|
|
139
|
+
answerers: new Set(admins ?? []),
|
|
140
|
+
before: now - unansweredAfterHours * 3_600_000,
|
|
141
|
+
});
|
|
142
|
+
if (questions.length > 0) {
|
|
143
|
+
open.push({ ...one, messages: questions, answeredBy: admins === undefined ? "owner" : "owner-and-admins" });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return { ...found, chats: open, unanswered: { olderThanHours: unansweredAfterHours } };
|
|
147
|
+
};
|
|
148
|
+
/** A shared link's query string is not a question. */
|
|
149
|
+
const LINKS = /https?:\/\/\S+/g;
|
|
150
|
+
/**
|
|
151
|
+
* Questions from others still waiting, as max-cli counts them. A question is a message with `?` in
|
|
152
|
+
* it, or a reply to the owner or an admin. It is answered when one of them replied to it, or was the
|
|
153
|
+
* next to speak after the person who asked — "the next to speak" rather than "spoke later", because
|
|
154
|
+
* in a busy group an admin answering somebody else says nothing about this question.
|
|
155
|
+
*/
|
|
156
|
+
export const unanswered = (messages, { answerers, before }) => {
|
|
157
|
+
const answers = (message) => message.outgoing === true || (message.senderId !== null && answerers.has(message.senderId));
|
|
158
|
+
const byId = new Map(messages.map((message) => [message.id, message]));
|
|
159
|
+
// Telegram names only the id a reply answers; the message itself is found in the window, or not at all.
|
|
160
|
+
const repliesToAnswerer = (message) => {
|
|
161
|
+
const to = message.replyTo?.id ?? message.replyToId;
|
|
162
|
+
const quoted = to === undefined ? undefined : byId.get(to);
|
|
163
|
+
if (quoted)
|
|
164
|
+
return answers(quoted);
|
|
165
|
+
return (message.replyTo !== null && (message.replyTo.outgoing === true || answerers.has(message.replyTo.senderId ?? "")));
|
|
166
|
+
};
|
|
167
|
+
return messages.filter((message, index) => {
|
|
168
|
+
if (answers(message) || Date.parse(message.timestamp) >= before)
|
|
169
|
+
return false;
|
|
170
|
+
if (!message.text.replace(LINKS, "").includes("?") && !repliesToAnswerer(message))
|
|
171
|
+
return false;
|
|
172
|
+
const later = messages.slice(index + 1);
|
|
173
|
+
if (later.some((reply) => (reply.replyTo?.id ?? reply.replyToId) === message.id && answers(reply)))
|
|
174
|
+
return false;
|
|
175
|
+
const next = later.find((other) => other.senderId !== message.senderId);
|
|
176
|
+
return !(next && answers(next));
|
|
177
|
+
});
|
|
178
|
+
};
|
|
4
179
|
export const inboxService = (deps) => ({
|
|
5
180
|
read: async ({ since, limit, all = false }) => {
|
|
6
181
|
if (deps.offline) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/services/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAsB,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAWzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAiB,EAAgB,EAAE,CAAC,CAAC;IAChE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,EAAE;QAC5C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,+EAA+E,CAChF,CAAA;QACH,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAC1C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;IAC9G,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,wEAAwE,CAAC,CAAA;QAClH,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAA;IACnD,CAAC;CACF,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/services/inbox.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type AdminService } from "./admin.js";
|
|
|
2
2
|
import { type ArchiveService } from "./archive.js";
|
|
3
3
|
import { type ChatsService } from "./chats.js";
|
|
4
4
|
import type { ServiceDeps } from "./deps.js";
|
|
5
|
+
import { type FoldersService } from "./folders.js";
|
|
5
6
|
import { type InboxService } from "./inbox.js";
|
|
6
7
|
import { type MessagesService } from "./messages.js";
|
|
7
8
|
import { type PeopleService } from "./people.js";
|
|
@@ -13,6 +14,8 @@ export type { ChatFilter, ChatsService, MarkedRead, PageWindow } from "./chats.j
|
|
|
13
14
|
export { CHAT_SCAN, chatsService, EVENTS_DAYS } from "./chats.js";
|
|
14
15
|
export type { ServiceDeps } from "./deps.js";
|
|
15
16
|
export { OFFLINE, onlineDeps, storedDeps } from "./deps.js";
|
|
17
|
+
export type { FolderEdit, FoldersService } from "./folders.js";
|
|
18
|
+
export { foldersService } from "./folders.js";
|
|
16
19
|
export type { InboxService } from "./inbox.js";
|
|
17
20
|
export { inboxService } from "./inbox.js";
|
|
18
21
|
export type { AroundWindow, ListWindow, MessagesService, MessageTarget, Pinned, Reacted, SearchQuery, SendRequest, } from "./messages.js";
|
|
@@ -26,6 +29,7 @@ export interface Services {
|
|
|
26
29
|
inbox: InboxService;
|
|
27
30
|
archive: ArchiveService;
|
|
28
31
|
admin: AdminService;
|
|
32
|
+
folders: FoldersService;
|
|
29
33
|
}
|
|
30
34
|
/**
|
|
31
35
|
* How a CLI replaces a use case: it returns the services it changes, whole, and can call the shared
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,aAAa,CAAA;AAE/D,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAClF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACjE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3D,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,YAAY,EACV,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,MAAM,EACN,OAAO,EACP,WAAW,EACX,WAAW,GACZ,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC7E,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,eAAe,CAAA;IACzB,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,EAAE,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,aAAa,CAAA;AAE/D,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAClF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACjE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3D,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,YAAY,EACV,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,MAAM,EACN,OAAO,EACP,WAAW,EACX,WAAW,GACZ,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC7E,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,eAAe,CAAA;IACzB,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,EAAE,cAAc,CAAA;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE/E,4GAA4G;AAC5G,eAAO,MAAM,WAAW,SAAU,WAAW,KAAG,QAW/C,CAAA"}
|
package/dist/services/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { adminService } from "./admin.js";
|
|
2
2
|
import { archiveService } from "./archive.js";
|
|
3
3
|
import { chatsService } from "./chats.js";
|
|
4
|
+
import { foldersService } from "./folders.js";
|
|
4
5
|
import { inboxService } from "./inbox.js";
|
|
5
6
|
import { messagesService } from "./messages.js";
|
|
6
7
|
import { peopleService } from "./people.js";
|
|
@@ -8,6 +9,7 @@ export { adminService } from "./admin.js";
|
|
|
8
9
|
export { archiveService } from "./archive.js";
|
|
9
10
|
export { CHAT_SCAN, chatsService, EVENTS_DAYS } from "./chats.js";
|
|
10
11
|
export { OFFLINE, onlineDeps, storedDeps } from "./deps.js";
|
|
12
|
+
export { foldersService } from "./folders.js";
|
|
11
13
|
export { inboxService } from "./inbox.js";
|
|
12
14
|
export { DELETE_AT_ONCE, messagesService, storedChatId } from "./messages.js";
|
|
13
15
|
export { peopleService, phoneOf } from "./people.js";
|
|
@@ -20,6 +22,7 @@ export const servicesFor = (deps) => {
|
|
|
20
22
|
inbox: inboxService(deps),
|
|
21
23
|
archive: archiveService(deps),
|
|
22
24
|
admin: adminService(deps),
|
|
25
|
+
folders: foldersService(deps),
|
|
23
26
|
};
|
|
24
27
|
return deps.messenger.services ? { ...base, ...deps.messenger.services(base, deps) } : base;
|
|
25
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAuB,cAAc,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAqB,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,EAAqB,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAwB,eAAe,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAsB,aAAa,EAAE,MAAM,aAAa,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEjE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAWzC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE7E,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAuB,cAAc,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAqB,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,EAAuB,cAAc,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAqB,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAwB,eAAe,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAsB,aAAa,EAAE,MAAM,aAAa,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEjE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAWzC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE7E,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAkBpD,4GAA4G;AAC5G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAY,EAAE;IACzD,MAAM,IAAI,GAAa;QACrB,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC;QAC/B,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;QACzB,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC;QAC3B,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;QAC7B,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;KAC9B,CAAA;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7F,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patience.d.ts","sourceRoot":"","sources":["../../src/services/patience.ts"],"names":[],"mappings":"AAMA,qGAAqG;AACrG,eAAO,MAAM,SAAS,GAAU,CAAC,WACtB,MAAM,OAAO,CAAC,CAAC,CAAC,QACnB,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,QACzB,WAAW,KAChB,OAAO,CAAC,CAAC,CAYX,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
2
|
+
import { isCliFailure } from "../cli/failures.js";
|
|
3
|
+
/** Waits longer than this are not sat out: the run stops, and the next one resumes. */
|
|
4
|
+
const LONGEST_WAIT_MS = 5 * 60 * 1000;
|
|
5
|
+
/** Sits out a provider's "wait N seconds" when it is short, a few times; a long one ends the run. */
|
|
6
|
+
export const patiently = async (request, note, stop) => {
|
|
7
|
+
for (let attempt = 1;; attempt += 1) {
|
|
8
|
+
try {
|
|
9
|
+
return await request();
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
const wait = isCliFailure(error) && error.code === "rate_limited" ? Number(error.details?.retryAfterMs) : NaN;
|
|
13
|
+
if (!Number.isFinite(wait) || wait > LONGEST_WAIT_MS || attempt >= 3)
|
|
14
|
+
throw error;
|
|
15
|
+
note(`asked to wait ${Math.ceil(wait / 1000)} s — waiting, then going on`);
|
|
16
|
+
await sleep(wait, undefined, { signal: stop }).catch(() => { });
|
|
17
|
+
if (stop.aborted)
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=patience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patience.js","sourceRoot":"","sources":["../../src/services/patience.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,uFAAuF;AACvF,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAErC,qGAAqG;AACrG,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,OAAyB,EACzB,IAA+B,EAC/B,IAAiB,EACL,EAAE;IACd,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;YAC7G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,eAAe,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,KAAK,CAAA;YACjF,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,CAAA;YAC1E,MAAM,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAC9D,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,KAAK,CAAA;QAC/B,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
|
package/dist/store/open.d.ts
CHANGED
|
@@ -11,4 +11,12 @@ import { type CacheDatabase } from "./driver.js";
|
|
|
11
11
|
* is the reverse (`NEED-11`).
|
|
12
12
|
*/
|
|
13
13
|
export declare const openCache: (path: string) => Promise<CacheDatabase>;
|
|
14
|
+
/**
|
|
15
|
+
* Refuses a SQLite the store's migrations cannot run on, before anything is written. The version
|
|
16
|
+
* number alone does not tell: official Node 22.0–22.15 ships SQLite 3.46–3.49 without FTS5, and
|
|
17
|
+
* Bun on macOS uses the system library, which can predate `contentless_delete` (3.43).
|
|
18
|
+
*/
|
|
19
|
+
export declare const assertStoreCapable: (database: CacheDatabase, on?: string) => void;
|
|
20
|
+
/** Once per process: the runtime's SQLite does not change while it runs. */
|
|
21
|
+
export declare const storeCapable: () => Promise<void>;
|
|
14
22
|
//# sourceMappingURL=open.d.ts.map
|
package/dist/store/open.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/store/open.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/store/open.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,aAAa,CAAA;AAEzD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,SAAgB,MAAM,KAAG,OAAO,CAAC,aAAa,CAInE,CAAA;AAiBD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,aAAc,aAAa,OAAM,MAAM,KAAe,IAkBpF,CAAA;AAID,4EAA4E;AAC5E,eAAO,MAAM,YAAY,QAAO,OAAO,CAAC,IAAI,CAS3C,CAAA"}
|
package/dist/store/open.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CliError } from "@leemour/cli-core";
|
|
1
2
|
import { PRAGMAS } from "./driver.js";
|
|
2
3
|
/**
|
|
3
4
|
* Opens the cache with whichever SQLite the runtime actually has.
|
|
@@ -23,4 +24,42 @@ const openUnderNode = async (path) => {
|
|
|
23
24
|
const { openWithNodeSqlite } = await import("./drivers/node-sqlite.js");
|
|
24
25
|
return openWithNodeSqlite(path);
|
|
25
26
|
};
|
|
27
|
+
const runtime = () => {
|
|
28
|
+
const bun = globalThis.Bun;
|
|
29
|
+
return bun ? `Bun ${bun.version}` : `Node ${process.versions.node}`;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Refuses a SQLite the store's migrations cannot run on, before anything is written. The version
|
|
33
|
+
* number alone does not tell: official Node 22.0–22.15 ships SQLite 3.46–3.49 without FTS5, and
|
|
34
|
+
* Bun on macOS uses the system library, which can predate `contentless_delete` (3.43).
|
|
35
|
+
*/
|
|
36
|
+
export const assertStoreCapable = (database, on = runtime()) => {
|
|
37
|
+
try {
|
|
38
|
+
database.exec(`CREATE VIRTUAL TABLE temp.capability_words USING fts5(a, content = '', contentless_delete = 1,
|
|
39
|
+
tokenize = 'unicode61 remove_diacritics 2')`);
|
|
40
|
+
database.exec("CREATE VIRTUAL TABLE temp.capability_text USING fts5(a, tokenize = 'trigram')");
|
|
41
|
+
database.exec("DROP TABLE temp.capability_words");
|
|
42
|
+
database.exec("DROP TABLE temp.capability_text");
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const version = String(database.prepare("SELECT sqlite_version() AS version").get()?.version);
|
|
46
|
+
const remedy = on.startsWith("Bun")
|
|
47
|
+
? "Run it under Node 22.16 or newer instead"
|
|
48
|
+
: "Update Node to 22.16 or newer, or run it under Bun";
|
|
49
|
+
throw new CliError("configuration_error", `the message store needs full-text search that this SQLite (${version}, ${on}) does not have. ${remedy}.`, { sqlite: version, runtime: on, cause: error instanceof Error ? error.message : String(error) });
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
let capable;
|
|
53
|
+
/** Once per process: the runtime's SQLite does not change while it runs. */
|
|
54
|
+
export const storeCapable = () => {
|
|
55
|
+
capable ??= openCache(":memory:").then((database) => {
|
|
56
|
+
try {
|
|
57
|
+
assertStoreCapable(database);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
database.close();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return capable;
|
|
64
|
+
};
|
|
26
65
|
//# sourceMappingURL=open.js.map
|
package/dist/store/open.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/store/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,OAAO,EAAE,MAAM,aAAa,CAAA;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAA0B,EAAE;IACtE,MAAM,QAAQ,GAAG,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;IAC3F,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtB,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAA0B,EAAE;IAClE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IACrE,OAAO,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAA0B,EAAE;IACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;IACvE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/store/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAsB,OAAO,EAAE,MAAM,aAAa,CAAA;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAA0B,EAAE;IACtE,MAAM,QAAQ,GAAG,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;IAC3F,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtB,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAA0B,EAAE;IAClE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IACrE,OAAO,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAA0B,EAAE;IACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;IACvE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,GAAW,EAAE;IAC3B,MAAM,GAAG,GAAI,UAA4C,CAAC,GAAG,CAAA;IAC7D,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;AACrE,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAuB,EAAE,EAAE,GAAW,OAAO,EAAE,EAAQ,EAAE;IAC1F,IAAI,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC;iEAC+C,CAAC,CAAA;QAC9D,QAAQ,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;QAC9F,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;QACjD,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAC7F,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,oDAAoD,CAAA;QACxD,MAAM,IAAI,QAAQ,CAChB,qBAAqB,EACrB,8DAA8D,OAAO,KAAK,EAAE,oBAAoB,MAAM,GAAG,EACzG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChG,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAED,IAAI,OAAkC,CAAA;AAEtC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,GAAkB,EAAE;IAC9C,OAAO,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClD,IAAI,CAAC;YACH,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC9B,CAAC;gBAAS,CAAC;YACT,QAAQ,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,IAAI,EACJ,OAAO,EACP,EAAE,EACF,MAAM,EACN,OAAO,EACP,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,IAAI,EACJ,OAAO,EACP,EAAE,EACF,MAAM,EACN,OAAO,EACP,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAgBjD,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE,EAAE,CAAA;CACZ;AAED,6FAA6F;AAC7F,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,yFAAyF;AACzF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,EAAE,CAAA;IACN,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,wGAAwG;IACxG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,EAAE,EAAE,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,MAAM,CAAC,EAAE,EAAE,CAAA;IACX,2FAA2F;IAC3F,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7E,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,8DAA8D;IAC9D;;;OAGG;IACH,YAAY,CACV,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,EAAE,EACV,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE;QAAE,GAAG,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,iHAAiH;IACjH,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3G,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvE,mFAAmF;IACnF,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,2FAA2F;IAC3F,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACvD,oFAAoF;IACpF,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACzD,wGAAwG;IACxG,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;IAC5F,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACnG,wDAAwD;IACxD,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnF,wEAAwE;IACxE,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;IAC7G,4FAA4F;IAC5F,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvG,wDAAwD;IACxD,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACrH,wFAAwF;IACxF,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzF;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACtH;;;;OAIG;IACH,MAAM,CACJ,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,EAAE,EACV,SAAS,EAAE,EAAE,EACb,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GACxC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;IAC7B;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IAChG;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1F,qGAAqG;IACrG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IACjG,wDAAwD;IACxD,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IACrD,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE;;;;OAIG;IACH,QAAQ,CACN,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;QAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACpF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACzB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7E,0FAA0F;IAC1F,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,mGAAmG;IACnG,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9F,yFAAyF;IACzF,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACjG;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IAChF,qGAAqG;IACrG,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAC7D,mDAAmD;IACnD,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IACrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,EAAE,CAAA;IACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,uGAAuG;AACvG,eAAO,MAAM,gBAAgB,OAAQ,CAAA;AAErC,eAAO,MAAM,SAAS,wBAAyC,YAAY,KAAQ,OAAO,CAAC,YAAY,CAiBtG,CAAA"}
|