Skip to content
← 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 · TypeScript
import { 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),
	}
}