import {z} from 'zod' export type PropertyValue = {dataSensitivity: 'high' | 'none' | 'standard', isEncrypted: boolean, isLargeValue: boolean, name: string, persistenceTimestamp: number, requestId: string, selectedByUser: boolean, selectedByUserTimestamp: number, source: 'ACADEMY' | 'ACCEPTANCE_TEST' | 'ACTIVITY_AUTO_ASSOCIATE' | 'ACTIVITY_LOG_REVERT' | 'ADS' | 'AI_GROUP' | 'ANALYTICS' | 'API' | 'APPROVALS' | 'ASSISTS' | 'ASSOCIATIONS' | 'AUTO_ASSOCIATE_BY_DOMAIN' | 'AUTOMATION_JOURNEY' | 'AUTOMATION_PLATFORM' | 'AVATARS_SERVICE' | 'BATCH_UPDATE' | 'BCC_TO_CRM' | 'BEHAVIORAL_EVENTS' | 'BET_ASSIGNMENT' | 'BET_CRM_CONNECTOR' | 'BIDEN' | 'BILLING' | 'BOT' | 'BREEZE_AGENT' | 'CALCULATED' | 'CENTRAL_EXCHANGE_RATES' | 'CHATSPOT' | 'CLONE_OBJECTS' | 'COMMUNICATOR' | 'COMPANIES' | 'COMPANY_FAMILIES' | 'COMPANY_INSIGHTS' | 'CONNECTED_ACCOUNT' | 'CONTACTS' | 'CONTACTS_WEB' | 'CONTENT_MEMBERSHIP' | 'CONVERSATIONAL_ENRICHMENT' | 'CONVERSATIONS' | 'CRM_PROCESSES_PLATFORM' | 'CRM_UI' | 'CRM_UI_BULK_ACTION' | 'CUSTOMER_AGENT' | 'DATA_ENRICHMENT' | 'DATA_QUALITY' | 'DATASET' | 'DEALS' | 'DEFAULT' | 'DELETE_OBJECTS' | 'DI_WRITE_TO_CRM' | 'EMAIL' | 'EMAIL_INBOX_IMPORT' | 'EMAIL_INTEGRATION' | 'ENGAGEMENTS' | 'EXTENSION' | 'FILE_MANAGER' | 'FLYWHEEL_PRODUCT_DATA_SYNC' | 'FORECASTING' | 'FORM' | 'FORWARD_TO_CRM' | 'GMAIL_INTEGRATION' | 'GOALS' | 'HEISENBERG' | 'HELP_DESK' | 'HELP_DESK_AI' | 'IMPORT' | 'INTEGRATION' | 'INTEGRATIONS_PLATFORM' | 'INTEGRATIONS_SYNC' | 'INTENT' | 'INTERNAL_PROCESSING' | 'LEADIN' | 'LEGAL_BASIS_REMEDIATION' | 'MARKET_SOURCING' | 'MARKETPLACE' | 'MARKETS' | 'MEETINGS' | 'MERGE_COMPANIES' | 'MERGE_CONTACTS' | 'MERGE_OBJECTS' | 'MERGE_REVERT_OBJECTS' | 'MICROAPPS' | 'MIGRATION' | 'MOBILE_ANDROID' | 'MOBILE_IOS' | 'PAYMENTS' | 'PIPELINE_SETTINGS' | 'PLAYBOOKS' | 'PORTAL_OBJECT_SYNC' | 'PORTAL_USER_ASSOCIATOR' | 'PRESENTATIONS' | 'PRIMARY_AUTOMATION' | 'PROPERTY_DEFAULT_VALUE' | 'PROPERTY_RESTORE' | 'PROPERTY_SETTINGS' | 'PROSPECTING_AGENT' | 'QUOTAS' | 'QUOTES' | 'RECYCLING_BIN' | 'RESTORE_OBJECTS' | 'REVENUE_PLATFORM' | 'SALES' | 'SALES_MESSAGES' | 'SALESFORCE' | 'SEQUENCES' | 'SETTINGS' | 'SIDEKICK' | 'SIGNALS' | 'SLACK_INTEGRATION' | 'SMART_DATA_CAPTURE' | 'SOCIAL' | 'SUCCESS' | 'TALLY' | 'TASK' | 'UNKNOWN' | 'WAL_INCREMENTAL' | 'WORK_UI' | 'WORKFLOW_CONTACT_DELETE_ACTION' | 'WORKFLOWS', sourceId: string, sourceLabel: string, sourceMetadata: string, sourceUpstreamDeployable: string, sourceVid: Array, timestamp: number, unit: string, updatedByUserId: number, useTimestampAsPersistenceTimestamp: boolean, value: string}; export type MarketingMarketingEventsMarketingEventPublicUpdateRequestV2 = {customProperties: Array, endDateTime?: string | undefined, eventCancelled?: boolean | undefined, eventDescription?: string | undefined, eventName?: string | undefined, eventOrganizer?: string | undefined, eventType?: string | undefined, eventUrl?: string | undefined, startDateTime?: string | undefined}; export type PatchApiMarketingMarketingEvents202603ObjectIdArgs = {objectId: string, body: MarketingMarketingEventsMarketingEventPublicUpdateRequestV2}; export type PatchApiMarketingMarketingEvents202603ObjectIdOptions = {baseUrl?: string | undefined, privateApps?: string | undefined, fetch?: typeof fetch | undefined}; export const marketingMarketingEventsAppInfo = z.object({id: z.string(), name: z.string()}); export const marketingMarketingEventsCrmPropertyWrapper = z.object({name: z.string(), value: z.string()}); export const marketingMarketingEventsMarketingEventPublicDefaultResponseV2 = z.object({appInfo: marketingMarketingEventsAppInfo.optional(), createdAt: z.string(), customProperties: z.array(marketingMarketingEventsCrmPropertyWrapper), endDateTime: z.string().optional(), eventCancelled: z.boolean().optional(), eventCompleted: z.boolean().optional(), eventDescription: z.string().optional(), eventName: z.string(), eventOrganizer: z.string().optional(), eventType: z.string().optional(), eventUrl: z.string().optional(), objectId: z.string(), startDateTime: z.string().optional(), updatedAt: z.string()}); 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 }; /** * Update Marketing Event by objectId * * PATCH /marketing/marketing-events/2026-03/{objectId} * * Also accepts auth: developer_hapikey */ export const patchApiMarketingMarketingEvents202603ObjectId = async (args: PatchApiMarketingMarketingEvents202603ObjectIdArgs, options?: PatchApiMarketingMarketingEvents202603ObjectIdOptions) => { const {baseUrl = "https://api.hubapi.com", fetch: fetchFn = fetch, privateApps} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (privateApps !== undefined) headers.set('authorization', `Bearer ${privateApps}`) const url = `${baseUrl.replace(/\/+$/, '')}/marketing/marketing-events/2026-03/${encodeURIComponent(String(args.objectId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", 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(marketingMarketingEventsMarketingEventPublicDefaultResponseV2, await res.json()) };