← Public packages
@kody/mailroom
Offline-first PWA for your Kody mailbox: sent and received threads, copy-prompt for agents, no send.
src/search.ts
31 lines · 917 B · TypeScriptimport { listMail } from './mail.ts'
import { groupMessages } from './threads.ts'
import type { MailDirection, MailThread } from './types.ts'
/**
* Search the package owner's mailbox by subject/from, then group hits into threads.
*
* @example
* import search from 'kody:@kody/mailroom/search'
*
* const { threads } = await search({ query: 'invoice', direction: 'inbound' })
*/
export default async function search(input: {
query: string
direction?: MailDirection
limit?: number
}): Promise<{ query: string; direction: MailDirection; threads: Array<MailThread> }> {
const query = String(input.query || '').trim()
if (!query) throw new Error('query is required.')
const direction = input.direction === 'outbound' ? 'outbound' : 'inbound'
const messages = await listMail({
query,
direction,
limit: input.limit,
})
return {
query,
direction,
threads: groupMessages(messages, direction),
}
}