{ "$schema": "./schema.txt", "version": "1.0.0", "generatedAt": "2026-02-28T18:21:06.606Z", "nodeCount": 39, "nodes": { "credentials": { "displayName": "Credentials", "description": "Authentication configuration for Azure, APIs, etc.", "aiGuidance": "", "category": "credentials", "inputs": [], "outputs": [ { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": false } ], "config": { "authType": { "type": "select", "label": "Authentication Type", "required": true, "default": "interactive" }, "clearCache": { "type": "custom", "label": "Cached Credentials", "required": false }, "clientId": { "type": "text", "label": "Client ID", "required": false, "helpText": "Azure AD Application (client) ID. For interactive auth, provide this to override default and use your own app registration." }, "tenantId": { "type": "text", "label": "Tenant ID", "required": false, "helpText": "Azure AD Directory (tenant) ID or " }, "clientSecret": { "type": "password", "label": "Client Secret", "required": true }, "apiKey": { "type": "password", "label": "API Key", "required": true }, "headerName": { "type": "text", "label": "Header Name", "required": false, "helpText": "HTTP header name (e.g., Authorization, api-key, x-api-key)", "default": "Authorization" }, "headerPrefix": { "type": "text", "label": "Header Prefix", "required": false, "helpText": "Prefix before the key (e.g., ", "default": "Bearer " } } }, "storage:config": { "displayName": "Storage Config", "description": "Azure Storage account configuration", "aiGuidance": "", "category": "storage", "inputs": [], "outputs": [ { "id": "config-out", "handleType": "config", "dataType": "config", "label": "Config", "required": false } ], "config": { "accountName": { "type": "text", "label": "Storage Account Name", "required": true, "helpText": "Azure Storage account name (without .blob.core.windows.net)" } } }, "storage:read": { "displayName": "Storage Read", "description": "Read blob from Azure Storage", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.STORAGE_CONFIG", "handleType": "config", "dataType": "config", "label": "Storage Config", "required": true }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "container-name", "handleType": "data", "dataType": "string", "label": "Container Name", "required": false }, { "id": "blob-name", "handleType": "data", "dataType": "string", "label": "Blob Name", "required": false }, { "id": "proxy", "handleType": "data", "dataType": "config", "label": "CORS Proxy", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Blob Data", "required": false } ], "config": { "containerName": { "type": "text", "label": "Container Name", "required": true, "helpText": "Can be overridden by input handle" }, "blobName": { "type": "text", "label": "Blob Name", "required": true, "helpText": "Can be overridden by input handle" }, "scope": { "type": "text", "label": "OAuth Scope", "required": false, "helpText": "OAuth scope for Azure Storage", "default": "https://storage.azure.com/.default" } } }, "storage:write": { "displayName": "Storage Write", "description": "Write blob to Azure Storage", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.STORAGE_CONFIG", "handleType": "config", "dataType": "config", "label": "Storage Config", "required": true }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "container-name", "handleType": "data", "dataType": "string", "label": "Container Name", "required": false }, { "id": "blob-name", "handleType": "data", "dataType": "string", "label": "Blob Name", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "any", "label": "Data", "required": true }, { "id": "proxy", "handleType": "data", "dataType": "config", "label": "CORS Proxy", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Result", "required": false } ], "config": { "containerName": { "type": "text", "label": "Container Name", "required": true, "helpText": "Can be overridden by input handle" }, "blobName": { "type": "text", "label": "Blob Name", "required": true, "helpText": "Can be overridden by input handle" }, "contentType": { "type": "text", "label": "Content Type", "required": false, "helpText": "MIME type of the blob content", "default": "application/json" }, "scope": { "type": "text", "label": "OAuth Scope", "required": false, "helpText": "OAuth scope for Azure Storage", "default": "https://storage.azure.com/.default" } } }, "sheet:read": { "displayName": "Sheet Read", "description": "Read data from Excel sheet range", "aiGuidance": "", "category": "excel", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "sheet-name", "handleType": "data", "dataType": "string", "label": "Sheet Name", "required": false }, { "id": "range", "handleType": "data", "dataType": "string", "label": "Range", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Data", "required": false } ], "config": { "sheetName": { "type": "text", "label": "Sheet Name", "required": true, "helpText": "Can be overridden by input handle" }, "readUsedRange": { "type": "boolean", "label": "Read used range", "required": false, "helpText": "Read all populated cells in the sheet automatically, ignoring the range below", "default": false }, "range": { "type": "text", "label": "Cell Range", "required": true, "helpText": "Can be overridden by input handle" }, "outputAsCsv": { "type": "boolean", "label": "Output as CSV", "required": false, "helpText": "If checked, output as CSV string instead of JSON array", "default": false }, "detectDates": { "type": "boolean", "label": "Detect Dates", "required": false, "helpText": "Convert Excel date serial numbers to ISO date strings (YYYY-MM-DD)", "default": true } } }, "sheet:write": { "displayName": "Sheet Write", "description": "Write data to Excel sheet", "aiGuidance": "", "category": "excel", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "any", "label": "Data", "required": true }, { "id": "sheet-name", "handleType": "data", "dataType": "string", "label": "Sheet Name", "required": false }, { "id": "start-cell", "handleType": "data", "dataType": "string", "label": "Start Cell", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Result", "required": false } ], "config": { "sheetName": { "type": "text", "label": "Sheet Name", "required": true, "helpText": "Can be overridden by input handle" }, "startCell": { "type": "text", "label": "Cell or Range", "required": true, "helpText": "Single cell (A1) or range (A1:D8). Range creates merged, formatted text area." }, "spreadOutput": { "type": "boolean", "label": "Spread Across Cells", "required": false, "helpText": "When checked, arrays/JSON spread across multiple cells. When unchecked, writes entire value to single cell.", "default": true }, "expectCsv": { "type": "boolean", "label": "Input is CSV", "required": false, "helpText": "If checked, parse input as CSV and spread across cells", "default": false } } }, "table:read": { "displayName": "Table Read", "description": "Read data from Excel table", "aiGuidance": "", "category": "excel", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "table-name", "handleType": "data", "dataType": "string", "label": "Table Name", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Data", "required": false } ], "config": { "tableName": { "type": "text", "label": "Table Name", "required": true, "helpText": "Excel table name. Can be overridden by input handle." }, "includeHeaders": { "type": "boolean", "label": "Include Headers", "required": false, "helpText": "If unchecked, returns array of objects with column names as keys", "default": false }, "detectDates": { "type": "boolean", "label": "Detect Dates", "required": false, "helpText": "Convert Excel date serial numbers to ISO date strings (YYYY-MM-DD)", "default": true } } }, "table:write": { "displayName": "Table Write", "description": "Write data to Excel table", "aiGuidance": "", "category": "excel", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "json", "label": "Data", "required": true }, { "id": "table-name", "handleType": "data", "dataType": "string", "label": "Table Name", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Result", "required": false } ], "config": { "tableName": { "type": "text", "label": "Table Name", "required": true, "helpText": "Excel table name. Can be overridden by input handle." }, "writeMode": { "type": "select", "label": "Write Mode", "required": true, "default": "overwrite" }, "createIfMissing": { "type": "boolean", "label": "Create if Missing", "required": false, "helpText": "Create a new table if it does not exist", "default": false }, "sheetName": { "type": "text", "label": "Sheet Name", "required": false, "helpText": "Sheet for new table (used when Create if Missing is enabled)", "default": "Sheet1" }, "startCell": { "type": "text", "label": "Start Cell", "required": false, "helpText": "Cell position for new table (used when Create if Missing is enabled)", "default": "A1" } } }, "table:clear": { "displayName": "Table Clear", "description": "Clear all data rows from an Excel table", "aiGuidance": "", "category": "excel", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "table-name", "handleType": "data", "dataType": "string", "label": "Table Name", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Result", "required": false } ], "config": { "tableName": { "type": "text", "label": "Table Name", "required": true, "helpText": "Excel table name. If table does not exist, skips gracefully." } } }, "excel:insert-image": { "displayName": "Insert Image", "description": "Insert base64 image into Excel", "aiGuidance": "", "category": "excel", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "string", "label": "Base64 Image", "required": true }, { "id": "sheet-name", "handleType": "data", "dataType": "string", "label": "Sheet Name", "required": false }, { "id": "cell", "handleType": "data", "dataType": "string", "label": "Cell", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Result", "required": false } ], "config": { "sheetName": { "type": "text", "label": "Sheet Name", "required": true, "helpText": "Target sheet. Can be overridden by input handle." }, "cell": { "type": "text", "label": "Cell", "required": true, "helpText": "Cell to anchor the image. Can be overridden by input handle." }, "imageName": { "type": "text", "label": "Image Name", "required": false, "helpText": "Optional name for the image. If an image with this name exists, it will be replaced while keeping its position and size." }, "width": { "type": "number", "label": "Width (px)", "required": false, "default": 200 }, "height": { "type": "number", "label": "Height (px)", "required": false, "default": 200 } } }, "transform:python": { "displayName": "Python Transform", "description": "Transform data using Python (Pyodide)", "aiGuidance": "Inputs are named input_0, input_1 etc. All inputs are strings — parse them as needed (e.g., json.loads(), csv). WASM pyodide, handles external libraries. Keep code clean and dry. The execution engine handles errors, so fail fast. The last statement is what the function outputs. For instance `res = input_0 + input_1 \\n res`. IMPORTANT: always stringify the result — never return an object or dataframe directly (e.g., use json.dumps() or df.to_csv()).", "category": "transform", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "input-0", "handleType": "data", "dataType": "any", "label": "Input 0", "required": false, "dynamic": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "any", "label": "Result", "required": false } ], "config": { "packages": { "type": "custom", "label": "Python Packages", "required": false, "helpText": "Comma-separated list of packages to install (e.g., pandas, numpy)" }, "code": { "type": "custom", "label": "Python Code", "required": true, "helpText": "Access inputs via input_0, input_1, etc. Return result with result object as last statement", "default": "# Python code here\\noutput = input_0 + - transformed\\noutput" }, "enableCache": { "type": "boolean", "label": "Cache Result", "required": false, "helpText": "Return cached result if executed again within TTL. Cache persists until page refresh.", "default": false }, "cacheTTL": { "type": "number", "label": "Cache Duration (seconds)", "required": false, "helpText": "How long to cache results (0 = cache until page refresh)", "default": 60 } } }, "web:request": { "displayName": "Web Request", "description": "Make HTTP requests to APIs", "aiGuidance": "", "category": "web", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": false }, { "id": "proxy", "handleType": "data", "dataType": "config", "label": "CORS Proxy", "required": false }, { "id": "url", "handleType": "data", "dataType": "string", "label": "URL Override", "required": false }, { "id": "headers", "handleType": "data", "dataType": "json", "label": "Headers Override", "required": false }, { "id": "body", "handleType": "data", "dataType": "any", "label": "Request Body", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "any", "label": "Response", "required": false } ], "config": { "url": { "type": "text", "label": "URL", "required": true }, "method": { "type": "select", "label": "Method", "required": true, "default": "GET" }, "authentication": { "type": "select", "label": "Authentication", "required": false, "default": "none" }, "scope": { "type": "text", "label": "OAuth Scope", "required": false, "helpText": "Required for OAuth authentication" }, "headers": { "type": "textarea", "label": "Default Headers (JSON)", "required": false }, "body": { "type": "textarea", "label": "Request Body", "required": false }, "timeout": { "type": "number", "label": "Timeout (ms)", "required": false, "default": 30000 }, "enableCache": { "type": "boolean", "label": "Cache Response", "required": false, "helpText": "Return cached response if called again within TTL. Cache persists until page refresh.", "default": false }, "cacheTTL": { "type": "number", "label": "Cache Duration (seconds)", "required": false, "helpText": "How long to cache responses (0 = cache until page refresh)", "default": 60 } } }, "ai:evaluate": { "displayName": "AI Evaluate", "description": "Evaluate data using Azure OpenAI (OAuth)", "aiGuidance": "", "category": "web", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "ordered-0", "handleType": "data", "dataType": "any", "label": "Input 1", "required": false, "dynamic": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Response", "required": false }, { "id": "processed-prompt", "handleType": "data", "dataType": "string", "label": "Processed Prompt", "required": false } ], "config": { "resourceName": { "type": "text", "label": "Azure OpenAI Resource", "required": true, "helpText": "Resource name (e.g., " }, "deploymentName": { "type": "select", "label": "Model Deployment", "required": true, "default": "gpt-4.1" }, "customDeployment": { "type": "text", "label": "Custom Deployment Name", "required": false, "helpText": "Enter your custom deployment name" }, "systemPrompt": { "type": "textarea", "label": "System Prompt", "required": false }, "prompt": { "type": "textarea", "label": "User Prompt", "required": true }, "temperature": { "type": "number", "label": "Temperature", "required": false, "helpText": "0 = deterministic, 2 = creative. Not supported by reasoning models (gpt-5.1-chat, etc.)", "default": 0.7 }, "maxTokens": { "type": "number", "label": "Max Tokens", "required": false, "default": 4000 } } }, "web:cors-proxy": { "displayName": "CORS Proxy", "description": "Configure CORS proxy for cross-origin requests", "aiGuidance": "", "category": "web", "inputs": [], "outputs": [ { "id": "proxy-out", "handleType": "data", "dataType": "config", "label": "Proxy Config", "required": false } ], "config": { "provider": { "type": "select", "label": "Proxy Provider", "required": true, "default": "cloudflare" }, "localPort": { "type": "number", "label": "Local Port", "required": false, "helpText": "Port where the local Python proxy is running", "default": 9876 }, "customUrl": { "type": "text", "label": "Custom Proxy URL", "required": true, "helpText": "Full URL to your CORS proxy (include trailing slash)" } } }, "flow:branch": { "displayName": "Branch", "description": "Conditional execution based on input value", "aiGuidance": "", "category": "flow", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.CONDITION", "handleType": "data", "dataType": "any", "label": "Value to Check", "required": true } ], "outputs": [ { "id": "HANDLE_TYPES.EXECUTION_TRUE", "handleType": "execution-out", "dataType": "any", "label": "True", "required": false }, { "id": "HANDLE_TYPES.EXECUTION_FALSE", "handleType": "execution-out", "dataType": "any", "label": "False", "required": false } ], "config": { "trueLabel": { "type": "text", "label": "True Path Label", "required": false, "helpText": "Display label for the true path", "default": "True" }, "falseLabel": { "type": "text", "label": "False Path Label", "required": false, "helpText": "Display label for the false path", "default": "False" } } }, "flow:for-each": { "displayName": "For-Each", "description": "Loop over array items", "aiGuidance": "", "category": "flow", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.ARRAY_IN", "handleType": "data", "dataType": "array", "label": "Array", "required": true } ], "outputs": [ { "id": "HANDLE_TYPES.LOOP_BODY", "handleType": "execution-out", "dataType": "any", "label": "Loop Body", "required": false }, { "id": "HANDLE_TYPES.LOOP_COMPLETE", "handleType": "execution-out", "dataType": "any", "label": "Complete", "required": false }, { "id": "", "handleType": "data", "dataType": "any", "label": "Current Item", "required": false }, { "id": "", "handleType": "data", "dataType": "number", "label": "Current Index", "required": false } ], "config": {} }, "flow:manual-intervention": { "displayName": "Manual Intervention", "description": "Pause execution for manual review and editing of input values", "aiGuidance": "", "category": "flow", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "input-0", "handleType": "data", "dataType": "any", "label": "Input 0", "required": false, "dynamic": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "unknown", "handleType": "data", "dataType": "any", "label": "Unknown", "required": false } ], "config": {} }, "flow:stop-pipeline": { "displayName": "Stop Pipeline", "description": "Immediately halt pipeline execution", "aiGuidance": "", "category": "flow", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false } ], "outputs": [], "config": { "message": { "type": "text", "label": "Stop Message", "required": false, "helpText": "Optional message explaining why execution stopped" } } }, "data:to-array": { "displayName": "To Array", "description": "Convert JSON or CSV to array", "aiGuidance": "", "category": "data", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "any", "label": "Input", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "array", "label": "Array", "required": false } ], "config": { "inputFormat": { "type": "select", "label": "Input Format", "required": true, "default": "json" }, "csvHasHeaders": { "type": "boolean", "label": "CSV Has Headers", "required": false, "helpText": "First row contains column names", "default": true } } }, "data:to-csv": { "displayName": "To CSV", "description": "Convert array to CSV string", "aiGuidance": "", "category": "data", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "array", "label": "Array", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "csv", "label": "CSV", "required": false } ], "config": { "includeHeaders": { "type": "boolean", "label": "Include Headers", "required": false, "helpText": "Add column names as first row", "default": true }, "delimiter": { "type": "text", "label": "Delimiter", "required": false, "helpText": "Column separator character", "default": "" } } }, "data:static": { "displayName": "Static Data", "description": "Output static text or data", "aiGuidance": "", "category": "data", "inputs": [], "outputs": [ { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Data", "required": false } ], "config": { "data": { "type": "custom", "label": "Static Data", "required": false, "helpText": "Static text that will be output as-is. Supports JSON, CSV, or any text format." } } }, "data:project": { "displayName": "Project Fields", "description": "Select and rename fields from objects", "aiGuidance": "", "category": "data", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "json", "label": "Data", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Result", "required": false } ], "config": { "fieldsToInclude": { "type": "text", "label": "Fields to Include", "required": false, "helpText": "Comma-separated field names. Dot notation for nested (e.g. from.emailAddress.address)" }, "renames": { "type": "textarea", "label": "Field Renaming (optional)", "required": false }, "extractRawValues": { "type": "boolean", "label": "Extract Raw Values", "required": false, "helpText": "Strip field names and return just values", "default": false } } }, "data:flatten": { "displayName": "Flatten Objects", "description": "Flatten nested objects to single level", "aiGuidance": "", "category": "data", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "json", "label": "Data", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Result", "required": false } ], "config": { "maxDepth": { "type": "number", "label": "Max Depth", "required": false, "helpText": "Maximum nesting depth to flatten", "default": 3 }, "separator": { "type": "select", "label": "Key Separator", "required": false, "default": "." }, "arraysStrategy": { "type": "select", "label": "Arrays Handling", "required": false, "default": "keep" } } }, "data:spread": { "displayName": "Spread Array", "description": "Expand inner arrays (flatMap/unnest)", "aiGuidance": "", "category": "data", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "array", "label": "Data", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "array", "label": "Result", "required": false } ], "config": { "pathToArray": { "type": "text", "label": "Path to Inner Array", "required": true, "helpText": "Dot path to the nested array (e.g., " }, "includeParentFields": { "type": "boolean", "label": "Include Parent Fields", "required": false, "helpText": "Carry parent context fields to each spread item", "default": false }, "parentFields": { "type": "text", "label": "Parent Fields to Include", "required": false, "helpText": "Comma-separated parent fields to carry to each spread item" }, "flattenChildFields": { "type": "boolean", "label": "Flatten Child Fields", "required": false, "helpText": "Merge child properties at root level (vs nested object)", "default": true } } }, "keyvault:secret": { "displayName": "Key Vault Secret", "description": "Retrieve secret from Azure Key Vault", "aiGuidance": "", "category": "credentials", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "proxy", "handleType": "data", "dataType": "config", "label": "CORS Proxy", "required": false }, { "id": "secret-name", "handleType": "data", "dataType": "string", "label": "Secret Name", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "Secret Value", "required": false } ], "config": { "vaultName": { "type": "text", "label": "Key Vault Name", "required": true, "helpText": "Without .vault.azure.net" }, "secretName": { "type": "text", "label": "Secret Name", "required": true, "helpText": "Can be overridden by input handle" }, "version": { "type": "text", "label": "Secret Version", "required": false, "helpText": "Optional. Defaults to latest version." }, "corsProxyUrl": { "type": "text", "label": "CORS Proxy URL", "required": false, "helpText": "Fallback if no CORS Proxy node connected" } } }, "teams:message": { "displayName": "Teams Message", "description": "Send message to Microsoft Teams", "aiGuidance": "", "category": "communication", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "message", "handleType": "data", "dataType": "string", "label": "Message Content", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Response", "required": false } ], "config": { "mode": { "type": "select", "label": "Message Mode", "required": true, "default": "channel" }, "teamId": { "type": "text", "label": "Team ID", "required": false, "helpText": "Microsoft 365 Group ID (GUID)" }, "channelId": { "type": "text", "label": "Channel ID", "required": false, "helpText": "Channel ID (format: 19:xxx@thread.tacv2)" }, "userId": { "type": "text", "label": "User ID", "required": false, "helpText": "Entra Object ID (GUID) or UPN (email)" }, "contentType": { "type": "select", "label": "Content Type", "required": false, "default": "text" } } }, "email:send": { "displayName": "Send Email", "description": "Send email via Microsoft Graph", "aiGuidance": "", "category": "communication", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "to", "handleType": "data", "dataType": "string", "label": "To", "required": false }, { "id": "subject", "handleType": "data", "dataType": "string", "label": "Subject", "required": false }, { "id": "body", "handleType": "data", "dataType": "string", "label": "Body", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Result", "required": false } ], "config": { "to": { "type": "text", "label": "To", "required": true, "helpText": "Recipient email(s), comma-separated. Can be overridden by input." }, "cc": { "type": "text", "label": "CC", "required": false, "helpText": "CC recipients, comma-separated" }, "bcc": { "type": "text", "label": "BCC", "required": false, "helpText": "BCC recipients, comma-separated" }, "subject": { "type": "text", "label": "Subject", "required": true, "helpText": "Can be overridden by input" }, "body": { "type": "textarea", "label": "Body", "required": true, "helpText": "Can be overridden by input" }, "contentType": { "type": "select", "label": "Content Type", "required": false, "default": "text" }, "saveToSentItems": { "type": "boolean", "label": "Save to Sent Items", "required": false, "default": true } } }, "mail:read": { "displayName": "Read Email", "description": "Read emails from mailbox via Microsoft Graph", "aiGuidance": "", "category": "communication", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Messages", "required": false } ], "config": { "folder": { "type": "select", "label": "Folder", "required": false, "default": "inbox" }, "maxMessages": { "type": "number", "label": "Max Messages", "required": false, "helpText": "Maximum number of messages to retrieve", "default": 50 }, "onlyUnread": { "type": "boolean", "label": "Only Unread", "required": false, "helpText": "Filter to only unread messages", "default": false }, "subjectContains": { "type": "text", "label": "Subject Contains", "required": false, "helpText": "Filter by subject text (optional)" }, "fromAddress": { "type": "text", "label": "From Address", "required": false, "helpText": "Filter by exact sender email address" }, "hasAttachments": { "type": "boolean", "label": "Has Attachments", "required": false, "helpText": "Filter to only messages with attachments", "default": false }, "receivedSince": { "type": "text", "label": "Received Since", "required": false, "helpText": "ISO date or shorthand (7d, 30d) - optional" }, "selectFields": { "type": "text", "label": "Select Fields", "required": false, "helpText": "Comma-separated fields for $select (advanced)" }, "markAsRead": { "type": "boolean", "label": "Mark as Read", "required": false, "helpText": "Mark retrieved messages as read", "default": false }, "includeBody": { "type": "boolean", "label": "Include Full Body", "required": false, "helpText": "Include full message body instead of preview (HTML or text)", "default": false }, "includeAttachments": { "type": "boolean", "label": "Include Attachments", "required": false, "helpText": "Fetch attachment content for each message (base64). Adds latency.", "default": false } } }, "sharepoint:list-read": { "displayName": "SharePoint List Read", "description": "Read items from SharePoint list", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "site-url", "handleType": "data", "dataType": "string", "label": "Site URL", "required": false }, { "id": "filter", "handleType": "data", "dataType": "string", "label": "Filter", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Items", "required": false } ], "config": { "siteUrl": { "type": "text", "label": "Site URL", "required": false, "helpText": "SharePoint site URL. Can be overridden by input." }, "listName": { "type": "text", "label": "List Name", "required": true }, "columns": { "type": "text", "label": "Columns", "required": false, "helpText": "Comma-separated column names to retrieve. Leave empty for all." }, "filter": { "type": "text", "label": "OData Filter", "required": false, "helpText": "OData filter expression. Can be overridden by input." }, "top": { "type": "number", "label": "Limit", "required": false, "helpText": "Max items to fetch (ignored if Fetch All is enabled)", "default": 100 }, "fetchAll": { "type": "boolean", "label": "Fetch All Pages", "required": false, "helpText": "Automatically fetch all pages. Limited by Max Limit below.", "default": false }, "maxLimit": { "type": "number", "label": "Max Limit", "required": false, "helpText": "Safety limit when Fetch All is enabled", "default": 10000 }, "enableCache": { "type": "boolean", "label": "Cache Items", "required": false, "helpText": "Return cached items if read again within TTL. Cache persists until page refresh.", "default": false }, "cacheTTL": { "type": "number", "label": "Cache Duration (seconds)", "required": false, "helpText": "How long to cache items (0 = cache until page refresh)", "default": 60 } } }, "sharepoint:list-write": { "displayName": "SharePoint List Write", "description": "Write items to SharePoint list", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "json", "label": "Items", "required": true }, { "id": "site-url", "handleType": "data", "dataType": "string", "label": "Site URL", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Result", "required": false } ], "config": { "siteUrl": { "type": "text", "label": "Site URL", "required": false, "helpText": "SharePoint site URL. Can be overridden by input." }, "listName": { "type": "text", "label": "List Name", "required": true }, "mode": { "type": "select", "label": "Write Mode", "required": true, "default": "create" }, "keyColumn": { "type": "text", "label": "Key Column", "required": false, "helpText": "Column to match for update/upsert" } } }, "sharepoint:list-manage": { "displayName": "SharePoint List Manage", "description": "Create, configure, or sync SharePoint list schema", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "site-url", "handleType": "data", "dataType": "string", "label": "Site URL", "required": false }, { "id": "columns", "handleType": "data", "dataType": "json", "label": "Columns JSON", "required": false }, { "id": "seed-data", "handleType": "data", "dataType": "json", "label": "Seed Data", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Result", "required": false } ], "config": { "siteUrl": { "type": "text", "label": "Site URL", "required": false, "helpText": "SharePoint site URL. Can be overridden by input." }, "listName": { "type": "text", "label": "List Name", "required": true, "helpText": "Display name for the list" }, "createIfMissing": { "type": "boolean", "label": "Create If Missing", "required": false, "helpText": "Create the list if it does not exist", "default": true }, "recreate": { "type": "boolean", "label": "⚠️ Recreate List", "required": false, "helpText": "Delete and recreate list. WARNING: All existing data will be lost!", "default": false }, "ensureColumns": { "type": "boolean", "label": "Ensure Columns", "required": false, "helpText": "Add any missing columns from definition (non-destructive)", "default": false }, "syncColumns": { "type": "boolean", "label": "⚠️ Sync Columns", "required": false, "helpText": "Sync columns to match definition exactly. WARNING: May remove existing columns!", "default": false }, "columns": { "type": "textarea", "label": "Columns Definition", "required": false }, "seedData": { "type": "textarea", "label": "Seed Data", "required": false } } }, "drive:file-read": { "displayName": "Drive File Read", "description": "Read file from OneDrive or SharePoint", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "file-path", "handleType": "data", "dataType": "string", "label": "File Path", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "string", "label": "File Content", "required": false } ], "config": { "source": { "type": "select", "label": "Source", "required": true, "default": "onedrive" }, "driveMode": { "type": "select", "label": "Drive Mode", "required": false, "default": "personal" }, "driveId": { "type": "text", "label": "Drive ID", "required": false, "helpText": "Drive ID from Drive Discovery node" }, "siteUrl": { "type": "text", "label": "Site URL", "required": false, "helpText": "SharePoint site URL" }, "filePath": { "type": "text", "label": "File Path", "required": false, "helpText": "Relative path like /folder/file.xlsx" }, "shareUrl": { "type": "text", "label": "Share URL", "required": false, "helpText": "Sharing link (e.g. from SharePoint or OneDrive) — resolved via Microsoft Graph" }, "encodeAsBase64": { "type": "boolean", "label": "Encode as Base64", "required": false, "helpText": "Return file content as base64 (use for binary files like images, PDFs, etc.)", "default": false } } }, "drive:file-write": { "displayName": "Drive File Write", "description": "Write file to OneDrive or SharePoint", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "HANDLE_TYPES.DATA_IN", "handleType": "data", "dataType": "string", "label": "File Content", "required": true }, { "id": "file-path", "handleType": "data", "dataType": "string", "label": "File Path", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Result", "required": false } ], "config": { "source": { "type": "select", "label": "Source", "required": true, "default": "onedrive" }, "driveMode": { "type": "select", "label": "Drive Mode", "required": false, "default": "personal" }, "driveId": { "type": "text", "label": "Drive ID", "required": false, "helpText": "Drive ID from Drive Discovery node" }, "siteUrl": { "type": "text", "label": "Site URL", "required": false, "helpText": "SharePoint site URL" }, "filePath": { "type": "text", "label": "File Path", "required": false, "helpText": "Relative path like /folder/file.xlsx" }, "inputFormat": { "type": "select", "label": "Input Format", "required": true, "helpText": "Text = UTF-8 encoded string, Base64 = binary file (decoded from base64)", "default": "text" }, "overwrite": { "type": "boolean", "label": "Overwrite if Exists", "required": false, "helpText": "Replace existing file. If false, will fail if file exists.", "default": true } } }, "drive:list": { "displayName": "Drive List Files", "description": "List files in a folder from OneDrive or SharePoint", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Files", "required": false } ], "config": { "source": { "type": "select", "label": "Source", "required": true, "default": "onedrive" }, "driveMode": { "type": "select", "label": "Drive Mode", "required": false, "default": "personal" }, "driveId": { "type": "text", "label": "Drive ID", "required": false, "helpText": "Drive ID from Drive Discovery node" }, "siteUrl": { "type": "text", "label": "Site URL", "required": false, "helpText": "SharePoint site URL" }, "folderPath": { "type": "text", "label": "Folder Path", "required": false, "helpText": "Relative folder path. / for root.", "default": "/" } } }, "drive:discovery": { "displayName": "Drive Discovery", "description": "Discover available drives (OneDrive + shared drives)", "aiGuidance": "", "category": "storage", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Drives", "required": false } ], "config": {} }, "teams:message-read": { "displayName": "Teams Read Messages", "description": "Read messages from Teams channel", "aiGuidance": "", "category": "communication", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Messages", "required": false } ], "config": { "mode": { "type": "select", "label": "Message Mode", "required": true, "default": "channel" }, "teamId": { "type": "text", "label": "Team ID", "required": false, "helpText": "Team ID from Teams Channel List node" }, "channelId": { "type": "text", "label": "Channel ID", "required": false, "helpText": "Channel ID from Teams Channel List node" }, "limit": { "type": "number", "label": "Limit", "required": false, "helpText": "Max messages to fetch (ignored if Fetch All is enabled)", "default": 50 }, "fetchAll": { "type": "boolean", "label": "Fetch All Pages", "required": false, "helpText": "Automatically fetch all pages. Limited by Max Limit below.", "default": false }, "maxLimit": { "type": "number", "label": "Max Limit", "required": false, "helpText": "Safety limit when Fetch All is enabled", "default": 10000 }, "markAsRead": { "type": "boolean", "label": "Mark as Read", "required": false, "helpText": "Mark fetched messages as read (only for channel messages)", "default": false } } }, "teams:channel-list": { "displayName": "Teams List", "description": "List Teams or channels", "aiGuidance": "", "category": "communication", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "List", "required": false } ], "config": { "listType": { "type": "select", "label": "List Type", "required": true, "default": "teams" }, "teamId": { "type": "text", "label": "Team ID", "required": false, "helpText": "Team ID to list channels from" } } }, "teams:ensure-channel": { "displayName": "Teams Ensure Channel", "description": "Ensure a channel exists in a Team (create if missing)", "aiGuidance": "Creates a standard channel if it does not exist. Can lookup team by name or create team if missing. Private channels are not supported. Returns channel info including ID.", "category": "communication", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "credentials", "handleType": "credentials", "dataType": "credentials", "label": "Credentials", "required": true }, { "id": "team-name", "handleType": "data", "dataType": "string", "label": "Team Name", "required": false }, { "id": "channel-name", "handleType": "data", "dataType": "string", "label": "Channel Name", "required": false }, { "id": "welcome-message", "handleType": "data", "dataType": "string", "label": "Welcome Message", "required": false } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false }, { "id": "data-out", "handleType": "data", "dataType": "json", "label": "Channel", "required": false } ], "config": { "teamName": { "type": "text", "label": "Team Name", "required": false, "helpText": "Display name of the team (must be a team you belong to). Can be overridden by input." }, "createTeamIfMissing": { "type": "boolean", "label": "Create team if missing", "required": false, "helpText": "Create the team if it does not exist (requires Team.Create permission)", "default": false }, "channelName": { "type": "text", "label": "Channel Name", "required": true, "helpText": "Display name for the channel. Can be overridden by input." }, "channelDescription": { "type": "text", "label": "Channel Description", "required": false, "helpText": "Optional description for new channel" }, "welcomeMessage": { "type": "textarea", "label": "Welcome Message", "required": false, "helpText": "Optional message to post when channel is created. Can be overridden by input." }, "welcomeContentType": { "type": "select", "label": "Message Format", "required": false, "default": "text" } } }, "presentation:present": { "displayName": "Presentation", "description": "LLM-scaffolded Excel dashboards and reports. Connect data outputs, describe how you want them presented, and use an LLM to generate the layout.", "aiGuidance": "Accepts dynamic inputs (input_0, input_1, etc.) from any data-producing node. User provides semantic labels per input and an overall presentation description. A prompt is generated for an LLM which returns a JSON presentation spec. On execution, the spec renders charts, tables, metrics, and formatted content onto a target Excel sheet. Requires ExcelApi 1.14 (Excel 2021+). When inputs contain mixed data types (e.g., a JSON object with both array properties and CSV string properties), provide a top-level ", "category": "presentation", "inputs": [ { "id": "execution-in", "handleType": "execution-in", "dataType": "any", "label": "Execute", "required": false }, { "id": "input-0", "handleType": "data", "dataType": "any", "label": "Input 0", "required": false, "dynamic": true } ], "outputs": [ { "id": "execution-out", "handleType": "execution-out", "dataType": "any", "label": "Next", "required": false } ], "config": { "sheetName": { "type": "text", "label": "Target Sheet", "required": true, "helpText": "The sheet where the presentation will be rendered. WARNING: This sheet will be cleared and rebuilt on each run.", "default": "Dashboard" }, "description": { "type": "textarea", "label": "Presentation Goal", "required": true, "helpText": "Describe how you want the data presented. This is sent to the LLM to guide layout generation." }, "semanticLabels": { "type": "custom", "label": "Input Labels", "required": false, "helpText": "Give each connected input a semantic description for the LLM (e.g., " }, "updateMode": { "type": "select", "label": "Update Mode", "required": false, "default": "full" }, "presentationSpec": { "type": "custom", "label": "Presentation Spec", "required": false, "helpText": "The JSON layout spec generated by an LLM. Use " } } } } }