@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,85 @@
1
+ import { Connection } from 'jsforce';
2
+ import { z } from 'zod/v4';
3
+ export declare const aggregateQueryTool: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ objectName: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ selectFields: {
14
+ type: string;
15
+ items: {
16
+ type: string;
17
+ };
18
+ description: string;
19
+ };
20
+ groupByFields: {
21
+ type: string;
22
+ items: {
23
+ type: string;
24
+ };
25
+ description: string;
26
+ };
27
+ whereClause: {
28
+ type: string;
29
+ description: string;
30
+ };
31
+ havingClause: {
32
+ type: string;
33
+ description: string;
34
+ };
35
+ orderBy: {
36
+ type: string;
37
+ description: string;
38
+ };
39
+ limit: {
40
+ type: string;
41
+ description: string;
42
+ };
43
+ };
44
+ required: string[];
45
+ };
46
+ };
47
+ export interface AggregateQueryArgs {
48
+ objectName: string;
49
+ selectFields: string[];
50
+ groupByFields: string[];
51
+ whereClause?: string;
52
+ havingClause?: string;
53
+ orderBy?: string;
54
+ limit?: number;
55
+ }
56
+ export declare function handleAggregateQuery(conn: Connection, args: AggregateQueryArgs): Promise<{
57
+ content: {
58
+ type: "text";
59
+ text: string;
60
+ }[];
61
+ isError: boolean;
62
+ }>;
63
+ export declare const aggregateQuerySchema: {
64
+ objectName: z.ZodString;
65
+ selectFields: z.ZodArray<z.ZodString>;
66
+ groupByFields: z.ZodArray<z.ZodString>;
67
+ whereClause: z.ZodOptional<z.ZodString>;
68
+ havingClause: z.ZodOptional<z.ZodString>;
69
+ orderBy: z.ZodOptional<z.ZodString>;
70
+ limit: z.ZodOptional<z.ZodNumber>;
71
+ };
72
+ export declare const aggregateQueryDescriptor: {
73
+ name: string;
74
+ description: string;
75
+ schema: {
76
+ objectName: z.ZodString;
77
+ selectFields: z.ZodArray<z.ZodString>;
78
+ groupByFields: z.ZodArray<z.ZodString>;
79
+ whereClause: z.ZodOptional<z.ZodString>;
80
+ havingClause: z.ZodOptional<z.ZodString>;
81
+ orderBy: z.ZodOptional<z.ZodString>;
82
+ limit: z.ZodOptional<z.ZodNumber>;
83
+ };
84
+ handler: typeof handleAggregateQuery;
85
+ };
@@ -0,0 +1,110 @@
1
+ import { z } from 'zod/v4';
2
+ import { toolResponse } from '../utils/index.js';
3
+ export const aggregateQueryTool = {
4
+ name: 'salesforce_aggregate_query',
5
+ description: 'Execute GROUP BY queries with aggregate functions (COUNT, COUNT_DISTINCT, SUM, AVG, MIN, MAX) and date functions (CALENDAR_YEAR, CALENDAR_MONTH, CALENDAR_QUARTER, FISCAL_YEAR, FISCAL_QUARTER). Use this instead of salesforce_query_records for aggregate/GROUP BY queries.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ objectName: {
10
+ type: 'string',
11
+ description: 'The Salesforce object API name.',
12
+ },
13
+ selectFields: {
14
+ type: 'array',
15
+ items: { type: 'string' },
16
+ description: 'Fields to select. Include aggregate expressions like "COUNT(Id)", "SUM(Amount)", and grouped fields.',
17
+ },
18
+ groupByFields: {
19
+ type: 'array',
20
+ items: { type: 'string' },
21
+ description: 'Fields to GROUP BY. Can include date functions like "CALENDAR_YEAR(CreatedDate)".',
22
+ },
23
+ whereClause: {
24
+ type: 'string',
25
+ description: 'Optional WHERE clause (no WHERE keyword). Must not contain aggregate functions — use havingClause instead.',
26
+ },
27
+ havingClause: {
28
+ type: 'string',
29
+ description: 'Optional HAVING clause (no HAVING keyword). Example: "COUNT(Id) > 5"',
30
+ },
31
+ orderBy: {
32
+ type: 'string',
33
+ description: 'Optional ORDER BY clause. Must reference grouped fields or aggregate expressions.',
34
+ },
35
+ limit: {
36
+ type: 'number',
37
+ description: 'Maximum number of grouped results.',
38
+ },
39
+ },
40
+ required: ['objectName', 'selectFields', 'groupByFields'],
41
+ },
42
+ };
43
+ const AGGREGATE_PATTERN = /^(COUNT|COUNT_DISTINCT|SUM|AVG|MIN|MAX)\s*\(/i;
44
+ function validate(args) {
45
+ const { selectFields, groupByFields, whereClause } = args;
46
+ const nonAggFields = selectFields.filter(f => !AGGREGATE_PATTERN.test(f));
47
+ for (const field of nonAggFields) {
48
+ if (!groupByFields.includes(field)) {
49
+ return `Field "${field}" is in SELECT but not in GROUP BY. Non-aggregate SELECT fields must appear in GROUP BY.`;
50
+ }
51
+ }
52
+ if (whereClause && AGGREGATE_PATTERN.test(whereClause)) {
53
+ return 'WHERE clause contains an aggregate function. Use HAVING clause instead for aggregate conditions.';
54
+ }
55
+ return null;
56
+ }
57
+ export async function handleAggregateQuery(conn, args) {
58
+ const { objectName, selectFields, groupByFields, whereClause, havingClause, orderBy, limit } = args;
59
+ const validationError = validate(args);
60
+ if (validationError) {
61
+ return toolResponse(validationError, true);
62
+ }
63
+ let soql = `SELECT ${selectFields.join(', ')} FROM ${objectName}`;
64
+ if (whereClause)
65
+ soql += ` WHERE ${whereClause}`;
66
+ soql += ` GROUP BY ${groupByFields.join(', ')}`;
67
+ if (havingClause)
68
+ soql += ` HAVING ${havingClause}`;
69
+ if (orderBy)
70
+ soql += ` ORDER BY ${orderBy}`;
71
+ if (limit)
72
+ soql += ` LIMIT ${limit}`;
73
+ try {
74
+ const result = await conn.query(soql);
75
+ const records = result.records || [];
76
+ if (records.length === 0) {
77
+ return toolResponse(`No results found.\n\nSOQL: ${soql}`);
78
+ }
79
+ const formatted = records.map((r, i) => {
80
+ const entries = Object.entries(r)
81
+ .filter(([key]) => key !== 'attributes')
82
+ .map(([key, value]) => `${key}: ${value}`);
83
+ return `Group ${i + 1}: ${entries.join(', ')}`;
84
+ });
85
+ return toolResponse(`${records.length} group(s) returned:\n\n${formatted.join('\n')}\n\nSOQL: ${soql}`);
86
+ }
87
+ catch (error) {
88
+ let msg = error.message || String(error);
89
+ if (msg.includes('MALFORMED_QUERY')) {
90
+ msg += '\n\nTips:\n- Ensure all non-aggregate fields are in GROUP BY\n- Use HAVING (not WHERE) for aggregate conditions\n- ORDER BY must reference grouped fields or aggregate expressions';
91
+ }
92
+ return toolResponse(`Aggregate query failed: ${msg}\n\nSOQL: ${soql}`, true);
93
+ }
94
+ }
95
+ export const aggregateQuerySchema = {
96
+ objectName: z.string().describe('The Salesforce object API name.'),
97
+ selectFields: z.array(z.string()).describe('Fields to select. Include aggregate expressions like "COUNT(Id)", "SUM(Amount)", and grouped fields.'),
98
+ groupByFields: z.array(z.string()).describe('Fields to GROUP BY. Can include date functions like "CALENDAR_YEAR(CreatedDate)".'),
99
+ whereClause: z.string().describe('Optional WHERE clause (no WHERE keyword). Must not contain aggregate functions — use havingClause instead.').optional(),
100
+ havingClause: z.string().describe('Optional HAVING clause (no HAVING keyword). Example: "COUNT(Id) > 5"').optional(),
101
+ orderBy: z.string().describe('Optional ORDER BY clause. Must reference grouped fields or aggregate expressions.').optional(),
102
+ limit: z.number().describe('Maximum number of grouped results.').optional(),
103
+ };
104
+ export const aggregateQueryDescriptor = {
105
+ name: 'salesforce_aggregate_query',
106
+ description: aggregateQueryTool.description,
107
+ schema: aggregateQuerySchema,
108
+ handler: handleAggregateQuery,
109
+ };
110
+ //# sourceMappingURL=aggregateQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregateQuery.js","sourceRoot":"","sources":["../../src/tools/aggregateQuery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Connection } from 'jsforce';
2
+ import { z } from 'zod/v4';
3
+ export declare const bulkExportAbortTool: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ jobId: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ };
14
+ required: string[];
15
+ };
16
+ };
17
+ export interface BulkExportAbortArgs {
18
+ jobId: string;
19
+ }
20
+ export declare function handleBulkExportAbort(conn: Connection, args: BulkExportAbortArgs): Promise<{
21
+ content: {
22
+ type: "text";
23
+ text: string;
24
+ }[];
25
+ isError: boolean;
26
+ }>;
27
+ export declare const bulkExportAbortSchema: {
28
+ jobId: z.ZodString;
29
+ };
30
+ export declare const bulkExportAbortDescriptor: {
31
+ name: string;
32
+ description: string;
33
+ schema: {
34
+ jobId: z.ZodString;
35
+ };
36
+ handler: typeof handleBulkExportAbort;
37
+ };
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod/v4';
2
+ import { toolResponse } from '../utils/index.js';
3
+ export const bulkExportAbortTool = {
4
+ name: 'salesforce_bulk_export_abort',
5
+ description: 'Abort a bulk export job that is in UploadComplete or InProgress state. Cannot abort jobs that are already JobComplete, Failed, or Aborted.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ jobId: {
10
+ type: 'string',
11
+ description: 'The bulk export job ID to abort.',
12
+ },
13
+ },
14
+ required: ['jobId'],
15
+ },
16
+ };
17
+ export async function handleBulkExportAbort(conn, args) {
18
+ const { jobId } = args;
19
+ try {
20
+ const job = conn.bulk2.job('query', { id: jobId });
21
+ const info = await job.check();
22
+ if (info.state !== 'UploadComplete' && info.state !== 'InProgress') {
23
+ return toolResponse(`Cannot abort job in state "${info.state}". Only UploadComplete or InProgress jobs can be aborted.`, true);
24
+ }
25
+ await job.abort();
26
+ return toolResponse(`Bulk export job aborted successfully.\n\n` +
27
+ `Job ID: ${jobId}\n` +
28
+ `Previous State: ${info.state}\n` +
29
+ `Current State: Aborted`);
30
+ }
31
+ catch (error) {
32
+ return toolResponse(`Failed to abort bulk export job: ${error.message}`, true);
33
+ }
34
+ }
35
+ export const bulkExportAbortSchema = {
36
+ jobId: z.string().describe('The bulk export job ID to abort.'),
37
+ };
38
+ export const bulkExportAbortDescriptor = {
39
+ name: 'salesforce_bulk_export_abort',
40
+ description: bulkExportAbortTool.description,
41
+ schema: bulkExportAbortSchema,
42
+ handler: handleBulkExportAbort,
43
+ };
44
+ //# sourceMappingURL=bulkExportAbort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkExportAbort.js","sourceRoot":"","sources":["../../src/tools/bulkExportAbort.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACT,4IAA4I;IAC9I,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;CACF,CAAC;AAMF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAgB,EAAE,IAAyB;IACrF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAI,IAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACnE,OAAO,YAAY,CACjB,8BAA8B,IAAI,CAAC,KAAK,2DAA2D,EACnG,IAAI,CACL,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAElB,OAAO,YAAY,CACjB,2CAA2C;YAC3C,WAAW,KAAK,IAAI;YACpB,mBAAmB,IAAI,CAAC,KAAK,IAAI;YACjC,wBAAwB,CACzB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAC/D,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,51 @@
1
+ import type { Connection } from 'jsforce';
2
+ import { z } from 'zod/v4';
3
+ export declare const bulkExportResultsTool: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ jobId: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ outputDir: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ fileName: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ };
22
+ required: string[];
23
+ };
24
+ };
25
+ export interface BulkExportResultsArgs {
26
+ jobId: string;
27
+ outputDir?: string;
28
+ fileName?: string;
29
+ }
30
+ export declare function handleBulkExportResults(conn: Connection, args: BulkExportResultsArgs): Promise<{
31
+ content: {
32
+ type: "text";
33
+ text: string;
34
+ }[];
35
+ isError: boolean;
36
+ }>;
37
+ export declare const bulkExportResultsSchema: {
38
+ jobId: z.ZodString;
39
+ outputDir: z.ZodOptional<z.ZodString>;
40
+ fileName: z.ZodOptional<z.ZodString>;
41
+ };
42
+ export declare const bulkExportResultsDescriptor: {
43
+ name: string;
44
+ description: string;
45
+ schema: {
46
+ jobId: z.ZodString;
47
+ outputDir: z.ZodOptional<z.ZodString>;
48
+ fileName: z.ZodOptional<z.ZodString>;
49
+ };
50
+ handler: typeof handleBulkExportResults;
51
+ };
@@ -0,0 +1,76 @@
1
+ import { z } from 'zod/v4';
2
+ import { toolResponse } from '../utils/index.js';
3
+ import * as fs from 'node:fs';
4
+ import * as path from 'node:path';
5
+ export const bulkExportResultsTool = {
6
+ name: 'salesforce_bulk_export_results',
7
+ description: 'Download the results of a completed bulk export job as a CSV file. The job must be in JobComplete state. Streams results to disk without buffering the full dataset in memory.',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ jobId: {
12
+ type: 'string',
13
+ description: 'The bulk export job ID (must be in JobComplete state).',
14
+ },
15
+ outputDir: {
16
+ type: 'string',
17
+ description: 'Directory to save the CSV file. Defaults to SALESFORCE_EXPORT_DIR env var or current working directory.',
18
+ },
19
+ fileName: {
20
+ type: 'string',
21
+ description: 'Custom file name for the CSV. Defaults to {ObjectName}_{timestamp}.csv.',
22
+ },
23
+ },
24
+ required: ['jobId'],
25
+ },
26
+ };
27
+ export async function handleBulkExportResults(conn, args) {
28
+ const { jobId, outputDir, fileName } = args;
29
+ try {
30
+ const job = conn.bulk2.job('query', { id: jobId });
31
+ const info = await job.check();
32
+ if (info.state !== 'JobComplete') {
33
+ return toolResponse(`Job is not complete. Current state: ${info.state}.\n` +
34
+ `Use salesforce_bulk_export_status to check progress before downloading results.`, true);
35
+ }
36
+ const dir = outputDir || process.env.SALESFORCE_EXPORT_DIR || process.cwd();
37
+ if (!fs.existsSync(dir)) {
38
+ fs.mkdirSync(dir, { recursive: true });
39
+ }
40
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
41
+ const name = fileName || `${info.object}_${timestamp}.csv`;
42
+ const filePath = path.join(dir, name);
43
+ const resultStream = await job.result();
44
+ const writeStream = fs.createWriteStream(filePath);
45
+ await new Promise((resolve, reject) => {
46
+ resultStream
47
+ .stream()
48
+ .pipe(writeStream)
49
+ .on('finish', resolve)
50
+ .on('error', reject);
51
+ resultStream.on('error', reject);
52
+ });
53
+ const stats = fs.statSync(filePath);
54
+ const fileSizeMB = (stats.size / (1024 * 1024)).toFixed(2);
55
+ return toolResponse(`Bulk export results downloaded successfully.\n\n` +
56
+ `File: ${filePath}\n` +
57
+ `Object: ${info.object}\n` +
58
+ `Records Processed: ${info.numberRecordsProcessed ?? 'N/A'}\n` +
59
+ `File Size: ${fileSizeMB} MB`);
60
+ }
61
+ catch (error) {
62
+ return toolResponse(`Failed to download bulk export results: ${error.message}`, true);
63
+ }
64
+ }
65
+ export const bulkExportResultsSchema = {
66
+ jobId: z.string().describe('The bulk export job ID (must be in JobComplete state).'),
67
+ outputDir: z.string().describe('Directory to save the CSV file. Defaults to SALESFORCE_EXPORT_DIR env var or current working directory.').optional(),
68
+ fileName: z.string().describe('Custom file name for the CSV. Defaults to {ObjectName}_{timestamp}.csv.').optional(),
69
+ };
70
+ export const bulkExportResultsDescriptor = {
71
+ name: 'salesforce_bulk_export_results',
72
+ description: bulkExportResultsTool.description,
73
+ schema: bulkExportResultsSchema,
74
+ handler: handleBulkExportResults,
75
+ };
76
+ //# sourceMappingURL=bulkExportResults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkExportResults.js","sourceRoot":"","sources":["../../src/tools/bulkExportResults.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,gCAAgC;IACtC,WAAW,EACT,gLAAgL;IAClL,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yGAAyG;aACvH;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yEAAyE;aACvF;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;CACF,CAAC;AAQF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAgB,EAAE,IAA2B;IACzF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAI,IAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACjC,OAAO,YAAY,CACjB,uCAAuC,IAAI,CAAC,KAAK,KAAK;gBACtD,iFAAiF,EACjF,IAAI,CACL,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAE5E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,QAAQ,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,MAAM,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEtC,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEnD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,YAAY;iBACT,MAAM,EAAE;iBACR,IAAI,CAAC,WAAW,CAAC;iBACjB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;iBACrB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEvB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3D,OAAO,YAAY,CACjB,kDAAkD;YAClD,SAAS,QAAQ,IAAI;YACrB,WAAW,IAAI,CAAC,MAAM,IAAI;YAC1B,sBAAsB,IAAI,CAAC,sBAAsB,IAAI,KAAK,IAAI;YAC9D,cAAc,UAAU,KAAK,CAC9B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,2CAA2C,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IACpF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yGAAyG,CAAC,CAAC,QAAQ,EAAE;IACpJ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC,CAAC,QAAQ,EAAE;CACpH,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE,qBAAqB,CAAC,WAAW;IAC9C,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,uBAAuB;CACjC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import type { Connection } from 'jsforce';
2
+ import { z } from 'zod/v4';
3
+ export declare const bulkExportStartTool: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ objectName: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ fields: {
14
+ type: string;
15
+ items: {
16
+ type: string;
17
+ };
18
+ description: string;
19
+ };
20
+ whereClause: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ includeDeleted: {
25
+ type: string;
26
+ description: string;
27
+ };
28
+ };
29
+ required: string[];
30
+ };
31
+ };
32
+ export interface BulkExportStartArgs {
33
+ objectName: string;
34
+ fields: string[];
35
+ whereClause?: string;
36
+ includeDeleted?: boolean;
37
+ }
38
+ export declare function handleBulkExportStart(conn: Connection, args: BulkExportStartArgs): Promise<{
39
+ content: {
40
+ type: "text";
41
+ text: string;
42
+ }[];
43
+ isError: boolean;
44
+ }>;
45
+ export declare const bulkExportStartSchema: {
46
+ objectName: z.ZodString;
47
+ fields: z.ZodArray<z.ZodString>;
48
+ whereClause: z.ZodOptional<z.ZodString>;
49
+ includeDeleted: z.ZodOptional<z.ZodBoolean>;
50
+ };
51
+ export declare const bulkExportStartDescriptor: {
52
+ name: string;
53
+ description: string;
54
+ schema: {
55
+ objectName: z.ZodString;
56
+ fields: z.ZodArray<z.ZodString>;
57
+ whereClause: z.ZodOptional<z.ZodString>;
58
+ includeDeleted: z.ZodOptional<z.ZodBoolean>;
59
+ };
60
+ handler: typeof handleBulkExportStart;
61
+ };
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod/v4';
2
+ import { toolResponse } from '../utils/index.js';
3
+ export const bulkExportStartTool = {
4
+ name: 'salesforce_bulk_export_start',
5
+ description: 'Start an asynchronous bulk data export using Salesforce Bulk API v2. Ideal for large datasets (100K+ records). Returns a job ID — use salesforce_bulk_export_status to poll for completion, then salesforce_bulk_export_results to download the CSV.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ objectName: {
10
+ type: 'string',
11
+ description: 'The Salesforce object API name to export (e.g. Account, Contact, CustomObj__c).',
12
+ },
13
+ fields: {
14
+ type: 'array',
15
+ items: { type: 'string' },
16
+ description: 'Fields to include in the export.',
17
+ },
18
+ whereClause: {
19
+ type: 'string',
20
+ description: 'Optional WHERE clause without the WHERE keyword. Example: "CreatedDate >= 2024-01-01T00:00:00Z"',
21
+ },
22
+ includeDeleted: {
23
+ type: 'boolean',
24
+ description: 'If true, uses queryAll to include soft-deleted and archived records. Default: false.',
25
+ },
26
+ },
27
+ required: ['objectName', 'fields'],
28
+ },
29
+ };
30
+ export async function handleBulkExportStart(conn, args) {
31
+ const { objectName, fields, whereClause, includeDeleted = false } = args;
32
+ let soql = `SELECT ${fields.join(', ')} FROM ${objectName}`;
33
+ if (whereClause)
34
+ soql += ` WHERE ${whereClause}`;
35
+ try {
36
+ const { QueryJobV2 } = await import('jsforce/lib/api/bulk2.js');
37
+ const job = new QueryJobV2(conn, {
38
+ bodyParams: {
39
+ query: soql,
40
+ operation: includeDeleted ? 'queryAll' : 'query',
41
+ },
42
+ pollingOptions: conn.bulk2,
43
+ });
44
+ const jobInfo = await job.open();
45
+ return toolResponse(`Bulk export job created successfully.\n\n` +
46
+ `Job ID: ${jobInfo.id}\n` +
47
+ `State: ${jobInfo.state}\n` +
48
+ `Object: ${objectName}\n` +
49
+ `SOQL: ${soql}\n\n` +
50
+ `Next step: Use salesforce_bulk_export_status with jobId "${jobInfo.id}" to check progress.`);
51
+ }
52
+ catch (error) {
53
+ return toolResponse(`Failed to start bulk export: ${error.message}\n\nSOQL: ${soql}`, true);
54
+ }
55
+ }
56
+ export const bulkExportStartSchema = {
57
+ objectName: z.string().describe('The Salesforce object API name to export (e.g. Account, Contact, CustomObj__c).'),
58
+ fields: z.array(z.string()).describe('Fields to include in the export.'),
59
+ whereClause: z.string().describe('Optional WHERE clause without the WHERE keyword. Example: "CreatedDate >= 2024-01-01T00:00:00Z"').optional(),
60
+ includeDeleted: z.boolean().describe('If true, uses queryAll to include soft-deleted and archived records. Default: false.').optional(),
61
+ };
62
+ export const bulkExportStartDescriptor = {
63
+ name: 'salesforce_bulk_export_start',
64
+ description: bulkExportStartTool.description,
65
+ schema: bulkExportStartSchema,
66
+ handler: handleBulkExportStart,
67
+ };
68
+ //# sourceMappingURL=bulkExportStart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkExportStart.js","sourceRoot":"","sources":["../../src/tools/bulkExportStart.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACT,sPAAsP;IACxP,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iFAAiF;aAC/F;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,kCAAkC;aAChD;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iGAAiG;aAC/G;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,sFAAsF;aACpG;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;KACnC;CACF,CAAC;AASF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAgB,EAAE,IAAyB;IACrF,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IAEzE,IAAI,IAAI,GAAG,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,UAAU,EAAE,CAAC;IAC5D,IAAI,WAAW;QAAE,IAAI,IAAI,UAAU,WAAW,EAAE,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAW,EAAE;YACtC,UAAU,EAAE;gBACV,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;aACjD;YACD,cAAc,EAAG,IAAY,CAAC,KAAK;SACpC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjC,OAAO,YAAY,CACjB,2CAA2C;YAC3C,WAAW,OAAO,CAAC,EAAE,IAAI;YACzB,UAAU,OAAO,CAAC,KAAK,IAAI;YAC3B,WAAW,UAAU,IAAI;YACzB,SAAS,IAAI,MAAM;YACnB,4DAA4D,OAAO,CAAC,EAAE,sBAAsB,CAC7F,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,gCAAgC,KAAK,CAAC,OAAO,aAAa,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iFAAiF,CAAC;IAClH,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACxE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iGAAiG,CAAC,CAAC,QAAQ,EAAE;IAC9I,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC,CAAC,QAAQ,EAAE;CACxI,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,37 @@
1
+ import type { Connection } from 'jsforce';
2
+ import { z } from 'zod/v4';
3
+ export declare const bulkExportStatusTool: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ jobId: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ };
14
+ required: string[];
15
+ };
16
+ };
17
+ export interface BulkExportStatusArgs {
18
+ jobId: string;
19
+ }
20
+ export declare function handleBulkExportStatus(conn: Connection, args: BulkExportStatusArgs): Promise<{
21
+ content: {
22
+ type: "text";
23
+ text: string;
24
+ }[];
25
+ isError: boolean;
26
+ }>;
27
+ export declare const bulkExportStatusSchema: {
28
+ jobId: z.ZodString;
29
+ };
30
+ export declare const bulkExportStatusDescriptor: {
31
+ name: string;
32
+ description: string;
33
+ schema: {
34
+ jobId: z.ZodString;
35
+ };
36
+ handler: typeof handleBulkExportStatus;
37
+ };
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod/v4';
2
+ import { toolResponse } from '../utils/index.js';
3
+ export const bulkExportStatusTool = {
4
+ name: 'salesforce_bulk_export_status',
5
+ description: 'Check the status of a bulk export job. States progress: UploadComplete → InProgress → JobComplete | Failed | Aborted. Poll this until the job reaches a terminal state, then use salesforce_bulk_export_results to download.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ jobId: {
10
+ type: 'string',
11
+ description: 'The bulk export job ID returned by salesforce_bulk_export_start.',
12
+ },
13
+ },
14
+ required: ['jobId'],
15
+ },
16
+ };
17
+ export async function handleBulkExportStatus(conn, args) {
18
+ const { jobId } = args;
19
+ try {
20
+ const job = conn.bulk2.job('query', { id: jobId });
21
+ const info = await job.check();
22
+ const lines = [
23
+ `Job ID: ${info.id}`,
24
+ `State: ${info.state}`,
25
+ `Object: ${info.object}`,
26
+ `Records Processed: ${info.numberRecordsProcessed ?? 'N/A'}`,
27
+ `Created: ${info.createdDate}`,
28
+ `System Modstamp: ${info.systemModstamp}`,
29
+ ];
30
+ if (info.state === 'Failed' && info.errorMessage) {
31
+ lines.push(`Error: ${info.errorMessage}`);
32
+ }
33
+ if (info.state === 'JobComplete') {
34
+ lines.push('', `Next step: Use salesforce_bulk_export_results with jobId "${jobId}" to download the CSV.`);
35
+ }
36
+ else if (info.state === 'InProgress' || info.state === 'UploadComplete') {
37
+ lines.push('', `Job is still processing. Poll again with salesforce_bulk_export_status.`);
38
+ }
39
+ return toolResponse(lines.join('\n'));
40
+ }
41
+ catch (error) {
42
+ return toolResponse(`Failed to check bulk export status: ${error.message}`, true);
43
+ }
44
+ }
45
+ export const bulkExportStatusSchema = {
46
+ jobId: z.string().describe('The bulk export job ID returned by salesforce_bulk_export_start.'),
47
+ };
48
+ export const bulkExportStatusDescriptor = {
49
+ name: 'salesforce_bulk_export_status',
50
+ description: bulkExportStatusTool.description,
51
+ schema: bulkExportStatusSchema,
52
+ handler: handleBulkExportStatus,
53
+ };
54
+ //# sourceMappingURL=bulkExportStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkExportStatus.js","sourceRoot":"","sources":["../../src/tools/bulkExportStatus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,+BAA+B;IACrC,WAAW,EACT,8NAA8N;IAChO,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kEAAkE;aAChF;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;CACF,CAAC;AAMF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAgB,EAAE,IAA0B;IACvF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAI,IAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAE/B,MAAM,KAAK,GAAG;YACZ,WAAW,IAAI,CAAC,EAAE,EAAE;YACpB,UAAU,IAAI,CAAC,KAAK,EAAE;YACtB,WAAW,IAAI,CAAC,MAAM,EAAE;YACxB,sBAAsB,IAAI,CAAC,sBAAsB,IAAI,KAAK,EAAE;YAC5D,YAAY,IAAI,CAAC,WAAW,EAAE;YAC9B,oBAAoB,IAAI,CAAC,cAAc,EAAE;SAC1C,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAK,IAAY,CAAC,YAAY,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,UAAW,IAAY,CAAC,YAAY,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,6DAA6D,KAAK,wBAAwB,CAAC,CAAC;QAC7G,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,yEAAyE,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,uCAAuC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;CAC/F,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,+BAA+B;IACrC,WAAW,EAAE,oBAAoB,CAAC,WAAW;IAC7C,MAAM,EAAE,sBAAsB;IAC9B,OAAO,EAAE,sBAAsB;CAChC,CAAC"}