HonoH
Hono2y ago
kgni

Sentry - hono/trpc/cloudflare workers

Hi guys, I'm trying to implement sentry into my hono/trpc/cloudflare application. If I'm just using the @hono/sentry middleware, what errors are exactly being caught? Will this middleware automatically catch all expcetions thrown from my middleware trpc server?

I guess if I want to have a bit more fine grained control (as to when I'm capturing exceptions) inside of each of my trpc procedures, I need a bit of a different implementation, right?

I'm not quite sure if I understood how everything works, I would very much appreciate any feedback!

Here is what I'm currently doing to get the sentry instance into my trpc server: (gist for reference):
  • trpc.ts
  • trpcContext.ts
    • just a function that creates the trpcContext (Sentry.init() is called here)
  • worker.ts
    • hono server running on CF workers
Since Cloudflare workers run on the v8 engine, I' assuming I can just use the sentry/browser package in my workers.

  1. pass in the SENTRY_DSN key as a Cloudflare binding - (file: workers.ts)
  2. create a trpcServer server middleware as per the @hono/trpc-server documentation - (file: worker.ts)
3a. when creating my tRPC server I pass in my Cloudflare bindings to the trpc context, including the SENTRY_DSN
  • (file: trpcContext.ts)
. now that I have access to the SENTRY_DSN key in the context, I pass this key to Sentry.init()
  • which comes from sentry/browser. - (file: trpcContext.ts)
c. I return the instance of Sentry.init() which I now have access to in every single procedure - (file: trpcContext.ts
  • line 61)
. as a "catch all", when initializing the trpc server, I can in the errorFormatter check if the error.code === 'INTERNAL_SERVER_ERROR and then capture all these exceptions to sentry, before I return the error to the client. - (file: trpc.ts
  • line 8)
m I overcomplicating it? I'm afraid I am.
Was this page helpful?