UNPKG

n8n

Version:

n8n Workflow Automation Tool

90 lines 3.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isIntegrationActionSuspendPayload = isIntegrationActionSuspendPayload; exports.buildSuspendCardPayload = buildSuspendCardPayload; const is_record_1 = require("@n8n/utils/is-record"); const APPROVAL_INPUT_MAX_LENGTH = 1500; function isIntegrationActionSuspendPayload(value) { return (typeof value === 'object' && value !== null && 'type' in value && value.type === 'integration_action'); } function isApprovalSuspendPayload(value) { return ((0, is_record_1.isRecord)(value) && value.type === 'approval' && typeof value.toolName === 'string' && value.toolName.length > 0); } function isSuspendCardComponent(value) { return (0, is_record_1.isRecord)(value) && typeof value.type === 'string' && value.type.length > 0; } function isSuspendCardPayload(value) { if (!(0, is_record_1.isRecord)(value) || !Array.isArray(value.components) || value.components.length === 0) { return false; } return value.components.every(isSuspendCardComponent); } function truncateApprovalInput(value) { if (value.length <= APPROVAL_INPUT_MAX_LENGTH) return value; return `${value.slice(0, APPROVAL_INPUT_MAX_LENGTH)}...`; } function stringifyApprovalInput(value) { if (value === undefined) return undefined; if (typeof value === 'string') { return truncateApprovalInput(value); } try { const serialized = JSON.stringify(value, null, 2); return truncateApprovalInput(serialized ?? String(value)); } catch { return truncateApprovalInput(String(value)); } } function getApprovalToolLabel(payload) { return typeof payload.displayName === 'string' && payload.displayName.length > 0 ? payload.displayName : payload.toolName; } function buildApprovalCardPayload(payload) { const toolLabel = getApprovalToolLabel(payload); const fields = [{ label: 'Tool', value: toolLabel }]; const input = stringifyApprovalInput(payload.args); if (input) { fields.push({ label: 'Input', value: input }); } return { title: 'Approval required', components: [ { type: 'section', text: `The agent wants to run this tool: ${toolLabel}` }, { type: 'fields', fields }, { type: 'button', label: 'Approve', value: 'true', style: 'primary' }, { type: 'button', label: 'Deny', value: 'false', style: 'danger' }, ], }; } function buildSuspendCardPayload(payload) { if (isIntegrationActionSuspendPayload(payload)) { return undefined; } if (isApprovalSuspendPayload(payload)) { return buildApprovalCardPayload(payload); } if (isSuspendCardPayload(payload)) { return payload; } const message = (0, is_record_1.isRecord)(payload) && 'message' in payload ? String(payload.message) : 'Action required — approve or deny?'; return { title: message, components: [ { type: 'button', label: 'Approve', value: 'true', style: 'primary' }, { type: 'button', label: 'Deny', value: 'false', style: 'danger' }, ], }; } //# sourceMappingURL=agent-chat-suspension-cards.js.map