/** * Google People API operation enum — single source of truth across the * API, Dashboard, and Message Broker. Used by: * - googleContactsAction entity / DTO (api): operation field + validation * - dashboard OperationSection * - broker hostwebhook types + tool schemas * * Two tiers because the action shipped V1 first (read + simple writes) * and V2 second (bulk + group management). Both ship in the same package * version; the api-side DTO gates which tier its accept-list includes. */ export declare const GOOGLE_CONTACTS_OPERATIONS_V1: readonly ["listContacts", "searchContacts", "getContact", "createContact", "updateContact", "deleteContact", "listContactGroups", "addContactToGroup", "removeContactFromGroup"]; export declare const GOOGLE_CONTACTS_OPERATIONS_V2: readonly ["batchCreateContacts", "batchUpdateContacts", "batchDeleteContacts", "createContactGroup", "updateContactGroup", "deleteContactGroup"]; export declare const GOOGLE_CONTACTS_OPERATIONS: readonly ["listContacts", "searchContacts", "getContact", "createContact", "updateContact", "deleteContact", "listContactGroups", "addContactToGroup", "removeContactFromGroup", "batchCreateContacts", "batchUpdateContacts", "batchDeleteContacts", "createContactGroup", "updateContactGroup", "deleteContactGroup"]; export type GoogleContactsOperation = (typeof GOOGLE_CONTACTS_OPERATIONS)[number]; export declare function isGoogleContactsOperation(value: unknown): value is GoogleContactsOperation; /** * Per-operation form schema, same idea as SLACK_OPERATION_SPECS and * DISCORD_OPERATION_SPECS: the dashboard detail page renders it with one loop * instead of a branch per operation. * * Unlike Slack's, this one drives the **form only**. The AI-toolkit / MCP tool * schema for this node lives apart (dashboard * `google-contacts-operations-schemas.ts`, api `mcp-servers/toolkit-specs.ts`), * which is why `description` is optional here — a handful of fields have never * shown help text and inventing copy for them is not this change's job. */ export interface GoogleContactsParamSpec { /** Field key — also the property name on operationConfig / payload. */ name: string; /** UI label, shown as the section title. Carries any "(optional)" suffix. */ label: string; /** * Param type for form rendering. * * `string`, `text`, `number` and `boolean` mean the same as in * SlackParamSpec. The rest are this node's own: * - `csvList` — stored as a string **array**, edited as comma-separated * text. Losing the array on save breaks the node at run time, so the * renderer must join on the way in and split on the way out. * - `json` — stored parsed when the text is valid JSON, and as the raw * string when it is not, so a half-typed array survives a keystroke. * - `plain` — a bare input, no templating. Same control Discord calls * `emoji`, a name inherited from Slack that fits neither field here. * Unifying the two is a coordinated rename, so for now both exist. */ type: 'string' | 'text' | 'plain' | 'csvList' | 'json' | 'number' | 'boolean'; /** Required by the People API. Metadata — the form does not gate on it. */ required?: boolean; /** Help text under the input. Absent where the form has never shown any. */ description?: string; /** Hint shown inside the input. */ placeholder?: string; /** Value to show when the stored one is undefined. */ default?: string | number | boolean; /** `number` only — and enforced on change, not just by the input. */ min?: number; max?: number; /** `text` / `json` only — height of the textarea. */ rows?: number; /** `boolean` only — the line beside the switch. */ switchLabel?: string; } /** Group headings of the operation dropdown, in display order. */ export declare const GOOGLE_CONTACTS_OPERATION_GROUPS: readonly ["Read", "Write", "Groups", "Bulk", "Group management"]; export type GoogleContactsOperationGroup = (typeof GOOGLE_CONTACTS_OPERATION_GROUPS)[number]; export interface GoogleContactsOperationSpec { /** UI label for the operation picker. */ label: string; /** Line under the picker, and the picker's own description. */ description: string; /** googleapis call the operation maps to (people v1). */ apiMethod: string; /** Which half of the OAuth scope the operation needs. */ scope: 'read' | 'write'; /** Group heading it sits under in the dropdown. */ group: GoogleContactsOperationGroup; /** Parameter schema. Order matters for form rendering. */ params: GoogleContactsParamSpec[]; } /** * personFields the read operations request when nobody overrides them. Lived in * the dashboard page until this schema landed; it belongs next to the field * that defaults to it. */ export declare const GOOGLE_CONTACTS_DEFAULT_PERSON_FIELDS = "names,emailAddresses,phoneNumbers,addresses,organizations,memberships"; /** * Key order below is the dropdown order **within each group** — most-common * operation first, which is why Read starts at searchContacts and not at the * enum's listContacts. The dashboard groups these entries by `group` and keeps * this order, so moving a key moves the dropdown. */ export declare const GOOGLE_CONTACTS_OPERATION_SPECS: Record;