Skip to content

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

Package listing

@kody/zendesk

src/index.ts

97 lines · 2.7 KB · TypeScript
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)
}