# @kubiks/otel-resend OpenTelemetry instrumentation for the [Resend](https://resend.com) Node.js SDK. Capture spans for every Resend API call, enrich them with operation metadata, and keep an eye on message delivery from your traces. ![Resend Trace Visualization](https://github.com/kubiks-inc/otel/blob/main/images/otel-resend-trace.png) _Visualize your email operations with detailed span information including recipients, subject lines, and delivery status._ ## Installation ```bash npm install @kubiks/otel-resend # or pnpm add @kubiks/otel-resend ``` **Peer Dependencies:** `@opentelemetry/api` >= 1.9.0, `resend` >= 3.0.0 ## Quick Start ```ts import { Resend } from "resend"; import { instrumentResend } from "@kubiks/otel-resend"; const resend = instrumentResend(new Resend(process.env.RESEND_API_KEY!)); await resend.emails.send({ from: "hello@example.com", to: ["user@example.com"], subject: "Welcome", html: "

Hello world

", }); ``` `instrumentResend` wraps the instance you already use — no configuration changes needed. Every SDK call creates a client span with useful attributes. ## What Gets Traced This instrumentation specifically wraps the `resend.emails.send` method (and its alias `resend.emails.create`), creating a single clean span for each email send operation. ## Span Attributes Each span includes: | Attribute | Description | Example | | ------------------------ | --------------------------------------------------- | --------------------------------------- | | `messaging.system` | Constant value `resend` | `resend` | | `messaging.operation` | Operation type | `send` | | `resend.resource` | Resource name | `emails` | | `resend.target` | Full operation target | `emails.send` | | `resend.to_addresses` | Comma-separated TO addresses | `user@example.com, another@example.com` | | `resend.cc_addresses` | Comma-separated CC addresses (if present) | `cc@example.com` | | `resend.bcc_addresses` | Comma-separated BCC addresses (if present) | `bcc@example.com` | | `resend.recipient_count` | Total number of recipients | `3` | | `resend.from` | Sender email address | `noreply@example.com` | | `resend.subject` | Email subject | `Welcome to our service` | | `resend.template_id` | Template ID (if using templates) | `tmpl_123` | | `resend.message_id` | Message ID returned by Resend | `email_123` | | `resend.message_count` | Number of messages sent (always 1 for single sends) | `1` | The instrumentation captures email addresses and metadata to help with debugging and monitoring, while avoiding sensitive email content. ## License MIT