module.exports = { friendlyName: 'Get vulnerabilities', description: 'Get sorted & paginated vulnerabilities that match the provided filters.', inputs: { minSeverity: { description: 'Optional filter to only get vulnerabilities whose `severity` is >= the specified value.', type: 'number', defaultsTo: 0, }, maxSeverity: { description: 'Optional filter to only get vulnerabilities whose `severity` is <= the specified value.', type: 'number', defaultsTo: 10, }, sortBy: { description: 'An optional facet to sort vulnerabilities by.', type: 'string', isIn: [ 'cveId', 'severity', 'hasKnownExploit', 'publishedAt', 'resolvedAt', 'createdAt', ], defaultsTo: 'publishedAt' }, sortDirection: { type: 'string', isIn: [ 'ASC', 'DESC', ], defaultsTo: 'DESC' }, page: { description: 'The zero-indexed page number.', type: 'number', defaultsTo: 0 }, teamApid: { description: 'The ID of the Team to filter by, or 0 to only include hosts with no team, or undefined to not filter by any team.', type: 'number', }, }, exits: { success: { outputFriendlyName: 'Report', outputDescription: 'A dictionary with a `total` and `entries` (a list of vulnerabilities).', outputType: {}, outputExample: { total: 1, entries: [ { id: 99, /*…*/ } ] } }, }, fn: async function ({minSeverity, maxSeverity, sortBy, sortDirection, page, teamApid}) { return await sails.helpers.getVulnerabilities.with({ minSeverity, maxSeverity, sortBy, sortDirection, page, teamApid}) .tolerate('noMatchingVulnerabilities', ()=>{ // If the get vulnerabilities helper returned a noMatchingVulnerabilities response, we'll return an empty array of results return { total: 0, entries: [], }; }); } };