# Mermeaid ```mermaid stateDiagram-v2 direction TB invocations: \n components: \n auth: Authorization send: Invocation send.task: Task send.promise: Promise send.receipt: Receipt read: Invocation read.task: Task update: Invocation update.task: Task state auth { direction TB sig-->iss sig-->aud sig-->meta sig-->nnc sig-->run } state send.task { direction LR send.task.prf: prf send.task.do: do send.task.with: with send.task.input: input send.do: msg/send send.with: mailto꞉//alice@example.com send.input: {"to"꞉ "bob@example.com", "subject"꞉ "DNSLink for example.com"} send.task.do --> send.do send.task.with --> send.with send.task.input --> send.input } send.task.prf --> send.ucan send.ucan: ucan state read.task { direction LR read.task.do: do read.task.with: with read.do: crud/read read.with: https꞉//example.com/mailinglist read.task.do --> read.do read.task.with --> read.with } state update.task { direction LR update.task.do: do update.task.with: with update.task.input: input update.can: crud/update update.with: dns꞉example.com?TYPE=TXT update.input: {value꞉"hello world"} update.task.do --> update.can update.task.with --> update.with update.task.input --> update.input } state send { send.run: task send.auth: authorization } state read { read.run: task read.auth: authorization } state update { update.run: task update.auth: authorization } state invocations { direction TB send read update -- auth -- send.task read.task update.task } state send.promise { state send.promise.await <<choice>> } state send.receipt { send.receipt.sig: sig send.receipt.ran: ran send.receipt.out: result send.receipt.meta: meta send.receipt.iss: iss send.receipt.prf: prf -- state send.result <<choice>> send.result --> send.result.ok: ok send.result --> send.result.error: error send.result.ok: success send.result.error: { error } } state components { send.promise -- send.receipt -- invocations } send.run --> send.task send.auth --> auth read.run --> read.task read.auth --> auth update.run --> update.task update.auth --> auth run --> send.task run --> read.task run --> update.task send.promise.await --> send: ok send.promise.await --> send: error send.promise.await --> send: * send.receipt.out --> send.result send.receipt.sig --> send.receipt.ran send.receipt.sig --> send.receipt.out send.receipt.sig --> send.receipt.meta send.receipt.sig --> send.receipt.iss send.receipt.sig --> send.receipt.prf send.receipt.ran --> send ```