n8n-nodes-octagon
Version:
Professional n8n node for Octagon AI Agents - Access 15 specialized financial and market research AI agents including SEC filings, earnings transcripts, stock data, and private market intelligence
248 lines • 11.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OctagonAgents = void 0;
const n8n_workflow_1 = require("n8n-workflow");
/**
* Professional n8n node for Octagon AI Agents
* Provides access to 15 specialized financial and market research AI agents
*
* @author Octagon <ken@octagonai.co>
* @version 1.0.4
* @since 2024-01-15
*/
// nodelinter-ignore-next-line node-dirname-against-convention
class OctagonAgents {
constructor() {
this.description = {
displayName: 'Octagon',
name: 'octagonAgents',
icon: 'file:octagon.svg',
group: ['input'],
version: 1,
subtitle: '={{$parameter["agent"]}}',
description: 'Financial AI agents',
defaults: {
name: 'Octagon',
},
usableAsTool: true,
// nodelinter-ignore-next-line node-class-description-inputs-wrong-regular-node
inputs: ['main'],
// nodelinter-ignore-next-line node-class-description-outputs-wrong
outputs: ['main'],
credentials: [
{
name: 'octagonApi',
required: true,
},
],
properties: [
{
displayName: 'Agent',
name: 'agent',
type: 'options',
options: [
{
name: '01. Octagon Agent (Router)',
value: 'octagon-agent',
description: 'Intelligent agent router that analyzes queries and routes to specialized agents',
},
{
name: '02. SEC Agent',
value: 'octagon-sec-agent',
description: 'Public market intelligence - Analyzes SEC filings and public company disclosures',
},
{
name: '03. Transcripts Agent',
value: 'octagon-transcripts-agent',
description: 'Public market intelligence - Analyzes earnings call transcripts',
},
{
name: '04. Stock Data Agent',
value: 'octagon-stock-data-agent',
description: 'Public market intelligence - Provides real-time and historical stock market data',
},
{
name: '05. Holdings Agent',
value: 'octagon-holdings-agent',
description: 'Public market intelligence - Analyzes institutional holdings data',
},
{
name: '06. Financials Agent',
value: 'octagon-financials-agent',
description: 'Public market intelligence - Analyzes financial statements',
},
{
name: '07. Crypto Agent',
value: 'octagon-crypto-agent',
description: 'Public market intelligence - Analyzes cryptocurrency market data',
},
{
name: '08. Companies Agent',
value: 'octagon-companies-agent',
description: 'Private market intelligence - Provides private company information',
},
{
name: '09. Funding Agent',
value: 'octagon-funding-agent',
description: 'Private market intelligence - Analyzes private company funding data',
},
{
name: '10. Funds Agent',
value: 'octagon-funds-agent',
description: 'Private market intelligence - Analyzes investment funds and fund managers',
},
{
name: '11. Deals Agent',
value: 'octagon-deals-agent',
description: 'Private market intelligence - Analyzes M&A and IPO data',
},
{
name: '12. Investors Agent',
value: 'octagon-investors-agent',
description: 'Private market intelligence - Analyzes venture capital and private equity investors',
},
{
name: '13. Debts Agent',
value: 'octagon-debts-agent',
description: 'Private market intelligence - Analyzes private debts, borrowers, and lenders',
},
{
name: '14. Scraper Agent',
value: 'octagon-scraper-agent',
description: 'Deep research intelligence - Scrapes and analyzes web content',
},
{
name: '15. Deep Research Agent',
value: 'octagon-deep-research-agent',
description: 'Deep research intelligence - Conducts in-depth research',
},
],
default: 'octagon-agent',
description: 'Select the Octagon agent for your research task',
},
{
displayName: 'Query',
name: 'query',
type: 'string',
typeOptions: {
rows: 3,
},
default: '',
placeholder: 'Ask any financial or market research question...',
description: 'Your research query or question',
required: true,
},
{
displayName: 'Additional Options',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
options: [
{
displayName: 'Include Token Usage',
name: 'includeUsage',
type: 'boolean',
default: false,
description: 'Whether to include token usage information in the response',
},
],
},
],
};
}
/**
* Executes the Octagon AI agent request
*
* @param this - The n8n execution context
* @returns Promise<INodeExecutionData[][]> - Formatted response with analysis and citations
* @throws Error when API request fails or authentication is invalid
*/
async execute() {
const items = this.getInputData();
const returnData = [];
for (let i = 0; i < items.length; i++) {
try {
// Get parameters and validate required fields
const agent = this.getNodeParameter('agent', i);
const query = this.getNodeParameter('query', i);
const additionalFields = this.getNodeParameter('additionalFields', i, {});
// Validate required parameters
if (!query || query.trim().length === 0) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Query is required and cannot be empty', {
itemIndex: i,
});
}
// Prepare request options using n8n's HTTP helpers
const requestOptions = {
url: 'https://api-gateway.octagonagents.com/v1/responses',
method: 'POST',
body: {
model: agent,
input: query,
},
json: true,
headers: {
'Content-Type': 'application/json',
'User-Agent': 'n8n-octagon-node/1.0.4',
},
};
// Make API request using n8n's HTTP helpers with authentication
const response = await this.helpers.httpRequestWithAuthentication.call(this, 'octagonApi', requestOptions);
let analysis = '';
let citations = [];
let usage = {};
// Handle response structure safely
if (response.output && response.output.length > 0) {
const outputItem = response.output[0];
if (outputItem.content && outputItem.content.length > 0) {
const contentItem = outputItem.content[0];
if (contentItem.text) {
analysis = contentItem.text;
}
if (contentItem.annotations) {
citations = contentItem.annotations;
}
}
}
if (response.usage) {
usage = response.usage;
}
// Prepare output data
const outputData = {
agent,
query,
analysis,
sources: citations,
metadata: {
apiType: 'responses',
timestamp: new Date().toISOString(),
},
};
// Add usage information if requested
if (additionalFields.includeUsage && usage) {
outputData.usage = usage;
}
returnData.push({
json: outputData,
});
}
catch (error) {
// Handle errors gracefully
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
returnData.push({
json: {
error: true,
message: errorMessage,
query: this.getNodeParameter('query', i),
agent: this.getNodeParameter('agent', i),
timestamp: new Date().toISOString(),
},
});
}
}
return this.prepareOutputData(returnData);
}
}
exports.OctagonAgents = OctagonAgents;
//# sourceMappingURL=OctagonAgents.node.js.map