@leemour/cli-messaging 0.84.0 → 0.86.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/cli/index.d.ts +7 -5
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +7 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/account-sessions-command.d.ts.map +1 -1
- package/dist/cli/messenger/account-sessions-command.js +2 -1
- package/dist/cli/messenger/account-sessions-command.js.map +1 -1
- package/dist/cli/messenger/admin-contacts-command.d.ts +8 -0
- package/dist/cli/messenger/admin-contacts-command.d.ts.map +1 -0
- package/dist/cli/messenger/admin-contacts-command.js +60 -0
- package/dist/cli/messenger/admin-contacts-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.d.ts.map +1 -1
- package/dist/cli/messenger/archive-commands.js +8 -7
- 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 +77 -71
- 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 +5 -3
- package/dist/cli/messenger/chats-command.js.map +1 -1
- package/dist/cli/messenger/contacts-command.d.ts.map +1 -1
- package/dist/cli/messenger/contacts-command.js +3 -0
- package/dist/cli/messenger/contacts-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/messages-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-command.js +8 -7
- package/dist/cli/messenger/messages-command.js.map +1 -1
- package/dist/cli/messenger/messages-edit-command.js +2 -2
- package/dist/cli/messenger/messages-edit-command.js.map +1 -1
- package/dist/cli/messenger/messages-scheduled-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-scheduled-command.js +2 -1
- package/dist/cli/messenger/messages-scheduled-command.js.map +1 -1
- package/dist/cli/messenger/models-command.d.ts.map +1 -1
- package/dist/cli/messenger/models-command.js +2 -1
- package/dist/cli/messenger/models-command.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 +21 -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 +1 -30
- package/dist/cli/messenger/review.d.ts.map +1 -1
- package/dist/cli/messenger/review.js +6 -111
- package/dist/cli/messenger/review.js.map +1 -1
- package/dist/cli/messenger/server-command.d.ts.map +1 -1
- package/dist/cli/messenger/server-command.js +2 -1
- package/dist/cli/messenger/server-command.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 +7 -2
- package/dist/cli/messenger/stored.js.map +1 -1
- package/dist/cli/paging.d.ts +11 -0
- package/dist/cli/paging.d.ts.map +1 -1
- package/dist/cli/paging.js +11 -0
- package/dist/cli/paging.js.map +1 -1
- package/dist/cli/settings.d.ts.map +1 -1
- package/dist/cli/settings.js +3 -3
- package/dist/cli/settings.js.map +1 -1
- package/dist/domain/models.d.ts +5 -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/contacts-write.d.ts +5 -0
- package/dist/mcp/tools/contacts-write.d.ts.map +1 -0
- package/dist/mcp/tools/contacts-write.js +37 -0
- package/dist/mcp/tools/contacts-write.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/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/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/services/people.d.ts +22 -1
- package/dist/services/people.d.ts.map +1 -1
- package/dist/services/people.js +93 -42
- package/dist/services/people.js.map +1 -1
- package/package.json +1 -1
- package/parity.json +41 -60
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/sends/recipients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAYzE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAgB,EAAE,OAAe,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAU,EAAE,CACnH,IAAI,CACF,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EACxE,UAAU,EACV,GAAG,OAAO,kBAAkB,CAC7B,CAAA;AAEH;;;GAGG;AACH,MAAM,OAAO,aAAa;IAGb,IAAI;IACJ,OAAO;IAHlB,uEAAuE;IACvE,YACW,IAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/sends/recipients.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Fetching } from "../cli/messenger/context.js";
|
|
2
2
|
import type { Id, Message } from "../domain/models.js";
|
|
3
3
|
import type { ChatStats, Range } from "../store/store.js";
|
|
4
|
+
import { type Estimate } from "./backfill-estimate.js";
|
|
4
5
|
import type { ServiceDeps } from "./deps.js";
|
|
5
6
|
/** The most messages a provider hands out per history request — Telegram's cap. */
|
|
6
7
|
export declare const PAGE = 100;
|
|
8
|
+
/** How `store fetch` reads a messenger's history, where it says nothing of its own. */
|
|
9
|
+
export declare const FETCHING: Fetching;
|
|
7
10
|
export interface FetchOptions {
|
|
8
11
|
/** Requests in this run, of up to `PAGE` messages each. */
|
|
9
12
|
maxPages: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/services/archive.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/services/archive.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAc,SAAS,EAAgB,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,KAAK,QAAQ,EAAoB,MAAM,wBAAwB,CAAA;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAI5C,mFAAmF;AACnF,eAAO,MAAM,IAAI,MAAM,CAAA;AAEvB,uFAAuF;AACvF,eAAO,MAAM,QAAQ,EAAE,QAAmE,CAAA;AAE1F,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,IAAI,EAAE,WAAW,CAAA;IACjB,MAAM,EAAE,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CAChF;AAED,kEAAkE;AAClE,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,EAAE,GAAG,IAAI,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,YAAY,CAAC,EAAE,IAAI,CAAA;IACnB,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,OAAO,CAAC,EAAE,IAAI,CAAA;CACf,CAAA;AAED,qGAAqG;AACrG,MAAM,WAAW,cAAc;IAC7B,qGAAqG;IACrG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,SAAS,GAAG;QAAE,IAAI,EAAE,KAAK,EAAE,CAAA;KAAE,CAAC,EAAE,CAAC,CAAA;IACjE,wDAAwD;IACxD,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IAClC,+DAA+D;IAC/D,gEAAgE;IAChE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAA;IACnG,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,GAAG;QAAE,IAAI,EAAE,EAAE,CAAA;KAAE,CAAC,CAAA;IACxG;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7D;AAED,eAAO,MAAM,cAAc,SAAU,WAAW,KAAG,cAkIlD,CAAA"}
|
package/dist/services/archive.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { setTimeout as sleep } from "node:timers/promises";
|
|
2
2
|
import { CliError } from "@leemour/cli-core";
|
|
3
|
-
import { estimateBackfill } from "
|
|
4
|
-
import { patiently } from "../cli/messenger/patience.js";
|
|
3
|
+
import { estimateBackfill } from "./backfill-estimate.js";
|
|
5
4
|
import { storedChatId } from "./messages.js";
|
|
5
|
+
import { patiently } from "./patience.js";
|
|
6
6
|
/** The most messages a provider hands out per history request — Telegram's cap. */
|
|
7
7
|
export const PAGE = 100;
|
|
8
|
+
/** How `store fetch` reads a messenger's history, where it says nothing of its own. */
|
|
9
|
+
export const FETCHING = { page: PAGE, pause: "1s", maxPages: 10, orderBy: "id" };
|
|
8
10
|
export const archiveService = (deps) => {
|
|
9
11
|
const found = async (chat) => {
|
|
10
12
|
const store = await deps.store();
|
|
@@ -29,6 +31,10 @@ export const archiveService = (deps) => {
|
|
|
29
31
|
};
|
|
30
32
|
},
|
|
31
33
|
estimate: async (chat, { maxPages, pauseMs }) => {
|
|
34
|
+
const fetching = deps.messenger.fetching ?? FETCHING;
|
|
35
|
+
if (fetching.orderBy === "time") {
|
|
36
|
+
throw new CliError("validation_error", "--estimate counts the message ids missing between what is held; this messenger's ids do not count messages");
|
|
37
|
+
}
|
|
32
38
|
const { store, account, chatId } = await found(chat);
|
|
33
39
|
const newest = Number((await store.messages(account, chatId, { limit: 1 })).items[0]?.id);
|
|
34
40
|
return {
|
|
@@ -37,13 +43,16 @@ export const archiveService = (deps) => {
|
|
|
37
43
|
ranges: await store.ranges(account, chatId),
|
|
38
44
|
held: (await store.chatStats(account, chatId))[0]?.messages ?? 0,
|
|
39
45
|
newest: Number.isSafeInteger(newest) ? newest : undefined,
|
|
40
|
-
page:
|
|
46
|
+
page: fetching.page,
|
|
41
47
|
maxPages,
|
|
42
48
|
pauseMs,
|
|
43
49
|
}),
|
|
44
50
|
};
|
|
45
51
|
},
|
|
46
52
|
fetch: async (chat, { maxPages, pauseMs, sinceMs, last, note, stop, onPage }) => {
|
|
53
|
+
const fetching = deps.messenger.fetching ?? FETCHING;
|
|
54
|
+
const byTime = fetching.orderBy === "time";
|
|
55
|
+
const keyOf = (message) => (byTime ? Date.parse(message.timestamp) : Number(message.id));
|
|
47
56
|
const connection = await deps.connection();
|
|
48
57
|
const self = connection.self();
|
|
49
58
|
if (self === null)
|
|
@@ -59,14 +68,14 @@ export const archiveService = (deps) => {
|
|
|
59
68
|
let reachedSince = false;
|
|
60
69
|
let reachedLast = false;
|
|
61
70
|
while (pages < maxPages && !stop.aborted) {
|
|
62
|
-
const page = await patiently(() => connection.history(chat, { limit:
|
|
71
|
+
const page = await patiently(() => connection.history(chat, { limit: fetching.page, reactions: false, ...(before ? { before } : {}) }), note, stop);
|
|
63
72
|
const first = page.items[0];
|
|
64
73
|
if (!first) {
|
|
65
74
|
reachedStart = true;
|
|
66
75
|
break;
|
|
67
76
|
}
|
|
68
77
|
chatId ??= first.chatId;
|
|
69
|
-
const keys = page.items.map(
|
|
78
|
+
const keys = page.items.map(keyOf);
|
|
70
79
|
if (keys.some((key) => !Number.isSafeInteger(key))) {
|
|
71
80
|
throw new CliError("validation_error", "this messenger's message ids do not order a chat, so it cannot fetch its history");
|
|
72
81
|
}
|
|
@@ -86,13 +95,15 @@ export const archiveService = (deps) => {
|
|
|
86
95
|
break;
|
|
87
96
|
}
|
|
88
97
|
const oldestAt = page.items.reduce((at, message) => (message.timestamp < at ? message.timestamp : at), first.timestamp);
|
|
89
|
-
|
|
98
|
+
const fromAt = held.from === low ? oldestAt : await timeOfKey(store, account, chatId, held.from, byTime, oldestAt);
|
|
99
|
+
if (last !== undefined && (await store.countMessages(account, chatId, { since: fromAt })) >= last) {
|
|
90
100
|
reachedLast = true;
|
|
91
101
|
break;
|
|
92
102
|
}
|
|
93
|
-
before = String(held.from);
|
|
103
|
+
before = byTime ? new Date(held.from).toISOString() : String(held.from);
|
|
94
104
|
note(`${fetched} messages so far, back to ${held.from}`);
|
|
95
|
-
|
|
105
|
+
const wait = fetching.jitter ? pauseMs * (1 + Math.random()) : pauseMs;
|
|
106
|
+
await sleep(wait, undefined, { signal: stop }).catch(() => { });
|
|
96
107
|
}
|
|
97
108
|
const ranges = chatId === undefined ? [] : await store.ranges(account, chatId);
|
|
98
109
|
return {
|
|
@@ -107,15 +118,11 @@ export const archiveService = (deps) => {
|
|
|
107
118
|
},
|
|
108
119
|
};
|
|
109
120
|
};
|
|
110
|
-
/**
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
? oldestAt
|
|
117
|
-
: ((await store.around(account, chatId, String(from), { before: 0, after: 0 }).catch(() => []))[0]?.timestamp ??
|
|
118
|
-
oldestAt);
|
|
119
|
-
return store.countMessages(account, chatId, { since: at });
|
|
121
|
+
/** When the message a held stretch starts at was sent: by time the key is the time; by id, the stored message says. */
|
|
122
|
+
const timeOfKey = async (store, account, chatId, key, byTime, fallback) => {
|
|
123
|
+
if (byTime)
|
|
124
|
+
return new Date(key).toISOString();
|
|
125
|
+
const [message] = await store.around(account, chatId, String(key), { before: 0, after: 0 }).catch(() => []);
|
|
126
|
+
return message?.timestamp ?? fallback;
|
|
120
127
|
};
|
|
121
128
|
//# sourceMappingURL=archive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/services/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/services/archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backfill-estimate.d.ts","sourceRoot":"","sources":["../../src/services/backfill-estimate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,MAAM,WAAW,QAAQ;IACvB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,sGAAsG;IACtG,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAKD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,uDAO1B;IACD,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,8EAA8E;IAC9E,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,KAAG,QAoBH,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backfill-estimate.js","sourceRoot":"","sources":["../../src/services/backfill-estimate.ts"],"names":[],"mappings":"AAcA,uGAAuG;AACvG,MAAM,UAAU,GAAG,GAAG,CAAA;AAEtB;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,GASR,EAAY,EAAE;IACb,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACxB,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAEtG,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACjF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACjH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;IACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC,CAAA;IAC5E,qEAAqE;IACrE,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;IAC9E,OAAO;QACL,IAAI;QACJ,MAAM;QACN,OAAO;QACP,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC;KAChE,CAAA;AACH,CAAC,CAAA"}
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAK5C;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAA;AAC7B,iGAAiG;AACjG,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAA;AAE9B,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CACjD,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAA;AAEjG,kFAAkF;AAClF,MAAM,OAAO,GAAG,CAAC,IAAU,EAAW,EAAE,CACtC,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,KAAK,CAAC,CAAA;AAErF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAY,EAAE,EAAE,CACnD,GAAG;IACD,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;AAE5F,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;IAC1B,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;CACjG,CAAC,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,OAAyB,EACzB,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,EAAoC,EACxC,EAAE;IAClB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACnE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAEtD,MAAM,KAAK,GAAgB,EAAE,CAAA;IAC7B,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,WAAW,IAAI,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACrC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC1E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC,CAAA;IAC5G,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAA;AACzE,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EACxB,OAAyB,EACzB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,EAAmD,EAC9D,EAAE;IAClB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,SAAS,CACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,CACnG,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3F,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACpD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAErD,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,MAAM,KAAK,GAAgB,EAAE,CAAA;IAC7B,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;QACpD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACtD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAC1C,OAAO,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,GAAG,CAAA;QACpC,CAAC,CAAC,CAAA;QACF,KAAK,MAAM,OAAO,IAAI,KAAK;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;QACnF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAA;IACpH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;QACpC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;QACpC,KAAK;QACL,OAAO;QACP,4EAA4E;QAC5E,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;QAC7D,KAAK;KACN,CAAA;AACH,CAAC,CAAA;AAED,uGAAuG;AACvG,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAA;AAC9B,MAAM,WAAW,GAAG,GAAG,CAAA;AACvB,MAAM,eAAe,GAAG,GAAG,CAAA;AAY3B;;;;GAIG;AACH,MAAM,MAAM,GAAG,KAAK,EAAE,OAAyB,EAAE,IAAQ,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;IACvF,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,IAAI,MAA0B,CAAA;IAC9B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QAC7G,MAAM,IAAI,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAChE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;QAClG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QACvF,IAAI,QAAQ,CAAC,MAAM,IAAI,eAAe;YAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QACzG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACpB,CAAC;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,OAAyB,EACzB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,EAAE,oBAAoB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAiB,EAClE,EAAE;IACnB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,SAAS,CACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,CAChG,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACzF,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAC5B,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IAC1G,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAEtD,MAAM,KAAK,GAAiB,EAAE,CAAA;IAC9B,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QAChE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IACpE,MAAM,KAAK,GAAW;QACpB,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;QACpC,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QAClC,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7E,KAAK;QACL,OAAO;QACP,OAAO;QACP,KAAK;KACN,CAAA;IACD,IAAI,oBAAoB,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAEpD,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,CAAA;QAC3F,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzC,SAAS,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,GAAG,oBAAoB,GAAG,SAAS;SAC/C,CAAC,CAAA;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAA;QAC7G,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,EAAE,CAAA;AACxF,CAAC,CAAA;AAED,sDAAsD;AACtD,MAAM,KAAK,GAAG,iBAAiB,CAAA;AAE/B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,QAAmB,EACnB,EAAE,SAAS,EAAE,MAAM,EAAkD,EAC1D,EAAE;IACb,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE,CACnC,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7F,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACtE,wGAAwG;IACxG,MAAM,iBAAiB,GAAG,CAAC,OAAgB,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,OAAO,CAAC,SAAS,CAAA;QACnD,MAAM,MAAM,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC1D,IAAI,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;QAClC,OAAO,CACL,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CACjH,CAAA;IACH,CAAC,CAAA;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACxC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAA;QAC/F,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACvC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;QAChH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;QACvE,OAAO,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AASD,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"}
|
|
@@ -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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Contact, Member, Page, PersonCard } from "../domain/models.js";
|
|
1
|
+
import type { Contact, Id, Member, Page, PersonCard, PhoneBookEntry } from "../domain/models.js";
|
|
2
|
+
import { type Operated } from "../sends/guarded.js";
|
|
2
3
|
import type { PageWindow } from "./chats.js";
|
|
3
4
|
import { type ServiceDeps } from "./deps.js";
|
|
4
5
|
export interface ContactSync {
|
|
@@ -21,6 +22,26 @@ export interface PeopleService {
|
|
|
21
22
|
lookup(phone: string): Promise<Member>;
|
|
22
23
|
/** The whole contact list from the messenger into the store: what was new, what changed. */
|
|
23
24
|
sync(): Promise<ContactSync>;
|
|
25
|
+
add(person: string): Promise<Operated<{
|
|
26
|
+
person: Member;
|
|
27
|
+
}>>;
|
|
28
|
+
remove(person: string): Promise<Operated<{
|
|
29
|
+
personId: Id;
|
|
30
|
+
}>>;
|
|
31
|
+
block(person: string): Promise<Operated<{
|
|
32
|
+
personId: Id;
|
|
33
|
+
}>>;
|
|
34
|
+
unblock(person: string): Promise<Operated<{
|
|
35
|
+
personId: Id;
|
|
36
|
+
}>>;
|
|
37
|
+
rename(person: string, firstName: string, lastName?: string): Promise<Operated<{
|
|
38
|
+
person: Member;
|
|
39
|
+
}>>;
|
|
40
|
+
/** Only counts and the people recognised: never a number. */
|
|
41
|
+
import(entries: PhoneBookEntry[]): Promise<Operated<{
|
|
42
|
+
sent: number;
|
|
43
|
+
recognised: Member[];
|
|
44
|
+
}>>;
|
|
24
45
|
}
|
|
25
46
|
export declare const peopleService: (deps: ServiceDeps) => PeopleService;
|
|
26
47
|
/** Digits, with the `+` and the spaces, dashes and brackets people type dropped. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../src/services/people.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../src/services/people.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEtG,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,WAAW,CAAA;AAEzD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACjG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACzC,2DAA2D;IAC3D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,4FAA4F;IAC5F,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;IAC5B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;IAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,QAAQ,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC,CAAA;IAC3D,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,QAAQ,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC,CAAA;IAC1D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,QAAQ,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC,CAAA;IAC5D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;IACnG,6DAA6D;IAC7D,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC,CAAA;CAC7F;AAID,eAAO,MAAM,aAAa,SAAU,WAAW,KAAG,aAqHjD,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MAMvC,CAAA"}
|