From cfbcd0f95b46aba5945dcd2bf988196a3fcf3b69 Mon Sep 17 00:00:00 2001 From: Volnei Munhoz Date: Wed, 14 Jan 2026 09:29:09 -0300 Subject: [PATCH] chore: upgrade sentry and start using metrics for Calendar Cache (#26827) * upgrade sentry and start using metrics * format changes * format changes * format changes * type error * type error * format changes * format changes * fix: add updateSyncStatus call on API error and mock Sentry metrics in tests Co-Authored-By: Volnei Munhoz --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- apps/api/v1/package.json | 2 +- apps/web/package.json | 2 +- packages/app-store/_utils/getCalendar.ts | 1 + .../lib/CalendarSubscriptionService.ts | 441 +++++---- .../CalendarSubscriptionService.test.ts | 7 + .../lib/cache/CalendarCacheWrapper.ts | 269 +++--- .../lib/telemetry/CalendarTelemetryWrapper.ts | 194 ++-- yarn.lock | 904 +++++++++++++----- 8 files changed, 1155 insertions(+), 665 deletions(-) diff --git a/apps/api/v1/package.json b/apps/api/v1/package.json index 5972bbee32..6b7e399e09 100644 --- a/apps/api/v1/package.json +++ b/apps/api/v1/package.json @@ -33,7 +33,7 @@ "@calcom/prisma": "workspace:*", "@calcom/trpc": "workspace:*", "@prisma/nextjs-monorepo-workaround-plugin": "6.16.1", - "@sentry/nextjs": "9.15.0", + "@sentry/nextjs": "10.33.0", "bcryptjs": "2.4.3", "memory-cache": "0.2.0", "next": "16.1.0", diff --git a/apps/web/package.json b/apps/web/package.json index 4c4261a8a3..9bbd0849c4 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -75,7 +75,7 @@ "@radix-ui/react-switch": "1.1.0", "@radix-ui/react-toggle-group": "1.0.4", "@radix-ui/react-tooltip": "1.0.6", - "@sentry/nextjs": "9.15.0", + "@sentry/nextjs": "10.33.0", "@stripe/react-stripe-js": "1.10.0", "@stripe/stripe-js": "1.35.0", "@tanstack/react-query": "5.17.19", diff --git a/packages/app-store/_utils/getCalendar.ts b/packages/app-store/_utils/getCalendar.ts index 32b2880fbc..d7055b9a1e 100644 --- a/packages/app-store/_utils/getCalendar.ts +++ b/packages/app-store/_utils/getCalendar.ts @@ -112,6 +112,7 @@ export const getCalendar = async ( cacheSupported: isCacheSupported, cacheEnabled: useCache, credentialId: credential.id, + mode, }); } diff --git a/packages/features/calendar-subscription/lib/CalendarSubscriptionService.ts b/packages/features/calendar-subscription/lib/CalendarSubscriptionService.ts index ae0c86392d..99f95831e4 100644 --- a/packages/features/calendar-subscription/lib/CalendarSubscriptionService.ts +++ b/packages/features/calendar-subscription/lib/CalendarSubscriptionService.ts @@ -12,7 +12,7 @@ import type { CalendarSyncService } from "@calcom/features/calendar-subscription import type { FeaturesRepository } from "@calcom/features/flags/features.repository"; import type { ISelectedCalendarRepository } from "@calcom/features/selectedCalendar/repositories/SelectedCalendarRepository.interface"; import logger from "@calcom/lib/logger"; -import { withSpan } from "@calcom/lib/sentryWrapper"; +import { metrics } from "@sentry/nextjs"; import type { SelectedCalendar } from "@calcom/prisma/client"; // biome-ignore lint/nursery/useExplicitType: logger type is inferred @@ -68,7 +68,6 @@ export class CalendarSubscriptionService { syncSubscribedAt: new Date(), }); - // initial event loading await this.processEvents(selectedCalendar); } @@ -112,93 +111,96 @@ export class CalendarSubscriptionService { /** * Process webhook */ - // biome-ignore lint/nursery/useExplicitType: return type is inferred from withSpan // biome-ignore lint/complexity/noExcessiveLinesPerFunction: webhook processing requires multiple steps - async processWebhook(provider: CalendarSubscriptionProvider, request: Request) { - return withSpan( - { - name: "CalendarSubscriptionService.processWebhook", - op: "calendar.subscription.webhook", - attributes: { - provider, - }, - }, - // biome-ignore lint/complexity/noExcessiveLinesPerFunction: webhook processing requires multiple steps - async (span) => { - const startTime = performance.now(); - log.debug("processWebhook", { provider }); + async processWebhook( + provider: CalendarSubscriptionProvider, + request: Request + ) { + const startTime = performance.now(); + log.debug("processWebhook", { provider }); - try { - const calendarSubscriptionAdapter = this.deps.adapterFactory.get(provider); + try { + const calendarSubscriptionAdapter = + this.deps.adapterFactory.get(provider); - const isValid = await calendarSubscriptionAdapter.validate(request); - if (!isValid) { - span.setAttribute("success", false); - span.setAttribute("errorMessage", "Invalid webhook request"); - throw new Error("Invalid webhook request"); - } - - const channelId = await calendarSubscriptionAdapter.extractChannelId(request); - if (!channelId) { - span.setAttribute("success", false); - span.setAttribute("errorMessage", "Missing channel ID in webhook"); - throw new Error("Missing channel ID in webhook"); - } - - log.debug("Processing webhook", { channelId }); - span.setAttribute("channelId", channelId); - - const selectedCalendar = await this.deps.selectedCalendarRepository.findByChannelId(channelId); - // it maybe caused by an old subscription being triggered - if (!selectedCalendar) { - span.setAttribute("success", true); - span.setAttribute("skipped", true); - span.setAttribute("skipReason", "Calendar not found for channel"); - log.info("Webhook processed - calendar not found", { - provider, - channelId, - durationMs: performance.now() - startTime, - }); - return null; - } - - span.setAttribute("selectedCalendarId", selectedCalendar.id); - span.setAttribute("userId", selectedCalendar.userId); - - // incremental event loading - const eventsProcessed = await this.processEvents(selectedCalendar); - - const durationMs = performance.now() - startTime; - span.setAttribute("success", true); - span.setAttribute("durationMs", durationMs); - span.setAttribute("eventsProcessedCount", eventsProcessed.eventsFetched); - span.setAttribute("eventsCachedCount", eventsProcessed.eventsCached); - span.setAttribute("eventsSyncedCount", eventsProcessed.eventsSynced); - - log.info("Webhook processed successfully", { - provider, - channelId, - selectedCalendarId: selectedCalendar.id, - durationMs, - }); - } catch (error) { - const durationMs = performance.now() - startTime; - span.setAttribute("success", false); - span.setAttribute("durationMs", durationMs); - // biome-ignore lint/nursery/noTernary: simple error message extraction - span.setAttribute("errorMessage", error instanceof Error ? error.message : "Unknown error"); - - log.error("Webhook processing failed", { - provider, - durationMs, - // biome-ignore lint/nursery/noTernary: simple error message extraction - error: error instanceof Error ? error.message : "Unknown error", - }); - - throw error; - } + const isValid = await calendarSubscriptionAdapter.validate(request); + if (!isValid) { + metrics.count("calendar.subscription.webhook.invalid", 1, { + attributes: { provider }, + }); + throw new Error("Invalid webhook request"); } - ); + + const channelId = await calendarSubscriptionAdapter.extractChannelId( + request + ); + if (!channelId) { + metrics.count("calendar.subscription.webhook.missing_channel", 1, { + attributes: { provider }, + }); + throw new Error("Missing channel ID in webhook"); + } + + log.debug("Processing webhook", { channelId }); + + const selectedCalendar = + await this.deps.selectedCalendarRepository.findByChannelId(channelId); + if (!selectedCalendar) { + metrics.count("calendar.subscription.webhook.skipped", 1, { + attributes: { provider, reason: "calendar_not_found" }, + }); + log.info("Webhook processed - calendar not found", { + provider, + channelId, + durationMs: performance.now() - startTime, + }); + return null; + } + + const eventsProcessed = await this.processEvents(selectedCalendar); + + const durationMs = performance.now() - startTime; + + metrics.count("calendar.subscription.webhook.success", 1, { + attributes: { provider }, + }); + + metrics.distribution( + "calendar.subscription.webhook.duration_ms", + durationMs, + { + attributes: { provider }, + } + ); + + metrics.distribution( + "calendar.subscription.webhook.events_fetched", + eventsProcessed.eventsFetched, + { attributes: { provider } } + ); + } catch (error) { + const durationMs = performance.now() - startTime; + + metrics.count("calendar.subscription.webhook.error", 1, { + attributes: { provider }, + }); + + metrics.distribution( + "calendar.subscription.webhook.duration_ms", + durationMs, + { + attributes: { provider, outcome: "error" }, + } + ); + + log.error("Webhook processing failed", { + provider, + durationMs, + error: error instanceof Error ? error.message : "Unknown error", + }); + + throw error; + } } /** @@ -219,129 +221,160 @@ export class CalendarSubscriptionService { eventsSynced: number; propagationLagMs?: { avg: number; max: number; min: number; count: number }; }> { - return withSpan( + const startTime = performance.now(); + + const result: { + eventsFetched: number; + eventsCached: number; + eventsSynced: number; + propagationLagMs?: { avg: number; max: number; min: number; count: number }; + } = { + eventsFetched: 0, + eventsCached: 0, + eventsSynced: 0, + }; + + const calendarSubscriptionAdapter = this.deps.adapterFactory.get( + selectedCalendar.integration as CalendarSubscriptionProvider + ); + + if ( + !selectedCalendar.credentialId && + !selectedCalendar.delegationCredentialId + ) { + log.debug("Selected Calendar doesn't have credentials", { + selectedCalendarId: selectedCalendar.id, + }); + return result; + } + + const [cacheEnabled, syncEnabled, cacheEnabledForUser] = await Promise.all([ + this.isCacheEnabled(), + this.isSyncEnabled(), + this.isCacheEnabledForUser(selectedCalendar.userId), + ]); + + if (!cacheEnabled && !syncEnabled) { + log.info("Cache and sync are globally disabled", { + channelId: selectedCalendar.channelId, + }); + return result; + } + + log.debug("Processing events", { channelId: selectedCalendar.channelId }); + + const credential = await this.getCredential(selectedCalendar); + if (!credential) { + return result; + } + + let events: CalendarSubscriptionEvent | null = null; + try { + events = await calendarSubscriptionAdapter.fetchEvents( + selectedCalendar, + credential + ); + } catch (err) { + metrics.count("calendar.subscription.events.fetch.error", 1, { + attributes: { provider: selectedCalendar.integration }, + }); + await this.deps.selectedCalendarRepository.updateSyncStatus(selectedCalendar.id, { + syncErrorAt: new Date(), + syncErrorCount: { increment: 1 }, + }); + throw err; + } + + if (!events?.items?.length) { + log.debug("No events fetched", { channelId: selectedCalendar.channelId }); + return result; + } + + result.eventsFetched = events.items.length; + + metrics.distribution( + "calendar.subscription.events.fetched", + events.items.length, { - name: "CalendarSubscriptionService.processEvents", - op: "calendar.subscription.processEvents", attributes: { provider: selectedCalendar.integration, - selectedCalendarId: selectedCalendar.id, - userId: selectedCalendar.userId, - isIncremental: !!selectedCalendar.syncToken, + incremental: !!selectedCalendar.syncToken, }, - }, - // biome-ignore lint/complexity/noExcessiveLinesPerFunction: event processing requires multiple steps - async (span) => { - const result: { - eventsFetched: number; - eventsCached: number; - eventsSynced: number; - propagationLagMs?: { avg: number; max: number; min: number; count: number }; - } = { eventsFetched: 0, eventsCached: 0, eventsSynced: 0 }; - - const calendarSubscriptionAdapter = this.deps.adapterFactory.get( - selectedCalendar.integration as CalendarSubscriptionProvider - ); - - if (!selectedCalendar.credentialId && !selectedCalendar.delegationCredentialId) { - log.debug("Selected Calendar doesn't have credentials", { selectedCalendarId: selectedCalendar.id }); - span.setAttribute("skipped", true); - span.setAttribute("skipReason", "No credentials"); - return result; - } - - // for cache the feature should be enabled globally and by user/team features - const [cacheEnabled, syncEnabled, cacheEnabledForUser] = await Promise.all([ - this.isCacheEnabled(), - this.isSyncEnabled(), - this.isCacheEnabledForUser(selectedCalendar.userId), - ]); - - if (!cacheEnabled && !syncEnabled) { - log.info("Cache and sync are globally disabled", { channelId: selectedCalendar.channelId }); - span.setAttribute("skipped", true); - span.setAttribute("skipReason", "Cache and sync disabled"); - return result; - } - - log.debug("Processing events", { channelId: selectedCalendar.channelId }); - const credential = await this.getCredential(selectedCalendar); - if (!credential) { - span.setAttribute("skipped", true); - span.setAttribute("skipReason", "No credential found"); - return result; - } - - let events: CalendarSubscriptionEvent | null = null; - try { - events = await calendarSubscriptionAdapter.fetchEvents(selectedCalendar, credential); - } catch (err) { - log.debug("Error fetching events", { channelId: selectedCalendar.channelId, err }); - await this.deps.selectedCalendarRepository.updateSyncStatus(selectedCalendar.id, { - syncErrorAt: new Date(), - syncErrorCount: { increment: 1 }, - }); - span.setAttribute("success", false); - // biome-ignore lint/nursery/noTernary: simple error message extraction - span.setAttribute("errorMessage", err instanceof Error ? err.message : "Unknown error"); - throw err; - } - - if (!events?.items?.length) { - log.debug("No events fetched", { channelId: selectedCalendar.channelId }); - span.setAttribute("eventsFetched", 0); - return result; - } - - result.eventsFetched = events.items.length; - span.setAttribute("eventsFetched", events.items.length); - - // Calculate propagation lag: time between event update in Google and now - // Only meaningful for incremental syncs (when syncToken exists) - const now = Date.now(); - const lagStats = this.calculatePropagationLag(events.items, now); - if (lagStats) { - result.propagationLagMs = lagStats; - span.setAttribute("propagationLagAvgMs", lagStats.avg); - span.setAttribute("propagationLagMaxMs", lagStats.max); - span.setAttribute("propagationLagMinMs", lagStats.min); - span.setAttribute("propagationLagEventCount", lagStats.count); - log.info("Propagation lag calculated", { - channelId: selectedCalendar.channelId, - avgMs: lagStats.avg, - maxMs: lagStats.max, - minMs: lagStats.min, - eventCount: lagStats.count, - }); - } - - log.debug("Processing events", { channelId: selectedCalendar.channelId, count: events.items.length }); - await this.deps.selectedCalendarRepository.updateSyncStatus(selectedCalendar.id, { - syncToken: events.syncToken || selectedCalendar.syncToken, - syncedAt: new Date(), - syncErrorAt: null, - syncErrorCount: 0, - }); - - // it requires both global and team/user feature cache enabled - if (cacheEnabled && cacheEnabledForUser) { - log.debug("Caching events", { count: events.items.length }); - await this.deps.calendarCacheEventService.handleEvents(selectedCalendar, events.items); - result.eventsCached = events.items.length; - span.setAttribute("eventsCached", events.items.length); - } - - if (syncEnabled) { - log.debug("Syncing events", { count: events.items.length }); - await this.deps.calendarSyncService.handleEvents(selectedCalendar, events.items); - result.eventsSynced = events.items.length; - span.setAttribute("eventsSynced", events.items.length); - } - - span.setAttribute("success", true); - return result; } ); + + const now = Date.now(); + const lagStats = this.calculatePropagationLag(events.items, now); + if (lagStats) { + result.propagationLagMs = lagStats; + metrics.distribution( + "calendar.subscription.propagation_lag.avg_ms", + lagStats.avg, + { + attributes: { provider: selectedCalendar.integration }, + } + ); + metrics.distribution( + "calendar.subscription.propagation_lag.max_ms", + lagStats.max, + { + attributes: { provider: selectedCalendar.integration }, + } + ); + } + + await this.deps.selectedCalendarRepository.updateSyncStatus(selectedCalendar.id, { + syncToken: events.syncToken || selectedCalendar.syncToken, + syncedAt: new Date(), + syncErrorAt: null, + syncErrorCount: 0, + } + ); + + if (cacheEnabled && cacheEnabledForUser) { + log.debug("Caching events", { count: events.items.length }); + await this.deps.calendarCacheEventService.handleEvents(selectedCalendar, events.items ); + result.eventsCached = events.items.length; + + metrics.distribution( + "calendar.subscription.events.cached", + events.items.length, + { + attributes: { provider: selectedCalendar.integration }, + } + ); + } + + if (syncEnabled) { + log.debug("Syncing events", { count: events.items.length }); + await this.deps.calendarSyncService.handleEvents( + selectedCalendar, + events.items + ); + result.eventsSynced = events.items.length; + + metrics.distribution( + "calendar.subscription.events.synced", + events.items.length, + { + attributes: { provider: selectedCalendar.integration }, + } + ); + } + + metrics.distribution( + "calendar.subscription.processEvents.duration_ms", + performance.now() - startTime, + { + attributes: { + provider: selectedCalendar.integration, + cache: cacheEnabled && cacheEnabledForUser ? "on" : "off", + sync: syncEnabled ? "on" : "off", + }, + } + ); + + return result; } /** @@ -385,8 +418,8 @@ export class CalendarSubscriptionService { // biome-ignore lint/nursery/useExplicitType: return type is void async checkForNewSubscriptions() { const teamIds = await this.deps.featuresRepository.getTeamsWithFeatureEnabled( - CalendarSubscriptionService.CALENDAR_SUBSCRIPTION_CACHE_FEATURE - ); + CalendarSubscriptionService.CALENDAR_SUBSCRIPTION_CACHE_FEATURE + ); const rows = await this.deps.selectedCalendarRepository.findNextSubscriptionBatch({ take: 100, diff --git a/packages/features/calendar-subscription/lib/__tests__/CalendarSubscriptionService.test.ts b/packages/features/calendar-subscription/lib/__tests__/CalendarSubscriptionService.test.ts index e60a77179b..cd3096bc52 100644 --- a/packages/features/calendar-subscription/lib/__tests__/CalendarSubscriptionService.test.ts +++ b/packages/features/calendar-subscription/lib/__tests__/CalendarSubscriptionService.test.ts @@ -2,6 +2,13 @@ import "../__mocks__/delegationCredential"; import { describe, test, expect, vi, beforeEach } from "vitest"; +vi.mock("@sentry/nextjs", () => ({ + metrics: { + count: vi.fn(), + distribution: vi.fn(), + }, +})); + import type { AdapterFactory } from "@calcom/features/calendar-subscription/adapters/AdaptersFactory"; import type { CalendarCacheEventService } from "@calcom/features/calendar-subscription/lib/cache/CalendarCacheEventService"; import type { CalendarSyncService } from "@calcom/features/calendar-subscription/lib/sync/CalendarSyncService"; diff --git a/packages/features/calendar-subscription/lib/cache/CalendarCacheWrapper.ts b/packages/features/calendar-subscription/lib/cache/CalendarCacheWrapper.ts index 8870c91b68..0f7359d85f 100644 --- a/packages/features/calendar-subscription/lib/cache/CalendarCacheWrapper.ts +++ b/packages/features/calendar-subscription/lib/cache/CalendarCacheWrapper.ts @@ -1,6 +1,6 @@ import type { ICalendarCacheEventRepository } from "@calcom/features/calendar-subscription/lib/cache/CalendarCacheEventRepository.interface"; import logger from "@calcom/lib/logger"; -import { withSpan } from "@calcom/lib/sentryWrapper"; +import { metrics } from "@sentry/nextjs"; import type { Calendar, CalendarEvent, @@ -13,11 +13,6 @@ import type { const log = logger.getSubLogger({ prefix: ["CachedCalendarWrapper"] }); -/** - * A wrapper to load cache from database and cache it. - * - * @see Calendar - */ export class CalendarCacheWrapper implements Calendar { constructor( private deps: { @@ -59,85 +54,82 @@ export class CalendarCacheWrapper implements Calendar { */ async getAvailability(params: GetAvailabilityParams): Promise { const { dateFrom, dateTo, selectedCalendars } = params; - return withSpan( - { - name: "CalendarCacheWrapper.getAvailability", - op: "calendar.cache.internal.getAvailability", - attributes: { - calendarCount: selectedCalendars?.length ?? 0, - }, - }, - async (span) => { - log.debug("getAvailability (mixed cache + original)", { - dateFrom, - dateTo, - calendarIds: selectedCalendars.map((c) => c.id), - calendarCount: selectedCalendars.length, - }); - if (!selectedCalendars?.length) return []; + log.debug("getAvailability (mixed cache + original)", { + dateFrom, + dateTo, + calendarIds: selectedCalendars.map((c) => c.id), + calendarCount: selectedCalendars.length, + }); - const withSync = selectedCalendars.filter((c) => c.syncToken && c.syncSubscribedAt); - const withoutSync = selectedCalendars.filter((c) => !c.syncToken || !c.syncSubscribedAt); + if (!selectedCalendars?.length) return []; - const results: EventBusyDate[] = []; + const withSync = selectedCalendars.filter((c) => c.syncToken && c.syncSubscribedAt); + const withoutSync = selectedCalendars.filter((c) => !c.syncToken || !c.syncSubscribedAt); - // Fetch from cache for synced calendars - if (withSync.length) { - const cacheStartTime = performance.now(); - const ids = withSync.map((c) => c.id).filter((id): id is string => Boolean(id)); - const cached = await this.deps.calendarCacheEventRepository.findAllBySelectedCalendarIdsBetween( - ids, - new Date(dateFrom), - new Date(dateTo) - ); - const cacheDurationMs = performance.now() - cacheStartTime; - results.push( - ...cached.map((event) => ({ - ...event, - timeZone: event.timeZone ?? undefined, - })) - ); + const results: EventBusyDate[] = []; - span.setAttribute("cachedCalendarCount", withSync.length); - span.setAttribute("cacheFetchDurationMs", cacheDurationMs); - span.setAttribute("cachedEventsCount", cached.length); - log.info("Calendar cache fetch completed", { - cachedCalendarCount: withSync.length, - cacheFetchDurationMs: cacheDurationMs, - cachedEventsCount: cached.length, - }); - } + // ===== CACHE PATH ===== + if (withSync.length) { + const cacheStartTime = performance.now(); - // Fetch from original calendar for unsynced ones - if (withoutSync.length) { - const originalStartTime = performance.now(); - const original = await this.deps.originalCalendar.getAvailability({ - dateFrom, - dateTo, - selectedCalendars: withoutSync, - mode: params.mode, - fallbackToPrimary: params.fallbackToPrimary, - }); - const originalDurationMs = performance.now() - originalStartTime; - results.push(...original); + const ids = withSync.map((c) => c.id).filter((id): id is string => Boolean(id)); + const cached = await this.deps.calendarCacheEventRepository.findAllBySelectedCalendarIdsBetween( + ids, + new Date(dateFrom), + new Date(dateTo) + ); - span.setAttribute("originalCalendarCount", withoutSync.length); - span.setAttribute("originalFetchDurationMs", originalDurationMs); - span.setAttribute("originalEventsCount", original.length); - log.info("Original calendar fetch completed", { - originalCalendarCount: withoutSync.length, - originalFetchDurationMs: originalDurationMs, - originalEventsCount: original.length, - }); - } + const cacheDurationMs = performance.now() - cacheStartTime; - span.setAttribute("cacheUsed", withSync.length > 0); - span.setAttribute("totalEventsCount", results.length); + results.push( + ...cached.map((event) => ({ + ...event, + timeZone: event.timeZone ?? undefined, + })) + ); - return results; - } - ); + metrics.count("calendar.cache.hit.calls", 1); + metrics.distribution("calendar.cache.hit.duration_ms", cacheDurationMs); + metrics.distribution("calendar.cache.hit.events_count", cached.length); + + log.info("Calendar cache fetch completed", { + cachedCalendarCount: withSync.length, + cacheFetchDurationMs: cacheDurationMs, + cachedEventsCount: cached.length, + }); + } + + // ===== ORIGINAL PATH ===== + if (withoutSync.length) { + const originalStartTime = performance.now(); + + const original = await this.deps.originalCalendar.getAvailability({ + dateFrom, + dateTo, + selectedCalendars: withoutSync, + mode: params.mode, + fallbackToPrimary: params.fallbackToPrimary, + }); + + const originalDurationMs = performance.now() - originalStartTime; + + results.push(...original); + + metrics.count("calendar.cache.miss.calls", 1); + metrics.distribution("calendar.cache.miss.duration_ms", originalDurationMs); + metrics.distribution("calendar.cache.miss.events_count", original.length); + + log.info("Original calendar fetch completed", { + originalCalendarCount: withoutSync.length, + originalFetchDurationMs: originalDurationMs, + originalEventsCount: original.length, + }); + } + + metrics.distribution("calendar.getAvailability.total_events_count", results.length); + + return results; } /** @@ -149,86 +141,69 @@ export class CalendarCacheWrapper implements Calendar { */ async getAvailabilityWithTimeZones(params: GetAvailabilityParams): Promise { const { dateFrom, dateTo, selectedCalendars } = params; - return withSpan( - { - name: "CalendarCacheWrapper.getAvailabilityWithTimeZones", - op: "calendar.cache.internal.getAvailabilityWithTimeZones", - attributes: { - calendarCount: selectedCalendars?.length ?? 0, - }, - }, - async (span) => { - log.debug("getAvailabilityWithTimeZones (mixed cache + original)", { - dateFrom, - dateTo, - calendarIds: selectedCalendars.map((c) => c.id), - calendarCount: selectedCalendars.length, - }); - if (!selectedCalendars?.length) return []; + log.debug("getAvailabilityWithTimeZones (mixed cache + original)", { + dateFrom, + dateTo, + calendarIds: selectedCalendars.map((c) => c.id), + calendarCount: selectedCalendars.length, + }); - const withSync = selectedCalendars.filter((c) => c.syncToken && c.syncSubscribedAt); - const withoutSync = selectedCalendars.filter((c) => !c.syncToken || !c.syncSubscribedAt); + if (!selectedCalendars?.length) return []; - const results: EventBusyDate[] = []; + const withSync = selectedCalendars.filter((c) => c.syncToken && c.syncSubscribedAt); + const withoutSync = selectedCalendars.filter((c) => !c.syncToken || !c.syncSubscribedAt); - // Fetch from cache for synced calendars - if (withSync.length) { - const cacheStartTime = performance.now(); - const ids = withSync.map((c) => c.id).filter((id): id is string => Boolean(id)); - const cached = await this.deps.calendarCacheEventRepository.findAllBySelectedCalendarIdsBetween( - ids, - new Date(dateFrom), - new Date(dateTo) - ); - const cacheDurationMs = performance.now() - cacheStartTime; - results.push( - ...cached.map(({ start, end, timeZone }) => ({ - start, - end, - timeZone: timeZone || "UTC", - })) - ); + const results: EventBusyDate[] = []; - span.setAttribute("cachedCalendarCount", withSync.length); - span.setAttribute("cacheFetchDurationMs", cacheDurationMs); - span.setAttribute("cachedEventsCount", cached.length); - log.info("Calendar cache fetch with timezones completed", { - cachedCalendarCount: withSync.length, - cacheFetchDurationMs: cacheDurationMs, - cachedEventsCount: cached.length, - }); - } + if (withSync.length) { + const cacheStartTime = performance.now(); - // Fetch from original calendar for unsynced ones - if (withoutSync.length) { - const originalStartTime = performance.now(); - const original = await this.deps.originalCalendar.getAvailabilityWithTimeZones?.({ - dateFrom, - dateTo, - selectedCalendars: withoutSync, - mode: params.mode, - fallbackToPrimary: params.fallbackToPrimary, - }); - const originalDurationMs = performance.now() - originalStartTime; - if (original?.length) results.push(...original); + const ids = withSync.map((c) => c.id).filter((id): id is string => Boolean(id)); + const cached = await this.deps.calendarCacheEventRepository.findAllBySelectedCalendarIdsBetween( + ids, + new Date(dateFrom), + new Date(dateTo) + ); - span.setAttribute("originalCalendarCount", withoutSync.length); - span.setAttribute("originalFetchDurationMs", originalDurationMs); - span.setAttribute("originalEventsCount", original?.length ?? 0); - log.info("Original calendar fetch with timezones completed", { - originalCalendarCount: withoutSync.length, - originalFetchDurationMs: originalDurationMs, - originalEventsCount: original?.length ?? 0, - }); - } + const cacheDurationMs = performance.now() - cacheStartTime; - span.setAttribute("cacheUsed", withSync.length > 0); - span.setAttribute("totalEventsCount", results.length); + results.push( + ...cached.map(({ start, end, timeZone }) => ({ + start, + end, + timeZone: timeZone || "UTC", + })) + ); - return results; - } - ); + metrics.count("calendar.cache.hit.timezone.calls", 1); + metrics.distribution("calendar.cache.hit.timezone.duration_ms", cacheDurationMs); + metrics.distribution("calendar.cache.hit.timezone.events_count", cached.length); + } + + if (withoutSync.length) { + const originalStartTime = performance.now(); + + const original = await this.deps.originalCalendar.getAvailabilityWithTimeZones?.({ + dateFrom, + dateTo, + selectedCalendars: withoutSync, + mode: params.mode, + fallbackToPrimary: params.fallbackToPrimary, + }); + + const originalDurationMs = performance.now() - originalStartTime; + + if (original?.length) results.push(...original); + + metrics.count("calendar.cache.miss.timezone.calls", 1); + metrics.distribution("calendar.cache.miss.timezone.duration_ms", originalDurationMs); + metrics.distribution("calendar.cache.miss.timezone.events_count", original?.length ?? 0); + } + + metrics.distribution("calendar.getAvailabilityWithTimeZones.total_events_count", results.length); + + return results; } fetchAvailabilityAndSetCache?(selectedCalendars: IntegrationCalendar[]): Promise { diff --git a/packages/features/calendar-subscription/lib/telemetry/CalendarTelemetryWrapper.ts b/packages/features/calendar-subscription/lib/telemetry/CalendarTelemetryWrapper.ts index 5ab76f80d5..69f69d6381 100644 --- a/packages/features/calendar-subscription/lib/telemetry/CalendarTelemetryWrapper.ts +++ b/packages/features/calendar-subscription/lib/telemetry/CalendarTelemetryWrapper.ts @@ -1,8 +1,9 @@ import logger from "@calcom/lib/logger"; -import { withSpan } from "@calcom/lib/sentryWrapper"; +import { metrics } from "@sentry/nextjs"; import type { Calendar, CalendarEvent, + CalendarFetchMode, CalendarServiceEvent, EventBusyDate, GetAvailabilityParams, @@ -26,6 +27,7 @@ export class CalendarTelemetryWrapper implements Calendar { cacheSupported: boolean; cacheEnabled: boolean; credentialId: number; + mode: CalendarFetchMode; } ) {} @@ -55,109 +57,129 @@ export class CalendarTelemetryWrapper implements Calendar { async getAvailability(params: GetAvailabilityParams): Promise { const { dateFrom, dateTo, selectedCalendars } = params; - return withSpan( - { - name: "CalendarTelemetryWrapper.getAvailability", - op: "calendar.getAvailability", - attributes: { - credentialId: this.deps.credentialId, - calendarCount: selectedCalendars?.length ?? 0, - calendarType: this.deps.calendarType, - cacheSupported: this.deps.cacheSupported, - cacheEnabled: this.deps.cacheEnabled, - }, + + if (!selectedCalendars?.length) return []; + + log.debug("getAvailability", { + dateFrom, + dateTo, + calendarCount: selectedCalendars.length, + cacheSupported: this.deps.cacheSupported, + cacheEnabled: this.deps.cacheEnabled, + mode: this.deps.mode, + }); + + const startTime = performance.now(); + + const results = await this.deps.originalCalendar.getAvailability({ + dateFrom, + dateTo, + selectedCalendars, + mode: params.mode, + fallbackToPrimary: params.fallbackToPrimary, + }); + + const totalFetchDurationMs = performance.now() - startTime; + + metrics.count("calendar.getAvailability.calls", 1, { + attributes: { + cache: this.deps.cacheEnabled ? "on" : "off", + calendarType: this.deps.calendarType, + mode: String(this.deps.mode), }, - async (span) => { - log.debug("getAvailability", { - dateFrom, - dateTo, - calendarCount: selectedCalendars.length, - cacheSupported: this.deps.cacheSupported, - cacheEnabled: this.deps.cacheEnabled, - }); + }); - if (!selectedCalendars?.length) return []; + metrics.distribution("calendar.getAvailability.duration_ms", totalFetchDurationMs, { + attributes: { + cache: this.deps.cacheEnabled ? "on" : "off", + calendarType: this.deps.calendarType, + mode: String(this.deps.mode), + }, + }); - const startTime = performance.now(); - const results = await this.deps.originalCalendar.getAvailability({ - dateFrom, - dateTo, - selectedCalendars, - mode: params.mode, - fallbackToPrimary: params.fallbackToPrimary, - }); - const totalFetchDurationMs = performance.now() - startTime; + metrics.distribution("calendar.getAvailability.events_count", results.length, { + attributes: { + cache: this.deps.cacheEnabled ? "on" : "off", + calendarType: this.deps.calendarType, + }, + }); - span.setAttribute("totalFetchDurationMs", totalFetchDurationMs); - span.setAttribute("totalEventsCount", results.length); + log.info("Calendar fetch completed", { + calendarCount: selectedCalendars.length, + totalFetchDurationMs, + totalEventsCount: results.length, + cacheSupported: this.deps.cacheSupported, + cacheEnabled: this.deps.cacheEnabled, + mode: this.deps.mode, + }); - log.info("Calendar fetch completed", { - calendarCount: selectedCalendars.length, - totalFetchDurationMs, - totalEventsCount: results.length, - cacheSupported: this.deps.cacheSupported, - cacheEnabled: this.deps.cacheEnabled, - }); - - return results; - } - ); + return results; } async getAvailabilityWithTimeZones(params: GetAvailabilityParams): Promise { const { dateFrom, dateTo, selectedCalendars } = params; - // Check if the original calendar supports this method + if (!this.deps.originalCalendar.getAvailabilityWithTimeZones) { return []; } - return withSpan( - { - name: "CalendarTelemetryWrapper.getAvailabilityWithTimeZones", - op: "calendar.getAvailabilityWithTimeZones", + if (!selectedCalendars?.length) return []; + + log.debug("getAvailabilityWithTimeZones", { + dateFrom, + dateTo, + calendarCount: selectedCalendars.length, + cacheSupported: this.deps.cacheSupported, + cacheEnabled: this.deps.cacheEnabled, + mode: this.deps.mode, + }); + + const startTime = performance.now(); + + const results = await this.deps.originalCalendar.getAvailabilityWithTimeZones({ + dateFrom, + dateTo, + selectedCalendars, + mode: params.mode, + fallbackToPrimary: params.fallbackToPrimary, + }); + + const totalFetchDurationMs = performance.now() - startTime; + + metrics.count("calendar.getAvailabilityWithTimeZones.calls", 1, { + attributes: { + cache: this.deps.cacheEnabled ? "on" : "off", + calendarType: this.deps.calendarType, + mode: String(this.deps.mode), + } + }); + + metrics.distribution("calendar.getAvailabilityWithTimeZones.duration_ms", totalFetchDurationMs, { + attributes: { + cache: this.deps.cacheEnabled ? "on" : "off", + calendarType: this.deps.calendarType, + mode: String(this.deps.mode), + } + }); + + metrics.distribution("calendar.getAvailabilityWithTimeZones.events_count", results?.length ?? 0, { attributes: { - credentialId: this.deps.credentialId, - calendarCount: selectedCalendars?.length ?? 0, + cache: this.deps.cacheEnabled ? "on" : "off", calendarType: this.deps.calendarType, - cacheSupported: this.deps.cacheSupported, - cacheEnabled: this.deps.cacheEnabled, }, - }, - async (span) => { - log.debug("getAvailabilityWithTimeZones", { - dateFrom, - dateTo, - calendarCount: selectedCalendars.length, - cacheSupported: this.deps.cacheSupported, - cacheEnabled: this.deps.cacheEnabled, - }); - - if (!selectedCalendars?.length) return []; - - const startTime = performance.now(); - const results = await this.deps.originalCalendar.getAvailabilityWithTimeZones?.({ - dateFrom, - dateTo, - selectedCalendars, - mode: params.mode, - fallbackToPrimary: params.fallbackToPrimary, - }); - const totalFetchDurationMs = performance.now() - startTime; - - span.setAttribute("totalFetchDurationMs", totalFetchDurationMs); - span.setAttribute("totalEventsCount", results?.length ?? 0); - - log.info("Calendar fetch with timezones completed", { - calendarCount: selectedCalendars.length, - totalFetchDurationMs, - totalEventsCount: results?.length ?? 0, - cacheSupported: this.deps.cacheSupported, - cacheEnabled: this.deps.cacheEnabled, - }); - - return results ?? []; } ); + + log.info("Calendar fetch with timezones completed", { + calendarCount: selectedCalendars.length, + totalFetchDurationMs, + totalEventsCount: results?.length ?? 0, + cacheSupported: this.deps.cacheSupported, + cacheEnabled: this.deps.cacheEnabled, + mode: this.deps.mode, + }); + + return results ?? []; } fetchAvailabilityAndSetCache?(selectedCalendars: IntegrationCalendar[]): Promise { diff --git a/yarn.lock b/yarn.lock index b05b6d2616..978a0c54bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -304,6 +304,24 @@ __metadata: languageName: node linkType: hard +"@apm-js-collab/code-transformer@npm:^0.8.0": + version: 0.8.2 + resolution: "@apm-js-collab/code-transformer@npm:0.8.2" + checksum: 10/ff4b8fea9a27ef4e82a0a022bececfa9966e5e2a4ae1e6ca0b31f4a2bbc6d79f5bd1257f281ed8a90900d693e1a88a79c42982eabe7ca999b267d5d69c57393f + languageName: node + linkType: hard + +"@apm-js-collab/tracing-hooks@npm:^0.3.1": + version: 0.3.1 + resolution: "@apm-js-collab/tracing-hooks@npm:0.3.1" + dependencies: + "@apm-js-collab/code-transformer": "npm:^0.8.0" + debug: "npm:^4.4.1" + module-details-from-path: "npm:^1.0.4" + checksum: 10/0af2220168d4fc2700ec577632eac066f756c3aaa34ef2e833ea4725abb80f7486c1a585a93e8f0d8304c51192f63c53e7ddd70290abac489a734f9693359f7f + languageName: node + linkType: hard + "@ardatan/relay-compiler@npm:^12.0.3": version: 12.0.3 resolution: "@ardatan/relay-compiler@npm:12.0.3" @@ -2013,7 +2031,7 @@ __metadata: "@calcom/tsconfig": "workspace:*" "@calcom/types": "workspace:*" "@prisma/nextjs-monorepo-workaround-plugin": "npm:6.16.1" - "@sentry/nextjs": "npm:9.15.0" + "@sentry/nextjs": "npm:10.33.0" bcryptjs: "npm:2.4.3" memory-cache: "npm:0.2.0" next: "npm:16.1.0" @@ -3518,7 +3536,7 @@ __metadata: "@radix-ui/react-switch": "npm:1.1.0" "@radix-ui/react-toggle-group": "npm:1.0.4" "@radix-ui/react-tooltip": "npm:1.0.6" - "@sentry/nextjs": "npm:9.15.0" + "@sentry/nextjs": "npm:10.33.0" "@stripe/react-stripe-js": "npm:1.10.0" "@stripe/stripe-js": "npm:1.35.0" "@tailwindcss/postcss": "npm:4.1.15" @@ -9313,6 +9331,24 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.208.0": + version: 0.208.0 + resolution: "@opentelemetry/api-logs@npm:0.208.0" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10/ae339416a244e90b1718af1ed5430348188be60871f3799c847bab409bba1513337cac7da40b4883bf7f280680754319b44a9dc95fa2879d15c0413c9955b145 + languageName: node + linkType: hard + +"@opentelemetry/api-logs@npm:0.209.0": + version: 0.209.0 + resolution: "@opentelemetry/api-logs@npm:0.209.0" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10/bd270d8b60b2fb8124174f0ec0babe7b57eca69f58feb6f4e1394714591324939dd4049a29499f435e948011cc8e5bdc9d0da2a2a96bd8be8ee9e5a3d297dfa0 + languageName: node + linkType: hard + "@opentelemetry/api-logs@npm:0.57.1": version: 0.57.1 resolution: "@opentelemetry/api-logs@npm:0.57.1" @@ -9356,6 +9392,15 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/context-async-hooks@npm:^2.2.0": + version: 2.3.0 + resolution: "@opentelemetry/context-async-hooks@npm:2.3.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/f3867ede6a0864db34f677b0e98ac563e0df8e938a70d42ceeed76f927847a44bd38bf04fc60f618b395f064fb5e5c332db296b8ac6286265f88702d483fd383 + languageName: node + linkType: hard + "@opentelemetry/core@npm:1.30.1, @opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.26.0, @opentelemetry/core@npm:^1.30.1, @opentelemetry/core@npm:^1.8.0": version: 1.30.1 resolution: "@opentelemetry/core@npm:1.30.1" @@ -9378,6 +9423,28 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/core@npm:2.2.0": + version: 2.2.0 + resolution: "@opentelemetry/core@npm:2.2.0" + dependencies: + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/f25193ba8b1fadb7bd8ed0d86ac39dd0f3fd3eec47c2fb2745bd22442b2d5e3ca88e5cab6d97111349d3182bf8e4356f8b7c7213ebea8f7719de944ce13a19cb + languageName: node + linkType: hard + +"@opentelemetry/core@npm:2.3.0, @opentelemetry/core@npm:^2.0.0, @opentelemetry/core@npm:^2.2.0": + version: 2.3.0 + resolution: "@opentelemetry/core@npm:2.3.0" + dependencies: + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/a4deceb8088e3d8d5ba0460778d758a1b74ab6768dd97ec645ae6d4cbb64746da1a29d103c98eeb1a713448da556fd7fcf350c6c5aff6388079365aa6ae32465 + languageName: node + linkType: hard + "@opentelemetry/exporter-logs-otlp-http@npm:0.203.0": version: 0.203.0 resolution: "@opentelemetry/exporter-logs-otlp-http@npm:0.203.0" @@ -9441,6 +9508,18 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-amqplib@npm:0.55.0": + version: 0.55.0 + resolution: "@opentelemetry/instrumentation-amqplib@npm:0.55.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/03e028c4dfe9a8a9372f6ef6d4c4520343a3ec571e2e04dcd29e684cf25d212f6331be268656006220b476f6b46748aba2d142b7b4c62efd24baebf6a3f1b77b + languageName: node + linkType: hard + "@opentelemetry/instrumentation-amqplib@npm:^0.46.1": version: 0.46.1 resolution: "@opentelemetry/instrumentation-amqplib@npm:0.46.1" @@ -9468,6 +9547,20 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-connect@npm:0.52.0": + version: 0.52.0 + resolution: "@opentelemetry/instrumentation-connect@npm:0.52.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/connect": "npm:3.4.38" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/c526768a10a4f6c76b791e382edeae2217a7b3c448b1a3458ef34ca46a645b6cf67eeec79bae119e2005f5d766c8eabc03b16058da6e94300110d029157e7e95 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-dataloader@npm:0.16.1": version: 0.16.1 resolution: "@opentelemetry/instrumentation-dataloader@npm:0.16.1" @@ -9479,6 +9572,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-dataloader@npm:0.26.0": + version: 0.26.0 + resolution: "@opentelemetry/instrumentation-dataloader@npm:0.26.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/e3efde5515698fc25437d4e347cc829da1f82df95c0523149913030b53e4a359577ee988b66d5b0a3bd8230697cd785e983176c0b4bb14d001c64c8948d46c10 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-express@npm:0.47.1": version: 0.47.1 resolution: "@opentelemetry/instrumentation-express@npm:0.47.1" @@ -9492,16 +9596,16 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/instrumentation-fastify@npm:0.44.2": - version: 0.44.2 - resolution: "@opentelemetry/instrumentation-fastify@npm:0.44.2" +"@opentelemetry/instrumentation-express@npm:0.57.0": + version: 0.57.0 + resolution: "@opentelemetry/instrumentation-express@npm:0.57.0" dependencies: - "@opentelemetry/core": "npm:^1.8.0" - "@opentelemetry/instrumentation": "npm:^0.57.1" + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" "@opentelemetry/semantic-conventions": "npm:^1.27.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10/e0fa50982dbc908c9ff63603fb91dda9a75248ce799c0669cc12783e45b14a5f44354edc78d1676918cf4514cd98310b7dbaf04d6d422838d7016ddda40e24c4 + checksum: 10/66c10e878433d0e90bbf88dfbf28b23ecdbc3777326f46548c16c5062118b37c623011cef390a5ed3de2855f67f91587703581846f4e1e702ff3a068404f3e89 languageName: node linkType: hard @@ -9531,6 +9635,18 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-fs@npm:0.28.0": + version: 0.28.0 + resolution: "@opentelemetry/instrumentation-fs@npm:0.28.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/f62c1256e3c47d958b296b57f8ab1d0b8b8851e9c3d6ad8691af514a33a2341ec1a9345d57a705a420a7a5757a297e03cc04c497a5701ac027a98b63b1a90ab1 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-generic-pool@npm:0.43.1": version: 0.43.1 resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.43.1" @@ -9542,6 +9658,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-generic-pool@npm:0.52.0": + version: 0.52.0 + resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.52.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/f94b27d84a4172f95f7a33fa967f2ad562d4dba3182b1e8b6658b4eceb8a26a678b407a232858378a034dd8ffdb4e66bd98b4a8861fe042be59af3e4b400244f + languageName: node + linkType: hard + "@opentelemetry/instrumentation-graphql@npm:0.47.1": version: 0.47.1 resolution: "@opentelemetry/instrumentation-graphql@npm:0.47.1" @@ -9553,6 +9680,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-graphql@npm:0.56.0": + version: 0.56.0 + resolution: "@opentelemetry/instrumentation-graphql@npm:0.56.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/7895e702484367ef9c26f7c79f0039ac9677133342253f3935e7203156cbc396dfd799ef84e4758e83c008ed8c6b6893a05fc1df2566cfaae65e3770485ad8c9 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-hapi@npm:0.45.2": version: 0.45.2 resolution: "@opentelemetry/instrumentation-hapi@npm:0.45.2" @@ -9566,6 +9704,33 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-hapi@npm:0.55.0": + version: 0.55.0 + resolution: "@opentelemetry/instrumentation-hapi@npm:0.55.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/575c059a2dbcd77256acfca897d2cc08968b4e7e9e41449dfd5de2ca761fa2a544aaa6f2a8213f7374a42026e1f0b7e612ce01337e43108631e20e19fec01c81 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-http@npm:0.208.0": + version: 0.208.0 + resolution: "@opentelemetry/instrumentation-http@npm:0.208.0" + dependencies: + "@opentelemetry/core": "npm:2.2.0" + "@opentelemetry/instrumentation": "npm:0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + forwarded-parse: "npm:2.1.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/f5e11eb7054d6701ea44ecb90321558e524b253a7945d1539f9971f83c5dfc1d294a6ac632eb35d2f19309837f16f6c405958c0bd9c50a8751dd07ee0704ca4e + languageName: node + linkType: hard + "@opentelemetry/instrumentation-http@npm:0.57.2": version: 0.57.2 resolution: "@opentelemetry/instrumentation-http@npm:0.57.2" @@ -9594,6 +9759,30 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-ioredis@npm:0.56.0": + version: 0.56.0 + resolution: "@opentelemetry/instrumentation-ioredis@npm:0.56.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/redis-common": "npm:^0.38.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/8fd316eb94323fca62b71b51df4ef1dc0cf7879315f3006633d07cd9ea87bb9ff1315e216e6e61013f6ab84142593935d2920812794736ce4f0ca97da522ff09 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-kafkajs@npm:0.18.0": + version: 0.18.0 + resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.18.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.30.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/e3b998d905dc6c87b542e6b7004e12eeac19903872fe3e7d4c17771f69843b721dd73d0b136b2f21207d4dec7e53fd17d5042cf27a0028ec3c3074c0861654fe + languageName: node + linkType: hard + "@opentelemetry/instrumentation-kafkajs@npm:0.7.1": version: 0.7.1 resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.7.1" @@ -9618,6 +9807,18 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-knex@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-knex@npm:0.53.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/70506c24957374276ef63a18d103fb74a37888ffeb9c1c6b6419a3abcf970d4c8dfed3129ca840f71f1207e246c7bc337d3bc4ab249b1a1c67dfc854dd7da7fd + languageName: node + linkType: hard + "@opentelemetry/instrumentation-koa@npm:0.47.1": version: 0.47.1 resolution: "@opentelemetry/instrumentation-koa@npm:0.47.1" @@ -9631,6 +9832,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-koa@npm:0.57.0": + version: 0.57.0 + resolution: "@opentelemetry/instrumentation-koa@npm:0.57.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.36.0" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + checksum: 10/7df972b4a5c6c8cad6e1fe6ab3a6ea391d4db09f0d3e2b0b46f0ffa0289df88fe2446e06c08744d65293aeaff2f28628d51f8dea5d97404907a49f9e567f50f6 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-lru-memoizer@npm:0.44.1": version: 0.44.1 resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.44.1" @@ -9642,6 +9856,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-lru-memoizer@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.53.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/6f83abdb58e83fe87ce926236c54fbaaf49f64f8149e455b1dc1f33d735faf575e6f6d4df36b8eadf176a74d01cd05c6f3a3babff56a5a7448744e0cba39df5e + languageName: node + linkType: hard + "@opentelemetry/instrumentation-mongodb@npm:0.52.0": version: 0.52.0 resolution: "@opentelemetry/instrumentation-mongodb@npm:0.52.0" @@ -9654,6 +9879,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-mongodb@npm:0.61.0": + version: 0.61.0 + resolution: "@opentelemetry/instrumentation-mongodb@npm:0.61.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/fe5eb79c8924aa268c863af4a5878c47ba5730622cb861899802144a4dfe7431e7af6e9b568dd205fdedfd77fbbfe95539cdcf35e6b326ba695eeaadd61240ed + languageName: node + linkType: hard + "@opentelemetry/instrumentation-mongoose@npm:0.46.1": version: 0.46.1 resolution: "@opentelemetry/instrumentation-mongoose@npm:0.46.1" @@ -9667,6 +9903,18 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-mongoose@npm:0.55.0": + version: 0.55.0 + resolution: "@opentelemetry/instrumentation-mongoose@npm:0.55.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/5ee25946b7a6a50178ff6b50d5a88b8a189f0ba6effc45ee07e6026c353b1cad605f51cb9c61f9200e066833a7f3b588ede02582dc7dbbce4a9d715ec312cea6 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-mysql2@npm:0.45.2": version: 0.45.2 resolution: "@opentelemetry/instrumentation-mysql2@npm:0.45.2" @@ -9680,6 +9928,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-mysql2@npm:0.55.0": + version: 0.55.0 + resolution: "@opentelemetry/instrumentation-mysql2@npm:0.55.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.0" + "@opentelemetry/sql-common": "npm:^0.41.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/ca5bb6c99bd8fd3590341955aeece3c69982e07b2df520998ea282ac9135311f8fc37ba55fb66adf07a80adcf98d42892b698422c9817667231064cc251e626d + languageName: node + linkType: hard + "@opentelemetry/instrumentation-mysql@npm:0.45.1": version: 0.45.1 resolution: "@opentelemetry/instrumentation-mysql@npm:0.45.1" @@ -9693,6 +9954,18 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-mysql@npm:0.54.0": + version: 0.54.0 + resolution: "@opentelemetry/instrumentation-mysql@npm:0.54.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@types/mysql": "npm:2.15.27" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/d4756b4d72c0232f92fc00fd8fb03d02fe27d9108c8c74ae1d8aa50800207f7e6dc10aa8f5a636d9b6c8865b10e10a79741242c08af4d4f0599977182b7508ae + languageName: node + linkType: hard + "@opentelemetry/instrumentation-nestjs-core@npm:0.44.1": version: 0.44.1 resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.44.1" @@ -9721,6 +9994,22 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-pg@npm:0.61.0": + version: 0.61.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.61.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.34.0" + "@opentelemetry/sql-common": "npm:^0.41.2" + "@types/pg": "npm:8.15.6" + "@types/pg-pool": "npm:2.0.6" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/84825695303d79720a87622bfb0bcbc6c46463a595a36d7fb611684bfb23df9645ff17780b60a00cc97a78e70ef109603fc473b2cefd91a7099b14d2d93fdb56 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-redis-4@npm:0.46.1": version: 0.46.1 resolution: "@opentelemetry/instrumentation-redis-4@npm:0.46.1" @@ -9734,6 +10023,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-redis@npm:0.57.0": + version: 0.57.0 + resolution: "@opentelemetry/instrumentation-redis@npm:0.57.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/redis-common": "npm:^0.38.2" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/171f5e57d0141088f8e4cdb8f744226d7999ca045842708e65c8b784f53a41e25a7248f22382bf1b4a80b6fa1cc4c41658502bb15340b3fa2c22f2e9db8b76e0 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-tedious@npm:0.18.1": version: 0.18.1 resolution: "@opentelemetry/instrumentation-tedious@npm:0.18.1" @@ -9747,6 +10049,18 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-tedious@npm:0.27.0": + version: 0.27.0 + resolution: "@opentelemetry/instrumentation-tedious@npm:0.27.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@types/tedious": "npm:^4.0.14" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/453492b72cf16b855da1a4ba38b9619261ef77ed4afe8ae551c0abc529c81c8640d816934aae197fa719e8e79591613d2398a8a7f3b77c82de41bf51db3eebfc + languageName: node + linkType: hard + "@opentelemetry/instrumentation-undici@npm:0.10.1": version: 0.10.1 resolution: "@opentelemetry/instrumentation-undici@npm:0.10.1" @@ -9759,6 +10073,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-undici@npm:0.19.0": + version: 0.19.0 + resolution: "@opentelemetry/instrumentation-undici@npm:0.19.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/semantic-conventions": "npm:^1.24.0" + peerDependencies: + "@opentelemetry/api": ^1.7.0 + checksum: 10/862ea5e49c2cf38c7a135f5ea6a95f1b8ca009620f9b0e4d6c7ffb69e8e1d4e7d4169e4cf0cd2af4ce574864b37ea3f7c039b0e6600d3e490f3c263a8647325e + languageName: node + linkType: hard + "@opentelemetry/instrumentation@npm:0.203.0": version: 0.203.0 resolution: "@opentelemetry/instrumentation@npm:0.203.0" @@ -9772,6 +10099,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation@npm:0.208.0, @opentelemetry/instrumentation@npm:^0.208.0": + version: 0.208.0 + resolution: "@opentelemetry/instrumentation@npm:0.208.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.208.0" + import-in-the-middle: "npm:^2.0.0" + require-in-the-middle: "npm:^8.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/0591121c1bab29b8246ba879b1ed91f2db17680cfce56a635bf2e81390a9140f029b094ff4498ff154132379192bf424d7d234d2114883735603e4a6581a4a79 + languageName: node + linkType: hard + "@opentelemetry/instrumentation@npm:0.57.2, @opentelemetry/instrumentation@npm:^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0, @opentelemetry/instrumentation@npm:^0.57.1, @opentelemetry/instrumentation@npm:^0.57.2": version: 0.57.2 resolution: "@opentelemetry/instrumentation@npm:0.57.2" @@ -9788,6 +10128,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation@npm:>=0.52.0 <1": + version: 0.209.0 + resolution: "@opentelemetry/instrumentation@npm:0.209.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.209.0" + import-in-the-middle: "npm:^2.0.0" + require-in-the-middle: "npm:^8.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/b8c4f92f6fddd20a2a355a9e2dd4c8a265ada91570a79f9119e4dc6b70667e7ed65994ab8da52b5bcfafdcd407e68f964a944edb5a92bbbf2b3ae506982fed98 + languageName: node + linkType: hard + "@opentelemetry/otlp-exporter-base@npm:0.203.0": version: 0.203.0 resolution: "@opentelemetry/otlp-exporter-base@npm:0.203.0" @@ -9867,6 +10220,13 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/redis-common@npm:^0.38.2": + version: 0.38.2 + resolution: "@opentelemetry/redis-common@npm:0.38.2" + checksum: 10/2a4f992572b1990a407ac92c7db941aecb6e8d71f034f4ea0b00b2b1739ad07c22767198a6759ab634cbbe9eebfbea062e2b79a25484289c226c665558041503 + languageName: node + linkType: hard + "@opentelemetry/resources@npm:1.30.1, @opentelemetry/resources@npm:^1.30.1": version: 1.30.1 resolution: "@opentelemetry/resources@npm:1.30.1" @@ -9891,6 +10251,18 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/resources@npm:2.3.0, @opentelemetry/resources@npm:^2.2.0": + version: 2.3.0 + resolution: "@opentelemetry/resources@npm:2.3.0" + dependencies: + "@opentelemetry/core": "npm:2.3.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/8deee5b81a9fe730569402da71190def11ed8b9a8f87b8340dafc773a1e174e52ca28c8117d26ff75aaea975adf6949fa0433305f3c5c0ce718e312e2826765a + languageName: node + linkType: hard + "@opentelemetry/sdk-logs@npm:0.203.0": version: 0.203.0 resolution: "@opentelemetry/sdk-logs@npm:0.203.0" @@ -9967,6 +10339,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/sdk-trace-base@npm:^2.2.0": + version: 2.3.0 + resolution: "@opentelemetry/sdk-trace-base@npm:2.3.0" + dependencies: + "@opentelemetry/core": "npm:2.3.0" + "@opentelemetry/resources": "npm:2.3.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/235b3117704b69ead030819eaca5aa161ca6da2930603a26cb6aa32f07e6a4b1268a97471911a1939d308f8e9fda2c9b486febd208f5edcf506b79eeeed31aed + languageName: node + linkType: hard + "@opentelemetry/sdk-trace-node@npm:2.0.1": version: 2.0.1 resolution: "@opentelemetry/sdk-trace-node@npm:2.0.1" @@ -10013,7 +10398,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.30.0, @opentelemetry/semantic-conventions@npm:^1.34.0": +"@opentelemetry/semantic-conventions@npm:^1.24.0, @opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.30.0, @opentelemetry/semantic-conventions@npm:^1.33.0, @opentelemetry/semantic-conventions@npm:^1.33.1, @opentelemetry/semantic-conventions@npm:^1.34.0, @opentelemetry/semantic-conventions@npm:^1.36.0, @opentelemetry/semantic-conventions@npm:^1.37.0": version: 1.38.0 resolution: "@opentelemetry/semantic-conventions@npm:1.38.0" checksum: 10/9d549f4896e900f644d5e70dd7142505daff88ed83c1cb7bcd976ac55e9496d4ddd686bb2815dd68655c739950514394c3b73ff51e53b2e4ff2d54a7f6d22521 @@ -10031,6 +10416,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/sql-common@npm:^0.41.2": + version: 0.41.2 + resolution: "@opentelemetry/sql-common@npm:0.41.2" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: 10/3d57d5162c69c29484cb166e99ac733fff1dcefa26aea401e40035d5daa3aef21af78936af7943d0dfdab385ff053b879117c2fa3bd980412dd378222b10bea3 + languageName: node + linkType: hard + "@otplib/core@npm:^12.0.1": version: 12.0.1 resolution: "@otplib/core@npm:12.0.1" @@ -10653,14 +11049,14 @@ __metadata: languageName: node linkType: hard -"@prisma/instrumentation@npm:6.6.0": - version: 6.6.0 - resolution: "@prisma/instrumentation@npm:6.6.0" +"@prisma/instrumentation@npm:6.19.0": + version: 6.19.0 + resolution: "@prisma/instrumentation@npm:6.19.0" dependencies: - "@opentelemetry/instrumentation": "npm:^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" + "@opentelemetry/instrumentation": "npm:>=0.52.0 <1" peerDependencies: "@opentelemetry/api": ^1.8 - checksum: 10/18480c9dfb2592aeae5b7d43449af7e88e47cf177d58d4ab147d01a90477f4abc91a900f345c22cf0c381171db94c20a2fa74f519cfa775dba060fd9a3eed220 + checksum: 10/9d63362f4a4cd52f956d672e32bc8ad54619675e14cd33271d225c7848a685f137316dc98bab40dc5c5032b86efeb21fe60b6e6bb840608696d61f251d6f0e75 languageName: node linkType: hard @@ -13076,6 +13472,15 @@ __metadata: languageName: node linkType: hard +"@sentry-internal/browser-utils@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry-internal/browser-utils@npm:10.33.0" + dependencies: + "@sentry/core": "npm:10.33.0" + checksum: 10/fa431b1a25fc58ea2edbf6e379c1c2785d620660d4de0c48f1350ec955afd863b86183180c82a35750a02849491fe8b03c22f65726420dcb8a97a630469cb64b + languageName: node + linkType: hard + "@sentry-internal/browser-utils@npm:8.55.0": version: 8.55.0 resolution: "@sentry-internal/browser-utils@npm:8.55.0" @@ -13085,12 +13490,12 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/browser-utils@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry-internal/browser-utils@npm:9.15.0" +"@sentry-internal/feedback@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry-internal/feedback@npm:10.33.0" dependencies: - "@sentry/core": "npm:9.15.0" - checksum: 10/e227209c894f56bd14907f579bc55d16285e9bd5bb663608a7f36329a812cf7afa5c47e8a5e9ddc772b1f7855cd747d779c3e4d9476235751c1ab6b8e229bacf + "@sentry/core": "npm:10.33.0" + checksum: 10/3b45ef3995f9d6f53ab850e3f3c6f6ec6f04a65c1c28c563271ba9b1e5efcade877963e9f33f62d57a775cdf1d26ec38cee30bbfb26aeedf82a55d26b1cb34b4 languageName: node linkType: hard @@ -13103,15 +13508,6 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/feedback@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry-internal/feedback@npm:9.15.0" - dependencies: - "@sentry/core": "npm:9.15.0" - checksum: 10/204978536a478c7f267f26d90cffce1dc8b5ddbbea050b75ab452bf37b94547ed08db4b1946e0412e867bcf0ba7cd457a9d86ba973da5aea6695306c175c2708 - languageName: node - linkType: hard - "@sentry-internal/node-cpu-profiler@npm:^2.2.0": version: 2.2.0 resolution: "@sentry-internal/node-cpu-profiler@npm:2.2.0" @@ -13123,6 +13519,16 @@ __metadata: languageName: node linkType: hard +"@sentry-internal/replay-canvas@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry-internal/replay-canvas@npm:10.33.0" + dependencies: + "@sentry-internal/replay": "npm:10.33.0" + "@sentry/core": "npm:10.33.0" + checksum: 10/429b3cc95e45f3f08a3c795ff535ada411325513fbaf07abd8d0bc7c78216e073efb727aa8262ca1cb7151fc78d6b0fa2594dfa40cf8a6ec2e7b7f396e51d6c9 + languageName: node + linkType: hard + "@sentry-internal/replay-canvas@npm:8.55.0": version: 8.55.0 resolution: "@sentry-internal/replay-canvas@npm:8.55.0" @@ -13133,13 +13539,13 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/replay-canvas@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry-internal/replay-canvas@npm:9.15.0" +"@sentry-internal/replay@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry-internal/replay@npm:10.33.0" dependencies: - "@sentry-internal/replay": "npm:9.15.0" - "@sentry/core": "npm:9.15.0" - checksum: 10/11c1a69de2a3ffef4e40d7ddedf2b9f896074b4673741b2c62d89cc4fdfedc09e36c523e69ae0423c9ba17da81f14e5501549adab0bd17cf88531e258d51173b + "@sentry-internal/browser-utils": "npm:10.33.0" + "@sentry/core": "npm:10.33.0" + checksum: 10/a931819a39bfa5410e10bc792521f680b5d8ed47823085ffdc31906c4d891d87123d9f36bd9a0996dba43e7205b0c6e44026d1df56b6e80490bd1be4abdb8688 languageName: node linkType: hard @@ -13153,33 +13559,23 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/replay@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry-internal/replay@npm:9.15.0" - dependencies: - "@sentry-internal/browser-utils": "npm:9.15.0" - "@sentry/core": "npm:9.15.0" - checksum: 10/f99d2e5fd0fdc5000aa38c241dcd76079476469499ac73b15bdb717cf92e12fab035de229db338f9fce2b610feb02742a934c97c04329c2213ef28a2ebb7780e +"@sentry/babel-plugin-component-annotate@npm:4.6.1": + version: 4.6.1 + resolution: "@sentry/babel-plugin-component-annotate@npm:4.6.1" + checksum: 10/8aff72493b2b5aeeb67887054dcb52a3faf4a1b9cf2888f576467df1954ee9784409eef210043c4f3a571958fcd01e940a28cfa5758c7393239405ab5fec7628 languageName: node linkType: hard -"@sentry/babel-plugin-component-annotate@npm:3.3.1": - version: 3.3.1 - resolution: "@sentry/babel-plugin-component-annotate@npm:3.3.1" - checksum: 10/6bbbacfa1bc1da19a6f47a4fd98c9df29acfabf5681d000fdc057af153de19119bd26fb3cd83789c0d553db72957e03ef78e96d14f9d3bc936ed7ceb3879c65b - languageName: node - linkType: hard - -"@sentry/browser@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry/browser@npm:9.15.0" +"@sentry/browser@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/browser@npm:10.33.0" dependencies: - "@sentry-internal/browser-utils": "npm:9.15.0" - "@sentry-internal/feedback": "npm:9.15.0" - "@sentry-internal/replay": "npm:9.15.0" - "@sentry-internal/replay-canvas": "npm:9.15.0" - "@sentry/core": "npm:9.15.0" - checksum: 10/ae8abe4f22187da8239de348f472c101db8add3fe3101c7e57c51621160b72a83e69045527204733ce81801918f155b1d3aec0c3a8c7666bd51fb0bc0992538f + "@sentry-internal/browser-utils": "npm:10.33.0" + "@sentry-internal/feedback": "npm:10.33.0" + "@sentry-internal/replay": "npm:10.33.0" + "@sentry-internal/replay-canvas": "npm:10.33.0" + "@sentry/core": "npm:10.33.0" + checksum: 10/e452bf07dc120bbba93943d93502ee633941f49602ee5444183b5bfcb172c469fe7bb0bc0c2c9813ef42b60ca64579e940aba770cdb22f2b43d9c07c5db6a52e languageName: node linkType: hard @@ -13196,82 +13592,90 @@ __metadata: languageName: node linkType: hard -"@sentry/bundler-plugin-core@npm:3.3.1": - version: 3.3.1 - resolution: "@sentry/bundler-plugin-core@npm:3.3.1" +"@sentry/bundler-plugin-core@npm:4.6.1, @sentry/bundler-plugin-core@npm:^4.6.1": + version: 4.6.1 + resolution: "@sentry/bundler-plugin-core@npm:4.6.1" dependencies: "@babel/core": "npm:^7.18.5" - "@sentry/babel-plugin-component-annotate": "npm:3.3.1" - "@sentry/cli": "npm:2.42.2" + "@sentry/babel-plugin-component-annotate": "npm:4.6.1" + "@sentry/cli": "npm:^2.57.0" dotenv: "npm:^16.3.1" find-up: "npm:^5.0.0" - glob: "npm:^9.3.2" + glob: "npm:^10.5.0" magic-string: "npm:0.30.8" unplugin: "npm:1.0.1" - checksum: 10/61244c8d3bf12e7a72b6b281b1e5f5fcc83bb7eda09dd48dec9a288ec354dd57a446b9df997530cad2a060bb77e4c621d2278d2988ca78e264b0714cd0827ff4 + checksum: 10/9144b5dca6cb3846600e5829a95e183e89fbde05236a20402897d9eecc10b4f11bb94259777cdac9736deaf49d1c5ac7d9d3ef4f11bccb60981ce086d35e7abe languageName: node linkType: hard -"@sentry/cli-darwin@npm:2.42.2": - version: 2.42.2 - resolution: "@sentry/cli-darwin@npm:2.42.2" +"@sentry/cli-darwin@npm:2.58.4": + version: 2.58.4 + resolution: "@sentry/cli-darwin@npm:2.58.4" conditions: os=darwin languageName: node linkType: hard -"@sentry/cli-linux-arm64@npm:2.42.2": - version: 2.42.2 - resolution: "@sentry/cli-linux-arm64@npm:2.42.2" - conditions: (os=linux | os=freebsd) & cpu=arm64 +"@sentry/cli-linux-arm64@npm:2.58.4": + version: 2.58.4 + resolution: "@sentry/cli-linux-arm64@npm:2.58.4" + conditions: (os=linux | os=freebsd | os=android) & cpu=arm64 languageName: node linkType: hard -"@sentry/cli-linux-arm@npm:2.42.2": - version: 2.42.2 - resolution: "@sentry/cli-linux-arm@npm:2.42.2" - conditions: (os=linux | os=freebsd) & cpu=arm +"@sentry/cli-linux-arm@npm:2.58.4": + version: 2.58.4 + resolution: "@sentry/cli-linux-arm@npm:2.58.4" + conditions: (os=linux | os=freebsd | os=android) & cpu=arm languageName: node linkType: hard -"@sentry/cli-linux-i686@npm:2.42.2": - version: 2.42.2 - resolution: "@sentry/cli-linux-i686@npm:2.42.2" - conditions: (os=linux | os=freebsd) & (cpu=x86 | cpu=ia32) +"@sentry/cli-linux-i686@npm:2.58.4": + version: 2.58.4 + resolution: "@sentry/cli-linux-i686@npm:2.58.4" + conditions: (os=linux | os=freebsd | os=android) & (cpu=x86 | cpu=ia32) languageName: node linkType: hard -"@sentry/cli-linux-x64@npm:2.42.2": - version: 2.42.2 - resolution: "@sentry/cli-linux-x64@npm:2.42.2" - conditions: (os=linux | os=freebsd) & cpu=x64 +"@sentry/cli-linux-x64@npm:2.58.4": + version: 2.58.4 + resolution: "@sentry/cli-linux-x64@npm:2.58.4" + conditions: (os=linux | os=freebsd | os=android) & cpu=x64 languageName: node linkType: hard -"@sentry/cli-win32-i686@npm:2.42.2": - version: 2.42.2 - resolution: "@sentry/cli-win32-i686@npm:2.42.2" +"@sentry/cli-win32-arm64@npm:2.58.4": + version: 2.58.4 + resolution: "@sentry/cli-win32-arm64@npm:2.58.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@sentry/cli-win32-i686@npm:2.58.4": + version: 2.58.4 + resolution: "@sentry/cli-win32-i686@npm:2.58.4" conditions: os=win32 & (cpu=x86 | cpu=ia32) languageName: node linkType: hard -"@sentry/cli-win32-x64@npm:2.42.2": - version: 2.42.2 - resolution: "@sentry/cli-win32-x64@npm:2.42.2" +"@sentry/cli-win32-x64@npm:2.58.4": + version: 2.58.4 + resolution: "@sentry/cli-win32-x64@npm:2.58.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@sentry/cli@npm:2.42.2": - version: 2.42.2 - resolution: "@sentry/cli@npm:2.42.2" +"@sentry/cli@npm:^2.57.0": + version: 2.58.4 + resolution: "@sentry/cli@npm:2.58.4" dependencies: - "@sentry/cli-darwin": "npm:2.42.2" - "@sentry/cli-linux-arm": "npm:2.42.2" - "@sentry/cli-linux-arm64": "npm:2.42.2" - "@sentry/cli-linux-i686": "npm:2.42.2" - "@sentry/cli-linux-x64": "npm:2.42.2" - "@sentry/cli-win32-i686": "npm:2.42.2" - "@sentry/cli-win32-x64": "npm:2.42.2" + "@sentry/cli-darwin": "npm:2.58.4" + "@sentry/cli-linux-arm": "npm:2.58.4" + "@sentry/cli-linux-arm64": "npm:2.58.4" + "@sentry/cli-linux-i686": "npm:2.58.4" + "@sentry/cli-linux-x64": "npm:2.58.4" + "@sentry/cli-win32-arm64": "npm:2.58.4" + "@sentry/cli-win32-i686": "npm:2.58.4" + "@sentry/cli-win32-x64": "npm:2.58.4" https-proxy-agent: "npm:^5.0.0" node-fetch: "npm:^2.6.7" progress: "npm:^2.0.3" @@ -13288,13 +13692,22 @@ __metadata: optional: true "@sentry/cli-linux-x64": optional: true + "@sentry/cli-win32-arm64": + optional: true "@sentry/cli-win32-i686": optional: true "@sentry/cli-win32-x64": optional: true bin: sentry-cli: bin/sentry-cli - checksum: 10/f92800b54a88c2f9f1d7a2604bb6b4a17c429a836871df2b966595af7d382bdac490586b19e5ab81d278d38d498207fcdbd94ceba0a50acec2ab77f1a6a4f3af + checksum: 10/cf5df020ed96c05e74f742c80b4c5f16750ee82a6b6f3619c0edb964c5b02b4dfca5688eb8a5278274fce38f9cd2b770e20d9365253bb86e9f24ceb309f9f6eb + languageName: node + linkType: hard + +"@sentry/core@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/core@npm:10.33.0" + checksum: 10/e552bbac80602db8f98c52ea3e5f5f18ad51f1d64ee50d098d653ee3a3913619fa66bc3f4910b0a0e33ff8591e8d984180232dbe9fb79c257a2811f14db1f86b languageName: node linkType: hard @@ -13305,13 +13718,6 @@ __metadata: languageName: node linkType: hard -"@sentry/core@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry/core@npm:9.15.0" - checksum: 10/718238d93a35fb2344a0b55bdb4108213391558382f7a1e29ffc00118658bca2f78c383529f2efdea107447840a5deb696fec4f8208cbbe760086505c780437e - languageName: node - linkType: hard - "@sentry/core@npm:9.46.0": version: 9.46.0 resolution: "@sentry/core@npm:9.46.0" @@ -13337,27 +13743,46 @@ __metadata: languageName: node linkType: hard -"@sentry/nextjs@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry/nextjs@npm:9.15.0" +"@sentry/nextjs@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/nextjs@npm:10.33.0" dependencies: "@opentelemetry/api": "npm:^1.9.0" - "@opentelemetry/semantic-conventions": "npm:^1.30.0" + "@opentelemetry/semantic-conventions": "npm:^1.37.0" "@rollup/plugin-commonjs": "npm:28.0.1" - "@sentry-internal/browser-utils": "npm:9.15.0" - "@sentry/core": "npm:9.15.0" - "@sentry/node": "npm:9.15.0" - "@sentry/opentelemetry": "npm:9.15.0" - "@sentry/react": "npm:9.15.0" - "@sentry/vercel-edge": "npm:9.15.0" - "@sentry/webpack-plugin": "npm:3.3.1" - chalk: "npm:3.0.0" - resolve: "npm:1.22.8" - rollup: "npm:4.35.0" + "@sentry-internal/browser-utils": "npm:10.33.0" + "@sentry/bundler-plugin-core": "npm:^4.6.1" + "@sentry/core": "npm:10.33.0" + "@sentry/node": "npm:10.33.0" + "@sentry/opentelemetry": "npm:10.33.0" + "@sentry/react": "npm:10.33.0" + "@sentry/vercel-edge": "npm:10.33.0" + "@sentry/webpack-plugin": "npm:^4.6.1" + rollup: "npm:^4.35.0" stacktrace-parser: "npm:^0.1.10" peerDependencies: - next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 - checksum: 10/5adecc43d4c8d4e626dcfdfaf9198a69f5d5c8076c98c342af0bb05c8ed0f189a62fdb3ecdfdbfd8be94ce6b482b81ae6c2d32541771aaf4f0494e0937ae3c20 + next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 || ^16.0.0-0 + checksum: 10/db30c0c7e6e304a4be102c54c95d2a6a5c5b4826d263be04155290bc465acaa6aafb1c614044df3550b2a14db9943e52d2e5d8756263577e98d5ea454d5a183c + languageName: node + linkType: hard + +"@sentry/node-core@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/node-core@npm:10.33.0" + dependencies: + "@apm-js-collab/tracing-hooks": "npm:^0.3.1" + "@sentry/core": "npm:10.33.0" + "@sentry/opentelemetry": "npm:10.33.0" + import-in-the-middle: "npm:^2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + "@opentelemetry/context-async-hooks": ^1.30.1 || ^2.1.0 || ^2.2.0 + "@opentelemetry/core": ^1.30.1 || ^2.1.0 || ^2.2.0 + "@opentelemetry/instrumentation": ">=0.57.1 <1" + "@opentelemetry/resources": ^1.30.1 || ^2.1.0 || ^2.2.0 + "@opentelemetry/sdk-trace-base": ^1.30.1 || ^2.1.0 || ^2.2.0 + "@opentelemetry/semantic-conventions": ^1.37.0 + checksum: 10/739e691702383f3a930c30cf756b0e243daec9ae79d173eecc7614ea4dd4b6c64530371a95db12d908b7c281dbb4e0775fe75c1e9f527815a444d1c33acebaef languageName: node linkType: hard @@ -13380,45 +13805,46 @@ __metadata: languageName: node linkType: hard -"@sentry/node@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry/node@npm:9.15.0" +"@sentry/node@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/node@npm:10.33.0" dependencies: "@opentelemetry/api": "npm:^1.9.0" - "@opentelemetry/context-async-hooks": "npm:^1.30.1" - "@opentelemetry/core": "npm:^1.30.1" - "@opentelemetry/instrumentation": "npm:^0.57.2" - "@opentelemetry/instrumentation-amqplib": "npm:^0.46.1" - "@opentelemetry/instrumentation-connect": "npm:0.43.1" - "@opentelemetry/instrumentation-dataloader": "npm:0.16.1" - "@opentelemetry/instrumentation-express": "npm:0.47.1" - "@opentelemetry/instrumentation-fastify": "npm:0.44.2" - "@opentelemetry/instrumentation-fs": "npm:0.19.1" - "@opentelemetry/instrumentation-generic-pool": "npm:0.43.1" - "@opentelemetry/instrumentation-graphql": "npm:0.47.1" - "@opentelemetry/instrumentation-hapi": "npm:0.45.2" - "@opentelemetry/instrumentation-http": "npm:0.57.2" - "@opentelemetry/instrumentation-ioredis": "npm:0.47.1" - "@opentelemetry/instrumentation-kafkajs": "npm:0.7.1" - "@opentelemetry/instrumentation-knex": "npm:0.44.1" - "@opentelemetry/instrumentation-koa": "npm:0.47.1" - "@opentelemetry/instrumentation-lru-memoizer": "npm:0.44.1" - "@opentelemetry/instrumentation-mongodb": "npm:0.52.0" - "@opentelemetry/instrumentation-mongoose": "npm:0.46.1" - "@opentelemetry/instrumentation-mysql": "npm:0.45.1" - "@opentelemetry/instrumentation-mysql2": "npm:0.45.2" - "@opentelemetry/instrumentation-pg": "npm:0.51.1" - "@opentelemetry/instrumentation-redis-4": "npm:0.46.1" - "@opentelemetry/instrumentation-tedious": "npm:0.18.1" - "@opentelemetry/instrumentation-undici": "npm:0.10.1" - "@opentelemetry/resources": "npm:^1.30.1" - "@opentelemetry/sdk-trace-base": "npm:^1.30.1" - "@opentelemetry/semantic-conventions": "npm:^1.30.0" - "@prisma/instrumentation": "npm:6.6.0" - "@sentry/core": "npm:9.15.0" - "@sentry/opentelemetry": "npm:9.15.0" - import-in-the-middle: "npm:^1.13.0" - checksum: 10/7d49955720266152446f4943310223634f302ab55393e8d47e95d746ac10af0a6ac209fb412c8b27c158e93553f951b76d2cae08204ab59deb983713d02b65e4 + "@opentelemetry/context-async-hooks": "npm:^2.2.0" + "@opentelemetry/core": "npm:^2.2.0" + "@opentelemetry/instrumentation": "npm:^0.208.0" + "@opentelemetry/instrumentation-amqplib": "npm:0.55.0" + "@opentelemetry/instrumentation-connect": "npm:0.52.0" + "@opentelemetry/instrumentation-dataloader": "npm:0.26.0" + "@opentelemetry/instrumentation-express": "npm:0.57.0" + "@opentelemetry/instrumentation-fs": "npm:0.28.0" + "@opentelemetry/instrumentation-generic-pool": "npm:0.52.0" + "@opentelemetry/instrumentation-graphql": "npm:0.56.0" + "@opentelemetry/instrumentation-hapi": "npm:0.55.0" + "@opentelemetry/instrumentation-http": "npm:0.208.0" + "@opentelemetry/instrumentation-ioredis": "npm:0.56.0" + "@opentelemetry/instrumentation-kafkajs": "npm:0.18.0" + "@opentelemetry/instrumentation-knex": "npm:0.53.0" + "@opentelemetry/instrumentation-koa": "npm:0.57.0" + "@opentelemetry/instrumentation-lru-memoizer": "npm:0.53.0" + "@opentelemetry/instrumentation-mongodb": "npm:0.61.0" + "@opentelemetry/instrumentation-mongoose": "npm:0.55.0" + "@opentelemetry/instrumentation-mysql": "npm:0.54.0" + "@opentelemetry/instrumentation-mysql2": "npm:0.55.0" + "@opentelemetry/instrumentation-pg": "npm:0.61.0" + "@opentelemetry/instrumentation-redis": "npm:0.57.0" + "@opentelemetry/instrumentation-tedious": "npm:0.27.0" + "@opentelemetry/instrumentation-undici": "npm:0.19.0" + "@opentelemetry/resources": "npm:^2.2.0" + "@opentelemetry/sdk-trace-base": "npm:^2.2.0" + "@opentelemetry/semantic-conventions": "npm:^1.37.0" + "@prisma/instrumentation": "npm:6.19.0" + "@sentry/core": "npm:10.33.0" + "@sentry/node-core": "npm:10.33.0" + "@sentry/opentelemetry": "npm:10.33.0" + import-in-the-middle: "npm:^2.0.1" + minimatch: "npm:^9.0.0" + checksum: 10/3903907940a8a7c8a9ffb0d0addccf319307c1fa7cfe54808176314b187144c61709cdcd0ba9b9fe3a8facfe43ca47f74fe680b9f75195b03afbc1097f0e9dc4 languageName: node linkType: hard @@ -13465,19 +13891,18 @@ __metadata: languageName: node linkType: hard -"@sentry/opentelemetry@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry/opentelemetry@npm:9.15.0" +"@sentry/opentelemetry@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/opentelemetry@npm:10.33.0" dependencies: - "@sentry/core": "npm:9.15.0" + "@sentry/core": "npm:10.33.0" peerDependencies: "@opentelemetry/api": ^1.9.0 - "@opentelemetry/context-async-hooks": ^1.30.1 - "@opentelemetry/core": ^1.30.1 - "@opentelemetry/instrumentation": ^0.57.1 - "@opentelemetry/sdk-trace-base": ^1.30.1 - "@opentelemetry/semantic-conventions": ^1.28.0 - checksum: 10/a899cf452057c224be2661e3a6fcc43f08b83fbcc585dd9ee0f4c0764af1ee835dc95026c0ff9d0005591892e0b08a90be3827a8aef6c74be1ec926e2f1c7eb0 + "@opentelemetry/context-async-hooks": ^1.30.1 || ^2.1.0 || ^2.2.0 + "@opentelemetry/core": ^1.30.1 || ^2.1.0 || ^2.2.0 + "@opentelemetry/sdk-trace-base": ^1.30.1 || ^2.1.0 || ^2.2.0 + "@opentelemetry/semantic-conventions": ^1.37.0 + checksum: 10/a06ccdaff9bba994f2d81ebeaafbbcf586041446acc0d2357ed691fa55c7613bbbdf6c1f8e631eee22f9c3f06182fbf6b08ab7b2bde0531f2cfd7a6d963964b3 languageName: node linkType: hard @@ -13509,39 +13934,39 @@ __metadata: languageName: node linkType: hard -"@sentry/react@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry/react@npm:9.15.0" +"@sentry/react@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/react@npm:10.33.0" dependencies: - "@sentry/browser": "npm:9.15.0" - "@sentry/core": "npm:9.15.0" - hoist-non-react-statics: "npm:^3.3.2" + "@sentry/browser": "npm:10.33.0" + "@sentry/core": "npm:10.33.0" peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x - checksum: 10/e58ac349d6b75fb6a1232c54e6c5efe3b88aed9ecbbe5619b358ea1f41975e06a1677a650f90c1b2d57ef5533022ccf77d28004a965510dda5b61bd3304ec90f + checksum: 10/695aea712a4c5c1b65d562b100afd54d8035fa0c1dda15835e987901c3b70d5942dbe652ec84d8714ceb489dcda4a759e2a2ed1c07390716ff368451919777b5 languageName: node linkType: hard -"@sentry/vercel-edge@npm:9.15.0": - version: 9.15.0 - resolution: "@sentry/vercel-edge@npm:9.15.0" +"@sentry/vercel-edge@npm:10.33.0": + version: 10.33.0 + resolution: "@sentry/vercel-edge@npm:10.33.0" dependencies: "@opentelemetry/api": "npm:^1.9.0" - "@sentry/core": "npm:9.15.0" - checksum: 10/b2db3d960ba3ddd3db08c27801a7efa26a5472ca587219a00e9c66310b3b60c29faf5d272306d5077b565ca30bb2d513dcaa64eca46d9ef5f0d1ea0d0dd235f5 + "@opentelemetry/resources": "npm:^2.2.0" + "@sentry/core": "npm:10.33.0" + checksum: 10/841ef63bbfbd36207a69203d1b1adcea98257d19089f959663d3a7193ba834217bcb8b653d672125080f74e5efe0f1778ea02e7d201e6c0c57d890e50d90387a languageName: node linkType: hard -"@sentry/webpack-plugin@npm:3.3.1": - version: 3.3.1 - resolution: "@sentry/webpack-plugin@npm:3.3.1" +"@sentry/webpack-plugin@npm:^4.6.1": + version: 4.6.1 + resolution: "@sentry/webpack-plugin@npm:4.6.1" dependencies: - "@sentry/bundler-plugin-core": "npm:3.3.1" + "@sentry/bundler-plugin-core": "npm:4.6.1" unplugin: "npm:1.0.1" uuid: "npm:^9.0.0" peerDependencies: webpack: ">=4.40.0" - checksum: 10/199b12ce0074986d87268897edfd537eea1746886b7e99068a036f512102358a56fc7c8614bb6d6036ff44111fa28edf6ae05fd27303230f43390d0193dd2fe4 + checksum: 10/3a5fd82f60505e2724a3a458001dd9a95228607bb17e4425a7b3ed7cb211098a5a9fbcd3b5be613f1f91675f9bebad38142c102cbe48e9167f216c23ab8d0e6a languageName: node linkType: hard @@ -15814,6 +16239,15 @@ __metadata: languageName: node linkType: hard +"@types/mysql@npm:2.15.27": + version: 2.15.27 + resolution: "@types/mysql@npm:2.15.27" + dependencies: + "@types/node": "npm:*" + checksum: 10/a8c743501036f494bb8b26ee04ce914c9cce88955d9ba48ff77d2b5b1bc403d4d99804dbf02238c1491fa93e2242983b1492ad8c2b39755dabd68683dada9e8f + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.6.11, @types/node-fetch@npm:^2.6.4": version: 2.6.12 resolution: "@types/node-fetch@npm:2.6.12" @@ -15915,6 +16349,17 @@ __metadata: languageName: node linkType: hard +"@types/pg@npm:8.15.6": + version: 8.15.6 + resolution: "@types/pg@npm:8.15.6" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^2.2.0" + checksum: 10/4bc1bb274e0fc105be93e3a9cc8c9aa57fc50b78ed78a56348468157332daaecd71fcab762ee620c766510ffbc7018b56ca394787d6d41ff1726b152770aa532 + languageName: node + linkType: hard + "@types/pg@npm:8.6.1": version: 8.6.1 resolution: "@types/pg@npm:8.6.1" @@ -18567,16 +19012,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:3.0.0, chalk@npm:^3.0.0": - version: 3.0.0 - resolution: "chalk@npm:3.0.0" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10/37f90b31fd655fb49c2bd8e2a68aebefddd64522655d001ef417e6f955def0ed9110a867ffc878a533f2dafea5f2032433a37c8a7614969baa7f8a1cd424ddfc - languageName: node - linkType: hard - "chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -18605,6 +19040,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10/37f90b31fd655fb49c2bd8e2a68aebefddd64522655d001ef417e6f955def0ed9110a867ffc878a533f2dafea5f2032433a37c8a7614969baa7f8a1cd424ddfc + languageName: node + linkType: hard + "change-case-all@npm:1.0.15": version: 1.0.15 resolution: "change-case-all@npm:1.0.15" @@ -20416,7 +20861,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0, debug@npm:^4.4.3": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -23583,6 +24028,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.5.0": + version: 10.5.0 + resolution: "glob@npm:10.5.0" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10/ab3bccfefcc0afaedbd1f480cd0c4a2c0e322eb3f0aa7ceaa31b3f00b825069f17cf0f1fc8b6f256795074b903f37c0ade37ddda6a176aa57f1c2bbfe7240653 + languageName: node + linkType: hard + "glob@npm:^7.0.0, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -23610,7 +24071,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^9.2.0, glob@npm:^9.3.2": +"glob@npm:^9.2.0": version: 9.3.5 resolution: "glob@npm:9.3.5" dependencies: @@ -25176,7 +25637,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.1, is-core-module@npm:^2.5.0": +"is-core-module@npm:^2.16.1, is-core-module@npm:^2.5.0": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" dependencies: @@ -29284,6 +29745,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.4": + version: 1.0.4 + resolution: "module-details-from-path@npm:1.0.4" + checksum: 10/2ebfada5358492f6ab496b70f70a1042f2ee7a4c79d29467f59ed6704f741fb4461d7cecb5082144ed39a05fec4d19e9ff38b731c76228151be97227240a05b2 + languageName: node + linkType: hard + "moment-timezone@npm:^0.5.31, moment-timezone@npm:^0.5.34": version: 0.5.43 resolution: "moment-timezone@npm:0.5.43" @@ -33974,6 +34442,16 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^8.0.0": + version: 8.0.1 + resolution: "require-in-the-middle@npm:8.0.1" + dependencies: + debug: "npm:^4.3.5" + module-details-from-path: "npm:^1.0.3" + checksum: 10/4ce98c681489d383a0ffccb79b06df7a1dffbb31c13f3b713ae2c5a1967597a259e67612507ef69748d83d531bba7c9bb0477211771fe78c685e1d52b1a44b64 + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -34032,19 +34510,6 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.8": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/c473506ee01eb45cbcfefb68652ae5759e092e6b0fb64547feadf9736a6394f258fbc6f88e00c5ca36d5477fbb65388b272432a3600fa223062e54333c156753 - languageName: node - linkType: hard - "resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.22.8, resolve@npm:~1.22.1, resolve@npm:~1.22.2": version: 1.22.11 resolution: "resolve@npm:1.22.11" @@ -34058,19 +34523,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A1.22.8#optional!builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10/f345cd37f56a2c0275e3fe062517c650bb673815d885e7507566df589375d165bbbf4bdb6aa95600a9bc55f4744b81f452b5a63f95b9f10a72787dba3c90890a - languageName: node - linkType: hard - "resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.12.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin, resolve@patch:resolve@npm%3A~1.22.1#optional!builtin, resolve@patch:resolve@npm%3A~1.22.2#optional!builtin": version: 1.22.11 resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d"