@wirecat/cli-core 0.305.0 → 0.307.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/analysis/consents.js +4 -4
- package/dist/analysis/consents.js.map +1 -1
- package/dist/attachments/directory.js +1 -1
- package/dist/attachments/directory.js.map +1 -1
- package/dist/botcheck/service.js +3 -3
- package/dist/botcheck/service.js.map +1 -1
- package/dist/cli/bot/context.d.ts +2 -2
- package/dist/cli/bot/copy.js +4 -4
- package/dist/cli/bot/copy.js.map +1 -1
- package/dist/cli/bot/messages.d.ts.map +1 -1
- package/dist/cli/bot/messages.js +2 -2
- package/dist/cli/bot/messages.js.map +1 -1
- package/dist/cli/bot/moderation.js +1 -1
- package/dist/cli/bot/moderation.js.map +1 -1
- package/dist/cli/bot/people.js +4 -4
- package/dist/cli/bot/people.js.map +1 -1
- package/dist/cli/bot/store.js +2 -2
- package/dist/cli/bot/store.js.map +1 -1
- package/dist/cli/config-keys.d.ts.map +1 -1
- package/dist/cli/config-keys.js +2 -1
- package/dist/cli/config-keys.js.map +1 -1
- package/dist/cli/meeting-preparation-answer.d.ts +2 -1
- package/dist/cli/meeting-preparation-answer.d.ts.map +1 -1
- package/dist/cli/meeting-preparation-read.d.ts +2 -1
- package/dist/cli/meeting-preparation-read.d.ts.map +1 -1
- package/dist/cli/messenger/account-command.js +1 -1
- package/dist/cli/messenger/account-command.js.map +1 -1
- package/dist/cli/messenger/complete-command.js +2 -2
- package/dist/cli/messenger/complete-command.js.map +1 -1
- package/dist/cli/messenger/context.js +1 -1
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/serve-members.js +1 -1
- package/dist/cli/messenger/serve-members.js.map +1 -1
- package/dist/cli/messenger/serve-stems.js +3 -3
- package/dist/cli/messenger/serve-stems.js.map +1 -1
- package/dist/cli/messenger/stored.d.ts.map +1 -1
- package/dist/cli/messenger/stored.js +21 -21
- package/dist/cli/messenger/stored.js.map +1 -1
- package/dist/cli/store-settings.js +3 -3
- package/dist/cli/store-settings.js.map +1 -1
- package/dist/entities/index.d.ts +2 -1
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/meeting-preparation.d.ts +2 -1
- package/dist/entities/meeting-preparation.d.ts.map +1 -1
- package/dist/entities/meeting-preparation.js +5 -1
- package/dist/entities/meeting-preparation.js.map +1 -1
- package/dist/errors/reasons.d.ts.map +1 -1
- package/dist/errors/reasons.js +1 -0
- package/dist/errors/reasons.js.map +1 -1
- package/dist/files/atomic-write.d.ts +15 -0
- package/dist/files/atomic-write.d.ts.map +1 -0
- package/dist/files/atomic-write.js +35 -0
- package/dist/files/atomic-write.js.map +1 -0
- package/dist/files/index.d.ts +2 -0
- package/dist/files/index.d.ts.map +1 -1
- package/dist/files/index.js +2 -0
- package/dist/files/index.js.map +1 -1
- package/dist/files/lock.d.ts +14 -0
- package/dist/files/lock.d.ts.map +1 -0
- package/dist/files/lock.js +22 -0
- package/dist/files/lock.js.map +1 -0
- package/dist/files/native-lease-release.d.ts +3 -1
- package/dist/files/native-lease-release.d.ts.map +1 -1
- package/dist/files/native-lease-release.js +7 -3
- package/dist/files/native-lease-release.js.map +1 -1
- package/dist/kit/search-recipes.d.ts.map +1 -1
- package/dist/kit/search-recipes.js +5 -5
- package/dist/kit/search-recipes.js.map +1 -1
- package/dist/mcp/meeting-preparation.d.ts +2 -1
- package/dist/mcp/meeting-preparation.d.ts.map +1 -1
- package/dist/mcp/resources.js +1 -1
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/tools/chats.js +1 -1
- package/dist/mcp/tools/chats.js.map +1 -1
- package/dist/meetings/index.d.ts +1 -1
- package/dist/meetings/index.d.ts.map +1 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/preparation-notes.d.ts +4 -1
- package/dist/meetings/preparation-notes.d.ts.map +1 -1
- package/dist/replies/dry-run.d.ts.map +1 -1
- package/dist/replies/dry-run.js +5 -5
- package/dist/replies/dry-run.js.map +1 -1
- package/dist/services/admin-statistics.js +6 -6
- package/dist/services/admin-statistics.js.map +1 -1
- package/dist/services/agenda.js +1 -1
- package/dist/services/agenda.js.map +1 -1
- package/dist/services/archive-gaps.js +4 -4
- package/dist/services/archive-gaps.js.map +1 -1
- package/dist/services/archive.d.ts.map +1 -1
- package/dist/services/archive.js +23 -23
- package/dist/services/archive.js.map +1 -1
- package/dist/services/attachments.d.ts.map +1 -1
- package/dist/services/attachments.js +21 -10
- package/dist/services/attachments.js.map +1 -1
- package/dist/services/chat-documents.js +2 -2
- package/dist/services/chat-documents.js.map +1 -1
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +24 -19
- package/dist/services/chats.js.map +1 -1
- package/dist/services/conversations.js +15 -15
- package/dist/services/conversations.js.map +1 -1
- package/dist/services/counters.d.ts.map +1 -1
- package/dist/services/counters.js +4 -4
- package/dist/services/counters.js.map +1 -1
- package/dist/services/embeddings-maintenance.d.ts.map +1 -1
- package/dist/services/embeddings-maintenance.js +13 -13
- package/dist/services/embeddings-maintenance.js.map +1 -1
- package/dist/services/embeddings-search.d.ts.map +1 -1
- package/dist/services/embeddings-search.js +16 -16
- package/dist/services/embeddings-search.js.map +1 -1
- package/dist/services/evidence-read.js +1 -1
- package/dist/services/evidence-read.js.map +1 -1
- package/dist/services/folders.js +1 -1
- package/dist/services/folders.js.map +1 -1
- package/dist/services/inbox.js +4 -4
- package/dist/services/inbox.js.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/mail-search.d.ts.map +1 -1
- package/dist/services/mail-search.js +15 -13
- package/dist/services/mail-search.js.map +1 -1
- package/dist/services/meeting-context.d.ts +4 -2
- package/dist/services/meeting-context.d.ts.map +1 -1
- package/dist/services/meeting-context.js +1 -1
- package/dist/services/meeting-context.js.map +1 -1
- package/dist/services/meeting-notes-preparation.d.ts.map +1 -1
- package/dist/services/meeting-notes-preparation.js +12 -4
- package/dist/services/meeting-notes-preparation.js.map +1 -1
- package/dist/services/meeting-preparation-types.d.ts +2 -2
- package/dist/services/meeting-preparation-types.d.ts.map +1 -1
- package/dist/services/meeting-tasks.d.ts +4 -2
- package/dist/services/meeting-tasks.d.ts.map +1 -1
- package/dist/services/meeting-tasks.js +1 -1
- package/dist/services/meeting-tasks.js.map +1 -1
- package/dist/services/mentions.d.ts.map +1 -1
- package/dist/services/mentions.js +8 -8
- package/dist/services/mentions.js.map +1 -1
- package/dist/services/message-resolution.d.ts.map +1 -1
- package/dist/services/message-resolution.js +6 -6
- package/dist/services/message-resolution.js.map +1 -1
- package/dist/services/messages-archive-search.js +4 -4
- package/dist/services/messages-archive-search.js.map +1 -1
- package/dist/services/messages-combined.js +3 -3
- package/dist/services/messages-combined.js.map +1 -1
- package/dist/services/messages-discovery.js +2 -2
- package/dist/services/messages-discovery.js.map +1 -1
- package/dist/services/messages-search.d.ts.map +1 -1
- package/dist/services/messages-search.js +13 -13
- package/dist/services/messages-search.js.map +1 -1
- package/dist/services/messages.js +6 -6
- package/dist/services/messages.js.map +1 -1
- package/dist/services/metadata.js +9 -9
- package/dist/services/metadata.js.map +1 -1
- package/dist/services/notes-search.js +4 -4
- package/dist/services/notes-search.js.map +1 -1
- package/dist/services/people.d.ts.map +1 -1
- package/dist/services/people.js +18 -17
- package/dist/services/people.js.map +1 -1
- package/dist/services/person-context.js +16 -16
- package/dist/services/person-context.js.map +1 -1
- package/dist/services/person-meeting-context.d.ts +3 -2
- package/dist/services/person-meeting-context.d.ts.map +1 -1
- package/dist/services/person-meeting-context.js +3 -3
- package/dist/services/person-meeting-context.js.map +1 -1
- package/dist/services/person-profile.js +5 -5
- package/dist/services/person-profile.js.map +1 -1
- package/dist/services/person-timeline.js +2 -2
- package/dist/services/person-timeline.js.map +1 -1
- package/dist/services/pictures.d.ts.map +1 -1
- package/dist/services/pictures.js +9 -6
- package/dist/services/pictures.js.map +1 -1
- package/dist/services/private-people.d.ts.map +1 -1
- package/dist/services/private-people.js +7 -7
- package/dist/services/private-people.js.map +1 -1
- package/dist/services/rankings-selection.js +1 -1
- package/dist/services/rankings-selection.js.map +1 -1
- package/dist/services/rankings.js +7 -7
- package/dist/services/rankings.js.map +1 -1
- package/dist/services/retention.d.ts +3 -3
- package/dist/services/retention.js +2 -2
- package/dist/services/retention.js.map +1 -1
- package/dist/services/search-all-meetings.js +2 -2
- package/dist/services/search-all-meetings.js.map +1 -1
- package/dist/services/search-all.d.ts.map +1 -1
- package/dist/services/search-all.js +3 -1
- package/dist/services/search-all.js.map +1 -1
- package/dist/services/search-catchup.js +1 -1
- package/dist/services/search-catchup.js.map +1 -1
- package/dist/services/search-kind.js +4 -4
- package/dist/services/search-kind.js.map +1 -1
- package/dist/services/search-refresh.d.ts.map +1 -1
- package/dist/services/search-refresh.js +2 -2
- package/dist/services/search-refresh.js.map +1 -1
- package/dist/services/searches.js +7 -7
- package/dist/services/searches.js.map +1 -1
- package/dist/services/server-search.js +4 -4
- package/dist/services/server-search.js.map +1 -1
- package/dist/services/tags.d.ts.map +1 -1
- package/dist/services/tags.js +7 -4
- package/dist/services/tags.js.map +1 -1
- package/dist/services/task-rules.js +6 -6
- package/dist/services/task-rules.js.map +1 -1
- package/dist/services/tasks.js +2 -2
- package/dist/services/tasks.js.map +1 -1
- package/dist/services/thread-context.d.ts.map +1 -1
- package/dist/services/thread-context.js +5 -5
- package/dist/services/thread-context.js.map +1 -1
- package/dist/speech/hearing.d.ts.map +1 -1
- package/dist/speech/hearing.js +2 -2
- package/dist/speech/hearing.js.map +1 -1
- package/dist/store/account-store.d.ts +64 -17
- package/dist/store/account-store.d.ts.map +1 -1
- package/dist/store/account-store.js +75 -121
- package/dist/store/account-store.js.map +1 -1
- package/dist/store/accounts.d.ts +35 -0
- package/dist/store/accounts.d.ts.map +1 -0
- package/dist/store/accounts.js +47 -0
- package/dist/store/accounts.js.map +1 -0
- package/dist/store/attachments.d.ts +40 -0
- package/dist/store/attachments.d.ts.map +1 -0
- package/dist/store/attachments.js +50 -0
- package/dist/store/attachments.js.map +1 -0
- package/dist/store/chats.d.ts +47 -0
- package/dist/store/chats.d.ts.map +1 -0
- package/dist/store/chats.js +80 -0
- package/dist/store/chats.js.map +1 -0
- package/dist/store/conversations.d.ts +73 -0
- package/dist/store/conversations.d.ts.map +1 -0
- package/dist/store/conversations.js +118 -0
- package/dist/store/conversations.js.map +1 -0
- package/dist/store/counters.d.ts +25 -0
- package/dist/store/counters.d.ts.map +1 -0
- package/dist/store/counters.js +26 -0
- package/dist/store/counters.js.map +1 -0
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/keys.d.ts +16 -0
- package/dist/store/keys.d.ts.map +1 -0
- package/dist/store/keys.js +25 -0
- package/dist/store/keys.js.map +1 -0
- package/dist/store/mentions.d.ts +41 -0
- package/dist/store/mentions.d.ts.map +1 -0
- package/dist/store/mentions.js +39 -0
- package/dist/store/mentions.js.map +1 -0
- package/dist/store/messages.d.ts +116 -0
- package/dist/store/messages.d.ts.map +1 -0
- package/dist/store/messages.js +102 -0
- package/dist/store/messages.js.map +1 -0
- package/dist/store/people.d.ts +53 -0
- package/dist/store/people.d.ts.map +1 -0
- package/dist/store/people.js +65 -0
- package/dist/store/people.js.map +1 -0
- package/dist/store/queries.d.ts +22 -0
- package/dist/store/queries.d.ts.map +1 -0
- package/dist/store/queries.js +22 -0
- package/dist/store/queries.js.map +1 -0
- package/dist/store/roster.d.ts +38 -0
- package/dist/store/roster.d.ts.map +1 -0
- package/dist/store/roster.js +54 -0
- package/dist/store/roster.js.map +1 -0
- package/dist/store/search-index.d.ts +40 -0
- package/dist/store/search-index.d.ts.map +1 -0
- package/dist/store/search-index.js +19 -0
- package/dist/store/search-index.js.map +1 -0
- package/dist/store/searches.d.ts +22 -0
- package/dist/store/searches.d.ts.map +1 -0
- package/dist/store/searches.js +25 -0
- package/dist/store/searches.js.map +1 -0
- package/dist/store/sqlite/accounts.d.ts +1 -1
- package/dist/store/sqlite/admin-statistics.d.ts +1 -1
- package/dist/store/sqlite/batches.d.ts +1 -1
- package/dist/store/sqlite/bot-updates.d.ts +1 -1
- package/dist/store/sqlite/chats.d.ts +1 -1
- package/dist/store/sqlite/conversation-eligibility.d.ts +1 -1
- package/dist/store/sqlite/conversations.d.ts +1 -1
- package/dist/store/sqlite/emails.d.ts +1 -1
- package/dist/store/sqlite/emails.d.ts.map +1 -1
- package/dist/store/sqlite/emails.js +5 -2
- package/dist/store/sqlite/emails.js.map +1 -1
- package/dist/store/sqlite/identities.d.ts +1 -1
- package/dist/store/sqlite/knowledge.d.ts +1 -1
- package/dist/store/sqlite/lucene-fields.d.ts +66 -0
- package/dist/store/sqlite/lucene-fields.d.ts.map +1 -0
- package/dist/store/sqlite/lucene-fields.js +360 -0
- package/dist/store/sqlite/lucene-fields.js.map +1 -0
- package/dist/store/sqlite/lucene.d.ts +2 -13
- package/dist/store/sqlite/lucene.d.ts.map +1 -1
- package/dist/store/sqlite/lucene.js +27 -329
- package/dist/store/sqlite/lucene.js.map +1 -1
- package/dist/store/sqlite/meeting-preparation-notes.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-preparation-notes.js +13 -5
- package/dist/store/sqlite/meeting-preparation-notes.js.map +1 -1
- package/dist/store/sqlite/meeting-projects.d.ts +1 -1
- package/dist/store/sqlite/messages.d.ts +1 -1
- package/dist/store/sqlite/person-links.d.ts +1 -1
- package/dist/store/sqlite/private-people.d.ts +1 -1
- package/dist/store/sqlite/proposed-actions.d.ts +1 -1
- package/dist/store/sqlite/ranges.d.ts +1 -1
- package/dist/store/sqlite/ranking-evidence.d.ts +1 -1
- package/dist/store/sqlite/reads.d.ts +1 -1
- package/dist/store/sqlite/search.d.ts +1 -1
- package/dist/store/sqlite/tags.d.ts +1 -1
- package/dist/store/sqlite/task-rule-stops.d.ts +1 -1
- package/dist/store/sqlite/words.d.ts +1 -1
- package/dist/store/store.d.ts +62 -828
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +105 -836
- package/dist/store/store.js.map +1 -1
- package/dist/store/sync.d.ts +36 -0
- package/dist/store/sync.d.ts.map +1 -0
- package/dist/store/sync.js +59 -0
- package/dist/store/sync.js.map +1 -0
- package/dist/store/tags.d.ts +13 -0
- package/dist/store/tags.d.ts.map +1 -0
- package/dist/store/tags.js +23 -0
- package/dist/store/tags.js.map +1 -0
- package/dist/store/types.d.ts +247 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +2 -0
- package/dist/store/types.js.map +1 -0
- package/dist/store/vectors.d.ts +109 -0
- package/dist/store/vectors.d.ts.map +1 -0
- package/dist/store/vectors.js +221 -0
- package/dist/store/vectors.js.map +1 -0
- package/dist/update/index.d.ts +52 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +68 -0
- package/dist/update/index.js.map +1 -0
- package/package.json +5 -1
|
@@ -1,118 +1,21 @@
|
|
|
1
1
|
import { CliError } from "@wirecat/cli-base";
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"setSyncState",
|
|
20
|
-
"clearSyncState",
|
|
21
|
-
"applyDelta",
|
|
22
|
-
"claim",
|
|
23
|
-
"release",
|
|
24
|
-
"transcript",
|
|
25
|
-
"keepTranscript",
|
|
26
|
-
"keepDownloads",
|
|
27
|
-
"fileAttachments",
|
|
28
|
-
"attachments",
|
|
29
|
-
"linkInputs",
|
|
30
|
-
"senderHandles",
|
|
31
|
-
"replaceConversations",
|
|
32
|
-
"conversations",
|
|
33
|
-
"conversation",
|
|
34
|
-
"conversationOf",
|
|
35
|
-
"conversationsOfMessages",
|
|
36
|
-
"links",
|
|
37
|
-
"replies",
|
|
38
|
-
"agentAnswers",
|
|
39
|
-
"saveAnswers",
|
|
40
|
-
"clearAnswers",
|
|
41
|
-
"batchStatus",
|
|
42
|
-
"nextBatch",
|
|
43
|
-
"chunksToEmbed",
|
|
44
|
-
"imagesToDescribe",
|
|
45
|
-
"saveImageChunks",
|
|
46
|
-
"nearestImages",
|
|
47
|
-
"picturesToEmbed",
|
|
48
|
-
"savePictures",
|
|
49
|
-
"nearestPictures",
|
|
50
|
-
"vectorStatus",
|
|
51
|
-
"clearVectors",
|
|
52
|
-
"nearestConversations",
|
|
53
|
-
"conversationVectors",
|
|
54
|
-
"readiness",
|
|
55
|
-
"unbuiltGroups",
|
|
56
|
-
"embeddedOnlyElsewhere",
|
|
57
|
-
"conversationState",
|
|
58
|
-
"messages",
|
|
59
|
-
"countMessages",
|
|
60
|
-
"documentLinkMessages",
|
|
61
|
-
"mentions",
|
|
62
|
-
"mention",
|
|
63
|
-
"confirmMention",
|
|
64
|
-
"rejectMention",
|
|
65
|
-
"changes",
|
|
66
|
-
"messagesWindow",
|
|
67
|
-
"around",
|
|
68
|
-
"message",
|
|
69
|
-
"purge",
|
|
70
|
-
"markChatsLeft",
|
|
71
|
-
"leftChats",
|
|
72
|
-
"markDeleted",
|
|
73
|
-
"rankingDiscussionChats",
|
|
74
|
-
"retention",
|
|
75
|
-
"chatCompleteness",
|
|
76
|
-
"savePeople",
|
|
77
|
-
"contacts",
|
|
78
|
-
"countContacts",
|
|
79
|
-
"refreshRecency",
|
|
80
|
-
"storedAccount",
|
|
81
|
-
"accountName",
|
|
82
|
-
"mentioning",
|
|
83
|
-
"saveReactions",
|
|
84
|
-
"counterStates",
|
|
85
|
-
"updateCounterObservations",
|
|
86
|
-
"markRange",
|
|
87
|
-
"chatStats",
|
|
88
|
-
"chatActivity",
|
|
89
|
-
"senderStats",
|
|
90
|
-
"personNames",
|
|
91
|
-
"ranges",
|
|
92
|
-
"chatMetadata",
|
|
93
|
-
"saveChatMetadata",
|
|
94
|
-
"replaceAutoTags",
|
|
95
|
-
"privateContact",
|
|
96
|
-
"setContactAlias",
|
|
97
|
-
"addContactNote",
|
|
98
|
-
"contactNote",
|
|
99
|
-
"editContactNote",
|
|
100
|
-
"removeContactNote",
|
|
101
|
-
"addTags",
|
|
102
|
-
"removeTags",
|
|
103
|
-
"tags",
|
|
104
|
-
"taskRulesStop",
|
|
105
|
-
"setTaskRulesStop",
|
|
106
|
-
];
|
|
107
|
-
const everyMethodListed = true;
|
|
108
|
-
export const bindAccount = (store, account, owners) => {
|
|
109
|
-
void everyMethodListed;
|
|
110
|
-
const bound = {};
|
|
111
|
-
for (const name of ACCOUNT_METHODS) {
|
|
112
|
-
const method = store[name];
|
|
113
|
-
if (method)
|
|
114
|
-
bound[name] = (...rest) => method.call(store, account, ...rest);
|
|
115
|
-
}
|
|
2
|
+
// Looked up on each call, so a spy set on the store's area after `forAccount` still sees the call.
|
|
3
|
+
const bindArea = ({ keyed, whole }, account) => {
|
|
4
|
+
const methods = whole;
|
|
5
|
+
return Object.fromEntries(Object.keys(keyed).map((name) => [
|
|
6
|
+
name,
|
|
7
|
+
(...rest) => methods[name](account, ...rest),
|
|
8
|
+
]));
|
|
9
|
+
};
|
|
10
|
+
const once = (build) => {
|
|
11
|
+
let built;
|
|
12
|
+
return () => {
|
|
13
|
+
built ??= build();
|
|
14
|
+
return built;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export const bindAccount = (store, account, areas, owners) => {
|
|
18
|
+
const bound = (area) => once(() => bindArea(area(), account));
|
|
116
19
|
const ownAttachment = (attachmentPk) => {
|
|
117
20
|
const pk = owners.accountPk();
|
|
118
21
|
if (pk === undefined || owners.attachmentAccount(attachmentPk) !== pk)
|
|
@@ -155,18 +58,69 @@ export const bindAccount = (store, account, owners) => {
|
|
|
155
58
|
return id === undefined ? [] : store.meetings.search(query, { ...filter, accountId: id });
|
|
156
59
|
},
|
|
157
60
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
61
|
+
const accounts = bound(areas.accounts);
|
|
62
|
+
const chats = bound(areas.chats);
|
|
63
|
+
const sync = bound(areas.sync);
|
|
64
|
+
const messages = once(() => ({
|
|
65
|
+
...bindArea(areas.messages(), account),
|
|
66
|
+
find: (filter) => store.messages.find({ ...filter, account }),
|
|
67
|
+
search: (query, options) => store.messages.search(query, { ...options, account }),
|
|
68
|
+
}));
|
|
69
|
+
const attachments = once(() => ({
|
|
70
|
+
...bindArea(areas.attachments(), account),
|
|
163
71
|
localPathOf: async (attachmentPk) => {
|
|
164
72
|
ownAttachment(attachmentPk);
|
|
165
|
-
return store.localPathOf(attachmentPk);
|
|
73
|
+
return store.attachments.localPathOf(attachmentPk);
|
|
166
74
|
},
|
|
167
75
|
keepAttachmentText: async (attachmentPk, entry) => {
|
|
168
76
|
ownAttachment(attachmentPk);
|
|
169
|
-
return store.keepAttachmentText(attachmentPk, entry);
|
|
77
|
+
return store.attachments.keepAttachmentText(attachmentPk, entry);
|
|
78
|
+
},
|
|
79
|
+
}));
|
|
80
|
+
const roster = bound(areas.roster);
|
|
81
|
+
const people = bound(areas.people);
|
|
82
|
+
const conversations = bound(areas.conversations);
|
|
83
|
+
const vectors = bound(areas.vectors);
|
|
84
|
+
const counters = bound(areas.counters);
|
|
85
|
+
const tags = bound(areas.tags);
|
|
86
|
+
const mentions = bound(areas.mentions);
|
|
87
|
+
return {
|
|
88
|
+
account,
|
|
89
|
+
get accounts() {
|
|
90
|
+
return accounts();
|
|
91
|
+
},
|
|
92
|
+
get chats() {
|
|
93
|
+
return chats();
|
|
94
|
+
},
|
|
95
|
+
get sync() {
|
|
96
|
+
return sync();
|
|
97
|
+
},
|
|
98
|
+
get messages() {
|
|
99
|
+
return messages();
|
|
100
|
+
},
|
|
101
|
+
get attachments() {
|
|
102
|
+
return attachments();
|
|
103
|
+
},
|
|
104
|
+
get roster() {
|
|
105
|
+
return roster();
|
|
106
|
+
},
|
|
107
|
+
get people() {
|
|
108
|
+
return people();
|
|
109
|
+
},
|
|
110
|
+
get conversations() {
|
|
111
|
+
return conversations();
|
|
112
|
+
},
|
|
113
|
+
get vectors() {
|
|
114
|
+
return vectors();
|
|
115
|
+
},
|
|
116
|
+
get counters() {
|
|
117
|
+
return counters();
|
|
118
|
+
},
|
|
119
|
+
get tags() {
|
|
120
|
+
return tags();
|
|
121
|
+
},
|
|
122
|
+
get mentions() {
|
|
123
|
+
return mentions();
|
|
170
124
|
},
|
|
171
125
|
mail,
|
|
172
126
|
meetings,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-store.js","sourceRoot":"","sources":["../../src/store/account-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"account-store.js","sourceRoot":"","sources":["../../src/store/account-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type AccountGroups, type Profiles } from "../search/account-list.js";
|
|
2
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
3
|
+
import type { AccountKey, StoredAccount } from "./types.js";
|
|
4
|
+
export interface AccountAccounts {
|
|
5
|
+
/** Answers the store's id for the account, which `meetings` and `mail` take. */
|
|
6
|
+
saveAccount(key: AccountKey, account: {
|
|
7
|
+
name: string | null;
|
|
8
|
+
}): Promise<number>;
|
|
9
|
+
/** One account by provider and external id, never created: `not_found` when the store has none. */
|
|
10
|
+
storedAccount(key: AccountKey): Promise<StoredAccount>;
|
|
11
|
+
/** The name the messenger last gave for this account; `null` when it never did. */
|
|
12
|
+
accountName(key: AccountKey): Promise<string | null>;
|
|
13
|
+
/**
|
|
14
|
+
* Everything one account holds — its chats, messages, members, state, leases, transcripts and whom
|
|
15
|
+
* it has seen — for `cache clear`. Other accounts, and identities they share, stay.
|
|
16
|
+
*/
|
|
17
|
+
purge(key: AccountKey): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export interface AccountsStore extends AccountAccounts {
|
|
20
|
+
/** Every account of every messenger the file holds, by messenger then id. */
|
|
21
|
+
accounts(): Promise<AccountKey[]>;
|
|
22
|
+
/** Every account with the store's id for it, by provider then external id. */
|
|
23
|
+
storedAccounts(): Promise<StoredAccount[]>;
|
|
24
|
+
/** The account groups `--source group:<name>` reads: each group's entries as saved, store-wide. */
|
|
25
|
+
accountGroups(): Promise<AccountGroups>;
|
|
26
|
+
/** Saves one group's entries; `undefined` removes the group. */
|
|
27
|
+
saveAccountGroup(name: string, members: string[] | undefined): Promise<void>;
|
|
28
|
+
/** Per app command, each profile's account: how `--source max:default` finds a profile of another app. */
|
|
29
|
+
profiles(): Promise<Profiles>;
|
|
30
|
+
/** Records which account a profile of `app` is; a no-op when the store already says so. */
|
|
31
|
+
saveProfile(app: string, profile: string, key: AccountKey): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare const accountAccountsOver: (context: StoreContext) => AccountAccounts;
|
|
34
|
+
export declare const accountsStoreOver: (context: StoreContext, keyed: AccountAccounts) => AccountsStore;
|
|
35
|
+
//# sourceMappingURL=accounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/store/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAI7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE3D,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/E,mGAAmG;IACnG,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACtD,mFAAmF;IACnF,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACpD;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,6EAA6E;IAC7E,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IACjC,8EAA8E;IAC9E,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAC1C,mGAAmG;IACnG,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;IACvC,gEAAgE;IAChE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E,0GAA0G;IAC1G,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7B,2FAA2F;IAC3F,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1E;AAED,eAAO,MAAM,mBAAmB,YAAa,YAAY,KAAG,eAiB3D,CAAA;AAED,eAAO,MAAM,iBAAiB,YAAa,YAAY,SAAS,eAAe,KAAG,aAoBjF,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ACCOUNT_GROUPS } from "../search/account-list.js";
|
|
2
|
+
import { keysOver } from "./keys.js";
|
|
3
|
+
import { accountGroupsOf, profilesOf, saveProfile } from "./sqlite/account-groups.js";
|
|
4
|
+
import * as accounts from "./sqlite/accounts.js";
|
|
5
|
+
import { linkInbox } from "./sqlite/tasks.js";
|
|
6
|
+
import { write } from "./sqlite/transaction.js";
|
|
7
|
+
export const accountAccountsOver = (context) => {
|
|
8
|
+
const { database } = context;
|
|
9
|
+
const { accountPk, findAccountPk } = keysOver(context);
|
|
10
|
+
return {
|
|
11
|
+
saveAccount: async (key, { name }) => {
|
|
12
|
+
const pk = accountPk(key, name);
|
|
13
|
+
linkInbox(database, `${key.provider}:${key.account}`, pk);
|
|
14
|
+
return pk;
|
|
15
|
+
},
|
|
16
|
+
storedAccount: async (key) => accounts.storedAccount(context, key),
|
|
17
|
+
accountName: async (key) => accounts.accountName(context, key),
|
|
18
|
+
purge: async (key) => {
|
|
19
|
+
const accountKey = findAccountPk(key);
|
|
20
|
+
if (accountKey === undefined)
|
|
21
|
+
return;
|
|
22
|
+
write(database, () => accounts.purgeAccount(context, accountKey));
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export const accountsStoreOver = (context, keyed) => {
|
|
27
|
+
const { database } = context;
|
|
28
|
+
return {
|
|
29
|
+
...keyed,
|
|
30
|
+
accounts: async () => accounts.heldAccounts(context),
|
|
31
|
+
storedAccounts: async () => accounts.storedAccounts(context),
|
|
32
|
+
accountGroups: async () => accountGroupsOf(database),
|
|
33
|
+
profiles: async () => profilesOf(database),
|
|
34
|
+
saveProfile: async (app, profile, key) => write(database, () => saveProfile(database, app, profile, key, context.now())),
|
|
35
|
+
saveAccountGroup: async (name, members) => write(database, () => {
|
|
36
|
+
const groups = accountGroupsOf(database);
|
|
37
|
+
if (members === undefined)
|
|
38
|
+
delete groups[name];
|
|
39
|
+
else
|
|
40
|
+
groups[name] = members;
|
|
41
|
+
database
|
|
42
|
+
.prepare("INSERT OR REPLACE INTO store_settings (key, value, at) VALUES (?, ?, ?)")
|
|
43
|
+
.run(ACCOUNT_GROUPS, JSON.stringify(groups), context.now());
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/store/accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { DownloadedFile } from "../domain/attachments.js";
|
|
2
|
+
import type { Id } from "../domain/models.js";
|
|
3
|
+
import type { AttachmentTextEntry, AttachmentView, FileAttachment } from "./sqlite/attachment-texts.js";
|
|
4
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
5
|
+
import type { Where } from "./sqlite/query-filter.js";
|
|
6
|
+
import type { AccountKey } from "./types.js";
|
|
7
|
+
export interface AccountAttachments {
|
|
8
|
+
/**
|
|
9
|
+
* Where `messages download` saved a held message's files, for reading them later. Answers how many
|
|
10
|
+
* attachments it recorded: a file it cannot tell apart from another is not recorded.
|
|
11
|
+
*/
|
|
12
|
+
keepDownloads(key: AccountKey, chatId: Id, messageId: Id, files: readonly DownloadedFile[]): Promise<number>;
|
|
13
|
+
/** File attachments of this account's live messages, newest first, below `beforePk`; never one an agent wrote. */
|
|
14
|
+
fileAttachments(key: AccountKey, page: {
|
|
15
|
+
chatId?: Id;
|
|
16
|
+
messageId?: Id;
|
|
17
|
+
beforePk?: number;
|
|
18
|
+
limit: number;
|
|
19
|
+
}): Promise<FileAttachment[]>;
|
|
20
|
+
/**
|
|
21
|
+
* File attachments of live messages and what is held of their text, newest first; never the text. `where` is a
|
|
22
|
+
* list query compiled over `attachmentColumns`.
|
|
23
|
+
*/
|
|
24
|
+
attachments(key: AccountKey, filter: {
|
|
25
|
+
chatId?: Id;
|
|
26
|
+
messageId?: Id;
|
|
27
|
+
where?: Where;
|
|
28
|
+
offset?: number;
|
|
29
|
+
limit: number;
|
|
30
|
+
}): Promise<AttachmentView[]>;
|
|
31
|
+
}
|
|
32
|
+
export interface AttachmentsStore extends AccountAttachments {
|
|
33
|
+
/** Where the file of one attachment was saved, when that is recorded. */
|
|
34
|
+
localPathOf(attachmentPk: number): Promise<string | null>;
|
|
35
|
+
/** An extraction never replaces an agent's text; answers whether it was kept. */
|
|
36
|
+
keepAttachmentText(attachmentPk: number, entry: AttachmentTextEntry): Promise<boolean>;
|
|
37
|
+
}
|
|
38
|
+
export declare const accountAttachmentsOver: (context: StoreContext) => AccountAttachments;
|
|
39
|
+
export declare const attachmentsStoreOver: (context: StoreContext, keyed: AccountAttachments) => AttachmentsStore;
|
|
40
|
+
//# sourceMappingURL=attachments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/store/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAGvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5G,kHAAkH;IAClH,eAAe,CACb,GAAG,EAAE,UAAU,EACf,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IAC5B;;;OAGG;IACH,WAAW,CACT,GAAG,EAAE,UAAU,EACf,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GACrF,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,yEAAyE;IACzE,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzD,iFAAiF;IACjF,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACvF;AAED,eAAO,MAAM,sBAAsB,YAAa,YAAY,KAAG,kBA8B9D,CAAA;AAED,eAAO,MAAM,oBAAoB,YAAa,YAAY,SAAS,kBAAkB,KAAG,gBAUtF,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { keysOver } from "./keys.js";
|
|
2
|
+
import * as attachmentTexts from "./sqlite/attachment-texts.js";
|
|
3
|
+
import * as attachmentRows from "./sqlite/attachments.js";
|
|
4
|
+
import { write } from "./sqlite/transaction.js";
|
|
5
|
+
export const accountAttachmentsOver = (context) => {
|
|
6
|
+
const { database } = context;
|
|
7
|
+
const { findAccountPk, findChatPk, chatKeyOf } = keysOver(context);
|
|
8
|
+
return {
|
|
9
|
+
keepDownloads: async (key, chatId, messageId, files) => {
|
|
10
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
11
|
+
if (chatKey === undefined || files.length === 0)
|
|
12
|
+
return 0;
|
|
13
|
+
let kept = 0;
|
|
14
|
+
write(database, () => {
|
|
15
|
+
kept = attachmentRows.keepDownloads(context, chatKey, messageId, files);
|
|
16
|
+
});
|
|
17
|
+
return kept;
|
|
18
|
+
},
|
|
19
|
+
fileAttachments: async (key, { chatId, ...page }) => {
|
|
20
|
+
const accountKey = findAccountPk(key);
|
|
21
|
+
if (accountKey === undefined)
|
|
22
|
+
return [];
|
|
23
|
+
if (chatId === undefined)
|
|
24
|
+
return attachmentTexts.fileAttachments(context, accountKey, page);
|
|
25
|
+
const chatKey = findChatPk(accountKey, chatId);
|
|
26
|
+
return chatKey === undefined ? [] : attachmentTexts.fileAttachments(context, accountKey, { ...page, chatKey });
|
|
27
|
+
},
|
|
28
|
+
attachments: async (key, { chatId, ...filter }) => {
|
|
29
|
+
const accountKey = findAccountPk(key);
|
|
30
|
+
if (accountKey === undefined)
|
|
31
|
+
return [];
|
|
32
|
+
if (chatId === undefined)
|
|
33
|
+
return attachmentTexts.attachmentViews(context, accountKey, filter);
|
|
34
|
+
const chatKey = findChatPk(accountKey, chatId);
|
|
35
|
+
return chatKey === undefined ? [] : attachmentTexts.attachmentViews(context, accountKey, { ...filter, chatKey });
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export const attachmentsStoreOver = (context, keyed) => ({
|
|
40
|
+
...keyed,
|
|
41
|
+
localPathOf: async (attachmentPk) => attachmentTexts.localPathOf(context, attachmentPk),
|
|
42
|
+
keepAttachmentText: async (attachmentPk, entry) => {
|
|
43
|
+
let kept = false;
|
|
44
|
+
write(context.database, () => {
|
|
45
|
+
kept = attachmentTexts.keepText(context, attachmentPk, entry);
|
|
46
|
+
});
|
|
47
|
+
return kept;
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/store/attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ChannelTagMatch } from "../domain/channel-tags.js";
|
|
2
|
+
import type { Chat, Id, Page } from "../domain/models.js";
|
|
3
|
+
import type { ChatMetadata } from "./sqlite/chats.js";
|
|
4
|
+
import type { ChatCompleteness } from "./sqlite/completeness.js";
|
|
5
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
6
|
+
import type { Where } from "./sqlite/query-filter.js";
|
|
7
|
+
import type { AccountKey, ChatActivity, ChatStats, StoredChatFilter } from "./types.js";
|
|
8
|
+
export interface ChatsStore {
|
|
9
|
+
saveChats(key: AccountKey, chats: Chat[]): Promise<void>;
|
|
10
|
+
/** Newest first. `query` matches three letters or more of a title; `unread` keeps chats with unread messages. */
|
|
11
|
+
chats(key: AccountKey, window: {
|
|
12
|
+
limit?: number;
|
|
13
|
+
offset?: number;
|
|
14
|
+
} & StoredChatFilter): Promise<Page<Chat>>;
|
|
15
|
+
countChats(key: AccountKey, filter?: StoredChatFilter): Promise<number>;
|
|
16
|
+
/** The chats a person is in, newest first — as far as the saved member lists go. */
|
|
17
|
+
chatsWith(key: AccountKey, memberId: Id): Promise<Chat[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Given every chat the account is in, marks the rest `left` and says how many it marked. Only
|
|
20
|
+
* ever from a complete list: a page or a cut list says nothing about the chats it leaves out.
|
|
21
|
+
* Remembers when, so a search can say the store knows the account's whole chat list.
|
|
22
|
+
*/
|
|
23
|
+
markChatsLeft(key: AccountKey, present: Id[]): Promise<number>;
|
|
24
|
+
/** The chats marked left and the messages they hold; with `clear`, deletes them and all under them. */
|
|
25
|
+
leftChats(key: AccountKey, options?: {
|
|
26
|
+
clear?: boolean;
|
|
27
|
+
}): Promise<{
|
|
28
|
+
chats: number;
|
|
29
|
+
messages: number;
|
|
30
|
+
}>;
|
|
31
|
+
/** Per chat: whether its history is held up to date, without gaps, back to its start. */
|
|
32
|
+
chatCompleteness(key: AccountKey, chatIds: Id[]): Promise<ChatCompleteness[]>;
|
|
33
|
+
/** Per chat that has messages: how many, the oldest and newest, and when the last one was stored. */
|
|
34
|
+
chatStats(key: AccountKey, chatId?: Id): Promise<ChatStats[]>;
|
|
35
|
+
/** Per chat that spoke since `since` (ms): its newest message and who sent it when stored, never the text. */
|
|
36
|
+
/** `where` is a `tasks agenda` query compiled over `AGENDA_COLUMNS`. */
|
|
37
|
+
chatActivity(key: AccountKey, since: number, where?: Where): Promise<{
|
|
38
|
+
chats: ChatActivity[];
|
|
39
|
+
storedAt: string | null;
|
|
40
|
+
}>;
|
|
41
|
+
chatMetadata(key: AccountKey, chatId: Id): Promise<ChatMetadata | undefined>;
|
|
42
|
+
saveChatMetadata(key: AccountKey, entry: Omit<ChatMetadata, "fetchedAt">): Promise<ChatMetadata>;
|
|
43
|
+
replaceAutoTags(key: AccountKey, chatId: Id, algorithm: string, tags: ChannelTagMatch[]): Promise<void>;
|
|
44
|
+
rankingDiscussionChats(account: AccountKey, chatId: string): Promise<string[]>;
|
|
45
|
+
}
|
|
46
|
+
export declare const chatsStoreOver: (context: StoreContext) => ChatsStore;
|
|
47
|
+
//# sourceMappingURL=chats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/store/chats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { keysOver } from "./keys.js";
|
|
3
|
+
import * as chatQueries from "./sqlite/chats.js";
|
|
4
|
+
import * as completeness from "./sqlite/completeness.js";
|
|
5
|
+
import * as reads from "./sqlite/reads.js";
|
|
6
|
+
import { write } from "./sqlite/transaction.js";
|
|
7
|
+
export const chatsStoreOver = (context) => {
|
|
8
|
+
const { database } = context;
|
|
9
|
+
const { accountPk, findAccountPk, writeState } = keysOver(context);
|
|
10
|
+
return {
|
|
11
|
+
saveChats: async (key, list) => write(database, () => {
|
|
12
|
+
const accountKey = accountPk(key);
|
|
13
|
+
for (const chat of list)
|
|
14
|
+
chatQueries.upsertChat(context, accountKey, chat);
|
|
15
|
+
}),
|
|
16
|
+
chats: async (key, window) => {
|
|
17
|
+
const accountKey = findAccountPk(key);
|
|
18
|
+
return accountKey === undefined
|
|
19
|
+
? { items: [], hasMore: false }
|
|
20
|
+
: chatQueries.listChats(context, accountKey, window);
|
|
21
|
+
},
|
|
22
|
+
countChats: async (key, filter = {}) => {
|
|
23
|
+
const accountKey = findAccountPk(key);
|
|
24
|
+
return accountKey === undefined ? 0 : chatQueries.countChats(context, accountKey, filter);
|
|
25
|
+
},
|
|
26
|
+
chatsWith: async (key, memberId) => {
|
|
27
|
+
const accountKey = findAccountPk(key);
|
|
28
|
+
return accountKey === undefined ? [] : chatQueries.chatsWith(context, accountKey, key, memberId);
|
|
29
|
+
},
|
|
30
|
+
markChatsLeft: async (key, present) => {
|
|
31
|
+
const accountKey = findAccountPk(key);
|
|
32
|
+
if (accountKey === undefined)
|
|
33
|
+
return 0;
|
|
34
|
+
let marked = 0;
|
|
35
|
+
write(database, () => {
|
|
36
|
+
marked = chatQueries.markLeft(context, accountKey, present);
|
|
37
|
+
writeState(accountKey, completeness.CHAT_LIST_KEY, String(present.length));
|
|
38
|
+
});
|
|
39
|
+
return marked;
|
|
40
|
+
},
|
|
41
|
+
leftChats: async (key, { clear = false } = {}) => {
|
|
42
|
+
const accountKey = findAccountPk(key);
|
|
43
|
+
if (accountKey === undefined)
|
|
44
|
+
return { chats: 0, messages: 0 };
|
|
45
|
+
let found = { pks: [], messages: 0 };
|
|
46
|
+
write(database, () => {
|
|
47
|
+
found = chatQueries.leftChats(context, accountKey);
|
|
48
|
+
if (clear)
|
|
49
|
+
chatQueries.purgeChats(context, found.pks);
|
|
50
|
+
});
|
|
51
|
+
return { chats: found.pks.length, messages: found.messages };
|
|
52
|
+
},
|
|
53
|
+
chatCompleteness: async (key, chatIds) => {
|
|
54
|
+
const accountKey = findAccountPk(key);
|
|
55
|
+
return accountKey === undefined ? [] : completeness.chatCompleteness(context, accountKey, chatIds);
|
|
56
|
+
},
|
|
57
|
+
chatStats: async (key, chatId) => {
|
|
58
|
+
const accountKey = findAccountPk(key);
|
|
59
|
+
return accountKey === undefined ? [] : reads.chatStats(context, accountKey, chatId);
|
|
60
|
+
},
|
|
61
|
+
chatActivity: async (key, since, where) => {
|
|
62
|
+
const accountKey = findAccountPk(key);
|
|
63
|
+
return accountKey === undefined
|
|
64
|
+
? { chats: [], storedAt: null }
|
|
65
|
+
: reads.chatActivity(context, accountKey, since, where);
|
|
66
|
+
},
|
|
67
|
+
chatMetadata: async (key, chatId) => chatQueries.metadata(context, key, chatId),
|
|
68
|
+
saveChatMetadata: async (key, entry) => chatQueries.saveMetadata(context, key, entry),
|
|
69
|
+
replaceAutoTags: async (key, chatId, algorithm, matches) => write(database, () => chatQueries.replaceAutoTags(context, key, chatId, algorithm, matches)),
|
|
70
|
+
rankingDiscussionChats: async (account, chatId) => {
|
|
71
|
+
const rows = database
|
|
72
|
+
.prepare("SELECT DISTINCT json_extract(CASE WHEN json_valid(m.metadata) THEN m.metadata ELSE '{}' END,'$.graph.discussionChatId') AS id FROM messages m JOIN chats c ON c.id=m.chat_id JOIN accounts ac ON ac.id=m.account_id WHERE ac.provider=? AND ac.external_id=? AND c.external_id=? AND c.kind='channel' AND m.deleted_at IS NULL AND json_extract(CASE WHEN json_valid(m.metadata) THEN m.metadata ELSE '{}' END,'$.graph.version')=1 AND json_type(CASE WHEN json_valid(m.metadata) THEN m.metadata ELSE '{}' END,'$.graph.discussionChatId')='text' LIMIT 101")
|
|
73
|
+
.all(account.provider, account.account, chatId);
|
|
74
|
+
if (rows.length > 100)
|
|
75
|
+
throw new CliError("validation_error", "too many linked discussion groups — narrow the channel scope");
|
|
76
|
+
return rows.map(({ id }) => String(id));
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=chats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/store/chats.ts"],"names":[],"mappings":"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"}
|