@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
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { keysOver } from "./keys.js";
|
|
2
|
+
import { applyCounterObservations } from "./sqlite/counters.js";
|
|
3
|
+
import { documentLinkMessages } from "./sqlite/document-links.js";
|
|
4
|
+
import * as messageWrites from "./sqlite/messages.js";
|
|
5
|
+
import * as personLinks from "./sqlite/person-links.js";
|
|
6
|
+
import * as reads from "./sqlite/reads.js";
|
|
7
|
+
import * as search from "./sqlite/search.js";
|
|
8
|
+
import { write } from "./sqlite/transaction.js";
|
|
9
|
+
import * as transcripts from "./sqlite/transcripts.js";
|
|
10
|
+
export const accountMessagesOver = (context) => {
|
|
11
|
+
const { database } = context;
|
|
12
|
+
const { accountPk, findAccountPk, findChatPk, chatKeyOf, chatPkFor, upsertMessage } = keysOver(context);
|
|
13
|
+
return {
|
|
14
|
+
saveMessages: async (key, chatId, messages, { via, seenAt }) => write(database, () => {
|
|
15
|
+
const accountKey = accountPk(key);
|
|
16
|
+
const chatKey = chatPkFor(accountKey, chatId);
|
|
17
|
+
for (const message of messages) {
|
|
18
|
+
if (message.scheduledFor === undefined)
|
|
19
|
+
upsertMessage(key, accountKey, chatKey, message, via, seenAt);
|
|
20
|
+
}
|
|
21
|
+
}),
|
|
22
|
+
messages: async (key, chatId, window) => {
|
|
23
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
24
|
+
return chatKey === undefined ? { items: [], hasMore: false } : reads.messagePage(context, chatKey, window);
|
|
25
|
+
},
|
|
26
|
+
countMessages: async (key, chatId, { since } = {}) => {
|
|
27
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
28
|
+
return chatKey === undefined ? 0 : reads.countMessages(context, chatKey, since);
|
|
29
|
+
},
|
|
30
|
+
changes: async (key, chatId, at) => {
|
|
31
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
32
|
+
return chatKey === undefined
|
|
33
|
+
? { messages: [], deleted: [] }
|
|
34
|
+
: reads.changesSince(context, chatKey, Date.parse(at));
|
|
35
|
+
},
|
|
36
|
+
messagesWindow: async (key, chatId, window) => {
|
|
37
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
38
|
+
return chatKey === undefined ? [] : reads.messagesWindow(context, chatKey, window);
|
|
39
|
+
},
|
|
40
|
+
around: async (key, chatId, messageId, window) => reads.around(context, chatKeyOf(key, chatId), messageId, window),
|
|
41
|
+
message: async (key, messageId, { chatId } = {}) => {
|
|
42
|
+
const accountKey = findAccountPk(key);
|
|
43
|
+
return accountKey === undefined ? undefined : reads.message(context, accountKey, messageId, chatId);
|
|
44
|
+
},
|
|
45
|
+
markDeleted: async (key, messageIds, { chatId, among } = {}) => {
|
|
46
|
+
const accountKey = findAccountPk(key);
|
|
47
|
+
if (accountKey === undefined || messageIds.length === 0)
|
|
48
|
+
return 0;
|
|
49
|
+
let changed = 0;
|
|
50
|
+
write(database, () => {
|
|
51
|
+
changed = messageWrites.markDeleted(context, accountKey, messageIds, chatId, among);
|
|
52
|
+
});
|
|
53
|
+
return changed;
|
|
54
|
+
},
|
|
55
|
+
saveReactions: async (key, chatId, messageId, reactions, options = {}) => {
|
|
56
|
+
const accountKey = findAccountPk(key);
|
|
57
|
+
const chatKey = accountKey === undefined ? undefined : findChatPk(accountKey, chatId);
|
|
58
|
+
if (chatKey === undefined)
|
|
59
|
+
return false;
|
|
60
|
+
let saved = false;
|
|
61
|
+
write(database, () => {
|
|
62
|
+
saved = messageWrites.saveReactions(context, chatKey, messageId, reactions);
|
|
63
|
+
const row = database
|
|
64
|
+
.prepare("SELECT id AS pk FROM messages WHERE chat_id=? AND external_id=? AND deleted_at IS NULL")
|
|
65
|
+
.get(chatKey, messageId);
|
|
66
|
+
if (row && options.observation)
|
|
67
|
+
applyCounterObservations(context, Number(row.pk), { reactions: options.observation });
|
|
68
|
+
});
|
|
69
|
+
return saved;
|
|
70
|
+
},
|
|
71
|
+
senderStats: async (key, senderId) => {
|
|
72
|
+
const accountKey = findAccountPk(key);
|
|
73
|
+
return accountKey === undefined ? [] : reads.senderStats(context, accountKey, key.provider, senderId);
|
|
74
|
+
},
|
|
75
|
+
transcript: async (key, chatId, messageId) => {
|
|
76
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
77
|
+
return chatKey === undefined ? undefined : transcripts.transcript(context, chatKey, messageId);
|
|
78
|
+
},
|
|
79
|
+
keepTranscript: async (key, chatId, messageId, text, source) => {
|
|
80
|
+
if (text.trim() === "")
|
|
81
|
+
return;
|
|
82
|
+
write(database, () => transcripts.keepTranscript(context, chatPkFor(accountPk(key), chatId), messageId, text, source));
|
|
83
|
+
},
|
|
84
|
+
documentLinkMessages: async (key, chatId) => {
|
|
85
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
86
|
+
return chatKey === undefined ? [] : documentLinkMessages(context, chatKey);
|
|
87
|
+
},
|
|
88
|
+
mentioning: async (key, person, limit) => {
|
|
89
|
+
const accountKey = findAccountPk(key);
|
|
90
|
+
return accountKey === undefined
|
|
91
|
+
? { items: [], hasMore: false }
|
|
92
|
+
: personLinks.mentioning(context, accountKey, person, limit);
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
export const messagesStoreOver = (context, keyed) => ({
|
|
97
|
+
...keyed,
|
|
98
|
+
search: async (query, { limit, account }) => search.find(context, { text: query, limit, ...(account ? { account } : {}) }),
|
|
99
|
+
find: async (filter) => search.find(context, filter),
|
|
100
|
+
directReplies: async (parents, limit) => search.directReplies(context, parents, limit),
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/store/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Contact, Id, Page, PersonAlias, Provider } from "../domain/models.js";
|
|
2
|
+
import type { PeopleLookup } from "../resolve.js";
|
|
3
|
+
import type { ContactFilter } from "./sqlite/identities.js";
|
|
4
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
5
|
+
import type { PrivateContact, PrivateContactNote } from "./sqlite/private-people.js";
|
|
6
|
+
import type { AccountKey, IdentityRef, LinkOptions, PersonFacts, PersonRecord } from "./types.js";
|
|
7
|
+
export interface AccountPeople {
|
|
8
|
+
savePeople(key: AccountKey, people: PersonFacts[]): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* The people this account has a one-to-one chat with — as far as the saved member lists go —
|
|
11
|
+
* newest conversation first or by name.
|
|
12
|
+
*/
|
|
13
|
+
contacts(key: AccountKey, options: {
|
|
14
|
+
order: "recent" | "name";
|
|
15
|
+
limit: number;
|
|
16
|
+
offset?: number;
|
|
17
|
+
} & ContactFilter): Promise<Page<Contact>>;
|
|
18
|
+
countContacts(key: AccountKey, options?: ContactFilter): Promise<number>;
|
|
19
|
+
/** Works out again when each contact was last written to, from their one-to-one chats. */
|
|
20
|
+
refreshRecency(key: AccountKey): Promise<void>;
|
|
21
|
+
/** Every name and username this account's store recorded for one person, the current ones included. */
|
|
22
|
+
personNames(key: AccountKey, personId: Id): Promise<PersonAlias[]>;
|
|
23
|
+
privateContact(key: AccountKey, personId: Id): Promise<PrivateContact>;
|
|
24
|
+
setContactAlias(key: AccountKey, personId: Id, alias: string | null): Promise<{
|
|
25
|
+
personId: Id;
|
|
26
|
+
alias: string | null;
|
|
27
|
+
}>;
|
|
28
|
+
addContactNote(key: AccountKey, personId: Id, text: string): Promise<PrivateContactNote>;
|
|
29
|
+
contactNote(key: AccountKey, personId: Id, id: string): Promise<PrivateContactNote>;
|
|
30
|
+
editContactNote(key: AccountKey, personId: Id, id: string, text: string, revision: number): Promise<PrivateContactNote>;
|
|
31
|
+
removeContactNote(key: AccountKey, personId: Id, id: string): Promise<{
|
|
32
|
+
id: string;
|
|
33
|
+
personId: Id;
|
|
34
|
+
removed: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
export interface PeopleStore extends AccountPeople {
|
|
38
|
+
/** Everyone this provider's accounts have seen; with `account`, only who that account has seen. */
|
|
39
|
+
people(provider: Provider, options?: {
|
|
40
|
+
account?: Id;
|
|
41
|
+
accounts?: Id[];
|
|
42
|
+
}): Promise<PeopleLookup>;
|
|
43
|
+
personOf(identity: IdentityRef): Promise<PersonRecord | undefined>;
|
|
44
|
+
/** The person a `person:<uid>` reference names. */
|
|
45
|
+
personSeenInAccounts(uid: string, accountIds: readonly number[]): Promise<boolean>;
|
|
46
|
+
personByUid(uid: string): Promise<PersonRecord | undefined>;
|
|
47
|
+
/** Records the decision in `identity_link_events`; `unlinkIdentity` undoes it. */
|
|
48
|
+
linkIdentities(person: IdentityRef, other: IdentityRef, options: LinkOptions): Promise<PersonRecord>;
|
|
49
|
+
unlinkIdentity(identity: IdentityRef, options: LinkOptions): Promise<PersonRecord>;
|
|
50
|
+
}
|
|
51
|
+
export declare const accountPeopleOver: (context: StoreContext) => AccountPeople;
|
|
52
|
+
export declare const peopleStoreOver: (context: StoreContext, keyed: AccountPeople) => PeopleStore;
|
|
53
|
+
//# sourceMappingURL=people.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../src/store/people.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { keysOver } from "./keys.js";
|
|
2
|
+
import * as identities from "./sqlite/identities.js";
|
|
3
|
+
import * as personLinks from "./sqlite/person-links.js";
|
|
4
|
+
import { personSeenInAccounts } from "./sqlite/person-scope.js";
|
|
5
|
+
import * as privatePeople from "./sqlite/private-people.js";
|
|
6
|
+
import { write } from "./sqlite/transaction.js";
|
|
7
|
+
export const accountPeopleOver = (context) => {
|
|
8
|
+
const { database } = context;
|
|
9
|
+
const { accountPk, findAccountPk, identityPk } = keysOver(context);
|
|
10
|
+
return {
|
|
11
|
+
savePeople: async (key, people) => write(database, () => {
|
|
12
|
+
const accountKey = accountPk(key);
|
|
13
|
+
for (const person of people)
|
|
14
|
+
identityPk(accountKey, key.provider, person.id, person.name, person);
|
|
15
|
+
}),
|
|
16
|
+
contacts: async (key, options) => {
|
|
17
|
+
const accountKey = findAccountPk(key);
|
|
18
|
+
if (accountKey === undefined)
|
|
19
|
+
return { items: [], hasMore: false };
|
|
20
|
+
return identities.contacts(context, accountKey, key, options);
|
|
21
|
+
},
|
|
22
|
+
countContacts: async (key, filter = {}) => {
|
|
23
|
+
const accountKey = findAccountPk(key);
|
|
24
|
+
return accountKey === undefined ? 0 : identities.countContacts(context, accountKey, key, filter);
|
|
25
|
+
},
|
|
26
|
+
refreshRecency: async (key) => {
|
|
27
|
+
const accountKey = findAccountPk(key);
|
|
28
|
+
if (accountKey !== undefined)
|
|
29
|
+
identities.refreshRecency(context, accountKey);
|
|
30
|
+
},
|
|
31
|
+
personNames: async (key, personId) => {
|
|
32
|
+
const accountKey = findAccountPk(key);
|
|
33
|
+
return accountKey === undefined ? [] : identities.namesOf(context, accountKey, key.provider, personId);
|
|
34
|
+
},
|
|
35
|
+
privateContact: async (key, person) => privatePeople.privateContact(context, key, person),
|
|
36
|
+
setContactAlias: async (key, person, alias) => {
|
|
37
|
+
return write(database, () => privatePeople.setAlias(context, key, person, alias));
|
|
38
|
+
},
|
|
39
|
+
addContactNote: async (key, person, text) => {
|
|
40
|
+
return write(database, () => privatePeople.addNote(context, key, person, text));
|
|
41
|
+
},
|
|
42
|
+
contactNote: async (key, person, id) => privatePeople.note(context, key, person, id),
|
|
43
|
+
editContactNote: async (key, person, id, text, revision) => {
|
|
44
|
+
return write(database, () => privatePeople.editNote(context, key, person, id, text, revision));
|
|
45
|
+
},
|
|
46
|
+
removeContactNote: async (key, person, id) => privatePeople.removeNote(context, key, person, id),
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export const peopleStoreOver = (context, keyed) => {
|
|
50
|
+
const { database } = context;
|
|
51
|
+
return {
|
|
52
|
+
...keyed,
|
|
53
|
+
people: async (provider, options = {}) => identities.people(context, provider, options),
|
|
54
|
+
personOf: async (identity) => personLinks.personOf(context, identity),
|
|
55
|
+
personSeenInAccounts: async (uid, accountIds) => personSeenInAccounts(context, uid, accountIds),
|
|
56
|
+
personByUid: async (uid) => personLinks.personByUid(context, uid),
|
|
57
|
+
linkIdentities: async (person, other, options) => {
|
|
58
|
+
return write(database, () => personLinks.linkIdentities(context, person, other, options));
|
|
59
|
+
},
|
|
60
|
+
unlinkIdentity: async (identity, options) => {
|
|
61
|
+
return write(database, () => personLinks.unlinkIdentity(context, identity, options));
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=people.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people.js","sourceRoot":"","sources":["../../src/store/people.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAA;AAEpD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AA4C/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAiB,EAAE;IACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAClE,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAChC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;YACnB,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YACjC,KAAK,MAAM,MAAM,IAAI,MAAM;gBAAE,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACnG,CAAC,CAAC;QAEJ,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,UAAU,KAAK,SAAS;gBAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;YAClE,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;QAC/D,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE;YACxC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;QAClG,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,UAAU,KAAK,SAAS;gBAAE,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAC9E,CAAC;QAED,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;YACnC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACrC,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACxG,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC;QACzF,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;YAC5C,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;QACnF,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC1C,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;QACjF,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;QACpF,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACzD,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;QAChG,CAAC;QACD,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;KACjG,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAqB,EAAE,KAAoB,EAAe,EAAE;IAC1F,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,OAAO;QACL,GAAG,KAAK;QACR,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QACvF,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrE,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC;QAC/F,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC;QACjE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC/C,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;QAC3F,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YAC1C,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;QACtF,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Page } from "../domain/models.js";
|
|
2
|
+
import type { QueryExecution } from "../search/lucene/resolved.js";
|
|
3
|
+
import type { Stemmer, Stemmers } from "../search/stem.js";
|
|
4
|
+
import { type AdminStoreRequest, type AdminStoreResult } from "./sqlite/admin-statistics.js";
|
|
5
|
+
import { type ConversationEligibility } from "./sqlite/conversation-eligibility.js";
|
|
6
|
+
import type { QueryGroup, QueryGrouping } from "./sqlite/lucene.js";
|
|
7
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
8
|
+
import { type RankedEvidence, type RankingEvidenceRequest } from "./sqlite/ranking-evidence.js";
|
|
9
|
+
import { type RankedStoreFound, type RankingRequest } from "./sqlite/rankings.js";
|
|
10
|
+
import type { ScoredHit } from "./sqlite/words.js";
|
|
11
|
+
/** A resolved Lucene query run over the store: hits, counts, rankings and the statistics behind them. */
|
|
12
|
+
export interface QueriesStore {
|
|
13
|
+
matchQuery(execution: QueryExecution): Promise<Page<ScoredHit>>;
|
|
14
|
+
/** The same matches as `matchQuery`, each counted once, grouped by chat, sender or quarter hour. */
|
|
15
|
+
countQuery(execution: QueryExecution, by: QueryGrouping): Promise<QueryGroup[]>;
|
|
16
|
+
conversationEligibility(execution: QueryExecution): Promise<ConversationEligibility>;
|
|
17
|
+
rankQuery(execution: QueryExecution, request: RankingRequest): Promise<RankedStoreFound>;
|
|
18
|
+
rankingEvidence(execution: QueryExecution, request: RankingEvidenceRequest): Promise<RankedEvidence>;
|
|
19
|
+
adminStatisticsQuery(execution: QueryExecution, request: AdminStoreRequest): Promise<AdminStoreResult>;
|
|
20
|
+
}
|
|
21
|
+
export declare const queriesStoreOver: (context: StoreContext, stemmerFor: (stemmers: Stemmers) => Stemmer) => QueriesStore;
|
|
22
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/store/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAwB,MAAM,8BAA8B,CAAA;AAClH,OAAO,EAAE,KAAK,uBAAuB,EAA2B,MAAM,sCAAsC,CAAA;AAE5G,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,sBAAsB,EAAmB,MAAM,8BAA8B,CAAA;AAChH,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAa,MAAM,sBAAsB,CAAA;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD,yGAAyG;AACzG,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/D,oGAAoG;IACpG,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC/E,uBAAuB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpF,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxF,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACpG,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACvG;AAED,eAAO,MAAM,gBAAgB,YAAa,YAAY,cAAc,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,KAAG,YAarG,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { adminStatisticsQuery } from "./sqlite/admin-statistics.js";
|
|
2
|
+
import { conversationEligibility } from "./sqlite/conversation-eligibility.js";
|
|
3
|
+
import { drainEmailIndex } from "./sqlite/email-index.js";
|
|
4
|
+
import * as lucene from "./sqlite/lucene.js";
|
|
5
|
+
import { rankingEvidence } from "./sqlite/ranking-evidence.js";
|
|
6
|
+
import { rankQuery } from "./sqlite/rankings.js";
|
|
7
|
+
export const queriesStoreOver = (context, stemmerFor) => {
|
|
8
|
+
const mailIndexed = (execution) => {
|
|
9
|
+
if (execution.corpus === "mail")
|
|
10
|
+
drainEmailIndex(context.database, stemmerFor);
|
|
11
|
+
return execution;
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
matchQuery: async (execution) => lucene.matchQuery(context, mailIndexed(execution)),
|
|
15
|
+
countQuery: async (execution, by) => lucene.countQuery(context, mailIndexed(execution), by),
|
|
16
|
+
conversationEligibility: async (execution) => conversationEligibility(context, execution),
|
|
17
|
+
rankQuery: async (execution, request) => rankQuery(context, execution, request),
|
|
18
|
+
rankingEvidence: async (execution, request) => rankingEvidence(context, execution, request),
|
|
19
|
+
adminStatisticsQuery: async (execution, request) => adminStatisticsQuery(context, execution, request),
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/store/queries.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiD,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAClH,OAAO,EAAgC,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AAC5G,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAE5C,OAAO,EAAoD,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAChH,OAAO,EAA8C,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAc5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAqB,EAAE,UAA2C,EAAgB,EAAE;IACnH,MAAM,WAAW,GAAG,CAAC,SAAyB,EAAE,EAAE;QAChD,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM;YAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC9E,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA;IACD,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;QACnF,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAC3F,uBAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC;QACzF,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC/E,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC3F,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;KACtG,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Id, Member } from "../domain/models.js";
|
|
2
|
+
import type { RetentionOptions } from "../domain/retention.js";
|
|
3
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
4
|
+
import { type RetentionResult } from "./sqlite/retention.js";
|
|
5
|
+
import type { MemberCount, MemberStay, ProfileRevision, RosterChange, RosterRead, TrackedChat } from "./sqlite/roster.js";
|
|
6
|
+
import type { AccountKey } from "./types.js";
|
|
7
|
+
export interface RosterStore {
|
|
8
|
+
/** Replaces who is in a chat with this list, whole: a person left out has left. */
|
|
9
|
+
saveMembers(key: AccountKey, chatId: Id, memberIds: Id[]): Promise<void>;
|
|
10
|
+
/** Who is in a chat, by name, as the last list said; empty when no list was ever saved. */
|
|
11
|
+
members(key: AccountKey, chatId: Id): Promise<Member[]>;
|
|
12
|
+
/**
|
|
13
|
+
* One read of a group's member list: stays opened and kept, a stay closed only when the read was whole,
|
|
14
|
+
* profiles revised when they differ, today's count. The chat's present members become the list read whole.
|
|
15
|
+
*/
|
|
16
|
+
saveRoster(key: AccountKey, chatId: Id, read: RosterRead): Promise<RosterChange>;
|
|
17
|
+
/** Stays open at `since` (ISO) or begun after it, oldest first; every stay without it. */
|
|
18
|
+
memberStays(key: AccountKey, chatId: Id, options?: {
|
|
19
|
+
since?: string;
|
|
20
|
+
}): Promise<MemberStay[]>;
|
|
21
|
+
/** One row a day, oldest first; from `since` (`YYYY-MM-DD`) when given. */
|
|
22
|
+
memberCounts(key: AccountKey, chatId: Id, options?: {
|
|
23
|
+
since?: string;
|
|
24
|
+
}): Promise<MemberCount[]>;
|
|
25
|
+
/** Every profile the chat's members were seen with, oldest first. */
|
|
26
|
+
profileRevisions(key: AccountKey, chatId: Id, options?: {
|
|
27
|
+
since?: string;
|
|
28
|
+
}): Promise<ProfileRevision[]>;
|
|
29
|
+
/** Starts or stops `serve`'s daily fetch of the chat's members; history already kept stays. */
|
|
30
|
+
trackMembers(key: AccountKey, chatId: Id, tracked: boolean): Promise<void>;
|
|
31
|
+
trackedChats(key: AccountKey): Promise<TrackedChat[]>;
|
|
32
|
+
retention(key: AccountKey, chatId: Id, options: RetentionOptions, evidence?: {
|
|
33
|
+
cohort: string;
|
|
34
|
+
cursor?: string;
|
|
35
|
+
}): Promise<RetentionResult>;
|
|
36
|
+
}
|
|
37
|
+
export declare const rosterStoreOver: (context: StoreContext) => RosterStore;
|
|
38
|
+
//# sourceMappingURL=roster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roster.d.ts","sourceRoot":"","sources":["../../src/store/roster.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,uBAAuB,CAAA;AAC5E,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,2FAA2F;IAC3F,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACvD;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAChF,0FAA0F;IAC1F,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC7F,2EAA2E;IAC3E,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/F,qEAAqE;IACrE,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;IACvG,+FAA+F;IAC/F,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IACrD,SAAS,CACP,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,EAAE,EACV,OAAO,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC,eAAe,CAAC,CAAA;CAC5B;AAED,eAAO,MAAM,eAAe,YAAa,YAAY,KAAG,WAwDvD,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { keysOver } from "./keys.js";
|
|
3
|
+
import * as chatQueries from "./sqlite/chats.js";
|
|
4
|
+
import { retentionQuery } from "./sqlite/retention.js";
|
|
5
|
+
import * as roster from "./sqlite/roster.js";
|
|
6
|
+
import { read, write } from "./sqlite/transaction.js";
|
|
7
|
+
export const rosterStoreOver = (context) => {
|
|
8
|
+
const { database } = context;
|
|
9
|
+
const { accountPk, findAccountPk, chatKeyOf, chatPkFor, writeMembers } = keysOver(context);
|
|
10
|
+
return {
|
|
11
|
+
saveMembers: async (key, chatId, memberIds) => write(database, () => writeMembers(key, accountPk(key), chatId, memberIds)),
|
|
12
|
+
members: async (key, chatId) => {
|
|
13
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
14
|
+
return chatKey === undefined ? [] : chatQueries.members(context, chatKey);
|
|
15
|
+
},
|
|
16
|
+
saveRoster: async (key, chatId, read) => {
|
|
17
|
+
let change = { joined: [], gone: [], changed: [] };
|
|
18
|
+
write(database, () => {
|
|
19
|
+
const accountKey = accountPk(key);
|
|
20
|
+
change = roster.saveRoster(context, accountKey, key.provider, chatPkFor(accountKey, chatId), read);
|
|
21
|
+
});
|
|
22
|
+
return change;
|
|
23
|
+
},
|
|
24
|
+
memberStays: async (key, chatId, { since } = {}) => {
|
|
25
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
26
|
+
return chatKey === undefined
|
|
27
|
+
? []
|
|
28
|
+
: roster.memberStaysOf(context, chatKey, since === undefined ? undefined : Date.parse(since));
|
|
29
|
+
},
|
|
30
|
+
memberCounts: async (key, chatId, { since } = {}) => {
|
|
31
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
32
|
+
return chatKey === undefined ? [] : roster.memberCountsOf(context, chatKey, since);
|
|
33
|
+
},
|
|
34
|
+
profileRevisions: async (key, chatId, { since } = {}) => {
|
|
35
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
36
|
+
return chatKey === undefined
|
|
37
|
+
? []
|
|
38
|
+
: roster.profileRevisionsOf(context, chatKey, since === undefined ? undefined : Date.parse(since));
|
|
39
|
+
},
|
|
40
|
+
trackMembers: async (key, chatId, tracked) => write(database, () => roster.setTracked(context, chatPkFor(accountPk(key), chatId), tracked)),
|
|
41
|
+
trackedChats: async (key) => {
|
|
42
|
+
const accountKey = findAccountPk(key);
|
|
43
|
+
return accountKey === undefined ? [] : roster.trackedChats(context, accountKey);
|
|
44
|
+
},
|
|
45
|
+
retention: async (key, chatId, options, evidence) => {
|
|
46
|
+
const accountKey = findAccountPk(key);
|
|
47
|
+
const chatKey = chatKeyOf(key, chatId);
|
|
48
|
+
if (accountKey === undefined || chatKey === undefined)
|
|
49
|
+
throw new CliError("validation_error", "retention needs a stored chat and membership observations");
|
|
50
|
+
return read(database, () => retentionQuery(context, accountKey, chatKey, chatId, options, evidence));
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=roster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roster.js","sourceRoot":"","sources":["../../src/store/roster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Stemmers } from "../search/stem.js";
|
|
2
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
3
|
+
import type { SearchIndexFill, SearchIndexState } from "./sqlite/search-index.js";
|
|
4
|
+
import type { StemsFill, StemsState } from "./sqlite/stems.js";
|
|
5
|
+
export interface SearchIndexStore {
|
|
6
|
+
/** Of `terms`, those the index knows as a word or the beginning of one. */
|
|
7
|
+
knownTerms(terms: string[]): Promise<Set<string>>;
|
|
8
|
+
/** Known words sharing these trigrams, within the lengths, most shared first. */
|
|
9
|
+
termCandidates(trigrams: string[], lengths: {
|
|
10
|
+
shortest: number;
|
|
11
|
+
longest: number;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
term: string;
|
|
14
|
+
docs: number;
|
|
15
|
+
}[]>;
|
|
16
|
+
/** How far the word index is built; `undefined` on a file before it existed. */
|
|
17
|
+
searchIndexState(): Promise<SearchIndexState | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Builds the word index towards "ready" in short batches — the normalized text, the messages up to
|
|
20
|
+
* the watermark, the typo vocabulary — until done or `until` says stop. Each batch is its own write.
|
|
21
|
+
*/
|
|
22
|
+
fillSearchIndex(options?: {
|
|
23
|
+
until?: () => boolean;
|
|
24
|
+
}): Promise<SearchIndexFill>;
|
|
25
|
+
/** How far the stems are built, and by which stemmer choices; `undefined` on a file before they existed. */
|
|
26
|
+
stemsState(): Promise<StemsState | undefined>;
|
|
27
|
+
/** Builds the stems towards "ready" in short batches until done or `until` says stop; never rebuilds. */
|
|
28
|
+
fillStems(options?: {
|
|
29
|
+
until?: () => boolean;
|
|
30
|
+
}): Promise<StemsFill>;
|
|
31
|
+
/**
|
|
32
|
+
* The stemmer choices saved in the store for every profile, tg and MAX; `undefined` while the defaults
|
|
33
|
+
* apply, `null` when a newer tool saved one this build does not know.
|
|
34
|
+
*/
|
|
35
|
+
stemmers(): Promise<Stemmers | null | undefined>;
|
|
36
|
+
/** Saves them; stems built by other choices wait for `store reindex` or `store migrate`. */
|
|
37
|
+
saveStemmers(stemmers: Stemmers): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
export declare const searchIndexStoreOver: (context: StoreContext) => SearchIndexStore;
|
|
40
|
+
//# sourceMappingURL=search-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-index.d.ts","sourceRoot":"","sources":["../../src/store/search-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEjF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAM9D,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACjD,iFAAiF;IACjF,cAAc,CACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;IAC5C,gFAAgF;IAChF,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;IACzD;;;OAGG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC9E,4GAA4G;IAC5G,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IAC7C,yGAAyG;IACzG,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAClE;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;IAChD,4FAA4F;IAC5F,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChD;AAED,eAAO,MAAM,oBAAoB,YAAa,YAAY,KAAG,gBAa5D,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as searchIndex from "./sqlite/search-index.js";
|
|
2
|
+
import * as stems from "./sqlite/stems.js";
|
|
3
|
+
import { fillStems } from "./sqlite/stems-fill.js";
|
|
4
|
+
import { write } from "./sqlite/transaction.js";
|
|
5
|
+
import * as words from "./sqlite/words.js";
|
|
6
|
+
export const searchIndexStoreOver = (context) => {
|
|
7
|
+
const { database } = context;
|
|
8
|
+
return {
|
|
9
|
+
knownTerms: async (terms) => words.knownTerms(context, terms),
|
|
10
|
+
termCandidates: async (trigrams, lengths) => words.termCandidates(context, trigrams, lengths),
|
|
11
|
+
searchIndexState: async () => searchIndex.searchIndexState(database),
|
|
12
|
+
fillSearchIndex: async ({ until } = {}) => searchIndex.fillSearchIndex(database, { now: context.now, ...(until ? { until } : {}) }),
|
|
13
|
+
stemsState: async () => stems.stemsState(database),
|
|
14
|
+
fillStems: async ({ until } = {}) => fillStems(database, { now: context.now, ...(until ? { until } : {}) }),
|
|
15
|
+
stemmers: async () => stems.savedStemmers(database),
|
|
16
|
+
saveStemmers: async (stemmers) => write(database, () => stems.saveStoreStemmers(database, stemmers, context.now())),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=search-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-index.js","sourceRoot":"","sources":["../../src/store/search-index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAA;AAEvD,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AA8B1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAqB,EAAoB,EAAE;IAC9E,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;QAC7D,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC7F,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QACpE,eAAe,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CACxC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1F,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;QAClD,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3G,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;QACnD,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;KACpH,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { StoreContext } from "./sqlite/open.js";
|
|
2
|
+
import type { SearchRecord, StoredSearch } from "./sqlite/searches.js";
|
|
3
|
+
export interface SearchesStore {
|
|
4
|
+
/** One run of a search or stats; the same unnamed run again counts on its row. `saved` is the saved search it ran. */
|
|
5
|
+
recordSearch(run: SearchRecord, options?: {
|
|
6
|
+
saved?: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
/** A saved search by name; a name already taken is refused unless `replace`. */
|
|
9
|
+
saveSearch(name: string, search: SearchRecord, options?: {
|
|
10
|
+
replace?: boolean;
|
|
11
|
+
}): Promise<StoredSearch>;
|
|
12
|
+
/** A saved search by name, or any row by id. */
|
|
13
|
+
storedSearch(reference: string): Promise<StoredSearch | undefined>;
|
|
14
|
+
savedSearches(): Promise<StoredSearch[]>;
|
|
15
|
+
/** Runs, newest first, one more than `limit` when there are more. */
|
|
16
|
+
searchHistory(limit: number, offset?: number): Promise<StoredSearch[]>;
|
|
17
|
+
deleteSearch(reference: string): Promise<StoredSearch>;
|
|
18
|
+
/** Drops the unnamed runs; answers how many. */
|
|
19
|
+
clearSearchHistory(): Promise<number>;
|
|
20
|
+
}
|
|
21
|
+
export declare const searchesStoreOver: (context: StoreContext) => SearchesStore;
|
|
22
|
+
//# sourceMappingURL=searches.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searches.d.ts","sourceRoot":"","sources":["../../src/store/searches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAItE,MAAM,WAAW,aAAa;IAC5B,sHAAsH;IACtH,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E,gFAAgF;IAChF,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACtG,gDAAgD;IAChD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IAClE,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACxC,qEAAqE;IACrE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACtE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACtD,gDAAgD;IAChD,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CACtC;AAED,eAAO,MAAM,iBAAiB,YAAa,YAAY,KAAG,aA2BzD,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as searchRecords from "./sqlite/searches.js";
|
|
2
|
+
import { write } from "./sqlite/transaction.js";
|
|
3
|
+
export const searchesStoreOver = (context) => {
|
|
4
|
+
const { database } = context;
|
|
5
|
+
return {
|
|
6
|
+
recordSearch: async (run, { saved } = {}) => write(database, () => searchRecords.recordRun(context, run, saved)),
|
|
7
|
+
saveSearch: async (name, search, { replace = false } = {}) => {
|
|
8
|
+
return write(database, () => searchRecords.saveSearch(context, name, search, replace));
|
|
9
|
+
},
|
|
10
|
+
storedSearch: async (reference) => searchRecords.findSearch(context, reference),
|
|
11
|
+
savedSearches: async () => searchRecords.savedSearches(context),
|
|
12
|
+
searchHistory: async (limit, offset) => searchRecords.searchHistory(context, limit, offset),
|
|
13
|
+
deleteSearch: async (reference) => {
|
|
14
|
+
return write(database, () => searchRecords.deleteSearch(context, reference));
|
|
15
|
+
},
|
|
16
|
+
clearSearchHistory: async () => {
|
|
17
|
+
let cleared = 0;
|
|
18
|
+
write(database, () => {
|
|
19
|
+
cleared = searchRecords.clearHistory(context);
|
|
20
|
+
});
|
|
21
|
+
return cleared;
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=searches.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searches.js","sourceRoot":"","sources":["../../src/store/searches.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAiB/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAiB,EAAE;IACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,OAAO;QACL,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAEhH,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;YAC3D,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;QACxF,CAAC;QAED,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QAE/E,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;QAE/D,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;QAE3F,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAChC,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;QAC9E,CAAC;QAED,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAC7B,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACnB,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;YACF,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AccountKey, StoredAccount } from "../
|
|
1
|
+
import type { AccountKey, StoredAccount } from "../types.js";
|
|
2
2
|
import type { StoreContext } from "./open.js";
|
|
3
3
|
/** An account's row, made on first sight; a name only replaces what was known when there is one. */
|
|
4
4
|
export declare const accountPk: ({ orm, now }: StoreContext, { provider, account, scope }: AccountKey, name?: string | null) => number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type AdminOptions, type AdminRow, calculateAdminStatistics } from "../../domain/admin-statistics.js";
|
|
2
2
|
import { type CounterState } from "../../domain/counters.js";
|
|
3
3
|
import type { QueryExecution } from "../../search/lucene/resolved.js";
|
|
4
|
-
import type { StoredHit } from "../
|
|
4
|
+
import type { StoredHit } from "../types.js";
|
|
5
5
|
import type { StoreContext } from "./open.js";
|
|
6
6
|
export interface AdminStoreRequest {
|
|
7
7
|
options: AdminOptions;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Id } from "../../domain/models.js";
|
|
2
|
-
import type { AgentAnswer, LinkBatch } from "../
|
|
2
|
+
import type { AgentAnswer, LinkBatch } from "../types.js";
|
|
3
3
|
import type { StoreContext } from "./open.js";
|
|
4
4
|
/** How many messages before the first one to answer the agent sees: 97% of reply parents sit within 50. */
|
|
5
5
|
export declare const BATCH_CONTEXT = 50;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChannelTagMatch } from "../../domain/channel-tags.js";
|
|
2
2
|
import type { Chat, Id, Member, Page } from "../../domain/models.js";
|
|
3
|
-
import type { AccountKey, StoredChatFilter } from "../
|
|
3
|
+
import type { AccountKey, StoredChatFilter } from "../types.js";
|
|
4
4
|
import type { StoreContext } from "./open.js";
|
|
5
5
|
/** The chat's own id, when the store key is a chat of this account. */
|
|
6
6
|
export declare const chatOf: ({ orm }: StoreContext, accountKey: number, chatKey: number) => Id | undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { QueryExecution } from "../../search/lucene/resolved.js";
|
|
2
|
-
import type { AccountKey } from "../
|
|
2
|
+
import type { AccountKey } from "../types.js";
|
|
3
3
|
import type { StoreContext } from "./open.js";
|
|
4
4
|
export interface ConversationEligibility {
|
|
5
5
|
conversations: string[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LinkInput } from "../../conversations/link.js";
|
|
2
2
|
import type { Id, Message, Page } from "../../domain/models.js";
|
|
3
|
-
import type { ConversationBuild, ConversationSummary, StoredLink } from "../
|
|
3
|
+
import type { ConversationBuild, ConversationSummary, StoredLink } from "../types.js";
|
|
4
4
|
import type { StoreContext } from "./open.js";
|
|
5
5
|
import { type Where } from "./query-filter.js";
|
|
6
6
|
/** A chat's live messages for the rules, oldest first, a page at a time; `next` continues it. */
|