mobbdev 0.0.155 → 0.0.159
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/index.mjs +60 -26
- 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,
|
|
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 &&
|
|
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 &&
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1905
|
-
url:
|
|
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 =
|
|
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.
|
|
3
|
+
"version": "0.0.159",
|
|
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.
|
|
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.
|
|
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.
|
|
61
|
-
"snyk": "1.
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|