@type args() :: term()
@type decision() :: {:approved, state()} | {:denied, binary(), state()} | {:error, binary(), state()}
@type state() :: term()
@callback confirm(state(), args()) :: decision()