n8n-nodes-octavehq
Version:
Octave is the AI-powered messaging brain for B2B go-to-market teams, helping articulate product value, synthesize customer interaction data, and deploy consistent, effective messaging across all channels.
229 lines • 10.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.exportedProperties = void 0;
exports.execute = execute;
const n8n_workflow_1 = require("n8n-workflow");
const OctaveApiRequest_1 = require("../../transport/OctaveApiRequest");
const utils_1 = require("../utils");
const properties = [
{
displayName: 'Agent OId Name or ID',
name: 'agentOId',
type: 'options',
required: true,
typeOptions: { loadOptionsMethod: 'getAgents' },
default: '',
description: 'The OId of the prospector agent to run. Choose from the list, or specify an ID. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
},
{
displayName: 'Company Domain',
name: 'companyDomain',
type: 'string',
default: '',
description: 'Company domain to prospect (e.g., example.com) (optional)',
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 0,
typeOptions: { minValue: 0 },
description: 'Max number of results to return',
hint: 'If not set, the agent will use its default limit',
},
{
displayName: 'Minimal Response',
name: 'minimal',
type: 'boolean',
default: true,
description: 'Whether to return a minimal version of the contact data',
},
{
displayName: 'Playbook Name or ID',
name: 'playbookOId',
type: 'options',
typeOptions: { loadOptionsMethod: 'getPlaybooks' },
default: '',
description: 'Playbook to use for prospecting (optional). Choose from the list, or specify an ID. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
},
{
displayName: 'Persona Names or Names or IDs',
name: 'personaOIds',
type: 'multiOptions',
typeOptions: {
loadOptionsMethod: 'getPersonas',
},
default: [],
description: 'Personas to target for prospecting (optional). Choose from the list, or specify IDs. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>. Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
},
{
displayName: 'Fuzzy Titles',
name: 'fuzzyTitles',
type: 'string',
default: '',
description: 'Job titles for fuzzy matching (e.g., VP Marketing, Head of Sales). Enter multiple titles separated by commas.',
},
{
displayName: 'Exact Titles',
name: 'exactTitles',
type: 'string',
default: '',
description: 'Job titles for exact matching. Enter multiple titles separated by commas.',
},
{
displayName: 'Exclude Titles',
name: 'excludeTitles',
type: 'string',
default: '',
description: 'Job titles to exclude from search results. Enter multiple titles separated by commas.',
},
{
displayName: 'Country Filters',
name: 'countryFilters',
type: 'string',
default: '',
description: 'Countries to include in search results (exact match). Enter multiple countries separated by commas.',
},
{
displayName: 'Country Exclude Filters',
name: 'countryExcludeFilters',
type: 'string',
default: '',
description: 'Countries to exclude from search results (exact match). Enter multiple countries separated by commas.',
},
{
displayName: 'Location Filters',
name: 'locationFilters',
type: 'string',
default: '',
description: 'Locations to include in search results (exact match). Enter multiple locations separated by commas.',
},
{
displayName: 'Location Exclude Filters',
name: 'locationExcludeFilters',
type: 'string',
default: '',
description: 'Locations to exclude from search results (exact match). Enter multiple locations separated by commas.',
},
{
displayName: 'Additional Inputs (JSON)',
name: 'additionalInputsJson',
type: 'json',
default: '{}',
description: 'A JSON object for any other top-level inputs the agent might accept (optional), will be merged into the main body',
placeholder: '{\n "customTopLevelParam": "value"\n}',
},
];
const displayOptions = {
show: {
resource: ['agent'],
operation: ['runProspector'],
},
};
exports.exportedProperties = (0, utils_1.applyDisplayOptions)(displayOptions, properties);
async function execute(itemIndex) {
const agentOId = this.getNodeParameter('agentOId', itemIndex);
if (!agentOId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Agent OId is required for this operation.', { itemIndex });
}
const searchContext = {};
const playbookOId = this.getNodeParameter('playbookOId', itemIndex);
if (playbookOId)
searchContext.playbookOId = playbookOId;
const personaOIds = this.getNodeParameter('personaOIds', itemIndex);
if (personaOIds) {
searchContext.personaOIds = Array.isArray(personaOIds) ? personaOIds : [personaOIds];
if (searchContext.personaOIds.length === 0)
delete searchContext.personaOIds;
}
const fuzzyTitlesRaw = this.getNodeParameter('fuzzyTitles', itemIndex, '');
if (fuzzyTitlesRaw.trim() !== '') {
const fuzzyTitlesArray = fuzzyTitlesRaw.split(',').map(s => s.trim()).filter(s => s !== '');
if (fuzzyTitlesArray.length > 0)
searchContext.fuzzyTitles = fuzzyTitlesArray;
}
const exactTitlesRaw = this.getNodeParameter('exactTitles', itemIndex, '');
if (exactTitlesRaw.trim() !== '') {
const exactTitlesArray = exactTitlesRaw.split(',').map(s => s.trim()).filter(s => s !== '');
if (exactTitlesArray.length > 0)
searchContext.exactTitles = exactTitlesArray;
}
const excludeTitlesRaw = this.getNodeParameter('excludeTitles', itemIndex, '');
if (excludeTitlesRaw.trim() !== '') {
const excludeTitlesArray = excludeTitlesRaw.split(',').map(s => s.trim()).filter(s => s !== '');
if (excludeTitlesArray.length > 0)
searchContext.excludeTitles = excludeTitlesArray;
}
const countryFiltersRaw = this.getNodeParameter('countryFilters', itemIndex, '');
const countryExcludeFiltersRaw = this.getNodeParameter('countryExcludeFilters', itemIndex, '');
if (countryFiltersRaw.trim() !== '' || countryExcludeFiltersRaw.trim() !== '') {
const personCountry = {};
if (countryFiltersRaw.trim() !== '') {
const countryFiltersArray = countryFiltersRaw.split(',').map(s => s.trim()).filter(s => s !== '');
if (countryFiltersArray.length > 0) {
personCountry.matches = { exact: countryFiltersArray };
}
}
if (countryExcludeFiltersRaw.trim() !== '') {
const countryExcludeFiltersArray = countryExcludeFiltersRaw.split(',').map(s => s.trim()).filter(s => s !== '');
if (countryExcludeFiltersArray.length > 0) {
personCountry.excludes = { exact: countryExcludeFiltersArray };
}
}
if (Object.keys(personCountry).length > 0) {
searchContext.personCountry = personCountry;
}
}
const locationFiltersRaw = this.getNodeParameter('locationFilters', itemIndex, '');
const locationExcludeFiltersRaw = this.getNodeParameter('locationExcludeFilters', itemIndex, '');
if (locationFiltersRaw.trim() !== '' || locationExcludeFiltersRaw.trim() !== '') {
const personLocation = {};
if (locationFiltersRaw.trim() !== '' || locationExcludeFiltersRaw.trim() !== '') {
const textFilter = {};
if (locationFiltersRaw.trim() !== '') {
const locationFiltersArray = locationFiltersRaw.split(',').map(s => s.trim()).filter(s => s !== '');
if (locationFiltersArray.length > 0) {
textFilter.matches = { exact: locationFiltersArray };
}
}
if (locationExcludeFiltersRaw.trim() !== '') {
const locationExcludeFiltersArray = locationExcludeFiltersRaw.split(',').map(s => s.trim()).filter(s => s !== '');
if (locationExcludeFiltersArray.length > 0) {
textFilter.excludes = { exact: locationExcludeFiltersArray };
}
}
if (Object.keys(textFilter).length > 0) {
personLocation.text = textFilter;
}
}
if (Object.keys(personLocation).length > 0) {
searchContext.personLocation = personLocation;
}
}
const body = { agentOId };
body.companyDomain = this.getNodeParameter('companyDomain', itemIndex);
body.limit = this.getNodeParameter('limit', itemIndex, 10);
body.minimal = this.getNodeParameter('minimal', itemIndex, true);
if (Object.keys(searchContext).length > 0) {
body.searchContext = searchContext;
}
const additionalInputs = utils_1.parseJsonParameter.call(this, 'additionalInputsJson', itemIndex, '{}');
for (const key in additionalInputs) {
if (!body.hasOwnProperty(key)) {
body[key] = additionalInputs[key];
}
}
Object.keys(body).forEach(key => {
if (body[key] === undefined) {
delete body[key];
}
});
const responseDataOuter = await OctaveApiRequest_1.octaveApiRequest.call(this, 'POST', '/api/v2/agents/prospector/run', body);
const responseWithMetadata = {
data: (responseDataOuter === null || responseDataOuter === void 0 ? void 0 : responseDataOuter.data) !== undefined ? responseDataOuter.data : responseDataOuter,
_metadata: responseDataOuter === null || responseDataOuter === void 0 ? void 0 : responseDataOuter._metadata
};
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseWithMetadata), { itemData: { item: itemIndex } });
return [executionData];
}
//# sourceMappingURL=runProspector.operation.js.map