UNPKG

deepsource-mcp-server

Version:
570 lines (569 loc) 15.7 kB
/** * @fileoverview GraphQL response interfaces for the DeepSource API * * This module defines type-safe interfaces for GraphQL responses from the DeepSource API. * These interfaces help ensure that responses are properly typed throughout the codebase. */ import { AnalyzerShortcode, BranchName, CommitOid, GraphQLNodeId, RunId } from './branded.js'; /** * Common GraphQL error object */ export interface GraphQLError { /** Error message */ message: string; /** Locations in the query where the error occurred */ locations?: Array<{ line: number; column: number; }>; /** Path in the GraphQL response associated with the error */ path?: string[]; /** Additional error metadata */ extensions?: Record<string, unknown>; } /** * Common GraphQL response wrapper */ export interface GraphQLResponse<T> { /** Response data if successful */ data?: T; /** Array of errors if any occurred */ errors?: GraphQLError[]; } /** * Common GraphQL page info for cursor-based pagination */ export interface GraphQLPageInfo { /** Whether there are more items after the current page */ hasNextPage: boolean; /** Whether there are more items before the current page */ hasPreviousPage: boolean; /** Cursor pointing to the first item in the current page */ startCursor?: string; /** Cursor pointing to the last item in the current page */ endCursor?: string; } /** * Common GraphQL edge type for Relay connection pattern */ export interface GraphQLEdge<T> { /** Node containing the actual data */ node: T; /** Cursor for this node (optional, sometimes not returned) */ cursor?: string; } /** * Common GraphQL connection pattern for paginated lists */ export interface GraphQLConnection<T> { /** Pagination information */ pageInfo: GraphQLPageInfo; /** Total count of items (not just current page) */ totalCount: number; /** Edges containing the actual data nodes */ edges: GraphQLEdge<T>[]; } /** * Repository node in the DeepSource API */ export interface GraphQLRepositoryNode { /** Repository name */ name?: string; /** Repository ID */ id?: GraphQLNodeId; /** Default branch name */ defaultBranch?: string; /** Repository DSN (DeepSource Number) used as project key */ dsn?: string; /** Whether the repository is private */ isPrivate?: boolean; /** Whether the repository is activated in DeepSource */ isActivated?: boolean; /** Version control provider (e.g., 'GITHUB', 'GITLAB') */ vcsProvider?: string; } /** * Account node in the DeepSource API */ export interface GraphQLAccountNode { /** Account login (username) */ login: string; /** Repositories in this account */ repositories?: { /** Repository edges */ edges?: GraphQLEdge<GraphQLRepositoryNode>[]; }; } /** * Viewer response for the projects query */ export interface ViewerProjectsResponse { /** Current user information - Production API format */ viewer?: { /** User email */ email?: string; /** Accounts associated with this user */ accounts?: { /** Account edges */ edges?: GraphQLEdge<GraphQLAccountNode>[]; }; }; /** Test mock format - for backward compatibility */ data?: { /** Current user information */ viewer?: { /** User email */ email?: string; /** Accounts associated with this user */ accounts?: { /** Account edges */ edges?: GraphQLEdge<GraphQLAccountNode>[]; }; }; }; } /** * Issue node in the DeepSource API */ export interface GraphQLIssueNode { /** Issue ID */ id?: GraphQLNodeId; /** Issue shortcode */ shortcode?: string; /** Issue title */ title?: string; /** Issue category */ category?: string; /** Issue severity */ severity?: string; /** Issue description */ description?: string; /** Status of the issue */ status?: string; /** Tags associated with the issue */ tags?: string[]; } /** * Issue occurrence node in the DeepSource API */ export interface GraphQLOccurrenceNode { /** Occurrence ID */ id?: GraphQLNodeId; /** File path where the issue occurred */ path?: string; /** Starting line number */ beginLine?: number; /** Ending line number */ endLine?: number; /** Starting column number */ beginColumn?: number; /** Ending column number */ endColumn?: number; /** Occurrence title */ title?: string; /** Issue details */ issue?: GraphQLIssueNode; } /** * Repository issues response */ export interface RepositoryIssuesResponse { /** Response data */ data?: { /** Repository information */ repository?: { /** Repository name */ name?: string; /** Default branch */ defaultBranch?: string; /** Repository DSN */ dsn?: string; /** Whether repository is private */ isPrivate?: boolean; /** Issues in the repository */ issues?: GraphQLConnection<{ /** Issue node */ id?: GraphQLNodeId; /** Issue details */ issue?: GraphQLIssueNode; /** Issue occurrences */ occurrences?: GraphQLConnection<GraphQLOccurrenceNode>; }>; }; }; } /** * Occurrence distribution by analyzer */ export interface GraphQLOccurrenceDistributionByAnalyzer { /** Analyzer shortcode */ analyzerShortcode?: AnalyzerShortcode; /** Number of issues introduced */ introduced?: number; } /** * Occurrence distribution by category */ export interface GraphQLOccurrenceDistributionByCategory { /** Category of issues */ category?: string; /** Number of issues introduced */ introduced?: number; } /** * Run summary in the DeepSource API */ export interface GraphQLRunSummary { /** Number of new issues introduced in this run */ occurrencesIntroduced?: number; /** Number of issues resolved in this run */ occurrencesResolved?: number; /** Number of issues suppressed in this run */ occurrencesSuppressed?: number; /** Distribution of issues by analyzer */ occurrenceDistributionByAnalyzer?: GraphQLOccurrenceDistributionByAnalyzer[]; /** Distribution of issues by category */ occurrenceDistributionByCategory?: GraphQLOccurrenceDistributionByCategory[]; } /** * Analyzer node in the DeepSource API */ export interface GraphQLAnalyzerNode { /** Analyzer shortcode */ shortcode?: AnalyzerShortcode; } /** * Check node in the DeepSource API */ export interface GraphQLCheckNode { /** Analyzer information */ analyzer?: GraphQLAnalyzerNode; /** Occurrences for this check */ occurrences?: GraphQLConnection<GraphQLOccurrenceNode>; } /** * Run node in the DeepSource API */ export interface GraphQLRunNode { /** Run ID */ id?: GraphQLNodeId; /** Run UID */ runUid?: RunId; /** Commit hash that this run analyzed */ commitOid?: CommitOid; /** Branch name for the run */ branchName?: BranchName; /** Base commit hash used for comparison */ baseOid?: CommitOid; /** Current status of the run */ status?: string; /** Timestamp when the run was created */ createdAt?: string; /** Timestamp when the run was last updated */ updatedAt?: string; /** Timestamp when the run was finished (if completed) */ finishedAt?: string; /** Summary of results from the run */ summary?: GraphQLRunSummary; /** Repository information */ repository?: { /** Repository name */ name?: string; /** Repository ID */ id?: GraphQLNodeId; }; /** Checks performed in this run */ checks?: GraphQLConnection<GraphQLCheckNode>; } /** * Repository runs response */ export interface RepositoryRunsResponse { /** Response data */ data?: { /** Repository information */ repository?: { /** Repository name */ name?: string; /** Repository ID */ id?: GraphQLNodeId; /** Analysis runs for this repository */ analysisRuns?: GraphQLConnection<GraphQLRunNode>; }; }; } /** * Run response */ export interface RunResponse { /** Response data */ data?: { /** Run details */ run?: GraphQLRunNode; }; } /** * Recent run response */ export interface RecentRunResponse { /** Response data */ data?: { /** Repository information */ repository?: { /** Analysis runs for this repository */ runs?: { /** Run edges */ edges?: GraphQLEdge<GraphQLRunNode>[]; }; }; }; } /** * Run issues response */ export interface RunIssuesResponse { /** Response data */ data?: { /** Run information */ run?: { /** Checks performed in this run */ checks?: { /** Check edges */ edges?: GraphQLEdge<GraphQLCheckNode>[]; }; }; }; } /** * Package node in the DeepSource API */ export interface GraphQLPackageNode { /** Package ID */ id?: GraphQLNodeId; /** Ecosystem (e.g., "npm", "pypi") */ ecosystem?: string; /** Package name */ name?: string; /** Package URL */ purl?: string; } /** * Package version node in the DeepSource API */ export interface GraphQLPackageVersionNode { /** Version ID */ id?: GraphQLNodeId; /** Version string */ version?: string; /** Version type */ versionType?: string; } /** * Vulnerability node in the DeepSource API */ export interface GraphQLVulnerabilityNode { /** Vulnerability ID */ id?: GraphQLNodeId; /** Vulnerability identifier (e.g., CVE number) */ identifier?: string; /** Alternative identifiers for this vulnerability */ aliases?: string[]; /** Brief summary of the vulnerability */ summary?: string; /** Detailed description of the vulnerability */ details?: string; /** When the vulnerability was published */ publishedAt?: string; /** When the vulnerability information was last updated */ updatedAt?: string; /** When the vulnerability was withdrawn (if applicable) */ withdrawnAt?: string; /** Severity rating */ severity?: string; /** CVSS v2 vector string */ cvssV2Vector?: string; /** CVSS v2 base score */ cvssV2BaseScore?: number; /** CVSS v2 severity */ cvssV2Severity?: string; /** CVSS v3 vector string */ cvssV3Vector?: string; /** CVSS v3 base score */ cvssV3BaseScore?: number; /** CVSS v3 severity */ cvssV3Severity?: string; /** CVSS v4 vector string */ cvssV4Vector?: string; /** CVSS v4 base score */ cvssV4BaseScore?: number; /** CVSS v4 severity */ cvssV4Severity?: string; /** EPSS score */ epssScore?: number; /** EPSS percentile */ epssPercentile?: number; /** Versions where the vulnerability was introduced */ introducedVersions?: string[]; /** Versions where the vulnerability was fixed */ fixedVersions?: string[]; /** Reference URLs for more information */ referenceUrls?: string[]; } /** * Dependency vulnerability node in the DeepSource API */ export interface GraphQLDependencyVulnerabilityNode { /** Vulnerability node ID */ id?: GraphQLNodeId; /** Package information */ package?: GraphQLPackageNode; /** Package version information */ packageVersion?: GraphQLPackageVersionNode; /** Vulnerability details */ vulnerability?: GraphQLVulnerabilityNode; /** Reachability information */ reachability?: string; /** Fixability information */ fixability?: string; } /** * Vulnerabilities response */ export interface VulnerabilitiesResponse { /** Response data */ data?: { /** Repository information */ repository?: { /** Dependency vulnerabilities */ dependencyVulnerabilities?: GraphQLConnection<GraphQLDependencyVulnerabilityNode>; }; }; } /** * Metric item node in the DeepSource API */ export interface GraphQLMetricItemNode { /** Item ID */ id?: GraphQLNodeId; /** Metric key */ key?: string; /** Threshold value */ threshold?: number; /** Latest measured value */ latestValue?: number; /** Display string for the latest value */ latestValueDisplay?: string; /** Status of the threshold check */ thresholdStatus?: string; } /** * Metric node in the DeepSource API */ export interface GraphQLMetricNode { /** Metric name */ name?: string; /** Metric shortcode */ shortcode?: string; /** Metric description */ description?: string; /** Whether higher values are better (true) or worse (false) */ positiveDirection?: boolean; /** Unit of measurement */ unit?: string; /** Minimum allowed value */ minValueAllowed?: number; /** Maximum allowed value */ maxValueAllowed?: number; /** Whether the metric is reported */ isReported?: boolean; /** Whether threshold enforcement is enabled */ isThresholdEnforced?: boolean; /** Metric items */ items?: GraphQLMetricItemNode[]; } /** * Quality metrics response */ export interface QualityMetricsResponse { /** Response data */ data?: { /** Repository information */ repository?: { /** Repository ID */ id?: GraphQLNodeId; /** Metrics for this repository */ metrics?: { /** Metric edges */ edges?: GraphQLEdge<GraphQLMetricNode>[]; }; }; }; } /** * Metric update response */ export interface MetricUpdateResponse { /** Response data */ data?: { /** Result of setting metric threshold */ setMetricThreshold?: { /** Whether the operation was successful */ ok?: boolean; }; /** Result of updating metric setting */ updateMetricSetting?: { /** Whether the operation was successful */ ok?: boolean; }; }; } /** * Security issue statistics node in the DeepSource API */ export interface GraphQLSecurityIssueStatsNode { /** Issue key */ key?: string; /** Issue title */ title?: string; /** Occurrence counts */ occurrence?: { /** Critical severity count */ critical?: number; /** Major severity count */ major?: number; /** Minor severity count */ minor?: number; /** Total count */ total?: number; }; } /** * Compliance report node in the DeepSource API */ export interface GraphQLComplianceReportNode { /** Report key */ key?: string; /** Report title */ title?: string; /** Current value */ currentValue?: number; /** Status of compliance */ status?: string; /** Security issue statistics */ securityIssueStats?: GraphQLSecurityIssueStatsNode[]; /** Trend data */ trends?: Record<string, unknown>; } /** * Compliance report response */ export interface ComplianceReportResponse { /** Response data */ data?: { /** Repository information */ repository?: { /** Compliance report */ complianceReport?: GraphQLComplianceReportNode; }; }; }