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.
* @param params.host - Optional API host. Default `sentry.io`.
* @returns Issue array, paginated page, or issues with summaries depending on flags.
* @example
* import searchIssues from 'kody:@kody/sentry/search-issues'
* const issues = await searchIssues({ orgSlug: 'acme', 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)
}