mobbdev 0.0.155 → 0.0.157

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 (2) hide show
  1. package/dist/index.mjs +60 -26
  2. package/package.json +9 -8
package/dist/index.mjs CHANGED
@@ -66,13 +66,10 @@ import { z as z9 } from "zod";
66
66
  import { z } from "zod";
67
67
  var EnvVariablesZod = z.object({
68
68
  GITLAB_API_TOKEN: z.string().optional(),
69
- BROKERED_HOSTS: z.string().toLowerCase().transform(
70
- (x) => x.split(",").map((url) => url.trim(), []).filter(Boolean)
71
- ).default(""),
72
69
  GITHUB_API_TOKEN: z.string().optional(),
73
70
  GIT_PROXY_HOST: z.string().default("http://tinyproxy:8888")
74
71
  });
75
- var { GITLAB_API_TOKEN, BROKERED_HOSTS, GITHUB_API_TOKEN, GIT_PROXY_HOST } = EnvVariablesZod.parse(process.env);
72
+ var { GITLAB_API_TOKEN, GITHUB_API_TOKEN, GIT_PROXY_HOST } = EnvVariablesZod.parse(process.env);
76
73
 
77
74
  // src/features/analysis/scm/scm.ts
78
75
  import { z as z7 } from "zod";
@@ -880,7 +877,7 @@ function isGithubOnPrem(url) {
880
877
  return !url.includes(scmCloudUrl.GitHub);
881
878
  }
882
879
  function getFetch(url) {
883
- if (url && BROKERED_HOSTS.includes(new URL(url).origin)) {
880
+ if (url && isBrokerUrl(url)) {
884
881
  const dispatcher = new ProxyAgent({
885
882
  uri: GIT_PROXY_HOST,
886
883
  requestTls: {
@@ -1586,9 +1583,7 @@ function initGitlabFetchMock() {
1586
1583
  `this block is used for unit tests only. URL ${input?.url} starts from local directory`
1587
1584
  );
1588
1585
  }
1589
- if (urlParsed && BROKERED_HOSTS.includes(
1590
- `${urlParsed.protocol?.toLowerCase()}//${urlParsed.host?.toLowerCase()}`
1591
- )) {
1586
+ if (urlParsed && isBrokerUrl(urlParsed.href)) {
1592
1587
  const dispatcher = new ProxyAgent2({
1593
1588
  uri: process.env["GIT_PROXY_HOST"] || "http://tinyproxy:8888",
1594
1589
  requestTls: {
@@ -1623,6 +1618,7 @@ var BaseSubmitToScmMessageZ = z5.object({
1623
1618
  ),
1624
1619
  commitHash: z5.string(),
1625
1620
  repoUrl: z5.string(),
1621
+ mobbUserEmail: z5.string(),
1626
1622
  extraHeaders: z5.record(z5.string(), z5.string()).default({})
1627
1623
  });
1628
1624
  var submitToScmMessageType = {
@@ -1653,6 +1649,7 @@ var FixResponseArrayZ = z5.array(
1653
1649
  })
1654
1650
  );
1655
1651
  var SubmitFixesBaseResponseMessageZ = z5.object({
1652
+ mobbUserEmail: z5.string(),
1656
1653
  submitFixRequestId: z5.string().uuid(),
1657
1654
  submitBranches: z5.array(
1658
1655
  z5.object({
@@ -1686,12 +1683,6 @@ var SubmitFixesResponseMessageZ = z5.discriminatedUnion("type", [
1686
1683
  ]);
1687
1684
 
1688
1685
  // src/features/analysis/scm/scmSubmit/index.ts
1689
- var EnvVariablesZod2 = z6.object({
1690
- BROKERED_HOSTS: z6.string().toLowerCase().transform(
1691
- (x) => x.split(",").map((url) => url.trim(), []).filter(Boolean)
1692
- ).default("")
1693
- });
1694
- var { BROKERED_HOSTS: BROKERED_HOSTS2 } = EnvVariablesZod2.parse(process.env);
1695
1686
  var isValidBranchName = async (branchName) => {
1696
1687
  const git = simpleGit();
1697
1688
  try {
@@ -1712,6 +1703,9 @@ var FixesZ = z6.array(
1712
1703
  ).nonempty();
1713
1704
 
1714
1705
  // src/features/analysis/scm/scm.ts
1706
+ function isBrokerUrl(url) {
1707
+ return z7.string().uuid().safeParse(new URL(url).host).success;
1708
+ }
1715
1709
  var GetRefererenceResultZ = z7.object({
1716
1710
  date: z7.date().optional(),
1717
1711
  sha: z7.string(),
@@ -1762,10 +1756,11 @@ function getScmLibTypeFromScmType(scmType) {
1762
1756
  function getScmConfig({
1763
1757
  url,
1764
1758
  scmConfigs,
1759
+ brokerHosts,
1765
1760
  includeOrgTokens = true
1766
1761
  }) {
1762
+ const urlObject = new URL(url);
1767
1763
  const filteredScmConfigs = scmConfigs.filter((scm) => {
1768
- const urlObject = new URL(url);
1769
1764
  const configUrl = new URL(scm.scmUrl);
1770
1765
  return (
1771
1766
  //if we the user does an ADO oauth flow then the token is saved for dev.azure.com but
@@ -1774,13 +1769,20 @@ function getScmConfig({
1774
1769
  (urlObject.hostname.toLowerCase() === configUrl.hostname.toLowerCase() || urlObject.hostname.toLowerCase().endsWith(".visualstudio.com") && configUrl.hostname.toLowerCase() === "dev.azure.com") && urlObject.protocol === configUrl.protocol && urlObject.port === configUrl.port
1775
1770
  );
1776
1771
  });
1772
+ const filteredBrokerHosts = brokerHosts.filter((broker) => {
1773
+ const urlObject2 = new URL(url);
1774
+ return urlObject2.hostname.toLowerCase() === broker.realDomain.toLowerCase();
1775
+ });
1776
+ const virtualDomain = filteredBrokerHosts[0]?.virtualDomain;
1777
+ const virtualUrl = virtualDomain ? `https://${virtualDomain}${urlObject.pathname}${urlObject.search}` : void 0;
1777
1778
  const scmOrgConfig = filteredScmConfigs.find((scm) => scm.orgId && scm.token);
1778
1779
  if (scmOrgConfig && includeOrgTokens) {
1779
1780
  return {
1780
1781
  id: scmOrgConfig.id,
1781
1782
  accessToken: scmOrgConfig.token || void 0,
1782
1783
  scmLibType: getScmLibTypeFromScmType(scmOrgConfig.scmType),
1783
- scmOrg: scmOrgConfig.scmOrg || void 0
1784
+ scmOrg: scmOrgConfig.scmOrg || void 0,
1785
+ virtualUrl
1784
1786
  };
1785
1787
  }
1786
1788
  const scmUserConfig = filteredScmConfigs.find(
@@ -1791,7 +1793,8 @@ function getScmConfig({
1791
1793
  id: scmUserConfig.id,
1792
1794
  accessToken: scmUserConfig.token || void 0,
1793
1795
  scmLibType: getScmLibTypeFromScmType(scmUserConfig.scmType),
1794
- scmOrg: scmUserConfig.scmOrg || void 0
1796
+ scmOrg: scmUserConfig.scmOrg || void 0,
1797
+ virtualUrl
1795
1798
  };
1796
1799
  }
1797
1800
  const type2 = getCloudScmLibTypeFromUrl(url);
@@ -1800,14 +1803,16 @@ function getScmConfig({
1800
1803
  id: void 0,
1801
1804
  accessToken: void 0,
1802
1805
  scmLibType: type2,
1803
- scmOrg: void 0
1806
+ scmOrg: void 0,
1807
+ virtualUrl
1804
1808
  };
1805
1809
  }
1806
1810
  return {
1807
1811
  id: void 0,
1808
1812
  accessToken: void 0,
1809
1813
  scmLibType: void 0,
1810
- scmOrg: void 0
1814
+ scmOrg: void 0,
1815
+ virtualUrl
1811
1816
  };
1812
1817
  }
1813
1818
  var InvalidRepoUrlError = class extends Error {
@@ -1836,7 +1841,7 @@ var RepoNoTokenAccessError = class extends Error {
1836
1841
  this.scmType = scmType;
1837
1842
  }
1838
1843
  };
1839
- function buildAuthrizedRepoUrl(args) {
1844
+ function buildAuthorizedRepoUrl(args) {
1840
1845
  const { url, username, password } = args;
1841
1846
  const is_http = url.toLowerCase().startsWith("http://");
1842
1847
  const is_https = url.toLowerCase().startsWith("https://");
@@ -1888,7 +1893,7 @@ var SCMLib = class {
1888
1893
  case "token": {
1889
1894
  const { token } = authData;
1890
1895
  const username2 = await this._getUsernameForAuthUrl();
1891
- return buildAuthrizedRepoUrl({
1896
+ return buildAuthorizedRepoUrl({
1892
1897
  url,
1893
1898
  username: username2,
1894
1899
  password: token
@@ -1896,13 +1901,14 @@ var SCMLib = class {
1896
1901
  }
1897
1902
  case "basic": {
1898
1903
  const { username: username2, password } = authData;
1899
- return buildAuthrizedRepoUrl({ url, username: username2, password });
1904
+ return buildAuthorizedRepoUrl({ url, username: username2, password });
1900
1905
  }
1901
1906
  }
1902
1907
  }
1908
+ const finalUrl = scmLibType === "GITLAB" /* GITLAB */ ? `${trimmedUrl}.git` : trimmedUrl;
1903
1909
  const username = await this._getUsernameForAuthUrl();
1904
- return buildAuthrizedRepoUrl({
1905
- url: trimmedUrl,
1910
+ return buildAuthorizedRepoUrl({
1911
+ url: finalUrl,
1906
1912
  username,
1907
1913
  password: accessToken
1908
1914
  });
@@ -2867,7 +2873,7 @@ async function getAdoApiClient(params) {
2867
2873
  return connection2;
2868
2874
  }
2869
2875
  const authHandler = api.getPersonalAccessTokenHandler(params.accessToken);
2870
- const isBroker = BROKERED_HOSTS.includes(new URL(orgUrl).origin);
2876
+ const isBroker = isBrokerUrl(orgUrl);
2871
2877
  const connection = new api.WebApi(
2872
2878
  orgUrl,
2873
2879
  authHandler,
@@ -3363,6 +3369,14 @@ var MeDocument = `
3363
3369
  me {
3364
3370
  id
3365
3371
  email
3372
+ userOrganizationsAndUserOrganizationRoles {
3373
+ organization {
3374
+ brokerHosts {
3375
+ realDomain
3376
+ virtualDomain
3377
+ }
3378
+ }
3379
+ }
3366
3380
  scmConfigs {
3367
3381
  id
3368
3382
  orgId
@@ -5157,6 +5171,20 @@ function _getUrlForScmType({
5157
5171
  };
5158
5172
  }
5159
5173
  }
5174
+ function getBrokerHosts(userOrgsAnUserOrgRoles) {
5175
+ const brokerHosts = [];
5176
+ if (!userOrgsAnUserOrgRoles) {
5177
+ return brokerHosts;
5178
+ }
5179
+ userOrgsAnUserOrgRoles.forEach((org) => {
5180
+ org?.organization?.brokerHosts.forEach((brokerHost) => {
5181
+ if (brokerHost) {
5182
+ brokerHosts.push(brokerHost);
5183
+ }
5184
+ });
5185
+ });
5186
+ return brokerHosts;
5187
+ }
5160
5188
  async function getScmTokenInfo(params) {
5161
5189
  const { gqlClient, repo } = params;
5162
5190
  const userInfo = await gqlClient.getUserInfo();
@@ -5167,7 +5195,10 @@ async function getScmTokenInfo(params) {
5167
5195
  return getScmConfig({
5168
5196
  url: repo,
5169
5197
  scmConfigs,
5170
- includeOrgTokens: false
5198
+ includeOrgTokens: false,
5199
+ brokerHosts: getBrokerHosts(
5200
+ userInfo.userOrganizationsAndUserOrganizationRoles
5201
+ )
5171
5202
  });
5172
5203
  }
5173
5204
  async function getReport(params, { skipPrompts }) {
@@ -5468,6 +5499,9 @@ async function _scan(params, { skipPrompts = false } = {}) {
5468
5499
  const tokenInfo2 = getScmConfig({
5469
5500
  url: repoUrl,
5470
5501
  scmConfigs,
5502
+ brokerHosts: getBrokerHosts(
5503
+ userInfo.userOrganizationsAndUserOrganizationRoles
5504
+ ),
5471
5505
  includeOrgTokens: false
5472
5506
  });
5473
5507
  if (tokenInfo2.accessToken && tokenInfo2.accessToken !== oldToken) {
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "mobbdev",
3
- "version": "0.0.155",
3
+ "version": "0.0.157",
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
+ "clean": "rm -rf build",
9
10
  "env": "dotenv -e ./.env",
10
11
  "postinstall": "node ./src/post_install/cx_install.mjs",
11
12
  "build": "tsc && tsup-node --env.NODE_ENV production",
@@ -33,13 +34,13 @@
33
34
  "@octokit/request-error": "3.0.3",
34
35
  "@types/libsodium-wrappers": "0.7.13",
35
36
  "adm-zip": "0.5.15",
36
- "axios": "1.7.3",
37
+ "axios": "1.7.7",
37
38
  "azure-devops-node-api": "12.1.0",
38
39
  "bitbucket": "2.11.0",
39
40
  "chalk": "5.3.0",
40
41
  "chalk-animation": "2.0.3",
41
42
  "configstore": "6.0.0",
42
- "debug": "4.3.6",
43
+ "debug": "4.3.7",
43
44
  "dotenv": "16.4.5",
44
45
  "extract-zip": "2.0.1",
45
46
  "globby": "13.2.2",
@@ -57,12 +58,12 @@
57
58
  "open": "8.4.2",
58
59
  "parse-diff": "0.11.1",
59
60
  "semver": "7.6.3",
60
- "simple-git": "3.25.0",
61
- "snyk": "1.1292.4",
61
+ "simple-git": "3.26.0",
62
+ "snyk": "1.1293.0",
62
63
  "supports-color": "9.4.0",
63
64
  "tar": "6.2.1",
64
65
  "tmp": "0.2.3",
65
- "undici": "6.19.5",
66
+ "undici": "6.19.8",
66
67
  "uuid": "10.0.0",
67
68
  "ws": "8.18.0",
68
69
  "yargs": "17.7.2",
@@ -85,11 +86,11 @@
85
86
  "@types/tmp": "0.2.6",
86
87
  "@types/uuid": "10.0.0",
87
88
  "@types/ws": "8.5.12",
88
- "@types/yargs": "17.0.32",
89
+ "@types/yargs": "17.0.33",
89
90
  "@typescript-eslint/eslint-plugin": "7.17.0",
90
91
  "@typescript-eslint/parser": "7.17.0",
91
92
  "eslint": "8.57.0",
92
- "eslint-plugin-import": "2.29.1",
93
+ "eslint-plugin-import": "2.30.0",
93
94
  "eslint-plugin-prettier": "5.2.1",
94
95
  "eslint-plugin-simple-import-sort": "10.0.0",
95
96
  "prettier": "3.3.3",