export interface ProductChanged { action: 'sync' | 'create' | 'update' products: DataSinkProduct[] } export interface ProductDeleted { action: 'delete' productIds: number[] } export interface CollectionChanged { action: 'sync' | 'create' | 'update' collections: DataSinkCollection[] } export interface CollectionDeleted { action: 'delete' collectionIds: number[] } export type RequestBody = | ProductChanged | ProductDeleted | CollectionChanged | CollectionDeleted export interface DataSinkCollection { id: `gid://shopify/Collection/${string}` createdAt: string handle: string descriptionHtml: string image?: DataSinkCollectionImage rules?: { column: string condition: string relation: string }[] disjunctive?: boolean sortOrder: string title: string updatedAt: string } export interface DataSinkProduct { id: `gid://shopify/Product/${string}` title: string description: string descriptionHtml: string featuredImage?: DataSinkProductImage handle: string images: DataSinkProductImage[] options: DataSinkProductOption[] priceRange: DataSinkProductPriceRange productType: string tags: string[] variants: DataSinkProductVariant[] vendor: string status: 'active' | 'archived' | 'draft' | 'unknown' publishedAt: string createdAt: string updatedAt: string } export interface DataSinkProductImage { id: `gid://shopify/ProductImage/${string}` altText?: string height?: number width?: number src: string } export interface DataSinkProductOption { id: `gid://shopify/ProductOption/${string}` name: string position: number values: string[] } export interface DataSinkProductPriceRange { minVariantPrice?: number maxVariantPrice?: number } export interface DataSinkProductVariant { id: `gid://shopify/ProductVariant/${string}` title: string compareAtPrice?: number barcode?: string inventoryPolicy: string inventoryQuantity: number inventoryManagement: string position: number requiresShipping: boolean fulfillmentService: string sku: string taxable: boolean weight: number weightUnit: string price: string createdAt: string updatedAt: string image?: DataSinkProductImage product: { id: `gid://shopify/Product/${string}` status: 'active' | 'archived' | 'draft' | 'unknown' } selectedOptions: { name: string value: string }[] } export interface DataSinkCollectionImage { altText: string height?: number width?: number src: string }