Skip to content
← Public packages

@kentcdodds/sentry

Inspect Sentry organizations, projects, issues, and event summaries.

src/search-issues.ts

44 lines · 1.6 KB · TypeScript
import {
  type SearchIssuesInput,
  type SearchIssuesWithLatestSummariesInput,
  type SummarizeIssueEventOptions,
  requireRecord,
  requireStringOrNumber,
  searchIssues,
  searchIssuesPage,
  searchIssuesWithLatestSummaries,
} from './client.ts'

type SearchIssuesEntrypointInput = SearchIssuesInput & {
  paginated?: boolean
  includeLatestSummaries?: boolean
  summaryOptions?: SummarizeIssueEventOptions
}

/**
 * Search Sentry issues with optional pagination cursors or latest-event summaries.
 *
 * @param params.orgSlug - Organization slug (required).
 * @param params.query - Sentry search query; default unresolved issues.
 * @param params.paginated - When true, return `{ issues, nextCursor, previousCursor }`.
 * @param params.includeLatestSummaries - When true, attach `latestEventSummary` per issue.
 * @returns Issue array, paginated page, or issues with summaries depending on flags.
 * @example
 * import searchIssues from 'kody:@kentcdodds/sentry/search-issues'
 * const issues = await searchIssues({ orgSlug: 'kent-c-dodds-tech-llc', query: 'is:unresolved', statsPeriod: '24h', limit: 5 })
 * // => [{ id: '...', title: '...', count: 12 }]
 */
export default async function searchIssuesEntrypoint(params: unknown) {
  const input = requireRecord(params, 'search-issues') as SearchIssuesEntrypointInput
  requireStringOrNumber(input, 'orgSlug', 'search-issues')

  if (input.includeLatestSummaries) {
    return searchIssuesWithLatestSummaries(input as SearchIssuesWithLatestSummariesInput)
  }

  if (input.paginated) {
    return searchIssuesPage(input)
  }

  return searchIssues(input)
}