@chordcommerce/analytics
Version:
Chord Commerce event tracking
126 lines (125 loc) • 4.26 kB
JavaScript
// Generated by ts-to-zod
import { z } from 'zod';
export const identifyTraitsSchema = z.record(z.any()).and(z.object({
address: z
.record(z.any())
.and(z.object({
city: z.string().optional(),
country: z.string().optional(),
postalCode: z.string().optional(),
state: z.string().optional(),
street: z.string().optional(),
}))
.optional(),
age: z.number().optional(),
avatar: z.string().optional(),
birthday: z.string().optional(),
company: z
.record(z.any())
.and(z.object({
name: z.string().optional(),
id: z.union([z.string(), z.number()]).optional(),
industry: z.string().optional(),
employeeCount: z.number().optional(),
plan: z.string().optional(),
}))
.optional(),
createdAt: z.string().optional(),
description: z.string().optional(),
email: z.string().optional(),
firstName: z.string().optional(),
gender: z.string().optional(),
id: z.string().optional(),
lastName: z.string().optional(),
name: z.string().optional(),
phone: z.string().optional(),
title: z.string().optional(),
username: z.string().optional(),
website: z.string().optional(),
}));
export const productSchema = z.object({
affiliation: z.string().optional(),
brand: z.string().optional(),
bundle: z.boolean().optional(),
category: z.string().optional(),
description: z.string().optional(),
image_url: z.string().optional(),
name: z.string(),
option_values: z.array(z.string()).optional(),
position: z.number().optional(),
price: z.number(),
product_id: z.string(),
sku: z.string(),
slug: z.string().optional(),
url: z.string().optional(),
variant: z.string().optional(),
});
export const lineItemSchema = productSchema.extend({
coupon: z.string().optional(),
line_item_id: z.string().optional(),
quantity: z.number(),
});
export const orderSchema = z.object({
affiliation: z.string().optional(),
campaign_id: z.number().optional(),
channel: z.string().optional(),
checkout_type: z.string().optional(),
coupon: z.string().optional(),
currency: z.string().optional(),
discount: z.number().optional(),
email: z.string().optional(),
first_name: z.string().optional(),
has_subscription: z.boolean().optional(),
is_recurring: z.boolean().optional(),
last_name: z.string().optional(),
metadata: z.record(z.unknown()).optional(),
order_date: z.string().optional(),
order_id: z.string().optional(),
phone: z.string().optional(),
products: z
.array(lineItemSchema.and(z.object({
bundle_size: z.number().optional(),
cross_sold_quantity: z.number().optional(),
variant_metadata: z.record(z.unknown()).optional(),
})))
.optional(),
purl_link: z.string().optional(),
referral_identifier_id: z.string().optional(),
revenue: z.number().optional(),
shipping: z.number().optional(),
shipping_city: z.string().optional(),
shipping_country: z.string().optional(),
shipping_method_details: z
.object({
shipping_code: z.string().optional(),
shipping_method: z.string().optional(),
})
.optional(),
shipping_state: z.string().optional(),
shipping_zipcode: z.string().optional(),
tax: z.number().optional(),
template_id: z.number().optional(),
total: z.number().optional(),
tracking_ids: z.record(z.unknown()).optional(),
});
export const checkoutSchema = z.object({
affiliation: z.string().optional(),
checkout_type: z.string().optional(),
coupon: z.string().optional(),
currency: z.string().optional(),
discount: z.number().optional(),
order_id: z.string().optional(),
order_name: z.string().optional(),
products: z.array(lineItemSchema),
revenue: z.number().optional(),
shipping: z.number().optional(),
tax: z.number().optional(),
value: z.number().optional(),
step: z.number().optional(),
});
export const cartSchema = z.object({
cart_id: z.string().optional(),
currency: z.string().optional(),
products: z.array(lineItemSchema),
value: z.number().optional(),
});