Skip to content

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

Package listing

@kody/kit

src/models.ts

83 lines · 2.8 KB · TypeScript
import type {
	BroadcastSummary,
	FormSummary,
	SegmentSummary,
	SequenceEmailSummary,
	SequenceSummary,
	SubscriberSummary,
	TagSummary,
} from './types.ts'

export function subscriberSummary(
	subscriber: Record<string, unknown> | null | undefined,
): SubscriberSummary | null {
	if (typeof subscriber?.id !== 'number') return null
	return {
		id: subscriber.id,
		email_address: typeof subscriber.email_address === 'string' ? subscriber.email_address : undefined,
		first_name: typeof subscriber.first_name === 'string' ? subscriber.first_name : undefined,
		state: typeof subscriber.state === 'string' ? subscriber.state : undefined,
		created_at: typeof subscriber.created_at === 'string' ? subscriber.created_at : undefined,
		fields: subscriber.fields,
	}
}

export function tagSummary(tag: Record<string, unknown> | null | undefined): TagSummary | null {
	if (typeof tag?.id !== 'number' || typeof tag.name !== 'string') return null
	return { id: tag.id, name: tag.name }
}

export function formSummary(form: Record<string, unknown> | null | undefined): FormSummary | null {
	if (typeof form?.id !== 'number') return null
	return {
		id: form.id,
		name: typeof form.name === 'string' ? form.name : undefined,
		created_at: typeof form.created_at === 'string' ? form.created_at : undefined,
	}
}

export function segmentSummary(
	segment: Record<string, unknown> | null | undefined,
): SegmentSummary | null {
	if (typeof segment?.id !== 'number') return null
	return {
		id: segment.id,
		name: typeof segment.name === 'string' ? segment.name : undefined,
	}
}

export function broadcastSummary(
	broadcast: Record<string, unknown> | null | undefined,
): BroadcastSummary | null {
	if (typeof broadcast?.id !== 'number') return null
	return {
		id: broadcast.id,
		subject: typeof broadcast.subject === 'string' ? broadcast.subject : undefined,
		status: typeof broadcast.status === 'string' ? broadcast.status : undefined,
		editUrl: `https://app.kit.com/campaigns/${broadcast.id}/draft`,
	}
}

export function sequenceSummary(
	sequence: Record<string, unknown> | null | undefined,
): SequenceSummary | null {
	if (typeof sequence?.id !== 'number') return null
	return {
		id: sequence.id,
		name: typeof sequence.name === 'string' ? sequence.name : undefined,
		active: typeof sequence.active === 'boolean' ? sequence.active : undefined,
		email_address: typeof sequence.email_address === 'string' ? sequence.email_address : undefined,
	}
}

export function sequenceEmailSummary(
	email: Record<string, unknown> | null | undefined,
): SequenceEmailSummary | null {
	if (typeof email?.id !== 'number') return null
	return {
		id: email.id,
		sequenceId: typeof email.sequence_id === 'number' ? email.sequence_id : undefined,
		subject: typeof email.subject === 'string' ? email.subject : undefined,
		published: typeof email.published === 'boolean' ? email.published : undefined,
	}
}