Files
simstudioai--sim/apps/sim/tools/vanta/outputs.ts
T
wehub-resource-sync d25d482dc2
Publish CLI Package / publish-npm (push) Waiting to run
Publish Python SDK / publish-pypi (push) Waiting to run
Publish TypeScript SDK / publish-npm (push) Waiting to run
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:20:55 +08:00

795 lines
28 KiB
TypeScript

import type { OutputProperty } from '@/tools/types'
export const VANTA_PAGE_INFO_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
startCursor: {
type: 'string',
description: 'Cursor pointing to the start of the current page',
optional: true,
},
endCursor: {
type: 'string',
description:
'Cursor pointing to the end of the current page; pass as pageCursor to fetch the next page',
optional: true,
},
hasNextPage: { type: 'boolean', description: 'Whether another page exists after this one' },
hasPreviousPage: { type: 'boolean', description: 'Whether a page exists before this one' },
}
const VANTA_OWNER_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: 'Unique ID of the owner', optional: true },
displayName: { type: 'string', description: 'Display name of the owner', optional: true },
emailAddress: { type: 'string', description: 'Email address of the owner', optional: true },
}
const VANTA_CUSTOM_FIELDS_OUTPUT: OutputProperty = {
type: 'array',
description: 'Custom field values configured in the Vanta instance',
items: {
type: 'object',
properties: {
label: { type: 'string', description: 'Custom field label', optional: true },
value: {
type: 'json',
description: 'Custom field value (string or list of strings)',
optional: true,
},
},
},
}
export const VANTA_FRAMEWORK_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: "The framework's unique ID" },
displayName: { type: 'string', description: "The framework's display name" },
shorthandName: { type: 'string', description: "The short version of the framework's name" },
description: { type: 'string', description: "The framework's description" },
numControlsCompleted: {
type: 'number',
description: 'Number of completed controls in the framework',
},
numControlsTotal: { type: 'number', description: 'Total number of controls in the framework' },
numDocumentsPassing: {
type: 'number',
description: 'Number of passing documents in the framework',
},
numDocumentsTotal: { type: 'number', description: 'Total number of documents in the framework' },
numTestsPassing: { type: 'number', description: 'Number of passing tests in the framework' },
numTestsTotal: { type: 'number', description: 'Total number of tests in the framework' },
}
export const VANTA_FRAMEWORK_DETAIL_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
...VANTA_FRAMEWORK_OUTPUT_PROPERTIES,
requirementCategories: {
type: 'array',
description:
"The framework's requirement categories, each with requirements and mapped controls",
items: {
type: 'object',
properties: {
id: { type: 'string', description: 'Requirement category ID' },
name: { type: 'string', description: 'Requirement category name' },
shorthand: {
type: 'string',
description: 'Requirement category short name',
optional: true,
},
requirements: {
type: 'array',
description: 'Requirements in this category, each listing its mapped controls',
},
},
},
},
}
export const VANTA_CONTROL_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: "The control's unique ID" },
externalId: { type: 'string', description: "The control's external ID", optional: true },
name: { type: 'string', description: "The control's name" },
description: { type: 'string', description: "The control's description" },
source: { type: 'string', description: 'The control source, either "Vanta" or "Custom"' },
domains: {
type: 'array',
description: 'Security domains the control belongs to',
items: { type: 'string' },
},
owner: {
type: 'json',
description: "The control's owner",
optional: true,
properties: VANTA_OWNER_OUTPUT_PROPERTIES,
},
role: { type: 'string', description: "The control's GDPR role, if applicable", optional: true },
customFields: VANTA_CUSTOM_FIELDS_OUTPUT,
creationDate: {
type: 'string',
description: 'When the control was created (null for Vanta library controls)',
optional: true,
},
modificationDate: {
type: 'string',
description: 'When the control was last modified (null for Vanta library controls)',
optional: true,
},
}
export const VANTA_CONTROL_DETAIL_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
...VANTA_CONTROL_OUTPUT_PROPERTIES,
note: { type: 'string', description: 'A user-created note for the control', optional: true },
status: {
type: 'string',
description: 'Control status (NO_EVIDENCE_MAPPED, NOT_STARTED, IN_PROGRESS, or COMPLETED)',
optional: true,
},
numDocumentsPassing: {
type: 'number',
description: 'Number of passing documents linked to the control',
optional: true,
},
numDocumentsTotal: {
type: 'number',
description: 'Total number of documents linked to the control',
optional: true,
},
numTestsPassing: {
type: 'number',
description: 'Number of passing tests linked to the control',
optional: true,
},
numTestsTotal: {
type: 'number',
description: 'Total number of tests linked to the control',
optional: true,
},
}
export const VANTA_TEST_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: "The test's unique ID" },
name: { type: 'string', description: "The test's name" },
description: { type: 'string', description: "The test's description" },
failureDescription: { type: 'string', description: "The test's failure description" },
remediationDescription: { type: 'string', description: "The test's remediation description" },
category: { type: 'string', description: "The test's category" },
status: {
type: 'string',
description:
'Test run status (OK, DEACTIVATED, NEEDS_ATTENTION, IN_PROGRESS, INVALID, or NOT_APPLICABLE)',
},
integrations: {
type: 'array',
description: "The test's third-party integration dependencies",
items: { type: 'string' },
},
lastTestRunDate: { type: 'string', description: 'Timestamp of the last test run' },
latestFlipDate: {
type: 'string',
description: 'Most recent date the test flipped status',
optional: true,
},
version: {
type: 'json',
description: "The test's version",
optional: true,
properties: {
major: { type: 'number', description: 'Major version number' },
minor: { type: 'number', description: 'Minor version number' },
},
},
deactivatedStatusInfo: {
type: 'json',
description: "The test's deactivation status",
optional: true,
properties: {
isDeactivated: { type: 'boolean', description: 'Whether the test is deactivated' },
deactivatedReason: { type: 'string', description: 'Reason for deactivation', optional: true },
lastUpdatedDate: {
type: 'string',
description: 'Date of the last deactivation status update',
optional: true,
},
},
},
remediationStatusInfo: {
type: 'json',
description: "The test's remediation status",
optional: true,
properties: {
status: { type: 'string', description: 'Remediation status' },
soonestRemediateByDate: {
type: 'string',
description: 'Soonest remediate-by date',
optional: true,
},
itemCount: { type: 'number', description: 'Number of items needing remediation' },
},
},
owner: {
type: 'json',
description: "The test's owner",
optional: true,
properties: VANTA_OWNER_OUTPUT_PROPERTIES,
},
}
export const VANTA_TEST_ENTITY_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: 'Identifier of the entity' },
entityStatus: { type: 'string', description: 'Entity status (FAILING or DEACTIVATED)' },
displayName: { type: 'string', description: 'Display name of the entity' },
responseType: { type: 'string', description: 'Response type of the entity' },
deactivatedReason: { type: 'string', description: 'Reason for deactivation', optional: true },
createdDate: { type: 'string', description: 'Date the entity was first detected' },
lastUpdatedDate: { type: 'string', description: 'Date of the last update to the entity' },
}
export const VANTA_DOCUMENT_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: "The document's unique ID" },
title: { type: 'string', description: "The document's title" },
description: { type: 'string', description: "The document's description" },
category: { type: 'string', description: "The document's category" },
ownerId: { type: 'string', description: "User ID of the document's owner", optional: true },
isSensitive: { type: 'boolean', description: 'Whether the document is sensitive' },
uploadStatus: {
type: 'string',
description: 'Document status ("Needs document", "Needs update", "Not relevant", or "OK")',
},
uploadStatusDate: {
type: 'string',
description: 'Date the upload status last changed',
optional: true,
},
url: { type: 'string', description: 'URL to view the document within Vanta', optional: true },
}
export const VANTA_DOCUMENT_DETAIL_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
...VANTA_DOCUMENT_OUTPUT_PROPERTIES,
note: { type: 'string', description: 'A user note for the document', optional: true },
nextRenewalDate: {
type: 'string',
description: 'When the document needs to be renewed',
optional: true,
},
renewalCadence: {
type: 'string',
description: 'How often the document must be renewed',
optional: true,
},
reminderWindow: {
type: 'string',
description: 'Reminder window ahead of the renewal date (P0D, P1D, P1W, P1M, or P3M)',
optional: true,
},
subscribers: {
type: 'array',
description: 'Emails subscribed to the document',
items: { type: 'string' },
},
deactivatedStatus: {
type: 'json',
description: "The document's deactivation status",
optional: true,
properties: {
isDeactivated: { type: 'boolean', description: 'Whether the document is deactivated' },
reason: {
type: 'string',
description: 'Reason the document was deactivated',
optional: true,
},
creationDate: { type: 'string', description: 'Date the document was deactivated' },
expiration: { type: 'string', description: 'Date the deactivation expires', optional: true },
},
},
}
export const VANTA_UPLOADED_FILE_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: 'Unique ID of the uploaded file' },
fileName: { type: 'string', description: 'File name of the upload', optional: true },
title: { type: 'string', description: 'Title of the upload' },
description: { type: 'string', description: 'Description of the upload', optional: true },
mimeType: { type: 'string', description: 'MIME type of the uploaded file' },
uploadedBy: {
type: 'json',
description: 'Actor who uploaded the file (a user or an application)',
optional: true,
properties: {
id: { type: 'string', description: 'Actor ID' },
type: { type: 'string', description: 'Actor type (USER or APPLICATION)' },
},
},
creationDate: { type: 'string', description: 'Date the file was uploaded' },
updatedDate: { type: 'string', description: 'Date the file was last updated' },
deletionDate: {
type: 'string',
description: 'Date the file was deleted (null if not deleted)',
optional: true,
},
effectiveDate: { type: 'string', description: "The file's effective date", optional: true },
url: { type: 'string', description: "The file's URL" },
}
export const VANTA_PERSON_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: "The person's unique ID" },
userId: {
type: 'string',
description: 'ID of the associated Vanta user account, if one exists',
optional: true,
},
emailAddress: { type: 'string', description: "The person's email address" },
name: {
type: 'json',
description: "The person's name",
optional: true,
properties: {
first: { type: 'string', description: 'First (given) name', optional: true },
last: { type: 'string', description: 'Last (family) name', optional: true },
display: { type: 'string', description: 'Display name used in Vanta' },
},
},
employment: {
type: 'json',
description: "The person's employment information",
optional: true,
properties: {
status: {
type: 'string',
description: 'Employment status (UPCOMING, CURRENT, ON_LEAVE, INACTIVE, or FORMER)',
},
startDate: { type: 'string', description: 'Employment start date' },
endDate: { type: 'string', description: 'Employment end date, if present', optional: true },
jobTitle: { type: 'string', description: 'Job title', optional: true },
},
},
leaveInfo: {
type: 'json',
description: "The person's active or upcoming leave, if any",
optional: true,
properties: {
status: { type: 'string', description: 'Leave status (ACTIVE or UPCOMING)' },
startDate: { type: 'string', description: 'Start of the leave' },
endDate: {
type: 'string',
description: 'End of the leave (null implies indefinite leave)',
optional: true,
},
},
},
groupIds: {
type: 'array',
description: 'IDs of the groups the person belongs to',
items: { type: 'string' },
},
tasksSummary: {
type: 'json',
description: "Aggregated status of the person's tasks",
optional: true,
properties: {
status: {
type: 'string',
description:
'Overall task status (e.g., NONE, DUE_SOON, OVERDUE, COMPLETE, PAUSED, or an OFFBOARDING_* variant)',
},
dueDate: {
type: 'string',
description: "Due date of the person's earliest-due task",
optional: true,
},
completionDate: {
type: 'string',
description: "Date the person's tasks were completed",
optional: true,
},
},
},
}
export const VANTA_POLICY_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: "The policy's unique ID" },
name: { type: 'string', description: "The policy's name" },
description: { type: 'string', description: "The policy's description" },
status: { type: 'string', description: 'Policy status (OK or NEEDS_REMEDIATION)' },
approvedAtDate: {
type: 'string',
description: "The policy's most recent approval date, if applicable",
optional: true,
},
latestVersionStatus: {
type: 'string',
description:
"Status of the policy's latest version (NOT_STARTED, DRAFT, PENDING_APPROVAL, APPROVED, RENEW_SOON, or EXPIRED)",
},
latestApprovedVersion: {
type: 'json',
description: 'The latest approved version of the policy, if available',
optional: true,
properties: {
versionId: { type: 'string', description: 'ID of the latest approved version' },
documents: {
type: 'array',
description: 'Available policy document versions, organized by language',
},
},
},
}
export const VANTA_VENDOR_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: "The vendor's unique ID" },
name: { type: 'string', description: "The vendor's display name" },
status: { type: 'string', description: 'Vendor status (MANAGED, ARCHIVED, or IN_PROCUREMENT)' },
websiteUrl: { type: 'string', description: "The vendor's website URL", optional: true },
category: {
type: 'string',
description: "Display name of the vendor's category",
optional: true,
},
servicesProvided: {
type: 'string',
description: 'Services provided by the vendor',
optional: true,
},
additionalNotes: {
type: 'string',
description: 'Additional notes about the vendor',
optional: true,
},
accountManagerName: {
type: 'string',
description: "The vendor's external account manager name",
optional: true,
},
accountManagerEmail: {
type: 'string',
description: "The vendor's external account manager email",
optional: true,
},
securityOwnerUserId: {
type: 'string',
description: "Vanta user ID of the vendor's security owner",
optional: true,
},
businessOwnerUserId: {
type: 'string',
description: "Vanta user ID of the vendor's business owner",
optional: true,
},
inherentRiskLevel: {
type: 'string',
description: 'Inherent risk level (CRITICAL, HIGH, MEDIUM, LOW, or UNSCORED)',
},
residualRiskLevel: {
type: 'string',
description: 'Residual risk level (CRITICAL, HIGH, MEDIUM, LOW, or UNSCORED)',
},
isRiskAutoScored: {
type: 'boolean',
description: "Whether the vendor's risk is automatically scored",
optional: true,
},
isVisibleToAuditors: {
type: 'boolean',
description: 'Whether auditors can view this vendor',
optional: true,
},
riskAttributeIds: {
type: 'array',
description: 'Risk attribute IDs assigned to the vendor',
items: { type: 'string' },
},
vendorHeadquarters: {
type: 'string',
description: "Country code of the vendor's headquarters",
optional: true,
},
contractStartDate: {
type: 'string',
description: 'Date the vendor contract began',
optional: true,
},
contractRenewalDate: {
type: 'string',
description: 'Date the vendor contract is up for renewal',
optional: true,
},
contractTerminationDate: {
type: 'string',
description: 'Date the vendor contract was terminated',
optional: true,
},
contractAmount: {
type: 'json',
description: 'Contract amount for the vendor',
optional: true,
properties: {
amount: { type: 'number', description: 'Amount of the contract' },
currency: { type: 'string', description: 'Currency of the contract' },
},
},
nextSecurityReviewDueDate: {
type: 'string',
description: 'Next due date for a security review',
optional: true,
},
lastSecurityReviewCompletionDate: {
type: 'string',
description: 'Most recent date a security review was completed',
optional: true,
},
authDetails: {
type: 'json',
description: "The vendor's authentication details",
optional: true,
properties: {
method: {
type: 'string',
description: 'Authentication method (e.g., SSO, OKTA, USERNAME_PASSWORD)',
optional: true,
},
passwordMFA: {
type: 'boolean',
description: 'Whether passwords require multi-factor authentication',
optional: true,
},
passwordMinimumLength: {
type: 'number',
description: 'Minimum password length',
optional: true,
},
passwordRequiresNumber: {
type: 'boolean',
description: 'Whether passwords require a number',
optional: true,
},
passwordRequiresSymbol: {
type: 'boolean',
description: 'Whether passwords require a symbol',
optional: true,
},
},
},
customFields: VANTA_CUSTOM_FIELDS_OUTPUT,
latestDecision: {
type: 'json',
description: "The vendor's latest decision (null when no decision has been made)",
optional: true,
properties: {
status: {
type: 'string',
description: 'Decision status (APPROVED, CONDITIONALLY_APPROVED, or NOT_APPROVED)',
},
lastUpdatedAt: { type: 'string', description: 'When the decision was last updated' },
},
},
linkedTaskTrackerTaskProcurementRequest: {
type: 'json',
description: 'Linked task tracker procurement request, if any',
optional: true,
properties: {
url: { type: 'string', description: 'URL of the procurement request' },
service: { type: 'string', description: 'Task tracker service' },
},
},
}
export const VANTA_MONITORED_COMPUTER_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: 'Unique identifier of the monitored computer' },
integrationId: { type: 'string', description: 'Integration that reports this computer' },
lastCheckDate: {
type: 'string',
description: "Date of the computer's most recent report",
optional: true,
},
screenlock: {
type: 'string',
description: 'Screenlock check outcome (PASS, FAIL, IN_PROGRESS, or NA)',
},
diskEncryption: {
type: 'string',
description: 'Disk encryption check outcome (PASS, FAIL, IN_PROGRESS, or NA)',
},
passwordManager: {
type: 'string',
description: 'Password manager check outcome (PASS, FAIL, IN_PROGRESS, or NA)',
},
antivirusInstallation: {
type: 'string',
description: 'Antivirus check outcome (PASS, FAIL, IN_PROGRESS, or NA)',
},
operatingSystem: {
type: 'json',
description: "The computer's operating system",
optional: true,
properties: {
type: { type: 'string', description: 'Operating system type (macOS, linux, or windows)' },
version: { type: 'string', description: 'Operating system version', optional: true },
},
},
owner: {
type: 'json',
description: "The computer's owner",
optional: true,
properties: VANTA_OWNER_OUTPUT_PROPERTIES,
},
serialNumber: { type: 'string', description: 'Serial number of the computer', optional: true },
udid: { type: 'string', description: 'Universal device ID of the computer', optional: true },
}
export const VANTA_RISK_SCENARIO_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
riskId: { type: 'string', description: 'Unique user-specified ID of the risk scenario' },
description: { type: 'string', description: 'Description of the risk scenario' },
likelihood: {
type: 'number',
description: 'Likelihood score (defaults to a 1-5 range; null when unscored)',
optional: true,
},
impact: {
type: 'number',
description: 'Impact score (defaults to a 1-5 range; null when unscored)',
optional: true,
},
residualLikelihood: {
type: 'number',
description: 'Residual likelihood score after treatments',
optional: true,
},
residualImpact: {
type: 'number',
description: 'Residual impact score after treatments',
optional: true,
},
categories: {
type: 'array',
description: 'Categories this risk scenario belongs to',
items: { type: 'string' },
},
ciaCategories: {
type: 'array',
description: 'CIA categories (Confidentiality, Integrity, Availability)',
items: { type: 'string' },
},
treatment: {
type: 'string',
description: 'Risk treatment decision (Mitigate, Transfer, Avoid, or Accept)',
optional: true,
},
owner: {
type: 'string',
description: 'Email of the person responsible for this risk',
optional: true,
},
note: {
type: 'string',
description: 'Additional context about the risk scenario',
optional: true,
},
riskRegister: {
type: 'string',
description: 'Name of the associated risk register',
optional: true,
},
customFields: VANTA_CUSTOM_FIELDS_OUTPUT,
isArchived: { type: 'boolean', description: 'Whether the scenario is archived' },
reviewStatus: {
type: 'string',
description:
'Review status (APPROVED, DRAFT, NOT_REVIEWED, AWAITING_SUBMISSION, PENDING_APPROVAL, or REQUESTED_CHANGES)',
},
requiredApprovers: {
type: 'array',
description: 'Required approvers for this risk scenario',
items: { type: 'string' },
},
type: { type: 'string', description: 'Scenario type ("Risk Scenario" or "Enterprise Risk")' },
identificationDate: { type: 'string', description: 'Date this risk was identified' },
}
export const VANTA_VULNERABILITY_REMEDIATION_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: 'Unique identifier of the remediation' },
vulnerabilityId: { type: 'string', description: 'ID of the remediated vulnerability' },
vulnerableAssetId: { type: 'string', description: 'ID of the vulnerable asset' },
severity: { type: 'string', description: 'Severity of the vulnerability' },
detectedDate: {
type: 'string',
description: 'Date the vulnerability was first detected',
optional: true,
},
slaDeadlineDate: { type: 'string', description: 'SLA deadline for remediation', optional: true },
remediationDate: {
type: 'string',
description: 'Date the vulnerability was remediated',
optional: true,
},
}
export const VANTA_VULNERABLE_ASSET_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: 'Unique identifier of the vulnerable asset' },
name: { type: 'string', description: 'Display name of the vulnerable asset' },
assetType: {
type: 'string',
description:
'Asset type (e.g., SERVER, SERVERLESS_FUNCTION, CONTAINER_REPOSITORY, CODE_REPOSITORY, WORKSTATION)',
},
hasBeenScanned: { type: 'boolean', description: 'Whether the asset has been scanned' },
imageScanTag: {
type: 'string',
description:
'Container image tag that vulnerabilities are retrieved for (container repositories only)',
optional: true,
},
scanners: {
type: 'array',
description:
'Integrations scanning this asset, with per-scanner asset details (resource ID, hostnames, IPs, image metadata)',
},
}
export const VANTA_VULNERABILITY_OUTPUT_PROPERTIES: Record<string, OutputProperty> = {
id: { type: 'string', description: 'Unique identifier of the vulnerability' },
name: { type: 'string', description: 'Display name of the vulnerability' },
description: { type: 'string', description: 'Description of the vulnerability' },
severity: { type: 'string', description: 'Severity (LOW, MEDIUM, HIGH, or CRITICAL)' },
vulnerabilityType: {
type: 'string',
description: 'Vulnerability type (CONFIGURATION, COMMON, or GROUPED)',
},
integrationId: { type: 'string', description: 'Integration that scans this vulnerability' },
targetId: { type: 'string', description: 'ID of the resource the vulnerability was found on' },
packageIdentifier: {
type: 'string',
description: 'Identifier of the affected package (COMMON and GROUPED vulnerabilities only)',
optional: true,
},
cvssSeverityScore: { type: 'number', description: 'CVSS severity score', optional: true },
scannerScore: { type: 'number', description: 'Scanner score', optional: true },
isFixable: { type: 'boolean', description: 'Whether the vulnerability is fixable' },
fixedVersion: {
type: 'string',
description: 'Package version that remediates the vulnerability',
optional: true,
},
remediateByDate: {
type: 'string',
description: 'SLA date by which the vulnerability should be remediated',
optional: true,
},
firstDetectedDate: { type: 'string', description: 'Date first detected by Vanta' },
sourceDetectedDate: {
type: 'string',
description: 'Date first detected by the source',
optional: true,
},
lastDetectedDate: { type: 'string', description: 'Date last detected', optional: true },
scanSource: {
type: 'string',
description: 'Scanning tool that detected the vulnerability',
optional: true,
},
externalURL: { type: 'string', description: 'External URL for the vulnerability' },
relatedVulns: {
type: 'array',
description: 'Related vulnerabilities (GROUPED vulnerabilities only)',
items: { type: 'string' },
},
relatedUrls: {
type: 'array',
description: 'Related URLs',
items: { type: 'string' },
},
deactivateMetadata: {
type: 'json',
description: 'Deactivation metadata, if the vulnerability was deactivated',
optional: true,
properties: {
isVulnDeactivatedIndefinitely: {
type: 'boolean',
description: 'Whether deactivated indefinitely',
},
deactivatedUntilDate: {
type: 'string',
description: 'Date the vulnerability will be reactivated',
optional: true,
},
deactivationReason: { type: 'string', description: 'Reason for deactivation' },
deactivatedOnDate: { type: 'string', description: 'Date the vulnerability was deactivated' },
deactivatedBy: { type: 'string', description: 'User who deactivated the vulnerability' },
},
},
}