@acquis-consulting/asm 1.0.5

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 (203) hide show
  1. package/README.md +0 -0
  2. package/dist/apps/gitDiffReview/gitDiffParser.d.ts +6 -0
  3. package/dist/apps/gitDiffReview/gitDiffParser.js +1 -0
  4. package/dist/apps/gitDiffReview/packageXml.d.ts +8 -0
  5. package/dist/apps/gitDiffReview/packageXml.js +1 -0
  6. package/dist/apps/gitDiffReview/tools.d.ts +42 -0
  7. package/dist/apps/gitDiffReview/tools.js +1 -0
  8. package/dist/apps/gitDiffReview/types.d.ts +19 -0
  9. package/dist/apps/gitDiffReview/types.js +1 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.js +193 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/metadata-diff.html +98 -0
  14. package/dist/tools/aggregateQuery.d.ts +85 -0
  15. package/dist/tools/aggregateQuery.js +110 -0
  16. package/dist/tools/aggregateQuery.js.map +1 -0
  17. package/dist/tools/bulkExportAbort.d.ts +37 -0
  18. package/dist/tools/bulkExportAbort.js +44 -0
  19. package/dist/tools/bulkExportAbort.js.map +1 -0
  20. package/dist/tools/bulkExportResults.d.ts +51 -0
  21. package/dist/tools/bulkExportResults.js +76 -0
  22. package/dist/tools/bulkExportResults.js.map +1 -0
  23. package/dist/tools/bulkExportStart.d.ts +61 -0
  24. package/dist/tools/bulkExportStart.js +68 -0
  25. package/dist/tools/bulkExportStart.js.map +1 -0
  26. package/dist/tools/bulkExportStatus.d.ts +37 -0
  27. package/dist/tools/bulkExportStatus.js +54 -0
  28. package/dist/tools/bulkExportStatus.js.map +1 -0
  29. package/dist/tools/crossObjectSearch.d.ts +155 -0
  30. package/dist/tools/crossObjectSearch.js +145 -0
  31. package/dist/tools/crossObjectSearch.js.map +1 -0
  32. package/dist/tools/debugLogs.d.ts +106 -0
  33. package/dist/tools/debugLogs.js +189 -0
  34. package/dist/tools/debugLogs.js.map +1 -0
  35. package/dist/tools/deployMetadata.d.ts +60 -0
  36. package/dist/tools/deployMetadata.js +106 -0
  37. package/dist/tools/deployMetadata.js.map +1 -0
  38. package/dist/tools/deployPackage.d.ts +49 -0
  39. package/dist/tools/deployPackage.js +1 -0
  40. package/dist/tools/dml.d.ts +70 -0
  41. package/dist/tools/dml.js +105 -0
  42. package/dist/tools/dml.js.map +1 -0
  43. package/dist/tools/dmlDelete.d.ts +51 -0
  44. package/dist/tools/dmlDelete.js +71 -0
  45. package/dist/tools/dmlDelete.js.map +1 -0
  46. package/dist/tools/executeAnonymous.d.ts +63 -0
  47. package/dist/tools/executeAnonymous.js +77 -0
  48. package/dist/tools/executeAnonymous.js.map +1 -0
  49. package/dist/tools/fieldManagement.d.ts +222 -0
  50. package/dist/tools/fieldManagement.js +234 -0
  51. package/dist/tools/fieldManagement.js.map +1 -0
  52. package/dist/tools/fieldPermissions.d.ts +94 -0
  53. package/dist/tools/fieldPermissions.js +191 -0
  54. package/dist/tools/fieldPermissions.js.map +1 -0
  55. package/dist/tools/getDependencies.d.ts +58 -0
  56. package/dist/tools/getDependencies.js +105 -0
  57. package/dist/tools/getDependencies.js.map +1 -0
  58. package/dist/tools/listUserPermissions.d.ts +36 -0
  59. package/dist/tools/listUserPermissions.js +59 -0
  60. package/dist/tools/listUserPermissions.js.map +1 -0
  61. package/dist/tools/metadataDescribe.d.ts +37 -0
  62. package/dist/tools/metadataDescribe.js +35 -0
  63. package/dist/tools/metadataDescribe.js.map +1 -0
  64. package/dist/tools/metadataDiff.d.ts +66 -0
  65. package/dist/tools/metadataDiff.js +215 -0
  66. package/dist/tools/metadataDiff.js.map +1 -0
  67. package/dist/tools/metadataDiffFileDetail.d.ts +44 -0
  68. package/dist/tools/metadataDiffFileDetail.js +84 -0
  69. package/dist/tools/metadataDiffFileDetail.js.map +1 -0
  70. package/dist/tools/metadataDiffFiles.d.ts +37 -0
  71. package/dist/tools/metadataDiffFiles.js +72 -0
  72. package/dist/tools/metadataDiffFiles.js.map +1 -0
  73. package/dist/tools/metadataDiffGeneratePackage.d.ts +73 -0
  74. package/dist/tools/metadataDiffGeneratePackage.js +122 -0
  75. package/dist/tools/metadataDiffGeneratePackage.js.map +1 -0
  76. package/dist/tools/metadataImport.d.ts +63 -0
  77. package/dist/tools/metadataImport.js +122 -0
  78. package/dist/tools/metadataImport.js.map +1 -0
  79. package/dist/tools/metadataJobStatus.d.ts +44 -0
  80. package/dist/tools/metadataJobStatus.js +101 -0
  81. package/dist/tools/metadataJobStatus.js.map +1 -0
  82. package/dist/tools/metadataList.d.ts +44 -0
  83. package/dist/tools/metadataList.js +49 -0
  84. package/dist/tools/metadataList.js.map +1 -0
  85. package/dist/tools/metadataRead.d.ts +47 -0
  86. package/dist/tools/metadataRead.js +52 -0
  87. package/dist/tools/metadataRead.js.map +1 -0
  88. package/dist/tools/metadataTypeSchema.d.ts +44 -0
  89. package/dist/tools/metadataTypeSchema.js +101 -0
  90. package/dist/tools/metadataTypeSchema.js.map +1 -0
  91. package/dist/tools/metadataWsdl.d.ts +19 -0
  92. package/dist/tools/metadataWsdl.js +1 -0
  93. package/dist/tools/objectManagement.d.ts +107 -0
  94. package/dist/tools/objectManagement.js +123 -0
  95. package/dist/tools/objectManagement.js.map +1 -0
  96. package/dist/tools/objectPermissions.d.ts +101 -0
  97. package/dist/tools/objectPermissions.js +157 -0
  98. package/dist/tools/objectPermissions.js.map +1 -0
  99. package/dist/tools/objectSchema.d.ts +37 -0
  100. package/dist/tools/objectSchema.js +66 -0
  101. package/dist/tools/objectSchema.js.map +1 -0
  102. package/dist/tools/objectSearch.d.ts +37 -0
  103. package/dist/tools/objectSearch.js +44 -0
  104. package/dist/tools/objectSearch.js.map +1 -0
  105. package/dist/tools/packageStatus.d.ts +24 -0
  106. package/dist/tools/packageStatus.js +1 -0
  107. package/dist/tools/permissionSetAssignment.d.ts +39 -0
  108. package/dist/tools/permissionSetAssignment.js +1 -0
  109. package/dist/tools/readApexClasses.d.ts +50 -0
  110. package/dist/tools/readApexClasses.js +83 -0
  111. package/dist/tools/readApexClasses.js.map +1 -0
  112. package/dist/tools/readApexTriggers.d.ts +50 -0
  113. package/dist/tools/readApexTriggers.js +82 -0
  114. package/dist/tools/readApexTriggers.js.map +1 -0
  115. package/dist/tools/recordPicker.d.ts +48 -0
  116. package/dist/tools/recordPicker.js +1 -0
  117. package/dist/tools/recordQuery.d.ts +68 -0
  118. package/dist/tools/recordQuery.js +131 -0
  119. package/dist/tools/recordQuery.js.map +1 -0
  120. package/dist/tools/retrieveJobStatus.d.ts +51 -0
  121. package/dist/tools/retrieveJobStatus.js +192 -0
  122. package/dist/tools/retrieveJobStatus.js.map +1 -0
  123. package/dist/tools/retrieveMetadata.d.ts +79 -0
  124. package/dist/tools/retrieveMetadata.js +225 -0
  125. package/dist/tools/retrieveMetadata.js.map +1 -0
  126. package/dist/tools/retrievePackage.d.ts +37 -0
  127. package/dist/tools/retrievePackage.js +1 -0
  128. package/dist/tools/salesforceLogin.d.ts +36 -0
  129. package/dist/tools/salesforceLogin.js +75 -0
  130. package/dist/tools/salesforceLogin.js.map +1 -0
  131. package/dist/tools/selectOrg.d.ts +25 -0
  132. package/dist/tools/selectOrg.js +91 -0
  133. package/dist/tools/selectOrg.js.map +1 -0
  134. package/dist/tools/toolingQuery.d.ts +37 -0
  135. package/dist/tools/toolingQuery.js +54 -0
  136. package/dist/tools/toolingQuery.js.map +1 -0
  137. package/dist/tools/userPermissions.d.ts +76 -0
  138. package/dist/tools/userPermissions.js +130 -0
  139. package/dist/tools/userPermissions.js.map +1 -0
  140. package/dist/tools/versionMetadataComplete.d.ts +45 -0
  141. package/dist/tools/versionMetadataComplete.js +1 -0
  142. package/dist/tools/versionMetadataStart.d.ts +25 -0
  143. package/dist/tools/versionMetadataStart.js +1 -0
  144. package/dist/tools/versionMetadataStatus.d.ts +25 -0
  145. package/dist/tools/versionMetadataStatus.js +1 -0
  146. package/dist/tools/writeApexClasses.d.ts +64 -0
  147. package/dist/tools/writeApexClasses.js +79 -0
  148. package/dist/tools/writeApexClasses.js.map +1 -0
  149. package/dist/tools/writeApexTriggers.d.ts +71 -0
  150. package/dist/tools/writeApexTriggers.js +96 -0
  151. package/dist/tools/writeApexTriggers.js.map +1 -0
  152. package/dist/types/connection.d.ts +20 -0
  153. package/dist/types/connection.js +9 -0
  154. package/dist/types/connection.js.map +1 -0
  155. package/dist/types/index.d.ts +3 -0
  156. package/dist/types/index.js +4 -0
  157. package/dist/types/index.js.map +1 -0
  158. package/dist/types/metadata.d.ts +44 -0
  159. package/dist/types/metadata.js +2 -0
  160. package/dist/types/metadata.js.map +1 -0
  161. package/dist/types/salesforce.d.ts +38 -0
  162. package/dist/types/salesforce.js +2 -0
  163. package/dist/types/salesforce.js.map +1 -0
  164. package/dist/utils/apexContainer.d.ts +18 -0
  165. package/dist/utils/apexContainer.js +79 -0
  166. package/dist/utils/apexContainer.js.map +1 -0
  167. package/dist/utils/connection.d.ts +3 -0
  168. package/dist/utils/connection.js +135 -0
  169. package/dist/utils/connection.js.map +1 -0
  170. package/dist/utils/decomposePermissions.d.ts +16 -0
  171. package/dist/utils/decomposePermissions.js +188 -0
  172. package/dist/utils/decomposePermissions.js.map +1 -0
  173. package/dist/utils/dxPathMapper.d.ts +16 -0
  174. package/dist/utils/dxPathMapper.js +217 -0
  175. package/dist/utils/dxPathMapper.js.map +1 -0
  176. package/dist/utils/errors.d.ts +8 -0
  177. package/dist/utils/errors.js +40 -0
  178. package/dist/utils/errors.js.map +1 -0
  179. package/dist/utils/index.d.ts +2 -0
  180. package/dist/utils/index.js +3 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/dist/utils/oauthWebFlow.d.ts +8 -0
  183. package/dist/utils/oauthWebFlow.js +172 -0
  184. package/dist/utils/oauthWebFlow.js.map +1 -0
  185. package/dist/utils/packageJobs.d.ts +17 -0
  186. package/dist/utils/packageJobs.js +1 -0
  187. package/dist/utils/packageXml.d.ts +18 -0
  188. package/dist/utils/packageXml.js +1 -0
  189. package/dist/utils/permissionSetResolver.d.ts +14 -0
  190. package/dist/utils/permissionSetResolver.js +1 -0
  191. package/dist/utils/preSelectMatcher.d.ts +18 -0
  192. package/dist/utils/preSelectMatcher.js +1 -0
  193. package/dist/utils/profileCleanup.d.ts +18 -0
  194. package/dist/utils/profileCleanup.js +1 -0
  195. package/dist/utils/retrieveStore.d.ts +12 -0
  196. package/dist/utils/retrieveStore.js +1 -0
  197. package/dist/utils/sfCli.d.ts +18 -0
  198. package/dist/utils/sfCli.js +130 -0
  199. package/dist/utils/sfCli.js.map +1 -0
  200. package/dist/utils/tokenBroker.d.ts +13 -0
  201. package/dist/utils/tokenBroker.js +73 -0
  202. package/dist/utils/tokenBroker.js.map +1 -0
  203. package/package.json +54 -0
@@ -0,0 +1,155 @@
1
+ import { Connection } from 'jsforce';
2
+ import { z } from 'zod/v4';
3
+ export declare const crossObjectSearchTool: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ searchTerm: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ searchIn: {
14
+ type: string;
15
+ enum: string[];
16
+ description: string;
17
+ };
18
+ objects: {
19
+ type: string;
20
+ items: {
21
+ type: string;
22
+ properties: {
23
+ name: {
24
+ type: string;
25
+ description: string;
26
+ };
27
+ fields: {
28
+ type: string;
29
+ items: {
30
+ type: string;
31
+ };
32
+ description: string;
33
+ };
34
+ where: {
35
+ type: string;
36
+ description: string;
37
+ };
38
+ orderBy: {
39
+ type: string;
40
+ description: string;
41
+ };
42
+ limit: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ };
47
+ required: string[];
48
+ };
49
+ description: string;
50
+ };
51
+ withClauses: {
52
+ type: string;
53
+ items: {
54
+ type: string;
55
+ properties: {
56
+ type: {
57
+ type: string;
58
+ description: string;
59
+ };
60
+ value: {
61
+ type: string;
62
+ description: string;
63
+ };
64
+ };
65
+ required: string[];
66
+ };
67
+ description: string;
68
+ };
69
+ updateable: {
70
+ type: string;
71
+ description: string;
72
+ };
73
+ viewable: {
74
+ type: string;
75
+ description: string;
76
+ };
77
+ };
78
+ required: string[];
79
+ };
80
+ };
81
+ export interface CrossObjectSearchArgs {
82
+ searchTerm: string;
83
+ searchIn?: string;
84
+ objects: Array<{
85
+ name: string;
86
+ fields: string[];
87
+ where?: string;
88
+ orderBy?: string;
89
+ limit?: number;
90
+ }>;
91
+ withClauses?: Array<{
92
+ type: string;
93
+ value?: string;
94
+ }>;
95
+ updateable?: boolean;
96
+ viewable?: boolean;
97
+ }
98
+ export declare function handleCrossObjectSearch(conn: Connection, args: CrossObjectSearchArgs): Promise<{
99
+ content: {
100
+ type: "text";
101
+ text: string;
102
+ }[];
103
+ isError: boolean;
104
+ }>;
105
+ export declare const crossObjectSearchSchema: {
106
+ searchTerm: z.ZodString;
107
+ searchIn: z.ZodOptional<z.ZodEnum<{
108
+ "ALL FIELDS": "ALL FIELDS";
109
+ "NAME FIELDS": "NAME FIELDS";
110
+ "EMAIL FIELDS": "EMAIL FIELDS";
111
+ "PHONE FIELDS": "PHONE FIELDS";
112
+ "SIDEBAR FIELDS": "SIDEBAR FIELDS";
113
+ }>>;
114
+ objects: z.ZodArray<z.ZodObject<{
115
+ name: z.ZodString;
116
+ fields: z.ZodArray<z.ZodString>;
117
+ where: z.ZodOptional<z.ZodString>;
118
+ orderBy: z.ZodOptional<z.ZodString>;
119
+ limit: z.ZodOptional<z.ZodNumber>;
120
+ }, z.core.$strip>>;
121
+ withClauses: z.ZodOptional<z.ZodArray<z.ZodObject<{
122
+ type: z.ZodString;
123
+ value: z.ZodOptional<z.ZodString>;
124
+ }, z.core.$strip>>>;
125
+ updateable: z.ZodOptional<z.ZodBoolean>;
126
+ viewable: z.ZodOptional<z.ZodBoolean>;
127
+ };
128
+ export declare const crossObjectSearchDescriptor: {
129
+ name: string;
130
+ description: string;
131
+ schema: {
132
+ searchTerm: z.ZodString;
133
+ searchIn: z.ZodOptional<z.ZodEnum<{
134
+ "ALL FIELDS": "ALL FIELDS";
135
+ "NAME FIELDS": "NAME FIELDS";
136
+ "EMAIL FIELDS": "EMAIL FIELDS";
137
+ "PHONE FIELDS": "PHONE FIELDS";
138
+ "SIDEBAR FIELDS": "SIDEBAR FIELDS";
139
+ }>>;
140
+ objects: z.ZodArray<z.ZodObject<{
141
+ name: z.ZodString;
142
+ fields: z.ZodArray<z.ZodString>;
143
+ where: z.ZodOptional<z.ZodString>;
144
+ orderBy: z.ZodOptional<z.ZodString>;
145
+ limit: z.ZodOptional<z.ZodNumber>;
146
+ }, z.core.$strip>>;
147
+ withClauses: z.ZodOptional<z.ZodArray<z.ZodObject<{
148
+ type: z.ZodString;
149
+ value: z.ZodOptional<z.ZodString>;
150
+ }, z.core.$strip>>>;
151
+ updateable: z.ZodOptional<z.ZodBoolean>;
152
+ viewable: z.ZodOptional<z.ZodBoolean>;
153
+ };
154
+ handler: typeof handleCrossObjectSearch;
155
+ };
@@ -0,0 +1,145 @@
1
+ import { z } from 'zod/v4';
2
+ import { toolResponse } from '../utils/index.js';
3
+ export const crossObjectSearchTool = {
4
+ name: 'salesforce_search',
5
+ description: 'Search across multiple Salesforce objects using SOSL (Salesforce Object Search Language). Supports wildcards (* and ?), search scope filtering, and per-object WHERE/ORDER BY/LIMIT clauses.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ searchTerm: {
10
+ type: 'string',
11
+ description: 'The search term. Supports * (multi-char) and ? (single-char) wildcards.',
12
+ },
13
+ searchIn: {
14
+ type: 'string',
15
+ enum: ['ALL FIELDS', 'NAME FIELDS', 'EMAIL FIELDS', 'PHONE FIELDS', 'SIDEBAR FIELDS'],
16
+ description: 'Which fields to search. Default: ALL FIELDS.',
17
+ },
18
+ objects: {
19
+ type: 'array',
20
+ items: {
21
+ type: 'object',
22
+ properties: {
23
+ name: { type: 'string', description: 'Object API name.' },
24
+ fields: { type: 'array', items: { type: 'string' }, description: 'Fields to return.' },
25
+ where: { type: 'string', description: 'WHERE clause for this object (without WHERE keyword).' },
26
+ orderBy: { type: 'string', description: 'ORDER BY clause (without keywords).' },
27
+ limit: { type: 'number', description: 'Max records for this object.' },
28
+ },
29
+ required: ['name', 'fields'],
30
+ },
31
+ description: 'Objects to search with their return fields and optional filters.',
32
+ },
33
+ withClauses: {
34
+ type: 'array',
35
+ items: {
36
+ type: 'object',
37
+ properties: {
38
+ type: { type: 'string', description: 'WITH clause type (e.g., SNIPPET, DATA CATEGORY, METADATA, SECURITY_ENFORCED).' },
39
+ value: { type: 'string', description: 'Value for the WITH clause (if applicable).' },
40
+ },
41
+ required: ['type'],
42
+ },
43
+ description: 'Optional WITH clauses.',
44
+ },
45
+ updateable: { type: 'boolean', description: 'Filter to updateable records.' },
46
+ viewable: { type: 'boolean', description: 'Filter to viewable records.' },
47
+ },
48
+ required: ['searchTerm', 'objects'],
49
+ },
50
+ };
51
+ export async function handleCrossObjectSearch(conn, args) {
52
+ const { searchTerm, searchIn, objects, withClauses, updateable, viewable } = args;
53
+ const returning = objects.map(obj => {
54
+ let clause = `${obj.name}(${obj.fields.join(', ')}`;
55
+ if (obj.where)
56
+ clause += ` WHERE ${obj.where}`;
57
+ if (obj.orderBy)
58
+ clause += ` ORDER BY ${obj.orderBy}`;
59
+ if (obj.limit)
60
+ clause += ` LIMIT ${obj.limit}`;
61
+ clause += ')';
62
+ return clause;
63
+ });
64
+ let sosl = `FIND {${searchTerm}} IN ${searchIn || 'ALL FIELDS'} RETURNING ${returning.join(', ')}`;
65
+ if (withClauses && withClauses.length > 0) {
66
+ for (const wc of withClauses) {
67
+ const standaloneTypes = ['METADATA', 'SECURITY_ENFORCED'];
68
+ if (standaloneTypes.includes(wc.type.toUpperCase())) {
69
+ sosl += ` WITH ${wc.type}`;
70
+ }
71
+ else if (wc.type.toUpperCase().startsWith('SNIPPET')) {
72
+ sosl += ` WITH ${wc.type}${wc.value ? `(${wc.value})` : ''}`;
73
+ }
74
+ else {
75
+ sosl += ` WITH ${wc.type} = ${wc.value}`;
76
+ }
77
+ }
78
+ }
79
+ if (updateable)
80
+ sosl += ' WITH UPDATEABLE';
81
+ if (viewable)
82
+ sosl += ' WITH VIEWABLE';
83
+ try {
84
+ const result = await conn.search(sosl);
85
+ const searchRecords = result.searchRecords || result;
86
+ if (!searchRecords || (Array.isArray(searchRecords) && searchRecords.length === 0)) {
87
+ return toolResponse(`No results found.\n\nSOSL: ${sosl}`);
88
+ }
89
+ const grouped = {};
90
+ const records = Array.isArray(searchRecords) ? searchRecords : [];
91
+ for (const record of records) {
92
+ const objType = record.attributes?.type || 'Unknown';
93
+ if (!grouped[objType])
94
+ grouped[objType] = [];
95
+ grouped[objType].push(record);
96
+ }
97
+ const lines = [];
98
+ for (const [objType, recs] of Object.entries(grouped)) {
99
+ lines.push(`### ${objType} (${recs.length} result(s))`);
100
+ for (const rec of recs) {
101
+ const fields = Object.entries(rec)
102
+ .filter(([key]) => key !== 'attributes')
103
+ .map(([key, value]) => `${key}: ${value}`)
104
+ .join(', ');
105
+ lines.push(`- ${fields}`);
106
+ }
107
+ lines.push('');
108
+ }
109
+ return toolResponse(`Search results:\n\n${lines.join('\n')}\n\nSOSL: ${sosl}`);
110
+ }
111
+ catch (error) {
112
+ let msg = error.message || String(error);
113
+ if (msg.includes('MALFORMED_SEARCH')) {
114
+ msg += '\n\nTips:\n- Ensure search term is at least 2 characters\n- Check wildcard usage (* for multi-char, ? for single-char)';
115
+ }
116
+ if (msg.includes('INVALID_FIELD')) {
117
+ msg += '\n\nTips:\n- Verify field API names in RETURNING clause\n- Check field-level security access';
118
+ }
119
+ return toolResponse(`Search failed: ${msg}\n\nSOSL: ${sosl}`, true);
120
+ }
121
+ }
122
+ export const crossObjectSearchSchema = {
123
+ searchTerm: z.string().describe('The search term. Supports * (multi-char) and ? (single-char) wildcards.'),
124
+ searchIn: z.enum(['ALL FIELDS', 'NAME FIELDS', 'EMAIL FIELDS', 'PHONE FIELDS', 'SIDEBAR FIELDS']).describe('Which fields to search. Default: ALL FIELDS.').optional(),
125
+ objects: z.array(z.object({
126
+ name: z.string().describe('Object API name.'),
127
+ fields: z.array(z.string()).describe('Fields to return.'),
128
+ where: z.string().describe('WHERE clause for this object (without WHERE keyword).').optional(),
129
+ orderBy: z.string().describe('ORDER BY clause (without keywords).').optional(),
130
+ limit: z.number().describe('Max records for this object.').optional(),
131
+ })).describe('Objects to search with their return fields and optional filters.'),
132
+ withClauses: z.array(z.object({
133
+ type: z.string().describe('WITH clause type (e.g., SNIPPET, DATA CATEGORY, METADATA, SECURITY_ENFORCED).'),
134
+ value: z.string().describe('Value for the WITH clause (if applicable).').optional(),
135
+ })).describe('Optional WITH clauses.').optional(),
136
+ updateable: z.boolean().describe('Filter to updateable records.').optional(),
137
+ viewable: z.boolean().describe('Filter to viewable records.').optional(),
138
+ };
139
+ export const crossObjectSearchDescriptor = {
140
+ name: 'salesforce_search',
141
+ description: crossObjectSearchTool.description,
142
+ schema: crossObjectSearchSchema,
143
+ handler: handleCrossObjectSearch,
144
+ };
145
+ //# sourceMappingURL=crossObjectSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crossObjectSearch.js","sourceRoot":"","sources":["../../src/tools/crossObjectSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { Connection } from 'jsforce';
2
+ import { z } from 'zod/v4';
3
+ export declare const debugLogsTool: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ operation: {
10
+ type: string;
11
+ enum: string[];
12
+ };
13
+ username: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ logLevel: {
18
+ type: string;
19
+ enum: string[];
20
+ description: string;
21
+ };
22
+ expirationTime: {
23
+ type: string;
24
+ description: string;
25
+ };
26
+ limit: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ logId: {
31
+ type: string;
32
+ description: string;
33
+ };
34
+ includeBody: {
35
+ type: string;
36
+ description: string;
37
+ };
38
+ };
39
+ required: string[];
40
+ };
41
+ };
42
+ export interface DebugLogsArgs {
43
+ operation: 'enable' | 'disable' | 'retrieve';
44
+ username: string;
45
+ logLevel?: string;
46
+ expirationTime?: number;
47
+ limit?: number;
48
+ logId?: string;
49
+ includeBody?: boolean;
50
+ }
51
+ export declare function handleDebugLogs(conn: Connection, args: DebugLogsArgs): Promise<{
52
+ content: {
53
+ type: "text";
54
+ text: string;
55
+ }[];
56
+ isError: boolean;
57
+ }>;
58
+ export declare const debugLogsSchema: {
59
+ operation: z.ZodEnum<{
60
+ enable: "enable";
61
+ disable: "disable";
62
+ retrieve: "retrieve";
63
+ }>;
64
+ username: z.ZodString;
65
+ logLevel: z.ZodOptional<z.ZodEnum<{
66
+ ERROR: "ERROR";
67
+ NONE: "NONE";
68
+ WARN: "WARN";
69
+ INFO: "INFO";
70
+ DEBUG: "DEBUG";
71
+ FINE: "FINE";
72
+ FINER: "FINER";
73
+ FINEST: "FINEST";
74
+ }>>;
75
+ expirationTime: z.ZodOptional<z.ZodNumber>;
76
+ limit: z.ZodOptional<z.ZodNumber>;
77
+ logId: z.ZodOptional<z.ZodString>;
78
+ includeBody: z.ZodOptional<z.ZodBoolean>;
79
+ };
80
+ export declare const debugLogsDescriptor: {
81
+ name: string;
82
+ description: string;
83
+ schema: {
84
+ operation: z.ZodEnum<{
85
+ enable: "enable";
86
+ disable: "disable";
87
+ retrieve: "retrieve";
88
+ }>;
89
+ username: z.ZodString;
90
+ logLevel: z.ZodOptional<z.ZodEnum<{
91
+ ERROR: "ERROR";
92
+ NONE: "NONE";
93
+ WARN: "WARN";
94
+ INFO: "INFO";
95
+ DEBUG: "DEBUG";
96
+ FINE: "FINE";
97
+ FINER: "FINER";
98
+ FINEST: "FINEST";
99
+ }>>;
100
+ expirationTime: z.ZodOptional<z.ZodNumber>;
101
+ limit: z.ZodOptional<z.ZodNumber>;
102
+ logId: z.ZodOptional<z.ZodString>;
103
+ includeBody: z.ZodOptional<z.ZodBoolean>;
104
+ };
105
+ handler: typeof handleDebugLogs;
106
+ };
@@ -0,0 +1,189 @@
1
+ import { z } from 'zod/v4';
2
+ import { toolResponse } from '../utils/index.js';
3
+ export const debugLogsTool = {
4
+ name: 'salesforce_debug_logs',
5
+ description: 'Enable, disable, or retrieve debug logs for a Salesforce user. Smart user lookup: email-like input searches by Username, otherwise by Name. Retrieve by user to list recent logs, or by logId for specific log content.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ operation: {
10
+ type: 'string',
11
+ enum: ['enable', 'disable', 'retrieve'],
12
+ },
13
+ username: {
14
+ type: 'string',
15
+ description: 'User\'s username (email) or full name. Smart search tries Username first for email-like inputs, Name for others.',
16
+ },
17
+ logLevel: {
18
+ type: 'string',
19
+ enum: ['NONE', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'FINE', 'FINER', 'FINEST'],
20
+ description: 'Debug level for enable. Default: DEBUG.',
21
+ },
22
+ expirationTime: {
23
+ type: 'number',
24
+ description: 'Minutes until trace flag expires. Default: 30.',
25
+ },
26
+ limit: {
27
+ type: 'number',
28
+ description: 'Max logs to retrieve. Default: 10.',
29
+ },
30
+ logId: {
31
+ type: 'string',
32
+ description: 'Specific log ID to retrieve.',
33
+ },
34
+ includeBody: {
35
+ type: 'boolean',
36
+ description: 'Include full log body when retrieving by logId. Default: false.',
37
+ },
38
+ },
39
+ required: ['operation', 'username'],
40
+ },
41
+ };
42
+ async function findUser(conn, input) {
43
+ const isEmail = input.includes('@') || !input.includes(' ');
44
+ const field = isEmail ? 'Username' : 'Name';
45
+ const escapedInput = input.replace(/'/g, "\\'");
46
+ let result = await conn.query(`SELECT Id, Name, Username, IsActive FROM User WHERE ${field} = '${escapedInput}'`);
47
+ if (!result.records || result.records.length === 0) {
48
+ result = await conn.query(`SELECT Id, Name, Username, IsActive FROM User WHERE Name LIKE '%${escapedInput}%' OR Username LIKE '%${escapedInput}%' LIMIT 10`);
49
+ }
50
+ if (!result.records || result.records.length === 0) {
51
+ return `User "${input}" not found.`;
52
+ }
53
+ if (result.records.length > 1) {
54
+ const list = result.records.map((r) => `- ${r.Name} (${r.Username})${r.IsActive ? '' : ' [INACTIVE]'}`);
55
+ return `Multiple users found. Please specify:\n${list.join('\n')}`;
56
+ }
57
+ const user = result.records[0];
58
+ return { id: user.Id, name: user.Name, username: user.Username, isActive: user.IsActive };
59
+ }
60
+ export async function handleDebugLogs(conn, args) {
61
+ const { operation, logLevel = 'DEBUG', expirationTime = 30 } = args;
62
+ try {
63
+ // Retrieve by specific log ID
64
+ if (operation === 'retrieve' && args.logId) {
65
+ const logResult = await conn.tooling.query(`SELECT Id, Application, Operation, Status, LogLength, StartTime FROM ApexLog WHERE Id = '${args.logId}'`);
66
+ if (!logResult.records || logResult.records.length === 0) {
67
+ return toolResponse(`Log "${args.logId}" not found.`);
68
+ }
69
+ const log = logResult.records[0];
70
+ let output = `Log: ${log.Id}\nOperation: ${log.Operation}\nApplication: ${log.Application}\nStatus: ${log.Status}\nSize: ${log.LogLength}\nDate: ${log.StartTime}`;
71
+ if (args.includeBody) {
72
+ try {
73
+ const body = await conn.request({
74
+ method: 'GET',
75
+ url: `/services/data/v58.0/tooling/sobjects/ApexLog/${log.Id}/Body`,
76
+ });
77
+ output += `\n\n--- Log Body ---\n${typeof body === 'string' ? body : JSON.stringify(body)}`;
78
+ }
79
+ catch {
80
+ output += '\n\n(Log body not accessible)';
81
+ }
82
+ }
83
+ return toolResponse(output);
84
+ }
85
+ const userResult = await findUser(conn, args.username);
86
+ if (typeof userResult === 'string') {
87
+ return toolResponse(userResult, true);
88
+ }
89
+ const { id: userId, name: userName, isActive } = userResult;
90
+ const warning = !isActive ? '\n⚠ Warning: User is inactive.\n' : '';
91
+ if (operation === 'enable') {
92
+ const now = new Date();
93
+ const expiry = new Date(now.getTime() + expirationTime * 60000);
94
+ // Check for existing trace flag
95
+ const existingTf = await conn.tooling.query(`SELECT Id, DebugLevelId FROM TraceFlag WHERE TracedEntityId = '${userId}' AND ExpirationDate > ${now.toISOString()} AND LogType = 'USER_DEBUG'`);
96
+ if (existingTf.records && existingTf.records.length > 0) {
97
+ const tf = existingTf.records[0];
98
+ await conn.tooling.sobject('TraceFlag').update({
99
+ Id: tf.Id,
100
+ StartDate: now.toISOString(),
101
+ ExpirationDate: expiry.toISOString(),
102
+ });
103
+ return toolResponse(`${warning}Debug logging updated for ${userName}.\nExpires: ${expiry.toISOString()}`);
104
+ }
105
+ // Create debug level
106
+ const devName = `MCP_Debug_${Date.now()}`;
107
+ const debugLevelResult = await conn.tooling.sobject('DebugLevel').create({
108
+ DeveloperName: devName,
109
+ MasterLabel: devName,
110
+ ApexCode: logLevel,
111
+ ApexProfiling: logLevel,
112
+ Callout: logLevel,
113
+ Database: logLevel,
114
+ System: logLevel,
115
+ Validation: logLevel,
116
+ Visualforce: logLevel,
117
+ Workflow: logLevel,
118
+ });
119
+ if (!debugLevelResult.success) {
120
+ return toolResponse(`Failed to create debug level: ${JSON.stringify(debugLevelResult.errors)}`, true);
121
+ }
122
+ // Create trace flag
123
+ const tfResult = await conn.tooling.sobject('TraceFlag').create({
124
+ TracedEntityId: userId,
125
+ DebugLevelId: debugLevelResult.id,
126
+ LogType: 'USER_DEBUG',
127
+ StartDate: now.toISOString(),
128
+ ExpirationDate: expiry.toISOString(),
129
+ });
130
+ if (!tfResult.success) {
131
+ return toolResponse(`Failed to create trace flag: ${JSON.stringify(tfResult.errors)}`, true);
132
+ }
133
+ return toolResponse(`${warning}Debug logging enabled for ${userName}.\nLevel: ${logLevel}\nExpires: ${expiry.toISOString()}`);
134
+ }
135
+ if (operation === 'disable') {
136
+ const now = new Date();
137
+ const activeTf = await conn.tooling.query(`SELECT Id FROM TraceFlag WHERE TracedEntityId = '${userId}' AND ExpirationDate > ${now.toISOString()}`);
138
+ if (!activeTf.records || activeTf.records.length === 0) {
139
+ return toolResponse(`${warning}No active trace flags found for ${userName}.`);
140
+ }
141
+ const results = [];
142
+ for (const tf of activeTf.records) {
143
+ try {
144
+ await conn.tooling.sobject('TraceFlag').destroy(tf.Id);
145
+ results.push(`Deleted trace flag ${tf.Id}`);
146
+ }
147
+ catch {
148
+ // Fallback: set near-future expiration
149
+ const nearFuture = new Date(Date.now() + 5 * 60000);
150
+ await conn.tooling.sobject('TraceFlag').update({
151
+ Id: tf.Id,
152
+ ExpirationDate: nearFuture.toISOString(),
153
+ });
154
+ results.push(`Set trace flag ${tf.Id} to expire in 5 minutes`);
155
+ }
156
+ }
157
+ return toolResponse(`${warning}Debug logging disabled for ${userName}.\n${results.join('\n')}`);
158
+ }
159
+ // Retrieve logs by user
160
+ const logLimit = args.limit || 10;
161
+ const logResult = await conn.tooling.query(`SELECT Id, Application, Operation, Status, LogLength, StartTime FROM ApexLog WHERE LogUserId = '${userId}' ORDER BY StartTime DESC LIMIT ${logLimit}`);
162
+ if (!logResult.records || logResult.records.length === 0) {
163
+ return toolResponse(`${warning}No debug logs found for ${userName}.`);
164
+ }
165
+ const header = '| ID | Operation | Application | Status | Size | Date |';
166
+ const separator = '|----|-----------|-------------|--------|------|------|';
167
+ const rows = logResult.records.map((r) => `| ${r.Id} | ${r.Operation || '-'} | ${r.Application || '-'} | ${r.Status || '-'} | ${r.LogLength || 0} | ${r.StartTime} |`);
168
+ return toolResponse(`${warning}Debug logs for ${userName} (${logResult.records.length}):\n\n${header}\n${separator}\n${rows.join('\n')}`);
169
+ }
170
+ catch (error) {
171
+ return toolResponse(`Debug logs ${operation} failed: ${error.message}`, true);
172
+ }
173
+ }
174
+ export const debugLogsSchema = {
175
+ operation: z.enum(['enable', 'disable', 'retrieve']),
176
+ username: z.string().describe("User's username (email) or full name. Smart search tries Username first for email-like inputs, Name for others."),
177
+ logLevel: z.enum(['NONE', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'FINE', 'FINER', 'FINEST']).describe('Debug level for enable. Default: DEBUG.').optional(),
178
+ expirationTime: z.number().describe('Minutes until trace flag expires. Default: 30.').optional(),
179
+ limit: z.number().describe('Max logs to retrieve. Default: 10.').optional(),
180
+ logId: z.string().describe('Specific log ID to retrieve.').optional(),
181
+ includeBody: z.boolean().describe('Include full log body when retrieving by logId. Default: false.').optional(),
182
+ };
183
+ export const debugLogsDescriptor = {
184
+ name: 'salesforce_debug_logs',
185
+ description: debugLogsTool.description,
186
+ schema: debugLogsSchema,
187
+ handler: handleDebugLogs,
188
+ };
189
+ //# sourceMappingURL=debugLogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debugLogs.js","sourceRoot":"","sources":["../../src/tools/debugLogs.ts"],"names":[],"mappings":"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"}