@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.
- package/README.md +0 -0
- package/dist/apps/gitDiffReview/gitDiffParser.d.ts +6 -0
- package/dist/apps/gitDiffReview/gitDiffParser.js +1 -0
- package/dist/apps/gitDiffReview/packageXml.d.ts +8 -0
- package/dist/apps/gitDiffReview/packageXml.js +1 -0
- package/dist/apps/gitDiffReview/tools.d.ts +42 -0
- package/dist/apps/gitDiffReview/tools.js +1 -0
- package/dist/apps/gitDiffReview/types.d.ts +19 -0
- package/dist/apps/gitDiffReview/types.js +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +193 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata-diff.html +98 -0
- package/dist/tools/aggregateQuery.d.ts +85 -0
- package/dist/tools/aggregateQuery.js +110 -0
- package/dist/tools/aggregateQuery.js.map +1 -0
- package/dist/tools/bulkExportAbort.d.ts +37 -0
- package/dist/tools/bulkExportAbort.js +44 -0
- package/dist/tools/bulkExportAbort.js.map +1 -0
- package/dist/tools/bulkExportResults.d.ts +51 -0
- package/dist/tools/bulkExportResults.js +76 -0
- package/dist/tools/bulkExportResults.js.map +1 -0
- package/dist/tools/bulkExportStart.d.ts +61 -0
- package/dist/tools/bulkExportStart.js +68 -0
- package/dist/tools/bulkExportStart.js.map +1 -0
- package/dist/tools/bulkExportStatus.d.ts +37 -0
- package/dist/tools/bulkExportStatus.js +54 -0
- package/dist/tools/bulkExportStatus.js.map +1 -0
- package/dist/tools/crossObjectSearch.d.ts +155 -0
- package/dist/tools/crossObjectSearch.js +145 -0
- package/dist/tools/crossObjectSearch.js.map +1 -0
- package/dist/tools/debugLogs.d.ts +106 -0
- package/dist/tools/debugLogs.js +189 -0
- package/dist/tools/debugLogs.js.map +1 -0
- package/dist/tools/deployMetadata.d.ts +60 -0
- package/dist/tools/deployMetadata.js +106 -0
- package/dist/tools/deployMetadata.js.map +1 -0
- package/dist/tools/deployPackage.d.ts +49 -0
- package/dist/tools/deployPackage.js +1 -0
- package/dist/tools/dml.d.ts +70 -0
- package/dist/tools/dml.js +105 -0
- package/dist/tools/dml.js.map +1 -0
- package/dist/tools/dmlDelete.d.ts +51 -0
- package/dist/tools/dmlDelete.js +71 -0
- package/dist/tools/dmlDelete.js.map +1 -0
- package/dist/tools/executeAnonymous.d.ts +63 -0
- package/dist/tools/executeAnonymous.js +77 -0
- package/dist/tools/executeAnonymous.js.map +1 -0
- package/dist/tools/fieldManagement.d.ts +222 -0
- package/dist/tools/fieldManagement.js +234 -0
- package/dist/tools/fieldManagement.js.map +1 -0
- package/dist/tools/fieldPermissions.d.ts +94 -0
- package/dist/tools/fieldPermissions.js +191 -0
- package/dist/tools/fieldPermissions.js.map +1 -0
- package/dist/tools/getDependencies.d.ts +58 -0
- package/dist/tools/getDependencies.js +105 -0
- package/dist/tools/getDependencies.js.map +1 -0
- package/dist/tools/listUserPermissions.d.ts +36 -0
- package/dist/tools/listUserPermissions.js +59 -0
- package/dist/tools/listUserPermissions.js.map +1 -0
- package/dist/tools/metadataDescribe.d.ts +37 -0
- package/dist/tools/metadataDescribe.js +35 -0
- package/dist/tools/metadataDescribe.js.map +1 -0
- package/dist/tools/metadataDiff.d.ts +66 -0
- package/dist/tools/metadataDiff.js +215 -0
- package/dist/tools/metadataDiff.js.map +1 -0
- package/dist/tools/metadataDiffFileDetail.d.ts +44 -0
- package/dist/tools/metadataDiffFileDetail.js +84 -0
- package/dist/tools/metadataDiffFileDetail.js.map +1 -0
- package/dist/tools/metadataDiffFiles.d.ts +37 -0
- package/dist/tools/metadataDiffFiles.js +72 -0
- package/dist/tools/metadataDiffFiles.js.map +1 -0
- package/dist/tools/metadataDiffGeneratePackage.d.ts +73 -0
- package/dist/tools/metadataDiffGeneratePackage.js +122 -0
- package/dist/tools/metadataDiffGeneratePackage.js.map +1 -0
- package/dist/tools/metadataImport.d.ts +63 -0
- package/dist/tools/metadataImport.js +122 -0
- package/dist/tools/metadataImport.js.map +1 -0
- package/dist/tools/metadataJobStatus.d.ts +44 -0
- package/dist/tools/metadataJobStatus.js +101 -0
- package/dist/tools/metadataJobStatus.js.map +1 -0
- package/dist/tools/metadataList.d.ts +44 -0
- package/dist/tools/metadataList.js +49 -0
- package/dist/tools/metadataList.js.map +1 -0
- package/dist/tools/metadataRead.d.ts +47 -0
- package/dist/tools/metadataRead.js +52 -0
- package/dist/tools/metadataRead.js.map +1 -0
- package/dist/tools/metadataTypeSchema.d.ts +44 -0
- package/dist/tools/metadataTypeSchema.js +101 -0
- package/dist/tools/metadataTypeSchema.js.map +1 -0
- package/dist/tools/metadataWsdl.d.ts +19 -0
- package/dist/tools/metadataWsdl.js +1 -0
- package/dist/tools/objectManagement.d.ts +107 -0
- package/dist/tools/objectManagement.js +123 -0
- package/dist/tools/objectManagement.js.map +1 -0
- package/dist/tools/objectPermissions.d.ts +101 -0
- package/dist/tools/objectPermissions.js +157 -0
- package/dist/tools/objectPermissions.js.map +1 -0
- package/dist/tools/objectSchema.d.ts +37 -0
- package/dist/tools/objectSchema.js +66 -0
- package/dist/tools/objectSchema.js.map +1 -0
- package/dist/tools/objectSearch.d.ts +37 -0
- package/dist/tools/objectSearch.js +44 -0
- package/dist/tools/objectSearch.js.map +1 -0
- package/dist/tools/packageStatus.d.ts +24 -0
- package/dist/tools/packageStatus.js +1 -0
- package/dist/tools/permissionSetAssignment.d.ts +39 -0
- package/dist/tools/permissionSetAssignment.js +1 -0
- package/dist/tools/readApexClasses.d.ts +50 -0
- package/dist/tools/readApexClasses.js +83 -0
- package/dist/tools/readApexClasses.js.map +1 -0
- package/dist/tools/readApexTriggers.d.ts +50 -0
- package/dist/tools/readApexTriggers.js +82 -0
- package/dist/tools/readApexTriggers.js.map +1 -0
- package/dist/tools/recordPicker.d.ts +48 -0
- package/dist/tools/recordPicker.js +1 -0
- package/dist/tools/recordQuery.d.ts +68 -0
- package/dist/tools/recordQuery.js +131 -0
- package/dist/tools/recordQuery.js.map +1 -0
- package/dist/tools/retrieveJobStatus.d.ts +51 -0
- package/dist/tools/retrieveJobStatus.js +192 -0
- package/dist/tools/retrieveJobStatus.js.map +1 -0
- package/dist/tools/retrieveMetadata.d.ts +79 -0
- package/dist/tools/retrieveMetadata.js +225 -0
- package/dist/tools/retrieveMetadata.js.map +1 -0
- package/dist/tools/retrievePackage.d.ts +37 -0
- package/dist/tools/retrievePackage.js +1 -0
- package/dist/tools/salesforceLogin.d.ts +36 -0
- package/dist/tools/salesforceLogin.js +75 -0
- package/dist/tools/salesforceLogin.js.map +1 -0
- package/dist/tools/selectOrg.d.ts +25 -0
- package/dist/tools/selectOrg.js +91 -0
- package/dist/tools/selectOrg.js.map +1 -0
- package/dist/tools/toolingQuery.d.ts +37 -0
- package/dist/tools/toolingQuery.js +54 -0
- package/dist/tools/toolingQuery.js.map +1 -0
- package/dist/tools/userPermissions.d.ts +76 -0
- package/dist/tools/userPermissions.js +130 -0
- package/dist/tools/userPermissions.js.map +1 -0
- package/dist/tools/versionMetadataComplete.d.ts +45 -0
- package/dist/tools/versionMetadataComplete.js +1 -0
- package/dist/tools/versionMetadataStart.d.ts +25 -0
- package/dist/tools/versionMetadataStart.js +1 -0
- package/dist/tools/versionMetadataStatus.d.ts +25 -0
- package/dist/tools/versionMetadataStatus.js +1 -0
- package/dist/tools/writeApexClasses.d.ts +64 -0
- package/dist/tools/writeApexClasses.js +79 -0
- package/dist/tools/writeApexClasses.js.map +1 -0
- package/dist/tools/writeApexTriggers.d.ts +71 -0
- package/dist/tools/writeApexTriggers.js +96 -0
- package/dist/tools/writeApexTriggers.js.map +1 -0
- package/dist/types/connection.d.ts +20 -0
- package/dist/types/connection.js +9 -0
- package/dist/types/connection.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/metadata.d.ts +44 -0
- package/dist/types/metadata.js +2 -0
- package/dist/types/metadata.js.map +1 -0
- package/dist/types/salesforce.d.ts +38 -0
- package/dist/types/salesforce.js +2 -0
- package/dist/types/salesforce.js.map +1 -0
- package/dist/utils/apexContainer.d.ts +18 -0
- package/dist/utils/apexContainer.js +79 -0
- package/dist/utils/apexContainer.js.map +1 -0
- package/dist/utils/connection.d.ts +3 -0
- package/dist/utils/connection.js +135 -0
- package/dist/utils/connection.js.map +1 -0
- package/dist/utils/decomposePermissions.d.ts +16 -0
- package/dist/utils/decomposePermissions.js +188 -0
- package/dist/utils/decomposePermissions.js.map +1 -0
- package/dist/utils/dxPathMapper.d.ts +16 -0
- package/dist/utils/dxPathMapper.js +217 -0
- package/dist/utils/dxPathMapper.js.map +1 -0
- package/dist/utils/errors.d.ts +8 -0
- package/dist/utils/errors.js +40 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/oauthWebFlow.d.ts +8 -0
- package/dist/utils/oauthWebFlow.js +172 -0
- package/dist/utils/oauthWebFlow.js.map +1 -0
- package/dist/utils/packageJobs.d.ts +17 -0
- package/dist/utils/packageJobs.js +1 -0
- package/dist/utils/packageXml.d.ts +18 -0
- package/dist/utils/packageXml.js +1 -0
- package/dist/utils/permissionSetResolver.d.ts +14 -0
- package/dist/utils/permissionSetResolver.js +1 -0
- package/dist/utils/preSelectMatcher.d.ts +18 -0
- package/dist/utils/preSelectMatcher.js +1 -0
- package/dist/utils/profileCleanup.d.ts +18 -0
- package/dist/utils/profileCleanup.js +1 -0
- package/dist/utils/retrieveStore.d.ts +12 -0
- package/dist/utils/retrieveStore.js +1 -0
- package/dist/utils/sfCli.d.ts +18 -0
- package/dist/utils/sfCli.js +130 -0
- package/dist/utils/sfCli.js.map +1 -0
- package/dist/utils/tokenBroker.d.ts +13 -0
- package/dist/utils/tokenBroker.js +73 -0
- package/dist/utils/tokenBroker.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { toolResponse } from '../utils/index.js';
|
|
5
|
+
export const metadataDiffGeneratePackageTool = {
|
|
6
|
+
name: 'salesforce_generate_diff_package',
|
|
7
|
+
description: 'Generate package.xml from selected metadata components for deployment. ' +
|
|
8
|
+
'Used by the metadata diff UI to create a deployment manifest from user-selected components.',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {
|
|
12
|
+
workingDir: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
description: 'The working directory containing source/ and target/ subdirs from a metadata diff',
|
|
15
|
+
},
|
|
16
|
+
selectedComponents: {
|
|
17
|
+
type: 'array',
|
|
18
|
+
items: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {
|
|
21
|
+
metadataType: { type: 'string' },
|
|
22
|
+
componentName: { type: 'string' },
|
|
23
|
+
},
|
|
24
|
+
required: ['metadataType', 'componentName'],
|
|
25
|
+
},
|
|
26
|
+
description: 'Components to include in the package.xml',
|
|
27
|
+
},
|
|
28
|
+
apiVersion: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: 'Salesforce API version (default: 62.0)',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
required: ['workingDir', 'selectedComponents'],
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
// Maps decomposed permission types back to their parent Metadata API type.
|
|
37
|
+
// Selecting individual permissions still deploys the whole parent Profile/PermissionSet.
|
|
38
|
+
const DECOMPOSED_PARENT_TYPES = {
|
|
39
|
+
ProfileFieldPermission: 'Profile', ProfileObjectPermission: 'Profile',
|
|
40
|
+
ProfileClassAccess: 'Profile', ProfilePageAccess: 'Profile',
|
|
41
|
+
ProfileRecordTypeVisibility: 'Profile', ProfileTabVisibility: 'Profile',
|
|
42
|
+
ProfileUserPermission: 'Profile', ProfileApplicationVisibility: 'Profile',
|
|
43
|
+
ProfileFlowAccess: 'Profile', ProfileLayoutAssignment: 'Profile',
|
|
44
|
+
ProfileCustomPermission: 'Profile',
|
|
45
|
+
PermissionSetFieldPermission: 'PermissionSet', PermissionSetObjectPermission: 'PermissionSet',
|
|
46
|
+
PermissionSetClassAccess: 'PermissionSet', PermissionSetPageAccess: 'PermissionSet',
|
|
47
|
+
PermissionSetRecordTypeVisibility: 'PermissionSet', PermissionSetTabVisibility: 'PermissionSet',
|
|
48
|
+
PermissionSetUserPermission: 'PermissionSet', PermissionSetApplicationVisibility: 'PermissionSet',
|
|
49
|
+
PermissionSetFlowAccess: 'PermissionSet', PermissionSetCustomPermission: 'PermissionSet',
|
|
50
|
+
};
|
|
51
|
+
export async function handleMetadataDiffGeneratePackage(args) {
|
|
52
|
+
const { workingDir, selectedComponents, apiVersion = '62.0' } = args;
|
|
53
|
+
if (!selectedComponents || selectedComponents.length === 0) {
|
|
54
|
+
return toolResponse('No components selected for package generation.', true);
|
|
55
|
+
}
|
|
56
|
+
// Group by metadata type, using Sets to deduplicate (important for decomposed types where
|
|
57
|
+
// multiple permissions from the same Profile/PermissionSet roll up to the same parent name)
|
|
58
|
+
const grouped = new Map();
|
|
59
|
+
for (const comp of selectedComponents) {
|
|
60
|
+
const parentType = DECOMPOSED_PARENT_TYPES[comp.metadataType];
|
|
61
|
+
if (parentType) {
|
|
62
|
+
// Roll up: extract parent name (e.g. "Admin/Account.Name" → "Admin")
|
|
63
|
+
const parentName = comp.componentName.split('/')[0];
|
|
64
|
+
if (!grouped.has(parentType))
|
|
65
|
+
grouped.set(parentType, new Set());
|
|
66
|
+
grouped.get(parentType).add(parentName);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
if (!grouped.has(comp.metadataType))
|
|
70
|
+
grouped.set(comp.metadataType, new Set());
|
|
71
|
+
grouped.get(comp.metadataType).add(comp.componentName);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Build package.xml
|
|
75
|
+
const xmlLines = [
|
|
76
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
77
|
+
'<Package xmlns="http://soap.sforce.com/2006/04/metadata">',
|
|
78
|
+
];
|
|
79
|
+
for (const [type, memberSet] of [...grouped].sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
80
|
+
xmlLines.push(' <types>');
|
|
81
|
+
for (const member of [...memberSet].sort()) {
|
|
82
|
+
xmlLines.push(` <members>${escapeXml(member)}</members>`);
|
|
83
|
+
}
|
|
84
|
+
xmlLines.push(` <name>${escapeXml(type)}</name>`);
|
|
85
|
+
xmlLines.push(' </types>');
|
|
86
|
+
}
|
|
87
|
+
xmlLines.push(` <version>${escapeXml(apiVersion)}</version>`);
|
|
88
|
+
xmlLines.push('</Package>');
|
|
89
|
+
const xml = xmlLines.join('\n');
|
|
90
|
+
const outputPath = join(workingDir, 'source', 'package.xml');
|
|
91
|
+
try {
|
|
92
|
+
writeFileSync(outputPath, xml, 'utf-8');
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
return toolResponse(`Failed to write package.xml: ${err.message}`, true);
|
|
96
|
+
}
|
|
97
|
+
return toolResponse(`Package.xml written to ${outputPath}\n\n${xml}`);
|
|
98
|
+
}
|
|
99
|
+
function escapeXml(str) {
|
|
100
|
+
return str
|
|
101
|
+
.replace(/&/g, '&')
|
|
102
|
+
.replace(/</g, '<')
|
|
103
|
+
.replace(/>/g, '>')
|
|
104
|
+
.replace(/"/g, '"')
|
|
105
|
+
.replace(/'/g, ''');
|
|
106
|
+
}
|
|
107
|
+
export const metadataDiffGeneratePackageSchema = {
|
|
108
|
+
workingDir: z.string().describe('The working directory containing source/ and target/ subdirs from a metadata diff'),
|
|
109
|
+
selectedComponents: z.array(z.object({
|
|
110
|
+
metadataType: z.string().describe('Metadata API type name'),
|
|
111
|
+
componentName: z.string().describe('Component full name'),
|
|
112
|
+
})).describe('Components to include in the package.xml'),
|
|
113
|
+
apiVersion: z.string().describe('Salesforce API version (default: 62.0)').optional(),
|
|
114
|
+
};
|
|
115
|
+
export const metadataDiffGeneratePackageDescriptor = {
|
|
116
|
+
name: 'salesforce_generate_diff_package',
|
|
117
|
+
description: metadataDiffGeneratePackageTool.description,
|
|
118
|
+
schema: metadataDiffGeneratePackageSchema,
|
|
119
|
+
handler: handleMetadataDiffGeneratePackage,
|
|
120
|
+
noConnection: true,
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=metadataDiffGeneratePackage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadataDiffGeneratePackage.js","sourceRoot":"","sources":["../../src/tools/metadataDiffGeneratePackage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Connection } from 'jsforce';
|
|
2
|
+
import { z } from 'zod/v4';
|
|
3
|
+
export declare const metadataImportTool: {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object";
|
|
8
|
+
properties: {
|
|
9
|
+
operation: {
|
|
10
|
+
type: string;
|
|
11
|
+
enum: string[];
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
metadataType: {
|
|
15
|
+
type: string;
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
metadata: {
|
|
19
|
+
type: string;
|
|
20
|
+
items: {
|
|
21
|
+
type: string;
|
|
22
|
+
};
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
required: string[];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export interface MetadataImportArgs {
|
|
30
|
+
operation: 'create' | 'update' | 'upsert';
|
|
31
|
+
metadataType: string;
|
|
32
|
+
metadata: Record<string, unknown>[];
|
|
33
|
+
}
|
|
34
|
+
export declare function handleMetadataImport(conn: Connection, args: MetadataImportArgs): Promise<{
|
|
35
|
+
content: {
|
|
36
|
+
type: "text";
|
|
37
|
+
text: string;
|
|
38
|
+
}[];
|
|
39
|
+
isError: boolean;
|
|
40
|
+
}>;
|
|
41
|
+
export declare const metadataImportSchema: {
|
|
42
|
+
operation: z.ZodEnum<{
|
|
43
|
+
update: "update";
|
|
44
|
+
upsert: "upsert";
|
|
45
|
+
create: "create";
|
|
46
|
+
}>;
|
|
47
|
+
metadataType: z.ZodString;
|
|
48
|
+
metadata: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
49
|
+
};
|
|
50
|
+
export declare const metadataImportDescriptor: {
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
schema: {
|
|
54
|
+
operation: z.ZodEnum<{
|
|
55
|
+
update: "update";
|
|
56
|
+
upsert: "upsert";
|
|
57
|
+
create: "create";
|
|
58
|
+
}>;
|
|
59
|
+
metadataType: z.ZodString;
|
|
60
|
+
metadata: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
61
|
+
};
|
|
62
|
+
handler: typeof handleMetadataImport;
|
|
63
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { toolResponse } from '../utils/index.js';
|
|
3
|
+
export const metadataImportTool = {
|
|
4
|
+
name: 'salesforce_metadata_import',
|
|
5
|
+
description: 'Create, update, or upsert Salesforce metadata components. Use salesforce_get_metadata_type_schema first to understand the required payload structure for the metadata type. Supports single or batch operations.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
operation: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
enum: ['create', 'update', 'upsert'],
|
|
12
|
+
description: 'The operation to perform on the metadata components.',
|
|
13
|
+
},
|
|
14
|
+
metadataType: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
description: 'The metadata type (e.g. "CustomObject", "ValidationRule", "Flow").',
|
|
17
|
+
},
|
|
18
|
+
metadata: {
|
|
19
|
+
type: 'array',
|
|
20
|
+
items: { type: 'object' },
|
|
21
|
+
description: 'Array of metadata payloads matching the type\'s schema. Each object must include fullName.',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
required: ['operation', 'metadataType', 'metadata'],
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
function formatImportResults(operation, results) {
|
|
28
|
+
const successes = results.filter(r => r.success);
|
|
29
|
+
const failures = results.filter(r => !r.success);
|
|
30
|
+
const isUpsert = operation === 'upsert';
|
|
31
|
+
let createdCount = 0;
|
|
32
|
+
let updatedCount = 0;
|
|
33
|
+
if (isUpsert) {
|
|
34
|
+
for (const r of successes) {
|
|
35
|
+
if (r.created)
|
|
36
|
+
createdCount++;
|
|
37
|
+
else
|
|
38
|
+
updatedCount++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const parts = [];
|
|
42
|
+
// Summary line
|
|
43
|
+
let summary = `${operation} results: ${successes.length} succeeded`;
|
|
44
|
+
if (isUpsert && successes.length > 0) {
|
|
45
|
+
summary += ` (${createdCount} created, ${updatedCount} updated)`;
|
|
46
|
+
}
|
|
47
|
+
summary += `, ${failures.length} failed`;
|
|
48
|
+
parts.push(summary);
|
|
49
|
+
// Successes
|
|
50
|
+
if (successes.length > 0) {
|
|
51
|
+
parts.push('\nSuccesses:');
|
|
52
|
+
for (const r of successes) {
|
|
53
|
+
let line = ` - ${r.fullName}`;
|
|
54
|
+
if (isUpsert) {
|
|
55
|
+
line += r.created ? ' (created)' : ' (updated)';
|
|
56
|
+
}
|
|
57
|
+
parts.push(line);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Failures
|
|
61
|
+
if (failures.length > 0) {
|
|
62
|
+
parts.push('\nErrors:');
|
|
63
|
+
for (const r of failures) {
|
|
64
|
+
const errorDetails = formatResultErrors(r);
|
|
65
|
+
parts.push(` - ${r.fullName}: ${errorDetails}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return parts.join('\n');
|
|
69
|
+
}
|
|
70
|
+
function formatResultErrors(result) {
|
|
71
|
+
if (!result.errors)
|
|
72
|
+
return 'Unknown error';
|
|
73
|
+
const errors = Array.isArray(result.errors) ? result.errors : [result.errors];
|
|
74
|
+
return errors.map((err) => {
|
|
75
|
+
if (typeof err === 'string')
|
|
76
|
+
return err;
|
|
77
|
+
const fields = err.fields ? ` (fields: ${Array.isArray(err.fields) ? err.fields.join(', ') : err.fields})` : '';
|
|
78
|
+
const code = err.statusCode ? `[${err.statusCode}] ` : '';
|
|
79
|
+
return `${code}${err.message || 'Unknown error'}${fields}`;
|
|
80
|
+
}).join('; ');
|
|
81
|
+
}
|
|
82
|
+
export async function handleMetadataImport(conn, args) {
|
|
83
|
+
const { operation, metadataType, metadata } = args;
|
|
84
|
+
if (!metadata || !Array.isArray(metadata) || metadata.length === 0) {
|
|
85
|
+
return toolResponse('metadata must be a non-empty array', true);
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
let result;
|
|
89
|
+
switch (operation) {
|
|
90
|
+
case 'create':
|
|
91
|
+
result = await conn.metadata.create(metadataType, metadata);
|
|
92
|
+
break;
|
|
93
|
+
case 'update':
|
|
94
|
+
result = await conn.metadata.update(metadataType, metadata);
|
|
95
|
+
break;
|
|
96
|
+
case 'upsert':
|
|
97
|
+
result = await conn.metadata.upsert(metadataType, metadata);
|
|
98
|
+
break;
|
|
99
|
+
default:
|
|
100
|
+
return toolResponse(`Invalid operation: ${operation}. Must be create, update, or upsert.`, true);
|
|
101
|
+
}
|
|
102
|
+
const results = Array.isArray(result) ? result : [result];
|
|
103
|
+
const output = formatImportResults(operation, results);
|
|
104
|
+
const hasFailures = results.some(r => !r.success);
|
|
105
|
+
return toolResponse(output, hasFailures);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return toolResponse(`Metadata ${operation} failed: ${error.message}`, true);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export const metadataImportSchema = {
|
|
112
|
+
operation: z.enum(['create', 'update', 'upsert']).describe('The operation to perform on the metadata components.'),
|
|
113
|
+
metadataType: z.string().describe('The metadata type (e.g. "CustomObject", "ValidationRule", "Flow").'),
|
|
114
|
+
metadata: z.array(z.record(z.string(), z.any())).describe('Array of metadata payloads matching the type\'s schema. Each object must include fullName.'),
|
|
115
|
+
};
|
|
116
|
+
export const metadataImportDescriptor = {
|
|
117
|
+
name: 'salesforce_metadata_import',
|
|
118
|
+
description: metadataImportTool.description,
|
|
119
|
+
schema: metadataImportSchema,
|
|
120
|
+
handler: handleMetadataImport,
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=metadataImport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadataImport.js","sourceRoot":"","sources":["../../src/tools/metadataImport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Connection } from 'jsforce';
|
|
2
|
+
import { z } from 'zod/v4';
|
|
3
|
+
export declare const deployJobStatusTool: {
|
|
4
|
+
name: "salesforce_deploy_job_status";
|
|
5
|
+
description: string;
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object";
|
|
8
|
+
properties: {
|
|
9
|
+
jobId: {
|
|
10
|
+
type: string;
|
|
11
|
+
description: string;
|
|
12
|
+
};
|
|
13
|
+
projectDir: {
|
|
14
|
+
type: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
required: string[];
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export interface DeployJobStatusArgs {
|
|
22
|
+
jobId: string;
|
|
23
|
+
projectDir: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function handleDeployJobStatus(conn: Connection, args: DeployJobStatusArgs): Promise<{
|
|
26
|
+
content: {
|
|
27
|
+
type: "text";
|
|
28
|
+
text: string;
|
|
29
|
+
}[];
|
|
30
|
+
isError: boolean;
|
|
31
|
+
}>;
|
|
32
|
+
export declare const deployJobStatusSchema: {
|
|
33
|
+
jobId: z.ZodString;
|
|
34
|
+
projectDir: z.ZodString;
|
|
35
|
+
};
|
|
36
|
+
export declare const deployJobStatusDescriptor: {
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
schema: {
|
|
40
|
+
jobId: z.ZodString;
|
|
41
|
+
projectDir: z.ZodString;
|
|
42
|
+
};
|
|
43
|
+
handler: typeof handleDeployJobStatus;
|
|
44
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { toolResponse } from '../utils/index.js';
|
|
3
|
+
import { authenticateOrg, runSfCli, ensureSfCli, } from '../utils/sfCli.js';
|
|
4
|
+
export const deployJobStatusTool = {
|
|
5
|
+
name: 'salesforce_deploy_job_status',
|
|
6
|
+
description: 'Check the status of an async metadata deploy job. ' +
|
|
7
|
+
'Use after salesforce_deploy_metadata returns a job ID.',
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
jobId: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description: 'The job ID returned by the deploy command',
|
|
14
|
+
},
|
|
15
|
+
projectDir: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'The project directory from the original deploy command',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
required: ['jobId', 'projectDir'],
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export async function handleDeployJobStatus(conn, args) {
|
|
24
|
+
try {
|
|
25
|
+
await ensureSfCli();
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
return toolResponse(err.message, true);
|
|
29
|
+
}
|
|
30
|
+
const { jobId, projectDir } = args;
|
|
31
|
+
// Authenticate the org
|
|
32
|
+
let alias;
|
|
33
|
+
try {
|
|
34
|
+
alias = await authenticateOrg(conn);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
return toolResponse(`Authentication failed: ${err.message}`, true);
|
|
38
|
+
}
|
|
39
|
+
// Build report command
|
|
40
|
+
const cliArgs = [
|
|
41
|
+
'project', 'deploy', 'report',
|
|
42
|
+
'--job-id', jobId,
|
|
43
|
+
'--target-org', alias,
|
|
44
|
+
'--json',
|
|
45
|
+
];
|
|
46
|
+
const result = await runSfCli(cliArgs, { timeout: 60 * 1000, cwd: projectDir });
|
|
47
|
+
const json = result.jsonOutput;
|
|
48
|
+
const status = json?.result?.status || json?.status;
|
|
49
|
+
// Terminal success
|
|
50
|
+
if (status === 'Succeeded' || status === 'SucceededPartial') {
|
|
51
|
+
const deployed = json?.result?.files || json?.result?.details?.componentSuccesses || [];
|
|
52
|
+
const deployedCount = Array.isArray(deployed) ? deployed.length : 0;
|
|
53
|
+
const testResults = json?.result?.details?.runTestResult;
|
|
54
|
+
const lines = [
|
|
55
|
+
`Deploy ${status === 'SucceededPartial' ? 'partially completed' : 'completed successfully'}.`,
|
|
56
|
+
`Status: ${status}`,
|
|
57
|
+
`Components deployed: ${deployedCount}`,
|
|
58
|
+
];
|
|
59
|
+
if (testResults) {
|
|
60
|
+
const passed = testResults.numTestsRun ?? 0;
|
|
61
|
+
const failed = testResults.numFailures ?? 0;
|
|
62
|
+
lines.push(`Tests run: ${passed}, Failures: ${failed}`);
|
|
63
|
+
}
|
|
64
|
+
return toolResponse(lines.join('\n'));
|
|
65
|
+
}
|
|
66
|
+
// Terminal failure
|
|
67
|
+
if (status === 'Failed') {
|
|
68
|
+
const lines = [`Deploy failed.`, `Status: ${status}`];
|
|
69
|
+
const failures = json?.result?.details?.componentFailures;
|
|
70
|
+
if (Array.isArray(failures) && failures.length > 0) {
|
|
71
|
+
lines.push('', 'Component failures:');
|
|
72
|
+
for (const f of failures.slice(0, 50)) {
|
|
73
|
+
lines.push(` ${f.componentType}/${f.fullName}: ${f.problem}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const testFailures = json?.result?.details?.runTestResult?.failures;
|
|
77
|
+
if (Array.isArray(testFailures) && testFailures.length > 0) {
|
|
78
|
+
lines.push('', 'Test failures:');
|
|
79
|
+
for (const t of testFailures.slice(0, 50)) {
|
|
80
|
+
lines.push(` ${t.name}.${t.methodName}: ${t.message}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (lines.length === 2) {
|
|
84
|
+
lines.push(json?.result?.message || json?.message || result.stderr || 'Unknown error');
|
|
85
|
+
}
|
|
86
|
+
return toolResponse(lines.join('\n'), true);
|
|
87
|
+
}
|
|
88
|
+
// Still in progress
|
|
89
|
+
return toolResponse(`Deploy in progress.\nStatus: ${status || 'Unknown'}\n\nPoll again with salesforce_deploy_job_status to check progress.`);
|
|
90
|
+
}
|
|
91
|
+
export const deployJobStatusSchema = {
|
|
92
|
+
jobId: z.string().describe('The job ID returned by the deploy command'),
|
|
93
|
+
projectDir: z.string().describe('The project directory from the original deploy command'),
|
|
94
|
+
};
|
|
95
|
+
export const deployJobStatusDescriptor = {
|
|
96
|
+
name: 'salesforce_deploy_job_status',
|
|
97
|
+
description: deployJobStatusTool.description,
|
|
98
|
+
schema: deployJobStatusSchema,
|
|
99
|
+
handler: handleDeployJobStatus,
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=metadataJobStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadataJobStatus.js","sourceRoot":"","sources":["../../src/tools/metadataJobStatus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,QAAQ,EACR,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,8BAAuC;IAC7C,WAAW,EACT,oDAAoD;QACpD,wDAAwD;IAC1D,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2CAA2C;aACzD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;KAClC;CACF,CAAC;AAOF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAgB,EAChB,IAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAEnC,uBAAuB;IACvB,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,YAAY,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,uBAAuB;IACvB,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,QAAQ,EAAE,QAAQ;QAC7B,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,QAAQ;KACT,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IAEhF,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,CAAC;IAEpD,mBAAmB;IACnB,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,IAAI,EAAE,CAAC;QACxF,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;QAEzD,MAAM,KAAK,GAAG;YACZ,UAAU,MAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,wBAAwB,GAAG;YAC7F,WAAW,MAAM,EAAE;YACnB,wBAAwB,aAAa,EAAE;SACxC,CAAC;QAEF,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,IAAI,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,IAAI,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,eAAe,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,KAAK,GAAa,CAAC,gBAAgB,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;QAEhE,MAAM,QAAQ,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC;QAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC;QACpE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,oBAAoB;IACpB,OAAO,YAAY,CACjB,gCAAgC,MAAM,IAAI,SAAS,qEAAqE,CACzH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;CAC1F,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EAAE,mBAAmB,CAAC,WAAW;IAC5C,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,qBAAqB;CAC/B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Connection } from 'jsforce';
|
|
2
|
+
import { z } from 'zod/v4';
|
|
3
|
+
export declare const metadataListTool: {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object";
|
|
8
|
+
properties: {
|
|
9
|
+
metadataType: {
|
|
10
|
+
type: string;
|
|
11
|
+
description: string;
|
|
12
|
+
};
|
|
13
|
+
folder: {
|
|
14
|
+
type: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
required: string[];
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export interface MetadataListArgs {
|
|
22
|
+
metadataType: string;
|
|
23
|
+
folder?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function handleMetadataList(conn: Connection, args: MetadataListArgs): Promise<{
|
|
26
|
+
content: {
|
|
27
|
+
type: "text";
|
|
28
|
+
text: string;
|
|
29
|
+
}[];
|
|
30
|
+
isError: boolean;
|
|
31
|
+
}>;
|
|
32
|
+
export declare const metadataListSchema: {
|
|
33
|
+
metadataType: z.ZodString;
|
|
34
|
+
folder: z.ZodOptional<z.ZodString>;
|
|
35
|
+
};
|
|
36
|
+
export declare const metadataListDescriptor: {
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
schema: {
|
|
40
|
+
metadataType: z.ZodString;
|
|
41
|
+
folder: z.ZodOptional<z.ZodString>;
|
|
42
|
+
};
|
|
43
|
+
handler: typeof handleMetadataList;
|
|
44
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { toolResponse } from '../utils/index.js';
|
|
3
|
+
export const metadataListTool = {
|
|
4
|
+
name: 'salesforce_list_metadata',
|
|
5
|
+
description: 'List metadata components of a given type in the Salesforce org. Useful for org analysis — discover all validation rules, flows, approval processes, custom labels, triggers, and more. Returns summary info (fullName, id, dates) for every component of the requested type.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
metadataType: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'The metadata type to list (e.g. "ValidationRule", "Flow", "ApexClass").',
|
|
12
|
+
},
|
|
13
|
+
folder: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
description: 'Folder name, required for folder-based types like Report, Dashboard, EmailTemplate.',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
required: ['metadataType'],
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export async function handleMetadataList(conn, args) {
|
|
22
|
+
const { metadataType, folder } = args;
|
|
23
|
+
try {
|
|
24
|
+
const query = { type: metadataType };
|
|
25
|
+
if (folder) {
|
|
26
|
+
query.folder = folder;
|
|
27
|
+
}
|
|
28
|
+
const results = await conn.metadata.list([query], conn.version);
|
|
29
|
+
const items = Array.isArray(results) ? results : results ? [results] : [];
|
|
30
|
+
if (items.length === 0) {
|
|
31
|
+
return toolResponse(`No metadata components found for type: ${metadataType}`);
|
|
32
|
+
}
|
|
33
|
+
return toolResponse(`${items.length} component(s) found for type ${metadataType}:\n\n${JSON.stringify(items, null, 2)}`);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return toolResponse(`Metadata list failed: ${error.message}`, true);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export const metadataListSchema = {
|
|
40
|
+
metadataType: z.string().describe('The metadata type to list (e.g. "ValidationRule", "Flow", "ApexClass").'),
|
|
41
|
+
folder: z.string().describe('Folder name, required for folder-based types like Report, Dashboard, EmailTemplate.').optional(),
|
|
42
|
+
};
|
|
43
|
+
export const metadataListDescriptor = {
|
|
44
|
+
name: 'salesforce_list_metadata',
|
|
45
|
+
description: metadataListTool.description,
|
|
46
|
+
schema: metadataListSchema,
|
|
47
|
+
handler: handleMetadataList,
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=metadataList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadataList.js","sourceRoot":"","sources":["../../src/tools/metadataList.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,8QAA8Q;IAC3R,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yEAAyE;aACvF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qFAAqF;aACnG;SACF;QACD,QAAQ,EAAE,CAAC,cAAc,CAAC;KAC3B;CACF,CAAC;AAOF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAgB,EAAE,IAAsB;IAC/E,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,KAAK,GAAsC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QACxE,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACxB,CAAC;QAED,MAAM,OAAO,GAAG,MAAO,IAAY,CAAC,QAAQ,CAAC,IAAI,CAC/C,CAAC,KAAK,CAAC,EACN,IAAY,CAAC,OAAO,CACtB,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,YAAY,CAAC,0CAA0C,YAAY,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,YAAY,CACjB,GAAG,KAAK,CAAC,MAAM,gCAAgC,YAAY,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;IAC5G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qFAAqF,CAAC,CAAC,QAAQ,EAAE;CAC9H,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,gBAAgB,CAAC,WAAW;IACzC,MAAM,EAAE,kBAAkB;IAC1B,OAAO,EAAE,kBAAkB;CAC5B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Connection } from 'jsforce';
|
|
2
|
+
import { z } from 'zod/v4';
|
|
3
|
+
export declare const metadataReadTool: {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object";
|
|
8
|
+
properties: {
|
|
9
|
+
metadataType: {
|
|
10
|
+
type: string;
|
|
11
|
+
description: string;
|
|
12
|
+
};
|
|
13
|
+
fullNames: {
|
|
14
|
+
type: string;
|
|
15
|
+
items: {
|
|
16
|
+
type: string;
|
|
17
|
+
};
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
required: string[];
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export interface MetadataReadArgs {
|
|
25
|
+
metadataType: string;
|
|
26
|
+
fullNames: string[];
|
|
27
|
+
}
|
|
28
|
+
export declare function handleMetadataRead(conn: Connection, args: MetadataReadArgs): Promise<{
|
|
29
|
+
content: {
|
|
30
|
+
type: "text";
|
|
31
|
+
text: string;
|
|
32
|
+
}[];
|
|
33
|
+
isError: boolean;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const metadataReadSchema: {
|
|
36
|
+
metadataType: z.ZodString;
|
|
37
|
+
fullNames: z.ZodArray<z.ZodString>;
|
|
38
|
+
};
|
|
39
|
+
export declare const metadataReadDescriptor: {
|
|
40
|
+
name: string;
|
|
41
|
+
description: string;
|
|
42
|
+
schema: {
|
|
43
|
+
metadataType: z.ZodString;
|
|
44
|
+
fullNames: z.ZodArray<z.ZodString>;
|
|
45
|
+
};
|
|
46
|
+
handler: typeof handleMetadataRead;
|
|
47
|
+
};
|