import { parseAction } from './types.ts'
import { accounts } from './accounts.ts'
import { getAccount, getAccountEmailStats, getAccountGrowthStats } from './account.ts'
import { request } from './request.ts'
import {
createSubscriber,
getSubscriber,
getSubscriberByEmail,
listSubscriberTags,
listSubscribers,
subscribeAndTag,
unsubscribeSubscriber,
updateSubscriber,
} from './subscribers.ts'
import {
createTag,
ensureTag,
listTagSubscribers,
listTags,
tagSubscriber,
untagSubscriber,
} from './tags.ts'
import { addSubscriberToForm, listForms, listSegments } from './forms.ts'
import {
createBroadcastDraft,
deleteBroadcast,
getBroadcast,
getBroadcastStats,
listBroadcasts,
updateBroadcast,
} from './broadcasts.ts'
import {
addSubscriberToSequence,
createSequence,
createSequenceEmail,
getSequence,
getSequenceEmail,
listSequenceEmails,
listSequences,
updateSequenceEmail,
} from './sequences.ts'
import { smokeTest } from './smoke-test.ts'
import {
API_KEY_SETUP_URL,
DEFAULT_API_KEY_SECRET,
DEFAULT_INTEGRATION_NAME,
DEFAULT_OAUTH_SCOPES,
KIT_API_BASE_URL,
KIT_CALLBACK_URL,
KIT_REQUIRED_HOSTS,
KIT_SCOPES,
OAUTH_CONNECT_URL,
} from './setup.ts'
export {
API_KEY_SETUP_URL,
DEFAULT_API_KEY_SECRET,
DEFAULT_INTEGRATION_NAME,
DEFAULT_OAUTH_SCOPES,
KIT_API_BASE_URL,
KIT_CALLBACK_URL,
KIT_REQUIRED_HOSTS,
KIT_SCOPES,
OAUTH_CONNECT_URL,
}
export { KitApiError } from './client.ts'
export { mutationPreview, rejectBroadcastSend } from './safety.ts'
export { accounts } from './accounts.ts'
export { getAccount, getAccountEmailStats, getAccountGrowthStats } from './account.ts'
export { request } from './request.ts'
export {
createSubscriber,
getSubscriber,
getSubscriberByEmail,
listSubscriberTags,
listSubscribers,
subscribeAndTag,
subscriberSummary,
unsubscribeSubscriber,
updateSubscriber,
} from './subscribers.ts'
export {
createTag,
ensureTag,
listTagSubscribers,
listTags,
tagSubscriber,
tagSummary,
untagSubscriber,
} from './tags.ts'
export { addSubscriberToForm, listForms, listSegments } from './forms.ts'
export {
broadcastSummary,
createBroadcastDraft,
deleteBroadcast,
getBroadcast,
getBroadcastStats,
listBroadcasts,
updateBroadcast,
} from './broadcasts.ts'
export {
addSubscriberToSequence,
createSequence,
createSequenceEmail,
getSequence,
getSequenceEmail,
listSequenceEmails,
listSequences,
updateSequenceEmail,
} from './sequences.ts'
export {
buildLinkedImage,
buildLinkedImageBlock,
buildLiquidGreeting,
buildParagraph,
buildUnorderedList,
joinEmailBlocks,
} from './html.ts'
export { smokeTest } from './smoke-test.ts'
const actions = {
'smoke-test': smokeTest,
accounts,
account: getAccount,
'account-email-stats': getAccountEmailStats,
'account-growth-stats': getAccountGrowthStats,
request,
'list-subscribers': listSubscribers,
'get-subscriber': getSubscriber,
'get-subscriber-by-email': getSubscriberByEmail,
'create-subscriber': createSubscriber,
'update-subscriber': updateSubscriber,
'unsubscribe-subscriber': unsubscribeSubscriber,
'list-subscriber-tags': listSubscriberTags,
'subscribe-and-tag': subscribeAndTag,
'list-tags': listTags,
'create-tag': createTag,
'ensure-tag': ensureTag,
'tag-subscriber': tagSubscriber,
'untag-subscriber': untagSubscriber,
'list-tag-subscribers': listTagSubscribers,
'list-forms': listForms,
'add-subscriber-to-form': addSubscriberToForm,
'list-segments': listSegments,
'list-broadcasts': listBroadcasts,
'get-broadcast': getBroadcast,
'broadcast-stats': getBroadcastStats,
'create-broadcast-draft': createBroadcastDraft,
'update-broadcast': updateBroadcast,
'delete-broadcast': deleteBroadcast,
'list-sequences': listSequences,
'get-sequence': getSequence,
'create-sequence': createSequence,
'list-sequence-emails': listSequenceEmails,
'create-sequence-email': createSequenceEmail,
'get-sequence-email': getSequenceEmail,
'update-sequence-email': updateSequenceEmail,
'add-subscriber-to-sequence': addSubscriberToSequence,
} as const
export type KitAction = keyof typeof actions
const actionNames = Object.keys(actions) as Array<KitAction>
/**
* Root dispatcher for Kit helpers. Defaults to the read-only smoke test.
* Broadcast helpers are draft-only and never send.
* @example
* import kit from 'kody:@kody/kit'
* const result = await kit({ action: 'smoke-test' })
*/
export default async function kit(input: Record<string, unknown> = {}) {
const action = parseAction(input.action, actionNames, 'smoke-test', 'Kit')
const handler = actions[action]
return await handler(input as never)
}