Skip to content

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

Package listing

@kody/kit

src/index.ts

176 lines · 4.5 KB · TypeScript
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)
}