import { CoreApiClient } from "twenty-client-sdk/core"; import { defineLogicFunction, type RoutePayload } from "twenty-sdk/define"; import { Response } from "twenty-sdk/logic-function"; import { SYNC_DOCUMENT_ROUTE_UNIVERSAL_IDENTIFIER } from "src/constants/universal-identifiers"; import { jsonResponse } from "src/logic-functions/utils/json-response"; import { createSajnApi, SajnApiError } from "src/logic-functions/utils/sajn-api"; import { getSajnConnectionForRequest } from "src/logic-functions/utils/sajn-connection"; import { updateSajnDocumentRecord } from "src/logic-functions/utils/update-sajn-document-record"; type SyncDocumentInput = { recordId: string; }; const handler = async (event: RoutePayload): Promise => { const recordId = event.body?.recordId; if (!recordId) { return jsonResponse({ success: false, message: "recordId is required." }, 400); } try { const connection = await getSajnConnectionForRequest(event); const client = new CoreApiClient(); const { sajnDocuments } = await client.query({ sajnDocuments: { __args: { filter: { id: { eq: recordId } }, first: 1 }, edges: { node: { id: true, sajnDocumentId: true, }, }, }, }); const record = sajnDocuments?.edges?.[0]?.node; if (!record?.sajnDocumentId) { return jsonResponse( { success: false, message: "The sajn document record was not found." }, 404, ); } const document = await createSajnApi(connection.accessToken).getDocument( record.sajnDocumentId, ); await updateSajnDocumentRecord({ sajnDocumentId: document.id, status: document.status, name: document.name, }); return jsonResponse({ success: true, status: document.status, message: "Signing status refreshed.", }); } catch (error) { const status = error instanceof SajnApiError ? error.status : 500; const message = error instanceof Error ? error.message : "Could not refresh the document."; return jsonResponse({ success: false, message }, status); } }; export default defineLogicFunction({ universalIdentifier: SYNC_DOCUMENT_ROUTE_UNIVERSAL_IDENTIFIER, name: "sync-sajn-document", description: "Refreshes one sajn document's signing status in Twenty.", timeoutSeconds: 15, handler, httpRouteTriggerSettings: { path: "/sajn/documents/sync", httpMethod: "POST", isAuthRequired: true, }, });