import {z} from 'zod' export type GetApiV4AdvertisersAdvertisersIdCampaignsCampaignsIdArgs = {advertisersId: string, campaignsId: string}; export type GetApiV4AdvertisersAdvertisersIdCampaignsCampaignsIdOptions = {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 }; /** * Gets a campaign. * * GET /v4/advertisers/{advertisersId}/campaigns/{campaignsId} * * Also accepts auth: Oauth2 + Oauth2c */ export const getApiV4AdvertisersAdvertisersIdCampaignsCampaignsId = async (args: GetApiV4AdvertisersAdvertisersIdCampaignsCampaignsIdArgs, options?: GetApiV4AdvertisersAdvertisersIdCampaignsCampaignsIdOptions) => { const {baseUrl = "https://displayvideo.googleapis.com", fetch: fetchFn = fetch, Oauth2, Oauth2c} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") 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: "GET", headers}) 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()) };