import {z} from 'zod' export type ProductStatus = 'active' | 'blocked' | 'deleted'; export type ProductType = 'unique' | 'subscription'; export type ContentDeliveriesEnum = 'external' | 'cakto' | 'cakto_v2' | 'telegram' | 'discord' | 'emailAccess' | 'files' | 'disabled'; export type AffiliateClickEnum = 'first' | 'last'; export type OfferStatus = 'active' | 'disabled' | 'deleted'; export type IntervalTypeEnum = 'week' | 'month' | 'year' | 'lifetime'; export type OfferProductRetrieve = {id?: string | undefined, name: string, image?: (string | null) | undefined, price: number, units?: number | undefined, default: boolean, status?: OfferStatus | undefined, type?: ProductType | undefined, intervalType?: IntervalTypeEnum | undefined, interval?: number | undefined, recurrence_period?: number | undefined, quantity_recurrences?: number | undefined, trial_days?: number | undefined, max_retries?: number | undefined, retry_interval?: number | undefined, checkout: number | null}; export type PaymentMethodsEnum = 'pix' | 'pix_auto' | 'boleto' | 'credit_card' | 'threeDs' | 'picpay' | 'googlepay' | 'applepay' | 'openfinance_nubank'; export type Offer = {id: string, name: string, image?: (string | null) | undefined, price: number, units?: number | undefined, default: boolean, product: string, status?: OfferStatus | undefined, type?: ProductType | undefined, intervalType?: IntervalTypeEnum | undefined, interval?: number | undefined, recurrence_period?: number | undefined, quantity_recurrences?: number | undefined, trial_days?: number | undefined, max_retries?: number | undefined, retry_interval?: number | undefined}; export type OrderBump = {id?: string | undefined, product: string, installments: number, referencePrice?: (number | null) | undefined, offer: Offer, cta?: (string | null) | undefined, title?: (string | null) | undefined, description?: (string | null) | undefined, position?: number | undefined, image: string | null, showImage?: boolean | undefined}; export type PixelStatus = 'active' | 'disabled' | 'with_error'; export type FacebookPixel = {id?: number | undefined, name?: (string | null) | undefined, description?: (string | null) | undefined, status?: PixelStatus | undefined, pixelId: string, error?: (string | null) | undefined, domain?: (string | null) | undefined, apiToken?: (string | null) | undefined, fbPixPurchaseTrigger?: (boolean | null) | undefined, fbPixConversionValue?: (number | null) | undefined, fbBoletoPurchaseTrigger?: (boolean | null) | undefined, fbBoletoConversionValue?: (number | null) | undefined, fbPicpayPurchaseTrigger?: (boolean | null) | undefined, fbPicpayConversionValue?: (number | null) | undefined, fbNubankPurchaseTrigger?: (boolean | null) | undefined, fbNubankConversionValue?: (number | null) | undefined, createdAt: string}; export type GoogleAdsPixel = {id?: number | undefined, name: string, description?: (string | null) | undefined, status?: PixelStatus | undefined, pixelId: string, conversionLabel: string, checkoutVisitTrigger?: boolean | undefined, cardPixApprovalTrigger?: boolean | undefined, boletoTrigger?: boolean | undefined, createdAt: string}; export type TaboolaPixel = {id?: number | undefined, name?: (string | null) | undefined, description?: (string | null) | undefined, status?: PixelStatus | undefined, eventName: string, accountId: string, checkoutVisitTrigger?: boolean | undefined, cardPixApprovalTrigger?: boolean | undefined, boletoTrigger?: boolean | undefined, createdAt: string}; export type OutbrainPixel = {id?: number | undefined, name?: (string | null) | undefined, description?: (string | null) | undefined, status?: PixelStatus | undefined, eventName: string, pixelId: string, checkoutVisitTrigger?: boolean | undefined, cardPixApprovalTrigger?: boolean | undefined, boletoTrigger?: boolean | undefined, createdAt: string}; export type TikTokPixel = {id?: number | undefined, name?: (string | null) | undefined, description?: (string | null) | undefined, status?: PixelStatus | undefined, pixelId: string, apiToken?: (string | null) | undefined, error?: (string | null) | undefined, tiktokPixPurchaseTrigger?: (boolean | null) | undefined, tiktokPixConversionValue?: (number | null) | undefined, tiktokBoletoPurchaseTrigger?: (boolean | null) | undefined, tiktokBoletoConversionValue?: (number | null) | undefined, tiktokPicpayPurchaseTrigger?: (boolean | null) | undefined, tiktokPicpayConversionValue?: (number | null) | undefined, tiktokNubankPurchaseTrigger?: (boolean | null) | undefined, tiktokNubankConversionValue?: (number | null) | undefined, createdAt: string}; export type KwaiPixel = {id?: number | undefined, name?: (string | null) | undefined, description?: (string | null) | undefined, status?: PixelStatus | undefined, pixelId: string, kwaiPixPurchaseTrigger?: (boolean | null) | undefined, kwaiPixConversionValue?: (number | null) | undefined, kwaiBoletoPurchaseTrigger?: (boolean | null) | undefined, kwaiBoletoConversionValue?: (number | null) | undefined, kwaiPicpayPurchaseTrigger?: (boolean | null) | undefined, kwaiPicpayConversionValue?: (number | null) | undefined, kwaiNubankPurchaseTrigger?: (boolean | null) | undefined, kwaiNubankConversionValue?: (number | null) | undefined, createdAt: string}; export type PixelDomain = {id?: number | undefined, user: string, domain: string, isVerified?: boolean | undefined, lastVerified?: (string | null) | undefined}; export type TrackingPixel = {id: number, fbPixPurchaseTrigger?: boolean | undefined, fbPixConversionValue?: number | undefined, fbBoletoPurchaseTrigger?: boolean | undefined, fbBoletoConversionValue?: number | undefined, fbPicpayPurchaseTrigger?: boolean | undefined, fbPicpayConversionValue?: number | undefined, fbNubankPurchaseTrigger?: boolean | undefined, fbNubankConversionValue?: number | undefined, googleAnalyticsTrackingId?: (string | null) | undefined, tiktokPixPurchaseTrigger?: boolean | undefined, tiktokPixConversionValue?: number | undefined, tiktokBoletoPurchaseTrigger?: boolean | undefined, tiktokBoletoConversionValue?: number | undefined, tiktokPicpayPurchaseTrigger?: boolean | undefined, tiktokPicpayConversionValue?: number | undefined, tiktokNubankPurchaseTrigger?: boolean | undefined, tiktokNubankConversionValue?: number | undefined, kwaiPixPurchaseTrigger?: boolean | undefined, kwaiPixConversionValue?: number | undefined, kwaiBoletoPurchaseTrigger?: boolean | undefined, kwaiBoletoConversionValue?: number | undefined, kwaiPicpayPurchaseTrigger?: boolean | undefined, kwaiPicpayConversionValue?: number | undefined, kwaiNubankPurchaseTrigger?: boolean | undefined, kwaiNubankConversionValue?: number | undefined, facebook_pixels: Array, google_ads_pixels: Array, taboola_pixels: Array, outbrain_pixels: Array, tiktok_pixels: Array, kwai_pixels: Array, pixel_domains: Array}; export type ProductUpdateSchema = {name: string, status?: ProductStatus | undefined, type?: ProductType | undefined, description: string, category?: (string | null) | undefined, price?: unknown | undefined, installments?: number | undefined, image?: (string | null) | undefined, guarantee?: number | undefined, salesPage?: (string | null) | undefined, supportEmail?: (string | null) | undefined, supportWhatsapp?: (string | null) | undefined, contentDeliveries: Array, emailAccessLink?: (string | null) | undefined, confirmEmail?: boolean | undefined, affiliate?: boolean | undefined, affiliateRequest?: boolean | undefined, affiliateCommission?: (unknown | null) | undefined, affiliateContact?: boolean | undefined, affiliateDescription?: (string | null) | undefined, affiliateSupportEmail?: (string | null) | undefined, affiliateMarketplace?: boolean | undefined, affiliateClick?: AffiliateClickEnum | undefined, cookieTime?: number | undefined, affiliateShareBump?: boolean | undefined, affiliateShareUpsell?: boolean | undefined, affiliateCloneQuiz?: boolean | undefined, affiliateCloneQuizUrl?: (string | null) | undefined, affiliateSalesPage?: (string | null) | undefined, upsell?: boolean | undefined, upsellPage?: (string | null) | undefined, redirectUpsellWithBumpFail?: boolean | undefined, defaultPaymentMethod?: (string | null) | undefined, showCouponField?: boolean | undefined, showAddressFields?: boolean | undefined, threeDsRetryEnabled?: boolean | undefined, offers: Array, invoiceDescription?: (string | null) | undefined, paymentMethods: Array, paymentsOrder: unknown, ticketExpiration?: number | undefined, pixExpiresIn?: number | undefined, twoCardPayment?: boolean | undefined, bumps: Array, tracking_pixels: TrackingPixel, disable_orderbump_pixel_events?: boolean | undefined, producerName?: (string | null) | undefined, createdAt: string, updatedAt: string}; export type UpdateApiPublicApiProductsIdArgs = {id: string, body: ProductUpdateSchema}; export type UpdateApiPublicApiProductsIdOptions = {baseUrl?: string | undefined, OAuthToken?: string | undefined, fetch?: typeof fetch | undefined}; export const productStatus = z.enum(["active", "blocked", "deleted"]); export const productType = z.enum(["unique", "subscription"]); export const affiliateClickEnum = z.enum(["first", "last"]); export const offerStatus = z.enum(["active", "disabled", "deleted"]); export const intervalTypeEnum = z.enum(["week", "month", "year", "lifetime"]); export const offerProductRetrieve = z.object({id: z.string().max(40).optional(), name: z.string().max(255), image: z.string().nullable().optional(), price: z.number(), units: z.number().int().gte(1).optional(), default: z.boolean(), status: offerStatus.optional(), type: productType.optional(), intervalType: intervalTypeEnum.optional(), interval: z.number().int().optional(), recurrence_period: z.number().int().optional(), quantity_recurrences: z.number().int().optional(), trial_days: z.number().int().optional(), max_retries: z.number().int().optional(), retry_interval: z.number().int().optional(), checkout: z.number().int().nullable()}); export const offer = z.object({id: z.string(), name: z.string().max(255), image: z.string().nullable().optional(), price: z.number(), units: z.number().int().gte(1).optional(), default: z.boolean(), product: z.string(), status: offerStatus.optional(), type: productType.optional(), intervalType: intervalTypeEnum.optional(), interval: z.number().int().optional(), recurrence_period: z.number().int().optional(), quantity_recurrences: z.number().int().optional(), trial_days: z.number().int().optional(), max_retries: z.number().int().optional(), retry_interval: z.number().int().optional()}); export const orderBump = z.object({id: z.string().max(40).optional(), product: z.string(), installments: z.number().int(), referencePrice: z.number().nullable().optional(), offer: offer, cta: z.string().max(255).nullable().optional(), title: z.string().max(255).nullable().optional(), description: z.string().nullable().optional(), position: z.number().int().optional(), image: z.string().nullable(), showImage: z.boolean().optional()}); export const pixelStatus = z.enum(["active", "disabled", "with_error"]); export const facebookPixel = z.object({id: z.number().int().optional(), name: z.string().max(255).nullable().optional(), description: z.string().nullable().optional(), status: pixelStatus.optional(), pixelId: z.string().max(255), error: z.string().nullable().optional(), domain: z.string().max(255).nullable().optional(), apiToken: z.string().max(255).nullable().optional(), fbPixPurchaseTrigger: z.boolean().nullable().optional(), fbPixConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), fbBoletoPurchaseTrigger: z.boolean().nullable().optional(), fbBoletoConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), fbPicpayPurchaseTrigger: z.boolean().nullable().optional(), fbPicpayConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), fbNubankPurchaseTrigger: z.boolean().nullable().optional(), fbNubankConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), createdAt: z.string()}); export const googleAdsPixel = z.object({id: z.number().int().optional(), name: z.string().max(255), description: z.string().nullable().optional(), status: pixelStatus.optional(), pixelId: z.string().max(255), conversionLabel: z.string().max(255), checkoutVisitTrigger: z.boolean().optional(), cardPixApprovalTrigger: z.boolean().optional(), boletoTrigger: z.boolean().optional(), createdAt: z.string()}); export const taboolaPixel = z.object({id: z.number().int().optional(), name: z.string().max(255).nullable().optional(), description: z.string().nullable().optional(), status: pixelStatus.optional(), eventName: z.string().max(255), accountId: z.string().max(255), checkoutVisitTrigger: z.boolean().optional(), cardPixApprovalTrigger: z.boolean().optional(), boletoTrigger: z.boolean().optional(), createdAt: z.string()}); export const outbrainPixel = z.object({id: z.number().int().optional(), name: z.string().max(255).nullable().optional(), description: z.string().nullable().optional(), status: pixelStatus.optional(), eventName: z.string().max(255), pixelId: z.string().max(255), checkoutVisitTrigger: z.boolean().optional(), cardPixApprovalTrigger: z.boolean().optional(), boletoTrigger: z.boolean().optional(), createdAt: z.string()}); export const tikTokPixel = z.object({id: z.number().int().optional(), name: z.string().max(255).nullable().optional(), description: z.string().nullable().optional(), status: pixelStatus.optional(), pixelId: z.string().max(255), apiToken: z.string().max(255).nullable().optional(), error: z.string().nullable().optional(), tiktokPixPurchaseTrigger: z.boolean().nullable().optional(), tiktokPixConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), tiktokBoletoPurchaseTrigger: z.boolean().nullable().optional(), tiktokBoletoConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), tiktokPicpayPurchaseTrigger: z.boolean().nullable().optional(), tiktokPicpayConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), tiktokNubankPurchaseTrigger: z.boolean().nullable().optional(), tiktokNubankConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), createdAt: z.string()}); export const kwaiPixel = z.object({id: z.number().int().optional(), name: z.string().max(255).nullable().optional(), description: z.string().nullable().optional(), status: pixelStatus.optional(), pixelId: z.string().max(255), kwaiPixPurchaseTrigger: z.boolean().nullable().optional(), kwaiPixConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), kwaiBoletoPurchaseTrigger: z.boolean().nullable().optional(), kwaiBoletoConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), kwaiPicpayPurchaseTrigger: z.boolean().nullable().optional(), kwaiPicpayConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), kwaiNubankPurchaseTrigger: z.boolean().nullable().optional(), kwaiNubankConversionValue: z.number().int().gte(1).lte(100).nullable().optional(), createdAt: z.string()}); export const pixelDomain = z.object({id: z.number().int().optional(), user: z.string(), domain: z.string().max(255), isVerified: z.boolean().optional(), lastVerified: z.string().nullable().optional()}); export const trackingPixel = z.object({id: z.number().int(), fbPixPurchaseTrigger: z.boolean().optional(), fbPixConversionValue: z.number().int().gte(1).lte(100).optional(), fbBoletoPurchaseTrigger: z.boolean().optional(), fbBoletoConversionValue: z.number().int().gte(1).lte(100).optional(), fbPicpayPurchaseTrigger: z.boolean().optional(), fbPicpayConversionValue: z.number().int().gte(1).lte(100).optional(), fbNubankPurchaseTrigger: z.boolean().optional(), fbNubankConversionValue: z.number().int().gte(1).lte(100).optional(), googleAnalyticsTrackingId: z.string().max(255).nullable().optional(), tiktokPixPurchaseTrigger: z.boolean().optional(), tiktokPixConversionValue: z.number().int().gte(1).lte(100).optional(), tiktokBoletoPurchaseTrigger: z.boolean().optional(), tiktokBoletoConversionValue: z.number().int().gte(1).lte(100).optional(), tiktokPicpayPurchaseTrigger: z.boolean().optional(), tiktokPicpayConversionValue: z.number().int().gte(1).lte(100).optional(), tiktokNubankPurchaseTrigger: z.boolean().optional(), tiktokNubankConversionValue: z.number().int().gte(1).lte(100).optional(), kwaiPixPurchaseTrigger: z.boolean().optional(), kwaiPixConversionValue: z.number().int().gte(1).lte(100).optional(), kwaiBoletoPurchaseTrigger: z.boolean().optional(), kwaiBoletoConversionValue: z.number().int().gte(1).lte(100).optional(), kwaiPicpayPurchaseTrigger: z.boolean().optional(), kwaiPicpayConversionValue: z.number().int().gte(1).lte(100).optional(), kwaiNubankPurchaseTrigger: z.boolean().optional(), kwaiNubankConversionValue: z.number().int().gte(1).lte(100).optional(), facebook_pixels: z.array(facebookPixel), google_ads_pixels: z.array(googleAdsPixel), taboola_pixels: z.array(taboolaPixel), outbrain_pixels: z.array(outbrainPixel), tiktok_pixels: z.array(tikTokPixel), kwai_pixels: z.array(kwaiPixel), pixel_domains: z.array(pixelDomain)}); export const productSerializerFull = z.object({id: z.string().max(255).optional(), short_id: z.string().max(40).optional(), name: z.string().max(255), status: productStatus.optional(), type: productType.optional(), description: z.string(), category: z.string().nullable().optional(), price: z.string().optional(), installments: z.number().int().optional(), image: z.string().nullable().optional(), guarantee: z.number().int().optional(), salesPage: z.string().max(2048).nullable().optional(), supportEmail: z.string().max(254).nullable().optional(), supportWhatsapp: z.string().max(128).nullable().optional(), contentDeliveries: z.array(z.string()), emailAccessLink: z.string().max(2048).nullable().optional(), confirmEmail: z.boolean().optional(), affiliate: z.boolean().optional(), affiliateRequest: z.boolean().optional(), affiliateCommission: z.string().nullable().optional(), affiliateContact: z.boolean().optional(), affiliateDescription: z.string().nullable().optional(), affiliateSupportEmail: z.string().max(254).nullable().optional(), affiliateMarketplace: z.boolean().optional(), affiliateClick: affiliateClickEnum.optional(), cookieTime: z.number().int().optional(), affiliateShareBump: z.boolean().optional(), affiliateShareUpsell: z.boolean().optional(), affiliateCloneQuiz: z.boolean().optional(), affiliateCloneQuizUrl: z.string().max(2048).nullable().optional(), affiliateSalesPage: z.string().max(2048).nullable().optional(), upsell: z.boolean().optional(), upsellPage: z.string().max(2048).nullable().optional(), redirectUpsellWithBumpFail: z.boolean().optional(), defaultPaymentMethod: z.string().nullable().optional(), showCouponField: z.boolean().optional(), showAddressFields: z.boolean().optional(), threeDsRetryEnabled: z.boolean().optional(), offers: z.array(offerProductRetrieve), invoiceDescription: z.string().max(255).nullable().optional(), paymentMethods: z.array(z.string()), paymentsOrder: z.unknown(), ticketExpiration: z.number().int().optional(), pixExpiresIn: z.number().int().optional(), twoCardPayment: z.boolean().optional(), bumps: z.array(orderBump), tracking_pixels: trackingPixel, disable_orderbump_pixel_events: z.boolean().optional(), producerName: z.string().max(255).nullable().optional(), createdAt: z.string(), updatedAt: z.string()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Public API for managing products, inherits from ProductRetrieveAPI and ProductAPI, * * PUT /public_api/products/{id}/ */ export const updateApiPublicApiProductsId = async (args: UpdateApiPublicApiProductsIdArgs, options?: UpdateApiPublicApiProductsIdOptions) => { const {baseUrl = "https://api.cakto.com.br", fetch: fetchFn = fetch, OAuthToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (OAuthToken !== undefined) headers.set('authorization', `Bearer ${OAuthToken}`) const url = `${baseUrl.replace(/\/+$/, '')}/public_api/products/${encodeURIComponent(String(args.id))}/${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PUT", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(productSerializerFull, await res.json()) };