import type { ApiClient } from "@promobase/sdk-runtime"; import { Cursor } from "@promobase/sdk-runtime"; import { metaPagination } from "../../pagination.ts"; import type { AdCreativeFields } from "./ad-creative.ts"; import type { AdCreativeAssetGroupsSpecFields } from "./ad-creative-asset-groups-spec.ts"; import type { AdLabelFields } from "./ad-label.ts"; import type { AdPreviewFields } from "./ad-preview.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 { AdgroupIssuesInfoFields } from "./adgroup-issues-info.ts"; import type { AdgroupReviewFeedbackFields } from "./adgroup-review-feedback.ts"; import type { AdsInsightsFields } from "./ads-insights.ts"; import type { CampaignFields } from "./campaign.ts"; import type { ConversionActionQueryFields } from "./conversion-action-query.ts"; import type { DeliveryCheckFields } from "./delivery-check.ts"; import type { LeadFields } from "./lead.ts"; import type { PlacementFields } from "./placement.ts"; import type { RecommendationFields } from "./recommendation.ts"; import type { TargetingFields } from "./targeting.ts"; import type { TargetingSentenceLineFields } from "./targeting-sentence-line.ts"; import type { TrackingAndConversionWithDefaultsFields } from "./tracking-and-conversion-with-defaults.ts"; import type { AdBidType, AdConfiguredStatus, AdEffectiveStatus, AdStatus } from "../enums.ts"; export interface AdFields { account_id: string; ad_active_time: string; ad_review_feedback: AdgroupReviewFeedbackFields; ad_schedule_end_time: string; ad_schedule_start_time: string; adlabels: AdLabelFields[]; adset: AdSetFields; adset_id: string; bid_amount: number; bid_info: Record; bid_type: AdBidType; campaign: CampaignFields; campaign_id: string; configured_status: AdConfiguredStatus; conversion_domain: string; conversion_specs: ConversionActionQueryFields[]; created_time: string; creative: AdCreativeFields; creative_asset_groups_spec: AdCreativeAssetGroupsSpecFields; demolink_hash: string; display_sequence: number; effective_status: AdEffectiveStatus; engagement_audience: boolean; failed_delivery_checks: DeliveryCheckFields[]; id: string; issues_info: AdgroupIssuesInfoFields[]; last_updated_by_app_id: string; name: string; placement: PlacementFields; preview_shareable_link: string; priority: number; recommendations: AdRecommendationFields[]; source_ad: AdFields; source_ad_id: string; special_ad_categories: string[]; status: AdStatus; targeting: TargetingFields; tracking_and_conversion_with_defaults: TrackingAndConversionWithDefaultsFields; tracking_specs: ConversionActionQueryFields[]; updated_time: string; } export interface AdCreateAdlabelsParams { adlabels: Record[]; execution_options?: string[]; [key: string]: unknown; } export interface AdListAdrulesGovernedParams { pass_evaluation?: boolean; [key: string]: unknown; } export interface AdListCopiesParams { date_preset?: string; effective_status?: string[]; time_range?: Record; updated_since?: number; [key: string]: unknown; } export interface AdCreateCopiesParams { adset_id?: string; creative_parameters?: AdCreativeFields; rename_options?: Record; status_option?: string; [key: string]: unknown; } export interface AdListInsightsParams { 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 AdCreateInsightsParams { 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 AdListPreviewsParams { ad_format: string; creative_feature?: string; dynamic_asset_label?: string; dynamic_creative_spec?: Record; dynamic_customization?: Record; end_date?: string; height?: number; locale?: string; place_page_id?: number; post?: Record; product_item_ids?: string[]; render_type?: string; start_date?: string; width?: number; [key: string]: unknown; } export interface AdUpdateParams { ad_schedule_end_time?: string; ad_schedule_start_time?: string; adlabels?: Record[]; adset_spec?: AdSetFields; audience_id?: string; bid_amount?: number; conversion_domain?: string; creative?: AdCreativeFields; creative_asset_groups_spec?: Record; display_sequence?: number; draft_adgroup_id?: string; engagement_audience?: boolean; execution_options?: string[]; include_demolink_hashes?: boolean; name?: string; priority?: number; status?: string; tracking_specs?: Record; [key: string]: unknown; } export function adNode(client: ApiClient, id: string) { return { __path: id, __brand: undefined as unknown as AdFields, get: (opts: { fields: F; params?: Record }) => client.get>(`${id}`, opts), update: (params: AdUpdateParams) => client.post(`${id}`, params as Record), delete: () => client.delete(`${id}`, {}), adcreatives: (opts: { fields: F; params?: Record }) => new Cursor>(client, `${id}/adcreatives`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), createAdlabel: (params: AdCreateAdlabelsParams) => client.post(`${id}/adlabels`, params as Record), adrulesGoverned: (opts: { fields: F; params?: AdListAdrulesGovernedParams }) => new Cursor>(client, `${id}/adrules_governed`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), copies: { __path: `${id}/copies`, __brand: undefined as unknown as AdFields, list: (opts: { fields: F; params?: AdListCopiesParams }) => new Cursor>(client, `${id}/copies`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), create: (params: AdCreateCopiesParams) => client.post(`${id}/copies`, params as Record), }, insights: { __path: `${id}/insights`, __brand: undefined as unknown as AdsInsightsFields, list: (opts: { fields: F; params?: AdListInsightsParams }) => new Cursor>(client, `${id}/insights`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), create: (params: AdCreateInsightsParams) => client.post(`${id}/insights`, params as Record), }, leads: (opts: { fields: F; params?: Record }) => new Cursor>(client, `${id}/leads`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), previews: (opts: { fields: F; params?: AdListPreviewsParams }) => new Cursor>(client, `${id}/previews`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), targetingsentencelines: (opts: { fields: F; params?: Record }) => new Cursor>(client, `${id}/targetingsentencelines`, opts as { fields: readonly string[]; params?: Record }, metaPagination()), }; }