← Public packages
@charlesmatte/todos
Shared todo, task and reminder store that any of your Kody-connected agents can use.
src/delete.ts
35 lines · 1.2 KB · TypeScriptimport { InputError, parseInput } from './lib/validate.ts'
import { byField, idField } from './lib/fields.ts'
import { mutateTodo, normalizeId, purgeTodo, requireTodo } from './lib/store.ts'
/**
* Delete a todo/task from the shared todo list. Default is a soft delete (archived, hidden from list/digest,
* restorable with ./reopen). `purge: true` removes it permanently — only when the user explicitly asks.
*
* @param input - `{ id: string, by: string, purge?: boolean }`
* @returns `{ id, deleted: true, purged }`
*
* @example
* import deleteTodo from 'kody:@charlesmatte/todos/delete'
*
* await deleteTodo({ id: 'T12', by: 'assistant' })
*/
export default async function deleteTodo(input: unknown) {
const p = parseInput<{ id: string; by: string; purge?: boolean }>(
input,
{ id: idField, by: byField, purge: { type: 'boolean' } },
'todos/delete',
)
const id = normalizeId(p.id)
if (p.purge) {
await requireTodo(id)
await purgeTodo(id)
return { id, deleted: true, purged: true }
}
await mutateTodo(id, p.by, 'deleted', (t) => {
if (t.deleted) throw new InputError(`${t.id} is already deleted.`)
t.deleted = true
t.deletedAt = new Date().toISOString()
})
return { id, deleted: true, purged: false }
}