import { MeiliSearch } from 'meilisearch'; export { MeiliSearch } from 'meilisearch'; export interface MeiliDocument { id: string; // DB Message.id content: string; senderName: string; // empty string when null sourceGroupId: string; sourceGroupName: string; tags: string[]; platform: string; approvedAt: number; // Unix ms — Meilisearch sorts numbers, not ISO strings } export const MESSAGES_INDEX = 'tower-messages'; export function createMeiliClient(url: string, masterKey: string): MeiliSearch { return new MeiliSearch({ host: url, apiKey: masterKey }); } export async function configureIndex(client: MeiliSearch): Promise { await client.index(MESSAGES_INDEX).updateSettings({ searchableAttributes: ['content', 'senderName', 'sourceGroupName'], filterableAttributes: ['sourceGroupId', 'tags', 'platform'], sortableAttributes: ['approvedAt'], }); } export async function indexMessage(client: MeiliSearch, doc: MeiliDocument): Promise { await client.index(MESSAGES_INDEX).addDocuments([doc]); } export async function deleteMessage(client: MeiliSearch, id: string): Promise { await client.index(MESSAGES_INDEX).deleteDocument(id); }