@ryanstark24/sfgraph-core 1.1.0 → 1.1.3

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 (112) hide show
  1. package/dist/analyze/__tests__/audit-graph.test.d.ts +2 -0
  2. package/dist/analyze/__tests__/audit-graph.test.d.ts.map +1 -0
  3. package/dist/analyze/__tests__/audit-graph.test.js +122 -0
  4. package/dist/analyze/__tests__/audit-graph.test.js.map +1 -0
  5. package/dist/analyze/audit-graph.d.ts +48 -0
  6. package/dist/analyze/audit-graph.d.ts.map +1 -0
  7. package/dist/analyze/audit-graph.js +50 -0
  8. package/dist/analyze/audit-graph.js.map +1 -0
  9. package/dist/analyze/index.d.ts +1 -0
  10. package/dist/analyze/index.d.ts.map +1 -1
  11. package/dist/analyze/index.js +1 -0
  12. package/dist/analyze/index.js.map +1 -1
  13. package/dist/domain/rel-types.d.ts +7 -0
  14. package/dist/domain/rel-types.d.ts.map +1 -1
  15. package/dist/domain/rel-types.js +7 -0
  16. package/dist/domain/rel-types.js.map +1 -1
  17. package/dist/extractors/live-org/__tests__/rate-limit.test.js +46 -1
  18. package/dist/extractors/live-org/__tests__/rate-limit.test.js.map +1 -1
  19. package/dist/extractors/live-org/capabilities.d.ts.map +1 -1
  20. package/dist/extractors/live-org/capabilities.js +21 -3
  21. package/dist/extractors/live-org/capabilities.js.map +1 -1
  22. package/dist/extractors/live-org/discovery.d.ts.map +1 -1
  23. package/dist/extractors/live-org/discovery.js +2 -4
  24. package/dist/extractors/live-org/discovery.js.map +1 -1
  25. package/dist/extractors/live-org/extractors/apex.d.ts.map +1 -1
  26. package/dist/extractors/live-org/extractors/apex.js +4 -4
  27. package/dist/extractors/live-org/extractors/apex.js.map +1 -1
  28. package/dist/extractors/live-org/extractors/generic-sobject.d.ts.map +1 -1
  29. package/dist/extractors/live-org/extractors/generic-sobject.js +2 -2
  30. package/dist/extractors/live-org/extractors/generic-sobject.js.map +1 -1
  31. package/dist/extractors/live-org/extractors/lwc.d.ts.map +1 -1
  32. package/dist/extractors/live-org/extractors/lwc.js +3 -3
  33. package/dist/extractors/live-org/extractors/lwc.js.map +1 -1
  34. package/dist/extractors/live-org/extractors/object.d.ts.map +1 -1
  35. package/dist/extractors/live-org/extractors/object.js +4 -4
  36. package/dist/extractors/live-org/extractors/object.js.map +1 -1
  37. package/dist/extractors/live-org/extractors/omnistudio.d.ts.map +1 -1
  38. package/dist/extractors/live-org/extractors/omnistudio.js +3 -3
  39. package/dist/extractors/live-org/extractors/omnistudio.js.map +1 -1
  40. package/dist/extractors/live-org/rate-limit.d.ts +18 -11
  41. package/dist/extractors/live-org/rate-limit.d.ts.map +1 -1
  42. package/dist/extractors/live-org/rate-limit.js +51 -19
  43. package/dist/extractors/live-org/rate-limit.js.map +1 -1
  44. package/dist/extractors/live-org/source-member.d.ts.map +1 -1
  45. package/dist/extractors/live-org/source-member.js +3 -3
  46. package/dist/extractors/live-org/source-member.js.map +1 -1
  47. package/dist/extractors/live-org/vlocity/runner.d.ts.map +1 -1
  48. package/dist/extractors/live-org/vlocity/runner.js +71 -38
  49. package/dist/extractors/live-org/vlocity/runner.js.map +1 -1
  50. package/dist/index.d.ts +1 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +2 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/ingest/__tests__/multi-org-orchestrator.test.js +4 -0
  55. package/dist/ingest/__tests__/multi-org-orchestrator.test.js.map +1 -1
  56. package/dist/ingest/live-ingest.d.ts +16 -0
  57. package/dist/ingest/live-ingest.d.ts.map +1 -1
  58. package/dist/ingest/live-ingest.js +93 -0
  59. package/dist/ingest/live-ingest.js.map +1 -1
  60. package/dist/parsers/__tests__/lwc-bindings.test.d.ts +2 -0
  61. package/dist/parsers/__tests__/lwc-bindings.test.d.ts.map +1 -0
  62. package/dist/parsers/__tests__/lwc-bindings.test.js +74 -0
  63. package/dist/parsers/__tests__/lwc-bindings.test.js.map +1 -0
  64. package/dist/parsers/apex/__tests__/arity-resolver.test.d.ts +2 -0
  65. package/dist/parsers/apex/__tests__/arity-resolver.test.d.ts.map +1 -0
  66. package/dist/parsers/apex/__tests__/arity-resolver.test.js +135 -0
  67. package/dist/parsers/apex/__tests__/arity-resolver.test.js.map +1 -0
  68. package/dist/parsers/apex/__tests__/ast-extractor.test.d.ts +2 -0
  69. package/dist/parsers/apex/__tests__/ast-extractor.test.d.ts.map +1 -0
  70. package/dist/parsers/apex/__tests__/ast-extractor.test.js +146 -0
  71. package/dist/parsers/apex/__tests__/ast-extractor.test.js.map +1 -0
  72. package/dist/parsers/apex/arity-resolver.d.ts +42 -0
  73. package/dist/parsers/apex/arity-resolver.d.ts.map +1 -0
  74. package/dist/parsers/apex/arity-resolver.js +111 -0
  75. package/dist/parsers/apex/arity-resolver.js.map +1 -0
  76. package/dist/parsers/apex/ast-extractor.d.ts +42 -0
  77. package/dist/parsers/apex/ast-extractor.d.ts.map +1 -0
  78. package/dist/parsers/apex/ast-extractor.js +402 -0
  79. package/dist/parsers/apex/ast-extractor.js.map +1 -0
  80. package/dist/parsers/apex/class.d.ts.map +1 -1
  81. package/dist/parsers/apex/class.js +56 -2
  82. package/dist/parsers/apex/class.js.map +1 -1
  83. package/dist/parsers/flow/__tests__/invocable-resolver.test.d.ts +2 -0
  84. package/dist/parsers/flow/__tests__/invocable-resolver.test.d.ts.map +1 -0
  85. package/dist/parsers/flow/__tests__/invocable-resolver.test.js +91 -0
  86. package/dist/parsers/flow/__tests__/invocable-resolver.test.js.map +1 -0
  87. package/dist/parsers/flow/invocable-resolver.d.ts +30 -0
  88. package/dist/parsers/flow/invocable-resolver.d.ts.map +1 -0
  89. package/dist/parsers/flow/invocable-resolver.js +67 -0
  90. package/dist/parsers/flow/invocable-resolver.js.map +1 -0
  91. package/dist/parsers/index.d.ts +2 -0
  92. package/dist/parsers/index.d.ts.map +1 -1
  93. package/dist/parsers/index.js +2 -0
  94. package/dist/parsers/index.js.map +1 -1
  95. package/dist/parsers/lwc/bundle.d.ts.map +1 -1
  96. package/dist/parsers/lwc/bundle.js +19 -4
  97. package/dist/parsers/lwc/bundle.js.map +1 -1
  98. package/dist/parsers/lwc/html-visitor.d.ts +2 -1
  99. package/dist/parsers/lwc/html-visitor.d.ts.map +1 -1
  100. package/dist/parsers/lwc/html-visitor.js +67 -3
  101. package/dist/parsers/lwc/html-visitor.js.map +1 -1
  102. package/dist/parsers/lwc/js-visitor.d.ts +22 -0
  103. package/dist/parsers/lwc/js-visitor.d.ts.map +1 -1
  104. package/dist/parsers/lwc/js-visitor.js +86 -2
  105. package/dist/parsers/lwc/js-visitor.js.map +1 -1
  106. package/dist/storage/interfaces.d.ts +9 -0
  107. package/dist/storage/interfaces.d.ts.map +1 -1
  108. package/dist/storage/sqlite/graph-store.d.ts +10 -0
  109. package/dist/storage/sqlite/graph-store.d.ts.map +1 -1
  110. package/dist/storage/sqlite/graph-store.js +56 -0
  111. package/dist/storage/sqlite/graph-store.js.map +1 -1
  112. package/package.json +2 -2
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audit-graph.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-graph.test.d.ts","sourceRoot":"","sources":["../../../src/analyze/__tests__/audit-graph.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ import { asOrgId, asQualifiedName, asSha256 } from "@ryanstark24/sfgraph-shared";
2
+ import { describe, expect, it } from "vitest";
3
+ import { REL_TYPES } from "../../domain/index.js";
4
+ import { SqliteGraphStore } from "../../storage/sqlite/graph-store.js";
5
+ import { auditDanglingEdges, deleteDanglingEdges } from "../audit-graph.js";
6
+ async function seed() {
7
+ const store = new SqliteGraphStore({ dbPath: ":memory:" });
8
+ await store.init();
9
+ const orgId = asOrgId("org_audit");
10
+ store.upsertOrg({
11
+ id: orgId,
12
+ alias: "test",
13
+ instanceUrl: "https://example.test",
14
+ apiVersion: "59.0",
15
+ createdAt: Date.now(),
16
+ });
17
+ const ts = Date.now();
18
+ // Two real nodes
19
+ store.mergeNodes([
20
+ {
21
+ orgId,
22
+ qualifiedName: asQualifiedName("ApexClass:Foo"),
23
+ label: "ApexClass",
24
+ attributes: {},
25
+ sourceHash: asSha256("foo"),
26
+ firstSeenAt: ts,
27
+ lastSeenAt: ts,
28
+ lastModifiedAt: ts,
29
+ },
30
+ {
31
+ orgId,
32
+ qualifiedName: asQualifiedName("ApexMethod:Foo.bar(2)"),
33
+ label: "ApexMethod",
34
+ attributes: {},
35
+ sourceHash: asSha256("foobar"),
36
+ firstSeenAt: ts,
37
+ lastSeenAt: ts,
38
+ lastModifiedAt: ts,
39
+ },
40
+ ]);
41
+ // Three edges: one good, two dangling
42
+ store.mergeEdges([
43
+ {
44
+ orgId,
45
+ srcQualifiedName: asQualifiedName("ApexClass:Foo"),
46
+ dstQualifiedName: asQualifiedName("ApexMethod:Foo.bar(2)"),
47
+ relType: REL_TYPES.CONTAINS_METHOD,
48
+ attributes: {},
49
+ firstSeenAt: ts,
50
+ lastSeenAt: ts,
51
+ },
52
+ {
53
+ orgId,
54
+ srcQualifiedName: asQualifiedName("ApexMethod:Foo.bar(2)"),
55
+ dstQualifiedName: asQualifiedName("ApexMethod:Ghost.notReal(?)"),
56
+ relType: REL_TYPES.CALLS,
57
+ attributes: {},
58
+ firstSeenAt: ts,
59
+ lastSeenAt: ts,
60
+ },
61
+ {
62
+ orgId,
63
+ srcQualifiedName: asQualifiedName("ApexMethod:Foo.bar(2)"),
64
+ dstQualifiedName: asQualifiedName("CustomField:Account.Phantom__c"),
65
+ relType: REL_TYPES.READS_FIELD,
66
+ attributes: {},
67
+ firstSeenAt: ts,
68
+ lastSeenAt: ts,
69
+ },
70
+ ]);
71
+ return { store, orgId };
72
+ }
73
+ describe("auditDanglingEdges", () => {
74
+ it("reports dangling edges grouped by relType and dst prefix", async () => {
75
+ const { store, orgId } = await seed();
76
+ const result = auditDanglingEdges(store, orgId);
77
+ expect(result.totalEdges).toBe(3);
78
+ expect(result.danglingCount).toBe(2);
79
+ expect(result.byRel).toMatchObject({ CALLS: 1, READS_FIELD: 1 });
80
+ expect(result.byDstPrefix).toMatchObject({ ApexMethod: 1, CustomField: 1 });
81
+ expect(result.sample).toHaveLength(2);
82
+ await store.close();
83
+ });
84
+ it("respects sampleSize", async () => {
85
+ const { store, orgId } = await seed();
86
+ const result = auditDanglingEdges(store, orgId, { sampleSize: 1 });
87
+ expect(result.danglingCount).toBe(2);
88
+ expect(result.sample).toHaveLength(1);
89
+ await store.close();
90
+ });
91
+ it("returns empty histograms when there are no dangling edges", async () => {
92
+ const store = new SqliteGraphStore({ dbPath: ":memory:" });
93
+ await store.init();
94
+ const orgId = asOrgId("org_empty");
95
+ store.upsertOrg({
96
+ id: orgId,
97
+ alias: "test",
98
+ instanceUrl: "https://example.test",
99
+ apiVersion: "59.0",
100
+ createdAt: Date.now(),
101
+ });
102
+ const result = auditDanglingEdges(store, orgId);
103
+ expect(result.totalEdges).toBe(0);
104
+ expect(result.danglingCount).toBe(0);
105
+ expect(result.sample).toHaveLength(0);
106
+ await store.close();
107
+ });
108
+ });
109
+ describe("deleteDanglingEdges", () => {
110
+ it("removes dangling edges and leaves good ones intact", async () => {
111
+ const { store, orgId } = await seed();
112
+ const before = auditDanglingEdges(store, orgId);
113
+ expect(before.danglingCount).toBe(2);
114
+ const { deleted } = deleteDanglingEdges(store, orgId);
115
+ expect(deleted).toBe(2);
116
+ const after = auditDanglingEdges(store, orgId);
117
+ expect(after.danglingCount).toBe(0);
118
+ expect(after.totalEdges).toBe(1); // good edge survives
119
+ await store.close();
120
+ });
121
+ });
122
+ //# sourceMappingURL=audit-graph.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-graph.test.js","sourceRoot":"","sources":["../../../src/analyze/__tests__/audit-graph.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { OrgId } from "@ryanstark24/sfgraph-shared";
2
+ import type { EdgeFact } from "../domain/index.js";
3
+ import type { GraphStore } from "../storage/interfaces.js";
4
+ /**
5
+ * Edges whose `dst` qualified name has no matching node row. Surfaced
6
+ * post-ingest so the user can see what the parsers reference but the
7
+ * extractors never materialized (managed-package methods, third-party
8
+ * imports, dotted refs to fields whose CustomObject was filtered out).
9
+ *
10
+ * Counts are emitted in two histograms:
11
+ * - byRel: which relationship types are most affected (e.g. CALLS,
12
+ * GRANTS_APEX_ACCESS) — points at parsers that emit speculative targets.
13
+ * - byDstPrefix: which qname prefixes are most common (e.g. `ApexMethod:`,
14
+ * `Remote:`, `CustomField:`) — points at unparsed metadata categories.
15
+ *
16
+ * A bounded `sample` of the actual dangling edges is included so users can
17
+ * eyeball whether they're "expected" (managed packages, ghost references)
18
+ * or "fixable" (an extractor that should have emitted a target node).
19
+ */
20
+ export interface DanglingEdgeSample {
21
+ src: string;
22
+ rel: string;
23
+ dst: string;
24
+ }
25
+ export interface AuditResult {
26
+ totalEdges: number;
27
+ danglingCount: number;
28
+ byRel: Record<string, number>;
29
+ byDstPrefix: Record<string, number>;
30
+ sample: DanglingEdgeSample[];
31
+ }
32
+ export interface AuditOpts {
33
+ /** How many dangling edges to keep in `sample`. Default 25. */
34
+ sampleSize?: number;
35
+ /** Hard upper bound on rows scanned per edge table. Default unlimited. */
36
+ scanLimit?: number;
37
+ }
38
+ export declare function auditDanglingEdges(store: GraphStore, orgIdIn: OrgId | string, opts?: AuditOpts): AuditResult;
39
+ /**
40
+ * Destructive companion to `auditDanglingEdges`: deletes every dangling edge.
41
+ * Reserved for the CLI `--delete-dangling --yes` flag; callers must own the
42
+ * authorization decision (we just do the work).
43
+ */
44
+ export declare function deleteDanglingEdges(store: GraphStore, orgIdIn: OrgId | string): {
45
+ deleted: number;
46
+ };
47
+ export type { EdgeFact };
48
+ //# sourceMappingURL=audit-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-graph.d.ts","sourceRoot":"","sources":["../../src/analyze/audit-graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,KAAK,GAAG,MAAM,EACvB,IAAI,GAAE,SAAc,GACnB,WAAW,CA8Bb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,KAAK,GAAG,MAAM,GACtB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAgBrB;AAED,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { asOrgId } from "@ryanstark24/sfgraph-shared";
2
+ function prefix(qname) {
3
+ const idx = qname.indexOf(":");
4
+ return idx > 0 ? qname.slice(0, idx) : "(unlabeled)";
5
+ }
6
+ export function auditDanglingEdges(store, orgIdIn, opts = {}) {
7
+ const orgId = typeof orgIdIn === "string" ? asOrgId(orgIdIn) : orgIdIn;
8
+ // Clamp to ≥0; a negative slice index would silently return a tail of the
9
+ // dangling array rather than an empty sample.
10
+ const sampleSize = Math.max(0, opts.sampleSize ?? 25);
11
+ const totalEdges = store.countEdges(orgId);
12
+ const dangling = store.listDanglingEdges(orgId, opts.scanLimit);
13
+ const byRel = {};
14
+ const byDstPrefix = {};
15
+ for (const e of dangling) {
16
+ byRel[e.relType] = (byRel[e.relType] ?? 0) + 1;
17
+ const p = prefix(String(e.dstQualifiedName));
18
+ byDstPrefix[p] = (byDstPrefix[p] ?? 0) + 1;
19
+ }
20
+ const sample = dangling.slice(0, sampleSize).map((e) => ({
21
+ src: String(e.srcQualifiedName),
22
+ rel: String(e.relType),
23
+ dst: String(e.dstQualifiedName),
24
+ }));
25
+ return {
26
+ totalEdges,
27
+ danglingCount: dangling.length,
28
+ byRel,
29
+ byDstPrefix,
30
+ sample,
31
+ };
32
+ }
33
+ /**
34
+ * Destructive companion to `auditDanglingEdges`: deletes every dangling edge.
35
+ * Reserved for the CLI `--delete-dangling --yes` flag; callers must own the
36
+ * authorization decision (we just do the work).
37
+ */
38
+ export function deleteDanglingEdges(store, orgIdIn) {
39
+ const orgId = typeof orgIdIn === "string" ? asOrgId(orgIdIn) : orgIdIn;
40
+ const dangling = store.listDanglingEdges(orgId);
41
+ let deleted = 0;
42
+ store.transaction(() => {
43
+ for (const e of dangling) {
44
+ store.deleteEdge(orgId, e.srcQualifiedName, e.dstQualifiedName, e.relType);
45
+ deleted += 1;
46
+ }
47
+ });
48
+ return { deleted };
49
+ }
50
+ //# sourceMappingURL=audit-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-graph.js","sourceRoot":"","sources":["../../src/analyze/audit-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA0CtD,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAiB,EACjB,OAAuB,EACvB,OAAkB,EAAE;IAEpB,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,0EAA0E;IAC1E,8CAA8C;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAEhE,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC7C,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAyB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC/B,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;KAChC,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,UAAU;QACV,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,KAAK;QACL,WAAW;QACX,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAiB,EACjB,OAAuB;IAEvB,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACrB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,CAAC,UAAU,CACd,KAAK,EACL,CAAC,CAAC,gBAAiC,EACnC,CAAC,CAAC,gBAAiC,EACnC,CAAC,CAAC,OAAkB,CACrB,CAAC;YACF,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}
@@ -11,4 +11,5 @@ export * from "./security.js";
11
11
  export * from "./populate.js";
12
12
  export * from "./deployment-manifest/generate.js";
13
13
  export * from "./wip-impact.js";
14
+ export * from "./audit-graph.js";
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,mCAAmC,CAAC;AAClD,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,mCAAmC,CAAC;AAClD,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
@@ -11,4 +11,5 @@ export * from "./security.js";
11
11
  export * from "./populate.js";
12
12
  export * from "./deployment-manifest/generate.js";
13
13
  export * from "./wip-impact.js";
14
+ export * from "./audit-graph.js";
14
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,mCAAmC,CAAC;AAClD,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,mCAAmC,CAAC;AAClD,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
@@ -29,7 +29,14 @@ export declare const REL_TYPES: {
29
29
  readonly EMBEDS_LWC: "EMBEDS_LWC";
30
30
  readonly EMBEDS_AURA: "EMBEDS_AURA";
31
31
  readonly CONTAINS_COMPONENT: "CONTAINS_COMPONENT";
32
+ /** Phase 5: LWC template binding `{var.field}` resolved to a CustomField. */
33
+ readonly LWC_BINDS_FIELD: "LWC_BINDS_FIELD";
34
+ /** Phase 5: LWC template binding whose target couldn't be resolved to a field. */
35
+ readonly LWC_BINDS_PROPERTY: "LWC_BINDS_PROPERTY";
32
36
  readonly FLOW_INVOKES_APEX: "FLOW_INVOKES_APEX";
37
+ /** Resolved by Phase 6 invocable-resolver: edge from Flow to the specific
38
+ * ApexMethod annotated @InvocableMethod on the action's class. */
39
+ readonly FLOW_INVOKES_APEX_METHOD: "FLOW_INVOKES_APEX_METHOD";
33
40
  readonly FLOW_INVOKES_SUBFLOW: "FLOW_INVOKES_SUBFLOW";
34
41
  readonly FLOW_INVOKES_ACTION: "FLOW_INVOKES_ACTION";
35
42
  readonly REFERENCES_OBJECT: "REFERENCES_OBJECT";
@@ -1 +1 @@
1
- {"version":3,"file":"rel-types.d.ts","sourceRoot":"","sources":["../../src/domain/rel-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2GZ,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"rel-types.d.ts","sourceRoot":"","sources":["../../src/domain/rel-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoCpB,6EAA6E;;IAE7E,kFAAkF;;;IAKlF;uEACmE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsE3D,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
@@ -32,8 +32,15 @@ export const REL_TYPES = {
32
32
  EMBEDS_LWC: "EMBEDS_LWC",
33
33
  EMBEDS_AURA: "EMBEDS_AURA",
34
34
  CONTAINS_COMPONENT: "CONTAINS_COMPONENT",
35
+ /** Phase 5: LWC template binding `{var.field}` resolved to a CustomField. */
36
+ LWC_BINDS_FIELD: "LWC_BINDS_FIELD",
37
+ /** Phase 5: LWC template binding whose target couldn't be resolved to a field. */
38
+ LWC_BINDS_PROPERTY: "LWC_BINDS_PROPERTY",
35
39
  // Flow
36
40
  FLOW_INVOKES_APEX: "FLOW_INVOKES_APEX",
41
+ /** Resolved by Phase 6 invocable-resolver: edge from Flow to the specific
42
+ * ApexMethod annotated @InvocableMethod on the action's class. */
43
+ FLOW_INVOKES_APEX_METHOD: "FLOW_INVOKES_APEX_METHOD",
37
44
  FLOW_INVOKES_SUBFLOW: "FLOW_INVOKES_SUBFLOW",
38
45
  FLOW_INVOKES_ACTION: "FLOW_INVOKES_ACTION",
39
46
  REFERENCES_OBJECT: "REFERENCES_OBJECT",
@@ -1 +1 @@
1
- {"version":3,"file":"rel-types.js","sourceRoot":"","sources":["../../src/domain/rel-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rel-types.js","sourceRoot":"","sources":["../../src/domain/rel-types.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import Bottleneck from "bottleneck";
2
2
  import { describe, expect, it } from "vitest";
3
- import { queryLimit, scheduleQuery } from "../rate-limit.js";
3
+ import { queryLimit, readMetadataBatchAdaptive, scheduleQuery } from "../rate-limit.js";
4
4
  describe("rate-limit", () => {
5
5
  it("retries once on REQUEST_LIMIT_EXCEEDED and ultimately resolves", async () => {
6
6
  let calls = 0;
@@ -29,5 +29,50 @@ describe("rate-limit", () => {
29
29
  const r = await scheduleQuery(async () => 7);
30
30
  expect(r).toBe(7);
31
31
  });
32
+ it("readMetadataBatchAdaptive bisects on timeout and resolves singletons", async () => {
33
+ const items = [
34
+ { fullName: "a" },
35
+ { fullName: "b" },
36
+ { fullName: "c" },
37
+ { fullName: "d" },
38
+ ];
39
+ const POISON = "c";
40
+ const conn = {
41
+ metadata: {
42
+ read: async (_type, names) => {
43
+ if (names.includes(POISON) && names.length > 1) {
44
+ // Simulate Salesforce timing out the multi-item read whenever the
45
+ // poison record is in the batch.
46
+ await new Promise((r) => setTimeout(r, 5));
47
+ throw new Error("metadata.read CustomObject: timeout (5ms)");
48
+ }
49
+ if (names.length === 1 && names[0] === POISON) {
50
+ throw new Error("metadata.read CustomObject: timeout (single)");
51
+ }
52
+ // Return one record per name in the same order.
53
+ return names.map((n) => ({ fullName: n }));
54
+ },
55
+ },
56
+ };
57
+ const result = await readMetadataBatchAdaptive(conn, "CustomObject", items);
58
+ expect(result).toHaveLength(4);
59
+ // a, b, d survive — c is dropped after recursive bisect.
60
+ expect(result[0]?.fullName).toBe("a");
61
+ expect(result[1]?.fullName).toBe("b");
62
+ expect(result[2]).toBeNull();
63
+ expect(result[3]?.fullName).toBe("d");
64
+ });
65
+ it("readMetadataBatchAdaptive returns nulls when every slice times out", async () => {
66
+ const items = [{ fullName: "a" }, { fullName: "b" }];
67
+ const conn = {
68
+ metadata: {
69
+ read: async () => {
70
+ throw new Error("metadata.read CustomObject: timeout (everything)");
71
+ },
72
+ },
73
+ };
74
+ const result = await readMetadataBatchAdaptive(conn, "CustomObject", items);
75
+ expect(result).toEqual([null, null]);
76
+ });
32
77
  });
33
78
  //# sourceMappingURL=rate-limit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.test.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/__tests__/rate-limit.test.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,wFAAwF;QACxF,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAQ,EAAE,IAAI,EAAE,EAAE;YAClC,IAAI,GAAG,EAAE,SAAS,KAAK,wBAAwB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,EAAE,CACf,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;YAChB,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC,CAAC,SAAS,GAAG,wBAAwB,CAAC;gBACvC,MAAM,CAAC,CAAC;YACV,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACL,MAAM,GAAG,GAAG,MAAM,GAAG,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"rate-limit.test.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/__tests__/rate-limit.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/extractors/live-org/capabilities.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,iGAY/B,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,2DAA2D;IAC3D,aAAa,EAAE,OAAO,CAAC;IACvB,kFAAkF;IAClF,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CACzB;AA4BD,4FAA4F;AAC5F,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,CAqC3E"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/extractors/live-org/capabilities.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,iGAY/B,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,2DAA2D;IAC3D,aAAa,EAAE,OAAO,CAAC;IACvB,kFAAkF;IAClF,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CACzB;AA0DD,4FAA4F;AAC5F,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,CAqC3E"}
@@ -11,9 +11,27 @@ export const VLOCITY_NAMESPACE_CANDIDATES = [
11
11
  // OmniStudio-managed orgs without writing a parallel extractor.
12
12
  "omnistudio",
13
13
  ];
14
+ // All capability probes use a SHORT 15s timeout — they're tiny single-row
15
+ // queries against well-known SObjects, and probeCapabilities is the very
16
+ // first thing every ingest does. If the connection's dead at this stage,
17
+ // we want to surface that within seconds, not hang the whole startup
18
+ // hoping for a response that's never coming.
19
+ const CAPS_PROBE_TIMEOUT_MS = 15_000;
20
+ async function withCapsTimeout(p, label) {
21
+ return new Promise((resolve, reject) => {
22
+ const t = setTimeout(() => reject(new Error(`capabilities probe ${label} timeout (${CAPS_PROBE_TIMEOUT_MS}ms)`)), CAPS_PROBE_TIMEOUT_MS);
23
+ p.then((v) => {
24
+ clearTimeout(t);
25
+ resolve(v);
26
+ }, (e) => {
27
+ clearTimeout(t);
28
+ reject(e);
29
+ });
30
+ });
31
+ }
14
32
  async function safeQuery(conn, soql) {
15
33
  try {
16
- return (await conn.query(soql));
34
+ return (await withCapsTimeout(conn.query(soql), `query ${soql.slice(0, 40)}`));
17
35
  }
18
36
  catch {
19
37
  return null;
@@ -21,7 +39,7 @@ async function safeQuery(conn, soql) {
21
39
  }
22
40
  async function safeToolingQuery(conn, soql) {
23
41
  try {
24
- return (await conn.tooling.query(soql));
42
+ return (await withCapsTimeout(conn.tooling.query(soql), `tooling ${soql.slice(0, 40)}`));
25
43
  }
26
44
  catch {
27
45
  return null;
@@ -30,7 +48,7 @@ async function safeToolingQuery(conn, soql) {
30
48
  async function describeExists(conn, name, useTooling = false) {
31
49
  try {
32
50
  const root = useTooling ? conn.tooling : conn;
33
- await root.sobject(name).describe();
51
+ await withCapsTimeout(root.sobject(name).describe(), `describe ${name}`);
34
52
  return true;
35
53
  }
36
54
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/extractors/live-org/capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,aAAa;IACb,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,sEAAsE;IACtE,uEAAuE;IACvE,oEAAoE;IACpE,0DAA0D;IAC1D,gEAAgE;IAChE,YAAY;CACJ,CAAC;AAkBX,KAAK,UAAU,SAAS,CAAC,IAAS,EAAE,IAAY;IAC9C,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAA4B,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAS,EAAE,IAAY;IACrD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAA4B,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAS,EAAE,IAAY,EAAE,UAAU,GAAG,KAAK;IACvE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAS;IAC/C,wBAAwB;IACxB,MAAM,SAAS,CAAC,IAAI,EAAE,kEAAkE,CAAC,CAAC;IAE1F,2CAA2C;IAC3C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,4CAA4C,CAAC,CAAC;IACxF,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAA8C,EAAE,CAAC;YACpE,IAAI,CAAC,CAAC,eAAe;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CACrF,CAAC;IACF,MAAM,iBAAiB,GAAa,4BAA4B,CAAC,MAAM,CACrE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAC7B,CAAC;IAEF,MAAM,CAAC,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxF,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC;QACnC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC;QAC1C,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;QAC/B,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC;KAC3C,CAAC,CAAC;IAEH,OAAO;QACL,kBAAkB,EAAE,UAAU;QAC9B,iBAAiB;QACjB,aAAa,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAC3C,UAAU,EAAE,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC;QACrD,gBAAgB;QAChB,UAAU;QACV,eAAe;QACf,cAAc;KACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/extractors/live-org/capabilities.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/extractors/live-org/discovery.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,GAAG,EACT,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/extractors/live-org/discovery.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,GAAG,EACT,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,EAAE,CAAC,CAmB1B"}
@@ -1,12 +1,10 @@
1
- import { scheduleMetadata } from "./rate-limit.js";
1
+ import { METADATA_DESCRIBE_TIMEOUT_MS, scheduleMetadata, withTimeout } from "./rate-limit.js";
2
2
  /**
3
3
  * Call `conn.metadata.describe(apiVersion)` and normalize the result into a
4
4
  * stable `DescribedType[]`. Entries with empty xmlName are filtered out.
5
5
  */
6
6
  export async function discoverMetadataTypes(conn, apiVersion) {
7
- const result = await scheduleMetadata(async () => {
8
- return await conn.metadata.describe(apiVersion);
9
- });
7
+ const result = (await scheduleMetadata(() => withTimeout(conn.metadata.describe(apiVersion), METADATA_DESCRIBE_TIMEOUT_MS, "metadata.describe")));
10
8
  const arr = Array.isArray(result?.metadataObjects) ? result.metadataObjects : [];
11
9
  return arr
12
10
  .map((o) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/extractors/live-org/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAWnD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAS,EACT,UAAmB;IAEnB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,KAAK,IAAI,EAAE;QAC/C,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAU,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,OAAO,GAAG;SACP,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,EAAE,MAAM;QACjB,aAAa,EAAE,CAAC,EAAE,aAAa;QAC/B,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACjF,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;KAC/B,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/extractors/live-org/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAW9F;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAS,EACT,UAAmB;IAEnB,MAAM,MAAM,GAAG,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAC1C,WAAW,CACT,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAClC,4BAA4B,EAC5B,mBAAmB,CACpB,CACF,CAAuD,CAAC;IACzD,MAAM,GAAG,GAAU,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,OAAO,GAAG;SACP,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,EAAE,MAAM;QACjB,aAAa,EAAE,CAAC,EAAE,aAAa;QAC/B,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACjF,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;KAC/B,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"apex.d.ts","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/apex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AA2CrE,wBAAuB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CA6DnE;AAED,4EAA4E;AAC5E,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAyBhF"}
1
+ {"version":3,"file":"apex.d.ts","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/apex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AA2CrE,wBAAuB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAiEnE;AAED,4EAA4E;AAC5E,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA2BhF"}
@@ -1,5 +1,5 @@
1
1
  import { METADATA_CATEGORY } from "../../../domain/index.js";
2
- import { scheduleQuery } from "../rate-limit.js";
2
+ import { scheduleQuery, soqlWithTimeout } from "../rate-limit.js";
3
3
  const APEX_CLASS_SOQL = "SELECT Id, Name, Body, NamespacePrefix, LastModifiedDate, ApiVersion, Status FROM ApexClass";
4
4
  const APEX_TRIGGER_SOQL = "SELECT Id, Name, Body, NamespacePrefix, LastModifiedDate, ApiVersion, Status, TableEnumOrId FROM ApexTrigger";
5
5
  /**
@@ -27,8 +27,8 @@ export async function* iterApex(conn) {
27
27
  // doesn't poison the other's promise into an unhandled rejection (which
28
28
  // crashes node 24+).
29
29
  const [classesS, triggersS] = await Promise.allSettled([
30
- scheduleQuery(() => conn.tooling.query(APEX_CLASS_SOQL)),
31
- scheduleQuery(() => conn.tooling.query(APEX_TRIGGER_SOQL)),
30
+ scheduleQuery(() => soqlWithTimeout(conn.tooling.query(APEX_CLASS_SOQL), "tooling ApexClass")),
31
+ scheduleQuery(() => soqlWithTimeout(conn.tooling.query(APEX_TRIGGER_SOQL), "tooling ApexTrigger")),
32
32
  ]);
33
33
  const classes = classesS.status === "fulfilled" ? classesS.value : null;
34
34
  const triggers = triggersS.status === "fulfilled" ? triggersS.value : null;
@@ -83,7 +83,7 @@ export async function* iterApex(conn) {
83
83
  export async function iterOne(conn, name) {
84
84
  const escaped = name.replace(/'/g, "\\'");
85
85
  const tryQuery = async (soql, type) => {
86
- const res = (await scheduleQuery(() => conn.tooling.query(soql)));
86
+ const res = (await scheduleQuery(() => soqlWithTimeout(conn.tooling.query(soql), `tooling ${type} ${name}`)));
87
87
  const r = res?.records?.[0];
88
88
  if (!r)
89
89
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"apex.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/apex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apex.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/apex.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generic-sobject.d.ts","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/generic-sobject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAGrE;;;GAGG;AACH,wBAAuB,kBAAkB,CACvC,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,EAAuC,GACpD,aAAa,CAAC,SAAS,CAAC,CAsB1B"}
1
+ {"version":3,"file":"generic-sobject.d.ts","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/generic-sobject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAGrE;;;GAGG;AACH,wBAAuB,kBAAkB,CACvC,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,EAAuC,GACpD,aAAa,CAAC,SAAS,CAAC,CAwB1B"}
@@ -1,5 +1,5 @@
1
1
  import { METADATA_CATEGORY } from "../../../domain/index.js";
2
- import { scheduleData } from "../rate-limit.js";
2
+ import { scheduleData, soqlWithTimeout } from "../rate-limit.js";
3
3
  /**
4
4
  * Generic SOQL iterator for SObject-backed types (CMDT records, etc.).
5
5
  * Errors are silent — caller may have routed an SObject that doesn't exist.
@@ -8,7 +8,7 @@ export async function* iterGenericSObject(conn, orgId, sobject, fields = ["Id",
8
8
  const soql = `SELECT ${fields.join(", ")} FROM ${sobject}`;
9
9
  let result = null;
10
10
  try {
11
- result = (await scheduleData(() => conn.query(soql)));
11
+ result = (await scheduleData(() => soqlWithTimeout(conn.query(soql), `data ${sobject}`)));
12
12
  }
13
13
  catch {
14
14
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"generic-sobject.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/generic-sobject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,kBAAkB,CACvC,IAAS,EACT,KAAa,EACb,OAAe,EACf,SAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,CAAC;IAErD,MAAM,IAAI,GAAG,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC;IAC3D,IAAI,MAAM,GAA+B,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAA+B,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAU,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM;YACJ,GAAG,EAAE;gBACH,QAAQ,EAAE,iBAAiB,CAAC,MAAM;gBAClC,UAAU,EAAE,OAAO;gBACnB,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI;gBACvE,SAAS,EAAE,QAAQ,KAAK,IAAI,OAAO,IAAI,IAAI,EAAE;aAC9C;YACD,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"generic-sobject.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/generic-sobject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjE;;;GAGG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,kBAAkB,CACvC,IAAS,EACT,KAAa,EACb,OAAe,EACf,SAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,CAAC;IAErD,MAAM,IAAI,GAAG,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC;IAC3D,IAAI,MAAM,GAA+B,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,CAChC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,OAAO,EAAE,CAAC,CACrD,CAA+B,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAU,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM;YACJ,GAAG,EAAE;gBACH,QAAQ,EAAE,iBAAiB,CAAC,MAAM;gBAClC,UAAU,EAAE,OAAO;gBACnB,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI;gBACvE,SAAS,EAAE,QAAQ,KAAK,IAAI,OAAO,IAAI,IAAI,EAAE;aAC9C;YACD,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"lwc.d.ts","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/lwc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAerE,wBAAuB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAsHlE"}
1
+ {"version":3,"file":"lwc.d.ts","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/lwc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAerE,wBAAuB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CA4HlE"}
@@ -1,8 +1,8 @@
1
1
  import { METADATA_CATEGORY } from "../../../domain/index.js";
2
- import { scheduleQuery } from "../rate-limit.js";
2
+ import { scheduleQuery, soqlWithTimeout } from "../rate-limit.js";
3
3
  export async function* iterLwc(conn) {
4
4
  const debug = process.env.SFGRAPH_DEBUG_INGEST === "1";
5
- const bundles = (await scheduleQuery(() => conn.tooling.query("SELECT Id, DeveloperName, NamespacePrefix, LastModifiedDate FROM LightningComponentBundle")));
5
+ const bundles = (await scheduleQuery(() => soqlWithTimeout(conn.tooling.query("SELECT Id, DeveloperName, NamespacePrefix, LastModifiedDate FROM LightningComponentBundle"), "tooling LightningComponentBundle list")));
6
6
  const allBundles = bundles?.records ?? [];
7
7
  if (debug) {
8
8
  const managedCount = allBundles.filter((b) => b.NamespacePrefix).length;
@@ -62,7 +62,7 @@ export async function* iterLwc(conn) {
62
62
  let files = {};
63
63
  try {
64
64
  const escapedId = b.Id.replace(/'/g, "\\'");
65
- const resources = (await scheduleQuery(() => conn.tooling.query(`SELECT FilePath, Source FROM LightningComponentResource WHERE LightningComponentBundleId = '${escapedId}'`)));
65
+ const resources = (await scheduleQuery(() => soqlWithTimeout(conn.tooling.query(`SELECT FilePath, Source FROM LightningComponentResource WHERE LightningComponentBundleId = '${escapedId}'`), `tooling LightningComponentResource ${b.DeveloperName}`)));
66
66
  let totalSourceBytes = 0;
67
67
  for (const r of resources?.records ?? []) {
68
68
  const src = r.Source ?? "";