@wirecat/cli-core 0.306.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/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/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/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/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-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-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
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { LinkInput } from "../conversations/link.js";
|
|
2
|
+
import type { Id, Message, Page } from "../domain/models.js";
|
|
3
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
4
|
+
import type { Where } from "./sqlite/query-filter.js";
|
|
5
|
+
import type { AccountKey, AgentAnswer, ConversationBuild, ConversationSummary, LinkBatch, StoredLink } from "./types.js";
|
|
6
|
+
export interface ConversationsStore {
|
|
7
|
+
/** A chat's live messages for the conversation rules, oldest first; pass `next` back as `after`. */
|
|
8
|
+
linkInputs(key: AccountKey, chatId: Id, page: {
|
|
9
|
+
after?: string;
|
|
10
|
+
limit: number;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
items: LinkInput[];
|
|
13
|
+
next: string | null;
|
|
14
|
+
}>;
|
|
15
|
+
/** Who wrote in the chat, by lowercased username: what an `@mention` names. */
|
|
16
|
+
senderHandles(key: AccountKey, chatId: Id): Promise<Map<string, Id>>;
|
|
17
|
+
/**
|
|
18
|
+
* The chat's provider and rule links and its conversations, rebuilt: written as a new build in short
|
|
19
|
+
* transactions and made current in one, so readers never see half of it and a failed build changes nothing.
|
|
20
|
+
*/
|
|
21
|
+
replaceConversations(key: AccountKey, chatId: Id, build: ConversationBuild): Promise<void>;
|
|
22
|
+
/** Newest first; `where` is a list query compiled over `CONVERSATION_COLUMNS`. */
|
|
23
|
+
conversations(key: AccountKey, chatId: Id, window: {
|
|
24
|
+
limit: number;
|
|
25
|
+
offset?: number;
|
|
26
|
+
where?: Where;
|
|
27
|
+
}): Promise<Page<ConversationSummary>>;
|
|
28
|
+
/** Its messages oldest first; `undefined` when the account has no such conversation. */
|
|
29
|
+
conversation(key: AccountKey, id: string): Promise<{
|
|
30
|
+
summary: ConversationSummary;
|
|
31
|
+
messages: Message[];
|
|
32
|
+
} | undefined>;
|
|
33
|
+
/** Which conversation a message is in, once the chat is built. */
|
|
34
|
+
conversationOf(key: AccountKey, chatId: Id, messageId: Id): Promise<string | undefined>;
|
|
35
|
+
/** The conversation of the current build each message is in, in the same order; `undefined` where none. */
|
|
36
|
+
conversationsOfMessages(key: AccountKey, refs: {
|
|
37
|
+
chatId: Id;
|
|
38
|
+
messageId: Id;
|
|
39
|
+
}[]): Promise<(ConversationSummary | undefined)[]>;
|
|
40
|
+
/** Every link a message has, the messenger's first. */
|
|
41
|
+
links(key: AccountKey, chatId: Id, messageId: Id, options?: {
|
|
42
|
+
limit: number;
|
|
43
|
+
}): Promise<StoredLink[]>;
|
|
44
|
+
replies(key: AccountKey, chatId: Id, messageId: Id, limit: number): Promise<Page<{
|
|
45
|
+
messageId: Id;
|
|
46
|
+
}>>;
|
|
47
|
+
/** The user's agent's current answer per message: its parent, or `null` for "starts a conversation". */
|
|
48
|
+
agentAnswers(key: AccountKey, chatId: Id): Promise<Map<Id, Id | null>>;
|
|
49
|
+
/** Stores the agent's answer to a batch, checked whole first; answers how many were stored (A5). */
|
|
50
|
+
saveAnswers(key: AccountKey, batch: string, answer: AgentAnswer): Promise<{
|
|
51
|
+
chat: Id;
|
|
52
|
+
stored: number;
|
|
53
|
+
}>;
|
|
54
|
+
/** Drops the agent's answers for a chat, or one model's; answers how many. Messages are never touched. */
|
|
55
|
+
clearAnswers(key: AccountKey, chatId: Id, model?: string): Promise<number>;
|
|
56
|
+
/** How many messages still need the user's agent, and their characters (phase 4). */
|
|
57
|
+
batchStatus(key: AccountKey, chatId: Id): Promise<{
|
|
58
|
+
messages: number;
|
|
59
|
+
characters: number;
|
|
60
|
+
}>;
|
|
61
|
+
/** The earliest window holding a message the agent has not answered; `undefined` when none is left. */
|
|
62
|
+
nextBatch(key: AccountKey, chatId: Id, options: {
|
|
63
|
+
size: number;
|
|
64
|
+
}): Promise<LinkBatch | undefined>;
|
|
65
|
+
/** Whether the chat's conversations were built, and when; `undefined` when never. */
|
|
66
|
+
conversationState(key: AccountKey, chatId: Id): Promise<{
|
|
67
|
+
enabledAt: string;
|
|
68
|
+
builtAt: string | null;
|
|
69
|
+
algorithmVersion: number | null;
|
|
70
|
+
} | undefined>;
|
|
71
|
+
}
|
|
72
|
+
export declare const conversationsStoreOver: (context: StoreContext) => ConversationsStore;
|
|
73
|
+
//# sourceMappingURL=conversations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversations.d.ts","sourceRoot":"","sources":["../../src/store/conversations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { keysOver } from "./keys.js";
|
|
3
|
+
import * as batches from "./sqlite/batches.js";
|
|
4
|
+
import * as chatQueries from "./sqlite/chats.js";
|
|
5
|
+
import * as conversationQueries from "./sqlite/conversations.js";
|
|
6
|
+
import { write } from "./sqlite/transaction.js";
|
|
7
|
+
export const conversationsStoreOver = (context) => {
|
|
8
|
+
const { database } = context;
|
|
9
|
+
const { findAccountPk, findChatPk, chatKeyOf } = keysOver(context);
|
|
10
|
+
return {
|
|
11
|
+
linkInputs: async (key, chatId, page) => {
|
|
12
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
13
|
+
return chatKey === undefined ? { items: [], next: null } : conversationQueries.linkInputs(context, chatKey, page);
|
|
14
|
+
},
|
|
15
|
+
senderHandles: async (key, chatId) => {
|
|
16
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
17
|
+
return chatKey === undefined ? new Map() : conversationQueries.senderHandles(context, chatKey);
|
|
18
|
+
},
|
|
19
|
+
replaceConversations: async (key, chatId, build) => {
|
|
20
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
21
|
+
if (chatKey === undefined)
|
|
22
|
+
throw new CliError("not_found", `chat ${chatId} is not in the local copy`);
|
|
23
|
+
await conversationQueries.replaceConversations(context, chatKey, build);
|
|
24
|
+
},
|
|
25
|
+
conversations: async (key, chatId, window) => {
|
|
26
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
27
|
+
return chatKey === undefined
|
|
28
|
+
? { items: [], hasMore: false }
|
|
29
|
+
: conversationQueries.conversationPage(context, chatKey, window);
|
|
30
|
+
},
|
|
31
|
+
conversation: async (key, id) => {
|
|
32
|
+
const accountKey = findAccountPk(key);
|
|
33
|
+
const pk = Number(id);
|
|
34
|
+
return accountKey === undefined || !Number.isSafeInteger(pk)
|
|
35
|
+
? undefined
|
|
36
|
+
: conversationQueries.conversation(context, accountKey, pk);
|
|
37
|
+
},
|
|
38
|
+
conversationOf: async (key, chatId, messageId) => {
|
|
39
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
40
|
+
return chatKey === undefined ? undefined : conversationQueries.conversationOf(context, chatKey, messageId);
|
|
41
|
+
},
|
|
42
|
+
conversationsOfMessages: async (key, refs) => {
|
|
43
|
+
const accountPk = findAccountPk(key);
|
|
44
|
+
if (accountPk === undefined)
|
|
45
|
+
return refs.map(() => undefined);
|
|
46
|
+
const pks = refs.map(({ chatId, messageId }) => {
|
|
47
|
+
const chatKey = findChatPk(accountPk, chatId);
|
|
48
|
+
const id = chatKey === undefined ? undefined : conversationQueries.conversationOf(context, chatKey, messageId);
|
|
49
|
+
return id === undefined ? undefined : Number(id);
|
|
50
|
+
});
|
|
51
|
+
const found = conversationQueries.summariesOf(context, accountPk, pks.filter((pk) => pk !== undefined));
|
|
52
|
+
return pks.map((pk) => (pk === undefined ? undefined : found.get(pk)));
|
|
53
|
+
},
|
|
54
|
+
links: async (key, chatId, messageId, options) => {
|
|
55
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
56
|
+
return chatKey === undefined ? [] : conversationQueries.linksOf(context, chatKey, messageId, options?.limit);
|
|
57
|
+
},
|
|
58
|
+
replies: async (key, chatId, messageId, limit) => {
|
|
59
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
60
|
+
return chatKey === undefined
|
|
61
|
+
? { items: [], hasMore: false }
|
|
62
|
+
: conversationQueries.repliesTo(context, chatKey, messageId, limit);
|
|
63
|
+
},
|
|
64
|
+
agentAnswers: async (key, chatId) => {
|
|
65
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
66
|
+
return chatKey === undefined ? new Map() : conversationQueries.agentAnswers(context, chatKey);
|
|
67
|
+
},
|
|
68
|
+
saveAnswers: async (key, batch, answer) => {
|
|
69
|
+
const chatKey = batches.chatOfBatch(batch);
|
|
70
|
+
const accountKey = findAccountPk(key);
|
|
71
|
+
const chat = chatKey === undefined || accountKey === undefined ? undefined : chatQueries.chatOf(context, accountKey, chatKey);
|
|
72
|
+
if (chatKey === undefined || chat === undefined) {
|
|
73
|
+
throw new CliError("validation_error", `the answer was not stored: ${batch} is not a batch of this account`);
|
|
74
|
+
}
|
|
75
|
+
let stored = 0;
|
|
76
|
+
write(database, () => {
|
|
77
|
+
stored = batches.saveAnswers(context, batch, answer);
|
|
78
|
+
});
|
|
79
|
+
return { chat, stored };
|
|
80
|
+
},
|
|
81
|
+
clearAnswers: async (key, chatId, model) => {
|
|
82
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
83
|
+
if (chatKey === undefined)
|
|
84
|
+
return 0;
|
|
85
|
+
let cleared = 0;
|
|
86
|
+
write(database, () => {
|
|
87
|
+
cleared = batches.clearAnswers(context, chatKey, model);
|
|
88
|
+
});
|
|
89
|
+
return cleared;
|
|
90
|
+
},
|
|
91
|
+
batchStatus: async (key, chatId) => {
|
|
92
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
93
|
+
return chatKey === undefined ? { messages: 0, characters: 0 } : batches.batchStatus(context, chatKey);
|
|
94
|
+
},
|
|
95
|
+
nextBatch: async (key, chatId, { size }) => {
|
|
96
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
97
|
+
if (chatKey === undefined)
|
|
98
|
+
return undefined;
|
|
99
|
+
const found = batches.nextBatch(context, chatKey, chatId, size);
|
|
100
|
+
if (!found)
|
|
101
|
+
return undefined;
|
|
102
|
+
const answered = found.messages.filter(({ answer }) => answer);
|
|
103
|
+
const left = batches.batchStatus(context, chatKey);
|
|
104
|
+
return {
|
|
105
|
+
...found,
|
|
106
|
+
remaining: {
|
|
107
|
+
messages: left.messages - answered.length,
|
|
108
|
+
characters: left.characters - answered.reduce((sum, { text }) => sum + [...text].length, 0),
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
conversationState: async (key, chatId) => {
|
|
113
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
114
|
+
return chatKey === undefined ? undefined : conversationQueries.stateOf(context, chatKey);
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=conversations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/store/conversations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CounterObservations, CounterState } from "../domain/counters.js";
|
|
2
|
+
import type { Id } from "../domain/models.js";
|
|
3
|
+
import type { QueryExecution } from "../search/lucene/resolved.js";
|
|
4
|
+
import { type CounterTarget } from "./sqlite/counters.js";
|
|
5
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
6
|
+
import type { AccountKey } from "./types.js";
|
|
7
|
+
export interface AccountCounters {
|
|
8
|
+
counterStates(key: AccountKey, chatId: Id, messageId: Id, options: {
|
|
9
|
+
now: number;
|
|
10
|
+
maxAge: number;
|
|
11
|
+
}): Promise<CounterState[]>;
|
|
12
|
+
updateCounterObservations(key: AccountKey, chatId: Id, messageId: Id, observations: CounterObservations): Promise<number>;
|
|
13
|
+
}
|
|
14
|
+
export interface CountersStore extends AccountCounters {
|
|
15
|
+
counterTargets(execution: QueryExecution, options: {
|
|
16
|
+
now: number;
|
|
17
|
+
maxAge: number;
|
|
18
|
+
}): Promise<{
|
|
19
|
+
items: CounterTarget[];
|
|
20
|
+
hasMore: boolean;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
export declare const accountCountersOver: (context: StoreContext) => AccountCounters;
|
|
24
|
+
export declare const countersStoreOver: (context: StoreContext, keyed: AccountCounters) => CountersStore;
|
|
25
|
+
//# sourceMappingURL=counters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"counters.d.ts","sourceRoot":"","sources":["../../src/store/counters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,EAA4B,KAAK,aAAa,EAAiC,MAAM,sBAAsB,CAAA;AAClH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,eAAe;IAC9B,aAAa,CACX,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,EAAE,EACV,SAAS,EAAE,EAAE,EACb,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACvC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC1B,yBAAyB,CACvB,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,EAAE,EACV,SAAS,EAAE,EAAE,EACb,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,MAAM,CAAC,CAAA;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,cAAc,CACZ,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACvC,OAAO,CAAC;QAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CACzD;AAKD,eAAO,MAAM,mBAAmB,YAAa,YAAY,KAAG,eAgB3D,CAAA;AAED,eAAO,MAAM,iBAAiB,YAAa,YAAY,SAAS,eAAe,KAAG,aAGhF,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { applyCounterObservations, counterStates, counterTargets } from "./sqlite/counters.js";
|
|
2
|
+
import { write } from "./sqlite/transaction.js";
|
|
3
|
+
const LIVE_MESSAGE = "SELECT m.id AS pk 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 m.external_id=? AND m.deleted_at IS NULL";
|
|
4
|
+
export const accountCountersOver = (context) => {
|
|
5
|
+
const { database } = context;
|
|
6
|
+
return {
|
|
7
|
+
counterStates: async (key, chatId, messageId, options) => {
|
|
8
|
+
const row = database.prepare(LIVE_MESSAGE).get(key.provider, key.account, chatId, messageId);
|
|
9
|
+
return row ? counterStates(context, Number(row.pk), options.now, options.maxAge) : [];
|
|
10
|
+
},
|
|
11
|
+
updateCounterObservations: async (key, chatId, messageId, observations) => {
|
|
12
|
+
let updated = 0;
|
|
13
|
+
write(database, () => {
|
|
14
|
+
const row = database.prepare(LIVE_MESSAGE).get(key.provider, key.account, chatId, messageId);
|
|
15
|
+
if (row)
|
|
16
|
+
updated = applyCounterObservations(context, Number(row.pk), observations);
|
|
17
|
+
});
|
|
18
|
+
return updated;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export const countersStoreOver = (context, keyed) => ({
|
|
23
|
+
...keyed,
|
|
24
|
+
counterTargets: async (execution, options) => counterTargets(context, execution, options),
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=counters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"counters.js","sourceRoot":"","sources":["../../src/store/counters.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAsB,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAElH,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAyB/C,MAAM,YAAY,GAChB,mNAAmN,CAAA;AAErN,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAqB,EAAmB,EAAE;IAC5E,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,OAAO;QACL,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;YACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;YAC5F,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACvF,CAAC;QACD,yBAAyB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE;YACxE,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACnB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;gBAC5F,IAAI,GAAG;oBAAE,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAA;YACpF,CAAC,CAAC,CAAA;YACF,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAE,KAAsB,EAAiB,EAAE,CAAC,CAAC;IAClG,GAAG,KAAK;IACR,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;CAC1F,CAAC,CAAA"}
|
package/dist/store/index.d.ts
CHANGED
|
@@ -43,5 +43,5 @@ export type { StoreTaskStore } from "./sqlite/tasks.js";
|
|
|
43
43
|
export type { TagPreflight, VocabularyAlias, VocabularyAliasReceipt, VocabularyAudit, VocabularyAuditOptions, VocabularyCatalog, VocabularyEntry, VocabularyKind, VocabularyOptions, VocabularyResolution, VocabularyStore, VocabularyTarget, } from "./sqlite/vocabulary.js";
|
|
44
44
|
export type { NewWorkTask, TaskAssignment, TaskDetails, TaskEvent, TaskFields, TaskRole, TaskType, WorkTaskType, } from "./sqlite/work-tasks.js";
|
|
45
45
|
export { TASK_EVENT_KINDS, TASK_ROLES } from "./sqlite/work-tasks.js";
|
|
46
|
-
export { type AccountKey, type AccountMessageFilter, type AttachmentTextEntry, type AttachmentView, type ChatStats, type DeletionScope, type Delta, type FileAttachment, type IdentityRef, type IngestedVia, type LinkedIdentity, type LinkOptions, type MessageFilter, type MessageStore, openStore, type PersonFacts, type PersonRecord, type Range, type RankedEvidence, type RankedStoreFound, type RankedStoreRow, type RankingEvidenceItem, type RankingEvidenceRequest, type RankingRequest, type SearchCommand, type SearchRecord, type StoredAccount, type StoredChatFilter, type StoredHit, type StoredSearch, type StoredTag, type StoreOptions, type TagFilter, type TagTarget, type TaskTagTarget, type TextOrigin, } from "./store.js";
|
|
46
|
+
export { type AccountAccounts, type AccountAttachments, type AccountCounters, type AccountKey, type AccountMentions, type AccountMessageFilter, type AccountMessages, type AccountPeople, type AccountsStore, type AccountVectors, type AttachmentsStore, type AttachmentTextEntry, type AttachmentView, type ChatStats, type ChatsStore, type ConversationsStore, type CountersStore, type DeletionScope, type Delta, type FileAttachment, type IdentityRef, type IngestedVia, type LinkedIdentity, type LinkOptions, type MentionsStore, type MessageFilter, type MessageStore, type MessagesStore, openStore, type PeopleStore, type PersonFacts, type PersonRecord, type QueriesStore, type Range, type RankedEvidence, type RankedStoreFound, type RankedStoreRow, type RankingEvidenceItem, type RankingEvidenceRequest, type RankingRequest, type RosterStore, type SearchCommand, type SearchesStore, type SearchIndexStore, type SearchRecord, type StoredAccount, type StoredChatFilter, type StoredHit, type StoredSearch, type StoredTag, type StoreOptions, type SyncStore, type TagFilter, type TagsStore, type TagTarget, type TaskTagTarget, type TextOrigin, type VectorsStore, } from "./store.js";
|
|
47
47
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"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"}
|
package/dist/store/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,aAAa,EACb,eAAe,EACf,UAAU,EACV,eAAe,GAChB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAkB,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAG/E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAsBnD,OAAO,EAAE,uBAAuB,EAA0B,MAAM,gCAAgC,CAAA;AAYhG,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAiBjF,OAAO,EAEL,WAAW,GAKZ,MAAM,yBAAyB,CAAA;AAYhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EACL,eAAe,EACf,gBAAgB,EAGhB,gBAAgB,GACjB,MAAM,0BAA0B,CAAA;AAIjC,OAAO,EAAiD,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AA0BhE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,aAAa,EACb,eAAe,EACf,UAAU,EACV,eAAe,GAChB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAkB,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAG/E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAsBnD,OAAO,EAAE,uBAAuB,EAA0B,MAAM,gCAAgC,CAAA;AAYhG,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAiBjF,OAAO,EAEL,WAAW,GAKZ,MAAM,yBAAyB,CAAA;AAYhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EACL,eAAe,EACf,gBAAgB,EAGhB,gBAAgB,GACjB,MAAM,0BAA0B,CAAA;AAIjC,OAAO,EAAiD,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AA0BhE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EA6BL,SAAS,GA8BV,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Id, Message, Provider } from "../domain/models.js";
|
|
2
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
3
|
+
import type { AccountKey, PersonFacts } from "./types.js";
|
|
4
|
+
/** The row ids behind an account and a chat, and the writes several areas share. */
|
|
5
|
+
export declare const keysOver: (context: StoreContext) => {
|
|
6
|
+
accountPk: (key: AccountKey, name?: string | null) => number;
|
|
7
|
+
findAccountPk: (key: AccountKey) => number | undefined;
|
|
8
|
+
findChatPk: (accountKey: number, chatId: Id) => number | undefined;
|
|
9
|
+
chatKeyOf: (key: AccountKey, chatId: Id) => number | undefined;
|
|
10
|
+
chatPkFor: (accountKey: number, chatId: Id) => number;
|
|
11
|
+
identityPk: (accountKey: number, provider: Provider, nativeId: Id, name: string | null, facts?: Omit<PersonFacts, "id" | "name">) => number;
|
|
12
|
+
upsertMessage: (key: AccountKey, accountKey: number, chatKey: number, message: Message, via: string, seenAt?: number) => void;
|
|
13
|
+
writeMembers: (key: AccountKey, accountKey: number, chatId: Id, memberIds: Id[]) => void;
|
|
14
|
+
writeState: (accountKey: number, name: string, value: string) => void;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/store/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAKhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEzD,oFAAoF;AACpF,eAAO,MAAM,QAAQ,YAAa,YAAY;qBAIzB,UAAU,SAAQ,MAAM,GAAG,IAAI;yBAHtB,UAAU;6BACN,MAAM,UAAU,EAAE;qBAK/B,UAAU,UAAU,EAAE;4BAIf,MAAM,UAAU,EAAE;6BAE5B,MAAM,YACR,QAAQ,YACR,EAAE,QACN,MAAM,GAAG,IAAI,UACX,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;yBAGnC,UAAU,cACH,MAAM,WACT,MAAM,WACN,OAAO,OACX,MAAM,WACF,MAAM;wBAEG,UAAU,cAAc,MAAM,UAAU,EAAE,aAAa,EAAE,EAAE;6BAEtD,MAAM,QAAQ,MAAM,SAAS,MAAM;CAE/D,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as accounts from "./sqlite/accounts.js";
|
|
2
|
+
import * as chatQueries from "./sqlite/chats.js";
|
|
3
|
+
import * as identities from "./sqlite/identities.js";
|
|
4
|
+
import * as messageWrites from "./sqlite/messages.js";
|
|
5
|
+
import * as sync from "./sqlite/sync.js";
|
|
6
|
+
/** The row ids behind an account and a chat, and the writes several areas share. */
|
|
7
|
+
export const keysOver = (context) => {
|
|
8
|
+
const findAccountPk = (key) => accounts.findAccountPk(context, key);
|
|
9
|
+
const findChatPk = (accountKey, chatId) => chatQueries.findChatPk(context, accountKey, chatId);
|
|
10
|
+
return {
|
|
11
|
+
accountPk: (key, name = null) => accounts.accountPk(context, key, name),
|
|
12
|
+
findAccountPk,
|
|
13
|
+
findChatPk,
|
|
14
|
+
chatKeyOf: (key, chatId) => {
|
|
15
|
+
const accountKey = findAccountPk(key);
|
|
16
|
+
return accountKey === undefined ? undefined : findChatPk(accountKey, chatId);
|
|
17
|
+
},
|
|
18
|
+
chatPkFor: (accountKey, chatId) => chatQueries.chatPkFor(context, accountKey, chatId),
|
|
19
|
+
identityPk: (accountKey, provider, nativeId, name, facts) => identities.identityPk(context, accountKey, provider, nativeId, name, facts),
|
|
20
|
+
upsertMessage: (key, accountKey, chatKey, message, via, seenAt) => messageWrites.upsertMessage(context, key, accountKey, chatKey, message, via, seenAt),
|
|
21
|
+
writeMembers: (key, accountKey, chatId, memberIds) => chatQueries.writeMembers(context, key, accountKey, chatId, memberIds),
|
|
22
|
+
writeState: (accountKey, name, value) => sync.writeState(context, accountKey, name, value),
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/store/keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAErD,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAA;AAGxC,oFAAoF;AACpF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAqB,EAAE,EAAE;IAChD,MAAM,aAAa,GAAG,CAAC,GAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC/E,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAE,MAAU,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAC1G,OAAO;QACL,SAAS,EAAE,CAAC,GAAe,EAAE,IAAI,GAAkB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;QAClG,aAAa;QACb,UAAU;QACV,SAAS,EAAE,CAAC,GAAe,EAAE,MAAU,EAAE,EAAE;YACzC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC9E,CAAC;QACD,SAAS,EAAE,CAAC,UAAkB,EAAE,MAAU,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC;QACjG,UAAU,EAAE,CACV,UAAkB,EAClB,QAAkB,EAClB,QAAY,EACZ,IAAmB,EACnB,KAAwC,EACxC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;QAChF,aAAa,EAAE,CACb,GAAe,EACf,UAAkB,EAClB,OAAe,EACf,OAAgB,EAChB,GAAW,EACX,MAAe,EACf,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC;QACzF,YAAY,EAAE,CAAC,GAAe,EAAE,UAAkB,EAAE,MAAU,EAAE,SAAe,EAAE,EAAE,CACjF,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC;QACvE,UAAU,EAAE,CAAC,UAAkB,EAAE,IAAY,EAAE,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC;KACnH,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { QueryAst } from "@wirecat/cli-base/query";
|
|
2
|
+
import type { Decider, MentionKind } from "../domain/mentions.js";
|
|
3
|
+
import { type MentionDecision, type MentionsRebuild, type MentionsState, type StoredMention } from "./sqlite/mentions.js";
|
|
4
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
5
|
+
import type { AccountKey } from "./types.js";
|
|
6
|
+
export interface AccountMentions {
|
|
7
|
+
/** The account's phones, e-mail addresses, links and documents that match the query, newest message first. */
|
|
8
|
+
mentions(key: AccountKey, query: QueryAst | undefined, window: {
|
|
9
|
+
limit?: number;
|
|
10
|
+
offset: number;
|
|
11
|
+
foundAfter?: number;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
items: StoredMention[];
|
|
14
|
+
hasMore: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
/** One mention of the account, with the text around it; `undefined` for another account's or a missing id. */
|
|
17
|
+
mention(key: AccountKey, id: number): Promise<(StoredMention & {
|
|
18
|
+
before: string;
|
|
19
|
+
after: string;
|
|
20
|
+
sameValue: number;
|
|
21
|
+
candidates: string[];
|
|
22
|
+
}) | undefined>;
|
|
23
|
+
/**
|
|
24
|
+
* Says what a mention's value is, everywhere it is written: a phone or an address belongs to its owner
|
|
25
|
+
* (`person:<uid>` or `organization:<id>`), a document id names the stored document.
|
|
26
|
+
*/
|
|
27
|
+
confirmMention(key: AccountKey, id: number, owner: string | undefined, by: Decider): Promise<MentionDecision>;
|
|
28
|
+
/** Dismisses a mention's value everywhere it is written, and on later syncs. */
|
|
29
|
+
rejectMention(key: AccountKey, id: number, by: Decider): Promise<MentionDecision>;
|
|
30
|
+
}
|
|
31
|
+
export interface MentionsStore extends AccountMentions {
|
|
32
|
+
/** Finds the mentions of every stored message again, every account's; decisions stay. */
|
|
33
|
+
rebuildMentions(options?: {
|
|
34
|
+
kinds?: readonly MentionKind[];
|
|
35
|
+
onBatch?: (done: number, total: number) => void;
|
|
36
|
+
}): Promise<MentionsRebuild>;
|
|
37
|
+
mentionsState(): Promise<MentionsState>;
|
|
38
|
+
}
|
|
39
|
+
export declare const accountMentionsOver: (context: StoreContext) => AccountMentions;
|
|
40
|
+
export declare const mentionsStoreOver: (context: StoreContext, keyed: AccountMentions) => MentionsStore;
|
|
41
|
+
//# sourceMappingURL=mentions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../src/store/mentions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEjE,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAMlB,KAAK,aAAa,EAEnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,eAAe;IAC9B,8GAA8G;IAC9G,QAAQ,CACN,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,QAAQ,GAAG,SAAS,EAC3B,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9D,OAAO,CAAC;QAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACxD,8GAA8G;IAC9G,OAAO,CACL,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,CAAC,aAAa,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC,CAAA;IACpH;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC7G,gFAAgF;IAChF,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CAClF;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,yFAAyF;IACzF,eAAe,CAAC,OAAO,CAAC,EAAE;QACxB,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;QAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAChD,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC5B,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;CACxC;AAED,eAAO,MAAM,mBAAmB,YAAa,YAAY,KAAG,eA6B3D,CAAA;AAED,eAAO,MAAM,iBAAiB,YAAa,YAAY,SAAS,eAAe,KAAG,aAIhF,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { keysOver } from "./keys.js";
|
|
3
|
+
import { confirmMention, listMentions, mentionOfAccount, mentionOwner, mentionsState, rebuildMentions, rejectMention, showMention, } from "./sqlite/mentions.js";
|
|
4
|
+
import { write } from "./sqlite/transaction.js";
|
|
5
|
+
export const accountMentionsOver = (context) => {
|
|
6
|
+
const { database } = context;
|
|
7
|
+
const { findAccountPk } = keysOver(context);
|
|
8
|
+
return {
|
|
9
|
+
mentions: async (key, query, window) => {
|
|
10
|
+
const accountKey = findAccountPk(key);
|
|
11
|
+
return accountKey === undefined
|
|
12
|
+
? { items: [], hasMore: false }
|
|
13
|
+
: listMentions(database, accountKey, query, window);
|
|
14
|
+
},
|
|
15
|
+
mention: async (key, id) => {
|
|
16
|
+
const accountKey = findAccountPk(key);
|
|
17
|
+
return accountKey === undefined ? undefined : showMention(database, accountKey, id);
|
|
18
|
+
},
|
|
19
|
+
confirmMention: async (key, id, ownerRef, by) => {
|
|
20
|
+
const accountKey = findAccountPk(key);
|
|
21
|
+
if (accountKey === undefined)
|
|
22
|
+
throw new CliError("not_found", `no mention ${id} in this account`);
|
|
23
|
+
const mention = mentionOfAccount(database, accountKey, id);
|
|
24
|
+
return write(database, () => confirmMention(context, mention, mentionOwner(context, ownerRef), by));
|
|
25
|
+
},
|
|
26
|
+
rejectMention: async (key, id, by) => {
|
|
27
|
+
const accountKey = findAccountPk(key);
|
|
28
|
+
if (accountKey === undefined)
|
|
29
|
+
throw new CliError("not_found", `no mention ${id} in this account`);
|
|
30
|
+
return write(database, () => rejectMention(context, mentionOfAccount(database, accountKey, id), by));
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export const mentionsStoreOver = (context, keyed) => ({
|
|
35
|
+
...keyed,
|
|
36
|
+
rebuildMentions: async (options = {}) => rebuildMentions(context.database, { now: context.now(), ...options }),
|
|
37
|
+
mentionsState: async () => mentionsState(context.database),
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=mentions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../src/store/mentions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EACL,cAAc,EACd,YAAY,EAIZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EAEb,WAAW,GACZ,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAiC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAqB,EAAmB,EAAE;IAC5E,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC3C,OAAO;QACL,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,OAAO,UAAU,KAAK,SAAS;gBAC7B,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC/B,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QACvD,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;YACzB,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;QACrF,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,UAAU,KAAK,SAAS;gBAAE,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAA;YACjG,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;YAC1D,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACrG,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACnC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,UAAU,KAAK,SAAS;gBAAE,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAA;YACjG,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACtG,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAE,KAAsB,EAAiB,EAAE,CAAC,CAAC;IAClG,GAAG,KAAK;IACR,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;IAC9G,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC;CAC3D,CAAC,CAAA"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { CounterObservations } from "../domain/counters.js";
|
|
2
|
+
import type { Id, Message, Page, Reactions, WindowedMessage } from "../domain/models.js";
|
|
3
|
+
import { type DocumentLinkMessage } from "./sqlite/document-links.js";
|
|
4
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
5
|
+
import type { AccountKey, DeletionScope, IngestedVia, MessageFilter, SenderChatStats, StoredHit } from "./types.js";
|
|
6
|
+
export interface AccountMessages {
|
|
7
|
+
/**
|
|
8
|
+
* A scheduled message is not kept: it is not history yet.
|
|
9
|
+
*
|
|
10
|
+
* `seenAt` is when the messenger was asked: a message it still returned is not deleted, so a
|
|
11
|
+
* tombstone older than that is lifted. A tombstone set after it stays — the deletion is newer.
|
|
12
|
+
*/
|
|
13
|
+
saveMessages(key: AccountKey, chatId: Id, messages: Message[], options: {
|
|
14
|
+
via: IngestedVia;
|
|
15
|
+
seenAt?: number;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
/** Oldest to newest, like a provider's history page. */
|
|
18
|
+
/** `threadId` keeps one forum topic's; `outgoing` only the owner's (true) or only the others' (false). */
|
|
19
|
+
messages(key: AccountKey, chatId: Id, window: {
|
|
20
|
+
limit: number;
|
|
21
|
+
before?: Id;
|
|
22
|
+
since?: string;
|
|
23
|
+
threadId?: Id;
|
|
24
|
+
outgoing?: boolean;
|
|
25
|
+
}): Promise<Page<Message>>;
|
|
26
|
+
/** How many stored messages the chat has, sent at `since` or later when it is given. */
|
|
27
|
+
countMessages(key: AccountKey, chatId: Id, options?: {
|
|
28
|
+
since?: string;
|
|
29
|
+
}): Promise<number>;
|
|
30
|
+
/** Saved or edited after `at` (ISO, this machine's clock), oldest first, and the ids deleted after it. */
|
|
31
|
+
changes(key: AccountKey, chatId: Id, at: string): Promise<{
|
|
32
|
+
messages: Message[];
|
|
33
|
+
deleted: Id[];
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* By time rather than by id: `before` messages sent at `at` or earlier and `after` sent later,
|
|
37
|
+
* oldest first. `around` answers the same question for a message id.
|
|
38
|
+
*/
|
|
39
|
+
messagesWindow(key: AccountKey, chatId: Id, window: {
|
|
40
|
+
at: string;
|
|
41
|
+
before: number;
|
|
42
|
+
after: number;
|
|
43
|
+
}): Promise<Message[]>;
|
|
44
|
+
/**
|
|
45
|
+
* A stored message and its stored neighbours, oldest first, the one asked for with `anchor`. Until
|
|
46
|
+
* backfill records which stretches are complete, a neighbour here is the nearest one kept, not
|
|
47
|
+
* necessarily the next one sent.
|
|
48
|
+
*/
|
|
49
|
+
around(key: AccountKey, chatId: Id, messageId: Id, window: {
|
|
50
|
+
before: number;
|
|
51
|
+
after: number;
|
|
52
|
+
}): Promise<WindowedMessage[]>;
|
|
53
|
+
/**
|
|
54
|
+
* One message by its id. Without `chatId` it is looked up across the account, which is enough
|
|
55
|
+
* where ids are unique per account (MAX) and refused where two chats share one (Telegram).
|
|
56
|
+
*/
|
|
57
|
+
message(key: AccountKey, messageId: Id, options?: {
|
|
58
|
+
chatId?: Id;
|
|
59
|
+
}): Promise<Message | undefined>;
|
|
60
|
+
/**
|
|
61
|
+
* A tombstone, not a removal: the row stays, so a copy fetched before the deletion does not bring
|
|
62
|
+
* the message back, and reads and search stop returning it. Its text goes — from the row, the
|
|
63
|
+
* search copy, the edit history and the transcript. Only the messenger returning it again, when
|
|
64
|
+
* asked after the deletion, lifts the tombstone (`saveMessages`' `seenAt`).
|
|
65
|
+
*
|
|
66
|
+
* Without `chatId`, a message is tombstoned only when exactly one live message with its id is left
|
|
67
|
+
* in the chats `among` accepts. Without `among`, nothing is: only the messenger knows which of its
|
|
68
|
+
* chats a deletion without one may belong to (`Messenger.deletedWithoutChat`).
|
|
69
|
+
*/
|
|
70
|
+
markDeleted(key: AccountKey, messageIds: Id[], options?: {
|
|
71
|
+
chatId?: Id;
|
|
72
|
+
among?: DeletionScope;
|
|
73
|
+
}): Promise<number>;
|
|
74
|
+
/** A message's reactions as they are now; answers whether the message is held at all. */
|
|
75
|
+
saveReactions(key: AccountKey, chatId: Id, messageId: Id, reactions: Reactions, options?: {
|
|
76
|
+
observation?: CounterObservations["reactions"];
|
|
77
|
+
}): Promise<boolean>;
|
|
78
|
+
/** One person's stored messages per chat of this account, newest first. */
|
|
79
|
+
senderStats(key: AccountKey, senderId: Id): Promise<SenderChatStats[]>;
|
|
80
|
+
/** What a voice message said, when it was heard before, and by what. */
|
|
81
|
+
transcript(key: AccountKey, chatId: Id, messageId: Id): Promise<{
|
|
82
|
+
text: string;
|
|
83
|
+
source: string;
|
|
84
|
+
} | undefined>;
|
|
85
|
+
/** Keeps a finished transcript; an empty one is not kept, so the message is heard again. */
|
|
86
|
+
keepTranscript(key: AccountKey, chatId: Id, messageId: Id, text: string, source: string): Promise<void>;
|
|
87
|
+
/** The chat's messages that may hold a Google document link, newest first, with the documents linked from each. */
|
|
88
|
+
documentLinkMessages(key: AccountKey, chatId: Id): Promise<DocumentLinkMessage[]>;
|
|
89
|
+
/** Messages of the account that name this person, newest first. */
|
|
90
|
+
mentioning(key: AccountKey, person: {
|
|
91
|
+
id: Id;
|
|
92
|
+
username: string | null;
|
|
93
|
+
}, limit: number): Promise<Page<StoredHit>>;
|
|
94
|
+
}
|
|
95
|
+
export interface MessagesStore extends AccountMessages {
|
|
96
|
+
/** Newest first. At least three characters: a trigram index answers a shorter query with nothing. */
|
|
97
|
+
search(query: string, options: {
|
|
98
|
+
limit: number;
|
|
99
|
+
account?: AccountKey;
|
|
100
|
+
}): Promise<Page<StoredHit>>;
|
|
101
|
+
/**
|
|
102
|
+
* Newest first — by text, by who wrote it, or both. At least `text` or `senders`.
|
|
103
|
+
*
|
|
104
|
+
* `together` keeps only the chats where **every** sender has a message in this store — written
|
|
105
|
+
* there, as far as this copy knows, which is not the same as being a member.
|
|
106
|
+
*/
|
|
107
|
+
find(filter: MessageFilter): Promise<Page<StoredHit>>;
|
|
108
|
+
directReplies(parents: {
|
|
109
|
+
account: AccountKey;
|
|
110
|
+
chatId: Id;
|
|
111
|
+
id: Id;
|
|
112
|
+
}[], limit: number): Promise<Page<StoredHit>>;
|
|
113
|
+
}
|
|
114
|
+
export declare const accountMessagesOver: (context: StoreContext) => AccountMessages;
|
|
115
|
+
export declare const messagesStoreOver: (context: StoreContext, keyed: AccountMessages) => MessagesStore;
|
|
116
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/store/messages.ts"],"names":[],"mappings":"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"}
|