deepsource-mcp-server
Version:
Model Context Protocol server for DeepSource
570 lines (569 loc) • 15.7 kB
TypeScript
/**
* @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;
};
};
}