import {z} from 'zod' export type Date = {day?: number | undefined, month?: number | undefined, year?: number | undefined}; export type DateRange = {endDate?: Date | undefined, startDate?: Date | undefined}; export type PrismaCpeCode = {prismaClientCode?: string | undefined, prismaEstimateCode?: string | undefined, prismaProductCode?: string | undefined}; export type PrismaConfig = {prismaCpeCode?: PrismaCpeCode | undefined, prismaType?: ('PRISMA_TYPE_UNSPECIFIED' | 'PRISMA_TYPE_DISPLAY' | 'PRISMA_TYPE_SEARCH' | 'PRISMA_TYPE_VIDEO' | 'PRISMA_TYPE_AUDIO' | 'PRISMA_TYPE_SOCIAL' | 'PRISMA_TYPE_FEE') | undefined, supplier?: string | undefined}; export type CampaignBudget = {budgetAmountMicros?: unknown | undefined, budgetId?: unknown | undefined, budgetUnit?: ('BUDGET_UNIT_UNSPECIFIED' | 'BUDGET_UNIT_CURRENCY' | 'BUDGET_UNIT_IMPRESSIONS') | undefined, dateRange?: DateRange | undefined, displayName?: string | undefined, externalBudgetId?: string | undefined, externalBudgetSource?: ('EXTERNAL_BUDGET_SOURCE_UNSPECIFIED' | 'EXTERNAL_BUDGET_SOURCE_NONE' | 'EXTERNAL_BUDGET_SOURCE_MEDIA_OCEAN') | undefined, invoiceGroupingId?: string | undefined, prismaConfig?: PrismaConfig | undefined}; export type CampaignFlight = {plannedDates?: DateRange | undefined, plannedSpendAmountMicros?: unknown | undefined}; export type PerformanceGoal = {performanceGoalAmountMicros?: unknown | undefined, performanceGoalPercentageMicros?: unknown | undefined, performanceGoalString?: string | undefined, performanceGoalType?: ('PERFORMANCE_GOAL_TYPE_UNSPECIFIED' | 'PERFORMANCE_GOAL_TYPE_CPM' | 'PERFORMANCE_GOAL_TYPE_CPC' | 'PERFORMANCE_GOAL_TYPE_CPA' | 'PERFORMANCE_GOAL_TYPE_CTR' | 'PERFORMANCE_GOAL_TYPE_VIEWABILITY' | 'PERFORMANCE_GOAL_TYPE_CPIAVC' | 'PERFORMANCE_GOAL_TYPE_CPE' | 'PERFORMANCE_GOAL_TYPE_CPV' | 'PERFORMANCE_GOAL_TYPE_CLICK_CVR' | 'PERFORMANCE_GOAL_TYPE_IMPRESSION_CVR' | 'PERFORMANCE_GOAL_TYPE_VCPM' | 'PERFORMANCE_GOAL_TYPE_VTR' | 'PERFORMANCE_GOAL_TYPE_AUDIO_COMPLETION_RATE' | 'PERFORMANCE_GOAL_TYPE_VIDEO_COMPLETION_RATE' | 'PERFORMANCE_GOAL_TYPE_OTHER') | undefined}; export type CampaignGoal = {campaignGoalType?: ('CAMPAIGN_GOAL_TYPE_UNSPECIFIED' | 'CAMPAIGN_GOAL_TYPE_APP_INSTALL' | 'CAMPAIGN_GOAL_TYPE_BRAND_AWARENESS' | 'CAMPAIGN_GOAL_TYPE_OFFLINE_ACTION' | 'CAMPAIGN_GOAL_TYPE_ONLINE_ACTION') | undefined, performanceGoal?: PerformanceGoal | undefined}; export type FrequencyCap = {maxImpressions?: number | undefined, maxViews?: number | undefined, timeUnit?: ('TIME_UNIT_UNSPECIFIED' | 'TIME_UNIT_LIFETIME' | 'TIME_UNIT_MONTHS' | 'TIME_UNIT_WEEKS' | 'TIME_UNIT_DAYS' | 'TIME_UNIT_HOURS' | 'TIME_UNIT_MINUTES') | undefined, timeUnitCount?: number | undefined, unlimited?: boolean | undefined}; export type Campaign = {advertiserId?: unknown | undefined, campaignBudgets?: Array | undefined, campaignFlight?: CampaignFlight | undefined, campaignGoal?: CampaignGoal | undefined, campaignId?: unknown | undefined, displayName?: string | undefined, entityStatus?: ('ENTITY_STATUS_UNSPECIFIED' | 'ENTITY_STATUS_ACTIVE' | 'ENTITY_STATUS_ARCHIVED' | 'ENTITY_STATUS_DRAFT' | 'ENTITY_STATUS_PAUSED' | 'ENTITY_STATUS_SCHEDULED_FOR_DELETION') | undefined, frequencyCap?: FrequencyCap | undefined, name?: string | undefined, updateTime?: unknown | undefined}; export type PatchApiV4AdvertisersAdvertisersIdCampaignsCampaignsIdArgs = {advertisersId: string, campaignsId: string, updateMask?: unknown | undefined, body: Campaign}; export type PatchApiV4AdvertisersAdvertisersIdCampaignsCampaignsIdOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const date = z.object({day: z.number().int().optional(), month: z.number().int().optional(), year: z.number().int().optional()}); export const dateRange = z.object({endDate: date.optional(), startDate: date.optional()}); export const prismaCpeCode = z.object({prismaClientCode: z.string().optional(), prismaEstimateCode: z.string().optional(), prismaProductCode: z.string().optional()}); export const prismaConfig = z.object({prismaCpeCode: prismaCpeCode.optional(), prismaType: z.enum(["PRISMA_TYPE_UNSPECIFIED", "PRISMA_TYPE_DISPLAY", "PRISMA_TYPE_SEARCH", "PRISMA_TYPE_VIDEO", "PRISMA_TYPE_AUDIO", "PRISMA_TYPE_SOCIAL", "PRISMA_TYPE_FEE"]).optional(), supplier: z.string().optional()}); export const campaignBudget = z.object({budgetAmountMicros: z.string().optional(), budgetId: z.string().optional(), budgetUnit: z.enum(["BUDGET_UNIT_UNSPECIFIED", "BUDGET_UNIT_CURRENCY", "BUDGET_UNIT_IMPRESSIONS"]).optional(), dateRange: dateRange.optional(), displayName: z.string().optional(), externalBudgetId: z.string().optional(), externalBudgetSource: z.enum(["EXTERNAL_BUDGET_SOURCE_UNSPECIFIED", "EXTERNAL_BUDGET_SOURCE_NONE", "EXTERNAL_BUDGET_SOURCE_MEDIA_OCEAN"]).optional(), invoiceGroupingId: z.string().optional(), prismaConfig: prismaConfig.optional()}); export const campaignFlight = z.object({plannedDates: dateRange.optional(), plannedSpendAmountMicros: z.string().optional()}); export const performanceGoal = z.object({performanceGoalAmountMicros: z.string().optional(), performanceGoalPercentageMicros: z.string().optional(), performanceGoalString: z.string().optional(), performanceGoalType: z.enum(["PERFORMANCE_GOAL_TYPE_UNSPECIFIED", "PERFORMANCE_GOAL_TYPE_CPM", "PERFORMANCE_GOAL_TYPE_CPC", "PERFORMANCE_GOAL_TYPE_CPA", "PERFORMANCE_GOAL_TYPE_CTR", "PERFORMANCE_GOAL_TYPE_VIEWABILITY", "PERFORMANCE_GOAL_TYPE_CPIAVC", "PERFORMANCE_GOAL_TYPE_CPE", "PERFORMANCE_GOAL_TYPE_CPV", "PERFORMANCE_GOAL_TYPE_CLICK_CVR", "PERFORMANCE_GOAL_TYPE_IMPRESSION_CVR", "PERFORMANCE_GOAL_TYPE_VCPM", "PERFORMANCE_GOAL_TYPE_VTR", "PERFORMANCE_GOAL_TYPE_AUDIO_COMPLETION_RATE", "PERFORMANCE_GOAL_TYPE_VIDEO_COMPLETION_RATE", "PERFORMANCE_GOAL_TYPE_OTHER"]).optional()}); export const campaignGoal = z.object({campaignGoalType: z.enum(["CAMPAIGN_GOAL_TYPE_UNSPECIFIED", "CAMPAIGN_GOAL_TYPE_APP_INSTALL", "CAMPAIGN_GOAL_TYPE_BRAND_AWARENESS", "CAMPAIGN_GOAL_TYPE_OFFLINE_ACTION", "CAMPAIGN_GOAL_TYPE_ONLINE_ACTION"]).optional(), performanceGoal: performanceGoal.optional()}); export const frequencyCap = z.object({maxImpressions: z.number().int().optional(), maxViews: z.number().int().optional(), timeUnit: z.enum(["TIME_UNIT_UNSPECIFIED", "TIME_UNIT_LIFETIME", "TIME_UNIT_MONTHS", "TIME_UNIT_WEEKS", "TIME_UNIT_DAYS", "TIME_UNIT_HOURS", "TIME_UNIT_MINUTES"]).optional(), timeUnitCount: z.number().int().optional(), unlimited: z.boolean().optional()}); export const campaign = z.object({advertiserId: z.string().optional(), campaignBudgets: z.array(campaignBudget).optional(), campaignFlight: campaignFlight.optional(), campaignGoal: campaignGoal.optional(), campaignId: z.string().optional(), displayName: z.string().optional(), entityStatus: z.enum(["ENTITY_STATUS_UNSPECIFIED", "ENTITY_STATUS_ACTIVE", "ENTITY_STATUS_ARCHIVED", "ENTITY_STATUS_DRAFT", "ENTITY_STATUS_PAUSED", "ENTITY_STATUS_SCHEDULED_FOR_DELETION"]).optional(), frequencyCap: frequencyCap.optional(), name: z.string().optional(), updateTime: z.string().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 }; /** * Updates an existing campaign. Returns the updated campaign if successful. * * PATCH /v4/advertisers/{advertisersId}/campaigns/{campaignsId} * * Also accepts auth: Oauth2 + Oauth2c */ export const patchApiV4AdvertisersAdvertisersIdCampaignsCampaignsId = async (args: PatchApiV4AdvertisersAdvertisersIdCampaignsCampaignsIdArgs, options?: PatchApiV4AdvertisersAdvertisersIdCampaignsCampaignsIdOptions) => { const {baseUrl = "https://displayvideo.googleapis.com", fetch: fetchFn = fetch, Oauth2, Oauth2c} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args.updateMask != null) query.append("updateMask", String(args.updateMask)) if (Oauth2 !== undefined) headers.set('authorization', `Bearer ${Oauth2}`) if (Oauth2c !== undefined) headers.set('authorization', `Bearer ${Oauth2c}`) const url = `${baseUrl.replace(/\/+$/, '')}/v4/advertisers/${encodeURIComponent(String(args.advertisersId))}/campaigns/${encodeURIComponent(String(args.campaignsId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", 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(campaign, await res.json()) };