diff --git a/packages/cli/src/lib/api/events.ts b/packages/cli/src/lib/api/events.ts index 678bda9ea..8b08dca80 100644 --- a/packages/cli/src/lib/api/events.ts +++ b/packages/cli/src/lib/api/events.ts @@ -6,7 +6,6 @@ import { type EventAttachmentDetailsResponse, - type GetOrganizationIssueEventData, getOrganizationIssueEvent, getProjectEvent, listOrganizationIssueEvents, @@ -44,13 +43,6 @@ export async function getLatestEvent( issueId: string, ): Promise { const config = await getOrgSdkConfig(orgSlug); - // `collapse=adjacentEvents` lets Sentry skip the next/previous-event Snuba - // lookups; the CLI never reads `nextEventID` or `previousEventID`. The - // generated query type omits `collapse`, so the intersection keeps the - // server-supported parameter without weakening the generated client type. - const query: NonNullable & { - collapse: string[]; - } = { collapse: ["adjacentEvents"] }; const result = await getOrganizationIssueEvent({ ...config, @@ -59,7 +51,6 @@ export async function getLatestEvent( issue_id: issueId, event_id: "latest", }, - query, }); return unwrapResult(result, "Failed to get latest event"); diff --git a/packages/cli/test/lib/api-client.coverage.test.ts b/packages/cli/test/lib/api-client.coverage.test.ts index 374c65940..fd19c3f93 100644 --- a/packages/cli/test/lib/api-client.coverage.test.ts +++ b/packages/cli/test/lib/api-client.coverage.test.ts @@ -1006,9 +1006,6 @@ describe("events.ts", () => { const req = new Request(input!, init); expect(req.url).toContain("/organizations/test-org/issues/"); expect(req.url).toContain("/events/latest/"); - expect(new URL(req.url).searchParams.getAll("collapse")).toEqual([ - "adjacentEvents", - ]); return new Response(JSON.stringify(event), { status: 200, headers: { "Content-Type": "application/json" }, diff --git a/packages/toolkit-core/src/response-cache/tiers.test.ts b/packages/toolkit-core/src/response-cache/tiers.test.ts index 0c4dd0085..aba16a91b 100644 --- a/packages/toolkit-core/src/response-cache/tiers.test.ts +++ b/packages/toolkit-core/src/response-cache/tiers.test.ts @@ -34,6 +34,14 @@ describe("classifyUrl", () => { ).toBe("volatile"); }); + it("keeps project events volatile when adjacent events are collapsed", () => { + expect( + classifyUrl( + `${API}/projects/acme/backend/events/deadbeef/?collapse=adjacentEvents`, + ), + ).toBe("volatile"); + }); + it("reuses full traces for at most 60 seconds, since spans can still arrive", () => { const url = `${API}/organizations/acme/trace/${TRACE_ID}/?limit=100`; expect(classifyUrl(url)).toBe("volatile"); diff --git a/packages/toolkit-core/src/response-cache/tiers.ts b/packages/toolkit-core/src/response-cache/tiers.ts index 321836f9f..4ad9b72a7 100644 --- a/packages/toolkit-core/src/response-cache/tiers.ts +++ b/packages/toolkit-core/src/response-cache/tiers.ts @@ -49,8 +49,9 @@ const URL_TIER_PATTERNS: readonly [TtlTier, readonly RegExp[]][] = [ /\/trace-logs\//, // Full traces gain spans as they arrive /\/trace\/[0-9a-f]{32}\//, - // Project event details embed `nextEventID`/`previousEventID` and user - // reports, and reprocessing can change them for the same ID + // Project event details embed user reports (and `nextEventID`/ + // `previousEventID` unless collapsed), and reprocessing can change them + // for the same ID /\/projects\/[^/]+\/[^/]+\/events\/[^/?]+\/?(?:\?|$)/, ], ],