mcdev 6.0.2 → 7.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 (602) hide show
  1. package/.beautyamp.json +13 -0
  2. package/.eslintrc.json +7 -1
  3. package/.github/ISSUE_TEMPLATE/bug.yml +1 -0
  4. package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +10 -3
  5. package/.github/workflows/close_issues_on_merge.yml +1 -1
  6. package/.github/workflows/code-test.yml +51 -3
  7. package/.github/workflows/coverage-base-update.yml +1 -1
  8. package/.github/workflows/coverage-develop-branch.yml +1 -1
  9. package/.github/workflows/coverage-main-branch.yml +1 -1
  10. package/.github/workflows/coverage.yml +2 -2
  11. package/.github/workflows/npm-publish.yml +3 -2
  12. package/.github/workflows/pr-labeler.yml +1 -1
  13. package/.husky/commit-msg +0 -2
  14. package/.husky/post-checkout +0 -3
  15. package/.husky/post-merge +2 -7
  16. package/.husky/pre-commit +5 -5
  17. package/.prettierrc +0 -8
  18. package/.vscode/extensions.json +2 -0
  19. package/.vscode/settings.json +15 -3
  20. package/@types/lib/Builder.d.ts +97 -0
  21. package/@types/lib/Builder.d.ts.map +1 -0
  22. package/@types/lib/Deployer.d.ts +99 -0
  23. package/@types/lib/Deployer.d.ts.map +1 -0
  24. package/@types/lib/MetadataTypeDefinitions.d.ts +80 -0
  25. package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -0
  26. package/@types/lib/MetadataTypeInfo.d.ts +78 -0
  27. package/@types/lib/MetadataTypeInfo.d.ts.map +1 -0
  28. package/@types/lib/Retriever.d.ts +66 -0
  29. package/@types/lib/Retriever.d.ts.map +1 -0
  30. package/@types/lib/cli.d.ts +3 -0
  31. package/@types/lib/cli.d.ts.map +1 -0
  32. package/@types/lib/index.d.ts +383 -0
  33. package/@types/lib/index.d.ts.map +1 -0
  34. package/@types/lib/metadataTypes/Asset.d.ts +1082 -0
  35. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -0
  36. package/@types/lib/metadataTypes/AttributeGroup.d.ts +290 -0
  37. package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -0
  38. package/@types/lib/metadataTypes/AttributeSet.d.ts +968 -0
  39. package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -0
  40. package/@types/lib/metadataTypes/Automation.d.ts +921 -0
  41. package/@types/lib/metadataTypes/Automation.d.ts.map +1 -0
  42. package/@types/lib/metadataTypes/Campaign.d.ts +190 -0
  43. package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -0
  44. package/@types/lib/metadataTypes/ContentArea.d.ts +250 -0
  45. package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -0
  46. package/@types/lib/metadataTypes/DataExtension.d.ts +571 -0
  47. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -0
  48. package/@types/lib/metadataTypes/DataExtensionField.d.ts +236 -0
  49. package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -0
  50. package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts +175 -0
  51. package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts.map +1 -0
  52. package/@types/lib/metadataTypes/DataExtract.d.ts +217 -0
  53. package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -0
  54. package/@types/lib/metadataTypes/DataExtractType.d.ts +80 -0
  55. package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -0
  56. package/@types/lib/metadataTypes/DeliveryProfile.d.ts +102 -0
  57. package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -0
  58. package/@types/lib/metadataTypes/Discovery.d.ts +189 -0
  59. package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -0
  60. package/@types/lib/metadataTypes/Email.d.ts +384 -0
  61. package/@types/lib/metadataTypes/Email.d.ts.map +1 -0
  62. package/@types/lib/metadataTypes/EmailSend.d.ts +652 -0
  63. package/@types/lib/metadataTypes/EmailSend.d.ts.map +1 -0
  64. package/@types/lib/metadataTypes/Event.d.ts +958 -0
  65. package/@types/lib/metadataTypes/Event.d.ts.map +1 -0
  66. package/@types/lib/metadataTypes/FileLocation.d.ts +101 -0
  67. package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -0
  68. package/@types/lib/metadataTypes/FileTransfer.d.ts +228 -0
  69. package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -0
  70. package/@types/lib/metadataTypes/Filter.d.ts +145 -0
  71. package/@types/lib/metadataTypes/Filter.d.ts.map +1 -0
  72. package/@types/lib/metadataTypes/Folder.d.ts +287 -0
  73. package/@types/lib/metadataTypes/Folder.d.ts.map +1 -0
  74. package/@types/lib/metadataTypes/ImportFile.d.ts +409 -0
  75. package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -0
  76. package/@types/lib/metadataTypes/Journey.d.ts +541 -0
  77. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -0
  78. package/@types/lib/metadataTypes/List.d.ts +191 -0
  79. package/@types/lib/metadataTypes/List.d.ts.map +1 -0
  80. package/@types/lib/metadataTypes/MetadataType.d.ts +680 -0
  81. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -0
  82. package/@types/lib/metadataTypes/MobileCode.d.ts +225 -0
  83. package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -0
  84. package/@types/lib/metadataTypes/MobileKeyword.d.ts +432 -0
  85. package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -0
  86. package/@types/lib/metadataTypes/MobileMessage.d.ts +931 -0
  87. package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -0
  88. package/@types/lib/metadataTypes/Query.d.ts +299 -0
  89. package/@types/lib/metadataTypes/Query.d.ts.map +1 -0
  90. package/@types/lib/metadataTypes/Role.d.ts +164 -0
  91. package/@types/lib/metadataTypes/Role.d.ts.map +1 -0
  92. package/@types/lib/metadataTypes/Script.d.ts +305 -0
  93. package/@types/lib/metadataTypes/Script.d.ts.map +1 -0
  94. package/@types/lib/metadataTypes/SendClassification.d.ts +221 -0
  95. package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -0
  96. package/@types/lib/metadataTypes/SenderProfile.d.ts +257 -0
  97. package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -0
  98. package/@types/lib/metadataTypes/TransactionalEmail.d.ts +230 -0
  99. package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -0
  100. package/@types/lib/metadataTypes/TransactionalMessage.d.ts +163 -0
  101. package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -0
  102. package/@types/lib/metadataTypes/TransactionalPush.d.ts +175 -0
  103. package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -0
  104. package/@types/lib/metadataTypes/TransactionalSMS.d.ts +205 -0
  105. package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -0
  106. package/@types/lib/metadataTypes/TriggeredSend.d.ts +671 -0
  107. package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -0
  108. package/@types/lib/metadataTypes/User.d.ts +677 -0
  109. package/@types/lib/metadataTypes/User.d.ts.map +1 -0
  110. package/@types/lib/metadataTypes/Verification.d.ts +188 -0
  111. package/@types/lib/metadataTypes/Verification.d.ts.map +1 -0
  112. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +692 -0
  113. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts.map +1 -0
  114. package/@types/lib/metadataTypes/definitions/AttributeGroup.definition.d.ts +246 -0
  115. package/@types/lib/metadataTypes/definitions/AttributeGroup.definition.d.ts.map +1 -0
  116. package/@types/lib/metadataTypes/definitions/AttributeSet.definition.d.ts +893 -0
  117. package/@types/lib/metadataTypes/definitions/AttributeSet.definition.d.ts.map +1 -0
  118. package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +616 -0
  119. package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts.map +1 -0
  120. package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts +126 -0
  121. package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts.map +1 -0
  122. package/@types/lib/metadataTypes/definitions/ContentArea.definition.d.ts +182 -0
  123. package/@types/lib/metadataTypes/definitions/ContentArea.definition.d.ts.map +1 -0
  124. package/@types/lib/metadataTypes/definitions/DataExtension.definition.d.ts +237 -0
  125. package/@types/lib/metadataTypes/definitions/DataExtension.definition.d.ts.map +1 -0
  126. package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts +121 -0
  127. package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts.map +1 -0
  128. package/@types/lib/metadataTypes/definitions/DataExtensionTemplate.definition.d.ts +133 -0
  129. package/@types/lib/metadataTypes/definitions/DataExtensionTemplate.definition.d.ts.map +1 -0
  130. package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +156 -0
  131. package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts.map +1 -0
  132. package/@types/lib/metadataTypes/definitions/DataExtractType.definition.d.ts +34 -0
  133. package/@types/lib/metadataTypes/definitions/DataExtractType.definition.d.ts.map +1 -0
  134. package/@types/lib/metadataTypes/definitions/DeliveryProfile.definition.d.ts +80 -0
  135. package/@types/lib/metadataTypes/definitions/DeliveryProfile.definition.d.ts.map +1 -0
  136. package/@types/lib/metadataTypes/definitions/Discovery.definition.d.ts +146 -0
  137. package/@types/lib/metadataTypes/definitions/Discovery.definition.d.ts.map +1 -0
  138. package/@types/lib/metadataTypes/definitions/Email.definition.d.ts +314 -0
  139. package/@types/lib/metadataTypes/definitions/Email.definition.d.ts.map +1 -0
  140. package/@types/lib/metadataTypes/definitions/EmailSend.definition.d.ts +582 -0
  141. package/@types/lib/metadataTypes/definitions/EmailSend.definition.d.ts.map +1 -0
  142. package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +867 -0
  143. package/@types/lib/metadataTypes/definitions/Event.definition.d.ts.map +1 -0
  144. package/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts +68 -0
  145. package/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts.map +1 -0
  146. package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts +191 -0
  147. package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts.map +1 -0
  148. package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts +147 -0
  149. package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts.map +1 -0
  150. package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +174 -0
  151. package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts.map +1 -0
  152. package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +306 -0
  153. package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts.map +1 -0
  154. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +426 -0
  155. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts.map +1 -0
  156. package/@types/lib/metadataTypes/definitions/List.definition.d.ts +118 -0
  157. package/@types/lib/metadataTypes/definitions/List.definition.d.ts.map +1 -0
  158. package/@types/lib/metadataTypes/definitions/MobileCode.definition.d.ts +167 -0
  159. package/@types/lib/metadataTypes/definitions/MobileCode.definition.d.ts.map +1 -0
  160. package/@types/lib/metadataTypes/definitions/MobileKeyword.definition.d.ts +276 -0
  161. package/@types/lib/metadataTypes/definitions/MobileKeyword.definition.d.ts.map +1 -0
  162. package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts +783 -0
  163. package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts.map +1 -0
  164. package/@types/lib/metadataTypes/definitions/Query.definition.d.ts +203 -0
  165. package/@types/lib/metadataTypes/definitions/Query.definition.d.ts.map +1 -0
  166. package/@types/lib/metadataTypes/definitions/Role.definition.d.ts +108 -0
  167. package/@types/lib/metadataTypes/definitions/Role.definition.d.ts.map +1 -0
  168. package/@types/lib/metadataTypes/definitions/Script.definition.d.ts +153 -0
  169. package/@types/lib/metadataTypes/definitions/Script.definition.d.ts.map +1 -0
  170. package/@types/lib/metadataTypes/definitions/SendClassification.definition.d.ts +151 -0
  171. package/@types/lib/metadataTypes/definitions/SendClassification.definition.d.ts.map +1 -0
  172. package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts +180 -0
  173. package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts.map +1 -0
  174. package/@types/lib/metadataTypes/definitions/TransactionalEmail.definition.d.ts +167 -0
  175. package/@types/lib/metadataTypes/definitions/TransactionalEmail.definition.d.ts.map +1 -0
  176. package/@types/lib/metadataTypes/definitions/TransactionalMessage.definition.d.ts +99 -0
  177. package/@types/lib/metadataTypes/definitions/TransactionalMessage.definition.d.ts.map +1 -0
  178. package/@types/lib/metadataTypes/definitions/TransactionalPush.definition.d.ts +119 -0
  179. package/@types/lib/metadataTypes/definitions/TransactionalPush.definition.d.ts.map +1 -0
  180. package/@types/lib/metadataTypes/definitions/TransactionalSMS.definition.d.ts +113 -0
  181. package/@types/lib/metadataTypes/definitions/TransactionalSMS.definition.d.ts.map +1 -0
  182. package/@types/lib/metadataTypes/definitions/TriggeredSend.definition.d.ts +560 -0
  183. package/@types/lib/metadataTypes/definitions/TriggeredSend.definition.d.ts.map +1 -0
  184. package/@types/lib/metadataTypes/definitions/User.definition.d.ts +423 -0
  185. package/@types/lib/metadataTypes/definitions/User.definition.d.ts.map +1 -0
  186. package/@types/lib/metadataTypes/definitions/Verification.definition.d.ts +129 -0
  187. package/@types/lib/metadataTypes/definitions/Verification.definition.d.ts.map +1 -0
  188. package/@types/lib/retrieveChangelog.d.ts +3 -0
  189. package/@types/lib/retrieveChangelog.d.ts.map +1 -0
  190. package/@types/lib/util/auth.d.ts +41 -0
  191. package/@types/lib/util/auth.d.ts.map +1 -0
  192. package/@types/lib/util/businessUnit.d.ts +21 -0
  193. package/@types/lib/util/businessUnit.d.ts.map +1 -0
  194. package/@types/lib/util/cache.d.ts +64 -0
  195. package/@types/lib/util/cache.d.ts.map +1 -0
  196. package/@types/lib/util/cli.d.ts +125 -0
  197. package/@types/lib/util/cli.d.ts.map +1 -0
  198. package/@types/lib/util/config.d.ts +45 -0
  199. package/@types/lib/util/config.d.ts.map +1 -0
  200. package/@types/lib/util/devops.d.ts +62 -0
  201. package/@types/lib/util/devops.d.ts.map +1 -0
  202. package/@types/lib/util/file.d.ts +20 -0
  203. package/@types/lib/util/file.d.ts.map +1 -0
  204. package/@types/lib/util/init.config.d.ts +66 -0
  205. package/@types/lib/util/init.config.d.ts.map +1 -0
  206. package/@types/lib/util/init.d.ts +72 -0
  207. package/@types/lib/util/init.d.ts.map +1 -0
  208. package/@types/lib/util/init.git.d.ts +40 -0
  209. package/@types/lib/util/init.git.d.ts.map +1 -0
  210. package/@types/lib/util/init.npm.d.ts +24 -0
  211. package/@types/lib/util/init.npm.d.ts.map +1 -0
  212. package/@types/lib/util/replaceContentBlockReference.d.ts +105 -0
  213. package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -0
  214. package/@types/lib/util/util.d.ts +322 -0
  215. package/@types/lib/util/util.d.ts.map +1 -0
  216. package/@types/types/mcdev.d.d.ts +1282 -0
  217. package/@types/types/mcdev.d.d.ts.map +1 -0
  218. package/LICENSE +1 -1
  219. package/README.md +7 -3
  220. package/boilerplate/files/.beautyamp.json +13 -0
  221. package/boilerplate/files/.prettierrc +3 -0
  222. package/boilerplate/files/.vscode/extensions.json +6 -1
  223. package/boilerplate/files/.vscode/settings.json +16 -4
  224. package/boilerplate/forcedUpdates.json +9 -0
  225. package/jsconfig.json +7 -2
  226. package/lib/Builder.js +49 -45
  227. package/lib/Deployer.js +100 -45
  228. package/lib/MetadataTypeDefinitions.js +6 -0
  229. package/lib/MetadataTypeInfo.js +4 -0
  230. package/lib/Retriever.js +33 -27
  231. package/lib/cli.js +363 -28
  232. package/lib/index.js +615 -55
  233. package/lib/metadataTypes/Asset.js +811 -159
  234. package/lib/metadataTypes/AttributeGroup.js +17 -12
  235. package/lib/metadataTypes/AttributeSet.js +20 -15
  236. package/lib/metadataTypes/Automation.js +125 -93
  237. package/lib/metadataTypes/Campaign.js +18 -6
  238. package/lib/metadataTypes/ContentArea.js +21 -18
  239. package/lib/metadataTypes/DataExtension.js +229 -113
  240. package/lib/metadataTypes/DataExtensionField.js +52 -53
  241. package/lib/metadataTypes/DataExtensionTemplate.js +17 -5
  242. package/lib/metadataTypes/DataExtract.js +62 -27
  243. package/lib/metadataTypes/DataExtractType.js +17 -5
  244. package/lib/metadataTypes/DeliveryProfile.js +47 -0
  245. package/lib/metadataTypes/Discovery.js +15 -4
  246. package/lib/metadataTypes/Email.js +22 -19
  247. package/lib/metadataTypes/EmailSend.js +135 -35
  248. package/lib/metadataTypes/Event.js +95 -60
  249. package/lib/metadataTypes/FileLocation.js +17 -5
  250. package/lib/metadataTypes/FileTransfer.js +62 -26
  251. package/lib/metadataTypes/Filter.js +16 -4
  252. package/lib/metadataTypes/Folder.js +67 -39
  253. package/lib/metadataTypes/ImportFile.js +341 -91
  254. package/lib/metadataTypes/Journey.js +681 -324
  255. package/lib/metadataTypes/List.js +26 -14
  256. package/lib/metadataTypes/MetadataType.js +501 -265
  257. package/lib/metadataTypes/MobileCode.js +17 -5
  258. package/lib/metadataTypes/MobileKeyword.js +59 -43
  259. package/lib/metadataTypes/MobileMessage.js +67 -40
  260. package/lib/metadataTypes/Query.js +46 -38
  261. package/lib/metadataTypes/Role.js +34 -23
  262. package/lib/metadataTypes/Script.js +127 -39
  263. package/lib/metadataTypes/SendClassification.js +120 -5
  264. package/lib/metadataTypes/SenderProfile.js +179 -0
  265. package/lib/metadataTypes/TransactionalEmail.js +30 -17
  266. package/lib/metadataTypes/TransactionalMessage.js +25 -11
  267. package/lib/metadataTypes/TransactionalPush.js +24 -9
  268. package/lib/metadataTypes/TransactionalSMS.js +78 -46
  269. package/lib/metadataTypes/TriggeredSend.js +191 -43
  270. package/lib/metadataTypes/User.js +90 -62
  271. package/lib/metadataTypes/Verification.js +39 -21
  272. package/lib/metadataTypes/definitions/Asset.definition.js +3 -3
  273. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +7 -1
  274. package/lib/metadataTypes/definitions/AttributeSet.definition.js +2 -2
  275. package/lib/metadataTypes/definitions/Automation.definition.js +4 -1
  276. package/lib/metadataTypes/definitions/Campaign.definition.js +1 -1
  277. package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -1
  278. package/lib/metadataTypes/definitions/DataExtension.definition.js +17 -1
  279. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -1
  280. package/lib/metadataTypes/definitions/DataExtractType.definition.js +2 -2
  281. package/lib/metadataTypes/definitions/DeliveryProfile.definition.js +59 -0
  282. package/lib/metadataTypes/definitions/Discovery.definition.js +1 -1
  283. package/lib/metadataTypes/definitions/Email.definition.js +1 -1
  284. package/lib/metadataTypes/definitions/EmailSend.definition.js +19 -4
  285. package/lib/metadataTypes/definitions/Event.definition.js +140 -128
  286. package/lib/metadataTypes/definitions/FileLocation.definition.js +1 -1
  287. package/lib/metadataTypes/definitions/Filter.definition.js +1 -1
  288. package/lib/metadataTypes/definitions/Folder.definition.js +25 -2
  289. package/lib/metadataTypes/definitions/ImportFile.definition.js +52 -7
  290. package/lib/metadataTypes/definitions/Journey.definition.js +12 -0
  291. package/lib/metadataTypes/definitions/List.definition.js +1 -1
  292. package/lib/metadataTypes/definitions/MobileCode.definition.js +1 -1
  293. package/lib/metadataTypes/definitions/MobileMessage.definition.js +11 -5
  294. package/lib/metadataTypes/definitions/Query.definition.js +6 -0
  295. package/lib/metadataTypes/definitions/Script.definition.js +14 -14
  296. package/lib/metadataTypes/definitions/SendClassification.definition.js +60 -20
  297. package/lib/metadataTypes/definitions/SenderProfile.definition.js +185 -0
  298. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +2 -2
  299. package/lib/metadataTypes/definitions/TransactionalMessage.definition.js +69 -0
  300. package/lib/metadataTypes/definitions/TransactionalPush.definition.js +6 -0
  301. package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +6 -0
  302. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +15 -4
  303. package/lib/metadataTypes/definitions/Verification.definition.js +1 -1
  304. package/lib/retrieveChangelog.js +7 -2
  305. package/lib/util/auth.js +56 -21
  306. package/lib/util/businessUnit.js +20 -2
  307. package/lib/util/cache.js +37 -18
  308. package/lib/util/cli.js +72 -29
  309. package/lib/util/config.js +27 -9
  310. package/lib/util/devops.js +45 -24
  311. package/lib/util/file.js +58 -33
  312. package/lib/util/init.config.js +55 -24
  313. package/lib/util/init.git.js +6 -6
  314. package/lib/util/init.js +36 -14
  315. package/lib/util/init.npm.js +2 -2
  316. package/lib/util/replaceContentBlockReference.js +278 -0
  317. package/lib/util/util.js +152 -54
  318. package/package.json +33 -30
  319. package/test/general.test.js +1327 -4
  320. package/test/mockRoot/.mcdevrc.json +26 -4
  321. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testExisting_dataExtensionShared.dataExtension-meta.json +3 -4
  322. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testNew_dataExtensionShared.dataExtension-meta.json +1 -4
  323. package/test/mockRoot/deploy/testInstance/_ParentBU_/query/testNew_query.query-meta.json +11 -0
  324. package/test/mockRoot/deploy/testInstance/_ParentBU_/query/testNew_query.query-meta.sql +4 -0
  325. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset.asset-block-meta.html +12 -0
  326. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset.asset-block-meta.json +39 -0
  327. package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +6 -6
  328. package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +7 -7
  329. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testExisting_dataExtension.dataExtension-meta.json +3 -4
  330. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testNew_dataExtension.dataExtension-meta.json +1 -4
  331. package/test/mockRoot/deploy/testInstance/testBU/emailSend/testExisting_emailSend.emailSend-meta.json +36 -0
  332. package/test/mockRoot/deploy/testInstance/testBU/emailSend/testNew_emailSend.emailSend-meta.json +36 -0
  333. package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +10 -4
  334. package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +8 -4
  335. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_Quicksend.journey-meta.json +232 -0
  336. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.json +2 -4
  337. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.json +2 -4
  338. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query.query-meta.json +1 -1
  339. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.json +1 -1
  340. package/test/mockRoot/deploy/testInstance/testBU/query/testNew_query.query-meta.json +1 -1
  341. package/test/mockRoot/deploy/testInstance/testBU/sendClassification/testExisting_sendClassification.sendClassification-meta.json +8 -0
  342. package/test/mockRoot/deploy/testInstance/testBU/sendClassification/testNew_sendClassification.sendClassification-meta.json +8 -0
  343. package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testExisting_senderProfile.senderProfile-meta.json +14 -0
  344. package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testNew_senderProfile.senderProfile-meta.json +14 -0
  345. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +1 -1
  346. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +1 -1
  347. package/test/mockRoot/deploy/testInstance/testBU/transactionalPush/testExisting_tpush.transactionalPush-meta.json +1 -3
  348. package/test/mockRoot/deploy/testInstance/testBU/transactionalPush/testNew_tpush.transactionalPush-meta.json +1 -3
  349. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testExisting_tsms.transactionalSMS-meta.json +1 -2
  350. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testNew_tsms.transactionalSMS-meta.json +1 -2
  351. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testExisting_triggeredSend.triggeredSend-meta.json +4 -5
  352. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testNew_triggeredSend.triggeredSend-meta.json +4 -5
  353. package/test/mockRoot/deploy/testInstance/testBU/verification/testExisting_39f6a488-20eb-4ba0-b0b9.verification-meta.json +1 -1
  354. package/test/mockRoot/deploy/testInstance/testBU/verification/testNew_39f6a488-20eb-4ba0-b0b9.verification-meta.json +1 -1
  355. package/test/resourceFactory.js +118 -7
  356. package/test/resources/1111111/automation/v1/queries/get-response.json +6 -0
  357. package/test/resources/1111111/automation/v1/queries/post-response.json +18 -0
  358. package/test/resources/1111111/dataExtension/create-expected.json +4 -7
  359. package/test/resources/1111111/dataExtension/retrieve-expected.json +2 -4
  360. package/test/resources/1111111/dataExtension/update-expected.json +7 -7
  361. package/test/resources/1111111/dataExtension/update-response.xml +3 -1
  362. package/test/resources/1111111/dataFolder/retrieve-ContentType=queryactivity-response.xml +48 -0
  363. package/test/resources/1111111/query/patch_keySuffix-expected.json +11 -0
  364. package/test/resources/1111111/query/patch_keySuffix-expected.sql +4 -0
  365. package/test/resources/9999999/asset/block-1157-retrieve-expected.html +4 -3
  366. package/test/resources/9999999/asset/build-templatebasedemail-expected.json +81 -0
  367. package/test/resources/9999999/asset/build-templatebasedemail-html-expected.html +20 -0
  368. package/test/resources/9999999/asset/build-templatebasedemail-preheader-expected.amp +1 -0
  369. package/test/resources/9999999/asset/create-expected.json +18 -0
  370. package/test/resources/9999999/asset/resolveId-1234-notFound-expected.json +1 -0
  371. package/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json +8 -0
  372. package/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json +8 -0
  373. package/test/resources/9999999/asset/retrieve-templatebasedemail-expected.json +84 -0
  374. package/test/resources/9999999/asset/retrieve-templatebasedemail-html-expected.html +20 -0
  375. package/test/resources/9999999/asset/retrieve-templatebasedemail-preheader-expected.amp +1 -0
  376. package/test/resources/9999999/asset/template-templatebasedemail-expected.json +81 -0
  377. package/test/resources/9999999/asset/template-templatebasedemail-html-expected.html +20 -0
  378. package/test/resources/9999999/asset/template-templatebasedemail-preheader-expected.amp +1 -0
  379. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-id-expected.html +33 -0
  380. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-key-expected.html +33 -0
  381. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-name-expected.html +35 -0
  382. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-id-expected.amp +4 -0
  383. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-key-expected.amp +4 -0
  384. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-name-expected.amp +4 -0
  385. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-id-expected.amp +4 -0
  386. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-key-expected.amp +4 -0
  387. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-name-expected.amp +4 -0
  388. package/test/resources/9999999/asset/v1/content/assets/1295064/get-response.json +1 -1
  389. package/test/resources/9999999/asset/v1/content/assets/5286/get-response.json +48 -0
  390. package/test/resources/9999999/asset/v1/content/assets/5289/get-response.json +198 -0
  391. package/test/resources/9999999/asset/v1/content/assets/808714/get-response.json +4 -3
  392. package/test/resources/9999999/asset/v1/content/assets/950143/delete-response.txt +1 -0
  393. package/test/resources/9999999/asset/v1/content/assets/get-response-customerKey=testExisting_asset.json +105 -0
  394. package/test/resources/9999999/asset/v1/content/assets/post-response.json +59 -0
  395. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,14.json +7 -0
  396. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN193,194,15.json +7 -0
  397. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN195,196,197,198,199,200,201,202,203,210,211,212,213,3.json +46 -0
  398. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1.json +32 -0
  399. package/test/resources/9999999/asset/v1/content/assets/query/{post-response.json → post-response-assetType.idIN207,208,209,5.json} +45 -47
  400. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN214,4.json +35 -0
  401. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN215,216,217,218,219,220,221,222,223,224,225,226,227,228.json +7 -0
  402. package/test/resources/9999999/asset/v1/content/assets/query/post-response-customerKey=mcdev-issue-1157.json +46 -0
  403. package/test/resources/9999999/attributeGroup/retrieve-expected.json +1 -1
  404. package/test/resources/9999999/attributeSet/retrieve-expected.json +3 -3
  405. package/test/resources/9999999/automation/build-expected.json +7 -7
  406. package/test/resources/9999999/automation/create-expected.json +7 -7
  407. package/test/resources/9999999/automation/patch_fixKeys-pause-expected.json +6 -6
  408. package/test/resources/9999999/automation/patch_fixKeys-schedule-expected.json +6 -6
  409. package/test/resources/9999999/automation/retrieve-expected.json +7 -7
  410. package/test/resources/9999999/automation/template-expected.json +7 -7
  411. package/test/resources/9999999/automation/update-expected.json +6 -6
  412. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/delete-response.txt +1 -0
  413. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/delete-response.json +1 -0
  414. package/test/resources/9999999/automation/v1/imports/1ebf557b-372e-eb11-b81b-48df37d1dbd7/get-response.json +78 -0
  415. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/delete-response.txt +0 -0
  416. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/get-response.json +35 -0
  417. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/patch-response.json +14 -10
  418. package/test/resources/9999999/automation/v1/imports/get-response.json +78 -1
  419. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +1 -1
  420. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeysSuffix/get-response.json +17 -0
  421. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeysSuffix/patch-response.json +18 -0
  422. package/test/resources/9999999/automation/v1/queries/abcde-607c-4940-afef-437965094dat/get-response.json +17 -0
  423. package/test/resources/9999999/automation/v1/queries/get-response.json +20 -3
  424. package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/delete-response.txt +1 -0
  425. package/test/resources/9999999/automation/v1/scripts/get-response.json +3 -3
  426. package/test/resources/9999999/dataExtension/build-expected.json +3 -4
  427. package/test/resources/9999999/dataExtension/create-expected.json +1 -4
  428. package/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml +4 -4
  429. package/test/resources/9999999/dataExtension/retrieve-expected.json +3 -4
  430. package/test/resources/9999999/dataExtension/retrieve-response.xml +96 -1
  431. package/test/resources/9999999/dataExtension/template-expected.json +3 -4
  432. package/test/resources/9999999/dataExtension/update-expected.json +4 -3
  433. package/test/resources/9999999/dataExtension/update-response.xml +5 -3
  434. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +72 -0
  435. package/test/resources/9999999/dataFolder/retrieve-ContentType=userinitiatedsends-response.xml +48 -0
  436. package/test/resources/9999999/deliveryProfile/get-expected.json +7 -0
  437. package/test/resources/9999999/emailSend/build-expected.json +43 -0
  438. package/test/resources/9999999/emailSend/get-expected.json +43 -0
  439. package/test/resources/9999999/emailSend/patch-expected.json +41 -0
  440. package/test/resources/9999999/emailSend/post-expected.json +41 -0
  441. package/test/resources/9999999/emailSend/template-expected.json +43 -0
  442. package/test/resources/9999999/emailSendDefinition/create-response.xml +98 -0
  443. package/test/resources/9999999/emailSendDefinition/delete-response.xml +36 -0
  444. package/test/resources/9999999/emailSendDefinition/retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml +18 -8
  445. package/test/resources/9999999/emailSendDefinition/update-response.xml +97 -0
  446. package/test/resources/9999999/importDefinition/retrieve-CustomerKey=testExisting_importFile-response.xml +30 -0
  447. package/test/resources/9999999/importDefinition/retrieve-Name=testExisting_importFile-response.xml +30 -0
  448. package/test/resources/9999999/importFile/build-expected.json +11 -6
  449. package/test/resources/9999999/importFile/get-expected.json +13 -7
  450. package/test/resources/9999999/importFile/get-sms-expected.json +79 -0
  451. package/test/resources/9999999/importFile/patch-expected.json +12 -7
  452. package/test/resources/9999999/importFile/post-expected.json +8 -5
  453. package/test/resources/9999999/importFile/template-expected.json +10 -5
  454. package/test/resources/9999999/interaction/v1/eventDefinitions/get-response.json +124 -0
  455. package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/delete-response.txt +1 -0
  456. package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/get-response.json +253 -0
  457. package/test/resources/9999999/interaction/v1/interactions/get-response.json +83 -779
  458. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response.json +457 -0
  459. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response.json +253 -0
  460. package/test/resources/9999999/interaction/v1/interactions/{key_0b76dccf-594c-b6dc-1acf-10c4493dcb84 → key_testExisting_temail}/get-response.json +5 -5
  461. package/test/resources/9999999/journey/build-expected.json +105 -449
  462. package/test/resources/9999999/journey/get-multistep-expected.json +413 -0
  463. package/test/resources/9999999/journey/get-quicksend-expected.json +232 -0
  464. package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +232 -0
  465. package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +232 -0
  466. package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +232 -0
  467. package/test/resources/9999999/journey/get-transactionalEmail-expected.json +211 -0
  468. package/test/resources/9999999/journey/template-expected.json +105 -449
  469. package/test/resources/9999999/legacy/v1/beta/messaging/deliverypolicy/get-response.json +15 -0
  470. package/test/resources/9999999/legacy/v1/beta/mobile/imports/get-response.json +112 -0
  471. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTQ3Ojc4OjA/get-response.json +1 -1
  472. package/test/resources/9999999/legacy/v1/beta/object/NWQwdnhEU3dFZWVBekJRQzdISWl0QTo0NTow/get-response.json +12 -0
  473. package/test/resources/9999999/list/retrieve-response.xml +13 -0
  474. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/get-response.json +1 -1
  475. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/patch-response.json +1 -1
  476. package/test/resources/9999999/mobileMessage/build-expected.json +2 -5
  477. package/test/resources/9999999/mobileMessage/get-expected.json +2 -5
  478. package/test/resources/9999999/mobileMessage/post-create-expected.json +2 -4
  479. package/test/resources/9999999/mobileMessage/post-update-expected.json +2 -5
  480. package/test/resources/9999999/mobileMessage/template-expected.json +2 -5
  481. package/test/resources/9999999/query/build-expected.json +1 -1
  482. package/test/resources/9999999/query/build-expected.sql +2 -1
  483. package/test/resources/9999999/query/get-expected.json +1 -1
  484. package/test/resources/9999999/query/get-expected.sql +2 -1
  485. package/test/resources/9999999/query/get2-expected.json +1 -1
  486. package/test/resources/9999999/query/patch-expected.json +1 -1
  487. package/test/resources/9999999/query/patch_fixKeys-expected.json +1 -1
  488. package/test/resources/9999999/query/patch_fixKeysSuffix-expected.json +11 -0
  489. package/test/resources/9999999/query/patch_fixKeysSuffix-expected.sql +6 -0
  490. package/test/resources/9999999/query/post-expected.json +1 -1
  491. package/test/resources/9999999/query/template-expected.json +1 -1
  492. package/test/resources/9999999/query/template-expected.sql +2 -1
  493. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query2ANDStatus=Active-response.xml +30 -0
  494. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysSuffixANDStatus=Active-response.xml +30 -0
  495. package/test/resources/9999999/script/get_ampincluded-expected.html +5 -0
  496. package/test/resources/9999999/script/get_ampincluded-rcb-id-expected.html +5 -0
  497. package/test/resources/9999999/script/get_ampincluded-rcb-key-expected.html +5 -0
  498. package/test/resources/9999999/script/get_ampincluded-rcb-name-expected.html +5 -0
  499. package/test/resources/9999999/script/get_ampscript-expected.html +6 -1
  500. package/test/resources/9999999/script/get_ampscript-rcb-id-expected.html +8 -0
  501. package/test/resources/9999999/script/get_ampscript-rcb-key-expected.html +8 -0
  502. package/test/resources/9999999/script/get_ampscript-rcb-name-expected.html +10 -0
  503. package/test/resources/9999999/script/get_mixed-expected.html +5 -2
  504. package/test/resources/9999999/script/get_mixed-rcb-id-expected.html +12 -0
  505. package/test/resources/9999999/script/get_mixed-rcb-key-expected.html +12 -0
  506. package/test/resources/9999999/script/get_mixed-rcb-name-expected.html +14 -0
  507. package/test/resources/9999999/sendClassification/build-expected.json +8 -0
  508. package/test/resources/9999999/sendClassification/create-response.xml +51 -0
  509. package/test/resources/9999999/sendClassification/delete-response.xml +36 -0
  510. package/test/resources/9999999/sendClassification/get-expected.json +10 -0
  511. package/test/resources/9999999/sendClassification/patch-expected.json +8 -0
  512. package/test/resources/9999999/sendClassification/post-expected.json +8 -0
  513. package/test/resources/9999999/sendClassification/retrieve-response.xml +86 -0
  514. package/test/resources/9999999/sendClassification/template-expected.json +8 -0
  515. package/test/resources/9999999/sendClassification/update-response.xml +49 -0
  516. package/test/resources/9999999/senderProfile/build-expected.json +14 -0
  517. package/test/resources/9999999/senderProfile/create-response.xml +49 -0
  518. package/test/resources/9999999/senderProfile/delete-response.xml +36 -0
  519. package/test/resources/9999999/senderProfile/get-expected.json +16 -0
  520. package/test/resources/9999999/senderProfile/get-rcb-id-expected.json +16 -0
  521. package/test/resources/9999999/senderProfile/get-rcb-key-expected.json +16 -0
  522. package/test/resources/9999999/senderProfile/get-rcb-name-expected.json +16 -0
  523. package/test/resources/9999999/senderProfile/patch-expected.json +14 -0
  524. package/test/resources/9999999/senderProfile/post-expected.json +14 -0
  525. package/test/resources/9999999/senderProfile/retrieve-CustomerKey=Default-response.xml +44 -0
  526. package/test/resources/9999999/senderProfile/retrieve-CustomerKey=wrong-key-response.xml +26 -0
  527. package/test/resources/9999999/senderProfile/retrieve-response.xml +80 -0
  528. package/test/resources/9999999/senderProfile/template-expected.json +14 -0
  529. package/test/resources/9999999/senderProfile/update-response.xml +47 -0
  530. package/test/resources/9999999/transactionalEmail/build-expected.json +3 -3
  531. package/test/resources/9999999/transactionalEmail/get-expected.json +3 -3
  532. package/test/resources/9999999/transactionalEmail/patch-expected.json +3 -3
  533. package/test/resources/9999999/transactionalEmail/post-expected.json +2 -2
  534. package/test/resources/9999999/transactionalEmail/template-expected.json +3 -3
  535. package/test/resources/9999999/transactionalPush/build-expected.json +1 -1
  536. package/test/resources/9999999/transactionalPush/get-expected.json +1 -1
  537. package/test/resources/9999999/transactionalPush/patch-expected.json +1 -3
  538. package/test/resources/9999999/transactionalPush/post-expected.json +1 -3
  539. package/test/resources/9999999/transactionalPush/template-expected.json +1 -1
  540. package/test/resources/9999999/transactionalSMS/build-expected.amp +1 -1
  541. package/test/resources/9999999/transactionalSMS/build-expected.json +1 -2
  542. package/test/resources/9999999/transactionalSMS/get-expected.amp +1 -1
  543. package/test/resources/9999999/transactionalSMS/get-expected.json +1 -2
  544. package/test/resources/9999999/transactionalSMS/patch-expected.amp +1 -1
  545. package/test/resources/9999999/transactionalSMS/patch-expected.json +1 -2
  546. package/test/resources/9999999/transactionalSMS/post-expected.amp +1 -1
  547. package/test/resources/9999999/transactionalSMS/post-expected.json +1 -2
  548. package/test/resources/9999999/transactionalSMS/template-expected.amp +1 -1
  549. package/test/resources/9999999/transactionalSMS/template-expected.json +1 -2
  550. package/test/resources/9999999/triggeredSend/build-expected.json +5 -6
  551. package/test/resources/9999999/triggeredSend/get-expected.json +5 -6
  552. package/test/resources/9999999/triggeredSend/get-rcb-id-expected.json +29 -0
  553. package/test/resources/9999999/triggeredSend/get-rcb-key-expected.json +29 -0
  554. package/test/resources/9999999/triggeredSend/get-rcb-name-expected.json +29 -0
  555. package/test/resources/9999999/triggeredSend/patch-expected.json +5 -6
  556. package/test/resources/9999999/triggeredSend/post-expected.json +5 -6
  557. package/test/resources/9999999/triggeredSend/template-expected.json +5 -6
  558. package/test/resources/9999999/triggeredSendDefinition/create-response.xml +6 -1
  559. package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +53 -1
  560. package/test/resources/9999999/triggeredSendDefinition/update-response.xml +6 -1
  561. package/test/resources/9999999/verification/build-expected.json +1 -1
  562. package/test/resources/9999999/verification/get-expected.json +1 -1
  563. package/test/resources/9999999/verification/patch-expected.json +1 -1
  564. package/test/resources/9999999/verification/post-expected.json +1 -1
  565. package/test/resources/9999999/verification/template-expected.json +1 -1
  566. package/test/type.asset.test.js +733 -17
  567. package/test/type.attributeGroup.test.js +6 -2
  568. package/test/type.attributeSet.test.js +6 -2
  569. package/test/type.automation.test.js +174 -162
  570. package/test/type.dataExtension.test.js +41 -45
  571. package/test/type.dataExtract.test.js +22 -29
  572. package/test/type.deliveryProfile.test.js +45 -0
  573. package/test/type.emailSend.test.js +144 -0
  574. package/test/type.event.test.js +62 -0
  575. package/test/type.fileTransfer.test.js +21 -29
  576. package/test/type.importFile.test.js +61 -35
  577. package/test/type.journey.test.js +251 -45
  578. package/test/type.mobileKeyword.test.js +46 -54
  579. package/test/type.mobileMessage.test.js +28 -27
  580. package/test/type.query.test.js +303 -124
  581. package/test/type.script.test.js +288 -69
  582. package/test/type.sendClassification.test.js +156 -0
  583. package/test/type.senderProfile.test.js +254 -0
  584. package/test/type.transactionalEmail.test.js +15 -11
  585. package/test/type.transactionalPush.test.js +15 -11
  586. package/test/type.transactionalSMS.test.js +30 -23
  587. package/test/type.triggeredSend.test.js +130 -17
  588. package/test/type.user.test.js +22 -14
  589. package/test/type.verification.test.js +13 -10
  590. package/test/utils.js +76 -21
  591. package/tsconfig.json +21 -0
  592. package/types/mcdev.d.js +190 -66
  593. package/docs/dist/documentation.md +0 -8878
  594. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_interaction.interaction-meta.json +0 -576
  595. package/test/mockRoot/deploy/testInstance/testBU/journey/testNew_interaction.interaction-meta.json +0 -266
  596. package/test/resources/9999999/interaction/v1/EventDefinitions/get-response.json +0 -43
  597. package/test/resources/9999999/interaction/v1/interactions/233d4413-922c-4568-85a5-e5cc77efc3be/delete-response.json +0 -1
  598. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/get-response.json +0 -592
  599. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/put-response.json +0 -592
  600. package/test/resources/9999999/interaction/v1/interactions/post-response.json +0 -280
  601. package/test/resources/9999999/journey/get-expected.json +0 -576
  602. package/test/resources/9999999/script/get_ampincluded-expected.ssjs +0 -5
package/test/utils.js CHANGED
@@ -36,10 +36,13 @@ export function getActualJson(customerKey, type, buName = 'testBU') {
36
36
  * @param {string} customerKey of metadata
37
37
  * @param {string} type of metadata
38
38
  * @param {string} [buName] used when we need to test on ParentBU
39
- * @returns {string} file path
39
+ * @returns {Promise.<string>} file path
40
40
  */
41
41
  export function getActualDoc(customerKey, type, buName = 'testBU') {
42
- return `./retrieve/testInstance/${buName}/${type}/${customerKey}.${type}-doc.md`;
42
+ return File.readFile(
43
+ `./retrieve/testInstance/${buName}/${type}/${customerKey}.${type}-doc.md`,
44
+ 'utf8'
45
+ );
43
46
  }
44
47
  /**
45
48
  * gets file from Retrieve folder
@@ -47,10 +50,17 @@ export function getActualDoc(customerKey, type, buName = 'testBU') {
47
50
  * @param {string} customerKey of metadata
48
51
  * @param {string} type of metadata
49
52
  * @param {string} ext file extension
50
- * @returns {string} file path
53
+ * @param {string} [buName] used when we need to test on ParentBU
54
+ * @returns {Promise.<string | null>} file in string form, null if not found
51
55
  */
52
- export function getActualFile(customerKey, type, ext) {
53
- return `./retrieve/testInstance/testBU/${type}/${customerKey}.${type}-meta.${ext}`;
56
+ export async function getActualFile(customerKey, type, ext, buName = 'testBU') {
57
+ const path = `./retrieve/testInstance/${buName}/${type}/${customerKey}.${type}-meta.${ext}`;
58
+ try {
59
+ return await File.readFile(path, 'utf8');
60
+ } catch {
61
+ console.log(`File not found: ${path}`); // eslint-disable-line no-console
62
+ return null;
63
+ }
54
64
  }
55
65
  /**
56
66
  * gets file from Deploy folder
@@ -58,7 +68,7 @@ export function getActualFile(customerKey, type, ext) {
58
68
  * @param {string} customerKey of metadata
59
69
  * @param {string} type of metadata
60
70
  * @param {string} [buName] used when we need to test on ParentBU
61
- * @returns {Promise.<string>} file in string form
71
+ * @returns {Promise.<string>} file in JSON form
62
72
  */
63
73
  export function getActualDeployJson(customerKey, type, buName = 'testBU') {
64
74
  return File.readJSON(
@@ -71,17 +81,21 @@ export function getActualDeployJson(customerKey, type, buName = 'testBU') {
71
81
  * @param {string} customerKey of metadata
72
82
  * @param {string} type of metadata
73
83
  * @param {string} ext file extension
74
- * @returns {string} file path
84
+ * @param {string} [buName] used when we need to test on ParentBU
85
+ * @returns {Promise.<string>} file in string form
75
86
  */
76
- export function getActualDeployFile(customerKey, type, ext) {
77
- return `./deploy/testInstance/testBU/${type}/${customerKey}.${type}-meta.${ext}`;
87
+ export function getActualDeployFile(customerKey, type, ext, buName = 'testBU') {
88
+ return File.readFile(
89
+ `./deploy/testInstance/${buName}/${type}/${customerKey}.${type}-meta.${ext}`,
90
+ 'utf8'
91
+ );
78
92
  }
79
93
  /**
80
94
  * gets file from Template folder
81
95
  *
82
96
  * @param {string} customerKey of metadata
83
97
  * @param {string} type of metadata
84
- * @returns {Promise.<string>} file in string form
98
+ * @returns {Promise.<string>} file in JSON form
85
99
  */
86
100
  export function getActualTemplateJson(customerKey, type) {
87
101
  return File.readJSON(`./template/${type}/${customerKey}.${type}-meta.json`);
@@ -92,33 +106,33 @@ export function getActualTemplateJson(customerKey, type) {
92
106
  * @param {string} customerKey of metadata
93
107
  * @param {string} type of metadata
94
108
  * @param {string} ext file extension
95
- * @returns {string} file path
109
+ * @returns {Promise.<string>} file in string form
96
110
  */
97
111
  export function getActualTemplateFile(customerKey, type, ext) {
98
- return `./template/${type}/${customerKey}.${type}-meta.${ext}`;
112
+ return File.readFile(`./template/${type}/${customerKey}.${type}-meta.${ext}`, 'utf8');
99
113
  }
100
114
  /**
101
115
  * gets file from resources folder which should be used for comparison
102
116
  *
103
- * @param {number} mid of Business Unit
117
+ * @param {string} mid of Business Unit
104
118
  * @param {string} type of metadata
105
119
  * @param {string} action of SOAP request
106
- * @returns {Promise.<string>} file in string form
120
+ * @returns {Promise.<string>} file in JSON form
107
121
  */
108
122
  export function getExpectedJson(mid, type, action) {
109
- return File.readJSON(path.join('test', 'resources', mid, type, action + '-expected.json'));
123
+ return File.readJSON(`./test/resources/${mid}/${type}/${action}-expected.json`);
110
124
  }
111
125
  /**
112
126
  * gets file from resources folder which should be used for comparison
113
127
  *
114
- * @param {number} mid of Business Unit
128
+ * @param {string} mid of Business Unit
115
129
  * @param {string} type of metadata
116
130
  * @param {string} action of SOAP request
117
131
  * @param {string} ext file extension
118
- * @returns {string} file path
132
+ * @returns {Promise.<string>} file in string form
119
133
  */
120
134
  export function getExpectedFile(mid, type, action, ext) {
121
- return path.join('test', 'resources', mid, type, action + '-expected.' + ext);
135
+ return File.readFile(`./test/resources/${mid}/${type}/${action}-expected.${ext}`, 'utf8');
122
136
  }
123
137
  /**
124
138
  * setup mocks for API and FS
@@ -127,10 +141,34 @@ export function getExpectedFile(mid, type, action, ext) {
127
141
  * @returns {void}
128
142
  */
129
143
  export function mockSetup(isDeploy) {
144
+ // no need to execute this again if we ran it a 2nd time for deploy - already done in standard setup
130
145
  if (!isDeploy) {
131
- // no need to execute this again - already done in standard setup
132
- handler.setOptions({ debug: true, noLogFile: true });
146
+ // reset all options to default
147
+ handler.setOptions({
148
+ // test config
149
+ debug: true,
150
+ noLogFile: true,
151
+ // reset
152
+ api: undefined,
153
+ keySuffix: undefined,
154
+ changeKeyField: undefined,
155
+ changeKeyValue: undefined,
156
+ commitHistory: undefined,
157
+ errorLog: undefined,
158
+ execute: undefined,
159
+ filter: undefined,
160
+ fixShared: undefined,
161
+ fromRetrieve: undefined,
162
+ json: undefined,
163
+ like: undefined,
164
+ noMidSuffix: undefined,
165
+ refresh: undefined,
166
+ _runningTest: undefined,
167
+ schedule: undefined,
168
+ skipInteraction: undefined,
169
+ });
133
170
  }
171
+ // @ts-expect-error somehow, MockAdapter does not expect type AxiosInstance
134
172
  apimock = new MockAdapter(axiosInstance, { onNoMatch: 'throwException' });
135
173
  // set access_token to mid to allow for autorouting of mock to correct resources
136
174
  apimock.onPost(authResources.success.url).reply((config) => {
@@ -142,6 +180,9 @@ export function mockSetup(isDeploy) {
142
180
  .onAny(new RegExp(`^${escapeRegExp(restUrl)}`))
143
181
  .reply((config) => handleRESTRequest(config));
144
182
  const fsMockConf = {
183
+ '.beautyamp.json': fsmock.load(
184
+ path.resolve(__dirname, '../boilerplate/files/.beautyamp.json')
185
+ ),
145
186
  '.prettierrc': fsmock.load(path.resolve(__dirname, '../boilerplate/files/.prettierrc')),
146
187
  '.eslintrc': fsmock.load(path.resolve(__dirname, '../boilerplate/files/.eslintrc')),
147
188
  '.eslintignore': fsmock.load(path.resolve(__dirname, '../boilerplate/files/.eslintignore')),
@@ -168,6 +209,7 @@ export function mockSetup(isDeploy) {
168
209
  'node_modules/sql-formatter': fsmock.load(
169
210
  path.resolve(__dirname, '../node_modules/sql-formatter')
170
211
  ),
212
+ 'node_modules/jsox': fsmock.load(path.resolve(__dirname, '../node_modules/jsox')),
171
213
  'node_modules/nearley': fsmock.load(path.resolve(__dirname, '../node_modules/nearley')),
172
214
  };
173
215
  if (isDeploy) {
@@ -218,6 +260,19 @@ export function getAPIHistoryLength(includeToken) {
218
260
  export function getAPIHistory() {
219
261
  return apimock.history;
220
262
  }
263
+ /**
264
+ *
265
+ * @param {'patch'|'delete'|'post'|'get'|'put'} method http method
266
+ * @param {string} url url without domain, end on % if you want to search with startsWith()
267
+ * @returns {object} json payload of the request
268
+ */
269
+ export function getRestCallout(method, url) {
270
+ const subset = apimock.history[method];
271
+ const myCallout = subset.find((item) =>
272
+ url.endsWith('%') ? item.url.startsWith(url.slice(0, -1)) : item.url === url
273
+ );
274
+ return JSON.parse(myCallout.data);
275
+ }
221
276
  /**
222
277
  * helper to return most important fields for each api call
223
278
  *
@@ -251,5 +306,5 @@ export function logAPIHistoryDebug() {
251
306
  * @returns {string} escaped string
252
307
  */
253
308
  function escapeRegExp(str) {
254
- return str.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
309
+ return str.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`); // $& means the whole matched string
255
310
  }
package/tsconfig.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ // Change this to match your project
3
+ "include": ["lib/**/*"],
4
+ "compilerOptions": {
5
+ // Tells TypeScript to read JS files, as
6
+ // normally they are ignored as source files
7
+ "allowJs": true,
8
+ // Generate d.ts files
9
+ "declaration": true,
10
+ // This compiler run should
11
+ // only output d.ts files
12
+ "emitDeclarationOnly": true,
13
+ // Types should go into this directory.
14
+ // Removing this would place the .d.ts files
15
+ // next to the .js files
16
+ "outDir": "@types",
17
+ // go to js file when using IDE functions like
18
+ // "Go to Definition" in VSCode
19
+ "declarationMap": true
20
+ }
21
+ }
package/types/mcdev.d.js CHANGED
@@ -1,28 +1,26 @@
1
- import SDK from 'sfmc-sdk';
2
1
  /**
3
- * @ignore
4
2
  * @typedef {object} BuObject
5
- * @property {string} clientId installed package client id
6
- * @property {string} clientSecret installed package client secret
7
- * @property {string} tenant subdomain part of Authentication Base Uri
8
- * @property {string} [eid] Enterprise ID = MID of the parent BU
9
- * @property {string} [mid] MID of the BU to work with
3
+ * @property {string} [clientId] installed package client id
4
+ * @property {string} [clientSecret] installed package client secret
5
+ * @property {string} [tenant] subdomain part of Authentication Base Uri
6
+ * @property {number} [eid] Enterprise ID = MID of the parent BU
7
+ * @property {number} [mid] MID of the BU to work with
10
8
  * @property {string} [businessUnit] name of the BU to interact with
11
9
  * @property {string} [credential] name of the credential to interact with
12
10
  */
13
11
  /**
14
12
  * @typedef {Object.<string, string>} TemplateMap
15
- * @typedef {'accountUser'|'asset'|'asset-archive'|'asset-asset'|'asset-audio'|'asset-block'|'asset-code'|'asset-document'|'asset-image'|'asset-message'|'asset-other'|'asset-rawimage'|'asset-template'|'asset-textfile'|'asset-video'|'attributeGroup'|'automation'|'campaign'|'contentArea'|'dataExtension'|'dataExtensionField'|'dataExtensionTemplate'|'dataExtract'|'dataExtractType'|'discovery'|'email'|'emailSend'|'event'|'fileTransfer'|'filter'|'folder'|'fileLocation'|'importFile'|'interaction'|'list'|'mobileCode'|'mobileKeyword'|'query'|'role'|'script'|'setDefinition'|'triggeredSend'} SupportedMetadataTypes
16
- * @typedef {Object.<SupportedMetadataTypes, string[]>} TypeKeyCombo object-key=metadata type, value=array of external keys
13
+ * @typedef {'asset'|'asset-archive'|'asset-asset'|'asset-audio'|'asset-block'|'asset-code'|'asset-document'|'asset-image'|'asset-message'|'asset-other'|'asset-rawimage'|'asset-template'|'asset-textfile'|'asset-video'|'attributeGroup'|'attributeSet'|'automation'|'campaign'|'contentArea'|'dataExtension'|'dataExtensionField'|'dataExtensionTemplate'|'dataExtract'|'dataExtractType'|'discovery'|'deliveryProfile'|'email'|'emailSend'|'event'|'fileLocation'|'fileTransfer'|'filter'|'folder'|'importFile'|'journey'|'list'|'mobileCode'|'mobileKeyword'|'mobileMessage'|'query'|'role'|'script'|'sendClassification'|'senderProfile'|'transactionalEmail'|'transactionalPush'|'transactionalSMS'|'triggeredSend'|'user'|'verification'} SupportedMetadataTypes
14
+ * @typedef {Object.<string, string[] | null>} TypeKeyCombo object-key=SupportedMetadataTypes, value=array of external keys
17
15
  */
18
16
 
19
17
  /**
20
- * @typedef {Object.<string, any>} MetadataTypeItem
18
+ * @typedef {Object.<any, any>} MetadataTypeItem generic metadata item
21
19
  * @typedef {Object.<string, MetadataTypeItem>} MetadataTypeMap key=customer key
22
20
  * @typedef {Object.<string, MetadataTypeMap>} MultiMetadataTypeMap key=Supported MetadataType
23
21
  * @typedef {Object.<string, MetadataTypeItem[]>} MultiMetadataTypeList key=Supported MetadataType
24
- * @typedef {{metadata: MetadataTypeMap, type: SupportedMetadataTypes}} MetadataTypeMapObj
25
- * @typedef {{metadata: MetadataTypeItem, type: SupportedMetadataTypes}} MetadataTypeItemObj
22
+ * @typedef {{metadata: MetadataTypeMap, type: string}} MetadataTypeMapObj
23
+ * @typedef {{metadata: MetadataTypeItem, type: string}} MetadataTypeItemObj
26
24
  * @typedef {Object.<number, MultiMetadataTypeMap>} Cache key=MID
27
25
  * @typedef {{before: MetadataTypeItem, after: MetadataTypeItem}} MetadataTypeItemDiff used during update
28
26
  */
@@ -46,22 +44,20 @@ import SDK from 'sfmc-sdk';
46
44
  * @property {string} name name
47
45
  * @property {string} key key
48
46
  * @property {string} description -
47
+ * @property {string} [targetId] Object ID of DE (removed before save)
49
48
  * @property {string} targetKey key of target data extension
49
+ * @property {string} r__dataExtension_key key of target data extension
50
50
  * @property {string} createdDate e.g. "2020-09-14T01:42:03.017"
51
51
  * @property {string} modifiedDate e.g. "2020-09-14T01:42:03.017"
52
52
  * @property {'Overwrite'|'Update'|'Append'} targetUpdateTypeName defines how the query writes into the target data extension
53
- * @property {0|1|2} [targetUpdateTypeId] mapped to targetUpdateTypeName via this.definition.targetUpdateTypeMapping
54
- * @property {string} [targetId] Object ID of DE (removed before save)
53
+ * @property {number} [targetUpdateTypeId] 0|1|2, mapped to targetUpdateTypeName via this.definition.targetUpdateTypeMapping
55
54
  * @property {string} [targetDescription] Description DE (removed before save)
56
55
  * @property {boolean} isFrozen looks like this is always set to false
57
56
  * @property {string} [queryText] contains SQL query with line breaks converted to '\n'. The content is extracted during retrieval and written into a separate *.sql file
58
57
  * @property {string} [categoryId] holds folder ID, replaced with r__folder_Path during retrieve
59
58
  * @property {string} r__folder_Path folder path in which this DE is saved
59
+ * @property {string} [queryDefinitionId] Object ID of query
60
60
  * @typedef {Object.<string, QueryItem>} QueryMap
61
- * @typedef {object} CodeExtractItem
62
- * @property {QueryItem} json metadata of one item w/o code
63
- * @property {CodeExtract[]} codeArr list of code snippets in this item
64
- * @property {string[]} subFolder mostly set to null, otherwise list of subfolders
65
61
  */
66
62
  /**
67
63
  * @typedef {object} ScriptItem
@@ -90,10 +86,14 @@ import SDK from 'sfmc-sdk';
90
86
  * @property {string} [Name_new] custom attribute that is only used when trying to rename a field from Name to Name_new
91
87
  * @property {string} DefaultValue empty string for not set
92
88
  * @property {true|false} IsRequired -
89
+ * @property {true|false} [IsNullable] opposite of IsRequired
93
90
  * @property {true|false} IsPrimaryKey -
94
- * @property {string} Ordinal 1, 2, 3, ...
91
+ * @property {number} Ordinal 1, 2, 3, ...
95
92
  * @property {'Text'|'Number'|'Date'|'Boolean'|'Decimal'|'EmailAddress'|'Phone'|'Locale'} FieldType can only be set on create
93
+ * @property {number|string} MaxLength field length
96
94
  * @property {string} Scale the number of places after the decimal that the field can hold; example: "0","1", ...
95
+ */
96
+ /**
97
97
  * @typedef {Object.<string, DataExtensionFieldItem>} DataExtensionFieldMap
98
98
  */
99
99
  /**
@@ -113,13 +113,25 @@ import SDK from 'sfmc-sdk';
113
113
  * @property {'dataextension'|'salesforcedataextension'|'synchronizeddataextension'|'shared_dataextension'|'shared_salesforcedataextension'} r__folder_ContentType retrieved from associated folder
114
114
  * @property {string} r__folder_Path folder path in which this DE is saved
115
115
  * @property {string} [CategoryID] holds folder ID, replaced with r__folder_Path during retrieve
116
- * @property {string} [r__dataExtensionTemplate_Name] name of optionally associated DE template
116
+ * @property {string} [r__dataExtensionTemplate_name] name of optionally associated DE template
117
117
  * @property {object} [Template] -
118
118
  * @property {string} [Template.CustomerKey] key of optionally associated DE teplate
119
+ * @property {string} RetainUntil empty string or US date + 12:00:00 AM
120
+ * @property {string} c__retainUntil YYYY-MM-DD
121
+ * @property {'none'|'allRecordsAndDataextension'|'allRecords'|'individialRecords'} [c__retentionPolicy] readable name of retention policy
122
+ * @property {number} [DataRetentionPeriodLength] number of days/weeks/months/years before retention kicks in
123
+ * @property {number} [DataRetentionPeriodUnitOfMeasure] 3:Days, 4:Weeks, 5:Months, 6:Years
124
+ * @property {string} [c__dataRetentionPeriodUnitOfMeasure] 3:Days, 4:Weeks, 5:Months, 6:Years
125
+ * @property {boolean} [RowBasedRetention] true for retention policy individialRecords
126
+ * @property {boolean} ResetRetentionPeriodOnImport ?
127
+ * @property {boolean} [DeleteAtEndOfRetentionPeriod] true for retention policy allRecords
128
+ */
129
+ /**
119
130
  * @typedef {Object.<string, DataExtensionItem>} DataExtensionMap
120
131
  */
121
132
  /**
122
133
  * @typedef {object} UserDocument
134
+ * @property {'User'|'Installed Package'|'Inactivated User'} TYPE -
123
135
  * @property {string} [ID] equal to UserID; optional in update/create calls
124
136
  * @property {string} UserID equal to ID; required in update/create calls
125
137
  * @property {number} [AccountUserID] user.AccountUserID
@@ -131,7 +143,7 @@ import SDK from 'sfmc-sdk';
131
143
  * @property {boolean} ActiveFlag user.ActiveFlag === true ? '✓' : '-'
132
144
  * @property {boolean} IsAPIUser user.IsAPIUser === true ? '✓' : '-'
133
145
  * @property {boolean} MustChangePassword user.MustChangePassword === true ? '✓' : '-'
134
- * @property {number} DefaultBusinessUnit defaultBUName
146
+ * @property {number} DefaultBusinessUnit default MID; BUName after we resolved it
135
147
  * @property {number[]} c__AssociatedBusinessUnits associatedBus
136
148
  * @property {object} [Roles] (API only)
137
149
  * @property {object[]} [Roles.Role] roles (API only)
@@ -142,27 +154,39 @@ import SDK from 'sfmc-sdk';
142
154
  * @property {string} ModifiedDate user.ModifiedDate
143
155
  * @property {object} Client -
144
156
  * @property {number} [Client.ID] EID e.g:7281698
145
- * @property {number} Client.ModifiedBy AccountUserID of user who last modified this user
157
+ * @property {number} [Client.ModifiedBy] AccountUserID of user who last modified this user
146
158
  * @property {'User'|'Installed Package'} c__type -
147
- * @property {boolean} [IsLocked] (API only)
159
+ * @property {boolean|string} [IsLocked] (API only)
148
160
  * @property {boolean} [Unlock] used to unlock a user that has IsLocked === true
149
161
  * @property {boolean} c__IsLocked_readOnly copy of IsLocked
150
162
  * @property {string} c__TimeZoneName name of timezone
151
163
  * @property {object} [TimeZone] (API only)
152
164
  * @property {string} [TimeZone.Name] (API only)
153
165
  * @property {string} [TimeZone.ID] (API only)
166
+ * @property {string} [Password] only used to set the password. cannot be retrieved
154
167
  * @property {'en-US'|'fr-CA'|'fr-FR'|'de-DE'|'it-IT'|'ja-JP'|'pt-BR'|'es-419'|'es-ES'} c__LocaleCode fr-CA, en-US, ...
155
168
  * @property {object} [Locale] (API only)
156
169
  * @property {'en-US'|'fr-CA'|'fr-FR'|'de-DE'|'it-IT'|'ja-JP'|'pt-BR'|'es-419'|'es-ES'} [Locale.LocaleCode] (API only)
170
+ * @property {object} [SsoIdentity] -
171
+ * @property {Array|object} [SsoIdentities] -
172
+ */
173
+ /**
157
174
  * @typedef {{before:UserDocument,after:UserDocument}} UserDocumentDiff
158
175
  * @typedef {Object.<string, UserDocument>} UserDocumentMap key=customer key
159
176
  */
177
+ /**
178
+ * @typedef {UserDocument & object} UserDocumentDocument
179
+ * @property {boolean | string} ActiveFlag user.ActiveFlag === true ? '✓' : '-'
180
+ * @property {boolean | string} IsAPIUser user.IsAPIUser === true ? '✓' : '-'
181
+ * @property {boolean | string} MustChangePassword user.MustChangePassword === true ? '✓' : '-'
182
+ * @property {number | string} DefaultBusinessUnit default MID; BUName after we resolved it
183
+ */
160
184
  /**
161
185
  * @typedef {object} AccountUserConfiguration
162
186
  * @property {object} Client wrapper
163
187
  * @property {number} Client.ID EID e.g:7281698
164
188
  * @property {string} [PartnerKey] empty string
165
- * @property {number} ID User ID e.g:717133502
189
+ * @property {number | string} ID User ID e.g:717133502
166
190
  * @property {string} [ObjectID] empty string
167
191
  * @property {number} [Delete] 0,1
168
192
  * @property {BusinessUnitAssignmentConfiguration} BusinessUnitAssignmentConfiguration -
@@ -174,8 +198,9 @@ import SDK from 'sfmc-sdk';
174
198
 
175
199
  /**
176
200
  * @typedef {object} AutomationActivity
177
- * @property {string} name name (not key) of activity
178
- * @property {string} [objectTypeId] Id of assoicated activity type; see this.definition.activityTypeMapping
201
+ * @property {string} r__key key of associated activity
202
+ * @property {string} [name] name (not key) of associated activity
203
+ * @property {number} [objectTypeId] Id of assoicated activity type; see this.definition.activityTypeMapping
179
204
  * @property {string} [activityObjectId] Object Id of assoicated metadata item
180
205
  * @property {number} [displayOrder] order within step; starts with 1 or higher number
181
206
  * @property {string} r__type see this.definition.activityTypeMapping
@@ -190,17 +215,23 @@ import SDK from 'sfmc-sdk';
190
215
  */
191
216
  /**
192
217
  * @typedef {object} AutomationSchedule REST format
193
- * @property {number} typeId ?
218
+ * @property {number} typeId equals schedule.scheduleTypeId; upsert endpoint requires scheduleTypeId. retrieve endpoint returns typeId
219
+ * @property {number} [scheduleTypeId] equals schedule.typeId; upsert endpoint requires scheduleTypeId. retrieve endpoint returns typeId
194
220
  * @property {string} startDate example: '2021-05-07T09:00:00'
195
221
  * @property {string} endDate example: '2021-05-07T09:00:00'
196
222
  * @property {string} icalRecur example: 'FREQ=DAILY;UNTIL=20790606T160000;INTERVAL=1'
197
223
  * @property {string} timezoneName example: 'W. Europe Standard Time'; see this.definition.timeZoneMapping
198
224
  * @property {number} [timezoneId] see this.definition.timeZoneMapping
225
+ * @property {number} [rangeTypeId] ?
226
+ * @property {any} [pattern] ?
227
+ * @property {any} [scheduledTime] ?
228
+ * @property {string} [scheduledStatus] ?
199
229
  */
200
230
  /**
201
231
  * @typedef {object} AutomationScheduleSoap SOAP format
232
+ * @property {string} [RecurrenceType] 'Minutely'|'Hourly'|'Daily'|'Weekly'|'Monthly'|'Yearly'
202
233
  * @property {object} Recurrence -
203
- * @property {object} Recurrence.$ {'xsi:type': keyStem + 'lyRecurrence'}
234
+ * @property {object} [Recurrence.$] {'xsi:type': keyStem + 'lyRecurrence'}
204
235
  * @property {'ByYear'} [Recurrence.YearlyRecurrencePatternType] * currently not supported by tool *
205
236
  * @property {'ByMonth'} [Recurrence.MonthlyRecurrencePatternType] * currently not supported by tool *
206
237
  * @property {'ByWeek'} [Recurrence.WeeklyRecurrencePatternType] * currently not supported by tool *
@@ -213,24 +244,32 @@ import SDK from 'sfmc-sdk';
213
244
  * @property {number} [Recurrence.DayInterval] 1..n
214
245
  * @property {number} [Recurrence.HourInterval] 1..n
215
246
  * @property {number} [Recurrence.MinuteInterval] 1..n
216
- * @property {number} _interval internal variable for CLI output only
247
+ * @property {number} [_interval] internal variable for CLI output only
217
248
  * @property {object} TimeZone -
218
249
  * @property {number} TimeZone.ID AutomationSchedule.timezoneId
219
- * @property {string} _timezoneString internal variable for CLI output only
250
+ * @property {true} [TimeZone.IDSpecified] always true
251
+ * @property {string} [_timezoneString] internal variable for CLI output only
220
252
  * @property {string} StartDateTime AutomationSchedule.startDate
221
- * @property {string} EndDateTime AutomationSchedule.endDate
222
- * @property {string} _StartDateTime AutomationSchedule.startDate; internal variable for CLI output only
253
+ * @property {string} [_StartDateTime] AutomationSchedule.startDate; internal variable for CLI output only
254
+ * @property {string} [EndDateTime] AutomationSchedule.endDate
223
255
  * @property {'EndOn'|'EndAfter'} RecurrenceRangeType set to 'EndOn' if AutomationSchedule.icalRecur contains 'UNTIL'; otherwise to 'EndAfter'
224
- * @property {number} Occurrences only exists if RecurrenceRangeType=='EndAfter'
256
+ * @property {number} [Occurrences] only exists if RecurrenceRangeType=='EndAfter'
225
257
  */
226
258
  /**
227
259
  * @typedef {object} AutomationItem
228
- * @property {string} [id] Object Id
229
- * @property {string} key key
230
- * @property {string} name name
231
- * @property {string} description -
232
- * @property {'scheduled'|'triggered'} type Starting Source = Schedule / File Drop
233
- * @property {'Scheduled'|'Running'|'Ready'|'Building'|'PausedSchedule'|'InactiveTrigger'} status -
260
+ * @property {string} id Object Id
261
+ * @property {string} [legacyId] legacy Object Id - used for handling notifications
262
+ * @property {string} [ObjectID] Object Id as returned by SOAP API
263
+ * @property {string} [programId] legacy id
264
+ * @property {string} key key (Rest API)
265
+ * @property {string} [CustomerKey] key (SOAP API)
266
+ * @property {string} [name] name (Rest API)
267
+ * @property {string} [Name] name (SOAP API)
268
+ * @property {any} [notifications] notifications
269
+ * @property {string} [description] -
270
+ * @property {'scheduled'|'triggered'} [type] Starting Source = Schedule / File Drop
271
+ * @property {'Scheduled'|'Running'|'Ready'|'Building'|'PausedSchedule'|'InactiveTrigger'} [status] automation status
272
+ * @property {number} [statusId] automation status
234
273
  * @property {AutomationSchedule} [schedule] only existing if type=scheduled
235
274
  * @property {object} [fileTrigger] only existing if type=triggered
236
275
  * @property {string} fileTrigger.fileNamingPattern file name with placeholders
@@ -242,13 +281,13 @@ import SDK from 'sfmc-sdk';
242
281
  * @property {object} [startSource] -
243
282
  * @property {AutomationSchedule} [startSource.schedule] rewritten to AutomationItem.schedule
244
283
  * @property {object} [startSource.fileDrop] rewritten to AutomationItem.fileTrigger
245
- * @property {string} startSource.fileDrop.fileNamingPattern file name with placeholders
246
- * @property {string} startSource.fileDrop.fileNamePatternTypeId -
284
+ * @property {string} startSource.fileDrop.fileNamePattern file name with placeholders
285
+ * @property {number} startSource.fileDrop.fileNamePatternTypeId -
247
286
  * @property {string} startSource.fileDrop.folderLocation -
248
287
  * @property {boolean} startSource.fileDrop.queueFiles -
249
288
  * @property {number} startSource.typeId -
250
- * @property {AutomationStep[]} steps -
251
- * @property {string} r__folder_Path folder path
289
+ * @property {AutomationStep[]} [steps] -
290
+ * @property {string} [r__folder_Path] folder path
252
291
  * @property {string} [categoryId] holds folder ID, replaced with r__folder_Path during retrieve
253
292
  */
254
293
  /**
@@ -262,14 +301,15 @@ import SDK from 'sfmc-sdk';
262
301
  * @property {string} notificationEmailAddress email address to send notification to; empty string if shouldEmailOnFailure=false
263
302
  * @property {string} notificationEmailMessage email message to send; empty string if shouldEmailOnFailure=false
264
303
  * @property {number} createdBy user id of creator
265
- * @property {string} r__dataExtension_CustomerKey key of target data extension
304
+ * @property {string} [targetObjectId] ObjectID of target data extension
305
+ * @property {string} r__dataExtension_key key of target data extension
266
306
  */
267
307
 
268
308
  /**
269
309
  * @typedef {Object.<string, AutomationItem>} AutomationMap
270
310
  * @typedef {{metadata:AutomationMap,type:string}} AutomationMapObj
271
- * @typedef {{metadata:AutomationItem,type:string}} AutomationItemObj
272
- * @typedef {object} DeltaPkgItem
311
+ * @typedef {{metadata:object | AutomationItem,type:string}} AutomationItemObj
312
+ * @typedef {object} McdevDeltaPkgItem
273
313
  * @property {string} file relative path to file
274
314
  * @property {number} changes changed lines
275
315
  * @property {number} insertions added lines
@@ -277,23 +317,39 @@ import SDK from 'sfmc-sdk';
277
317
  * @property {boolean} binary is a binary file
278
318
  * @property {boolean} moved git thinks this file was moved
279
319
  * @property {string} [fromPath] git thinks this relative path is where the file was before
280
- * @property {SupportedMetadataTypes} type metadata type
320
+ * @property {string} type metadata type
281
321
  * @property {string} externalKey key
282
322
  * @property {string} name name
283
323
  * @property {'move'|'add/update'|'delete'} gitAction what git recognized as an action
284
324
  * @property {string} _credential mcdev credential name
285
325
  * @property {string} _businessUnit mcdev business unit name inside of _credential
286
- * @typedef {SDK} SDK
326
+ * @typedef {import('simple-git').DiffResultTextFile & McdevDeltaPkgItem} DeltaPkgItem
327
+ */
328
+ /**
329
+ * @typedef {import('sfmc-sdk/auth').default} SDKauth
330
+ * @typedef {import('sfmc-sdk/rest').default} SDKrest
331
+ * @typedef {import('sfmc-sdk/soap').default} SDKsoap
332
+ * @typedef {import('sfmc-sdk/util').RestError} RestError
333
+ * @typedef {import('sfmc-sdk/util').SOAPError} SOAPError
334
+ * @typedef {SOAPError & RestError} SDKError
335
+ * @typedef {object} SDK
336
+ * @property {SDKauth} auth SDKauth
337
+ * @property {SDKrest} rest SDKrest
338
+ * @property {SDKsoap} soap SDKsoap
287
339
  */
288
340
 
289
341
  /**
290
- * @typedef {object} skipInteraction signals what to insert automatically for things usually asked via wizard
291
- * @property {string} client_id client id of installed package
292
- * @property {string} client_secret client secret of installed package
293
- * @property {string} auth_url tenant specific auth url of installed package
294
- * @property {number} account_id MID of the Parent Business Unit
295
- * @property {string} credentialName how you would like the credential to be named
296
- * @property {string} gitRemoteUrl URL of Git remote server
342
+ * @typedef {object} SkipInteraction signals what to insert automatically for things usually asked via wizard
343
+ * @property {string} [client_id] client id of installed package
344
+ * @property {string} [client_secret] client secret of installed package
345
+ * @property {string} [auth_url] tenant specific auth url of installed package
346
+ * @property {number} [account_id] MID of the Parent Business Unit
347
+ * @property {string} [credentialName] how you would like the credential to be named
348
+ * @property {string} [gitRemoteUrl] URL of Git remote server
349
+ * @property {boolean} [fixKeysReretrieve] will trigger re-downloading latest versions of dependent types after fixing keys
350
+ * @property {string} [gitPush] used by mcdev init to directly push to a remote
351
+ * @property {string} [developmentBu] used by mcdev init to directly push to a remote
352
+ * @property {string} [downloadBUs] used by mcdev init to directly push to a remote
297
353
  */
298
354
 
299
355
  /**
@@ -308,14 +364,62 @@ import SDK from 'sfmc-sdk';
308
364
  * @typedef {object} SoapRequestParams
309
365
  * @property {string} [continueRequest] request id
310
366
  * @property {object} [options] additional options (CallsInConversation, Client, ConversationID, Priority, RequestType, SaveOptions, ScheduledTime, SendResponseTo, SequenceCode)
311
- * @property {*} clientIDs ?
312
- * @property {SoapFilter} [filter] simple or complex
367
+ * @property {*} [clientIDs] ?
368
+ * @property {SoapSDKFilter} [filter] simple or complex
313
369
  complex
314
370
  * @property {boolean} [QueryAllAccounts] all BUs or just one
315
- * @typedef {object} SoapFilter
316
- * @property {string|SoapFilter} leftOperand string for simple or a new filter-object for complex
317
- * @property {'AND'|'OR'|'equals'|'notEquals'|'isNull'|'isNotNull'|'greaterThan'|'lessThan'|'greaterThanOrEqual'|'lessThanOrEqual'|'between'|'IN'|'like'} operator various options
318
- * @property {string|number|boolean|Array|SoapFilter} [rightOperand] string for simple or a new filter-object for complex; omit for isNull and isNotNull
371
+ */
372
+ /**
373
+ * @typedef {object} SoapFilterSimple
374
+ * @property {string} property field
375
+ * @property {'equals'|'notEquals'|'isNull'|'isNotNull'|'greaterThan'|'lessThan'|'greaterThanOrEqual'|'lessThanOrEqual'|'between'|'IN'|'in'|'like'} simpleOperator various options
376
+ * @property {string | number | boolean | string[] | number[]} [value] field value
377
+ */
378
+ /**
379
+ * @typedef {object} SoapFilterComplex
380
+ * @property {SoapSDKFilter} leftOperand string for simple or a new filter-object for complex
381
+ * @property {'AND'|'OR'} logicalOperator various options
382
+ * @property {SoapSDKFilter} rightOperand string for simple or a new filter-object for complex; omit for isNull and isNotNull
383
+ */
384
+ /**
385
+ * @typedef {object} SoapSDKFilterSimple
386
+ * @property {SoapFilterSimple["property"]} leftOperand string for simple or a new filter-object for complex
387
+ * @property {SoapFilterSimple["simpleOperator"]} operator various options
388
+ * @property {SoapFilterSimple["value"]} [rightOperand] string for simple or a new filter-object for complex; omit for isNull and isNotNull
389
+ */
390
+ /**
391
+ * @typedef {object} SoapSDKFilterComplex
392
+ * @property {SoapFilterComplex["leftOperand"]} leftOperand string for simple or a new filter-object for complex
393
+ * @property {SoapFilterComplex["logicalOperator"]} operator various options
394
+ * @property {SoapFilterComplex["rightOperand"]} rightOperand string for simple or a new filter-object for complex; omit for isNull and isNotNull
395
+ */
396
+ /**
397
+ * @typedef {SoapSDKFilterSimple | SoapSDKFilterComplex} SoapSDKFilter
398
+ */
399
+
400
+ /**
401
+ * @typedef {object} AssetRequestParams
402
+ * @property {string} [continueRequest] request id
403
+ * @property {object} [options] additional options (CallsInConversation, Client, ConversationID, Priority, RequestType, SaveOptions, ScheduledTime, SendResponseTo, SequenceCode)
404
+ * @property {*} [clientIDs] ?
405
+ complex
406
+ * @property {object} [page] pagination
407
+ * @property {string[]} [fields] list of fields we want returned
408
+ * @property {{property:string, direction: 'ASC'|'DESC'}[]} [sort] pagination
409
+ * @property {AssetFilter | AssetFilterSimple} [query] simple or complex filter
410
+ */
411
+
412
+ /**
413
+ * @typedef {object} AssetFilter
414
+ * @property {AssetFilter | AssetFilterSimple} leftOperand string for simple or a new filter-object for complex
415
+ * @property {'AND'|'OR'} logicalOperator various options
416
+ * @property {SoapSDKFilter | AssetFilterSimple} [rightOperand] string for simple or a new filter-object for complex; omit for isNull and isNotNull
417
+ */
418
+ /**
419
+ * @typedef {object} AssetFilterSimple
420
+ * @property {string} property field
421
+ * @property {'equal'|'notEquals'|'isNull'|'isNotNull'|'greaterThan'|'lessThan'|'greaterThanOrEqual'|'lessThanOrEqual'|'between'|'IN'|'in'|'like'} simpleOperator various options
422
+ * @property {string | number | boolean | Array} value field value
319
423
  */
320
424
 
321
425
  /**
@@ -338,13 +442,33 @@ complex
338
442
  */
339
443
 
340
444
  /**
341
- * @typedef {object} Logger
342
- * @property {Function} info (msg) print info message
343
- * @property {Function} warn (msg) print warning message
344
- * @property {Function} verbose (msg) additional messages that are not important
345
- * @property {Function} debug (msg) print debug message
445
+ * @typedef {'error'|'verbose'|'info'|'debug'} LoggerLevel
446
+ * @typedef {object} McdevLogger
447
+ * @property {LoggerLevel} [level] (msg) print info message
346
448
  * @property {Function} error (msg) print error message
347
449
  * @property {Function} errorStack (ex, msg) print error with trace message
450
+ * @typedef {import('winston').Logger & McdevLogger} Logger
451
+ */
452
+ /**
453
+ * @typedef {{id: number, key: string, name: string}} AssetItemSimple
454
+ * @typedef {Object.<string, AssetItemSimple>} AssetItemSimpleMap
455
+ * @typedef {Object.<number, AssetItemSimple>} AssetItemIdSimpleMap
456
+ * @typedef {'id'|'key'|'name'} ContentBlockConversionTypes
457
+ */
458
+ /**
459
+ * @typedef {object} ExplainType
460
+ * @property {string} name readable name of type
461
+ * @property {string} apiName api parameter name for type
462
+ * @property {string} description more info on what this type is about
463
+ * @property {boolean | string[]} retrieveByDefault is it retrieved by default OR list of subtypes that are retrieved by default
464
+ * @property {object} supports supported features
465
+ * @property {boolean} supports.retrieve can you download this type
466
+ * @property {boolean} supports.create can you create new records of this type
467
+ * @property {boolean} supports.update can you update records of this type
468
+ * @property {boolean} supports.delete can you delete records of this type
469
+ * @property {boolean} supports.changeKey can you change the key of existing records of this type
470
+ * @property {boolean} supports.buildTemplate can you apply templating on downloaded records of this type
471
+ * @property {boolean} supports.retrieveAsTemplate can you retrieve & template in one step
348
472
  */
349
473
 
350
474
  export default {};