| import { randomUUID } from "node:crypto"; |
|
|
| export type EventType = |
| | "click" |
| | "booking" |
| | "offer_presented" |
| | "payment_succeeded" |
| | "payment_failed" |
| | "refund" |
| | "dispute" |
| | "fulfillment_completed"; |
|
|
| export type ConversionState = |
| | "traffic" |
| | "pipeline" |
| | "revenue" |
| | "retained" |
| | "lost"; |
|
|
| export interface CommercialEvent { |
| id: string; |
| type: EventType; |
| timestamp: string; |
| campaignId?: string; |
| visitorId?: string; |
| sessionId?: string; |
| linkId?: string; |
| bookingId?: string; |
| offerId?: string; |
| customerId?: string; |
| paymentId?: string; |
| amountCents?: number; |
| currency?: string; |
| refundCents?: number; |
| fulfillmentCostCents?: number; |
| routeId?: string; |
| source: string; |
| raw: Record<string, unknown>; |
| } |
|
|
| export interface Visitor { |
| id: string; |
| firstSeen: string; |
| lastSeen: string; |
| clickCount: number; |
| bookingCount: number; |
| paymentCount: number; |
| totalRevenueCents: number; |
| totalRefundCents: number; |
| } |
|
|
| export interface Customer { |
| id: string; |
| stripeCustomerId?: string; |
| calendlyInviteeId?: string; |
| visitorId?: string; |
| email?: string; |
| name?: string; |
| totalRevenueCents: number; |
| totalRefundCents: number; |
| repeatPurchaseCount: number; |
| } |
|
|
| export interface Offer { |
| id: string; |
| campaignId: string; |
| name: string; |
| priceCents: number; |
| currency: string; |
| bookingType?: string; |
| fulfillmentCostCents: number; |
| refundProbability: number; |
| active: boolean; |
| metadata: Record<string, unknown>; |
| } |
|
|
| export interface Route { |
| id: string; |
| campaignId: string; |
| offerId: string; |
| linkId: string; |
| bookingType?: string; |
| expectedBookingProbability: number; |
| expectedPaymentProbability: number; |
| expectedPaymentCents: number; |
| expectedRefundProbability: number; |
| expectedFulfillmentCostCents: number; |
| presentationCount: number; |
| bookingCount: number; |
| paymentCount: number; |
| revenueCents: number; |
| refundCents: number; |
| retainedCents: number; |
| } |
|
|
| export interface LedgerEntry { |
| event: CommercialEvent; |
| conversionState: ConversionState; |
| attributedRouteId?: string; |
| attributedOfferId?: string; |
| attributedCustomerId?: string; |
| retainedCents?: number; |
| } |
|
|