I got tired of everything build on requiring try-catches, and promise resolvers, so made a stab at a more error-focused, schema validated fetch client, with errors-as-values inspired by Go.
You define endpoints once with your preferred schema (via Standard Schema-compatible validators), and you get end-to-end TypeScript safety for params, bodies, and responses.