import {z} from 'zod' export type GoogleAdsSearchads360V23CommonBrandInfo = {displayName?: string | undefined, entityId?: string | undefined, primaryUrl?: string | undefined, rejectionReason?: ('UNSPECIFIED' | 'UNKNOWN' | 'EXISTING_BRAND' | 'EXISTING_BRAND_VARIANT' | 'INCORRECT_INFORMATION' | 'NOT_A_BRAND') | undefined, status?: ('UNSPECIFIED' | 'UNKNOWN' | 'ENABLED' | 'DEPRECATED' | 'UNVERIFIED' | 'APPROVED' | 'CANCELLED' | 'REJECTED') | undefined}; export type GoogleAdsSearchads360V23CommonKeywordInfo = {matchType?: ('UNSPECIFIED' | 'UNKNOWN' | 'EXACT' | 'PHRASE' | 'BROAD') | undefined, text?: string | undefined}; export type GoogleAdsSearchads360V23CommonMobileAppCategoryInfo = {mobileAppCategoryConstant?: string | undefined}; export type GoogleAdsSearchads360V23CommonMobileApplicationInfo = {appId?: string | undefined, name?: string | undefined}; export type GoogleAdsSearchads360V23CommonPlacementInfo = {url?: string | undefined}; export type GoogleAdsSearchads360V23CommonVerticalAdsItemGroupRuleInfo = {cityCriterionId?: string | undefined, countryCriterionId?: string | undefined, hotelClass?: unknown | undefined, itemCode?: string | undefined, regionCriterionId?: string | undefined}; export type GoogleAdsSearchads360V23CommonWebpageConditionInfo = {argument?: string | undefined, operand?: ('UNSPECIFIED' | 'UNKNOWN' | 'URL' | 'CATEGORY' | 'PAGE_TITLE' | 'PAGE_CONTENT' | 'CUSTOM_LABEL') | undefined, operator?: ('UNSPECIFIED' | 'UNKNOWN' | 'EQUALS' | 'CONTAINS') | undefined}; export type GoogleAdsSearchads360V23CommonWebpageSampleInfo = {sampleUrls?: Array | undefined}; export type GoogleAdsSearchads360V23CommonWebpageInfo = {conditions?: Array | undefined, coveragePercentage?: number | undefined, criterionName?: string | undefined, sample?: GoogleAdsSearchads360V23CommonWebpageSampleInfo | undefined}; export type GoogleAdsSearchads360V23CommonYouTubeChannelInfo = {channelId?: string | undefined}; export type GoogleAdsSearchads360V23CommonYouTubeVideoInfo = {videoId?: string | undefined}; export type GoogleAdsSearchads360V23ResourcesSharedCriterion = {brand?: GoogleAdsSearchads360V23CommonBrandInfo | undefined, criterionId?: unknown | undefined, keyword?: GoogleAdsSearchads360V23CommonKeywordInfo | undefined, mobileAppCategory?: GoogleAdsSearchads360V23CommonMobileAppCategoryInfo | undefined, mobileApplication?: GoogleAdsSearchads360V23CommonMobileApplicationInfo | undefined, negative?: boolean | undefined, placement?: GoogleAdsSearchads360V23CommonPlacementInfo | undefined, resourceName?: string | undefined, sharedSet?: string | undefined, type?: ('UNSPECIFIED' | 'UNKNOWN' | 'KEYWORD' | 'PLACEMENT' | 'MOBILE_APP_CATEGORY' | 'MOBILE_APPLICATION' | 'DEVICE' | 'LOCATION' | 'LISTING_GROUP' | 'AD_SCHEDULE' | 'AGE_RANGE' | 'GENDER' | 'INCOME_RANGE' | 'PARENTAL_STATUS' | 'YOUTUBE_VIDEO' | 'YOUTUBE_CHANNEL' | 'USER_LIST' | 'PROXIMITY' | 'TOPIC' | 'LISTING_SCOPE' | 'LANGUAGE' | 'IP_BLOCK' | 'CONTENT_LABEL' | 'CARRIER' | 'USER_INTEREST' | 'WEBPAGE' | 'OPERATING_SYSTEM_VERSION' | 'APP_PAYMENT_MODEL' | 'MOBILE_DEVICE' | 'CUSTOM_AFFINITY' | 'CUSTOM_INTENT' | 'LOCATION_GROUP' | 'CUSTOM_AUDIENCE' | 'COMBINED_AUDIENCE' | 'KEYWORD_THEME' | 'AUDIENCE' | 'NEGATIVE_KEYWORD_LIST' | 'LOCAL_SERVICE_ID' | 'SEARCH_THEME' | 'BRAND' | 'BRAND_LIST' | 'LIFE_EVENT' | 'WEBPAGE_LIST' | 'VIDEO_LINEUP' | 'PLACEMENT_LIST' | 'VERTICAL_ADS_ITEM_GROUP_RULE_LIST' | 'VERTICAL_ADS_ITEM_GROUP_RULE') | undefined, verticalAdsItemGroupRule?: GoogleAdsSearchads360V23CommonVerticalAdsItemGroupRuleInfo | undefined, webpage?: GoogleAdsSearchads360V23CommonWebpageInfo | undefined, youtubeChannel?: GoogleAdsSearchads360V23CommonYouTubeChannelInfo | undefined, youtubeVideo?: GoogleAdsSearchads360V23CommonYouTubeVideoInfo | undefined}; export type GoogleAdsSearchads360V23ServicesSharedCriterionOperation = {create?: GoogleAdsSearchads360V23ResourcesSharedCriterion | undefined, remove?: string | undefined}; export type GoogleAdsSearchads360V23ServicesMutateSharedCriteriaRequest = {operations?: Array | undefined, partialFailure?: boolean | undefined, responseContentType?: ('UNSPECIFIED' | 'RESOURCE_NAME_ONLY' | 'MUTABLE_RESOURCE') | undefined, validateOnly?: boolean | undefined}; export type CreateApiV23CustomersCustomersIdSharedCriteriaMutateArgs = {customersId: string, body: GoogleAdsSearchads360V23ServicesMutateSharedCriteriaRequest}; export type CreateApiV23CustomersCustomersIdSharedCriteriaMutateOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const googleRpcStatus = z.object({code: z.number().int().optional(), details: z.array(z.record(z.string(), z.unknown())).optional(), message: z.string().optional()}); export const googleAdsSearchads360V23CommonBrandInfo = z.object({displayName: z.string().optional(), entityId: z.string().optional(), primaryUrl: z.string().optional(), rejectionReason: z.enum(["UNSPECIFIED", "UNKNOWN", "EXISTING_BRAND", "EXISTING_BRAND_VARIANT", "INCORRECT_INFORMATION", "NOT_A_BRAND"]).optional(), status: z.enum(["UNSPECIFIED", "UNKNOWN", "ENABLED", "DEPRECATED", "UNVERIFIED", "APPROVED", "CANCELLED", "REJECTED"]).optional()}); export const googleAdsSearchads360V23CommonKeywordInfo = z.object({matchType: z.enum(["UNSPECIFIED", "UNKNOWN", "EXACT", "PHRASE", "BROAD"]).optional(), text: z.string().optional()}); export const googleAdsSearchads360V23CommonMobileAppCategoryInfo = z.object({mobileAppCategoryConstant: z.string().optional()}); export const googleAdsSearchads360V23CommonMobileApplicationInfo = z.object({appId: z.string().optional(), name: z.string().optional()}); export const googleAdsSearchads360V23CommonPlacementInfo = z.object({url: z.string().optional()}); export const googleAdsSearchads360V23CommonVerticalAdsItemGroupRuleInfo = z.object({cityCriterionId: z.string().optional(), countryCriterionId: z.string().optional(), hotelClass: z.string().optional(), itemCode: z.string().optional(), regionCriterionId: z.string().optional()}); export const googleAdsSearchads360V23CommonWebpageConditionInfo = z.object({argument: z.string().optional(), operand: z.enum(["UNSPECIFIED", "UNKNOWN", "URL", "CATEGORY", "PAGE_TITLE", "PAGE_CONTENT", "CUSTOM_LABEL"]).optional(), operator: z.enum(["UNSPECIFIED", "UNKNOWN", "EQUALS", "CONTAINS"]).optional()}); export const googleAdsSearchads360V23CommonWebpageSampleInfo = z.object({sampleUrls: z.array(z.string()).optional()}); export const googleAdsSearchads360V23CommonWebpageInfo = z.object({conditions: z.array(googleAdsSearchads360V23CommonWebpageConditionInfo).optional(), coveragePercentage: z.number().optional(), criterionName: z.string().optional(), sample: googleAdsSearchads360V23CommonWebpageSampleInfo.optional()}); export const googleAdsSearchads360V23CommonYouTubeChannelInfo = z.object({channelId: z.string().optional()}); export const googleAdsSearchads360V23CommonYouTubeVideoInfo = z.object({videoId: z.string().optional()}); export const googleAdsSearchads360V23ResourcesSharedCriterion = z.object({brand: googleAdsSearchads360V23CommonBrandInfo.optional(), criterionId: z.string().optional(), keyword: googleAdsSearchads360V23CommonKeywordInfo.optional(), mobileAppCategory: googleAdsSearchads360V23CommonMobileAppCategoryInfo.optional(), mobileApplication: googleAdsSearchads360V23CommonMobileApplicationInfo.optional(), negative: z.boolean().optional(), placement: googleAdsSearchads360V23CommonPlacementInfo.optional(), resourceName: z.string().optional(), sharedSet: z.string().optional(), type: z.enum(["UNSPECIFIED", "UNKNOWN", "KEYWORD", "PLACEMENT", "MOBILE_APP_CATEGORY", "MOBILE_APPLICATION", "DEVICE", "LOCATION", "LISTING_GROUP", "AD_SCHEDULE", "AGE_RANGE", "GENDER", "INCOME_RANGE", "PARENTAL_STATUS", "YOUTUBE_VIDEO", "YOUTUBE_CHANNEL", "USER_LIST", "PROXIMITY", "TOPIC", "LISTING_SCOPE", "LANGUAGE", "IP_BLOCK", "CONTENT_LABEL", "CARRIER", "USER_INTEREST", "WEBPAGE", "OPERATING_SYSTEM_VERSION", "APP_PAYMENT_MODEL", "MOBILE_DEVICE", "CUSTOM_AFFINITY", "CUSTOM_INTENT", "LOCATION_GROUP", "CUSTOM_AUDIENCE", "COMBINED_AUDIENCE", "KEYWORD_THEME", "AUDIENCE", "NEGATIVE_KEYWORD_LIST", "LOCAL_SERVICE_ID", "SEARCH_THEME", "BRAND", "BRAND_LIST", "LIFE_EVENT", "WEBPAGE_LIST", "VIDEO_LINEUP", "PLACEMENT_LIST", "VERTICAL_ADS_ITEM_GROUP_RULE_LIST", "VERTICAL_ADS_ITEM_GROUP_RULE"]).optional(), verticalAdsItemGroupRule: googleAdsSearchads360V23CommonVerticalAdsItemGroupRuleInfo.optional(), webpage: googleAdsSearchads360V23CommonWebpageInfo.optional(), youtubeChannel: googleAdsSearchads360V23CommonYouTubeChannelInfo.optional(), youtubeVideo: googleAdsSearchads360V23CommonYouTubeVideoInfo.optional()}); export const googleAdsSearchads360V23ServicesMutateSharedCriterionResult = z.object({resourceName: z.string().optional(), sharedCriterion: googleAdsSearchads360V23ResourcesSharedCriterion.optional()}); export const googleAdsSearchads360V23ServicesMutateSharedCriteriaResponse = z.object({partialFailureError: googleRpcStatus.optional(), results: z.array(googleAdsSearchads360V23ServicesMutateSharedCriterionResult).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 }; /** * Creates or removes shared criteria. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CriterionError]() [DatabaseError]() [DistinctError]() [FieldError]() [HeaderError]() [IdError]() [InternalError]() [MutateError]() [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() * * POST /v23/customers/{customersId}/sharedCriteria:mutate */ export const createApiV23CustomersCustomersIdSharedCriteriaMutate = async (args: CreateApiV23CustomersCustomersIdSharedCriteriaMutateArgs, options?: CreateApiV23CustomersCustomersIdSharedCriteriaMutateOptions) => { const {baseUrl = "https://searchads360.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 (Oauth2 !== undefined) headers.set('authorization', `Bearer ${Oauth2}`) if (Oauth2c !== undefined) headers.set('authorization', `Bearer ${Oauth2c}`) const url = `${baseUrl.replace(/\/+$/, '')}/v23/customers/${encodeURIComponent(String(args.customersId))}/sharedCriteria:mutate${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(googleAdsSearchads360V23ServicesMutateSharedCriteriaResponse, await res.json()) };