mcdev 5.1.0 → 5.3.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 (256) hide show
  1. package/.eslintrc.json +4 -4
  2. package/.fork/custom-commands.json +12 -0
  3. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  4. package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +19 -0
  5. package/.github/PULL_REQUEST_TEMPLATE.md +2 -2
  6. package/.github/workflows/coverage-develop-branch.yml +0 -2
  7. package/.github/workflows/coverage-main-branch.yml +0 -2
  8. package/.github/workflows/coverage.yml +0 -2
  9. package/.husky/post-checkout +1 -0
  10. package/.husky/post-merge +1 -0
  11. package/.vscode/extensions.json +4 -0
  12. package/docs/dist/documentation.md +1034 -296
  13. package/lib/Deployer.js +25 -25
  14. package/lib/MetadataTypeDefinitions.js +2 -1
  15. package/lib/MetadataTypeInfo.js +2 -1
  16. package/lib/Retriever.js +1 -1
  17. package/lib/cli.js +165 -10
  18. package/lib/index.js +398 -95
  19. package/lib/metadataTypes/Asset.js +10 -11
  20. package/lib/metadataTypes/AttributeGroup.js +76 -2
  21. package/lib/metadataTypes/AttributeSet.js +367 -0
  22. package/lib/metadataTypes/Automation.js +483 -137
  23. package/lib/metadataTypes/DataExtension.js +465 -68
  24. package/lib/metadataTypes/DataExtensionField.js +31 -14
  25. package/lib/metadataTypes/Event.js +2 -3
  26. package/lib/metadataTypes/Folder.js +1 -1
  27. package/lib/metadataTypes/Journey.js +13 -7
  28. package/lib/metadataTypes/MetadataType.js +212 -54
  29. package/lib/metadataTypes/MobileKeyword.js +9 -9
  30. package/lib/metadataTypes/MobileMessage.js +5 -5
  31. package/lib/metadataTypes/Query.js +26 -10
  32. package/lib/metadataTypes/Script.js +3 -3
  33. package/lib/metadataTypes/TransactionalEmail.js +94 -17
  34. package/lib/metadataTypes/TransactionalMessage.js +3 -2
  35. package/lib/metadataTypes/TransactionalSMS.js +5 -5
  36. package/lib/metadataTypes/TriggeredSend.js +25 -50
  37. package/lib/metadataTypes/User.js +7 -4
  38. package/lib/metadataTypes/Verification.js +230 -0
  39. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +119 -108
  40. package/lib/metadataTypes/definitions/{SetDefinition.definition.js → AttributeSet.definition.js} +123 -43
  41. package/lib/metadataTypes/definitions/Automation.definition.js +23 -15
  42. package/lib/metadataTypes/definitions/ImportFile.definition.js +36 -6
  43. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +19 -1
  44. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +1 -0
  45. package/lib/metadataTypes/definitions/Verification.definition.js +88 -0
  46. package/lib/util/cache.js +9 -4
  47. package/lib/util/cli.js +40 -0
  48. package/lib/util/file.js +2 -2
  49. package/lib/util/init.js +84 -0
  50. package/lib/util/util.js +121 -13
  51. package/package.json +13 -13
  52. package/test/mockRoot/.mcdevrc.json +1 -1
  53. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testExisting_dataExtensionShared.dataExtension-meta.json +59 -0
  54. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testNew_dataExtensionShared.dataExtension-meta.json +23 -0
  55. package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +1 -2
  56. package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +9 -6
  57. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testExisting_dataExtension.dataExtension-meta.json +1 -0
  58. package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testExisting_dataExtract.dataExtract-meta.json +35 -0
  59. package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testNew_dataExtract.dataExtract-meta.json +35 -0
  60. package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testExisting_fileTransfer.fileTransfer-meta.json +17 -0
  61. package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testNew_fileTransfer.fileTransfer-meta.json +17 -0
  62. package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +29 -0
  63. package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +29 -0
  64. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.json +11 -0
  65. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.sql +6 -0
  66. package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.json +6 -0
  67. package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.ssjs +1 -0
  68. package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.json +6 -0
  69. package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.ssjs +1 -0
  70. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +3 -4
  71. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +1 -6
  72. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testExisting_triggeredSend.triggeredSend-meta.json +29 -0
  73. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testNew_triggeredSend.triggeredSend-meta.json +29 -0
  74. package/test/mockRoot/deploy/testInstance/testBU/verification/testExisting_39f6a488-20eb-4ba0-b0b9.verification-meta.json +11 -0
  75. package/test/mockRoot/deploy/testInstance/testBU/verification/testNew_39f6a488-20eb-4ba0-b0b9.verification-meta.json +11 -0
  76. package/test/resourceFactory.js +77 -12
  77. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-response.xml +27 -0
  78. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDEmaillike@-response.xml +156 -0
  79. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml +87 -0
  80. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmaillike@-response.xml +156 -0
  81. package/test/resources/1111111/accountUser/retrieve-CustomerKey=testExisting_userANDActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml +27 -0
  82. package/test/resources/1111111/accountUserAccount/retrieve-AccountUser.AccountUserID=700301950-response.xml +60 -0
  83. package/test/resources/1111111/data/v1/customobjectdata/key/testExisting_dataExtensionShared/rowset/get-response.json +13 -0
  84. package/test/resources/1111111/dataExtension/create-expected.json +23 -0
  85. package/test/resources/1111111/dataExtension/create-response.xml +59 -0
  86. package/test/resources/1111111/dataExtension/retrieve-expected.json +55 -0
  87. package/test/resources/1111111/dataExtension/retrieve-expected.md +18 -0
  88. package/test/resources/1111111/dataExtension/retrieve-response.xml +27 -1
  89. package/test/resources/1111111/dataExtension/update-expected.json +55 -0
  90. package/test/resources/1111111/dataExtension/update-response.xml +57 -0
  91. package/test/resources/1111111/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtensionShared].[TriggerUpdate_randomNumber_]-response.xml +45 -0
  92. package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +98 -0
  93. package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionSharedORDataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +98 -0
  94. package/test/resources/1111111/dataExtensionField/retrieve-response.xml +98 -0
  95. package/test/resources/1111111/dataExtensionTemplate/retrieve-response.xml +303 -0
  96. package/test/resources/1111111/dataFolder/retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml +387 -0
  97. package/test/resources/1111111/dataFolder/retrieve-response.xml +353 -9
  98. package/test/resources/1111111/user/retrieve-expected.md +4 -2
  99. package/test/resources/9999999/attributeGroup/retrieve-expected.json +25 -0
  100. package/test/resources/9999999/attributeSet/retrieve-expected.json +143 -0
  101. package/test/resources/9999999/automation/build-expected.json +5 -2
  102. package/test/resources/9999999/automation/create-expected.json +11 -8
  103. package/test/resources/9999999/automation/create-testNew_automation-expected.md +5 -4
  104. package/test/resources/9999999/automation/patch_fixKeys-pause-expected.json +44 -0
  105. package/test/resources/9999999/automation/patch_fixKeys-schedule-expected.json +44 -0
  106. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +42 -0
  107. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_pause-response.xml +42 -0
  108. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +42 -0
  109. package/test/resources/9999999/automation/perform-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +42 -0
  110. package/test/resources/9999999/automation/retrieve-expected.json +5 -2
  111. package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +3 -2
  112. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +52 -0
  113. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-pause-response.xml +38 -0
  114. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_pause-response.xml +52 -0
  115. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +52 -0
  116. package/test/resources/9999999/automation/schedule-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +52 -0
  117. package/test/resources/9999999/automation/template-expected.json +5 -2
  118. package/test/resources/9999999/automation/update-expected.json +1 -2
  119. package/test/resources/9999999/automation/update-testExisting_automation-expected.md +2 -2
  120. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +7 -0
  121. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/get-response.json +85 -0
  122. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/patch-response.json +85 -0
  123. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/get-response.json +85 -0
  124. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/patch-response.json +85 -0
  125. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/get-response.json +85 -0
  126. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/patch-response.json +85 -0
  127. package/test/resources/9999999/automation/v1/automations/a8afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +1 -1
  128. package/test/resources/9999999/automation/v1/automations/post-response.json +27 -19
  129. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/patch-response.json +38 -0
  130. package/test/resources/9999999/automation/v1/dataextracts/post-response.json +38 -0
  131. package/test/resources/9999999/automation/v1/dataextracttypes/get-response.json +50 -0
  132. package/test/resources/9999999/automation/v1/dataverifications/post-response.json +12 -0
  133. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/delete-response.json +0 -0
  134. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/get-response.json +12 -0
  135. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/patch-response.json +12 -0
  136. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/patch-response.json +18 -0
  137. package/test/resources/9999999/automation/v1/filetransfers/post-response.json +18 -0
  138. package/test/resources/9999999/automation/v1/ftplocations/get-response.json +18 -0
  139. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/patch-response.json +31 -0
  140. package/test/resources/9999999/automation/v1/imports/get-response.json +1 -1
  141. package/test/resources/9999999/automation/v1/imports/post-response.json +30 -0
  142. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dae/actions/start/post-response.txt +1 -0
  143. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/get-response.json +17 -0
  144. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/patch-response.json +18 -0
  145. package/test/resources/9999999/automation/v1/queries/get-response.json +18 -1
  146. package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/patch-response.json +10 -0
  147. package/test/resources/9999999/automation/v1/scripts/get-response.json +12 -2
  148. package/test/resources/9999999/automation/v1/scripts/post-response.json +10 -0
  149. package/test/resources/9999999/dataExtension/build-expected.json +16 -0
  150. package/test/resources/9999999/dataExtension/delete-response.xml +42 -0
  151. package/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml +52 -0
  152. package/test/resources/9999999/dataExtension/retrieve-expected.json +16 -0
  153. package/test/resources/9999999/dataExtension/retrieve-expected.md +3 -1
  154. package/test/resources/9999999/dataExtension/template-expected.json +16 -0
  155. package/test/resources/9999999/dataExtension/update-expected.json +17 -1
  156. package/test/resources/9999999/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtension].[LastName]-response.xml +44 -0
  157. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml +133 -0
  158. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml +99 -0
  159. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +36 -1
  160. package/test/resources/9999999/dataExtract/build-expected.json +35 -0
  161. package/test/resources/9999999/dataExtract/get-expected.json +39 -0
  162. package/test/resources/9999999/dataExtract/patch-expected.json +37 -0
  163. package/test/resources/9999999/dataExtract/post-expected.json +37 -0
  164. package/test/resources/9999999/dataExtract/template-expected.json +35 -0
  165. package/test/resources/9999999/dataFolder/retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml +136 -0
  166. package/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml +48 -0
  167. package/test/resources/9999999/dataFolder/retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml +117 -0
  168. package/test/resources/9999999/dataFolder/retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml +276 -0
  169. package/test/resources/9999999/dataFolder/retrieve-response.xml +23 -0
  170. package/test/resources/9999999/email/retrieve-response.xml +203 -0
  171. package/test/resources/9999999/fileTransfer/build-expected.json +15 -0
  172. package/test/resources/9999999/fileTransfer/get-expected.json +17 -0
  173. package/test/resources/9999999/fileTransfer/patch-expected.json +17 -0
  174. package/test/resources/9999999/fileTransfer/post-expected.json +17 -0
  175. package/test/resources/9999999/fileTransfer/template-expected.json +15 -0
  176. package/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json +628 -0
  177. package/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json +20194 -0
  178. package/test/resources/9999999/importFile/build-expected.json +27 -0
  179. package/test/resources/9999999/importFile/get-expected.json +29 -0
  180. package/test/resources/9999999/importFile/patch-expected.json +29 -0
  181. package/test/resources/9999999/importFile/post-expected.json +29 -0
  182. package/test/resources/9999999/importFile/template-expected.json +27 -0
  183. package/test/resources/9999999/interaction/v1/interactions/233d4413-922c-4568-85a5-e5cc77efc3be/delete-response.json +1 -0
  184. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/get-response.json +1 -1
  185. package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +1 -1
  186. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/delete-response.json +6 -0
  187. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml +32 -0
  188. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml +32 -0
  189. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml +32 -0
  190. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml +32 -0
  191. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml +30 -0
  192. package/test/resources/9999999/program/retrieve-response.xml +21 -3
  193. package/test/resources/9999999/query/patch_fixKeys-expected.json +11 -0
  194. package/test/resources/9999999/query/patch_fixKeys-expected.sql +6 -0
  195. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml +30 -0
  196. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml +30 -0
  197. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml +30 -0
  198. package/test/resources/9999999/script/build-expected.json +6 -0
  199. package/test/resources/9999999/script/build-expected.ssjs +1 -0
  200. package/test/resources/9999999/script/get-expected.json +8 -0
  201. package/test/resources/9999999/script/get-expected.ssjs +1 -0
  202. package/test/resources/9999999/script/get_noScriptTag-expected.html +1 -0
  203. package/test/resources/9999999/script/get_noScriptTag-expected.json +8 -0
  204. package/test/resources/9999999/script/patch-expected.json +8 -0
  205. package/test/resources/9999999/script/patch-expected.ssjs +1 -0
  206. package/test/resources/9999999/script/post-expected.json +8 -0
  207. package/test/resources/9999999/script/post-expected.ssjs +1 -0
  208. package/test/resources/9999999/script/template-expected.json +6 -0
  209. package/test/resources/9999999/script/template-expected.ssjs +1 -0
  210. package/test/resources/9999999/transactionalEmail/build-expected.json +3 -7
  211. package/test/resources/9999999/transactionalEmail/get-expected.json +3 -7
  212. package/test/resources/9999999/transactionalEmail/patch-expected.json +3 -7
  213. package/test/resources/9999999/transactionalEmail/post-expected.json +3 -7
  214. package/test/resources/9999999/transactionalEmail/template-expected.json +3 -7
  215. package/test/resources/9999999/triggeredSend/build-expected.json +29 -0
  216. package/test/resources/9999999/triggeredSend/get-expected.json +29 -0
  217. package/test/resources/9999999/triggeredSend/patch-expected.json +29 -0
  218. package/test/resources/9999999/triggeredSend/post-expected.json +29 -0
  219. package/test/resources/9999999/triggeredSend/template-expected.json +29 -0
  220. package/test/resources/9999999/triggeredSendDefinition/create-response.xml +75 -0
  221. package/test/resources/9999999/triggeredSendDefinition/delete-response.xml +36 -0
  222. package/test/resources/9999999/triggeredSendDefinition/{retrieve-response.xml → retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml} +4 -4
  223. package/test/resources/9999999/triggeredSendDefinition/update-response.xml +74 -0
  224. package/test/resources/9999999/verification/build-expected.json +11 -0
  225. package/test/resources/9999999/verification/get-expected.json +11 -0
  226. package/test/resources/9999999/verification/patch-expected.json +11 -0
  227. package/test/resources/9999999/verification/post-expected.json +11 -0
  228. package/test/resources/9999999/verification/template-expected.json +11 -0
  229. package/test/type.attributeGroup.test.js +55 -0
  230. package/test/type.attributeSet.test.js +55 -0
  231. package/test/type.automation.test.js +650 -17
  232. package/test/type.dataExtension.test.js +205 -46
  233. package/test/type.dataExtract.test.js +194 -0
  234. package/test/type.fileTransfer.test.js +192 -0
  235. package/test/type.importFile.test.js +193 -0
  236. package/test/type.journey.test.js +38 -11
  237. package/test/type.mobileKeyword.test.js +6 -5
  238. package/test/type.mobileMessage.test.js +6 -4
  239. package/test/type.query.test.js +470 -17
  240. package/test/type.script.test.js +372 -0
  241. package/test/type.transactionalEmail.test.js +12 -11
  242. package/test/type.transactionalPush.test.js +2 -4
  243. package/test/type.transactionalSMS.test.js +2 -4
  244. package/test/type.triggeredSend.test.js +154 -0
  245. package/test/type.user.test.js +22 -10
  246. package/test/type.verification.test.js +173 -0
  247. package/test/utils.js +11 -2
  248. package/types/mcdev.d.js +14 -0
  249. package/lib/metadataTypes/SetDefinition.js +0 -37
  250. /package/test/resources/1111111/accountUser/{retrieve-response.xml → retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-response.xml} +0 -0
  251. /package/test/resources/1111111/accountUserAccount/{retrieve-response.xml → retrieve-AccountUser.AccountUserIDIN700301950,700301951,7471228-response.xml} +0 -0
  252. /package/test/resources/1111111/businessUnit/{retrieve-response.xml → retrieve-ID=1111111-response.xml} +0 -0
  253. /package/test/resources/1111111/list/{retrieve-response.xml → retrieve-CustomerKey=All SubscribersORListName=All Subscribers-response.xml} +0 -0
  254. /package/test/resources/1111111/role/{retrieve-response.xml → retrieve-IsPrivate=false-response.xml} +0 -0
  255. /package/test/resources/9999999/emailSendDefinition/{retrieve-response.xml → retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml} +0 -0
  256. /package/test/resources/9999999/queryDefinition/{retrieve-response.xml → retrieve-CustomerKey=testExisting_queryANDStatus=Active-response.xml} +0 -0
@@ -0,0 +1,230 @@
1
+ 'use strict';
2
+
3
+ const TYPE = require('../../types/mcdev.d');
4
+ const MetadataType = require('./MetadataType');
5
+ const Automation = require('./Automation');
6
+ const Util = require('../util/util');
7
+ const cache = require('../util/cache');
8
+
9
+ /**
10
+ * Verification MetadataType
11
+ *
12
+ * @augments MetadataType
13
+ */
14
+ class Verification extends MetadataType {
15
+ /**
16
+ * Retrieves Metadata of Data Verification Activity.
17
+ *
18
+ * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
19
+ * @param {void} [_] unused parameter
20
+ * @param {void} [__] unused parameter
21
+ * @param {string} key customer key of single item to retrieve
22
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
23
+ */
24
+ static async retrieve(retrieveDir, _, __, key) {
25
+ let paramArr = [];
26
+ if (key?.startsWith('id:')) {
27
+ paramArr = [key.slice(3)];
28
+ } else if (key) {
29
+ paramArr = [key];
30
+ }
31
+ if (!paramArr.length) {
32
+ // there is no API endpoint to retrieve all dataVerification items, so we need to retrieve all automations and iterate over their activities
33
+ Util.logger.info(` - Caching dependent Metadata: automation`);
34
+ Automation.client = this.client;
35
+ Automation.buObject = this.buObject;
36
+ Automation.properties = this.properties;
37
+ Automation._skipNotificationRetrieve = true;
38
+ delete Automation._cachedMetadataMap;
39
+ const automationsMapObj = await Automation.retrieve();
40
+ delete Automation._skipNotificationRetrieve;
41
+ if (automationsMapObj?.metadata && Object.keys(automationsMapObj?.metadata).length) {
42
+ if (!key) {
43
+ // if we are not retrieving a single item, cache the automations for later use during retrieval of automations
44
+ Automation._cachedMetadataMap = automationsMapObj?.metadata;
45
+ }
46
+ // automations found, lets iterate over their activities to find the dataVerification items
47
+ const dataVerificationIds = [];
48
+ for (const automation of Object.values(automationsMapObj.metadata)) {
49
+ if (automation.steps) {
50
+ for (const step of automation.steps) {
51
+ for (const activity of step.activities) {
52
+ if (
53
+ activity.objectTypeId === 1000 &&
54
+ activity.activityObjectId &&
55
+ activity.activityObjectId !==
56
+ '00000000-0000-0000-0000-000000000000'
57
+ ) {
58
+ dataVerificationIds.push(activity.activityObjectId);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ if (dataVerificationIds.length) {
65
+ paramArr.push(...dataVerificationIds);
66
+ }
67
+ }
68
+ }
69
+ const results = {};
70
+ if (paramArr.length) {
71
+ const response = await this.retrieveRESTcollection(
72
+ paramArr.map((id) => ({ id, uri: '/automation/v1/dataverifications/' + id })),
73
+ undefined,
74
+ !key
75
+ );
76
+ if (response?.metadata) {
77
+ Object.assign(results, response.metadata);
78
+ }
79
+ }
80
+ if (retrieveDir) {
81
+ const savedMetadata = await this.saveResults(results, retrieveDir, null, null);
82
+ Util.logger.info(
83
+ `Downloaded: ${this.definition.type} (${Object.keys(savedMetadata).length})` +
84
+ Util.getKeysString(key)
85
+ );
86
+ }
87
+
88
+ return {
89
+ metadata: results,
90
+ type: this.definition.type,
91
+ };
92
+ }
93
+ /**
94
+ * helper for {@link this.retrieveRESTcollection}
95
+ *
96
+ * @param {Error} ex exception
97
+ * @param {string} id id or key of item
98
+ * @returns {null} -
99
+ */
100
+ static handleRESTErrors(ex, id) {
101
+ if (ex.message === 'Not Found' || ex.message === 'Request failed with status code 400') {
102
+ // if the ID is too short, the system will throw the 400 error
103
+ Util.logger.debug(
104
+ ` ☇ skipping ${this.definition.type} ${id}: ${ex.message} ${ex.code}`
105
+ );
106
+ } else {
107
+ // if we do get here, we should log the error and continue instead of failing to download all automations
108
+ Util.logger.error(
109
+ ` ☇ skipping ${this.definition.type} ${id}: ${ex.message} ${ex.code}`
110
+ );
111
+ }
112
+ return null;
113
+ }
114
+
115
+ /**
116
+ * Retrieves Metadata of Data Extract Activity for caching
117
+ *
118
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
119
+ */
120
+ static async retrieveForCache() {
121
+ return this.retrieve();
122
+ }
123
+
124
+ /**
125
+ * Creates a single Data Extract
126
+ *
127
+ * @param {TYPE.VerificationItem} metadata a single Data Extract
128
+ * @returns {Promise} Promise
129
+ */
130
+ static create(metadata) {
131
+ return super.createREST(metadata, '/automation/v1/dataverifications/');
132
+ }
133
+
134
+ /**
135
+ * helper for {@link MetadataType.createREST}
136
+ *
137
+ * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry
138
+ * @param {object} apiResponse varies depending on the API call
139
+ * @param {TYPE.MetadataTypeItem} metadataEntryWithAllFields like metadataEntry but before non-creatable fields were stripped
140
+ * @returns {void}
141
+ */
142
+ static async postCreateTasks(metadataEntry, apiResponse, metadataEntryWithAllFields) {
143
+ if (!apiResponse?.[this.definition.idField]) {
144
+ return;
145
+ }
146
+ Util.logger.warn(
147
+ ` - ${this.definition.type} ${
148
+ metadataEntryWithAllFields?.[this.definition.idField]
149
+ }: new key ${
150
+ apiResponse?.[this.definition.idField]
151
+ } automatically assigned during creation`
152
+ );
153
+ metadataEntry[this.definition.idField] = apiResponse?.[this.definition.idField];
154
+
155
+ // map structure: cred/bu --> type --> old key --> new key
156
+ const buName = this.buObject.credential + '/' + this.buObject.businessUnit;
157
+ Automation.createdKeyMap ||= {};
158
+ Automation.createdKeyMap[buName] ||= {};
159
+ Automation.createdKeyMap[buName][this.definition.type] ||= {};
160
+ Automation.createdKeyMap[buName][this.definition.type][
161
+ metadataEntryWithAllFields[this.definition.idField]
162
+ ] = metadataEntry[this.definition.idField];
163
+ }
164
+
165
+ /**
166
+ * Updates a single Data Extract
167
+ *
168
+ * @param {TYPE.VerificationItem} metadata a single Data Extract
169
+ * @returns {Promise} Promise
170
+ */
171
+ static update(metadata) {
172
+ return super.updateREST(
173
+ metadata,
174
+ '/automation/v1/dataverifications/' + metadata.dataVerificationDefinitionId
175
+ );
176
+ }
177
+
178
+ /**
179
+ * prepares a verification for deployment
180
+ *
181
+ * @param {TYPE.VerificationItem} metadata a single verification activity definition
182
+ * @returns {TYPE.VerificationItem} metadata object
183
+ */
184
+ static preDeployTasks(metadata) {
185
+ metadata.targetObjectId = cache.searchForField(
186
+ 'dataExtension',
187
+ metadata.r__dataExtension_CustomerKey,
188
+ 'CustomerKey',
189
+ 'ObjectID'
190
+ );
191
+ delete metadata.r__dataExtension_CustomerKey;
192
+ return metadata;
193
+ }
194
+ /**
195
+ * parses retrieved Metadata before saving
196
+ *
197
+ * @param {TYPE.VerificationItem} metadata a single verification activity definition
198
+ * @returns {TYPE.VerificationItem} Array with one metadata object and one sql string
199
+ */
200
+ static postRetrieveTasks(metadata) {
201
+ try {
202
+ metadata.r__dataExtension_CustomerKey = cache.searchForField(
203
+ 'dataExtension',
204
+ metadata.targetObjectId,
205
+ 'ObjectID',
206
+ 'CustomerKey'
207
+ );
208
+ delete metadata.targetObjectId;
209
+ } catch (ex) {
210
+ Util.logger.warn(
211
+ ` - ${this.definition.type} ${metadata[this.definition.keyField]}: ${ex.message}`
212
+ );
213
+ }
214
+ return metadata;
215
+ }
216
+ /**
217
+ * Delete a metadata item from the specified business unit
218
+ *
219
+ * @param {string} key Identifier of item
220
+ * @returns {Promise.<boolean>} deletion success status
221
+ */
222
+ static deleteByKey(key) {
223
+ return super.deleteByKeyREST('/automation/v1/dataverifications/' + key, key);
224
+ }
225
+ }
226
+
227
+ // Assign definition to static attributes
228
+ Verification.definition = require('../MetadataTypeDefinitions').verification;
229
+
230
+ module.exports = Verification;
@@ -1,238 +1,249 @@
1
1
  module.exports = {
2
2
  bodyIteratorField: 'attributeGroupDefinitions',
3
- dependencies: [], // future may have dependency on Data Extensions
3
+ dependencies: ['attributeSet'], // future may have dependency on Data Extensions
4
4
  hasExtended: false,
5
5
  idField: 'definitionID',
6
6
  keyIsFixed: null,
7
7
  keyField: 'definitionKey',
8
8
  nameField: 'definitionName.value',
9
- restPagination: false,
9
+ restPagination: false, // Hub API does not support pagination and returns everything instead
10
10
  type: 'attributeGroup',
11
- typeDescription: 'BETA: Groupings of Set Definitions (Data Extensions) in Data Designer.',
12
- typeRetrieveByDefault: false,
11
+ typeDescription: 'Groupings of Attribute Sets (Data Extensions) in Data Designer.',
12
+ typeRetrieveByDefault: true,
13
13
  typeName: 'Data Designer Attribute Groups',
14
14
  fields: {
15
15
  applicationID: {
16
- isCreateable: null,
17
- isUpdateable: null,
18
- retrieving: true,
19
- template: null,
16
+ // used by system generated attribute groups only; contains UUID
17
+ isCreateable: false,
18
+ isUpdateable: false,
19
+ retrieving: false,
20
+ template: false,
20
21
  },
21
22
  applicationKey: {
22
- isCreateable: null,
23
- isUpdateable: null,
23
+ // used by system generated attribute groups only
24
+ isCreateable: false,
25
+ isUpdateable: false,
24
26
  retrieving: true,
25
- template: null,
27
+ template: false,
26
28
  },
27
29
  attributeCount: {
28
- isCreateable: null,
29
- isUpdateable: null,
30
+ // auto-populated
31
+ isCreateable: false,
32
+ isUpdateable: false,
30
33
  retrieving: true,
31
- template: null,
34
+ template: false,
32
35
  },
33
36
  attributeGroupIconKey: {
34
- isCreateable: null,
35
- isUpdateable: null,
37
+ isCreateable: true,
38
+ isUpdateable: true,
36
39
  retrieving: true,
37
- template: null,
40
+ template: true,
38
41
  },
39
42
  attributeGroupType: {
40
- isCreateable: null,
41
- isUpdateable: null,
43
+ isCreateable: true,
44
+ isUpdateable: true,
42
45
  retrieving: true,
43
- template: null,
46
+ template: true,
44
47
  },
45
48
  attributeSetIdentifiers: {
46
- isCreateable: null,
47
- isUpdateable: null,
49
+ isCreateable: true,
50
+ isUpdateable: true,
48
51
  retrieving: true,
49
- template: null,
52
+ template: true,
50
53
  },
51
54
  'attributeSetIdentifiers[].connectingID.identifierType': {
52
55
  isCreateable: null,
53
56
  isUpdateable: null,
54
- retrieving: false,
55
- template: null,
57
+ retrieving: true,
58
+ template: false,
56
59
  },
57
60
  'attributeSetIdentifiers[].definitionID': {
58
61
  isCreateable: null,
59
62
  isUpdateable: null,
60
63
  retrieving: true,
61
- template: null,
64
+ template: false,
62
65
  },
63
66
  'attributeSetIdentifiers[].definitionKey': {
64
67
  isCreateable: null,
65
68
  isUpdateable: null,
66
69
  retrieving: true,
67
- template: null,
70
+ template: true,
68
71
  },
69
- 'attributeSetIdentifiers[].definitionName.Contact': {
72
+ 'attributeSetIdentifiers[].definitionName.value': {
70
73
  isCreateable: null,
71
74
  isUpdateable: null,
72
75
  retrieving: true,
73
- template: null,
76
+ template: false,
74
77
  },
75
78
  'attributeSetIdentifiers[].namespace': {
76
79
  isCreateable: null,
77
80
  isUpdateable: null,
78
81
  retrieving: false,
79
- template: null,
82
+ template: false,
80
83
  },
81
84
  canAddProperties: {
82
- isCreateable: null,
83
- isUpdateable: null,
85
+ isCreateable: true,
86
+ isUpdateable: true,
84
87
  retrieving: true,
85
- template: null,
88
+ template: true,
86
89
  },
87
90
  canAddRelationships: {
88
- isCreateable: null,
89
- isUpdateable: null,
91
+ isCreateable: true,
92
+ isUpdateable: true,
90
93
  retrieving: true,
91
- template: null,
94
+ template: true,
92
95
  },
93
96
  canChangeProperties: {
94
- isCreateable: null,
95
- isUpdateable: null,
97
+ isCreateable: true,
98
+ isUpdateable: true,
96
99
  retrieving: true,
97
- template: null,
100
+ template: true,
98
101
  },
99
102
  canModify: {
100
- isCreateable: null,
101
- isUpdateable: null,
103
+ isCreateable: true,
104
+ isUpdateable: true,
102
105
  retrieving: true,
103
- template: null,
106
+ template: true,
104
107
  },
105
108
  canRemove: {
106
- isCreateable: null,
107
- isUpdateable: null,
109
+ isCreateable: true,
110
+ isUpdateable: true,
108
111
  retrieving: true,
109
- template: null,
112
+ template: true,
110
113
  },
111
114
  connectingID: {
112
- isCreateable: null,
113
- isUpdateable: null,
114
- retrieving: false,
115
- template: null,
115
+ isCreateable: true,
116
+ isUpdateable: true,
117
+ retrieving: true,
118
+ template: true,
116
119
  },
117
120
  'connectingID.identifierType': {
118
- isCreateable: null,
119
- isUpdateable: null,
120
- retrieving: false,
121
- template: null,
121
+ isCreateable: true,
122
+ isUpdateable: true,
123
+ retrieving: true,
124
+ template: true,
122
125
  },
123
126
  containsSchemaAttributes: {
124
- isCreateable: null,
125
- isUpdateable: null,
127
+ isCreateable: true,
128
+ isUpdateable: true,
126
129
  retrieving: true,
127
- template: null,
130
+ template: true,
128
131
  },
129
132
  definitionID: {
130
- isCreateable: null,
131
- isUpdateable: null,
133
+ isCreateable: true,
134
+ isUpdateable: true,
132
135
  retrieving: true,
133
- template: null,
136
+ template: false,
134
137
  },
135
138
  definitionKey: {
136
- isCreateable: null,
137
- isUpdateable: null,
139
+ isCreateable: true,
140
+ isUpdateable: true,
138
141
  retrieving: true,
139
- template: null,
142
+ template: true,
140
143
  },
141
144
  'definitionName.value': {
142
- isCreateable: null,
143
- isUpdateable: null,
145
+ isCreateable: true,
146
+ isUpdateable: true,
144
147
  retrieving: true,
145
- template: null,
148
+ template: true,
146
149
  },
147
150
  description: {
148
- isCreateable: null,
149
- isUpdateable: null,
151
+ // optional field. not returned by API if empty
152
+ isCreateable: true,
153
+ isUpdateable: true,
150
154
  retrieving: true,
151
- template: null,
155
+ template: true,
152
156
  },
153
157
  displayOrder: {
154
- isCreateable: null,
155
- isUpdateable: null,
158
+ // auto-set to i+1
159
+ isCreateable: false,
160
+ isUpdateable: false,
156
161
  retrieving: true,
157
- template: null,
162
+ template: false,
158
163
  },
159
164
  fullyQualifiedName: {
160
- isCreateable: null,
161
- isUpdateable: null,
162
- retrieving: true,
163
- template: null,
165
+ // equal to defitionName.value; auto-populated by preDeployTasks
166
+ isCreateable: true,
167
+ isUpdateable: true,
168
+ retrieving: false,
169
+ template: false,
164
170
  },
165
171
  isHidden: {
166
- isCreateable: null,
167
- isUpdateable: null,
172
+ isCreateable: true,
173
+ isUpdateable: true,
168
174
  retrieving: true,
169
- template: null,
175
+ template: true,
170
176
  },
171
177
  isOwner: {
172
- isCreateable: null,
173
- isUpdateable: null,
178
+ isCreateable: true,
179
+ isUpdateable: true,
174
180
  retrieving: true,
175
- template: null,
181
+ template: true,
176
182
  },
177
183
  isPrimary: {
178
- isCreateable: null,
179
- isUpdateable: null,
180
- retrieving: true,
181
- template: null,
184
+ // always false, purpose unknown
185
+ isCreateable: false,
186
+ isUpdateable: false,
187
+ retrieving: false,
188
+ template: false,
182
189
  },
183
190
  isSystemDefined: {
184
- isCreateable: null,
185
- isUpdateable: null,
191
+ isCreateable: false,
192
+ isUpdateable: false,
186
193
  retrieving: true,
187
- template: null,
194
+ template: false,
188
195
  },
189
196
  localizedDescription: {
190
- isCreateable: null,
191
- isUpdateable: null,
192
- retrieving: true,
193
- template: null,
197
+ // always an empty object
198
+ isCreateable: false,
199
+ isUpdateable: false,
200
+ retrieving: false,
201
+ template: false,
194
202
  },
195
203
  'localizedDescription.resourceSetKey': {
196
204
  isCreateable: null,
197
205
  isUpdateable: null,
198
206
  retrieving: true,
199
- template: null,
207
+ template: true,
200
208
  },
201
209
  'localizedDescription.resourceValueKey': {
202
210
  isCreateable: null,
203
211
  isUpdateable: null,
204
212
  retrieving: true,
205
- template: null,
213
+ template: true,
206
214
  },
207
215
  'localizedDescription.value': {
208
216
  isCreateable: null,
209
217
  isUpdateable: null,
210
218
  retrieving: true,
211
- template: null,
219
+ template: true,
212
220
  },
213
221
  mID: {
214
- isCreateable: null,
215
- isUpdateable: null,
222
+ // auto-populated in preDeployTask
223
+ isCreateable: true,
224
+ isUpdateable: true,
216
225
  retrieving: true,
217
- template: null,
226
+ template: true,
218
227
  },
219
228
  namespace: {
220
- isCreateable: null,
221
- isUpdateable: null,
229
+ // always an empty string
230
+ isCreateable: false,
231
+ isUpdateable: false,
222
232
  retrieving: false,
223
- template: null,
233
+ template: false,
224
234
  },
225
235
  objectState: {
226
- isCreateable: null,
227
- isUpdateable: null,
228
- retrieving: true,
229
- template: null,
236
+ // seems to always contain "Created"
237
+ isCreateable: false,
238
+ isUpdateable: false,
239
+ retrieving: false,
240
+ template: false,
230
241
  },
231
242
  requiredRelationships: {
232
- isCreateable: null,
233
- isUpdateable: null,
243
+ isCreateable: true,
244
+ isUpdateable: true,
234
245
  retrieving: true,
235
- template: null,
246
+ template: true,
236
247
  },
237
248
  },
238
249
  };