import { parseAction } from './types.ts'
import { accounts } from './accounts.ts'
import { configure } from './configure.ts'
import { getMe } from './me.ts'
import { request } from './request.ts'
import {
addTicketComment,
createTicket,
getTicket,
listTicketComments,
listTickets,
searchTickets,
updateTicket,
} from './tickets.ts'
import { createUser, getUser, listUsers, searchUsers, updateUser } from './users.ts'
import { createArticle, getArticle, listArticles, searchArticles, updateArticle } from './articles.ts'
import { smokeTest } from './smoke-test.ts'
import {
API_TOKEN_SETUP_URL,
API_USERNAME_SETUP_URL,
DEFAULT_INTEGRATION_NAME,
DEFAULT_TOKEN_SECRET,
DEFAULT_USERNAME_SECRET,
OAUTH_CONNECT_URL,
ZENDESK_CALLBACK_URL,
ZENDESK_SCOPES,
} from './setup.ts'
export {
API_TOKEN_SETUP_URL,
API_USERNAME_SETUP_URL,
DEFAULT_INTEGRATION_NAME,
DEFAULT_TOKEN_SECRET,
DEFAULT_USERNAME_SECRET,
OAUTH_CONNECT_URL,
ZENDESK_CALLBACK_URL,
ZENDESK_SCOPES,
}
export { ZendeskApiError } from './client.ts'
export { accounts } from './accounts.ts'
export { configure } from './configure.ts'
export { getMe } from './me.ts'
export { request } from './request.ts'
export {
addTicketComment,
createTicket,
getTicket,
listTicketComments,
listTickets,
searchTickets,
updateTicket,
} from './tickets.ts'
export { createUser, getUser, listUsers, searchUsers, updateUser } from './users.ts'
export { createArticle, getArticle, listArticles, searchArticles, updateArticle } from './articles.ts'
export { smokeTest } from './smoke-test.ts'
const actions = {
'smoke-test': smokeTest,
accounts,
configure,
me: getMe,
request,
'list-tickets': listTickets,
'get-ticket': getTicket,
'search-tickets': searchTickets,
'create-ticket': createTicket,
'update-ticket': updateTicket,
'list-ticket-comments': listTicketComments,
'add-ticket-comment': addTicketComment,
'list-users': listUsers,
'get-user': getUser,
'search-users': searchUsers,
'create-user': createUser,
'update-user': updateUser,
'list-articles': listArticles,
'get-article': getArticle,
'search-articles': searchArticles,
'create-article': createArticle,
'update-article': updateArticle,
} as const
export type ZendeskAction = keyof typeof actions
const actionNames = Object.keys(actions) as Array<ZendeskAction>
/**
* Root dispatcher for Zendesk helpers. Defaults to the read-only smoke test.
* Mutations require `confirm: true` or `dryRun: true`.
* @example
* import zendesk from 'kody:@kody/zendesk'
* const result = await zendesk({ action: 'smoke-test' })
*/
export default async function zendesk(input: Record<string, unknown> = {}) {
const action = parseAction(input.action, actionNames, 'smoke-test', 'Zendesk')
const handler = actions[action]
return await handler(input as never)
}