Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/sentry

src/search-issues.ts

45 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.
 * @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)
}