mcdev 7.10.0 → 8.0.0

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 (209) hide show
  1. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  2. package/.github/workflows/code-test.yml +8 -100
  3. package/@types/lib/Deployer.d.ts.map +1 -1
  4. package/@types/lib/Retriever.d.ts.map +1 -1
  5. package/@types/lib/index.d.ts +16 -4
  6. package/@types/lib/index.d.ts.map +1 -1
  7. package/@types/lib/metadataTypes/Asset.d.ts +45 -8
  8. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
  9. package/@types/lib/metadataTypes/Automation.d.ts +73 -53
  10. package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
  11. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
  12. package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
  13. package/@types/lib/metadataTypes/DataExtract.d.ts +13 -2
  14. package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
  15. package/@types/lib/metadataTypes/Event.d.ts +14 -0
  16. package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
  17. package/@types/lib/metadataTypes/Folder.d.ts +49 -12
  18. package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
  19. package/@types/lib/metadataTypes/ImportFile.d.ts +14 -0
  20. package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
  21. package/@types/lib/metadataTypes/Journey.d.ts +166 -6
  22. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
  23. package/@types/lib/metadataTypes/MetadataType.d.ts +24 -6
  24. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
  25. package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
  26. package/@types/lib/metadataTypes/SenderProfile.d.ts +3 -1
  27. package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
  28. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +45 -8
  29. package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +43 -1
  30. package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +21 -3
  31. package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +6 -0
  32. package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +49 -12
  33. package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +3 -0
  34. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +159 -6
  35. package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts +3 -1
  36. package/@types/lib/util/cache.d.ts +2 -1
  37. package/@types/lib/util/cache.d.ts.map +1 -1
  38. package/@types/lib/util/devops.d.ts.map +1 -1
  39. package/@types/lib/util/util.d.ts +1 -0
  40. package/@types/lib/util/util.d.ts.map +1 -1
  41. package/@types/lib/util/validations.d.ts.map +1 -1
  42. package/@types/types/mcdev.d.d.ts +48 -0
  43. package/@types/types/mcdev.d.d.ts.map +1 -1
  44. package/boilerplate/files/.vscode/settings.json +5 -0
  45. package/eslint.config.js +2 -2
  46. package/lib/Deployer.js +3 -0
  47. package/lib/Retriever.js +8 -2
  48. package/lib/cli.js +29 -0
  49. package/lib/index.js +37 -33
  50. package/lib/metadataTypes/Asset.js +130 -15
  51. package/lib/metadataTypes/Automation.js +308 -410
  52. package/lib/metadataTypes/DataExtension.js +1 -11
  53. package/lib/metadataTypes/DataExtensionField.js +9 -15
  54. package/lib/metadataTypes/DataExtract.js +41 -6
  55. package/lib/metadataTypes/DomainVerification.js +1 -1
  56. package/lib/metadataTypes/EmailSend.js +3 -3
  57. package/lib/metadataTypes/Event.js +81 -39
  58. package/lib/metadataTypes/FileTransfer.js +5 -5
  59. package/lib/metadataTypes/Folder.js +98 -12
  60. package/lib/metadataTypes/ImportFile.js +96 -33
  61. package/lib/metadataTypes/Journey.js +186 -32
  62. package/lib/metadataTypes/MetadataType.js +118 -70
  63. package/lib/metadataTypes/MobileKeyword.js +2 -2
  64. package/lib/metadataTypes/MobileMessage.js +4 -2
  65. package/lib/metadataTypes/Query.js +5 -5
  66. package/lib/metadataTypes/Script.js +5 -5
  67. package/lib/metadataTypes/SendClassification.js +3 -3
  68. package/lib/metadataTypes/SenderProfile.js +3 -3
  69. package/lib/metadataTypes/TransactionalEmail.js +1 -1
  70. package/lib/metadataTypes/TransactionalMessage.js +1 -1
  71. package/lib/metadataTypes/TriggeredSend.js +3 -3
  72. package/lib/metadataTypes/Verification.js +1 -1
  73. package/lib/metadataTypes/definitions/Asset.definition.js +196 -142
  74. package/lib/metadataTypes/definitions/Automation.definition.js +49 -7
  75. package/lib/metadataTypes/definitions/DataExtension.definition.js +7 -6
  76. package/lib/metadataTypes/definitions/DataExtract.definition.js +16 -3
  77. package/lib/metadataTypes/definitions/DomainVerification.definition.js +1 -1
  78. package/lib/metadataTypes/definitions/Event.definition.js +6 -0
  79. package/lib/metadataTypes/definitions/Folder.definition.js +69 -22
  80. package/lib/metadataTypes/definitions/ImportFile.definition.js +3 -0
  81. package/lib/metadataTypes/definitions/Journey.definition.js +165 -11
  82. package/lib/metadataTypes/definitions/SenderProfile.definition.js +3 -1
  83. package/lib/util/cache.js +24 -5
  84. package/lib/util/devops.js +20 -5
  85. package/lib/util/util.js +12 -0
  86. package/lib/util/validations.js +3 -1
  87. package/package.json +16 -17
  88. package/test/general.test.js +42 -37
  89. package/test/mockRoot/.mcdev-validations.js +2 -3
  90. package/test/mockRoot/.mcdevrc.json +1 -1
  91. package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +2 -1
  92. package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +2 -1
  93. package/test/resourceFactory.js +35 -6
  94. package/test/resources/1111111/dataExtension/update-expected.json +1 -1
  95. package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.js +1 -0
  96. package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.json +47 -0
  97. package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.json +47 -0
  98. package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.jsonc +1 -0
  99. package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.json +46 -0
  100. package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.xml +1 -0
  101. package/test/resources/9999999/asset/test_interactivecontent-retrieve-expected.json +43 -0
  102. package/test/resources/9999999/asset/test_landingpage-retrieve-expected.json +42 -0
  103. package/test/resources/9999999/asset/test_microsite-retrieve-expected.json +43 -0
  104. package/test/resources/9999999/asset/v1/content/assets/9451/get-response.json +61 -0
  105. package/test/resources/9999999/asset/v1/content/assets/9456/get-response.json +56 -0
  106. package/test/resources/9999999/asset/v1/content/assets/9458/get-response.json +56 -0
  107. package/test/resources/9999999/asset/v1/content/assets/9460/get-response.json +59 -0
  108. package/test/resources/9999999/asset/v1/content/assets/9463/get-response.json +61 -0
  109. package/test/resources/9999999/asset/v1/content/assets/9465/get-response.json +54 -0
  110. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,3,4,14,15,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,210,211,212,213,214,215,216,217,218,219,220,221,222.json +94 -1
  111. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN219,220,221,222,223,224,225,226,227,228,230,232,240,241,242,243,244,245.json +168 -0
  112. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN240,241,242,243,244,245.json +144 -0
  113. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN246,247,248,249.json +132 -0
  114. package/test/resources/9999999/automation/create-expected.json +2 -1
  115. package/test/resources/9999999/automation/retrieve-expected.json +7 -1
  116. package/test/resources/9999999/automation/retrieve-wait-expected.json +7 -1
  117. package/test/resources/9999999/automation/update-expected.json +24 -2
  118. package/test/resources/9999999/automation/update-testExisting_automation-expected.md +5 -2
  119. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/patch-response.json +1 -0
  120. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/patch-response.json +1 -0
  121. package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +1 -1
  122. package/test/resources/9999999/dataExtract/build-expected.json +2 -2
  123. package/test/resources/9999999/dataExtract/get-expected.json +2 -2
  124. package/test/resources/9999999/dataExtract/patch-expected.json +2 -2
  125. package/test/resources/9999999/dataExtract/post-expected.json +2 -2
  126. package/test/resources/9999999/dataExtract/template-expected.json +2 -2
  127. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-sha,automatio,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml → retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml} +44 -1
  128. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-sha,automatio,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml → retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml} +44 -0
  129. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-shared,dataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml → retrieve-ContentTypeINasset,asset-shared,cloudpages,dataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +44 -0
  130. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-shared,journey-response.xml → retrieve-ContentTypeINasset,asset-shared,cloudpages,journey-response.xml} +44 -0
  131. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,ssjsactivity-response.xml +136 -0
  132. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-shared,ssjsactivity-response.xml → retrieve-ContentTypeINasset,asset-shared,cloudpages-response.xml} +29 -7
  133. package/test/resources/9999999/dataFolder/{+retrieve-response.xml → retrieve-response.xml} +23 -0
  134. package/test/resources/9999999/dataFolder/update-response.xml +31 -0
  135. package/test/resources/9999999/event/build-expected.json +0 -1
  136. package/test/resources/9999999/event/get-automation-expected.json +0 -1
  137. package/test/resources/9999999/event/get-expected.json +0 -2
  138. package/test/resources/9999999/event/get-published-expected.json +0 -2
  139. package/test/resources/9999999/event/post_withExistingDE-expected.json +0 -2
  140. package/test/resources/9999999/event/post_withSchema-callout-expected.json +3 -0
  141. package/test/resources/9999999/event/post_withSchema-expected.json +0 -2
  142. package/test/resources/9999999/event/put-callout-expected.json +3 -0
  143. package/test/resources/9999999/event/put-expected.json +0 -2
  144. package/test/resources/9999999/event/template-expected.json +0 -1
  145. package/test/resources/9999999/folder-deploy/Data Extensions/testExisting_folder.folder-meta.json +9 -0
  146. package/test/resources/9999999/importFile/get-dataImport-expected.json +1 -1
  147. package/test/resources/9999999/importFile/get-expected.json +4 -1
  148. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=1.json +86 -0
  149. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=2.json +101 -0
  150. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=3.json +86 -0
  151. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response-versionNumber=1.txt +1 -0
  152. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=1.json +461 -0
  153. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=3.json +461 -0
  154. package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=1.json +38 -0
  155. package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=2.json +53 -0
  156. package/test/resources/9999999/interaction/v1/interactions/get-response.json +2 -2
  157. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response-versionNumber=1.json +461 -0
  158. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response-versionNumber=1.json +253 -0
  159. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/get-response-versionNumber=1.json +219 -0
  160. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/get-response-versionNumber=1.json +226 -0
  161. package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response-versionNumber=3.json +4 -0
  162. package/test/resources/9999999/journey/build-expected.json +0 -1
  163. package/test/resources/9999999/journey/create-transactionaEmail-publish-expected.json +0 -1
  164. package/test/resources/9999999/journey/get-multistep-expected.json +0 -4
  165. package/test/resources/9999999/journey/get-published-expected.json +0 -1
  166. package/test/resources/9999999/journey/get-quicksend-expected.json +0 -1
  167. package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +0 -1
  168. package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +0 -1
  169. package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +0 -1
  170. package/test/resources/9999999/journey/get-transactionalEmail-expected.json +0 -1
  171. package/test/resources/9999999/journey/template-expected.json +0 -1
  172. package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow-PAUSED/get-response.json +3 -0
  173. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/NewRkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +29 -0
  174. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +50 -0
  175. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow-PAUSED/get-response.json +51 -0
  176. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/bHF6Q0Q3b1VXa21OdVQzZFQ0ckVSQToyNTow/get-response.json +7 -1
  177. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/cDhLQ2o2NExxVVc5N3VZeHF5WEExUToyNTow/get-response.json +79 -0
  178. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/get-response.json +61 -2
  179. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/post-response-pauseSchedule.json +1 -0
  180. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/post-response-schedule.json +1 -0
  181. package/test/resources/9999999/messaging/v1/domainverification/get-response.json +10 -1
  182. package/test/resources/9999999/query/patch-expected.sql +1 -1
  183. package/test/resources/9999999/query/post-expected.sql +1 -1
  184. package/test/resources/9999999/script/patch-expected.ssjs +1 -0
  185. package/test/resources/9999999/senderProfile/build-expected.json +1 -1
  186. package/test/resources/9999999/senderProfile/get-expected.json +1 -1
  187. package/test/resources/9999999/senderProfile/patch-expected.json +1 -1
  188. package/test/resources/9999999/senderProfile/retrieve-response.xml +1 -1
  189. package/test/resources/9999999/senderProfile/template-expected.json +1 -1
  190. package/test/type.asset.test.js +123 -13
  191. package/test/type.automation.test.js +20 -17
  192. package/test/type.dataExtract.test.js +4 -4
  193. package/test/type.domainVerification.test.js +3 -3
  194. package/test/type.folder.test.js +12 -2
  195. package/test/type.journey.test.js +141 -5
  196. package/test/type.query.test.js +2 -2
  197. package/test/type.script.test.js +2 -1
  198. package/test/type.senderProfile.test.js +21 -3
  199. package/test/type.triggeredSend.test.js +13 -1
  200. package/test/utils.js +2 -0
  201. package/types/mcdev.d.js +12 -0
  202. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN219,220,221,222,223,224,225,226,227,228,230,232.json +0 -32
  203. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +0 -52
  204. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-pause-response.xml +0 -38
  205. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_pause-response.xml +0 -52
  206. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +0 -52
  207. package/test/resources/9999999/automation/schedule-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +0 -52
  208. /package/test/resources/9999999/dataFolder/{+retrieve-QAA-response.xml → retrieve-QAA-response.xml} +0 -0
  209. /package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/{post-response.json → post-response-versionNumber=1.json} +0 -0
@@ -7,6 +7,7 @@ export default {
7
7
  'asset',
8
8
  'automations',
9
9
  'contextual_suppression_list',
10
+ 'cloudpages',
10
11
  'dataextension',
11
12
  'filteractivity',
12
13
  'filterdefinition',
@@ -37,6 +38,7 @@ export default {
37
38
  // lower-case values!
38
39
  'asset',
39
40
  'automations',
41
+ 'cloudpages',
40
42
  'dataextension',
41
43
  'filteractivity',
42
44
  'filterdefinition',
@@ -54,7 +56,8 @@ export default {
54
56
  'triggered_send_journeybuilder',
55
57
  'triggered_send',
56
58
  ],
57
- deployFolderTypesRest: ['automations', 'journey', 'triggered_send_journeybuilder'],
59
+ deployFolderTypesEmailRest: ['automations', 'journey', 'triggered_send_journeybuilder'],
60
+ deployFolderTypesAssetRest: ['cloudpages'],
58
61
  deployFolderBlacklist: [
59
62
  // lower-case values!
60
63
  'shared data extensions',
@@ -125,6 +128,13 @@ export default {
125
128
  retrieving: true,
126
129
  template: false,
127
130
  },
131
+ description: {
132
+ // used for cloudpages folders only
133
+ isCreateable: true,
134
+ isUpdateable: true,
135
+ retrieving: false,
136
+ template: false,
137
+ },
128
138
  CreatedDate: {
129
139
  isCreateable: false,
130
140
  isUpdateable: false,
@@ -143,6 +153,20 @@ export default {
143
153
  retrieving: true,
144
154
  template: true,
145
155
  },
156
+ categoryType: {
157
+ // REST only, used for cloudpages folders only
158
+ isCreateable: true,
159
+ isUpdateable: true,
160
+ retrieving: false,
161
+ template: false,
162
+ },
163
+ catType: {
164
+ // REST only, equal to SOAP's ContentType
165
+ isCreateable: true,
166
+ isUpdateable: false,
167
+ retrieving: false,
168
+ template: false,
169
+ },
146
170
  IsActive: {
147
171
  isCreateable: true,
148
172
  isUpdateable: true,
@@ -155,24 +179,54 @@ export default {
155
179
  retrieving: true,
156
180
  template: true,
157
181
  },
182
+ editable: {
183
+ // used for cloudpages folders only
184
+ isCreateable: true,
185
+ isUpdateable: true,
186
+ retrieving: false,
187
+ template: false,
188
+ },
158
189
  AllowChildren: {
159
190
  isCreateable: true,
160
191
  isUpdateable: true,
161
192
  retrieving: true,
162
193
  template: true,
163
194
  },
195
+ extendable: {
196
+ // used for cloudpages folders only
197
+ isCreateable: true,
198
+ isUpdateable: true,
199
+ retrieving: false,
200
+ template: false,
201
+ },
164
202
  ObjectID: {
165
203
  isCreateable: false,
166
204
  isUpdateable: false,
167
205
  retrieving: false,
168
206
  template: false,
169
207
  },
208
+ objectId: {
209
+ // REST only, equal to SOAP's ObjectID
210
+ // automation/journey folders only
211
+ isCreateable: false,
212
+ isUpdateable: false,
213
+ retrieving: false,
214
+ template: false,
215
+ },
170
216
  Name: {
171
217
  isCreateable: true,
172
218
  isUpdateable: true,
173
219
  retrieving: true,
174
220
  template: true,
175
221
  },
222
+ name: {
223
+ // REST only, equal to SOAP's Name
224
+ // cloudpages and automation/journey folders only
225
+ isCreateable: true,
226
+ isUpdateable: true,
227
+ retrieving: false,
228
+ template: false,
229
+ },
176
230
  'ParentFolder.CustomerKey': {
177
231
  isCreateable: false,
178
232
  isUpdateable: false,
@@ -185,6 +239,20 @@ export default {
185
239
  retrieving: true,
186
240
  template: false,
187
241
  },
242
+ parentCatId: {
243
+ // REST only, used for journey/automation folders, equal to SOAP's ParentFolder.ID
244
+ isCreateable: true,
245
+ isUpdateable: true,
246
+ retrieving: false,
247
+ template: false,
248
+ },
249
+ parentId: {
250
+ // REST only, used for cloudpages folders, equal to SOAP's ParentFolder.ID
251
+ isCreateable: true,
252
+ isUpdateable: true,
253
+ retrieving: false,
254
+ template: false,
255
+ },
188
256
  'ParentFolder.PartnerKey': {
189
257
  isCreateable: false,
190
258
  isUpdateable: false,
@@ -221,26 +289,5 @@ export default {
221
289
  retrieving: false,
222
290
  template: false,
223
291
  },
224
- catType: {
225
- // REST only, equal to SOAP's ContentType
226
- isCreateable: true,
227
- isUpdateable: false,
228
- retrieving: false,
229
- template: false,
230
- },
231
- name: {
232
- // REST only, equal to SOAP's ParentFolder.ID
233
- isCreateable: true,
234
- isUpdateable: false,
235
- retrieving: false,
236
- template: false,
237
- },
238
- parentCatId: {
239
- // REST only, equal to SOAP's ParentFolder.ID
240
- isCreateable: true,
241
- isUpdateable: false,
242
- retrieving: false,
243
- template: false,
244
- },
245
292
  },
246
293
  };
@@ -14,6 +14,7 @@ export default {
14
14
  List: 13,
15
15
  SMS: 584,
16
16
  Push: 613,
17
+ WhatsApp: 2600,
17
18
  },
18
19
  hasExtended: true,
19
20
  idField: 'importDefinitionId',
@@ -25,6 +26,8 @@ export default {
25
26
  lastmodDateField: 'modifiedDate',
26
27
  lastmodNameField: null,
27
28
  restPagination: true,
29
+ restPageSize: 100,
30
+ restConcurrentLimit: 2,
28
31
  subscriberImportTypeMapping: {
29
32
  DataExtension: 255,
30
33
  Email: 0,
@@ -79,10 +79,10 @@ export default {
79
79
  template: true,
80
80
  },
81
81
  'activities[].id': {
82
- isCreateable: true,
83
- isUpdateable: true,
84
- retrieving: true,
85
- template: true,
82
+ isCreateable: false,
83
+ isUpdateable: false,
84
+ retrieving: false,
85
+ template: false,
86
86
  },
87
87
  'activities[].key': {
88
88
  isCreateable: true,
@@ -112,6 +112,147 @@ export default {
112
112
  skipValidation: true,
113
113
  },
114
114
  'activities[].arguments': {
115
+ isCreateable: true,
116
+ isUpdateable: true,
117
+ retrieving: true,
118
+ template: true,
119
+ },
120
+ 'activities[].arguments.waitEndDateAttributeDataBound': {
121
+ isCreateable: true,
122
+ isUpdateable: true,
123
+ retrieving: true,
124
+ template: true,
125
+ },
126
+ 'activities[].arguments.waitDefinitionId': {
127
+ isCreateable: false,
128
+ isUpdateable: false,
129
+ retrieving: false,
130
+ template: false,
131
+ },
132
+ 'activities[].arguments.waitForEventId': {
133
+ isCreateable: true,
134
+ isUpdateable: true,
135
+ retrieving: true,
136
+ template: true,
137
+ },
138
+ 'activities[].arguments.executionMode': {
139
+ isCreateable: true,
140
+ isUpdateable: true,
141
+ retrieving: true,
142
+ template: true,
143
+ },
144
+ 'activities[].arguments.startActivityKey': {
145
+ isCreateable: true,
146
+ isUpdateable: true,
147
+ retrieving: true,
148
+ template: true,
149
+ },
150
+ 'activities[].arguments.waitQueueId': {
151
+ isCreateable: true,
152
+ isUpdateable: true,
153
+ retrieving: true,
154
+ template: true,
155
+ },
156
+ 'activities[].arguments.activityId': {
157
+ isCreateable: true,
158
+ isUpdateable: true,
159
+ retrieving: true,
160
+ template: true,
161
+ },
162
+ 'activities[].arguments.definitionId': {
163
+ isCreateable: true,
164
+ isUpdateable: true,
165
+ retrieving: true,
166
+ template: true,
167
+ },
168
+ 'activities[].arguments.emailSubjectDataBound': {
169
+ isCreateable: true,
170
+ isUpdateable: true,
171
+ retrieving: true,
172
+ template: true,
173
+ },
174
+ 'activities[].arguments.contactId': {
175
+ isCreateable: true,
176
+ isUpdateable: true,
177
+ retrieving: true,
178
+ template: true,
179
+ },
180
+ 'activities[].arguments.contactKey': {
181
+ isCreateable: true,
182
+ isUpdateable: true,
183
+ retrieving: true,
184
+ template: true,
185
+ },
186
+ 'activities[].arguments.emailAddress': {
187
+ isCreateable: true,
188
+ isUpdateable: true,
189
+ retrieving: true,
190
+ template: true,
191
+ },
192
+ 'activities[].arguments.sourceCustomObjectId': {
193
+ isCreateable: true,
194
+ isUpdateable: true,
195
+ retrieving: true,
196
+ template: true,
197
+ },
198
+ 'activities[].arguments.sourceCustomObjectKey': {
199
+ isCreateable: true,
200
+ isUpdateable: true,
201
+ retrieving: true,
202
+ template: true,
203
+ },
204
+ 'activities[].arguments.fieldType': {
205
+ isCreateable: true,
206
+ isUpdateable: true,
207
+ retrieving: true,
208
+ template: true,
209
+ },
210
+ 'activities[].arguments.eventData': {
211
+ isCreateable: true,
212
+ isUpdateable: true,
213
+ retrieving: true,
214
+ template: true,
215
+ },
216
+ 'activities[].arguments.obfuscationProperties': {
217
+ isCreateable: true,
218
+ isUpdateable: true,
219
+ retrieving: true,
220
+ template: true,
221
+ },
222
+ 'activities[].arguments.customObjectKey': {
223
+ isCreateable: true,
224
+ isUpdateable: true,
225
+ retrieving: true,
226
+ template: true,
227
+ },
228
+ 'activities[].arguments.definitionInstanceId': {
229
+ isCreateable: true,
230
+ isUpdateable: true,
231
+ retrieving: true,
232
+ template: true,
233
+ },
234
+ 'activities[].arguments.filterResult': {
235
+ isCreateable: true,
236
+ isUpdateable: true,
237
+ retrieving: true,
238
+ template: true,
239
+ },
240
+ 'activities[].arguments.version': {
241
+ isCreateable: true,
242
+ isUpdateable: true,
243
+ retrieving: true,
244
+ template: true,
245
+ },
246
+ 'activities[].arguments.requestObjectId': {
247
+ isCreateable: true,
248
+ isUpdateable: true,
249
+ retrieving: true,
250
+ template: true,
251
+ },
252
+ 'activities[].arguments.activityData': {
253
+ skipValidation: true,
254
+ },
255
+ 'activities[].arguments.objectMap': {
115
256
  skipValidation: true,
116
257
  },
117
258
  'activities[].configurationArguments': {
@@ -120,6 +261,12 @@ export default {
120
261
  retrieving: true,
121
262
  template: true,
122
263
  },
264
+ 'activities[].configurationArguments.isActivityBatchValidated': {
265
+ isCreateable: true,
266
+ isUpdateable: true,
267
+ retrieving: true,
268
+ template: true,
269
+ },
123
270
  'activities[].configurationArguments.triggeredSendKey': {
124
271
  // if used during create then we are stuck with old data
125
272
  isCreateable: false,
@@ -437,6 +584,12 @@ export default {
437
584
  retrieving: true,
438
585
  template: true,
439
586
  },
587
+ 'activities[].configurationArguments.triggeredSend.updateSubscriber': {
588
+ isCreateable: true,
589
+ isUpdateable: true,
590
+ retrieving: true,
591
+ template: true,
592
+ },
440
593
  'activities[].configurationArguments.applicationExtensionKey': {
441
594
  isCreateable: true,
442
595
  isUpdateable: true,
@@ -752,7 +905,6 @@ export default {
752
905
  retrieving: true,
753
906
  template: true,
754
907
  },
755
-
756
908
  'triggers[].arguments.dequeueReason': {
757
909
  isCreateable: true,
758
910
  isUpdateable: true,
@@ -834,7 +986,15 @@ export default {
834
986
  retrieving: true,
835
987
  template: true,
836
988
  },
989
+ 'triggers[].configurationArguments.objectApiName': {
990
+ // journey capitalization; rewritten to event way of writing it by mcdev
991
+ isCreateable: true,
992
+ isUpdateable: true,
993
+ retrieving: true,
994
+ template: true,
995
+ },
837
996
  'triggers[].configurationArguments.objectAPIName': {
997
+ // capitalization like on event, customly created by mcdev in journey
838
998
  isCreateable: true,
839
999
  isUpdateable: true,
840
1000
  retrieving: true,
@@ -913,12 +1073,6 @@ export default {
913
1073
  retrieving: true,
914
1074
  template: true,
915
1075
  },
916
- 'triggers[].configurationArguments.objectApiName': {
917
- isCreateable: true,
918
- isUpdateable: true,
919
- retrieving: true,
920
- template: true,
921
- },
922
1076
  'triggers[].configurationArguments.additionalObjectFilterCriteria': {
923
1077
  isCreateable: true,
924
1078
  isUpdateable: true,
@@ -1,7 +1,9 @@
1
1
  export default {
2
2
  bodyIteratorField: 'Results',
3
3
  dependencies: ['user', 'domainVerification'],
4
- dependencyGraph: null,
4
+ dependencyGraph: {
5
+ domainVerification: ['FallbackFromAddress', 'FromAddress'],
6
+ },
5
7
  filter: {},
6
8
  hasExtended: false,
7
9
  idField: 'ObjectID',
package/lib/util/cache.js CHANGED
@@ -122,15 +122,34 @@ export default {
122
122
  * @param {string} searchField field name (key in object) which contains the unique identifer
123
123
  * @param {string} returnField field which should be returned
124
124
  * @param {number} [overrideMID] ignore currentMID and use alternative (for example parent MID)
125
+ * @param {boolean} caseInsensitive optional; if true, search is case insensitive
125
126
  * @returns {string} value of specified field. Error is thrown if not found
126
127
  */
127
- searchForField(metadataType, searchValue, searchField, returnField, overrideMID) {
128
+ searchForField(
129
+ metadataType,
130
+ searchValue,
131
+ searchField,
132
+ returnField,
133
+ overrideMID,
134
+ caseInsensitive = false
135
+ ) {
136
+ if (caseInsensitive) {
137
+ searchValue = (searchValue + '').toLowerCase();
138
+ }
128
139
  for (const key in dataStore[overrideMID || currentMID]?.[metadataType]) {
129
140
  if (
130
- Util.resolveObjPath(
131
- searchField,
132
- dataStore[overrideMID || currentMID][metadataType][key]
133
- ) == searchValue
141
+ (caseInsensitive &&
142
+ (
143
+ Util.resolveObjPath(
144
+ searchField,
145
+ dataStore[overrideMID || currentMID][metadataType][key]
146
+ ) + ''
147
+ ).toLowerCase() == searchValue) ||
148
+ (!caseInsensitive &&
149
+ Util.resolveObjPath(
150
+ searchField,
151
+ dataStore[overrideMID || currentMID][metadataType][key]
152
+ ) == searchValue)
134
153
  ) {
135
154
  try {
136
155
  if (
@@ -100,7 +100,17 @@ const DevOps = {
100
100
  'add/update': 0,
101
101
  move: 0,
102
102
  };
103
- const diffSummary = await git.diffSummary([range]);
103
+ let diffSummary;
104
+ try {
105
+ diffSummary = await git.diffSummary([range]);
106
+ } catch (ex) {
107
+ const error = ex.message.startsWith('fatal: ambiguous argument')
108
+ ? new Error(
109
+ `Make sure you checked out the branches mentioned in your git range (${rangeUserInput})`
110
+ )
111
+ : ex;
112
+ throw error;
113
+ }
104
114
  Util.logger.info(`Found ${diffSummary.files.length} changed files in the commit range`);
105
115
  /**
106
116
  * @type {DeltaPkgItem[]}
@@ -486,10 +496,15 @@ const DevOps = {
486
496
  // skip this source-target mapping
487
497
  continue;
488
498
  }
489
-
490
- const delta = Array.isArray(diffArr)
491
- ? diffArr
492
- : await DevOps.getDeltaList(properties, range, false, sourceBU, commitHistory);
499
+ let delta;
500
+ try {
501
+ delta = Array.isArray(diffArr)
502
+ ? diffArr
503
+ : await DevOps.getDeltaList(properties, range, false, sourceBU, commitHistory);
504
+ } catch (ex) {
505
+ Util.logger.error(ex.message);
506
+ return;
507
+ }
493
508
  // If only chaing templating and buildDefinition if required
494
509
  if (!delta || delta.length === 0) {
495
510
  // skip this source-target mapping
package/lib/util/util.js CHANGED
@@ -1317,6 +1317,18 @@ export const Util = {
1317
1317
  return acc;
1318
1318
  }, {});
1319
1319
  },
1320
+ /**
1321
+ * helper for MetadataType class to issue a similar error message for unsupported methods
1322
+ *
1323
+ * @param {any} definition type definition object
1324
+ * @param {string} method name of the method thats not supported
1325
+ * @param {MetadataTypeItem} [item] metadata item
1326
+ */
1327
+ notSupportedError: function (definition, method, item) {
1328
+ Util.logger.error(
1329
+ ` ☇ skipping ${item ? Util.getTypeKeyName(definition, item) : definition.type}: ${method} is not supported yet for ${definition.type}`
1330
+ );
1331
+ },
1320
1332
  };
1321
1333
 
1322
1334
  Util.startLogger(false, true);
@@ -111,7 +111,9 @@ export default async function validation(definition, item, targetDir, codeExtrac
111
111
  const doNotEvaluate = ['automation', 'attributeSet', 'list'];
112
112
  if (
113
113
  doNotEvaluate.includes(definition.type) ||
114
- (definition.type === 'asset' && item?.assetType?.name === 'webpage')
114
+ (definition.type === 'asset' && item?.assetType?.name === 'webpage') ||
115
+ (definition.type === 'dataExtension' &&
116
+ item.r__folder_Path === 'Synchronized Data Extensions')
115
117
  ) {
116
118
  // this subtype is not visible in the interface and hence always technically sits in the root
117
119
  return true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcdev",
3
- "version": "7.10.0",
3
+ "version": "8.0.0",
4
4
  "description": "Accenture Salesforce Marketing Cloud DevTools",
5
5
  "author": "Accenture: joern.berkefeld, douglas.midgley, robert.zimmermann, maciej.barnas",
6
6
  "license": "MIT",
@@ -45,7 +45,7 @@
45
45
  "mcdev": "./lib/cli.js"
46
46
  },
47
47
  "engines": {
48
- "node": ">=18.18.2"
48
+ "node": "^18.20.0 || ^20.10.0 || >=21.0.0"
49
49
  },
50
50
  "scripts": {
51
51
  "start": "node lib/cli.js",
@@ -74,12 +74,12 @@
74
74
  "console.table": "0.10.0",
75
75
  "deep-equal": "2.2.3",
76
76
  "fs-extra": "11.3.0",
77
- "inquirer": "12.4.2",
77
+ "inquirer": "12.6.0",
78
78
  "json-to-table": "4.2.1",
79
79
  "mustache": "4.2.0",
80
80
  "p-limit": "6.2.0",
81
81
  "prettier": "3.5.3",
82
- "prettier-plugin-sql": "0.18.1",
82
+ "prettier-plugin-sql": "0.19.0",
83
83
  "semver": "7.7.1",
84
84
  "sfmc-sdk": "2.1.2",
85
85
  "simple-git": "3.27.0",
@@ -87,36 +87,35 @@
87
87
  "update-notifier": "7.3.1",
88
88
  "winston": "3.17.0",
89
89
  "yargs": "17.7.2",
90
- "yocto-spinner": "0.2.0"
90
+ "yocto-spinner": "0.2.2"
91
91
  },
92
92
  "devDependencies": {
93
- "@eslint/js": "9.21.0",
93
+ "@eslint/js": "9.25.1",
94
94
  "@types/fs-extra": "11.0.4",
95
95
  "@types/inquirer": "9.0.7",
96
96
  "@types/mocha": "10.0.8",
97
- "@types/node": "22.13.9",
97
+ "@types/node": "22.15.3",
98
98
  "@types/yargs": "17.0.33",
99
99
  "assert": "2.1.0",
100
100
  "axios-mock-adapter": "2.0.0",
101
101
  "c8": "10.1.3",
102
102
  "chai": "5.2.0",
103
103
  "chai-files": "1.4.0",
104
- "eslint": "9.21.0",
105
- "eslint-config-prettier": "10.0.1",
104
+ "eslint": "9.25.1",
106
105
  "eslint-config-ssjs": "2.0.0",
107
- "eslint-plugin-jsdoc": "50.6.3",
108
- "eslint-plugin-mocha": "10.5.0",
109
- "eslint-plugin-prettier": "5.2.3",
110
- "eslint-plugin-unicorn": "56.0.1",
111
- "fast-xml-parser": "5.0.8",
106
+ "eslint-plugin-jsdoc": "50.6.11",
107
+ "eslint-plugin-mocha": "11.0.0",
108
+ "eslint-plugin-prettier": "5.2.6",
109
+ "eslint-plugin-unicorn": "59.0.0",
110
+ "fast-xml-parser": "5.2.1",
112
111
  "globals": "16.0.0",
113
112
  "husky": "9.1.7",
114
- "lint-staged": "15.4.3",
113
+ "lint-staged": "15.5.1",
115
114
  "mocha": "11.1.0",
116
115
  "mock-fs": "5.3.0",
117
116
  "npm-run-all": "4.1.5",
118
- "prettier-eslint": "16.3.0",
119
- "typescript": "5.7.3"
117
+ "prettier-eslint": "16.4.1",
118
+ "typescript": "5.8.3"
120
119
  },
121
120
  "optionalDependencies": {
122
121
  "fsevents": "*"