Skip to content
← Public packages

@kody/agent-mail

AgentMail inboxes for agents: create/list inboxes, messages, threads, and Svix webhook ingress.

src/create-inbox.ts

45 lines · 1.5 KB · TypeScript
import { agentMailRequest, clean } from './core.ts'

export type CreateInboxInput = {
	username?: string
	domain?: string
	displayName?: string
	/** Idempotency key for inbox creation (AgentMail client_id). */
	clientId?: string
	metadata?: Record<string, string | number | boolean>
}

/**
 * Create an AgentMail inbox (no auto-send).
 * Supports clientId for idempotent creates. Uses POST /v0/inboxes.
 *
 * @param input.username - Optional address username
 * @param input.domain - Optional verified domain (default agentmail.to)
 * @param input.displayName - Optional display name
 * @param input.clientId - Optional client_id for idempotency
 * @param input.metadata - Optional string/number/boolean metadata map
 * @returns Created inbox from AgentMail
 *
 * @example
 * import createInbox from 'kody:@kody/agent-mail/create-inbox'
 * const { inbox } = await createInbox({
 *   displayName: 'Support Agent',
 *   clientId: 'support-agent-v1',
 * })
 */
export default async function createInbox(input: CreateInboxInput = {}) {
	const body: Record<string, unknown> = {}
	if (clean(input.username)) body.username = clean(input.username)
	if (clean(input.domain)) body.domain = clean(input.domain)
	if (clean(input.displayName)) body.display_name = clean(input.displayName)
	if (clean(input.clientId)) body.client_id = clean(input.clientId)
	if (input.metadata && typeof input.metadata === 'object') body.metadata = input.metadata

	const inbox = await agentMailRequest({
		method: 'POST',
		path: '/v0/inboxes',
		body,
		label: 'AgentMail create inbox',
	})
	return { inbox }
}