mobbdev 0.0.106 → 0.0.108

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.
Files changed (3) hide show
  1. package/.env +4 -2
  2. package/dist/index.mjs +451 -570
  3. package/package.json +11 -4
package/.env CHANGED
@@ -1,7 +1,9 @@
1
- # production@v15
1
+ # production@v17
2
2
  WEB_LOGIN_URL="https://app.mobb.ai/cli-login"
3
3
  API_URL="https://api.mobb.ai/v1/graphql"
4
4
  WEB_APP_URL="https://app.mobb.ai"
5
5
  GITLAB_API_TOKEN=""
6
6
  GITHUB_API_TOKEN=""
7
- ADO_TEST_ACCESS_TOKEN=""
7
+ ADO_TEST_ACCESS_TOKEN=""
8
+ HASURA_ACCESS_KEY=""
9
+ LOCAL_GRAPHQL_ENDPOINT=""
package/dist/index.mjs CHANGED
@@ -55,7 +55,9 @@ var SCANNERS = {
55
55
  var SupportedScannersZ = z.enum([SCANNERS.Checkmarx, SCANNERS.Snyk]);
56
56
  var envVariablesSchema = z.object({
57
57
  WEB_APP_URL: z.string(),
58
- API_URL: z.string()
58
+ API_URL: z.string(),
59
+ HASURA_ACCESS_KEY: z.string(),
60
+ LOCAL_GRAPHQL_ENDPOINT: z.string()
59
61
  }).required();
60
62
  var envVariables = envVariablesSchema.parse(process.env);
61
63
  debug("config %o", envVariables);
@@ -90,6 +92,8 @@ var mobbAscii = `
90
92
  var PROJECT_DEFAULT_NAME = "My first project";
91
93
  var WEB_APP_URL = envVariables.WEB_APP_URL;
92
94
  var API_URL = envVariables.API_URL;
95
+ var HASURA_ACCESS_KEY = envVariables.HASURA_ACCESS_KEY;
96
+ var LOCAL_GRAPHQL_ENDPOINT = envVariables.LOCAL_GRAPHQL_ENDPOINT;
93
97
  var errorMessages = {
94
98
  missingCxProjectName: `project name ${chalk.bold(
95
99
  "(--cx-project-name)"
@@ -118,6 +122,328 @@ import os2 from "node:os";
118
122
  import path6 from "node:path";
119
123
  import { pipeline } from "node:stream/promises";
120
124
 
125
+ // src/generates/client_generates.ts
126
+ var MeDocument = `
127
+ query Me {
128
+ me {
129
+ id
130
+ email
131
+ scmConfigs {
132
+ id
133
+ orgId
134
+ refreshToken
135
+ scmType
136
+ scmUrl
137
+ scmUsername
138
+ token
139
+ tokenLastUpdate
140
+ userId
141
+ scmOrg
142
+ isTokenAvailable
143
+ }
144
+ }
145
+ }
146
+ `;
147
+ var GetOrgAndProjectIdDocument = `
148
+ query getOrgAndProjectId {
149
+ users: user {
150
+ userOrganizationsAndUserOrganizationRoles {
151
+ organization {
152
+ id
153
+ projects(order_by: {updatedAt: desc}) {
154
+ id
155
+ name
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ `;
162
+ var GetEncryptedApiTokenDocument = `
163
+ query GetEncryptedApiToken($loginId: uuid!) {
164
+ cli_login_by_pk(id: $loginId) {
165
+ encryptedApiToken
166
+ }
167
+ }
168
+ `;
169
+ var FixReportStateDocument = `
170
+ query FixReportState($id: uuid!) {
171
+ fixReport_by_pk(id: $id) {
172
+ state
173
+ }
174
+ }
175
+ `;
176
+ var GetVulnerabilityReportPathsDocument = `
177
+ query GetVulnerabilityReportPaths($vulnerabilityReportId: uuid!) {
178
+ vulnerability_report_path(
179
+ where: {vulnerabilityReportId: {_eq: $vulnerabilityReportId}}
180
+ ) {
181
+ path
182
+ }
183
+ }
184
+ `;
185
+ var GetAnalysisDocument = `
186
+ subscription getAnalysis($analysisId: uuid!) {
187
+ analysis: fixReport_by_pk(id: $analysisId) {
188
+ id
189
+ state
190
+ }
191
+ }
192
+ `;
193
+ var GetAnalsyisDocument = `
194
+ query getAnalsyis($analysisId: uuid!) {
195
+ analysis: fixReport_by_pk(id: $analysisId) {
196
+ id
197
+ state
198
+ repo {
199
+ commitSha
200
+ pullRequest
201
+ }
202
+ vulnerabilityReportId
203
+ vulnerabilityReport {
204
+ projectId
205
+ project {
206
+ organizationId
207
+ }
208
+ file {
209
+ signedFile {
210
+ url
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ `;
217
+ var GetFixesDocument = `
218
+ query getFixes($filters: fix_bool_exp!) {
219
+ fixes: fix(where: $filters) {
220
+ issueType
221
+ id
222
+ patchAndQuestions {
223
+ __typename
224
+ ... on FixData {
225
+ patch
226
+ }
227
+ }
228
+ }
229
+ }
230
+ `;
231
+ var GetVulByNodesMetadataDocument = `
232
+ query getVulByNodesMetadata($filters: [vulnerability_report_issue_code_node_bool_exp!], $vulnerabilityReportId: uuid!) {
233
+ vulnerabilityReportIssueCodeNodes: vulnerability_report_issue_code_node(
234
+ order_by: {index: desc}
235
+ where: {_or: $filters, vulnerabilityReportIssue: {fixId: {_is_null: false}, vulnerabilityReportId: {_eq: $vulnerabilityReportId}}}
236
+ ) {
237
+ vulnerabilityReportIssueId
238
+ path
239
+ startLine
240
+ vulnerabilityReportIssue {
241
+ issueType
242
+ fixId
243
+ }
244
+ }
245
+ fixablePrVuls: vulnerability_report_issue_aggregate(
246
+ where: {fixId: {_is_null: false}, vulnerabilityReportId: {_eq: $vulnerabilityReportId}, codeNodes: {_or: $filters}}
247
+ ) {
248
+ aggregate {
249
+ count
250
+ }
251
+ }
252
+ nonFixablePrVuls: vulnerability_report_issue_aggregate(
253
+ where: {fixId: {_is_null: true}, vulnerabilityReportId: {_eq: $vulnerabilityReportId}, codeNodes: {_or: $filters}}
254
+ ) {
255
+ aggregate {
256
+ count
257
+ }
258
+ }
259
+ totalScanVulnerabilities: vulnerability_report_issue_aggregate(
260
+ where: {vulnerabilityReportId: {_eq: $vulnerabilityReportId}}
261
+ ) {
262
+ aggregate {
263
+ count
264
+ }
265
+ }
266
+ }
267
+ `;
268
+ var UpdateScmTokenDocument = `
269
+ mutation updateScmToken($scmType: String!, $url: String!, $token: String!, $org: String, $username: String, $refreshToken: String) {
270
+ updateScmToken(
271
+ scmType: $scmType
272
+ url: $url
273
+ token: $token
274
+ org: $org
275
+ username: $username
276
+ refreshToken: $refreshToken
277
+ ) {
278
+ __typename
279
+ ... on ScmAccessTokenUpdateSuccess {
280
+ token
281
+ }
282
+ ... on InvalidScmTypeError {
283
+ status
284
+ error
285
+ }
286
+ ... on BadScmCredentials {
287
+ status
288
+ error
289
+ }
290
+ }
291
+ }
292
+ `;
293
+ var UploadS3BucketInfoDocument = `
294
+ mutation uploadS3BucketInfo($fileName: String!) {
295
+ uploadS3BucketInfo(fileName: $fileName) {
296
+ status
297
+ error
298
+ reportUploadInfo: uploadInfo {
299
+ url
300
+ fixReportId
301
+ uploadFieldsJSON
302
+ uploadKey
303
+ }
304
+ repoUploadInfo {
305
+ url
306
+ fixReportId
307
+ uploadFieldsJSON
308
+ uploadKey
309
+ }
310
+ }
311
+ }
312
+ `;
313
+ var DigestVulnerabilityReportDocument = `
314
+ mutation DigestVulnerabilityReport($vulnerabilityReportFileName: String!, $fixReportId: String!, $projectId: String!) {
315
+ digestVulnerabilityReport(
316
+ fixReportId: $fixReportId
317
+ vulnerabilityReportFileName: $vulnerabilityReportFileName
318
+ projectId: $projectId
319
+ ) {
320
+ __typename
321
+ ... on VulnerabilityReport {
322
+ vulnerabilityReportId
323
+ fixReportId
324
+ }
325
+ ... on RabbitSendError {
326
+ status
327
+ error
328
+ }
329
+ ... on ReportValidationError {
330
+ status
331
+ error
332
+ }
333
+ ... on ReferenceNotFoundError {
334
+ status
335
+ error
336
+ }
337
+ }
338
+ }
339
+ `;
340
+ var SubmitVulnerabilityReportDocument = `
341
+ mutation SubmitVulnerabilityReport($fixReportId: String!, $repoUrl: String!, $reference: String!, $projectId: String!, $sha: String, $experimentalEnabled: Boolean, $vulnerabilityReportFileName: String, $pullRequest: Int) {
342
+ submitVulnerabilityReport(
343
+ fixReportId: $fixReportId
344
+ repoUrl: $repoUrl
345
+ reference: $reference
346
+ sha: $sha
347
+ experimentalEnabled: $experimentalEnabled
348
+ pullRequest: $pullRequest
349
+ projectId: $projectId
350
+ vulnerabilityReportFileName: $vulnerabilityReportFileName
351
+ ) {
352
+ __typename
353
+ ... on VulnerabilityReport {
354
+ vulnerabilityReportId
355
+ fixReportId
356
+ }
357
+ }
358
+ }
359
+ `;
360
+ var CreateCommunityUserDocument = `
361
+ mutation CreateCommunityUser {
362
+ initOrganizationAndProject {
363
+ userId
364
+ projectId
365
+ organizationId
366
+ }
367
+ }
368
+ `;
369
+ var CreateCliLoginDocument = `
370
+ mutation CreateCliLogin($publicKey: String!) {
371
+ insert_cli_login_one(object: {publicKey: $publicKey}) {
372
+ id
373
+ }
374
+ }
375
+ `;
376
+ var PerformCliLoginDocument = `
377
+ mutation performCliLogin($loginId: String!) {
378
+ performCliLogin(loginId: $loginId) {
379
+ status
380
+ }
381
+ }
382
+ `;
383
+ var CreateProjectDocument = `
384
+ mutation CreateProject($organizationId: String!, $projectName: String!) {
385
+ createProject(organizationId: $organizationId, projectName: $projectName) {
386
+ projectId
387
+ }
388
+ }
389
+ `;
390
+ var defaultWrapper = (action, _operationName, _operationType) => action();
391
+ function getSdk(client, withWrapper = defaultWrapper) {
392
+ return {
393
+ Me(variables, requestHeaders) {
394
+ return withWrapper((wrappedRequestHeaders) => client.request(MeDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "Me", "query");
395
+ },
396
+ getOrgAndProjectId(variables, requestHeaders) {
397
+ return withWrapper((wrappedRequestHeaders) => client.request(GetOrgAndProjectIdDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "getOrgAndProjectId", "query");
398
+ },
399
+ GetEncryptedApiToken(variables, requestHeaders) {
400
+ return withWrapper((wrappedRequestHeaders) => client.request(GetEncryptedApiTokenDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "GetEncryptedApiToken", "query");
401
+ },
402
+ FixReportState(variables, requestHeaders) {
403
+ return withWrapper((wrappedRequestHeaders) => client.request(FixReportStateDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "FixReportState", "query");
404
+ },
405
+ GetVulnerabilityReportPaths(variables, requestHeaders) {
406
+ return withWrapper((wrappedRequestHeaders) => client.request(GetVulnerabilityReportPathsDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "GetVulnerabilityReportPaths", "query");
407
+ },
408
+ getAnalysis(variables, requestHeaders) {
409
+ return withWrapper((wrappedRequestHeaders) => client.request(GetAnalysisDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "getAnalysis", "subscription");
410
+ },
411
+ getAnalsyis(variables, requestHeaders) {
412
+ return withWrapper((wrappedRequestHeaders) => client.request(GetAnalsyisDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "getAnalsyis", "query");
413
+ },
414
+ getFixes(variables, requestHeaders) {
415
+ return withWrapper((wrappedRequestHeaders) => client.request(GetFixesDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "getFixes", "query");
416
+ },
417
+ getVulByNodesMetadata(variables, requestHeaders) {
418
+ return withWrapper((wrappedRequestHeaders) => client.request(GetVulByNodesMetadataDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "getVulByNodesMetadata", "query");
419
+ },
420
+ updateScmToken(variables, requestHeaders) {
421
+ return withWrapper((wrappedRequestHeaders) => client.request(UpdateScmTokenDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "updateScmToken", "mutation");
422
+ },
423
+ uploadS3BucketInfo(variables, requestHeaders) {
424
+ return withWrapper((wrappedRequestHeaders) => client.request(UploadS3BucketInfoDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "uploadS3BucketInfo", "mutation");
425
+ },
426
+ DigestVulnerabilityReport(variables, requestHeaders) {
427
+ return withWrapper((wrappedRequestHeaders) => client.request(DigestVulnerabilityReportDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "DigestVulnerabilityReport", "mutation");
428
+ },
429
+ SubmitVulnerabilityReport(variables, requestHeaders) {
430
+ return withWrapper((wrappedRequestHeaders) => client.request(SubmitVulnerabilityReportDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "SubmitVulnerabilityReport", "mutation");
431
+ },
432
+ CreateCommunityUser(variables, requestHeaders) {
433
+ return withWrapper((wrappedRequestHeaders) => client.request(CreateCommunityUserDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "CreateCommunityUser", "mutation");
434
+ },
435
+ CreateCliLogin(variables, requestHeaders) {
436
+ return withWrapper((wrappedRequestHeaders) => client.request(CreateCliLoginDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "CreateCliLogin", "mutation");
437
+ },
438
+ performCliLogin(variables, requestHeaders) {
439
+ return withWrapper((wrappedRequestHeaders) => client.request(PerformCliLoginDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "performCliLogin", "mutation");
440
+ },
441
+ CreateProject(variables, requestHeaders) {
442
+ return withWrapper((wrappedRequestHeaders) => client.request(CreateProjectDocument, variables, { ...requestHeaders, ...wrappedRequestHeaders }), "CreateProject", "mutation");
443
+ }
444
+ };
445
+ }
446
+
121
447
  // src/utils/index.ts
122
448
  var utils_exports = {};
123
449
  __export(utils_exports, {
@@ -250,322 +576,7 @@ import Debug3 from "debug";
250
576
  import { GraphQLClient } from "graphql-request";
251
577
  import { v4 as uuidv4 } from "uuid";
252
578
 
253
- // src/features/analysis/graphql/mutations.ts
254
- import { gql } from "graphql-request";
255
- var UPDATE_SCM_TOKEN = gql`
256
- mutation updateScmToken(
257
- $scmType: String!
258
- $url: String!
259
- $token: String!
260
- $org: String
261
- $username: String
262
- $refreshToken: String
263
- ) {
264
- updateScmToken(
265
- scmType: $scmType
266
- url: $url
267
- token: $token
268
- org: $org
269
- username: $username
270
- refreshToken: $refreshToken
271
- ) {
272
- __typename
273
- ... on ScmAccessTokenUpdateSuccess {
274
- token
275
- }
276
- ... on InvalidScmTypeError {
277
- status
278
- error
279
- }
280
- ... on BadScmCredentials {
281
- status
282
- error
283
- }
284
- }
285
- }
286
- `;
287
- var UPLOAD_S3_BUCKET_INFO = gql`
288
- mutation uploadS3BucketInfo($fileName: String!) {
289
- uploadS3BucketInfo(fileName: $fileName) {
290
- status
291
- error
292
- reportUploadInfo: uploadInfo {
293
- url
294
- fixReportId
295
- uploadFieldsJSON
296
- uploadKey
297
- }
298
- repoUploadInfo {
299
- url
300
- fixReportId
301
- uploadFieldsJSON
302
- uploadKey
303
- }
304
- }
305
- }
306
- `;
307
- var DIGEST_VULNERABILITY_REPORT = gql`
308
- mutation DigestVulnerabilityReport(
309
- $vulnerabilityReportFileName: String!
310
- $fixReportId: String!
311
- $projectId: String!
312
- ) {
313
- digestVulnerabilityReport(
314
- fixReportId: $fixReportId
315
- vulnerabilityReportFileName: $vulnerabilityReportFileName
316
- projectId: $projectId
317
- ) {
318
- __typename
319
- ... on VulnerabilityReport {
320
- vulnerabilityReportId
321
- fixReportId
322
- }
323
- ... on RabbitSendError {
324
- status
325
- error
326
- }
327
- ... on ReportValidationError {
328
- status
329
- error
330
- }
331
- ... on ReferenceNotFoundError {
332
- status
333
- error
334
- }
335
- }
336
- }
337
- `;
338
- var SUBMIT_VULNERABILITY_REPORT = gql`
339
- mutation SubmitVulnerabilityReport(
340
- $fixReportId: String!
341
- $repoUrl: String!
342
- $reference: String!
343
- $projectId: String!
344
- $sha: String
345
- $experimentalEnabled: Boolean
346
- $vulnerabilityReportFileName: String
347
- $pullRequest: Int
348
- ) {
349
- submitVulnerabilityReport(
350
- fixReportId: $fixReportId
351
- repoUrl: $repoUrl
352
- reference: $reference
353
- sha: $sha
354
- experimentalEnabled: $experimentalEnabled
355
- pullRequest: $pullRequest
356
- projectId: $projectId
357
- vulnerabilityReportFileName: $vulnerabilityReportFileName
358
- ) {
359
- __typename
360
- ... on VulnerabilityReport {
361
- vulnerabilityReportId
362
- fixReportId
363
- }
364
- }
365
- }
366
- `;
367
- var CREATE_COMMUNITY_USER = gql`
368
- mutation CreateCommunityUser {
369
- initOrganizationAndProject {
370
- userId
371
- projectId
372
- organizationId
373
- }
374
- }
375
- `;
376
- var CREATE_CLI_LOGIN = gql`
377
- mutation CreateCliLogin($publicKey: String!) {
378
- insert_cli_login_one(object: { publicKey: $publicKey }) {
379
- id
380
- }
381
- }
382
- `;
383
- var PERFORM_CLI_LOGIN = gql`
384
- mutation performCliLogin($loginId: String!) {
385
- performCliLogin(loginId: $loginId) {
386
- status
387
- }
388
- }
389
- `;
390
- var CREATE_PROJECT = gql`
391
- mutation CreateProject($organizationId: String!, $projectName: String!) {
392
- createProject(organizationId: $organizationId, projectName: $projectName) {
393
- projectId
394
- }
395
- }
396
- `;
397
-
398
- // src/features/analysis/graphql/queries.ts
399
- import { gql as gql2 } from "graphql-request";
400
- var ME = gql2`
401
- query Me {
402
- me {
403
- id
404
- email
405
- scmConfigs {
406
- id
407
- orgId
408
- refreshToken
409
- scmType
410
- scmUrl
411
- scmUsername
412
- token
413
- tokenLastUpdate
414
- userId
415
- scmOrg
416
- isTokenAvailable
417
- }
418
- }
419
- }
420
- `;
421
- var GET_ORG_AND_PROJECT_ID = gql2`
422
- query getOrgAndProjectId {
423
- users: user {
424
- userOrganizationsAndUserOrganizationRoles {
425
- organization {
426
- id
427
- projects(order_by: { updatedAt: desc }) {
428
- id
429
- name
430
- }
431
- }
432
- }
433
- }
434
- }
435
- `;
436
- var GET_ENCRYPTED_API_TOKEN = gql2`
437
- query GetEncryptedApiToken($loginId: uuid!) {
438
- cli_login_by_pk(id: $loginId) {
439
- encryptedApiToken
440
- }
441
- }
442
- `;
443
- var GET_FIX_REPORT_STATE = gql2`
444
- query FixReportState($id: uuid!) {
445
- fixReport_by_pk(id: $id) {
446
- state
447
- }
448
- }
449
- `;
450
- var GET_VULNERABILITY_REPORT_PATHS = gql2`
451
- query GetVulnerabilityReportPaths($vulnerabilityReportId: uuid!) {
452
- vulnerability_report_path(
453
- where: { vulnerabilityReportId: { _eq: $vulnerabilityReportId } }
454
- ) {
455
- path
456
- }
457
- }
458
- `;
459
- var SUBSCRIBE_TO_ANALYSIS = gql2`
460
- subscription getAnalysis($analysisId: uuid!) {
461
- analysis: fixReport_by_pk(id: $analysisId) {
462
- id
463
- state
464
- }
465
- }
466
- `;
467
- var GET_ANALYSIS = gql2`
468
- query getAnalsyis($analysisId: uuid!) {
469
- analysis: fixReport_by_pk(id: $analysisId) {
470
- id
471
- state
472
- repo {
473
- commitSha
474
- pullRequest
475
- }
476
- vulnerabilityReportId
477
- vulnerabilityReport {
478
- projectId
479
- project {
480
- organizationId
481
- }
482
- file {
483
- signedFile {
484
- url
485
- }
486
- }
487
- }
488
- }
489
- }
490
- `;
491
- var GET_FIX = gql2`
492
- query getFix($fixId: uuid!) {
493
- fix_by_pk(id: $fixId) {
494
- issueType
495
- id
496
- patchAndQuestions {
497
- patch
498
- }
499
- }
500
- }
501
- `;
502
- var GET_FIXES = gql2`
503
- query getFixes($filters: fix_bool_exp!) {
504
- fixes: fix(where: $filters) {
505
- issueType
506
- id
507
- patchAndQuestions {
508
- patch
509
- }
510
- }
511
- }
512
- `;
513
- var GET_VUL_BY_NODES_METADATA = gql2`
514
- query getVulByNodesMetadata(
515
- $filters: [vulnerability_report_issue_code_node_bool_exp!]
516
- $vulnerabilityReportId: uuid!
517
- ) {
518
- vulnerabilityReportIssueCodeNodes: vulnerability_report_issue_code_node(
519
- order_by: { index: desc }
520
- where: {
521
- _or: $filters
522
- vulnerabilityReportIssue: {
523
- fixId: { _is_null: false }
524
- vulnerabilityReportId: { _eq: $vulnerabilityReportId }
525
- }
526
- }
527
- ) {
528
- vulnerabilityReportIssueId
529
- path
530
- startLine
531
- vulnerabilityReportIssue {
532
- issueType
533
- fixId
534
- }
535
- }
536
- fixablePrVuls: vulnerability_report_issue_aggregate(
537
- where: {
538
- fixId: { _is_null: false }
539
- vulnerabilityReportId: { _eq: $vulnerabilityReportId }
540
- codeNodes: { _or: $filters }
541
- }
542
- ) {
543
- aggregate {
544
- count
545
- }
546
- }
547
- nonFixablePrVuls: vulnerability_report_issue_aggregate(
548
- where: {
549
- fixId: { _is_null: true }
550
- vulnerabilityReportId: { _eq: $vulnerabilityReportId }
551
- codeNodes: { _or: $filters }
552
- }
553
- ) {
554
- aggregate {
555
- count
556
- }
557
- }
558
- totalScanVulnerabilities: vulnerability_report_issue_aggregate(
559
- where: { vulnerabilityReportId: { _eq: $vulnerabilityReportId } }
560
- ) {
561
- aggregate {
562
- count
563
- }
564
- }
565
- }
566
- `;
567
-
568
- // src/features/analysis/graphql/subscirbe.ts
579
+ // src/features/analysis/graphql/subscribe.ts
569
580
  import { createClient } from "graphql-ws";
570
581
  import WebSocket from "ws";
571
582
  var SUBSCRIPTION_TIMEOUT_MS = 10 * 60 * 1e3;
@@ -647,150 +658,6 @@ function subscribe(query, variables, callback, wsClientOptions) {
647
658
 
648
659
  // src/features/analysis/graphql/types.ts
649
660
  import { z as z2 } from "zod";
650
- var UpdateScmTokenZ = z2.object({
651
- updateScmToken: z2.object({
652
- token: z2.string()
653
- })
654
- });
655
- var UploadFieldsZ = z2.object({
656
- bucket: z2.string(),
657
- "X-Amz-Algorithm": z2.string(),
658
- "X-Amz-Credential": z2.string(),
659
- "X-Amz-Date": z2.string(),
660
- Policy: z2.string(),
661
- "X-Amz-Signature": z2.string()
662
- });
663
- var ReportUploadInfoZ = z2.object({
664
- url: z2.string(),
665
- fixReportId: z2.string(),
666
- uploadFieldsJSON: z2.string().transform((str, ctx) => {
667
- try {
668
- return JSON.parse(str);
669
- } catch (e) {
670
- ctx.addIssue({ code: "custom", message: "Invalid JSON" });
671
- return z2.NEVER;
672
- }
673
- }),
674
- uploadKey: z2.string()
675
- }).transform(({ uploadFieldsJSON, ...input }) => ({
676
- ...input,
677
- uploadFields: uploadFieldsJSON
678
- }));
679
- var UploadS3BucketInfoZ = z2.object({
680
- uploadS3BucketInfo: z2.object({
681
- status: z2.string(),
682
- error: z2.string().nullish(),
683
- reportUploadInfo: ReportUploadInfoZ,
684
- repoUploadInfo: ReportUploadInfoZ
685
- })
686
- });
687
- var GetOrgAndProjectIdQueryZ = z2.object({
688
- users: z2.array(
689
- z2.object({
690
- userOrganizationsAndUserOrganizationRoles: z2.array(
691
- z2.object({
692
- organization: z2.object({
693
- id: z2.string(),
694
- projects: z2.array(
695
- z2.object({
696
- id: z2.string(),
697
- name: z2.string()
698
- })
699
- ).nonempty()
700
- })
701
- })
702
- ).nonempty()
703
- })
704
- ).nonempty()
705
- });
706
- var CreateCliLoginZ = z2.object({
707
- insert_cli_login_one: z2.object({
708
- id: z2.string()
709
- })
710
- });
711
- var GetEncryptedApiTokenZ = z2.object({
712
- cli_login_by_pk: z2.object({
713
- encryptedApiToken: z2.string().nullable()
714
- })
715
- });
716
- var DigestVulnerabilityReportZ = z2.object({
717
- digestVulnerabilityReport: z2.object({
718
- vulnerabilityReportId: z2.string()
719
- })
720
- });
721
- var AnalysisStateZ = z2.enum([
722
- "Created",
723
- "Deleted",
724
- "Digested",
725
- "Expired",
726
- "Failed",
727
- "Finished",
728
- "Initialized",
729
- "Requested"
730
- ]);
731
- var GetFixReportZ = z2.object({
732
- fixReport_by_pk: z2.object({
733
- state: AnalysisStateZ
734
- })
735
- });
736
- var GetFixReportSubscriptionZ = z2.object({
737
- analysis: z2.object({
738
- id: z2.string(),
739
- state: AnalysisStateZ
740
- })
741
- });
742
- var GetVulnerabilityReportPathsZ = z2.object({
743
- vulnerability_report_path: z2.array(
744
- z2.object({
745
- path: z2.string()
746
- })
747
- )
748
- });
749
- var CreateUpdateFixReportMutationZ = z2.object({
750
- submitVulnerabilityReport: z2.object({
751
- __typename: z2.literal("VulnerabilityReport"),
752
- vulnerabilityReportId: z2.string(),
753
- fixReportId: z2.string()
754
- })
755
- });
756
- var CreateProjectMutationZ = z2.object({
757
- createProject: z2.object({
758
- projectId: z2.string()
759
- })
760
- });
761
- var GetAnalysisQueryZ = z2.object({
762
- analysis: z2.object({
763
- id: z2.string(),
764
- state: z2.string(),
765
- repo: z2.object({
766
- commitSha: z2.string(),
767
- pullRequest: z2.number()
768
- }),
769
- vulnerabilityReportId: z2.string(),
770
- vulnerabilityReport: z2.object({
771
- projectId: z2.string(),
772
- project: z2.object({
773
- organizationId: z2.string()
774
- }),
775
- file: z2.object({
776
- signedFile: z2.object({
777
- url: z2.string()
778
- })
779
- })
780
- })
781
- })
782
- });
783
- var FixDataZ = z2.object({
784
- issueType: z2.string(),
785
- id: z2.string(),
786
- patchAndQuestions: z2.object({
787
- patch: z2.string()
788
- })
789
- });
790
- var GetFixQueryZ = z2.object({
791
- fix_by_pk: FixDataZ
792
- });
793
- var GetFixesQueryZ = z2.object({ fixes: z2.array(FixDataZ) });
794
661
  var VulnerabilityReportIssueCodeNodeZ = z2.object({
795
662
  vulnerabilityReportIssueId: z2.string(),
796
663
  path: z2.string(),
@@ -826,6 +693,7 @@ var GQLClient = class {
826
693
  constructor(args) {
827
694
  __publicField(this, "_client");
828
695
  __publicField(this, "_apiKey");
696
+ __publicField(this, "_clientSdk");
829
697
  const { apiKey } = args;
830
698
  this._apiKey = apiKey;
831
699
  debug3(`init with apiKey ${apiKey}`);
@@ -845,23 +713,18 @@ var GQLClient = class {
845
713
  };
846
714
  }
847
715
  });
716
+ this._clientSdk = getSdk(this._client);
848
717
  }
849
718
  async getUserInfo() {
850
- const { me } = await this._client.request(ME);
719
+ const { me } = await this._clientSdk.Me();
851
720
  return me;
852
721
  }
853
722
  async createCliLogin(variables) {
854
- const res = CreateCliLoginZ.parse(
855
- await this._client.request(
856
- CREATE_CLI_LOGIN,
857
- variables,
858
- {
859
- // We may have outdated API key in the config storage. Avoid using it for the login request.
860
- [API_KEY_HEADER_NAME]: ""
861
- }
862
- )
863
- );
864
- return res.insert_cli_login_one.id;
723
+ const res = await this._clientSdk.CreateCliLogin(variables, {
724
+ // We may have outdated API key in the config storage. Avoid using it for the login request.
725
+ [API_KEY_HEADER_NAME]: ""
726
+ });
727
+ return res.insert_cli_login_one?.id || "";
865
728
  }
866
729
  async verifyToken() {
867
730
  await this.createCommunityUser();
@@ -874,23 +737,21 @@ var GQLClient = class {
874
737
  return true;
875
738
  }
876
739
  async getOrgAndProjectId(projectName) {
877
- const getOrgAndProjectIdResult = await this._client.request(
878
- GET_ORG_AND_PROJECT_ID
879
- );
880
- const [user] = GetOrgAndProjectIdQueryZ.parse(
881
- getOrgAndProjectIdResult
882
- ).users;
883
- const org = user.userOrganizationsAndUserOrganizationRoles[0].organization;
884
- const project = projectName ? org.projects.find((project2) => project2.name === projectName) ?? null : org.projects[0];
740
+ const getOrgAndProjectIdResult = await this._clientSdk.getOrgAndProjectId();
741
+ const org = getOrgAndProjectIdResult?.users?.at(0)?.userOrganizationsAndUserOrganizationRoles?.at(0)?.organization;
742
+ if (!org?.id) {
743
+ throw new Error("Organization not found");
744
+ }
745
+ const project = projectName ? org?.projects.find((project2) => project2.name === projectName) ?? null : org?.projects[0];
746
+ if (!project?.id) {
747
+ throw new Error("Project not found");
748
+ }
885
749
  let projectId = project?.id;
886
750
  if (!projectId) {
887
- const createdProject = await this._client.request(
888
- CREATE_PROJECT,
889
- {
890
- organizationId: org.id,
891
- projectName: projectName || "My project"
892
- }
893
- );
751
+ const createdProject = await this._clientSdk.CreateProject({
752
+ organizationId: org.id,
753
+ projectName: projectName || "My project"
754
+ });
894
755
  projectId = createdProject.createProject.projectId;
895
756
  }
896
757
  return {
@@ -899,26 +760,22 @@ var GQLClient = class {
899
760
  };
900
761
  }
901
762
  async getEncryptedApiToken(variables) {
902
- const res = await this._client.request(
903
- GET_ENCRYPTED_API_TOKEN,
904
- variables,
905
- {
906
- // We may have outdated API key in the config storage. Avoid using it for the login request.
907
- [API_KEY_HEADER_NAME]: ""
908
- }
909
- );
910
- return GetEncryptedApiTokenZ.parse(res).cli_login_by_pk.encryptedApiToken;
763
+ const res = await this._clientSdk.GetEncryptedApiToken(variables, {
764
+ // We may have outdated API key in the config storage. Avoid using it for the login request.
765
+ [API_KEY_HEADER_NAME]: ""
766
+ });
767
+ return res?.cli_login_by_pk?.encryptedApiToken || null;
911
768
  }
912
769
  async createCommunityUser() {
913
770
  try {
914
- await this._client.request(CREATE_COMMUNITY_USER);
771
+ await this._clientSdk.CreateCommunityUser();
915
772
  } catch (e) {
916
773
  debug3("create community user failed %o", e);
917
774
  }
918
775
  }
919
776
  async updateScmToken(args) {
920
777
  const { scmType, url, token, org, username, refreshToken } = args;
921
- const updateScmTokenResult = await this._client.request(UPDATE_SCM_TOKEN, {
778
+ const updateScmTokenResult = await this._clientSdk.updateScmToken({
922
779
  scmType,
923
780
  url,
924
781
  token,
@@ -926,13 +783,13 @@ var GQLClient = class {
926
783
  username,
927
784
  refreshToken
928
785
  });
929
- return UpdateScmTokenZ.parse(updateScmTokenResult);
786
+ return updateScmTokenResult;
930
787
  }
931
788
  async uploadS3BucketInfo() {
932
- const uploadS3BucketInfoResult = await this._client.request(UPLOAD_S3_BUCKET_INFO, {
789
+ const uploadS3BucketInfoResult = await this._clientSdk.uploadS3BucketInfo({
933
790
  fileName: "report.json"
934
791
  });
935
- return UploadS3BucketInfoZ.parse(uploadS3BucketInfoResult);
792
+ return uploadS3BucketInfoResult;
936
793
  }
937
794
  async getVulByNodesMetadata({
938
795
  hunks,
@@ -948,7 +805,7 @@ var GQLClient = class {
948
805
  };
949
806
  return filter;
950
807
  });
951
- const getVulByNodesMetadataRes = await this._client.request(GET_VUL_BY_NODES_METADATA, {
808
+ const getVulByNodesMetadataRes = await this._clientSdk.getVulByNodesMetadata({
952
809
  filters: { _or: filters },
953
810
  vulnerabilityReportId
954
811
  });
@@ -984,15 +841,15 @@ var GQLClient = class {
984
841
  fixReportId,
985
842
  projectId
986
843
  }) {
987
- const res = await this._client.request(
988
- DIGEST_VULNERABILITY_REPORT,
989
- {
990
- fixReportId,
991
- vulnerabilityReportFileName: "report.json",
992
- projectId
993
- }
994
- );
995
- return DigestVulnerabilityReportZ.parse(res).digestVulnerabilityReport;
844
+ const res = await this._clientSdk.DigestVulnerabilityReport({
845
+ fixReportId,
846
+ vulnerabilityReportFileName: "report.json",
847
+ projectId
848
+ });
849
+ if (res.digestVulnerabilityReport.__typename !== "VulnerabilityReport") {
850
+ throw new Error("Digesting vulnerability report failed");
851
+ }
852
+ return res.digestVulnerabilityReport;
996
853
  }
997
854
  async submitVulnerabilityReport(params) {
998
855
  const {
@@ -1005,7 +862,7 @@ var GQLClient = class {
1005
862
  vulnerabilityReportFileName,
1006
863
  pullRequest
1007
864
  } = params;
1008
- const res = await this._client.request(SUBMIT_VULNERABILITY_REPORT, {
865
+ const res = await this._clientSdk.SubmitVulnerabilityReport({
1009
866
  fixReportId,
1010
867
  repoUrl,
1011
868
  reference,
@@ -1015,21 +872,21 @@ var GQLClient = class {
1015
872
  sha: sha || "",
1016
873
  experimentalEnabled
1017
874
  });
1018
- return CreateUpdateFixReportMutationZ.parse(res);
875
+ return res;
1019
876
  }
1020
877
  async getFixReportState(fixReportId) {
1021
- const res = await this._client.request(
1022
- GET_FIX_REPORT_STATE,
1023
- { id: fixReportId }
1024
- );
1025
- return GetFixReportZ.parse(res).fixReport_by_pk.state;
878
+ const res = await this._clientSdk.FixReportState({ id: fixReportId });
879
+ return res?.fixReport_by_pk?.state || "Created" /* Created */;
1026
880
  }
1027
881
  async waitFixReportInit(fixReportId, includeDigested = false) {
1028
- const FINAL_STATES = ["Finished", "Failed"];
1029
- let lastState = "Created";
882
+ const FINAL_STATES = [
883
+ "Finished" /* Finished */,
884
+ "Failed" /* Failed */
885
+ ];
886
+ let lastState = "Created" /* Created */;
1030
887
  let attempts = 100;
1031
888
  if (includeDigested) {
1032
- FINAL_STATES.push("Digested");
889
+ FINAL_STATES.push("Digested" /* Digested */);
1033
890
  }
1034
891
  do {
1035
892
  await sleep(REPORT_STATE_CHECK_DELAY);
@@ -1041,23 +898,20 @@ var GQLClient = class {
1041
898
  return lastState;
1042
899
  }
1043
900
  async getVulnerabilityReportPaths(vulnerabilityReportId) {
1044
- const res = await this._client.request(
1045
- GET_VULNERABILITY_REPORT_PATHS,
1046
- { vulnerabilityReportId }
1047
- );
1048
- return GetVulnerabilityReportPathsZ.parse(
1049
- res
1050
- ).vulnerability_report_path.map((p) => p.path);
901
+ const res = await this._clientSdk.GetVulnerabilityReportPaths({
902
+ vulnerabilityReportId
903
+ });
904
+ return res.vulnerability_report_path.map((p) => p.path);
1051
905
  }
1052
906
  async subscribeToAnalysis(params) {
1053
907
  const { callbackStates } = params;
1054
908
  return subscribe(
1055
- SUBSCRIBE_TO_ANALYSIS,
909
+ GetAnalysisDocument,
1056
910
  params.subscribeToAnalysisParams,
1057
911
  async (resolve, reject, data) => {
1058
- if (data.analysis.state === "Failed") {
912
+ if (!data.analysis?.state || data.analysis?.state === "Failed" /* Failed */) {
1059
913
  reject(data);
1060
- throw new Error(`Analysis failed with id: ${data.analysis.id}`);
914
+ throw new Error(`Analysis failed with id: ${data.analysis?.id}`);
1061
915
  }
1062
916
  if (callbackStates.includes(data.analysis?.state)) {
1063
917
  await params.callback(data.analysis.id);
@@ -1071,28 +925,19 @@ var GQLClient = class {
1071
925
  );
1072
926
  }
1073
927
  async getAnalysis(analysisId) {
1074
- const res = await this._client.request(GET_ANALYSIS, {
928
+ const res = await this._clientSdk.getAnalsyis({
1075
929
  analysisId
1076
930
  });
1077
- return GetAnalysisQueryZ.parse(res);
1078
- }
1079
- async getFix(fixId) {
1080
- const res = await this._client.request(
1081
- GET_FIX,
1082
- {
1083
- fixId
1084
- }
1085
- );
1086
- return GetFixQueryZ.parse(res);
931
+ if (!res.analysis) {
932
+ throw new Error(`Analysis not found: ${analysisId}`);
933
+ }
934
+ return res.analysis;
1087
935
  }
1088
936
  async getFixes(fixIds) {
1089
- const res = await this._client.request(
1090
- GET_FIXES,
1091
- {
1092
- filters: { id: { _in: fixIds } }
1093
- }
1094
- );
1095
- return GetFixesQueryZ.parse(res);
937
+ const res = await this._clientSdk.getFixes({
938
+ filters: { id: { _in: fixIds } }
939
+ });
940
+ return res;
1096
941
  }
1097
942
  };
1098
943
 
@@ -3596,6 +3441,8 @@ var getIssueType = (issueType) => {
3596
3441
  return "XSS";
3597
3442
  case "PT" /* Pt */:
3598
3443
  return "Path Traversal";
3444
+ case "ZIP_SLIP" /* ZipSlip */:
3445
+ return "Zip Slip";
3599
3446
  case "INSECURE_RANDOMNESS" /* InsecureRandomness */:
3600
3447
  return "Insecure Randomness";
3601
3448
  case "SSRF" /* Ssrf */:
@@ -3738,25 +3585,28 @@ async function sendReport({
3738
3585
  gqlClient
3739
3586
  }) {
3740
3587
  try {
3741
- const sumbitRes = await gqlClient.submitVulnerabilityReport(
3588
+ const submitRes = await gqlClient.submitVulnerabilityReport(
3742
3589
  submitVulnerabilityReportVariables
3743
3590
  );
3744
- if (sumbitRes.submitVulnerabilityReport.__typename !== "VulnerabilityReport") {
3745
- debug4("error submit vul report %s", sumbitRes);
3591
+ if (submitRes.submitVulnerabilityReport.__typename !== "VulnerabilityReport") {
3592
+ debug4("error submit vul report %s", submitRes);
3746
3593
  throw new Error("\u{1F575}\uFE0F\u200D\u2642\uFE0F Mobb analysis failed");
3747
3594
  }
3748
3595
  spinner.update({ text: progressMassages.processingVulnerabilityReport });
3749
3596
  await gqlClient.subscribeToAnalysis({
3750
3597
  subscribeToAnalysisParams: {
3751
- analysisId: sumbitRes.submitVulnerabilityReport.fixReportId
3598
+ analysisId: submitRes.submitVulnerabilityReport.fixReportId
3752
3599
  },
3753
3600
  callback: () => spinner.update({
3754
- text: "\u2699\uFE0F Vulnerability report proccessed successfuly"
3601
+ text: "\u2699\uFE0F Vulnerability report processed successfully"
3755
3602
  }),
3756
- callbackStates: ["Digested", "Finished"],
3603
+ callbackStates: [
3604
+ "Digested" /* Digested */,
3605
+ "Finished" /* Finished */
3606
+ ],
3757
3607
  timeoutInMs: VUL_REPORT_DIGEST_TIMEOUT_MS
3758
3608
  });
3759
- return sumbitRes;
3609
+ return submitRes;
3760
3610
  } catch (e) {
3761
3611
  spinner.error({ text: "\u{1F575}\uFE0F\u200D\u2642\uFE0F Mobb analysis failed" });
3762
3612
  throw e;
@@ -3822,7 +3672,7 @@ function buildAnalysisSummaryComment(params) {
3822
3672
  if (!fix) {
3823
3673
  throw new Error(`fix ${vulnerabilityReportIssue.fixId} not found`);
3824
3674
  }
3825
- const issueType = getIssueType(fix.issueType);
3675
+ const issueType = getIssueType(fix.issueType ?? null);
3826
3676
  const vulnerabilityReportIssueCount = (result[issueType] || 0) + 1;
3827
3677
  return {
3828
3678
  ...result,
@@ -3853,13 +3703,16 @@ async function handleFinishedAnalysis({
3853
3703
  projectId,
3854
3704
  project: { organizationId }
3855
3705
  }
3856
- } = getAnalysis.analysis;
3857
- const { commitSha, pullRequest } = getAnalysis.analysis.repo;
3706
+ } = getAnalysis;
3707
+ if (!getAnalysis.repo || !getAnalysis.repo.commitSha || !getAnalysis.repo.pullRequest) {
3708
+ throw new Error("repo not found");
3709
+ }
3710
+ const { commitSha, pullRequest } = getAnalysis.repo;
3858
3711
  const diff = await scm.getPrDiff({ pull_number: pullRequest });
3859
3712
  const prVulenrabilities = await getRelevantVulenrabilitiesFromDiff({
3860
3713
  diff,
3861
3714
  gqlClient,
3862
- vulnerabilityReportId: getAnalysis.analysis.vulnerabilityReportId
3715
+ vulnerabilityReportId: getAnalysis.vulnerabilityReportId
3863
3716
  });
3864
3717
  const { vulnerabilityReportIssueCodeNodes } = prVulenrabilities;
3865
3718
  const fixesId = vulnerabilityReportIssueCodeNodes.map(
@@ -3933,7 +3786,7 @@ async function handleFinishedAnalysis({
3933
3786
  vulnerabilityReportIssue: { fixId }
3934
3787
  } = vulnerabilityReportIssueCodeNode;
3935
3788
  const fix = fixesById[fixId];
3936
- if (!fix) {
3789
+ if (!fix || fix.patchAndQuestions.__typename !== "FixData") {
3937
3790
  throw new Error(`fix ${fixId} not found`);
3938
3791
  }
3939
3792
  const {
@@ -3969,7 +3822,7 @@ async function handleFinishedAnalysis({
3969
3822
  commentId
3970
3823
  });
3971
3824
  const scanerString = scannerToFriendlyString(scanner);
3972
- const issueType = getIssueType(fix.issueType);
3825
+ const issueType = getIssueType(fix.issueType ?? null);
3973
3826
  const title = `# ${MobbIconMarkdown} ${issueType} fix is ready`;
3974
3827
  const subTitle = `### Apply the following code change to fix ${issueType} issue detected by **${scanerString}**:`;
3975
3828
  const diff2 = `\`\`\`diff
@@ -4592,6 +4445,9 @@ async function _scan(params, { skipPrompts = false } = {}) {
4592
4445
  const {
4593
4446
  uploadS3BucketInfo: { repoUploadInfo, reportUploadInfo }
4594
4447
  } = await gqlClient.uploadS3BucketInfo();
4448
+ if (!reportUploadInfo || !repoUploadInfo) {
4449
+ throw new Error("uploadS3BucketInfo is null");
4450
+ }
4595
4451
  let reportPath = scanFile;
4596
4452
  if (srcPath) {
4597
4453
  return await uploadExistingRepo();
@@ -4600,9 +4456,15 @@ async function _scan(params, { skipPrompts = false } = {}) {
4600
4456
  throw new Error("repo is required in case srcPath is not provided");
4601
4457
  }
4602
4458
  const userInfo = await gqlClient.getUserInfo();
4459
+ const scmConfigs = [];
4460
+ for (const scmConfig of userInfo?.scmConfigs || []) {
4461
+ if (scmConfig?.__typename === "ScmConfig") {
4462
+ scmConfigs.push(scmConfig);
4463
+ }
4464
+ }
4603
4465
  const tokenInfo = getScmConfig({
4604
4466
  url: repo,
4605
- scmConfigs: userInfo.scmConfigs,
4467
+ scmConfigs,
4606
4468
  includeOrgTokens: false
4607
4469
  });
4608
4470
  const isRepoAvailable = await scmCanReachRepo({
@@ -4665,7 +4527,7 @@ async function _scan(params, { skipPrompts = false } = {}) {
4665
4527
  await uploadFile({
4666
4528
  file: reportPath,
4667
4529
  url: reportUploadInfo.url,
4668
- uploadFields: reportUploadInfo.uploadFields,
4530
+ uploadFields: JSON.parse(reportUploadInfo.uploadFieldsJSON),
4669
4531
  uploadKey: reportUploadInfo.uploadKey
4670
4532
  });
4671
4533
  } catch (e) {
@@ -4688,6 +4550,10 @@ async function _scan(params, { skipPrompts = false } = {}) {
4688
4550
  pullRequest: params.pullRequest
4689
4551
  }
4690
4552
  });
4553
+ if (sendReportRes.submitVulnerabilityReport.__typename !== "VulnerabilityReport") {
4554
+ mobbSpinner.error({ text: "\u{1F575}\uFE0F\u200D\u2642\uFE0F Mobb analysis failed" });
4555
+ throw new Error("\u{1F575}\uFE0F\u200D\u2642\uFE0F Mobb analysis failed");
4556
+ }
4691
4557
  if (command === "review") {
4692
4558
  await gqlClient.subscribeToAnalysis({
4693
4559
  subscribeToAnalysisParams: {
@@ -4700,7 +4566,7 @@ async function _scan(params, { skipPrompts = false } = {}) {
4700
4566
  githubActionToken: z11.string().parse(githubActionToken),
4701
4567
  scanner: z11.nativeEnum(SCANNERS).parse(scanner)
4702
4568
  }),
4703
- callbackStates: ["Finished"]
4569
+ callbackStates: ["Finished" /* Finished */]
4704
4570
  });
4705
4571
  }
4706
4572
  mobbSpinner.success({
@@ -4731,6 +4597,9 @@ async function _scan(params, { skipPrompts = false } = {}) {
4731
4597
  return reportPath2;
4732
4598
  }
4733
4599
  async function askToOpenAnalysis() {
4600
+ if (!repoUploadInfo || !reportUploadInfo) {
4601
+ throw new Error("uploadS3BucketInfo is null");
4602
+ }
4734
4603
  const reportUrl = getReportUrl({
4735
4604
  organizationId,
4736
4605
  projectId,
@@ -4824,9 +4693,15 @@ async function _scan(params, { skipPrompts = false } = {}) {
4824
4693
  await open2(scmAuthUrl2);
4825
4694
  for (let i = 0; i < LOGIN_MAX_WAIT / LOGIN_CHECK_DELAY; i++) {
4826
4695
  const userInfo2 = await gqlClient.getUserInfo();
4696
+ const scmConfigs2 = [];
4697
+ for (const scmConfig of userInfo2?.scmConfigs || []) {
4698
+ if (scmConfig?.__typename === "ScmConfig") {
4699
+ scmConfigs2.push(scmConfig);
4700
+ }
4701
+ }
4827
4702
  const tokenInfo2 = getScmConfig({
4828
4703
  url: repoUrl,
4829
- scmConfigs: userInfo2.scmConfigs,
4704
+ scmConfigs: scmConfigs2,
4830
4705
  includeOrgTokens: false
4831
4706
  });
4832
4707
  if (tokenInfo2.accessToken && tokenInfo2.accessToken !== oldToken) {
@@ -4842,6 +4717,9 @@ async function _scan(params, { skipPrompts = false } = {}) {
4842
4717
  throw new CliError2(`${scmName} login timeout`);
4843
4718
  }
4844
4719
  async function uploadExistingRepo() {
4720
+ if (!repoUploadInfo || !reportUploadInfo) {
4721
+ throw new Error("uploadS3BucketInfo is null");
4722
+ }
4845
4723
  if (!srcPath || !reportPath) {
4846
4724
  throw new Error("src path and reportPath is required");
4847
4725
  }
@@ -4850,7 +4728,7 @@ async function _scan(params, { skipPrompts = false } = {}) {
4850
4728
  await uploadFile({
4851
4729
  file: reportPath,
4852
4730
  url: reportUploadInfo.url,
4853
- uploadFields: reportUploadInfo.uploadFields,
4731
+ uploadFields: JSON.parse(reportUploadInfo.uploadFieldsJSON),
4854
4732
  uploadKey: reportUploadInfo.uploadKey
4855
4733
  });
4856
4734
  } catch (e) {
@@ -4878,7 +4756,10 @@ async function _scan(params, { skipPrompts = false } = {}) {
4878
4756
  callback: () => digestSpinner.update({
4879
4757
  text: progressMassages.processingVulnerabilityReportSuccess
4880
4758
  }),
4881
- callbackStates: ["Digested", "Finished"],
4759
+ callbackStates: [
4760
+ "Digested" /* Digested */,
4761
+ "Finished" /* Finished */
4762
+ ],
4882
4763
  timeoutInMs: VUL_REPORT_DIGEST_TIMEOUT_MS
4883
4764
  });
4884
4765
  } catch (e) {
@@ -4902,7 +4783,7 @@ async function _scan(params, { skipPrompts = false } = {}) {
4902
4783
  await uploadFile({
4903
4784
  file: zipBuffer,
4904
4785
  url: repoUploadInfo.url,
4905
- uploadFields: repoUploadInfo.uploadFields,
4786
+ uploadFields: JSON.parse(repoUploadInfo.uploadFieldsJSON),
4906
4787
  uploadKey: repoUploadInfo.uploadKey
4907
4788
  });
4908
4789
  } catch (e) {
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "mobbdev",
3
- "version": "0.0.106",
3
+ "version": "0.0.108",
4
4
  "description": "Automated secure code remediation tool",
5
5
  "repository": "https://github.com/mobb-dev/bugsy",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
8
8
  "scripts": {
9
+ "env": "dotenv -e ./.env",
9
10
  "postinstall": "node ./src/post_install/cx_install.mjs",
10
11
  "build": "tsc && tsup-node --env.NODE_ENV production",
11
12
  "build:dev": "tsup-node --env.NODE_ENV development",
@@ -14,7 +15,8 @@
14
15
  "lint": "eslint --cache --max-warnings 0 --ignore-path .eslintignore --ext .ts,.tsx,.jsx .",
15
16
  "lint:fix": "eslint --fix --cache --max-warnings 0 --ignore-path .eslintignore --ext .js,.ts,.tsx,.jsx .",
16
17
  "lint:fix:files": "eslint --fix --cache --max-warnings 0 --ignore-path .eslintignore --ext .js,.ts,.tsx,.jsx",
17
- "prepack": "dotenv-vault pull production .env && pnpm build"
18
+ "prepack": "dotenv-vault pull production .env && pnpm build",
19
+ "generate": "pnpm run env -- graphql-codegen -r dotenv/config --config client_codegen.ts"
18
20
  },
19
21
  "bin": {
20
22
  "mobbdev": "bin/cli.mjs"
@@ -42,6 +44,7 @@
42
44
  "globby": "13.2.2",
43
45
  "graphql": "16.8.1",
44
46
  "graphql-request": "5.0.0",
47
+ "graphql-tag": "2.12.6",
45
48
  "graphql-ws": "5.14.3",
46
49
  "inquirer": "9.2.7",
47
50
  "isomorphic-ws": "5.0.0",
@@ -65,6 +68,10 @@
65
68
  "zod": "3.23.7"
66
69
  },
67
70
  "devDependencies": {
71
+ "@graphql-codegen/cli": "2.16.5",
72
+ "@graphql-codegen/typescript": "2.7.2",
73
+ "@graphql-codegen/typescript-graphql-request": "4.5.8",
74
+ "@graphql-codegen/typescript-operations": "2.5.5",
68
75
  "@octokit/request-error": "3.0.3",
69
76
  "@octokit/types": "13.5.0",
70
77
  "@types/adm-zip": "0.5.0",
@@ -93,8 +100,8 @@
93
100
  "node": ">=12.20.0"
94
101
  },
95
102
  "files": [
96
- "bin",
97
- "dist",
103
+ "bin/cli.mjs",
104
+ "dist/index.mjs",
98
105
  ".env",
99
106
  "src/post_install"
100
107
  ]