import type { ApiClient } from "@promobase/sdk-runtime"; import { Cursor } from "@promobase/sdk-runtime"; import { metaPagination } from "../../pagination.ts"; import type { AdFields } from "./ad.ts"; import type { AdCampaignGroupAdvantageStateFields } from "./ad-campaign-group-advantage-state.ts"; import type { AdCampaignIssuesInfoFields } from "./ad-campaign-issues-info.ts"; import type { AdLabelFields } from "./ad-label.ts"; import type { AdPromotedObjectFields } from "./ad-promoted-object.ts"; import type { AdRecommendationFields } from "./ad-recommendation.ts"; import type { AdReportRunFields } from "./ad-report-run.ts"; import type { AdRuleFields } from "./ad-rule.ts"; import type { AdSetFields } from "./ad-set.ts"; import type { AdStudyFields } from "./ad-study.ts"; import type { AdsInsightsFields } from "./ads-insights.ts"; import type { HighDemandPeriodFields } from "./high-demand-period.ts"; import type { RecommendationFields } from "./recommendation.ts"; import type { CampaignBidStrategy, CampaignConfiguredStatus, CampaignEffectiveStatus, CampaignStatus } from "../enums.ts"; export interface CampaignFields { account_id: string; adlabels: AdLabelFields[]; advantage_state_info: AdCampaignGroupAdvantageStateFields; bid_strategy: CampaignBidStrategy; boosted_object_id: string; brand_lift_studies: AdStudyFields[]; budget_rebalance_flag: boolean; budget_remaining: string; buying_type: string; campaign_group_active_time: string; can_create_brand_lift_study: boolean; can_use_spend_cap: boolean; configured_status: CampaignConfiguredStatus; created_time: string; daily_budget: string; effective_status: CampaignEffectiveStatus; has_secondary_skadnetwork_reporting: boolean; id: string; is_adset_budget_sharing_enabled: boolean; is_budget_schedule_enabled: boolean; is_direct_send_campaign: boolean; is_message_campaign: boolean; is_skadnetwork_attribution: boolean; issues_info: AdCampaignIssuesInfoFields[]; last_budget_toggling_time: string; lifetime_budget: string; name: string; objective: string; pacing_type: string[]; primary_attribution: string; promoted_object: AdPromotedObjectFields; recommendations: AdRecommendationFields[]; smart_promotion_type: string; source_campaign: CampaignFields; source_campaign_id: string; source_recommendation_type: string; special_ad_categories: string[]; special_ad_category: string; special_ad_category_country: string[]; spend_cap: string; start_time: string; status: CampaignStatus; stop_time: string; topline_id: string; updated_time: string; } export interface CampaignCreateAdlabelsParams { adlabels: Record[]; execution_options?: string[]; [key: string]: unknown; } export interface CampaignListAdrulesGovernedParams { pass_evaluation?: boolean; [key: string]: unknown; } export interface CampaignListAdsParams { date_preset?: string; effective_status?: string[]; time_range?: Record; updated_since?: number; [key: string]: unknown; } export interface CampaignListAdsetsParams { date_preset?: string; effective_status?: string[]; is_completed?: boolean; time_range?: Record; [key: string]: unknown; } export interface CampaignListBudgetSchedulesParams { time_start?: string; time_stop?: string; [key: string]: unknown; } export interface CampaignCreateBudgetSchedulesParams { budget_value: number; budget_value_type: string; time_end: number; time_start: number; [key: string]: unknown; } export interface CampaignListCopiesParams { date_preset?: string; effective_status?: string[]; is_completed?: boolean; time_range?: Record; [key: string]: unknown; } export interface CampaignCreateCopiesParams { deep_copy?: boolean; end_time?: string; migrate_to_advantage_plus?: boolean; parameter_overrides?: Record; rename_options?: Record; start_time?: string; status_option?: string; [key: string]: unknown; } export interface CampaignListInsightsParams { action_attribution_windows?: string[]; action_breakdowns?: string[]; action_report_time?: string; breakdowns?: string[]; date_preset?: string; default_summary?: boolean; export_columns?: string[]; export_format?: string; export_name?: string; fields?: string[]; filtering?: Record[]; graph_cache?: boolean; level?: string; limit?: number; product_id_limit?: number; sort?: string[]; summary?: string[]; summary_action_breakdowns?: string[]; time_increment?: string; time_range?: Record; time_ranges?: Record[]; use_account_attribution_setting?: boolean; use_unified_attribution_setting?: boolean; [key: string]: unknown; } export interface CampaignCreateInsightsParams { action_attribution_windows?: string[]; action_breakdowns?: string[]; action_report_time?: string; breakdowns?: string[]; date_preset?: string; default_summary?: boolean; export_columns?: string[]; export_format?: string; export_name?: string; fields?: string[]; filtering?: Record[]; graph_cache?: boolean; level?: string; limit?: number; product_id_limit?: number; sort?: string[]; summary?: string[]; summary_action_breakdowns?: string[]; time_increment?: string; time_range?: Record; time_ranges?: Record[]; use_account_attribution_setting?: boolean; use_unified_attribution_setting?: boolean; [key: string]: unknown; } export interface CampaignUpdateParams { adlabels?: Record[]; adset_bid_amounts?: Record; adset_budgets?: Record[]; bid_strategy?: string; budget_rebalance_flag?: boolean; budget_schedule_specs?: Record[]; daily_budget?: number; execution_options?: string[]; is_adset_budget_sharing_enabled?: boolean; is_budget_schedule_enabled?: boolean; is_direct_send_campaign?: boolean; is_message_campaign?: boolean; is_skadnetwork_attribution?: boolean; iterative_split_test_configs?: Record[]; lifetime_budget?: number; migrate_to_advantage_plus?: boolean; name?: string; objective?: string; pacing_type?: string[]; promoted_object?: Record; smart_promotion_type?: string; special_ad_categories?: string[]; special_ad_category?: string; special_ad_category_country?: string[]; spend_cap?: number; start_time?: string; status?: string; stop_time?: string; [key: string]: unknown; } export function campaignNode(client: ApiClient, id: string) { return { __path: id, __brand: undefined as unknown as CampaignFields, get: (opts: { fields: F; params?: Record }) => client.get>(`${id}`, opts), update: (params: CampaignUpdateParams) => client.post(`${id}`, params as Record), delete: () => client.delete(`${id}`, {}), adStudies: (opts: { fields: F; params?: Record }) => new Cursor>(client, `${id}/ad_studies`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), createAdlabel: (params: CampaignCreateAdlabelsParams) => client.post(`${id}/adlabels`, params as Record), adrulesGoverned: (opts: { fields: F; params?: CampaignListAdrulesGovernedParams }) => new Cursor>(client, `${id}/adrules_governed`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), ads: (opts: { fields: F; params?: CampaignListAdsParams }) => new Cursor>(client, `${id}/ads`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), adsets: (opts: { fields: F; params?: CampaignListAdsetsParams }) => new Cursor>(client, `${id}/adsets`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), budgetSchedules: { __path: `${id}/budget_schedules`, __brand: undefined as unknown as HighDemandPeriodFields, list: (opts: { fields: F; params?: CampaignListBudgetSchedulesParams }) => new Cursor>(client, `${id}/budget_schedules`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), create: (params: CampaignCreateBudgetSchedulesParams) => client.post(`${id}/budget_schedules`, params as Record), }, copies: { __path: `${id}/copies`, __brand: undefined as unknown as CampaignFields, list: (opts: { fields: F; params?: CampaignListCopiesParams }) => new Cursor>(client, `${id}/copies`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), create: (params: CampaignCreateCopiesParams) => client.post(`${id}/copies`, params as Record), }, insights: { __path: `${id}/insights`, __brand: undefined as unknown as AdsInsightsFields, list: (opts: { fields: F; params?: CampaignListInsightsParams }) => new Cursor>(client, `${id}/insights`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), create: (params: CampaignCreateInsightsParams) => client.post(`${id}/insights`, params as Record), }, }; }