import {z} from 'zod' export type DimensionValue = {dimensionName?: string | undefined, etag?: string | undefined, id?: string | undefined, kind?: string | undefined, matchType?: ('EXACT' | 'BEGINS_WITH' | 'CONTAINS' | 'WILDCARD_EXPRESSION') | undefined, value?: string | undefined}; export type ContextualKeyword = {keyword?: string | undefined}; export type ContextualKeywordTargeting = {keywords?: Array | undefined}; export type DayPartTargeting = {daysOfWeek?: (Array<'SUNDAY' | 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY'>) | undefined, hoursOfDay?: Array | undefined, userLocalTime?: boolean | undefined}; export type City = {countryCode?: string | undefined, countryDartId?: unknown | undefined, dartId?: unknown | undefined, kind?: string | undefined, metroCode?: string | undefined, metroDmaId?: unknown | undefined, name?: string | undefined, regionCode?: string | undefined, regionDartId?: unknown | undefined}; export type Country = {countryCode?: string | undefined, dartId?: unknown | undefined, kind?: string | undefined, name?: string | undefined, sslEnabled?: boolean | undefined, tvDataProviders?: (Array<'INVALID_TV_DATA_PROVIDER' | 'INTAGE_JP' | 'IBOPE_AR' | 'IBOPE_BR' | 'IBOPE_CL' | 'IBOPE_CO' | 'TNS_VN' | 'COMSCORE_NATIONAL_US' | 'COMSCORE_CA' | 'SAMBA_AU'>) | undefined}; export type Metro = {countryCode?: string | undefined, countryDartId?: unknown | undefined, dartId?: unknown | undefined, dmaId?: unknown | undefined, kind?: string | undefined, metroCode?: string | undefined, name?: string | undefined}; export type PostalCode = {code?: string | undefined, countryCode?: string | undefined, countryDartId?: unknown | undefined, id?: string | undefined, kind?: string | undefined}; export type Region = {countryCode?: string | undefined, countryDartId?: unknown | undefined, dartId?: unknown | undefined, kind?: string | undefined, name?: string | undefined, regionCode?: string | undefined}; export type GeoTargeting = {cities?: Array | undefined, countries?: Array | undefined, excludeCountries?: boolean | undefined, metros?: Array | undefined, postalCodes?: Array | undefined, regions?: Array | undefined}; export type KeyValueTargetingExpression = {expression?: string | undefined}; export type Language = {id?: unknown | undefined, kind?: string | undefined, languageCode?: string | undefined, name?: string | undefined}; export type LanguageTargeting = {languages?: Array | undefined}; export type ListTargetingExpression = {expression?: string | undefined}; export type Browser = {browserVersionId?: unknown | undefined, dartId?: unknown | undefined, kind?: string | undefined, majorVersion?: string | undefined, minorVersion?: string | undefined, name?: string | undefined}; export type ConnectionType = {id?: unknown | undefined, kind?: string | undefined, name?: string | undefined}; export type MobileCarrier = {countryCode?: string | undefined, countryDartId?: unknown | undefined, id?: unknown | undefined, kind?: string | undefined, name?: string | undefined}; export type OperatingSystem = {dartId?: unknown | undefined, desktop?: boolean | undefined, kind?: string | undefined, mobile?: boolean | undefined, name?: string | undefined}; export type OperatingSystemVersion = {id?: unknown | undefined, kind?: string | undefined, majorVersion?: string | undefined, minorVersion?: string | undefined, name?: string | undefined, operatingSystem?: OperatingSystem | undefined}; export type PlatformType = {id?: unknown | undefined, kind?: string | undefined, name?: string | undefined}; export type TechnologyTargeting = {browsers?: Array | undefined, connectionTypes?: Array | undefined, mobileCarriers?: Array | undefined, operatingSystemVersions?: Array | undefined, operatingSystems?: Array | undefined, platformTypes?: Array | undefined}; export type TargetingTemplate = {accountId?: unknown | undefined, advertiserId?: unknown | undefined, advertiserIdDimensionValue?: DimensionValue | undefined, contextualKeywordTargeting?: ContextualKeywordTargeting | undefined, dayPartTargeting?: DayPartTargeting | undefined, geoTargeting?: GeoTargeting | undefined, id?: unknown | undefined, keyValueTargetingExpression?: KeyValueTargetingExpression | undefined, kind?: string | undefined, languageTargeting?: LanguageTargeting | undefined, listTargetingExpression?: ListTargetingExpression | undefined, name?: string | undefined, subaccountId?: unknown | undefined, technologyTargeting?: TechnologyTargeting | undefined}; export type CreateApiUserprofilesUserprofilesIdTargetingTemplatesArgs = {userprofilesId: string, body: TargetingTemplate}; export type CreateApiUserprofilesUserprofilesIdTargetingTemplatesOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const dimensionValue = z.object({dimensionName: z.string().optional(), etag: z.string().optional(), id: z.string().optional(), kind: z.string().optional(), matchType: z.enum(["EXACT", "BEGINS_WITH", "CONTAINS", "WILDCARD_EXPRESSION"]).optional(), value: z.string().optional()}); export const contextualKeyword = z.object({keyword: z.string().optional()}); export const contextualKeywordTargeting = z.object({keywords: z.array(contextualKeyword).optional()}); export const dayPartTargeting = z.object({daysOfWeek: z.array(z.enum(["SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"])).optional(), hoursOfDay: z.array(z.number().int()).optional(), userLocalTime: z.boolean().optional()}); export const city = z.object({countryCode: z.string().optional(), countryDartId: z.string().optional(), dartId: z.string().optional(), kind: z.string().optional(), metroCode: z.string().optional(), metroDmaId: z.string().optional(), name: z.string().optional(), regionCode: z.string().optional(), regionDartId: z.string().optional()}); export const country = z.object({countryCode: z.string().optional(), dartId: z.string().optional(), kind: z.string().optional(), name: z.string().optional(), sslEnabled: z.boolean().optional(), tvDataProviders: z.array(z.enum(["INVALID_TV_DATA_PROVIDER", "INTAGE_JP", "IBOPE_AR", "IBOPE_BR", "IBOPE_CL", "IBOPE_CO", "TNS_VN", "COMSCORE_NATIONAL_US", "COMSCORE_CA", "SAMBA_AU"])).optional()}); export const metro = z.object({countryCode: z.string().optional(), countryDartId: z.string().optional(), dartId: z.string().optional(), dmaId: z.string().optional(), kind: z.string().optional(), metroCode: z.string().optional(), name: z.string().optional()}); export const postalCode = z.object({code: z.string().optional(), countryCode: z.string().optional(), countryDartId: z.string().optional(), id: z.string().optional(), kind: z.string().optional()}); export const region = z.object({countryCode: z.string().optional(), countryDartId: z.string().optional(), dartId: z.string().optional(), kind: z.string().optional(), name: z.string().optional(), regionCode: z.string().optional()}); export const geoTargeting = z.object({cities: z.array(city).optional(), countries: z.array(country).optional(), excludeCountries: z.boolean().optional(), metros: z.array(metro).optional(), postalCodes: z.array(postalCode).optional(), regions: z.array(region).optional()}); export const keyValueTargetingExpression = z.object({expression: z.string().optional()}); export const language = z.object({id: z.string().optional(), kind: z.string().optional(), languageCode: z.string().optional(), name: z.string().optional()}); export const languageTargeting = z.object({languages: z.array(language).optional()}); export const listTargetingExpression = z.object({expression: z.string().optional()}); export const browser = z.object({browserVersionId: z.string().optional(), dartId: z.string().optional(), kind: z.string().optional(), majorVersion: z.string().optional(), minorVersion: z.string().optional(), name: z.string().optional()}); export const connectionType = z.object({id: z.string().optional(), kind: z.string().optional(), name: z.string().optional()}); export const mobileCarrier = z.object({countryCode: z.string().optional(), countryDartId: z.string().optional(), id: z.string().optional(), kind: z.string().optional(), name: z.string().optional()}); export const operatingSystem = z.object({dartId: z.string().optional(), desktop: z.boolean().optional(), kind: z.string().optional(), mobile: z.boolean().optional(), name: z.string().optional()}); export const operatingSystemVersion = z.object({id: z.string().optional(), kind: z.string().optional(), majorVersion: z.string().optional(), minorVersion: z.string().optional(), name: z.string().optional(), operatingSystem: operatingSystem.optional()}); export const platformType = z.object({id: z.string().optional(), kind: z.string().optional(), name: z.string().optional()}); export const technologyTargeting = z.object({browsers: z.array(browser).optional(), connectionTypes: z.array(connectionType).optional(), mobileCarriers: z.array(mobileCarrier).optional(), operatingSystemVersions: z.array(operatingSystemVersion).optional(), operatingSystems: z.array(operatingSystem).optional(), platformTypes: z.array(platformType).optional()}); export const targetingTemplate = z.object({accountId: z.string().optional(), advertiserId: z.string().optional(), advertiserIdDimensionValue: dimensionValue.optional(), contextualKeywordTargeting: contextualKeywordTargeting.optional(), dayPartTargeting: dayPartTargeting.optional(), geoTargeting: geoTargeting.optional(), id: z.string().optional(), keyValueTargetingExpression: keyValueTargetingExpression.optional(), kind: z.string().optional(), languageTargeting: languageTargeting.optional(), listTargetingExpression: listTargetingExpression.optional(), name: z.string().optional(), subaccountId: z.string().optional(), technologyTargeting: technologyTargeting.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 }; /** * Inserts a new targeting template. * * POST /userprofiles/{userprofilesId}/targetingTemplates */ export const createApiUserprofilesUserprofilesIdTargetingTemplates = async (args: CreateApiUserprofilesUserprofilesIdTargetingTemplatesArgs, options?: CreateApiUserprofilesUserprofilesIdTargetingTemplatesOptions) => { const {baseUrl = "https://dfareporting.googleapis.com/dfareporting/v5", 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 (Oauth2 !== undefined) headers.set('authorization', `Bearer ${Oauth2}`) if (Oauth2c !== undefined) headers.set('authorization', `Bearer ${Oauth2c}`) const url = `${baseUrl.replace(/\/+$/, '')}/userprofiles/${encodeURIComponent(String(args.userprofilesId))}/targetingTemplates${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", 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(targetingTemplate, await res.json()) };