← Public packages
@kentcdodds/kit
Kit.com helpers for subscribers, tags, forms, sequences, and broadcasts.
src/named.d.ts
353 lines · 8.2 KB · TypeScript/**
* Named Kit.com helpers (HTML, broadcasts, subscribers, sequences, constants).
* Prefer focused paths when one exists; root `.` is draft-only createBroadcastDraft.
*/
export const KIT_API_BASE_URL: string
export const KIT_SECRET_NAME: string
export const KIT_TEMPLATES: {
textOnly: number
epePodcast: number
betterWithKent: number
}
export const KIT_MUTE_TAGS: {
betterWithKentYoutube: number
}
export const BWK_YOUTUBE_BROADCAST_DEFAULTS: {
email_address: string
email_template_id: number
public: boolean
subscriber_filter: Array<{
none: Array<{ type: 'tag'; ids: number[] }>
}>
}
export const EPE_SEQUENCE_ID: number
export class KitApiError extends Error {
status?: number
body?: unknown
method?: string
path?: string
}
export function parseOkJson(
response: Response,
meta?: { method?: string; path?: string },
): Promise<unknown>
export function callParsed(
fn: (input?: Record<string, unknown>, options?: { fetchImpl?: typeof fetch }) => Promise<Response>,
input?: Record<string, unknown>,
meta?: { method?: string; path?: string },
): Promise<unknown>
export function listAll(
fn: (input?: Record<string, unknown>) => Promise<Response>,
itemKey: string,
query?: Record<string, string | number | boolean | null | undefined>,
options?: { maxItems?: number },
): Promise<unknown[]>
export type KitQuery = Record<string, string | number | boolean | null | undefined>
export type BroadcastSummary = {
id: number
subject?: string
status?: string
editUrl: string
}
export type SubscriberFilterClause = {
none?: Array<{ type: 'tag' | string; ids: number[] }>
any?: Array<{ type: 'tag' | string; ids: number[] }>
all?: Array<{ type: 'tag' | string; ids: number[] }>
}
export type BroadcastDraftInput = {
/** Required email subject. */
subject: string
/** Required HTML body. */
content: string
preview_text?: string
description?: string
thumbnail_url?: string
thumbnail_alt?: string
email_address?: string
email_template_id?: number
public?: boolean
send_at?: string | null
subscriber_filter?: SubscriberFilterClause[]
}
export type BroadcastDetail = BroadcastSummary & {
preview_text?: unknown
description?: unknown
content?: unknown
thumbnail_url?: unknown
thumbnail_alt?: unknown
email_address?: unknown
email_template?: unknown
public?: unknown
send_at?: unknown
subscriber_filter?: unknown
public_url?: unknown
}
export type SequenceEmailSummary = {
id: number
sequenceId?: number
subject?: string
published?: boolean
}
export type SequenceCreateInput = {
name: string
email_address?: string
email_template_id?: number
active?: boolean
repeat?: boolean
}
export type SequenceEmailCreateInput = {
subject: string
content?: string
published?: boolean
}
export type FormSummary = {
id?: number
name?: string
created_at?: string
[key: string]: unknown
}
export type SegmentSummary = {
id?: number
name?: string
[key: string]: unknown
}
export type SequenceSummary = {
id?: number
name?: string
active?: boolean
email_address?: string
[key: string]: unknown
}
export function broadcastSummary(
broadcast: { id?: number; subject?: string; status?: string } | null | undefined,
): BroadcastSummary | null
export function sequenceEmailSummary(
email:
| {
id?: number
sequence_id?: number
subject?: string
published?: boolean
}
| null
| undefined,
): SequenceEmailSummary | null
export function getCurrentAccount(query?: KitQuery): Promise<unknown>
export function getAccountEmailStats(query?: KitQuery): Promise<unknown>
export function getAccountGrowthStats(query?: KitQuery): Promise<unknown>
export function getBroadcastStats(
broadcastId: number | string,
query?: KitQuery,
): Promise<unknown>
export function getBroadcastsStats(query?: KitQuery): Promise<unknown>
export function listSequences(
query?: KitQuery & { maxItems?: number },
): Promise<SequenceSummary[]>
export function getSequence(
id: number | string,
query?: KitQuery,
): Promise<unknown>
export function listSequenceEmails(
sequenceId: number | string,
query?: KitQuery & { maxItems?: number },
): Promise<unknown[]>
export function buildLiquidGreeting(options: {
withName: string
withoutName: string
}): string
export function buildParagraph(html: string): string
export function buildLinkedImage(options: {
href: string
src: string
alt?: string
}): string
export function buildWorkshopImageBlock(options: {
href: string
src: string
alt?: string
caption?: string
}): string
export function buildUnorderedList(items: string[]): string
export function joinEmailBlocks(
blocks: string[],
options?: { separator?: string },
): string
export function createBroadcastDraft(
input: BroadcastDraftInput,
): Promise<BroadcastDetail>
export function createBwkYoutubeBroadcastDraft(
input: BroadcastDraftInput,
): Promise<BroadcastDetail>
export function updateBroadcast(
id: number,
input: Partial<BroadcastDraftInput> & Record<string, unknown>,
): Promise<BroadcastDetail>
export function getBroadcast(id: number): Promise<BroadcastDetail>
export function listBroadcasts(query?: {
status?: string
per_page?: number
maxItems?: number
}): Promise<BroadcastSummary[]>
export function deleteBroadcast(id: number): Promise<BroadcastSummary>
export type SubscriberSummary = {
id: number
email_address?: string
first_name?: string
state?: string
created_at?: string
fields?: Record<string, unknown>
}
export function subscriberSummary(
subscriber: Record<string, unknown> | null | undefined,
): SubscriberSummary | null
export function createSubscriber(input: {
email_address: string
first_name?: string
state?: string
fields?: Record<string, string>
}): Promise<SubscriberSummary>
export function getSubscriber(id: number | string): Promise<SubscriberSummary>
export function getSubscriberByEmail(
emailAddress: string,
): Promise<SubscriberSummary | null>
export function updateSubscriber(
id: number | string,
fields: Record<string, unknown>,
): Promise<SubscriberSummary>
export function unsubscribeSubscriber(
id: number | string,
): Promise<{ id: number | string; unsubscribed: true }>
export function listSubscribers(
query?: KitQuery & { maxItems?: number },
): Promise<SubscriberSummary[]>
export function listSubscriberTags(
subscriberId: number | string,
): Promise<Array<{ id: number; name: string }>>
export function listTags(query?: {
maxItems?: number
}): Promise<Array<{ id: number; name: string }>>
export function createTag(name: string): Promise<{ id: number; name: string }>
export function ensureTag(name: string): Promise<{ id: number; name: string }>
export function tagSubscriberByEmail(
tagId: number | string,
emailAddress: string,
): Promise<SubscriberSummary | null>
export function untagSubscriber(
tagId: number | string,
subscriberId: number | string,
): Promise<{ tagId: number | string; subscriberId: number | string; untagged: true }>
export function listTagSubscribers(
tagId: number | string,
query?: KitQuery & { maxItems?: number },
): Promise<SubscriberSummary[]>
export function subscribeAndTag(input: {
email_address: string
first_name?: string
fields?: Record<string, string>
tagName?: string
tagId?: number | string
}): Promise<{
subscriber: SubscriberSummary
tag: { id: number; name?: string }
}>
export function listForms(
query?: KitQuery & { maxItems?: number },
): Promise<FormSummary[]>
export function addSubscriberToForm(
formId: number | string,
emailAddress: string,
options?: { referrer?: string },
): Promise<SubscriberSummary | null>
export function listSegments(query?: {
maxItems?: number
}): Promise<SegmentSummary[]>
export function createSequence(
input: SequenceCreateInput,
): Promise<SequenceSummary>
export function createSequenceEmail(
sequenceId: number | string,
input: SequenceEmailCreateInput,
): Promise<unknown>
export function addSubscriberToSequence(
sequenceId: number | string,
emailAddress: string,
): Promise<SubscriberSummary | null>
export function getSequenceEmail(
sequenceId: number,
emailId: number,
): Promise<unknown>
export function updateSequenceEmail(
sequenceId: number,
emailId: number,
fields: Partial<SequenceEmailCreateInput> & Record<string, unknown>,
): Promise<unknown>
export function publishSequenceEmail(
sequenceId: number,
emailId: number,
): Promise<unknown>