mcdev 4.3.3 → 5.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 (231) hide show
  1. package/.coverage-comment-template.md +20 -0
  2. package/.coverage-comment-template.svelte +178 -0
  3. package/.eslintrc.json +2 -0
  4. package/.fork/.prettierrc +6 -0
  5. package/.fork/custom-commands.json +13 -1
  6. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  7. package/.github/workflows/code-test.yml +36 -0
  8. package/.github/workflows/coverage-base-update.yml +57 -0
  9. package/.github/workflows/coverage-develop-branch.yml +41 -0
  10. package/.github/workflows/coverage-main-branch.yml +41 -0
  11. package/.github/workflows/coverage.yml +77 -0
  12. package/.husky/post-checkout +1 -1
  13. package/.prettierrc +1 -1
  14. package/.vscode/extensions.json +0 -4
  15. package/boilerplate/config.json +1 -1
  16. package/boilerplate/files/.prettierrc +1 -1
  17. package/boilerplate/files/.vscode/extensions.json +1 -1
  18. package/boilerplate/files/.vscode/settings.json +1 -0
  19. package/boilerplate/forcedUpdates.json +8 -0
  20. package/docs/dist/documentation.md +1261 -433
  21. package/lib/Builder.js +6 -1
  22. package/lib/Deployer.js +34 -10
  23. package/lib/MetadataTypeDefinitions.js +8 -6
  24. package/lib/MetadataTypeInfo.js +8 -6
  25. package/lib/Retriever.js +4 -1
  26. package/lib/cli.js +54 -42
  27. package/lib/index.js +82 -8
  28. package/lib/metadataTypes/Asset.js +185 -31
  29. package/lib/metadataTypes/AttributeGroup.js +0 -1
  30. package/lib/metadataTypes/Automation.js +48 -5
  31. package/lib/metadataTypes/Campaign.js +20 -7
  32. package/lib/metadataTypes/ContentArea.js +1 -1
  33. package/lib/metadataTypes/DataExtension.js +221 -184
  34. package/lib/metadataTypes/DataExtensionField.js +12 -19
  35. package/lib/metadataTypes/DataExtensionTemplate.js +1 -1
  36. package/lib/metadataTypes/DataExtract.js +1 -1
  37. package/lib/metadataTypes/DataExtractType.js +1 -1
  38. package/lib/metadataTypes/Email.js +1 -1
  39. package/lib/metadataTypes/{EmailSendDefinition.js → EmailSend.js} +5 -5
  40. package/lib/metadataTypes/{EventDefinition.js → Event.js} +17 -35
  41. package/lib/metadataTypes/{FtpLocation.js → FileLocation.js} +2 -2
  42. package/lib/metadataTypes/FileTransfer.js +8 -7
  43. package/lib/metadataTypes/Filter.js +1 -1
  44. package/lib/metadataTypes/Folder.js +8 -3
  45. package/lib/metadataTypes/ImportFile.js +6 -6
  46. package/lib/metadataTypes/{Interaction.js → Journey.js} +311 -147
  47. package/lib/metadataTypes/List.js +2 -2
  48. package/lib/metadataTypes/MetadataType.js +318 -90
  49. package/lib/metadataTypes/MobileCode.js +0 -1
  50. package/lib/metadataTypes/MobileKeyword.js +336 -40
  51. package/lib/metadataTypes/MobileMessage.js +473 -0
  52. package/lib/metadataTypes/Query.js +114 -32
  53. package/lib/metadataTypes/Role.js +60 -21
  54. package/lib/metadataTypes/Script.js +5 -7
  55. package/lib/metadataTypes/SendClassification.js +40 -0
  56. package/lib/metadataTypes/SetDefinition.js +1 -7
  57. package/lib/metadataTypes/TransactionalEmail.js +2 -3
  58. package/lib/metadataTypes/TransactionalMessage.js +1 -2
  59. package/lib/metadataTypes/TransactionalSMS.js +8 -15
  60. package/lib/metadataTypes/{TriggeredSendDefinition.js → TriggeredSend.js} +35 -27
  61. package/lib/metadataTypes/User.js +1177 -0
  62. package/lib/metadataTypes/definitions/Asset.definition.js +2 -4
  63. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +1 -0
  64. package/lib/metadataTypes/definitions/Automation.definition.js +3 -2
  65. package/lib/metadataTypes/definitions/Campaign.definition.js +79 -4
  66. package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -0
  67. package/lib/metadataTypes/definitions/DataExtension.definition.js +2 -1
  68. package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -0
  69. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -0
  70. package/lib/metadataTypes/definitions/DataExtract.definition.js +1 -0
  71. package/lib/metadataTypes/definitions/DataExtractType.definition.js +1 -0
  72. package/lib/metadataTypes/definitions/Discovery.definition.js +1 -0
  73. package/lib/metadataTypes/definitions/Email.definition.js +1 -0
  74. package/lib/metadataTypes/definitions/{EmailSendDefinition.definition.js → EmailSend.definition.js} +4 -2
  75. package/lib/metadataTypes/definitions/{EventDefinition.definition.js → Event.definition.js} +2 -1
  76. package/lib/metadataTypes/definitions/{FtpLocation.definition.js → FileLocation.definition.js} +4 -3
  77. package/lib/metadataTypes/definitions/FileTransfer.definition.js +3 -2
  78. package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
  79. package/lib/metadataTypes/definitions/Folder.definition.js +2 -0
  80. package/lib/metadataTypes/definitions/ImportFile.definition.js +4 -3
  81. package/lib/metadataTypes/definitions/{Interaction.definition.js → Journey.definition.js} +11 -2
  82. package/lib/metadataTypes/definitions/List.definition.js +1 -0
  83. package/lib/metadataTypes/definitions/MobileCode.definition.js +3 -1
  84. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +27 -17
  85. package/lib/metadataTypes/definitions/MobileMessage.definition.js +743 -0
  86. package/lib/metadataTypes/definitions/Query.definition.js +3 -2
  87. package/lib/metadataTypes/definitions/Role.definition.js +5 -0
  88. package/lib/metadataTypes/definitions/Script.definition.js +1 -0
  89. package/lib/metadataTypes/definitions/SendClassification.definition.js +114 -0
  90. package/lib/metadataTypes/definitions/SetDefinition.definition.js +1 -0
  91. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +2 -1
  92. package/lib/metadataTypes/definitions/TransactionalPush.definition.js +1 -0
  93. package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +1 -0
  94. package/lib/metadataTypes/definitions/{TriggeredSendDefinition.definition.js → TriggeredSend.definition.js} +5 -3
  95. package/lib/metadataTypes/definitions/User.definition.js +365 -0
  96. package/lib/retrieveChangelog.js +1 -2
  97. package/lib/util/auth.js +29 -9
  98. package/lib/util/businessUnit.js +3 -3
  99. package/lib/util/cli.js +55 -7
  100. package/lib/util/devops.js +93 -8
  101. package/lib/util/file.js +55 -13
  102. package/lib/util/init.config.js +1 -2
  103. package/lib/util/init.npm.js +3 -3
  104. package/lib/util/util.js +68 -14
  105. package/package.json +16 -15
  106. package/test/general.test.js +62 -0
  107. package/test/mockRoot/.mcdevrc.json +7 -5
  108. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testBlocked_user.user-meta.json +23 -0
  109. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testExisting_user.user-meta.json +31 -0
  110. package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testNew_user.user-meta.json +27 -0
  111. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/{childBU_dataextension_test.dataExtension-meta.json → testExisting_dataExtension.dataExtension-meta.json} +2 -2
  112. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/{testDataExtension.dataExtension-meta.json → testNew_dataExtension.dataExtension-meta.json} +2 -2
  113. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_interaction.interaction-meta.json +576 -0
  114. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword.mobileKeyword-meta.amp +2 -0
  115. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword.mobileKeyword-meta.json +10 -0
  116. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword_blocked.mobileKeyword-meta.amp +2 -0
  117. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword_blocked.mobileKeyword-meta.json +10 -0
  118. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.amp +1 -0
  119. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.json +61 -0
  120. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.amp +1 -0
  121. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.json +60 -0
  122. package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +1 -1
  123. package/test/mockRoot/deploy/testInstance/testBU/query/testNewQuery.query-meta.json +1 -1
  124. package/test/mockRoot/deploy/testInstance/testBU/query/testNewQuery.query-meta.sql +1 -1
  125. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +1 -1
  126. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +1 -1
  127. package/test/resourceFactory.js +13 -0
  128. package/test/resources/1111111/accountUser/configure-response.xml +70 -0
  129. package/test/resources/1111111/accountUser/create-response.xml +97 -0
  130. package/test/resources/1111111/accountUser/retrieve-response.xml +156 -0
  131. package/test/resources/1111111/accountUser/update-response.xml +111 -0
  132. package/test/resources/1111111/accountUserAccount/retrieve-response.xml +77 -0
  133. package/test/resources/1111111/platform/v1/setup/quickflow/data/get-response.json +455 -0
  134. package/test/resources/1111111/role/retrieve-response.xml +76 -0
  135. package/test/resources/1111111/user/build-expected.json +16 -0
  136. package/test/resources/1111111/user/create-expected.json +21 -0
  137. package/test/resources/1111111/user/retrieve-expected.json +24 -0
  138. package/test/resources/1111111/user/template-expected.json +16 -0
  139. package/test/resources/1111111/user/update-expected.json +21 -0
  140. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/delete-response.json +1 -0
  141. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +17 -0
  142. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +3 -3
  143. package/test/resources/9999999/automation/v1/queries/get-response.json +21 -4
  144. package/test/resources/9999999/automation/v1/queries/post-response.json +4 -4
  145. package/test/resources/9999999/data/v1/customobjectdata/key/{childBU_dataextension_test → testExisting_dataExtension}/rowset/get-response.json +1 -1
  146. package/test/resources/9999999/dataExtension/build-expected.json +3 -3
  147. package/test/resources/9999999/dataExtension/create-expected.json +2 -2
  148. package/test/resources/9999999/dataExtension/create-response.xml +8 -3
  149. package/test/resources/9999999/dataExtension/retrieve-expected.json +3 -3
  150. package/test/resources/9999999/dataExtension/retrieve-response.xml +9 -4
  151. package/test/resources/9999999/dataExtension/template-expected.json +3 -3
  152. package/test/resources/9999999/dataExtension/update-expected.json +3 -3
  153. package/test/resources/9999999/dataExtension/update-response.xml +9 -4
  154. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +14 -9
  155. package/test/resources/9999999/interaction/v1/interactions/get-response.json +312 -0
  156. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/get-response.json +312 -0
  157. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/put-response.json +592 -0
  158. package/test/resources/9999999/journey/build-expected.json +572 -0
  159. package/test/resources/9999999/journey/get-expected.json +576 -0
  160. package/test/resources/9999999/journey/put-expected.json +576 -0
  161. package/test/resources/9999999/journey/template-expected.json +572 -0
  162. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/NXV4ZFMwTEFwRVczd3RaLUF5X3p5dzo4Njow/get-response.json +42 -0
  163. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/cTVJaG5oSDJPVUNHcUh6Z3pQT2tVdzo4Njow/delete-response.json +0 -0
  164. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/get-response.json +1 -0
  165. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/post-response.json +3 -0
  166. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/delete-response.json +0 -0
  167. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/get-response.json +106 -0
  168. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/post-response.json +0 -0
  169. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTQ3Ojc4OjA/get-response.json +127 -0
  170. package/test/resources/9999999/legacy/v1/beta/mobile/message/get-response.json +129 -0
  171. package/test/resources/9999999/legacy/v1/beta/mobile/message/post-response.json +3 -0
  172. package/test/resources/9999999/legacy/v1/beta2/data/campaign/get-response.json +29 -0
  173. package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +1 -1
  174. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/get-response.json +1 -1
  175. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/patch-response.json +1 -1
  176. package/test/resources/9999999/mobileKeyword/build-expected.amp +2 -0
  177. package/test/resources/9999999/mobileKeyword/build-expected.json +9 -0
  178. package/test/resources/9999999/mobileKeyword/get-expected.amp +2 -0
  179. package/test/resources/9999999/mobileKeyword/get-expected.json +15 -0
  180. package/test/resources/9999999/mobileKeyword/post-create-expected.amp +2 -0
  181. package/test/resources/9999999/mobileKeyword/post-create-expected.json +17 -0
  182. package/test/resources/9999999/mobileKeyword/template-expected.amp +2 -0
  183. package/test/resources/9999999/mobileKeyword/template-expected.json +9 -0
  184. package/test/resources/9999999/mobileMessage/build-expected.amp +1 -0
  185. package/test/resources/9999999/mobileMessage/build-expected.json +60 -0
  186. package/test/resources/9999999/mobileMessage/get-expected.amp +1 -0
  187. package/test/resources/9999999/mobileMessage/get-expected.json +61 -0
  188. package/test/resources/9999999/mobileMessage/post-create-expected.amp +1 -0
  189. package/test/resources/9999999/mobileMessage/post-create-expected.json +63 -0
  190. package/test/resources/9999999/mobileMessage/post-update-expected.amp +1 -0
  191. package/test/resources/9999999/mobileMessage/post-update-expected.json +61 -0
  192. package/test/resources/9999999/mobileMessage/template-expected.amp +1 -0
  193. package/test/resources/9999999/mobileMessage/template-expected.json +60 -0
  194. package/test/resources/9999999/query/build-expected.json +1 -1
  195. package/test/resources/9999999/query/get-expected.json +1 -1
  196. package/test/resources/9999999/query/get2-expected.json +11 -0
  197. package/test/resources/9999999/query/patch-expected.json +1 -1
  198. package/test/resources/9999999/query/post-expected.json +1 -1
  199. package/test/resources/9999999/query/template-expected.json +1 -1
  200. package/test/resources/9999999/queryDefinition/retrieve-response.xml +30 -0
  201. package/test/resources/9999999/transactionalEmail/build-expected.json +5 -5
  202. package/test/resources/9999999/transactionalEmail/get-expected.json +1 -1
  203. package/test/resources/9999999/transactionalEmail/patch-expected.json +1 -1
  204. package/test/resources/9999999/transactionalEmail/post-expected.json +1 -1
  205. package/test/resources/9999999/transactionalEmail/template-expected.json +5 -5
  206. package/test/resources/9999999/transactionalPush/build-expected.json +2 -2
  207. package/test/resources/9999999/transactionalPush/template-expected.json +2 -2
  208. package/test/resources/9999999/transactionalSMS/build-expected.json +3 -3
  209. package/test/resources/9999999/transactionalSMS/template-expected.json +3 -3
  210. package/test/{dataExtension.test.js → type.dataExtension.test.js} +78 -21
  211. package/test/{interaction.test.js → type.journey.test.js} +64 -30
  212. package/test/type.mobileKeyword.test.js +250 -0
  213. package/test/type.mobileMessage.test.js +205 -0
  214. package/test/{query.test.js → type.query.test.js} +102 -5
  215. package/test/{transactionalEmail.test.js → type.transactionalEmail.test.js} +40 -2
  216. package/test/{transactionalPush.test.js → type.transactionalPush.test.js} +41 -2
  217. package/test/{transactionalSMS.test.js → type.transactionalSMS.test.js} +73 -3
  218. package/test/type.user.test.js +160 -0
  219. package/test/utils.js +17 -5
  220. package/types/mcdev.d.js +48 -15
  221. package/.github/workflows/code-analysis.yml +0 -57
  222. package/lib/metadataTypes/AccountUser.js +0 -426
  223. package/lib/metadataTypes/definitions/AccountUser.definition.js +0 -227
  224. package/test/mockRoot/deploy/testInstance/testBU/interaction/testExisting_interaction.interaction-meta.json +0 -266
  225. package/test/resources/9999999/interaction/build-expected.json +0 -260
  226. package/test/resources/9999999/interaction/get-expected.json +0 -264
  227. package/test/resources/9999999/interaction/put-expected.json +0 -264
  228. package/test/resources/9999999/interaction/template-expected.json +0 -260
  229. package/test/resources/9999999/interaction/v1/interactions/put-response.json +0 -280
  230. /package/test/mockRoot/deploy/testInstance/testBU/{interaction → journey}/testNew_interaction.interaction-meta.json +0 -0
  231. /package/test/resources/9999999/{interaction → journey}/post-expected.json +0 -0
@@ -18,7 +18,7 @@ class DataExtensionField extends MetadataType {
18
18
  * @returns {Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}>} Promise of items
19
19
  */
20
20
  static async retrieve(retrieveDir, additionalFields) {
21
- return super.retrieveSOAP(retrieveDir, null, additionalFields);
21
+ return super.retrieveSOAP(retrieveDir, null, null, additionalFields);
22
22
  }
23
23
  /**
24
24
  * Retrieves all records for caching
@@ -28,7 +28,7 @@ class DataExtensionField extends MetadataType {
28
28
  * @returns {Promise.<{metadata: TYPE.DataExtensionFieldMap, type: string}>} Promise of items
29
29
  */
30
30
  static async retrieveForCache(requestParams, additionalFields) {
31
- return super.retrieveSOAP(null, requestParams, additionalFields);
31
+ return super.retrieveSOAP(null, requestParams, null, additionalFields);
32
32
  }
33
33
  /**
34
34
  * helper for {@link DataExtension._retrieveFieldsForSingleDe} that sorts the fields into an array
@@ -96,7 +96,7 @@ class DataExtensionField extends MetadataType {
96
96
  *
97
97
  * @param {TYPE.DataExtensionFieldItem[]} deployColumns Columns of data extension that will be deployed
98
98
  * @param {string} deKey external/customer key of Data Extension
99
- * @returns {Object.<string, TYPE.DataExtensionFieldItem>} existing fields by their original name to allow re-adding FieldType after update
99
+ * @returns {Promise.<Object.<string, TYPE.DataExtensionFieldItem>>} existing fields by their original name to allow re-adding FieldType after update
100
100
  */
101
101
  static async prepareDeployColumnsOnUpdate(deployColumns, deKey) {
102
102
  // get row count to know which field restrictions apply
@@ -258,17 +258,16 @@ class DataExtensionField extends MetadataType {
258
258
  * @returns {Promise.<boolean>} deletion success status
259
259
  */
260
260
  static deleteByKey(customerKey) {
261
- return this.deleteByKeySOAP(customerKey, false);
261
+ return this.deleteByKeySOAP(customerKey);
262
262
  }
263
263
 
264
264
  /**
265
265
  * Delete a data extension from the specified business unit
266
266
  *
267
267
  * @param {string} customerKey Identifier of metadata
268
- * @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method
269
268
  * @returns {boolean} deletion success flag
270
269
  */
271
- static async deleteByKeySOAP(customerKey, handleOutside) {
270
+ static async deleteByKeySOAP(customerKey) {
272
271
  const [deKey, fieldKey] = customerKey.split('.');
273
272
  customerKey = `[${deKey}].[${fieldKey}]`;
274
273
 
@@ -305,22 +304,16 @@ class DataExtensionField extends MetadataType {
305
304
  null
306
305
  );
307
306
 
308
- if (!handleOutside) {
309
- Util.logger.info(`- deleted ${this.definition.type}: ${customerKey}`);
310
- }
307
+ Util.logger.info(`- deleted ${this.definition.type}: ${customerKey}`);
311
308
  this.postDeleteTasks(customerKey);
312
309
  return true;
313
310
  } catch (ex) {
314
- if (handleOutside) {
315
- throw ex;
316
- } else {
317
- const errorMsg = ex.results?.length
318
- ? `${ex.results[0].StatusMessage} (Code ${ex.results[0].ErrorCode})`
319
- : ex.message;
320
- Util.logger.error(
321
- `- error deleting ${this.definition.type} '${customerKey}': ${errorMsg}`
322
- );
323
- }
311
+ const errorMsg = ex.results?.length
312
+ ? `${ex.results[0].StatusMessage} (Code ${ex.results[0].ErrorCode})`
313
+ : ex.message;
314
+ Util.logger.error(
315
+ `- error deleting ${this.definition.type} '${customerKey}': ${errorMsg}`
316
+ );
324
317
 
325
318
  return false;
326
319
  }
@@ -30,7 +30,7 @@ class DataExtensionTemplate extends MetadataType {
30
30
  },
31
31
  };
32
32
  }
33
- return super.retrieveSOAP(retrieveDir, requestParams);
33
+ return super.retrieveSOAP(retrieveDir, requestParams, key);
34
34
  }
35
35
  }
36
36
 
@@ -23,7 +23,7 @@ class DataExtract extends MetadataType {
23
23
  * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
24
24
  */
25
25
  static async retrieve(retrieveDir, _, __, key) {
26
- return super.retrieveREST(retrieveDir, '/automation/v1/dataextracts/', null, null, key);
26
+ return super.retrieveREST(retrieveDir, '/automation/v1/dataextracts/', null, key);
27
27
  }
28
28
  /**
29
29
  * Retrieves Metadata of Data Extract Activity for caching
@@ -21,7 +21,7 @@ class DataExtractType extends MetadataType {
21
21
  * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
22
22
  */
23
23
  static retrieve(retrieveDir, _, __, key) {
24
- return super.retrieveREST(retrieveDir, '/automation/v1/dataextracttypes/', null, null, key);
24
+ return super.retrieveREST(retrieveDir, '/automation/v1/dataextracttypes/', null, key);
25
25
  }
26
26
  /**
27
27
  * Retrieves Metadata of Data Extract Type for caching.
@@ -32,7 +32,7 @@ class Email extends MetadataType {
32
32
  };
33
33
  }
34
34
  // !dont activate `await File.initPrettier('html');` as we only want to retrieve for migration and formatting might mess with the outcome
35
- return super.retrieveSOAP(retrieveDir, requestParams);
35
+ return super.retrieveSOAP(retrieveDir, requestParams, key);
36
36
  }
37
37
  /**
38
38
  * Helper for writing Metadata to disk, used for Retrieve and deploy
@@ -10,7 +10,7 @@ const cache = require('../util/cache');
10
10
  *
11
11
  * @augments MetadataType
12
12
  */
13
- class EmailSendDefinition extends MetadataType {
13
+ class EmailSend extends MetadataType {
14
14
  /**
15
15
  * Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
16
16
  *
@@ -52,7 +52,7 @@ class EmailSendDefinition extends MetadataType {
52
52
  },
53
53
  };
54
54
  }
55
- return super.retrieveSOAP(retrieveDir, requestParams);
55
+ return super.retrieveSOAP(retrieveDir, requestParams, key);
56
56
  }
57
57
 
58
58
  /**
@@ -82,7 +82,7 @@ class EmailSendDefinition extends MetadataType {
82
82
  * @returns {Promise.<boolean>} deletion success status
83
83
  */
84
84
  static deleteByKey(customerKey) {
85
- return super.deleteByKeySOAP(customerKey, false);
85
+ return super.deleteByKeySOAP(customerKey);
86
86
  }
87
87
 
88
88
  /**
@@ -292,6 +292,6 @@ class EmailSendDefinition extends MetadataType {
292
292
  }
293
293
 
294
294
  // Assign definition to static attributes
295
- EmailSendDefinition.definition = require('../MetadataTypeDefinitions').emailSendDefinition;
295
+ EmailSend.definition = require('../MetadataTypeDefinitions').emailSend;
296
296
 
297
- module.exports = EmailSendDefinition;
297
+ module.exports = EmailSend;
@@ -7,11 +7,11 @@ const File = require('../util/file');
7
7
  const cache = require('../util/cache');
8
8
 
9
9
  /**
10
- * EventDefinition MetadataType
10
+ * Event MetadataType
11
11
  *
12
12
  * @augments MetadataType
13
13
  */
14
- class EventDefinition extends MetadataType {
14
+ class Event extends MetadataType {
15
15
  /**
16
16
  * Retrieves Metadata of Event Definition.
17
17
  * Endpoint /interaction/v1/EventDefinitions return all Event Definitions with all details.
@@ -31,7 +31,6 @@ class EventDefinition extends MetadataType {
31
31
  key ? '/key:' + encodeURIComponent(key) : ''
32
32
  }?extras=all`,
33
33
  null,
34
- null,
35
34
  key
36
35
  );
37
36
  }
@@ -77,7 +76,7 @@ class EventDefinition extends MetadataType {
77
76
  );
78
77
  if (!eventDef.dataExtensionId) {
79
78
  throw new Error(
80
- `EventDefinition.parseMetadata:: ` +
79
+ `Event.parseMetadata:: ` +
81
80
  `No Data Extension found for ` +
82
81
  `event: ${eventDef.name}. ` +
83
82
  `This cannot be templated`
@@ -101,7 +100,7 @@ class EventDefinition extends MetadataType {
101
100
  );
102
101
  }
103
102
  } catch (ex) {
104
- Util.logger.error('EventDefinition.retrieveAsTemplate:: ' + ex);
103
+ Util.logger.error('Event.retrieveAsTemplate:: ' + ex);
105
104
  return null;
106
105
  }
107
106
  }
@@ -137,21 +136,22 @@ class EventDefinition extends MetadataType {
137
136
  * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField
138
137
  * @param {string} deployDir directory where deploy metadata are saved
139
138
  * @param {string} retrieveDir directory where metadata after deploy should be saved
139
+ * @param {boolean} [isRefresh] optional flag - so far not used by eventDefinition
140
140
  * @returns {Promise.<TYPE.MetadataTypeMap>} Promise of keyField => metadata map
141
141
  */
142
- static async deploy(metadata, deployDir, retrieveDir) {
142
+ static async deploy(metadata, deployDir, retrieveDir, isRefresh) {
143
143
  Util.logBeta(this.definition.type);
144
- return super.deploy(metadata, deployDir, retrieveDir);
144
+ return super.deploy(metadata, deployDir, retrieveDir, isRefresh);
145
145
  }
146
146
 
147
147
  /**
148
148
  * Creates a single Event Definition
149
149
  *
150
- * @param {TYPE.MetadataTypeItem} EventDefinition a single Event Definition
150
+ * @param {TYPE.MetadataTypeItem} metadata a single Event Definition
151
151
  * @returns {Promise} Promise
152
152
  */
153
- static create(EventDefinition) {
154
- return super.createREST(EventDefinition, '/interaction/v1/EventDefinitions/');
153
+ static create(metadata) {
154
+ return super.createREST(metadata, '/interaction/v1/EventDefinitions/');
155
155
  }
156
156
 
157
157
  /**
@@ -161,29 +161,11 @@ class EventDefinition extends MetadataType {
161
161
  * @returns {Promise} Promise
162
162
  */
163
163
  static async update(metadataEntry) {
164
- if (metadataEntry === null || metadataEntry === undefined) {
165
- return null;
166
- }
167
- this.removeNotUpdateableFields(metadataEntry);
168
- const options = {
169
- uri: '/interaction/v1/EventDefinitions/' + metadataEntry.id,
170
- json: metadataEntry,
171
- headers: {},
172
- };
173
- try {
174
- const response = await this.client.rest.put(options);
175
- super.checkForErrors(response);
176
- return response;
177
- } catch (ex) {
178
- Util.metadataLogger(
179
- 'error',
180
- this.definition.type,
181
- 'updateREST',
182
- ex,
183
- metadataEntry.name
184
- );
185
- return null;
186
- }
164
+ return super.updateREST(
165
+ metadataEntry,
166
+ '/interaction/v1/EventDefinitions/' + metadataEntry.id,
167
+ 'put'
168
+ );
187
169
  }
188
170
 
189
171
  /**
@@ -232,6 +214,6 @@ class EventDefinition extends MetadataType {
232
214
  }
233
215
 
234
216
  // Assign definition to static attributes
235
- EventDefinition.definition = require('../MetadataTypeDefinitions').eventDefinition;
217
+ Event.definition = require('../MetadataTypeDefinitions').event;
236
218
 
237
- module.exports = EventDefinition;
219
+ module.exports = Event;
@@ -20,7 +20,7 @@ class FtpLocation extends MetadataType {
20
20
  * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
21
21
  */
22
22
  static retrieve(retrieveDir, _, __, key) {
23
- return super.retrieveREST(retrieveDir, '/automation/v1/ftplocations/', null, null, key);
23
+ return super.retrieveREST(retrieveDir, '/automation/v1/ftplocations/', null, key);
24
24
  }
25
25
 
26
26
  /**
@@ -34,6 +34,6 @@ class FtpLocation extends MetadataType {
34
34
  }
35
35
 
36
36
  // Assign definition to static attributes
37
- FtpLocation.definition = require('../MetadataTypeDefinitions').ftpLocation;
37
+ FtpLocation.definition = require('../MetadataTypeDefinitions').fileLocation;
38
38
 
39
39
  module.exports = FtpLocation;
@@ -23,7 +23,7 @@ class FileTransfer extends MetadataType {
23
23
  * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
24
24
  */
25
25
  static async retrieve(retrieveDir, _, __, key) {
26
- return super.retrieveREST(retrieveDir, '/automation/v1/filetransfers/', null, null, key);
26
+ return super.retrieveREST(retrieveDir, '/automation/v1/filetransfers/', null, key);
27
27
  }
28
28
  /**
29
29
  * Retrieves Metadata of FileTransfer Activity for caching
@@ -124,16 +124,17 @@ class FileTransfer extends MetadataType {
124
124
  * @returns {Promise} Promise
125
125
  */
126
126
  static async preDeployTasks(metadata) {
127
- if (metadata.r__ftpLocation_name) {
127
+ if (metadata.r__fileLocation_name) {
128
128
  metadata.fileTransferLocationId = cache.searchForField(
129
- 'ftpLocation',
130
- metadata.r__ftpLocation_name,
129
+ 'fileLocation',
130
+ metadata.r__fileLocation_name,
131
131
  'name',
132
132
  'id'
133
133
  );
134
+ delete metadata.r__fileLocation_name;
134
135
  } else {
135
136
  throw new Error(
136
- 'r__ftpLocation_name not set. Please ensure the source is properly set up and re-retrieve it first.'
137
+ 'r__fileLocation_name not set. Please ensure the source is properly set up and re-retrieve it first.'
137
138
  );
138
139
  }
139
140
  return metadata;
@@ -146,8 +147,8 @@ class FileTransfer extends MetadataType {
146
147
  */
147
148
  static parseMetadata(metadata) {
148
149
  try {
149
- metadata.r__ftpLocation_name = cache.searchForField(
150
- 'ftpLocation',
150
+ metadata.r__fileLocation_name = cache.searchForField(
151
+ 'fileLocation',
151
152
  metadata.fileTransferLocationId,
152
153
  'id',
153
154
  'name'
@@ -22,7 +22,7 @@ class Filter extends MetadataType {
22
22
  * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
23
23
  */
24
24
  static async retrieve(retrieveDir, _, __, key) {
25
- return super.retrieveREST(retrieveDir, '/automation/v1/filters/', null, null, key);
25
+ return super.retrieveREST(retrieveDir, '/automation/v1/filters/', null, key);
26
26
  }
27
27
  }
28
28
 
@@ -167,6 +167,7 @@ class Folder extends MetadataType {
167
167
  * @returns {Promise.<object>} Promise of saved metadata
168
168
  */
169
169
  static async upsert(metadata) {
170
+ const orignalMetadata = JSON.parse(JSON.stringify(metadata));
170
171
  let updateCount = 0;
171
172
  let updateFailedCount = 0;
172
173
  let createCount = 0;
@@ -318,6 +319,10 @@ class Folder extends MetadataType {
318
319
  ` - Folders are recognized for updates based on their CustomerKey or, if that is not given, their folder-path.`
319
320
  );
320
321
  }
322
+ await this.postDeployTasks(upsertResults, orignalMetadata, {
323
+ created: createCount,
324
+ updated: updateCount,
325
+ });
321
326
  return upsertResults;
322
327
  }
323
328
 
@@ -336,7 +341,7 @@ class Folder extends MetadataType {
336
341
  }
337
342
  const path = metadataEntry.Path;
338
343
  try {
339
- const response = await super.createSOAP(metadataEntry, 'DataFolder', true);
344
+ const response = await super.createSOAP(metadataEntry, true);
340
345
  if (response) {
341
346
  response.Results[0].Object = metadataEntry;
342
347
  response.Results[0].Object.ID = response.Results[0].NewID;
@@ -368,7 +373,7 @@ class Folder extends MetadataType {
368
373
  static async update(metadataEntry) {
369
374
  const path = metadataEntry.Path;
370
375
  try {
371
- const response = await super.updateSOAP(metadataEntry, 'DataFolder', true);
376
+ const response = await super.updateSOAP(metadataEntry, true);
372
377
  if (response) {
373
378
  response.Results[0].Object = metadataEntry;
374
379
  response.Results[0].Object.CustomerKey = metadataEntry.CustomerKey;
@@ -460,7 +465,7 @@ class Folder extends MetadataType {
460
465
  // should not be in the path for the metadata. In case no split then return empty as this is root
461
466
 
462
467
  const standardSubDir = File.reverseFilterIllegalFilenames(
463
- subdir.replace(/\\/g, '/').split(/folder\//)[1] || ''
468
+ subdir.replaceAll('\\', '/').split(/folder\//)[1] || ''
464
469
  );
465
470
  for (const fileName of File.readdirSync(subdir)) {
466
471
  try {
@@ -24,7 +24,7 @@ class ImportFile extends MetadataType {
24
24
  * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
25
25
  */
26
26
  static retrieve(retrieveDir, _, __, key) {
27
- return super.retrieveREST(retrieveDir, '/automation/v1/imports/', null, null, key);
27
+ return super.retrieveREST(retrieveDir, '/automation/v1/imports/', null, key);
28
28
  }
29
29
 
30
30
  /**
@@ -125,12 +125,12 @@ class ImportFile extends MetadataType {
125
125
  */
126
126
  static async preDeployTasks(metadata) {
127
127
  metadata.fileTransferLocationId = cache.searchForField(
128
- 'ftpLocation',
129
- metadata.r__ftpLocation_name,
128
+ 'fileLocation',
129
+ metadata.r__fileLocation_name,
130
130
  'name',
131
131
  'id'
132
132
  );
133
- delete metadata.r__ftpLocation_name;
133
+ delete metadata.r__fileLocation_name;
134
134
 
135
135
  if (metadata.c__destinationType === 'DataExtension') {
136
136
  if (metadata.r__dataExtension_CustomerKey) {
@@ -179,8 +179,8 @@ class ImportFile extends MetadataType {
179
179
  * @returns {TYPE.MetadataTypeItem} parsed metadata definition
180
180
  */
181
181
  static parseMetadata(metadata) {
182
- metadata.r__ftpLocation_name = cache.searchForField(
183
- 'ftpLocation',
182
+ metadata.r__fileLocation_name = cache.searchForField(
183
+ 'fileLocation',
184
184
  metadata.fileTransferLocationId,
185
185
  'id',
186
186
  'name'