@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,96 @@
1
+ import { z } from 'zod/v4';
2
+ import { toolResponse } from '../utils/index.js';
3
+ import { deployApexViaContainer } from '../utils/apexContainer.js';
4
+ export const writeApexTriggersTool = {
5
+ name: 'salesforce_write_apex_trigger',
6
+ description: 'Create or update an Apex trigger via the Tooling API. Validates trigger name and object reference in the body.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ operation: {
11
+ type: 'string',
12
+ enum: ['create', 'update'],
13
+ },
14
+ triggerName: {
15
+ type: 'string',
16
+ description: 'The trigger name.',
17
+ },
18
+ body: {
19
+ type: 'string',
20
+ description: 'The full Apex trigger source code.',
21
+ },
22
+ objectName: {
23
+ type: 'string',
24
+ description: 'The Salesforce object this trigger is on (required for create).',
25
+ },
26
+ apiVersion: {
27
+ type: 'string',
28
+ description: 'Salesforce API version. Default: "58.0".',
29
+ },
30
+ },
31
+ required: ['operation', 'triggerName', 'body'],
32
+ },
33
+ };
34
+ export async function handleWriteApexTriggers(conn, args) {
35
+ const { operation, triggerName, body, objectName, apiVersion = '58.0' } = args;
36
+ const namePattern = new RegExp(`trigger\\s+${triggerName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`, 'i');
37
+ if (!namePattern.test(body)) {
38
+ return toolResponse(`Body does not contain "trigger ${triggerName}".`, true);
39
+ }
40
+ try {
41
+ if (operation === 'create') {
42
+ if (!objectName) {
43
+ return toolResponse('Create requires "objectName" parameter.', true);
44
+ }
45
+ const onPattern = new RegExp(`on\\s+${objectName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`, 'i');
46
+ if (!onPattern.test(body)) {
47
+ return toolResponse(`Body does not contain "on ${objectName}".`, true);
48
+ }
49
+ const existing = await conn.tooling.query(`SELECT Id FROM ApexTrigger WHERE Name = '${triggerName.replace(/'/g, "\\'")}'`);
50
+ if (existing.records && existing.records.length > 0) {
51
+ return toolResponse(`Trigger "${triggerName}" already exists. Use "update" instead.`, true);
52
+ }
53
+ const result = await conn.tooling.sobject('ApexTrigger').create({
54
+ Name: triggerName,
55
+ Body: body,
56
+ TableEnumOrId: objectName,
57
+ ApiVersion: apiVersion,
58
+ });
59
+ if (!result.success) {
60
+ return toolResponse(`Failed to create trigger: ${JSON.stringify(result.errors)}`, true);
61
+ }
62
+ return toolResponse(`Trigger "${triggerName}" created on ${objectName}.\nID: ${result.id}\nAPI Version: ${apiVersion}`);
63
+ }
64
+ // Update
65
+ const existing = await conn.tooling.query(`SELECT Id, TableEnumOrId, LastModifiedDate FROM ApexTrigger WHERE Name = '${triggerName.replace(/'/g, "\\'")}'`);
66
+ if (!existing.records || existing.records.length === 0) {
67
+ return toolResponse(`Trigger "${triggerName}" not found. Use "create" instead.`, true);
68
+ }
69
+ const trg = existing.records[0];
70
+ const onPattern = new RegExp(`on\\s+${trg.TableEnumOrId.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`, 'i');
71
+ if (!onPattern.test(body)) {
72
+ return toolResponse(`Body must reference the existing object "${trg.TableEnumOrId}". Found trigger on a different object.`, true);
73
+ }
74
+ const error = await deployApexViaContainer(conn, 'ApexTriggerMember', trg.Id, body, triggerName);
75
+ if (error)
76
+ return toolResponse(`Failed to update trigger: ${error}`, true);
77
+ return toolResponse(`Trigger "${triggerName}" updated.\nID: ${trg.Id}\nObject: ${trg.TableEnumOrId}\nPrevious modified: ${trg.LastModifiedDate}`);
78
+ }
79
+ catch (error) {
80
+ return toolResponse(`Trigger ${operation} failed: ${error.message}`, true);
81
+ }
82
+ }
83
+ export const writeApexTriggersSchema = {
84
+ operation: z.enum(['create', 'update']),
85
+ triggerName: z.string().describe('The trigger name.'),
86
+ body: z.string().describe('The full Apex trigger source code.'),
87
+ objectName: z.string().describe('The Salesforce object this trigger is on (required for create).').optional(),
88
+ apiVersion: z.string().describe('Salesforce API version. Default: "58.0".').optional(),
89
+ };
90
+ export const writeApexTriggersDescriptor = {
91
+ name: 'salesforce_write_apex_trigger',
92
+ description: writeApexTriggersTool.description,
93
+ schema: writeApexTriggersSchema,
94
+ handler: handleWriteApexTriggers,
95
+ };
96
+ //# sourceMappingURL=writeApexTriggers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeApexTriggers.js","sourceRoot":"","sources":["../../src/tools/writeApexTriggers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,+BAA+B;IACrC,WAAW,EAAE,gHAAgH;IAC7H,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;aAC3B;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mBAAmB;aACjC;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iEAAiE;aAC/E;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0CAA0C;aACxD;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC;KAC/C;CACF,CAAC;AAUF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAgB,EAAE,IAA2B;IACzF,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IAE/E,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,cAAc,WAAW,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,kCAAkC,WAAW,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC;QACH,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,YAAY,CAAC,yCAAyC,EAAE,IAAI,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAChG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAO,YAAY,CAAC,6BAA6B,UAAU,IAAI,EAAE,IAAI,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CACvC,4CAA4C,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAChF,CAAC;YACF,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,OAAO,YAAY,CAAC,YAAY,WAAW,yCAAyC,EAAE,IAAI,CAAC,CAAC;YAC9F,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;gBAC9D,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,IAAI;gBACV,aAAa,EAAE,UAAU;gBACzB,UAAU,EAAE,UAAU;aACvB,CAAC,CAAC;YAEH,IAAI,CAAE,MAAc,CAAC,OAAO,EAAE,CAAC;gBAC7B,OAAO,YAAY,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAE,MAAc,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACnG,CAAC;YAED,OAAO,YAAY,CACjB,YAAY,WAAW,gBAAgB,UAAU,UAAW,MAAc,CAAC,EAAE,kBAAkB,UAAU,EAAE,CAC5G,CAAC;QACJ,CAAC;QAED,SAAS;QACT,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CACvC,6EAA6E,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CACjH,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,YAAY,CAAC,YAAY,WAAW,oCAAoC,EAAE,IAAI,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAQ,CAAC;QAEvC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACvG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,YAAY,CACjB,4CAA4C,GAAG,CAAC,aAAa,yCAAyC,EACtG,IAAI,CACL,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACjG,IAAI,KAAK;YAAE,OAAO,YAAY,CAAC,6BAA6B,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAE3E,OAAO,YAAY,CACjB,YAAY,WAAW,mBAAmB,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,aAAa,wBAAwB,GAAG,CAAC,gBAAgB,EAAE,CAC7H,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC,WAAW,SAAS,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC,CAAC,QAAQ,EAAE;IAC7G,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC,QAAQ,EAAE;CACvF,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,+BAA+B;IACrC,WAAW,EAAE,qBAAqB,CAAC,WAAW;IAC9C,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,uBAAuB;CACjC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare enum ConnectionType {
2
+ UsernamePassword = "username_password",
3
+ OAuth2ClientCredentials = "oauth2_client_credentials",
4
+ SalesforceCli = "sfdx_cli",
5
+ AccessToken = "access_token",
6
+ OAuth2WebFlow = "oauth2_web_flow"
7
+ }
8
+ export interface ConnectionConfig {
9
+ type?: ConnectionType;
10
+ loginUrl?: string;
11
+ }
12
+ export interface SalesforceCliResponse {
13
+ status: number;
14
+ result: {
15
+ accessToken: string;
16
+ instanceUrl: string;
17
+ username: string;
18
+ id: string;
19
+ };
20
+ }
@@ -0,0 +1,9 @@
1
+ export var ConnectionType;
2
+ (function (ConnectionType) {
3
+ ConnectionType["UsernamePassword"] = "username_password";
4
+ ConnectionType["OAuth2ClientCredentials"] = "oauth2_client_credentials";
5
+ ConnectionType["SalesforceCli"] = "sfdx_cli";
6
+ ConnectionType["AccessToken"] = "access_token";
7
+ ConnectionType["OAuth2WebFlow"] = "oauth2_web_flow";
8
+ })(ConnectionType || (ConnectionType = {}));
9
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/types/connection.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,wDAAsC,CAAA;IACtC,uEAAqD,CAAA;IACrD,4CAA0B,CAAA;IAC1B,8CAA4B,CAAA;IAC5B,mDAAiC,CAAA;AACnC,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB"}
@@ -0,0 +1,3 @@
1
+ export * from './salesforce.js';
2
+ export * from './connection.js';
3
+ export * from './metadata.js';
@@ -0,0 +1,4 @@
1
+ export * from './salesforce.js';
2
+ export * from './connection.js';
3
+ export * from './metadata.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,44 @@
1
+ export interface CustomObjectMetadata {
2
+ fullName: string;
3
+ label: string;
4
+ pluralLabel: string;
5
+ nameField: {
6
+ label: string;
7
+ type: string;
8
+ displayFormat?: string;
9
+ };
10
+ deploymentStatus: string;
11
+ sharingModel: string;
12
+ description?: string;
13
+ }
14
+ export interface PicklistValueDefinition {
15
+ fullName: string;
16
+ default: boolean;
17
+ label: string;
18
+ }
19
+ export interface PicklistValueSet {
20
+ sorted: boolean;
21
+ controllingField?: string;
22
+ valueSetDefinition: {
23
+ value: PicklistValueDefinition[];
24
+ sorted: boolean;
25
+ };
26
+ }
27
+ export interface CustomFieldMetadata {
28
+ fullName: string;
29
+ label: string;
30
+ type: string;
31
+ required?: boolean;
32
+ unique?: boolean;
33
+ externalId?: boolean;
34
+ length?: number;
35
+ precision?: number;
36
+ scale?: number;
37
+ referenceTo?: string;
38
+ relationshipLabel?: string;
39
+ relationshipName?: string;
40
+ deleteConstraint?: string;
41
+ description?: string;
42
+ valueSet?: PicklistValueSet;
43
+ visibleLines?: number;
44
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/types/metadata.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ export interface SalesforceObjectDescriptor {
2
+ name: string;
3
+ label: string;
4
+ custom: boolean;
5
+ }
6
+ export interface SalesforcePicklistValue {
7
+ value: string;
8
+ label: string;
9
+ active: boolean;
10
+ defaultValue: boolean;
11
+ }
12
+ export interface SalesforceFieldDescriptor {
13
+ name: string;
14
+ label: string;
15
+ type: string;
16
+ nillable: boolean;
17
+ length: number;
18
+ picklistValues: SalesforcePicklistValue[];
19
+ defaultValue: any;
20
+ referenceTo: string[];
21
+ }
22
+ export interface SalesforceDescribeResponse {
23
+ name: string;
24
+ label: string;
25
+ custom: boolean;
26
+ fields: SalesforceFieldDescriptor[];
27
+ childRelationships: any[];
28
+ }
29
+ export interface SalesforceDmlResult {
30
+ success: boolean;
31
+ id?: string;
32
+ errors: SalesforceDmlError[] | SalesforceDmlError;
33
+ }
34
+ export interface SalesforceDmlError {
35
+ statusCode: string;
36
+ message: string;
37
+ fields: string[];
38
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=salesforce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"salesforce.js","sourceRoot":"","sources":["../../src/types/salesforce.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { Connection } from 'jsforce';
2
+ type MemberType = 'ApexClassMember' | 'ApexTriggerMember';
3
+ /**
4
+ * Update Apex source (class or trigger) via the MetadataContainer flow.
5
+ * Direct PATCH on ApexClass/ApexTrigger body is blocked by Salesforce
6
+ * ("INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY") in scratch orgs & sandboxes.
7
+ *
8
+ * Steps:
9
+ * 1. Create MetadataContainer
10
+ * 2. Create ApexClassMember / ApexTriggerMember
11
+ * 3. Deploy via ContainerAsyncRequest
12
+ * 4. Poll until Completed or Failed
13
+ * 5. Delete container (cleanup)
14
+ *
15
+ * Returns null on success, or an error message string on failure.
16
+ */
17
+ export declare function deployApexViaContainer(conn: Connection, memberType: MemberType, contentEntityId: string, body: string, label: string): Promise<string | null>;
18
+ export {};
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Update Apex source (class or trigger) via the MetadataContainer flow.
3
+ * Direct PATCH on ApexClass/ApexTrigger body is blocked by Salesforce
4
+ * ("INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY") in scratch orgs & sandboxes.
5
+ *
6
+ * Steps:
7
+ * 1. Create MetadataContainer
8
+ * 2. Create ApexClassMember / ApexTriggerMember
9
+ * 3. Deploy via ContainerAsyncRequest
10
+ * 4. Poll until Completed or Failed
11
+ * 5. Delete container (cleanup)
12
+ *
13
+ * Returns null on success, or an error message string on failure.
14
+ */
15
+ export async function deployApexViaContainer(conn, memberType, contentEntityId, body, label) {
16
+ const containerName = `McpUpdate_${Date.now()}`;
17
+ let containerId;
18
+ try {
19
+ // Step 1: create container
20
+ const containerResult = await conn.tooling.sobject('MetadataContainer')
21
+ .create({ Name: containerName });
22
+ if (!containerResult.success) {
23
+ return `MetadataContainer create failed: ${JSON.stringify(containerResult.errors)}`;
24
+ }
25
+ containerId = containerResult.id;
26
+ // Step 2: create member
27
+ const memberResult = await conn.tooling.sobject(memberType).create({
28
+ MetadataContainerId: containerId,
29
+ ContentEntityId: contentEntityId,
30
+ Body: body,
31
+ });
32
+ if (!memberResult.success) {
33
+ return `${memberType} create failed: ${JSON.stringify(memberResult.errors)}`;
34
+ }
35
+ // Step 3: deploy
36
+ const deployResult = await conn.tooling.sobject('ContainerAsyncRequest').create({
37
+ MetadataContainerId: containerId,
38
+ IsCheckOnly: false,
39
+ });
40
+ if (!deployResult.success) {
41
+ return `ContainerAsyncRequest create failed: ${JSON.stringify(deployResult.errors)}`;
42
+ }
43
+ const requestId = deployResult.id;
44
+ // Step 4: poll
45
+ const POLL_INTERVAL_MS = 1000;
46
+ const TIMEOUT_MS = 60000;
47
+ const deadline = Date.now() + TIMEOUT_MS;
48
+ let state = 'Queued';
49
+ let errorMsg = '';
50
+ while (Date.now() < deadline) {
51
+ await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
52
+ const status = await conn.tooling.query(`SELECT State, ErrorMsg FROM ContainerAsyncRequest WHERE Id = '${requestId}'`);
53
+ const rec = status.records?.[0];
54
+ state = rec?.State ?? 'Queued';
55
+ errorMsg = rec?.ErrorMsg ?? '';
56
+ if (state === 'Completed' || state === 'Failed' || state === 'Error' || state === 'Aborted')
57
+ break;
58
+ }
59
+ if (state !== 'Completed') {
60
+ return `Deployment ${state} for ${label}.${errorMsg ? ' ' + errorMsg : ''}`;
61
+ }
62
+ return null;
63
+ }
64
+ catch (err) {
65
+ return err.message;
66
+ }
67
+ finally {
68
+ // Step 5: cleanup — delete container (cascades to members + request)
69
+ if (containerId) {
70
+ try {
71
+ await conn.tooling.sobject('MetadataContainer').destroy(containerId);
72
+ }
73
+ catch {
74
+ // best-effort cleanup
75
+ }
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=apexContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apexContainer.js","sourceRoot":"","sources":["../../src/utils/apexContainer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Connection } from 'jsforce';
2
+ import { type ConnectionConfig } from '../types/index.js';
3
+ export declare function createConnection(config?: ConnectionConfig): Promise<Connection>;
@@ -0,0 +1,135 @@
1
+ import { Connection } from 'jsforce';
2
+ import { exec } from 'child_process';
3
+ import { promisify } from 'util';
4
+ import { ConnectionType } from '../types/index.js';
5
+ import { getAccessToken, getSelectedOrgId, setSelectedOrgId } from './tokenBroker.js';
6
+ import { getOAuthWebFlowToken } from './oauthWebFlow.js';
7
+ const execAsync = promisify(exec);
8
+ function resolveLoginUrl(config) {
9
+ if (config?.loginUrl)
10
+ return config.loginUrl;
11
+ if (process.env.SALESFORCE_INSTANCE_URL)
12
+ return process.env.SALESFORCE_INSTANCE_URL;
13
+ return 'https://login.salesforce.com';
14
+ }
15
+ function resolveConnectionType() {
16
+ const envType = process.env.SALESFORCE_CONNECTION_TYPE;
17
+ if (envType === 'oauth2_client_credentials')
18
+ return ConnectionType.OAuth2ClientCredentials;
19
+ if (envType === 'sfdx_cli')
20
+ return ConnectionType.SalesforceCli;
21
+ if (envType === 'access_token')
22
+ return ConnectionType.AccessToken;
23
+ if (envType === 'username_password')
24
+ return ConnectionType.UsernamePassword;
25
+ return ConnectionType.OAuth2WebFlow;
26
+ }
27
+ async function loginWithUsernamePassword(config) {
28
+ const username = process.env.SALESFORCE_USERNAME;
29
+ const password = process.env.SALESFORCE_PASSWORD;
30
+ const token = process.env.SALESFORCE_TOKEN || '';
31
+ if (!username || !password) {
32
+ throw new Error('SALESFORCE_USERNAME and SALESFORCE_PASSWORD environment variables are required for username/password authentication');
33
+ }
34
+ const conn = new Connection({ loginUrl: resolveLoginUrl(config) });
35
+ await conn.login(username, password + token);
36
+ return conn;
37
+ }
38
+ async function loginWithOAuth2(config) {
39
+ const clientId = process.env.SALESFORCE_CLIENT_ID;
40
+ const clientSecret = process.env.SALESFORCE_CLIENT_SECRET;
41
+ const instanceUrl = process.env.SALESFORCE_INSTANCE_URL;
42
+ if (!clientId || !clientSecret || !instanceUrl) {
43
+ throw new Error('SALESFORCE_CLIENT_ID, SALESFORCE_CLIENT_SECRET, and SALESFORCE_INSTANCE_URL are required for OAuth2 client credentials authentication');
44
+ }
45
+ const tokenUrl = `${instanceUrl}/services/oauth2/token`;
46
+ const params = new URLSearchParams({
47
+ grant_type: 'client_credentials',
48
+ client_id: clientId,
49
+ client_secret: clientSecret,
50
+ });
51
+ const response = await fetch(tokenUrl, {
52
+ method: 'POST',
53
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
54
+ body: params.toString(),
55
+ });
56
+ if (!response.ok) {
57
+ const errorText = await response.text();
58
+ throw new Error(`OAuth2 token request failed (${response.status}): ${errorText}`);
59
+ }
60
+ const tokenData = await response.json();
61
+ const conn = new Connection({
62
+ instanceUrl: tokenData.instance_url,
63
+ accessToken: tokenData.access_token,
64
+ });
65
+ return conn;
66
+ }
67
+ async function loginWithSalesforceCli() {
68
+ try {
69
+ const { stdout } = await execAsync('sf org display --json');
70
+ const parsed = JSON.parse(stdout);
71
+ if (parsed.status !== 0) {
72
+ throw new Error('Salesforce CLI returned non-zero status. Ensure a default org is set.');
73
+ }
74
+ const { accessToken, instanceUrl } = parsed.result;
75
+ if (!accessToken || !instanceUrl) {
76
+ throw new Error('Salesforce CLI response missing accessToken or instanceUrl');
77
+ }
78
+ return new Connection({ instanceUrl, accessToken });
79
+ }
80
+ catch (error) {
81
+ if (error.code === 'ENOENT') {
82
+ throw new Error('Salesforce CLI (sf) is not installed. Install it from https://developer.salesforce.com/tools/salesforcecli');
83
+ }
84
+ if (error.message?.includes('no default org')) {
85
+ throw new Error('No default Salesforce org set. Run: sf org login web --set-default');
86
+ }
87
+ throw new Error(`Salesforce CLI authentication failed: ${error.message}`);
88
+ }
89
+ }
90
+ // Detects unresolved manifest template placeholders like "${user_config.foo}"
91
+ function isTemplatePlaceholder(value) {
92
+ return /^\$\{[^}]+\}$/.test(value.trim());
93
+ }
94
+ async function loginWithOAuth2WebFlow() {
95
+ const token = getOAuthWebFlowToken();
96
+ if (!token) {
97
+ throw new Error('Not authenticated. You MUST call salesforce_login first. ' +
98
+ 'Choose environment: production, sandbox, or custom.');
99
+ }
100
+ return new Connection({ instanceUrl: token.instanceUrl, accessToken: token.accessToken });
101
+ }
102
+ async function loginWithAccessToken() {
103
+ // Only use ACQUIS_ORG_ID if it is a real value, not an unresolved manifest placeholder
104
+ const envOrgId = process.env.ACQUIS_ORG_ID;
105
+ if (envOrgId && !isTemplatePlaceholder(envOrgId)) {
106
+ setSelectedOrgId(envOrgId);
107
+ }
108
+ const orgId = getSelectedOrgId();
109
+ if (!orgId) {
110
+ throw new Error('No Salesforce org has been selected for this session. ' +
111
+ 'You MUST call the salesforce_select_org tool first (with no arguments) to see the list of ' +
112
+ 'available orgs, then call it again with the desired org_id to select one. ' +
113
+ 'All other Salesforce tools will fail until an org is selected.');
114
+ }
115
+ const { accessToken, instanceUrl } = await getAccessToken(orgId);
116
+ return new Connection({ instanceUrl, accessToken });
117
+ }
118
+ export async function createConnection(config) {
119
+ const type = config?.type || resolveConnectionType();
120
+ switch (type) {
121
+ case ConnectionType.UsernamePassword:
122
+ return loginWithUsernamePassword(config);
123
+ case ConnectionType.OAuth2ClientCredentials:
124
+ return loginWithOAuth2(config);
125
+ case ConnectionType.SalesforceCli:
126
+ return loginWithSalesforceCli();
127
+ case ConnectionType.AccessToken:
128
+ return loginWithAccessToken();
129
+ case ConnectionType.OAuth2WebFlow:
130
+ return loginWithOAuth2WebFlow();
131
+ default:
132
+ throw new Error(`Unknown connection type: ${type}`);
133
+ }
134
+ }
135
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/utils/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,cAAc,EAAqD,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,SAAS,eAAe,CAAC,MAAyB;IAChD,IAAI,MAAM,EAAE,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACpF,OAAO,8BAA8B,CAAC;AACxC,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACvD,IAAI,OAAO,KAAK,2BAA2B;QAAE,OAAO,cAAc,CAAC,uBAAuB,CAAC;IAC3F,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC,aAAa,CAAC;IAChE,IAAI,OAAO,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC,WAAW,CAAC;IAClE,IAAI,OAAO,KAAK,mBAAmB;QAAE,OAAO,cAAc,CAAC,gBAAgB,CAAC;IAC5E,OAAO,cAAc,CAAC,aAAa,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,MAAyB;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,qHAAqH,CAAC,CAAC;IACzI,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAyB;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAExD,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,uIAAuI,CAAC,CAAC;IAC3J,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,WAAW,wBAAwB,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACrC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;KACxB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoD,CAAC;IAE1F,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QAC1B,WAAW,EAAE,SAAS,CAAC,YAAY;QACnC,WAAW,EAAE,SAAS,CAAC,YAAY;KACpC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC5D,MAAM,MAAM,GAA0B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;QAChI,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,2DAA2D;YAC3D,qDAAqD,CACtD,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,KAAK,UAAU,oBAAoB;IACjC,uFAAuF;IACvF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC3C,IAAI,QAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,wDAAwD;YACxD,4FAA4F;YAC5F,4EAA4E;YAC5E,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAyB;IAC9D,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,qBAAqB,EAAE,CAAC;IAErD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,cAAc,CAAC,gBAAgB;YAClC,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,cAAc,CAAC,uBAAuB;YACzC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,cAAc,CAAC,aAAa;YAC/B,OAAO,sBAAsB,EAAE,CAAC;QAClC,KAAK,cAAc,CAAC,WAAW;YAC7B,OAAO,oBAAoB,EAAE,CAAC;QAChC,KAAK,cAAc,CAAC,aAAa;YAC/B,OAAO,sBAAsB,EAAE,CAAC;QAClC;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Custom post-retrieve decomposition of Profile and PermissionSet XML files.
3
+ *
4
+ * Salesforce DX's built-in decompose flags (decomposeProfilesV2Beta / decomposePermissionSetBeta)
5
+ * are unreliable, so we replicate the decomposition ourselves after a successful retrieve.
6
+ *
7
+ * Each permission block in a monolithic .profile-meta.xml or .permissionset-meta.xml is written
8
+ * as its own file in a sub-directory, enabling cherry-picking in the metadata diff UI.
9
+ */
10
+ /**
11
+ * Walk a tagged retrieve directory, find all monolithic profile/permission-set XML files,
12
+ * and decompose each into sub-directory permission files.
13
+ *
14
+ * @returns Human-readable summary string
15
+ */
16
+ export declare function decomposeProfilesAndPermSets(taggedDir: string): string;