@leemour/cli-messaging 0.75.0 → 0.77.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 +2 -2
- package/dist/cli/app.d.ts +2 -0
- package/dist/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/context.d.ts +2 -0
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/messenger/archive-commands.js +1 -0
- package/dist/cli/messenger/archive-commands.js.map +1 -1
- package/dist/cli/messenger/ask.d.ts +11 -0
- package/dist/cli/messenger/ask.d.ts.map +1 -0
- package/dist/cli/messenger/ask.js +66 -0
- package/dist/cli/messenger/ask.js.map +1 -0
- package/dist/cli/messenger/backfill-command.d.ts +1 -1
- package/dist/cli/messenger/backfill-command.d.ts.map +1 -1
- package/dist/cli/messenger/backfill-command.js +32 -14
- package/dist/cli/messenger/backfill-command.js.map +1 -1
- package/dist/cli/messenger/backfill-estimate.d.ts +3 -3
- package/dist/cli/messenger/backfill-estimate.d.ts.map +1 -1
- package/dist/cli/messenger/backfill-estimate.js +2 -2
- package/dist/cli/messenger/backfill-estimate.js.map +1 -1
- package/dist/cli/messenger/backfill-jobs.d.ts +3 -1
- package/dist/cli/messenger/backfill-jobs.d.ts.map +1 -1
- package/dist/cli/messenger/backfill-jobs.js.map +1 -1
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js +22 -1
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/guard-commands.js +2 -2
- package/dist/cli/messenger/guard-commands.js.map +1 -1
- package/dist/cli/messenger/inbox.d.ts.map +1 -1
- package/dist/cli/messenger/inbox.js +3 -1
- package/dist/cli/messenger/inbox.js.map +1 -1
- package/dist/cli/messenger/mcp-command.d.ts +3 -1
- package/dist/cli/messenger/mcp-command.d.ts.map +1 -1
- package/dist/cli/messenger/mcp-command.js +29 -19
- package/dist/cli/messenger/mcp-command.js.map +1 -1
- package/dist/cli/messenger/messages-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-command.js +6 -2
- package/dist/cli/messenger/messages-command.js.map +1 -1
- package/dist/cli/messenger/messages-delete-command.d.ts +2 -2
- package/dist/cli/messenger/messages-delete-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-delete-command.js +4 -11
- package/dist/cli/messenger/messages-delete-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 +1 -0
- package/dist/cli/messenger/messages-scheduled-command.js.map +1 -1
- package/dist/cli/messenger/polls-command.d.ts.map +1 -1
- package/dist/cli/messenger/polls-command.js +12 -5
- package/dist/cli/messenger/polls-command.js.map +1 -1
- package/dist/cli/messenger/port.d.ts +2 -0
- 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.map +1 -1
- package/dist/cli/messenger/review.js +1 -0
- package/dist/cli/messenger/review.js.map +1 -1
- package/dist/cli/messenger/stored.d.ts +2 -2
- package/dist/cli/messenger/stored.js +2 -2
- package/dist/cli/messenger/watch-command.d.ts.map +1 -1
- package/dist/cli/messenger/watch-command.js +1 -0
- package/dist/cli/messenger/watch-command.js.map +1 -1
- package/dist/cli/paging.d.ts +3 -1
- package/dist/cli/paging.d.ts.map +1 -1
- package/dist/cli/paging.js +9 -2
- package/dist/cli/paging.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +1 -0
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/runs/command.js +2 -2
- package/dist/cli/runs/command.js.map +1 -1
- package/dist/cli/settings.d.ts +10 -1
- package/dist/cli/settings.d.ts.map +1 -1
- package/dist/cli/settings.js +38 -4
- package/dist/cli/settings.js.map +1 -1
- package/dist/mcp/instructions.d.ts +3 -6
- package/dist/mcp/instructions.d.ts.map +1 -1
- package/dist/mcp/instructions.js +10 -12
- package/dist/mcp/instructions.js.map +1 -1
- package/dist/mcp/server.d.ts +6 -4
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +46 -25
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool.d.ts +9 -3
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js +5 -2
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/tools/chats-read.d.ts.map +1 -1
- package/dist/mcp/tools/chats-read.js +1 -0
- package/dist/mcp/tools/chats-read.js.map +1 -1
- package/dist/mcp/tools/polls.d.ts.map +1 -1
- package/dist/mcp/tools/polls.js +2 -0
- package/dist/mcp/tools/polls.js.map +1 -1
- package/dist/render/messages.d.ts +1 -1
- package/dist/render/messages.d.ts.map +1 -1
- package/dist/render/messages.js +10 -8
- package/dist/render/messages.js.map +1 -1
- package/dist/sends/guard.d.ts +23 -3
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +47 -15
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/guarded.d.ts +2 -0
- package/dist/sends/guarded.d.ts.map +1 -1
- package/dist/sends/guarded.js +1 -0
- package/dist/sends/guarded.js.map +1 -1
- package/dist/sends/index.d.ts +2 -2
- package/dist/sends/index.d.ts.map +1 -1
- package/dist/sends/index.js +1 -1
- package/dist/sends/index.js.map +1 -1
- package/dist/sends/permissions.d.ts +30 -0
- package/dist/sends/permissions.d.ts.map +1 -1
- package/dist/sends/permissions.js +144 -0
- package/dist/sends/permissions.js.map +1 -1
- package/dist/services/archive.d.ts +8 -2
- package/dist/services/archive.d.ts.map +1 -1
- package/dist/services/archive.js +25 -5
- package/dist/services/archive.js.map +1 -1
- package/dist/services/chats.d.ts +1 -1
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +23 -1
- package/dist/services/chats.js.map +1 -1
- package/dist/services/deps.d.ts +3 -1
- package/dist/services/deps.d.ts.map +1 -1
- package/dist/services/deps.js +10 -1
- package/dist/services/deps.js.map +1 -1
- package/dist/services/people.d.ts +3 -2
- package/dist/services/people.d.ts.map +1 -1
- package/dist/services/people.js +42 -4
- package/dist/services/people.js.map +1 -1
- package/dist/store/sqlite/drizzle/bun.js +1 -1
- package/dist/store/sqlite/drizzle/core.d.ts +2 -2
- package/dist/store/sqlite/drizzle/core.d.ts.map +1 -1
- package/dist/store/sqlite/drizzle/core.js +12 -1
- package/dist/store/sqlite/drizzle/core.js.map +4 -4
- package/dist/store/sqlite/drizzle/node.js +1 -1
- package/dist/store/sqlite/drizzle/{shared-CH747VCJ.js → shared-JAIU3GYB.js} +4 -1
- package/dist/store/sqlite/messages.d.ts +1 -0
- package/dist/store/sqlite/messages.d.ts.map +1 -1
- package/dist/store/sqlite/messages.js +40 -2
- package/dist/store/sqlite/messages.js.map +1 -1
- package/dist/store/sqlite/reads.d.ts +751 -0
- package/dist/store/sqlite/reads.d.ts.map +1 -0
- package/dist/store/sqlite/reads.js +177 -0
- package/dist/store/sqlite/reads.js.map +1 -0
- package/dist/store/sqlite/search.d.ts +496 -0
- package/dist/store/sqlite/search.d.ts.map +1 -0
- package/dist/store/sqlite/search.js +131 -0
- package/dist/store/sqlite/search.js.map +1 -0
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +20 -271
- package/dist/store/store.js.map +1 -1
- package/package.json +3 -2
- package/parity.json +19 -27
- /package/dist/store/sqlite/drizzle/{shared-CH747VCJ.js.map → shared-JAIU3GYB.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/services/chats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/services/chats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAU,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAChH,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGjE,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,WAAW,CAAA;AAGzD,kEAAkE;AAClE,eAAO,MAAM,WAAW,IAAI,CAAA;AAE5B,oHAAoH;AACpH,eAAO,MAAM,SAAS,MAAM,CAAA;AAE5B,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,EAAE,CAAA;IACV,wCAAwC;IACxC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACxF,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG;QAAE,MAAM,EAAE,EAAE,CAAA;KAAE,CAAC,CAAA;IACtF,oGAAoG;IACpG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACrF,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;CACnF;AAED,eAAO,MAAM,YAAY,SAAU,WAAW,KAAG,YAsE/C,CAAA"}
|
package/dist/services/chats.js
CHANGED
|
@@ -2,6 +2,8 @@ import { CliError } from "@leemour/cli-core";
|
|
|
2
2
|
import { capability } from "../cli/messenger/port.js";
|
|
3
3
|
import { guardedWrite } from "../sends/guarded.js";
|
|
4
4
|
import { newOperationId } from "../sends/send-id.js";
|
|
5
|
+
import { storeIfOpen } from "./deps.js";
|
|
6
|
+
import { storedChatId } from "./messages.js";
|
|
5
7
|
/** How far back `events` looks without `since`, as in max-cli. */
|
|
6
8
|
export const EVENTS_DAYS = 7;
|
|
7
9
|
/** A filtered list searches the newest this many: paging through every dialog hit FLOOD_WAIT (tg handoff §4.14). */
|
|
@@ -22,7 +24,22 @@ export const chatsService = (deps) => ({
|
|
|
22
24
|
const end = window.limit === undefined ? found.length : window.offset + window.limit;
|
|
23
25
|
return { items: found.slice(window.offset, end), hasMore: found.length > end, partial: scanned.hasMore };
|
|
24
26
|
},
|
|
25
|
-
show: async (chat) =>
|
|
27
|
+
show: async (chat) => {
|
|
28
|
+
if (deps.offline) {
|
|
29
|
+
const store = await deps.store();
|
|
30
|
+
const account = await deps.account();
|
|
31
|
+
const id = await storedChatId(deps.messenger, chat, store, account);
|
|
32
|
+
const found = (await store.chats(account, {})).items.find((one) => one.id === id);
|
|
33
|
+
if (!found)
|
|
34
|
+
throw new CliError("not_found", `no stored chat ${id}`);
|
|
35
|
+
return { ...found, members: await storedMembers(store, account, found.id) };
|
|
36
|
+
}
|
|
37
|
+
const card = await (await deps.connection()).chat(chat);
|
|
38
|
+
if (card.members !== null || card.kind === "channel")
|
|
39
|
+
return card;
|
|
40
|
+
const store = await storeIfOpen(deps);
|
|
41
|
+
return store ? { ...card, members: await storedMembers(store, await deps.account(), card.id) } : card;
|
|
42
|
+
},
|
|
26
43
|
members: async (chat, window) => capability(await deps.connection(), "members", "list a group's members")(chat, window),
|
|
27
44
|
events: async (chat, { since, only }) => {
|
|
28
45
|
if (deps.offline) {
|
|
@@ -50,6 +67,11 @@ export const chatsService = (deps) => ({
|
|
|
50
67
|
return { operationId, chatId, until: until ?? null };
|
|
51
68
|
},
|
|
52
69
|
});
|
|
70
|
+
/** `null` when no member list was ever saved: not knowing who is there is not nobody being there. */
|
|
71
|
+
const storedMembers = async (store, account, chatId) => {
|
|
72
|
+
const members = (await store.members(account, chatId)).filter((one) => one.id !== account.account);
|
|
73
|
+
return members.length === 0 ? null : members;
|
|
74
|
+
};
|
|
53
75
|
const matches = ({ search, kind, unread }) => {
|
|
54
76
|
const needle = search?.toLocaleLowerCase();
|
|
55
77
|
return (chat) => (needle === undefined || (chat.title ?? "").toLocaleLowerCase().includes(needle)) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/services/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/services/chats.ts"],"names":[],"mappings":"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"}
|
package/dist/services/deps.d.ts
CHANGED
|
@@ -16,7 +16,9 @@ export interface ServiceDeps {
|
|
|
16
16
|
store: () => Promise<MessageStore>;
|
|
17
17
|
guard: SendGuard;
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
/** Online, the store only adds to an answer the messenger already gave, so a store that will not open loses nothing. */
|
|
20
|
+
export declare const storeIfOpen: (deps: ServiceDeps) => Promise<MessageStore | undefined>;
|
|
21
|
+
export declare const OFFLINE = "--offline answers only from what is kept locally: `chats list|show`, `messages list|show|context` and `contacts list|show`";
|
|
20
22
|
/** Over a connection that is already open — an MCP session holds one for minutes. */
|
|
21
23
|
export declare const onlineDeps: (messenger: Messenger, adapter: MessengerAdapter, guard: SendGuard) => ServiceDeps;
|
|
22
24
|
/** Over the local store alone, for `--offline` and the tools that never ask the messenger. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEjE;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAClC,oFAAoF;IACpF,UAAU,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC3C,KAAK,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAA;IAClC,KAAK,EAAE,SAAS,CAAA;CACjB;AAED,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEjE;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAClC,oFAAoF;IACpF,UAAU,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC3C,KAAK,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAA;IAClC,KAAK,EAAE,SAAS,CAAA;CACjB;AAED,wHAAwH;AACxH,eAAO,MAAM,WAAW,SAAgB,WAAW,KAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAMrF,CAAA;AAED,eAAO,MAAM,OAAO,+HAC0G,CAAA;AAE9H,qFAAqF;AACrF,eAAO,MAAM,UAAU,cAAe,SAAS,WAAW,gBAAgB,SAAS,SAAS,KAAG,WAa7F,CAAA;AAEF,8FAA8F;AAC9F,eAAO,MAAM,UAAU,cACV,SAAS,SACb,YAAY,WACV,UAAU,SACZ,SAAS,KACf,WASD,CAAA"}
|
package/dist/services/deps.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { CliError } from "@leemour/cli-core";
|
|
2
|
-
|
|
2
|
+
/** Online, the store only adds to an answer the messenger already gave, so a store that will not open loses nothing. */
|
|
3
|
+
export const storeIfOpen = async (deps) => {
|
|
4
|
+
try {
|
|
5
|
+
return await deps.store();
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export const OFFLINE = "--offline answers only from what is kept locally: `chats list|show`, `messages list|show|context` and `contacts list|show`";
|
|
3
12
|
/** Over a connection that is already open — an MCP session holds one for minutes. */
|
|
4
13
|
export const onlineDeps = (messenger, adapter, guard) => ({
|
|
5
14
|
messenger,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAqB5C,MAAM,CAAC,MAAM,OAAO,GAClB,
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAqB5C,wHAAwH;AACxH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,IAAiB,EAAqC,EAAE;IACxF,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAClB,4HAA4H,CAAA;AAE9H,qFAAqF;AACrF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,SAAoB,EAAE,OAAyB,EAAE,KAAgB,EAAe,EAAE,CAAC,CAAC;IAC7G,SAAS;IACT,OAAO,EAAE,KAAK;IACd,KAAK;IACL,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO;IAC/B,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,kDAAkD,CAAC,CAAA;QACjH,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACxD,CAAC;IACD,KAAK,EAAE,KAAK,IAAI,EAAE;QAChB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,gEAAgE,CAAC,CAAA;IAC1G,CAAC;CACF,CAAC,CAAA;AAEF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,SAAoB,EACpB,KAAmB,EACnB,OAAmB,EACnB,KAAgB,EACH,EAAE,CAAC,CAAC;IACjB,SAAS;IACT,OAAO,EAAE,IAAI;IACb,KAAK;IACL,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO;IAC5B,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;IACxB,UAAU,EAAE,KAAK,IAAI,EAAE;QACrB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;IACjD,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Contact, Member, Page, PersonCard } from "../domain/models.js";
|
|
2
2
|
import type { PageWindow } from "./chats.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type ServiceDeps } from "./deps.js";
|
|
4
4
|
export interface ContactSync {
|
|
5
5
|
added: number;
|
|
6
6
|
changed: number;
|
|
@@ -8,7 +8,8 @@ export interface ContactSync {
|
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* A contact is somebody this account has a one-to-one chat with — a query over the chat list, never
|
|
11
|
-
* a flag somebody maintains (max-cli `NEED-105`).
|
|
11
|
+
* a flag somebody maintains (max-cli `NEED-105`). Where the store holds who is in each one-to-one
|
|
12
|
+
* chat, it answers; otherwise the dialogs themselves do, offline from the stored chats.
|
|
12
13
|
*/
|
|
13
14
|
export interface PeopleService {
|
|
14
15
|
list(options: {
|
|
@@ -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,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGlF,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;CAC7B;AAED,eAAO,MAAM,aAAa,SAAU,WAAW,KAAG,aA8ChD,CAAA;AAEF,oFAAoF;AACpF,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MAMvC,CAAA"}
|
package/dist/services/people.js
CHANGED
|
@@ -1,13 +1,33 @@
|
|
|
1
1
|
import { CliError } from "@leemour/cli-core";
|
|
2
2
|
import { capability } from "../cli/messenger/port.js";
|
|
3
|
+
import { pickPerson } from "../resolve.js";
|
|
4
|
+
import { storeIfOpen } from "./deps.js";
|
|
3
5
|
export const peopleService = (deps) => ({
|
|
4
6
|
list: async (options) => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
// Connected first: a messenger whose login brings its people writes them before the store is asked.
|
|
8
|
+
const connection = deps.offline ? undefined : await deps.connection();
|
|
9
|
+
const store = deps.offline ? await deps.store() : await storeIfOpen(deps);
|
|
10
|
+
const account = store && (await deps.account());
|
|
11
|
+
if (store && account && (await store.countContacts(account)) > 0)
|
|
12
|
+
return storedContacts(store, account, options);
|
|
13
|
+
const chats = connection
|
|
14
|
+
? (await connection.chats({ offset: 0 })).items
|
|
15
|
+
: (await (await deps.store()).chats(await deps.account(), {})).items;
|
|
8
16
|
return contactsIn(chats, options);
|
|
9
17
|
},
|
|
10
|
-
show: async (person) =>
|
|
18
|
+
show: async (person) => {
|
|
19
|
+
if (deps.offline) {
|
|
20
|
+
const store = await deps.store();
|
|
21
|
+
const account = await deps.account();
|
|
22
|
+
const found = pickPerson(person, await store.people(account.provider, { account: account.account }));
|
|
23
|
+
return { ...found, chats: await sharedChats(store, account, found.id) };
|
|
24
|
+
}
|
|
25
|
+
const card = await (await deps.connection()).contact(person);
|
|
26
|
+
if (card.chats.length > 0)
|
|
27
|
+
return card;
|
|
28
|
+
const store = await storeIfOpen(deps);
|
|
29
|
+
return store ? { ...card, chats: await sharedChats(store, await deps.account(), card.id) } : card;
|
|
30
|
+
},
|
|
11
31
|
lookup: async (phone) => capability(await deps.connection(), "lookup", "find a person by phone")(phone),
|
|
12
32
|
sync: async () => {
|
|
13
33
|
if (deps.offline) {
|
|
@@ -38,6 +58,24 @@ export const phoneOf = (typed) => {
|
|
|
38
58
|
}
|
|
39
59
|
return digits;
|
|
40
60
|
};
|
|
61
|
+
const storedContacts = async (store, account, { order, search, limit, offset }) => {
|
|
62
|
+
// Chats saved since the last refresh may have moved someone up; the order is worked out again here.
|
|
63
|
+
if (order === "recent")
|
|
64
|
+
await store.refreshRecency(account);
|
|
65
|
+
const query = search?.trim() || undefined;
|
|
66
|
+
return store.contacts(account, {
|
|
67
|
+
order,
|
|
68
|
+
...(query === undefined ? {} : { query }),
|
|
69
|
+
limit: limit ?? (await store.countContacts(account, query === undefined ? {} : { query })),
|
|
70
|
+
offset,
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
const sharedChats = async (store, account, personId) => (await store.chatsWith(account, personId)).map(({ id, title, kind, lastMessageAt }) => ({
|
|
74
|
+
id,
|
|
75
|
+
title,
|
|
76
|
+
kind,
|
|
77
|
+
lastMessageAt,
|
|
78
|
+
}));
|
|
41
79
|
const contactsIn = (chats, { order, search, limit, offset }) => {
|
|
42
80
|
const wanted = search?.trim().toLowerCase();
|
|
43
81
|
const people = chats
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"people.js","sourceRoot":"","sources":["../../src/services/people.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"people.js","sourceRoot":"","sources":["../../src/services/people.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
entityKind,
|
|
11
11
|
jitCompatCheck,
|
|
12
12
|
sql
|
|
13
|
-
} from "./shared-
|
|
13
|
+
} from "./shared-JAIU3GYB.js";
|
|
14
14
|
|
|
15
15
|
// node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_valibot@1.5.0_typescript@7.0.2__zod@4.6.5/node_modules/drizzle-orm/bun-sqlite/session.js
|
|
16
16
|
var SQLiteBunSession = class extends SQLiteAsyncSession {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { and, desc, eq, gt, gte, inArray, isNull, lte, ne, or, type Placeholder, sql } from "drizzle-orm";
|
|
2
|
-
export { index, integer, primaryKey, real, type SQLiteAsyncDatabase, sqliteTable, text, unique, } from "drizzle-orm/sqlite-core";
|
|
1
|
+
export { and, asc, desc, eq, gt, gte, inArray, isNull, lte, ne, notInArray, or, type Placeholder, type SQL, sql, } from "drizzle-orm";
|
|
2
|
+
export { alias, index, integer, primaryKey, real, type SQLiteAsyncDatabase, sqliteTable, text, unique, } from "drizzle-orm/sqlite-core";
|
|
3
3
|
//# sourceMappingURL=core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/store/sqlite/drizzle/core.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/store/sqlite/drizzle/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,GAAG,EACH,IAAI,EACJ,EAAE,EACF,EAAE,EACF,GAAG,EACH,OAAO,EACP,MAAM,EACN,GAAG,EACH,EAAE,EACF,UAAU,EACV,EAAE,EACF,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,GAAG,GACJ,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,EACL,KAAK,EACL,OAAO,EACP,UAAU,EACV,IAAI,EACJ,KAAK,mBAAmB,EACxB,WAAW,EACX,IAAI,EACJ,MAAM,GACP,MAAM,yBAAyB,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
+
TableAliasProxyHandler,
|
|
2
3
|
and,
|
|
4
|
+
asc,
|
|
3
5
|
desc,
|
|
4
6
|
eq,
|
|
5
7
|
gt,
|
|
@@ -10,6 +12,7 @@ import {
|
|
|
10
12
|
isNull,
|
|
11
13
|
lte,
|
|
12
14
|
ne,
|
|
15
|
+
notInArray,
|
|
13
16
|
or,
|
|
14
17
|
primaryKey,
|
|
15
18
|
real,
|
|
@@ -17,9 +20,16 @@ import {
|
|
|
17
20
|
sqliteTable,
|
|
18
21
|
text,
|
|
19
22
|
unique
|
|
20
|
-
} from "./shared-
|
|
23
|
+
} from "./shared-JAIU3GYB.js";
|
|
24
|
+
|
|
25
|
+
// node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_valibot@1.5.0_typescript@7.0.2__zod@4.6.5/node_modules/drizzle-orm/sqlite-core/alias.js
|
|
26
|
+
function alias(table, alias2) {
|
|
27
|
+
return new Proxy(table, new TableAliasProxyHandler(alias2, false));
|
|
28
|
+
}
|
|
21
29
|
export {
|
|
30
|
+
alias,
|
|
22
31
|
and,
|
|
32
|
+
asc,
|
|
23
33
|
desc,
|
|
24
34
|
eq,
|
|
25
35
|
gt,
|
|
@@ -30,6 +40,7 @@ export {
|
|
|
30
40
|
isNull,
|
|
31
41
|
lte,
|
|
32
42
|
ne,
|
|
43
|
+
notInArray,
|
|
33
44
|
or,
|
|
34
45
|
primaryKey,
|
|
35
46
|
real,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [],
|
|
4
|
-
"sourcesContent": [],
|
|
5
|
-
"mappings": "",
|
|
6
|
-
"names": []
|
|
3
|
+
"sources": ["../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_valibot@1.5.0_typescript@7.0.2__zod@4.6.5/node_modules/src/sqlite-core/alias.ts"],
|
|
4
|
+
"sourcesContent": ["import { TableAliasProxyHandler } from '~/alias.ts';\nimport type { BuildAliasTable } from './query-builders/select.types.ts';\n\nimport type { SQLiteTable } from './table.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\n\nexport function alias<TTable extends SQLiteTable | SQLiteViewBase, TAlias extends string>(\n\ttable: TTable,\n\talias: TAlias,\n): BuildAliasTable<TTable, TAlias> {\n\treturn new Proxy(table, new TableAliasProxyHandler(alias, false)) as any;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAgB,MACf,OACAA,QACkC;AAClC,SAAO,IAAI,MAAM,OAAO,IAAI,uBAAuBA,QAAO,KAAA,CAAM;;",
|
|
6
|
+
"names": ["alias"]
|
|
7
7
|
}
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
entityKind,
|
|
11
11
|
jitCompatCheck,
|
|
12
12
|
sql
|
|
13
|
-
} from "./shared-
|
|
13
|
+
} from "./shared-JAIU3GYB.js";
|
|
14
14
|
|
|
15
15
|
// node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_valibot@1.5.0_typescript@7.0.2__zod@4.6.5/node_modules/drizzle-orm/node-sqlite/session.js
|
|
16
16
|
var NodeSQLiteSession = class extends SQLiteAsyncSession {
|
|
@@ -4817,8 +4817,11 @@ export {
|
|
|
4817
4817
|
gte,
|
|
4818
4818
|
lte,
|
|
4819
4819
|
inArray,
|
|
4820
|
+
notInArray,
|
|
4820
4821
|
isNull,
|
|
4822
|
+
asc,
|
|
4821
4823
|
desc,
|
|
4824
|
+
TableAliasProxyHandler,
|
|
4822
4825
|
jitCompatCheck,
|
|
4823
4826
|
DefaultLogger,
|
|
4824
4827
|
NoopLogger,
|
|
@@ -4835,4 +4838,4 @@ export {
|
|
|
4835
4838
|
SQLiteAsyncSession,
|
|
4836
4839
|
SQLiteAsyncTransaction
|
|
4837
4840
|
};
|
|
4838
|
-
//# sourceMappingURL=shared-
|
|
4841
|
+
//# sourceMappingURL=shared-JAIU3GYB.js.map
|
|
@@ -9,4 +9,5 @@ export declare const upsertMessage: (context: StoreContext, key: AccountKey, acc
|
|
|
9
9
|
export declare const tombstone: ({ orm, now }: StoreContext, pk: number) => number;
|
|
10
10
|
/** Whether the message is held at all. */
|
|
11
11
|
export declare const saveReactions: ({ orm }: StoreContext, chatKey: number, messageId: Id, reactions: Reactions) => boolean;
|
|
12
|
+
export declare const markDeleted: (context: StoreContext, key: AccountKey, accountKey: number, messageIds: Id[], chatId: Id | undefined) => number;
|
|
12
13
|
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAI7C,OAAO,KAAK,EAAO,YAAY,EAAE,MAAM,WAAW,CAAA;AAkGlD,eAAO,MAAM,aAAa,YACf,YAAY,OAChB,UAAU,cACH,MAAM,WACT,MAAM,WACN,OAAO,OACX,MAAM,WACF,MAAM,KACd,IA+DF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,iBAAkB,YAAY,MAAM,MAAM,KAAG,MAclE,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,aAAa,YAAa,YAAY,WAAW,MAAM,aAAa,EAAE,aAAa,SAAS,KAAG,OAMvF,CAAA;AAKrB,eAAO,MAAM,WAAW,YACb,YAAY,OAChB,UAAU,cACH,MAAM,cACN,EAAE,EAAE,UACR,EAAE,GAAG,SAAS,KACrB,MAyCF,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { NORMALIZER_VERSION, normalize } from "../normalize.js";
|
|
2
|
-
import {
|
|
2
|
+
import { findChatPk } from "./chats.js";
|
|
3
|
+
import { and, eq, isNull, ne, notInArray, sql } from "./drizzle/core.js";
|
|
3
4
|
import { identityPk } from "./identities.js";
|
|
4
|
-
import { attachments, messageRevisions, messages, transcripts } from "./schema.js";
|
|
5
|
+
import { attachments, chats, messageRevisions, messages, transcripts } from "./schema.js";
|
|
5
6
|
import { json, toMs } from "./values.js";
|
|
6
7
|
const FIELDS = [
|
|
7
8
|
"threadNativeId",
|
|
@@ -164,4 +165,41 @@ export const saveReactions = ({ orm }, chatKey, messageId, reactions) => orm
|
|
|
164
165
|
.where(and(eq(messages.chatPk, chatKey), eq(messages.nativeId, messageId)))
|
|
165
166
|
.returning({ pk: messages.pk })
|
|
166
167
|
.all().length > 0;
|
|
168
|
+
/** Telegram's chat types that number their messages themselves, not per account. */
|
|
169
|
+
const OWN_NUMBERING = ["channel", "supergroup", "gigagroup", "monoforum"];
|
|
170
|
+
export const markDeleted = (context, key, accountKey, messageIds, chatId) => {
|
|
171
|
+
const { orm } = context;
|
|
172
|
+
const chatKey = chatId === undefined ? undefined : findChatPk(context, accountKey, chatId);
|
|
173
|
+
// A Telegram chat stored only by its id, from a message seen before the chat, has no kind yet —
|
|
174
|
+
// but a channel's or a supergroup's id is marked `-100…`, which says enough.
|
|
175
|
+
const stubs = key.provider === "telegram" ? sql `NOT (${chats.kind} = 'unknown' AND ${chats.nativeId} LIKE '-100%')` : undefined;
|
|
176
|
+
let changed = 0;
|
|
177
|
+
for (const messageId of messageIds) {
|
|
178
|
+
const live = and(eq(messages.accountPk, accountKey), eq(messages.nativeId, messageId), isNull(messages.deletedAt));
|
|
179
|
+
if (chatId !== undefined) {
|
|
180
|
+
const found = chatKey === undefined
|
|
181
|
+
? undefined
|
|
182
|
+
: orm
|
|
183
|
+
.select({ pk: messages.pk })
|
|
184
|
+
.from(messages)
|
|
185
|
+
.where(and(live, eq(messages.chatPk, chatKey)))
|
|
186
|
+
.get();
|
|
187
|
+
if (found)
|
|
188
|
+
changed += tombstone(context, found.pk);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// Telegram names a deletion without its chat only where ids count per account; a channel or
|
|
192
|
+
// supergroup numbers its own, so the same id there is another message. Two candidates left
|
|
193
|
+
// means the id is ambiguous, and a missed tombstone is better than a wrong one.
|
|
194
|
+
const candidates = orm
|
|
195
|
+
.select({ pk: messages.pk })
|
|
196
|
+
.from(messages)
|
|
197
|
+
.innerJoin(chats, eq(chats.pk, messages.chatPk))
|
|
198
|
+
.where(and(live, ne(chats.kind, "channel"), stubs, notInArray(sql `coalesce(json_extract(${chats.providerMetadata}, '$.chatType'), '')`, OWN_NUMBERING)))
|
|
199
|
+
.all();
|
|
200
|
+
if (candidates.length === 1 && candidates[0])
|
|
201
|
+
changed += tombstone(context, candidates[0].pk);
|
|
202
|
+
}
|
|
203
|
+
return changed;
|
|
204
|
+
};
|
|
167
205
|
//# sourceMappingURL=messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/store/sqlite/messages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAoB,GAAG,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/store/sqlite/messages.ts"],"names":[],"mappings":"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"}
|