export type JsonRecord = Record export type SentryClientOptions = { /** API host. Default `sentry.io`. Also `us.sentry.io`, `de.sentry.io`, or a self-hosted hostname. */ host?: string /** Saved Kody secret name. Default `sentryAuthToken`. Ignored when `integration` is set. */ secretName?: string /** Saved Kody OAuth integration name, for example `sentry` or `sentry-work`. */ integration?: string } export type SentryOrganization = JsonRecord & { slug: string name?: string } export type SentryProject = JsonRecord & { slug: string name?: string id?: string } export type SentryIssue = JsonRecord & { id: string title?: string shortId?: string status?: string permalink?: string } export type SentryEvent = JsonRecord & { id?: string eventID?: string title?: string message?: string entries?: unknown[] tags?: unknown contexts?: unknown } export type SearchIssuesInput = SentryClientOptions & { orgSlug: string query?: string statsPeriod?: string limit?: number project?: string | number | Array projectSlug?: string cursor?: string } export type SearchIssuesWithLatestSummariesInput = SearchIssuesInput & { summaryOptions?: SummarizeIssueEventOptions } export type ResolveProjectInput = SentryClientOptions & { orgSlug: string projectSlug?: string projectId?: string | number } export type ListProjectsInput = SentryClientOptions & { orgSlug: string } export type ListOrganizationsInput = SentryClientOptions export type IssueInput = SentryClientOptions & { issueId: string | number } export type IssueEventsInput = IssueInput & { limit?: number cursor?: string } export type SummarizeIssueEventOptions = { maxBreadcrumbs?: number maxFramesPerException?: number } export type SentryExceptionSummary = { type?: string value?: string module?: string mechanism?: unknown frameCount: number frames: Array<{ function?: string module?: string filename?: string absPath?: string lineNo?: number colNo?: number inApp?: boolean contextLine?: string }> } export type SentryBreadcrumbSummary = { timestamp?: string type?: string category?: string level?: string message?: string data?: unknown } export type SentryEventSummary = { id?: string eventId?: string title?: string message?: string culprit?: string platform?: string projectId?: string groupId?: string release?: string environment?: string timestamp?: string exceptionChain: SentryExceptionSummary[] tags: Record breadcrumbs: SentryBreadcrumbSummary[] contexts: JsonRecord contextKeys: string[] user?: unknown request?: unknown } export type SentryPaginationLink = { cursor?: string hasResults: boolean url?: string } export type SentryPage = { items: T next?: SentryPaginationLink previous?: SentryPaginationLink } export type IssueWithLatestSummary = { issue: SentryIssue latestEventSummary: SentryEventSummary | null latestEventError?: { name?: string message: string status?: number } } export type IssueTriageInput = IssueInput & { recentEventLimit?: number options?: SummarizeIssueEventOptions } export type IssueTriage = { issue: { id: string shortId?: string title?: string status?: string level?: string permalink?: string firstSeen?: string lastSeen?: string count?: string | number userCount?: string | number project?: unknown assignedTo?: unknown } latestEventSummary: SentryEventSummary | null recentEventSummaries: SentryEventSummary[] signals: { exceptionTypes: string[] likelyCulprit?: string topInAppFrames: SentryExceptionSummary['frames'] tagKeys: string[] contextKeys: string[] recentBreadcrumbs: SentryBreadcrumbSummary[] } } export type SentryRequestInput = SentryClientOptions & { path: string query?: Record> init?: RequestInit /** Mutating methods default to dry-run. Pass `false` only after confirmation. */ dryRun?: boolean } export type SentryDryRunResult = { dryRun: true wouldCall: { method: string host: string path: string query?: SentryRequestInput['query'] body?: unknown } }