replace deprecated ctx.error() with ctx.throw()