import {z} from 'zod' export type OfferRequestBody = {network_advertiser_id: number, name: string, destination_url: string, currency_id: string, network_offer_group_id?: number | undefined, thumbnail_url?: string | undefined, network_category_id: number, internal_notes?: string | undefined, server_side_url?: string | undefined, preview_url?: string | undefined, html_description?: string | undefined, is_description_plain_text?: boolean | undefined, offer_status: 'active' | 'paused' | 'pending' | 'deleted', visibility: 'public' | 'require_approval' | 'private', project_id?: string | undefined, date_live_until?: string | undefined, app_identifier?: string | undefined, labels?: Array | undefined, caps_timezone_id?: number | undefined, network_tracking_domain_id: number, conversion_method: 'server_postback' | 'http_image_pixel' | 'https_image_pixel' | 'http_iframe_pixel' | 'https_iframe_pixel' | 'javascript' | 'cookie_based' | 'html_pixel_cookie_based', redirect_mode: 'standard' | 'single_meta_refresh' | 'double_meta_refresh' | 'seo_friendly', redirect_routing_method?: ('unknown' | 'internal' | 'null_value') | undefined, session_definition: 'cookie' | 'ip' | 'ip_user_agent' | 'google_ad_id' | 'idfa', session_duration: number, attribution_method?: ('first_touch' | 'last_touch') | undefined, is_soft_cap?: boolean | undefined, is_use_secure_link: boolean, is_seo_friendly?: boolean | undefined, is_allow_deep_link: boolean, is_whitelist_check_enabled?: boolean | undefined, is_use_direct_linking?: boolean | undefined, is_caps_enabled: boolean, daily_conversion_cap?: number | undefined, weekly_conversion_cap?: number | undefined, monthly_conversion_cap?: number | undefined, global_conversion_cap?: number | undefined, daily_payout_cap?: number | undefined, weekly_payout_cap?: number | undefined, monthly_payout_cap?: number | undefined, global_payout_cap?: number | undefined, daily_revenue_cap?: number | undefined, weekly_revenue_cap?: number | undefined, monthly_revenue_cap?: number | undefined, global_revenue_cap?: number | undefined, daily_click_cap?: number | undefined, weekly_click_cap?: number | undefined, monthly_click_cap?: number | undefined, global_click_cap?: number | undefined, is_duplicate_filter_enabled: boolean, duplicate_filter_targeting_action: 'unknown' | 'block' | 'fail_traffic', is_block_already_converted?: boolean | undefined, already_converted_action?: ('unknown' | 'block' | 'fail_traffic') | undefined, is_must_approve_conversion: boolean, is_allow_duplicate_conversion: boolean, is_use_scrub_rate?: boolean | undefined, scrub_rate_status?: ('rejected' | 'pending') | undefined, scrub_rate_percentage?: number | undefined, is_view_through_enabled: boolean, view_through_destination_url?: string | undefined, is_session_tracking_enabled: boolean, session_tracking_lifespan_hour?: number | undefined, session_tracking_minimum_lifespan_second?: number | undefined, is_fail_traffic_enabled: boolean, redirect_internal_routing_type: 'priority' | 'weight' | 'null_value' | 'priority_global' | 'weight_global', is_using_suppression_list: boolean, suppression_list_id?: number | undefined, is_view_through_session_tracking_enabled?: boolean | undefined, view_through_session_tracking_lifespan_minute?: number | undefined, view_through_session_tracking_minimal_lifespan_second?: number | undefined, is_email_attribution_enabled?: boolean | undefined, email_attribution_method?: ('unknown' | 'first_affiliate_attribution' | 'last_affiliate_attribution') | undefined, is_email_attribution_window_enabled?: boolean | undefined, email_attribution_window_minute?: number | undefined, email_attribution_window_type?: ('unknown' | 'static' | 'dynamic') | undefined, is_using_explicit_terms_and_conditions: boolean, terms_and_conditions?: string | undefined, is_force_terms_and_conditions: boolean, email?: ({is_enabled?: boolean | undefined, subject_lines?: string | undefined, from_lines?: string | undefined}) | undefined, email_optout?: ({is_enabled?: boolean | undefined, suppression_file_link?: string | undefined, unsub_link?: string | undefined}) | undefined, source_names?: Array | undefined, thumbnail_file?: ({temp_url?: string | undefined, original_file_name?: string | undefined}) | undefined, meta?: ({advertiser_campaign_name?: string | undefined}) | undefined, channels?: (Array<{network_channel_id?: number | undefined}>) | undefined, integrations?: ({optizmo?: ({is_enabled?: boolean | undefined, api_key?: string | undefined, list_id?: string | undefined}) | undefined, twentyfour_metrics?: ({is_enabled?: boolean | undefined, api_key?: string | undefined}) | undefined, forensiq?: ({is_enabled?: boolean | undefined, api_key?: string | undefined}) | undefined, ezepo?: ({is_enabled?: boolean | undefined}) | undefined, anura?: ({is_enabled?: boolean | undefined, instance_id?: string | undefined}) | undefined, invoca?: ({is_enabled?: boolean | undefined, campaign_id?: string | undefined}) | undefined}) | undefined, ruleset?: Record | undefined, traffic_filters?: (Array<{parameter?: ('sub1' | 'sub2' | 'sub3' | 'sub4' | 'sub5' | 'sub6' | 'sub7' | 'sub8' | 'sub9' | 'sub10' | 'source_id' | 'user_agent' | 'referer' | 'idfa' | 'google_advertiser_id' | 'http_accept_language' | 'creative_id') | undefined, match_type?: ('exact' | 'minimum' | 'maximum' | 'contains' | 'starts_with' | 'range' | 'ends_with' | 'blank' | 'does_not_match' | 'does_not_contain') | undefined, value?: string | undefined, action?: ('block' | 'fail_traffic') | undefined}>) | undefined, internal_redirects?: (Array<{redirect_network_offer_id?: number | undefined, redirect_network_offer_url_id?: number | undefined, redirect_network_offer_group_id?: number | undefined, redirect_network_campaign_id?: number | undefined, routing_value?: number | undefined, is_pay_affiliate?: boolean | undefined, is_pass_through?: boolean | undefined, categories?: (Array<'traffic_filter' | 'traffic_control' | 'already_converted' | 'offer_expired' | 'geotargeting' | 'caps' | 'other'>) | undefined, is_apply_specific_affiliates?: boolean | undefined, network_affiliate_ids?: Array | undefined}>) | undefined, creatives?: (Array<{name?: string | undefined, creative_type?: ('image' | 'html' | 'thumbnail' | 'email' | 'archive' | 'video' | 'text' | 'link') | undefined, is_private?: boolean | undefined, creative_status?: ('active' | 'deleted' | 'paused') | undefined, html_code?: string | undefined, width?: number | undefined, height?: number | undefined, email_from?: string | undefined, email_subject?: string | undefined, resource_file?: ({temp_url?: string | undefined, original_file_name?: string | undefined}) | undefined, html_files?: Array<{temp_url: string, original_file_name: string}> | undefined}>) | undefined, requirement_kpis?: (Array<{kpi?: string | undefined}>) | undefined, requirement_tracking_parameters?: (Array<{tracking_parameter?: string | undefined, value?: string | undefined}>) | undefined, payout_revenue: Array<{entry_name: string, payout_type: 'cpa' | 'cpc' | 'cpm' | 'cps' | 'cpa_cps' | 'prv' | 'blank' | 'cpa_sku' | 'cps_sku' | 'cpa_cps_sku' | 'prv_sku', payout_amount: number, payout_percentage: number, revenue_type: 'rpa' | 'rpc' | 'rpm' | 'rps' | 'rpa_rps' | 'blank' | 'rpa_sku' | 'rps_sku' | 'rpa_rps_sku', revenue_amount: number, revenue_percentage: number, is_default: boolean, is_private: boolean, is_postback_disabled: boolean, is_enforce_caps?: boolean | undefined, is_must_approve_conversion: boolean, is_allow_duplicate_conversion: boolean}>}; export type UpdateApiNetworksOffersOfferIdArgs = {offerId: number, body: OfferRequestBody}; export type UpdateApiNetworksOffersOfferIdOptions = {baseUrl?: string | undefined, APIKey?: string | undefined, fetch?: typeof fetch | undefined}; export const offer = z.object({network_offer_id: z.number().int().optional(), network_id: z.number().int().optional(), network_advertiser_id: z.number().int().optional(), network_offer_group_id: z.number().int().optional(), name: z.string().optional(), offer_status: z.enum(["active", "paused", "pending", "deleted"]).optional(), thumbnail_url: z.string().optional(), visibility: z.enum(["public", "require_approval", "private"]).optional(), currency_id: z.string().optional(), destination_url: z.string().optional(), server_side_url: z.string().optional(), preview_url: z.string().optional(), html_description: z.string().optional(), internal_notes: z.string().optional(), network_category_id: z.number().int().optional(), project_id: z.string().optional(), date_live_until: z.string().optional(), conversion_method: z.enum(["server_postback", "http_image_pixel", "https_image_pixel", "http_iframe_pixel", "https_iframe_pixel", "javascript", "cookie_based", "html_pixel_cookie_based"]).optional(), redirect_mode: z.enum(["standard", "single_meta_refresh", "double_meta_refresh", "seo_friendly"]).optional(), redirect_routing_method: z.enum(["unknown", "internal", "null_value"]).optional(), session_definition: z.enum(["cookie", "ip", "ip_user_agent", "google_ad_id", "idfa"]).optional(), session_duration: z.number().int().optional(), attribution_method: z.enum(["first_touch", "last_touch"]).optional(), is_caps_enabled: z.boolean().optional(), daily_conversion_cap: z.number().int().optional(), weekly_conversion_cap: z.number().int().optional(), monthly_conversion_cap: z.number().int().optional(), global_conversion_cap: z.number().int().optional(), daily_payout_cap: z.number().int().optional(), weekly_payout_cap: z.number().int().optional(), monthly_payout_cap: z.number().int().optional(), global_payout_cap: z.number().int().optional(), daily_revenue_cap: z.number().int().optional(), weekly_revenue_cap: z.number().int().optional(), monthly_revenue_cap: z.number().int().optional(), global_revenue_cap: z.number().int().optional(), daily_click_cap: z.number().int().optional(), weekly_click_cap: z.number().int().optional(), monthly_click_cap: z.number().int().optional(), global_click_cap: z.number().int().optional(), is_use_scrub_rate: z.boolean().optional(), scrub_rate_percentage: z.number().int().optional(), is_duplicate_filter_enabled: z.boolean().optional(), is_block_already_converted: z.boolean().optional(), is_use_secure_link: z.boolean().optional(), is_allow_deep_link: z.boolean().optional(), is_session_tracking_enabled: z.boolean().optional(), is_whitelist_check_enabled: z.boolean().optional(), network_tracking_domain_id: z.number().int().optional(), caps_timezone_id: z.number().int().optional(), app_identifier: z.string().optional(), labels: z.array(z.string()).optional(), is_seo_friendly: z.boolean().optional(), is_use_direct_linking: z.boolean().optional(), is_view_through_enabled: z.boolean().optional(), view_through_destination_url: z.string().optional(), session_tracking_lifespan_hour: z.number().int().optional(), session_tracking_minimum_lifespan_second: z.number().int().optional(), is_fail_traffic_enabled: z.boolean().optional(), redirect_internal_routing_type: z.enum(["priority", "weight", "null_value", "priority_global", "weight_global"]).optional(), is_using_suppression_list: z.boolean().optional(), suppression_list_id: z.number().int().optional(), is_using_explicit_terms_and_conditions: z.boolean().optional(), terms_and_conditions: z.string().optional(), is_force_terms_and_conditions: z.boolean().optional(), is_must_approve_conversion: z.boolean().optional(), is_allow_duplicate_conversion: z.boolean().optional(), duplicate_filter_targeting_action: z.enum(["unknown", "block", "fail_traffic"]).optional(), already_converted_action: z.enum(["unknown", "block", "fail_traffic"]).optional(), scrub_rate_status: z.enum(["rejected", "pending"]).optional(), is_description_plain_text: z.boolean().optional(), is_email_attribution_enabled: z.boolean().optional(), email_attribution_method: z.enum(["unknown", "first_affiliate_attribution", "last_affiliate_attribution"]).optional(), is_email_attribution_window_enabled: z.boolean().optional(), email_attribution_window_minute: z.number().int().optional(), email_attribution_window_type: z.enum(["unknown", "static", "dynamic"]).optional(), is_view_through_session_tracking_enabled: z.boolean().optional(), view_through_session_tracking_lifespan_minute: z.number().int().optional(), view_through_session_tracking_minimal_lifespan_second: z.number().int().optional(), session_tracking_start_on: z.string().optional(), encoded_value: z.string().optional(), payout_revenue: z.array(z.object({network_offer_payout_revenue_id: z.number().int().optional(), entry_name: z.string().optional(), payout_type: z.enum(["cpa", "cpc", "cpm", "cps", "cpa_cps", "prv", "blank", "cpa_sku", "cps_sku", "cpa_cps_sku", "prv_sku"]).optional(), payout_amount: z.number().optional(), payout_percentage: z.number().optional(), revenue_type: z.enum(["rpa", "rpc", "rpm", "rps", "rpa_rps", "blank", "rpa_sku", "rps_sku", "rpa_rps_sku"]).optional(), revenue_amount: z.number().optional(), revenue_percentage: z.number().optional(), is_default: z.boolean().optional(), is_private: z.boolean().optional(), is_postback_disabled: z.boolean().optional(), is_enforce_caps: z.boolean().optional(), is_must_approve_conversion: z.boolean().optional(), is_allow_duplicate_conversion: z.boolean().optional(), is_email_attribution_default_event: z.boolean().optional(), remote_offer_resource: z.object({network_offer_id: z.number().int().optional(), network_id: z.number().int().optional(), resource_type: z.string().optional(), remote_resource_id: z.string().optional(), resource_id: z.number().int().optional(), last_value_md5: z.string().optional(), json_config: z.string().optional(), json_data: z.string().optional(), time_created: z.number().int().optional(), time_saved: z.number().int().optional()}).optional()})).optional(), is_soft_cap: z.boolean().optional(), time_created: z.number().int().optional(), time_saved: z.number().int().optional(), relationship: z.object({advertiser: z.object({network_advertiser_id: z.number().int().optional(), network_id: z.number().int().optional(), name: z.string().optional(), account_status: z.string().optional(), network_employee_id: z.number().int().optional(), internal_notes: z.string().optional(), address_id: z.number().int().optional(), is_contact_address_enabled: z.boolean().optional(), sales_manager_id: z.number().int().optional(), is_expose_publisher_reporting_data: z.boolean().nullable().optional(), default_currency_id: z.string().optional(), platform_name: z.string().optional(), platform_url: z.string().optional(), platform_username: z.string().optional(), reporting_timezone_id: z.number().int().optional(), accounting_contact_email: z.string().optional(), verification_token: z.string().optional(), offer_id_macro: z.string().optional(), affiliate_id_macro: z.string().optional(), time_created: z.number().int().optional(), time_saved: z.number().int().optional(), attribution_method: z.string().optional(), email_attribution_method: z.string().optional(), attribution_priority: z.string().optional()}).optional(), category: z.object({network_category_id: z.number().int().optional(), network_id: z.number().int().optional(), name: z.string().optional(), status: z.string().optional(), time_created: z.number().int().optional(), time_saved: z.number().int().optional()}).optional(), creatives: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), traffic_filters: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), labels: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), payout_revenue: z.object({total: z.number().int().optional(), entries: z.array(z.object({network_offer_payout_revenue_id: z.number().int().optional(), network_id: z.number().int().optional(), network_offer_id: z.number().int().optional(), entry_name: z.string().optional(), payout_type: z.string().optional(), payout_amount: z.number().optional(), payout_percentage: z.number().optional(), revenue_type: z.string().optional(), revenue_amount: z.number().optional(), revenue_percentage: z.number().optional(), is_default: z.boolean().optional(), is_private: z.boolean().optional(), is_postback_disabled: z.boolean().optional(), is_enforce_caps: z.boolean().optional(), time_created: z.number().int().optional(), global_advertiser_event_id: z.number().int().optional(), is_must_approve_conversion: z.boolean().optional(), is_allow_duplicate_conversion: z.boolean().optional(), is_email_attribution_default_event: z.boolean().optional(), remote_offer_resource: z.object({network_offer_id: z.number().int().optional(), network_id: z.number().int().optional(), resource_type: z.string().optional(), remote_resource_id: z.string().optional(), resource_id: z.number().int().optional(), last_value_md5: z.string().optional(), json_config: z.string().optional(), json_data: z.string().optional(), time_created: z.number().int().optional(), time_saved: z.number().int().optional()}).optional()})).optional()}).optional(), custom_cap_settings: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), custom_scrub_rate_settings: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), custom_payout_revenue_settings: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), reporting: z.object({imp: z.number().int().optional(), total_click: z.number().int().optional(), unique_click: z.number().int().optional(), invalid_click: z.number().int().optional(), duplicate_click: z.number().int().optional(), gross_click: z.number().int().optional(), ctr: z.number().optional(), cv: z.number().int().optional(), invalid_cv_scrub: z.number().int().optional(), view_through_cv: z.number().int().optional(), total_cv: z.number().int().optional(), event: z.number().int().optional(), cvr: z.number().optional(), evr: z.number().optional(), cpc: z.number().optional(), cpm: z.number().optional(), cpa: z.number().optional(), epc: z.number().optional(), rpc: z.number().optional(), rpa: z.number().optional(), rpm: z.number().optional(), payout: z.number().optional(), revenue: z.number().optional(), event_revenue: z.number().optional(), gross_sales: z.number().optional(), profit: z.number().optional(), margin: z.number().optional(), roas: z.number().optional(), avg_sale_value: z.number().optional(), media_buying_cost: z.number().optional(), on_hold_potential_revenue: z.number().optional(), on_hold_potential_payout: z.number().optional(), on_hold_conversion_count: z.number().int().optional(), public_events: z.number().int().optional()}).optional(), audits: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), visibility: z.object({network_id: z.number().int().optional(), network_offer_id: z.number().int().optional(), network_affiliate_visible_ids: z.array(z.number().int()).optional(), network_affiliate_rejected_ids: z.array(z.number().int()).optional(), network_affiliate_hidden_ids: z.array(z.number().int()).optional()}).optional(), integrations: z.object({optizmo: z.object({}).nullable().optional(), twentyfour_metrics: z.object({}).nullable().optional(), offer_demand_partner: z.object({}).nullable().optional(), forensiq: z.object({}).nullable().optional(), ezepo: z.object({}).nullable().optional(), anura: z.object({}).nullable().optional(), invoca: z.object({}).nullable().optional(), ip_quality_score: z.object({}).nullable().optional(), unsubcentral: z.object({}).nullable().optional(), ringba: z.object({}).nullable().optional(), retreaver: z.object({}).nullable().optional()}).optional(), ruleset: z.object({network_id: z.number().int().optional(), network_ruleset_id: z.number().int().optional(), time_created: z.number().int().optional(), time_saved: z.number().int().optional(), platforms: z.array(z.object({})).optional(), device_types: z.array(z.object({})).optional(), os_versions: z.array(z.object({})).optional(), browsers: z.array(z.object({})).optional(), languages: z.array(z.object({})).optional(), countries: z.array(z.object({})).optional(), regions: z.array(z.object({})).optional(), cities: z.array(z.object({})).optional(), dmas: z.array(z.object({})).optional(), mobile_carriers: z.array(z.object({})).optional(), connection_types: z.array(z.object({})).optional(), ips: z.array(z.object({})).optional(), is_block_proxy: z.boolean().optional(), is_use_day_parting: z.boolean().optional(), day_parting_apply_to: z.string().optional(), day_parting_timezone_id: z.number().int().optional(), days_parting: z.array(z.object({})).optional(), isps: z.array(z.object({})).optional(), brands: z.array(z.object({})).optional(), postal_codes: z.array(z.object({})).optional()}).optional(), source_names: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), urls: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), encoded_value: z.string().optional(), remaining_caps: z.object({remaining_daily_payout_cap: z.number().optional(), remaining_daily_revenue_cap: z.number().optional(), remaining_daily_conversion_cap: z.number().optional(), remaining_daily_click_cap: z.number().optional(), remaining_weekly_payout_cap: z.number().optional(), remaining_weekly_revenue_cap: z.number().optional(), remaining_weekly_conversion_cap: z.number().optional(), remaining_weekly_click_cap: z.number().optional(), remaining_monthly_payout_cap: z.number().optional(), remaining_monthly_revenue_cap: z.number().optional(), remaining_monthly_conversion_cap: z.number().optional(), remaining_monthly_click_cap: z.number().optional(), remaining_global_payout_cap: z.number().optional(), remaining_global_revenue_cap: z.number().optional(), remaining_global_conversion_cap: z.number().optional(), remaining_global_click_cap: z.number().optional()}).optional(), is_locked_currency: z.boolean().optional(), custom_creative_settings: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), channels: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), is_locked_caps_timezone: z.boolean().optional(), meta: z.object({network_offer_id: z.number().int().optional(), network_id: z.number().int().optional(), app_id: z.string().optional(), meta_platform: z.string().optional(), advertiser_campaign_name: z.string().optional(), bundle_id: z.string().optional(), category: z.string().optional(), store_url: z.string().optional(), score_rating: z.number().optional(), total_rating: z.number().optional(), size: z.number().optional(), developer: z.string().optional(), version: z.string().optional(), is_app_unavailable: z.boolean().optional(), time_created: z.number().int().optional(), time_app_data_saved: z.number().int().optional(), time_saved: z.number().int().optional()}).optional(), requirement_kpis: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional(), requirement_tracking_parameters: z.object({total: z.number().int().optional(), entries: z.array(z.object({})).optional()}).optional()}).optional()}); 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 }; /** * Update Offer * * PUT /networks/offers/{offerId} */ export const updateApiNetworksOffersOfferId = async (args: UpdateApiNetworksOffersOfferIdArgs, options?: UpdateApiNetworksOffersOfferIdOptions) => { const {baseUrl = "https://api.eflow.team/v1", fetch: fetchFn = fetch, APIKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (APIKey !== undefined) headers.set("X-Eflow-Api-Key", APIKey) const url = `${baseUrl.replace(/\/+$/, '')}/networks/offers/${encodeURIComponent(String(args.offerId))}${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(offer, await res.json()) };