From f3e7cf880b5c2d1d031944afe3b7c45308906313 Mon Sep 17 00:00:00 2001 From: Thibault Le Ouay Date: Thu, 23 Oct 2025 13:06:19 +0200 Subject: [PATCH] Improve logger (#1471) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * sentry+logger test * 🤗 * 🔥 * ci: apply automated fixes * restore * improve logging * ci: apply automated fixes * format * update log * improvel ogging * pnpm log * ci: apply automated fixes * push * update logger * ci: apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- .github/workflows/api-preview.yml | 2 + apps/server/package.json | 2 + apps/server/src/index.ts | 59 ++- apps/server/src/libs/errors/utils.ts | 13 + apps/workflows/fly.toml | 2 +- apps/workflows/package.json | 2 + apps/workflows/src/checker/index.ts | 21 +- apps/workflows/src/index.ts | 84 +++- packages/emails/package.json | 6 +- packages/notifications/email/package.json | 4 +- pnpm-lock.yaml | 492 ++++++++++++---------- 11 files changed, 428 insertions(+), 259 deletions(-) diff --git a/.github/workflows/api-preview.yml b/.github/workflows/api-preview.yml index 96fda360..78329b5e 100644 --- a/.github/workflows/api-preview.yml +++ b/.github/workflows/api-preview.yml @@ -49,6 +49,8 @@ jobs: UPSTASH_REDIS_REST_URL=test UPSTASH_REDIS_REST_TOKEN=test GCP_PROJECT_ID=test + NEXT_PUBLIC_OPENPANEL_CLIENT_ID=test + OPENPANEL_CLIENT_SECRET=test - name: Clean up GitHub environment uses: strumwolf/delete-deployment-environment@v2 diff --git a/apps/server/package.json b/apps/server/package.json index 00bfe9c3..76b667b0 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -15,6 +15,8 @@ "@hono/sentry": "1.2.0", "@hono/zod-openapi": "0.15.1", "@hono/zod-validator": "0.2.2", + "@logtape/logtape": "1.1.2", + "@logtape/sentry": "1.1.2", "@openstatus/analytics": "workspace:*", "@openstatus/assertions": "workspace:*", "@openstatus/db": "workspace:*", diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts index 0db14873..af9497ce 100644 --- a/apps/server/src/index.ts +++ b/apps/server/src/index.ts @@ -1,7 +1,15 @@ +import { AsyncLocalStorage } from "node:async_hooks"; + import { sentry } from "@hono/sentry"; +import { + configureSync, + getConsoleSink, + getLogger, + jsonLinesFormatter, + withContext, +} from "@logtape/logtape"; import { Hono } from "hono"; import { showRoutes } from "hono/dev"; -import { logger } from "hono/logger"; import { prettyJSON } from "hono/pretty-json"; import { requestId } from "hono/request-id"; @@ -10,6 +18,22 @@ import { handleError } from "./libs/errors"; import { publicRoute } from "./routes/public"; import { api } from "./routes/v1"; +configureSync({ + sinks: { + console: getConsoleSink({ formatter: jsonLinesFormatter }), + }, + loggers: [ + { + category: "api-server", + lowestLevel: "debug", + sinks: ["console"], + }, + ], + contextLocalStorage: new AsyncLocalStorage(), +}); + +const logger = getLogger("api-server"); + export const app = new Hono({ strict: false }); /** @@ -17,9 +41,40 @@ export const app = new Hono({ strict: false }); */ app.use("*", sentry({ dsn: process.env.SENTRY_DSN })); app.use("*", requestId()); -app.use("*", logger()); +// app.use("*", logger()); app.use("*", prettyJSON()); +app.use("*", async (c, next) => { + const requestId = c.get("requestId"); + const startTime = Date.now(); + + await withContext( + { + requestId, + method: c.req.method, + url: c.req.url, + userAgent: c.req.header("User-Agent"), + // ipAddress: c.req.header("CF-Connecting-IP") || c.req.header("X-Forwarded-For") + }, + async () => { + logger.info("Request started", { + method: c.req.method, + url: c.req.url, + requestId, + }); + + await next(); + + const duration = Date.now() - startTime; + logger.info("Request completed", { + status: c.res.status, + duration, + requestId, + }); + }, + ); +}); + app.onError(handleError); /** diff --git a/apps/server/src/libs/errors/utils.ts b/apps/server/src/libs/errors/utils.ts index 34114a49..275348c0 100644 --- a/apps/server/src/libs/errors/utils.ts +++ b/apps/server/src/libs/errors/utils.ts @@ -11,8 +11,10 @@ import { } from "@openstatus/error"; import { z } from "@hono/zod-openapi"; +import { getLogger } from "@logtape/logtape"; import { ZodError } from "zod"; +const logger = getLogger("api-server"); export class OpenStatusApiError extends HTTPException { public readonly code: ErrorCode; @@ -82,6 +84,17 @@ export function handleError(err: Error, c: Context): Response { ); } + logger.error("Request error", { + error: { + name: err.name, + message: err.message, + stack: err.stack, + }, + method: c.req.method, + url: c.req.url, + }); + c.get("sentry").captureException(err); + return c.json( { code: "INTERNAL_SERVER_ERROR", diff --git a/apps/workflows/fly.toml b/apps/workflows/fly.toml index f296d21f..141a2479 100644 --- a/apps/workflows/fly.toml +++ b/apps/workflows/fly.toml @@ -32,7 +32,7 @@ primary_region = 'ams' [[http_service.checks]] grace_period = "10s" - interval = "15s" + interval = "1m" method = "GET" timeout = "5s" path = "/ping" diff --git a/apps/workflows/package.json b/apps/workflows/package.json index a9fc8a69..186b793a 100644 --- a/apps/workflows/package.json +++ b/apps/workflows/package.json @@ -9,6 +9,8 @@ "@google-cloud/tasks": "4.0.1", "@hono/sentry": "1.2.2", "@libsql/client": "0.15.15", + "@logtape/logtape": "1.1.2", + "@logtape/sentry": "1.1.2", "@openstatus/db": "workspace:*", "@openstatus/emails": "workspace:*", "@openstatus/notification-discord": "workspace:*", diff --git a/apps/workflows/src/checker/index.ts b/apps/workflows/src/checker/index.ts index c58c5c68..c9299f75 100644 --- a/apps/workflows/src/checker/index.ts +++ b/apps/workflows/src/checker/index.ts @@ -8,6 +8,7 @@ import { selectMonitorSchema, } from "@openstatus/db/src/schema/monitors/validation"; +import { getLogger } from "@logtape/logtape"; import { monitorRegions } from "@openstatus/db/src/schema/constants"; import { Tinybird } from "@openstatus/tinybird"; import { env } from "../env"; @@ -33,10 +34,12 @@ const publishStatus = tb.buildIngestEndpoint({ event: payloadSchema, }); +const logger = getLogger(["workflow"]); + checkerRoute.post("/updateStatus", async (c) => { const auth = c.req.header("Authorization"); if (auth !== `Basic ${env().CRON_SECRET}`) { - console.error("Unauthorized"); + logger.error("Unauthorized"); return c.text("Unauthorized", 401); } @@ -57,7 +60,7 @@ checkerRoute.post("/updateStatus", async (c) => { latency, } = result.data; - console.log(`📝 update monitor status ${JSON.stringify(result.data)}`); + logger.info(`📝 update monitor status ${JSON.stringify(result.data)}`); // First we upsert the monitor status await upsertMonitorStatus({ @@ -145,7 +148,7 @@ checkerRoute.post("/updateStatus", async (c) => { break; } - console.log(`🔄 update monitorStatus ${monitor.id} status: ACTIVE`); + logger.info(`🔄 update monitorStatus ${monitor.id} status: ACTIVE`); await db .update(schema.monitor) .set({ status: "active" }) @@ -173,7 +176,7 @@ checkerRoute.post("/updateStatus", async (c) => { // incident is already resolved break; } - console.log(`🤓 recovering incident ${incident.id}`); + logger.info(`🤓 recovering incident ${incident.id}`); await db .update(incidentTable) @@ -210,7 +213,7 @@ checkerRoute.post("/updateStatus", async (c) => { // already degraded let's return early break; } - console.log(`🔄 update monitorStatus ${monitor.id} status: DEGRADED`); + logger.info(`🔄 update monitorStatus ${monitor.id} status: DEGRADED`); await db .update(schema.monitor) @@ -235,7 +238,7 @@ checkerRoute.post("/updateStatus", async (c) => { break; } - console.log(`🔄 update monitorStatus ${monitor.id} status: ERROR`); + logger.info(`🔄 update monitorStatus ${monitor.id} status: ERROR`); await db .update(schema.monitor) @@ -255,7 +258,7 @@ checkerRoute.post("/updateStatus", async (c) => { ) .get(); if (incident) { - console.log("we are already in incident"); + logger.info("we are already in incident"); break; } const [newIncident] = await db @@ -294,12 +297,12 @@ checkerRoute.post("/updateStatus", async (c) => { .set({ status: "error" }) .where(eq(schema.monitor.id, monitor.id)); } catch { - console.log("incident was already created"); + logger.warning("incident was already created"); } break; default: - console.log("should not happen"); + logger.error("should not happen"); break; } } diff --git a/apps/workflows/src/index.ts b/apps/workflows/src/index.ts index 091ebebe..e4fee7e8 100644 --- a/apps/workflows/src/index.ts +++ b/apps/workflows/src/index.ts @@ -1,23 +1,91 @@ +import { AsyncLocalStorage } from "node:async_hooks"; +// import * as Sentry from "@sentry/node"; import { sentry } from "@hono/sentry"; +import { + configureSync, + getConsoleSink, + getLogger, + jsonLinesFormatter, + withContext, +} from "@logtape/logtape"; +// import { getSentrySink } from "@logtape/sentry"; import { Hono } from "hono"; import { showRoutes } from "hono/dev"; -import { logger } from "hono/logger"; +import { requestId } from "hono/request-id"; +// import { logger } from "hono/logger"; import { checkerRoute } from "./checker"; import { cronRouter } from "./cron"; import { env } from "./env"; const { NODE_ENV, PORT } = env(); -const app = new Hono({ strict: false }) // Add an onError hook to report unhandled exceptions to Sentry. - .onError((err, c) => { - // Report _all_ unhandled errors. - c.get("sentry").captureException(err); - return c.text("Internal Server Error", 500); - }); +configureSync({ + sinks: { + console: getConsoleSink({ formatter: jsonLinesFormatter }), + // sentry: getSentrySink(), + }, + loggers: [ + { + category: "workflow", + lowestLevel: "debug", + sinks: ["console"], + }, + ], + contextLocalStorage: new AsyncLocalStorage(), +}); + +const logger = getLogger(["workflow"]); +const app = new Hono({ strict: false }); + +app.use("*", requestId()); app.use("*", sentry({ dsn: env().SENTRY_DSN })); -app.use("/*", logger()); +app.use("*", async (c, next) => { + const requestId = c.get("requestId"); + const startTime = Date.now(); + + await withContext( + { + requestId, + method: c.req.method, + url: c.req.url, + userAgent: c.req.header("User-Agent"), + // ipAddress: c.req.header("CF-Connecting-IP") || c.req.header("X-Forwarded-For") + }, + async () => { + logger.info("Request started", { + method: c.req.method, + url: c.req.url, + requestId, + }); + + await next(); + + const duration = Date.now() - startTime; + logger.info("Request completed", { + status: c.res.status, + duration, + requestId, + }); + }, + ); +}); + +app.onError((err, c) => { + logger.error("Request error", { + error: { + name: err.name, + message: err.message, + stack: err.stack, + }, + method: c.req.method, + url: c.req.url, + }); + c.get("sentry").captureException(err); + + return c.json({ error: "Internal server error" }, 500); +}); app.get("/", (c) => c.text("workflows", 200)); diff --git a/packages/emails/package.json b/packages/emails/package.json index 76bc4875..81eb79ad 100644 --- a/packages/emails/package.json +++ b/packages/emails/package.json @@ -11,13 +11,13 @@ "license": "ISC", "dependencies": { "@react-email/button": "0.1.0", - "@react-email/components": "0.1.1", + "@react-email/components": "0.5.7", "@react-email/head": "0.0.12", "@react-email/html": "0.0.11", - "@react-email/render": "1.1.3", + "@react-email/render": "1.4.0", "@react-email/tailwind": "1.0.5", "@t3-oss/env-core": "0.7.1", - "react-email": "4.0.17", + "react-email": "4.3.1", "resend": "4.6.0", "zod": "3.24.2" }, diff --git a/packages/notifications/email/package.json b/packages/notifications/email/package.json index 0884935f..822d739b 100644 --- a/packages/notifications/email/package.json +++ b/packages/notifications/email/package.json @@ -9,8 +9,8 @@ "@openstatus/regions": "workspace:*", "@openstatus/tinybird": "workspace:*", "@openstatus/utils": "workspace:*", - "@react-email/components": "0.0.36", - "@react-email/render": "1.0.6", + "@react-email/components": "0.5.7", + "@react-email/render": "1.4.0", "@t3-oss/env-core": "0.7.0", "resend": "4.0.1", "zod": "3.24.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index afb873f6..44524192 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -205,7 +205,7 @@ importers: version: 11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2) '@trpc/next': specifier: 11.4.4 - version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) + version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) '@trpc/react-query': specifier: 11.4.4 version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) @@ -431,6 +431,12 @@ importers: '@hono/zod-validator': specifier: 0.2.2 version: 0.2.2(hono@4.5.3)(zod@3.24.2) + '@logtape/logtape': + specifier: 1.1.2 + version: 1.1.2 + '@logtape/sentry': + specifier: 1.1.2 + version: 1.1.2(@logtape/logtape@1.1.2) '@openstatus/analytics': specifier: workspace:* version: link:../../packages/analytics @@ -659,7 +665,7 @@ importers: version: 1.2.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@sentry/nextjs': specifier: 8.46.0 - version: 8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1) + version: 8.46.0(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1) '@stripe/stripe-js': specifier: 2.1.6 version: 2.1.6 @@ -674,7 +680,7 @@ importers: version: 11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2) '@trpc/next': specifier: 11.4.4 - version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) + version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) '@trpc/react-query': specifier: 11.4.4 version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) @@ -885,7 +891,7 @@ importers: version: 1.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@sentry/nextjs': specifier: 8.46.0 - version: 8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1(esbuild@0.21.5)) + version: 8.46.0(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1(esbuild@0.21.5)) '@stripe/stripe-js': specifier: 2.1.6 version: 2.1.6 @@ -1094,6 +1100,12 @@ importers: '@libsql/client': specifier: 0.15.15 version: 0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5) + '@logtape/logtape': + specifier: 1.1.2 + version: 1.1.2 + '@logtape/sentry': + specifier: 1.1.2 + version: 1.1.2(@logtape/logtape@1.1.2) '@openstatus/db': specifier: workspace:* version: link:../../packages/db @@ -1141,7 +1153,7 @@ importers: version: 2.6.2 drizzle-orm: specifier: 0.44.4 - version: 0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)) + version: 0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)) hono: specifier: 4.5.3 version: 4.5.3 @@ -1298,10 +1310,10 @@ importers: version: 0.7.1(typescript@5.7.2)(zod@3.24.2) drizzle-orm: specifier: 0.44.4 - version: 0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)) + version: 0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)) drizzle-zod: specifier: 0.5.1 - version: 0.5.1(drizzle-orm@0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)))(zod@3.24.2) + version: 0.5.1(drizzle-orm@0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)))(zod@3.24.2) zod: specifier: 3.24.2 version: 3.24.2 @@ -1328,8 +1340,8 @@ importers: specifier: 0.1.0 version: 0.1.0(react@19.2.0) '@react-email/components': - specifier: 0.1.1 - version: 0.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 0.5.7 + version: 0.5.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@react-email/head': specifier: 0.0.12 version: 0.0.12(react@19.2.0) @@ -1337,8 +1349,8 @@ importers: specifier: 0.0.11 version: 0.0.11(react@19.2.0) '@react-email/render': - specifier: 1.1.3 - version: 1.1.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 1.4.0 + version: 1.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@react-email/tailwind': specifier: 1.0.5 version: 1.0.5(react@19.2.0) @@ -1346,8 +1358,8 @@ importers: specifier: 0.7.1 version: 0.7.1(typescript@5.7.2)(zod@3.24.2) react-email: - specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5) + specifier: 4.3.1 + version: 4.3.1(bufferutil@4.0.8)(utf-8-validate@6.0.5) resend: specifier: 4.6.0 version: 4.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -1452,11 +1464,11 @@ importers: specifier: workspace:* version: link:../../utils '@react-email/components': - specifier: 0.0.36 - version: 0.0.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 0.5.7 + version: 0.5.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@react-email/render': - specifier: 1.0.6 - version: 1.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 1.4.0 + version: 1.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@t3-oss/env-core': specifier: 0.7.0 version: 0.7.0(typescript@5.7.2)(zod@3.24.2) @@ -3733,6 +3745,14 @@ packages: cpu: [x64] os: [win32] + '@logtape/logtape@1.1.2': + resolution: {integrity: sha512-4QXa/5cwt3+cx01C1xm8iqvEXxNZMDTTbT5AFGZnwPkn2WDAyA6UP2khWBZ7FctMnvQqW3fnJ96kgBJ4ahorHw==} + + '@logtape/sentry@1.1.2': + resolution: {integrity: sha512-Hmt1traui55R6BvDh8Ug4yXUJVJst9guW3TyA5CyFjGUIvgxmV9uukN6q0rMVfjB1YGxMUPrRYI8ddtYu5RJDg==} + peerDependencies: + '@logtape/logtape': ^1.1.2 + '@mapbox/hast-util-table-cell-style@0.2.0': resolution: {integrity: sha512-gqaTIGC8My3LVSnU38IwjHVKJC94HSonjvFHDk8/aSrApL8v4uWgm8zJkK7MJIIbHuNOr/+Mv2KkQKcxs6LEZA==} engines: {node: '>=12'} @@ -3861,6 +3881,10 @@ packages: '@openpanel/web@1.0.1': resolution: {integrity: sha512-cVZ7Kr9SicczJ/RDIfEtZs8+1iGDzwkabVA/j3NqSl8VSucsC8m1+LVbjmCDzCJNnK4yVn6tEcc9PJRi2rtllw==} + '@opentelemetry/api-logs@0.204.0': + resolution: {integrity: sha512-DqxY8yoAaiBPivoJD4UtgrMS8gEmzZ5lnaxzPojzLVHBGqPxgWm4zcuvcUHZiqQ6kRX2Klel2r9y8cA2HAtqpw==} + engines: {node: '>=8.0.0'} + '@opentelemetry/api-logs@0.52.1': resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==} engines: {node: '>=14'} @@ -3891,6 +3915,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.2.0': + resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/instrumentation-amqplib@0.45.0': resolution: {integrity: sha512-SlKLsOS65NGMIBG1Lh/hLrMDU9WzTUF25apnV6ZmWZB1bBmUwan7qrwwrTu1cL5LzJWCXOdZPuTaxP7pC9qxnQ==} engines: {node: '>=14'} @@ -4035,6 +4065,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.7.0 + '@opentelemetry/instrumentation@0.204.0': + resolution: {integrity: sha512-vV5+WSxktzoMP8JoYWKeopChy6G3HKk4UQ2hESCRDUUTZqQ3+nM3u8noVG0LmNfRWwcFBnbZ71GKC7vaYYdJ1g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation@0.52.1': resolution: {integrity: sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==} engines: {node: '>=14'} @@ -4057,12 +4093,24 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/resources@2.2.0': + resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-trace-base@1.30.0': resolution: {integrity: sha512-RKQDaDIkV7PwizmHw+rE/FgfB2a6MBx+AEVVlAHXRG1YYxLiBpPX2KhmoB99R5vA4b72iJrjle68NDWnbrE9Dg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-base@2.2.0': + resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/semantic-conventions@1.27.0': resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==} engines: {node: '>=14'} @@ -4071,6 +4119,10 @@ packages: resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} + '@opentelemetry/semantic-conventions@1.37.0': + resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==} + engines: {node: '>=14'} + '@opentelemetry/sql-common@0.40.1': resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} engines: {node: '>=14'} @@ -5356,14 +5408,8 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@react-email/body@0.0.11': - resolution: {integrity: sha512-ZSD2SxVSgUjHGrB0Wi+4tu3MEpB4fYSbezsFNEJk2xCWDBkFiOeEsjTmR5dvi+CxTK691hQTQlHv0XWuP7ENTg==} - peerDependencies: - react: ^18.0 || ^19.0 || ^19.0.0-rc - - '@react-email/button@0.0.19': - resolution: {integrity: sha512-HYHrhyVGt7rdM/ls6FuuD6XE7fa7bjZTJqB2byn6/oGsfiEZaogY77OtoLL/mrQHjHjZiJadtAMSik9XLcm7+A==} - engines: {node: '>=18.0.0'} + '@react-email/body@0.1.0': + resolution: {integrity: sha512-o1bcSAmDYNNHECbkeyceCVPGmVsYvT+O3sSO/Ct7apKUu3JphTi31hu+0Nwqr/pgV5QFqdoT5vdS3SW5DJFHgQ==} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5373,8 +5419,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/code-block@0.0.12': - resolution: {integrity: sha512-Faw3Ij9+/Qwq6moWaeHnV8Hn7ekc/EqyAzPi6yUar21dhcqYugCC4Da1x4d9nA9zC0H9KU3lYVJczh8D3cA+Eg==} + '@react-email/button@0.2.0': + resolution: {integrity: sha512-8i+v6cMxr2emz4ihCrRiYJPp2/sdYsNNsBzXStlcA+/B9Umpm5Jj3WJKYpgTPM+aeyiqlG/MMI1AucnBm4f1oQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5397,14 +5443,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/components@0.0.36': - resolution: {integrity: sha512-VMh+OQplAnG8JMLlJjdnjt+ThJZ+JVkp0q2YMS2NEz+T88N22bLD2p7DZO0QgtNaKgumOhJI/0a2Q7VzCrwu5g==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^18.0 || ^19.0 || ^19.0.0-rc - - '@react-email/components@0.1.1': - resolution: {integrity: sha512-NyPuoqd1o77HL4+58pBrpk3e5/0UZLNU11/OBnE59F2MCZ8IaZX+55Ce+HR5itKTMdqlgfncz7sGA1TDITo41g==} + '@react-email/components@0.5.7': + resolution: {integrity: sha512-ECyVoyDcev2FSQ7C0buXaIJ0+6MRDXNUbCOZwBRrlLdCCRjap2b4+MHrYSTXFzo5kqfjjRoyo/2PbJXFQni67g==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5456,20 +5496,8 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/markdown@0.0.14': - resolution: {integrity: sha512-5IsobCyPkb4XwnQO8uFfGcNOxnsg3311GRXhJ3uKv51P7Jxme4ycC/MITnwIZ10w2zx7HIyTiqVzTj4XbuIHbg==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^18.0 || ^19.0 || ^19.0.0-rc - - '@react-email/markdown@0.0.15': - resolution: {integrity: sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^18.0 || ^19.0 || ^19.0.0-rc - - '@react-email/preview@0.0.12': - resolution: {integrity: sha512-g/H5fa9PQPDK6WUEG7iTlC19sAktI23qyoiJtMLqQiXFCfWeQMhqjLGKeLSKkfzszqmfJCjZtpSiKtBoOdxp3Q==} + '@react-email/markdown@0.0.16': + resolution: {integrity: sha512-KSUHmoBMYhvc6iGwlIDkm0DRGbGQ824iNjLMCJsBVUoKHGQYs7F/N3b1tnS1YzRUX+GwHIexSsHuIUEi1m+8OQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5487,13 +5515,6 @@ packages: react: ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/render@1.0.6': - resolution: {integrity: sha512-zNueW5Wn/4jNC1c5LFgXzbUdv5Lhms+FWjOvWAhal7gx5YVf0q6dPJ0dnR70+ifo59gcMLwCZEaTS9EEuUhKvQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/render@1.1.2': resolution: {integrity: sha512-RnRehYN3v9gVlNMehHPHhyp2RQo7+pSkHDtXPvg3s0GbzM9SQMW4Qrf8GRNvtpLC4gsI+Wt0VatNRUFqjvevbw==} engines: {node: '>=18.0.0'} @@ -5501,8 +5522,8 @@ packages: react: ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/render@1.1.3': - resolution: {integrity: sha512-TjjF1tdTmOqYEIWWg9wMx5q9JbQRbWmnG7owQbSGEHkNfc/c/vBu7hjfrki907lgQEAkYac9KPTyIjOKhvhJCg==} + '@react-email/render@1.4.0': + resolution: {integrity: sha512-ZtJ3noggIvW1ZAryoui95KJENKdCzLmN5F7hyZY1F/17B1vwzuxHB7YkuCg0QqHjDivc5axqYEYdIOw4JIQdUw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5520,20 +5541,14 @@ packages: peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/tailwind@1.0.4': - resolution: {integrity: sha512-tJdcusncdqgvTUYZIuhNC6LYTfL9vNTSQpwWdTCQhQ1lsrNCEE4OKCSdzSV3S9F32pi0i0xQ+YPJHKIzGjdTSA==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/tailwind@1.0.5': resolution: {integrity: sha512-BH00cZSeFfP9HiDASl+sPHi7Hh77W5nzDgdnxtsVr/m3uQD9g180UwxcE3PhOfx0vRdLzQUU8PtmvvDfbztKQg==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc - '@react-email/text@0.1.1': - resolution: {integrity: sha512-Zo9tSEzkO3fODLVH1yVhzVCiwETfeEL5wU93jXKWo2DHoMuiZ9Iabaso3T0D0UjhrCB1PBMeq2YiejqeToTyIQ==} + '@react-email/tailwind@1.2.2': + resolution: {integrity: sha512-heO9Khaqxm6Ulm6p7HQ9h01oiiLRrZuuEQuYds/O7Iyp3c58sMVHZGIxiRXO/kSs857NZQycpjewEVKF3jhNTw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0 || ^19.0 || ^19.0.0-rc @@ -5777,6 +5792,10 @@ packages: resolution: {integrity: sha512-ixm8NISFlPlEo3FjSaqmq4nnd13BRHoafwJ5MG+okCz6BKGZ1SexEggP42/QpGvDprUUHnfncG6WUMgcarr1zA==} engines: {node: '>=14.18'} + '@sentry/core@9.46.0': + resolution: {integrity: sha512-it7JMFqxVproAgEtbLgCVBYtQ9fIb+Bu0JD+cEplTN/Ukpe6GaolyYib5geZqslVxhp2sQgT+58aGvfd/k0N8Q==} + engines: {node: '>=18'} + '@sentry/nextjs@8.46.0': resolution: {integrity: sha512-d3FH1tlMeXTiJ3L3N0M/KyZUBLP7vFG7t2HsPIyRqBI1PUFaXupS0htcqNcDg2zssbrECNv5YWSgSMbW4HMt3g==} engines: {node: '>=14.18'} @@ -6571,8 +6590,8 @@ packages: '@types/pg-pool@2.0.6': resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} - '@types/pg@8.11.10': - resolution: {integrity: sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==} + '@types/pg@8.15.5': + resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==} '@types/pg@8.6.1': resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} @@ -7202,6 +7221,9 @@ packages: resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + cjs-module-lexer@1.4.1: resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} @@ -7348,9 +7370,16 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + constant-case@2.0.0: resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} @@ -8040,6 +8069,9 @@ packages: expressive-code@0.41.2: resolution: {integrity: sha512-aLZiZaqorRtNExtGpUjK9zFH9aTpWeoTXMyLo4b4IcuXfPqtLPPxhRm/QlPb8QqIcMMXnSiGRHSFpQfX0m7HJw==} + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -8553,6 +8585,9 @@ packages: import-in-the-middle@1.12.0: resolution: {integrity: sha512-yAgSE7GmtRcu4ZUSFX/4v69UGXwugFFSdIQJ14LHPOPPQrWv8Y7O9PHsw8Ovk7bKCLe4sjXMbZFqGFcLHpZ89w==} + import-in-the-middle@1.15.0: + resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} @@ -9127,20 +9162,15 @@ packages: markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} - marked@7.0.4: - resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==} - engines: {node: '>= 16'} + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} hasBin: true math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - md-to-react-email@5.0.5: - resolution: {integrity: sha512-OvAXqwq57uOk+WZqFFNCMZz8yDp8BD3WazW1wAKHUrPbbdr89K9DWS6JXY09vd9xNdPNeurI8DU/X4flcfaD8A==} - peerDependencies: - react: ^18.0 || ^19.0 - mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} @@ -9562,6 +9592,9 @@ packages: module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -9805,6 +9838,11 @@ packages: react-router-dom: optional: true + nypm@0.6.0: + resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + oauth4webapi@3.5.3: resolution: {integrity: sha512-2bnHosmBLAQpXNBLOvaJMyMkr4Yya5ohE5Q9jqyxiN+aa7GFCzvDN1RRRMrp0NkfqRR2MTaQNkcSUCCjILD9oQ==} @@ -9827,9 +9865,6 @@ packages: resolution: {integrity: sha512-+8hwcz/JnQ9EpLIXzN0Rs7DLsBpJNT/xYehtB/jU93tHYr5BFEO8E+JGQNOSqE7opVzz5cGksKFHt7uUJVLSjQ==} engines: {node: '>=0.10.0'} - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} @@ -10040,10 +10075,6 @@ packages: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-numeric@1.0.2: - resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} - engines: {node: '>=4'} - pg-protocol@1.10.3: resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==} @@ -10051,10 +10082,6 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg-types@4.0.2: - resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} - engines: {node: '>=10'} - phenomenon@1.6.0: resolution: {integrity: sha512-7h9/fjPD3qNlgggzm88cY58l9sudZ6Ey+UmZsizfhtawO6E3srZQXywaNm2lBwT72TbpHYRPy7ytIHeBUD/G0A==} @@ -10087,6 +10114,9 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-core@1.46.0: resolution: {integrity: sha512-9Y/d5UIwuJk8t3+lhmMSAJyNP1BUC/DqP3cQJDQQL/oWqAiuPTLgy7Q5dzglmTLwcBRdetzgNM/gni7ckfTr6A==} engines: {node: '>=18'} @@ -10143,37 +10173,18 @@ packages: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} - postgres-array@3.0.4: - resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} - engines: {node: '>=12'} - postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} - postgres-bytea@3.0.0: - resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} - engines: {node: '>= 6'} - postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} - postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - postgres-interval@3.0.0: - resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} - engines: {node: '>=12'} - - postgres-range@1.1.4: - resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - preact-render-to-string@6.5.11: resolution: {integrity: sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==} peerDependencies: @@ -10192,11 +10203,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} - engines: {node: '>=14'} - hasBin: true - prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} @@ -10311,8 +10317,8 @@ packages: peerDependencies: react: ^19.2.0 - react-email@4.0.17: - resolution: {integrity: sha512-Wppdxgio/QKNe3piccIhk6jvgiLwfOTAwud5t/NlWL8wepsirgXo09OyZCz62Qb9flFNBw+Hz5ahOkpk3JaizQ==} + react-email@4.3.1: + resolution: {integrity: sha512-GBgI7fl0fXVFVQ4zlXG+x14egDNX1WVlOrAXKMyc1h9xeTnIAt/u3g1liU4v+7Yv3yprMSkZ1mIO3YPuTKo77A==} engines: {node: '>=18.0.0'} hasBin: true @@ -14277,6 +14283,13 @@ snapshots: '@libsql/win32-x64-msvc@0.5.22': optional: true + '@logtape/logtape@1.1.2': {} + + '@logtape/sentry@1.1.2(@logtape/logtape@1.1.2)': + dependencies: + '@logtape/logtape': 1.1.2 + '@sentry/core': 9.46.0 + '@mapbox/hast-util-table-cell-style@0.2.0': dependencies: unist-util-visit: 1.4.1 @@ -14429,6 +14442,10 @@ snapshots: dependencies: '@openpanel/sdk': 1.0.0 + '@opentelemetry/api-logs@0.204.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs@0.52.1': dependencies: '@opentelemetry/api': 1.9.0 @@ -14453,6 +14470,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/instrumentation-amqplib@0.45.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14661,6 +14683,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.204.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.4.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14693,6 +14724,12 @@ snapshots: '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14700,10 +14737,19 @@ snapshots: '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 + '@opentelemetry/semantic-conventions@1.27.0': {} '@opentelemetry/semantic-conventions@1.28.0': {} + '@opentelemetry/semantic-conventions@1.37.0': {} + '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16082,11 +16128,7 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@react-email/body@0.0.11(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@react-email/button@0.0.19(react@19.2.0)': + '@react-email/body@0.1.0(react@19.2.0)': dependencies: react: 19.2.0 @@ -16094,9 +16136,8 @@ snapshots: dependencies: react: 19.2.0 - '@react-email/code-block@0.0.12(react@19.2.0)': + '@react-email/button@0.2.0(react@19.2.0)': dependencies: - prismjs: 1.30.0 react: 19.2.0 '@react-email/code-block@0.1.0(react@19.2.0)': @@ -16112,36 +16153,10 @@ snapshots: dependencies: react: 19.2.0 - '@react-email/components@0.0.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@react-email/body': 0.0.11(react@19.2.0) - '@react-email/button': 0.0.19(react@19.2.0) - '@react-email/code-block': 0.0.12(react@19.2.0) - '@react-email/code-inline': 0.0.5(react@19.2.0) - '@react-email/column': 0.0.13(react@19.2.0) - '@react-email/container': 0.0.15(react@19.2.0) - '@react-email/font': 0.0.9(react@19.2.0) - '@react-email/head': 0.0.12(react@19.2.0) - '@react-email/heading': 0.0.15(react@19.2.0) - '@react-email/hr': 0.0.11(react@19.2.0) - '@react-email/html': 0.0.11(react@19.2.0) - '@react-email/img': 0.0.11(react@19.2.0) - '@react-email/link': 0.0.12(react@19.2.0) - '@react-email/markdown': 0.0.14(react@19.2.0) - '@react-email/preview': 0.0.12(react@19.2.0) - '@react-email/render': 1.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-email/row': 0.0.12(react@19.2.0) - '@react-email/section': 0.0.16(react@19.2.0) - '@react-email/tailwind': 1.0.4(react@19.2.0) - '@react-email/text': 0.1.1(react@19.2.0) - react: 19.2.0 - transitivePeerDependencies: - - react-dom - - '@react-email/components@0.1.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@react-email/components@0.5.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@react-email/body': 0.0.11(react@19.2.0) - '@react-email/button': 0.1.0(react@19.2.0) + '@react-email/body': 0.1.0(react@19.2.0) + '@react-email/button': 0.2.0(react@19.2.0) '@react-email/code-block': 0.1.0(react@19.2.0) '@react-email/code-inline': 0.0.5(react@19.2.0) '@react-email/column': 0.0.13(react@19.2.0) @@ -16153,12 +16168,12 @@ snapshots: '@react-email/html': 0.0.11(react@19.2.0) '@react-email/img': 0.0.11(react@19.2.0) '@react-email/link': 0.0.12(react@19.2.0) - '@react-email/markdown': 0.0.15(react@19.2.0) + '@react-email/markdown': 0.0.16(react@19.2.0) '@react-email/preview': 0.0.13(react@19.2.0) - '@react-email/render': 1.1.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-email/render': 1.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@react-email/row': 0.0.12(react@19.2.0) '@react-email/section': 0.0.16(react@19.2.0) - '@react-email/tailwind': 1.0.5(react@19.2.0) + '@react-email/tailwind': 1.2.2(react@19.2.0) '@react-email/text': 0.1.5(react@19.2.0) react: 19.2.0 transitivePeerDependencies: @@ -16196,18 +16211,9 @@ snapshots: dependencies: react: 19.2.0 - '@react-email/markdown@0.0.14(react@19.2.0)': - dependencies: - md-to-react-email: 5.0.5(react@19.2.0) - react: 19.2.0 - - '@react-email/markdown@0.0.15(react@19.2.0)': - dependencies: - md-to-react-email: 5.0.5(react@19.2.0) - react: 19.2.0 - - '@react-email/preview@0.0.12(react@19.2.0)': + '@react-email/markdown@0.0.16(react@19.2.0)': dependencies: + marked: 15.0.12 react: 19.2.0 '@react-email/preview@0.0.13(react@19.2.0)': @@ -16222,14 +16228,6 @@ snapshots: react-dom: 19.2.0(react@19.2.0) react-promise-suspense: 0.3.4 - '@react-email/render@1.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - html-to-text: 9.0.5 - prettier: 3.5.3 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-promise-suspense: 0.3.4 - '@react-email/render@1.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: html-to-text: 9.0.5 @@ -16238,7 +16236,7 @@ snapshots: react-dom: 19.2.0(react@19.2.0) react-promise-suspense: 0.3.4 - '@react-email/render@1.1.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@react-email/render@1.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: html-to-text: 9.0.5 prettier: 3.6.2 @@ -16254,15 +16252,11 @@ snapshots: dependencies: react: 19.2.0 - '@react-email/tailwind@1.0.4(react@19.2.0)': - dependencies: - react: 19.2.0 - '@react-email/tailwind@1.0.5(react@19.2.0)': dependencies: react: 19.2.0 - '@react-email/text@0.1.1(react@19.2.0)': + '@react-email/tailwind@1.2.2(react@19.2.0)': dependencies: react: 19.2.0 @@ -16475,6 +16469,8 @@ snapshots: '@sentry/types': 8.9.2 '@sentry/utils': 8.9.2 + '@sentry/core@9.46.0': {} + '@sentry/nextjs@8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16501,7 +16497,7 @@ snapshots: - supports-color - webpack - '@sentry/nextjs@8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1(esbuild@0.21.5))': + '@sentry/nextjs@8.46.0(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1(esbuild@0.21.5))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 @@ -16509,7 +16505,7 @@ snapshots: '@sentry-internal/browser-utils': 8.46.0 '@sentry/core': 8.46.0 '@sentry/node': 8.46.0 - '@sentry/opentelemetry': 8.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0) + '@sentry/opentelemetry': 8.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0) '@sentry/react': 8.46.0(react@19.2.0) '@sentry/vercel-edge': 8.46.0 '@sentry/webpack-plugin': 2.22.7(encoding@0.1.13)(webpack@5.97.1(esbuild@0.21.5)) @@ -16527,6 +16523,32 @@ snapshots: - supports-color - webpack + '@sentry/nextjs@8.46.0(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.28.0 + '@rollup/plugin-commonjs': 28.0.1(rollup@3.29.5) + '@sentry-internal/browser-utils': 8.46.0 + '@sentry/core': 8.46.0 + '@sentry/node': 8.46.0 + '@sentry/opentelemetry': 8.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0) + '@sentry/react': 8.46.0(react@19.2.0) + '@sentry/vercel-edge': 8.46.0 + '@sentry/webpack-plugin': 2.22.7(encoding@0.1.13)(webpack@5.97.1) + chalk: 3.0.0 + next: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + resolve: 1.22.8 + rollup: 3.29.5 + stacktrace-parser: 0.1.10 + transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/instrumentation' + - '@opentelemetry/sdk-trace-base' + - encoding + - react + - supports-color + - webpack + '@sentry/node@8.46.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -16576,6 +16598,15 @@ snapshots: '@opentelemetry/semantic-conventions': 1.28.0 '@sentry/core': 8.46.0 + '@sentry/opentelemetry@8.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + '@sentry/core': 8.46.0 + '@sentry/react@8.46.0(react@19.2.0)': dependencies: '@sentry/browser': 8.46.0 @@ -17265,7 +17296,7 @@ snapshots: '@tanstack/react-query': 5.80.7(react@19.2.0) '@trpc/react-query': 11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) - '@trpc/next@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2)': + '@trpc/next@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2)': dependencies: '@trpc/client': 11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2) '@trpc/server': 11.4.4(typescript@5.7.2) @@ -17533,13 +17564,13 @@ snapshots: '@types/pg-pool@2.0.6': dependencies: - '@types/pg': 8.11.10 + '@types/pg': 8.15.5 - '@types/pg@8.11.10': + '@types/pg@8.15.5': dependencies: '@types/node': 24.0.8 pg-protocol: 1.10.3 - pg-types: 4.0.2 + pg-types: 2.2.0 '@types/pg@8.6.1': dependencies: @@ -18384,6 +18415,10 @@ snapshots: ci-info@4.3.0: {} + citty@0.1.6: + dependencies: + consola: 3.4.2 + cjs-module-lexer@1.4.1: {} class-variance-authority@0.7.0: @@ -18526,11 +18561,15 @@ snapshots: confbox@0.1.8: {} + confbox@0.2.2: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 proto-list: 1.2.4 + consola@3.4.2: {} + constant-case@2.0.0: dependencies: snake-case: 2.1.0 @@ -18827,19 +18866,19 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)): + drizzle-orm@0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)): optionalDependencies: '@cloudflare/workers-types': 4.20250303.0 '@libsql/client': 0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5) '@libsql/client-wasm': 0.14.0 '@opentelemetry/api': 1.9.0 - '@types/pg': 8.11.10 + '@types/pg': 8.15.5 better-sqlite3: 11.7.0 bun-types: 1.3.0(@types/react@19.2.2) - drizzle-zod@0.5.1(drizzle-orm@0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)))(zod@3.24.2): + drizzle-zod@0.5.1(drizzle-orm@0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)))(zod@3.24.2): dependencies: - drizzle-orm: 0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)) + drizzle-orm: 0.44.4(@cloudflare/workers-types@4.20250303.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.15.15(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(better-sqlite3@11.7.0)(bun-types@1.3.0(@types/react@19.2.2)) zod: 3.24.2 dset@3.1.4: {} @@ -19213,6 +19252,8 @@ snapshots: '@expressive-code/plugin-shiki': 0.41.2 '@expressive-code/plugin-text-markers': 0.41.2 + exsolve@1.0.7: {} + extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 @@ -19977,6 +20018,13 @@ snapshots: cjs-module-lexer: 1.4.1 module-details-from-path: 1.0.3 + import-in-the-middle@1.15.0: + dependencies: + acorn: 8.15.0 + acorn-import-attributes: 1.9.5(acorn@8.15.0) + cjs-module-lexer: 1.4.1 + module-details-from-path: 1.0.4 + import-meta-resolve@4.1.0: {} import-meta-resolve@4.2.0: {} @@ -20495,15 +20543,10 @@ snapshots: markdown-table@3.0.3: {} - marked@7.0.4: {} + marked@15.0.12: {} math-intrinsics@1.1.0: {} - md-to-react-email@5.0.5(react@19.2.0): - dependencies: - marked: 7.0.4 - react: 19.2.0 - mdast-util-definitions@5.1.2: dependencies: '@types/mdast': 3.0.14 @@ -21376,6 +21419,8 @@ snapshots: module-details-from-path@1.0.3: {} + module-details-from-path@1.0.4: {} + mri@1.2.0: {} mrmime@2.0.1: {} @@ -21577,6 +21622,14 @@ snapshots: optionalDependencies: next: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + nypm@0.6.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 0.3.2 + oauth4webapi@3.5.3: {} object-assign@4.1.1: {} @@ -21589,8 +21642,6 @@ snapshots: object-values@1.0.0: {} - obuf@1.1.2: {} - ofetch@1.4.1: dependencies: destr: 2.0.3 @@ -21844,8 +21895,6 @@ snapshots: pg-int8@1.0.1: {} - pg-numeric@1.0.2: {} - pg-protocol@1.10.3: {} pg-types@2.2.0: @@ -21856,16 +21905,6 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg-types@4.0.2: - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.4 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 - phenomenon@1.6.0: {} picocolors@1.0.0: {} @@ -21888,6 +21927,12 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + playwright-core@1.46.0: {} playwright@1.46.0: @@ -21949,26 +21994,14 @@ snapshots: postgres-array@2.0.0: {} - postgres-array@3.0.4: {} - postgres-bytea@1.0.0: {} - postgres-bytea@3.0.0: - dependencies: - obuf: 1.1.2 - postgres-date@1.0.7: {} - postgres-date@2.1.0: {} - postgres-interval@1.2.0: dependencies: xtend: 4.0.2 - postgres-interval@3.0.0: {} - - postgres-range@1.1.4: {} - preact-render-to-string@6.5.11(preact@10.24.3): dependencies: preact: 10.24.3 @@ -21994,8 +22027,6 @@ snapshots: prettier@2.8.7: optional: true - prettier@3.5.3: {} - prettier@3.6.2: {} pretty-ms@9.0.0: @@ -22127,33 +22158,26 @@ snapshots: react: 19.2.0 scheduler: 0.27.0 - react-email@4.0.17(@opentelemetry/api@1.9.0)(bufferutil@4.0.8)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5): + react-email@4.3.1(bufferutil@4.0.8)(utf-8-validate@6.0.5): dependencies: - '@babel/parser': 7.27.7 - '@babel/traverse': 7.27.7 - chalk: 5.4.1 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 chokidar: 4.0.3 commander: 13.1.0 debounce: 2.2.0 esbuild: 0.25.5 glob: 11.0.3 + jiti: 2.4.2 log-symbols: 7.0.1 mime-types: 3.0.1 - next: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) normalize-path: 3.0.0 + nypm: 0.6.0 ora: 8.2.0 + prompts: 2.4.2 socket.io: 4.8.1(bufferutil@4.0.8)(utf-8-validate@6.0.5) tsconfig-paths: 4.2.0 transitivePeerDependencies: - - '@babel/core' - - '@opentelemetry/api' - - '@playwright/test' - - babel-plugin-macros - - babel-plugin-react-compiler - bufferutil - - react - - react-dom - - sass - supports-color - utf-8-validate -- 2.51.2