import {z} from 'zod' export type BatchWebhookEventInput = {event?: ('*' | 'Account.*' | 'Account.Create' | 'Account.Delete' | 'Account.DocumentLinked' | 'Account.OwnerChanged' | 'Account.Update' | 'ActivityRelation.*' | 'ActivityRelation.Create' | 'ActivityRelation.Delete' | 'ActivityRelation.Update' | 'Appointment.*' | 'Appointment.Comment' | 'Appointment.Create' | 'Appointment.Delete' | 'Appointment.DocumentLinked' | 'Appointment.OwnerChanged' | 'Appointment.Update' | 'Contact.*' | 'Contact.Create' | 'Contact.Delete' | 'Contact.DocumentLinked' | 'Contact.OwnerChanged' | 'Contact.Update' | 'ContactAccountRelation.*' | 'ContactAccountRelation.Create' | 'ContactAccountRelation.Delete' | 'ContactAccountRelation.Update' | 'Currency.*' | 'Currency.Create' | 'Currency.Delete' | 'Currency.Update' | 'CurrencyExchangeRate.*' | 'CurrencyExchangeRate.Create' | 'CurrencyExchangeRate.Delete' | 'CurrencyExchangeRate.Update' | 'CurrencyExchangeRatesList.*' | 'CurrencyExchangeRatesList.Create' | 'CurrencyExchangeRatesList.Delete' | 'CurrencyExchangeRatesList.Update' | 'CustomEntity.*' | 'CustomEntity.Create' | 'CustomEntity.Delete' | 'CustomEntity.DocumentLinked' | 'CustomEntity.OwnerChanged' | 'CustomEntity.Update' | 'Email.*' | 'Email.Create' | 'Email.Delete' | 'Email.DocumentLinked' | 'Email.Update' | 'Lead.*' | 'Lead.BackToLead' | 'Lead.Create' | 'Lead.Delete' | 'Lead.DocumentLinked' | 'Lead.Lost' | 'Lead.OwnerChanged' | 'Lead.Update' | 'LeadOpptyAccountRelation.*' | 'LeadOpptyAccountRelation.Create' | 'LeadOpptyAccountRelation.Delete' | 'LeadOpptyAccountRelation.Update' | 'LeadOpptyContactRelation.*' | 'LeadOpptyContactRelation.Create' | 'LeadOpptyContactRelation.Delete' | 'LeadOpptyContactRelation.Update' | 'Memo.*' | 'Memo.Comment' | 'Memo.Create' | 'Memo.Delete' | 'Memo.DocumentLinked' | 'Memo.Update' | 'Message.*' | 'Message.Create' | 'Message.Delete' | 'Message.DocumentLinked' | 'Message.Update' | 'Note.*' | 'Note.Create' | 'Note.Delete' | 'Note.Update' | 'Opportunity.*' | 'Opportunity.Create' | 'Opportunity.Delete' | 'Opportunity.DocumentLinked' | 'Opportunity.Lost' | 'Opportunity.Move' | 'Opportunity.OwnerChanged' | 'Opportunity.Qualify' | 'Opportunity.Update' | 'Opportunity.Won' | 'OpptyProductRelation.*' | 'OpptyProductRelation.Create' | 'OpptyProductRelation.Delete' | 'OpptyProductRelation.Update' | 'Product.*' | 'Product.Create' | 'Product.Delete' | 'Product.Update' | 'ProductPriceList.*' | 'ProductPriceList.Create' | 'ProductPriceList.Delete' | 'ProductPriceList.Update' | 'ProductPriceListPrice.*' | 'ProductPriceListPrice.Create' | 'ProductPriceListPrice.Delete' | 'ProductPriceListPrice.Update' | 'Project.*' | 'Project.Create' | 'Project.Delete' | 'Project.DocumentLinked' | 'Project.OwnerChanged' | 'Project.Update' | 'Quote.*' | 'Quote.Create' | 'Quote.Delete' | 'Quote.DocumentLinked' | 'Quote.Lost' | 'Quote.Move' | 'Quote.OwnerChanged' | 'Quote.Update' | 'Quote.Won' | 'QuoteAccountRelation.*' | 'QuoteAccountRelation.Create' | 'QuoteAccountRelation.Delete' | 'QuoteAccountRelation.Update' | 'QuoteContactRelation.*' | 'QuoteContactRelation.Create' | 'QuoteContactRelation.Delete' | 'QuoteContactRelation.Update' | 'Task.*' | 'Task.Comment' | 'Task.Create' | 'Task.Delete' | 'Task.DocumentLinked' | 'Task.OwnerChanged' | 'Task.Update') | undefined, webhook_id?: string | undefined, id?: string | undefined}; export type CreateApiEntitiesWebhookEventsBatchModifyArgs = {'validation-level'?: number | undefined, 'rollback-method'?: (0 | 1) | undefined, body: Array}; export type CreateApiEntitiesWebhookEventsBatchModifyOptions = {baseUrl?: string | undefined, basicAuth?: {username: string, password: string} | undefined, fetch?: typeof fetch | undefined}; export const error = z.object({http_status: z.number().int(), code: z.number().int().optional(), name: z.string().optional(), message: z.string().optional(), success: z.boolean()}); export const createApiEntitiesWebhookEventsBatchModifyResponse = z.object({success: z.boolean().optional(), data: z.array(z.union([z.string(), error])).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 }; /** * WebhookEvents.batch_create_or_update * * POST /entities/WebhookEvents/batch-modify */ export const createApiEntitiesWebhookEventsBatchModify = async (args: CreateApiEntitiesWebhookEventsBatchModifyArgs, options?: CreateApiEntitiesWebhookEventsBatchModifyOptions) => { const {baseUrl = "https://us-east.api.coevera.com/api/v100/rest/spaces/your_space_id", fetch: fetchFn = fetch, basicAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args['validation-level'] != null) query.append("validation-level", String(args['validation-level'])) if (args['rollback-method'] != null) query.append("rollback-method", String(args['rollback-method'])) if (basicAuth !== undefined) headers.set('authorization', `Basic ${btoa(`${basicAuth.username}:${basicAuth.password}`)}`) const url = `${baseUrl.replace(/\/+$/, '')}/entities/WebhookEvents/batch-modify${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(createApiEntitiesWebhookEventsBatchModifyResponse, await res.json()) };