UNPKG

snyk

Version:

snyk library and cli utility

239 lines (238 loc) • 7.77 kB
/// <reference types="node" /> import { IacProjectType, IacProjectTypes } from '../../../../lib/iac/constants'; import { SEVERITY } from '../../../../lib/snyk-test/common'; import { AnnotatedIssue, IgnoreSettings, TestResult } from '../../../../lib/snyk-test/legacy'; import { IacFileInDirectory, Options, TestOptions, PolicyOptions } from '../../../../lib/types'; export interface IacFileData extends IacFileInDirectory { fileContent: string; } export declare const VALID_FILE_TYPES: string[]; export interface IacFileParsed extends IacFileData { jsonContent: Record<string, unknown> | TerraformScanInput; projectType: IacProjectType; engineType: EngineType; docId?: number; } export interface IacFileParseFailure extends IacFileData { jsonContent: null; engineType: null; failureReason: string; err: Error; } export declare type ScanningResults = { scannedFiles: Array<IacFileScanResult>; unscannedFiles: Array<IacFileParseFailure>; }; export declare type ParsingResults = { parsedFiles: Array<IacFileParsed>; failedFiles: Array<IacFileParseFailure>; }; export interface IacFileScanResult extends IacFileParsed { violatedPolicies: PolicyMetadata[]; } export declare type FormattedResult = { result: { cloudConfigResults: Array<PolicyMetadata>; projectType: IacProjectTypes; }; meta: TestMeta; filesystemPolicy: boolean; vulnerabilities: AnnotatedIssue[]; dependencyCount: number; licensesPolicy: object | null; ignoreSettings: IgnoreSettings | null; targetFile: string; projectName: string; org: string; policy: string; isPrivate: boolean; targetFilePath: string; packageManager: IacProjectType; }; export declare type IacCustomPolicies = Record<string, { severity?: string; }>; export interface IacCustomRules { isEnabled?: boolean; ociRegistryURL?: string; ociRegistryTag?: string; } export interface IacEntitlements { iacCustomRulesEntitlement?: boolean; } export interface IacOrgSettings { meta: TestMeta; customPolicies: IacCustomPolicies; customRules?: IacCustomRules; entitlements?: IacEntitlements; } export interface TestMeta { isPrivate: boolean; isLicensesEnabled: boolean; org: string; ignoreSettings?: IgnoreSettings | null; projectId?: string; policy?: string; } export interface OpaWasmInstance { evaluate: (data: Record<string, any>) => { results: PolicyMetadata[]; }; setData: (data: Record<string, any>) => void; } export declare type SafeAnalyticsOutput = Omit<IacFileParsed | IacFileParseFailure, 'fileContent' | 'jsonContent' | 'engineType'>; export declare enum EngineType { Kubernetes = 0, Terraform = 1, CloudFormation = 2, ARM = 3, Custom = 4 } export interface PolicyMetadata { id?: string; publicId: string; type?: string; subType: string; title: string; documentation?: string; isGeneratedByCustomRule?: boolean; description?: string; severity: SEVERITY | 'none'; msg: string; issue: string; impact: string; resolve: string; references: string[]; remediation?: Partial<Record<'terraform' | 'cloudformation' | 'arm' | 'kubernetes', string>>; } export declare type IaCTestFlags = Pick<Options & TestOptions & PolicyOptions, 'org' | 'insecure' | 'debug' | 'experimental' | 'detectionDepth' | 'severityThreshold' | 'json' | 'sarif' | 'ignore-policy' | 'policy-path'> & { 'json-file-output'?: string; 'sarif-file-output'?: string; v?: boolean; version?: boolean; h?: boolean; help?: 'help'; q?: boolean; quiet?: boolean; path?: string; legacy?: boolean; rules?: string; } & TerraformPlanFlags; interface TerraformPlanFlags { scan?: TerraformPlanScanMode; } export declare enum TerraformPlanScanMode { DeltaScan = "resource-changes", FullScan = "planned-values" } export declare type IaCTestOptions = IaCTestFlags & { /** @deprecated Only used by the legacy `iac test` flow remove once local exec path is GA */ iacDirFiles?: Array<IacFileInDirectory>; }; export interface TerraformPlanResource { address: string; mode: string; type: string; name: string; values: Record<string, unknown>; index: number | string; } export interface TerraformPlanResourceChange extends Omit<TerraformPlanResource, 'values'> { change: { actions: ResourceActions; before: Record<string, unknown> | null; after: Record<string, unknown> | null; }; } export interface TerraformPlanJson { resource_changes: Array<TerraformPlanResourceChange>; } export interface TerraformScanInput { resource: Record<string, Record<string, unknown>>; data: Record<string, Record<string, unknown>>; } export declare type ResourceActions = ['no-op'] | ['create'] | ['read'] | ['update'] | ['delete', 'create'] | ['create', 'delete'] | ['delete']; export declare const VALID_RESOURCE_ACTIONS_FOR_DELTA_SCAN: ResourceActions[]; export declare const VALID_RESOURCE_ACTIONS_FOR_FULL_SCAN: ResourceActions[]; export declare enum IaCErrorCodes { FailedToInitLocalCacheError = 1000, FailedToCleanLocalCacheError = 1001, FailedToDownloadRulesError = 1002, FailedToExtractCustomRulesError = 1003, InvalidCustomRules = 1004, InvalidCustomRulesPath = 1005, NoFilesToScanError = 1010, FailedToLoadFileError = 1011, UnsupportedFileTypeError = 1020, InvalidJsonFileError = 1021, InvalidYamlFileError = 1022, FailedToDetectJsonConfigError = 1023, FailedToDetectYamlConfigError = 1024, MissingRequiredFieldsInKubernetesYamlError = 1031, FailedToParseHelmError = 1032, FailedToParseTerraformFileError = 1040, FailedToExtractResourcesInTerraformPlanError = 1052, FailedToBuildPolicyEngine = 1060, FailedToExecutePolicyEngine = 1061, FailedToFormatResults = 1070, FailedToExtractLineNumberError = 1071, FailedToGetIacOrgSettingsError = 1080, FlagError = 1090, FlagValueError = 1091, UnsupportedEntitlementFlagError = 1092, FailedToExecuteCustomRulesError = 1100, FailedToPullCustomBundleError = 1101, FailedToBuildOCIArtifactError = 1102, InvalidRemoteRegistryURLError = 1103, InvalidManifestSchemaVersionError = 1104, UnsupportedFeatureFlagPullError = 1105, UnsupportedEntitlementPullError = 1106 } export interface TestReturnValue { results: TestResult | TestResult[]; failures?: IacFileInDirectory[]; } export interface ImageManifest { schemaVersion: number; mediaType: string; config: ManifestConfig; layers: ManifestConfig[]; } export interface ManifestConfig { mediaType: string; size: number; digest: string; } export interface Layer { config: ManifestConfig; blob: Buffer; } export interface OCIPullOptions { username?: string; password?: string; reqOptions?: { accept?: string; indexContentType?: string; }; imageSavePath?: string; } export interface OCIRegistryURLComponents { registryBase: string; repo: string; tag: string; } export declare const manifestContentType = "application/vnd.oci.image.manifest.v1+json"; export declare const layerContentType = "application/vnd.oci.image.layer.v1.tar+gzip"; export declare enum PerformanceAnalyticsKey { InitLocalCache = "cache-init-ms", FileLoading = "file-loading-ms", FileParsing = "file-parsing-ms", FileScanning = "file-scanning-ms", OrgSettings = "org-settings-ms", CustomSeverities = "custom-severities-ms", ResultFormatting = "results-formatting-ms", UsageTracking = "usage-tracking-ms", CacheCleanup = "cache-cleanup-ms", Total = "total-iac-ms" } export {};