Observed since 20 Oct, 22:00 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Resend wrapper with structured logging, retries, and a uniform send API. Templates live in the consuming app.
Resend wrapper. Bearer auth, retry on 5xx, terminal on 4xx (no infinite-loop on permanent client errors), idempotency-key passthrough, structured logging hook.
import { makeEmailClient } from "@021.is/spine-email";
const email = makeEmailClient({
apiKey: env.RESEND_API_KEY,
defaultFrom: "My App <noreply@example.com>",
retries: 2,
logger: console, // optional pino-compatible logger
});
await email.send({
to: "you@example.com",
subject: "Welcome to My App",
html: renderToString(<WelcomeEmail name="Sam" />),
tags: { app: "my-app", flow: "signup" },
idempotencyKey: `signup-${userId}`,
});
retries more attempts (default 2)SomethingWentWrongException immediately, no retries (4xx is permanent — looping wastes time + money)html and text → throwsidempotency-key header when provided (Resend dedupes server-side)Templates live in the consuming app (React Email, MJML, plain HTML — your call). spine-email is just the transport.
fetchDefault fetch has no retry, no logging, no terminal-on-4xx logic, no idempotency. After the third app reimplemented it, it became a package.
npm · 90 observations shown. Missing days are unknown.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-22 – 2026-10-22 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-21 – 2026-10-21 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-20 – 2026-10-20 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-19 – 2026-10-19 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-18 – 2026-10-18 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-17 – 2026-10-17 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-16 – 2026-10-16 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-15 – 2026-10-15 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-14 – 2026-10-14 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-13 – 2026-10-13 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-12 – 2026-10-12 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-11 – 2026-10-11 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-10 – 2026-10-10 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-09 – 2026-10-09 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-08 – 2026-10-08 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-07 – 2026-10-07 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-06 – 2026-10-06 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-05 – 2026-10-05 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-04 – 2026-10-04 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-03 – 2026-10-03 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-02 – 2026-10-02 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-10-01 – 2026-10-01 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-30 – 2026-09-30 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-29 – 2026-09-29 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-28 – 2026-09-28 | 3 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-27 – 2026-09-27 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-26 – 2026-09-26 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-25 – 2026-09-25 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-24 – 2026-09-24 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-23 – 2026-09-23 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-22 – 2026-09-22 | 11 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-21 – 2026-09-21 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-20 – 2026-09-20 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-19 – 2026-09-19 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-18 – 2026-09-18 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-17 – 2026-09-17 | 38 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-16 – 2026-09-16 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-15 – 2026-09-15 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-14 – 2026-09-14 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-13 – 2026-09-13 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-12 – 2026-09-12 | 4 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-11 – 2026-09-11 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-10 – 2026-09-10 | 3 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-09 – 2026-09-09 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-08 – 2026-09-08 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-07 – 2026-09-07 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-06 – 2026-09-06 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-05 – 2026-09-05 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-04 – 2026-09-04 | 10 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-03 – 2026-09-03 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-02 – 2026-09-02 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-09-01 – 2026-09-01 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-31 – 2026-08-31 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-30 – 2026-08-30 | 6 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-29 – 2026-08-29 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-28 – 2026-08-28 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-27 – 2026-08-27 | 3 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-26 – 2026-08-26 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-25 – 2026-08-25 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-24 – 2026-08-24 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-23 – 2026-08-23 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-22 – 2026-08-22 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-21 – 2026-08-21 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-20 – 2026-08-20 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-19 – 2026-08-19 | 3 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-18 – 2026-08-18 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-17 – 2026-08-17 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-16 – 2026-08-16 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-15 – 2026-08-15 | 5 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-14 – 2026-08-14 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-13 – 2026-08-13 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-12 – 2026-08-12 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-11 – 2026-08-11 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-10 – 2026-08-10 | 7 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-09 – 2026-08-09 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-08 – 2026-08-08 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-07 – 2026-08-07 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-06 – 2026-08-06 | 3 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-05 – 2026-08-05 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-04 – 2026-08-04 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-03 – 2026-08-03 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-02 – 2026-08-02 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-08-01 – 2026-08-01 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-07-31 – 2026-07-31 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-07-30 – 2026-07-30 | 1 | 2026-10-23T21:07:50.2765230Z |
| 2026-07-29 – 2026-07-29 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-07-28 – 2026-07-28 | 2 | 2026-10-23T21:07:50.2765230Z |
| 2026-07-27 – 2026-07-27 | 0 | 2026-10-23T21:07:50.2765230Z |
| 2026-07-26 – 2026-07-26 | 4 | 2026-10-23T21:07:50.2765230Z |
| 2026-07-25 – 2026-07-25 | 2 | 2026-10-23T21:07:50.2765230Z |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 22:00 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:bfc370cbb79d97e0b19773af1272e7841d9dc2910f321a2dec9d6b8d79a4fcf9