@ryanstark24/sfgraph-core 1.2.0 → 1.4.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.
- package/dist/analyze/__tests__/audit-graph.test.js +79 -0
- package/dist/analyze/__tests__/audit-graph.test.js.map +1 -1
- package/dist/analyze/__tests__/edge-filters.test.d.ts +2 -0
- package/dist/analyze/__tests__/edge-filters.test.d.ts.map +1 -0
- package/dist/analyze/__tests__/edge-filters.test.js +66 -0
- package/dist/analyze/__tests__/edge-filters.test.js.map +1 -0
- package/dist/analyze/__tests__/findings.test.js +19 -9
- package/dist/analyze/__tests__/findings.test.js.map +1 -1
- package/dist/analyze/__tests__/governor-risks-detection.test.js +90 -0
- package/dist/analyze/__tests__/governor-risks-detection.test.js.map +1 -1
- package/dist/analyze/__tests__/security-fls-filter.test.d.ts +2 -0
- package/dist/analyze/__tests__/security-fls-filter.test.d.ts.map +1 -0
- package/dist/analyze/__tests__/security-fls-filter.test.js +23 -0
- package/dist/analyze/__tests__/security-fls-filter.test.js.map +1 -0
- package/dist/analyze/audit-graph.d.ts +26 -2
- package/dist/analyze/audit-graph.d.ts.map +1 -1
- package/dist/analyze/audit-graph.js +52 -5
- package/dist/analyze/audit-graph.js.map +1 -1
- package/dist/analyze/dependencies.d.ts +2 -2
- package/dist/analyze/dependencies.d.ts.map +1 -1
- package/dist/analyze/dependencies.js +9 -3
- package/dist/analyze/dependencies.js.map +1 -1
- package/dist/analyze/dependents.d.ts +6 -1
- package/dist/analyze/dependents.d.ts.map +1 -1
- package/dist/analyze/dependents.js +12 -2
- package/dist/analyze/dependents.js.map +1 -1
- package/dist/analyze/edge-filters.d.ts +37 -0
- package/dist/analyze/edge-filters.d.ts.map +1 -0
- package/dist/analyze/edge-filters.js +51 -0
- package/dist/analyze/edge-filters.js.map +1 -0
- package/dist/analyze/find-nodes.d.ts.map +1 -1
- package/dist/analyze/find-nodes.js.map +1 -1
- package/dist/analyze/findings.d.ts +1 -1
- package/dist/analyze/findings.d.ts.map +1 -1
- package/dist/analyze/findings.js +1 -3
- package/dist/analyze/findings.js.map +1 -1
- package/dist/analyze/populate.d.ts.map +1 -1
- package/dist/analyze/populate.js +55 -10
- package/dist/analyze/populate.js.map +1 -1
- package/dist/analyze/security.d.ts +15 -0
- package/dist/analyze/security.d.ts.map +1 -1
- package/dist/analyze/security.js +59 -3
- package/dist/analyze/security.js.map +1 -1
- package/dist/analyze/wip-impact.d.ts.map +1 -1
- package/dist/analyze/wip-impact.js +12 -2
- package/dist/analyze/wip-impact.js.map +1 -1
- package/dist/domain/metadata-category.d.ts +1 -0
- package/dist/domain/metadata-category.d.ts.map +1 -1
- package/dist/domain/metadata-category.js +1 -0
- package/dist/domain/metadata-category.js.map +1 -1
- package/dist/embedding/embed.d.ts.map +1 -1
- package/dist/embedding/embed.js +14 -1
- package/dist/embedding/embed.js.map +1 -1
- package/dist/extractors/interfaces/metadata-source.d.ts +11 -0
- package/dist/extractors/interfaces/metadata-source.d.ts.map +1 -1
- package/dist/extractors/live-org/__tests__/bulk-retrieve.test.js.map +1 -1
- package/dist/extractors/live-org/__tests__/custom-settings.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/custom-settings.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/custom-settings.test.js +79 -0
- package/dist/extractors/live-org/__tests__/custom-settings.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/extractor-enrichment.test.js +70 -8
- package/dist/extractors/live-org/__tests__/extractor-enrichment.test.js.map +1 -1
- package/dist/extractors/live-org/__tests__/mcd-baseline.test.js +9 -6
- package/dist/extractors/live-org/__tests__/mcd-baseline.test.js.map +1 -1
- package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js +1 -1
- package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js.map +1 -1
- package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js +1 -1
- package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js.map +1 -1
- package/dist/extractors/live-org/__tests__/pools.test.js +4 -1
- package/dist/extractors/live-org/__tests__/pools.test.js.map +1 -1
- package/dist/extractors/live-org/__tests__/rate-limit.test.js +1 -6
- package/dist/extractors/live-org/__tests__/rate-limit.test.js.map +1 -1
- package/dist/extractors/live-org/__tests__/soql-rebatch.test.js.map +1 -1
- package/dist/extractors/live-org/__tests__/stop-waiting.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/stop-waiting.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/stop-waiting.test.js +243 -0
- package/dist/extractors/live-org/__tests__/stop-waiting.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/watchdog-budgets.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/watchdog-budgets.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/watchdog-budgets.test.js +40 -0
- package/dist/extractors/live-org/__tests__/watchdog-budgets.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/wedge-isolation.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/wedge-isolation.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/wedge-isolation.test.js +270 -0
- package/dist/extractors/live-org/__tests__/wedge-isolation.test.js.map +1 -0
- package/dist/extractors/live-org/bulk-retrieve.d.ts +169 -0
- package/dist/extractors/live-org/bulk-retrieve.d.ts.map +1 -1
- package/dist/extractors/live-org/bulk-retrieve.js +499 -70
- package/dist/extractors/live-org/bulk-retrieve.js.map +1 -1
- package/dist/extractors/live-org/capabilities.d.ts.map +1 -1
- package/dist/extractors/live-org/capabilities.js.map +1 -1
- package/dist/extractors/live-org/extractors/__tests__/apex.test.d.ts +2 -0
- package/dist/extractors/live-org/extractors/__tests__/apex.test.d.ts.map +1 -0
- package/dist/extractors/live-org/extractors/__tests__/apex.test.js +73 -0
- package/dist/extractors/live-org/extractors/__tests__/apex.test.js.map +1 -0
- package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.d.ts +2 -0
- package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.d.ts.map +1 -0
- package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.js +183 -0
- package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.js.map +1 -0
- package/dist/extractors/live-org/extractors/apex.d.ts.map +1 -1
- package/dist/extractors/live-org/extractors/apex.js +76 -51
- package/dist/extractors/live-org/extractors/apex.js.map +1 -1
- package/dist/extractors/live-org/extractors/custom-settings.d.ts +3 -0
- package/dist/extractors/live-org/extractors/custom-settings.d.ts.map +1 -0
- package/dist/extractors/live-org/extractors/custom-settings.js +66 -0
- package/dist/extractors/live-org/extractors/custom-settings.js.map +1 -0
- package/dist/extractors/live-org/extractors/flow.d.ts.map +1 -1
- package/dist/extractors/live-org/extractors/flow.js.map +1 -1
- package/dist/extractors/live-org/extractors/generic-metadata.d.ts.map +1 -1
- package/dist/extractors/live-org/extractors/generic-metadata.js.map +1 -1
- package/dist/extractors/live-org/extractors/generic-sobject.js.map +1 -1
- package/dist/extractors/live-org/extractors/lwc.d.ts.map +1 -1
- package/dist/extractors/live-org/extractors/lwc.js +81 -41
- package/dist/extractors/live-org/extractors/lwc.js.map +1 -1
- package/dist/extractors/live-org/extractors/mcd-baseline.d.ts.map +1 -1
- package/dist/extractors/live-org/extractors/mcd-baseline.js +2 -4
- package/dist/extractors/live-org/extractors/mcd-baseline.js.map +1 -1
- package/dist/extractors/live-org/extractors/object.d.ts.map +1 -1
- package/dist/extractors/live-org/extractors/object.js.map +1 -1
- package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts.map +1 -1
- package/dist/extractors/live-org/extractors/omnistudio-retrieve.js.map +1 -1
- package/dist/extractors/live-org/extractors/omnistudio.d.ts +8 -1
- package/dist/extractors/live-org/extractors/omnistudio.d.ts.map +1 -1
- package/dist/extractors/live-org/extractors/omnistudio.js +59 -6
- package/dist/extractors/live-org/extractors/omnistudio.js.map +1 -1
- package/dist/extractors/live-org/rate-limit.d.ts +41 -15
- package/dist/extractors/live-org/rate-limit.d.ts.map +1 -1
- package/dist/extractors/live-org/rate-limit.js +185 -33
- package/dist/extractors/live-org/rate-limit.js.map +1 -1
- package/dist/extractors/live-org/vlocity/runner.d.ts.map +1 -1
- package/dist/extractors/live-org/vlocity/runner.js +30 -6
- package/dist/extractors/live-org/vlocity/runner.js.map +1 -1
- package/dist/ingest/__tests__/config-values.test.d.ts +2 -0
- package/dist/ingest/__tests__/config-values.test.d.ts.map +1 -0
- package/dist/ingest/__tests__/config-values.test.js +65 -0
- package/dist/ingest/__tests__/config-values.test.js.map +1 -0
- package/dist/ingest/__tests__/full-sync-deletion.test.js +11 -4
- package/dist/ingest/__tests__/full-sync-deletion.test.js.map +1 -1
- package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.d.ts +10 -0
- package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.d.ts.map +1 -0
- package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.js +251 -0
- package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.js.map +1 -0
- package/dist/ingest/__tests__/live-ingest.test.js.map +1 -1
- package/dist/ingest/__tests__/parser-dispatch.test.d.ts +2 -0
- package/dist/ingest/__tests__/parser-dispatch.test.d.ts.map +1 -0
- package/dist/ingest/__tests__/parser-dispatch.test.js +55 -0
- package/dist/ingest/__tests__/parser-dispatch.test.js.map +1 -0
- package/dist/ingest/__tests__/vlocity-dispatch-integration.test.d.ts +2 -0
- package/dist/ingest/__tests__/vlocity-dispatch-integration.test.d.ts.map +1 -0
- package/dist/ingest/__tests__/vlocity-dispatch-integration.test.js +134 -0
- package/dist/ingest/__tests__/vlocity-dispatch-integration.test.js.map +1 -0
- package/dist/ingest/detect-deletions-guard.d.ts +45 -0
- package/dist/ingest/detect-deletions-guard.d.ts.map +1 -0
- package/dist/ingest/detect-deletions-guard.js +63 -0
- package/dist/ingest/detect-deletions-guard.js.map +1 -0
- package/dist/ingest/live-ingest.d.ts +16 -0
- package/dist/ingest/live-ingest.d.ts.map +1 -1
- package/dist/ingest/live-ingest.js +776 -549
- package/dist/ingest/live-ingest.js.map +1 -1
- package/dist/parsers/__tests__/datatransform-structured.test.d.ts +2 -0
- package/dist/parsers/__tests__/datatransform-structured.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/datatransform-structured.test.js +147 -0
- package/dist/parsers/__tests__/datatransform-structured.test.js.map +1 -0
- package/dist/parsers/__tests__/edge-provenance.test.js +4 -1
- package/dist/parsers/__tests__/edge-provenance.test.js.map +1 -1
- package/dist/parsers/__tests__/lwc-bindings.test.js +6 -3
- package/dist/parsers/__tests__/lwc-bindings.test.js.map +1 -1
- package/dist/parsers/__tests__/object-inline-fields.test.js +2 -2
- package/dist/parsers/__tests__/object-inline-fields.test.js.map +1 -1
- package/dist/parsers/__tests__/omnistudio.golden.test.js +5 -6
- package/dist/parsers/__tests__/omnistudio.golden.test.js.map +1 -1
- package/dist/parsers/__tests__/vlocity.golden.test.js +9 -13
- package/dist/parsers/__tests__/vlocity.golden.test.js.map +1 -1
- package/dist/parsers/apex/__tests__/ast-extractor.test.js +64 -4
- package/dist/parsers/apex/__tests__/ast-extractor.test.js.map +1 -1
- package/dist/parsers/apex/__tests__/empty-body.test.d.ts +2 -0
- package/dist/parsers/apex/__tests__/empty-body.test.d.ts.map +1 -0
- package/dist/parsers/apex/__tests__/empty-body.test.js +40 -0
- package/dist/parsers/apex/__tests__/empty-body.test.js.map +1 -0
- package/dist/parsers/apex/__tests__/is-test-attribute.test.js +4 -2
- package/dist/parsers/apex/__tests__/is-test-attribute.test.js.map +1 -1
- package/dist/parsers/apex/__tests__/regex-arg-count.test.js +1 -1
- package/dist/parsers/apex/__tests__/regex-arg-count.test.js.map +1 -1
- package/dist/parsers/apex/__tests__/regex-inloop.test.d.ts +2 -0
- package/dist/parsers/apex/__tests__/regex-inloop.test.d.ts.map +1 -0
- package/dist/parsers/apex/__tests__/regex-inloop.test.js +70 -0
- package/dist/parsers/apex/__tests__/regex-inloop.test.js.map +1 -0
- package/dist/parsers/apex/arity-resolver.d.ts.map +1 -1
- package/dist/parsers/apex/arity-resolver.js.map +1 -1
- package/dist/parsers/apex/ast-extractor.d.ts.map +1 -1
- package/dist/parsers/apex/ast-extractor.js +33 -1
- package/dist/parsers/apex/ast-extractor.js.map +1 -1
- package/dist/parsers/apex/class.d.ts.map +1 -1
- package/dist/parsers/apex/class.js +62 -3
- package/dist/parsers/apex/class.js.map +1 -1
- package/dist/parsers/apex/trigger.d.ts.map +1 -1
- package/dist/parsers/apex/trigger.js +10 -0
- package/dist/parsers/apex/trigger.js.map +1 -1
- package/dist/parsers/flow/__tests__/invocable-resolver.test.js.map +1 -1
- package/dist/parsers/flow/invocable-resolver.d.ts.map +1 -1
- package/dist/parsers/flow/invocable-resolver.js.map +1 -1
- package/dist/parsers/generic/reflection-walker.d.ts.map +1 -1
- package/dist/parsers/generic/reflection-walker.js +1 -3
- package/dist/parsers/generic/reflection-walker.js.map +1 -1
- package/dist/parsers/lwc/html-visitor.d.ts.map +1 -1
- package/dist/parsers/lwc/html-visitor.js +3 -2
- package/dist/parsers/lwc/html-visitor.js.map +1 -1
- package/dist/parsers/lwc/js-visitor.d.ts.map +1 -1
- package/dist/parsers/lwc/js-visitor.js +6 -2
- package/dist/parsers/lwc/js-visitor.js.map +1 -1
- package/dist/parsers/object/object.d.ts.map +1 -1
- package/dist/parsers/object/object.js +1 -5
- package/dist/parsers/object/object.js.map +1 -1
- package/dist/parsers/omnistudio/data-transform.d.ts.map +1 -1
- package/dist/parsers/omnistudio/data-transform.js +39 -6
- package/dist/parsers/omnistudio/data-transform.js.map +1 -1
- package/dist/parsers/omnistudio/integration-procedure.d.ts.map +1 -1
- package/dist/parsers/omnistudio/integration-procedure.js +3 -2
- package/dist/parsers/omnistudio/integration-procedure.js.map +1 -1
- package/dist/parsers/omnistudio/overlap-detector.d.ts.map +1 -1
- package/dist/parsers/omnistudio/overlap-detector.js +2 -9
- package/dist/parsers/omnistudio/overlap-detector.js.map +1 -1
- package/dist/parsers/omnistudio/process.d.ts.map +1 -1
- package/dist/parsers/omnistudio/process.js +3 -2
- package/dist/parsers/omnistudio/process.js.map +1 -1
- package/dist/parsers/omnistudio/ui-card.d.ts.map +1 -1
- package/dist/parsers/omnistudio/ui-card.js +3 -2
- package/dist/parsers/omnistudio/ui-card.js.map +1 -1
- package/dist/parsers/rules/custom-metadata-type.yml +7 -0
- package/dist/parsers/rules/custom-setting.yml +24 -0
- package/dist/parsers/vlocity/common.d.ts +16 -0
- package/dist/parsers/vlocity/common.d.ts.map +1 -1
- package/dist/parsers/vlocity/common.js +62 -0
- package/dist/parsers/vlocity/common.js.map +1 -1
- package/dist/parsers/vlocity/data-raptor.d.ts.map +1 -1
- package/dist/parsers/vlocity/data-raptor.js +43 -14
- package/dist/parsers/vlocity/data-raptor.js.map +1 -1
- package/dist/render/__tests__/sarif.test.js +1 -4
- package/dist/render/__tests__/sarif.test.js.map +1 -1
- package/dist/render/sarif.d.ts.map +1 -1
- package/dist/render/sarif.js +1 -3
- package/dist/render/sarif.js.map +1 -1
- package/dist/storage/__tests__/analysis-tables-migration.test.js +1 -1
- package/dist/storage/__tests__/graph-store.test.js +13 -0
- package/dist/storage/__tests__/graph-store.test.js.map +1 -1
- package/dist/storage/__tests__/migrations.test.js +4 -4
- package/dist/storage/__tests__/rename-stability.test.js.map +1 -1
- package/dist/storage/__tests__/sync-generation.test.d.ts +2 -0
- package/dist/storage/__tests__/sync-generation.test.d.ts.map +1 -0
- package/dist/storage/__tests__/sync-generation.test.js +159 -0
- package/dist/storage/__tests__/sync-generation.test.js.map +1 -0
- package/dist/storage/interfaces.d.ts +57 -0
- package/dist/storage/interfaces.d.ts.map +1 -1
- package/dist/storage/sqlite/graph-store.d.ts +15 -1
- package/dist/storage/sqlite/graph-store.d.ts.map +1 -1
- package/dist/storage/sqlite/graph-store.js +78 -0
- package/dist/storage/sqlite/graph-store.js.map +1 -1
- package/dist/storage/sqlite/migrations.d.ts.map +1 -1
- package/dist/storage/sqlite/migrations.js +19 -0
- package/dist/storage/sqlite/migrations.js.map +1 -1
- package/dist/storage/sqlite/rename-stability.d.ts +1 -1
- package/dist/storage/sqlite/rename-stability.d.ts.map +1 -1
- package/dist/storage/sqlite/rename-stability.js +2 -6
- package/dist/storage/sqlite/rename-stability.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { TRAVERSAL_NODE_CAP_DEFAULT } from "./dependents.js";
|
|
1
|
+
import { TRAVERSAL_NODE_CAP_DEFAULT, } from "./dependents.js";
|
|
2
|
+
import { keepEdge } from "./edge-filters.js";
|
|
2
3
|
function nodeCap() {
|
|
3
4
|
const raw = process.env.SFGRAPH_TRAVERSAL_NODE_CAP;
|
|
4
5
|
if (!raw)
|
|
@@ -6,7 +7,7 @@ function nodeCap() {
|
|
|
6
7
|
const n = Number.parseInt(raw, 10);
|
|
7
8
|
return Number.isFinite(n) && n > 0 ? n : TRAVERSAL_NODE_CAP_DEFAULT;
|
|
8
9
|
}
|
|
9
|
-
export function findDependencies(store, orgId, qname, depth = 3) {
|
|
10
|
+
export function findDependencies(store, orgId, qname, depth = 3, opts = {}) {
|
|
10
11
|
const cap = nodeCap();
|
|
11
12
|
const visited = new Set();
|
|
12
13
|
const nodes = [];
|
|
@@ -14,11 +15,16 @@ export function findDependencies(store, orgId, qname, depth = 3) {
|
|
|
14
15
|
let frontier = [qname];
|
|
15
16
|
visited.add(qname);
|
|
16
17
|
let truncated = false;
|
|
18
|
+
let filtered = 0;
|
|
17
19
|
bfs: for (let d = 0; d < depth && frontier.length > 0; d++) {
|
|
18
20
|
const next = [];
|
|
19
21
|
for (const cur of frontier) {
|
|
20
22
|
const outgoing = store.listEdgesFrom(orgId, cur);
|
|
21
23
|
for (const e of outgoing) {
|
|
24
|
+
if (!keepEdge(e, opts)) {
|
|
25
|
+
filtered += 1;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
22
28
|
edges.push(e);
|
|
23
29
|
if (!visited.has(e.dstQualifiedName)) {
|
|
24
30
|
visited.add(e.dstQualifiedName);
|
|
@@ -35,6 +41,6 @@ export function findDependencies(store, orgId, qname, depth = 3) {
|
|
|
35
41
|
}
|
|
36
42
|
frontier = next;
|
|
37
43
|
}
|
|
38
|
-
return { nodes, edges, truncated };
|
|
44
|
+
return { nodes, edges, truncated, filtered };
|
|
39
45
|
}
|
|
40
46
|
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/analyze/dependencies.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/analyze/dependencies.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,0BAA0B,GAG3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,SAAS,OAAO;IACd,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,0BAA0B,CAAC;IAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAiB,EACjB,KAAY,EACZ,KAAoB,EACpB,KAAK,GAAG,CAAC,EACT,OAAsB,EAAE;IAExB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAoB,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAoB,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACjD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;oBACvB,QAAQ,IAAI,CAAC,CAAC;oBACd,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBAChC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBACnD,IAAI,CAAC;wBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBAC9B,IAAI,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;wBACxB,SAAS,GAAG,IAAI,CAAC;wBACjB,MAAM,GAAG,CAAC;oBACZ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import type { OrgId, QualifiedName } from "@ryanstark24/sfgraph-shared";
|
|
2
2
|
import type { EdgeFact, NodeFact } from "../domain/index.js";
|
|
3
3
|
import type { GraphStore } from "../storage/interfaces.js";
|
|
4
|
+
import { type EdgeFilterOpts } from "./edge-filters.js";
|
|
4
5
|
export interface TraversalResult {
|
|
5
6
|
nodes: NodeFact[];
|
|
6
7
|
edges: EdgeFact[];
|
|
7
8
|
/** Set when the traversal hit `NODE_CAP` before exhausting the graph. */
|
|
8
9
|
truncated?: boolean;
|
|
10
|
+
/** Edges dropped by the relType/security/reflection filter — surfaced so
|
|
11
|
+
* the tool can tell the user "N security/inferred edges hidden". */
|
|
12
|
+
filtered?: number;
|
|
9
13
|
}
|
|
14
|
+
export type TraversalOpts = EdgeFilterOpts;
|
|
10
15
|
/**
|
|
11
16
|
* Hard ceiling on visited nodes per traversal. Prevents an agent — or a
|
|
12
17
|
* crafted call — from blowing memory by asking for depth=5 on a hub like
|
|
@@ -15,5 +20,5 @@ export interface TraversalResult {
|
|
|
15
20
|
* Override via `TRAVERSAL_NODE_CAP` env var if you really need more.
|
|
16
21
|
*/
|
|
17
22
|
export declare const TRAVERSAL_NODE_CAP_DEFAULT = 500;
|
|
18
|
-
export declare function findDependents(store: GraphStore, orgId: OrgId, qname: QualifiedName, depth?: number): TraversalResult;
|
|
23
|
+
export declare function findDependents(store: GraphStore, orgId: OrgId, qname: QualifiedName, depth?: number, opts?: TraversalOpts): TraversalResult;
|
|
19
24
|
//# sourceMappingURL=dependents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependents.d.ts","sourceRoot":"","sources":["../../src/analyze/dependents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"dependents.d.ts","sourceRoot":"","sources":["../../src/analyze/dependents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,mBAAmB,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;yEACqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAE3C;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAQ9C,wBAAgB,cAAc,CAC5B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,aAAa,EACpB,KAAK,SAAI,EACT,IAAI,GAAE,aAAkB,GACvB,eAAe,CAsCjB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { keepEdge } from "./edge-filters.js";
|
|
1
2
|
/**
|
|
2
3
|
* Hard ceiling on visited nodes per traversal. Prevents an agent — or a
|
|
3
4
|
* crafted call — from blowing memory by asking for depth=5 on a hub like
|
|
@@ -13,7 +14,7 @@ function nodeCap() {
|
|
|
13
14
|
const n = Number.parseInt(raw, 10);
|
|
14
15
|
return Number.isFinite(n) && n > 0 ? n : TRAVERSAL_NODE_CAP_DEFAULT;
|
|
15
16
|
}
|
|
16
|
-
export function findDependents(store, orgId, qname, depth = 3) {
|
|
17
|
+
export function findDependents(store, orgId, qname, depth = 3, opts = {}) {
|
|
17
18
|
const cap = nodeCap();
|
|
18
19
|
const visited = new Set();
|
|
19
20
|
const nodes = [];
|
|
@@ -21,11 +22,20 @@ export function findDependents(store, orgId, qname, depth = 3) {
|
|
|
21
22
|
let frontier = [qname];
|
|
22
23
|
visited.add(qname);
|
|
23
24
|
let truncated = false;
|
|
25
|
+
let filtered = 0;
|
|
24
26
|
bfs: for (let d = 0; d < depth && frontier.length > 0; d++) {
|
|
25
27
|
const next = [];
|
|
26
28
|
for (const cur of frontier) {
|
|
27
29
|
const incoming = store.listEdgesTo(orgId, cur);
|
|
28
30
|
for (const e of incoming) {
|
|
31
|
+
// Filter noise (security grants / reflection inferences) before the
|
|
32
|
+
// edge contributes a node — otherwise a hub like a class granted to
|
|
33
|
+
// 100+ profiles blows the node cap on grant edges alone and the real
|
|
34
|
+
// dependency frontier never gets explored.
|
|
35
|
+
if (!keepEdge(e, opts)) {
|
|
36
|
+
filtered += 1;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
29
39
|
edges.push(e);
|
|
30
40
|
if (!visited.has(e.srcQualifiedName)) {
|
|
31
41
|
visited.add(e.srcQualifiedName);
|
|
@@ -42,6 +52,6 @@ export function findDependents(store, orgId, qname, depth = 3) {
|
|
|
42
52
|
}
|
|
43
53
|
frontier = next;
|
|
44
54
|
}
|
|
45
|
-
return { nodes, edges, truncated };
|
|
55
|
+
return { nodes, edges, truncated, filtered };
|
|
46
56
|
}
|
|
47
57
|
//# sourceMappingURL=dependents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependents.js","sourceRoot":"","sources":["../../src/analyze/dependents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dependents.js","sourceRoot":"","sources":["../../src/analyze/dependents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAclE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,SAAS,OAAO;IACd,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,0BAA0B,CAAC;IAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAiB,EACjB,KAAY,EACZ,KAAoB,EACpB,KAAK,GAAG,CAAC,EACT,OAAsB,EAAE;IAExB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAoB,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAoB,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,oEAAoE;gBACpE,oEAAoE;gBACpE,qEAAqE;gBACrE,2CAA2C;gBAC3C,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;oBACvB,QAAQ,IAAI,CAAC,CAAC;oBACd,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBAChC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBACnD,IAAI,CAAC;wBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBAC9B,IAAI,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;wBACxB,SAAS,GAAG,IAAI,CAAC;wBACjB,MAAM,GAAG,CAAC;oBACZ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { EdgeFact } from "../domain/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Edge classification + filtering shared by the traversal tools
|
|
4
|
+
* (trace_upstream / trace_downstream).
|
|
5
|
+
*
|
|
6
|
+
* Real-org traces are dominated by two kinds of edge that are technically
|
|
7
|
+
* correct but almost never what "what depends on X / what does X depend on"
|
|
8
|
+
* is asking for:
|
|
9
|
+
*
|
|
10
|
+
* 1. Security grants — every Profile/PermissionSet that can see an Apex
|
|
11
|
+
* class emits a GRANTS_APEX_ACCESS edge. A class used by 111 profiles
|
|
12
|
+
* buries its single IS_TEST_FOR / CALLS edge under 111 grant edges.
|
|
13
|
+
* 2. Reflection-walker inferences — low-confidence REFERENCES edges tagged
|
|
14
|
+
* `source: "reflection"`, emitted when a node's blob string happens to
|
|
15
|
+
* match another node's bare name. On Vlocity nodes these produce
|
|
16
|
+
* spurious links like DataRaptor:Foo → CustomApplication:DataRaptor.
|
|
17
|
+
*
|
|
18
|
+
* Dependency/dependent traces exclude both by default; callers can opt back
|
|
19
|
+
* in (a dedicated security view, or "show inferred references").
|
|
20
|
+
*/
|
|
21
|
+
/** Security / sharing grant edges — relationship of access, not of code dependency. */
|
|
22
|
+
export declare const SECURITY_GRANT_RELTYPES: ReadonlySet<string>;
|
|
23
|
+
/** True for a low-confidence reflection-walker REFERENCES edge. */
|
|
24
|
+
export declare function isReflectionEdge(e: EdgeFact): boolean;
|
|
25
|
+
export interface EdgeFilterOpts {
|
|
26
|
+
/** Only keep these relTypes (applied before excludes). */
|
|
27
|
+
includeRelTypes?: ReadonlySet<string>;
|
|
28
|
+
/** Drop these relTypes. */
|
|
29
|
+
excludeRelTypes?: ReadonlySet<string>;
|
|
30
|
+
/** Drop security/sharing grant edges. Default true for dependency traces. */
|
|
31
|
+
excludeSecurity?: boolean;
|
|
32
|
+
/** Drop reflection-inferred REFERENCES edges. Default true for traces. */
|
|
33
|
+
excludeReflection?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** Decide whether an edge survives the filter. */
|
|
36
|
+
export declare function keepEdge(e: EdgeFact, opts: EdgeFilterOpts): boolean;
|
|
37
|
+
//# sourceMappingURL=edge-filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-filters.d.ts","sourceRoot":"","sources":["../../src/analyze/edge-filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAWtD,CAAC;AAEH,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAKrD;AAED,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,2BAA2B;IAC3B,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAMnE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { REL_TYPES } from "../domain/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Edge classification + filtering shared by the traversal tools
|
|
4
|
+
* (trace_upstream / trace_downstream).
|
|
5
|
+
*
|
|
6
|
+
* Real-org traces are dominated by two kinds of edge that are technically
|
|
7
|
+
* correct but almost never what "what depends on X / what does X depend on"
|
|
8
|
+
* is asking for:
|
|
9
|
+
*
|
|
10
|
+
* 1. Security grants — every Profile/PermissionSet that can see an Apex
|
|
11
|
+
* class emits a GRANTS_APEX_ACCESS edge. A class used by 111 profiles
|
|
12
|
+
* buries its single IS_TEST_FOR / CALLS edge under 111 grant edges.
|
|
13
|
+
* 2. Reflection-walker inferences — low-confidence REFERENCES edges tagged
|
|
14
|
+
* `source: "reflection"`, emitted when a node's blob string happens to
|
|
15
|
+
* match another node's bare name. On Vlocity nodes these produce
|
|
16
|
+
* spurious links like DataRaptor:Foo → CustomApplication:DataRaptor.
|
|
17
|
+
*
|
|
18
|
+
* Dependency/dependent traces exclude both by default; callers can opt back
|
|
19
|
+
* in (a dedicated security view, or "show inferred references").
|
|
20
|
+
*/
|
|
21
|
+
/** Security / sharing grant edges — relationship of access, not of code dependency. */
|
|
22
|
+
export const SECURITY_GRANT_RELTYPES = new Set([
|
|
23
|
+
REL_TYPES.GRANTS_OBJECT_ACCESS,
|
|
24
|
+
REL_TYPES.GRANTS_FIELD_ACCESS,
|
|
25
|
+
REL_TYPES.GRANTS_APEX_ACCESS,
|
|
26
|
+
REL_TYPES.GRANTS_PAGE_ACCESS,
|
|
27
|
+
REL_TYPES.GRANTS_TAB_ACCESS,
|
|
28
|
+
REL_TYPES.GRANTS_USER_PERMISSION,
|
|
29
|
+
REL_TYPES.SHARING_GRANTS,
|
|
30
|
+
REL_TYPES.SHARING_TO_GROUP,
|
|
31
|
+
REL_TYPES.SHARING_TO_ROLE,
|
|
32
|
+
REL_TYPES.SHARING_FROM_OWNER_GROUP,
|
|
33
|
+
]);
|
|
34
|
+
/** True for a low-confidence reflection-walker REFERENCES edge. */
|
|
35
|
+
export function isReflectionEdge(e) {
|
|
36
|
+
return (e.relType === REL_TYPES.REFERENCES &&
|
|
37
|
+
e.attributes?.source === "reflection");
|
|
38
|
+
}
|
|
39
|
+
/** Decide whether an edge survives the filter. */
|
|
40
|
+
export function keepEdge(e, opts) {
|
|
41
|
+
if (opts.includeRelTypes && !opts.includeRelTypes.has(e.relType))
|
|
42
|
+
return false;
|
|
43
|
+
if (opts.excludeRelTypes?.has(e.relType))
|
|
44
|
+
return false;
|
|
45
|
+
if (opts.excludeSecurity !== false && SECURITY_GRANT_RELTYPES.has(e.relType))
|
|
46
|
+
return false;
|
|
47
|
+
if (opts.excludeReflection !== false && isReflectionEdge(e))
|
|
48
|
+
return false;
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=edge-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-filters.js","sourceRoot":"","sources":["../../src/analyze/edge-filters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAAC;IAClE,SAAS,CAAC,oBAAoB;IAC9B,SAAS,CAAC,mBAAmB;IAC7B,SAAS,CAAC,kBAAkB;IAC5B,SAAS,CAAC,kBAAkB;IAC5B,SAAS,CAAC,iBAAiB;IAC3B,SAAS,CAAC,sBAAsB;IAChC,SAAS,CAAC,cAAc;IACxB,SAAS,CAAC,gBAAgB;IAC1B,SAAS,CAAC,eAAe;IACzB,SAAS,CAAC,wBAAwB;CACnC,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,CAAW;IAC1C,OAAO,CACL,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,UAAU;QACjC,CAAC,CAAC,UAA+C,EAAE,MAAM,KAAK,YAAY,CAC5E,CAAC;AACJ,CAAC;AAaD,kDAAkD;AAClD,MAAM,UAAU,QAAQ,CAAC,CAAW,EAAE,IAAoB;IACxD,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/E,IAAI,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3F,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,IAAI,gBAAgB,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-nodes.d.ts","sourceRoot":"","sources":["../../src/analyze/find-nodes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-nodes.d.ts","sourceRoot":"","sources":["../../src/analyze/find-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,aAAa;IAC5B;;oCAEgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB;2BACuB;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,aAAkB,GACvB,eAAe,CAkCjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-nodes.js","sourceRoot":"","sources":["../../src/analyze/find-nodes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-nodes.js","sourceRoot":"","sources":["../../src/analyze/find-nodes.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,WAAW,CAAC;AAwClC,MAAM,UAAU,eAAe,CAC7B,KAAiB,EACjB,KAAY,EACZ,OAAe,EACf,OAAsB,EAAE;IAExB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE;QACjC,yEAAyE;QACzE,oDAAoD;QACpD,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,KAAK;QACf,qEAAqE;QACrE,4CAA4C;QAC5C,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvE,MAAM,UAAU,GAAe,EAAE,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,mEAAmE;QACnE,+DAA+D;QAC/D,mEAAmE;QACnE,gBAAgB;QAChB,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU;QAC5D,SAAS;QACT,KAAK,EAAE,UAAU,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,KAAiB,EAAE,MAAa;IACrD,oEAAoE;IACpE,sEAAsE;IACtE,6CAA6C;IAC7C,MAAM,CAAC,GAAG,KAAsD,CAAC;IACjE,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,UAAU;QAAE,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;IACpE,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -61,8 +61,8 @@ export interface RuleDescriptor {
|
|
|
61
61
|
export declare const RULE_CATALOG: Record<string, RuleDescriptor>;
|
|
62
62
|
import type { OrgId } from "@ryanstark24/sfgraph-shared";
|
|
63
63
|
import type { NodeFact } from "../domain/index.js";
|
|
64
|
-
import { findDeadCode } from "./dead-code.js";
|
|
65
64
|
import type { AuditResult } from "./audit-graph.js";
|
|
65
|
+
import { findDeadCode } from "./dead-code.js";
|
|
66
66
|
import type { GovernorRisk } from "./governor.js";
|
|
67
67
|
import type { SecurityAudit } from "./security.js";
|
|
68
68
|
export declare function governorRisksToFindings(risks: GovernorRisk[]): Finding[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/analyze/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,uEAAuE;IACvE,QAAQ,EAAE,eAAe,CAAC;IAC1B;mDAC+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,QAAQ,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAiEvD,CAAC;AAMF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/analyze/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;IAChB,uEAAuE;IACvE,QAAQ,EAAE,eAAe,CAAC;IAC1B;mDAC+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,QAAQ,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAiEvD,CAAC;AAMF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,CAQxE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,EAAE,CAmBvE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAW/D;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,EAAE,CAQrE;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,EAAE,CAOhE;AAID,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,KAAK,EAAE,CAAC"}
|
package/dist/analyze/findings.js
CHANGED
|
@@ -109,9 +109,7 @@ export function deadCodeToFindings(nodes) {
|
|
|
109
109
|
level: "note",
|
|
110
110
|
location: {
|
|
111
111
|
qualifiedName: String(n.qualifiedName),
|
|
112
|
-
...(typeof n.attributes.sourceUri === "string"
|
|
113
|
-
? { sourceUri: n.attributes.sourceUri }
|
|
114
|
-
: {}),
|
|
112
|
+
...(typeof n.attributes.sourceUri === "string" ? { sourceUri: n.attributes.sourceUri } : {}),
|
|
115
113
|
},
|
|
116
114
|
properties: { label: n.label },
|
|
117
115
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/analyze/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAkDH,MAAM,CAAC,MAAM,YAAY,GAAmC;IAC1D,uBAAuB,EAAE;QACvB,EAAE,EAAE,uBAAuB;QAC3B,IAAI,EAAE,cAAc;QACpB,gBAAgB,EAAE,0CAA0C;QAC5D,eAAe,EACb,+OAA+O;QACjP,YAAY,EAAE,OAAO;KACtB;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,aAAa;QACnB,gBAAgB,EAAE,yCAAyC;QAC3D,eAAe,EACb,+OAA+O;QACjP,YAAY,EAAE,OAAO;KACtB;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,iBAAiB;QACvB,gBAAgB,EAAE,+CAA+C;QACjE,eAAe,EACb,kMAAkM;QACpM,YAAY,EAAE,SAAS;KACxB;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,uBAAuB;QAC7B,gBAAgB,EAAE,+DAA+D;QACjF,eAAe,EACb,6LAA6L;QAC/L,YAAY,EAAE,OAAO;KACtB;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,0BAA0B;QAChC,gBAAgB,EAAE,6DAA6D;QAC/E,eAAe,EACb,gKAAgK;QAClK,YAAY,EAAE,SAAS;KACxB;IACD,8BAA8B,EAAE;QAC9B,EAAE,EAAE,8BAA8B;QAClC,IAAI,EAAE,wCAAwC;QAC9C,gBAAgB,EAAE,uEAAuE;QACzF,eAAe,EACb,8LAA8L;QAChM,YAAY,EAAE,SAAS;KACxB;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,uBAAuB;QAC7B,gBAAgB,EAAE,+DAA+D;QACjF,eAAe,EACb,kQAAkQ;QACpQ,YAAY,EAAE,MAAM;KACrB;IACD,qBAAqB,EAAE;QACrB,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,eAAe;QACrB,gBAAgB,EAAE,oEAAoE;QACtF,eAAe,EACb,yNAAyN;QAC3N,YAAY,EAAE,MAAM;KACrB;CACF,CAAC;
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/analyze/findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../src/analyze/populate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../src/analyze/populate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,6BAA6B,CAAC;AAGxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGlF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,qBAAqB,GACxB,MAAM,CA8JR;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,qBAAqB,GACxB,MAAM,CAoCR;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,qBAAqB,GACxB,MAAM,CAcR;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,qBAAqB,GACxB,MAAM,CAyBR;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,qBAAqB,GACxB,OAAO,CAAC,cAAc,CAAC,CAMzB"}
|
package/dist/analyze/populate.js
CHANGED
|
@@ -84,29 +84,74 @@ export function populateGovernorRisks(store, orgId, db) {
|
|
|
84
84
|
}
|
|
85
85
|
return out;
|
|
86
86
|
};
|
|
87
|
+
/**
|
|
88
|
+
* Edge-based detection — the primary path for live-org ingests, where the
|
|
89
|
+
* Apex body is parsed then discarded (node attrs carry no `body`/`source`,
|
|
90
|
+
* so the char-scan above finds nothing). The Apex AST extractor stamps
|
|
91
|
+
* EXECUTES_SOQL / EXECUTES_DML edges with `inLoop: true` when the
|
|
92
|
+
* query/DML sits inside a for/while/do-while body, and records the query
|
|
93
|
+
* text — enough to flag soql_in_loop, dml_in_loop, and unbounded_query
|
|
94
|
+
* straight off the graph. These edges hang off ApexMethod nodes.
|
|
95
|
+
*/
|
|
96
|
+
const detectFromEdges = (qname) => {
|
|
97
|
+
const out = [];
|
|
98
|
+
for (const e of store.listEdgesFrom(orgId, qname, REL_TYPES.EXECUTES_SOQL)) {
|
|
99
|
+
const ea = (e.attributes ?? {});
|
|
100
|
+
const query = typeof ea.query === "string" ? ea.query : "";
|
|
101
|
+
if (ea.inLoop === true) {
|
|
102
|
+
out.push({ type: "soql_in_loop", evidence: query || "SOQL in loop", line: -1 });
|
|
103
|
+
}
|
|
104
|
+
// NB: we deliberately do NOT flag "unbounded_query" (no WHERE/LIMIT)
|
|
105
|
+
// from edges. Calibrated against a real org: ~100% of SOQL has no
|
|
106
|
+
// WHERE/LIMIT in the captured query head (legit full reads of small
|
|
107
|
+
// config objects like RecordType / CallCenter), so the heuristic
|
|
108
|
+
// fires on every query and is pure noise. The body-scan path keeps it
|
|
109
|
+
// for filesystem ingests where the full query text is available, but
|
|
110
|
+
// SOQL/DML-in-loop is the high-signal governor risk we surface here.
|
|
111
|
+
}
|
|
112
|
+
for (const e of store.listEdgesFrom(orgId, qname, REL_TYPES.EXECUTES_DML)) {
|
|
113
|
+
const ea = (e.attributes ?? {});
|
|
114
|
+
if (ea.inLoop === true) {
|
|
115
|
+
out.push({ type: "dml_in_loop", evidence: String(e.dstQualifiedName), line: -1 });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
};
|
|
120
|
+
const writeRisks = (qname, risks) => {
|
|
121
|
+
const seen = new Set();
|
|
122
|
+
for (const r of risks) {
|
|
123
|
+
const k = `${r.type}|${r.line}|${r.evidence.slice(0, 40)}`;
|
|
124
|
+
if (seen.has(k))
|
|
125
|
+
continue;
|
|
126
|
+
seen.add(k);
|
|
127
|
+
stmt.run(orgId, qname, r.type, r.evidence, r.line, now);
|
|
128
|
+
n += 1;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
// Class / trigger: body char-scan (filesystem ingest) + attribute hints.
|
|
87
132
|
for (const lbl of [METADATA_CATEGORY.APEX_CLASS, METADATA_CATEGORY.APEX_TRIGGER]) {
|
|
88
133
|
for (const node of store.listNodesByLabel(orgId, lbl, 10000)) {
|
|
89
134
|
const a = node.attributes;
|
|
90
135
|
const body = String(a.source ?? a.body ?? "");
|
|
91
136
|
const risks = detect(body);
|
|
92
|
-
// Attribute hints from earlier phases
|
|
93
137
|
if (a.hasSoqlInLoop === true) {
|
|
94
138
|
risks.push({ type: "soql_in_loop", evidence: "attribute hint", line: -1 });
|
|
95
139
|
}
|
|
96
140
|
if (a.hasDmlInLoop === true) {
|
|
97
141
|
risks.push({ type: "dml_in_loop", evidence: "attribute hint", line: -1 });
|
|
98
142
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
continue;
|
|
104
|
-
seen.add(k);
|
|
105
|
-
stmt.run(orgId, node.qualifiedName, r.type, r.evidence, r.line, now);
|
|
106
|
-
n += 1;
|
|
107
|
-
}
|
|
143
|
+
// Edge-based detection on the class/trigger node itself (regex-mode
|
|
144
|
+
// parser emits SOQL/DML edges at the trigger/class qname).
|
|
145
|
+
risks.push(...detectFromEdges(node.qualifiedName));
|
|
146
|
+
writeRisks(node.qualifiedName, risks);
|
|
108
147
|
}
|
|
109
148
|
}
|
|
149
|
+
// Method-level edge detection — the live-ingest path (AST parser emits
|
|
150
|
+
// EXECUTES_SOQL/DML edges per method). "ApexMethod" is a raw node label,
|
|
151
|
+
// not a METADATA_CATEGORY member.
|
|
152
|
+
for (const node of store.listNodesByLabel(orgId, "ApexMethod", 50000)) {
|
|
153
|
+
writeRisks(node.qualifiedName, detectFromEdges(node.qualifiedName));
|
|
154
|
+
}
|
|
110
155
|
return n;
|
|
111
156
|
}
|
|
112
157
|
export function populateDeadCodeScores(store, orgId, db) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate.js","sourceRoot":"","sources":["../../src/analyze/populate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"populate.js","sourceRoot":"","sources":["../../src/analyze/populate.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ export interface SecurityAudit {
|
|
|
7
7
|
grantedBy: string[];
|
|
8
8
|
}>;
|
|
9
9
|
flsGaps: string[];
|
|
10
|
+
/** FLS-gap rows suppressed as not-FLS-relevant (CMDT fields + standard
|
|
11
|
+
* system/audit fields). Surfaced so "0 real gaps" is distinguishable from
|
|
12
|
+
* "we hid everything". */
|
|
13
|
+
flsGapsExcluded?: number;
|
|
10
14
|
/**
|
|
11
15
|
* True when one of the underlying per-label scans hit
|
|
12
16
|
* `SECURITY_PER_LABEL_CAP`. When set, results are incomplete and the
|
|
@@ -15,11 +19,22 @@ export interface SecurityAudit {
|
|
|
15
19
|
truncated?: boolean;
|
|
16
20
|
}
|
|
17
21
|
export declare const SECURITY_PER_LABEL_CAP = 5000;
|
|
22
|
+
/**
|
|
23
|
+
* True when a `CustomField:<Object>.<Field>` qname names a field that real
|
|
24
|
+
* field-level security applies to. Excludes:
|
|
25
|
+
* - Custom Metadata Type fields (`__mdt`) — CMDT has no per-field FLS.
|
|
26
|
+
* - Custom Settings-ish / metadata objects and standard system/audit fields.
|
|
27
|
+
* Custom fields (`__c`) on real objects (standard or custom) stay in.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isFlsRelevantField(qname: string): boolean;
|
|
18
30
|
export interface SecurityAuditOptions {
|
|
19
31
|
/** Restrict the field-access matrix + FLS gaps to fields of this object (qualifiedName prefix, e.g. `CustomObject:Account`). */
|
|
20
32
|
object?: string;
|
|
21
33
|
/** Restrict to a single field qualifiedName (e.g. `CustomField:Account.Tier__c`). Implies `object`. */
|
|
22
34
|
field?: string;
|
|
35
|
+
/** Include not-FLS-relevant fields (CMDT + system/audit) in the gap list.
|
|
36
|
+
* Default false — those are noise for an FLS review. */
|
|
37
|
+
includeNonFlsFields?: boolean;
|
|
23
38
|
}
|
|
24
39
|
export declare function securityAudit(store: GraphStore, orgId: OrgId, opts?: SecurityAuditOptions): SecurityAudit;
|
|
25
40
|
//# sourceMappingURL=security.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/analyze/security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,sBAAsB,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/analyze/security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;+BAE2B;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,sBAAsB,OAAO,CAAC;AA6B3C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAUzD;AAED,MAAM,WAAW,oBAAoB;IACnC,gIAAgI;IAChI,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uGAAuG;IACvG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;6DACyD;IACzD,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAiBD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,IAAI,CAAC,EAAE,oBAAoB,GAC1B,aAAa,CAkEf"}
|
package/dist/analyze/security.js
CHANGED
|
@@ -1,6 +1,53 @@
|
|
|
1
1
|
import { METADATA_CATEGORY } from "../domain/metadata-category.js";
|
|
2
2
|
import { REL_TYPES } from "../domain/rel-types.js";
|
|
3
3
|
export const SECURITY_PER_LABEL_CAP = 5000;
|
|
4
|
+
/** Standard system / audit field API names. These are never subject to the
|
|
5
|
+
* field-level security a developer cares about — flagging them as "FLS gaps"
|
|
6
|
+
* is pure noise (they dominated the gap list on a real org). */
|
|
7
|
+
const SYSTEM_FIELD_NAMES = new Set([
|
|
8
|
+
"Id",
|
|
9
|
+
"Name",
|
|
10
|
+
"OwnerId",
|
|
11
|
+
"IsDeleted",
|
|
12
|
+
"CreatedById",
|
|
13
|
+
"CreatedDate",
|
|
14
|
+
"LastModifiedById",
|
|
15
|
+
"LastModifiedDate",
|
|
16
|
+
"SystemModstamp",
|
|
17
|
+
"LastViewedDate",
|
|
18
|
+
"LastReferencedDate",
|
|
19
|
+
"LastActivityDate",
|
|
20
|
+
"RecordTypeId",
|
|
21
|
+
"CurrencyIsoCode",
|
|
22
|
+
// Custom Metadata Type built-ins
|
|
23
|
+
"DeveloperName",
|
|
24
|
+
"MasterLabel",
|
|
25
|
+
"Language",
|
|
26
|
+
"NamespacePrefix",
|
|
27
|
+
"Label",
|
|
28
|
+
"QualifiedApiName",
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* True when a `CustomField:<Object>.<Field>` qname names a field that real
|
|
32
|
+
* field-level security applies to. Excludes:
|
|
33
|
+
* - Custom Metadata Type fields (`__mdt`) — CMDT has no per-field FLS.
|
|
34
|
+
* - Custom Settings-ish / metadata objects and standard system/audit fields.
|
|
35
|
+
* Custom fields (`__c`) on real objects (standard or custom) stay in.
|
|
36
|
+
*/
|
|
37
|
+
export function isFlsRelevantField(qname) {
|
|
38
|
+
const tail = (qname.includes(":") ? qname.split(":")[1] : qname) ?? qname;
|
|
39
|
+
const dot = tail.indexOf(".");
|
|
40
|
+
if (dot <= 0)
|
|
41
|
+
return false;
|
|
42
|
+
const object = tail.slice(0, dot);
|
|
43
|
+
const field = tail.slice(dot + 1);
|
|
44
|
+
// CMDT and platform-event/big-object metadata don't use developer FLS.
|
|
45
|
+
if (/__(mdt|e|b)$/i.test(object))
|
|
46
|
+
return false;
|
|
47
|
+
if (SYSTEM_FIELD_NAMES.has(field))
|
|
48
|
+
return false;
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
4
51
|
function matchesFilter(qname, opts) {
|
|
5
52
|
if (!opts)
|
|
6
53
|
return true;
|
|
@@ -45,16 +92,24 @@ export function securityAudit(store, orgId, opts) {
|
|
|
45
92
|
set.add(n.qualifiedName);
|
|
46
93
|
}
|
|
47
94
|
}
|
|
48
|
-
// FLS gaps: fields with no grants. Honour the object/field filter
|
|
95
|
+
// FLS gaps: fields with no grants. Honour the object/field filter, and skip
|
|
96
|
+
// not-FLS-relevant fields (CMDT + system/audit) unless explicitly requested
|
|
97
|
+
// — those dominated the raw list and are never a real FLS finding.
|
|
49
98
|
const flsGaps = [];
|
|
99
|
+
let flsGapsExcluded = 0;
|
|
50
100
|
const fields = store.listNodesByLabel(orgId, METADATA_CATEGORY.FIELD, SECURITY_PER_LABEL_CAP);
|
|
51
101
|
if (fields.length >= SECURITY_PER_LABEL_CAP)
|
|
52
102
|
truncated = true;
|
|
53
103
|
for (const n of fields) {
|
|
54
104
|
if (!matchesFilter(n.qualifiedName, opts))
|
|
55
105
|
continue;
|
|
56
|
-
if (
|
|
57
|
-
|
|
106
|
+
if (fieldAccessMatrix.has(n.qualifiedName))
|
|
107
|
+
continue;
|
|
108
|
+
if (!opts?.includeNonFlsFields && !isFlsRelevantField(n.qualifiedName)) {
|
|
109
|
+
flsGapsExcluded += 1;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
flsGaps.push(n.qualifiedName);
|
|
58
113
|
}
|
|
59
114
|
// Filter the matrix too so a narrowed audit returns a narrowed matrix.
|
|
60
115
|
const filteredMatrix = Array.from(fieldAccessMatrix.entries())
|
|
@@ -64,6 +119,7 @@ export function securityAudit(store, orgId, opts) {
|
|
|
64
119
|
sharingFullAccess,
|
|
65
120
|
fieldAccessMatrix: filteredMatrix,
|
|
66
121
|
flsGaps,
|
|
122
|
+
flsGapsExcluded,
|
|
67
123
|
truncated,
|
|
68
124
|
};
|
|
69
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/analyze/security.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/analyze/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wip-impact.d.ts","sourceRoot":"","sources":["../../src/analyze/wip-impact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAOjE,OAAO,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAI3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAE1C,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"wip-impact.d.ts","sourceRoot":"","sources":["../../src/analyze/wip-impact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAOjE,OAAO,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAI3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAE1C,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkHD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+K/F"}
|