mobbdev 1.4.67 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/args/commands/upload_ai_blame.mjs +204 -130
- package/dist/index.mjs +409 -226
- package/package.json +1 -1
|
@@ -34,6 +34,18 @@ function getSdk(client, withWrapper = defaultWrapper) {
|
|
|
34
34
|
getAnalysisSubscription(variables, requestHeaders, signal) {
|
|
35
35
|
return withWrapper((wrappedRequestHeaders) => client.request({ document: GetAnalysisSubscriptionDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "getAnalysisSubscription", "subscription", variables);
|
|
36
36
|
},
|
|
37
|
+
GetOrganizationId(variables, requestHeaders, signal) {
|
|
38
|
+
return withWrapper((wrappedRequestHeaders) => client.request({ document: GetOrganizationIdDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "GetOrganizationId", "query", variables);
|
|
39
|
+
},
|
|
40
|
+
UpdateOrgScanPolicy(variables, requestHeaders, signal) {
|
|
41
|
+
return withWrapper((wrappedRequestHeaders) => client.request({ document: UpdateOrgScanPolicyDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "UpdateOrgScanPolicy", "mutation", variables);
|
|
42
|
+
},
|
|
43
|
+
GetReportFindingRuleIds(variables, requestHeaders, signal) {
|
|
44
|
+
return withWrapper((wrappedRequestHeaders) => client.request({ document: GetReportFindingRuleIdsDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "GetReportFindingRuleIds", "query", variables);
|
|
45
|
+
},
|
|
46
|
+
getGateVerdict(variables, requestHeaders, signal) {
|
|
47
|
+
return withWrapper((wrappedRequestHeaders) => client.request({ document: GetGateVerdictDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "getGateVerdict", "query", variables);
|
|
48
|
+
},
|
|
37
49
|
getAnalysis(variables, requestHeaders, signal) {
|
|
38
50
|
return withWrapper((wrappedRequestHeaders) => client.request({ document: GetAnalysisDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "getAnalysis", "query", variables);
|
|
39
51
|
},
|
|
@@ -150,7 +162,7 @@ function getSdk(client, withWrapper = defaultWrapper) {
|
|
|
150
162
|
}
|
|
151
163
|
};
|
|
152
164
|
}
|
|
153
|
-
var AiBlameInferenceType, FixQuestionInputType, Language, ManifestAction, Effort_To_Apply_Fix_Enum, Fix_Rating_Tag_Enum, Fix_Report_State_Enum, Fix_State_Enum, IssueLanguage_Enum, Pr_Status_Enum, Project_Role_Type_Enum, Scan_Source_Enum, Vulnerability_Report_Issue_Category_Enum, Vulnerability_Report_Issue_State_Enum, Vulnerability_Report_Issue_Tag_Enum, Vulnerability_Report_Vendor_Enum, Vulnerability_Severity_Enum, FixDetailsFragmentDoc, FixReportSummaryFieldsFragmentDoc, MeDocument, GetLastOrgAndNamedProjectDocument, GetLastOrgDocument, GetEncryptedApiTokenDocument, FixReportStateDocument, GetVulnerabilityReportPathsDocument, GetAnalysisSubscriptionDocument, GetAnalysisDocument, GetFixesDocument, GetVulByNodesMetadataDocument, GetFalsePositiveDocument, UpdateScmTokenDocument, UploadS3BucketInfoDocument, GetTracyDiffUploadUrlDocument, AnalyzeCommitForExtensionAiBlameDocument, GetAiBlameInferenceDocument, GetAiBlameAttributionPromptDocument, GetPromptSummaryDocument, UploadAiBlameInferencesInitDocument, FinalizeAiBlameInferencesUploadDocument, UploadTracyRecordsDocument, GetTracyRawDataUploadUrlDocument, DigestVulnerabilityReportDocument, SubmitVulnerabilityReportDocument, CreateCommunityUserDocument, CreateCliLoginDocument, PerformCliLoginDocument, SetQuarantineEnabledDocument, CreateProjectDocument, ValidateRepoUrlDocument, GitReferenceDocument, AutoPrAnalysisDocument, GetFixWithAnswersDocument, GetFixReportsByRepoUrlDocument, GetReportFixesDocument, GetLatestReportByRepoUrlDocument, UpdateDownloadedFixDataDocument, GetUserMvsAutoFixDocument, StreamBlameAiAnalysisRequestsDocument, StreamCommitBlameRequestsDocument, ScanSkillDocument, SkillVerdictsByMd5Document, LogMvsEventDocument, GetMvsProjectDocument, IssueTypesDocument, defaultWrapper;
|
|
165
|
+
var AiBlameInferenceType, FixQuestionInputType, Language, ManifestAction, Effort_To_Apply_Fix_Enum, Fix_Rating_Tag_Enum, Fix_Report_State_Enum, Fix_State_Enum, IssueLanguage_Enum, Pr_Status_Enum, Project_Role_Type_Enum, Scan_Source_Enum, Vulnerability_Report_Issue_Category_Enum, Vulnerability_Report_Issue_State_Enum, Vulnerability_Report_Issue_Tag_Enum, Vulnerability_Report_Vendor_Enum, Vulnerability_Severity_Enum, FixDetailsFragmentDoc, FixReportSummaryFieldsFragmentDoc, MeDocument, GetLastOrgAndNamedProjectDocument, GetLastOrgDocument, GetEncryptedApiTokenDocument, FixReportStateDocument, GetVulnerabilityReportPathsDocument, GetAnalysisSubscriptionDocument, GetOrganizationIdDocument, UpdateOrgScanPolicyDocument, GetReportFindingRuleIdsDocument, GetGateVerdictDocument, GetAnalysisDocument, GetFixesDocument, GetVulByNodesMetadataDocument, GetFalsePositiveDocument, UpdateScmTokenDocument, UploadS3BucketInfoDocument, GetTracyDiffUploadUrlDocument, AnalyzeCommitForExtensionAiBlameDocument, GetAiBlameInferenceDocument, GetAiBlameAttributionPromptDocument, GetPromptSummaryDocument, UploadAiBlameInferencesInitDocument, FinalizeAiBlameInferencesUploadDocument, UploadTracyRecordsDocument, GetTracyRawDataUploadUrlDocument, DigestVulnerabilityReportDocument, SubmitVulnerabilityReportDocument, CreateCommunityUserDocument, CreateCliLoginDocument, PerformCliLoginDocument, SetQuarantineEnabledDocument, CreateProjectDocument, ValidateRepoUrlDocument, GitReferenceDocument, AutoPrAnalysisDocument, GetFixWithAnswersDocument, GetFixReportsByRepoUrlDocument, GetReportFixesDocument, GetLatestReportByRepoUrlDocument, UpdateDownloadedFixDataDocument, GetUserMvsAutoFixDocument, StreamBlameAiAnalysisRequestsDocument, StreamCommitBlameRequestsDocument, ScanSkillDocument, SkillVerdictsByMd5Document, LogMvsEventDocument, GetMvsProjectDocument, IssueTypesDocument, defaultWrapper;
|
|
154
166
|
var init_client_generates = __esm({
|
|
155
167
|
"src/features/analysis/scm/generates/client_generates.ts"() {
|
|
156
168
|
"use strict";
|
|
@@ -558,6 +570,66 @@ var init_client_generates = __esm({
|
|
|
558
570
|
state
|
|
559
571
|
failReason
|
|
560
572
|
}
|
|
573
|
+
}
|
|
574
|
+
`;
|
|
575
|
+
GetOrganizationIdDocument = `
|
|
576
|
+
query GetOrganizationId {
|
|
577
|
+
organization {
|
|
578
|
+
id
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
`;
|
|
582
|
+
UpdateOrgScanPolicyDocument = `
|
|
583
|
+
mutation UpdateOrgScanPolicy($organizationId: String!, $policyJson: String) {
|
|
584
|
+
updateOrganizationScanPolicy(
|
|
585
|
+
organizationId: $organizationId
|
|
586
|
+
policyJson: $policyJson
|
|
587
|
+
) {
|
|
588
|
+
__typename
|
|
589
|
+
... on ScanPolicyUpdateSuccess {
|
|
590
|
+
storedPolicyJson
|
|
591
|
+
warnings
|
|
592
|
+
}
|
|
593
|
+
... on ScanPolicyValidationError {
|
|
594
|
+
error
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
`;
|
|
599
|
+
GetReportFindingRuleIdsDocument = `
|
|
600
|
+
query GetReportFindingRuleIds($fixReportId: uuid!) {
|
|
601
|
+
fixReport_by_pk(id: $fixReportId) {
|
|
602
|
+
vulnerabilityReport {
|
|
603
|
+
vulnerabilityReportIssues {
|
|
604
|
+
extraData(path: "rule_id")
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
`;
|
|
610
|
+
GetGateVerdictDocument = `
|
|
611
|
+
query getGateVerdict($fixReportId: String!) {
|
|
612
|
+
getGateVerdict(fixReportId: $fixReportId) {
|
|
613
|
+
__typename
|
|
614
|
+
... on GateVerdictSuccess {
|
|
615
|
+
blocking
|
|
616
|
+
blockingCount
|
|
617
|
+
totalIssues
|
|
618
|
+
criticalCount
|
|
619
|
+
highCount
|
|
620
|
+
mediumCount
|
|
621
|
+
lowCount
|
|
622
|
+
unclassifiedCount
|
|
623
|
+
description
|
|
624
|
+
degraded
|
|
625
|
+
}
|
|
626
|
+
... on GateVerdictNotReady {
|
|
627
|
+
state
|
|
628
|
+
}
|
|
629
|
+
... on GateVerdictError {
|
|
630
|
+
error
|
|
631
|
+
}
|
|
632
|
+
}
|
|
561
633
|
}
|
|
562
634
|
`;
|
|
563
635
|
GetAnalysisDocument = `
|
|
@@ -643,35 +715,20 @@ var init_client_generates = __esm({
|
|
|
643
715
|
}
|
|
644
716
|
`;
|
|
645
717
|
GetVulByNodesMetadataDocument = `
|
|
646
|
-
query getVulByNodesMetadata($
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
where: {_or: $filters, vulnerabilityReportIssue: {fixId: {_is_null: false}, vulnerabilityReportId: {_eq: $vulnerabilityReportId}}}
|
|
718
|
+
query getVulByNodesMetadata($pathFilters: [vulnerability_report_issue_bool_exp!], $vulnerabilityReportId: uuid!) {
|
|
719
|
+
vulnerabilityReportIssues: vulnerability_report_issue(
|
|
720
|
+
where: {vulnerabilityReportId: {_eq: $vulnerabilityReportId}, _or: $pathFilters}
|
|
650
721
|
) {
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
vulnerabilityReportIssueTags {
|
|
659
|
-
tag: vulnerability_report_issue_tag_value
|
|
660
|
-
}
|
|
722
|
+
id
|
|
723
|
+
safeIssueType
|
|
724
|
+
fixId
|
|
725
|
+
fpId
|
|
726
|
+
category
|
|
727
|
+
vulnerabilityReportIssueTags {
|
|
728
|
+
tag: vulnerability_report_issue_tag_value
|
|
661
729
|
}
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
where: {fixId: {_is_null: false}, vulnerabilityReportId: {_eq: $vulnerabilityReportId}, codeNodes: {_or: $filters}}
|
|
665
|
-
) {
|
|
666
|
-
aggregate {
|
|
667
|
-
count
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
nonFixablePrVuls: vulnerability_report_issue_aggregate(
|
|
671
|
-
where: {fixId: {_is_null: true}, vulnerabilityReportId: {_eq: $vulnerabilityReportId}, codeNodes: {_or: $filters}}
|
|
672
|
-
) {
|
|
673
|
-
aggregate {
|
|
674
|
-
count
|
|
730
|
+
codeNodesJson {
|
|
731
|
+
nodes
|
|
675
732
|
}
|
|
676
733
|
}
|
|
677
734
|
totalScanVulnerabilities: vulnerability_report_issue_aggregate(
|
|
@@ -681,26 +738,6 @@ var init_client_generates = __esm({
|
|
|
681
738
|
count
|
|
682
739
|
}
|
|
683
740
|
}
|
|
684
|
-
irrelevantVulnerabilityReportIssue: vulnerability_report(
|
|
685
|
-
where: {id: {_eq: $vulnerabilityReportId}}
|
|
686
|
-
) {
|
|
687
|
-
vulnerabilityReportIssues(
|
|
688
|
-
where: {fixId: {_is_null: true}, category: {_in: [Irrelevant, FalsePositive, Filtered]}, _not: {vulnerabilityReportIssueTags: {vulnerability_report_issue_tag_value: {_eq: SUPPRESSED}}}}
|
|
689
|
-
) {
|
|
690
|
-
id
|
|
691
|
-
safeIssueType
|
|
692
|
-
fixId
|
|
693
|
-
category
|
|
694
|
-
vulnerabilityReportIssueTags {
|
|
695
|
-
tag: vulnerability_report_issue_tag_value
|
|
696
|
-
}
|
|
697
|
-
codeNodes(order_by: {index: desc}, where: {_or: $filters}, limit: 1) {
|
|
698
|
-
path
|
|
699
|
-
startLine
|
|
700
|
-
}
|
|
701
|
-
fpId
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
741
|
}
|
|
705
742
|
`;
|
|
706
743
|
GetFalsePositiveDocument = `
|
|
@@ -1815,7 +1852,7 @@ var init_validations = __esm({
|
|
|
1815
1852
|
|
|
1816
1853
|
// src/features/analysis/scm/shared/src/types/types.ts
|
|
1817
1854
|
import { z as z7 } from "zod";
|
|
1818
|
-
var OrganizationScreenQueryParamsZ, ProjectPageQueryParamsZ, AnalysisPageQueryParamsZ, FixPageQueryParamsZ, IssuePageQueryParamsZ, CliLoginPageQueryParamsZ, AnalysisReportDigestedZ, IssueSharedStateZ2, ReportQueryResultZ, ReportFixesQueryFixZ, BaseVulnerabilityReportIssueZ,
|
|
1855
|
+
var OrganizationScreenQueryParamsZ, ProjectPageQueryParamsZ, AnalysisPageQueryParamsZ, FixPageQueryParamsZ, IssuePageQueryParamsZ, CliLoginPageQueryParamsZ, AnalysisReportDigestedZ, IssueSharedStateZ2, ReportQueryResultZ, ReportFixesQueryFixZ, BaseVulnerabilityReportIssueZ, VulnerabilityReportIssueWithCodeFilePathZ, GetReportIssuesQueryZ, FixReportByProjectZ, FixScreenQueryResultZ, FixPageQueryZ, GetReportFixesQueryZ, GetFixReportStatsQueryZ, ProjectVulnerabilityReport, GetProjectsQueryZ, ProjectPageQueryResultZ, GetProjectMembersDataZ, RepoArgsZ, scmCloudUrl, ScmType;
|
|
1819
1856
|
var init_types = __esm({
|
|
1820
1857
|
"src/features/analysis/scm/shared/src/types/types.ts"() {
|
|
1821
1858
|
"use strict";
|
|
@@ -2077,11 +2114,6 @@ var init_types = __esm({
|
|
|
2077
2114
|
),
|
|
2078
2115
|
sharedState: VulnerabilityReportIssueSharedStateZ
|
|
2079
2116
|
});
|
|
2080
|
-
VulnerabilityReportIssueZ = BaseVulnerabilityReportIssueZ.extend(
|
|
2081
|
-
z7.object({
|
|
2082
|
-
codeNodes: z7.array(z7.object({ path: z7.string() }))
|
|
2083
|
-
}).shape
|
|
2084
|
-
);
|
|
2085
2117
|
VulnerabilityReportIssueWithCodeFilePathZ = BaseVulnerabilityReportIssueZ.extend(
|
|
2086
2118
|
z7.object({
|
|
2087
2119
|
codeFilePath: z7.string().nullable()
|
|
@@ -4354,6 +4386,17 @@ var defaultLogger = {
|
|
|
4354
4386
|
// src/utils/index.ts
|
|
4355
4387
|
var sleep = (ms = 2e3) => new Promise((r) => setTimeout(r, ms));
|
|
4356
4388
|
var CliError = class extends Error {
|
|
4389
|
+
constructor(message, options = {}) {
|
|
4390
|
+
super(message);
|
|
4391
|
+
/**
|
|
4392
|
+
* The process exit code index.ts maps this error to. Defaults to 1 (plain
|
|
4393
|
+
* operational error) so every existing throw keeps its behavior; 2 means the
|
|
4394
|
+
* gate policy blocked the run (MOBB-3810), so CI can tell "your code is
|
|
4395
|
+
* gated" from "the tool broke".
|
|
4396
|
+
*/
|
|
4397
|
+
__publicField(this, "exitCode");
|
|
4398
|
+
this.exitCode = options.exitCode ?? 1;
|
|
4399
|
+
}
|
|
4357
4400
|
};
|
|
4358
4401
|
|
|
4359
4402
|
// src/commands/AuthManager.ts
|
|
@@ -4959,65 +5002,104 @@ init_client_generates();
|
|
|
4959
5002
|
// src/features/analysis/graphql/types.ts
|
|
4960
5003
|
init_client_generates();
|
|
4961
5004
|
import { z as z22 } from "zod";
|
|
4962
|
-
|
|
4963
|
-
|
|
5005
|
+
function codeNodesJsonPathFilter(path7) {
|
|
5006
|
+
return { codeNodesJson: { nodes: { _contains: [{ path: path7 }] } } };
|
|
5007
|
+
}
|
|
5008
|
+
var VulByNodesMetadataCodeNodeZ = z22.object({
|
|
5009
|
+
index: z22.number().int(),
|
|
4964
5010
|
path: z22.string(),
|
|
4965
|
-
startLine: z22.number(),
|
|
4966
|
-
|
|
4967
|
-
|
|
4968
|
-
|
|
4969
|
-
|
|
4970
|
-
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
|
|
4974
|
-
|
|
4975
|
-
})
|
|
4976
|
-
});
|
|
4977
|
-
var VulnerabilityReportIssueNoFixCodeNodeZ = z22.object({
|
|
4978
|
-
vulnerabilityReportIssues: z22.array(
|
|
5011
|
+
startLine: z22.number().int(),
|
|
5012
|
+
endLine: z22.number().int()
|
|
5013
|
+
}).loose();
|
|
5014
|
+
var VulnerabilityReportIssueWithNodesZ = z22.object({
|
|
5015
|
+
id: z22.string(),
|
|
5016
|
+
fixId: z22.string().nullable(),
|
|
5017
|
+
category: z22.enum(Vulnerability_Report_Issue_Category_Enum),
|
|
5018
|
+
safeIssueType: z22.string(),
|
|
5019
|
+
fpId: z22.guid().nullable(),
|
|
5020
|
+
vulnerabilityReportIssueTags: z22.array(
|
|
4979
5021
|
z22.object({
|
|
4980
|
-
|
|
4981
|
-
fixId: z22.string().nullable(),
|
|
4982
|
-
category: z22.enum(Vulnerability_Report_Issue_Category_Enum),
|
|
4983
|
-
safeIssueType: z22.string(),
|
|
4984
|
-
fpId: z22.guid().nullable(),
|
|
4985
|
-
codeNodes: z22.array(
|
|
4986
|
-
z22.object({
|
|
4987
|
-
path: z22.string(),
|
|
4988
|
-
startLine: z22.number()
|
|
4989
|
-
})
|
|
4990
|
-
),
|
|
4991
|
-
vulnerabilityReportIssueTags: z22.array(
|
|
4992
|
-
z22.object({
|
|
4993
|
-
tag: z22.enum(Vulnerability_Report_Issue_Tag_Enum)
|
|
4994
|
-
})
|
|
4995
|
-
)
|
|
5022
|
+
tag: z22.enum(Vulnerability_Report_Issue_Tag_Enum)
|
|
4996
5023
|
})
|
|
4997
|
-
)
|
|
5024
|
+
),
|
|
5025
|
+
codeNodesJson: z22.object({ nodes: z22.unknown() }).nullable()
|
|
4998
5026
|
});
|
|
4999
5027
|
var GetVulByNodesMetadataZ = z22.object({
|
|
5000
|
-
|
|
5001
|
-
nonFixablePrVuls: z22.object({
|
|
5002
|
-
aggregate: z22.object({
|
|
5003
|
-
count: z22.number()
|
|
5004
|
-
})
|
|
5005
|
-
}),
|
|
5006
|
-
fixablePrVuls: z22.object({
|
|
5007
|
-
aggregate: z22.object({
|
|
5008
|
-
count: z22.number()
|
|
5009
|
-
})
|
|
5010
|
-
}),
|
|
5028
|
+
vulnerabilityReportIssues: z22.array(VulnerabilityReportIssueWithNodesZ),
|
|
5011
5029
|
totalScanVulnerabilities: z22.object({
|
|
5012
5030
|
aggregate: z22.object({
|
|
5013
5031
|
count: z22.number()
|
|
5014
5032
|
})
|
|
5015
|
-
})
|
|
5016
|
-
irrelevantVulnerabilityReportIssue: z22.array(
|
|
5017
|
-
VulnerabilityReportIssueNoFixCodeNodeZ
|
|
5018
|
-
)
|
|
5033
|
+
})
|
|
5019
5034
|
});
|
|
5020
5035
|
|
|
5036
|
+
// src/features/analysis/graphql/matchVulByNodesMetadata.ts
|
|
5037
|
+
var IRRELEVANT_CATEGORIES = /* @__PURE__ */ new Set([
|
|
5038
|
+
"Irrelevant",
|
|
5039
|
+
"FalsePositive",
|
|
5040
|
+
"Filtered"
|
|
5041
|
+
]);
|
|
5042
|
+
var SUPPRESSED_TAG = "SUPPRESSED";
|
|
5043
|
+
function nodeMatchesHunks(node, hunks) {
|
|
5044
|
+
return hunks.some(
|
|
5045
|
+
(hunk) => hunk.path === node.path && hunk.ranges.some(
|
|
5046
|
+
({ startLine, endLine }) => node.startLine >= startLine && node.startLine <= endLine || node.endLine >= startLine && node.endLine <= endLine
|
|
5047
|
+
)
|
|
5048
|
+
);
|
|
5049
|
+
}
|
|
5050
|
+
function matchingNodes(issue, hunks) {
|
|
5051
|
+
const rawNodes = issue.codeNodesJson?.nodes;
|
|
5052
|
+
if (!Array.isArray(rawNodes)) {
|
|
5053
|
+
return [];
|
|
5054
|
+
}
|
|
5055
|
+
return rawNodes.map((rawNode) => VulByNodesMetadataCodeNodeZ.safeParse(rawNode)).filter((parsed) => parsed.success).map((parsed) => parsed.data).filter((node) => nodeMatchesHunks(node, hunks)).sort((a, b) => b.index - a.index);
|
|
5056
|
+
}
|
|
5057
|
+
function matchVulByNodesMetadata(issues, hunks) {
|
|
5058
|
+
const vulnerabilityReportIssueCodeNodes = [];
|
|
5059
|
+
let fixablePrVuls = 0;
|
|
5060
|
+
let nonFixablePrVuls = 0;
|
|
5061
|
+
const irrelevantVulnerabilityReportIssues = [];
|
|
5062
|
+
for (const issue of issues) {
|
|
5063
|
+
const nodes = matchingNodes(issue, hunks);
|
|
5064
|
+
const bestNode = nodes[0];
|
|
5065
|
+
if (issue.fixId !== null && bestNode) {
|
|
5066
|
+
fixablePrVuls += 1;
|
|
5067
|
+
vulnerabilityReportIssueCodeNodes.push({
|
|
5068
|
+
vulnerabilityReportIssueId: issue.id,
|
|
5069
|
+
path: bestNode.path,
|
|
5070
|
+
startLine: bestNode.startLine,
|
|
5071
|
+
vulnerabilityReportIssue: {
|
|
5072
|
+
fixId: issue.fixId,
|
|
5073
|
+
category: issue.category,
|
|
5074
|
+
safeIssueType: issue.safeIssueType,
|
|
5075
|
+
vulnerabilityReportIssueTags: issue.vulnerabilityReportIssueTags
|
|
5076
|
+
}
|
|
5077
|
+
});
|
|
5078
|
+
} else if (issue.fixId === null && bestNode) {
|
|
5079
|
+
nonFixablePrVuls += 1;
|
|
5080
|
+
}
|
|
5081
|
+
if (issue.fixId === null && IRRELEVANT_CATEGORIES.has(issue.category) && !issue.vulnerabilityReportIssueTags.some(
|
|
5082
|
+
(issueTag) => issueTag.tag === SUPPRESSED_TAG
|
|
5083
|
+
)) {
|
|
5084
|
+
irrelevantVulnerabilityReportIssues.push({
|
|
5085
|
+
id: issue.id,
|
|
5086
|
+
safeIssueType: issue.safeIssueType,
|
|
5087
|
+
fixId: issue.fixId,
|
|
5088
|
+
category: issue.category,
|
|
5089
|
+
vulnerabilityReportIssueTags: issue.vulnerabilityReportIssueTags,
|
|
5090
|
+
codeNodes: bestNode ? [{ path: bestNode.path, startLine: bestNode.startLine }] : [],
|
|
5091
|
+
fpId: issue.fpId
|
|
5092
|
+
});
|
|
5093
|
+
}
|
|
5094
|
+
}
|
|
5095
|
+
return {
|
|
5096
|
+
vulnerabilityReportIssueCodeNodes,
|
|
5097
|
+
fixablePrVuls,
|
|
5098
|
+
nonFixablePrVuls,
|
|
5099
|
+
irrelevantVulnerabilityReportIssues
|
|
5100
|
+
};
|
|
5101
|
+
}
|
|
5102
|
+
|
|
5021
5103
|
// src/features/analysis/graphql/gql.ts
|
|
5022
5104
|
var debug7 = Debug6("mobbdev:gql");
|
|
5023
5105
|
function isAuthError(error) {
|
|
@@ -5225,44 +5307,28 @@ var GQLClient = class {
|
|
|
5225
5307
|
hunks,
|
|
5226
5308
|
vulnerabilityReportId
|
|
5227
5309
|
}) {
|
|
5228
|
-
const
|
|
5229
|
-
const filter = {
|
|
5230
|
-
path: { _eq: hunk.path },
|
|
5231
|
-
_or: hunk.ranges.flatMap(({ endLine, startLine }) => {
|
|
5232
|
-
return [
|
|
5233
|
-
{ startLine: { _gte: startLine, _lte: endLine } },
|
|
5234
|
-
{ endLine: { _gte: startLine, _lte: endLine } }
|
|
5235
|
-
];
|
|
5236
|
-
})
|
|
5237
|
-
};
|
|
5238
|
-
return filter;
|
|
5239
|
-
});
|
|
5310
|
+
const pathFilters = hunks.map((hunk) => codeNodesJsonPathFilter(hunk.path));
|
|
5240
5311
|
const getVulByNodesMetadataRes = await this._clientSdk.getVulByNodesMetadata({
|
|
5241
|
-
|
|
5312
|
+
pathFilters,
|
|
5242
5313
|
vulnerabilityReportId
|
|
5243
5314
|
});
|
|
5244
5315
|
const parsedGetVulByNodesMetadataRes = GetVulByNodesMetadataZ.parse(
|
|
5245
5316
|
getVulByNodesMetadataRes
|
|
5246
5317
|
);
|
|
5247
|
-
const
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
|
|
5255
|
-
|
|
5256
|
-
const nonFixablePrVuls = parsedGetVulByNodesMetadataRes.nonFixablePrVuls.aggregate.count;
|
|
5257
|
-
const fixablePrVuls = parsedGetVulByNodesMetadataRes.fixablePrVuls.aggregate.count;
|
|
5318
|
+
const {
|
|
5319
|
+
vulnerabilityReportIssueCodeNodes,
|
|
5320
|
+
fixablePrVuls,
|
|
5321
|
+
nonFixablePrVuls,
|
|
5322
|
+
irrelevantVulnerabilityReportIssues
|
|
5323
|
+
} = matchVulByNodesMetadata(
|
|
5324
|
+
parsedGetVulByNodesMetadataRes.vulnerabilityReportIssues,
|
|
5325
|
+
hunks
|
|
5326
|
+
);
|
|
5258
5327
|
const totalScanVulnerabilities = parsedGetVulByNodesMetadataRes.totalScanVulnerabilities.aggregate.count;
|
|
5259
5328
|
const vulnerabilitiesOutsidePr = totalScanVulnerabilities - nonFixablePrVuls - fixablePrVuls;
|
|
5260
5329
|
const totalPrVulnerabilities = nonFixablePrVuls + fixablePrVuls;
|
|
5261
|
-
const irrelevantVulnerabilityReportIssues = parsedGetVulByNodesMetadataRes.irrelevantVulnerabilityReportIssue?.[0]?.vulnerabilityReportIssues ?? [];
|
|
5262
5330
|
return {
|
|
5263
|
-
vulnerabilityReportIssueCodeNodes
|
|
5264
|
-
uniqueVulByNodesMetadata
|
|
5265
|
-
),
|
|
5331
|
+
vulnerabilityReportIssueCodeNodes,
|
|
5266
5332
|
nonFixablePrVuls,
|
|
5267
5333
|
fixablePrVuls,
|
|
5268
5334
|
totalScanVulnerabilities,
|
|
@@ -5470,6 +5536,14 @@ var GQLClient = class {
|
|
|
5470
5536
|
}
|
|
5471
5537
|
return res.analysis;
|
|
5472
5538
|
}
|
|
5539
|
+
/**
|
|
5540
|
+
* The gate verdict for a Mobb-scan report (MOBB-3810). The backend is the
|
|
5541
|
+
* only decider; the caller maps the answer onto an exit code.
|
|
5542
|
+
*/
|
|
5543
|
+
async getGateVerdict(fixReportId) {
|
|
5544
|
+
const res = await this._clientSdk.getGateVerdict({ fixReportId });
|
|
5545
|
+
return res.getGateVerdict;
|
|
5546
|
+
}
|
|
5473
5547
|
async autoPrAnalysis({
|
|
5474
5548
|
analysisId,
|
|
5475
5549
|
commitDirectly,
|