import { CoreApiClient } from 'twenty-client-sdk/core'; import { defineLogicFunction } from 'twenty-sdk/define'; import { GRANOLA_CONNECTION_LOGIC_FUNCTIONS } from 'src/constants/universal-identifiers'; import { deactivateConnection } from 'src/logic-functions/utils/granola-connection-store'; import { resolveWorkspaceMember } from 'src/logic-functions/utils/resolve-workspace-member'; type DisconnectResult = { success: boolean; message?: string }; const handler = async (): Promise => { const client = new CoreApiClient(); const member = await resolveWorkspaceMember(client); if (!member) { return { success: false, message: 'Could not identify your account.' }; } await deactivateConnection(member.workspaceMemberId); return { success: true, message: 'Granola disconnected.' }; }; export default defineLogicFunction({ universalIdentifier: GRANOLA_CONNECTION_LOGIC_FUNCTIONS.disconnect.universalIdentifier, name: 'granola-disconnect', description: "Clears and deactivates the invoking member's Granola connection so their meetings stop syncing.", timeoutSeconds: 30, handler, httpRouteTriggerSettings: { path: GRANOLA_CONNECTION_LOGIC_FUNCTIONS.disconnect.path, httpMethod: 'POST', isAuthRequired: true, }, });