@acquis-consulting/asm 1.0.11 → 1.0.13
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/tools/executeAnonymous.js +76 -7
- package/dist/tools/executeAnonymous.js.map +1 -1
- package/dist/tools/metadataRead.js +13 -2
- package/dist/tools/metadataRead.js.map +1 -1
- package/dist/tools/objectSchema.d.ts +7 -0
- package/dist/tools/objectSchema.js +40 -3
- package/dist/tools/objectSchema.js.map +1 -1
- package/dist/tools/readApexClasses.js +4 -1
- package/dist/tools/readApexClasses.js.map +1 -1
- package/dist/tools/readApexTriggers.js +4 -1
- package/dist/tools/readApexTriggers.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/orgGuard.js +4 -2
- package/dist/utils/orgGuard.js.map +1 -1
- package/dist/utils/relatedComponents.d.ts +25 -0
- package/dist/utils/relatedComponents.js +372 -0
- package/dist/utils/relatedComponents.js.map +1 -0
- package/package.json +1 -1
|
@@ -19,9 +19,66 @@ export const executeAnonymousTool = {
|
|
|
19
19
|
required: ['apexCode'],
|
|
20
20
|
},
|
|
21
21
|
};
|
|
22
|
+
async function findMostRecentExecuteAnonymousLogId(conn, userId) {
|
|
23
|
+
const logResult = await conn.tooling.query(`SELECT Id FROM ApexLog WHERE LogUserId = '${userId}' AND Operation LIKE '%executeAnonymous%' ORDER BY StartTime DESC LIMIT 1`);
|
|
24
|
+
if (logResult.records && logResult.records.length > 0) {
|
|
25
|
+
return logResult.records[0].Id;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
async function findNewLog(conn, userId, previousLogId) {
|
|
30
|
+
const attempts = 6;
|
|
31
|
+
for (let i = 0; i < attempts; i++) {
|
|
32
|
+
const logId = await findMostRecentExecuteAnonymousLogId(conn, userId);
|
|
33
|
+
if (logId && logId !== previousLogId) {
|
|
34
|
+
return logId;
|
|
35
|
+
}
|
|
36
|
+
if (i < attempts - 1) {
|
|
37
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
22
42
|
export async function handleExecuteAnonymous(conn, args) {
|
|
23
|
-
const { apexCode } = args;
|
|
43
|
+
const { apexCode, logLevel = 'DEBUG' } = args;
|
|
44
|
+
let createdTraceFlagId;
|
|
24
45
|
try {
|
|
46
|
+
const identity = await conn.identity();
|
|
47
|
+
const userId = identity.user_id;
|
|
48
|
+
// Ensure an active trace flag exists so this execution actually produces an ApexLog
|
|
49
|
+
const now = new Date();
|
|
50
|
+
const existingTf = await conn.tooling.query(`SELECT Id FROM TraceFlag WHERE TracedEntityId = '${userId}' AND ExpirationDate > ${now.toISOString()} AND LogType = 'USER_DEBUG'`);
|
|
51
|
+
if (!existingTf.records || existingTf.records.length === 0) {
|
|
52
|
+
const devName = `MCP_Debug_${Date.now()}`;
|
|
53
|
+
const debugLevelResult = await conn.tooling.sobject('DebugLevel').create({
|
|
54
|
+
DeveloperName: devName,
|
|
55
|
+
MasterLabel: devName,
|
|
56
|
+
ApexCode: logLevel,
|
|
57
|
+
ApexProfiling: logLevel,
|
|
58
|
+
Callout: logLevel,
|
|
59
|
+
Database: logLevel,
|
|
60
|
+
System: logLevel,
|
|
61
|
+
Validation: logLevel,
|
|
62
|
+
Visualforce: logLevel,
|
|
63
|
+
Workflow: logLevel,
|
|
64
|
+
});
|
|
65
|
+
if (!debugLevelResult.success) {
|
|
66
|
+
return toolResponse(`Failed to create debug level: ${JSON.stringify(debugLevelResult.errors)}`, true);
|
|
67
|
+
}
|
|
68
|
+
const expiry = new Date(now.getTime() + 15 * 60000);
|
|
69
|
+
const tfResult = await conn.tooling.sobject('TraceFlag').create({
|
|
70
|
+
TracedEntityId: userId,
|
|
71
|
+
DebugLevelId: debugLevelResult.id,
|
|
72
|
+
LogType: 'USER_DEBUG',
|
|
73
|
+
StartDate: now.toISOString(),
|
|
74
|
+
ExpirationDate: expiry.toISOString(),
|
|
75
|
+
});
|
|
76
|
+
if (!tfResult.success) {
|
|
77
|
+
return toolResponse(`Failed to create trace flag: ${JSON.stringify(tfResult.errors)}`, true);
|
|
78
|
+
}
|
|
79
|
+
createdTraceFlagId = tfResult.id;
|
|
80
|
+
}
|
|
81
|
+
const previousLogId = await findMostRecentExecuteAnonymousLogId(conn, userId);
|
|
25
82
|
const result = await conn.tooling.executeAnonymous(apexCode);
|
|
26
83
|
const lines = [];
|
|
27
84
|
if (!result.compiled) {
|
|
@@ -39,11 +96,10 @@ export async function handleExecuteAnonymous(conn, args) {
|
|
|
39
96
|
return toolResponse(lines.join('\n'), true);
|
|
40
97
|
}
|
|
41
98
|
lines.push('## Execution: Success\n');
|
|
42
|
-
//
|
|
99
|
+
// Fetch debug log for this execution
|
|
43
100
|
try {
|
|
44
|
-
const
|
|
45
|
-
if (
|
|
46
|
-
const logId = logResult.records[0].Id;
|
|
101
|
+
const logId = await findNewLog(conn, userId, previousLogId);
|
|
102
|
+
if (logId) {
|
|
47
103
|
const logBody = await conn.request({
|
|
48
104
|
method: 'GET',
|
|
49
105
|
url: `/services/data/v58.0/tooling/sobjects/ApexLog/${logId}/Body`,
|
|
@@ -54,15 +110,28 @@ export async function handleExecuteAnonymous(conn, args) {
|
|
|
54
110
|
lines.push('```\n' + compressApexLog(raw) + '\n```');
|
|
55
111
|
}
|
|
56
112
|
}
|
|
113
|
+
else {
|
|
114
|
+
lines.push('\n(Debug log not available: no ApexLog record appeared for this execution)');
|
|
115
|
+
}
|
|
57
116
|
}
|
|
58
|
-
catch {
|
|
59
|
-
lines.push(
|
|
117
|
+
catch (logError) {
|
|
118
|
+
lines.push(`\n(Debug log not available: ${logError.message})`);
|
|
60
119
|
}
|
|
61
120
|
return toolResponse(lines.join('\n'));
|
|
62
121
|
}
|
|
63
122
|
catch (error) {
|
|
64
123
|
return toolResponse(`Execute anonymous failed: ${error.message}`, true);
|
|
65
124
|
}
|
|
125
|
+
finally {
|
|
126
|
+
if (createdTraceFlagId) {
|
|
127
|
+
try {
|
|
128
|
+
await conn.tooling.sobject('TraceFlag').destroy(createdTraceFlagId);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// best-effort cleanup
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
66
135
|
}
|
|
67
136
|
export const executeAnonymousSchema = {
|
|
68
137
|
apexCode: z.string().describe('The Apex code to execute.'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeAnonymous.js","sourceRoot":"","sources":["../../src/tools/executeAnonymous.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EAAE,gJAAgJ;IAC7J,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2BAA2B;aACzC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;gBAC3E,WAAW,EAAE,kCAAkC;aAChD;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;CACF,CAAC;AAOF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAgB,EAAE,IAA0B;IACvF,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"executeAnonymous.js","sourceRoot":"","sources":["../../src/tools/executeAnonymous.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EAAE,gJAAgJ;IAC7J,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2BAA2B;aACzC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;gBAC3E,WAAW,EAAE,kCAAkC;aAChD;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;CACF,CAAC;AAOF,KAAK,UAAU,mCAAmC,CAAC,IAAgB,EAAE,MAAc;IACjF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CACxC,6CAA6C,MAAM,2EAA2E,CAC/H,CAAC;IACF,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAgB,EAAE,MAAc,EAAE,aAA4B;IACtF,MAAM,QAAQ,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,mCAAmC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,KAAK,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAgB,EAAE,IAA0B;IACvF,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IAE9C,IAAI,kBAAsC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAO,IAAY,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;QAEhC,oFAAoF;QACpF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CACzC,oDAAoD,MAAM,0BAA0B,GAAG,CAAC,WAAW,EAAE,6BAA6B,CACnI,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC1C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;gBACvE,aAAa,EAAE,OAAO;gBACtB,WAAW,EAAE,OAAO;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,QAAQ;gBACvB,OAAO,EAAE,QAAQ;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,QAAQ;gBACpB,WAAW,EAAE,QAAQ;gBACrB,QAAQ,EAAE,QAAQ;aACnB,CAAQ,CAAC;YAEV,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC9B,OAAO,YAAY,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxG,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;gBAC9D,cAAc,EAAE,MAAM;gBACtB,YAAY,EAAE,gBAAgB,CAAC,EAAE;gBACjC,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;gBAC5B,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE;aACrC,CAAQ,CAAC;YAEV,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,YAAY,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC/F,CAAC;YAED,kBAAkB,GAAG,QAAQ,CAAC,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,mCAAmC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACrF,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEtC,qCAAqC;QACrC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAE5D,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;oBACjC,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,iDAAiD,KAAK,OAAO;iBACnE,CAAC,CAAC;gBAEH,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBAC5E,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAAC,OAAO,QAAa,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,+BAA+B,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;YAAS,CAAC;QACT,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACtE,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC1D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,QAAQ,EAAE;CAChJ,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EAAE,oBAAoB,CAAC,WAAW;IAC7C,MAAM,EAAE,sBAAsB;IAC9B,OAAO,EAAE,sBAAsB;CAChC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod/v4';
|
|
2
|
-
import { toolResponse } from '../utils/index.js';
|
|
2
|
+
import { toolResponse, resolveComponentId, fetchRelatedComponents, fetchDescriptions, formatRelatedComponentsSection } from '../utils/index.js';
|
|
3
3
|
export const metadataReadTool = {
|
|
4
4
|
name: 'salesforce_read_metadata',
|
|
5
5
|
description: 'Read full metadata for specific components by their full API names. Essential for deep org analysis — retrieve complete definitions including formulas, logic, field mappings, and configurations. Automatically batches large requests to handle orgs with hundreds of components.',
|
|
@@ -33,7 +33,18 @@ export async function handleMetadataRead(conn, args) {
|
|
|
33
33
|
if (allResults.length === 0) {
|
|
34
34
|
return toolResponse(`No metadata found for type ${metadataType} with the given names.`);
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
let text = `${allResults.length} component(s) read for type ${metadataType}:\n\n${JSON.stringify(allResults, null, 2)}`;
|
|
37
|
+
if (fullNames.length === 1) {
|
|
38
|
+
const componentId = await resolveComponentId(conn, metadataType, fullNames[0]);
|
|
39
|
+
if (componentId) {
|
|
40
|
+
const { parents, children } = await fetchRelatedComponents(conn, componentId);
|
|
41
|
+
const all = await fetchDescriptions(conn, [...parents, ...children]);
|
|
42
|
+
const enrichedParents = all.slice(0, parents.length);
|
|
43
|
+
const enrichedChildren = all.slice(parents.length);
|
|
44
|
+
text += formatRelatedComponentsSection(enrichedParents, enrichedChildren);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return toolResponse(text);
|
|
37
48
|
}
|
|
38
49
|
catch (error) {
|
|
39
50
|
return toolResponse(`Metadata read failed: ${error.message}`, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadataRead.js","sourceRoot":"","sources":["../../src/tools/metadataRead.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"metadataRead.js","sourceRoot":"","sources":["../../src/tools/metadataRead.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,12 +10,17 @@ export declare const objectSchemaTool: {
|
|
|
10
10
|
type: string;
|
|
11
11
|
description: string;
|
|
12
12
|
};
|
|
13
|
+
includeRelatedComponents: {
|
|
14
|
+
type: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
13
17
|
};
|
|
14
18
|
required: string[];
|
|
15
19
|
};
|
|
16
20
|
};
|
|
17
21
|
export interface ObjectSchemaArgs {
|
|
18
22
|
objectName: string;
|
|
23
|
+
includeRelatedComponents?: boolean;
|
|
19
24
|
}
|
|
20
25
|
export declare function handleObjectSchema(conn: Connection, args: ObjectSchemaArgs): Promise<{
|
|
21
26
|
content: {
|
|
@@ -26,12 +31,14 @@ export declare function handleObjectSchema(conn: Connection, args: ObjectSchemaA
|
|
|
26
31
|
}>;
|
|
27
32
|
export declare const objectSchemaSchema: {
|
|
28
33
|
objectName: z.ZodString;
|
|
34
|
+
includeRelatedComponents: z.ZodOptional<z.ZodBoolean>;
|
|
29
35
|
};
|
|
30
36
|
export declare const objectSchemaDescriptor: {
|
|
31
37
|
name: string;
|
|
32
38
|
description: string;
|
|
33
39
|
schema: {
|
|
34
40
|
objectName: z.ZodString;
|
|
41
|
+
includeRelatedComponents: z.ZodOptional<z.ZodBoolean>;
|
|
35
42
|
};
|
|
36
43
|
handler: typeof handleObjectSchema;
|
|
37
44
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod/v4';
|
|
2
|
-
import { toolResponse } from '../utils/index.js';
|
|
2
|
+
import { toolResponse, resolveObjectComponentId, fetchRelatedComponents, fetchValidationRulesForObject, fetchWorkflowRulesForObject, fetchApprovalProcessesForObject, fetchDuplicateRulesForObject, fetchAssignmentRulesForObject, fetchAutoResponseRulesForObject, fetchEscalationRulesForObject, fetchDescriptions, formatObjectDependentsSection, } from '../utils/index.js';
|
|
3
3
|
export const objectSchemaTool = {
|
|
4
4
|
name: 'salesforce_describe_object',
|
|
5
|
-
description: 'Get the complete field-level schema of a Salesforce object including all fields, their types, relationships, and picklist values. Use salesforce_search_objects first to find the correct API name.',
|
|
5
|
+
description: 'Get the complete field-level schema of a Salesforce object including all fields, their types, relationships, and picklist values. Also shows related metadata (Apex Triggers, Flows, Validation Rules, Workflow Rules, Approval Processes, Duplicate Rules, Assignment/Auto-Response/Escalation Rules, and anything else) that references this object — set includeRelatedComponents to false to skip. Use salesforce_search_objects first to find the correct API name.',
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: 'object',
|
|
8
8
|
properties: {
|
|
@@ -10,12 +10,16 @@ export const objectSchemaTool = {
|
|
|
10
10
|
type: 'string',
|
|
11
11
|
description: 'The Salesforce object API name (e.g., "Account", "Contact", "MyObject__c").',
|
|
12
12
|
},
|
|
13
|
+
includeRelatedComponents: {
|
|
14
|
+
type: 'boolean',
|
|
15
|
+
description: 'Whether to include a section listing metadata components (Apex Triggers, Flows, Validation Rules, Workflow Rules, Approval Processes, Duplicate Rules, Assignment/Auto-Response/Escalation Rules, Apex Classes, etc.) that reference this object. Defaults to true.',
|
|
16
|
+
},
|
|
13
17
|
},
|
|
14
18
|
required: ['objectName'],
|
|
15
19
|
},
|
|
16
20
|
};
|
|
17
21
|
export async function handleObjectSchema(conn, args) {
|
|
18
|
-
const { objectName } = args;
|
|
22
|
+
const { objectName, includeRelatedComponents } = args;
|
|
19
23
|
const desc = await conn.describe(objectName);
|
|
20
24
|
const lines = [];
|
|
21
25
|
lines.push(`## ${desc.label} (${desc.name}) — ${desc.custom ? 'Custom' : 'Standard'} Object\n`);
|
|
@@ -52,10 +56,43 @@ export async function handleObjectSchema(conn, args) {
|
|
|
52
56
|
}
|
|
53
57
|
}
|
|
54
58
|
}
|
|
59
|
+
if (includeRelatedComponents !== false) {
|
|
60
|
+
try {
|
|
61
|
+
const componentId = await resolveObjectComponentId(conn, desc.name);
|
|
62
|
+
const children = componentId ? (await fetchRelatedComponents(conn, componentId)).children : [];
|
|
63
|
+
const supplements = await Promise.all([
|
|
64
|
+
fetchValidationRulesForObject(conn, desc.name),
|
|
65
|
+
fetchWorkflowRulesForObject(conn, desc.name),
|
|
66
|
+
fetchApprovalProcessesForObject(conn, desc.name),
|
|
67
|
+
fetchDuplicateRulesForObject(conn, desc.name),
|
|
68
|
+
fetchAssignmentRulesForObject(conn, desc.name),
|
|
69
|
+
fetchAutoResponseRulesForObject(conn, desc.name),
|
|
70
|
+
fetchEscalationRulesForObject(conn, desc.name),
|
|
71
|
+
]);
|
|
72
|
+
const seenIds = new Set(children.map((c) => c.id));
|
|
73
|
+
const merged = [...children];
|
|
74
|
+
for (const extra of supplements.flat()) {
|
|
75
|
+
if (!seenIds.has(extra.id)) {
|
|
76
|
+
seenIds.add(extra.id);
|
|
77
|
+
merged.push(extra);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (merged.length > 0) {
|
|
81
|
+
const described = await fetchDescriptions(conn, merged);
|
|
82
|
+
const section = formatObjectDependentsSection(described);
|
|
83
|
+
if (section)
|
|
84
|
+
lines.push(section);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error(`[objectSchema] related components lookup failed for ${objectName}: ${err.message}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
55
91
|
return toolResponse(lines.join('\n'));
|
|
56
92
|
}
|
|
57
93
|
export const objectSchemaSchema = {
|
|
58
94
|
objectName: z.string().describe('The Salesforce object API name (e.g., "Account", "Contact", "MyObject__c").'),
|
|
95
|
+
includeRelatedComponents: z.boolean().optional().describe('Whether to include a section listing metadata components (Apex Triggers, Flows, Validation Rules, Workflow Rules, Approval Processes, Duplicate Rules, Assignment/Auto-Response/Escalation Rules, Apex Classes, etc.) that reference this object. Defaults to true.'),
|
|
59
96
|
};
|
|
60
97
|
export const objectSchemaDescriptor = {
|
|
61
98
|
name: 'salesforce_describe_object',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectSchema.js","sourceRoot":"","sources":["../../src/tools/objectSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"objectSchema.js","sourceRoot":"","sources":["../../src/tools/objectSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod/v4';
|
|
2
|
-
import { toolResponse } from '../utils/index.js';
|
|
2
|
+
import { toolResponse, fetchRelatedComponents, fetchDescriptions, formatRelatedComponentsSection } from '../utils/index.js';
|
|
3
3
|
export const readApexClassesTool = {
|
|
4
4
|
name: 'salesforce_read_apex_class',
|
|
5
5
|
description: 'Read Apex class source code or list classes by name pattern. Use exact className to get full source code, or namePattern with wildcards (* and ?) to list matching classes.',
|
|
@@ -41,6 +41,9 @@ export async function handleReadApexClasses(conn, args) {
|
|
|
41
41
|
output += `API Version: ${cls.ApiVersion} | Length: ${cls.LengthWithoutComments} | Status: ${cls.Status} | Last Modified: ${cls.LastModifiedDate}\n\n`;
|
|
42
42
|
}
|
|
43
43
|
output += '```apex\n' + cls.Body + '\n```';
|
|
44
|
+
const { parents, children } = await fetchRelatedComponents(conn, cls.Id);
|
|
45
|
+
const all = await fetchDescriptions(conn, [...parents, ...children]);
|
|
46
|
+
output += formatRelatedComponentsSection(all.slice(0, parents.length), all.slice(parents.length));
|
|
44
47
|
return toolResponse(output);
|
|
45
48
|
}
|
|
46
49
|
// Pattern/list mode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readApexClasses.js","sourceRoot":"","sources":["../../src/tools/readApexClasses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"readApexClasses.js","sourceRoot":"","sources":["../../src/tools/readApexClasses.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod/v4';
|
|
2
|
-
import { toolResponse } from '../utils/index.js';
|
|
2
|
+
import { toolResponse, fetchRelatedComponents, fetchDescriptions, formatRelatedComponentsSection } from '../utils/index.js';
|
|
3
3
|
export const readApexTriggersTool = {
|
|
4
4
|
name: 'salesforce_read_apex_trigger',
|
|
5
5
|
description: 'Read Apex trigger source code or list triggers by name pattern. Use exact triggerName for full source, or namePattern with wildcards to list.',
|
|
@@ -41,6 +41,9 @@ export async function handleReadApexTriggers(conn, args) {
|
|
|
41
41
|
output += `API Version: ${trg.ApiVersion} | Status: ${trg.Status} | Last Modified: ${trg.LastModifiedDate}\n\n`;
|
|
42
42
|
}
|
|
43
43
|
output += '```apex\n' + trg.Body + '\n```';
|
|
44
|
+
const { parents, children } = await fetchRelatedComponents(conn, trg.Id);
|
|
45
|
+
const all = await fetchDescriptions(conn, [...parents, ...children]);
|
|
46
|
+
output += formatRelatedComponentsSection(all.slice(0, parents.length), all.slice(parents.length));
|
|
44
47
|
return toolResponse(output);
|
|
45
48
|
}
|
|
46
49
|
let whereClause = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readApexTriggers.js","sourceRoot":"","sources":["../../src/tools/readApexTriggers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"readApexTriggers.js","sourceRoot":"","sources":["../../src/tools/readApexTriggers.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { createConnection } from './connection.js';
|
|
2
2
|
export { formatMetadataErrors, toolResponse } from './errors.js';
|
|
3
3
|
export { compressApexLog } from './logCompressor.js';
|
|
4
|
+
export { resolveComponentId, resolveObjectComponentId, fetchRelatedComponents, fetchValidationRulesForObject, fetchWorkflowRulesForObject, fetchApprovalProcessesForObject, fetchDuplicateRulesForObject, fetchAssignmentRulesForObject, fetchAutoResponseRulesForObject, fetchEscalationRulesForObject, fetchDescriptions, formatRelatedComponentsSection, formatObjectDependentsSection, } from './relatedComponents.js';
|
package/dist/utils/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { createConnection } from './connection.js';
|
|
2
2
|
export { formatMetadataErrors, toolResponse } from './errors.js';
|
|
3
3
|
export { compressApexLog } from './logCompressor.js';
|
|
4
|
+
export { resolveComponentId, resolveObjectComponentId, fetchRelatedComponents, fetchValidationRulesForObject, fetchWorkflowRulesForObject, fetchApprovalProcessesForObject, fetchDuplicateRulesForObject, fetchAssignmentRulesForObject, fetchAutoResponseRulesForObject, fetchEscalationRulesForObject, fetchDescriptions, formatRelatedComponentsSection, formatObjectDependentsSection, } from './relatedComponents.js';
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,2BAA2B,EAC3B,+BAA+B,EAC/B,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,EAC/B,6BAA6B,EAC7B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC"}
|
package/dist/utils/orgGuard.js
CHANGED
|
@@ -5,8 +5,10 @@ async function isProductionOrg(conn, sessionId) {
|
|
|
5
5
|
const cached = orgTypeCache.get(sessionId);
|
|
6
6
|
if (cached !== undefined)
|
|
7
7
|
return cached;
|
|
8
|
-
const result = await conn.query('SELECT IsSandbox FROM Organization LIMIT 1');
|
|
9
|
-
const
|
|
8
|
+
const result = await conn.query('SELECT IsSandbox, OrganizationType FROM Organization LIMIT 1');
|
|
9
|
+
const record = result.records[0];
|
|
10
|
+
// Developer Edition orgs have IsSandbox=false but are not production environments
|
|
11
|
+
const isProduction = !(record?.IsSandbox ?? false) && record?.OrganizationType !== 'Developer Edition';
|
|
10
12
|
orgTypeCache.set(sessionId, isProduction);
|
|
11
13
|
return isProduction;
|
|
12
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgGuard.js","sourceRoot":"","sources":["../../src/utils/orgGuard.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,mGAAmG;AACnG,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmB,CAAC,CAAC,oBAAoB;AAErE,KAAK,UAAU,eAAe,CAAC,IAAgB,EAAE,SAAiB;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,MAAM,GAAG,MAAO,IAAY,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"orgGuard.js","sourceRoot":"","sources":["../../src/utils/orgGuard.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,mGAAmG;AACnG,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmB,CAAC,CAAC,oBAAoB;AAErE,KAAK,UAAU,eAAe,CAAC,IAAgB,EAAE,SAAiB;IAChE,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,MAAM,GAAG,MAAO,IAAY,CAAC,KAAK,CACtC,8DAA8D,CACS,CAAC;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjC,kFAAkF;IAClF,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC,IAAI,MAAM,EAAE,gBAAgB,KAAK,mBAAmB,CAAC;IACvG,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC1C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAgB,EAAE,SAA6B;IACtF,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM;QAAE,OAAO;IAE3D,MAAM,QAAQ,GAAG,SAAS,IAAI,aAAa,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,0EAA0E;YAC1E,kEAAkE,CACnE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Connection } from 'jsforce';
|
|
2
|
+
export interface RelatedComponent {
|
|
3
|
+
id: string;
|
|
4
|
+
apiName: string;
|
|
5
|
+
type: string;
|
|
6
|
+
description: string | null;
|
|
7
|
+
}
|
|
8
|
+
interface RelatedComponentsResult {
|
|
9
|
+
parents: RelatedComponent[];
|
|
10
|
+
children: RelatedComponent[];
|
|
11
|
+
}
|
|
12
|
+
export declare function resolveComponentId(conn: Connection, metadataType: string, fullName: string): Promise<string | null>;
|
|
13
|
+
export declare function resolveObjectComponentId(conn: Connection, objectApiName: string): Promise<string | null>;
|
|
14
|
+
export declare function fetchValidationRulesForObject(conn: Connection, objectApiName: string): Promise<RelatedComponent[]>;
|
|
15
|
+
export declare function fetchWorkflowRulesForObject(conn: Connection, objectApiName: string): Promise<RelatedComponent[]>;
|
|
16
|
+
export declare function fetchApprovalProcessesForObject(conn: Connection, objectApiName: string): Promise<RelatedComponent[]>;
|
|
17
|
+
export declare function fetchDuplicateRulesForObject(conn: Connection, objectApiName: string): Promise<RelatedComponent[]>;
|
|
18
|
+
export declare function fetchAssignmentRulesForObject(conn: Connection, objectApiName: string): Promise<RelatedComponent[]>;
|
|
19
|
+
export declare function fetchAutoResponseRulesForObject(conn: Connection, objectApiName: string): Promise<RelatedComponent[]>;
|
|
20
|
+
export declare function fetchEscalationRulesForObject(conn: Connection, objectApiName: string): Promise<RelatedComponent[]>;
|
|
21
|
+
export declare function fetchRelatedComponents(conn: Connection, componentId: string): Promise<RelatedComponentsResult>;
|
|
22
|
+
export declare function fetchDescriptions(conn: Connection, components: RelatedComponent[]): Promise<RelatedComponent[]>;
|
|
23
|
+
export declare function formatRelatedComponentsSection(parents: RelatedComponent[], children: RelatedComponent[]): string;
|
|
24
|
+
export declare function formatObjectDependentsSection(components: RelatedComponent[]): string;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
// Types that have a Description field queryable via Tooling API
|
|
2
|
+
const TYPES_WITH_DESCRIPTION = new Set([
|
|
3
|
+
'ValidationRule',
|
|
4
|
+
'Flow',
|
|
5
|
+
'CustomField',
|
|
6
|
+
'LightningComponentBundle',
|
|
7
|
+
'PermissionSet',
|
|
8
|
+
]);
|
|
9
|
+
// EntityDefinition.Id is a non-queryable placeholder for MetadataComponentDependency
|
|
10
|
+
// purposes — the real dependency-graph id for a custom object comes from CustomObject.Id.
|
|
11
|
+
function buildCustomObjectIdQuery(objectApiName) {
|
|
12
|
+
const developerName = objectApiName.replace(/__c$/i, '');
|
|
13
|
+
return `SELECT Id FROM CustomObject WHERE DeveloperName = '${esc(developerName)}'`;
|
|
14
|
+
}
|
|
15
|
+
// Maps metadata type to a Tooling API query that resolves the component ID.
|
|
16
|
+
// Returns null if the type is not supported.
|
|
17
|
+
function buildIdQuery(metadataType, fullName) {
|
|
18
|
+
switch (metadataType) {
|
|
19
|
+
case 'ApexClass':
|
|
20
|
+
return `SELECT Id FROM ApexClass WHERE Name = '${esc(fullName)}'`;
|
|
21
|
+
case 'ApexTrigger':
|
|
22
|
+
return `SELECT Id FROM ApexTrigger WHERE Name = '${esc(fullName)}'`;
|
|
23
|
+
case 'Flow': {
|
|
24
|
+
const devName = fullName.split('-')[0]; // strip version suffix if present
|
|
25
|
+
return `SELECT Id FROM Flow WHERE DeveloperName = '${esc(devName)}' AND Status = 'Active' LIMIT 1`;
|
|
26
|
+
}
|
|
27
|
+
case 'CustomField': {
|
|
28
|
+
const [obj, field] = splitDot(fullName);
|
|
29
|
+
if (!field)
|
|
30
|
+
return null;
|
|
31
|
+
const developerName = field.replace(/__c$/i, '');
|
|
32
|
+
return `SELECT Id FROM CustomField WHERE EntityDefinition.QualifiedApiName = '${esc(obj)}' AND DeveloperName = '${esc(developerName)}'`;
|
|
33
|
+
}
|
|
34
|
+
case 'ValidationRule': {
|
|
35
|
+
const [obj, rule] = splitDot(fullName);
|
|
36
|
+
if (!rule)
|
|
37
|
+
return null;
|
|
38
|
+
return `SELECT Id FROM ValidationRule WHERE EntityDefinition.QualifiedApiName = '${esc(obj)}' AND ValidationName = '${esc(rule)}'`;
|
|
39
|
+
}
|
|
40
|
+
case 'LightningComponentBundle':
|
|
41
|
+
return `SELECT Id FROM LightningComponentBundle WHERE DeveloperName = '${esc(fullName)}'`;
|
|
42
|
+
case 'AuraDefinitionBundle':
|
|
43
|
+
return `SELECT Id FROM AuraDefinitionBundle WHERE DeveloperName = '${esc(fullName)}'`;
|
|
44
|
+
case 'PermissionSet':
|
|
45
|
+
return `SELECT Id FROM PermissionSet WHERE Name = '${esc(fullName)}'`;
|
|
46
|
+
case 'Profile':
|
|
47
|
+
return `SELECT Id FROM Profile WHERE Name = '${esc(fullName)}'`;
|
|
48
|
+
default:
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export async function resolveComponentId(conn, metadataType, fullName) {
|
|
53
|
+
// CustomObject needs to handle both standard and custom object names (see
|
|
54
|
+
// resolveObjectComponentId), which doesn't fit the single-query-string shape
|
|
55
|
+
// buildIdQuery uses for every other type.
|
|
56
|
+
if (metadataType === 'CustomObject') {
|
|
57
|
+
return resolveObjectComponentId(conn, fullName);
|
|
58
|
+
}
|
|
59
|
+
const query = buildIdQuery(metadataType, fullName);
|
|
60
|
+
if (!query) {
|
|
61
|
+
console.error(`[relatedComponents] resolveComponentId: unsupported metadata type "${metadataType}"`);
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const result = await conn.tooling.query(query);
|
|
66
|
+
const record = result.records?.[0];
|
|
67
|
+
if (!record?.Id) {
|
|
68
|
+
console.error(`[relatedComponents] resolveComponentId: no record found for ${metadataType} "${fullName}"`);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
return record.Id;
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
console.error(`[relatedComponents] resolveComponentId failed for ${metadataType} "${fullName}": ${err.message}`);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Resolves the MetadataComponentDependency-graph component id for an SObject itself
|
|
79
|
+
// (as opposed to a field/rule/trigger that belongs to it). Standard objects are
|
|
80
|
+
// referenced by their plain API name in MetadataComponentDependency; custom objects
|
|
81
|
+
// need the CustomObject Tooling record's id.
|
|
82
|
+
export async function resolveObjectComponentId(conn, objectApiName) {
|
|
83
|
+
if (!objectApiName.endsWith('__c')) {
|
|
84
|
+
return objectApiName;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const result = await conn.tooling.query(buildCustomObjectIdQuery(objectApiName));
|
|
88
|
+
const record = result.records?.[0];
|
|
89
|
+
if (!record?.Id) {
|
|
90
|
+
console.error(`[relatedComponents] resolveObjectComponentId: no CustomObject record found for "${objectApiName}"`);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return record.Id;
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
console.error(`[relatedComponents] resolveObjectComponentId failed for "${objectApiName}": ${err.message}`);
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// MetadataComponentDependency only tracks explicit field-level references made by a
|
|
101
|
+
// validation rule's formula — it does not emit an edge for the object the rule is
|
|
102
|
+
// defined on unless the formula happens to reference that object back. Query
|
|
103
|
+
// ValidationRule directly (scoped by EntityDefinition) so rules aren't silently missed.
|
|
104
|
+
export async function fetchValidationRulesForObject(conn, objectApiName) {
|
|
105
|
+
try {
|
|
106
|
+
const result = await conn.tooling.query(`SELECT Id, ValidationName, Description FROM ValidationRule WHERE EntityDefinition.QualifiedApiName = '${esc(objectApiName)}' AND Active = true`);
|
|
107
|
+
return (result.records || []).map((r) => ({
|
|
108
|
+
id: r.Id,
|
|
109
|
+
apiName: `${objectApiName}.${r.ValidationName}`,
|
|
110
|
+
type: 'ValidationRule',
|
|
111
|
+
description: r.Description ?? null,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
console.error(`[relatedComponents] fetchValidationRulesForObject failed for "${objectApiName}": ${err.message}`);
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Same MetadataComponentDependency blind spot as validation rules — classic Workflow
|
|
120
|
+
// Rules are defined per-object without necessarily being tracked as depending on it.
|
|
121
|
+
// TableEnumOrId holds the plain object API name for both standard and custom objects.
|
|
122
|
+
export async function fetchWorkflowRulesForObject(conn, objectApiName) {
|
|
123
|
+
try {
|
|
124
|
+
const result = await conn.tooling.query(`SELECT Id, Name FROM WorkflowRule WHERE TableEnumOrId = '${esc(objectApiName)}'`);
|
|
125
|
+
return (result.records || []).map((r) => ({
|
|
126
|
+
id: r.Id,
|
|
127
|
+
apiName: `${objectApiName}.${r.Name}`,
|
|
128
|
+
type: 'WorkflowRule',
|
|
129
|
+
description: null,
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
console.error(`[relatedComponents] fetchWorkflowRulesForObject failed for "${objectApiName}": ${err.message}`);
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// ApprovalProcess and DuplicateRule aren't queryable via Tooling API SOQL at all (no
|
|
138
|
+
// matching sObject) — list them via the Metadata API instead. Both use the same
|
|
139
|
+
// "Object.Name" fullName convention as ValidationRule/WorkflowRule, so a prefix filter
|
|
140
|
+
// recovers the object scope. listMetadata's FileProperties conveniently includes a real id.
|
|
141
|
+
async function fetchViaMetadataList(conn, metadataType, objectApiName) {
|
|
142
|
+
try {
|
|
143
|
+
const result = await conn.metadata.list([{ type: metadataType }]);
|
|
144
|
+
const items = Array.isArray(result) ? result : result ? [result] : [];
|
|
145
|
+
const prefix = `${objectApiName}.`;
|
|
146
|
+
return items
|
|
147
|
+
.filter((item) => typeof item.fullName === 'string' && item.fullName.startsWith(prefix))
|
|
148
|
+
.map((item) => ({
|
|
149
|
+
id: item.id,
|
|
150
|
+
apiName: item.fullName,
|
|
151
|
+
type: metadataType,
|
|
152
|
+
description: null,
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
console.error(`[relatedComponents] fetchViaMetadataList failed for ${metadataType} on "${objectApiName}": ${err.message}`);
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export async function fetchApprovalProcessesForObject(conn, objectApiName) {
|
|
161
|
+
return fetchViaMetadataList(conn, 'ApprovalProcess', objectApiName);
|
|
162
|
+
}
|
|
163
|
+
export async function fetchDuplicateRulesForObject(conn, objectApiName) {
|
|
164
|
+
return fetchViaMetadataList(conn, 'DuplicateRule', objectApiName);
|
|
165
|
+
}
|
|
166
|
+
// Assignment Rules, Auto-Response Rules, and (Case) Escalation Rules only ever apply to
|
|
167
|
+
// Lead and/or Case — Salesforce doesn't support them on any other object — and individual
|
|
168
|
+
// rules have no Salesforce ID at all; they're child entries inside one per-object metadata
|
|
169
|
+
// container (e.g. AssignmentRules for "Lead" holds an assignmentRule[] with no id field).
|
|
170
|
+
// Synthesize a stable id from the object + rule name for display/dedup purposes.
|
|
171
|
+
const CONTAINER_RULE_TYPES = {
|
|
172
|
+
AssignmentRules: { objects: ['Lead', 'Case'], childField: 'assignmentRule' },
|
|
173
|
+
AutoResponseRules: { objects: ['Lead', 'Case'], childField: 'autoResponseRule' },
|
|
174
|
+
EscalationRules: { objects: ['Case'], childField: 'escalationRule' },
|
|
175
|
+
};
|
|
176
|
+
async function fetchContainerRulesForObject(conn, metadataType, objectApiName) {
|
|
177
|
+
const config = CONTAINER_RULE_TYPES[metadataType];
|
|
178
|
+
if (!config.objects.includes(objectApiName))
|
|
179
|
+
return [];
|
|
180
|
+
try {
|
|
181
|
+
const result = await conn.metadata.read(metadataType, [objectApiName]);
|
|
182
|
+
const container = Array.isArray(result) ? result[0] : result;
|
|
183
|
+
const rules = container?.[config.childField];
|
|
184
|
+
const list = Array.isArray(rules) ? rules : rules ? [rules] : [];
|
|
185
|
+
const singularType = metadataType.slice(0, -1); // 'AssignmentRules' -> 'AssignmentRule'
|
|
186
|
+
return list
|
|
187
|
+
.filter((r) => r.active !== false)
|
|
188
|
+
.map((r) => ({
|
|
189
|
+
id: `${objectApiName}.${metadataType}.${r.fullName}`,
|
|
190
|
+
apiName: `${objectApiName}.${r.fullName}`,
|
|
191
|
+
type: singularType,
|
|
192
|
+
description: null,
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
console.error(`[relatedComponents] fetchContainerRulesForObject failed for ${metadataType} on "${objectApiName}": ${err.message}`);
|
|
197
|
+
return [];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
export async function fetchAssignmentRulesForObject(conn, objectApiName) {
|
|
201
|
+
return fetchContainerRulesForObject(conn, 'AssignmentRules', objectApiName);
|
|
202
|
+
}
|
|
203
|
+
export async function fetchAutoResponseRulesForObject(conn, objectApiName) {
|
|
204
|
+
return fetchContainerRulesForObject(conn, 'AutoResponseRules', objectApiName);
|
|
205
|
+
}
|
|
206
|
+
export async function fetchEscalationRulesForObject(conn, objectApiName) {
|
|
207
|
+
return fetchContainerRulesForObject(conn, 'EscalationRules', objectApiName);
|
|
208
|
+
}
|
|
209
|
+
export async function fetchRelatedComponents(conn, componentId) {
|
|
210
|
+
try {
|
|
211
|
+
const [parentsResult, childrenResult] = await Promise.all([
|
|
212
|
+
conn.tooling.query(`SELECT RefMetadataComponentId, RefMetadataComponentName, RefMetadataComponentType FROM MetadataComponentDependency WHERE MetadataComponentId = '${componentId}'`),
|
|
213
|
+
conn.tooling.query(`SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType FROM MetadataComponentDependency WHERE RefMetadataComponentId = '${componentId}'`),
|
|
214
|
+
]);
|
|
215
|
+
const seen = new Set();
|
|
216
|
+
const parents = [];
|
|
217
|
+
const children = [];
|
|
218
|
+
for (const r of (parentsResult.records || [])) {
|
|
219
|
+
if (!seen.has(r.RefMetadataComponentId)) {
|
|
220
|
+
seen.add(r.RefMetadataComponentId);
|
|
221
|
+
parents.push({ id: r.RefMetadataComponentId, apiName: r.RefMetadataComponentName, type: r.RefMetadataComponentType, description: null });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
for (const r of (childrenResult.records || [])) {
|
|
225
|
+
if (!seen.has(r.MetadataComponentId)) {
|
|
226
|
+
seen.add(r.MetadataComponentId);
|
|
227
|
+
children.push({ id: r.MetadataComponentId, apiName: r.MetadataComponentName, type: r.MetadataComponentType, description: null });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
parents: await filterInactiveFlowVersions(conn, parents),
|
|
232
|
+
children: await filterInactiveFlowVersions(conn, children),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
console.error(`[relatedComponents] fetchRelatedComponents failed for ${componentId}: ${err.message}`);
|
|
237
|
+
return { parents: [], children: [] };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Each save of a Flow creates a new versioned Flow component with its own Id, so
|
|
241
|
+
// MetadataComponentDependency accumulates one entry per version. Collapse those
|
|
242
|
+
// down to only the Active version so obsolete/draft versions don't show as duplicates.
|
|
243
|
+
async function filterInactiveFlowVersions(conn, components) {
|
|
244
|
+
const flowIds = components.filter((c) => c.type === 'Flow').map((c) => c.id);
|
|
245
|
+
if (flowIds.length === 0)
|
|
246
|
+
return components;
|
|
247
|
+
try {
|
|
248
|
+
const ids = flowIds.map((id) => `'${id}'`).join(',');
|
|
249
|
+
const result = await conn.tooling.query(`SELECT Id, Status FROM Flow WHERE Id IN (${ids})`);
|
|
250
|
+
const activeIds = new Set((result.records || []).filter((r) => r.Status === 'Active').map((r) => r.Id));
|
|
251
|
+
return components.filter((c) => c.type !== 'Flow' || activeIds.has(c.id));
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
console.error(`[relatedComponents] filterInactiveFlowVersions failed: ${err.message}`);
|
|
255
|
+
return components;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
export async function fetchDescriptions(conn, components) {
|
|
259
|
+
if (components.length === 0)
|
|
260
|
+
return components;
|
|
261
|
+
// Group by type, only for types that have a Description field
|
|
262
|
+
const byType = new Map();
|
|
263
|
+
for (const c of components) {
|
|
264
|
+
if (TYPES_WITH_DESCRIPTION.has(c.type)) {
|
|
265
|
+
if (!byType.has(c.type))
|
|
266
|
+
byType.set(c.type, []);
|
|
267
|
+
byType.get(c.type).push(c);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
const descriptionMap = new Map();
|
|
271
|
+
await Promise.all(Array.from(byType.entries()).map(async ([type, comps]) => {
|
|
272
|
+
try {
|
|
273
|
+
const ids = comps.map((c) => `'${c.id}'`).join(',');
|
|
274
|
+
const result = await conn.tooling.query(`SELECT Id, Description FROM ${type} WHERE Id IN (${ids})`);
|
|
275
|
+
for (const r of (result.records || [])) {
|
|
276
|
+
descriptionMap.set(r.Id, r.Description ?? null);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
console.error(`[relatedComponents] fetchDescriptions failed for type ${type}: ${err.message}`);
|
|
281
|
+
}
|
|
282
|
+
}));
|
|
283
|
+
return components.map((c) => descriptionMap.has(c.id) ? { ...c, description: descriptionMap.get(c.id) } : c);
|
|
284
|
+
}
|
|
285
|
+
export function formatRelatedComponentsSection(parents, children) {
|
|
286
|
+
if (parents.length === 0 && children.length === 0)
|
|
287
|
+
return '';
|
|
288
|
+
const lines = ['', '## Related Components'];
|
|
289
|
+
if (parents.length > 0) {
|
|
290
|
+
lines.push('', '### Parents — what this component depends on');
|
|
291
|
+
for (const c of parents) {
|
|
292
|
+
lines.push(`- **${c.apiName}** (${c.type}) [${c.id}]${c.description ? ` — ${c.description}` : ''}`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (children.length > 0) {
|
|
296
|
+
lines.push('', '### Children — what depends on this component');
|
|
297
|
+
for (const c of children) {
|
|
298
|
+
lines.push(`- **${c.apiName}** (${c.type}) [${c.id}]${c.description ? ` — ${c.description}` : ''}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return lines.join('\n');
|
|
302
|
+
}
|
|
303
|
+
const TYPE_LABELS = {
|
|
304
|
+
ApexTrigger: 'Apex Triggers',
|
|
305
|
+
Flow: 'Flows',
|
|
306
|
+
ValidationRule: 'Validation Rules',
|
|
307
|
+
ApexClass: 'Apex Classes',
|
|
308
|
+
EmailTemplate: 'Email Templates',
|
|
309
|
+
WorkflowRule: 'Workflow Rules',
|
|
310
|
+
LightningComponentBundle: 'Lightning Web Components',
|
|
311
|
+
AuraDefinitionBundle: 'Aura Components',
|
|
312
|
+
PermissionSet: 'Permission Sets',
|
|
313
|
+
Profile: 'Profiles',
|
|
314
|
+
Layout: 'Page Layouts',
|
|
315
|
+
RecordType: 'Record Types',
|
|
316
|
+
CustomField: 'Custom Fields',
|
|
317
|
+
CustomObject: 'Custom Objects',
|
|
318
|
+
ApprovalProcess: 'Approval Processes',
|
|
319
|
+
CustomTab: 'Custom Tabs',
|
|
320
|
+
QuickAction: 'Quick Actions',
|
|
321
|
+
};
|
|
322
|
+
// Types shown first, in this order, when present — everything else follows alphabetically.
|
|
323
|
+
const PRIORITY_TYPES = ['ApexTrigger', 'Flow', 'ValidationRule'];
|
|
324
|
+
function humanizeComponentType(type) {
|
|
325
|
+
if (TYPE_LABELS[type])
|
|
326
|
+
return TYPE_LABELS[type];
|
|
327
|
+
const spaced = type.replace(/([a-z0-9])([A-Z])/g, '$1 $2');
|
|
328
|
+
return spaced.endsWith('s') ? spaced : `${spaced}s`;
|
|
329
|
+
}
|
|
330
|
+
// Renders every dependent type that references a component (e.g. everything that
|
|
331
|
+
// references an SObject), grouped dynamically by MetadataComponentType rather than
|
|
332
|
+
// a fixed set of types, so no dependent type is ever silently dropped.
|
|
333
|
+
export function formatObjectDependentsSection(components) {
|
|
334
|
+
if (components.length === 0)
|
|
335
|
+
return '';
|
|
336
|
+
const byType = new Map();
|
|
337
|
+
for (const c of components) {
|
|
338
|
+
if (!byType.has(c.type))
|
|
339
|
+
byType.set(c.type, []);
|
|
340
|
+
byType.get(c.type).push(c);
|
|
341
|
+
}
|
|
342
|
+
const types = Array.from(byType.keys()).sort((a, b) => {
|
|
343
|
+
const aPriority = PRIORITY_TYPES.indexOf(a);
|
|
344
|
+
const bPriority = PRIORITY_TYPES.indexOf(b);
|
|
345
|
+
if (aPriority !== -1 || bPriority !== -1) {
|
|
346
|
+
if (aPriority === -1)
|
|
347
|
+
return 1;
|
|
348
|
+
if (bPriority === -1)
|
|
349
|
+
return -1;
|
|
350
|
+
return aPriority - bPriority;
|
|
351
|
+
}
|
|
352
|
+
return humanizeComponentType(a).localeCompare(humanizeComponentType(b));
|
|
353
|
+
});
|
|
354
|
+
const lines = ['', '## Related Components (what references this object)'];
|
|
355
|
+
for (const type of types) {
|
|
356
|
+
lines.push('', `### ${humanizeComponentType(type)}`, '');
|
|
357
|
+
for (const c of byType.get(type)) {
|
|
358
|
+
lines.push(`- **${c.apiName}** [${c.id}]${c.description ? ` — ${c.description}` : ''}`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return lines.join('\n');
|
|
362
|
+
}
|
|
363
|
+
function esc(s) {
|
|
364
|
+
return s.replace(/'/g, "\\'");
|
|
365
|
+
}
|
|
366
|
+
function splitDot(fullName) {
|
|
367
|
+
const idx = fullName.indexOf('.');
|
|
368
|
+
if (idx === -1)
|
|
369
|
+
return [fullName, undefined];
|
|
370
|
+
return [fullName.slice(0, idx), fullName.slice(idx + 1)];
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=relatedComponents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relatedComponents.js","sourceRoot":"","sources":["../../src/utils/relatedComponents.ts"],"names":[],"mappings":"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"}
|