@nodesecure/scanner 8.1.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/class/logger.class.d.ts +11 -1
  2. package/dist/class/logger.class.d.ts.map +1 -1
  3. package/dist/class/logger.class.js +1 -0
  4. package/dist/class/logger.class.js.map +1 -1
  5. package/dist/comparePayloads.d.ts +1 -1
  6. package/dist/depWalker.d.ts +2 -2
  7. package/dist/depWalker.d.ts.map +1 -1
  8. package/dist/depWalker.js +197 -262
  9. package/dist/depWalker.js.map +1 -1
  10. package/dist/extractors/index.d.ts +2 -2
  11. package/dist/extractors/payload.d.ts +8 -6
  12. package/dist/extractors/payload.d.ts.map +1 -1
  13. package/dist/extractors/payload.js +35 -13
  14. package/dist/extractors/payload.js.map +1 -1
  15. package/dist/extractors/probes/ContactExtractor.class.d.ts +2 -2
  16. package/dist/extractors/probes/ExtensionsExtractor.class.d.ts +2 -2
  17. package/dist/extractors/probes/FlagsExtractor.class.d.ts +2 -2
  18. package/dist/extractors/probes/FlagsExtractor.class.js +1 -1
  19. package/dist/extractors/probes/FlagsExtractor.class.js.map +1 -1
  20. package/dist/extractors/probes/LicensesExtractor.class.d.ts +2 -2
  21. package/dist/extractors/probes/NodeDependenciesExtractor.class.d.ts +2 -2
  22. package/dist/extractors/probes/SizeExtractor.class.d.ts +2 -2
  23. package/dist/extractors/probes/VulnerabilitiesExtractor.class.d.ts +2 -2
  24. package/dist/extractors/probes/WarningsExtractor.class.d.ts +2 -2
  25. package/dist/extractors/probes/index.d.ts +8 -8
  26. package/dist/index.d.ts +8 -8
  27. package/dist/index.js +9 -73
  28. package/dist/index.js.map +1 -1
  29. package/dist/registry/NpmRegistryProvider.d.ts +6 -6
  30. package/dist/registry/PackumentExtractor.d.ts +1 -1
  31. package/dist/registry/RegistryTokenStore.d.ts +1 -1
  32. package/dist/registry/fetchNpmAvatars.d.ts +1 -1
  33. package/dist/types.d.ts +5 -1
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/utils/addMissingVersionFlags.d.ts +1 -1
  36. package/dist/utils/index.d.ts +7 -7
  37. package/dist/utils/isNodesecurePayload.d.ts +1 -1
  38. package/dist/utils/parseSemverRange.d.ts +3 -0
  39. package/dist/utils/parseSemverRange.d.ts.map +1 -0
  40. package/dist/utils/parseSemverRange.js +34 -0
  41. package/dist/utils/parseSemverRange.js.map +1 -0
  42. package/dist/utils/warnings.d.ts +1 -1
  43. package/package.json +19 -15
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter } from "node:events";
2
2
  export declare const ScannerLoggerEvents: {
3
+ readonly error: "error";
3
4
  readonly done: "depWalkerFinished";
4
5
  readonly analysis: {
5
6
  readonly tree: "walkTree";
@@ -17,7 +18,16 @@ export interface LoggerEventData {
17
18
  /** Count of triggered event */
18
19
  count: number;
19
20
  }
20
- export declare class Logger extends EventEmitter {
21
+ export type LoggerEventsMap = {
22
+ start: [eventName: string];
23
+ tick: [eventName: string];
24
+ end: [eventName: string, data: LoggerEventData & {
25
+ executionTime: number;
26
+ }];
27
+ depWalkerFinished: [];
28
+ error: [error: Error, phase?: string];
29
+ };
30
+ export declare class Logger extends EventEmitter<LoggerEventsMap> {
21
31
  events: Map<string, LoggerEventData>;
22
32
  start(eventName: string): this;
23
33
  tick(eventName: string): this;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.class.d.ts","sourceRoot":"","sources":["../../src/class/logger.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,mBAAmB;;;;;;;;;;;CAWtB,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,MAAO,SAAQ,YAAY;IAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAa;IAExD,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAc9B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAW7B,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIhC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAa7B"}
1
+ {"version":3,"file":"logger.class.d.ts","sourceRoot":"","sources":["../../src/class/logger.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;CAYtB,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1B,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG;QAAE,aAAa,EAAE,MAAM,CAAC;KAAE,CAAC,CAAC;IAC7E,iBAAiB,EAAE,EAAE,CAAC;IACtB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,qBAAa,MAAO,SAAQ,YAAY,CAAC,eAAe,CAAC;IAChD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAa;IAExD,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAc9B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAW7B,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIhC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAa7B"}
@@ -2,6 +2,7 @@
2
2
  import { EventEmitter } from "node:events";
3
3
  import { performance } from "node:perf_hooks";
4
4
  export const ScannerLoggerEvents = {
5
+ error: "error",
5
6
  done: "depWalkerFinished",
6
7
  analysis: {
7
8
  tree: "walkTree",
@@ -1 +1 @@
1
- {"version":3,"file":"logger.class.js","sourceRoot":"","sources":["../../src/class/logger.class.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,UAAU;KACrB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,eAAe;KACvB;CACO,CAAC;AASX,MAAM,OAAO,MAAO,SAAQ,YAAY;IAC/B,MAAM,GAAiC,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,CAAC,SAAiB;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;YACzB,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,SAAiB;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE;YAC1B,GAAG,IAAI;YACP,aAAa,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;SAClD,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"logger.class.js","sourceRoot":"","sources":["../../src/class/logger.class.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,UAAU;KACrB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,eAAe;KACvB;CACO,CAAC;AAiBX,MAAM,OAAO,MAAO,SAAQ,YAA6B;IAChD,MAAM,GAAiC,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,CAAC,SAAiB;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;YACzB,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,SAAiB;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE;YAC1B,GAAG,IAAI;YACP,aAAa,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;SAClD,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,6 +1,6 @@
1
1
  import type { Warning } from "@nodesecure/js-x-ray";
2
2
  import * as Vulnera from "@nodesecure/vulnera";
3
- import type { Payload, Dependency, DependencyVersion, Publisher, Maintainer, Repository, DependencyLinks, GlobalWarning } from "./types.js";
3
+ import type { Payload, Dependency, DependencyVersion, Publisher, Maintainer, Repository, DependencyLinks, GlobalWarning } from "./types.ts";
4
4
  export interface PayloadComparison {
5
5
  title: string;
6
6
  warnings: ArrayDiff<GlobalWarning>;
@@ -1,7 +1,7 @@
1
1
  import type { ManifestVersion, PackageJSON, WorkspacesPackageJSON } from "@nodesecure/npm-types";
2
2
  import type Config from "@npmcli/config";
3
- import { Logger } from "./class/logger.class.js";
4
- import type { Options, Payload } from "./types.js";
3
+ import { Logger } from "./class/logger.class.ts";
4
+ import type { Options, Payload } from "./types.ts";
5
5
  type WalkerOptions = Omit<Options, "registry"> & {
6
6
  registry: string;
7
7
  location?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"depWalker.d.ts","sourceRoot":"","sources":["../src/depWalker.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEjG,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAczC,OAAO,EAAE,MAAM,EAAuB,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAKV,OAAO,EACP,OAAO,EACR,MAAM,YAAY,CAAC;AA8CpB,KAAK,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AASF,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,WAAW,GAAG,qBAAqB,GAAG,eAAe,EAC/D,OAAO,EAAE,aAAa,EACtB,MAAM,SAAe,GACpB,OAAO,CAAC,OAAO,CAAC,CAyPlB"}
1
+ {"version":3,"file":"depWalker.d.ts","sourceRoot":"","sources":["../src/depWalker.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEjG,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAezC,OAAO,EAAE,MAAM,EAAuB,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAKV,OAAO,EACP,OAAO,EACR,MAAM,YAAY,CAAC;AA+CpB,KAAK,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AASF,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,WAAW,GAAG,qBAAqB,GAAG,eAAe,EAC/D,OAAO,EAAE,aAAa,EACtB,MAAM,SAAe,GACpB,OAAO,CAAC,OAAO,CAAC,CAgQlB"}
package/dist/depWalker.js CHANGED
@@ -1,55 +1,3 @@
1
- var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
- if (value !== null && value !== void 0) {
3
- if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
- var dispose, inner;
5
- if (async) {
6
- if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
- dispose = value[Symbol.asyncDispose];
8
- }
9
- if (dispose === void 0) {
10
- if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
- dispose = value[Symbol.dispose];
12
- if (async) inner = dispose;
13
- }
14
- if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
- if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
- env.stack.push({ value: value, dispose: dispose, async: async });
17
- }
18
- else if (async) {
19
- env.stack.push({ async: true });
20
- }
21
- return value;
22
- };
23
- var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
- return function (env) {
25
- function fail(e) {
26
- env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
- env.hasError = true;
28
- }
29
- var r, s = 0;
30
- function next() {
31
- while (r = env.stack.pop()) {
32
- try {
33
- if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
- if (r.dispose) {
35
- var result = r.dispose.call(r.value);
36
- if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
- }
38
- else s |= 1;
39
- }
40
- catch (e) {
41
- fail(e);
42
- }
43
- }
44
- if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
- if (env.hasError) throw env.error;
46
- }
47
- return next();
48
- };
49
- })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
- var e = new Error(message);
51
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
- });
53
1
  // Import Node.js Dependencies
54
2
  import path from "node:path";
55
3
  import { readFileSync } from "node:fs";
@@ -62,12 +10,14 @@ import { parseAuthor } from "@nodesecure/utils";
62
10
  import { ManifestManager, parseNpmSpec } from "@nodesecure/mama";
63
11
  import { getNpmRegistryURL } from "@nodesecure/npm-registry-sdk";
64
12
  import { fromData } from "ssri";
13
+ import semver from "semver";
65
14
  // Import Internal Dependencies
66
15
  import { getDependenciesWarnings, addMissingVersionFlags, getUsedDeps, getManifestLinks, NPM_TOKEN } from "./utils/index.js";
67
16
  import { NpmRegistryProvider } from "./registry/NpmRegistryProvider.js";
68
17
  import { RegistryTokenStore } from "./registry/RegistryTokenStore.js";
69
18
  import { TempDirectory } from "./class/TempDirectory.class.js";
70
19
  import { Logger, ScannerLoggerEvents } from "./class/logger.class.js";
20
+ import { parseSemverRange } from "./utils/parseSemverRange.js";
71
21
  // CONSTANTS
72
22
  const kDefaultDependencyVersionFields = {
73
23
  description: "",
@@ -105,238 +55,223 @@ const kDefaultDependencyMetadata = {
105
55
  const kRootDependencyId = 0;
106
56
  const { version: packageVersion } = JSON.parse(readFileSync(new URL(path.join("..", "package.json"), import.meta.url), "utf-8"));
107
57
  export async function depWalker(manifest, options, logger = new Logger()) {
108
- const env_1 = { stack: [], error: void 0, hasError: false };
109
- try {
110
- const { scanRootNode = false, includeDevDeps = false, packageLock, maxDepth, location, vulnerabilityStrategy = Vulnera.strategies.NONE, registry, npmRcConfig } = options;
111
- const startedAt = Date.now();
112
- const isRemoteScanning = typeof location === "undefined";
113
- const tokenStore = new RegistryTokenStore(npmRcConfig, NPM_TOKEN.token);
114
- const tempDir = __addDisposableResource(env_1, await TempDirectory.create(), true);
115
- const dependencyConfusionWarnings = [];
116
- const payload = {
117
- id: tempDir.id,
118
- rootDependency: {
119
- name: manifest.name ?? "workspace",
120
- version: manifest.version ?? "0.0.0",
121
- integrity: null
122
- },
123
- scannerVersion: packageVersion,
124
- vulnerabilityStrategy,
125
- warnings: [],
126
- metadata: {
127
- startedAt,
128
- executionTime: 0
129
- }
58
+ const { scanRootNode = false, includeDevDeps = false, packageLock, maxDepth, location, vulnerabilityStrategy = Vulnera.strategies.NONE, registry, npmRcConfig } = options;
59
+ const startedAt = Date.now();
60
+ const isRemoteScanning = typeof location === "undefined";
61
+ const tokenStore = new RegistryTokenStore(npmRcConfig, NPM_TOKEN.token);
62
+ await using tempDir = await TempDirectory.create();
63
+ const dependencyConfusionWarnings = [];
64
+ const payload = {
65
+ id: tempDir.id,
66
+ rootDependency: {
67
+ name: manifest.name ?? "workspace",
68
+ version: manifest.version ?? "0.0.0",
69
+ integrity: null
70
+ },
71
+ scannerVersion: packageVersion,
72
+ vulnerabilityStrategy,
73
+ warnings: [],
74
+ metadata: {
75
+ startedAt,
76
+ executionTime: 0
77
+ }
78
+ };
79
+ const dependencies = new Map();
80
+ const highlightedPackages = new Set();
81
+ const npmTreeWalker = new npm.TreeWalker({
82
+ registry
83
+ });
84
+ {
85
+ logger
86
+ .start(ScannerLoggerEvents.analysis.tree)
87
+ .start(ScannerLoggerEvents.analysis.tarball)
88
+ .start(ScannerLoggerEvents.analysis.registry);
89
+ const fetchedMetadataPackages = new Set();
90
+ const operationsQueue = [];
91
+ const locker = new Mutex({ concurrency: 5 });
92
+ locker.on(MutexRelease, () => logger.tick(ScannerLoggerEvents.analysis.tarball));
93
+ const rootDepsOptions = {
94
+ maxDepth,
95
+ includeDevDeps,
96
+ packageLock
130
97
  };
131
- const dependencies = new Map();
132
- const npmTreeWalker = new npm.TreeWalker({
133
- registry
134
- });
135
- {
136
- logger
137
- .start(ScannerLoggerEvents.analysis.tree)
138
- .start(ScannerLoggerEvents.analysis.tarball)
139
- .start(ScannerLoggerEvents.analysis.registry);
140
- const fetchedMetadataPackages = new Set();
141
- const operationsQueue = [];
142
- const locker = new Mutex({ concurrency: 5 });
143
- locker.on(MutexRelease, () => logger.tick(ScannerLoggerEvents.analysis.tarball));
144
- const rootDepsOptions = {
145
- maxDepth,
146
- includeDevDeps,
147
- packageLock
148
- };
149
- for await (const current of npmTreeWalker.walk(manifest, rootDepsOptions)) {
150
- const { name, version, integrity, ...currentVersion } = current;
151
- const dependency = {
152
- versions: {
153
- [version]: {
154
- ...currentVersion,
155
- ...structuredClone(kDefaultDependencyVersionFields)
156
- }
157
- },
158
- vulnerabilities: [],
159
- metadata: structuredClone(kDefaultDependencyMetadata)
160
- };
161
- let proceedDependencyScan = true;
162
- const org = parseNpmSpec(name)?.org;
163
- if (dependencies.has(name)) {
164
- const dep = dependencies.get(name);
165
- operationsQueue.push(new NpmRegistryProvider(name, version, {
166
- registry,
167
- tokenStore
168
- }).enrichDependencyVersion(dep, dependencyConfusionWarnings, org));
169
- if (version in dep.versions) {
170
- // The dependency has already entered the analysis
171
- // This happens if the package is used by multiple packages in the tree
172
- proceedDependencyScan = false;
173
- }
174
- else {
175
- dep.versions[version] = dependency.versions[version];
98
+ for await (const current of npmTreeWalker.walk(manifest, rootDepsOptions)) {
99
+ const { name, version, integrity, ...currentVersion } = current;
100
+ const dependency = {
101
+ versions: {
102
+ [version]: {
103
+ ...currentVersion,
104
+ ...structuredClone(kDefaultDependencyVersionFields)
176
105
  }
106
+ },
107
+ vulnerabilities: [],
108
+ metadata: structuredClone(kDefaultDependencyMetadata)
109
+ };
110
+ let proceedDependencyScan = true;
111
+ const org = parseNpmSpec(name)?.org;
112
+ if (dependencies.has(name)) {
113
+ const dep = dependencies.get(name);
114
+ operationsQueue.push(new NpmRegistryProvider(name, version, {
115
+ registry,
116
+ tokenStore
117
+ }).enrichDependencyVersion(dep, dependencyConfusionWarnings, org));
118
+ if (version in dep.versions) {
119
+ // The dependency has already entered the analysis
120
+ // This happens if the package is used by multiple packages in the tree
121
+ proceedDependencyScan = false;
177
122
  }
178
123
  else {
179
- dependencies.set(name, dependency);
180
- }
181
- const isRoot = current.id === kRootDependencyId;
182
- if (isRoot && payload.rootDependency.integrity) {
183
- payload.rootDependency.integrity = integrity;
124
+ dep.versions[version] = dependency.versions[version];
184
125
  }
185
- else if (isRoot) {
186
- const isWorkspace = options.location && "workspaces" in manifest;
187
- payload.rootDependency.integrity = isWorkspace ?
188
- null :
189
- fromData(JSON.stringify(manifest), { algorithms: ["sha512"] }).toString();
190
- }
191
- // If the dependency is a DevDependencies we ignore it.
192
- if (current.isDevDependency || !proceedDependencyScan) {
193
- continue;
194
- }
195
- logger.tick(ScannerLoggerEvents.analysis.tree);
196
- // There is no need to fetch 'N' times the npm metadata for the same package.
197
- if (fetchedMetadataPackages.has(name) || !current.existOnRemoteRegistry) {
198
- logger.tick(ScannerLoggerEvents.analysis.registry);
199
- }
200
- else {
201
- fetchedMetadataPackages.add(name);
202
- const provider = new NpmRegistryProvider(name, version, {
126
+ }
127
+ else {
128
+ dependencies.set(name, dependency);
129
+ }
130
+ const isRoot = current.id === kRootDependencyId;
131
+ if (isRoot && payload.rootDependency.integrity) {
132
+ payload.rootDependency.integrity = integrity;
133
+ }
134
+ else if (isRoot) {
135
+ const isWorkspace = options.location && "workspaces" in manifest;
136
+ payload.rootDependency.integrity = isWorkspace ?
137
+ null :
138
+ fromData(JSON.stringify(manifest), { algorithms: ["sha512"] }).toString();
139
+ }
140
+ // If the dependency is a DevDependencies we ignore it.
141
+ if (current.isDevDependency || !proceedDependencyScan) {
142
+ continue;
143
+ }
144
+ logger.tick(ScannerLoggerEvents.analysis.tree);
145
+ // There is no need to fetch 'N' times the npm metadata for the same package.
146
+ if (fetchedMetadataPackages.has(name) || !current.existOnRemoteRegistry) {
147
+ logger.tick(ScannerLoggerEvents.analysis.registry);
148
+ }
149
+ else {
150
+ fetchedMetadataPackages.add(name);
151
+ const provider = new NpmRegistryProvider(name, version, {
152
+ registry,
153
+ tokenStore
154
+ });
155
+ operationsQueue.push(provider.enrichDependency(logger, dependency));
156
+ if (registry !== getNpmRegistryURL() && org) {
157
+ operationsQueue.push(new NpmRegistryProvider(name, version, {
203
158
  registry,
204
159
  tokenStore
205
- });
206
- operationsQueue.push(provider.enrichDependency(logger, dependency));
207
- if (registry !== getNpmRegistryURL() && org) {
208
- operationsQueue.push(new NpmRegistryProvider(name, version, {
209
- registry,
210
- tokenStore
211
- }).enrichScopedDependencyConfusionWarnings(dependencyConfusionWarnings, org));
212
- }
160
+ }).enrichScopedDependencyConfusionWarnings(dependencyConfusionWarnings, org));
213
161
  }
214
- const scanDirOptions = {
215
- ref: dependency.versions[version],
216
- location,
217
- isRootNode: scanRootNode && name === manifest.name,
218
- registry
219
- };
220
- operationsQueue.push(scanDirOrArchiveEx(name, version, locker, tempDir, scanDirOptions));
221
162
  }
222
- logger.end(ScannerLoggerEvents.analysis.tree);
223
- await Promise.allSettled(operationsQueue);
224
- logger
225
- .end(ScannerLoggerEvents.analysis.tarball)
226
- .end(ScannerLoggerEvents.analysis.registry);
227
- }
228
- const { hydratePayloadDependencies, strategy } = Vulnera.setStrategy(vulnerabilityStrategy);
229
- const isVulnHydratable = (strategy === "github-advisory" || strategy === "snyk")
230
- && isRemoteScanning;
231
- if (!isVulnHydratable) {
232
- await hydratePayloadDependencies(dependencies, {
233
- useStandardFormat: true,
234
- path: location
235
- });
163
+ const scanDirOptions = {
164
+ ref: dependency.versions[version],
165
+ location,
166
+ isRootNode: scanRootNode && name === manifest.name,
167
+ registry
168
+ };
169
+ operationsQueue.push(scanDirOrArchiveEx(name, version, locker, tempDir, logger, scanDirOptions));
236
170
  }
237
- payload.vulnerabilityStrategy = strategy;
238
- // We do this because it "seem" impossible to link all dependencies in the first walk.
239
- // Because we are dealing with package only one time it may happen sometimes.
240
- const globalWarnings = [];
241
- for (const [packageName, dependency] of dependencies) {
242
- const metadataIntegrities = dependency.metadata?.integrity ?? {};
243
- for (const [version, integrity] of Object.entries(metadataIntegrities)) {
244
- const dependencyVer = dependency.versions[version];
245
- const isEmptyPackage = dependencyVer.warnings.some((warning) => warning.kind === "empty-package");
246
- if (isEmptyPackage) {
247
- globalWarnings.push({
248
- type: "empty-package",
249
- message: `${packageName}@${version} only contain a package.json file!`
250
- });
251
- }
252
- if (!("integrity" in dependencyVer) || dependencyVer.flags.includes("isGit")) {
253
- continue;
254
- }
255
- if (dependencyVer.integrity !== integrity) {
256
- globalWarnings.push({
257
- type: "integrity-mismatch",
258
- message: `${packageName}@${version} manifest & tarball integrity doesn't match!`
259
- });
260
- }
171
+ logger.end(ScannerLoggerEvents.analysis.tree);
172
+ await Promise.allSettled(operationsQueue);
173
+ logger
174
+ .end(ScannerLoggerEvents.analysis.tarball)
175
+ .end(ScannerLoggerEvents.analysis.registry);
176
+ }
177
+ const { hydratePayloadDependencies, strategy } = Vulnera.setStrategy(vulnerabilityStrategy);
178
+ const isVulnHydratable = (strategy === "github-advisory" || strategy === "snyk")
179
+ && isRemoteScanning;
180
+ if (!isVulnHydratable) {
181
+ await hydratePayloadDependencies(dependencies, {
182
+ useStandardFormat: true,
183
+ path: location
184
+ });
185
+ }
186
+ payload.vulnerabilityStrategy = strategy;
187
+ // We do this because it "seem" impossible to link all dependencies in the first walk.
188
+ // Because we are dealing with package only one time it may happen sometimes.
189
+ const globalWarnings = [];
190
+ for (const [packageName, dependency] of dependencies) {
191
+ const metadataIntegrities = dependency.metadata?.integrity ?? {};
192
+ for (const [version, integrity] of Object.entries(metadataIntegrities)) {
193
+ const dependencyVer = dependency.versions[version];
194
+ const isEmptyPackage = dependencyVer.warnings.some((warning) => warning.kind === "empty-package");
195
+ if (isEmptyPackage) {
196
+ globalWarnings.push({
197
+ type: "empty-package",
198
+ message: `${packageName}@${version} only contain a package.json file!`
199
+ });
261
200
  }
262
- for (const version of Object.entries(dependency.versions)) {
263
- const [verStr, verDescriptor] = version;
264
- verDescriptor.flags.push(...addMissingVersionFlags(new Set(verDescriptor.flags), dependency));
265
- if (isLocalManifest(verDescriptor, manifest, packageName)) {
266
- Object.assign(dependency.metadata, {
267
- author: parseAuthor(manifest.author),
268
- homepage: manifest.homepage
269
- });
270
- Object.assign(verDescriptor, {
271
- author: parseAuthor(manifest.author),
272
- links: getManifestLinks(manifest),
273
- repository: manifest.repository
274
- });
275
- }
276
- const usedDeps = npmTreeWalker.relationsMap.get(`${packageName}@${verStr}`) || new Set();
277
- if (usedDeps.size === 0) {
278
- continue;
279
- }
280
- const usedBy = Object.create(null);
281
- for (const [name, version] of getUsedDeps(usedDeps)) {
282
- usedBy[name] = version;
283
- }
284
- Object.assign(verDescriptor.usedBy, usedBy);
201
+ if (!("integrity" in dependencyVer) || dependencyVer.flags.includes("isGit")) {
202
+ continue;
203
+ }
204
+ if (dependencyVer.integrity !== integrity) {
205
+ globalWarnings.push({
206
+ type: "integrity-mismatch",
207
+ message: `${packageName}@${version} manifest & tarball integrity doesn't match!`
208
+ });
285
209
  }
286
210
  }
287
- try {
288
- const { warnings, illuminated } = await getDependenciesWarnings(dependencies, options.highlight?.contacts, isRemoteScanning);
289
- payload.warnings = globalWarnings.concat(dependencyConfusionWarnings).concat(warnings);
290
- payload.highlighted = {
291
- contacts: illuminated
292
- };
293
- payload.dependencies = Object.fromEntries(dependencies);
294
- payload.metadata.executionTime = Date.now() - startedAt;
295
- return payload;
296
- }
297
- finally {
298
- logger.emit(ScannerLoggerEvents.done);
211
+ const semverRanges = parseSemverRange(options.highlight?.packages ?? {});
212
+ for (const version of Object.entries(dependency.versions)) {
213
+ const [verStr, verDescriptor] = version;
214
+ const range = semverRanges?.[packageName];
215
+ if (range && semver.satisfies(verStr, range)) {
216
+ highlightedPackages.add(`${packageName}@${verStr}`);
217
+ }
218
+ verDescriptor.flags.push(...addMissingVersionFlags(new Set(verDescriptor.flags), dependency));
219
+ if (isLocalManifest(verDescriptor, manifest, packageName)) {
220
+ Object.assign(dependency.metadata, {
221
+ author: parseAuthor(manifest.author),
222
+ homepage: manifest.homepage
223
+ });
224
+ Object.assign(verDescriptor, {
225
+ author: parseAuthor(manifest.author),
226
+ links: getManifestLinks(manifest),
227
+ repository: manifest.repository
228
+ });
229
+ }
230
+ const usedDeps = npmTreeWalker.relationsMap.get(`${packageName}@${verStr}`) || new Set();
231
+ if (usedDeps.size === 0) {
232
+ continue;
233
+ }
234
+ const usedBy = Object.create(null);
235
+ for (const [name, version] of getUsedDeps(usedDeps)) {
236
+ usedBy[name] = version;
237
+ }
238
+ Object.assign(verDescriptor.usedBy, usedBy);
299
239
  }
300
240
  }
301
- catch (e_1) {
302
- env_1.error = e_1;
303
- env_1.hasError = true;
241
+ try {
242
+ const { warnings, illuminated } = await getDependenciesWarnings(dependencies, options.highlight?.contacts, isRemoteScanning);
243
+ payload.warnings = globalWarnings.concat(dependencyConfusionWarnings).concat(warnings);
244
+ payload.highlighted = {
245
+ contacts: illuminated,
246
+ packages: [...highlightedPackages]
247
+ };
248
+ payload.dependencies = Object.fromEntries(dependencies);
249
+ payload.metadata.executionTime = Date.now() - startedAt;
250
+ return payload;
304
251
  }
305
252
  finally {
306
- const result_1 = __disposeResources(env_1);
307
- if (result_1)
308
- await result_1;
253
+ logger.emit(ScannerLoggerEvents.done);
309
254
  }
310
255
  }
311
256
  // eslint-disable-next-line max-params
312
- async function scanDirOrArchiveEx(name, version, locker, tempDir, options) {
313
- const env_2 = { stack: [], error: void 0, hasError: false };
257
+ async function scanDirOrArchiveEx(name, version, locker, tempDir, logger, options) {
258
+ using _ = await locker.acquire();
314
259
  try {
315
- const _ = __addDisposableResource(env_2, await locker.acquire(), false);
316
- try {
317
- const { registry, location = process.cwd(), isRootNode, ref } = options;
318
- const mama = await (isRootNode ?
319
- ManifestManager.fromPackageJSON(location) :
320
- extractAndResolve(tempDir.location, {
321
- spec: `${name}@${version}`,
322
- registry
323
- }));
324
- await scanDirOrArchive(mama, ref, {
325
- astAnalyserOptions: {
326
- optionalWarnings: typeof location !== "undefined"
327
- }
328
- });
329
- }
330
- catch {
331
- // ignore
332
- }
333
- }
334
- catch (e_2) {
335
- env_2.error = e_2;
336
- env_2.hasError = true;
260
+ const { registry, location = process.cwd(), isRootNode, ref } = options;
261
+ const mama = await (isRootNode ?
262
+ ManifestManager.fromPackageJSON(location) :
263
+ extractAndResolve(tempDir.location, {
264
+ spec: `${name}@${version}`,
265
+ registry
266
+ }));
267
+ await scanDirOrArchive(mama, ref, {
268
+ astAnalyserOptions: {
269
+ optionalWarnings: typeof location !== "undefined"
270
+ }
271
+ });
337
272
  }
338
- finally {
339
- __disposeResources(env_2);
273
+ catch (error) {
274
+ logger.emit(ScannerLoggerEvents.error, error, "tarball-scan");
340
275
  }
341
276
  }
342
277
  function isLocalManifest(verDescriptor, manifest, packageName) {
@@ -1 +1 @@
1
- {"version":3,"file":"depWalker.js","sourceRoot":"","sources":["../src/depWalker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"depWalker.js","sourceRoot":"","sources":["../src/depWalker.ts"],"names":[],"mappings":"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"}