@dxworks/depinder 0.1.1

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 (98) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -0
  3. package/dist/assets/.gitkeep +0 -0
  4. package/dist/assets/depinder.docker-compose.yml +68 -0
  5. package/dist/assets/init-mongo.d.ts +0 -0
  6. package/dist/assets/init-mongo.js +16 -0
  7. package/dist/assets/init-mongo.js.map +1 -0
  8. package/dist/cache/cache.d.ts +9 -0
  9. package/dist/cache/cache.js +18 -0
  10. package/dist/cache/cache.js.map +1 -0
  11. package/dist/cache/json-cache.d.ts +2 -0
  12. package/dist/cache/json-cache.js +45 -0
  13. package/dist/cache/json-cache.js.map +1 -0
  14. package/dist/cache/mongo-cache.d.ts +5 -0
  15. package/dist/cache/mongo-cache.js +97 -0
  16. package/dist/cache/mongo-cache.js.map +1 -0
  17. package/dist/commands/analyse.d.ts +8 -0
  18. package/dist/commands/analyse.js +215 -0
  19. package/dist/commands/analyse.js.map +1 -0
  20. package/dist/commands/cache.d.ts +11 -0
  21. package/dist/commands/cache.js +83 -0
  22. package/dist/commands/cache.js.map +1 -0
  23. package/dist/commands/info.d.ts +0 -0
  24. package/dist/commands/info.js +190 -0
  25. package/dist/commands/info.js.map +1 -0
  26. package/dist/commands/update.d.ts +3 -0
  27. package/dist/commands/update.js +85 -0
  28. package/dist/commands/update.js.map +1 -0
  29. package/dist/depinder.d.ts +2 -0
  30. package/dist/depinder.js +16 -0
  31. package/dist/depinder.js.map +1 -0
  32. package/dist/extension-points/code-impact.d.ts +14 -0
  33. package/dist/extension-points/code-impact.js +3 -0
  34. package/dist/extension-points/code-impact.js.map +1 -0
  35. package/dist/extension-points/extract.d.ts +36 -0
  36. package/dist/extension-points/extract.js +3 -0
  37. package/dist/extension-points/extract.js.map +1 -0
  38. package/dist/extension-points/plugin-loader.d.ts +2 -0
  39. package/dist/extension-points/plugin-loader.js +18 -0
  40. package/dist/extension-points/plugin-loader.js.map +1 -0
  41. package/dist/extension-points/plugin.d.ts +13 -0
  42. package/dist/extension-points/plugin.js +3 -0
  43. package/dist/extension-points/plugin.js.map +1 -0
  44. package/dist/extension-points/registrar.d.ts +41 -0
  45. package/dist/extension-points/registrar.js +59 -0
  46. package/dist/extension-points/registrar.js.map +1 -0
  47. package/dist/extension-points/vulnerability-checker.d.ts +21 -0
  48. package/dist/extension-points/vulnerability-checker.js +3 -0
  49. package/dist/extension-points/vulnerability-checker.js.map +1 -0
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.js +7 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/info/php/parser.d.ts +80 -0
  54. package/dist/info/php/parser.js +61 -0
  55. package/dist/info/php/parser.js.map +1 -0
  56. package/dist/plugins/dotnet/index.d.ts +11 -0
  57. package/dist/plugins/dotnet/index.js +146 -0
  58. package/dist/plugins/dotnet/index.js.map +1 -0
  59. package/dist/plugins/index.d.ts +3 -0
  60. package/dist/plugins/index.js +35 -0
  61. package/dist/plugins/index.js.map +1 -0
  62. package/dist/plugins/java/google.registrar.d.ts +0 -0
  63. package/dist/plugins/java/google.registrar.js +59 -0
  64. package/dist/plugins/java/google.registrar.js.map +1 -0
  65. package/dist/plugins/java/index.d.ts +7 -0
  66. package/dist/plugins/java/index.js +152 -0
  67. package/dist/plugins/java/index.js.map +1 -0
  68. package/dist/plugins/java/parsers/maven.d.ts +2 -0
  69. package/dist/plugins/java/parsers/maven.js +51 -0
  70. package/dist/plugins/java/parsers/maven.js.map +1 -0
  71. package/dist/plugins/javascript/index.d.ts +4 -0
  72. package/dist/plugins/javascript/index.js +151 -0
  73. package/dist/plugins/javascript/index.js.map +1 -0
  74. package/dist/plugins/php/index.d.ts +9 -0
  75. package/dist/plugins/php/index.js +131 -0
  76. package/dist/plugins/php/index.js.map +1 -0
  77. package/dist/plugins/php/php-interfaces.d.ts +117 -0
  78. package/dist/plugins/php/php-interfaces.js +67 -0
  79. package/dist/plugins/php/php-interfaces.js.map +1 -0
  80. package/dist/plugins/python/index.d.ts +15 -0
  81. package/dist/plugins/python/index.js +235 -0
  82. package/dist/plugins/python/index.js.map +1 -0
  83. package/dist/plugins/ruby/index.d.ts +4 -0
  84. package/dist/plugins/ruby/index.js +142 -0
  85. package/dist/plugins/ruby/index.js.map +1 -0
  86. package/dist/utils/blacklist.d.ts +1 -0
  87. package/dist/utils/blacklist.js +13 -0
  88. package/dist/utils/blacklist.js.map +1 -0
  89. package/dist/utils/npm.d.ts +8 -0
  90. package/dist/utils/npm.js +19 -0
  91. package/dist/utils/npm.js.map +1 -0
  92. package/dist/utils/utils.d.ts +10 -0
  93. package/dist/utils/utils.js +58 -0
  94. package/dist/utils/utils.js.map +1 -0
  95. package/dist/utils/vulnerabilities.d.ts +5 -0
  96. package/dist/utils/vulnerabilities.js +103 -0
  97. package/dist/utils/vulnerabilities.js.map +1 -0
  98. package/package.json +109 -0
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ruby = exports.retrieveFormRubyGems = void 0;
30
+ // @ts-ignore
31
+ const gemfile = __importStar(require("@snyk/gemfile"));
32
+ const path_1 = __importDefault(require("path"));
33
+ const preload_1 = __importDefault(require("semver/preload"));
34
+ const node_fetch_1 = __importDefault(require("node-fetch"));
35
+ const extractor = {
36
+ files: ['Gemfile', '*.gemspec', 'Gemfile.lock'],
37
+ createContexts: files => files.filter(it => it.endsWith('Gemfile.lock')).map(it => ({
38
+ root: path_1.default.dirname(it),
39
+ lockFile: path_1.default.basename(it),
40
+ })),
41
+ };
42
+ const parser = {
43
+ parseDependencyTree: parseLockFile,
44
+ };
45
+ function transformDeps(tree, root) {
46
+ const result = {};
47
+ const directDeps = new Set(Object.keys(tree.dependencies));
48
+ Object.keys(tree.specs).forEach(specName => {
49
+ const value = tree.specs[specName];
50
+ const id = `${specName}@${value.version}`;
51
+ result[id] = {
52
+ id,
53
+ name: specName,
54
+ version: value.version,
55
+ semver: preload_1.default.coerce(value.version),
56
+ type: value.type,
57
+ requestedBy: [],
58
+ };
59
+ });
60
+ Object.keys(tree.specs).forEach(specName => {
61
+ const value = tree.specs[specName];
62
+ const id = `${specName}@${value.version}`;
63
+ Object.keys(value).filter(it => !['version', 'remote', 'type'].includes(it)).forEach(spec => {
64
+ const cachedValue = result[id];
65
+ if (cachedValue && value[spec].version) {
66
+ cachedValue.requestedBy = [...cachedValue.requestedBy, id];
67
+ }
68
+ });
69
+ });
70
+ // TODO: read Gemfile and add the requestedBy field for the direct dependencies
71
+ directDeps.forEach(dep => {
72
+ const key = Object.keys(result).find(it => it.startsWith(`${dep}@`));
73
+ if (!key)
74
+ return;
75
+ const cachedValue = result[key];
76
+ if (cachedValue) {
77
+ cachedValue.requestedBy = [...cachedValue.requestedBy, root];
78
+ }
79
+ });
80
+ return result;
81
+ }
82
+ function parseLockFile({ root, lockFile }) {
83
+ const result = gemfile.parseSync(path_1.default.resolve(root, lockFile), true);
84
+ return {
85
+ name: path_1.default.basename(root),
86
+ path: root,
87
+ version: '',
88
+ dependencies: transformDeps(result, `${path_1.default.basename(root)}@`),
89
+ };
90
+ }
91
+ const registrarCache = new Map();
92
+ async function retrieveFormRubyGems(libraryName) {
93
+ if (registrarCache.has(libraryName))
94
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
95
+ return registrarCache.get(libraryName);
96
+ const gemResponse = await (0, node_fetch_1.default)(`https://rubygems.org/api/v1/gems/${libraryName}.json`);
97
+ const gemData = await gemResponse.json();
98
+ const versionsResponse = await (0, node_fetch_1.default)(`https://rubygems.org/api/v1/versions/${libraryName}.json`);
99
+ const versionsData = await versionsResponse.json();
100
+ const libInfo = {
101
+ name: gemData.name,
102
+ versions: versionsData.map((it) => {
103
+ return {
104
+ version: it.number,
105
+ timestamp: Date.parse(it.created_at),
106
+ buildAt: Date.parse(it.built_at),
107
+ licenses: it.licenses,
108
+ latest: it.number == gemData.version,
109
+ rubyVersion: it.ruby_version,
110
+ rubygemsVersion: it.rubygems_version,
111
+ };
112
+ }),
113
+ description: gemData.info,
114
+ issuesUrl: [gemData.metadata.bug_tracker_uri],
115
+ licenses: gemData.licenses,
116
+ reposUrl: [gemData.metadata.source_code_uri],
117
+ documentationUrl: gemData.metadata.documentation_uri,
118
+ homepageUrl: gemData.homepage_uri,
119
+ packageUrl: gemData.gem_uri,
120
+ keywords: [],
121
+ downloads: gemData.downloads,
122
+ };
123
+ registrarCache.set(libraryName, libInfo);
124
+ return libInfo;
125
+ }
126
+ exports.retrieveFormRubyGems = retrieveFormRubyGems;
127
+ const registrar = {
128
+ retrieve: retrieveFormRubyGems,
129
+ };
130
+ const checker = {
131
+ githubSecurityAdvisoryEcosystem: 'RUBYGEMS',
132
+ getPURL: (lib, ver) => `pkg:gem/${lib}@${ver}`,
133
+ };
134
+ exports.ruby = {
135
+ name: 'ruby',
136
+ aliases: ['gem'],
137
+ extractor,
138
+ parser,
139
+ registrar,
140
+ checker,
141
+ };
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/ruby/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const blacklistedGlobs: string[];
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.blacklistedGlobs = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const blacklistFile = path_1.default.join(process.cwd(), '.blacklist');
10
+ exports.blacklistedGlobs = fs_1.default.existsSync(blacklistFile) ?
11
+ fs_1.default.readFileSync(blacklistFile).toString().split('\n').filter(it => it.trim() !== '' && !it.startsWith('#'))
12
+ : [];
13
+ //# sourceMappingURL=blacklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blacklist.js","sourceRoot":"","sources":["../../src/utils/blacklist.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,4CAAmB;AAEnB,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAA;AAE/C,QAAA,gBAAgB,GAAG,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1D,YAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3G,CAAC,CAAC,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="node" />
2
+ export declare const npm: {
3
+ install: typeof install;
4
+ npmCommand: typeof npmCommand;
5
+ };
6
+ declare function install(module: string | undefined, otherOptions: string | undefined, directory: string): any;
7
+ declare function npmCommand(args: string, options?: any): string | Buffer;
8
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.npm = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const utils_1 = require("./utils");
6
+ exports.npm = {
7
+ install,
8
+ npmCommand,
9
+ };
10
+ function install(module = '', otherOptions = '', directory) {
11
+ npmCommand(`install ${module} ${otherOptions}`, { cwd: directory, stdio: 'inherit' });
12
+ }
13
+ function npmCommand(args, options) {
14
+ if (!options)
15
+ return (0, child_process_1.execSync)(`${utils_1.npmExePath} ${args}`, { cwd: options.cwd, stdio: ['pipe', 'pipe', 'inherit'] });
16
+ else
17
+ return (0, child_process_1.execSync)(`${utils_1.npmExePath} ${args}`, options);
18
+ }
19
+ //# sourceMappingURL=npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/utils/npm.ts"],"names":[],"mappings":";;;AAAA,iDAAsC;AACtC,mCAAkC;AAErB,QAAA,GAAG,GAAG;IACf,OAAO;IACP,UAAU;CACb,CAAA;AAED,SAAS,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,SAAiB;IAC9D,UAAU,CAAC,WAAW,MAAM,IAAI,YAAY,EAAE,EAAE,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC,CAAA;AACvF,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,OAAa;IAC3C,IAAI,CAAC,OAAO;QACR,OAAO,IAAA,wBAAQ,EAAC,GAAG,kBAAU,IAAI,IAAI,EAAE,EAAE,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAC,CAAC,CAAA;;QAEhG,OAAO,IAAA,wBAAQ,EAAC,GAAG,kBAAU,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;AACzD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { SemVer } from 'semver';
2
+ export declare const _package: any;
3
+ export declare function getAssetFile(assetName: string): string;
4
+ export declare const npmExePath: string;
5
+ export declare const depinderFolder: string;
6
+ export declare const depinderTempFolder: string;
7
+ export declare function getHomeDir(): string;
8
+ export declare function walkDir(dir: string): string[];
9
+ export declare function delay(ms: number): Promise<void>;
10
+ export declare function getPackageSemver(version: string): SemVer | null;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPackageSemver = exports.delay = exports.walkDir = exports.getHomeDir = exports.depinderTempFolder = exports.depinderFolder = exports.npmExePath = exports.getAssetFile = exports._package = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const os_1 = require("os");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const semver_1 = require("semver");
11
+ const preload_1 = __importDefault(require("semver/preload"));
12
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
13
+ exports._package = require('../../package.json');
14
+ function getAssetFile(assetName) {
15
+ return path_1.default.join(__dirname, '..', 'assets', assetName);
16
+ }
17
+ exports.getAssetFile = getAssetFile;
18
+ exports.npmExePath = getBin('npm');
19
+ function getBin(exe) {
20
+ return path_1.default.resolve(__dirname, '..', '..', 'node_modules', '.bin', exe);
21
+ }
22
+ exports.depinderFolder = path_1.default.join((0, os_1.homedir)(), '.dxw', 'depinder');
23
+ exports.depinderTempFolder = path_1.default.join(exports.depinderFolder, 'temp');
24
+ function getHomeDir() {
25
+ if (!fs_1.default.existsSync(exports.depinderFolder)) {
26
+ fs_1.default.mkdirSync(exports.depinderFolder);
27
+ }
28
+ if (!fs_1.default.existsSync(exports.depinderTempFolder)) {
29
+ fs_1.default.mkdirSync(exports.depinderTempFolder);
30
+ }
31
+ return exports.depinderFolder;
32
+ }
33
+ exports.getHomeDir = getHomeDir;
34
+ function walkDir(dir) {
35
+ const allChildren = fs_1.default.readdirSync(dir);
36
+ const files = allChildren.map(it => path_1.default.resolve(dir, it)).filter(it => fs_1.default.lstatSync(it).isFile());
37
+ return [...files, ...allChildren.map(it => path_1.default.resolve(dir, it)).filter(it => fs_1.default.lstatSync(it).isDirectory()).flatMap(it => walkDir(path_1.default.resolve(dir, it)))];
38
+ }
39
+ exports.walkDir = walkDir;
40
+ function delay(ms) {
41
+ return new Promise(resolve => setTimeout(resolve, ms));
42
+ }
43
+ exports.delay = delay;
44
+ function getPackageSemver(version) {
45
+ try {
46
+ return new semver_1.SemVer(version);
47
+ }
48
+ catch (e) {
49
+ try {
50
+ return new semver_1.SemVer(version, { loose: true });
51
+ }
52
+ catch (e) {
53
+ return preload_1.default.coerce(version);
54
+ }
55
+ }
56
+ }
57
+ exports.getPackageSemver = getPackageSemver;
58
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,2BAA0B;AAC1B,4CAAmB;AACnB,mCAA6B;AAC7B,6DAAmC;AAEnC,8DAA8D;AACjD,QAAA,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAGrD,SAAgB,YAAY,CAAC,SAAiB;IAC1C,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;AAC1D,CAAC;AAFD,oCAEC;AAEY,QAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AAEvC,SAAS,MAAM,CAAC,GAAW;IACvB,OAAO,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;AAC3E,CAAC;AAGY,QAAA,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,YAAO,GAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;AACzD,QAAA,kBAAkB,GAAG,cAAI,CAAC,IAAI,CAAC,sBAAc,EAAE,MAAM,CAAC,CAAA;AAEnE,SAAgB,UAAU;IACtB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,sBAAc,CAAC,EAAE;QAChC,YAAE,CAAC,SAAS,CAAC,sBAAc,CAAC,CAAA;KAC/B;IACD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,0BAAkB,CAAC,EAAE;QACpC,YAAE,CAAC,SAAS,CAAC,0BAAkB,CAAC,CAAA;KACnC;IACD,OAAO,sBAAc,CAAA;AACzB,CAAC;AARD,gCAQC;AAED,SAAgB,OAAO,CAAC,GAAW;IAC/B,MAAM,WAAW,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,YAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAClG,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,YAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AACjK,CAAC;AAJD,0BAIC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAFD,sBAEC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC5C,IAAI;QACA,OAAO,IAAI,eAAM,CAAC,OAAO,CAAC,CAAA;KAC7B;IAAC,OAAO,CAAC,EAAE;QACR,IAAI;YACA,OAAO,IAAI,eAAM,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAA;SAE5C;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,iBAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;SAChC;KACJ;AACL,CAAC;AAXD,4CAWC"}
@@ -0,0 +1,5 @@
1
+ import { Vulnerability } from '../extension-points/vulnerability-checker';
2
+ export declare function getVulnerabilitiesFromGithub(ecosystem: string, packageName: string): Promise<Vulnerability[]>;
3
+ export declare function getVulnerabilitiesFromSonatype(purls: string[]): Promise<{
4
+ [purl: string]: Vulnerability[];
5
+ }>;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getVulnerabilitiesFromSonatype = exports.getVulnerabilitiesFromGithub = void 0;
7
+ const graphql_1 = require("@octokit/graphql");
8
+ const axios_1 = __importDefault(require("axios"));
9
+ async function getVulnerabilitiesFromGithub(ecosystem, packageName) {
10
+ const authGraphql = graphql_1.graphql.defaults({
11
+ headers: {
12
+ authorization: `token ${process.env.GH_TOKEN}`,
13
+ },
14
+ });
15
+ const response = await authGraphql(`
16
+ query securityVulnerabilities($ecosystem: SecurityAdvisoryEcosystem, $package: String!){
17
+ securityVulnerabilities(first: 100, ecosystem: $ecosystem package: $package) {
18
+ pageInfo {
19
+ endCursor
20
+ hasNextPage
21
+ }
22
+ nodes {
23
+ firstPatchedVersion {
24
+ identifier
25
+ }
26
+ package {
27
+ name
28
+ ecosystem
29
+ }
30
+ severity
31
+ updatedAt
32
+ vulnerableVersionRange
33
+ advisory {
34
+ identifiers {
35
+ value
36
+ type
37
+ }
38
+ databaseId
39
+ description
40
+ ghsaId
41
+ id
42
+ origin
43
+ permalink
44
+ publishedAt
45
+ references {
46
+ url
47
+ }
48
+ severity
49
+ summary
50
+ updatedAt
51
+ withdrawnAt
52
+ }
53
+ }
54
+ }
55
+ }
56
+ `.trim(), {
57
+ ecosystem: ecosystem,
58
+ package: packageName,
59
+ });
60
+ return response.securityVulnerabilities.nodes.map((it) => {
61
+ var _a;
62
+ return {
63
+ severity: it.severity,
64
+ updatedAt: it.updatedAt,
65
+ timestamp: Date.parse(it.advisory.publishedAt),
66
+ summary: it.advisory.summary,
67
+ description: it.advisory.description,
68
+ permalink: it.advisory.permalink,
69
+ identifiers: it.advisory.identifiers,
70
+ references: it.advisory.references,
71
+ vulnerableRange: it.vulnerableVersionRange,
72
+ firstPatchedVersion: (_a = it.firstPatchedVersion) === null || _a === void 0 ? void 0 : _a.identifiers,
73
+ };
74
+ });
75
+ }
76
+ exports.getVulnerabilitiesFromGithub = getVulnerabilitiesFromGithub;
77
+ async function getVulnerabilitiesFromSonatype(purls) {
78
+ const { data } = await axios_1.default.post('https://ossindex.sonatype.org/api/v3/component-report', { coordinates: purls });
79
+ return data.reduce((a, v) => (Object.assign(Object.assign({}, a), { [v.coordinates]: v.vulnerabilities.map((it) => ({
80
+ severity: mapSeverity(it.cvssScore),
81
+ score: it.cvssScore,
82
+ description: it.description,
83
+ summary: it.title,
84
+ identifiers: [{ value: it.cve, type: 'CVE' }],
85
+ permalink: it.reference,
86
+ references: [it.reference, ...it.externalReferences],
87
+ })) })), {});
88
+ }
89
+ exports.getVulnerabilitiesFromSonatype = getVulnerabilitiesFromSonatype;
90
+ function mapSeverity(cvssScore) {
91
+ if (cvssScore < 1)
92
+ return 'NONE';
93
+ if (cvssScore < 4)
94
+ return 'LOW';
95
+ if (cvssScore < 7)
96
+ return 'MEDIUM';
97
+ if (cvssScore < 9)
98
+ return 'HIGH';
99
+ if (cvssScore <= 10)
100
+ return 'CRITICAL';
101
+ return 'NONE';
102
+ }
103
+ //# sourceMappingURL=vulnerabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vulnerabilities.js","sourceRoot":"","sources":["../../src/utils/vulnerabilities.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAwC;AACxC,kDAAyB;AAGlB,KAAK,UAAU,4BAA4B,CAAC,SAAiB,EAAE,WAAmB;IACrF,MAAM,WAAW,GAAG,iBAAO,CAAC,QAAQ,CAAC;QACjC,OAAO,EAAE;YACL,aAAa,EAAE,SAAS,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;SACjD;KACJ,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAQ,MAAM,WAAW,CACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAyCC,CAAC,IAAI,EAAE,EACR;QACI,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,WAAW;KACvB,CACJ,CAAA;IACD,OAAO,QAAQ,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE;;QAC1D,OAAO;YACH,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC9C,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO;YAC5B,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW;YACpC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS;YAChC,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW;YACpC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU;YAClC,eAAe,EAAE,EAAE,CAAC,sBAAsB;YAC1C,mBAAmB,EAAE,MAAA,EAAE,CAAC,mBAAmB,0CAAE,WAAW;SAC1C,CAAA;IACtB,CAAC,CAAC,CAAA;AAEN,CAAC;AAtED,oEAsEC;AACM,KAAK,UAAU,8BAA8B,CAAC,KAAe;IAChE,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,uDAAuD,EAAE,EAAC,WAAW,EAAE,KAAK,EAAC,CAAC,CAAA;IAE9G,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,iCAChC,CAAC,KAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;YACvD,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC;YACnC,KAAK,EAAE,EAAE,CAAC,SAAS;YACnB,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,OAAO,EAAE,EAAE,CAAC,KAAK;YACjB,WAAW,EAAE,CAAC,EAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC;YAC3C,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,UAAU,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC;SACrC,CAAA,CAAC,IACtB,EAAE,EAAE,CAAC,CAAA;AACX,CAAC;AAdD,wEAcC;AAGD,SAAS,WAAW,CAAC,SAAc;IAC/B,IAAG,SAAS,GAAG,CAAC;QACZ,OAAO,MAAM,CAAA;IACjB,IAAG,SAAS,GAAG,CAAC;QACZ,OAAO,KAAK,CAAA;IAChB,IAAG,SAAS,GAAG,CAAC;QACZ,OAAO,QAAQ,CAAA;IACnB,IAAG,SAAS,GAAG,CAAC;QACZ,OAAO,MAAM,CAAA;IACjB,IAAG,SAAS,IAAG,EAAE;QACb,OAAO,UAAU,CAAA;IAErB,OAAO,MAAM,CAAA;AACjB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,109 @@
1
+ {
2
+ "name": "@dxworks/depinder",
3
+ "version": "0.1.1",
4
+ "description": "",
5
+ "keywords": [
6
+ "dxworks",
7
+ "dxw"
8
+ ],
9
+ "homepage": "https://github.com/dxworks/depinder#readme",
10
+ "bugs": {
11
+ "url": "https://github.com/dxworks/depinder/issues"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/dxworks/depinder.git"
16
+ },
17
+ "license": "Apache-2.0",
18
+ "author": "Mario Rivis <mario.rivis@gmail.com>",
19
+ "main": "dist/depinder.js",
20
+ "bin": {
21
+ "depinder": "dist/index.js"
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "scripts": {
27
+ "build": "npm run clean && tsc -p tsconfig.build.json && npm run copy-files",
28
+ "clean": "rimraf dist/ *.tsbuildinfo",
29
+ "clean:modules": "rm -rf ./node_modules ./package-lock.json",
30
+ "copy-files": "copyfiles -a -u 1 src/assets/**/*.* dist",
31
+ "create": "npm run build && npm run test",
32
+ "lint": "eslint ./src --ext .ts",
33
+ "lint:fix": "eslint ./src --ext .ts --fix",
34
+ "local": "npm run build && npm link && npx dx-depinder --help",
35
+ "refresh": "rm -rf ./node_modules ./package-lock.json && npm install",
36
+ "test": "jest --passWithNoTests",
37
+ "test:dev": "jest --watch"
38
+ },
39
+ "dependencies": {
40
+ "@dxworks/cli-common": "^0.0.20",
41
+ "@dxworks/ktextensions": "^0.1.0",
42
+ "@dxworks/nuget-inspector": "^1.2.0",
43
+ "@octokit/graphql": "^4.8.0",
44
+ "@snyk/gemfile": "^1.2.0",
45
+ "chalk": "^4.1.2",
46
+ "cli-progress": "^3.11.2",
47
+ "commander": "^11.1.0",
48
+ "cross-env": "^7.0.3",
49
+ "csv": "^6.0.4",
50
+ "dotenv": "^16.0.3",
51
+ "lodash": "^4.17.21",
52
+ "minimatch": "^6.1.6",
53
+ "moment": "^2.29.1",
54
+ "mongodb": "^5.8.1",
55
+ "mongoose": "^7.5.2",
56
+ "node-html-parser": "^6.1.4",
57
+ "npm": "^9.9.0",
58
+ "npm-registry-fetch": "^12.0.1",
59
+ "packageurl-js": "^0.0.5",
60
+ "pom-parser": "^1.2.0",
61
+ "puppeteer": "18.0.1",
62
+ "semver": "^7.3.5",
63
+ "snyk-gradle-plugin": "^3.25.2",
64
+ "snyk-nodejs-lockfile-parser": "^1.52.1",
65
+ "spdx-correct": "^3.1.1",
66
+ "spdx-license-ids": "^3.0.10",
67
+ "tmp": "^0.2.1",
68
+ "toml": "^3.0.0"
69
+ },
70
+ "devDependencies": {
71
+ "@types/cli-progress": "^3.9.2",
72
+ "@types/dockerode": "^3.3.0",
73
+ "@types/fs-extra": "^9.0.13",
74
+ "@types/inquirer": "^8.1.3",
75
+ "@types/jest": "^27.0.2",
76
+ "@types/lodash": "^4.14.177",
77
+ "@types/node": "^16.10.2",
78
+ "@types/npm-registry-fetch": "^8.0.3",
79
+ "@types/semver": "^7.3.9",
80
+ "@types/spdx-correct": "^2.0.0",
81
+ "@types/string-template": "^1.0.2",
82
+ "@types/tmp": "^0.2.3",
83
+ "@types/ws": "^8.5.4",
84
+ "@typescript-eslint/eslint-plugin": "^4.32.0",
85
+ "@typescript-eslint/parser": "^4.32.0",
86
+ "copyfiles": "^2.4.1",
87
+ "eslint": "^7.32.0",
88
+ "i": "^0.3.7",
89
+ "jest": "^27.2.4",
90
+ "json": "^11.0.0",
91
+ "performance-now": "^2.1.0",
92
+ "rimraf": "^3.0.2",
93
+ "sort-package-json": "^1.52.0",
94
+ "ts-jest": "^27.0.5",
95
+ "ts-node": "^10.2.1",
96
+ "typescript": "^4.4.3"
97
+ },
98
+ "publishConfig": {
99
+ "registry": "https://npm.pkg.github.com"
100
+ },
101
+ "dxw": {
102
+ "commands": [
103
+ {
104
+ "file": "dist/depinder.js",
105
+ "command": "mainCommand"
106
+ }
107
+ ]
108
+ }
109
+ }