import {z} from 'zod' export type GoogleAdsSearchads360V23ServicesEndExperimentRequest = {validateOnly?: boolean | undefined}; export type CreateApiV23CustomersCustomersIdExperimentsExperimentsIdEndExperimentArgs = {customersId: string, experimentsId: string, body: GoogleAdsSearchads360V23ServicesEndExperimentRequest}; export type CreateApiV23CustomersCustomersIdExperimentsExperimentsIdEndExperimentOptions = {baseUrl?: string | undefined, Oauth2?: string | undefined, Oauth2c?: string | undefined, fetch?: typeof fetch | undefined}; export const googleProtobufEmpty = z.object({}); 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 }; /** * Immediately ends an experiment, changing the experiment's scheduled end date and without waiting for end of day. End date is updated to be the time of the request. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ExperimentError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]() * * POST /v23/customers/{customersId}/experiments/{experimentsId}:endExperiment */ export const createApiV23CustomersCustomersIdExperimentsExperimentsIdEndExperiment = async (args: CreateApiV23CustomersCustomersIdExperimentsExperimentsIdEndExperimentArgs, options?: CreateApiV23CustomersCustomersIdExperimentsExperimentsIdEndExperimentOptions) => { 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))}/experiments/${encodeURIComponent(String(args.experimentsId))}:endExperiment${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(googleProtobufEmpty, await res.json()) };